10.20 个人第一次复盘项目
-
项目背景
项目初始阶段,预防后期新增不同类型场景,限定了页面的格式并且将每个都进行了路由限定,以此限定场景 -
项目改变
项目在原有的场景下,新增了4个其他场景,并且该场景在业务上做到了3级联动,因此添加场景之后,将有不同的场景类型以及场景等级不同,因此之前设计需要修改。除此之外,左侧的树状列表中的数据不同重点场景 数据量不同。 -
预设方案
(1)左侧树状列表:由于之前已经预判到了场景的改变,因此,左侧树状列表只需要传入不同的是路由名称就可根据路由名称进行不同场景的数据展示。问题所在:在数据缓存表中无该场景的数据,数据是由聚合服务写入,在聚合服务中,当时无该新增的4场景,只有一个场景,因此场景是写死的,需要对聚合服务做调整,具体调整后期再说。
(2)左侧接入数据:该部分数据当时只有一个场景,在多场景下,无该场景的数据时 sql中的SUM(字段)返回的是NULL,因此报500空指针错误。解决方法:对sum求和的字段在SQL中做处理,使用IFNULL(SUM(字段),0)函数做处理,这样当sum求和的字段为null时,则返回为0,符合业务要求。
(3)右侧数据饼图柱状图联动效果:
预设方案一:将不同场景的不同类型与等级写入枚举类,进行挨个if判断,做符合业务要求的计算。
预设方案二:将不同的场景的类型与等级建数据表,从数据表中读出数据,进行不同类型的查找与计算。
预设方案二中的实现方法:在Java中进行for循环实现;在SQL中进行实现 -
实现方案
(1)左侧树状列表 根据预设方案完美实现
(2)右侧数据饼图柱状图联动:预设方案一,如果以后场景持续增加,那么每次都需要在枚举中添加场景类型以及场景等级,每次修改了枚举中则需要增加字段,首先都需要打包部署,其次,代码中需要对不同的场景跟类型及等级做判断 并求不同的值,代码冗余量太大,因此选择预设方案二。
(3)预设方案二中有两种方法,由于偷懒少些代码,选择了sql实现
在实现sql中,在左联中,count(字段A) 需要对字段A进行选择时,出了问题,字段A是需要求数的那个表中的字段,而不是主表左联中的字段。
实现sql语句
SELECT
A.router_code AS router_code,
A.community_type AS community_type,
community_type_name,
community_code,
police_code,
COUNT( t_c.community_type )
FROM
A
LEFT JOIN ( SELECT police_station_code AS police_code, community_code, community_type, router_code FROM B WHERE police_station_code = 11 AND community_code = 1005 ) AS t_c ON A.community_type = t_c.community_type
WHERE
A.router_code = "KeyUnits"
GROUP BY
A.community_type