Browse Source

Merge remote-tracking branch 'origin/develop' into develop

develop
wangsixiang 12 months ago
parent
commit
c3a7742aec
  1. 20
      zc-business/src/main/java/com/zc/business/controller/DcEmergencyPlansController.java
  2. 10
      zc-business/src/main/java/com/zc/business/controller/DcWarningController.java
  3. 17
      zc-business/src/main/java/com/zc/business/controller/DeviceStatus.java
  4. 38
      zc-business/src/main/java/com/zc/business/controller/StatusController.java
  5. 8
      zc-business/src/main/java/com/zc/business/domain/DcEmergencyPlans.java
  6. 12
      zc-business/src/main/java/com/zc/business/domain/Status.java
  7. 4
      zc-business/src/main/java/com/zc/business/mapper/DcWarningMapper.java
  8. 160
      zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java
  9. 11
      zc-business/src/main/java/com/zc/business/service/DcEmergencyPlansService.java
  10. 2
      zc-business/src/main/java/com/zc/business/service/IDcWarningService.java
  11. 313
      zc-business/src/main/java/com/zc/business/service/impl/DcEmergencyPlansServiceImpl.java
  12. 6
      zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java
  13. 24
      zc-business/src/main/resources/mapper/business/DcWarningMapper.xml
  14. 24
      zc-business/src/main/resources/mapper/business/StatusMapper.xml

20
zc-business/src/main/java/com/zc/business/controller/DcEmergencyPlansController.java

@ -78,6 +78,26 @@ public class DcEmergencyPlansController extends BaseController {
return AjaxResult.success(dcEmergencyPlansList);
}
/**
* 交通事件-情报板确认回显原始模板
*/
@ApiOperation("交通事件-情报板确认回显原始模板")
@PreAuthorize("@ss.hasPermi('business:plans:list')")
@PostMapping("/event/board/confirm")
public AjaxResult eventBoardConfirm(@RequestBody DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) {
return AjaxResult.success(dcEmergencyPlansService.eventBoardConfirm(dcEventAnDcEmergencyPlans));
}
/**
* 感知事件-情报板确认回显原始模板
*/
@ApiOperation("感知事件-情报板确认回显原始模板")
@PreAuthorize("@ss.hasPermi('business:plans:list')")
@PostMapping("/warning/board/confirm")
public AjaxResult warningBoardConfirm(@RequestBody DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) {
return AjaxResult.success(dcEmergencyPlansService.warningBoardConfirm(dcEventAnDcEmergencyPlans));
}
/**
* 感知事件-情报板自动生成文字
*/

10
zc-business/src/main/java/com/zc/business/controller/DcWarningController.java

@ -119,5 +119,15 @@ public class DcWarningController extends BaseController
}
return toAjax(dcWarningService.deleteDcWarningByStringId(dcWarning));
}
/**
*视频AI 上报 条件查询
*/
@GetMapping("/selectDcWarningoTherConfiglist")
public TableDataInfo selectDcWarningoTherConfig(DcWarning dcWarning)
{
startPage();
List<HashMap<String,Object>> list = dcWarningService.selectDcWarningoTherConfig(dcWarning);
return getDataTable(list);
}
}

17
zc-business/src/main/java/com/zc/business/controller/DeviceStatus.java

