Browse Source

Merge branch 'develop' of http://39.106.31.193:9211/mengff/jihe-dc into develop

develop
lau572 12 months ago
parent
commit
10ff453195
  1. 62
      zc-business/src/main/java/com/zc/business/controller/DcEmergencyPlansController.java
  2. 6
      zc-business/src/main/java/com/zc/business/domain/DcEmergencyPlans.java
  3. 16
      zc-business/src/main/java/com/zc/business/domain/DcEventAnDcEmergencyPlans.java
  4. 42
      zc-business/src/main/java/com/zc/business/enums/ClassifyEnum.java
  5. 67
      zc-business/src/main/java/com/zc/business/enums/EventSubclassEnum.java
  6. 10
      zc-business/src/main/java/com/zc/business/mapper/DcEmergencyPlansMapper.java
  7. 41
      zc-business/src/main/java/com/zc/business/service/DcEmergencyPlansService.java
  8. 298
      zc-business/src/main/java/com/zc/business/service/impl/DcEmergencyPlansServiceImpl.java
  9. 17
      zc-business/src/main/resources/mapper/business/DcEmergencyPlansMapper.xml

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

@ -6,6 +6,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
import com.zc.business.domain.DcEmergencyPlans;
import com.zc.business.domain.DcEvent;
import com.zc.business.domain.DcEventAnDcEmergencyPlans;
import com.zc.business.domain.DcWarning;
import com.zc.business.service.DcEmergencyPlansService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -54,9 +55,9 @@ public class DcEmergencyPlansController extends BaseController {
}
/**
* 根据事件数据查询事件预案列表
* 交通事件-根据事件数据查询事件预案列表
*/
@ApiOperation("根据事件数据查询事件预案列表")
@ApiOperation("交通事件-根据事件数据查询事件预案列表")
@PreAuthorize("@ss.hasPermi('business:plans:list')")
@PostMapping("/list/event/type")
public AjaxResult listByEventType(@RequestBody DcEvent dcEvent) {
@ -66,15 +67,55 @@ public class DcEmergencyPlansController extends BaseController {
}
/**
* 事件确定
* 感知事件-根据事件数据查询事件预案列表
*/
@ApiOperation("事件确认")
@ApiOperation("感知事件-根据事件数据查询事件预案列表")
@PreAuthorize("@ss.hasPermi('business:plans:list')")
@PostMapping("/list/warning/type")
public AjaxResult listByEventType(@RequestBody DcWarning dcWarning) {
List<DcEmergencyPlans> dcEmergencyPlansList = dcEmergencyPlansService.selectDcEmergencyPlansByWarningType(dcWarning);
return AjaxResult.success(dcEmergencyPlansList);
}
/**
* 感知事件-情报板自动生成文字
*/
@ApiOperation("感知事件-情报板自动生成文字")
@PostMapping("/warning/automatic")
public AjaxResult warningAutomaticGeneration(@RequestBody DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) {
return AjaxResult.success(dcEmergencyPlansService.warningAutomaticGeneration(dcEventAnDcEmergencyPlans));
}
/**
* 交通事件-情报板自动生成文字
*/
@ApiOperation("交通事件-情报板自动生成文字")
@PostMapping("/event/automatic")
public AjaxResult eventAutomaticGeneration(@RequestBody DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) {
return AjaxResult.success(dcEmergencyPlansService.eventAutomaticGeneration(dcEventAnDcEmergencyPlans));
}
/**
* 交通事件确定
*/
@ApiOperation("交通事件确定")
@PreAuthorize("@ss.hasPermi('business:plans:edit')")
@PostMapping("/event/confirm")
public AjaxResult EventConfirm(@RequestBody DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) {
public AjaxResult eventConfirm(@RequestBody DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) {
return toAjax(dcEmergencyPlansService.executionEventConfirmation(dcEventAnDcEmergencyPlans));
}
/**
* 感知事件确定
*/
@ApiOperation("感知事件确认")
@PreAuthorize("@ss.hasPermi('business:plans:edit')")
@PostMapping("/warning/confirm")
public AjaxResult warningConfirm(@RequestBody DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) {
return toAjax(dcEmergencyPlansService.executionWarningConfirmation(dcEventAnDcEmergencyPlans));
}
/**
* 新增事件预案
*/
@ -95,17 +136,6 @@ public class DcEmergencyPlansController extends BaseController {
return toAjax(dcEmergencyPlansService.updateDcEmergencyPlans(dcEmergencyPlans));
}
/**
* 批量修改事件预案
*/
// @ApiOperation("修改预案")
// @PreAuthorize("@ss.hasPermi('business:plans:edit')")
// @Log(title = "事件预案", businessType = BusinessType.UPDATE)
@PutMapping("/batch")
public AjaxResult updateBatch(@RequestBody List<DcEmergencyPlans> dcEmergencyPlansList) {
return toAjax(dcEmergencyPlansService.updateBatchDcEmergencyPlans(dcEmergencyPlansList));
}
/**
* 批量删除事件预案
*/

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

@ -75,6 +75,12 @@ public class DcEmergencyPlans {
@ApiModelProperty("控制指令")
private String controlCommand;
/**
* 事件分类
*/
@ApiModelProperty("事件分类")
private int eventCategory;
/**
* 执行操作
*/

16
zc-business/src/main/java/com/zc/business/domain/DcEventAnDcEmergencyPlans.java

@ -20,17 +20,29 @@ import lombok.NoArgsConstructor;
public class DcEventAnDcEmergencyPlans {
/**
* 事件数据
* 交通事件数据
*/
@ApiModelProperty("事件数据")
@ApiModelProperty("交通事件数据")
private DcEvent dcEvent;
/**
* 感知事件数据
*/
@ApiModelProperty("感知事件数据")
private DcWarning dcWarning;
/**
* 事件预案数据
*/
@ApiModelProperty("事件预案数据")
private DcEmergencyPlans dcEmergencyPlans;
/**
* 情报板模板数据
*/
@ApiModelProperty("情报板模板数据")
private DcInfoBoardTemplate dcInfoBoardTemplate;
/**
* 操作类型 1-执行操作 2-恢复操作
*/

42
zc-business/src/main/java/com/zc/business/enums/ClassifyEnum.java

@ -0,0 +1,42 @@
package com.zc.business.enums;
/**
* 事件分类枚举
* @author wangjiabao
*/
public enum ClassifyEnum {
REAR_END_COLLISION(1, "主线封闭","前方主线封闭"),
ROLLOVER(2, "主线限行","前方主线限行"),
COLLISION_WITH_GUARDRAIL(6, "收费站封闭","前方收费站封闭"),
NATURAL(7, "收费站限行","前方收费站限行"),
OTHER_ACCIDENTS(10, "匝道立交封闭","前方匝道立交封闭"),
VEHICLE_MALFUNCTION(11, "匝道立交限行","前方匝道立交限行"),
ROAD_CONGESTION(14, "服务区封闭","前方服务区封闭");
private final int code;
private final String info;
private final String text;
ClassifyEnum(int code, String info, String text)
{
this.code = code;
this.info = info;
this.text = text;
}
public int getCode()
{
return code;
}
public String getInfo()
{
return info;
}
public String getText()
{
return text;
}
}

67
zc-business/src/main/java/com/zc/business/enums/EventSubclassEnum.java

@ -0,0 +1,67 @@
package com.zc.business.enums;
/**
* 事件子类枚举
* @author wangjiabao
*/
public enum EventSubclassEnum {
REAR_END_COLLISION("1-1", "追尾","前方发生追尾 注意避让"),
ROLLOVER("1-2", "侧翻","前方发生侧翻 注意避让"),
COLLISION_WITH_GUARDRAIL("1-3", "撞护栏","前方车撞击护栏注意避让"),
NATURAL("1-4", "自然","前方发生自然现象请注意"),
OTHER_ACCIDENTS("1-5", "其他事故","前方发生事故谨慎驾驶"),
VEHICLE_MALFUNCTION("2-1", "车辆故障","前方发生故障注意避让"),
ROAD_CONGESTION("4-1", "道路拥堵","前方道路拥堵"),
OVERPASS_CONGESTION("4-2", "立交拥堵","前方立交拥堵"),
TOLL_STATION_CONGESTION("4-3", "收费站拥堵","前方收费站拥堵"),
SERVICE_AREA_CONGESTION("4-4", "服务区拥堵","前方服务区拥堵"),
PEDESTRIAN("5-1", "行人","有行人穿行请注意"),
NON_MOTOR_VEHICLES("5-2", "非机动车","有非机动车上路请注意"),
MOTORCYCLE("5-3", "摩托车","有摩托车上路请注意"),
OTHER("5-4", "其他","有非法上路车辆"),
SMOKE("6-1", "烟雾","烟雾道路请注意驾驶"),
FALLEN_TREES("6-2", "倒伏树木","有倒伏树木请注意"),
SCATTERED_MATERIALS("6-3", "洒落物","有洒落物请注意"),
ANIMAL("6-4", "动物","有动物请注意"),
OTHER_OBSTACLES("6-5", "其他障碍","有不明障碍请注意"),
CLOSED_OR_SUSPENDED_OPERATIONS("8-1", "封闭、暂停营业","服务区封闭、暂停营业"),
SHUTDOWN_OF_IMPORTANT_FACILITIES("8-2", "重要设施停用","服务区重要设施停用"),
OTHER_ABNORMALITIES_IN_THE_SERVICE_AREA("8-3", "服务区其他异常","服务区设备停用"),
RAIN("10-1", "雨","雨天请谨慎驾驶"),
SNOW("10-2", "雪","雪天路滑请谨慎驾驶"),
HEAVY_FOG("10-3", "大雾","大雾天气请谨慎驾驶"),
GALE("10-4", "大风","大风天气请谨慎驾驶"),
LOW_TEMPERATURE_COLD_WAVE("10-5", "低温寒潮","低温寒潮天气请谨慎驾驶"),
SNOW_ON_ROAD_SURFACE("10-6", "路面积雪","路面积雪请谨慎驾驶"),
ROAD_ICING("10-7", "路面结冰","路面结冰请谨慎驾驶"),
ROAD_SURFACE_WATER_LOGGING("10-8", "路面积水","路面积水请谨慎驾驶"),
OTHER_ABNORMAL_WEATHER("10-9", "其他异常天气","天气异常请谨慎驾驶");
private final String code;
private final String info;
private final String text;
EventSubclassEnum(String code, String info, String text)
{
this.code = code;
this.info = info;
this.text = text;
}
public String getCode()
{
return code;
}
public String getInfo()
{
return info;
}
public String getText()
{
return text;
}
}

10
zc-business/src/main/java/com/zc/business/mapper/DcEmergencyPlansMapper.java

@ -31,13 +31,21 @@ public interface DcEmergencyPlansMapper {
DcEmergencyPlans selectDcEmergencyPlans(Integer id);
/**
* 根据事件类型查询事件预案
* 交通事件-根据事件类型查询事件预案
*
* @param event 事件预案
* @return 结果
*/
List<DcEmergencyPlans> selectDcEmergencyPlansByEventType(DcEvent event);
/**
* 感知事件-根据事件类型查询事件预案
*
* @param eventType 事件预案
* @return 结果
*/
List<DcEmergencyPlans> selectDcEmergencyPlansByWarningType(int eventType);
/**
* 新增事件预案
*

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

@ -1,8 +1,7 @@
package com.zc.business.service;
import com.zc.business.domain.DcEmergencyPlans;
import com.zc.business.domain.DcEvent;
import com.zc.business.domain.DcEventAnDcEmergencyPlans;
import com.zc.business.domain.*;
import java.util.List;
/**
@ -31,21 +30,51 @@ public interface DcEmergencyPlansService {
DcEmergencyPlans selectDcEmergencyPlans(Integer id);
/**
* 根据事件类型查询事件预案
* 交通事件-根据事件类型查询事件预案
*
* @param event 事件
* @param event 交通事件
* @return 结果
*/
List<DcEmergencyPlans> selectDcEmergencyPlansByEventType(DcEvent event);
/**
* 事件确定
* 感知事件-根据事件类型查询事件预案
*
* @param dcWarning 感知事件
* @return 结果
*/
List<DcEmergencyPlans> selectDcEmergencyPlansByWarningType(DcWarning dcWarning);
/**
* 交通事件确定
*
* @param dcEventAnDcEmergencyPlans 事件数据 事件预案数据
* @return 结果
*/
int executionEventConfirmation(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans);
/**
* 感知事件确定
*
* @param dcEventAnDcEmergencyPlans 事件数据 事件预案数据
* @return 结果
*/
int executionWarningConfirmation(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans);
/**
* 感知事件-情报板自动生成
* @param dcEventAnDcEmergencyPlans
* @return
*/
DcInfoBoardTemplate warningAutomaticGeneration(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans);
/**
* 交通事件-情报板自动生成
* @param dcEventAnDcEmergencyPlans
* @return
*/
DcInfoBoardTemplate eventAutomaticGeneration(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans);
/**
* 新增事件预案
*

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

@ -12,21 +12,17 @@ import com.zc.business.constant.DeviceFunctionIdConstants;
import com.zc.business.constant.DeviceTypeConstants;
import com.zc.business.controller.DcDeviceController;
import com.zc.business.domain.*;
import com.zc.business.enums.EventTypeEnum;
import com.zc.business.enums.*;
import com.zc.business.mapper.DcEmergencyPlansMapper;
import com.zc.business.mapper.EventPlanAssocMapper;
import com.zc.business.service.DcEmergencyPlansService;
import com.zc.business.service.DcExecuteActionService;
import com.zc.business.service.IDcDeviceService;
import com.zc.common.core.httpclient.exception.HttpException;
import org.apache.commons.lang3.StringEscapeUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
@ -70,9 +66,9 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService {
}
/**
* 根据事件类型查询事件预案
* 交通事件 - 根据事件类型查询事件预案
*
* @param event 事件
* @param event 交通事件
* @return 结果
*/
@Override
@ -81,175 +77,226 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService {
int eventType = Integer.parseInt(event.getEventType().toString());
if (eventType == EventTypeEnum.TRAFFIC_ACCIDENT.getCode()) {
if (eventType == EventTypeEnum.TRAFFIC_ACCIDENT.getCode() ||
eventType == EventTypeEnum.ABNORMAL_WEATHER.getCode() ||
eventType == EventTypeEnum.ILLEGAL_ROAD_USE.getCode() ||
eventType == EventTypeEnum.TRAFFIC_JAM.getCode() ||
eventType == EventTypeEnum.SERVICE_AREA_ABNORMALITY.getCode() ||
eventType == EventTypeEnum.ROADBLOCK_CLEARANCE.getCode()) {
return dcEmergencyPlansList.stream()
.filter(dcEmergencyPlans -> {
String triggerMechanism = dcEmergencyPlans.getTriggerMechanism();
JSONObject triggerJson = JSONObject.parseObject(triggerMechanism);
int eventLevel = Integer.parseInt(triggerJson.get("eventLevel").toString());
return eventLevel == event.getEventLevel();
String eventSubclass = triggerJson.get("eventSubclass").toString();
return eventSubclass.equals(event.getEventSubclass());
})
.collect(Collectors.toList());
} else if (eventType == EventTypeEnum.VEHICLE_MALFUNCTION.getCode()) {
// 车辆故障
return dcEmergencyPlansList.stream()
.filter(dcEmergencyPlans -> {
String triggerMechanism = dcEmergencyPlans.getTriggerMechanism();
JSONObject triggerJson = JSONObject.parseObject(triggerMechanism);
String[] lane = event.getLang().split(",");
int[] intArray = Arrays.stream(lane)
.mapToInt(Integer::parseInt)
.toArray();
JSONArray eventLevel = JSONArray.parseArray(triggerJson.get("roadOccupancy").toString());
return Arrays.stream(intArray).anyMatch(Arrays.asList(eventLevel.toArray())::contains);
String locationType = triggerJson.get("locationType").toString();
DcEventVehicleAccident dcEventVehicleAccident = event.getDcEventVehicleAccident();
String eventLocationType =dcEventVehicleAccident.getLocationType().toString();
return locationType.equals(eventLocationType);
})
.collect(Collectors.toList());
} else if (eventType == EventTypeEnum.TRAFFIC_CONTROL.getCode()) {
// 交通管制
return dcEmergencyPlansList.stream()
.filter(dcEmergencyPlans -> {
String triggerMechanism = dcEmergencyPlans.getTriggerMechanism();
JSONObject triggerJson = JSONObject.parseObject(triggerMechanism);
// 管制分类
Integer controlType = Integer.parseInt(triggerJson.get("controlType").toString());
// 分类
Integer classify = Integer.parseInt(triggerJson.get("classify").toString());
// 分类原因
Integer controlCause = Integer.parseInt(triggerJson.get("controlCause").toString());
// 事件--交通管制数据
DcEventTrafficControl dcEventTrafficControl = event.getDcEventTrafficControl();
Integer eventControlType = Integer.parseInt(dcEventTrafficControl.getControlType().toString());
Integer eventClassify = Integer.parseInt(dcEventTrafficControl.getClassify().toString());
Integer eventControlCause = Integer.parseInt(dcEventTrafficControl.getControlCause().toString());
return controlType.equals(eventControlType) && classify.equals(eventClassify) && controlCause.equals(eventControlCause);
})
.collect(Collectors.toList());
} else if (eventType == EventTypeEnum.TRAFFIC_JAM.getCode()) {
return dcEmergencyPlansList.stream()
.filter(dcEmergencyPlans -> {
String triggerMechanism = dcEmergencyPlans.getTriggerMechanism();
JSONObject triggerJson = JSONObject.parseObject(triggerMechanism);
// 拥堵原因
Integer congestionCause = Integer.parseInt(triggerJson.get("congestionCause").toString());
// 详细原因
Integer detailedReasons = Integer.parseInt(triggerJson.get("detailedReasons").toString());
// 事件--交通拥堵数据
DcEventTrafficCongestion dcEventTrafficCongestion = event.getDcEventTrafficCongestion();
Integer eventCongestionCause = Integer.parseInt(dcEventTrafficCongestion.getCongestionCause().toString());
Integer eventDetailedReasons = Integer.parseInt(dcEventTrafficCongestion.getDetailedReasons().toString());
return congestionCause.equals(eventCongestionCause) && detailedReasons.equals(eventDetailedReasons);
return classify.equals(eventClassify);
})
.collect(Collectors.toList());
} else if (eventType == EventTypeEnum.ILLEGAL_ROAD_USE.getCode() || eventType == EventTypeEnum.ROADBLOCK_CLEARANCE.getCode()) {
} else {
// 施工建设
return dcEmergencyPlansList;
}
}
/**
* 感知事件 - 根据事件类型查询事件预案
*
* @param dcWarning 感知事件
* @return 结果
*/
@Override
public List<DcEmergencyPlans> selectDcEmergencyPlansByWarningType(DcWarning dcWarning) {
int eventType = ValueConverter.convertValueHost(dcWarning.getWarningType());
List<DcEmergencyPlans> dcEmergencyPlansList = dcEmergencyPlansMapper.selectDcEmergencyPlansByWarningType(eventType);
int warningType = Integer.parseInt(dcWarning.getWarningType().toString());
if (warningType == WarningTypeEnum.UNUSUAL_WEATHER.getCode()) {
return dcEmergencyPlansList.stream()
.filter(dcEmergencyPlans -> {
String triggerMechanism = dcEmergencyPlans.getTriggerMechanism();
JSONObject triggerJson = JSONObject.parseObject(triggerMechanism);
String eventSubclass = triggerJson.get("eventSubclass").toString();
// 事件--非法上路/路障清除 数据
String subclass = event.getEventSubclass();
return eventSubclass.equals(subclass);
})
.collect(Collectors.toList());
} else if (eventType == EventTypeEnum.CONSTRUCTION_AND_CONSTRUCTION.getCode()) {
return dcEmergencyPlansList.stream()
.filter(dcEmergencyPlans -> {
String triggerMechanism = dcEmergencyPlans.getTriggerMechanism();
JSONObject triggerJson = JSONObject.parseObject(triggerMechanism);
String subclass = triggerJson.get("eventSubclass").toString();
Integer controlMode = Integer.parseInt(triggerJson.get("controlMode").toString());
JSONArray lane = JSONArray.parseArray(triggerJson.get("lane").toString());
// 事件--施工建设数据
DcEventConstruction dcEventConstruction = event.getDcEventConstruction();
String eventSubclass = event.getEventSubclass();
Integer eventControlMode = Integer.parseInt(dcEventConstruction.getControlMode().toString());
String[] eventLane = event.getLang().split(",");
int[] eventLaneInt = Arrays.stream(eventLane)
.mapToInt(Integer::parseInt)
.toArray();
return subclass.equals(eventSubclass) && controlMode.equals(eventControlMode)
&& Arrays.stream(eventLaneInt).anyMatch(Arrays.asList(lane.toArray())::contains);
})
.collect(Collectors.toList());
} else if (eventType == EventTypeEnum.SERVICE_AREA_ABNORMALITY.getCode()) {
return dcEmergencyPlansList.stream()
.filter(dcEmergencyPlans -> {
String triggerMechanism = dcEmergencyPlans.getTriggerMechanism();
JSONObject triggerJson = JSONObject.parseObject(triggerMechanism);
Integer facilityId = Integer.parseInt(triggerJson.get("facilityId").toString());
Integer disableFacility = Integer.parseInt(triggerJson.get("disableFacility").toString());
// 事件--服务区异常数据
DcEventServiceArea dcEventServiceArea = event.getDcEventServiceArea();
Integer eventFacilityId = Integer.parseInt(dcEventServiceArea.getFacilityId().toString());
Integer eventDisableFacility = Integer.parseInt(dcEventServiceArea.getDisableFacility().toString());
return facilityId.equals(eventFacilityId) && disableFacility.equals(eventDisableFacility);
})
.collect(Collectors.toList());
} else if (eventType == EventTypeEnum.ABNORMAL_WEATHER.getCode()) {
return dcEmergencyPlansList.stream()
.filter(dcEmergencyPlans -> {
String triggerMechanism = dcEmergencyPlans.getTriggerMechanism();
JSONObject triggerJson = JSONObject.parseObject(triggerMechanism);
String unusualWeather = triggerJson.get("unusualWeather").toString();
// 条件
JSONArray conditions = JSON.parseArray(triggerJson.get("conditions").toString());
// 事件--异常天气数据
DcEventAbnormalWeather dcEventAbnormalWeather = event.getDcEventAbnormalWeather();
String weatherSituation = dcEventAbnormalWeather.getWeatherSituation();
// 异常天气数据
Integer numericalValue = Integer.parseInt(dcEventAbnormalWeather.getNumericalValue());
String conditionString = conditions.stream().map(condition -> {
JSONObject conditionJSON = JSON.parseObject(condition.toString());
String comparisonOperator = StringEscapeUtils.unescapeXml(conditionJSON.get("comparisonOperator").toString());
String thresholdValue = conditionJSON.get("thresholdValue").toString();
return numericalValue + comparisonOperator + thresholdValue;
}).collect(Collectors.joining(" && "));
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
boolean result = false;
try {
result = (boolean) engine.eval(conditionString);
} catch (ScriptException e) {
e.printStackTrace();
}
String warningSubclass = ValueConverter.convertValueSon(dcWarning.getWarningSubclass());
return unusualWeather.equals(weatherSituation) && result;
return eventSubclass.equals(warningSubclass);
})
.collect(Collectors.toList());
} else {
return null;
return dcEmergencyPlansList;
}
}
/**
* 事件确定
* 交通事件确定
*
* @param dcEventAnDcEmergencyPlans 事件数据 事件预案数据
* @return 结果
*/
@Override
public int executionEventConfirmation(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) {
// 获取事件数据
DcEvent dcEvent = dcEventAnDcEmergencyPlans.getDcEvent();
// 方向
String direction = dcEvent.getDirection();
// 事件编号
String id = dcEvent.getId();
return executionConfirmation(dcEventAnDcEmergencyPlans,dcEvent.getStakeMark(),direction,id);
}
/**
* 感知事件-情报板自动生成
* @param dcEventAnDcEmergencyPlans
* @return
*/
@Override
public DcInfoBoardTemplate warningAutomaticGeneration(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) {
// 根据感知事件类型等、生成情报板的内容
DcWarning dcWarning = dcEventAnDcEmergencyPlans.getDcWarning();
DcInfoBoardTemplate dcInfoBoardTemplate = dcEventAnDcEmergencyPlans.getDcInfoBoardTemplate();
Integer warningType = dcWarning.getWarningType();
if (warningType.equals(WarningTypeEnum.TRAFFIC_JAM.getCode())) {
// 交通拥堵
dcInfoBoardTemplate.setContent("前方"+WarningTypeEnum.TRAFFIC_JAM.getInfo()+"请谨慎驾驶");
}else if (warningType.equals(WarningTypeEnum.NON_MOTOR_VEHICLE.getCode())) {
dcInfoBoardTemplate.setContent("前方出现"+WarningTypeEnum.NON_MOTOR_VEHICLE.getInfo()+"请注意避让");
}else if (warningType.equals(WarningTypeEnum.PEDESTRIAN.getCode())) {
dcInfoBoardTemplate.setContent("前方出现"+WarningTypeEnum.PEDESTRIAN.getInfo()+"请注意避让");
}else if (warningType.equals(WarningTypeEnum.FIREWORKS.getCode())) {
dcInfoBoardTemplate.setContent("前方出现"+WarningTypeEnum.FIREWORKS.getInfo()+"请注意避让");
}else if (warningType.equals(WarningTypeEnum.OUTFALL.getCode())) {
dcInfoBoardTemplate.setContent("前方出现"+WarningTypeEnum.OUTFALL.getInfo()+"请注意避让");
} else if (warningType.equals(WarningTypeEnum.VEHICLE_CONVERSE_RUNNING.getCode())) {
dcInfoBoardTemplate.setContent("前方出现"+WarningTypeEnum.OUTFALL.getInfo()+"请注意避让");
}
return dcInfoBoardTemplate;
}
/**
* 交通事件-情报板自动生成
* @return
*/
@Override
public DcInfoBoardTemplate eventAutomaticGeneration(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) {
// 根据交通事件的事件类型,生成相应的情报板内容
DcEvent dcEvent = dcEventAnDcEmergencyPlans.getDcEvent();
DcInfoBoardTemplate dcInfoBoardTemplate = dcEventAnDcEmergencyPlans.getDcInfoBoardTemplate();
int eventType = Integer.parseInt(dcEvent.getEventType().toString());
if (eventType == EventTypeEnum.ABNORMAL_WEATHER.getCode() ||
eventType == EventTypeEnum.TRAFFIC_ACCIDENT.getCode() ||
eventType == EventTypeEnum.ILLEGAL_ROAD_USE.getCode() ||
eventType == EventTypeEnum.TRAFFIC_JAM.getCode() ||
eventType == EventTypeEnum.SERVICE_AREA_ABNORMALITY.getCode() ||
eventType == EventTypeEnum.ROADBLOCK_CLEARANCE.getCode()) {
String content = Arrays.stream(EventSubclassEnum.values())
.filter(eventSubclassEnum -> eventSubclassEnum.getCode().equals(dcEvent.getEventSubclass()))
.findFirst()
.map(EventSubclassEnum::getText)
.orElse("请注意前方危险");
dcInfoBoardTemplate.setContent(content);
} else if (eventType == EventTypeEnum.VEHICLE_MALFUNCTION.getCode()) {
// 车辆故障
DcEventVehicleAccident dcEventVehicleAccident = dcEvent.getDcEventVehicleAccident();
int locationType = Integer.parseInt(dcEventVehicleAccident.getLocationType().toString());
if (locationType == 1) {
dcInfoBoardTemplate.setContent("高速主线发生车辆故障");
} else if (locationType == 2) {
dcInfoBoardTemplate.setContent("服务区发生车辆故障");
} else if (locationType == 3) {
dcInfoBoardTemplate.setContent("立交桥发生车辆故障");
} else if (locationType == 4) {
dcInfoBoardTemplate.setContent("收费站发生车辆故障");
}
} else if (eventType == EventTypeEnum.TRAFFIC_CONTROL.getCode()) {
// 交通管制
DcEventTrafficControl dcEventTrafficControl = dcEvent.getDcEventTrafficControl();
int classify = Integer.parseInt(dcEventTrafficControl.getClassify().toString());
String content = Arrays.stream(ClassifyEnum.values())
.filter(eventSubclassEnum -> eventSubclassEnum.getCode() == classify)
.findFirst()
.map(ClassifyEnum::getText)
.orElse("前方存在限行或关闭");
dcInfoBoardTemplate.setContent(content);
}else {
// 施工建设
dcInfoBoardTemplate.setContent("前方施工请注意驾驶");
}
return dcInfoBoardTemplate;
}
/**
* 感知事件确认
* @param dcEventAnDcEmergencyPlans 事件数据 事件预案数据
* @return
*/
@Override
public int executionWarningConfirmation(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) {
// 获取事件数据
DcWarning dcWarning = dcEventAnDcEmergencyPlans.getDcWarning();
// 方向
String direction = dcWarning.getDirection();
// 事件编号
String id = dcWarning.getId();
return executionConfirmation(dcEventAnDcEmergencyPlans,dcWarning.getStakeMark(),direction,id);
}
/**
* 事件确认
* @param dcEventAnDcEmergencyPlans 事件数据 事件预案数据
* @return
*/
public int executionConfirmation(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans,
String stakeMark,
String direction,
String id) {
// 存储所有设备id
StringBuilder deviceIds = new StringBuilder();
// 存储所有设备的执行结果
JSONArray resultArray = new JSONArray();
// 获取事件数据
DcEvent dcEvent = dcEventAnDcEmergencyPlans.getDcEvent();
// 获取事件预案数据
DcEmergencyPlans dcEmergencyPlans = dcEventAnDcEmergencyPlans.getDcEmergencyPlans();
// 事件桩号
String[] markArray = dcEvent.getStakeMark().split("\\+");
String[] markArray = stakeMark.split("\\+");
if (markArray[1].length() < 3) {
// 不足三位 补零
markArray[1] = String.format("%0" + 3 + "d", markArray[1]);
}
// 方向
String direction = dcEvent.getDirection();
// 获取事件预案数据
DcEmergencyPlans dcEmergencyPlans = dcEventAnDcEmergencyPlans.getDcEmergencyPlans();
//获取事件预案中的 执行操作配置
dcEmergencyPlans.getDcExecuteAction().stream()
@ -363,7 +410,7 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService {
// 创建一个 预案事件关联对象
EventPlanAssoc eventPlanAssoc = new EventPlanAssoc();
// 事件编号
eventPlanAssoc.setEventId(dcEvent.getId());
eventPlanAssoc.setEventId(id);
// 区分是执行操作 还是 恢复操作
if (dcEventAnDcEmergencyPlans.getOperationType().equals(1)) {
@ -380,7 +427,6 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService {
selectEventPlanAssoc.setRecoveredControlResult(resultArray.toJSONString());
return eventPlanAssocMapper.updateEventPlanAssoc(selectEventPlanAssoc);
}
}
/**
@ -389,10 +435,10 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService {
public void invokedFunction(List<DcDevice> dcDevices, JSONObject otherConfig, JSONArray resultArray) throws HttpException, IOException {
String iotDeviceId = "";
String functionId = "";
HashMap<String, Object> props = new HashMap<>();
for (DcDevice device : dcDevices) {
iotDeviceId = device.getIotDeviceId();
HashMap<String, Object> props = new HashMap<>();
if (device.getDeviceType().equals(DeviceTypeConstants.DRIVING_GUIDANCE)) {
// 行车诱导
@ -415,10 +461,13 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService {
props.put("mode", "02");
}
} else if (device.getDeviceType().equals(DeviceTypeConstants.VARIABLE_INFORMATION_FLAG)) {
}
else if (device.getDeviceType().equals(DeviceTypeConstants.VARIABLE_INFORMATION_FLAG)) {
// 可变信息标志
functionId = DeviceFunctionIdConstants.VARIABLE_INFORMATION_FLAG;
} else {
// props.put("")
}
else {
break;
}
@ -496,6 +545,7 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService {
.filter(dcExecuteAction -> dcExecuteAction.getId() == null)
.collect(Collectors.toList());
if (insertDcExecuteActionList.size() > 0) {
insertDcExecuteActionList.forEach(dcExecuteAction -> dcExecuteAction.setCreateTime(DateUtils.getNowDate()));
dcExecuteActionService.insertDcExecuteActionBatch(insertDcExecuteActionList);
}

17
zc-business/src/main/resources/mapper/business/DcEmergencyPlansMapper.xml

@ -15,6 +15,7 @@
<result property="triggeringCondition" column="triggering_condition"/>
<result property="controllableDevice" column="controllable_device"/>
<result property="controlCommand" column="control_command"/>
<result property="eventCategory" column="event_category"/>
<collection property="dcExecuteAction" ofType="DcExecuteAction">
<result property="id" column="action_id"/>
<result property="emergencyPlansId" column="action_emergency_plans_id"/>
@ -42,6 +43,7 @@
<if test="triggeringCondition != null and triggeringCondition != ''">triggering_condition,</if>
<if test="controllableDevice != null and controllableDevice != ''">controllable_device,</if>
<if test="controlCommand != null and controlCommand != ''">control_command,</if>
<if test="eventCategory != null">event_category,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="planName != null and planName != ''">#{planName},</if>
@ -53,6 +55,7 @@
<if test="triggeringCondition != null and triggeringCondition != ''">#{triggeringCondition},</if>
<if test="controllableDevice != null and controllableDevice != ''">#{controllableDevice},</if>
<if test="controlCommand != null and controlCommand != ''">#{controlCommand},</if>
<if test="eventCategory != null">#{eventCategory},</if>
</trim>
</insert>
@ -65,7 +68,8 @@
device_type = #{deviceType},
triggering_condition = #{triggeringCondition},
controllable_device = #{controllableDevice},
control_command = #{controlCommand}
control_command = #{controlCommand},
event_category = #{eventCategory}
where id = #{id}
</update>
@ -86,6 +90,7 @@
t1.triggering_condition,
t1.controllable_device,
t1.control_command,
t1.event_category,
t2.id as action_id,
t2.emergency_plans_id as action_emergency_plans_id,
t2.device_type as action_device_type,
@ -110,7 +115,8 @@
t1.device_type,
t1.triggering_condition,
t1.controllable_device,
t1.control_command
t1.control_command,
t1.event_category
from dc_emergency_plans t1
</select>
@ -121,7 +127,12 @@
<select id="selectDcEmergencyPlansByEventType" parameterType="dcEvent" resultMap="DcEmergencyPlansResult">
<include refid="selectDcEmergencyPlansListAll"/>
where t1.event_type = #{eventType}
where t1.event_type = #{eventType} and t1.event_category = 1
</select>
<select id="selectDcEmergencyPlansByWarningType" parameterType="int" resultMap="DcEmergencyPlansResult">
<include refid="selectDcEmergencyPlansListAll"/>
where t1.event_type = #{eventType} and t1.event_category = 2
</select>

Loading…
Cancel
Save