From 8e13acabbf4a5cb74b3323d3f64527519a052681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=85=B4=E7=90=B3?= <1911390090@qq.com> Date: Fri, 12 Apr 2024 12:45:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8B=E4=BB=B6=20=E4=B8=BB=E9=A1=B5?= =?UTF-8?q?=E6=8E=A8=E9=80=81=20=20WebSocket?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DcEventController.java | 4 +-- .../zc/business/enums/EventSubclassEnum.java | 6 ++++ .../business/enums/WarningSubclassEnum.java | 2 +- .../service/impl/DcEventServiceImpl.java | 34 ++++++++++++++++-- .../service/impl/DcWarningServiceImpl.java | 36 ++++++++++++++++++- 5 files changed, 76 insertions(+), 6 deletions(-) diff --git a/zc-business/src/main/java/com/zc/business/controller/DcEventController.java b/zc-business/src/main/java/com/zc/business/controller/DcEventController.java index d42626b4..7a2899a7 100644 --- a/zc-business/src/main/java/com/zc/business/controller/DcEventController.java +++ b/zc-business/src/main/java/com/zc/business/controller/DcEventController.java @@ -6,6 +6,7 @@ import javax.servlet.http.HttpServletResponse; import com.zc.business.domain.DcEvent; import com.zc.business.service.IDcEventService; +import com.zc.common.core.websocket.WebSocketService; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -94,6 +95,7 @@ public class DcEventController extends BaseController @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") String id) { + DcEvent dcEvent = dcEventService.selectDcEventById(id); return AjaxResult.success(dcEvent); } @@ -122,10 +124,8 @@ public class DcEventController extends BaseController //@PreAuthorize("@ss.hasPermi('system:event:add')") @Log(title = "事件信息", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@RequestBody DcEvent dcEvent) { - return toAjax(dcEventService.insertDcEvent(dcEvent)); } diff --git a/zc-business/src/main/java/com/zc/business/enums/EventSubclassEnum.java b/zc-business/src/main/java/com/zc/business/enums/EventSubclassEnum.java index 0a36b980..68e8059b 100644 --- a/zc-business/src/main/java/com/zc/business/enums/EventSubclassEnum.java +++ b/zc-business/src/main/java/com/zc/business/enums/EventSubclassEnum.java @@ -11,6 +11,12 @@ public enum EventSubclassEnum { NATURAL("1-4", "自然","前方*发生自然现象请注意"), OTHER_ACCIDENTS("1-5", "其他事故","前方*发生事故谨慎驾驶"), VEHICLE_MALFUNCTION("2-1", "车辆故障","前方*发生故障注意避让"), + THE_MAIN_LINE_IS_CLOSED_AND_RESTRICTED("3-1", "主线封闭和限行","前方*主线封闭和限行"), + TOLL_BOOTHS_ARE_CLOSED_AND_RESTRICTED("3-2", "收费站封闭和限行","前方*收费站封闭和限行"), + THE_INTERCHANGE_IS_CLOSED_AND_RESTRICTED("3-3", "立交封闭和限行","前方*立交封闭和限行"), + THE_SERVICE_AREA_IS_CLOSED_AND_RESTRICTED("3-4", "服务区封闭和限行","前方*服务区封闭和限行"), + + ROAD_CONGESTION("4-1", "道路拥堵","前方*道路拥堵"), OVERPASS_CONGESTION("4-2", "立交拥堵","前方*立交拥堵"), TOLL_STATION_CONGESTION("4-3", "收费站拥堵","前方*收费站拥堵"), diff --git a/zc-business/src/main/java/com/zc/business/enums/WarningSubclassEnum.java b/zc-business/src/main/java/com/zc/business/enums/WarningSubclassEnum.java index 6a3e4c19..02bbb6ec 100644 --- a/zc-business/src/main/java/com/zc/business/enums/WarningSubclassEnum.java +++ b/zc-business/src/main/java/com/zc/business/enums/WarningSubclassEnum.java @@ -27,7 +27,7 @@ public enum WarningSubclassEnum { EMERGENCY_LANE_BLOCKED("4-7", "应急车道被占用", "发生"), VEHICLE_EXIT_EMERGENCY_LANE("4-8", "车离开应急车道", "发生"), OTHER_CONDITION("4-9", "其他", "发生停车"), - OTHER_UNKNOWN("4-10", "未知车俩", "发生停车"), + OTHER_UNKNOWN("4-10", "未知车辆", "发生停车"), REVERSING_OR_GOING_BACKWARDS("5-1", "倒车/逆行", "发生"), LINEBALL("5-2", "压线", "发生压线"), TURNROUND("5-3", "掉头", "发生掉头"), diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java index cc1291e5..8bf77a32 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java @@ -12,6 +12,7 @@ import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.system.service.ISysDeptService; import com.sun.xml.bind.v2.TODO; import com.zc.business.domain.*; +import com.zc.business.enums.EventSubclassEnum; import com.zc.business.enums.ValueConverter; import com.zc.business.mapper.*; import com.zc.business.service.IDcEventProcessService; @@ -19,6 +20,7 @@ import com.zc.business.service.IDcEventService; import com.zc.business.service.IMiddleDatabaseService; import com.zc.business.utils.diff.Diff; import com.zc.business.utils.diff.model.Result; +import com.zc.common.core.websocket.WebSocketService; import org.junit.Test; import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; @@ -80,7 +82,9 @@ public class DcEventServiceImpl extends ServiceImpl impl @Autowired private IDcEventProcessService dcEventProcessService; - + private final String HAPPEN = "发生"; + private final String EVENT = "事件"; + private final String SUBEVENT = "0"; /** * 查询事件信息 * @@ -187,6 +191,9 @@ public class DcEventServiceImpl extends ServiceImpl impl int i7 = dcEventMapper.insertDcEvent(dcEvent); + if (i7>0 && eventType != 3){ + extracted(dcEvent);//事件推送到 首页 + } if (i7 > 0) { if (dcEvent.getDcEventTrafficControl().getFacilityIds().length<1 &&dcEventId == null){//非 事件处置 和收费站等多条数据添加 @@ -295,6 +302,7 @@ if (dcEvent.getDcEventTrafficControl().getFacilityIds().length<1 &&dcEventId == dcEvent.setStakeMark(extracted(facilityId)); } dcEventMapper.insertDcEvent(dcEvent); + extracted(dcEvent); //中间库 MdEvent mdEvent = new MdEvent(dcEvent); middleDatabaseService.insertMiddleDatabaseEvent(mdEvent); @@ -350,7 +358,7 @@ if (dcEvent.getDcEventTrafficControl().getFacilityIds().length<1 &&dcEventId == middleDatabaseService.insertMiddleDatabaseEvent(mdEvent); dcEventMapper.insertDcEvent(dcEvent); - + extracted(dcEvent); int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl()); } } @@ -411,6 +419,28 @@ if (dcEvent.getDcEventTrafficControl().getFacilityIds().length<1 &&dcEventId == } } + /** + * 推送 事件信息 + * @param dcEvent + */ + private void extracted(DcEvent dcEvent) { + String direction = "";// 方向 + String EventSubclass = "";// 事件类型 + if (dcEvent.getDirection().equals("1")) { + direction="菏泽方向"; + }else { + direction="济南方向"; + } + for (EventSubclassEnum eventSubclass : EventSubclassEnum.values()) { + if (eventSubclass.getCode().equals(dcEvent.getEventSubclass())) { + EventSubclass=eventSubclass.getInfo(); + break; + } + } + String content= direction+" " + dcEvent.getStakeMark()+" "+HAPPEN+EventSubclass+EVENT ; + WebSocketService.broadcast(SUBEVENT, content); //推送事件消息 0不是感知事件 + } + //根据路网设施查询桩号 private String extracted(String facilityId) { DcFacility facility = dcFacilityService.getFacility(facilityId); diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java index c2203f31..b3a74e17 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java @@ -12,10 +12,12 @@ import com.zc.business.domain.DcWaringStrategy; import com.zc.business.domain.DcWarning; import com.zc.business.domain.DcWarningBatchConvert; import com.zc.business.enums.ValueConverter; +import com.zc.business.enums.WarningSubclassEnum; import com.zc.business.mapper.DcEventMapper; import com.zc.business.mapper.DcWarningMapper; import com.zc.business.service.IDcEventService; import com.zc.business.service.IDcWarningService; +import com.zc.common.core.websocket.WebSocketService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -47,7 +49,9 @@ public class DcWarningServiceImpl implements IDcWarningService private IDcEventService dcEventService; @Resource private RedisCache redisCache; - + private final String HAPPEN = "发生"; + private final String EVENT = "事件"; + private final String SUBEVENT = "1"; private static final String WARNINGSTRATEGY = "warningStrategy";//redis策略缓存的key private static final String WARNINGDATA = "warningData:";//redis事件缓存的key private static String JUDGE = "1"; //自定义判断参数,1为满足0为不满足 @@ -123,6 +127,10 @@ public class DcWarningServiceImpl implements IDcWarningService dcWarning.setEndTime(DateUtils.getObtainDateAfter(Integer.parseInt(strategyTime)));//注入过期时间 if (dataId==null){//如果不存在直接加入数据库,加入缓存,配置对应的缓存过期时间以及数据库过期时间 int insertDcWarning = dcWarningMapper.insertDcWarning(dcWarning);//加入数据库 + //事件推送至 Websocket + extracted(dcWarning); + + if (insertDcWarning==0){ return 0; } @@ -136,6 +144,8 @@ public class DcWarningServiceImpl implements IDcWarningService redisCache.deleteObject(WARNINGDATA+key); String id = dcWarning.getId(); redisCache.setCacheObject(WARNINGDATA+key,id,Integer.parseInt(strategyTime),TimeUnit.MINUTES); + //事件推送至 Websocket + extracted(dcWarning); return dcWarningMapper.insertDcWarning(dcWarning); } String otherConfig=""; @@ -164,9 +174,33 @@ public class DcWarningServiceImpl implements IDcWarningService redisCache.setCacheObject(WARNINGDATA+key,dataId,Integer.parseInt(strategyTime),TimeUnit.MINUTES);//重新设置延迟时间 return dcWarningMapper.updateOtherConfig(dataId, jsonObject.toString(),dcWarning.getEndTime());//修改数据库配置 } + //事件推送至 Websocket + extracted(dcWarning); return dcWarningMapper.insertDcWarning(dcWarning);//如果没有配置策略直接加入数据库; } + /** + * 事件推送至 Websocket + * @param dcWarning + */ + private void extracted(DcWarning dcWarning) { + String direction = "";// 方向 + String EventSubclass = "";// 事件类型 + if (dcWarning.getDirection().equals("1")) { + direction="菏泽方向"; + }else { + direction="济南方向"; + } + for (WarningSubclassEnum eventSubclass : WarningSubclassEnum.values()) { + if (eventSubclass.getCode().equals(dcWarning.getWarningSubclass())) { + EventSubclass=eventSubclass.getInfo(); + break; + } + } + String content= direction+" " + dcWarning.getStakeMark()+" "+HAPPEN+EventSubclass+EVENT ; + WebSocketService.broadcast(SUBEVENT, content); //推送事件消息 0不是感知事件 + } + //优先级策略(还差优先级策略需要配置) // public int priority(DcWarning dcWarning){ // dcWarning.setCreateTime(DateUtils.getNowDate());