From ffac33b47b6f6384d1d948d62eb39a1688dc26c3 Mon Sep 17 00:00:00 2001 From: pengjie <17373303529@163.com> Date: Wed, 4 Jun 2025 16:14:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E5=BB=BA=E5=A4=A7=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BridgeErectMachineDataServiceImpl.java | 5 +- .../zhgd/xmgl/modules/car/entity/CarInfo.java | 3 + .../impl/PaveCompactionRecordServiceImpl.java | 5 +- .../service/impl/PaveRecordServiceImpl.java | 5 +- .../review/controller/IndexController.java | 281 ++++++++++++++++++ .../controller/MonitorDevController.java | 54 +++- .../modules/review/entity/MonitorDev.java | 40 ++- .../modules/review/entity/vo/AlarmInfo.java | 23 ++ .../review/entity/vo/AlarmNumStat.java | 20 ++ .../modules/review/entity/vo/TopStat.java | 23 ++ .../review/service/IMonitorDevService.java | 3 + .../service/impl/MonitorDevServiceImpl.java | 145 +++++++++ .../entity/vo/WorkerNumByRegionVo.java | 10 + .../mapper/xml/SafetyHatDataMapper.xml | 3 +- .../service/ISafetyHatDataService.java | 2 + .../impl/SafetyHatDataServiceImpl.java | 30 ++ .../VehiclePositionDataController.java | 24 +- .../VehiclePositionDevController.java | 15 +- .../entity/vo/VehicleListByRegionVo.java | 19 ++ .../mapper/VehiclePositionDataMapper.java | 10 + .../mapper/xml/VehiclePositionDataMapper.xml | 15 + .../service/IVehiclePositionDataService.java | 4 + .../impl/VehiclePositionDataServiceImpl.java | 99 +++++- 23 files changed, 799 insertions(+), 39 deletions(-) create mode 100644 src/main/java/com/zhgd/xmgl/modules/review/controller/IndexController.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/review/entity/vo/AlarmInfo.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/review/entity/vo/AlarmNumStat.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/review/entity/vo/TopStat.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/vehicleposition/entity/vo/VehicleListByRegionVo.java diff --git a/src/main/java/com/zhgd/xmgl/modules/bridgeerectmachine/service/impl/BridgeErectMachineDataServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/bridgeerectmachine/service/impl/BridgeErectMachineDataServiceImpl.java index 0b83540f2..b413c9b90 100644 --- a/src/main/java/com/zhgd/xmgl/modules/bridgeerectmachine/service/impl/BridgeErectMachineDataServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/bridgeerectmachine/service/impl/BridgeErectMachineDataServiceImpl.java @@ -29,6 +29,7 @@ import org.apache.commons.collections.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.util.*; /** @@ -177,7 +178,9 @@ public class BridgeErectMachineDataServiceImpl extends ServiceImpl getQueryWrapper(HashMap paramMap) { diff --git a/src/main/java/com/zhgd/xmgl/modules/car/entity/CarInfo.java b/src/main/java/com/zhgd/xmgl/modules/car/entity/CarInfo.java index 21f9d088b..e7485f27b 100644 --- a/src/main/java/com/zhgd/xmgl/modules/car/entity/CarInfo.java +++ b/src/main/java/com/zhgd/xmgl/modules/car/entity/CarInfo.java @@ -181,6 +181,9 @@ public class CarInfo implements Serializable { @ApiModelProperty(value = "从审批流过来") private Boolean fromFlow; + @TableField(exist = false) + @ApiModelProperty(value = "1在岗 2离岗") + private java.lang.Integer inserviceType; public String toExistString() { return "CarInfo{" + ", enterFactoryEndDate='" + enterFactoryEndDate + '\'' + diff --git a/src/main/java/com/zhgd/xmgl/modules/pave/service/impl/PaveCompactionRecordServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/pave/service/impl/PaveCompactionRecordServiceImpl.java index 6c5ae25e4..087ddf11e 100644 --- a/src/main/java/com/zhgd/xmgl/modules/pave/service/impl/PaveCompactionRecordServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/pave/service/impl/PaveCompactionRecordServiceImpl.java @@ -25,6 +25,7 @@ import com.zhgd.jeecg.common.system.query.QueryGenerator; import com.zhgd.xmgl.util.PageUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import java.math.BigDecimal; import java.util.*; import com.zhgd.xmgl.util.RefUtil; @@ -171,6 +172,8 @@ public class PaveCompactionRecordServiceImpl extends ServiceImpl topStat(@ApiIgnore @RequestBody Map paramMap) { + String projectSn = MapUtils.getString(paramMap, "projectSn"); + TopStat topStat = new TopStat(); + int workerNum = workerInfoService.count(Wrappers.lambdaQuery() + .eq(WorkerInfo::getProjectSn, projectSn) + .eq(WorkerInfo::getInserviceType, 1)); + int towerNum = towerService.count(Wrappers.lambdaQuery() + .eq(Tower::getProjectSn, projectSn)); + int bridgeDevNum = bridgeErectMachineDevService.count(Wrappers.lambdaQuery() + .eq(BridgeErectMachineDev::getProjectSn, projectSn)); + int gantryNum = gantryCraneService.count(Wrappers.lambdaQuery() + .eq(GantryCrane::getProjectSn, projectSn)); + int lifterNum = lifterService.count(Wrappers.lambdaQuery() + .eq(Lifter::getProjectSn, projectSn)); + int stationNum = monitorDevService.count(Wrappers.lambdaQuery() + .eq(MonitorDev::getProjectSn, projectSn) + .eq(MonitorDev::getCategory, 3)); + List videoGroupList = videoGroupService.list(Wrappers.lambdaQuery() + .eq(VideoGroup::getProjectSn, projectSn)); + int videoNum = 0; + if (videoGroupList.size() > 0) { + videoNum = videoItemService.count(Wrappers.lambdaQuery() + .in(VideoItem::getGroupId, videoGroupList.stream().map(v -> v.getId()).collect(Collectors.toList()))); + } + int carNum = carInfoService.count(Wrappers.lambdaQuery() + .eq(CarInfo::getProjectSn, projectSn)); + topStat.setWorkerNum(workerNum); + topStat.setMachineryDevNum(towerNum + bridgeDevNum + gantryNum + lifterNum); + topStat.setStationNum(stationNum); + topStat.setVideoNum(videoNum); + topStat.setCarNum(carNum); + return Result.success(topStat); + } + + @OperLog(operModul = "基建大屏查询", operType = "统计", operDesc = "人员管理统计") + @ApiOperation(value = " 人员管理统计", notes = "人员管理统计", httpMethod = "POST") + @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = true, dataType = "String") + @PostMapping(value = "/workerStat") + public Result workerStat(@ApiIgnore @RequestBody Map paramMap) { + String projectSn = MapUtils.getString(paramMap, "projectSn"); + int totalWorker = workerInfoService.count(Wrappers.lambdaQuery() + .eq(WorkerInfo::getProjectSn, projectSn) + .eq(WorkerInfo::getInserviceType, 1)); + Set attendSet = workerAttendanceService.list(Wrappers.lambdaQuery() + .eq(WorkerAttendance::getProjectSn, projectSn)).stream().map(w -> w.getPersonSn()).collect(Collectors.toSet()); + WorkerNumByRegionVo workerNumByRegionVo = safetyHatDataService.countWorkerNumByRegionToday(paramMap); + int workerNum = 0; + List list = workerNumByRegionVo.getList(); + for (WorkerNumAndRegionName workerNumAndRegionName : list) { + workerNum = workerNum + workerNumAndRegionName.getWorkerNum(); + } + workerNumByRegionVo.setWorkerNum(workerNum); + workerNumByRegionVo.setTotalWorker(totalWorker); + workerNumByRegionVo.setAttendWorker(attendSet.size()); + return Result.success(workerNumByRegionVo); + } + + @OperLog(operModul = "基建大屏查询", operType = "统计", operDesc = "安全问题监测项") + @ApiOperation(value = " 安全问题监测项", notes = "安全问题监测项", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "type", value = "1:全部;2:今日", paramType = "body", required = true, dataType = "Integer") + }) + @PostMapping(value = "/alarmNumStat") + public Result alarmNumStat(@ApiIgnore @RequestBody Map paramMap) { + String projectSn = MapUtils.getString(paramMap, "projectSn"); + Integer type = MapUtils.getInteger(paramMap, "type"); + DateTime beginOfDay = DateUtil.beginOfDay(new Date()); + DateTime endOfDay = DateUtil.endOfDay(new Date()); + AlarmNumStat alarmNumStat = new AlarmNumStat(); + int safeAlarm = safetyHatAlarmService.count(Wrappers.lambdaQuery() + .eq(SafetyHatAlarm::getProjectSn, projectSn) + .ge(type == 2, SafetyHatAlarm::getAlarmTime, beginOfDay) + .le(type == 2, SafetyHatAlarm::getAlarmTime, endOfDay)); + int vehicleAlarm = vehiclePositionAlarmService.count(Wrappers.lambdaQuery() + .eq(VehiclePositionAlarm::getProjectSn, projectSn) + .ge(type == 2, VehiclePositionAlarm::getCreateTime, beginOfDay) + .le(type == 2, VehiclePositionAlarm::getCreateTime, endOfDay)); + int aiAlarm = aiAnalyseHardWareAlarmRecordService.count(Wrappers.lambdaQuery() + .eq(AiAnalyseHardWareAlarmRecord::getProjectSn, projectSn) + .ne(AiAnalyseHardWareAlarmRecord::getStatus, 1) + .ge(type == 2, AiAnalyseHardWareAlarmRecord::getCreateTime, beginOfDay) + .le(type == 2, AiAnalyseHardWareAlarmRecord::getCreateTime, endOfDay)); + int towerAlarm = towerAlarmService.count(Wrappers.lambdaQuery() + .eq(TowerAlarm::getProjectSn, projectSn) + .ge(type == 2, TowerAlarm::getAddTime, beginOfDay) + .le(type == 2, TowerAlarm::getAddTime, endOfDay)); + int bridgeAlarm = bridgeErectMachineAlarmService.count(Wrappers.lambdaQuery() + .eq(BridgeErectMachineAlarm::getProjectSn, projectSn) + .ge(type == 2, BridgeErectMachineAlarm::getAddTime, beginOfDay) + .le(type == 2, BridgeErectMachineAlarm::getAddTime, endOfDay)); + int gantryAlarm = gantryCraneAlarmService.count(Wrappers.lambdaQuery() + .eq(GantryCraneAlarm::getProjectSn, projectSn) + .ge(type == 2, GantryCraneAlarm::getAddTime, beginOfDay) + .le(type == 2, GantryCraneAlarm::getAddTime, endOfDay)); + int liftAlarm = lifterAlarmService.count(Wrappers.lambdaQuery() + .eq(LifterAlarm::getProjectSn, projectSn) + .ge(type == 2, LifterAlarm::getAddTime, beginOfDay) + .le(type == 2, LifterAlarm::getAddTime, endOfDay)); + alarmNumStat.setVideoAlarmNum(aiAlarm); + alarmNumStat.setFenceAlarmNum(safeAlarm + vehicleAlarm); + alarmNumStat.setMachineryAlarmNum(towerAlarm + bridgeAlarm + gantryAlarm + liftAlarm); + alarmNumStat.setTotalNum(aiAlarm + safeAlarm + vehicleAlarm + towerAlarm + bridgeAlarm + gantryAlarm + liftAlarm); + return Result.success(alarmNumStat); + } + + @OperLog(operModul = "基建大屏查询", operType = "统计", operDesc = "现场动态") + @ApiOperation(value = " 现场动态", notes = "现场动态", httpMethod = "POST") + @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = true, dataType = "String") + @PostMapping(value = "/alarmList") + public Result> alarmList(@ApiIgnore @RequestBody Map paramMap) { + String projectSn = MapUtils.getString(paramMap, "projectSn"); + DateTime beginOfDay = DateUtil.beginOfDay(new Date()); + DateTime endOfDay = DateUtil.endOfDay(new Date()); + List resultList = new ArrayList<>(); + List list = safetyHatAlarmService.list(Wrappers.lambdaQuery() + .eq(SafetyHatAlarm::getProjectSn, projectSn) + .ge(SafetyHatAlarm::getAlarmTime, beginOfDay) + .le(SafetyHatAlarm::getAlarmTime, endOfDay)); + for (SafetyHatAlarm safetyHatAlarm : list) { + addAlarm(2, safetyHatAlarm.getAlarmInfo(), safetyHatAlarm.getWorkerInfoName(), safetyHatAlarm.getDevSn(), + DateUtil.formatDateTime(safetyHatAlarm.getAlarmTime()), resultList); + } + List list1 = vehiclePositionAlarmService.list(Wrappers.lambdaQuery() + .eq(VehiclePositionAlarm::getProjectSn, projectSn) + .ge(VehiclePositionAlarm::getCreateTime, beginOfDay) + .le(VehiclePositionAlarm::getCreateTime, endOfDay)); + for (VehiclePositionAlarm vehiclePositionAlarm : list1) { + addAlarm(3, vehiclePositionAlarm.getAlarmInformation(), vehiclePositionAlarm.getNumberPlate(), vehiclePositionAlarm.getDevSn(), + DateUtil.formatDateTime(vehiclePositionAlarm.getCreateTime()), resultList); + } + List list2 = aiAnalyseHardWareAlarmRecordService.list(Wrappers.lambdaQuery() + .eq(AiAnalyseHardWareAlarmRecord::getProjectSn, projectSn) + .ne(AiAnalyseHardWareAlarmRecord::getStatus, 1) + .ge(AiAnalyseHardWareAlarmRecord::getCreateTime, beginOfDay) + .le(AiAnalyseHardWareAlarmRecord::getCreateTime, endOfDay)); + for (AiAnalyseHardWareAlarmRecord aiAnalyseHardWareAlarmRecord : list2) { + addAlarm(1, aiAnalyseHardWareAlarmRecord.getAlarmDesc(), aiAnalyseHardWareAlarmRecord.getHardwareName(), aiAnalyseHardWareAlarmRecord.getHardwareId(), + aiAnalyseHardWareAlarmRecord.getCreateTime(), resultList); + } + return Result.success(resultList); + } + + private void addAlarm(Integer type, String alarmDesc, String alarmObj, String devCode, String alarmTime, List list) { + AlarmInfo alarmInfo = new AlarmInfo(); + alarmInfo.setType(type); + alarmInfo.setAlarmDesc(alarmDesc); + alarmInfo.setAlarmObj(alarmObj); + alarmInfo.setDevCode(devCode); + alarmInfo.setAlarmTime(alarmTime); + list.add(alarmInfo); + } +} diff --git a/src/main/java/com/zhgd/xmgl/modules/review/controller/MonitorDevController.java b/src/main/java/com/zhgd/xmgl/modules/review/controller/MonitorDevController.java index 586c86644..62d6577a7 100644 --- a/src/main/java/com/zhgd/xmgl/modules/review/controller/MonitorDevController.java +++ b/src/main/java/com/zhgd/xmgl/modules/review/controller/MonitorDevController.java @@ -1,7 +1,9 @@ package com.zhgd.xmgl.modules.review.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhgd.annotation.OperLog; import com.zhgd.jeecg.common.api.vo.Result; @@ -37,7 +39,7 @@ import java.util.Map; /** * @Title: Controller - * @Description: 视频监控信息 + * @Description: 地图设备点位信息管理 * @author: pengj * @date: 2023-11-08 * @version: V1.0 @@ -45,7 +47,7 @@ import java.util.Map; @RestController @RequestMapping("/xmgl/monitorDev") @Slf4j -@Api(tags = "视频监控信息管理") +@Api(tags = "地图设备点位信息管理") public class MonitorDevController { @Autowired private IMonitorDevService monitorDevService; @@ -57,7 +59,7 @@ public class MonitorDevController { * * @return */ - @OperLog(operModul = "视频监控信息管理", operType = "分页查询", operDesc = "分页列表查询视频监控信息信息") + @OperLog(operModul = "地图设备点位信息管理", operType = "分页查询", operDesc = "分页列表查询视频监控信息信息") @ApiOperation(value = " 分页列表查询视频监控信息信息", notes = "分页列表查询视频监控信息信息", httpMethod = "POST") @PostMapping(value = "/page") public Result> queryPageList(@ApiIgnore @RequestBody Map paramMap) { @@ -73,7 +75,7 @@ public class MonitorDevController { * @param monitorDev * @return */ - @OperLog(operModul = "视频监控信息管理", operType = "列表查询", operDesc = "列表查询视频监控信息信息") + @OperLog(operModul = "地图设备点位信息管理", operType = "列表查询", operDesc = "列表查询视频监控信息信息") @ApiOperation(value = " 列表查询视频监控信息信息", notes = "列表查询视频监控信息信息", httpMethod = "POST") @PostMapping(value = "/list") public Result> queryList(@RequestBody MonitorDev monitorDev) { @@ -89,7 +91,7 @@ public class MonitorDevController { * @param monitorDev * @return */ - @OperLog(operModul = "视频监控信息管理", operType = "新增", operDesc = "添加视频监控信息信息") + @OperLog(operModul = "地图设备点位信息管理", operType = "新增", operDesc = "添加视频监控信息信息") @ApiOperation(value = " 添加视频监控信息信息", notes = "添加视频监控信息信息", httpMethod = "POST") @PostMapping(value = "/add") public Result add(@RequestBody MonitorDev monitorDev) { @@ -103,7 +105,7 @@ public class MonitorDevController { * @param monitorDev * @return */ - @OperLog(operModul = "视频监控信息管理", operType = "修改", operDesc = "编辑视频监控信息信息") + @OperLog(operModul = "地图设备点位信息管理", operType = "修改", operDesc = "编辑视频监控信息信息") @ApiOperation(value = "编辑视频监控信息信息", notes = "编辑视频监控信息信息", httpMethod = "POST") @PostMapping(value = "/edit") public Result edit(@RequestBody MonitorDev monitorDev) { @@ -122,12 +124,31 @@ public class MonitorDevController { return result; } + /** + * 编辑 + * + * @param monitorDev + * @return + */ + @OperLog(operModul = "地图设备点位信息管理", operType = "修改", operDesc = "清除定位信息") + @ApiOperation(value = "清除定位信息", notes = "清除定位信息", httpMethod = "POST") + @PostMapping(value = "/clearLocate") + public Result clearLocate(@RequestBody MonitorDev monitorDev) { + LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate(); + wrapper.set(MonitorDev::getLat, null); + wrapper.set(MonitorDev::getLng, null); + wrapper.set(MonitorDev::getAlt, null); + wrapper.eq(MonitorDev::getMonitorId, monitorDev.getMonitorId()); + monitorDevService.update(wrapper); + return Result.ok(); + } + /** * 通过id删除 * * @return */ - @OperLog(operModul = "视频监控信息管理", operType = "删除", operDesc = "删除视频监控信息信息") + @OperLog(operModul = "地图设备点位信息管理", operType = "删除", operDesc = "删除视频监控信息信息") @ApiOperation(value = "删除视频监控信息信息", notes = "删除视频监控信息信息", httpMethod = "POST") @ApiImplicitParam(name = "monitorId", value = "视频监控信息ID", paramType = "body", required = true, dataType = "Integer") @PostMapping(value = "/delete") @@ -152,7 +173,7 @@ public class MonitorDevController { * * @return */ - @OperLog(operModul = "视频监控信息管理", operType = "批量删除", operDesc = "批量删除视频监控信息信息") + @OperLog(operModul = "地图设备点位信息管理", operType = "批量删除", operDesc = "批量删除视频监控信息信息") @ApiOperation(value = "批量删除视频监控信息信息", notes = "批量删除视频监控信息信息", httpMethod = "POST") @ApiImplicitParam(name = "ids", value = "视频监控信息ID字符串", paramType = "body", required = true, dataType = "String") @PostMapping(value = "/deleteBatch") @@ -173,7 +194,7 @@ public class MonitorDevController { * * @return */ - @OperLog(operModul = "视频监控信息管理", operType = "查询", operDesc = "通过id查询视频监控信息信息") + @OperLog(operModul = "地图设备点位信息管理", operType = "查询", operDesc = "通过id查询视频监控信息信息") @ApiOperation(value = "通过id查询视频监控信息信息", notes = "通过id查询视频监控信息信息", httpMethod = "POST") @ApiImplicitParam(name = "id", value = "视频监控信息ID", paramType = "body", required = true, dataType = "Integer") @PostMapping(value = "/queryById") @@ -192,7 +213,7 @@ public class MonitorDevController { * 获取指定接口信息 * @return */ - @OperLog(operModul = "视频监控信息管理", operType = "查询", operDesc = "获取指定接口信息") + @OperLog(operModul = "地图设备点位信息管理", operType = "查询", operDesc = "获取指定接口信息") @ApiOperation(value = "获取指定接口信息", notes = "获取指定接口信息", httpMethod = "POST") @ApiImplicitParam(name = "id", value = "视频监控信息ID", paramType = "body", required = true, dataType = "Integer") @PostMapping(value = "/queryInfo") @@ -213,4 +234,17 @@ public class MonitorDevController { return Result.success(url, "操作成功"); } } + + + @OperLog(operModul = "地图设备点位信息管理", operType = "列表查询", operDesc = "查询设备列表") + @ApiOperation(value = " 查询设备列表", notes = "查询设备列表", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "category", value = "类别(1、视频监控;2、扬尘设备;3、场站;11、塔吊;12、架桥机;13、龙门吊;14、升降机;)", paramType = "body", required = true, dataType = "Integer"), + @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = true, dataType = "String") + }) + @PostMapping(value = "/getDevList") + public Result> getDevList(@ApiIgnore @RequestBody MonitorDev monitorDev) { + List devList = monitorDevService.getDevList(monitorDev); + return Result.success(devList); + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/review/entity/MonitorDev.java b/src/main/java/com/zhgd/xmgl/modules/review/entity/MonitorDev.java index f7eb9ca02..4cb6682c9 100644 --- a/src/main/java/com/zhgd/xmgl/modules/review/entity/MonitorDev.java +++ b/src/main/java/com/zhgd/xmgl/modules/review/entity/MonitorDev.java @@ -14,7 +14,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; /** - * @Description: 视频监控信息 + * @Description: 地图设备点位信息 * @author: pengj * @date: 2023-11-08 * @version: V1.0 @@ -26,16 +26,16 @@ public class MonitorDev implements Serializable { private static final long serialVersionUID = 1L; /** - * 监控ID + * 设备点位ID */ - @TableId(type = IdType.INPUT) - @ApiModelProperty(value = "监控ID") - private String monitorId; + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "设备点位ID") + private Long monitorId; /** * 视频名称 */ @Excel(name = "视频名称", width = 15) - @ApiModelProperty(value = "视频名称") + @ApiModelProperty(value = "设备点位名称") private String name; /** * 设备编码 @@ -92,17 +92,17 @@ public class MonitorDev implements Serializable { @ApiModelProperty(value = "修改时间") private Date updateTime; /** - * 类别(自定义) + * 类别(1、视频监控;2、扬尘设备;3、场站;11、塔吊;12、架桥机;13、龙门吊;14、升降机;) */ - @Excel(name = "类别(自定义)", width = 15) - @ApiModelProperty(value = "类别(自定义)") - private String category; + @Excel(name = "类别(1、视频监控;2、扬尘设备;3、场站;11、塔吊;12、架桥机;13、龙门吊;14、升降机;)", width = 15) + @ApiModelProperty(value = "类别(1、视频监控;2、扬尘设备;3、场站;11、塔吊;12、架桥机;13、龙门吊;14、升降机;)") + private Integer category; /** - * 类型 + * 绑定的设备ID */ - @Excel(name = "类型", width = 15) - @ApiModelProperty(value = "类型") - private Integer type; + @Excel(name = "绑定的设备ID", width = 15) + @ApiModelProperty(value = "绑定的设备ID") + private String devSn; /** * 自定义接口请求地址 */ @@ -115,4 +115,16 @@ public class MonitorDev implements Serializable { @Excel(name = "项目ID", width = 15) @ApiModelProperty(value = "项目ID") private String projectSn; + /** + * 备注 + */ + @Excel(name = "备注", width = 15) + @ApiModelProperty(value = "备注") + private String remark; + /** + * 场站类型 + */ + @Excel(name = "场站类型", width = 15) + @ApiModelProperty(value = "场站类型") + private String stationType; } diff --git a/src/main/java/com/zhgd/xmgl/modules/review/entity/vo/AlarmInfo.java b/src/main/java/com/zhgd/xmgl/modules/review/entity/vo/AlarmInfo.java new file mode 100644 index 000000000..d8143f07a --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/review/entity/vo/AlarmInfo.java @@ -0,0 +1,23 @@ +package com.zhgd.xmgl.modules.review.entity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmInfo { + + @ApiModelProperty(value = "报警类型1、视频AI监控;2、安全帽;3、车辆定位;") + private Integer type; + + @ApiModelProperty(value = "报警信息") + private String alarmDesc; + + @ApiModelProperty(value = "报警对象") + private String alarmObj; + + @ApiModelProperty(value = "设备编码") + private String devCode; + + @ApiModelProperty(value = "报警时间") + private String alarmTime; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/review/entity/vo/AlarmNumStat.java b/src/main/java/com/zhgd/xmgl/modules/review/entity/vo/AlarmNumStat.java new file mode 100644 index 000000000..04e873e18 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/review/entity/vo/AlarmNumStat.java @@ -0,0 +1,20 @@ +package com.zhgd.xmgl.modules.review.entity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmNumStat { + + @ApiModelProperty(value = "安全问题检测项") + private Integer totalNum; + + @ApiModelProperty(value = "围栏预警") + private Integer fenceAlarmNum; + + @ApiModelProperty(value = "视频AI预警") + private Integer videoAlarmNum; + + @ApiModelProperty(value = "视频监控数量") + private Integer machineryAlarmNum; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/review/entity/vo/TopStat.java b/src/main/java/com/zhgd/xmgl/modules/review/entity/vo/TopStat.java new file mode 100644 index 000000000..bba1a60ee --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/review/entity/vo/TopStat.java @@ -0,0 +1,23 @@ +package com.zhgd.xmgl.modules.review.entity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class TopStat { + + @ApiModelProperty(value = "人员管理数量") + private Integer workerNum; + + @ApiModelProperty(value = "机械设备数量") + private Integer machineryDevNum; + + @ApiModelProperty(value = "场站管理数量") + private Integer stationNum; + + @ApiModelProperty(value = "视频监控数量") + private Integer videoNum; + + @ApiModelProperty(value = "车辆数量") + private Integer carNum; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/review/service/IMonitorDevService.java b/src/main/java/com/zhgd/xmgl/modules/review/service/IMonitorDevService.java index a95b627ac..301e8845e 100644 --- a/src/main/java/com/zhgd/xmgl/modules/review/service/IMonitorDevService.java +++ b/src/main/java/com/zhgd/xmgl/modules/review/service/IMonitorDevService.java @@ -3,6 +3,8 @@ package com.zhgd.xmgl.modules.review.service; import com.baomidou.mybatisplus.extension.service.IService; import com.zhgd.xmgl.modules.review.entity.MonitorDev; +import java.util.List; + /** * @Description: 视频监控信息 * @author: pengj @@ -11,4 +13,5 @@ import com.zhgd.xmgl.modules.review.entity.MonitorDev; */ public interface IMonitorDevService extends IService { + List getDevList(MonitorDev monitorDev); } diff --git a/src/main/java/com/zhgd/xmgl/modules/review/service/impl/MonitorDevServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/review/service/impl/MonitorDevServiceImpl.java index 0301d1baf..49d4b6260 100644 --- a/src/main/java/com/zhgd/xmgl/modules/review/service/impl/MonitorDevServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/review/service/impl/MonitorDevServiceImpl.java @@ -1,11 +1,32 @@ package com.zhgd.xmgl.modules.review.service.impl; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zhgd.xmgl.modules.bigdevice.entity.GantryCrane; +import com.zhgd.xmgl.modules.bigdevice.entity.Lifter; +import com.zhgd.xmgl.modules.bigdevice.entity.Tower; +import com.zhgd.xmgl.modules.bigdevice.service.IGantryCraneService; +import com.zhgd.xmgl.modules.bigdevice.service.ILifterService; +import com.zhgd.xmgl.modules.bigdevice.service.ITowerService; +import com.zhgd.xmgl.modules.bridgeerectmachine.entity.BridgeErectMachineDev; +import com.zhgd.xmgl.modules.bridgeerectmachine.service.IBridgeErectMachineDevService; +import com.zhgd.xmgl.modules.environment.entity.EnvironmentDev; +import com.zhgd.xmgl.modules.environment.service.IEnvironmentDevService; import com.zhgd.xmgl.modules.review.entity.MonitorDev; import com.zhgd.xmgl.modules.review.mapper.MonitorDevMapper; import com.zhgd.xmgl.modules.review.service.IMonitorDevService; +import com.zhgd.xmgl.modules.video.entity.VideoGroup; +import com.zhgd.xmgl.modules.video.entity.VideoItem; +import com.zhgd.xmgl.modules.video.service.IVideoGroupService; +import com.zhgd.xmgl.modules.video.service.IVideoItemService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + /** * @Description: 视频监控信息 * @author: pengj @@ -15,4 +36,128 @@ import org.springframework.stereotype.Service; @Service public class MonitorDevServiceImpl extends ServiceImpl implements IMonitorDevService { + @Autowired + private IVideoGroupService videoGroupService; + + @Autowired + private IVideoItemService videoItemService; + + @Autowired + private IEnvironmentDevService environmentDevService; + + @Autowired + private ITowerService towerService; + + @Autowired + private IBridgeErectMachineDevService bridgeErectMachineDevService; + + @Autowired + private IGantryCraneService gantryCraneService; + + @Autowired + private ILifterService lifterService; + + + @Override + public List getDevList(MonitorDev monitorDev) { + List list = this.list(Wrappers.lambdaQuery().eq(MonitorDev::getProjectSn, monitorDev.getProjectSn())); + List devList = new ArrayList<>(); + if (monitorDev.getCategory() == 1) { + List list1 = videoGroupService.list(Wrappers.lambdaQuery().eq(VideoGroup::getProjectSn, monitorDev.getProjectSn())); + if (list1.size() > 0) { + List list2 = videoItemService.list(Wrappers.lambdaQuery().in(VideoItem::getGroupId, list1.stream().map(l -> l.getId()).collect(Collectors.toList()))); + for (VideoItem videoItem : list2) { + MonitorDev dev = new MonitorDev(); + List collect = list.stream().filter(l -> StringUtils.isNotBlank(l.getDevSn()) && l.getDevSn().equals(videoItem.getItemId().toString())).collect(Collectors.toList()); + if (collect.size() > 0) { + dev.setMonitorId(collect.get(0).getMonitorId()); + dev.setLat(collect.get(0).getLat()); + dev.setLng(collect.get(0).getLng()); + dev.setAlt(collect.get(0).getAlt()); + } + dev.setDevSn(videoItem.getItemId().toString()); + dev.setName(videoItem.getVideoName()); + devList.add(dev); + } + } + } else if (monitorDev.getCategory() == 2) { + List list1 = environmentDevService.list(Wrappers.lambdaQuery().eq(EnvironmentDev::getProjectSn, monitorDev.getProjectSn())); + for (EnvironmentDev environmentDev : list1) { + MonitorDev dev = new MonitorDev(); + List collect = list.stream().filter(l -> StringUtils.isNotBlank(l.getDevSn()) && l.getDevSn().equals(environmentDev.getId().toString())).collect(Collectors.toList()); + if (collect.size() > 0) { + dev.setMonitorId(collect.get(0).getMonitorId()); + dev.setLat(collect.get(0).getLat()); + dev.setLng(collect.get(0).getLng()); + dev.setAlt(collect.get(0).getAlt()); + } + dev.setDevSn(environmentDev.getId().toString()); + dev.setName(environmentDev.getDeviceName()); + devList.add(dev); + } + } else if (monitorDev.getCategory() == 3) { + devList = this.list(Wrappers.lambdaQuery().eq(MonitorDev::getCategory, 3)); + } else if (monitorDev.getCategory() == 11) { + List list1 = towerService.list(Wrappers.lambdaQuery().eq(Tower::getProjectSn, monitorDev.getProjectSn())); + for (Tower tower : list1) { + MonitorDev dev = new MonitorDev(); + List collect = list.stream().filter(l -> StringUtils.isNotBlank(l.getDevSn()) && l.getDevSn().equals(tower.getId().toString())).collect(Collectors.toList()); + if (collect.size() > 0) { + dev.setMonitorId(collect.get(0).getMonitorId()); + dev.setLat(collect.get(0).getLat()); + dev.setLng(collect.get(0).getLng()); + dev.setAlt(collect.get(0).getAlt()); + } + dev.setDevSn(tower.getId().toString()); + dev.setName(tower.getDevName()); + devList.add(dev); + } + } else if (monitorDev.getCategory() == 12) { + List list1 = bridgeErectMachineDevService.list(Wrappers.lambdaQuery().eq(BridgeErectMachineDev::getProjectSn, monitorDev.getProjectSn())); + for (BridgeErectMachineDev bridgeErectMachineDev : list1) { + MonitorDev dev = new MonitorDev(); + List collect = list.stream().filter(l -> StringUtils.isNotBlank(l.getDevSn()) && l.getDevSn().equals(bridgeErectMachineDev.getId().toString())).collect(Collectors.toList()); + if (collect.size() > 0) { + dev.setMonitorId(collect.get(0).getMonitorId()); + dev.setLat(collect.get(0).getLat()); + dev.setLng(collect.get(0).getLng()); + dev.setAlt(collect.get(0).getAlt()); + } + dev.setDevSn(bridgeErectMachineDev.getId().toString()); + dev.setName(bridgeErectMachineDev.getDevName()); + devList.add(dev); + } + } else if (monitorDev.getCategory() == 13) { + List list1 = gantryCraneService.list(Wrappers.lambdaQuery().eq(GantryCrane::getProjectSn, monitorDev.getProjectSn())); + for (GantryCrane gantryCrane : list1) { + MonitorDev dev = new MonitorDev(); + List collect = list.stream().filter(l -> StringUtils.isNotBlank(l.getDevSn()) && l.getDevSn().equals(gantryCrane.getId().toString())).collect(Collectors.toList()); + if (collect.size() > 0) { + dev.setMonitorId(collect.get(0).getMonitorId()); + dev.setLat(collect.get(0).getLat()); + dev.setLng(collect.get(0).getLng()); + dev.setAlt(collect.get(0).getAlt()); + } + dev.setDevSn(gantryCrane.getId().toString()); + dev.setName(gantryCrane.getDevName()); + devList.add(dev); + } + } else if (monitorDev.getCategory() == 14) { + List list1 = lifterService.list(Wrappers.lambdaQuery().eq(Lifter::getProjectSn, monitorDev.getProjectSn())); + for (Lifter lifter : list1) { + MonitorDev dev = new MonitorDev(); + List collect = list.stream().filter(l -> StringUtils.isNotBlank(l.getDevSn()) && l.getDevSn().equals(lifter.getId().toString())).collect(Collectors.toList()); + if (collect.size() > 0) { + dev.setMonitorId(collect.get(0).getMonitorId()); + dev.setLat(collect.get(0).getLat()); + dev.setLng(collect.get(0).getLng()); + dev.setAlt(collect.get(0).getAlt()); + } + dev.setDevSn(lifter.getId().toString()); + dev.setName(lifter.getDevName()); + devList.add(dev); + } + } + return devList; + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/safetyhat/entity/vo/WorkerNumByRegionVo.java b/src/main/java/com/zhgd/xmgl/modules/safetyhat/entity/vo/WorkerNumByRegionVo.java index 52b891f0b..3e788a20b 100644 --- a/src/main/java/com/zhgd/xmgl/modules/safetyhat/entity/vo/WorkerNumByRegionVo.java +++ b/src/main/java/com/zhgd/xmgl/modules/safetyhat/entity/vo/WorkerNumByRegionVo.java @@ -1,5 +1,6 @@ package com.zhgd.xmgl.modules.safetyhat.entity.vo; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @@ -8,4 +9,13 @@ import java.util.List; public class WorkerNumByRegionVo { private String date; private List list; + + @ApiModelProperty(value = "作业面人数") + private Integer workerNum; + + @ApiModelProperty(value = "人员总数") + private Integer totalWorker; + + @ApiModelProperty(value = "今日出勤") + private Integer attendWorker; } diff --git a/src/main/java/com/zhgd/xmgl/modules/safetyhat/mapper/xml/SafetyHatDataMapper.xml b/src/main/java/com/zhgd/xmgl/modules/safetyhat/mapper/xml/SafetyHatDataMapper.xml index 9ad61374d..117482f74 100644 --- a/src/main/java/com/zhgd/xmgl/modules/safetyhat/mapper/xml/SafetyHatDataMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/safetyhat/mapper/xml/SafetyHatDataMapper.xml @@ -25,7 +25,8 @@ + + diff --git a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/IVehiclePositionDataService.java b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/IVehiclePositionDataService.java index 95b33a18b..5f8877b59 100644 --- a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/IVehiclePositionDataService.java +++ b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/IVehiclePositionDataService.java @@ -3,9 +3,11 @@ package com.zhgd.xmgl.modules.vehicleposition.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionData; +import com.zhgd.xmgl.modules.vehicleposition.entity.vo.VehicleListByRegionVo; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @Description: 车辆(人员)定位-实时数据 @@ -36,4 +38,6 @@ public interface IVehiclePositionDataService extends IService param); } diff --git a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/impl/VehiclePositionDataServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/impl/VehiclePositionDataServiceImpl.java index 975ed586d..09faf219e 100644 --- a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/impl/VehiclePositionDataServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/impl/VehiclePositionDataServiceImpl.java @@ -1,29 +1,44 @@ package com.zhgd.xmgl.modules.vehicleposition.service.impl; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zhgd.jeecg.common.execption.OpenAlertException; import com.zhgd.jeecg.common.system.query.QueryGenerator; +import com.zhgd.xmgl.modules.car.entity.CarInfo; +import com.zhgd.xmgl.modules.car.mapper.CarInfoMapper; import com.zhgd.xmgl.modules.location.entity.LocationData; +import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatData; +import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev; +import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatFence; +import com.zhgd.xmgl.modules.safetyhat.entity.vo.WorkerListyByRegionVo; +import com.zhgd.xmgl.modules.safetyhat.mapper.SafetyHatFenceMapper; +import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionAlarm; import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionData; import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionDev; +import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionFence; +import com.zhgd.xmgl.modules.vehicleposition.entity.vo.VehicleListByRegionVo; import com.zhgd.xmgl.modules.vehicleposition.mapper.VehiclePositionDataMapper; import com.zhgd.xmgl.modules.vehicleposition.mapper.VehiclePositionDevMapper; import com.zhgd.xmgl.modules.vehicleposition.service.IVehiclePositionAlarmService; import com.zhgd.xmgl.modules.vehicleposition.service.IVehiclePositionDataService; +import com.zhgd.xmgl.modules.worker.entity.WorkerInfo; import com.zhgd.xmgl.util.PageUtil; import com.zhgd.xmgl.util.RefUtil; +import com.zhgd.xmgl.util.RegionUtil; import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Objects; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 车辆(人员)定位-实时数据 @@ -38,6 +53,12 @@ public class VehiclePositionDataServiceImpl extends ServiceImpl queryPageList(HashMap paramMap) { QueryWrapper queryWrapper = getQueryWrapper(paramMap); @@ -83,4 +104,74 @@ public class VehiclePositionDataServiceImpl extends ServiceImpl dealList(List list) { return list; } + + + @Override + public VehicleListByRegionVo getVehicleListByRegion(Map param) { + String projectSn = org.apache.commons.collections.MapUtils.getString(param, "projectSn"); + String regionId = org.apache.commons.collections.MapUtils.getString(param, "regionId"); + SafetyHatFence safetyHatFence = safetyHatFenceMapper.selectById(regionId); + List vehiclePositionDevList = vehiclePositionDevMapper.selectList(Wrappers.lambdaQuery() + .like(VehiclePositionDev::getProjectSn, projectSn)); + List onlineDev = vehiclePositionDevList.stream().filter(dev -> dev.getHeartbeatTime() != null && DateUtil.between(dev.getHeartbeatTime(), new Date(), DateUnit.MINUTE) < 30 ) + .collect(Collectors.toList()); + // 区域绑定的车辆车牌 + List bindCars = vehiclePositionDevList.stream().filter(v -> v.getFenceId().toString().equals(regionId)) + .map(s -> s.getNumberPlate()).collect(Collectors.toList()); + // 今天进入区域人员 + param.put("devList", onlineDev); + List datas = baseMapper.getNewestDataGroupByProjectSn(param); + // 在区域中的车辆车牌 + Set carSet = checkInFence(safetyHatFence, datas); + Set allWorker = new HashSet<>(); + allWorker.addAll(carSet); + allWorker.addAll(bindCars); + allWorker.add("0"); + param.put("workerIdList", allWorker); + List carInfoList = carInfoMapper.selectList(Wrappers.lambdaQuery() + .in(CarInfo::getCarNumber, allWorker) + .eq(CarInfo::getProjectSn, projectSn)); + VehicleListByRegionVo vo = new VehicleListByRegionVo(); + List collect = carInfoList.stream().filter(w -> bindCars.contains(w.getCarNumber())).collect(Collectors.toList()); + for (CarInfo carInfo : collect) { + carInfo.setInserviceType(carSet.contains(carInfo.getCarNumber()) ? 1 : 2); + } + collect.sort((a,b) -> a.getInserviceType().compareTo(b.getInserviceType())); + vo.setList(collect); + List collect1 = carInfoList.stream().filter(w -> !bindCars.contains(w.getId()) && carSet.contains(w.getId())).collect(Collectors.toList()); + for (CarInfo carInfo : collect1) { + carInfo.setInserviceType(1); + } + vo.setList1(collect1); + return vo; + } + + private Set checkInFence(SafetyHatFence fence, List datas) { + Set inCarSet = new HashSet<>(); + for (VehiclePositionData d : datas) { + boolean alarm = false; + //判断是否在围栏范围内 + if (Objects.equals(fence.getRangeType(), 1)) { + alarm = !RegionUtil.isInCircle(d.getLongitude(), d.getLatitude(), fence.getLongitude(), fence.getLatitude(), fence.getAreaRadius()); + } else if (Objects.equals(fence.getRangeType(), 2)) { + String fenceShape = fence.getFenceShape(); + if (StrUtil.isNotBlank(fenceShape)) { + String[] couples = StringUtils.split(fenceShape, ","); + Double[] lon = new Double[couples.length]; + Double[] lat = new Double[couples.length]; + for (int i = 0; i < couples.length; i++) { + String couple = couples[i]; + String[] two = StringUtils.split(couple, "|"); + lon[i] = Double.valueOf(two[0]); + lat[i] = Double.valueOf(two[1]); + } + alarm = !RegionUtil.isInPolygon(d.getLongitude(), d.getLatitude(), lon, lat); + } + } + if (alarm) { + inCarSet.add(d.getDevSn()); + } + } + return inCarSet; + } }