Commit 67165d17 authored by duanruiming's avatar duanruiming

[update] 辖区分组优化同步信号机状态优化

parent b68c6ba1
package net.wanji.web.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -13,6 +15,7 @@ import java.util.Date;
@Data
@TableName("t_device_status")
public class TDeviceStatusInfo {
@TableId(value = "id", type = IdType.AUTO)
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "设备代码")
......
......@@ -13,7 +13,7 @@ import java.util.Date;
*/
@Data
public class TDeviceStatusLog {
@TableId(type = IdType.AUTO)
@TableId(value = "id", type = IdType.AUTO)
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "设备代码")
......
......@@ -475,13 +475,18 @@ public class SituationDetectionServiceImpl implements SituationDetectionService
jurisdictionAreaVO.setId(String.valueOf(crossInfo.getId()));
jurisdictionAreaVO.setName(crossInfo.getName());
jurisdictionAreaVO.setType("2");
String name = null;
String location = null;
for (CrossInfoOutVo crossInfoOutVo : crossInfoOutVoList) {
if (StringUtils.equals(crossInfoOutVo.getId(), crossInfo.getId())) {
location = crossInfoOutVo.getLocation();
break;
for (TBaseCrossInfo tBaseCrossInfo : tBaseCrossInfos) {
if (StringUtils.equals(tBaseCrossInfo.getId(), crossInfo.getId())) {
name = tBaseCrossInfo.getName();
location = tBaseCrossInfo.getLocation();
if (location.contains("POINT")) {
location = location.replace("POINT(", "").replace(" ", ",").replace(")", "");
}
}
}
jurisdictionAreaVO.setName(name);
jurisdictionAreaVO.setPoint(location);
jurisdictionAreaVO.setLevel(0);
jurisdictionAreaVO.setParentCode("0");
......@@ -502,13 +507,9 @@ public class SituationDetectionServiceImpl implements SituationDetectionService
if (StringUtils.equals(tBaseCrossInfo.getId(), tBaseAreaCross.getCrossId())) {
name = tBaseCrossInfo.getName();
location = tBaseCrossInfo.getLocation();
break;
}
}
for (CrossInfoOutVo crossInfoOutVo : crossInfoOutVoList) {
if (StringUtils.equals(crossInfoOutVo.getId(), tBaseAreaCross.getCrossId())) {
location = crossInfoOutVo.getLocation();
break;
if (location.contains("POINT")) {
location = location.replace("POINT(", "").replace(" ", ",").replace(")", "");
}
}
}
signalAreaVO.setName(name);
......
......@@ -5,6 +5,8 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.utils.tool.BeanMapUtils;
import net.wanji.databus.dao.mapper.CrossInfoMapper;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.vo.SignalStatusVO;
import net.wanji.feign.service.UtcFeignClients;
import net.wanji.web.entity.TCrossControlHist;
......@@ -22,6 +24,7 @@ import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author duanruiming
......@@ -35,6 +38,7 @@ public class SignalStatusTask {
private final TDeviceStatusMapper tDeviceStatusMapper;
private final ControlHistMapper controlHistMapper;
private final TDeviceStatusLogMapper tDeviceStatusLogMapper;
private final CrossInfoMapper crossInfoMapper;
@Scheduled(fixedRate = 1 * 60 * 1000)
@Transactional
......@@ -47,9 +51,17 @@ public class SignalStatusTask {
}
List<Map<String, Object>> source = (List<Map<String, Object>>) jsonViewObject.getContent();
List<SignalStatusVO> content = BeanMapUtils.mapsToObjects(source, SignalStatusVO.class);
List<String> crossIdList = content.stream().map(SignalStatusVO::getCrossId).collect(Collectors.toList());
List<CrossInfoPO> crossInfoPOList = crossInfoMapper.selectByCrossIds(crossIdList);
content.forEach(signalStatusVO -> {
String signalId = signalStatusVO.getSignalId();
String crossId = signalStatusVO.getCrossId();
String name = null;
for (CrossInfoPO crossInfoPO : crossInfoPOList) {
if (StringUtils.equals(crossId, crossInfoPO.getId())) {
name = crossInfoPO.getName();
break;
}
}
Integer currentSignalStatus = signalStatusVO.getStatus() == null ? 0 : signalStatusVO.getStatus();
Integer currentFaultType = signalStatusVO.getFaultType() == null ? 0 : signalStatusVO.getFaultType();
......@@ -58,17 +70,26 @@ public class SignalStatusTask {
if (StringUtils.isNotEmpty(crossId)) {
lambdaQueryWrapper.eq(TDeviceStatusInfo::getCode, crossId);
TDeviceStatusInfo tDeviceStatusInfo = tDeviceStatusMapper.selectOne(lambdaQueryWrapper);
if (isExucuteUpdate(currentSignalStatus, currentFaultType, tDeviceStatusInfo)) {
if (!Objects.equals(0, currentFaultType)) {
tDeviceStatusInfo.setStatus(2);
} else {
tDeviceStatusInfo.setStatus(currentFaultType);
if (Objects.nonNull(tDeviceStatusInfo)) {
if (isExucuteUpdate(currentSignalStatus, currentFaultType, tDeviceStatusInfo)) {
if (currentSignalStatus == 1 && !Objects.equals(0, currentFaultType)) {
currentSignalStatus = 2;
}
tDeviceStatusInfo.setFaultType(currentFaultType);
tDeviceStatusInfo.setGmtCreate(new Date()); // 实时数据,创建和修改时间一致
tDeviceStatusMapper.updateById(tDeviceStatusInfo);
insertDeviceStatusLog(signalStatusVO, crossId, currentSignalStatus, currentFaultType, name);
}
tDeviceStatusInfo.setFaultType(currentFaultType);
tDeviceStatusInfo.setGmtCreate(new Date()); // 实时数据,创建和修改时间一致
tDeviceStatusMapper.updateById(tDeviceStatusInfo);
insertDeviceStatusLog(signalStatusVO, crossId, currentSignalStatus, currentFaultType);
} else {
TDeviceStatusInfo deviceStatusInfo = new TDeviceStatusInfo();
deviceStatusInfo.setCode(crossId);
deviceStatusInfo.setName(name);
deviceStatusInfo.setType(1);
deviceStatusInfo.setStatus(currentSignalStatus);
deviceStatusInfo.setFaultType(currentFaultType);
deviceStatusInfo.setGmtCreate(new Date());
deviceStatusInfo.setId(null);
tDeviceStatusMapper.insert(deviceStatusInfo);
}
}
insertControlHist(signalStatusVO);
......@@ -101,23 +122,22 @@ public class SignalStatusTask {
* @param currentSignalStatus
* @param currentFaultType
*/
private void insertDeviceStatusLog(SignalStatusVO signalStatusVO, String crossId, Integer currentSignalStatus, Integer currentFaultType) {
private void insertDeviceStatusLog(SignalStatusVO signalStatusVO, String crossId, Integer currentSignalStatus, Integer currentFaultType, String name) {
// 插入日志表
TDeviceStatusLog tDeviceStatusLogInfoDB = tDeviceStatusLogMapper.selectLastOne(crossId);
// DB数据是故障,如果当前正常非故障,状态为 FaultType=100 故障已处理
if (Objects.nonNull(tDeviceStatusLogInfoDB) || tDeviceStatusLogInfoDB.getFaultType() != 0 && currentFaultType == 0) {
if (Objects.nonNull(tDeviceStatusLogInfoDB) && tDeviceStatusLogInfoDB.getFaultType() != currentFaultType) {
tDeviceStatusLogInfoDB.setStatus(currentSignalStatus);
tDeviceStatusLogInfoDB.setFaultType(100);
tDeviceStatusLogInfoDB.setFaultType(tDeviceStatusLogInfoDB.getFaultType());
tDeviceStatusLogInfoDB.setGmtCreate(new Date());
tDeviceStatusLogInfoDB.setId(null);
tDeviceStatusLogMapper.insert(tDeviceStatusLogInfoDB);
} else {
TDeviceStatusLog tDeviceStatusLog = new TDeviceStatusLog();
tDeviceStatusLog.setCode(crossId);
tDeviceStatusLog.setName(signalStatusVO.getSignalId());
tDeviceStatusLog.setName(name);
tDeviceStatusLog.setType(1);
tDeviceStatusLog.setStatus(signalStatusVO.getStatus());
tDeviceStatusLog.setFaultType(currentFaultType);
tDeviceStatusLog.setFaultType(signalStatusVO.getFaultType());
tDeviceStatusLog.setGmtCreate(new Date());
tDeviceStatusLog.setId(null);
tDeviceStatusLogMapper.insert(tDeviceStatusLog);
......@@ -125,6 +145,8 @@ public class SignalStatusTask {
}
private static boolean isExucuteUpdate(Integer currentSignalStatus, Integer currentFaultType, TDeviceStatusInfo tDeviceStatusInfo) {
return Objects.nonNull(tDeviceStatusInfo) && (currentSignalStatus != tDeviceStatusInfo.getStatus() || currentFaultType != tDeviceStatusInfo.getFaultType());
// 故障自定义,当故障时,状态对应海康在线
int status = tDeviceStatusInfo.getStatus() == 2 ? 1 : tDeviceStatusInfo.getStatus();
return Objects.nonNull(tDeviceStatusInfo) && (currentSignalStatus != status || currentFaultType != tDeviceStatusInfo.getFaultType());
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment