治理设备新增功能

This commit is contained in:
xy
2025-07-03 08:59:57 +08:00
parent 28b23e9c52
commit 0b32c09fdb
17 changed files with 327 additions and 31 deletions

View File

@@ -0,0 +1,52 @@
package com.njcn.access.controller;
import com.njcn.access.pojo.po.CsLineRunData;
import com.njcn.access.service.ICsLineRunDataService;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* <p>
* 治理设备模块运行状态记录表 前端控制器
* </p>
*
* @author xy
* @since 2025-06-26
*/
@RestController
@RequestMapping("/csLineRunData")
@Slf4j
@Api(tags = "治理设备数据运行记录")
@AllArgsConstructor
public class CsLineRunDataController extends BaseController {
private final ICsLineRunDataService csLineRunDataService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/add")
@ApiOperation("新增数据")
@ApiImplicitParam(name = "list", value = "参数", required = true)
public HttpResult<String> addData(@RequestBody @Validated List<CsLineRunData> list){
String methodDescribe = getMethodDescribe("addData");
csLineRunDataService.addData(list);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
}

View File

@@ -1,6 +1,7 @@
package com.njcn.access.handler;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.util.IdUtil;
import com.alibaba.csp.sentinel.util.StringUtil;
import com.alibaba.excel.util.CollectionUtils;
@@ -20,7 +21,6 @@ import com.njcn.access.pojo.dto.*;
import com.njcn.access.pojo.dto.file.FileDto;
import com.njcn.access.pojo.dto.file.FileRedisDto;
import com.njcn.access.pojo.param.ReqAndResParam;
import com.njcn.access.pojo.po.CsDeviceOnlineLogs;
import com.njcn.access.pojo.po.CsLineModel;
import com.njcn.access.pojo.po.CsTopic;
import com.njcn.access.service.ICsDeviceOnlineLogsService;
@@ -31,6 +31,7 @@ import com.njcn.access.utils.ChannelObjectUtil;
import com.njcn.common.pojo.dto.DeviceLogDTO;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.csdevice.api.*;
import com.njcn.csdevice.pojo.dto.PqsCommunicateDto;
import com.njcn.csdevice.pojo.param.CsLineParam;
import com.njcn.csdevice.pojo.po.*;
import com.njcn.device.biz.pojo.po.Overlimit;
@@ -99,6 +100,7 @@ public class MqttMessageHandler {
private final ChannelObjectUtil channelObjectUtil;
private final WaveFeignClient waveFeignClient;
private final RtFeignClient rtFeignClient;
private final CsCommunicateFeignClient csCommunicateFeignClient;
@Autowired
Validator validator;
@@ -311,23 +313,12 @@ public class MqttMessageHandler {
csEquipmentDeliveryService.updateStatusBynDid(nDid,AccessEnum.ACCESS.getCode());
csEquipmentDeliveryService.updateRunStatusBynDid(nDid,AccessEnum.ONLINE.getCode());
//记录设备上线
CsDeviceOnlineLogs record = onlineLogsService.findLastData(nDid);
CsDeviceOnlineLogs csDeviceOnlineLogs = new CsDeviceOnlineLogs();
if(Objects.isNull(record)) {
csDeviceOnlineLogs.setNdid(nDid);
csDeviceOnlineLogs.setOnlineTime(LocalDateTime.now());
onlineLogsService.save(csDeviceOnlineLogs);
} else {
LocalDateTime time = record.getOfflineTime();
if (!Objects.isNull(time)){
csDeviceOnlineLogs.setNdid(nDid);
csDeviceOnlineLogs.setOnlineTime(LocalDateTime.now());
onlineLogsService.save(csDeviceOnlineLogs);
} else {
record.setOnlineTime(LocalDateTime.now());
onlineLogsService.updateById(record);
}
}
PqsCommunicateDto dto = new PqsCommunicateDto();
dto.setTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
dto.setDevId(nDid);
dto.setType(1);
dto.setDescription("通讯正常");
csCommunicateFeignClient.insertion(dto);
//询问设备软件信息
askDevData(nDid,version,1,mid);
//更新治理监测点信息和设备容量
@@ -437,6 +428,13 @@ public class MqttMessageHandler {
}
}
break;
case 15:
log.info("{}模块{}:处理实时数据", nDid, rspDataDto.getClDid());
JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(res));
AppAutoDataMessage appAutoDataMessage = JSONObject.toJavaObject(jsonObject, AppAutoDataMessage.class);
appAutoDataMessage.setId(nDid);
rtFeignClient.apfRtAnalysis(appAutoDataMessage);
break;
case 48:
log.info("询问装置项目列表");
logDto.setUserName("运维管理员");
@@ -461,10 +459,16 @@ public class MqttMessageHandler {
break;
}
//csLogsFeignClient.addUserLog(logDto);
} else {
String result = getEnum(res.getCode());
log.info(result);
logDto.setResult(0);
logDto.setFailReason(result);
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(result);
}
}
/**
* 装置心跳 && 主动数据上送
* fixme 这边由于接收文件数据时间跨度会很长,途中有其他请求进来会中断之前的程序,目前是记录中断的位置,等处理完成再继续请求接收文件
@@ -742,4 +746,41 @@ public class MqttMessageHandler {
publisher.send("/Pfm/DevCmd/"+version+"/"+nDid, new Gson().toJson(reqAndResParam),1,false);
}
public String getEnum(Integer code) {
String result = null;
switch (code) {
case 201:
result = AccessEnum.START_CHANNEL.getMessage();
break;
case 202:
result = AccessEnum.WAIT_CHANNEL.getMessage();
break;
case 400:
result = AccessEnum.FAIL.getMessage();
break;
case 401:
result = AccessEnum.ERROR.getMessage();
break;
case 402:
result = AccessEnum.REFUSE_WAIT.getMessage();
break;
case 403:
result = AccessEnum.REFUSE_UNKNOWN.getMessage();
break;
case 404:
result = AccessEnum.NOT_FIND.getMessage();
break;
case 405:
result = AccessEnum.BUSY.getMessage();
break;
case 406:
result = AccessEnum.TIME_OUT.getMessage();
break;
default:
result = AccessEnum.OTHER_ERROR.getMessage();
break;
}
return result;
}
}

View File

@@ -1,5 +1,6 @@
package com.njcn.access.listener;
import cn.hutool.core.date.DatePattern;
import com.njcn.access.enums.AccessEnum;
import com.njcn.access.pojo.dto.NoticeUserDto;
import com.njcn.access.pojo.po.CsDeviceOnlineLogs;
@@ -10,11 +11,9 @@ import com.njcn.access.service.impl.CsDeviceServiceImpl;
import com.njcn.access.utils.MqttUtil;
import com.njcn.access.utils.SendMessageUtil;
import com.njcn.common.pojo.dto.DeviceLogDTO;
import com.njcn.csdevice.api.CsDeviceUserFeignClient;
import com.njcn.csdevice.api.CsLedgerFeignClient;
import com.njcn.csdevice.api.CsLogsFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.api.*;
import com.njcn.csdevice.pojo.dto.DevDetailDTO;
import com.njcn.csdevice.pojo.dto.PqsCommunicateDto;
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import com.njcn.redis.pojo.enums.AppRedisKey;
import com.njcn.redis.utils.RedisUtil;
@@ -75,6 +74,9 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene
private SendMessageUtil sendMessageUtil;
@Resource
private CsDeviceServiceImpl csDeviceServiceImpl;
@Resource
private CsCommunicateFeignClient csCommunicateFeignClient;
private final Object lock = new Object();
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
@@ -116,9 +118,16 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene
logDto.setOperate(nDid +"装置离线");
sendMessage(nDid);
//记录装置掉线时间
CsDeviceOnlineLogs record = onlineLogsService.findLastData(nDid);
record.setOfflineTime(LocalDateTime.now());
onlineLogsService.updateById(record);
// CsDeviceOnlineLogs record = onlineLogsService.findLastData(nDid);
// record.setOfflineTime(LocalDateTime.now());
// onlineLogsService.updateById(record);
//记录装置掉线时间
PqsCommunicateDto dto = new PqsCommunicateDto();
dto.setTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
dto.setDevId(nDid);
dto.setType(0);
dto.setDescription("通讯中断");
csCommunicateFeignClient.insertion(dto);
csLogsFeignClient.addUserLog(logDto);
}

View File

@@ -0,0 +1,16 @@
package com.njcn.access.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.access.pojo.po.CsLineRunData;
/**
* <p>
* 治理设备模块运行状态记录表 Mapper 接口
* </p>
*
* @author xy
* @since 2025-06-26
*/
public interface CsLineRunDataMapper extends BaseMapper<CsLineRunData> {
}

View File

@@ -16,7 +16,6 @@ import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.*;
@@ -80,7 +79,6 @@ public class AutoAccessTimer implements ApplicationRunner {
log.error("任务执行异常", e.getCause());
}
}
// 关闭ExecutorService
executor.shutdown();
}

View File

@@ -0,0 +1,20 @@
package com.njcn.access.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.access.pojo.po.CsLineRunData;
import java.util.List;
/**
* <p>
* 治理设备模块运行状态记录表 服务类
* </p>
*
* @author xy
* @since 2025-06-26
*/
public interface ICsLineRunDataService extends IService<CsLineRunData> {
void addData(List<CsLineRunData> list);
}

View File

@@ -613,6 +613,7 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
logDto.setResult(1);
logDto.setOperate(nDid + "接入失败,装置客户端不在线");
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AlgorithmResponseEnum.DEV_OFFLINE);
}
boolean result = false;
Map<Integer,String> modelMap = new HashMap<>();

View File

@@ -17,6 +17,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
@@ -123,6 +124,7 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
List<CsEquipmentDeliveryPO> list = this.lambdaQuery()
.eq(CsEquipmentDeliveryPO::getRunStatus,AccessEnum.OFFLINE.getCode())
.eq(CsEquipmentDeliveryPO::getUsageStatus,1)
.in(CsEquipmentDeliveryPO::getStatus, Arrays.asList(2,3))
.list();
if (CollUtil.isNotEmpty(list)) {
list.forEach(item->{

View File

@@ -0,0 +1,26 @@
package com.njcn.access.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.access.mapper.CsLineRunDataMapper;
import com.njcn.access.pojo.po.CsLineRunData;
import com.njcn.access.service.ICsLineRunDataService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 治理设备模块运行状态记录表 服务实现类
* </p>
*
* @author xy
* @since 2025-06-26
*/
@Service
public class CsLineRunDataServiceImpl extends ServiceImpl<CsLineRunDataMapper, CsLineRunData> implements ICsLineRunDataService {
@Override
public void addData(List<CsLineRunData> list) {
this.saveBatch(list);
}
}