代码优化始于界面新功能的增设,也就是在原有的下拉框增加几个选项,来切换显示页面。
一开始是以有多少个新增显示页面就创建多少个枚举类,这样就造成了代码冗长 if else很多,为此使用一个枚举类来为多个新增页面使用。以此不管有多少个都可以应对。
public Map<String, Integer> peopleStat(Integer tunnelId) {
Map<String,Integer> map = new LinkedHashMap<>(8);
//按隧道类型区分模块
BizTunnel tunnel = tunnelMapper.selectById(tunnelId);
//redis内取对应key值
Set<String> keys1 = redisUtil.keys(RedisKeyCategory.CURRENT.getKey() + RedisKeys.personLocation.getKey() + tunnelId);
int TotalPDX = 0,TotalPDD=0;
int dongk=0,erc=0,zhangzm=0;//用于计数
//每种隧道的两种类型设初值
for (Normally normal : Normally.values()) {
for (Position position : Position.values()) {
map.put(normal.getKey() + "_" + position.getKey(), 0);
}
}
for (Normally normal: Normally.values()) {
for (String key : keys1) {
//获取缓存值
PersonLocationData data = (PersonLocationData) redisUtil.get(key);
String k = normal.getKey() + "_" + data.getPosition();//与上面的map键对应
if (ToolUtil.isNotEmpty(data)) {
if (data.getDuan().equals(normal.getKey())) {
TotalPDX++;
} else {
TotalPDD++;
}
if(data.getPosition().equals(Position.DONGK.getKey()))
{
map.put(k,dongk++);
}
else if(data.getPosition().equals(Position.ERC.getKey())){
map.put(k,erc++);
}
else
map.put(k,zhangzm++);
}
}
}
if(tunnel.getName().equals("隧道主洞")||tunnel.getName().equals("隧道...")){
//类型一总数
map.put("enter_total", TotalPDX);
//类型二总数
map.put("exit_total", TotalPDD);
}
else
map.put("Total_people",TotalPDD+TotalPDX);
return map;
}
public Map<String, Object> peopleStatGraph(Integer tunnelId) {
Map<String, Integer> statMap = peopleStat(tunnelId);
BizTunnel tunnel=tunnelMapper.selectById(tunnelId);
Map<String, Object> res = new LinkedHashMap<>(3);
//横坐标 两端各三个区域
List<String> xAxis = new ArrayList();
//纵坐标 六个区域的人数 分两种类型
List<Integer> values = new ArrayList<>();
for (Normally normal: Normally.values()) {
for (Position position : Position.values()) {
//添加横坐标
xAxis.add(tunnel.getName()+normal.getValue()+ position.getValue());
//添加纵坐标
Integer count = statMap.get(normal.getKey() + "_" + position.getKey());
values.add(count == null ? 0 : count);
}
}
res.put("alarm", 0);
res.put("xAxis", xAxis);
res.put("values", values);
return res;
}
}
以上是利用map键值对分类进行计数 能更好的配合前端进行坐标图的绘画。