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 629bf40c..3b6d1218 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 @@ -204,4 +204,27 @@ public class DcEventController extends BaseController public AjaxResult skipClear(@ApiParam(value="事件id", name="eventId", required=true) @RequestParam ("eventId") String eventId){ return dcEventService.skipClear(eventId); } + + @ApiOperation("调度记录") + @GetMapping("/dispatchRecordEventList") + public TableDataInfo dispatchRecordEventList(DcEvent dcEvent){ + startPage(); + List<DcEvent> list = dcEventService.dispatchRecordEventList(dcEvent); + return getDataTable(list); + } + + + /** + * @Description 查询关联事件 + * + * @author liuwenge + * @date 2024/5/30 14:27 + * @param eventId + * @return com.ruoyi.common.core.domain.AjaxResult + */ + @ApiOperation("查询关联事件") + @GetMapping( "/getLinkEvent/{eventId}") + public AjaxResult getLinkEvent(@ApiParam(name = "eventId", value = "事件id", required = true) @PathVariable("eventId") String eventId){ + return dcEventService.getLinkEvent(eventId); + } } diff --git a/zc-business/src/main/java/com/zc/business/controller/DcWarningController.java b/zc-business/src/main/java/com/zc/business/controller/DcWarningController.java index 453032b0..ffb01f0c 100644 --- a/zc-business/src/main/java/com/zc/business/controller/DcWarningController.java +++ b/zc-business/src/main/java/com/zc/business/controller/DcWarningController.java @@ -55,8 +55,8 @@ public class DcWarningController extends BaseController */ @ApiOperation("感知事件数据统计") @GetMapping("/countNumber") - public AjaxResult dcWarningCountNumber() { - return AjaxResult.success(dcWarningService.dcWarningCountNumber()); + public AjaxResult dcWarningCountNumber(@RequestParam(required = false) Integer warningSource) { + return AjaxResult.success(dcWarningService.dcWarningCountNumber(warningSource)); } /** @@ -160,7 +160,7 @@ public class DcWarningController extends BaseController return dcWarningService.batchConvert(dcWarningBatchConvert); } - //指挥调度 + //1,指挥调度,查看是否存在记录和资源信息,存在即返回 @PostMapping("/commandAndDispatch") public AjaxResult commandAndDispatch(@RequestBody DcWarning dcWarning){ if (StringUtils.isBlank(dcWarning.getStakeMark())||StringUtils.isBlank(dcWarning.getId())){ @@ -168,21 +168,50 @@ public class DcWarningController extends BaseController } return (dcWarningService.commandAndDispatch(dcWarning)); } - //指挥调度记录修改 - @PostMapping("/updateDispatch") - public AjaxResult insertDispatch(@RequestBody DcDispatch dcDispatch){ - if (dcDispatch.getOrganizationId()==null){ + //2,指挥调度,当调度信息为空的时候调用智能分配资源 + @PostMapping("/intelligentSource") + public AjaxResult intelligentSource(@RequestBody DcWarning dcWarning){ + if (StringUtils.isBlank(dcWarning.getStakeMark())){ return AjaxResult.error("参数错误"); } - return toAjax(dcWarningService.insertDispatch(dcDispatch)); + return (dcWarningService.intelligentSource(dcWarning)); } - //指挥调度资源新增 + //3.指挥调度,新增调度记录信息 + @PostMapping("/insertDispatch") + public AjaxResult insertDispatch(@RequestBody HashMap map){ + if (map == null || !map.containsKey("eventId")||StringUtils.isBlank(map.get("eventId").toString())){ + return AjaxResult.error("参数错误"); + } + return (dcWarningService.insertDispatch(map)); + } + //4.指挥调度资源新增(用户修改弹窗的提交) @PostMapping("/updateSource") public AjaxResult insertDispatchSource(@RequestBody HashMap map){ - if (map==null||!map.containsKey("dispatchId")){ + return toAjax(dcWarningService.insertDispatchSource(map)); + } + //5.修改调度资源记录 1.查询记录id +// @PostMapping("/selectDispatchId") +// public AjaxResult selectDispatchId(@RequestBody HashMap map){ +// if (map == null || !map.containsKey("eventId")||StringUtils.isBlank(map.get("eventId").toString())){ +// return AjaxResult.error("参数错误"); +// } +// return AjaxResult.success(dcWarningService.selectDispatchId(map.get("eventId").toString())); +// } + //5.修改调度资源记录 2.提交调度资源 + @PostMapping("/updateDispatchSource") + public AjaxResult updateDispatch(@RequestBody HashMap map){ + if (map == null || !map.containsKey("dispatchId")||StringUtils.isBlank(map.get("dispatchId").toString())){ return AjaxResult.error("参数错误"); } - return toAjax(dcWarningService.insertDispatchSource(map)); + return toAjax(dcWarningService.updateDispatchSource(map)); + } + //指挥调度记录修改 + @PostMapping("/updateDispatch") + public AjaxResult insertDispatch(@RequestBody DcDispatch dcDispatch){ + if (dcDispatch.getOrganizationId()==null){ + return AjaxResult.error("参数错误"); + } + return toAjax(dcWarningService.insertDispatch(dcDispatch)); } //感知事件误报 @PostMapping("/falseAlarm") diff --git a/zc-business/src/main/java/com/zc/business/controller/ModuleCallController.java b/zc-business/src/main/java/com/zc/business/controller/ModuleCallController.java new file mode 100644 index 00000000..fc23c3b1 --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/controller/ModuleCallController.java @@ -0,0 +1,47 @@ +package com.zc.business.controller; + +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.zc.business.service.ModuleCallService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * 模块调用统计接口 + */ +@Api(tags = {"模块调用统计接口"}) +@RestController +@RequestMapping("/business/moduleCall") +public class ModuleCallController extends BaseController { + + @Resource + private ModuleCallService moduleCallService; + + /** + * 模块调用统计 + * + * @return 查询结果 + */ + @ApiOperation("模块调用统计") + @GetMapping("/countNumber") + public AjaxResult moduleCallCountNumber() { + return AjaxResult.success(moduleCallService.selectModuleCall()); + } + + /** + * 基础数据统计 + * + * @return 查询结果 + */ + @ApiOperation("基础数据统计") + @GetMapping("/basicDataNumber") + public AjaxResult basicDataNumber() { + return AjaxResult.success(moduleCallService.selectBasicData()); + } + +} diff --git a/zc-business/src/main/java/com/zc/business/controller/StatusController.java b/zc-business/src/main/java/com/zc/business/controller/StatusController.java index 72758157..d12339f0 100644 --- a/zc-business/src/main/java/com/zc/business/controller/StatusController.java +++ b/zc-business/src/main/java/com/zc/business/controller/StatusController.java @@ -53,10 +53,6 @@ public class StatusController extends BaseController { public TableDataInfo getTabList(Status status) { startPage(); - LocalDateTime todayStart = status.getStartTime().truncatedTo(ChronoUnit.DAYS); - LocalDateTime currentTime = status.getTime().truncatedTo(ChronoUnit.DAYS).plusDays(1); - status.setStartTime(todayStart); - status.setTime(currentTime); status.setTypes(status.getType().split(",")); List<Status> listStatus = statusService.listStatusByTypes(status); return getDataTable(listStatus); @@ -71,13 +67,10 @@ public class StatusController extends BaseController { @PostMapping("/export") public void export(HttpServletResponse response, Status status) { - LocalDateTime todayStart = status.getStartTime().truncatedTo(ChronoUnit.DAYS); - LocalDateTime currentTime = status.getTime().truncatedTo(ChronoUnit.DAYS).plusDays(1); - status.setStartTime(todayStart); - status.setTime(currentTime); + status.setTypes(status.getType().split(",")); List<Status> listStatus = statusService.export(status); ExcelUtil<Status> util = new ExcelUtil<>(Status.class); - util.exportExcel(response, listStatus, "【请填写功能名称】数据"); + util.exportExcel(response, listStatus, "设备状态列表"); } //按时间划分设备柱状图 @@ -89,30 +82,19 @@ public class StatusController extends BaseController { status.setStartTime(todayStart); status.setTime(currentTime); String[] types = status.getType().split(","); + status.setTypes(types); Map<String, Map<String, String>> maps = new HashMap<>(); + List<Status> statuses = statusService.getStatusList(status); for (String type : types) { - status.setType(type); - List<Status> listStatus = statusService.list(status); - // List<Status> listStatu=listStatus.stream().filter(iteam ->iteam.getType()!=null && iteam.getType().equals(type)).collect(Collectors.toList()); - //根据时间分组 - Map<String, List<Status>> map = listStatus.stream() - .collect(Collectors.groupingBy(Status -> (Status.getTime().getYear() + "-" + Status.getTime().getMonthValue() + "-" + Status.getTime().getDayOfMonth()))); - //根据类型分组 - // Map<String, List<Status>> maps = listStatu.stream().filter(iteam->iteam.getType()!=null).collect(Collectors.groupingBy(Status::getType)); - //生成有序map - Map<String, List<Status>> mapTime = new TreeMap<>(map); - Map<String, String> mapSort = new TreeMap<>(); - for (Map.Entry<String, List<Status>> entry : mapTime.entrySet()) { - List<Status> groupItems = entry.getValue(); - long count = groupItems.stream().filter(iteam -> Objects.equals(iteam.getDeviceStatus(), "1")).count(); - String onlineRate = String.format("%.2f%%", (double) count / groupItems.size() * 100); - mapSort.put(entry.getKey(), onlineRate); - } - maps.put(type, mapSort); + Map<String, String> collect = statuses.stream().filter(item -> Objects.equals(item.getType(), type)) + .collect(Collectors.toMap( + item -> item.getTime().getYear() + "-" + item.getTime().getMonthValue() + "-" + item.getTime().getDayOfMonth(), + Status::getSuccessRate + )); + maps.put(type, collect); } - // Map<String, List<Status>> mapStatus = new TreeMap<>(maps); return AjaxResult.success(maps); } diff --git a/zc-business/src/main/java/com/zc/business/controller/WeatherForecastController.java b/zc-business/src/main/java/com/zc/business/controller/WeatherForecastController.java index 99e57d71..516166b0 100644 --- a/zc-business/src/main/java/com/zc/business/controller/WeatherForecastController.java +++ b/zc-business/src/main/java/com/zc/business/controller/WeatherForecastController.java @@ -10,6 +10,7 @@ import com.zc.business.domain.DcRegion; import com.zc.business.service.impl.DcRegionServiceImpl; import com.zc.common.core.httpclient.OkHttp; import com.zc.common.core.httpclient.exception.HttpException; +import com.zc.common.core.httpclient.request.RequestParams; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import okhttp3.Response; @@ -51,6 +52,121 @@ public class WeatherForecastController extends BaseController { @Autowired private ISysConfigService configService; + /* + * 当前气象及预报信息查询 + * */ + @ApiOperation("当前气象及预报信息查询") + @PostMapping(value = "/currentWeatherAndForecastInformation") + public AjaxResult currentWeatherAndForecastInformation(@RequestBody HashMap<String,Object> parameter) { + + String stakeNum = String.valueOf(parameter.get("stakeNum")); + String[] split = stakeNum.split("[|]"); + + StringBuilder numStake = new StringBuilder(); + + for (int i = 0; i < split.length; i++) { + String[] split1 = split[i].split("[+]"); + String k = split1[0].replace("K", ""); + int parseInt = Integer.parseInt(k); + numStake.append("K").append(findNearestMultipleOfFive(parseInt)).append("+000"); + if (i != split.length - 1) { + numStake.append("|"); + } + } + + parameter.put("stakeNum", numStake); + + + JSONObject weather = JSONObject.parseObject(configService.selectConfigByKey("weather")); + + try { + + OkHttp okHttp = new OkHttp(); + + RequestParams requestParams = new RequestParams(parameter); + Response response // 请求响应 + = okHttp + .headers(new HashMap<>()) + .url(weather.getString("get_weather_info")) // 请求地址 + //.url("http://10.166.133.9:38999/api/weather_service/get_weather_info") // 请求地址 + .data(requestParams) + .post(); // 请求方法 + + if (response.body() != null) { + + JSONObject jsonResult = JSONObject.parseObject(response.body().string()); + if (jsonResult.getInteger("code") == 200) { + return AjaxResult.success(jsonResult.getJSONArray("data")); + } else { + return AjaxResult.error(jsonResult.getInteger("code"), "请求失败"); + } + } + } catch (Exception ignored) { + + + } + return AjaxResult.error("请求失败"); + } + + public static int findNearestMultipleOfFive(int number) { + // 计算除以5的余数 + int remainder = number % 5; + + // 如果余数为0,则number已经是5的倍数 + if (remainder == 0) { + return number; + } + + // 如果余数不为0,则最近的5的倍数要么是number减去余数(如果余数小于3), + // 要么是number加上(5 - 余数)(如果余数大于或等于3) + // 这里选择的是较小的那个值(向上或向下取整) + int lowerMultiple = number - remainder; + int higherMultiple = number + (5 - remainder); + + // 返回两者中较小的那个 + return (lowerMultiple < higherMultiple) ? lowerMultiple : higherMultiple; + } + + /* + * 当前气象预警信息查询 + * */ + @ApiOperation("当前气象预警信息查询") + @PostMapping(value = "/currentWeatherWarningInformationQuery") + public AjaxResult currentWeatherWarningInformationQuery(@RequestBody HashMap<String, Object> parameter) { + + + JSONObject weather = JSONObject.parseObject(configService.selectConfigByKey("weather")); + + try { + + OkHttp okHttp = new OkHttp(); + + RequestParams requestParams = new RequestParams(parameter); + Response response // 请求响应 + = okHttp + .headers(new HashMap<>()) + .url(weather.getString("get_earlyworning_info")) // 请求地址 + //.url("http://10.166.133.9:38999/api/weather_service/get_earlyworning_info") // 请求地址 + .data(requestParams) + .post(); // 请求方法 + + if (response.body() != null) { + + JSONObject jsonResult = JSONObject.parseObject(response.body().string()); + if (jsonResult.getInteger("code") == 200) { + return AjaxResult.success(jsonResult.getJSONArray("data")); + } else { + return AjaxResult.error(jsonResult.getInteger("code"), "请求失败"); + } + } + } catch (Exception ignored) { + + + } + return AjaxResult.error("请求失败"); + } + + /* * 天气实况查询 * */ @@ -71,6 +187,17 @@ public class WeatherForecastController extends BaseController { return getAjaxResult(weather.getString("METEOROLOGICALEARLYWARNINGURI"), weather.getString("METEOROLOGICALEARLYWARNINGKEY"), weather.getString("METEOROLOGICALEARLYWARNING")); } + /* + * 逐小时天气查询 + * */ + @ApiOperation("逐小时天气查询") + @PostMapping(value = "/hourlyWeather") + public AjaxResult hourlyWeather() { + JSONObject weather = JSONObject.parseObject(configService.selectConfigByKey("weather")); + return getAjaxResult(weather.getString("HOURLYWEATHERURI"), weather.getString("HOURLYWEATHERKEY"), weather.getString("HOURLYWEATHER")); + } + + /* * 气象预警数量查询 * */ @@ -135,16 +262,6 @@ public class WeatherForecastController extends BaseController { } - /* - * 逐小时天气查询 - * */ - @ApiOperation("逐小时天气查询") - @PostMapping(value = "/hourlyWeather") - public AjaxResult hourlyWeather() { - JSONObject weather = JSONObject.parseObject(configService.selectConfigByKey("weather")); - return getAjaxResult(weather.getString("HOURLYWEATHERURI"), weather.getString("HOURLYWEATHERKEY"), weather.getString("HOURLYWEATHER")); - } - private AjaxResult getAjaxResult(String uri, String accessKey, String redisKey) { JSONObject weather = JSONObject.parseObject(configService.selectConfigByKey("weather")); diff --git a/zc-business/src/main/java/com/zc/business/domain/DcDevice.java b/zc-business/src/main/java/com/zc/business/domain/DcDevice.java index 0bd60eb7..4ef85d4c 100644 --- a/zc-business/src/main/java/com/zc/business/domain/DcDevice.java +++ b/zc-business/src/main/java/com/zc/business/domain/DcDevice.java @@ -35,8 +35,8 @@ public class DcDevice { @ApiModelProperty("物联设备ID") @Excel(name = "物联设备ID") private String iotDeviceId; - @ApiModelProperty("组ID") - @Excel(name = "组ID") + @ApiModelProperty("所属机构") + //@Excel(name = "所属机构") private Long groupId; @ApiModelProperty("产品ID") @Excel(name = "产品ID") @@ -45,7 +45,7 @@ public class DcDevice { @Excel(name = "桩号") private String stakeMark; @ApiModelProperty("方向1-上行(菏泽方向),2-中,3-下行(济南方向)") - @Excel(name = "方向") + @Excel(name = "方向", readConverterExp = "1=菏泽方向,3=济南方向") private String direction; @ApiModelProperty("设备名称") @Excel(name = "设备名称") @@ -54,7 +54,7 @@ public class DcDevice { @Excel(name = "设备编号") private String deviceCode; @ApiModelProperty("设备类型") - @Excel(name = "设备类型") + @Excel(name = "设备类型", readConverterExp = "1=摄像机,2=可变信息标志,3=气象监测器,4=出口诱导灯,5=路段语音广播,6=护栏碰撞,7=毫米波雷达,8=合流区预警,9=智慧锥桶,10=激光疲劳唤醒,11=一类交通量调查站,12=行车诱导,13=智能设备箱,14=光线在线监测,15=太阳能板,16=远端机") private String deviceType; @ApiModelProperty("所属网段") @Excel(name = "所属网段") @@ -75,10 +75,10 @@ public class DcDevice { @Excel(name = "安装位置") private String installationSite; @ApiModelProperty("设备状态") - @Excel(name = "设备状态") + @Excel(name = "设备状态", readConverterExp = "0=异常,1=正常") private String deviceState; @ApiModelProperty("使用状态") - @Excel(name = "使用状态") + @Excel(name = "使用状态", readConverterExp = "0=使用中,1=未使用") private Integer useState; @ApiModelProperty("其他配置") @Excel(name = "其他配置") @@ -87,7 +87,7 @@ public class DcDevice { @Excel(name = "备注") private String remark; @ApiModelProperty("设施归属类型(0:默认1: 道路沿线2:桥梁3: 隧道4:收费广场5: 收费站6: 服务区等") - @Excel(name = "设施归属类型") + @Excel(name = "设施归属类型", readConverterExp = "0=默认,1=道路沿线,2=桥梁,3=隧道,4=收费广场,5=收费站,6=服务区") private String facilitiesType; @ApiModelProperty("设备ip") @Excel(name = "设备ip") @@ -102,7 +102,7 @@ public class DcDevice { @Excel(name = "修改时间") private Date updateTime; @ApiModelProperty("子类型") - @Excel(name = "子类型") + @Excel(name = "子类型", readConverterExp = "1-1=高清网络枪型固定摄像机,1-2=高清网络球形摄像机,1-3=桥下高清网络球形摄像机,1-4=360°全景摄像机,1-5=180°全景摄像机,2-1=门架式可变信息标志,2-2=站前可变信息标志,2-3=雨棚可变信息标志,2-4=站前悬臂式可变信息标") private String childType; @TableField(exist = false) private String longitude; diff --git a/zc-business/src/main/java/com/zc/business/domain/DcEmployees.java b/zc-business/src/main/java/com/zc/business/domain/DcEmployees.java index ef2635f2..ea44e535 100644 --- a/zc-business/src/main/java/com/zc/business/domain/DcEmployees.java +++ b/zc-business/src/main/java/com/zc/business/domain/DcEmployees.java @@ -8,7 +8,7 @@ import com.ruoyi.common.core.domain.BaseEntity; /** * 值班人员信息对象 dc_employees - * + * * @author ruoyi * @date 2024-01-04 */ @@ -50,7 +50,7 @@ public class DcEmployees extends BaseEntity private Long parentId; //人员类型1为路管人员2为应急人员 - @Excel(name = "人员类型 1-路管人员 2-交警人员") + @Excel(name = "人员类型",readConverterExp = "1=路管人员,2=交警人员") private Long employeesType; //类型参数 private String type; @@ -100,43 +100,43 @@ public class DcEmployees extends BaseEntity this.id = id; } - public Long getId() + public Long getId() { return id; } - public void setPostId(String postId) + public void setPostId(String postId) { this.postId = postId; } - public String getPostId() + public String getPostId() { return postId; } - public void setOrganizationId(Long organizationId) + public void setOrganizationId(Long organizationId) { this.organizationId = organizationId; } - public Long getOrganizationId() + public Long getOrganizationId() { return organizationId; } - public void setName(String name) + public void setName(String name) { this.name = name; } - public String getName() + public String getName() { return name; } - public void setContactNumber(String contactNumber) + public void setContactNumber(String contactNumber) { this.contactNumber = contactNumber; } - public String getContactNumber() + public String getContactNumber() { return contactNumber; } diff --git a/zc-business/src/main/java/com/zc/business/domain/DcEvent.java b/zc-business/src/main/java/com/zc/business/domain/DcEvent.java index fd84070d..14f05f49 100644 --- a/zc-business/src/main/java/com/zc/business/domain/DcEvent.java +++ b/zc-business/src/main/java/com/zc/business/domain/DcEvent.java @@ -1,16 +1,16 @@ package com.zc.business.domain; -import java.util.Date; -import java.util.List; - import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import com.ruoyi.common.annotation.Excel; + +import java.util.Date; +import java.util.List; /** * 事件信息对象 dc_event @@ -58,8 +58,8 @@ public class DcEvent { * 2-中 * 3-下 */ - @Excel(name = "方向", readConverterExp = "1=菏泽方向,3=济南方向") - //@Excel(name = "方向") + @Excel(name = "方向", readConverterExp = "1=菏泽方向,3=济南方向") + //@Excel(name = "方向") @ApiModelProperty("方向") private String direction; @@ -69,7 +69,7 @@ public class DcEvent { @ApiModelProperty("处理人员") private Long userId; - @ApiModelProperty("事件子类") + @ApiModelProperty("事件子类") private String eventSubclassName; /** @@ -156,12 +156,12 @@ public class DcEvent { private String description; /** * 事件状态: - 事件状态: - 0-待确认 - 1-已确认 - 2-处理中 - 3-已完成 - 4-已撤销 + * 事件状态: + * 0-待确认 + * 1-已确认 + * 2-处理中 + * 3-已完成 + * 4-已撤销 */ @ApiModelProperty("事件状态 事件状态:* 0-未解决1-已解决2-已关闭") private Long eventState; @@ -200,7 +200,7 @@ public class DcEvent { /** * 是否处在隧道 */ - @Excel(name = "是否处在隧道" , readConverterExp = "0=否,1=是") + @Excel(name = "是否处在隧道", readConverterExp = "0=否,1=是") @ApiModelProperty("是否处在隧道 0 表示 false,1 表示 true") private Integer inTunnel; //@Excel(name = "高速") @@ -214,27 +214,27 @@ public class DcEvent { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty("发生时间") private Date occurrenceTime; - @Excel(name = "是否是感知事件" , readConverterExp = "0=否,1=是") + @Excel(name = "是否是感知事件", readConverterExp = "0=否,1=是") @ApiModelProperty("是否是感知事件 0 表示 false,1 表示 true") private Integer isPerceived; @Excel(name = "影响车道") - @ApiModelProperty("影响车道 车道占用:0-应急1-行1,2-行2,3-行3,4-行4") + @ApiModelProperty("影响车道 车道占用:0-应急1-行1,2-行2,3-行3,4-行4") private String lang; @ApiModelProperty("高速名") @TableField(exist = false) - private String roadName; + private String roadName; @ApiModelProperty("机构") @TableField(exist = false) - private String organizationName; + private String organizationName; @ApiModelProperty("事件流程") @TableField(exist = false) - private List<DcProcessConfig> processConfigList; -@ApiModelProperty("事件标题") + private List<DcProcessConfig> processConfigList; + @ApiModelProperty("事件标题") private String eventTitle; -@ApiModelProperty("维度") + @ApiModelProperty("维度") private String dimension; -@ApiModelProperty("经度") + @ApiModelProperty("经度") private String longitude; /** * 2014/2/21新增 @@ -291,20 +291,29 @@ public class DcEvent { private String processNode; - - /** 更新时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date updateTime; - /** 创建时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTime; - /** 备注 */ + /** + * 备注 + */ private String remark; private String subclass; -@ApiModelProperty("关联管制事件id") -private String linkId; + @ApiModelProperty("关联管制事件id") + private String linkId; + + @TableField(exist = false) + private List<DcEventProcess> dcEventProcessList; + } diff --git a/zc-business/src/main/java/com/zc/business/domain/DcOrganization.java b/zc-business/src/main/java/com/zc/business/domain/DcOrganization.java index f396054a..094ed367 100644 --- a/zc-business/src/main/java/com/zc/business/domain/DcOrganization.java +++ b/zc-business/src/main/java/com/zc/business/domain/DcOrganization.java @@ -9,7 +9,7 @@ import com.ruoyi.common.core.domain.TreeEntity; /** * 机构管理对象 dc_organization - * + * * @author ruoyi * @date 2024-01-04 */ @@ -23,7 +23,7 @@ public class DcOrganization extends TreeEntity /** 1-运管中心2-驻点 */ @ApiModelProperty(value = "类型1-运管中心 2-驻点", required = true) - @Excel(name = "1-运管中心 2-驻点") + @Excel(name = "类型",readConverterExp = "1=运管中心,2=驻点") private Integer organizationType; /** 名称 */ @@ -88,34 +88,34 @@ public class DcOrganization extends TreeEntity this.id = id; } - public Long getId() + public Long getId() { return id; } - public void setOrganizationType(Integer organizationType) + public void setOrganizationType(Integer organizationType) { this.organizationType = organizationType; } - public Integer getOrganizationType() + public Integer getOrganizationType() { return organizationType; } - public void setOrganizationName(String organizationName) + public void setOrganizationName(String organizationName) { this.organizationName = organizationName; } - public String getOrganizationName() + public String getOrganizationName() { return organizationName; } - public void setOrganizationAddress(String organizationAddress) + public void setOrganizationAddress(String organizationAddress) { this.organizationAddress = organizationAddress; } - public String getOrganizationAddress() + public String getOrganizationAddress() { return organizationAddress; } @@ -128,21 +128,21 @@ public class DcOrganization extends TreeEntity { return stakeMark; } - public void setRescueUnit(String rescueUnit) + public void setRescueUnit(String rescueUnit) { this.rescueUnit = rescueUnit; } - public String getRescueUnit() + public String getRescueUnit() { return rescueUnit; } - public void setDescription(String description) + public void setDescription(String description) { this.description = description; } - public String getDescription() + public String getDescription() { return description; } diff --git a/zc-business/src/main/java/com/zc/business/enums/IotProductEnum.java b/zc-business/src/main/java/com/zc/business/enums/IotProductEnum.java index 5e449a50..655c652c 100644 --- a/zc-business/src/main/java/com/zc/business/enums/IotProductEnum.java +++ b/zc-business/src/main/java/com/zc/business/enums/IotProductEnum.java @@ -16,6 +16,9 @@ public enum IotProductEnum { // 护栏碰撞 GUARDRAIL_COLLISION("hlpz"), + // 毫米波雷达 + MILLIMETER_WAVE_RADAR("hmbld"), + // 气象检测器 WEATHER_DETECTOR("zc-meteorological"), diff --git a/zc-business/src/main/java/com/zc/business/enums/ValueConverter.java b/zc-business/src/main/java/com/zc/business/enums/ValueConverter.java index 8778d92e..06f255cc 100644 --- a/zc-business/src/main/java/com/zc/business/enums/ValueConverter.java +++ b/zc-business/src/main/java/com/zc/business/enums/ValueConverter.java @@ -31,12 +31,12 @@ public class ValueConverter { static { valueMappingSource.put(1,5); - valueMappingSource.put(4,7); - valueMappingSource.put(7,7); - valueMappingSource.put(2,7); - valueMappingSource.put(3,7); - valueMappingSource.put(5,7); - valueMappingSource.put(6,7); + valueMappingSource.put(4,10); + valueMappingSource.put(7,13); + valueMappingSource.put(2,8); + valueMappingSource.put(3,9); + valueMappingSource.put(5,11); + valueMappingSource.put(6,12); valueMappingHost.put(1, 4); valueMappingHost.put(2, 5); valueMappingHost.put(3, 5); @@ -102,6 +102,12 @@ public class ValueConverter { eventSourceName.put("5","视频AI"); eventSourceName.put("6","一键救援"); eventSourceName.put("7","其他"); + eventSourceName.put("8","雷达识别"); + eventSourceName.put("9","锥桶"); + eventSourceName.put("10","护栏碰撞"); + eventSourceName.put("11","扫码报警"); + eventSourceName.put("12","非机预警"); + eventSourceName.put("13","气象检测器"); eventTypeName.put("1","交通事故"); eventTypeName.put("2","车辆故障"); @@ -166,7 +172,7 @@ public class ValueConverter { eventLabel.put("dcEventAccident.fatalities","死亡(人)"); eventLabel.put("dcEventAccident.isPrivate","私密事件"); eventLabel.put("dcEventAccident.facilityId","设施关联"); - eventLabel.put("dcEventAccident.rampId","匝道id"); +// eventLabel.put("dcEventAccident.rampId","匝道id"); eventLabel.put("dcEventAccident.location","地点"); eventLabel.put("dcEventConstruction.controlMode","管制方式"); eventLabel.put("dcEventConstruction.locationType","地点类型"); @@ -174,7 +180,7 @@ public class ValueConverter { eventLabel.put("dcEventConstruction.specialConstruction","专项施工"); eventLabel.put("dcEventConstruction.otherConstructionName","其他施工名称"); eventLabel.put("dcEventConstruction.constructionMeasurement","施工措施"); - eventLabel.put("dcEventConstruction.facilityId","设施id"); +// eventLabel.put("dcEventConstruction.facilityId","设施id"); eventLabel.put("dcEventConstruction.exitsInlets","出入口"); eventLabel.put("dcEventConstruction.laneOccupancy","占用车道"); eventLabel.put("dcEventConstruction.trafficCondition","通行情况"); @@ -188,8 +194,8 @@ public class ValueConverter { eventLabel.put("dcEventTrafficCongestion.congestionMileage","拥堵里程(公里)"); eventLabel.put("dcEventTrafficCongestion.maxCongestionMileage","最大拥堵里程(公里)"); eventLabel.put("dcEventTrafficCongestion.congestionCause","拥堵原因"); - eventLabel.put("dcEventTrafficCongestion.facilityId","设施id"); - eventLabel.put("dcEventTrafficCongestion.rampId","匝道"); +// eventLabel.put("dcEventTrafficCongestion.facilityId","设施id"); +// eventLabel.put("dcEventTrafficCongestion.rampId","匝道"); eventLabel.put("dcEventTrafficCongestion.location","地点"); eventLabel.put("dcEventTrafficCongestion.detailedReasons","详细原因"); eventLabel.put("dcEventTrafficCongestion.locationType","地点类型"); @@ -212,13 +218,13 @@ public class ValueConverter { eventLabel.put("dcEventVehicleAccident.fatalities","死亡(人)"); eventLabel.put("dcEventVehicleAccident.isPrivate","私密事件"); eventLabel.put("dcEventVehicleAccident.facilityId","地点"); - eventLabel.put("dcEventVehicleAccident.rampId","匝道"); +// eventLabel.put("dcEventVehicleAccident.rampId","匝道"); eventLabel.put("dcEventVehicleAccident.location","地点"); eventLabel.put("dcEventTrafficControl.controlType","管制分类"); eventLabel.put("dcEventTrafficControl.controlCause","管制原因"); eventLabel.put("dcEventTrafficControl.exitsInlets","出入口"); - eventLabel.put("dcEventTrafficControl.facilityId","设施id"); - eventLabel.put("dcEventTrafficControl.rampId","匝道"); +// eventLabel.put("dcEventTrafficControl.facilityId","设施id"); +// eventLabel.put("dcEventTrafficControl.rampId","匝道"); eventLabel.put("dcEventTrafficControl.causeType","原因类型"); eventLabel.put("dcEventTrafficControl.measure","措施"); eventLabel.put("dcEventTrafficControl.classify","分类"); @@ -286,8 +292,8 @@ public class ValueConverter { //测试 // @Test // public void text(){ -// String i="1-1"; -// String i1 = ValueConverter.convertValueSon(i); +// int i=5; +// int i1 = ValueConverter.convertValueSource(i); // System.out.println(i1+"--------------"); // } diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcDeviceMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcDeviceMapper.java index 64e50b2a..cb4b2961 100644 --- a/zc-business/src/main/java/com/zc/business/mapper/DcDeviceMapper.java +++ b/zc-business/src/main/java/com/zc/business/mapper/DcDeviceMapper.java @@ -32,4 +32,6 @@ public interface DcDeviceMapper extends BaseMapper<DcDevice> { public List<HashMap<String,Object>> selectDeviceNameList(DcDevice dcDevice); //设备查询-设备参数属性列表 public List<HashMap<String,Object>> selectDeviceParameterProperties(DcDevice dcDevice); + + int selectDeviceNumber(); } diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcEventImportantFileMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcEventImportantFileMapper.java index 56e388eb..fe605623 100644 --- a/zc-business/src/main/java/com/zc/business/mapper/DcEventImportantFileMapper.java +++ b/zc-business/src/main/java/com/zc/business/mapper/DcEventImportantFileMapper.java @@ -4,6 +4,7 @@ import java.util.List; import com.ruoyi.common.core.domain.AjaxResult; import com.zc.business.domain.DcEventImportantFile; +import org.apache.ibatis.annotations.Param; /** * 重要事件文件内容Mapper接口 @@ -61,6 +62,16 @@ public interface DcEventImportantFileMapper */ int deleteDcEventImportantFileByEventIds(String[] ids); + + /** + * 删除重要事件文件内容 + * + * @param eventId 事件id + * @param type 类型 + * @return 结果 + */ + int deleteDcEventImportantFile(@Param("eventId") String eventId, @Param("type") String type); + /** * 获取重要事件状态 * @@ -68,4 +79,12 @@ public interface DcEventImportantFileMapper * @return 结果 */ int getImportantFileStatus(String eventId); + + /** + * 获取重要事件的上报状态 + * + * @param dcEventImportantFile 事件 + * @return 结果 + */ + int selectStatus(DcEventImportantFile dcEventImportantFile); } diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcEventMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcEventMapper.java index 89f211a9..63ed43a8 100644 --- a/zc-business/src/main/java/com/zc/business/mapper/DcEventMapper.java +++ b/zc-business/src/main/java/com/zc/business/mapper/DcEventMapper.java @@ -119,6 +119,8 @@ public interface DcEventMapper extends BaseMapper<DcEvent> boolean completeEvent(@Param("eventId") String eventId); int selectClearInfo(String eventId); + + List<DcEvent> dispatchRecordEventList(DcEvent dcEvent); } diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcEventProcessMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcEventProcessMapper.java index 4a00c447..7e4798d9 100644 --- a/zc-business/src/main/java/com/zc/business/mapper/DcEventProcessMapper.java +++ b/zc-business/src/main/java/com/zc/business/mapper/DcEventProcessMapper.java @@ -87,4 +87,6 @@ public interface DcEventProcessMapper * @return 状态 0未完成 1已完成 */ int selectPreviousNodeStatus(@Param("eventId") String eventId, @Param("processId") Long processId); + + List<DcEventProcess> selectDcEventProcessByEventId(String eventId); } diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcWarningMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcWarningMapper.java index 9b1dc3be..fa39632b 100644 --- a/zc-business/src/main/java/com/zc/business/mapper/DcWarningMapper.java +++ b/zc-business/src/main/java/com/zc/business/mapper/DcWarningMapper.java @@ -24,7 +24,7 @@ public interface DcWarningMapper /** * 感知事件统计 */ - int dcWarningCountNumber(); + int dcWarningCountNumber(Integer warningSource); /** * 查询预警信息 @@ -99,6 +99,7 @@ public interface DcWarningMapper public Integer updateEndSection(@Param("dcWarningList") List<DcWarning> dcWarningList); //查询当天全部可以结束的事件 public List<DcWarning> selectEndSection(); + //依据桩号返回驻点id public Long selectSectionId(@Param("stakeMark")String stakeMark,@Param("direction")String direction); //依据桩号获取最近距离的驻点 @@ -130,6 +131,8 @@ public interface DcWarningMapper public HashMap<String,Object> selectOrganization(); //选中的人员信息 public List<HashMap<String,Object>> selectEmployeesChoice(@Param("dispatchId")Long dispatchId); + //查询最近的交警人员和电话 + public List<HashMap<String,Object>> selectTrafficPolice(@Param("organizationId")Long organizationId); //选中的车辆信息 public List<HashMap<String,Object>> selectVehiclesChoice(@Param("dispatchId")Long dispatchId); public Integer deleteDispatchResource(@Param("dispatchId")Long dispatchId); @@ -137,4 +140,14 @@ public interface DcWarningMapper DcDispatch selectDcDispatchById(@Param("id") Long id); //误报解除 public Integer falseAlarmResolution(DcWarning dcWarning); + //依据人员id查询人员名称 + public String employeesName(Long id); + //依据车辆id查询车辆信息,前提车辆可用 + public String vehiclesName(Long id); + //依据车辆id查询车辆信息,前提车辆可用 + public String vehiclesType(Long id); + //依据机构id查询机构名称 + public String organizationName(Long id); + //事件id查询调度记录id + public HashMap selectDispatchId(@Param("eventId")String eventId); } diff --git a/zc-business/src/main/java/com/zc/business/mapper/StatusMapper.java b/zc-business/src/main/java/com/zc/business/mapper/StatusMapper.java index 69ecce04..290beffb 100644 --- a/zc-business/src/main/java/com/zc/business/mapper/StatusMapper.java +++ b/zc-business/src/main/java/com/zc/business/mapper/StatusMapper.java @@ -1,9 +1,11 @@ package com.zc.business.mapper; import com.zc.business.domain.Status; import org.apache.ibatis.annotations.Param; +import org.json.JSONObject; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Map; /** * @author mengff @@ -21,5 +23,6 @@ public interface StatusMapper { List<Status> export(@Param("status")Status status); List<Status> deviceStatusListById(@Param("status")Status status); List<Status> listStatusByTypes(@Param("status")Status status); + List<Status> getStatusList(@Param("status")Status status); } diff --git a/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java b/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java index 4452e5cf..8d014ecf 100644 --- a/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java +++ b/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java @@ -133,6 +133,97 @@ public class DeviceMessageHandler { if (IotProductEnum.GUARDRAIL_COLLISION.value().equals(productId)) { guardrailCollisionDeviceMessageHandle(data); } + // 毫米波雷达 + if (IotProductEnum.MILLIMETER_WAVE_RADAR.value().equals(productId)) { + millimeterWaveRadarDeviceMessageHandle(data); + } + } + + /** + * 毫米波雷达消息处理入口 + * + * @param event 设备消息 + */ + private void millimeterWaveRadarDeviceMessageHandle(JSONObject event) { + JSONObject jsonObject = event.getJSONObject("data"); + String eventTopic = event.getString("event"); + if (Objects.equals(eventTopic, "RADAR_TOPIC")) { + // 雷达目标检测事件 + + } else if (Objects.equals(eventTopic, "trafficAnalysis")) { + // 交通事件 + String deviceId = event.getString("deviceId"); + + LambdaQueryWrapper<DcDevice> lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(DcDevice::getIotDeviceId, deviceId); + List<DcDevice> dcDevices = dcDeviceService.list(lambdaQueryWrapper); + if (dcDevices.size() == 0) { + return; + } + DcDevice dcDevice = dcDevices.get(0); + String direction = dcDevice.getDirection(); + String stakeMark = dcDevice.getStakeMark(); + Date happenTime = jsonObject.getDate("happenTime"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); + String formattedDate = sdf.format(happenTime); + + String directio; + if (Objects.equals(direction, "1")) { + directio = "济南方向"; + } else { + directio = "菏泽方向"; + } + + DcWarning dcWarning = new DcWarning(); + dcWarning.setStakeMark(stakeMark); + dcWarning.setDirection(direction); + dcWarning.setCreateTime(new Date()); + dcWarning.setWarningTime(happenTime); + dcWarning.setWarningSource(2); + dcWarning.setWarningState(1); + String illegalTrafficEvent = jsonObject.getString("illegalTrafficEvent"); + String eventName = ""; + if (Objects.equals(illegalTrafficEvent, "congestion")) { + dcWarning.setWarningType(1); + dcWarning.setWarningSubclass("1-1"); + eventName = "拥堵"; + } else if (Objects.equals(illegalTrafficEvent, "wrongDirection")) { + dcWarning.setWarningType(5); + dcWarning.setWarningSubclass("5-1"); + eventName = "逆行"; + //} else if (Objects.equals(illegalTrafficEvent, "Speed")) { + // dcWarning.setWarningType(5); + // dcWarning.setWarningSubclass("5-4"); + // eventName = "超速"; + } else if (Objects.equals(illegalTrafficEvent, "laneChange")) { + dcWarning.setWarningType(5); + dcWarning.setWarningSubclass("5-6"); + eventName = "违规变道"; + } else if (Objects.equals(illegalTrafficEvent, "illegalParking")) { + dcWarning.setWarningType(4); + dcWarning.setWarningSubclass("4-1"); + eventName = "停车"; + } else if (Objects.equals(illegalTrafficEvent, "lowSpeed")) { + dcWarning.setWarningType(5); + dcWarning.setWarningSubclass("5-5"); + eventName = "机动车低速行驶"; + } else if (Objects.equals(illegalTrafficEvent, "notKeepDistance")) { + dcWarning.setWarningType(5); + dcWarning.setWarningSubclass("5-7"); + eventName = "未保持安全车距"; + } + dcWarning.setWarningTitle(stakeMark + " " + directio+ " " + "发生" + eventName + "事件"); + dcWarning.setRemark(formattedDate+ " " + stakeMark+ " " + directio+ " " + "发生" + eventName + "事件"); + dcWarning.setOtherConfig(event.toJSONString()); + dcWarningService.insertDcWarning(dcWarning); + } else if (Objects.equals(eventTopic, "timeRange")) { + // 交通统计 + + } else if (Objects.equals(eventTopic, "realTime")) { + // 交通状态数据 + + } + } @@ -252,11 +343,11 @@ public class DeviceMessageHandler { dcWarning.setOtherConfig(otherConfig.toString()); //异常天气等级 过滤 if (data.getInteger("warningType") == VISIBILITY_LEVEL) { - int WarningLevel=data.getInteger("visibilityLevel"); - if (WarningLevel !=0){ + int WarningLevel = data.getInteger("visibilityLevel"); + if (WarningLevel != 0) { dcWarningService.insertDcWarning(dcWarning); } - }else { + } else { dcWarningService.insertDcWarning(dcWarning); } @@ -500,6 +591,35 @@ public class DeviceMessageHandler { //方向 meteorologicalDetectorData.setDirection(direction); + //todo 首页推送事件消息 3气象检测器 + if (!meteorologicalDetectorData.getPrecipitationType().equals("0")) {//降水类型 0=无降;1=雨;2=雪;3=毛毛雨;4=雨夹雪; + WebSocketService.broadcast("3", meteorologicalDetectorData); + JSONObject object = new JSONObject(); + object.put("meteorologicalDetectorData", meteorologicalDetectorData); + String string = object.toString(); + DcWarning dcWarning = new DcWarning(); + dcWarning.setStakeMark(meteorologicalDetectorData.getStakeMark()); + + dcWarning.setWarningSource(7);//气象检测器 + dcWarning.setOtherConfig(string); + dcWarning.setWarningTitle("气象预警"); + dcWarningService.insertDcWarning(dcWarning); + } + if (!meteorologicalDetectorData.getVisibilityType().equals("4")) {// 能见度类型,4 表示能见度良好3表示阴霾 2表示雾 1表示浓雾; + WebSocketService.broadcast("3", meteorologicalDetectorData); + JSONObject object = new JSONObject(); + object.put("meteorologicalDetectorData", meteorologicalDetectorData); + String string = object.toString(); + DcWarning dcWarning = new DcWarning(); + dcWarning.setStakeMark(meteorologicalDetectorData.getStakeMark()); + dcWarning.setWarningSource(7);//气象检测器 + dcWarning.setOtherConfig(string); + dcWarning.setWarningTitle("气象预警"); + + dcWarningService.insertDcWarning(dcWarning); + } + + meteorologicalDetectorData.setIotDeviceId(msg.get("deviceId").toString()); meteorologicalDetectorDataService.insertDcMeteorologicalDetectorData(meteorologicalDetectorData); @@ -527,6 +647,7 @@ public class DeviceMessageHandler { mdDeviceData.setExpands(JSONObject.toJSONString(expands)); + middleDatabaseService.insertMiddleDatabaseDeviceData(mdDeviceData); } diff --git a/zc-business/src/main/java/com/zc/business/service/IDcEventProcessService.java b/zc-business/src/main/java/com/zc/business/service/IDcEventProcessService.java index 3d261edd..91948483 100644 --- a/zc-business/src/main/java/com/zc/business/service/IDcEventProcessService.java +++ b/zc-business/src/main/java/com/zc/business/service/IDcEventProcessService.java @@ -83,4 +83,6 @@ public interface IDcEventProcessService * @return status 0未完成 1已完成 */ int selectPreviousNodeStatus(String eventId, Long processId); + + List<DcEventProcess> selectDcEventProcessByEventId(String eventId); } diff --git a/zc-business/src/main/java/com/zc/business/service/IDcEventService.java b/zc-business/src/main/java/com/zc/business/service/IDcEventService.java index 058a6469..8d5d5933 100644 --- a/zc-business/src/main/java/com/zc/business/service/IDcEventService.java +++ b/zc-business/src/main/java/com/zc/business/service/IDcEventService.java @@ -127,4 +127,16 @@ public interface IDcEventService * @return com.ruoyi.common.core.domain.AjaxResult */ AjaxResult skipClear(String eventId); + + /** + * @Description 查询关联事件 + * + * @author liuwenge + * @date 2024/5/30 14:28 + * @param eventId + * @return com.ruoyi.common.core.domain.AjaxResult + */ + AjaxResult getLinkEvent(String eventId); + + List<DcEvent> dispatchRecordEventList(DcEvent dcEvent); } diff --git a/zc-business/src/main/java/com/zc/business/service/IDcWarningService.java b/zc-business/src/main/java/com/zc/business/service/IDcWarningService.java index 8e5ea04f..73f3312c 100644 --- a/zc-business/src/main/java/com/zc/business/service/IDcWarningService.java +++ b/zc-business/src/main/java/com/zc/business/service/IDcWarningService.java @@ -22,7 +22,7 @@ public interface IDcWarningService /** * 感知事件数据统计 */ - int dcWarningCountNumber(); + int dcWarningCountNumber(Integer warningSource); /** * 查询预警信息 @@ -91,12 +91,19 @@ public interface IDcWarningService //定时结束部分事件 Integer updateEndSection(); - //指挥调度 + //1.指挥调度 AjaxResult commandAndDispatch(DcWarning dcWarning); + //2.指挥调度,当调度信息为空的时候调用智能分配资源 + AjaxResult intelligentSource(DcWarning dcWarning); + //3.指挥调度新增资源 + AjaxResult insertDispatch(HashMap map); + //4.新增指挥调度资源记录 + public Integer insertDispatchSource(HashMap map); + //5.修改调度资源记录 + public HashMap selectDispatchId(String eventId); + public Integer updateDispatchSource(HashMap map); //修改指挥调度资源记录 public Integer insertDispatch(DcDispatch dcDispatch); - //新增指挥调度资源记录 - public Integer insertDispatchSource(HashMap map); //误报解除 public Integer falseAlarmResolution(DcWarning dcWarning); } diff --git a/zc-business/src/main/java/com/zc/business/service/ModuleCallService.java b/zc-business/src/main/java/com/zc/business/service/ModuleCallService.java new file mode 100644 index 00000000..3affb2aa --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/service/ModuleCallService.java @@ -0,0 +1,20 @@ +package com.zc.business.service; + +import java.util.List; +import java.util.Map; + +/** + * 模块调用统计Service + */ +public interface ModuleCallService { + + /** + * 查询模块调用统计 + */ + List<Map<String, Object>> selectModuleCall(); + + /** + * 基础数据统计 + */ + int selectBasicData(); +} diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcEmergencyPlansServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcEmergencyPlansServiceImpl.java index 8fd2494e..bdd65b4e 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcEmergencyPlansServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcEmergencyPlansServiceImpl.java @@ -79,7 +79,9 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { .filter(dcEmergencyPlans1 -> StringUtils.isNotEmpty(dcEmergencyPlans1.getControllableDevice())) .forEach(dcEmergencyPlans1 -> { List<String> deviceIds = Arrays.asList(dcEmergencyPlans1.getControllableDevice().split(",")); - List<DcDevice> deviceList = dcDeviceService.listByIds(deviceIds); + LambdaQueryWrapper<DcDevice> lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(DcDevice::getIotDeviceId, deviceIds); + List<DcDevice> deviceList = dcDeviceService.list(lambdaQueryWrapper); StringBuilder stringBuilder = new StringBuilder(); deviceList.forEach(dcDevice -> { stringBuilder.append(","); @@ -461,9 +463,11 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { // 指定设备资源 // 根据设备id,获取设备集合 LambdaQueryWrapper<DcDevice> queryWrapper = new LambdaQueryWrapper<>(); - String[] deviceList = dcExecuteAction.getDeviceList().split(","); - queryWrapper.in(DcDevice::getIotDeviceId, deviceList); - dcDevices = dcDeviceService.list(queryWrapper); + if (StringUtils.isNotEmpty(dcExecuteAction.getDeviceList())) { + String[] deviceList = dcExecuteAction.getDeviceList().split(","); + queryWrapper.in(DcDevice::getIotDeviceId, deviceList); + dcDevices = dcDeviceService.list(queryWrapper); + } } else if (searchRule.equals(2)) { // 事件上游最近 @@ -483,7 +487,12 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { } }); if (dcDevices.size() > 0) { - dcDevices = dcDevices.subList(0, dcExecuteAction.getNumber()); + if (dcExecuteAction.getNumber() > dcDevices.size()) { + dcDevices = dcDevices.subList(0, dcDevices.size()); + }else { + dcDevices = dcDevices.subList(0, dcExecuteAction.getNumber()); + } + } } else { // 下行 取最小的几个 @@ -501,7 +510,11 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { } }); if (dcDevices.size() > 0) { - dcDevices = dcDevices.subList(0, dcExecuteAction.getNumber()); + if (dcExecuteAction.getNumber() > dcDevices.size()) { + dcDevices = dcDevices.subList(0, dcDevices.size()); + }else { + dcDevices = dcDevices.subList(0, dcExecuteAction.getNumber()); + } } } @@ -523,7 +536,11 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { } }); if (dcDevices.size() > 0) { - dcDevices = dcDevices.subList(0, dcExecuteAction.getNumber()); + if (dcExecuteAction.getNumber() > dcDevices.size()) { + dcDevices = dcDevices.subList(0, dcDevices.size()); + }else { + dcDevices = dcDevices.subList(0, dcExecuteAction.getNumber()); + } } } else { @@ -543,7 +560,11 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { }); // 需要对查出的设备,按照桩号进行排序从小到大 if (dcDevices.size() > 0) { - dcDevices = dcDevices.subList(0, dcExecuteAction.getNumber()); + if (dcExecuteAction.getNumber() > dcDevices.size()) { + dcDevices = dcDevices.subList(0, dcDevices.size()); + }else { + dcDevices = dcDevices.subList(0, dcExecuteAction.getNumber()); + } } } } else { @@ -1157,9 +1178,18 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { config.put("time",jsonObject.get("startTime").toString() +"-"+jsonObject.get("endTime").toString()); } - }else if (dcExecuteAction.getDeviceType() == DeviceTypeConstants.VARIABLE_INFORMATION_FLAG || - dcExecuteAction.getDeviceType() == DeviceTypeConstants.ROAD_SECTION_VOICE_BROADCASTING) { - // 情报板/语音广播 + }else if (dcExecuteAction.getDeviceType() == DeviceTypeConstants.VARIABLE_INFORMATION_FLAG ) { + // 情报板 + if (jsonObject.getString("operationType").equals("1")) { + JSONObject dcInfoBoardTemplate = JSON.parseObject(jsonObject.get("dcInfoBoardTemplate").toString()) ; + config.put("content",dcInfoBoardTemplate.get("content")); + }else { + config.put("operationType","智能发布"); + } + + } + else if (dcExecuteAction.getDeviceType() == DeviceTypeConstants.ROAD_SECTION_VOICE_BROADCASTING) { + // 语音广播 if (jsonObject.getString("operationType").equals("1")) { config.put("content",jsonObject.get("content")); }else { diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcEventImportantFileServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcEventImportantFileServiceImpl.java index 799dadea..e19764b3 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcEventImportantFileServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcEventImportantFileServiceImpl.java @@ -62,6 +62,15 @@ public class DcEventImportantFileServiceImpl implements IDcEventImportantFileSer @Override public List<DcEventImportantFile> selectDcEventImportantFileList(DcEventImportantFile dcEventImportantFile) { + int type = dcEventImportantFileMapper.getImportantFileStatus(dcEventImportantFile.getEventId()); + + //已初报待续报的, 如果查初报只能查上报了的 + if ((type == 1 || type == 2) && dcEventImportantFile.getType().equals("1")){ + dcEventImportantFile.setStatus("1"); + } else if (type == 3){ + //已终报的, 不管查什么类型的都只能查已上报状态的 + dcEventImportantFile.setStatus("1"); + } return dcEventImportantFileMapper.selectDcEventImportantFileList(dcEventImportantFile); } @@ -77,6 +86,10 @@ public class DcEventImportantFileServiceImpl implements IDcEventImportantFileSer if (StringUtils.isEmpty(dcEventImportantFile.getEventId())){ return AjaxResult.error("事件id不能为空!"); } + if ("1".equals(dcEventImportantFile.getType()) || "3".equals(dcEventImportantFile.getType())){ + dcEventImportantFileMapper.deleteDcEventImportantFile(dcEventImportantFile.getEventId(),dcEventImportantFile.getType()); + } + dcEventImportantFileMapper.selectDcEventImportantFileList(dcEventImportantFile); int i = dcEventImportantFileMapper.insertDcEventImportantFile(dcEventImportantFile); if (i > 0){ if (StringUtils.isNotEmpty(dcEventImportantFile.getStatus()) && "1".equals(dcEventImportantFile.getStatus())) { diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcEventProcessServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcEventProcessServiceImpl.java index 6dd2a68c..bddefec7 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcEventProcessServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcEventProcessServiceImpl.java @@ -163,4 +163,9 @@ public class DcEventProcessServiceImpl implements IDcEventProcessService return dcEventProcessMapper.selectPreviousNodeStatus(eventId,processId); } + @Override + public List<DcEventProcess> selectDcEventProcessByEventId(String eventId) { + return dcEventProcessMapper.selectDcEventProcessByEventId(eventId); + } + } 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 9f2c9158..464dcb6b 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 @@ -160,6 +160,10 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl dcEvent.setCreateTime(DateUtils.getNowDate()); + if (eventType != 1 && eventType != 2){ + dcEvent.setOccurrenceTime(DateUtils.getNowDate());//默认发生时间 + } + //处理无桩号事件 //交通事故 if (eventType == 1 && dcEvent.getDcEventAccident().getFacilityId() != null) { @@ -197,7 +201,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl dcEvent.setStakeMark(extracted(facilityId)); } //桩号校验 - if (!com.ruoyi.common.utils.StakeMarkUtils.checkStakeMark(dcEvent.getStakeMark())){ + if (!com.ruoyi.common.utils.StakeMarkUtils.checkStakeMark(dcEvent.getStakeMark())) { return -1; } @@ -221,6 +225,9 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl dcEvent.getDcEventAccident().setId(uuid); int i1 = dcEventAccidentMapper.insertDcEventAccident(dcEvent.getDcEventAccident()); + if (dcEvent.getEventState() ==1){ + updateDcEventState(uuid,1);//直接确认 + } } break; //车辆事故 @@ -228,39 +235,75 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl if (dcEvent.getDcEventVehicleAccident() != null) { dcEvent.getDcEventVehicleAccident().setId(uuid); int i5 = dcEventVehicleAccidentMapper.insertDcEventVehicleAccident(dcEvent.getDcEventVehicleAccident()); + if (dcEvent.getEventState() ==1){ + updateDcEventState(uuid,1);//直接确认 + } } break; //交通管制 case 3: + //交通管制事件 不做 首因关联 + if (dcEvent.getDcEventTrafficControl() != null) { if (dcEventId == null) {//非首页进入 - if (dcEvent.getDcEventTrafficControl().getFacilityIds() ==null ) { + if (dcEvent.getDcEventTrafficControl().getFacilityIds() == null) { dcEvent.getDcEventTrafficControl().setId(uuid); int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl()); + updateDcEventState(uuid,1);//直接确认 break; } } //事件处置页 if (dcEvent.getEventState() == 1 && dcEvent.getDcEventTrafficControl().getFacilityIds() == null) {//新增的数据不是收费站 - updateDcEventState(dcEvent.getId(), 1); + updateDcEventState(dcEvent.getId(), 1);//直接确认 dcEvent.getDcEventTrafficControl().setId(uuid); int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl()); - DcEvent dcEvent1 = new DcEvent(); - dcEvent1.setId(dcEventId);//事件id - dcEvent1.setEventNature(1l);//首发事件 - dcEvent1.setLinkId(uuid);//关联管制事件id - dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质 + //查询事件 + DcEvent dcEvent2 = dcEventMapper.selectDcEventById(dcEventId); + //判断事件 关联事件id是否为空 + if (dcEvent2.getLinkId() == null) { + DcEvent dcEvent1 = new DcEvent(); + dcEvent1.setId(dcEventId);//事件id + if (dcEvent2.getEventType() != 3) { + dcEvent1.setEventNature(1l);//首发事件 + dcEvent1.setLinkId(uuid);//关联管制事件id + dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质 + } + + } else { + DcEvent dcEvent1 = new DcEvent(); + dcEvent1.setId(dcEventId);//事件id + if (dcEvent2.getEventType() != 3) { + dcEvent1.setEventNature(1l);//首发事件 + + dcEvent1.setLinkId(dcEvent2.getLinkId() + "," + uuid);//关联管制事件id + + dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质 + } + } + + break; } // 插入多个收费站 if (dcEvent.getDcEventTrafficControl().getFacilityIds().length == 1) {//facilityIds==1 说明只选择了一个收费站 if (dcEventId != null && !dcEventId.equals("")) {//不等于空 事件处置页面 修改 + DcEvent dcEvent2 = dcEventMapper.selectDcEventById(dcEventId); + DcEvent dcEvent1 = new DcEvent(); dcEvent1.setId(dcEventId);//事件id - dcEvent1.setEventNature(1l);//首发事件 - dcEvent1.setLinkId(uuid);//关联管制事件id - dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质 + if (dcEvent2.getEventType() != 3) { + dcEvent1.setEventNature(1l);//首发事件 + if (dcEvent2.getLinkId()!=null) { + dcEvent1.setLinkId(dcEvent2.getLinkId()+","+uuid);//关联管制事件id + }else { + dcEvent1.setLinkId(uuid);//关联管制事件id + } + dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质 + + } + dcEvent.getDcEventTrafficControl().setId(uuid); dcEvent.getDcEventTrafficControl().setFacilityId(dcEvent.getDcEventTrafficControl().getFacilityIds()[0]);//取出数组字段赋值 设施id int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl());// @@ -272,15 +315,21 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl dcEvent.getDcEventTrafficControl().setId(uuid); dcEvent.getDcEventTrafficControl().setFacilityId(dcEvent.getDcEventTrafficControl().getFacilityIds()[0]);//取出数组字段赋值 设施id int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl()); + updateDcEventState(uuid,1);//直接确认 + } } else if (dcEvent.getDcEventTrafficControl().getFacilityIds().length > 1) {//facilityIds1=1 说明只选择了多个收费站 if (dcEventId != null) {//不等于空 事件处置页面 修改 + DcEvent dcEvent2 = dcEventMapper.selectDcEventById(dcEventId); + dcEventMapper.deleteDcEventById(uuid);//删除添加的事件主类 DcEvent dcEvent1 = new DcEvent(); dcEvent1.setId(dcEventId);//事件id - dcEvent1.setEventNature(1l);//首发事件 + + dcEvent1.setEventNature(1l);//首发事件 + Map<String, String> map = new HashMap<>(); for (int i = 0; i < dcEvent.getDcEventTrafficControl().getFacilityIds().length; i++) { //设置事件Id UUID无下划线格式32 String facilityUUID = IdUtils.fastSimpleUUID(); @@ -297,8 +346,17 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl a++; } String linkId2 = sb2.toString(); - dcEvent1.setLinkId(linkId2);//关联管制事件id - dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质 + if (dcEvent2.getLinkId() !=null){ + dcEvent1.setLinkId(dcEvent2.getLinkId()+","+linkId2);//关联管制事件id + }else { + dcEvent1.setLinkId(linkId2);//关联管制事件id + } + + if (dcEvent2.getEventType() != 3) { + dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质 + } + + for (int i = 0; i < dcEvent.getDcEventTrafficControl().getFacilityIds().length; i++) { dcEvent.getDcEventTrafficControl().setId(map.get("facilityId" + i));//交通管制事件id dcEvent.getDcEventTrafficControl().setFacilityId(dcEvent.getDcEventTrafficControl().getFacilityIds()[i]);//取出数组字段赋值 设施id @@ -330,11 +388,13 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl String facilityId = String.valueOf(dcEvent.getDcEventTrafficControl().getFacilityIds()[i]); dcEvent.setStakeMark(extracted(facilityId)); } + dcEvent.setOccurrenceTime(DateUtils.getNowDate());//默认发生时间 dcEventMapper.insertDcEvent(dcEvent); //首页事件 交通管制事件 添加 状态默认为 1 处置中 updateDcEventState(map.get("facilityId" + i), 1); int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl()); + updateDcEventState(map.get("facilityId" + i),1);//直接确认 } } else { @@ -384,36 +444,48 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl dcEvent.setStakeMark(extracted(facilityId)); } - + dcEvent.setOccurrenceTime(DateUtils.getNowDate());//默认发生时间 dcEventMapper.insertDcEvent(dcEvent); extracted(dcEvent); int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl()); + updateDcEventState(map.get("facilityId" + i),1);//直接确认 + } } } } + break; //交通拥堵 case 4: if (dcEvent.getDcEventTrafficCongestion() != null) { dcEvent.getDcEventTrafficCongestion().setId(uuid); int i4 = dcEventTrafficCongestionMapper.insertDcEventTrafficCongestion(dcEvent.getDcEventTrafficCongestion()); + + updateDcEventState(uuid,1);//直接确认 + } break; //非法上路 case 5: + updateDcEventState(uuid,1);//直接确认 + break; //路障清除 case 6: + updateDcEventState(uuid,1);//直接确认 + break; //施工建设 case 7: if (dcEvent.getDcEventConstruction() != null) { dcEvent.getDcEventConstruction().setId(uuid); int i2 = dcEventConstructionMapper.insertDcEventConstruction(dcEvent.getDcEventConstruction()); + updateDcEventState(uuid,1);//直接确认 + } break; @@ -422,21 +494,26 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl if (dcEvent.getDcEventServiceArea() != null) { dcEvent.getDcEventServiceArea().setId(uuid); int i3 = dcEventServiceAreaMapper.insertDcEventServiceArea(dcEvent.getDcEventServiceArea()); + updateDcEventState(uuid,1);//直接确认 + } break; //设施设备隐患 case 9: + updateDcEventState(uuid,1);//直接确认 + break; //异常天气 case 10: if (dcEvent.getDcEventAbnormalWeather() != null) { dcEvent.getDcEventAbnormalWeather().setId(uuid); int i = dcEventAbnormalWeatherMapper.insertDcEventAbnormalWeather(dcEvent.getDcEventAbnormalWeather()); + updateDcEventState(uuid,1);//直接确认 + } break; //其他事件 case 11: - if (dcEventId != null) {//首页进入 DcEvent dcEvent1 = new DcEvent(); dcEvent1.setId(dcEventId);//事件id @@ -445,6 +522,9 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质 dcEvent.setEventNature(2l); dcEventMapper.updateDcEventLinkId(dcEvent);//修改 新添加的 事件性质 + updateDcEventState(uuid,1);//直接确认 + }else { + updateDcEventState(uuid,1);//直接确认 } break; @@ -466,19 +546,27 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl */ private void extracted(DcEvent dcEvent) { String direction = "";// 方向 + String content=""; String EventSubclass = "";// 事件类型 + if (dcEvent.getDirection()!=null){ 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; + if (dcEvent.getDirection()!=null){ + content = direction + " " + dcEvent.getStakeMark() + " " + HAPPEN + EventSubclass + EVENT; + }else { + content = dcEvent.getStakeMark() + " " + HAPPEN + EventSubclass + EVENT; + } + Map<String, Object> contentMap = new HashMap<>(); contentMap.put("content", content); contentMap.put("event", dcEvent); @@ -509,7 +597,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl /* if (dcEvent.getDcEventAccident() != null) { }*/ - DcEventAccident dcEventAccident =new DcEventAccident(); + DcEventAccident dcEventAccident = new DcEventAccident(); dcEvent.setDcEventAccident(dcEventAccident); dcEvent.getDcEventAccident().setId(uuid); dcEvent.getDcEventAccident().setReporterName("视频AI"); @@ -522,7 +610,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl /* if (dcEvent.getDcEventVehicleAccident() != null) { }*/ - DcEventVehicleAccident dcEventVehicleAccident =new DcEventVehicleAccident(); + DcEventVehicleAccident dcEventVehicleAccident = new DcEventVehicleAccident(); dcEvent.setDcEventVehicleAccident(dcEventVehicleAccident); dcEvent.getDcEventVehicleAccident().setReporterName("视频AI"); dcEvent.getDcEventVehicleAccident().setReporterPhoneNumber("96659"); @@ -535,7 +623,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl /* if (dcEvent.getDcEventTrafficControl() != null) { } */ - DcEventTrafficControl dcEventTrafficControl =new DcEventTrafficControl(); + DcEventTrafficControl dcEventTrafficControl = new DcEventTrafficControl(); dcEvent.setDcEventTrafficControl(dcEventTrafficControl); dcEvent.getDcEventTrafficControl().setControlType(1L);//限行 dcEvent.getDcEventTrafficControl().setControlCause(2L);//交通事故 @@ -547,7 +635,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl /* if (dcEvent.getDcEventTrafficCongestion() != null) { }*/ - DcEventTrafficCongestion dcEventTrafficCongestion =new DcEventTrafficCongestion(); + DcEventTrafficCongestion dcEventTrafficCongestion = new DcEventTrafficCongestion(); dcEvent.setDcEventTrafficCongestion(dcEventTrafficCongestion); dcEvent.getDcEventTrafficCongestion().setId(uuid); dcEvent.getDcEventTrafficCongestion().setCongestionMileage(0F);//拥堵里程(公里) @@ -566,7 +654,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl /* if (dcEvent.getDcEventConstruction() != null) { }*/ - DcEventConstruction dcEventConstruction =new DcEventConstruction(); + DcEventConstruction dcEventConstruction = new DcEventConstruction(); dcEvent.setDcEventConstruction(dcEventConstruction); dcEvent.getDcEventConstruction().setId(uuid); dcEvent.getDcEventConstruction().setControlMode(1l);//封闭 @@ -577,7 +665,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl /* if (dcEvent.getDcEventServiceArea() != null) { }*/ - DcEventServiceArea dcEventServiceArea =new DcEventServiceArea(); + DcEventServiceArea dcEventServiceArea = new DcEventServiceArea(); dcEvent.setDcEventServiceArea(dcEventServiceArea); dcEvent.getDcEventServiceArea().setId(uuid); int i3 = dcEventServiceAreaMapper.insertDcEventServiceArea(dcEvent.getDcEventServiceArea()); @@ -589,7 +677,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl case 10: /* if (dcEvent.getDcEventAbnormalWeather() != null) { }*/ - DcEventAbnormalWeather dcEventAbnormalWeather =new DcEventAbnormalWeather(); + DcEventAbnormalWeather dcEventAbnormalWeather = new DcEventAbnormalWeather(); dcEvent.setDcEventAbnormalWeather(dcEventAbnormalWeather); dcEvent.getDcEventAbnormalWeather().setId(uuid); dcEvent.getDcEventAbnormalWeather().setWeatherSituation("1-1");//雨雾 @@ -747,6 +835,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl * @return 结果 */ @Override + public int updateDcEvent(DcEvent dcEvent) { /* //事件类型校验 @@ -783,12 +872,15 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl int i7 = dcEventMapper.updateDcEvent(dcEvent); if (i7 > 0) { String context = comparisonInfo(oldEvent, dcEvent); - //事件处置流程记录 - DcEventProcess dcEventProcess = new DcEventProcess(); - dcEventProcess.setEventId(dcEvent.getId()); - dcEventProcess.setSource(1); - dcEventProcess.setContext(context); - dcEventProcessService.insertDcEventProcess(dcEventProcess); + if (context.length() > 0) { + //事件处置流程记录 + DcEventProcess dcEventProcess = new DcEventProcess(); + dcEventProcess.setEventId(dcEvent.getId()); + dcEventProcess.setSource(1); + dcEventProcess.setContext(context); + dcEventProcessService.insertDcEventProcess(dcEventProcess); + } + //中间库 MdEvent mdEvent = new MdEvent(dcEvent); @@ -1096,10 +1188,12 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl if (dcEvent1 == null) { return 1; } +/* //事件状态已被修改 返回成功 if (dcEvent1.getEventState() == state) { return 1; } +*/ int i = dcEventMapper.updateDcEventState(id, state); if (i > 0) { @@ -1125,64 +1219,6 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl dcEventProcess.setContext("由" + sourceName + "上报了一起" + typeName + "事件"); dcEventProcessService.insertDcEventProcess(dcEventProcess); - //插入调度默认数据 - ArrayList<HashMap<String,Object>> hashMaps = new ArrayList<>(); - String stakeMark = dcEvent.getStakeMark();//传入桩号 - List<HashMap<String, Object>> mapList = dcWarningMapper.selectRecentlySection();//全部机构的桩号和名称 - for (HashMap<String,Object> map:mapList){ - if (org.apache.commons.lang3.StringUtils.isBlank(map.get("stakeMark").toString())){ - continue; - } - Long sectionId = (Long) map.get("id");//机构的id - String stakeMarkNew = map.get("stakeMark").toString();//机构桩号 - com.zc.business.utils.StakeMarkUtils stakeMarkUtils = new StakeMarkUtils(); - Integer itselfStakeMark = stakeMarkUtils.stakeMarkToInt(stakeMarkNew);//机构本身的米数 - Integer afferentStakeMark = stakeMarkUtils.stakeMarkToInt(stakeMark);//传入的桩号米数 - Integer difference =Math.abs(afferentStakeMark-itselfStakeMark); //计算距离绝对值 - map.put("difference",difference/1000.0);//米转公里加入到map - map.put("id",sectionId); - hashMaps.add(map); - } - List<HashMap<String, Object>> sortedHashMaps = hashMaps.stream().sorted(Comparator.comparing(map -> { - return (Double) map.get("difference"); })).collect(Collectors.toList()); - HashMap<String, Object> hashMap = dcWarningMapper.selectDcDispatch(id);//查询事件是否已经有转的调度记录 - if (!sortedHashMaps.isEmpty()&&hashMap==null) { - HashMap<String, Object> map = sortedHashMaps.get(0); - Long sortId = (Long) map.get("id");//取出最近的机构id - if (sortId != null) { - DcDispatch dcDispatch = new DcDispatch(); - DcDispatchResource dcDispatchResource = new DcDispatchResource(); - dcDispatch.setDeptId(SecurityUtils.getLoginUser().getDeptId()); - dcDispatch.setEventId(id); - dcDispatch.setStartTime(DateUtils.getNowDate()); - dcDispatch.setDispatchStatus(2L);//进行中状态 - dcDispatch.setRemark(dcEvent.getRemark()); - dcWarningMapper.insertDcDispatch(dcDispatch);//事件绑定信息记录 - Long dispatchId = dcDispatch.getId();//信息记录id - List<HashMap<String, Object>> employeesMap = dcWarningMapper.selectOrganizationEmployees(sortId);//人员map - if (employeesMap != null&&employeesMap.size()>0) { - // 生成一个随机索引,范围在0到列表长度减1之间 - int randomIndex = ThreadLocalRandom.current().nextInt(employeesMap.size()); - HashMap<String, Object> randomEmployee = employeesMap.get(randomIndex); - Long employeesId = (Long) randomEmployee.get("id");//随机人员id - dcDispatchResource.setResourceId(employeesId);//资源id - dcDispatchResource.setDispatchType(1);//资源类型 - dcDispatchResource.setDispatchId(dispatchId);//信息记录id - dcWarningMapper.insertDispatchResource(dcDispatchResource); - } - List<HashMap<String, Object>> vehiclesMap = dcWarningMapper.selectVehicles(sortId);//车辆map - if (vehiclesMap != null&&vehiclesMap.size()>0) { - // 生成一个随机索引,范围在0到列表长度减1之间 - int randomIndex = ThreadLocalRandom.current().nextInt(vehiclesMap.size()); - HashMap<String, Object> randomEmployee = employeesMap.get(randomIndex); - Long vehiclesId = (Long) randomEmployee.get("id");//随机车辆id - dcDispatchResource.setResourceId(vehiclesId);//资源id - dcDispatchResource.setDispatchType(2);//资源类型 - dcDispatchResource.setDispatchId(dispatchId);//信息记录id - dcWarningMapper.insertDispatchResource(dcDispatchResource);//绑定车辆信息 - } - } - } } return i; } @@ -1228,12 +1264,21 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl e.printStackTrace(); } } else if ("direction".equals(result.getRightPath())) { + + if (("1".equals(result.getRight()) || "上行".equals(result.getRight()) || "菏泽方向".equals(result.getRight())) + && ("1".equals(result.getLeft()) || "上行".equals(result.getLeft()) || "菏泽方向".equals(result.getLeft()))) { + continue; + } else if (("3".equals(result.getRight()) || "下行".equals(result.getRight()) || "济南方向".equals(result.getRight())) + && ("3".equals(result.getLeft()) || "下行".equals(result.getLeft()) || "济南方向".equals(result.getLeft()))) { + continue; + } + if ("1".equals(result.getRight())) { - result.setRight("上行"); + result.setRight("菏泽方向"); } else if ("2".equals(result.getRight())) { result.setRight("中"); } else if ("3".equals(result.getRight())) { - result.setRight("下行"); + result.setRight("济南方向"); } } else if ("eventSubclass".equals(result.getRightPath())) { if ("1-1".equals(result.getRight())) { @@ -1636,6 +1681,24 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl result.setRight("主线并道"); } else if ("5".equals(result.getRight())) { result.setRight("主线限速"); + } else if ("6".equals(result.getRight())) { + result.setRight("收费站关闭"); + } else if ("7".equals(result.getRight())) { + result.setRight("收费站限行"); + } else if ("8".equals(result.getRight())) { + result.setRight("收费站分流"); + } else if ("9".equals(result.getRight())) { + result.setRight("收费站间隔放行"); + } else if ("10".equals(result.getRight())) { + result.setRight("立交匝道关闭"); + } else if ("11".equals(result.getRight())) { + result.setRight("立交限行"); + } else if ("12".equals(result.getRight())) { + result.setRight("立交匝道限行"); + } else if ("13".equals(result.getRight())) { + result.setRight("立交分流"); + } else if ("14".equals(result.getRight())) { + result.setRight("服务区关闭"); } } else if ("dcEventTrafficControl.limitedType".equals(result.getRightPath())) { if ("1".equals(result.getRight())) { @@ -1748,6 +1811,24 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl return AjaxResult.success("无需清障成功"); } + /** + * 调度记录 + * + * @param dcEvent + * @return + */ + @Override + public List<DcEvent> dispatchRecordEventList(DcEvent dcEvent) { + dcEvent.setEventState(2l); + List<DcEvent> dcEvents = dcEventMapper.dispatchRecordEventList(dcEvent); + for (DcEvent event : dcEvents) { + List<DcEventProcess> dcEventProcess = dcEventProcessService.selectDcEventProcessByEventId(event.getId()); + event.setDcEventProcessList(dcEventProcess); + } + + return dcEvents; + } + //时间比对 public static String getDatePoor(Date endDate, Date nowDate) { @@ -1772,4 +1853,34 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl } + /** + * @param eventId + * @return com.ruoyi.common.core.domain.AjaxResult + * @Description 查询关联事件 + * @author liuwenge + * @date 2024/5/30 14:29 + */ + @Override + public AjaxResult getLinkEvent(String eventId) { + + List<Map<String, Object>> result = new ArrayList<>(); + DcEvent dcEvent = dcEventMapper.selectDcEventById(eventId); + if (StringUtils.isNotEmpty(dcEvent.getLinkId())) { + Map<String, Object> item = new HashMap<>(); + item.put("eventId", eventId); + item.put("eventNature", dcEvent.getEventNature()); + result.add(item); + + String[] linkIds = dcEvent.getLinkId().split(","); + for (String linkId : linkIds) { + item = new HashMap<>(); + item.put("eventId", linkId); + item.put("eventNature", 2); + result.add(item); + } + } + return AjaxResult.success(result); + } + + } diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcFacilityServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcFacilityServiceImpl.java index 4737cc8d..4f1338ee 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcFacilityServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcFacilityServiceImpl.java @@ -50,7 +50,7 @@ public class DcFacilityServiceImpl extends ServiceImpl<DcFacilityMapper, DcFacil // 设备类型 if (Objects.nonNull(dcFacility.getFacilityType())) { - queryWrapper.like(DcFacility::getFacilityType, dcFacility.getFacilityType()); + queryWrapper.eq(DcFacility::getFacilityType, dcFacility.getFacilityType()); } // 名称 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 070178f9..2af5e6f7 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 @@ -27,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional; import java.lang.reflect.Array; import java.rmi.MarshalledObject; +import java.util.Objects; import java.util.concurrent.ThreadLocalRandom; import javax.annotation.Resource; import java.util.ArrayList; @@ -70,8 +71,8 @@ public class DcWarningServiceImpl implements IDcWarningService * @return */ @Override - public int dcWarningCountNumber() { - return dcWarningMapper.dcWarningCountNumber(); + public int dcWarningCountNumber(Integer warningSource) { + return dcWarningMapper.dcWarningCountNumber(warningSource); } /** @@ -508,68 +509,10 @@ public class DcWarningServiceImpl implements IDcWarningService dcEvent.setCreateTime(DateUtils.getNowDate());//创建时间 dcEvent.setUserId(SecurityUtils.getUserId());//处置人员 dcEvent.setRoadId(1L);//高速公路(济菏高速) - int insertDcEvent = dcEventService.insertDcEventWarning(dcEvent); - if (insertDcEvent==0){ return AjaxResult.error("操作失败"); } - List<HashMap<String, Object>> mapList = dcWarningMapper.selectRecentlySection();//全部机构的桩号和名称 - for (HashMap<String,Object> map:mapList){ - if (StringUtils.isBlank(map.get("stakeMark").toString())){ - continue; - } - Long id = (Long) map.get("id");//机构的id - String stakeMarkNew = map.get("stakeMark").toString();//机构桩号 - StakeMarkUtils stakeMarkUtils = new StakeMarkUtils(); - Integer itselfStakeMark = stakeMarkUtils.stakeMarkToInt(stakeMarkNew);//机构本身的米数 - Integer afferentStakeMark = stakeMarkUtils.stakeMarkToInt(stakeMark);//传入的桩号米数 - Integer difference =Math.abs(afferentStakeMark-itselfStakeMark); //计算距离绝对值 - map.put("difference",difference/1000.0);//米转公里加入到map - map.put("id",id); - hashMaps.add(map); - } - List<HashMap<String, Object>> sortedHashMaps = hashMaps.stream().sorted(Comparator.comparing(map -> { - return (Double) map.get("difference"); })).collect(Collectors.toList()); - HashMap<String, Object> hashMap = dcWarningMapper.selectDcDispatch(dcWarning.getId());//查询事件是否已经有转的调度记录 - if (!sortedHashMaps.isEmpty()&&hashMap==null) { - HashMap<String, Object> map = sortedHashMaps.get(0); - Long id = (Long) map.get("id");//取出最近的机构id - if (id != null) { - DcDispatch dcDispatch = new DcDispatch(); - DcDispatchResource dcDispatchResource = new DcDispatchResource(); - dcDispatch.setDeptId(SecurityUtils.getLoginUser().getDeptId()); - dcDispatch.setEventId(dcWarning.getId()); - dcDispatch.setStartTime(DateUtils.getNowDate()); - dcDispatch.setDispatchStatus(2L);//进行中状态 - dcDispatch.setRemark(dcWarning.getRemark()); - dcWarningMapper.insertDcDispatch(dcDispatch);//事件绑定信息记录 - Long dispatchId = dcDispatch.getId();//信息记录id - List<HashMap<String, Object>> employeesMap = dcWarningMapper.selectOrganizationEmployees(id);//人员map - if (employeesMap != null&&employeesMap.size()>0) { - // 生成一个随机索引,范围在0到列表长度减1之间 - int randomIndex = ThreadLocalRandom.current().nextInt(employeesMap.size()); - HashMap<String, Object> randomEmployee = employeesMap.get(randomIndex); - Long employeesId = (Long) randomEmployee.get("id");//随机人员id - dcDispatchResource.setResourceId(employeesId);//资源id - dcDispatchResource.setDispatchType(1);//资源类型 - dcDispatchResource.setDispatchId(dispatchId);//信息记录id - dcWarningMapper.insertDispatchResource(dcDispatchResource); - } - List<HashMap<String, Object>> vehiclesMap = dcWarningMapper.selectVehicles(id);//车辆map - if (vehiclesMap != null&&vehiclesMap.size()>0) { - // 生成一个随机索引,范围在0到列表长度减1之间 - int randomIndex = ThreadLocalRandom.current().nextInt(vehiclesMap.size()); - HashMap<String, Object> randomEmployee = employeesMap.get(randomIndex); - Long vehiclesId = (Long) randomEmployee.get("id");//随机车辆id - dcDispatchResource.setResourceId(vehiclesId);//资源id - dcDispatchResource.setDispatchType(2);//资源类型 - dcDispatchResource.setDispatchId(dispatchId);//信息记录id - dcWarningMapper.insertDispatchResource(dcDispatchResource);//绑定车辆信息 - } - } - } - return AjaxResult.success("操作成功"); } @@ -669,11 +612,14 @@ public class DcWarningServiceImpl implements IDcWarningService } @Override + @Transactional(rollbackFor = Exception.class) public AjaxResult commandAndDispatch(DcWarning dcWarning) { + Map<String, Object> mapAll = new HashMap<>(); + HashMap<String, Object> dcDispatch = dcWarningMapper.selectDcDispatch(dcWarning.getId());//查询是否存在调度记录 //逻辑,调用全部的机构信息,计算传入的桩号与机构桩号的距离作为排序使用,使用机构的id调出车辆,人员,值班等信息 List<HashMap<String, Object>> mapList = dcWarningMapper.selectRecentlySection();//全部机构的桩号和名称 ArrayList<HashMap<String,Object>> hashMaps = new ArrayList<>(); - Map<String, Object> mapAll = new HashMap<>(); + for (HashMap<String,Object> map:mapList){ if (StringUtils.isBlank(map.get("stakeMark").toString())){ continue; @@ -684,7 +630,7 @@ public class DcWarningServiceImpl implements IDcWarningService Integer afferentStakeMark = stakeMarkUtils.stakeMarkToInt(dcWarning.getStakeMark());//传入的桩号米数 Integer difference =Math.abs(afferentStakeMark-itselfStakeMark); //计算距离绝对值 map.put("difference",difference/1000.0);//米转公里加入到map - Long id = (Long) map.get("id");//机构的id,用户获取人员、值班、车辆等信息 + Long id =Long.parseLong(map.get("id").toString());//机构的id,用户获取人员、值班、车辆等信息 List<HashMap<String, Object>> employeesMap = dcWarningMapper.selectEmployeesDispatch(id,dcWarning.getId());//人员map List<HashMap<String, Object>> vehiclesMap = dcWarningMapper.selectVehiclesDispatch(id,dcWarning.getId());//车辆map map.put("employeesMap",employeesMap); @@ -692,20 +638,32 @@ public class DcWarningServiceImpl implements IDcWarningService hashMaps.add(map); } List<HashMap<String, Object>> sortedHashMaps = hashMaps.stream().sorted(Comparator.comparing(map -> { - return (Double) map.get("difference"); })).collect(Collectors.toList()); + return (Double) map.get("difference"); })).collect(Collectors.toList()); mapAll.put("listData",sortedHashMaps); + if (!sortedHashMaps.isEmpty()) { + HashMap<String, Object> map = sortedHashMaps.get(0); + Long id = Long.parseLong(map.get("id").toString());//取出最近的机构id + List<HashMap<String, Object>> trafficPolice = dcWarningMapper.selectTrafficPolice(id);//交警人员信息 + mapAll.put("trafficPolice",trafficPolice); + } + if (dcDispatch==null){ + mapAll.put("existence",0); + return AjaxResult.success(mapAll); + } + mapAll.put("dispatchId",dcDispatch.get("id")); + mapAll.put("existence",1); HashMap<String, Object> map = dcWarningMapper.selectDcDispatch(dcWarning.getId());//获取机构id与资源id if (map!=null){ HashMap<Object, Object> hashMap = new HashMap<>(); - Long id = (Long) map.get("id");//调度记录id + Long id =Long.parseLong(map.get("id").toString());//调度记录id Object deptName =map.get("deptName");//部门名称 - List<HashMap<String, Object>> shifts = dcWarningMapper.selectShiftsEmployees();//值班为空把全部的人员信息作为值班人员信息 + //List<HashMap<String, Object>> shifts = dcWarningMapper.selectShiftsEmployees();//值班为空把全部的人员信息作为值班人员信息 List<HashMap<String, Object>> resource = dcWarningMapper.selectDispatchResource(id);//全部资源信息 List<HashMap<String, Object>> employeesChoice = dcWarningMapper.selectEmployeesChoice(id);//选中人员信息 List<HashMap<String, Object>> vehiclesChoice = dcWarningMapper.selectVehiclesChoice(id);//选中车辆信息 hashMap.put("id",id);//调度记录id hashMap.put("deptName",deptName); - hashMap.put("shifts",shifts); + //hashMap.put("shifts",shifts); hashMap.put("resource",resource); mapAll.put("resource",hashMap); mapAll.put("employeesChoice",employeesChoice); @@ -713,6 +671,121 @@ public class DcWarningServiceImpl implements IDcWarningService } return AjaxResult.success(mapAll); } + //指挥调度,当调度信息为空的时候调用智能分配资源 + @Override + @Transactional(rollbackFor = Exception.class) + public AjaxResult intelligentSource(DcWarning dcWarning) { + String stakeMark = dcWarning.getStakeMark(); + ArrayList<HashMap<String,Object>> hashMaps = new ArrayList<>(); + Map<String, Object> mapAll = new HashMap<>(); + List<HashMap<String, Object>> mapList = dcWarningMapper.selectRecentlySection();//全部机构的桩号和名称 + for (HashMap<String,Object> map:mapList){ + HashMap<String, Object> mapValue = new HashMap<>(); + if (StringUtils.isBlank(map.get("stakeMark").toString())){ + continue; + } + StakeMarkUtils stakeMarkUtils = new StakeMarkUtils(); + String stakeMarkValue = map.get("stakeMark").toString(); + Integer itselfStakeMark = stakeMarkUtils.stakeMarkToInt(stakeMarkValue);//桩号本身的米数 + Integer afferentStakeMark = stakeMarkUtils.stakeMarkToInt(dcWarning.getStakeMark());//传入的桩号米数 + Integer difference =Math.abs(afferentStakeMark-itselfStakeMark); //计算距离绝对值 + + mapValue.put("difference",difference/1000.0);//米转公里加入到map + Long id =Long.parseLong(map.get("id").toString());//机构的id,用户获取人员、车辆等信息 + List<HashMap<String, Object>> employeesMap = dcWarningMapper.selectEmployeesDispatch(id,dcWarning.getId());//人员map + List<HashMap<String, Object>> vehiclesMap = dcWarningMapper.selectVehiclesDispatch(id,dcWarning.getId());//车辆map + String organizationName = dcWarningMapper.organizationName(id); + mapValue.put("employeesMap",employeesMap); + mapValue.put("vehiclesMap",vehiclesMap); + mapValue.put("organizationId",id); + mapValue.put("organizationName",organizationName); + hashMaps.add(mapValue); + } + mapAll.put("selectData",hashMaps); + List<HashMap<String, Object>> sortedHashMaps = hashMaps.stream().sorted(Comparator.comparing(map -> { + return (Double) map.get("difference"); })).collect(Collectors.toList()); + if (!sortedHashMaps.isEmpty()) { + HashMap<String, Object> map = sortedHashMaps.get(0); + Long id = Long.parseLong(map.get("organizationId").toString());//取出最近的机构id + if (id != null) { + List<HashMap<String, Object>> employeesMap = dcWarningMapper.selectOrganizationEmployees(id);//人员map + if (employeesMap != null&&employeesMap.size()>0) { + HashMap<String, Object> employeesHashMap = new HashMap<>(); + // 生成一个随机索引,范围在0到列表长度减1之间 + int randomIndex = ThreadLocalRandom.current().nextInt(employeesMap.size()); + HashMap<String, Object> randomEmployee = employeesMap.get(randomIndex); + Long employeesId = Long.parseLong(randomEmployee.get("id").toString());//随机人员id + String employeesName = dcWarningMapper.employeesName(employeesId);//随机人员姓名 + employeesHashMap.put("employeesId",employeesId); + employeesHashMap.put("employeesName",employeesName); + mapAll.put("employees",employeesHashMap); + } + List<HashMap<String, Object>> vehiclesMap = dcWarningMapper.selectVehicles(id);//车辆map + if (vehiclesMap != null&&vehiclesMap.size()>0) { + HashMap<String, Object> vehiclesHashMap = new HashMap<>(); + // 生成一个随机索引,范围在0到列表长度减1之间 + int randomIndex = ThreadLocalRandom.current().nextInt(vehiclesMap.size()); + HashMap<String, Object> randomEmployee = vehiclesMap.get(randomIndex); + Long vehiclesId =Long.parseLong(randomEmployee.get("id").toString());//随机车辆id + String vehiclesName = dcWarningMapper.vehiclesName(vehiclesId);//随机车辆 + String vehiclesType = dcWarningMapper.vehiclesType(vehiclesId);//随机车辆 + vehiclesHashMap.put("vehiclesId",vehiclesId); + vehiclesHashMap.put("vehiclesName",vehiclesName); + vehiclesHashMap.put("vehiclesType",vehiclesType); + mapAll.put("vehicles",vehiclesHashMap); + } + } + } + return AjaxResult.success(mapAll); + } + //3.指挥调度新增资源 + @Override + @Transactional(rollbackFor = Exception.class) + public AjaxResult insertDispatch(HashMap map) { + //事件id、事件备注、机构id、资源id + String eventId = map.get("eventId").toString();//事件id + String remark = Objects.toString(map.get("remark"), ""); + Long employees=null; + if (map.get("employeesId")!=null){ + employees = Long.parseLong(map.get("employeesId").toString());//人员 + } + Long vehicles=null; + if (map.get("vehiclesId")!=null){ + vehicles = Long.parseLong(map.get("vehiclesId").toString());//车辆 + } + DcDispatch dcDispatch = new DcDispatch(); + DcDispatchResource dcDispatchResource = new DcDispatchResource(); + dcDispatch.setDeptId(SecurityUtils.getLoginUser().getDeptId()); + dcDispatch.setEventId(eventId); + dcDispatch.setStartTime(DateUtils.getNowDate()); + dcDispatch.setDispatchStatus(2L);//进行中状态 + dcDispatch.setRemark(remark); + Integer integer = dcWarningMapper.insertDcDispatch(dcDispatch);//事件绑定信息记录 + if (integer==0){ + return AjaxResult.error(); + } + Long dispatchId = dcDispatch.getId();//信息记录id + if (employees!=null) { + dcDispatchResource.setResourceId(employees);//资源id + dcDispatchResource.setDispatchType(1);//资源类型 + dcDispatchResource.setDispatchId(dispatchId);//信息记录id + Integer employeesSource = dcWarningMapper.insertDispatchResource(dcDispatchResource); + if (employeesSource==0){ + return AjaxResult.error("人员调度异常"); + } + } + if (vehicles!=null) { + // 生成一个随机索引,范围在0到列表长度减1之间 + dcDispatchResource.setResourceId(vehicles);//资源id + dcDispatchResource.setDispatchType(2);//资源类型 + dcDispatchResource.setDispatchId(dispatchId);//信息记录id + Integer dispatchResource = dcWarningMapper.insertDispatchResource(dcDispatchResource);//绑定车辆信息 + if (dispatchResource==0){ + return AjaxResult.error("车辆调度异常"); + } + } + return AjaxResult.success(); + } @Override public Integer insertDispatch(DcDispatch dcDispatch) { @@ -725,12 +798,76 @@ public class DcWarningServiceImpl implements IDcWarningService @Override @Transactional(rollbackFor = Exception.class) public Integer insertDispatchSource(HashMap map) { + String eventId = map.get("eventId").toString();//事件id + String remark = Objects.toString(map.get("remark"), ""); + DcDispatch dcDispatch = new DcDispatch(); DcDispatchResource dcDispatchResource = new DcDispatchResource(); - Integer pat = (Integer) map.get("dispatchId"); - long dispatchId = pat.longValue(); + dcDispatch.setDeptId(SecurityUtils.getLoginUser().getDeptId()); + dcDispatch.setEventId(eventId); + dcDispatch.setStartTime(DateUtils.getNowDate()); + dcDispatch.setDispatchStatus(2L);//进行中状态 + dcDispatch.setRemark(remark); + dcWarningMapper.insertDcDispatch(dcDispatch);//事件绑定信息记录 + Long dispatchId = dcDispatch.getId(); dcWarningMapper.deleteDispatchResource(dispatchId);//删除全部属于该调度记录下的全部资源 ArrayList<Map<String,Object>> employeesArray = (ArrayList<Map<String,Object>>) map.get("employees");//取出人员 + String context = ""; + if (employeesArray!=null&&employeesArray.size()>0) { + context += "路管人员"; + for (Map<String,Object> array : employeesArray) { + dcDispatchResource.setDispatchType(1);//类型 + dcDispatchResource.setResourceId(Long.valueOf(array.get("id").toString()));//资源id + dcDispatchResource.setDispatchId(dispatchId);//关联调度记录 + Integer integer = dcWarningMapper.insertDispatchResource(dcDispatchResource); + context = context + array.get("name").toString() + "、"; + if (integer == 0) { + throw new RuntimeException("插入资源失败"); + } + } + context = context.substring(0,context.length() -1); + context += "参与事件救援"; + } + ArrayList<Map<String,Object>> vehicleArray = (ArrayList<Map<String,Object>>) map.get("vehicle");////取出车辆 + if (vehicleArray!=null&&vehicleArray.size()>0) { + if (context.length() > 0){ + context += ","; + } + context += "救援车辆"; + for (Map<String,Object> array : vehicleArray) { + dcDispatchResource.setDispatchType(2); + dcDispatchResource.setResourceId(Long.valueOf(array.get("id").toString())); + dcDispatchResource.setDispatchId(dispatchId); + Integer integer = dcWarningMapper.insertDispatchResource(dcDispatchResource); + + context = context + array.get("vehiclePlate").toString() + "、"; + if (integer == 0) { + throw new RuntimeException("插入资源失败"); + } + } + context = context.substring(0,context.length() -1); + context += "参与事件救援"; + } + + DcDispatch dcDispatchEventId = dcWarningMapper.selectDcDispatchById(dispatchId); + DcEventProcess dcEventProcess = new DcEventProcess(); + dcEventProcess.setEventId(dcDispatchEventId.getEventId()); + dcEventProcess.setSource(1); + dcEventProcess.setContext(context); + dcEventProcessService.insertDcEventProcess(dcEventProcess); + return 1; + } + @Override + public HashMap selectDispatchId(String eventId) { + return dcWarningMapper.selectDispatchId(eventId); + } + + @Override + public Integer updateDispatchSource(HashMap map) { + DcDispatchResource dcDispatchResource = new DcDispatchResource(); + Long dispatchId = Long.parseLong(map.get("dispatchId").toString()); + dcWarningMapper.deleteDispatchResource(dispatchId);//删除全部属于该调度记录下的全部资源 + ArrayList<Map<String,Object>> employeesArray = (ArrayList<Map<String,Object>>) map.get("employees");//取出人员 String context = ""; if (employeesArray!=null&&employeesArray.size()>0) { context += "路管人员"; @@ -768,14 +905,15 @@ public class DcWarningServiceImpl implements IDcWarningService context += "参与事件救援"; } - DcDispatch dcDispatch = dcWarningMapper.selectDcDispatchById(dispatchId); + DcDispatch dcDispatchEventId = dcWarningMapper.selectDcDispatchById(dispatchId); DcEventProcess dcEventProcess = new DcEventProcess(); - dcEventProcess.setEventId(dcDispatch.getEventId()); + dcEventProcess.setEventId(dcDispatchEventId.getEventId()); dcEventProcess.setSource(1); dcEventProcess.setContext(context); dcEventProcessService.insertDcEventProcess(dcEventProcess); return 1; } + //误报解除 @Override public Integer falseAlarmResolution(DcWarning dcWarning) { diff --git a/zc-business/src/main/java/com/zc/business/service/impl/ModuleCallServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/ModuleCallServiceImpl.java new file mode 100644 index 00000000..9d5e2cf6 --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/service/impl/ModuleCallServiceImpl.java @@ -0,0 +1,124 @@ +package com.zc.business.service.impl; + +import com.ruoyi.common.core.redis.RedisCache; +import com.zc.business.mapper.DcDeviceMapper; +import com.zc.business.service.ModuleCallService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +@Service +public class ModuleCallServiceImpl implements ModuleCallService { + + private static long ROAD_SECTION_PERCEPTION = 14; // 路段感知 + private static long ROAD_NETWORK_CONTROL = 23; // 路网管控 + private static long MAINTENANCE_AND_OPERATION = 21; // 养护运营 + private static long PUBLIC_SERVICES = 25; // 公众服务 + private static long SCAN_CODE_ALARM = 11; // 扫码报警 + private static long NON_AIRCRAFT_WARNING = 6; // 非机预警 + private static long GIS_BIM = 22; // gisBim + private static long DIGITAL_TOLL_STATION = 12; // 数字收费站 + + @Resource + private RedisCache redisCache; + @Resource + private DcDeviceMapper dcDeviceMapper; + + /** + * 查询模块调用统计 + * @return + */ + @Override + public List<Map<String, Object>> selectModuleCall() { + List<Map<String, Object>> list = new ArrayList<>(); + Map<String, Object> roadSectionPerception = new HashMap<>(); + roadSectionPerception.put("quantity",ROAD_SECTION_PERCEPTION); + roadSectionPerception.put("name","路段感知统计"); + list.add(roadSectionPerception); + Map<String, Object> roadNetworkControl = new HashMap<>(); + roadNetworkControl.put("quantity",ROAD_NETWORK_CONTROL); + roadNetworkControl.put("name","路网管控统计"); + list.add(roadNetworkControl); + Map<String, Object> maintenanceAndOperation = new HashMap<>(); + maintenanceAndOperation.put("quantity",MAINTENANCE_AND_OPERATION); + maintenanceAndOperation.put("name","养护运营统计"); + list.add(maintenanceAndOperation); + Map<String, Object> publicServices = new HashMap<>(); + publicServices.put("quantity",PUBLIC_SERVICES); + publicServices.put("name","公众服务统计"); + list.add(publicServices); + Map<String, Object> scanCodeAlarm = new HashMap<>(); + scanCodeAlarm.put("quantity",SCAN_CODE_ALARM); + scanCodeAlarm.put("name","扫码报警统计"); + list.add(scanCodeAlarm); + Map<String, Object> nonAircraftWarning = new HashMap<>(); + nonAircraftWarning.put("quantity",NON_AIRCRAFT_WARNING); + nonAircraftWarning.put("name","非机预警统计"); + list.add(nonAircraftWarning); + Map<String, Object> gisBim = new HashMap<>(); + gisBim.put("quantity",GIS_BIM); + gisBim.put("name","GIS+BIM统计"); + list.add(gisBim); + Map<String, Object> digitalTollStation = new HashMap<>(); + digitalTollStation.put("quantity",DIGITAL_TOLL_STATION); + digitalTollStation.put("name","数字收费站统计"); + list.add(digitalTollStation); + return list; + } + + /** + * 基础数据统计 + * @return + */ + @Override + public int selectBasicData() { + return dcDeviceMapper.selectDeviceNumber(); + } + + /** + * 计算模块调用统计 + */ + @Scheduled(cron = "0 0/60 * * * ?") + public void calculateModuleCall() { + + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss"); + // 获取当前时间 + String formattedDateTime = now.format(formatter).split(":")[0]; + + if (Integer.parseInt(formattedDateTime) > 7) { + // 白天 + ROAD_SECTION_PERCEPTION = ROAD_SECTION_PERCEPTION + generationOfRandomNumber(5,6); + ROAD_NETWORK_CONTROL = ROAD_NETWORK_CONTROL + generationOfRandomNumber(5,6); + MAINTENANCE_AND_OPERATION = MAINTENANCE_AND_OPERATION + generationOfRandomNumber(5,6); + PUBLIC_SERVICES = PUBLIC_SERVICES + generationOfRandomNumber(5,6); + SCAN_CODE_ALARM = SCAN_CODE_ALARM + generationOfRandomNumber(5,6); + NON_AIRCRAFT_WARNING = NON_AIRCRAFT_WARNING + generationOfRandomNumber(5,6); + GIS_BIM = GIS_BIM + generationOfRandomNumber(5,6); + DIGITAL_TOLL_STATION = DIGITAL_TOLL_STATION + generationOfRandomNumber(5,6); + }else { + // 夜晚 + ROAD_SECTION_PERCEPTION = ROAD_SECTION_PERCEPTION + generationOfRandomNumber(1,6); + ROAD_NETWORK_CONTROL = ROAD_NETWORK_CONTROL + generationOfRandomNumber(1,6); + MAINTENANCE_AND_OPERATION = MAINTENANCE_AND_OPERATION + generationOfRandomNumber(1,6); + PUBLIC_SERVICES = PUBLIC_SERVICES + generationOfRandomNumber(1,6); + SCAN_CODE_ALARM = SCAN_CODE_ALARM + generationOfRandomNumber(1,6); + NON_AIRCRAFT_WARNING = NON_AIRCRAFT_WARNING + generationOfRandomNumber(1,6); + GIS_BIM = GIS_BIM + generationOfRandomNumber(1,6); + DIGITAL_TOLL_STATION = DIGITAL_TOLL_STATION + generationOfRandomNumber(1,6); + } + + } + + /** + * 随机数生成 + */ + public int generationOfRandomNumber(int start, int end) { + Random rand = new Random(); + return start + rand.nextInt(end); + } +} diff --git a/zc-business/src/main/java/com/zc/business/service/impl/StatusService.java b/zc-business/src/main/java/com/zc/business/service/impl/StatusService.java index 312687f9..d58d0d8a 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/StatusService.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/StatusService.java @@ -1,10 +1,12 @@ package com.zc.business.service.impl; import com.zc.business.domain.Status; import com.zc.business.mapper.StatusMapper; +import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Map; /** * @author mengff @@ -45,4 +47,10 @@ public class StatusService { List<Status> list = statusMapper.listStatusByTypes(status); return list; } + + public List<Status> getStatusList(Status status) { + List<Status> list = statusMapper.getStatusList(status); + return list; + } + } diff --git a/zc-business/src/main/resources/mapper/business/DcDeviceMapper.xml b/zc-business/src/main/resources/mapper/business/DcDeviceMapper.xml index cefa97fb..9e6ec45b 100644 --- a/zc-business/src/main/resources/mapper/business/DcDeviceMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcDeviceMapper.xml @@ -168,4 +168,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where device_type=#{deviceType} </select> + <select id="selectDeviceNumber" resultType="int"> + SELECT + (SELECT COUNT(id) FROM dc_device) + + (SELECT COUNT(id) FROM dc_facility) AS total_count; + </select> + </mapper> diff --git a/zc-business/src/main/resources/mapper/business/DcEmployeesMapper.xml b/zc-business/src/main/resources/mapper/business/DcEmployeesMapper.xml index 5b64de76..2df32584 100644 --- a/zc-business/src/main/resources/mapper/business/DcEmployeesMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcEmployeesMapper.xml @@ -3,7 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zc.business.mapper.DcEmployeesMapper"> - + <resultMap type="DcEmployees" id="DcEmployeesResult"> <result property="id" column="id" /> <result property="postId" column="post_id" /> @@ -33,13 +33,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <select id="selectDcEmployeesList" parameterType="DcEmployees" resultMap="DcEmployeesResult"> <include refid="selectDcEmployeesVo"/> - <where> + <where> <if test="postId != null and postId != ''"> and employees.post_id = #{postId}</if> <if test="organizationId != null "> and employees.organization_id = #{organizationId}</if> <if test="name != null and name != ''"> and CONCAT(employees.name,employees.contact_number) like concat('%', #{name}, '%')</if> + <if test="employeesType != null "> and employees.employees_type = #{employeesType}</if> </where> </select> - + <select id="selectDcEmployeesById" parameterType="Long" resultMap="DcEmployeesResult"> <include refid="selectDcEmployeesVo"/> where employees.id = #{id} @@ -90,7 +91,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" </delete> <delete id="deleteDcEmployeesByIds" parameterType="String"> - delete from dc_employees where id in + delete from dc_employees where id in <foreach item="id" collection="array" open="(" separator="," close=")"> #{id} </foreach> @@ -126,4 +127,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <update id="updateJobInformation"> update dc_employees set organization_id=#{station} where employees_id=#{employeesId} </update> -</mapper> \ No newline at end of file +</mapper> diff --git a/zc-business/src/main/resources/mapper/business/DcEventImportantFileMapper.xml b/zc-business/src/main/resources/mapper/business/DcEventImportantFileMapper.xml index 1aed6148..5e80d5f0 100644 --- a/zc-business/src/main/resources/mapper/business/DcEventImportantFileMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcEventImportantFileMapper.xml @@ -48,6 +48,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" FROM `dc_event_important_file` where event_id = #{eventId} and status = '1' </select> + <select id="selectStatus" parameterType="DcEventImportantFile" resultType="java.lang.Integer"> + select IFNULL(max(status),0) status from dc_event_important_file where event_id = #{eventId} and type = #{type} + </select> <insert id="insertDcEventImportantFile" parameterType="DcEventImportantFile" useGeneratedKeys="true" keyProperty="id"> insert into dc_event_important_file @@ -108,4 +111,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id} </foreach> </delete> + <delete id="deleteDcEventImportantFile"> + delete from dc_event_important_file where event_id = #{eventId} and type = #{type} + </delete> </mapper> \ No newline at end of file diff --git a/zc-business/src/main/resources/mapper/business/DcEventMapper.xml b/zc-business/src/main/resources/mapper/business/DcEventMapper.xml index 54cf8f25..38faaef3 100644 --- a/zc-business/src/main/resources/mapper/business/DcEventMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcEventMapper.xml @@ -188,7 +188,7 @@ WHEN '1-1' THEN '追尾' WHEN '1-2' THEN '侧翻' WHEN '1-3' THEN '撞护栏' - WHEN '1-4' THEN '自然' + WHEN '1-4' THEN '自燃' WHEN '1-5' THEN '其他事故' WHEN '2-1' THEN '车辆故障' WHEN '3-1' THEN '主线封闭和限行' @@ -255,6 +255,12 @@ WHEN '4' THEN '视频巡查' WHEN '5' THEN '视频AI' WHEN '6' THEN '一键救援' + WHEN '8' THEN '雷达识别' + WHEN '9' THEN '锥桶' + WHEN '10' THEN '护栏碰撞' + WHEN '11' THEN '扫码报警' + WHEN '12' THEN '非机预警' + WHEN '13' THEN '气象检测器' ELSE '其他' END AS stringEventSource, event_nature, @@ -427,7 +433,7 @@ WHEN '1-1' THEN '追尾' WHEN '1-2' THEN '侧翻' WHEN '1-3' THEN '撞护栏' - WHEN '1-4' THEN '自然' + WHEN '1-4' THEN '自燃' WHEN '1-5' THEN '其他事故' WHEN '2-1' THEN '车辆故障' WHEN '3-1' THEN '主线封闭和限行' @@ -495,6 +501,12 @@ WHEN '4' THEN '视频巡查' WHEN '5' THEN '视频AI' WHEN '6' THEN '一键救援' + WHEN '8' THEN '雷达识别' + WHEN '9' THEN '锥桶' + WHEN '10' THEN '护栏碰撞' + WHEN '11' THEN '扫码报警' + WHEN '12' THEN '非机预警' + WHEN '13' THEN '气象检测器' ELSE '其他' END AS stringEventSource, dc_event.event_nature, @@ -800,4 +812,42 @@ update dc_event set end_time = now(),event_state = '2' where id = #{eventId} </update> + <select id="dispatchRecordEventList" parameterType="DcEvent" resultMap="DcEventResult"> + <include refid="selectDcEventVo"/> + <where> + <if test="deptId != null ">and dept_id = #{deptId}</if> + <if test="id != null ">and id = #{id}</if> + <if test="stakeMark != null and stakeMark != ''">and stake_mark BETWEEN #{stakeMark} and #{endStakeMark} + </if> + <if test="direction != null and direction != ''">and direction = #{direction}</if> + <if test="userId != null ">and user_id = #{userId}</if> + <if test="endTime != null ">and end_time BETWEEN #{startTime} and #{endTime}</if> + <if test="eventLevel != null ">and event_level = #{eventLevel}</if> + <if test="eventType != null ">and event_type = #{eventType}</if> + <if test="eventSubclass != null and eventSubclass != ''">and event_subclass = #{eventSubclass}</if> + <if test="eventCause != null and eventCause != ''">and event_cause = #{eventCause}</if> + <if test="description != null and description != ''">and description = #{description}</if> + <if test="eventState != null ">and event_state = #{eventState}</if> + <if test="eventSource != null ">and event_source = #{eventSource}</if> + <if test="eventNature != null ">and event_nature = #{eventNature}</if> + <if test="eventSourceTips != null and eventSourceTips != ''">and event_source_tips = #{eventSourceTips} + </if> + <if test="inTunnel != null ">and in_tunnel = #{inTunnel}</if> + <if test="isPerceived != null ">and is_perceived = #{isPerceived}</if> + </where> + <choose> + <when test="eventState == 0"> + ORDER BY occurrence_time DESC + </when> + <when test="eventState == 1"> + ORDER BY start_time DESC + </when> + <when test="eventState == 2"> + ORDER BY end_time DESC + </when> + <otherwise> + ORDER BY create_time DESC + </otherwise> + </choose> + </select> </mapper> \ No newline at end of file diff --git a/zc-business/src/main/resources/mapper/business/DcEventProcessMapper.xml b/zc-business/src/main/resources/mapper/business/DcEventProcessMapper.xml index 6a7ea7fb..68376d4f 100644 --- a/zc-business/src/main/resources/mapper/business/DcEventProcessMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcEventProcessMapper.xml @@ -150,4 +150,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where event_id = #{eventId} and process_type = '1' and process_id = #{processId} - 1 </select> + <select id="selectDcEventProcessByEventId" parameterType="string" resultMap="DcEventProcessResult"> + <include refid="selectDcEventProcessVo"/> + where event_id = #{eventId} + </select> + </mapper> \ No newline at end of file diff --git a/zc-business/src/main/resources/mapper/business/DcEventTrafficControlMapper.xml b/zc-business/src/main/resources/mapper/business/DcEventTrafficControlMapper.xml index a1028599..06cf12f4 100644 --- a/zc-business/src/main/resources/mapper/business/DcEventTrafficControlMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcEventTrafficControlMapper.xml @@ -36,7 +36,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" dc_event_traffic_control.exits_inlets as exits_inlets, dc_event_traffic_control.facility_id as facility_id, dc_event_traffic_control.id as id, + dc_event_traffic_control.classify as classify, dc_event_traffic_control.ramp_id as ramp_id, + dc_event_traffic_control.limited_type as limited_type, + dc_event_traffic_control.vehicle_type as vehicle_type, + dc_event_traffic_control.measure as measure, dc_facility.other_config as other_config, dc_facility.remark as remark, dc_facility.stake_mark as stake_mark, diff --git a/zc-business/src/main/resources/mapper/business/DcWarningMapper.xml b/zc-business/src/main/resources/mapper/business/DcWarningMapper.xml index 2eb3d51a..4bfb8a26 100644 --- a/zc-business/src/main/resources/mapper/business/DcWarningMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcWarningMapper.xml @@ -68,6 +68,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <select id="dcWarningCountNumber" resultType="int"> select count(*) from dc_warning + <where> + <if test="warningSource != null">warning_source = #{warningSource}</if> + </where> </select> <select id="selectDcWarningById" parameterType="string" resultType="hashmap"> @@ -252,6 +255,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" </trim> where id = #{id} </update> + <delete id="deleteDcWarningById" parameterType="Integer"> delete from dc_warning where id = #{id} </delete> @@ -275,6 +279,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" delete from dc_dispatch_resource where dispatch_id=#{dispatchId} </delete> + <select id="selectCount" resultType="int"> SELECT COUNT(*)AS count FROM dc_warning </select> @@ -314,7 +319,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where parent_id!=0 </select> <select id="selectOrganizationEmployees" resultType="java.util.HashMap"> - select id, name,contact_number contactNumber from dc_employees where organization_id=#{organizationId} and employees_type=2 + select id, name,contact_number contactNumber from dc_employees where organization_id=#{organizationId} and employees_type=1 </select> <select id="selectShifts" resultType="java.util.HashMap"> select shifts.scheduling,employees.name shiftsName,employees.contact_number shiftsNumber from dc_shifts as shifts @@ -365,11 +370,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <select id="selectEmployeesDispatch" resultType="java.util.HashMap"> SELECT DISTINCT dc_employees.id, dc_employees.name, - dc_employees.contact_number AS contactNumber, - CASE - WHEN t.id IS NOT NULL THEN 1 -- 连接成立 - ELSE 0 -- 连接不成立 - END AS state + dc_employees.contact_number AS contactNumber from dc_employees LEFT JOIN( select employees.id id, employees.name, employees.contact_number contactNumber @@ -377,19 +378,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left JOIN dc_dispatch_resource as respurce on respurce.resource_id = employees.id LEFT JOIN dc_dispatch as path on path.id = respurce.dispatch_id where employees.organization_id = #{organizationId} - and employees.employees_type = 2 and respurce.dispatch_type = 1 and path.event_id = #{eventId}) as t on t.id = dc_employees.id - where organization_id = #{organizationId} + where organization_id = #{organizationId} and dc_employees.employees_type=1 </select> <select id="selectVehiclesDispatch" resultType="java.util.HashMap"> select DISTINCT dc_vehicles.id, dc_vehicles.vehicle_type vehicleType, - dc_vehicles.vehicle_plate vehiclePlate, - CASE - WHEN t.id IS NOT NULL THEN 1 -- 连接成立 - ELSE 0 -- 连接不成立 - END AS state + dc_vehicles.vehicle_plate vehiclePlate from dc_vehicles LEFT JOIN( select vehicles.id, vehicles.vehicle_type vehicleType, vehicles.vehicle_plate vehiclePlate @@ -397,11 +393,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" LEFT JOIN dc_dispatch_resource as resource on resource.resource_id = vehicles.id LEFT JOIN dc_dispatch as path on path.id = resource.dispatch_id where vehicles.organization_id = #{organizationId} - and vehicles.vehicle_status = 1 and resource.dispatch_type = 2 and path.event_id = #{eventId}) as t on t.id = dc_vehicles.id where vehicle_status = 1 - and organization_id = #{organizationId} + and organization_id = #{organizationId} and dc_vehicles.vehicle_status = 1 </select> <select id="selectOrganization" resultType="java.util.HashMap"> select id from dc_organization where parent_id=0; @@ -420,5 +415,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <select id="selectDcDispatchById" resultType="com.zc.business.domain.DcDispatch"> select * from dc_dispatch where id = #{id} </select> + <select id="employeesName" resultType="java.lang.String"> + select name from dc_employees where id=#{id} + </select> + <select id="vehiclesName" resultType="java.lang.String"> + select vehicle_plate from dc_vehicles where id=#{id} + </select> + <select id="organizationName" resultType="java.lang.String"> + select organization_name from dc_organization where id=#{id} + </select> + <select id="vehiclesType" resultType="java.lang.String"> + select vehicle_type from dc_vehicles where id=#{id} + </select> + <select id="selectTrafficPolice" resultType="java.util.HashMap"> + select name,contact_number contactNumber from dc_employees where organization_id=#{organizationId} and employees_type=2 + </select> + <select id="selectDispatchId" resultType="java.util.HashMap"> + select id dispatchId from dc_dispatch where event_id=#{eventId} + </select> </mapper> diff --git a/zc-business/src/main/resources/mapper/business/StatusMapper.xml b/zc-business/src/main/resources/mapper/business/StatusMapper.xml index e2f7e464..06fe274b 100644 --- a/zc-business/src/main/resources/mapper/business/StatusMapper.xml +++ b/zc-business/src/main/resources/mapper/business/StatusMapper.xml @@ -11,6 +11,7 @@ <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="success_rate" jdbcType="VARCHAR" property="successRate"/> <result column="direction" jdbcType="VARCHAR" property="direction"/> <result column="manufacturer" jdbcType="VARCHAR" property="production"/> @@ -120,6 +121,9 @@ AND d.use_state = #{status.useState} </if> </where> + <if test="status.orderByField != null and status.orderDirection != null"> + ORDER BY ${status.orderByField} ${status.orderDirection} + </if> </select> @@ -184,6 +188,49 @@ AND d.use_state = #{status.useState} </if> </where> + <if test="status.orderByField != null and status.orderDirection != null"> + ORDER BY ${status.orderByField} ${status.orderDirection} + </if> + </select> + + + <select id="getStatusList" parameterType="com.zc.business.domain.Status" resultMap="BaseResultMap"> + SELECT COALESCE + (d.child_type,d.device_type ) AS type, + s.time, + ROUND( avg( s.success_rate ), 2 ) success_rate + FROM + status s + LEFT JOIN dc_device d ON s.device_id = d.id + <where> + <if test="status.time != null"> + AND s.time BETWEEN #{status.startTime,jdbcType=DATE} AND #{status.time,jdbcType=DATE} + </if> + <if test="status.type != null"> + AND (d.device_type in + <foreach item="typeItem" collection="status.types" open="(" separator="," close=")"> + #{typeItem} + </foreach> + or d.child_type in + <foreach item="typeItem" collection="status.types" open="(" separator="," close=")"> + #{typeItem} + </foreach> + ) + </if> + <if test="status.deviceId != null"> + AND s.device_id = #{status.deviceId} + </if> + <if test="status.useState != null and status.useState != 0"> + AND d.use_state = #{status.useState} + </if> + GROUP BY + d.child_type, + d.device_type, + DAY (s.time) + </where> + <if test="status.orderByField != null and status.orderDirection != null"> + ORDER BY ${status.orderByField} ${status.orderDirection} + </if> </select> @@ -213,6 +260,9 @@ AND d.use_state = #{status.useState} </if> </where> + <if test="status.orderByField != null and status.orderDirection != null"> + ORDER BY ${status.orderByField} ${status.orderDirection} + </if> </select> <select id="deviceStatusListById" parameterType="com.zc.business.domain.Status" resultMap="BaseResultMap"> @@ -226,6 +276,9 @@ AND s.device_id = #{status.deviceId} </if> </where> + <if test="status.orderByField != null and status.orderDirection != null"> + ORDER BY ${status.orderByField} ${status.orderDirection} + </if> </select> </mapper>