日志记录调整

This commit is contained in:
2023-08-28 16:19:35 +08:00
parent ac0afada79
commit 1d378e0c03
12 changed files with 321 additions and 29 deletions

View File

@@ -5,6 +5,7 @@ import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.scheduling.annotation.EnableScheduling;
/** /**
@@ -16,6 +17,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
@MapperScan("com.njcn.**.mapper") @MapperScan("com.njcn.**.mapper")
@EnableFeignClients(basePackages = "com.njcn") @EnableFeignClients(basePackages = "com.njcn")
@SpringBootApplication(scanBasePackages = "com.njcn") @SpringBootApplication(scanBasePackages = "com.njcn")
@EnableScheduling
public class AccessBootApplication { public class AccessBootApplication {
public static void main(String[] args) { public static void main(String[] args) {

View File

@@ -1,29 +1,24 @@
package com.njcn.access.controller; package com.njcn.access.controller;
import cn.hutool.core.collection.CollectionUtil;
import com.njcn.access.pojo.param.DevModelParam;
import com.njcn.access.service.ICsDevModelService; import com.njcn.access.service.ICsDevModelService;
import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil; import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csdevice.api.CsGroupFeignClient;
import com.njcn.csdevice.enums.DeviceOperate;
import com.njcn.web.advice.DeviceLog;
import com.njcn.web.controller.BaseController; import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/** /**
* 类的介绍: * 类的介绍:
* *
@@ -44,7 +39,6 @@ public class CsDevModelController extends BaseController {
@PostMapping("/addModel") @PostMapping("/addModel")
@ApiOperation("新增设备模板") @ApiOperation("新增设备模板")
@Transactional(rollbackFor = {Exception.class}) @Transactional(rollbackFor = {Exception.class})
@DeviceLog(operateType = DeviceOperate.ADD_MODEL)
public HttpResult<String> addModel(@RequestPart("file") @Validated MultipartFile file){ public HttpResult<String> addModel(@RequestPart("file") @Validated MultipartFile file){
String methodDescribe = getMethodDescribe("addModel"); String methodDescribe = getMethodDescribe("addModel");
//1.录入通用字典 //1.录入通用字典

View File

@@ -40,7 +40,6 @@ public class CsDeviceController extends BaseController {
@PostMapping("/register") @PostMapping("/register")
@ApiOperation("直连设备状态判断") @ApiOperation("直连设备状态判断")
@ApiImplicitParam(name = "nDid", value = "设备识别码", required = true) @ApiImplicitParam(name = "nDid", value = "设备识别码", required = true)
@DeviceLog(operateType = DeviceOperate.JUDGE_ONLINE)
@ReturnMsg @ReturnMsg
public HttpResult<String> devRegister(@RequestParam String nDid){ public HttpResult<String> devRegister(@RequestParam String nDid){
csDeviceService.devRegister(nDid); csDeviceService.devRegister(nDid);
@@ -51,7 +50,6 @@ public class CsDeviceController extends BaseController {
@PostMapping("/model") @PostMapping("/model")
@ApiOperation("获取直连设备模板信息") @ApiOperation("获取直连设备模板信息")
@ApiImplicitParam(name = "nDid", value = "设备识别码", required = true) @ApiImplicitParam(name = "nDid", value = "设备识别码", required = true)
@DeviceLog(operateType = DeviceOperate.MODEL)
@ReturnMsg @ReturnMsg
public HttpResult<Object> getModel(@RequestParam String nDid){ public HttpResult<Object> getModel(@RequestParam String nDid){
String methodDescribe = getMethodDescribe("getModel"); String methodDescribe = getMethodDescribe("getModel");
@@ -63,7 +61,6 @@ public class CsDeviceController extends BaseController {
@PostMapping("/access") @PostMapping("/access")
@ApiOperation("直连设备注册") @ApiOperation("直连设备注册")
@ApiImplicitParam(name = "devAccessParam", value = "接入参数", required = true) @ApiImplicitParam(name = "devAccessParam", value = "接入参数", required = true)
@DeviceLog(operateType = DeviceOperate.DEVICE_REGISTER)
public HttpResult<String> devAccess(@RequestBody @Validated DevAccessParam devAccessParam){ public HttpResult<String> devAccess(@RequestBody @Validated DevAccessParam devAccessParam){
String methodDescribe = getMethodDescribe("getModel"); String methodDescribe = getMethodDescribe("getModel");
csDeviceService.devAccess(devAccessParam); csDeviceService.devAccess(devAccessParam);

View File

@@ -20,18 +20,20 @@ import com.njcn.access.pojo.po.CsTopic;
import com.njcn.access.service.ICsEquipmentDeliveryService; import com.njcn.access.service.ICsEquipmentDeliveryService;
import com.njcn.access.service.ICsLineModelService; import com.njcn.access.service.ICsLineModelService;
import com.njcn.access.service.ICsTopicService; import com.njcn.access.service.ICsTopicService;
import com.njcn.common.pojo.dto.DeviceLogDTO;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.csdevice.api.CsLogsFeignClient;
import com.njcn.csdevice.api.DataSetFeignClient; import com.njcn.csdevice.api.DataSetFeignClient;
import com.njcn.csdevice.api.DevModelFeignClient; import com.njcn.csdevice.api.DevModelFeignClient;
import com.njcn.csdevice.pojo.po.CsDataSet; import com.njcn.csdevice.pojo.po.CsDataSet;
import com.njcn.csdevice.pojo.po.CsDevModelPO; import com.njcn.csdevice.pojo.po.CsDevModelPO;
import com.njcn.mq.constant.BusinessTopic;
import com.njcn.mq.message.AppAutoDataMessage; import com.njcn.mq.message.AppAutoDataMessage;
import com.njcn.mq.message.AppEventMessage; import com.njcn.mq.message.AppEventMessage;
import com.njcn.mq.template.AppAutoDataMessageTemplate; import com.njcn.mq.template.AppAutoDataMessageTemplate;
import com.njcn.mq.template.AppEventMessageTemplate; import com.njcn.mq.template.AppEventMessageTemplate;
import com.njcn.redis.pojo.enums.AppRedisKey; import com.njcn.redis.pojo.enums.AppRedisKey;
import com.njcn.redis.utils.RedisUtil; import com.njcn.redis.utils.RedisUtil;
import com.njcn.web.utils.RequestUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.MqttMessage;
@@ -74,12 +76,22 @@ public class MqttMessageHandler {
private final AppEventMessageTemplate appEventMessageTemplate; private final AppEventMessageTemplate appEventMessageTemplate;
private final CsLogsFeignClient csLogsFeignClient;
@Autowired @Autowired
Validator validator; Validator validator;
@MqttSubscribe(value = "/Dev/DevTopic/{edgeId}",qos = 1) @MqttSubscribe(value = "/Dev/DevTopic/{edgeId}",qos = 1)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void devTopic(String topic, MqttMessage message, @NamedValue("edgeId") String nDid, @Payload String payload){ public void devTopic(String topic, MqttMessage message, @NamedValue("edgeId") String nDid, @Payload String payload){
//日志记录
DeviceLogDTO logDto = new DeviceLogDTO();
logDto.setUserIndex(RequestUtil.getUserIndex());
logDto.setUserName(RequestUtil.getUsername());
logDto.setLoginName(RequestUtil.getLoginName());
logDto.setOperate("装置主题录入");
logDto.setResult(1);
//业务流程开始
Gson gson = new Gson(); Gson gson = new Gson();
ReqAndResParam.Res res = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ReqAndResParam.Res.class); ReqAndResParam.Res res = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ReqAndResParam.Res.class);
//检验传递的参数是否准确 //检验传递的参数是否准确
@@ -103,10 +115,17 @@ public class MqttMessageHandler {
list.add(csTopic); list.add(csTopic);
}); });
csTopicService.addTopic(nDid,list); csTopicService.addTopic(nDid,list);
csLogsFeignClient.addUserLog(logDto);
} else { } else {
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.MESSAGE_TYPE_ERROR.getMessage());
csLogsFeignClient.addUserLog(logDto);
log.info(AccessResponseEnum.MESSAGE_TYPE_ERROR.getMessage()); log.info(AccessResponseEnum.MESSAGE_TYPE_ERROR.getMessage());
} }
} else { } else {
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.RESPONSE_ERROR.getMessage());
csLogsFeignClient.addUserLog(logDto);
log.info(AccessResponseEnum.RESPONSE_ERROR.getMessage()); log.info(AccessResponseEnum.RESPONSE_ERROR.getMessage());
} }
} }
@@ -123,6 +142,14 @@ public class MqttMessageHandler {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void devOperation(String topic, MqttMessage message, @NamedValue("edgeId") String nDid, @Payload String payload){ public void devOperation(String topic, MqttMessage message, @NamedValue("edgeId") String nDid, @Payload String payload){
log.info("收到注册应答响应--->" + nDid); log.info("收到注册应答响应--->" + nDid);
//日志记录
DeviceLogDTO logDto = new DeviceLogDTO();
logDto.setUserIndex(RequestUtil.getUserIndex());
logDto.setUserName(RequestUtil.getUsername());
logDto.setLoginName(RequestUtil.getLoginName());
logDto.setOperate("收到设备注册应答响应");
logDto.setResult(1);
//业务处理
Gson gson = new Gson(); Gson gson = new Gson();
ReqAndResDto.Res res = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ReqAndResDto.Res.class); ReqAndResDto.Res res = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ReqAndResDto.Res.class);
if (Objects.equals(res.getCode(),AccessEnum.SUCCESS.getCode())){ if (Objects.equals(res.getCode(),AccessEnum.SUCCESS.getCode())){
@@ -136,10 +163,17 @@ public class MqttMessageHandler {
reqAndResParam.setExpire(-1); reqAndResParam.setExpire(-1);
String version = csTopicService.getVersion(nDid); String version = csTopicService.getVersion(nDid);
publisher.send("/Pfm/DevCmd/"+version+"/"+nDid,new Gson().toJson(reqAndResParam),1,false); publisher.send("/Pfm/DevCmd/"+version+"/"+nDid,new Gson().toJson(reqAndResParam),1,false);
csLogsFeignClient.addUserLog(logDto);
} else { } else {
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.MESSAGE_TYPE_ERROR.getMessage());
csLogsFeignClient.addUserLog(logDto);
log.info(AccessResponseEnum.MESSAGE_TYPE_ERROR.getMessage()); log.info(AccessResponseEnum.MESSAGE_TYPE_ERROR.getMessage());
} }
} else { } else {
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.REGISTER_RESPONSE_ERROR.getMessage());
csLogsFeignClient.addUserLog(logDto);
log.info(AccessResponseEnum.REGISTER_RESPONSE_ERROR.getMessage()); log.info(AccessResponseEnum.REGISTER_RESPONSE_ERROR.getMessage());
} }
} }
@@ -157,6 +191,14 @@ public class MqttMessageHandler {
@MqttSubscribe(value = "/Pfm/DevRsp/{version}/{edgeId}",qos = 1) @MqttSubscribe(value = "/Pfm/DevRsp/{version}/{edgeId}",qos = 1)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void devModelOperation(String topic, MqttMessage message, @NamedValue("version") String version, @NamedValue("edgeId") String nDid, @Payload String payload){ public void devModelOperation(String topic, MqttMessage message, @NamedValue("version") String version, @NamedValue("edgeId") String nDid, @Payload String payload){
//日志记录
DeviceLogDTO logDto = new DeviceLogDTO();
logDto.setUserIndex(RequestUtil.getUserIndex());
logDto.setUserName(RequestUtil.getUsername());
logDto.setLoginName(RequestUtil.getLoginName());
logDto.setOperate("装置类型模板应答");
logDto.setResult(1);
//业务处理
Gson gson = new Gson(); Gson gson = new Gson();
ModelDto modelDto = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ModelDto.class); ModelDto modelDto = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ModelDto.class);
if (Objects.equals(modelDto.getType(),Integer.parseInt(TypeEnum.TYPE_18.getCode()))){ if (Objects.equals(modelDto.getType(),Integer.parseInt(TypeEnum.TYPE_18.getCode()))){
@@ -164,6 +206,9 @@ public class MqttMessageHandler {
List<DevCfgDto> list2 = modelDto.getMsg().getDevCfg(); List<DevCfgDto> list2 = modelDto.getMsg().getDevCfg();
if (CollectionUtils.isEmpty(list)){ if (CollectionUtils.isEmpty(list)){
log.error(AccessResponseEnum.MODEL_VERSION_ERROR.getMessage()); log.error(AccessResponseEnum.MODEL_VERSION_ERROR.getMessage());
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.MODEL_VERSION_ERROR.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.MODEL_VERSION_ERROR); throw new BusinessException(AccessResponseEnum.MODEL_VERSION_ERROR);
} }
//校验前置传递的装置模板库中是否存在 //校验前置传递的装置模板库中是否存在
@@ -179,11 +224,17 @@ public class MqttMessageHandler {
CsDevModelPO po = devModelFeignClient.findModel(item.getDevType(),item.getVersionNo(),item.getVersionDate()).getData(); CsDevModelPO po = devModelFeignClient.findModel(item.getDevType(),item.getVersionNo(),item.getVersionDate()).getData();
if (Objects.isNull(po)){ if (Objects.isNull(po)){
log.error(AccessResponseEnum.MODEL_NO_FIND.getMessage()); log.error(AccessResponseEnum.MODEL_NO_FIND.getMessage());
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.MODEL_NO_FIND.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.MODEL_NO_FIND); throw new BusinessException(AccessResponseEnum.MODEL_NO_FIND);
} }
if (Objects.equals(po.getType(),0)){ if (Objects.equals(po.getType(),0)){
List<CsDataSet> dataSetList = dataSetFeignClient.getModuleDataSet(po.getId()).getData(); List<CsDataSet> dataSetList = dataSetFeignClient.getModuleDataSet(po.getId()).getData();
if (CollectionUtils.isEmpty(dataSetList)){ if (CollectionUtils.isEmpty(dataSetList)){
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.MODULE_NUMBER_IS_NULL.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.MODULE_NUMBER_IS_NULL); throw new BusinessException(AccessResponseEnum.MODULE_NUMBER_IS_NULL);
} }
csModelDto.setModuleNumber(dataSetList.size()); csModelDto.setModuleNumber(dataSetList.size());
@@ -202,6 +253,7 @@ public class MqttMessageHandler {
List<CsLineModel> lineList = csLineModelService.getMonitorNumByModelId(modelId); List<CsLineModel> lineList = csLineModelService.getMonitorNumByModelId(modelId);
String key = AppRedisKey.LINE + nDid; String key = AppRedisKey.LINE + nDid;
redisUtil.saveByKeyWithExpire(key,lineList,600L); redisUtil.saveByKeyWithExpire(key,lineList,600L);
csLogsFeignClient.addUserLog(logDto);
} }
} }
@@ -216,20 +268,33 @@ public class MqttMessageHandler {
@MqttSubscribe(value = "/Pfm/DevRsp/{version}/{edgeId}",qos = 1) @MqttSubscribe(value = "/Pfm/DevRsp/{version}/{edgeId}",qos = 1)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void devAccessOperation(String topic, MqttMessage message, @NamedValue("version") String version, @NamedValue("edgeId") String nDid, @Payload String payload){ public void devAccessOperation(String topic, MqttMessage message, @NamedValue("version") String version, @NamedValue("edgeId") String nDid, @Payload String payload){
//日志实体
DeviceLogDTO logDto = new DeviceLogDTO();
logDto.setUserIndex(RequestUtil.getUserIndex());
logDto.setUserName(RequestUtil.getUsername());
logDto.setLoginName(RequestUtil.getLoginName());
logDto.setResult(1);
//业务处理
Gson gson = new Gson(); Gson gson = new Gson();
ReqAndResDto.Res res = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ReqAndResDto.Res.class); ReqAndResDto.Res res = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ReqAndResDto.Res.class);
switch (res.getType()){ switch (res.getType()){
case 4613: case 4613:
logDto.setOperate("设备接入");
log.info("收到接入应答响应--->" + nDid); log.info("收到接入应答响应--->" + nDid);
if (Objects.equals(res.getCode(),AccessEnum.SUCCESS.getCode())){ if (Objects.equals(res.getCode(),AccessEnum.SUCCESS.getCode())){
log.info("接入应答成功--->" + nDid);
//修改装置状态 //修改装置状态
csEquipmentDeliveryService.updateStatusBynDid(nDid, AccessEnum.ACCESS.getCode());
csEquipmentDeliveryService.updateRunStatusBynDid(nDid,AccessEnum.ONLINE.getCode()); csEquipmentDeliveryService.updateRunStatusBynDid(nDid,AccessEnum.ONLINE.getCode());
} else { } else {
log.info(AccessResponseEnum.ACCESS_RESPONSE_ERROR.getMessage()); log.info(AccessResponseEnum.ACCESS_RESPONSE_ERROR.getMessage());
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.ACCESS_RESPONSE_ERROR.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.ACCESS_RESPONSE_ERROR);
} }
break; break;
case 4614: case 4614:
logDto.setOperate("设备数据应答");
log.info("设备数据应答--->" + nDid); log.info("设备数据应答--->" + nDid);
RspDataDto rspDataDto = JSON.parseObject(JSON.toJSONString(res.getMsg()), RspDataDto.class); RspDataDto rspDataDto = JSON.parseObject(JSON.toJSONString(res.getMsg()), RspDataDto.class);
switch (rspDataDto.getDataType()){ switch (rspDataDto.getDataType()){
@@ -249,6 +314,7 @@ public class MqttMessageHandler {
default: default:
break; break;
} }
csLogsFeignClient.addUserLog(logDto);
} }
@@ -271,6 +337,8 @@ public class MqttMessageHandler {
case 4865: case 4865:
//设置心跳时间,超时改为掉线 //设置心跳时间,超时改为掉线
redisUtil.saveByKeyWithExpire("MQTT:" + nDid, Instant.now().toEpochMilli(),180L); redisUtil.saveByKeyWithExpire("MQTT:" + nDid, Instant.now().toEpochMilli(),180L);
//装置改成在线
csEquipmentDeliveryService.updateRunStatusBynDid(nDid,AccessEnum.ONLINE.getCode());
//处理心跳 //处理心跳
ReqAndResDto.Res reqAndResParam = new ReqAndResDto.Res(); ReqAndResDto.Res reqAndResParam = new ReqAndResDto.Res();
HeartBeatDto heartBeatDto = new HeartBeatDto(); HeartBeatDto heartBeatDto = new HeartBeatDto();
@@ -282,8 +350,6 @@ public class MqttMessageHandler {
reqAndResParam.setCode(200); reqAndResParam.setCode(200);
reqAndResParam.setMsg(heartBeatDto); reqAndResParam.setMsg(heartBeatDto);
publisher.send("/Dev/DataRsp/"+version+"/"+nDid,gson.toJson(reqAndResParam),1,false); publisher.send("/Dev/DataRsp/"+version+"/"+nDid,gson.toJson(reqAndResParam),1,false);
//装置改成在线
csEquipmentDeliveryService.updateStatusBynDid(nDid, AccessEnum.ACCESS.getCode());
//处理业务逻辑 //处理业务逻辑
Object object = res.getMsg(); Object object = res.getMsg();
if (!Objects.isNull(object)){ if (!Objects.isNull(object)){

View File

@@ -1,35 +1,31 @@
package com.njcn.access.listener; package com.njcn.access.listener;
import com.njcn.access.enums.AccessEnum; import com.njcn.access.enums.AccessEnum;
import com.njcn.access.enums.AccessResponseEnum;
import com.njcn.access.service.ICsEquipmentDeliveryService; import com.njcn.access.service.ICsEquipmentDeliveryService;
import com.njcn.access.service.ICsTopicService; import com.njcn.access.service.ICsTopicService;
import com.njcn.access.service.impl.CsDeviceServiceImpl; import com.njcn.access.service.impl.CsDeviceServiceImpl;
import com.njcn.access.utils.MqttUtil; import com.njcn.common.pojo.dto.DeviceLogDTO;
import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.csdevice.api.EquipmentFeignClient; import com.njcn.csdevice.api.CsLogsFeignClient;
import com.njcn.csdevice.enums.DeviceOperate; import com.njcn.csdevice.enums.DeviceOperate;
import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO;
import com.njcn.redis.utils.RedisUtil;
import com.njcn.web.advice.DeviceLog; import com.njcn.web.advice.DeviceLog;
import com.njcn.web.utils.RequestUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener; import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
/** /**
* @author hongawen * @author xy
* @version 1.0.0 * @version 1.0.0
* @date 2022年04月02日 14:31 * @date 2022年04月02日 14:31
*/ */
@@ -46,29 +42,39 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene
@Resource @Resource
private CsDeviceServiceImpl csDeviceService; private CsDeviceServiceImpl csDeviceService;
@Resource
private CsLogsFeignClient csLogsFeignClient;
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) { public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer); super(listenerContainer);
} }
/** /**
* 针对redis数据失效事件进行数据处理 * 针对redis数据失效事件进行数据处理
* 注意message.toString()可以获取失效的key * 注意message.toString()可以获取失效的key
*/ */
@Override @Override
@DeviceLog(operateType = DeviceOperate.DEVICE_OFFLINE)
public void onMessage(Message message, byte[] pattern) { public void onMessage(Message message, byte[] pattern) {
if (StringUtils.isBlank(message.toString())) { if (StringUtils.isBlank(message.toString())) {
return; return;
} }
//日志实体
DeviceLogDTO logDto = new DeviceLogDTO();
logDto.setUserIndex(RequestUtil.getUserIndex());
logDto.setUserName(RequestUtil.getUsername());
logDto.setLoginName(RequestUtil.getLoginName());
logDto.setResult(1);
//判断失效的key是否为MQTT消费端存入的 //判断失效的key是否为MQTT消费端存入的
String expiredKey = message.toString(); String expiredKey = message.toString();
if(expiredKey.startsWith("MQTT:")){ if(expiredKey.startsWith("MQTT:")){
String nDid = expiredKey.split(":")[1]; String nDid = expiredKey.split(":")[1];
//装置下线 //装置下线
csEquipmentDeliveryService.updateRunStatusBynDid(nDid, AccessEnum.OFFLINE.getCode()); csEquipmentDeliveryService.updateRunStatusBynDid(nDid, AccessEnum.OFFLINE.getCode());
logDto.setOperate("装置掉线,装置为:" + nDid);
csLogsFeignClient.addUserLog(logDto);
//立马发起接入请求 //立马发起接入请求
String version = csTopicService.getVersion(nDid); String version = csTopicService.getVersion(nDid);
log.info("装置掉线立马发送接入请求,接入失败则进入定时接入任务");
csDeviceService.devAccess(nDid,version); csDeviceService.devAccess(nDid,version);
//接入再次失败,则定时发起接入请求 //接入再次失败,则定时发起接入请求
try { try {
@@ -77,11 +83,15 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene
if (!Objects.isNull(status) && Objects.equals(status,AccessEnum.OFFLINE.getCode())){ if (!Objects.isNull(status) && Objects.equals(status,AccessEnum.OFFLINE.getCode())){
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2); ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2);
ScheduledFuture<?> runnableFuture = executor.scheduleAtFixedRate(() -> { ScheduledFuture<?> runnableFuture = executor.scheduleAtFixedRate(() -> {
log.info("定时发送接入请求...");
csDeviceService.devAccess(nDid, version); csDeviceService.devAccess(nDid, version);
Integer status2 = csEquipmentDeliveryService.queryEquipmentByndid(nDid).getRunStatus(); Integer status2 = csEquipmentDeliveryService.queryEquipmentByndid(nDid).getRunStatus();
if (Objects.equals(status2,AccessEnum.ONLINE.getCode())){ if (Objects.equals(status2,AccessEnum.ONLINE.getCode())){
throw new BusinessException(CommonResponseEnum.SUCCESS); throw new BusinessException(CommonResponseEnum.SUCCESS);
} }
//记录日志
logDto.setOperate("装置掉线,定时发送接入请求,装置为:" + nDid + ",请求的时间戳为:" + System.currentTimeMillis());
csLogsFeignClient.addUserLog(logDto);
}, 1, 3600, TimeUnit.SECONDS); }, 1, 3600, TimeUnit.SECONDS);
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {

View File

@@ -0,0 +1,47 @@
package com.njcn.access.runner;
import com.njcn.access.service.ICsEquipmentDeliveryService;
import com.njcn.access.service.ICsTopicService;
import com.njcn.access.service.impl.CsDeviceServiceImpl;
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
/**
* 类的介绍:用来重新发起设备的接入,存在程序意外停止了,缓存失效导致无法更新装置的状态,所以需要在程序启动时发起设备的接入
*
* @author xuyang
* @version 1.0.0
* @createTime 2023/8/28 13:57
*/
@Component
@Slf4j
public class AccessApplicationRunner implements ApplicationRunner {
@Resource
private CsDeviceServiceImpl csDeviceService;
@Resource
private ICsTopicService csTopicService;
@Resource
private ICsEquipmentDeliveryService csEquipmentDeliveryService;
@Override
public void run(ApplicationArguments args){
List<CsEquipmentDeliveryPO> list = csEquipmentDeliveryService.getAll();
list.forEach(item->{
String version = csTopicService.getVersion(item.getNdid());
if (!Objects.isNull(version)){
csDeviceService.devAccess(item.getNdid(),version);
}
});
}
}

View File

@@ -0,0 +1,50 @@
package com.njcn.access.runner;
import com.njcn.access.service.ICsEquipmentDeliveryService;
import com.njcn.access.service.ICsTopicService;
import com.njcn.access.service.impl.CsDeviceServiceImpl;
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
/**
* 类的介绍:防止设备掉线 系统未能调整,做一个定时任务,每天凌晨将所有设备重新接入
*
* @author xuyang
* @version 1.0.0
* @createTime 2023/8/28 14:21
*/
@Component
@Slf4j
public class AccessScheduledTask {
@Resource
private CsDeviceServiceImpl csDeviceService;
@Resource
private ICsTopicService csTopicService;
@Resource
private ICsEquipmentDeliveryService csEquipmentDeliveryService;
/**
* {秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}
*/
@Scheduled(cron = "0 0 0 * * ?")
public void executeTask() {
log.info("每日凌晨定时任务执行");
List<CsEquipmentDeliveryPO> list = csEquipmentDeliveryService.getAll();
list.forEach(item->{
String version = csTopicService.getVersion(item.getNdid());
if (!Objects.isNull(version)){
csDeviceService.devAccess(item.getNdid(),version);
}
});
}
}

View File

@@ -12,6 +12,8 @@ import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO;
import com.njcn.csdevice.pojo.vo.DeviceManagerVO; import com.njcn.csdevice.pojo.vo.DeviceManagerVO;
import com.njcn.csdevice.pojo.vo.ProjectEquipmentVO; import com.njcn.csdevice.pojo.vo.ProjectEquipmentVO;
import java.util.List;
/** /**
* *
* Description: * Description:
@@ -47,4 +49,10 @@ public interface ICsEquipmentDeliveryService extends IService<CsEquipmentDeliver
* @return * @return
*/ */
CsEquipmentDeliveryVO queryEquipmentByndid(String ndid); CsEquipmentDeliveryVO queryEquipmentByndid(String ndid);
/**
* 获取所有装置信息
* @return
*/
List<CsEquipmentDeliveryPO> getAll();
} }

View File

@@ -11,7 +11,9 @@ import com.njcn.access.pojo.dto.devModel.*;
import com.njcn.access.pojo.po.CsLineModel; import com.njcn.access.pojo.po.CsLineModel;
import com.njcn.access.service.*; import com.njcn.access.service.*;
import com.njcn.access.utils.JsonUtil; import com.njcn.access.utils.JsonUtil;
import com.njcn.common.pojo.dto.DeviceLogDTO;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.csdevice.api.CsLogsFeignClient;
import com.njcn.csdevice.api.DevModelFeignClient; import com.njcn.csdevice.api.DevModelFeignClient;
import com.njcn.csdevice.pojo.po.*; import com.njcn.csdevice.pojo.po.*;
import com.njcn.oss.constant.OssPath; import com.njcn.oss.constant.OssPath;
@@ -23,6 +25,7 @@ import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.pojo.param.EleEpdPqdParam; import com.njcn.system.pojo.param.EleEpdPqdParam;
import com.njcn.system.pojo.param.EleEvtParam; import com.njcn.system.pojo.param.EleEvtParam;
import com.njcn.system.pojo.po.EleEpdPqd; import com.njcn.system.pojo.po.EleEpdPqd;
import com.njcn.web.utils.RequestUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -69,14 +72,23 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
private final ICsGroArrService csGroArrService; private final ICsGroArrService csGroArrService;
private final CsLogsFeignClient csLogsFeignClient;
@Override @Override
@Transactional(rollbackFor = {Exception.class}) @Transactional(rollbackFor = {Exception.class})
public void addModel(MultipartFile file) { public void addModel(MultipartFile file) {
//日志实体
DeviceLogDTO logDto = new DeviceLogDTO();
logDto.setUserIndex(RequestUtil.getUserIndex());
logDto.setUserName(RequestUtil.getUsername());
logDto.setLoginName(RequestUtil.getLoginName());
logDto.setResult(1);
String json = null; String json = null;
try { try {
json = JsonUtil.convertStreamToString(file.getInputStream()); json = JsonUtil.convertStreamToString(file.getInputStream());
Gson gson = new Gson(); Gson gson = new Gson();
TemplateDto templateDto = gson.fromJson(json, TemplateDto.class); TemplateDto templateDto = gson.fromJson(json, TemplateDto.class);
logDto.setOperate("新增设备模板,模板名称:" + templateDto.getDevType());
//模板文件存入文件服务器 //模板文件存入文件服务器
String filePath = fileStorageUtil.uploadMultipart(file, OssPath.DEV_MODEL + templateDto.getDevType() + "_"); String filePath = fileStorageUtil.uploadMultipart(file, OssPath.DEV_MODEL + templateDto.getDevType() + "_");
//1.录入cs_dev_model表记录装置型号和模板记录 //1.录入cs_dev_model表记录装置型号和模板记录
@@ -85,7 +97,11 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
analysisDataSet(templateDto,csDevModelPo.getId()); analysisDataSet(templateDto,csDevModelPo.getId());
//3.录入监测点模板表(记录当前模板有几个监测点治理类型的模板目前规定1个监测点电能质量模板根据逻辑子设备来) //3.录入监测点模板表(记录当前模板有几个监测点治理类型的模板目前规定1个监测点电能质量模板根据逻辑子设备来)
addCsLineModel(templateDto,csDevModelPo.getId()); addCsLineModel(templateDto,csDevModelPo.getId());
csLogsFeignClient.addUserLog(logDto);
} catch (Exception e) { } catch (Exception e) {
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.MODEL_ANALYSIS_ERROR.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.MODEL_ANALYSIS_ERROR); throw new BusinessException(AccessResponseEnum.MODEL_ANALYSIS_ERROR);
} }
} }
@@ -93,13 +109,24 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
@Override @Override
@Transactional(rollbackFor = {Exception.class}) @Transactional(rollbackFor = {Exception.class})
public void addDict(MultipartFile file) { public void addDict(MultipartFile file) {
//日志实体
DeviceLogDTO logDto = new DeviceLogDTO();
logDto.setUserIndex(RequestUtil.getUserIndex());
logDto.setUserName(RequestUtil.getUsername());
logDto.setLoginName(RequestUtil.getLoginName());
logDto.setOperate("录入通用字典");
logDto.setResult(1);
String json = null; String json = null;
try { try {
json = JsonUtil.convertStreamToString(file.getInputStream()); json = JsonUtil.convertStreamToString(file.getInputStream());
Gson gson = new Gson(); Gson gson = new Gson();
TemplateDto templateDto = gson.fromJson(json, TemplateDto.class); TemplateDto templateDto = gson.fromJson(json, TemplateDto.class);
analysisDict(templateDto); analysisDict(templateDto);
csLogsFeignClient.addUserLog(logDto);
} catch (Exception e) { } catch (Exception e) {
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.DICT_ANALYSIS_ERROR.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.DICT_ANALYSIS_ERROR); throw new BusinessException(AccessResponseEnum.DICT_ANALYSIS_ERROR);
} }
} }
@@ -108,8 +135,18 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
* 新增cs_dev_model数据 * 新增cs_dev_model数据
*/ */
private CsDevModelPO addCsDevModel(TemplateDto templateDto, String filePath){ private CsDevModelPO addCsDevModel(TemplateDto templateDto, String filePath){
//日志实体
DeviceLogDTO logDto = new DeviceLogDTO();
logDto.setUserIndex(RequestUtil.getUserIndex());
logDto.setUserName(RequestUtil.getUsername());
logDto.setLoginName(RequestUtil.getLoginName());
logDto.setOperate("新增cs_dev_model数据");
logDto.setResult(1);
CsDevModelPO po = devModelFeignClient.findModel(templateDto.getDevType(),templateDto.getVersion(),templateDto.getTime()).getData(); CsDevModelPO po = devModelFeignClient.findModel(templateDto.getDevType(),templateDto.getVersion(),templateDto.getTime()).getData();
if (!Objects.isNull(po)){ if (!Objects.isNull(po)){
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.MODEL_REPEAT.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.MODEL_REPEAT); throw new BusinessException(AccessResponseEnum.MODEL_REPEAT);
} }
CsDevModelPO model = new CsDevModelPO(); CsDevModelPO model = new CsDevModelPO();
@@ -126,6 +163,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
model.setType(1); model.setType(1);
} }
csDevModelMapper.insert(model); csDevModelMapper.insert(model);
csLogsFeignClient.addUserLog(logDto);
return model; return model;
} }
@@ -197,6 +235,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
EleEpdPqd po = epdFeignClient.add(eleEpdPqdParam).getData(); EleEpdPqd po = epdFeignClient.add(eleEpdPqdParam).getData();
if (CollectionUtil.isNotEmpty(evt.getParam())){ if (CollectionUtil.isNotEmpty(evt.getParam())){
evt.getParam().forEach(param->{ evt.getParam().forEach(param->{
//录入关系表
EleEvtParam eleEvtParam = new EleEvtParam(); EleEvtParam eleEvtParam = new EleEvtParam();
eleEvtParam.setPid(po.getId()); eleEvtParam.setPid(po.getId());
eleEvtParam.setData(param.getData()); eleEvtParam.setData(param.getData());
@@ -205,6 +244,8 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
eleEvtParam.setType(param.getType()); eleEvtParam.setType(param.getType());
eleEvtParam.setUnit(param.getUnit()); eleEvtParam.setUnit(param.getUnit());
eleEvtFeignClient.add(eleEvtParam); eleEvtFeignClient.add(eleEvtParam);
//录入字典表
}); });
} }
} }