@ -1,5 +1,6 @@
package com.zc.business.controller;
import com.github.pagehelper.util.StringUtil;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.zc.business.domain.DcDevice;
import com.zc.business.service.IDcDeviceService;
@ -54,17 +55,17 @@ public class DeviceStatus {
Callable<Void> task = () -> {
try {
Status status = new Status();
InetAddress address = InetAddress.getByName(device.getDeviceIp());
String lostRate = getPingPacketLossRate(device.getDeviceIp());
boolean reachable = address.isReachable(5000); // Timeout: 5 seconds
status.setDeviceNo(device.getStakeMark());
status.setDeviceName(device.getDeviceName());
status.setDeviceIp(device.getDeviceIp());
status.setDeviceId(device.getId());
LocalDateTime localDateTime = LocalDateTime.now();
status.setTime(localDateTime);
if(StringUtil.isNotEmpty(device.getDeviceIp())) {
InetAddress address = InetAddress.getByName(device.getDeviceIp());
String lostRate = getPingPacketLossRate(device.getDeviceIp());
boolean reachable = address.isReachable(5000); // Timeout: 5 seconds
status.setLostRate(lostRate);
if (reachable) {
status.setDeviceStatus(1);
status.setSuccessRate("100.00%");
@ -72,7 +73,11 @@ public class DeviceStatus {
status.setDeviceStatus(0);
status.setSuccessRate("0.00%");
}
}else{
status.setDeviceStatus(0);
status.setSuccessRate("0.00%");
status.setLostRate("100.00%");
}
statusService.Add(status);
} catch (IOException e) {
System.out.println("Error pinging " + device.getDeviceIp() + ": " + e.getMessage());

38
zc-business/src/main/java/com/zc/business/controller/StatusController.java

@ -100,23 +100,23 @@ public class StatusController extends BaseController {
public AjaxResult getTypeList()
{
HashMap<String, String> itemTypeMap = new HashMap<>();
itemTypeMap.put("1", "高清网络枪型固定摄像机");
itemTypeMap.put("2", "高清网络球形摄像机");
itemTypeMap.put("3", "桥下高清网络球形摄像机");
itemTypeMap.put("4", "360°全景摄像机");
itemTypeMap.put("5", "180°全景摄像机");
itemTypeMap.put("6", "门架式可变信息标志");
itemTypeMap.put("7", "雨棚可变信息标志");
itemTypeMap.put("8", "站前悬臂式可变信息标志");
itemTypeMap.put("9", "气象检测器");
itemTypeMap.put("10", "路段语音广播系统");
itemTypeMap.put("11", "护栏碰撞预警系统");
itemTypeMap.put("12", "毫米波雷达");
itemTypeMap.put("13", "合流区预警系统");
itemTypeMap.put("14", "激光疲劳唤醒");
itemTypeMap.put("15", "一类交通量调查站");
itemTypeMap.put("16", "智能行车诱导系统");
itemTypeMap.put("17", "智能设备箱");
itemTypeMap.put("1-1", "高清网络枪型固定摄像机");
itemTypeMap.put("1-2", "高清网络球形摄像机");
itemTypeMap.put("1-3", "桥下高清网络球形摄像机");
itemTypeMap.put("1-4", "360°全景摄像机");
itemTypeMap.put("1-5", "180°全景摄像机");
itemTypeMap.put("2-1", "门架式可变信息标志");
itemTypeMap.put("2-3", "雨棚可变信息标志");
itemTypeMap.put("2-4", "站前悬臂式可变信息标志");
itemTypeMap.put("3", "气象检测器");
itemTypeMap.put("5", "路段语音广播系统");
itemTypeMap.put("6", "护栏碰撞预警系统");
itemTypeMap.put("7", "毫米波雷达");
itemTypeMap.put("8", "合流区预警系统");
itemTypeMap.put("10", "激光疲劳唤醒");
itemTypeMap.put("11", "一类交通量调查站");
itemTypeMap.put("12", "智能行车诱导系统");
itemTypeMap.put("13", "智能设备箱");
LocalDateTime todayStart = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);
LocalDateTime currentTime = LocalDateTime.now();
Status status = new Status();
@ -153,7 +153,9 @@ public class StatusController extends BaseController {
maps.put("failRate",failRate);
//总数
maps.put("sum",String.valueOf(groupItems.size()));
subMap.put(itemTypeMap.get(entrys.getKey()),maps);
if(itemTypeMap.get(entrys.getKey())!=null) {
subMap.put(itemTypeMap.get(entrys.getKey()), maps);
}
}
Map<String, String> maps=new HashMap<>();
double lostRate = lastEntry.stream()

8
zc-business/src/main/java/com/zc/business/domain/DcEmergencyPlans.java

@ -81,11 +81,17 @@ public class DcEmergencyPlans {
@ApiModelProperty("事件分类")
private int eventCategory;
/**
* 执行操作列表
*/
@ApiModelProperty("执行操作列表")
private List<DcExecuteAction> dcExecuteAction;
/**
* 执行操作
*/
@ApiModelProperty("执行操作")
private List<DcExecuteAction> dcExecuteAction;
private DcExecuteAction executeAction;
}

12
zc-business/src/main/java/com/zc/business/domain/Status.java

@ -117,6 +117,10 @@ public class Status {
@Excel(name = "状态")
private int deviceStatus;
private Long deviceId;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern ="yyyy-MM-dd HH:mm:ss")
@Excel(name = "监测时间", width = 30, dateFormat = "yyyy-MM-dd")
@ -194,6 +198,14 @@ public class Status {
this.content = content;
}
public Long getDeviceId() {
return deviceId;
}
public void setDeviceId(Long deviceId) {
this.deviceId = deviceId;
}
@Excel(name = "型号")
private String model;

4
zc-business/src/main/java/com/zc/business/mapper/DcWarningMapper.java

@ -66,4 +66,8 @@ public interface DcWarningMapper
int updateState(DcWarning dcWarning);
//感知事件删除
int deleteDcWarningByStringId(DcWarning dcWarning);
//AI视频
List<HashMap<String,Object>> selectDcWarningoTherConfig(DcWarning dcWarning);
}

160
zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java

@ -25,16 +25,20 @@ import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
/**
* 设备消息处理
*
* @author xiepufeng
*/
@Service
public class DeviceMessageHandler {
private final int EVENT_AI = 1;
private final int EVENT_STATE = 1;
private final int EVENTEND_STATE = 4;
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Resource
@ -101,6 +105,7 @@ public class DeviceMessageHandler {
/**
* 摄像头检测事件处理
*
* @param event 事件数据
*/
private void cameraDetectionEventHandle(JSONObject event) {
@ -108,7 +113,29 @@ public class DeviceMessageHandler {
JSONObject data = event.getJSONObject("data");
DcWarning dcWarning = new DcWarning();
/**
* case "constructionEnd":"施工结束";
* case "congestionEnd":"拥堵结束";
* case "illegalParkingEnd":"违停结束";
* case "lowVisibilityEnd":"低环境能见度结束";
* case "singleVehicleBreakdownEnd":"单车抛锚结束";
* case "pedestrianEnd":"行人事件结束";
* case "abandonedObjectEnd":"抛洒物结束";
* trafficAccidentEnd 交通事故结束
* case "unknown":"未知";
* case "desc":"单车抛锚是指单辆车抛锚(故障)停止";//4-5
* */
String illegalTrafficEventSubType = data.getString("illegalTrafficEventSubType");
if (!illegalTrafficEventSubType.equals("constructionEnd") &&
!illegalTrafficEventSubType.equals("congestionEnd") &&
!illegalTrafficEventSubType.equals("illegalParkingEnd") &&
!illegalTrafficEventSubType.equals("lowVisibilityEnd") &&
!illegalTrafficEventSubType.equals("singleVehicleBreakdownEnd") &&
!illegalTrafficEventSubType.equals("pedestrianEnd") &&
!illegalTrafficEventSubType.equals("trafficAccidentEnd") &&
!illegalTrafficEventSubType.equals("abandonedObjectEnd")
) {
// 桩号
dcWarning.setStakeMark(data.getString("stakeMark"));
// 方向
@ -129,15 +156,12 @@ public class DeviceMessageHandler {
dcWarning.setWarningSubclass(warningSubclass);
String stakeMarkDescription = data.getString("stakeMarkDescription");
String title = stakeMarkDescription + WarningSubclassEnum.getDecorateInfo(warningSubclass);
// 标题
dcWarning.setWarningTitle(title);
dcWarning.setRemark(convertTimestampToString(captureTime) + " " + title);
// 影响车道
dcWarning.setLane(String.valueOf(data.getInteger("relatedLaneNo")));
// 物联设备id
String iotDeviceId = event.getString("deviceId");
@ -149,22 +173,140 @@ public class DeviceMessageHandler {
JSONArray pictures = data.getJSONArray("pictures");
JSONArray video = data.getJSONArray("videoList");
// List<String> pictureList = pictures.stream().map(picture -> (iotAddress + "/profile" + picture)).collect(Collectors.toList());
JSONObject otherConfig = new JSONObject();
otherConfig.put("pictures", pictures);
/**视频地址*/
otherConfig.put("videoList", video);
/** 事件id*/ // 去掉空格和双引号
Long targetId = data.getLong("targetId");
otherConfig.put("targetId", targetId);
/**事件位置*/
Long coordinate = data.getLong("coordinate");
otherConfig.put("coordinate", coordinate);
/* JSONObject combinedData = new JSONObject();
combinedData.put("address", otherConfig);*/
dcWarning.setOtherConfig(otherConfig.toString());
dcWarningService.insertDcWarning(dcWarning);
}
//无法判定事件结束上报的类型有:占用应急车道,路障,逆行,机占非
//非持续性事件:拥堵、
if (illegalTrafficEventSubType.equals("congestion")) {
//无ID无框
extracted(data, dcWarning);
}
//持续性事件
//行人结束事件上报(无ID无框)
if (illegalTrafficEventSubType.equals("pedestrianEnd")) {
//无ID无框
extracted(data, dcWarning);
}
//能见度(无ID无框)
if (illegalTrafficEventSubType.equals("lowVisibilityEnd")) {
//无ID无框
extracted(data, dcWarning);
}
//施工(无ID有框)
if (illegalTrafficEventSubType.equals("constructionEnd")) {
extracted1(data, dcWarning);
}
//抛洒物(有ID有框)
if (illegalTrafficEventSubType.equals("abandonedObjectEnd")){
extracted3(data, dcWarning);
}
//事故(有ID有框)
if(illegalTrafficEventSubType.equals("trafficAccidentEnd")){
extracted3(data, dcWarning);
}
//车辆抛锚有ID有框)
if(illegalTrafficEventSubType.equals("singleVehicleBreakdownEnd")){
extracted3(data, dcWarning);
}
//违停(有ID有框)
if(illegalTrafficEventSubType.equals("illegalParkingEnd")){
extracted3(data, dcWarning);
}
}
//(有ID有框)
private void extracted3(JSONObject data, DcWarning dcWarning) {
//事件上报ID
String targetId = data.getString("targetId");
//事件位置
String coordinate = data.getString("coordinate");
String stakeMark = data.getString("stakeMark");
dcWarning.setStakeMark(stakeMark);
// 事件主类型
dcWarning.setWarningType(data.getInteger("warningType"));
dcWarning.setWarningSource(EVENT_AI);//事件来源
dcWarning.setWarningState(EVENT_STATE);//事件状态
List<HashMap<String, Object>> hashMaps = dcWarningService.selectDcWarningoTherConfig(dcWarning);
for (HashMap<String, Object> hashMap : hashMaps) {
String id = (String) hashMap.get("Id");
String targetIdEvent = (String) hashMap.get("targetId");
//事件位置
String coordinateEvent = (String) hashMap.get("coordinate");
if (coordinate.equals(coordinateEvent)&&targetId.equals(targetIdEvent)) {
DcWarning dcWarning2 = new DcWarning();
dcWarning2.setId(id);
//自动确定状态
dcWarning2.setWarningState(EVENTEND_STATE);
dcWarningService.updateDcWarning(dcWarning2);
}
}
}
//无ID有框
private void extracted1(JSONObject data, DcWarning dcWarning) {
//事件位置
String coordinate = data.getString("coordinate");
String stakeMark = data.getString("stakeMark");
dcWarning.setStakeMark(stakeMark);
// 事件主类型
dcWarning.setWarningType(data.getInteger("warningType"));
dcWarning.setWarningSource(EVENT_AI);//事件来源
dcWarning.setWarningState(EVENT_STATE);//事件状态
List<HashMap<String, Object>> hashMaps = dcWarningService.selectDcWarningoTherConfig(dcWarning);
for (HashMap<String, Object> hashMap : hashMaps) {
String id = (String) hashMap.get("Id");
//事件位置
String coordinateEvent = (String) hashMap.get("coordinate");
if (coordinate.equals(coordinateEvent)) {
DcWarning dcWarning2 = new DcWarning();
dcWarning2.setId(id);
//自动确定状态
dcWarning2.setWarningState(EVENTEND_STATE);
dcWarningService.updateDcWarning(dcWarning2);
}
}
}
//无ID无框
private void extracted(JSONObject data, DcWarning dcWarning) {
// 桩号
String stakeMark = data.getString("stakeMark");
dcWarning.setStakeMark(stakeMark);
// 事件主类型
dcWarning.setWarningType(data.getInteger("warningType"));
dcWarning.setWarningSource(EVENT_AI);//事件来源
dcWarning.setWarningState(EVENT_STATE);//事件状态
List<HashMap<String, Object>> hashMaps = dcWarningService.selectDcWarningoTherConfig(dcWarning);
for (HashMap<String, Object> hashMap : hashMaps) {
String id = (String) hashMap.get("Id");
DcWarning dcWarning2 = new DcWarning();
dcWarning2.setId(id);
dcWarning2.setWarningState(EVENTEND_STATE);
dcWarningService.updateDcWarning(dcWarning2);
}
}
/**
* 将毫秒级时间戳转换为"yyyy-MM-dd HH:mm:ss"格式的字符串

11
zc-business/src/main/java/com/zc/business/service/DcEmergencyPlansService.java

@ -3,6 +3,7 @@ package com.zc.business.service;
import com.zc.business.domain.*;
import java.util.List;
import java.util.Map;
/**
* 事件预案Service接口
@ -45,6 +46,16 @@ public interface DcEmergencyPlansService {
*/
List<DcEmergencyPlans> selectDcEmergencyPlansByWarningType(DcWarning dcWarning);
/**
* 交通事件-情报板确认回显原始模板
*/
Map<String,List<DcInfoBoardTemplate>> eventBoardConfirm(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans);
/**
* 感知事件-情报板确认回显原始模板
*/
Map<String,List<DcInfoBoardTemplate>> warningBoardConfirm(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans);
/**
* 交通事件确定
*

2
zc-business/src/main/java/com/zc/business/service/IDcWarningService.java

@ -67,4 +67,6 @@ public interface IDcWarningService
AjaxResult updateWarningConvert(DcWarning dcWarning);
//感知事件删除
int deleteDcWarningByStringId(DcWarning dcWarning);
List<HashMap<String,Object>> selectDcWarningoTherConfig(DcWarning dcWarning);
}

313
zc-business/src/main/java/com/zc/business/service/impl/DcEmergencyPlansServiceImpl.java

@ -8,6 +8,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.zc.business.constant.DeviceFunctionIdConstants;
import com.zc.business.constant.DeviceTypeConstants;
import com.zc.business.controller.BroadcastController;
@ -158,6 +159,227 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService {
}
}
/**
* 交通事件-情报板确认回显原始模板
*/
@Override
public Map<String,List<DcInfoBoardTemplate>> eventBoardConfirm(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) {
// 获取事件数据
DcEvent dcEvent = dcEventAnDcEmergencyPlans.getDcEvent();
// 方向
String direction = dcEvent.getDirection();
// 事件桩号
dcEvent.setStakeMark(dcEvent.getStakeMark().replace("K",""));
String[] markArray = dcEvent.getStakeMark().split("\\+");
if (markArray[1].length() < 3) {
// 不足三位 补零
markArray[1] = String.format("%0" + 3 + "d", markArray[1]);
}
DcExecuteAction executeAction = dcEventAnDcEmergencyPlans.getDcEmergencyPlans().getExecuteAction();
List<DcDevice> dcDevices = ruleFiltering(executeAction, markArray, direction);
return getBoardTemplate(dcDevices);
}
/**
* 感知事件-情报板确认回显原始模板
*/
@Override
public Map<String,List<DcInfoBoardTemplate>> warningBoardConfirm(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) {
// 获取事件数据
DcWarning dcWarning = dcEventAnDcEmergencyPlans.getDcWarning();
// 方向
String direction = dcWarning.getDirection();
// 事件桩号
dcWarning.setStakeMark(dcWarning.getStakeMark().replace("K",""));
String[] markArray = dcWarning.getStakeMark().split("\\+");
if (markArray[1].length() < 3) {
// 不足三位 补零
markArray[1] = String.format("%0" + 3 + "d", markArray[1]);
}
DcExecuteAction executeAction = dcEventAnDcEmergencyPlans.getDcEmergencyPlans().getExecuteAction();
List<DcDevice> dcDevices = ruleFiltering(executeAction, markArray, direction);
return getBoardTemplate(dcDevices);
}
/**
* 情报板设备执行3A功能,获取模板
*/
public Map<String,List<DcInfoBoardTemplate>> getBoardTemplate(List<DcDevice> dcDevices) {
Map<String,List<DcInfoBoardTemplate>> map = new HashMap<>();
dcDevices.forEach(dcDevice -> {
try {
if (StringUtils.isEmpty(dcDevice.getIotDeviceId())) {
return;
}
AjaxResult ajaxResult = dcDeviceController.getDeviceRealtimeProperty(dcDevice.getIotDeviceId(), "3A", new HashMap<>());
if (ajaxResult.get("code").equals(200)) {
JSONObject properties = JSON.parseObject(JSON.parseObject(ajaxResult.get("data").toString()).get("3A").toString());
JSONArray contentArray = JSONArray.parseArray(properties.get("content").toString());
List<DcInfoBoardTemplate> list = new ArrayList<>();
contentArray.forEach(content -> {
DcInfoBoardTemplate dcInfoBoardTemplate = new DcInfoBoardTemplate();
JSONObject jsonObject = JSON.parseObject(content.toString());
String displayAreaWidth = jsonObject.get("displayAreaWidth").toString();
String displayAreaHeight = jsonObject.get("displayAreaHeight").toString();
// 内容
dcInfoBoardTemplate.setContent(jsonObject.get("textContent").toString());
// 前景颜色
dcInfoBoardTemplate.setFontColor(jsonObject.get("foregroundColor").toString());
// 屏幕尺寸
dcInfoBoardTemplate.setScreenSize(displayAreaWidth+"*"+displayAreaHeight);
// 字号
dcInfoBoardTemplate.setFontSize(jsonObject.get("fontSize").toString());
// 字体风格
dcInfoBoardTemplate.setFontType(jsonObject.get("fontStyle").toString());
// 字距
dcInfoBoardTemplate.setFontSpacing(jsonObject.get("fontSpacing").toString());
// 停留时间
dcInfoBoardTemplate.setStopTime(jsonObject.get("residenceTime").toString());
// 入屏方式
dcInfoBoardTemplate.setInScreenMode(jsonObject.get("screenEntryMethod").toString());
// 水平对齐
dcInfoBoardTemplate.setFormatStyle(jsonObject.get("horizontalAlignment").toString());
list.add(dcInfoBoardTemplate);
});
map.put(dcDevice.getDeviceName(),list);
}
} catch (Exception e) {
e.printStackTrace();
}
});
return map;
}
/**
* 执行操作中的规则筛选
* @param dcExecuteAction
* @param markArray
* @param direction
* @return
*/
public List<DcDevice> ruleFiltering(DcExecuteAction dcExecuteAction,String[] markArray,String direction){
Integer searchRule = dcExecuteAction.getSearchRule();
List<String> start = new ArrayList<>();
List<String> end = new ArrayList<>();
// 设备列表
List<DcDevice> dcDevices = new ArrayList<>();
Map<String, Object> parameter = new HashMap<>();
parameter.put("deviceType", dcExecuteAction.getDeviceType());
// 根据不同的检索规则条件 获取设备
if (searchRule.equals(1)) {
// 指定设备资源
// 根据设备id,获取设备集合
LambdaQueryWrapper<DcDevice> queryWrapper = new LambdaQueryWrapper<>();
JSONObject otherConfig = JSON.parseObject(dcExecuteAction.getOtherConfig());
List<String> deviceList = (List<String>)otherConfig.get("deviceList");
queryWrapper.in(DcDevice::getIotDeviceId, deviceList);
dcDevices = dcDeviceService.list(queryWrapper);
}
else if (searchRule.equals(2)) {
// 事件上游最近
if (direction.equals("1")) {
// 上行 取最大的几个
start.add("55");
start.add("379");
end.add(markArray[0]);
end.add(markArray[1]);
parameter.put("startStakeMark", start);
parameter.put("endStakeMark", end);
dcDevices = dcDeviceService.devicePileNumberQueryDevice(parameter);
Collections.sort(dcDevices, new Comparator<DcDevice>() {
@Override
public int compare(DcDevice o1, DcDevice o2) {
return o2.getStakeMark().compareTo(o1.getStakeMark());
}
});
if (dcDevices.size() > 0) {
dcDevices = dcDevices.subList(0 , dcExecuteAction.getNumber());
}
} else {
// 下行 取最小的几个
start.add(markArray[0]);
start.add(markArray[1]);
end.add("208");
end.add("154");
parameter.put("startStakeMark", start);
parameter.put("endStakeMark", end);
dcDevices = dcDeviceService.devicePileNumberQueryDevice(parameter);
Collections.sort(dcDevices, new Comparator<DcDevice>() {
@Override
public int compare(DcDevice o1, DcDevice o2) {
return o1.getStakeMark().compareTo(o2.getStakeMark());
}
});
if (dcDevices.size() > 0) {
dcDevices = dcDevices.subList(0, dcExecuteAction.getNumber());
}
}
}
else if (searchRule.equals(3)) {
// 事件下游最近
if (direction.equals("1")) {
// 上行 取最大的几个
start.add(markArray[0]);
start.add(markArray[1]);
end.add("208");
end.add("154");
parameter.put("startStakeMark", start);
parameter.put("endStakeMark", end);
dcDevices = dcDeviceService.devicePileNumberQueryDevice(parameter);
Collections.sort(dcDevices, new Comparator<DcDevice>() {
@Override
public int compare(DcDevice o1, DcDevice o2) {
return o1.getStakeMark().compareTo(o2.getStakeMark());
}
});
if (dcDevices.size() > 0) {
dcDevices = dcDevices.subList(0, dcExecuteAction.getNumber());
}
} else {
// 下行 取最小的几个
start.add("55");
start.add("379");
end.add(markArray[0]);
end.add(markArray[1]);
parameter.put("startStakeMark", start);
parameter.put("endStakeMark", end);
dcDevices = dcDeviceService.devicePileNumberQueryDevice(parameter);
Collections.sort(dcDevices, new Comparator<DcDevice>() {
@Override
public int compare(DcDevice o1, DcDevice o2) {
return o2.getStakeMark().compareTo(o1.getStakeMark());
}
});
// 需要对查出的设备,按照桩号进行排序从小到大
if (dcDevices.size() > 0) {
dcDevices = dcDevices.subList(0, dcExecuteAction.getNumber());
}
}
}
else {
// 最近公里数
Integer kilometers = Integer.parseInt(markArray[0].replaceAll("K", ""));
// 根据事件桩号、公里数 计算出 桩号范围
start.add(String.valueOf(kilometers - dcExecuteAction.getNumber()));
start.add(markArray[1]);
end.add(String.valueOf(kilometers + dcExecuteAction.getNumber()));
end.add(markArray[1]);
// 构造查询条件
parameter.put("startStakeMark", start);
parameter.put("endStakeMark", end);
parameter.put("deviceType", dcExecuteAction.getDeviceType());
// 根据桩号范围,查询附近设备
dcDevices = dcDeviceService.devicePileNumberQueryDevice(parameter);
}
return dcDevices;
}
/**
* 交通事件确定
@ -291,6 +513,7 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService {
// 存储所有设备的执行结果
JSONArray resultArray = new JSONArray();
// 事件桩号
stakeMark = stakeMark.replace("K","");
String[] markArray = stakeMark.split("\\+");
if (markArray[1].length() < 3) {
// 不足三位 补零
@ -304,95 +527,7 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService {
//获取事件预案中的 执行操作配置
dcEmergencyPlans.getDcExecuteAction()
.forEach(dcExecuteAction -> {
Integer searchRule = dcExecuteAction.getSearchRule();
List<String> start = new ArrayList<>();
List<String> end = new ArrayList<>();
// 设备列表
List<DcDevice> dcDevices = new ArrayList<>();
Map<String, Object> parameter = new HashMap<>();
parameter.put("deviceType", dcExecuteAction.getDeviceType());
// 根据不同的检索规则条件 获取设备
if (searchRule.equals(1)) {
// 指定设备资源
// 根据设备id,获取设备集合
LambdaQueryWrapper<DcDevice> queryWrapper = new LambdaQueryWrapper<>();
JSONObject otherConfig = JSON.parseObject(dcExecuteAction.getOtherConfig());
List<String> deviceList = (List<String>)otherConfig.get("deviceList");
queryWrapper.in(DcDevice::getIotDeviceId, deviceList);
dcDevices = dcDeviceService.list(queryWrapper);
}
else if (searchRule.equals(2)) {
// 事件上游最近
if (direction.equals("1")) {
// 上行 取最大的几个
start.add("55");
start.add("378.7");
end.add(markArray[0]);
end.add(markArray[1]);
parameter.put("startStakeMark", start);
parameter.put("endStakeMark", end);
dcDevices = dcDeviceService.devicePileNumberQueryDevice(parameter);
dcDevices = dcDevices.subList(dcDevices.size() - dcExecuteAction.getNumber(), dcDevices.size());
} else {
// 下行 取最小的几个
start.add(markArray[0]);
start.add(markArray[1]);
end.add("208");
end.add("153.4");
parameter.put("startStakeMark", start);
parameter.put("endStakeMark", end);
dcDevices = dcDeviceService.devicePileNumberQueryDevice(parameter);
dcDevices = dcDevices.subList(0, dcExecuteAction.getNumber());
}
// // 定义Comparator来比较DcDevice对象的stakeMark字段
// Comparator<DcDevice> comparator = Comparator.comparing(DcDevice::getStakeMark);
// // 对dcDevices进行升序排序
// Collections.sort(dcDevices, comparator);
// // 对dcDevices进行降序排序
// Collections.sort(dcDevices, comparator.reversed());
}
else if (searchRule.equals(3)) {
// 事件下游最近
if (direction.equals("1")) {
// 上行 取最大的几个
start.add(markArray[0]);
start.add(markArray[1]);
end.add("208");
end.add("153.4");
parameter.put("startStakeMark", start);
parameter.put("endStakeMark", end);
dcDevices = dcDeviceService.devicePileNumberQueryDevice(parameter);
dcDevices = dcDevices.subList(0, dcExecuteAction.getNumber());
} else {
// 下行 取最小的几个
start.add("55");
start.add("378.7");
end.add(markArray[0]);
end.add(markArray[1]);
parameter.put("startStakeMark", start);
parameter.put("endStakeMark", end);
dcDevices = dcDeviceService.devicePileNumberQueryDevice(parameter);
dcDevices = dcDevices.subList(dcDevices.size() - dcExecuteAction.getNumber(), dcDevices.size());
}
}
else {
// 最近公里数
Integer kilometers = Integer.parseInt(markArray[0].replaceAll("K", ""));
// 根据事件桩号、公里数 计算出 桩号范围
start.add(String.valueOf(kilometers - dcExecuteAction.getNumber()));
start.add(markArray[1]);
end.add(String.valueOf(kilometers + dcExecuteAction.getNumber()));
end.add(markArray[1]);
// 构造查询条件
parameter.put("startStakeMark", start);
parameter.put("endStakeMark", end);
parameter.put("deviceType", dcExecuteAction.getDeviceType());
// 根据桩号范围,查询附近设备
dcDevices = dcDeviceService.devicePileNumberQueryDevice(parameter);
}
List<DcDevice> dcDevices = ruleFiltering(dcExecuteAction, markArray, direction);
try {
// 根据不通设备类型,执行不通的功能操作

6
zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java

@ -165,5 +165,9 @@ public class DcWarningServiceImpl implements IDcWarningService
public int deleteDcWarningByStringId(DcWarning dcWarning) {
return dcWarningMapper.deleteDcWarningByStringId(dcWarning);
}
@Override
public List<HashMap<String,Object>> selectDcWarningoTherConfig(DcWarning dcWarning)
{
return dcWarningMapper.selectDcWarningoTherConfig(dcWarning);
}
}

24
zc-business/src/main/resources/mapper/business/DcWarningMapper.xml

@ -24,7 +24,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="lane" column="lane" />
<result property="vehicleType" column="vehicle_type" />
</resultMap>
<resultMap type="map" id="eventMap">
<result property="targetId" column="targetId" />
<result property="coordinate" column="coordinate" />
<result property="warningSubclass" column="warning_subclass" />
<result property="warningtype" column="warning_type" />
<result property="stakeMark" column="stake_mark" />
<result property="Id" column="id" />
</resultMap>
<sql id="selectDcWarningVo">
select id, stake_mark stakeMark, direction, dept_id deptId,
warning_state warningState,vehicle_type vehicleType,
@ -154,4 +161,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectCount" resultType="int">
SELECT COUNT(*)AS count FROM dc_warning
</select>
<select id="selectDcWarningoTherConfig" parameterType="DcWarning" resultType="map" resultMap="eventMap">
SELECT id,stake_mark,warning_type,warning_subclass, other_config->'$.coordinate' AS coordinate ,other_config->'$.targetId' AS targetId
FROM dc_warning
<where>
<if test="stakeMark != null and stakeMark != ''"> and stake_mark = #{stakeMark}</if>
<if test="warningState != null "> and warning_state = #{warningState}</if>
<if test="warningSource != null "> and warning_source = #{warningSource}</if>
<if test="warningType != null "> and warning_type = #{warningType}</if>
<if test="warningSubclass != null and warningSubclass != ''"> and warning_subclass = #{warningSubclass}</if>
</where>
</select>
</mapper>

24
zc-business/src/main/resources/mapper/business/StatusMapper.xml

@ -7,15 +7,16 @@
<result column="device_no" jdbcType="VARCHAR" property="deviceNo"/>
<result column="device_name" jdbcType="VARCHAR" property="deviceName"/>
<result column="device_status" jdbcType="INTEGER" property="deviceStatus"/>
<result column="device_id" jdbcType="INTEGER" property="deviceId"/>
<result column="device_ip" jdbcType="VARCHAR" property="deviceIp"/>
<result column="success_rate" jdbcType="VARCHAR" property="successRate"/>
<result column="lost_rate" jdbcType="VARCHAR" property="lostRate"/>
<result column="direction" jdbcType="VARCHAR" property="direction"/>
<result column="production" jdbcType="VARCHAR" property="production"/>
<result column="product_name" jdbcType="VARCHAR" property="production"/>
<result column="model" jdbcType="VARCHAR" property="model"/>
<result column="network" jdbcType="VARCHAR" property="network"/>
<result column="content" jdbcType="VARCHAR" property="content"/>
<result column="facilities_type" jdbcType="VARCHAR" property="network"/>
<result column="remark" jdbcType="VARCHAR" property="content"/>
<result column="type" jdbcType="VARCHAR" property="type"/>
</resultMap>
@ -33,6 +34,9 @@
<if test="status.deviceStatus != null">
device_status,
</if>
<if test="status.deviceId != null">
device_id,
</if>
<if test="status.time != null">
time,
</if>
@ -57,6 +61,9 @@
<if test="status.deviceStatus != null">
#{status.deviceStatus,jdbcType=INTEGER},
</if>
<if test="status.deviceId != null">
#{status.deviceId,jdbcType=BIGINT},
</if>
<if test="status.time != null">
#{status.time,jdbcType=DATE},
</if>
@ -68,7 +75,7 @@
</if>
<if test="status.deviceIp != null">
#{status.deviceIp,jdbcType=VARCHAR},
#{status.deviceIp,jdbcType=VARCHAR}
</if>
</trim>
</insert>
@ -78,9 +85,10 @@
</sql>
<select id="listStatus" parameterType="com.zc.business.domain.Status" resultMap="BaseResultMap">
select s.id, s.device_no, s.device_name, s.device_status,s.time, d.device_ip,s.success_rate,s.lost_rate,d.direction,d.production,d.model,d.network,d.content,d.type
from status s
LEFT JOIN device d on s.device_ip = d.device_ip
select s.id, s.device_no, s.device_name, s.device_status,s.time, d.device_ip,s.success_rate,s.lost_rate,d.direction,e.product_name,e.model,d.facilities_type,d.remark,COALESCE(d.child_type, d.device_type) AS type
from dc_device d
LEFT JOIN status s on (s.device_id=d.id)
LEFT JOIN dc_product e on e.id=d.product_id
<where>
<if test="status.time != null">
AND s.time BETWEEN #{status.startTime,jdbcType=DATE} AND #{status.time,jdbcType=DATE}
@ -89,7 +97,7 @@
AND s.device_no = #{status.deviceNo}
</if>
<if test="status.type != null">
AND d.type = #{status.type}
AND (d.device_type = #{status.type} or d.child_type=#{status.type})
</if>
</where>
</select>

Loading…
Cancel
Save