基建大屏

This commit is contained in:
pengjie 2025-06-04 16:14:35 +08:00
parent d6d5456157
commit ffac33b47b
23 changed files with 799 additions and 39 deletions

View File

@ -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<BridgeErectMa
private double randomDouble(double min, double max) {
Random random = new Random();
double randomInRange = min + (max - min) * random.nextDouble();
return randomInRange;
BigDecimal bd = new BigDecimal(randomInRange);
double A = bd.setScale(0, bd.ROUND_HALF_UP).doubleValue();
return A;
}
private QueryWrapper<BridgeErectMachineData> getQueryWrapper(HashMap<String, Object> paramMap) {

View File

@ -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 + '\'' +

View File

@ -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<PaveCompactionR
private double randomDouble(double min, double max) {
Random random = new Random();
double randomInRange = min + (max - min) * random.nextDouble();
return randomInRange;
BigDecimal bd = new BigDecimal(randomInRange);
double A = bd.setScale(0, bd.ROUND_HALF_UP).doubleValue();
return A;
}
}

View File

@ -26,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
/**
@ -167,7 +168,9 @@ public class PaveRecordServiceImpl extends ServiceImpl<PaveRecordMapper, PaveRec
private double randomDouble(double min, double max) {
Random random = new Random();
double randomInRange = min + (max - min) * random.nextDouble();
return randomInRange;
BigDecimal bd = new BigDecimal(randomInRange);
double A = bd.setScale(0, bd.ROUND_HALF_UP).doubleValue();
return A;
}
}

View File

@ -0,0 +1,281 @@
package com.zhgd.xmgl.modules.review.controller;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
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.zhgd.annotation.OperLog;
import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.xmgl.modules.bigdevice.entity.*;
import com.zhgd.xmgl.modules.bigdevice.service.*;
import com.zhgd.xmgl.modules.bridgeerectmachine.entity.BridgeErectMachineAlarm;
import com.zhgd.xmgl.modules.bridgeerectmachine.entity.BridgeErectMachineDev;
import com.zhgd.xmgl.modules.bridgeerectmachine.service.IBridgeErectMachineAlarmService;
import com.zhgd.xmgl.modules.bridgeerectmachine.service.IBridgeErectMachineDevService;
import com.zhgd.xmgl.modules.car.entity.CarInfo;
import com.zhgd.xmgl.modules.car.service.ICarInfoService;
import com.zhgd.xmgl.modules.environment.service.IEnvironmentDevService;
import com.zhgd.xmgl.modules.review.entity.GltfModel;
import com.zhgd.xmgl.modules.review.entity.MonitorDev;
import com.zhgd.xmgl.modules.review.entity.vo.AlarmInfo;
import com.zhgd.xmgl.modules.review.entity.vo.AlarmNumStat;
import com.zhgd.xmgl.modules.review.entity.vo.TopStat;
import com.zhgd.xmgl.modules.review.service.IMonitorDevService;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatAlarm;
import com.zhgd.xmgl.modules.safetyhat.entity.vo.WorkerNumAndRegionName;
import com.zhgd.xmgl.modules.safetyhat.entity.vo.WorkerNumByRegionVo;
import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatAlarmService;
import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatDataService;
import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatDevService;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionAlarm;
import com.zhgd.xmgl.modules.vehicleposition.service.IVehiclePositionAlarmService;
import com.zhgd.xmgl.modules.video.entity.AiAnalyseHardWareAlarmRecord;
import com.zhgd.xmgl.modules.video.entity.VideoGroup;
import com.zhgd.xmgl.modules.video.entity.VideoItem;
import com.zhgd.xmgl.modules.video.service.IAiAnalyseHardWareAlarmRecordService;
import com.zhgd.xmgl.modules.video.service.IVideoGroupService;
import com.zhgd.xmgl.modules.video.service.IVideoItemService;
import com.zhgd.xmgl.modules.worker.entity.WorkerAttendance;
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
import com.zhgd.xmgl.modules.worker.service.IWorkerAttendanceService;
import com.zhgd.xmgl.modules.worker.service.IWorkerInfoService;
import com.zhgd.xmgl.util.PageUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;
import java.util.*;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/xmgl/reviewIndex")
@Slf4j
@Api(tags = "基建大屏")
public class IndexController {
@Autowired
private IWorkerInfoService workerInfoService;
@Autowired
private IMonitorDevService monitorDevService;
@Autowired
private ICarInfoService carInfoService;
@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;
@Autowired
private ISafetyHatDataService safetyHatDataService;
@Autowired
private IWorkerAttendanceService workerAttendanceService;
@Autowired
private ISafetyHatAlarmService safetyHatAlarmService;
@Autowired
private IVehiclePositionAlarmService vehiclePositionAlarmService;
@Autowired
private IAiAnalyseHardWareAlarmRecordService aiAnalyseHardWareAlarmRecordService;
@Autowired
private ITowerAlarmService towerAlarmService;
@Autowired
private IBridgeErectMachineAlarmService bridgeErectMachineAlarmService;
@Autowired
private IGantryCraneAlarmService gantryCraneAlarmService;
@Autowired
private ILifterAlarmService lifterAlarmService;
@OperLog(operModul = "基建大屏查询", operType = "统计", operDesc = "顶部数量统计")
@ApiOperation(value = " 顶部数量统计", notes = "顶部数量统计", httpMethod = "POST")
@ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = true, dataType = "String")
@PostMapping(value = "/topStat")
public Result<TopStat> topStat(@ApiIgnore @RequestBody Map<String, Object> paramMap) {
String projectSn = MapUtils.getString(paramMap, "projectSn");
TopStat topStat = new TopStat();
int workerNum = workerInfoService.count(Wrappers.<WorkerInfo>lambdaQuery()
.eq(WorkerInfo::getProjectSn, projectSn)
.eq(WorkerInfo::getInserviceType, 1));
int towerNum = towerService.count(Wrappers.<Tower>lambdaQuery()
.eq(Tower::getProjectSn, projectSn));
int bridgeDevNum = bridgeErectMachineDevService.count(Wrappers.<BridgeErectMachineDev>lambdaQuery()
.eq(BridgeErectMachineDev::getProjectSn, projectSn));
int gantryNum = gantryCraneService.count(Wrappers.<GantryCrane>lambdaQuery()
.eq(GantryCrane::getProjectSn, projectSn));
int lifterNum = lifterService.count(Wrappers.<Lifter>lambdaQuery()
.eq(Lifter::getProjectSn, projectSn));
int stationNum = monitorDevService.count(Wrappers.<MonitorDev>lambdaQuery()
.eq(MonitorDev::getProjectSn, projectSn)
.eq(MonitorDev::getCategory, 3));
List<VideoGroup> videoGroupList = videoGroupService.list(Wrappers.<VideoGroup>lambdaQuery()
.eq(VideoGroup::getProjectSn, projectSn));
int videoNum = 0;
if (videoGroupList.size() > 0) {
videoNum = videoItemService.count(Wrappers.<VideoItem>lambdaQuery()
.in(VideoItem::getGroupId, videoGroupList.stream().map(v -> v.getId()).collect(Collectors.toList())));
}
int carNum = carInfoService.count(Wrappers.<CarInfo>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<WorkerNumByRegionVo> workerStat(@ApiIgnore @RequestBody Map<String, Object> paramMap) {
String projectSn = MapUtils.getString(paramMap, "projectSn");
int totalWorker = workerInfoService.count(Wrappers.<WorkerInfo>lambdaQuery()
.eq(WorkerInfo::getProjectSn, projectSn)
.eq(WorkerInfo::getInserviceType, 1));
Set<String> attendSet = workerAttendanceService.list(Wrappers.<WorkerAttendance>lambdaQuery()
.eq(WorkerAttendance::getProjectSn, projectSn)).stream().map(w -> w.getPersonSn()).collect(Collectors.toSet());
WorkerNumByRegionVo workerNumByRegionVo = safetyHatDataService.countWorkerNumByRegionToday(paramMap);
int workerNum = 0;
List<WorkerNumAndRegionName> 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> alarmNumStat(@ApiIgnore @RequestBody Map<String, Object> 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.<SafetyHatAlarm>lambdaQuery()
.eq(SafetyHatAlarm::getProjectSn, projectSn)
.ge(type == 2, SafetyHatAlarm::getAlarmTime, beginOfDay)
.le(type == 2, SafetyHatAlarm::getAlarmTime, endOfDay));
int vehicleAlarm = vehiclePositionAlarmService.count(Wrappers.<VehiclePositionAlarm>lambdaQuery()
.eq(VehiclePositionAlarm::getProjectSn, projectSn)
.ge(type == 2, VehiclePositionAlarm::getCreateTime, beginOfDay)
.le(type == 2, VehiclePositionAlarm::getCreateTime, endOfDay));
int aiAlarm = aiAnalyseHardWareAlarmRecordService.count(Wrappers.<AiAnalyseHardWareAlarmRecord>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.<TowerAlarm>lambdaQuery()
.eq(TowerAlarm::getProjectSn, projectSn)
.ge(type == 2, TowerAlarm::getAddTime, beginOfDay)
.le(type == 2, TowerAlarm::getAddTime, endOfDay));
int bridgeAlarm = bridgeErectMachineAlarmService.count(Wrappers.<BridgeErectMachineAlarm>lambdaQuery()
.eq(BridgeErectMachineAlarm::getProjectSn, projectSn)
.ge(type == 2, BridgeErectMachineAlarm::getAddTime, beginOfDay)
.le(type == 2, BridgeErectMachineAlarm::getAddTime, endOfDay));
int gantryAlarm = gantryCraneAlarmService.count(Wrappers.<GantryCraneAlarm>lambdaQuery()
.eq(GantryCraneAlarm::getProjectSn, projectSn)
.ge(type == 2, GantryCraneAlarm::getAddTime, beginOfDay)
.le(type == 2, GantryCraneAlarm::getAddTime, endOfDay));
int liftAlarm = lifterAlarmService.count(Wrappers.<LifterAlarm>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<List<AlarmInfo>> alarmList(@ApiIgnore @RequestBody Map<String, Object> paramMap) {
String projectSn = MapUtils.getString(paramMap, "projectSn");
DateTime beginOfDay = DateUtil.beginOfDay(new Date());
DateTime endOfDay = DateUtil.endOfDay(new Date());
List<AlarmInfo> resultList = new ArrayList<>();
List<SafetyHatAlarm> list = safetyHatAlarmService.list(Wrappers.<SafetyHatAlarm>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<VehiclePositionAlarm> list1 = vehiclePositionAlarmService.list(Wrappers.<VehiclePositionAlarm>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<AiAnalyseHardWareAlarmRecord> list2 = aiAnalyseHardWareAlarmRecordService.list(Wrappers.<AiAnalyseHardWareAlarmRecord>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<AlarmInfo> list) {
AlarmInfo alarmInfo = new AlarmInfo();
alarmInfo.setType(type);
alarmInfo.setAlarmDesc(alarmDesc);
alarmInfo.setAlarmObj(alarmObj);
alarmInfo.setDevCode(devCode);
alarmInfo.setAlarmTime(alarmTime);
list.add(alarmInfo);
}
}

View File

@ -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<IPage<MonitorDev>> queryPageList(@ApiIgnore @RequestBody Map<String, Object> 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<List<MonitorDev>> 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<Object> 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<MonitorDev> 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<MonitorDev> clearLocate(@RequestBody MonitorDev monitorDev) {
LambdaUpdateWrapper<MonitorDev> wrapper = Wrappers.<MonitorDev>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<List<MonitorDev>> getDevList(@ApiIgnore @RequestBody MonitorDev monitorDev) {
List<MonitorDev> devList = monitorDevService.getDevList(monitorDev);
return Result.success(devList);
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<MonitorDev> {
List<MonitorDev> getDevList(MonitorDev monitorDev);
}

View File

@ -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<MonitorDevMapper, MonitorDev> 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<MonitorDev> getDevList(MonitorDev monitorDev) {
List<MonitorDev> list = this.list(Wrappers.<MonitorDev>lambdaQuery().eq(MonitorDev::getProjectSn, monitorDev.getProjectSn()));
List<MonitorDev> devList = new ArrayList<>();
if (monitorDev.getCategory() == 1) {
List<VideoGroup> list1 = videoGroupService.list(Wrappers.<VideoGroup>lambdaQuery().eq(VideoGroup::getProjectSn, monitorDev.getProjectSn()));
if (list1.size() > 0) {
List<VideoItem> list2 = videoItemService.list(Wrappers.<VideoItem>lambdaQuery().in(VideoItem::getGroupId, list1.stream().map(l -> l.getId()).collect(Collectors.toList())));
for (VideoItem videoItem : list2) {
MonitorDev dev = new MonitorDev();
List<MonitorDev> 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<EnvironmentDev> list1 = environmentDevService.list(Wrappers.<EnvironmentDev>lambdaQuery().eq(EnvironmentDev::getProjectSn, monitorDev.getProjectSn()));
for (EnvironmentDev environmentDev : list1) {
MonitorDev dev = new MonitorDev();
List<MonitorDev> 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.<MonitorDev>lambdaQuery().eq(MonitorDev::getCategory, 3));
} else if (monitorDev.getCategory() == 11) {
List<Tower> list1 = towerService.list(Wrappers.<Tower>lambdaQuery().eq(Tower::getProjectSn, monitorDev.getProjectSn()));
for (Tower tower : list1) {
MonitorDev dev = new MonitorDev();
List<MonitorDev> 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<BridgeErectMachineDev> list1 = bridgeErectMachineDevService.list(Wrappers.<BridgeErectMachineDev>lambdaQuery().eq(BridgeErectMachineDev::getProjectSn, monitorDev.getProjectSn()));
for (BridgeErectMachineDev bridgeErectMachineDev : list1) {
MonitorDev dev = new MonitorDev();
List<MonitorDev> 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<GantryCrane> list1 = gantryCraneService.list(Wrappers.<GantryCrane>lambdaQuery().eq(GantryCrane::getProjectSn, monitorDev.getProjectSn()));
for (GantryCrane gantryCrane : list1) {
MonitorDev dev = new MonitorDev();
List<MonitorDev> 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<Lifter> list1 = lifterService.list(Wrappers.<Lifter>lambdaQuery().eq(Lifter::getProjectSn, monitorDev.getProjectSn()));
for (Lifter lifter : list1) {
MonitorDev dev = new MonitorDev();
List<MonitorDev> 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;
}
}

View File

@ -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<WorkerNumAndRegionName> list;
@ApiModelProperty(value = "作业面人数")
private Integer workerNum;
@ApiModelProperty(value = "人员总数")
private Integer totalWorker;
@ApiModelProperty(value = "今日出勤")
private Integer attendWorker;
}

View File

@ -25,7 +25,8 @@
</select>
<select id="getNewestList" resultType="com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatData">
select shd.*, wi.worker_name, ei.enterprise_name, wi.id_card, wi.phone_number, wt.type_name workerTypeName from safety_hat_data shd join (
select shd.*, CONCAT(IFNULL(wi.worker_name, ''), IFNULL(shd.worker_info_name, '')) worker_name, ei.enterprise_name, wi.phone_number, wt.type_name workerTypeName
from safety_hat_data shd join (
select max(upload_time) as upload_time, dev_sn
from safety_hat_data
where project_sn = #{projectSn}

View File

@ -98,5 +98,7 @@ public interface ISafetyHatDataService extends IService<SafetyHatData> {
*/
List<WorkerNumByRegionVo> countWorkerNumByRegion(Map<String, Object> param);
WorkerNumByRegionVo countWorkerNumByRegionToday(Map<String, Object> param);
WorkerListyByRegionVo getWorkerListByRegion(Map<String, Object> param);
}

View File

@ -332,6 +332,36 @@ public class SafetyHatDataServiceImpl extends ServiceImpl<SafetyHatDataMapper, S
return vos;
}
@Override
public WorkerNumByRegionVo countWorkerNumByRegionToday(Map<String, Object> param) {
String projectSn = MapUtils.getString(param, "projectSn");
List<SafetyHatData> datas = safetyHatDataMapper.selectList(new LambdaQueryWrapper<SafetyHatData>()
.eq(SafetyHatData::getProjectSn, projectSn)
.ge(SafetyHatData::getUploadTime, DateUtil.formatDate(DateUtil.offsetDay(new Date(), -6))));
List<SafetyHatDev> devList = safetyHatDevMapper.selectList(new LambdaQueryWrapper<SafetyHatDev>()
.eq(SafetyHatDev::getProjectSn, projectSn));
List<SafetyHatFence> regions = safetyHatFenceService.queryList(new MapBuilder<String, Object>()
.put("projectSn", projectSn)
.build());
String date = DateUtil.formatDate(new Date());
List<WorkerNumAndRegionName> list = new ArrayList<>();
for (SafetyHatFence region : regions) {
List<SafetyHatData> datas1 = datas.stream().filter(safetyHatData -> DateUtil.compare(safetyHatData.getUploadTime(), DateUtil.beginOfDay(DateUtil.parse(date))) >= 0
&& DateUtil.compare(safetyHatData.getUploadTime(), DateUtil.endOfDay(DateUtil.parse(date))) <= 0).collect(Collectors.toList());
int workerNum = getWorkerNumInFence(region, datas1).size();
WorkerNumAndRegionName workerNumAndRegionName = new WorkerNumAndRegionName();
workerNumAndRegionName.setWorkerNum(workerNum);
workerNumAndRegionName.setBindNum((int) devList.stream().filter(d -> Arrays.asList(d.getFenceId().split(",")).contains(region.getId().toString())).count());
workerNumAndRegionName.setDate(date);
workerNumAndRegionName.setRegionName(region.getRegionName());
list.add(workerNumAndRegionName);
}
WorkerNumByRegionVo oneVo = new WorkerNumByRegionVo();
oneVo.setDate(date);
oneVo.setList(list);
return oneVo;
}
@Override
public WorkerListyByRegionVo getWorkerListByRegion(Map<String, Object> param) {
String projectSn = MapUtils.getString(param, "projectSn");

View File

@ -5,14 +5,23 @@ import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
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.zhgd.annotation.OperLog;
import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.jeecg.common.util.oConvertUtils;
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.vehicleposition.entity.MockVehiclePositionDataConfig;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionData;
import com.zhgd.xmgl.modules.vehicleposition.entity.vo.VehicleListByRegionVo;
import com.zhgd.xmgl.modules.vehicleposition.service.IMockVehiclePositionDataConfigService;
import com.zhgd.xmgl.modules.vehicleposition.service.IVehiclePositionDataService;
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
import com.zhgd.xmgl.util.EntityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@ -33,11 +42,9 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Collectors;
/**
@ -247,4 +254,13 @@ public class VehiclePositionDataController {
return Result.ok();
}
@ApiOperation(value = "区域车辆列表", notes = "区域车辆列表", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "regionId", value = "区域ID", paramType = "body", required = true, dataType = "String")
})
@PostMapping(value = "/getVehicleListByRegion")
public Result<VehicleListByRegionVo> getVehicleListByRegion(@ApiIgnore @RequestBody Map<String, Object> param) {
return Result.success(vehiclePositionDataService.getVehicleListByRegion(param));
}
}

View File

@ -1,7 +1,5 @@
package com.zhgd.xmgl.modules.vehicleposition.controller;
import com.zhgd.annotation.OperLog;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionDev;
import com.zhgd.xmgl.modules.vehicleposition.entity.vo.CountVehiclePositionDevVo;
import com.zhgd.xmgl.modules.vehicleposition.service.IVehiclePositionDevService;
@ -17,13 +15,14 @@ import springfox.documentation.annotations.ApiIgnore;
import java.util.List;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Map;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.jeecg.common.util.oConvertUtils;
import org.apache.commons.collections.MapUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -205,4 +204,14 @@ public class VehiclePositionDevController {
vehiclePositionDevService.unBind(vehiclePositionDev);
return Result.ok();
}
@ApiOperation(value = "统计车辆车种信息", notes = "统计车辆车种信息", httpMethod = "POST")
@ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String")
@PostMapping(value = "/countVehiclePositionDevCarType")
public Result<Map<String, Long>> countVehiclePositionDevCarType(@ApiIgnore @RequestBody HashMap<String, Object> paramMap) {
paramMap.put("type", 1);
List<VehiclePositionDev> vehiclePositionDevList = vehiclePositionDevService.queryList(paramMap);
Map<String, Long> collect = vehiclePositionDevList.stream().collect(Collectors.groupingBy(VehiclePositionDev::getCarType, Collectors.counting()));
return Result.success(collect);
}
}

View File

@ -0,0 +1,19 @@
package com.zhgd.xmgl.modules.vehicleposition.entity.vo;
import com.zhgd.xmgl.modules.car.entity.CarInfo;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionDev;
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class VehicleListByRegionVo {
@ApiModelProperty(value = "合法车辆信息")
private List<CarInfo> list;
@ApiModelProperty(value = "非法车辆信息")
private List<CarInfo> list1;
}

View File

@ -5,11 +5,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatData;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* @Description: 车辆人员定位-实时数据
@ -40,4 +42,12 @@ public interface VehiclePositionDataMapper extends BaseMapper<VehiclePositionDat
* @return
*/
VehiclePositionData getTodayBeginData(String devSn);
/**
* 查询最想的数据列表
*
* @param param
* @return
*/
List<VehiclePositionData> getNewestDataGroupByProjectSn(@Param("param") Map<String, Object> param);
}

View File

@ -16,4 +16,19 @@
order by vpd.create_time
limit 1
</select>
<select id="getNewestDataGroupByProjectSn" resultType="com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionData">
select vpd.*
from vehicle_position_data vpd
join (select max(create_time) as create_time, dev_sn
from vehicle_position_data
where project_sn = #{param.projectSn}
group by dev_sn) t on t.create_time = vpd.create_time and t.dev_sn=vpd.dev_sn
join vehicle_position_data vpd2 on vpd2.dev_sn = vpd.dev_sn
where vpd2.id in
<foreach collection="param.devList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
group by vpd.dev_sn
</select>
</mapper>

View File

@ -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<VehiclePositionDat
* @param vehiclePositionData
*/
void add(VehiclePositionData vehiclePositionData);
VehicleListByRegionVo getVehicleListByRegion(Map<String, Object> param);
}

View File

@ -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<VehiclePositionD
@Autowired
VehiclePositionDevMapper vehiclePositionDevMapper;
@Autowired
SafetyHatFenceMapper safetyHatFenceMapper;
@Autowired
CarInfoMapper carInfoMapper;
@Override
public IPage<VehiclePositionData> queryPageList(HashMap<String, Object> paramMap) {
QueryWrapper<VehiclePositionData> queryWrapper = getQueryWrapper(paramMap);
@ -83,4 +104,74 @@ public class VehiclePositionDataServiceImpl extends ServiceImpl<VehiclePositionD
private List<VehiclePositionData> dealList(List<VehiclePositionData> list) {
return list;
}
@Override
public VehicleListByRegionVo getVehicleListByRegion(Map<String, Object> 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<VehiclePositionDev> vehiclePositionDevList = vehiclePositionDevMapper.selectList(Wrappers.<VehiclePositionDev>lambdaQuery()
.like(VehiclePositionDev::getProjectSn, projectSn));
List<VehiclePositionDev> onlineDev = vehiclePositionDevList.stream().filter(dev -> dev.getHeartbeatTime() != null && DateUtil.between(dev.getHeartbeatTime(), new Date(), DateUnit.MINUTE) < 30 )
.collect(Collectors.toList());
// 区域绑定的车辆车牌
List<String> bindCars = vehiclePositionDevList.stream().filter(v -> v.getFenceId().toString().equals(regionId))
.map(s -> s.getNumberPlate()).collect(Collectors.toList());
// 今天进入区域人员
param.put("devList", onlineDev);
List<VehiclePositionData> datas = baseMapper.getNewestDataGroupByProjectSn(param);
// 在区域中的车辆车牌
Set<String> carSet = checkInFence(safetyHatFence, datas);
Set<String> allWorker = new HashSet<>();
allWorker.addAll(carSet);
allWorker.addAll(bindCars);
allWorker.add("0");
param.put("workerIdList", allWorker);
List<CarInfo> carInfoList = carInfoMapper.selectList(Wrappers.<CarInfo>lambdaQuery()
.in(CarInfo::getCarNumber, allWorker)
.eq(CarInfo::getProjectSn, projectSn));
VehicleListByRegionVo vo = new VehicleListByRegionVo();
List<CarInfo> 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<CarInfo> 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<String> checkInFence(SafetyHatFence fence, List<VehiclePositionData> datas) {
Set<String> 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;
}
}