|
|
@ -196,7 +196,8 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { |
|
|
|
markArray[1] = String.format("%0" + 3 + "d", markArray[1]); |
|
|
|
} |
|
|
|
DcExecuteAction executeAction = dcEventAnDcEmergencyPlans.getDcEmergencyPlans().getExecuteAction(); |
|
|
|
List<DcDevice> dcDevices = ruleFiltering(executeAction, markArray, direction); |
|
|
|
Integer operationType = dcEventAnDcEmergencyPlans.getOperationType(); |
|
|
|
List<DcDevice> dcDevices = ruleFiltering(executeAction, markArray, direction, operationType); |
|
|
|
return getBoardTemplate(dcDevices); |
|
|
|
} |
|
|
|
|
|
|
@ -217,7 +218,8 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { |
|
|
|
markArray[1] = String.format("%0" + 3 + "d", markArray[1]); |
|
|
|
} |
|
|
|
DcExecuteAction executeAction = dcEventAnDcEmergencyPlans.getDcEmergencyPlans().getExecuteAction(); |
|
|
|
List<DcDevice> dcDevices = ruleFiltering(executeAction, markArray, direction); |
|
|
|
Integer operationType = dcEventAnDcEmergencyPlans.getOperationType(); |
|
|
|
List<DcDevice> dcDevices = ruleFiltering(executeAction, markArray, direction, operationType); |
|
|
|
return getBoardTemplate(dcDevices); |
|
|
|
} |
|
|
|
|
|
|
@ -287,9 +289,12 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { |
|
|
|
* @param direction |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public List<DcDevice> ruleFiltering(DcExecuteAction dcExecuteAction, String[] markArray, String direction) { |
|
|
|
public List<DcDevice> ruleFiltering(DcExecuteAction dcExecuteAction, String[] markArray, String direction, Integer operationType) { |
|
|
|
|
|
|
|
Integer searchRule = dcExecuteAction.getSearchRule(); |
|
|
|
// 区分执行操作还是恢复操作
|
|
|
|
JSONObject otherConfig = operationType.equals(1)? |
|
|
|
JSON.parseObject(dcExecuteAction.getExecuteConfig()): JSON.parseObject(dcExecuteAction.getRecoverConfig()); |
|
|
|
List<String> start = new ArrayList<>(); |
|
|
|
List<String> end = new ArrayList<>(); |
|
|
|
// 设备列表
|
|
|
@ -301,7 +306,6 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { |
|
|
|
// 指定设备资源
|
|
|
|
// 根据设备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); |
|
|
@ -564,19 +568,21 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { |
|
|
|
|
|
|
|
// 获取事件预案数据
|
|
|
|
DcEmergencyPlans dcEmergencyPlans = dcEventAnDcEmergencyPlans.getDcEmergencyPlans(); |
|
|
|
Integer operationType = dcEventAnDcEmergencyPlans.getOperationType(); |
|
|
|
|
|
|
|
|
|
|
|
//获取事件预案中的 执行操作配置
|
|
|
|
//获取事件预案中的操作配置
|
|
|
|
dcEmergencyPlans.getDcExecuteAction() |
|
|
|
.forEach(dcExecuteAction -> { |
|
|
|
List<DcDevice> dcDevices = ruleFiltering(dcExecuteAction, markArray, direction); |
|
|
|
|
|
|
|
List<DcDevice> dcDevices = ruleFiltering(dcExecuteAction, markArray, direction, operationType); |
|
|
|
JSONObject otherConfig = operationType.equals(1)? |
|
|
|
JSON.parseObject(dcExecuteAction.getExecuteConfig()): JSON.parseObject(dcExecuteAction.getRecoverConfig()); |
|
|
|
try { |
|
|
|
// 根据不通设备类型,执行不通的功能操作
|
|
|
|
invokedFunction( |
|
|
|
dcEventAnDcEmergencyPlans.getOperationType(), |
|
|
|
dcDevices, |
|
|
|
JSON.parseObject(dcExecuteAction.getOtherConfig()), |
|
|
|
otherConfig, |
|
|
|
resultArray); |
|
|
|
|
|
|
|
// 记录操作过的设备id
|
|
|
@ -666,67 +672,12 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { |
|
|
|
} |
|
|
|
else if (device.getDeviceType().equals(DeviceTypeConstants.VARIABLE_INFORMATION_FLAG.toString())) { |
|
|
|
if (operationType == 1) { |
|
|
|
|
|
|
|
// 执行操作
|
|
|
|
// 可变信息标志 分三步
|
|
|
|
// 1:执行11功能码
|
|
|
|
functionId = DeviceFunctionIdConstants.VARIABLE_INFORMATION_FLAG_11; |
|
|
|
props.put("fileName", "play011.lst"); |
|
|
|
props.put("size", "65535"); |
|
|
|
AjaxResult ajaxResult11; |
|
|
|
ajaxResult11 = dcDeviceController.invokedFunction(iotDeviceId, functionId, props); |
|
|
|
if (ajaxResult11.get("code").equals(200)) { |
|
|
|
// 2:执行13功能码
|
|
|
|
HashMap<String, Object> props11 = new HashMap<>(); |
|
|
|
functionId = DeviceFunctionIdConstants.VARIABLE_INFORMATION_FLAG_13; |
|
|
|
List<Map<String, String>> list = new ArrayList<>(); |
|
|
|
Map<String, String> parameters = new HashMap<>(); |
|
|
|
DcInfoBoardTemplate dcInfoBoardTemplate = JSON.parseObject( |
|
|
|
JSON.toJSONString(otherConfig.get("dcInfoBoardTemplate")), |
|
|
|
DcInfoBoardTemplate.class); |
|
|
|
// stopTime
|
|
|
|
parameters.put("STAY", dcInfoBoardTemplate.getStopTime()); |
|
|
|
// inScreenMode
|
|
|
|
parameters.put("ACTION", dcInfoBoardTemplate.getInScreenMode()); |
|
|
|
// fontSpacing
|
|
|
|
parameters.put("SPEED", dcInfoBoardTemplate.getFontSpacing()); |
|
|
|
// fontColor
|
|
|
|
parameters.put("COLOR", dcInfoBoardTemplate.getFontColor()); |
|
|
|
// fontType
|
|
|
|
parameters.put("FONT", dcInfoBoardTemplate.getFontType()); |
|
|
|
// fontSize
|
|
|
|
parameters.put("FONT_SIZE", dcInfoBoardTemplate.getFontSize()); |
|
|
|
// content
|
|
|
|
parameters.put("CONTENT", dcInfoBoardTemplate.getContent()); |
|
|
|
// screenSize 768*64 宽度和高度
|
|
|
|
parameters.put("width", dcInfoBoardTemplate.getScreenSize().split("\\*")[0]); |
|
|
|
parameters.put("height", dcInfoBoardTemplate.getScreenSize().split("\\*")[1]); |
|
|
|
// formatStyle
|
|
|
|
parameters.put("formatStyle", dcInfoBoardTemplate.getFormatStyle()); |
|
|
|
list.add(parameters); |
|
|
|
props11.put("parameters", list); |
|
|
|
AjaxResult ajaxResult13 = null; |
|
|
|
ajaxResult13 = dcDeviceController.invokedFunction(iotDeviceId, functionId, props11); |
|
|
|
JSONObject result = new JSONObject(); |
|
|
|
if (ajaxResult13.get("code").equals(200)) { |
|
|
|
HashMap<String, Object> props1B = new HashMap<>(); |
|
|
|
// 3: 执行1B功能码
|
|
|
|
functionId = DeviceFunctionIdConstants.VARIABLE_INFORMATION_FLAG_1B; |
|
|
|
props1B.put("fileId", "11"); |
|
|
|
AjaxResult ajaxResult1B = dcDeviceController.invokedFunction(iotDeviceId, functionId, props1B); |
|
|
|
result.put("device", device.getId()); |
|
|
|
result.put("result", ajaxResult1B); |
|
|
|
resultArray.add(result); |
|
|
|
|
|
|
|
} else { |
|
|
|
result.put("device", device.getId()); |
|
|
|
result.put("result", ajaxResult13); |
|
|
|
resultArray.add(result); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 情报板发布全流程
|
|
|
|
boardReleaseProcess(props, iotDeviceId, otherConfig, device, resultArray); |
|
|
|
} else { |
|
|
|
// 恢复操作
|
|
|
|
if (otherConfig.get("operationType").equals("2")) { |
|
|
|
// 还原上次
|
|
|
|
props.put("fileId", "10"); |
|
|
|
functionId = DeviceFunctionIdConstants.VARIABLE_INFORMATION_FLAG_1B; |
|
|
|
AjaxResult ajaxResult1B; |
|
|
@ -737,10 +688,15 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { |
|
|
|
result.put("device", device.getId()); |
|
|
|
result.put("result", ajaxResult1B); |
|
|
|
resultArray.add(result); |
|
|
|
}else { |
|
|
|
// 播放自定义
|
|
|
|
boardReleaseProcess(props, iotDeviceId, otherConfig, device, resultArray); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
else if (device.getDeviceType().equals(DeviceTypeConstants.ROAD_SECTION_VOICE_BROADCASTING.toString())) { |
|
|
|
else if (device.getDeviceType().equals(DeviceTypeConstants.ROAD_SECTION_VOICE_BROADCASTING.toString()) |
|
|
|
&& operationType.equals(1)) { |
|
|
|
// 路段广播
|
|
|
|
JSONObject params = new JSONObject(); |
|
|
|
params.put("name", "task-event"); |
|
|
@ -793,6 +749,75 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 情报板发布全流程 |
|
|
|
*/ |
|
|
|
public void boardReleaseProcess(HashMap<String, Object> props, |
|
|
|
String iotDeviceId, |
|
|
|
JSONObject otherConfig, |
|
|
|
DcDevice device, |
|
|
|
JSONArray resultArray |
|
|
|
) throws HttpException, IOException { |
|
|
|
String functionId = ""; |
|
|
|
// 执行操作
|
|
|
|
// 可变信息标志 分三步
|
|
|
|
// 1:执行11功能码
|
|
|
|
functionId = DeviceFunctionIdConstants.VARIABLE_INFORMATION_FLAG_11; |
|
|
|
props.put("fileName", "play011.lst"); |
|
|
|
props.put("size", "65535"); |
|
|
|
AjaxResult ajaxResult11; |
|
|
|
ajaxResult11 = dcDeviceController.invokedFunction(iotDeviceId, functionId, props); |
|
|
|
if (ajaxResult11.get("code").equals(200)) { |
|
|
|
// 2:执行13功能码
|
|
|
|
HashMap<String, Object> props11 = new HashMap<>(); |
|
|
|
functionId = DeviceFunctionIdConstants.VARIABLE_INFORMATION_FLAG_13; |
|
|
|
List<Map<String, String>> list = new ArrayList<>(); |
|
|
|
Map<String, String> parameters = new HashMap<>(); |
|
|
|
DcInfoBoardTemplate dcInfoBoardTemplate = JSON.parseObject( |
|
|
|
JSON.toJSONString(otherConfig.get("dcInfoBoardTemplate")), |
|
|
|
DcInfoBoardTemplate.class); |
|
|
|
// stopTime
|
|
|
|
parameters.put("STAY", dcInfoBoardTemplate.getStopTime()); |
|
|
|
// inScreenMode
|
|
|
|
parameters.put("ACTION", dcInfoBoardTemplate.getInScreenMode()); |
|
|
|
// fontSpacing
|
|
|
|
parameters.put("SPEED", dcInfoBoardTemplate.getFontSpacing()); |
|
|
|
// fontColor
|
|
|
|
parameters.put("COLOR", dcInfoBoardTemplate.getFontColor()); |
|
|
|
// fontType
|
|
|
|
parameters.put("FONT", dcInfoBoardTemplate.getFontType()); |
|
|
|
// fontSize
|
|
|
|
parameters.put("FONT_SIZE", dcInfoBoardTemplate.getFontSize()); |
|
|
|
// content
|
|
|
|
parameters.put("CONTENT", dcInfoBoardTemplate.getContent()); |
|
|
|
// screenSize 768*64 宽度和高度
|
|
|
|
parameters.put("width", dcInfoBoardTemplate.getScreenSize().split("\\*")[0]); |
|
|
|
parameters.put("height", dcInfoBoardTemplate.getScreenSize().split("\\*")[1]); |
|
|
|
// formatStyle
|
|
|
|
parameters.put("formatStyle", dcInfoBoardTemplate.getFormatStyle()); |
|
|
|
list.add(parameters); |
|
|
|
props11.put("parameters", list); |
|
|
|
AjaxResult ajaxResult13 = null; |
|
|
|
ajaxResult13 = dcDeviceController.invokedFunction(iotDeviceId, functionId, props11); |
|
|
|
JSONObject result = new JSONObject(); |
|
|
|
if (ajaxResult13.get("code").equals(200)) { |
|
|
|
HashMap<String, Object> props1B = new HashMap<>(); |
|
|
|
// 3: 执行1B功能码
|
|
|
|
functionId = DeviceFunctionIdConstants.VARIABLE_INFORMATION_FLAG_1B; |
|
|
|
props1B.put("fileId", "11"); |
|
|
|
AjaxResult ajaxResult1B = dcDeviceController.invokedFunction(iotDeviceId, functionId, props1B); |
|
|
|
result.put("device", device.getId()); |
|
|
|
result.put("result", ajaxResult1B); |
|
|
|
resultArray.add(result); |
|
|
|
|
|
|
|
} else { |
|
|
|
result.put("device", device.getId()); |
|
|
|
result.put("result", ajaxResult13); |
|
|
|
resultArray.add(result); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 新增事件预案 |
|
|
@ -828,7 +853,7 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { |
|
|
|
dcEmergencyPlansMapper.updateDcEmergencyPlans(dcEmergencyPlans); |
|
|
|
// 修改执行操作表数据
|
|
|
|
dcExecuteActionList.forEach(dcExecuteAction -> dcExecuteAction.setUpdateTime(DateUtils.getNowDate())); |
|
|
|
// 过滤出删除掉的执行操作和恢复操作
|
|
|
|
// 过滤出删除掉的操作
|
|
|
|
String dcExecuteActionId = dcExecuteActionList.stream() |
|
|
|
.filter(dcExecuteAction -> dcExecuteAction.getId() != null) |
|
|
|
.map(DcExecuteAction::getEmergencyPlansId) |
|
|
@ -839,17 +864,16 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { |
|
|
|
.filter(dcExecuteAction -> dcExecuteAction.getId() != null) |
|
|
|
.map(DcExecuteAction::getId) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
// 查询出事件预案关联的执行操作和恢复操作
|
|
|
|
// 查询出事件预案关联的操作
|
|
|
|
List<String> dcExecuteActionIdList = dcExecuteActionService.selectDcExecuteActionByEmergencyPlansId(dcExecuteActionId); |
|
|
|
List<String> commonIds = new ArrayList<>(ids); |
|
|
|
commonIds.retainAll(dcExecuteActionIdList); |
|
|
|
|
|
|
|
// 删除后的执行操作id和恢复操作id
|
|
|
|
// 删除后的操作id
|
|
|
|
List<String> idsNotInDcExecuteActionIdList = new ArrayList<>(dcExecuteActionIdList); |
|
|
|
idsNotInDcExecuteActionIdList.removeAll(commonIds); |
|
|
|
// 根据执行操作id和恢复操作id,进行删除操作
|
|
|
|
// 根据操作id,进行删除操作
|
|
|
|
if (idsNotInDcExecuteActionIdList.size() > 0) { |
|
|
|
System.out.println("存在需要删除的数据"); |
|
|
|
dcExecuteActionService.deleteDcExecuteAction(idsNotInDcExecuteActionIdList); |
|
|
|
} |
|
|
|
|
|
|
@ -907,14 +931,10 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { |
|
|
|
* 数据处理 |
|
|
|
*/ |
|
|
|
public static List<DcExecuteAction> dataProcessing(DcEmergencyPlans dcEmergencyPlans) { |
|
|
|
// 过滤出执行操作数据
|
|
|
|
List<DcExecuteAction> dcExecuteActionOperationList = dcEmergencyPlans.getDcExecuteAction() |
|
|
|
.stream() |
|
|
|
.filter(dcExecuteAction -> dcExecuteAction.getActionType() == 1) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
List<DcExecuteAction> dcExecuteActionList = dcEmergencyPlans.getDcExecuteAction(); |
|
|
|
// 设备类型 数据处理
|
|
|
|
String deviceType = dcExecuteActionOperationList.stream() |
|
|
|
String deviceType = dcExecuteActionList.stream() |
|
|
|
.map(DcExecuteAction::getDeviceType) |
|
|
|
.distinct() |
|
|
|
.map(type -> Arrays.stream(DeviceTypeEnum.values()) |
|
|
@ -926,7 +946,7 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { |
|
|
|
.collect(Collectors.joining(",")); |
|
|
|
dcEmergencyPlans.setDeviceType(deviceType); |
|
|
|
// 可控设备 数据处理
|
|
|
|
List<DcExecuteAction> dcExecuteActionNewList = dcExecuteActionOperationList.stream() |
|
|
|
List<DcExecuteAction> dcExecuteActionNewList = dcExecuteActionList.stream() |
|
|
|
.filter(dcExecuteAction -> dcExecuteAction.getSearchRule() == 1) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
String controllableDevice = dcExecuteActionNewList.stream() |
|
|
@ -934,11 +954,12 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { |
|
|
|
.collect(Collectors.joining("、")); |
|
|
|
dcEmergencyPlans.setControllableDevice(controllableDevice); |
|
|
|
// 控制指令 数据处理
|
|
|
|
List<String> otherConfigList = dcExecuteActionOperationList.stream() |
|
|
|
List<String> otherConfigList = dcExecuteActionList.stream() |
|
|
|
.map(dcExecuteAction -> { |
|
|
|
JSONObject config = new JSONObject(); |
|
|
|
String otherConfig = dcExecuteAction.getOtherConfig(); |
|
|
|
JSONObject jsonObject = JSON.parseObject(otherConfig); |
|
|
|
// 执行操作配置
|
|
|
|
String executeConfig = dcExecuteAction.getExecuteConfig(); |
|
|
|
JSONObject jsonObject = JSON.parseObject(executeConfig); |
|
|
|
if (dcExecuteAction.getDeviceType() == DeviceTypeConstants.DRIVING_GUIDANCE) { |
|
|
|
// 行车诱导
|
|
|
|
config.put("controlModelName",jsonObject.get("controlModelName")); |
|
|
@ -950,7 +971,12 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { |
|
|
|
}else if (dcExecuteAction.getDeviceType() == DeviceTypeConstants.VARIABLE_INFORMATION_FLAG || |
|
|
|
dcExecuteAction.getDeviceType() == DeviceTypeConstants.ROAD_SECTION_VOICE_BROADCASTING) { |
|
|
|
// 情报板/语音广播
|
|
|
|
if (jsonObject.get("operationType").equals("1")) { |
|
|
|
config.put("content",jsonObject.get("content")); |
|
|
|
}else { |
|
|
|
config.put("operationType","智能发布"); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
else if (dcExecuteAction.getDeviceType() == DeviceTypeConstants.LASER_FATIGUE_AWAKENING) { |
|
|
|
// 激光疲劳唤醒
|
|
|
|