refactor(service): 优化设备交付服务中的日志处理逻辑
- 移除未使用的 ICsTerminalLogsService 依赖注入 - 删除前置推送日志的清理代码,简化设备删除流程 - 在创建操作日志时添加UUID标识符 - 在终端日志服务中增加Redis缓存清理逻辑 - 为设备列表处理添加空值检查,避免空指针异常 - 重构设备分组和消息发送逻辑,提高代码可读性
This commit is contained in:
@@ -9,6 +9,7 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.text.StrPool;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@@ -111,7 +112,6 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
|
||||
private final ICsCommunicateService csCommunicateService;
|
||||
private final ICsUserPinsService csUserPinsService;
|
||||
private final EventUserFeignClient eventUserFeignClient;
|
||||
private final ICsTerminalLogsService csTerminalLogsService;
|
||||
|
||||
@Override
|
||||
public void refreshDeviceDataCache() {
|
||||
@@ -927,16 +927,12 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
|
||||
csLedgerLambdaQueryWrapper.eq(CsLedger::getPid,id);
|
||||
csLedgerService.remove(csLedgerLambdaQueryWrapper);
|
||||
csDevModelRelationService.lambdaUpdate().eq(CsDevModelRelationPO::getDevId,id).set(CsDevModelRelationPO::getStatus,0).update();
|
||||
//删除前置推送日志
|
||||
LambdaQueryWrapper<CsTerminalLogs> queryWrap = new LambdaQueryWrapper<>();
|
||||
queryWrap.eq(CsTerminalLogs::getDeviceId,id);
|
||||
csTerminalLogsService.remove(queryWrap);
|
||||
|
||||
if (update) {
|
||||
refreshDeviceDataCache();
|
||||
}
|
||||
//新增操作日志
|
||||
CsTerminalLogs csTerminalLogs = new CsTerminalLogs();
|
||||
csTerminalLogs.setId(IdUtil.simpleUUID());
|
||||
csTerminalLogs.setDeviceId(id);
|
||||
csTerminalLogs.setOperateType(2);
|
||||
csTerminalLogs.setIsPush(0);
|
||||
|
||||
@@ -66,6 +66,8 @@ public class CsTerminalLogsServiceImpl extends ServiceImpl<CsTerminalLogsMapper,
|
||||
wrapper.eq(CsTerminalLogs::getIsPush, 0);
|
||||
List<CsTerminalLogs> list = this.list(wrapper);
|
||||
if (CollectionUtil.isNotEmpty(list)) {
|
||||
//先清空缓存
|
||||
redisUtil.delete(RequestUtil.getUserIndex()+"reply");
|
||||
//新增台账集合
|
||||
List<String> addList = new ArrayList<>();
|
||||
//修改台账集合
|
||||
@@ -97,42 +99,44 @@ public class CsTerminalLogsServiceImpl extends ServiceImpl<CsTerminalLogsMapper,
|
||||
});
|
||||
//整合后 所有设备的id
|
||||
List<String> devList = Stream.of(addList, updateList, deleteList).flatMap(List::stream).collect(Collectors.toList());
|
||||
//获取设备集合
|
||||
List<CsEquipmentDeliveryPO> deviceList = csEquipmentDeliveryService.listByIds(devList);
|
||||
//按照前置机id分组
|
||||
Map<String,List<CsEquipmentDeliveryPO>> nodeMap = deviceList.stream().collect(Collectors.groupingBy(CsEquipmentDeliveryPO::getNodeId));
|
||||
nodeMap.forEach((k,v)->{
|
||||
int maxProcessNum = nodeService.getNodeById(k).getMaxProcessNum();
|
||||
//按照进程号分组
|
||||
Map<Integer,List<CsEquipmentDeliveryPO>> nodeProcessMap = v.stream().collect(Collectors.groupingBy(CsEquipmentDeliveryPO::getNodeProcess));
|
||||
nodeProcessMap.forEach((k1,v1)->{
|
||||
if (v1.size() > 10) {
|
||||
//一个进程下修改的设备数量超过10台,重启该进程号下的前置
|
||||
CldControlMessage cldControlMessage = new CldControlMessage();
|
||||
cldControlMessage.setGuid(IdUtil.simpleUUID());
|
||||
cldControlMessage.setCode("set_process");
|
||||
cldControlMessage.setProcessNo(k1);
|
||||
cldControlMessage.setFun("delete");
|
||||
cldControlMessage.setProcessNum(maxProcessNum);
|
||||
controlMessageTemplate.sendMember(cldControlMessage,k);
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(devList)) {
|
||||
//获取设备集合
|
||||
List<CsEquipmentDeliveryPO> deviceList = csEquipmentDeliveryService.listByIds(devList);
|
||||
//按照前置机id分组
|
||||
Map<String,List<CsEquipmentDeliveryPO>> nodeMap = deviceList.stream().collect(Collectors.groupingBy(CsEquipmentDeliveryPO::getNodeId));
|
||||
nodeMap.forEach((k,v)->{
|
||||
int maxProcessNum = nodeService.getNodeById(k).getMaxProcessNum();
|
||||
//按照进程号分组
|
||||
Map<Integer,List<CsEquipmentDeliveryPO>> nodeProcessMap = v.stream().collect(Collectors.groupingBy(CsEquipmentDeliveryPO::getNodeProcess));
|
||||
nodeProcessMap.forEach((k1,v1)->{
|
||||
if (v1.size() > 10) {
|
||||
//一个进程下修改的设备数量超过10台,重启该进程号下的前置
|
||||
CldControlMessage cldControlMessage = new CldControlMessage();
|
||||
cldControlMessage.setGuid(IdUtil.simpleUUID());
|
||||
cldControlMessage.setCode("set_process");
|
||||
cldControlMessage.setProcessNo(k1);
|
||||
cldControlMessage.setFun("delete");
|
||||
cldControlMessage.setProcessNum(maxProcessNum);
|
||||
controlMessageTemplate.sendMember(cldControlMessage,k);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
if (CollectionUtil.isNotEmpty(addList)) {
|
||||
sendMessage(addList, deviceList, "add_terminal");
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(updateList)) {
|
||||
sendMessage(updateList, deviceList, "ledger_modify");
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(deleteList)) {
|
||||
sendDeleteMessage(deleteList, list, "delete_terminal");
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(addList)) {
|
||||
sendMessage(addList, deviceList, "add_terminal");
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(updateList)) {
|
||||
sendMessage(updateList, deviceList, "ledger_modify");
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(deleteList)) {
|
||||
sendDeleteMessage(deleteList, list, "delete_terminal");
|
||||
}
|
||||
|
||||
//推送完将数据改成推送
|
||||
LambdaUpdateWrapper<CsTerminalLogs> wrapper2 = new LambdaUpdateWrapper<>();
|
||||
wrapper2.set(CsTerminalLogs::getIsPush, 1);
|
||||
this.update(wrapper2);
|
||||
//推送完将数据改成推送
|
||||
LambdaUpdateWrapper<CsTerminalLogs> wrapper2 = new LambdaUpdateWrapper<>();
|
||||
wrapper2.set(CsTerminalLogs::getIsPush, 1);
|
||||
this.update(wrapper2);
|
||||
}
|
||||
} else {
|
||||
return "暂无需要推送的数据";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user