View File

@@ -18,6 +18,7 @@ import com.njcn.access.pojo.dto.ReqAndResDto;
import com.njcn.access.pojo.po.CsSoftInfoPO; import com.njcn.access.pojo.po.CsSoftInfoPO;
import com.njcn.access.service.*; import com.njcn.access.service.*;
import com.njcn.access.utils.MqttUtil; import com.njcn.access.utils.MqttUtil;
import com.njcn.common.pojo.dto.DeviceLogDTO;
import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.utils.PubUtils; import com.njcn.common.utils.PubUtils;
@@ -27,6 +28,7 @@ import com.njcn.csdevice.pojo.param.CsLedgerParam;
import com.njcn.csdevice.pojo.po.AppLineTopologyDiagramPO; import com.njcn.csdevice.pojo.po.AppLineTopologyDiagramPO;
import com.njcn.csdevice.pojo.po.CsDeviceUserPO; import com.njcn.csdevice.pojo.po.CsDeviceUserPO;
import com.njcn.csdevice.pojo.po.CsLinePO; import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.csdevice.pojo.po.CsLogsPO;
import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO; import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO;
import com.njcn.redis.pojo.enums.AppRedisKey; import com.njcn.redis.pojo.enums.AppRedisKey;
import com.njcn.redis.utils.RedisUtil; import com.njcn.redis.utils.RedisUtil;
@@ -90,27 +92,48 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
private final ICsSoftInfoService csSoftInfoService; private final ICsSoftInfoService csSoftInfoService;
private final CsLogsFeignClient csLogsFeignClient;
@Override @Override
@Transactional(rollbackFor = {Exception.class}) @Transactional(rollbackFor = {Exception.class})
public void devRegister(String nDid) { public void devRegister(String nDid) {
//日志实体
DeviceLogDTO logDto = new DeviceLogDTO();
logDto.setUserIndex(RequestUtil.getUserIndex());
logDto.setUserName(RequestUtil.getUsername());
logDto.setLoginName(RequestUtil.getLoginName());
logDto.setOperate("直连设备状态判断");
logDto.setResult(1);
//1.判断nDid是否存在 //1.判断nDid是否存在
CsEquipmentDeliveryVO csEquipmentDeliveryVO = equipmentFeignClient.queryEquipmentByndid(nDid).getData(); CsEquipmentDeliveryVO csEquipmentDeliveryVO = equipmentFeignClient.queryEquipmentByndid(nDid).getData();
if (Objects.isNull(csEquipmentDeliveryVO.getNdid())){ if (Objects.isNull(csEquipmentDeliveryVO.getNdid())){
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.NDID_NO_FIND.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.NDID_NO_FIND); throw new BusinessException(AccessResponseEnum.NDID_NO_FIND);
} }
//2.判断设备是否是直连设备 //2.判断设备是否是直连设备
SysDicTreePO sysDicTreePo = dictTreeFeignClient.queryById(csEquipmentDeliveryVO.getDevType()).getData(); SysDicTreePO sysDicTreePo = dictTreeFeignClient.queryById(csEquipmentDeliveryVO.getDevType()).getData();
if (Objects.isNull(sysDicTreePo)){ if (Objects.isNull(sysDicTreePo)){
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.DEV_NOT_FIND.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.DEV_NOT_FIND); throw new BusinessException(AccessResponseEnum.DEV_NOT_FIND);
} }
String code = sysDicTreePo.getCode(); String code = sysDicTreePo.getCode();
if (!Objects.equals(code, DicDataEnum.CONNECT_DEV.getCode())){ if (!Objects.equals(code, DicDataEnum.CONNECT_DEV.getCode())){
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.DEV_IS_NOT_ZL.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.DEV_IS_NOT_ZL); throw new BusinessException(AccessResponseEnum.DEV_IS_NOT_ZL);
} }
//3.判断客户端是否在线 //3.判断客户端是否在线
String clientName = "NJCN-" + nDid.substring(nDid.length() - 6); String clientName = "NJCN-" + nDid.substring(nDid.length() - 6);
boolean mqttClient = mqttUtil.judgeClientOnline(clientName); boolean mqttClient = mqttUtil.judgeClientOnline(clientName);
if (!mqttClient){ if (!mqttClient){
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.MISSING_CLIENT.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.MISSING_CLIENT); throw new BusinessException(AccessResponseEnum.MISSING_CLIENT);
} }
//4.询问设备支持的主题信息 //4.询问设备支持的主题信息
@@ -120,32 +143,55 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
//存在则建立关系;不存在则告警出来 //存在则建立关系;不存在则告警出来
SysDicTreePO dictData = dictTreeFeignClient.queryById(csEquipmentDeliveryVO.getDevModel()).getData(); SysDicTreePO dictData = dictTreeFeignClient.queryById(csEquipmentDeliveryVO.getDevModel()).getData();
if (Objects.isNull(dictData)){ if (Objects.isNull(dictData)){
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.DEV_MODEL_NOT_FIND.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.DEV_MODEL_NOT_FIND); throw new BusinessException(AccessResponseEnum.DEV_MODEL_NOT_FIND);
} }
String devModel = dictData.getCode(); String devModel = dictData.getCode();
zhiLianRegister(nDid,devModel); zhiLianRegister(nDid,devModel);
csLogsFeignClient.addUserLog(logDto);
} }
@Override @Override
public Object getModel(String nDid) { public Object getModel(String nDid) {
//日志实体
DeviceLogDTO logDto = new DeviceLogDTO();
logDto.setUserIndex(RequestUtil.getUserIndex());
logDto.setUserName(RequestUtil.getUsername());
logDto.setLoginName(RequestUtil.getLoginName());
logDto.setOperate("获取直连设备模板信息");
logDto.setResult(1);
Object model = null; Object model = null;
try { try {
Thread.sleep(1500); Thread.sleep(1500);
String key = AppRedisKey.LINE + nDid; String key = AppRedisKey.LINE + nDid;
model = redisUtil.getObjectByKey(key); model = redisUtil.getObjectByKey(key);
if (Objects.isNull(model)){ if (Objects.isNull(model)){
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.MODEL_MISS.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.MODEL_MISS); throw new BusinessException(AccessResponseEnum.MODEL_MISS);
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
csLogsFeignClient.addUserLog(logDto);
return model; return model;
} }
@Override @Override
@Transactional(rollbackFor = {Exception.class}) @Transactional(rollbackFor = {Exception.class})
public void devAccess(DevAccessParam devAccessParam) { public void devAccess(DevAccessParam devAccessParam) {
//日志实体
DeviceLogDTO logDto = new DeviceLogDTO();
logDto.setUserIndex(RequestUtil.getUserIndex());
logDto.setUserName(RequestUtil.getUsername());
logDto.setLoginName(RequestUtil.getLoginName());
logDto.setOperate("直连设备注册");
logDto.setResult(1);
try { try {
//获取版本
String version = csTopicService.getVersion(devAccessParam.getNDid()); String version = csTopicService.getVersion(devAccessParam.getNDid());
CsEquipmentDeliveryVO vo = equipmentFeignClient.queryEquipmentByndid(devAccessParam.getNDid()).getData(); CsEquipmentDeliveryVO vo = equipmentFeignClient.queryEquipmentByndid(devAccessParam.getNDid()).getData();
List<CsLinePO> csLinePoList = new ArrayList<>(); List<CsLinePO> csLinePoList = new ArrayList<>();
@@ -175,9 +221,15 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
} }
} }
if (Objects.isNull(clDid)){ if (Objects.isNull(clDid)){
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.CLDID_IS_NULL.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.CLDID_IS_NULL); throw new BusinessException(AccessResponseEnum.CLDID_IS_NULL);
} }
if (Objects.isNull(moduleNumber)){ if (Objects.isNull(moduleNumber)){
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.MODULE_NUMBER_IS_NULL.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.MODULE_NUMBER_IS_NULL); throw new BusinessException(AccessResponseEnum.MODULE_NUMBER_IS_NULL);
} }
askDevData(devAccessParam.getNDid(),AccessEnum.L_DEV_INFO.getCode(),version,clDid); askDevData(devAccessParam.getNDid(),AccessEnum.L_DEV_INFO.getCode(),version,clDid);
@@ -187,6 +239,9 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
String key = AppRedisKey.LINE_DATA + devAccessParam.getNDid(); String key = AppRedisKey.LINE_DATA + devAccessParam.getNDid();
list = objectToList2(redisUtil.getObjectByKey(key)); list = objectToList2(redisUtil.getObjectByKey(key));
if (CollectionUtils.isEmpty(list)){ if (CollectionUtils.isEmpty(list)){
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.LDEVINFO_IS_NULL.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.LDEVINFO_IS_NULL); throw new BusinessException(AccessResponseEnum.LDEVINFO_IS_NULL);
} }
//3.监测点表录入关系 //3.监测点表录入关系
@@ -233,6 +288,9 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
List<String> position = csLinePoList.stream().map(CsLinePO::getPosition).collect(Collectors.toList()); List<String> position = csLinePoList.stream().map(CsLinePO::getPosition).collect(Collectors.toList());
List<String> lineList = position.stream().filter(e-> Collections.frequency(position,e) > 1).distinct().collect(Collectors.toList()); List<String> lineList = position.stream().filter(e-> Collections.frequency(position,e) > 1).distinct().collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(lineList)){ if (CollectionUtil.isNotEmpty(lineList)){
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.LINE_POSITION_REPEAT.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.LINE_POSITION_REPEAT); throw new BusinessException(AccessResponseEnum.LINE_POSITION_REPEAT);
} }
csLineService.saveBatch(csLinePoList); csLineService.saveBatch(csLinePoList);
@@ -252,6 +310,9 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
String key2 = AppRedisKey.SOFTINFO + devAccessParam.getNDid(); String key2 = AppRedisKey.SOFTINFO + devAccessParam.getNDid();
RspDataDto.SoftInfo softInfo = JSON.parseObject(JSON.toJSONString(redisUtil.getObjectByKey(key2)), RspDataDto.SoftInfo.class); RspDataDto.SoftInfo softInfo = JSON.parseObject(JSON.toJSONString(redisUtil.getObjectByKey(key2)), RspDataDto.SoftInfo.class);
if (Objects.isNull(softInfo)){ if (Objects.isNull(softInfo)){
logDto.setResult(0);
logDto.setFailReason(AccessResponseEnum.SOFTINFO_IS_NULL.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(AccessResponseEnum.SOFTINFO_IS_NULL); throw new BusinessException(AccessResponseEnum.SOFTINFO_IS_NULL);
} }
//记录设备软件信息 //记录设备软件信息
@@ -270,12 +331,16 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
redisUtil.delete(AppRedisKey.LINE + devAccessParam.getNDid()); redisUtil.delete(AppRedisKey.LINE + devAccessParam.getNDid());
redisUtil.delete(AppRedisKey.LINE_DATA + devAccessParam.getNDid()); redisUtil.delete(AppRedisKey.LINE_DATA + devAccessParam.getNDid());
redisUtil.delete(AppRedisKey.SOFTINFO + devAccessParam.getNDid()); redisUtil.delete(AppRedisKey.SOFTINFO + devAccessParam.getNDid());
//存储日志
csLogsFeignClient.addUserLog(logDto);
} catch (Exception e) { } catch (Exception e) {
logDto.setResult(0);
logDto.setFailReason(CommonResponseEnum.FAIL.getMessage());
csLogsFeignClient.addUserLog(logDto);
throw new BusinessException(CommonResponseEnum.FAIL); throw new BusinessException(CommonResponseEnum.FAIL);
} }
} }
public void devAccess(String nDid,String version) { public void devAccess(String nDid,String version) {
ReqAndResDto.Req reqAndResParam = new ReqAndResDto.Req(); ReqAndResDto.Req reqAndResParam = new ReqAndResDto.Req();
reqAndResParam.setMid(1); reqAndResParam.setMid(1);

View File

@@ -11,6 +11,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects; import java.util.Objects;
/** /**
@@ -58,4 +59,9 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
return result; return result;
} }
@Override
public List<CsEquipmentDeliveryPO> getAll() {
return this.lambdaQuery().ne(CsEquipmentDeliveryPO::getRunStatus,0).list();
}
} }

View File

@@ -7,6 +7,7 @@ import com.njcn.access.mapper.CsTopicMapper;
import com.njcn.access.pojo.po.CsTopic; import com.njcn.access.pojo.po.CsTopic;
import com.njcn.access.service.ICsTopicService; import com.njcn.access.service.ICsTopicService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List; import java.util.List;
@@ -34,6 +35,11 @@ public class CsTopicServiceImpl extends ServiceImpl<CsTopicMapper, CsTopic> impl
@Override @Override
public String getVersion(String nDid) { public String getVersion(String nDid) {
return this.lambdaQuery().eq(CsTopic::getNDid,nDid).isNotNull(CsTopic::getVersion).list().get(0).getVersion(); String version = null;
List<CsTopic> list = this.lambdaQuery().eq(CsTopic::getNDid,nDid).isNotNull(CsTopic::getVersion).list();
if (CollectionUtil.isNotEmpty(list)){
version = list.get(0).getVersion();
}
return version;
} }
} }