基建大屏

This commit is contained in:
pengjie 2025-06-09 09:09:00 +08:00
parent ee4af0566b
commit d4fbd26cb7
18 changed files with 405 additions and 103 deletions

View File

@ -205,7 +205,7 @@ public class CarPassRecordServiceImpl extends ServiceImpl<CarPassRecordMapper, C
String payload = JSON.toJSONString(carPassRecord);
String topic = "carPassRecordList" + carPassRecord.getProjectSn();
log.info("发送主题信息:{},主题为:{}", payload, topic);
mqttSender.sendToMqtt(topic, 2, payload);
// mqttSender.sendToMqtt(topic, 2, payload);
asyncCar.sendCarVideoAnalysisData(carPassRecord, carCamera);
if (carCamera != null && carInfo != null && carInfo.getIsBlack() == 1) {
//黑名单车辆短信提醒

View File

@ -2,13 +2,9 @@ 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;
@ -17,19 +13,14 @@ import com.zhgd.xmgl.modules.bridgeerectmachine.service.IBridgeErectMachineAlarm
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.entity.vo.*;
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;
@ -38,17 +29,19 @@ 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.EnterpriseInfo;
import com.zhgd.xmgl.modules.worker.entity.WorkerAttendance;
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
import com.zhgd.xmgl.modules.worker.service.IEnterpriseInfoService;
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.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@ -71,6 +64,9 @@ public class IndexController {
@Autowired
private IMonitorDevService monitorDevService;
@Autowired
private IEnterpriseInfoService enterpriseInfoService;
@Autowired
private ICarInfoService carInfoService;
@ -183,6 +179,112 @@ public class IndexController {
return Result.success(workerNumByRegionVo);
}
@OperLog(operModul = "基建大屏查询", operType = "统计", operDesc = "机械管理")
@ApiOperation(value = " 机械管理", notes = "机械管理", httpMethod = "POST")
@ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = true, dataType = "String")
@PostMapping(value = "/machineryStat")
public Result<MachineryStat> machineryStat(@ApiIgnore @RequestBody Map<String, Object> paramMap) {
String projectSn = MapUtils.getString(paramMap, "projectSn");
MachineryStat machineryStat = new MachineryStat();
List<MachineryDev> devList = new ArrayList<>();
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));
machineryStat.setMachineryNum(towerNum + bridgeDevNum + gantryNum + lifterNum);
Set<String> list = towerAlarmService.list(Wrappers.<TowerAlarm>lambdaQuery()
.eq(TowerAlarm::getProjectSn, projectSn)
.ge(TowerAlarm::getAddTime, DateUtil.offsetMinute(new Date(), -30)))
.stream().map(t -> t.getDevSn()).collect(Collectors.toSet());
list.add("1");
List<Tower> list5 = towerService.list(Wrappers.<Tower>lambdaQuery().eq(Tower::getProjectSn, projectSn));
Set<String> list1 = bridgeErectMachineAlarmService.list(Wrappers.<BridgeErectMachineAlarm>lambdaQuery()
.eq(BridgeErectMachineAlarm::getProjectSn, projectSn)
.ge(BridgeErectMachineAlarm::getAddTime, DateUtil.offsetMinute(new Date(), -30)))
.stream().map(t -> t.getDevSn()).collect(Collectors.toSet());
list1.add("1");
List<BridgeErectMachineDev> list6 = bridgeErectMachineDevService.list(Wrappers.<BridgeErectMachineDev>lambdaQuery()
.eq(BridgeErectMachineDev::getProjectSn, projectSn));
Set<String> list2 = gantryCraneAlarmService.list(Wrappers.<GantryCraneAlarm>lambdaQuery()
.eq(GantryCraneAlarm::getProjectSn, projectSn)
.ge(GantryCraneAlarm::getAddTime, DateUtil.offsetMinute(new Date(), -30)))
.stream().map(t -> t.getDevSn()).collect(Collectors.toSet());
list2.add("1");
List<GantryCrane> list7 = gantryCraneService.list(Wrappers.<GantryCrane>lambdaQuery()
.eq(GantryCrane::getProjectSn, projectSn));
Set<String> list3 = lifterAlarmService.list(Wrappers.<LifterAlarm>lambdaQuery()
.eq(LifterAlarm::getProjectSn, projectSn)
.ge(LifterAlarm::getAddTime, DateUtil.offsetMinute(new Date(), -30)))
.stream().map(t -> t.getDevSn()).collect(Collectors.toSet());
list3.add("1");
List<Lifter> list8 = lifterService.list(Wrappers.<Lifter>lambdaQuery()
.eq(Lifter::getProjectSn, projectSn));
List<MonitorDev> list4 = new ArrayList<>();
MonitorDev monitorDev1 = new MonitorDev();
monitorDev1.setProjectSn(projectSn);
monitorDev1.setCategory(11);
list4.addAll(monitorDevService.getDevList(monitorDev1));
monitorDev1.setCategory(12);
list4.addAll(monitorDevService.getDevList(monitorDev1));
monitorDev1.setCategory(13);
list4.addAll(monitorDevService.getDevList(monitorDev1));
monitorDev1.setCategory(14);
list4.addAll(monitorDevService.getDevList(monitorDev1));
// list4.sort((o1, o2) -> o2.get().compareTo(o1.getCreateTime()));
List<EnterpriseInfo> enterpriseInfoList = enterpriseInfoService.list();
for (MonitorDev monitorDev : list4) {
MachineryDev machineryDev = new MachineryDev();
BeanUtils.copyProperties(monitorDev, machineryDev);
if (monitorDev.getCategory() == 11) {
List<Tower> list11 = list5.stream().filter(l -> list.contains(l.getId().toString()) && l.getId().toString().equals(monitorDev.getDevSn())).collect(Collectors.toList());
List<Tower> list21 = list5.stream().filter(l -> l.getId().toString().equals(monitorDev.getDevSn())).collect(Collectors.toList());
machineryDev.setAlarmFlag(list11.size() > 0 ? 1 : 0);
machineryDev.setCategoryName("塔吊");
if (list21.size() > 0) {
machineryDev.setAddTime(list21.get(0).getInstallationTime());
List<EnterpriseInfo> collect = enterpriseInfoList.stream().filter(e -> e.getId().toString().equals(list21.get(0).getGeneralContractorsId())).collect(Collectors.toList());
machineryDev.setEnterpriseName(collect.size() > 0 ? collect.get(0).getEnterpriseName() : "");
}
} else if (monitorDev.getCategory() == 12) {
List<BridgeErectMachineDev> list12 = list6.stream().filter(l -> list1.contains(l.getId().toString()) && l.getId().toString().equals(monitorDev.getDevSn())).collect(Collectors.toList());
List<BridgeErectMachineDev> list22 = list6.stream().filter(l -> l.getId().toString().equals(monitorDev.getDevSn())).collect(Collectors.toList());
machineryDev.setAlarmFlag(list12.size() > 0 ? 1 : 0);
machineryDev.setCategoryName("架桥机");
if (list22.size() > 0) {
machineryDev.setAddTime(DateUtil.formatDateTime(list22.get(0).getCreateDate()));
List<EnterpriseInfo> collect = enterpriseInfoList.stream().filter(e -> e.getId().toString().equals(list22.get(0).getEnterpriseIds())).collect(Collectors.toList());
machineryDev.setEnterpriseName(collect.size() > 0 ? collect.get(0).getEnterpriseName() : "");
}
} else if (monitorDev.getCategory() == 13) {
List<GantryCrane> list13 = list7.stream().filter(l -> list2.contains(l.getId().toString()) && l.getId().toString().equals(monitorDev.getDevSn())).collect(Collectors.toList());
List<GantryCrane> list23 = list7.stream().filter(l -> l.getId().toString().equals(monitorDev.getDevSn())).collect(Collectors.toList());
machineryDev.setAlarmFlag(list13.size() > 0 ? 1 : 0);
machineryDev.setCategoryName("龙门吊");
if (list23.size() > 0) {
machineryDev.setAddTime(list23.get(0).getInstallationTime());
}
} else if (monitorDev.getCategory() == 14) {
List<Lifter> list14 = list8.stream().filter(l -> list2.contains(l.getId().toString()) && l.getId().toString().equals(monitorDev.getDevSn())).collect(Collectors.toList());
List<Lifter> list24= list8.stream().filter(l -> l.getId().toString().equals(monitorDev.getDevSn())).collect(Collectors.toList());
machineryDev.setAlarmFlag(list14.size() > 0 ? 1 : 0);
machineryDev.setCategoryName("升降机");
if (list24.size() > 0) {
machineryDev.setAddTime(list24.get(0).getInstallationTime());
List<EnterpriseInfo> collect = enterpriseInfoList.stream().filter(e -> e.getId().toString().equals(list24.get(0).getGeneralContractorsId())).collect(Collectors.toList());
machineryDev.setEnterpriseName(collect.size() > 0 ? collect.get(0).getEnterpriseName() : "");
}
}
devList.add(machineryDev);
}
machineryStat.setDevList(devList);
machineryStat.setAlarmNum((int) devList.stream().filter(m -> m.getAlarmFlag() == 1).count());
return Result.success(machineryStat);
}
@OperLog(operModul = "基建大屏查询", operType = "统计", operDesc = "安全问题监测项")
@ApiOperation(value = " 安全问题监测项", notes = "安全问题监测项", httpMethod = "POST")
@ApiImplicitParams({

View File

@ -247,4 +247,12 @@ public class MonitorDevController {
List<MonitorDev> devList = monitorDevService.getDevList(monitorDev);
return Result.success(devList);
}
@OperLog(operModul = "地图设备点位信息管理", operType = "统计查询", operDesc = "查询场站类型数量统计")
@ApiOperation(value = " 查询场站类型数量统计", notes = "查询场站类型数量统计", httpMethod = "POST")
@ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = true, dataType = "String")
@PostMapping(value = "/getStationStat")
public Result<Map<String, Object>> getStationStat(@ApiIgnore @RequestBody MonitorDev monitorDev) {
return Result.success(monitorDevService.getStationStat(monitorDev.getProjectSn()));
}
}

View File

@ -4,6 +4,7 @@ import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@ -127,4 +128,8 @@ public class MonitorDev implements Serializable {
@Excel(name = "场站类型", width = 15)
@ApiModelProperty(value = "场站类型")
private String stationType;
@TableField(exist = false)
@ApiModelProperty(value = "场站类型")
private String stationTypeName;
}

View File

@ -15,6 +15,6 @@ public class AlarmNumStat {
@ApiModelProperty(value = "视频AI预警")
private Integer videoAlarmNum;
@ApiModelProperty(value = "视频监控数量")
@ApiModelProperty(value = "机械设备数量")
private Integer machineryAlarmNum;
}

View File

@ -0,0 +1,65 @@
package com.zhgd.xmgl.modules.review.entity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class MachineryDev {
@ApiModelProperty(value = "设备点位ID")
private Long monitorId;
@ApiModelProperty(value = "设备点位名称")
private String name;
@ApiModelProperty(value = "设备编码")
private String code;
@ApiModelProperty(value = "显示排序 越小越靠前(排序字段)")
private Integer priority;
@ApiModelProperty(value = "经度")
private String lng;
@ApiModelProperty(value = "纬度")
private String lat;
@ApiModelProperty(value = "高度")
private String alt;
@ApiModelProperty(value = "封面图")
private String coverImage;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "类别(1、视频监控2、扬尘设备3、场站11、塔吊12、架桥机13、龙门吊14、升降机)")
private Integer category;
@ApiModelProperty(value = "类别")
private String categoryName;
@ApiModelProperty(value = "绑定的设备ID")
private String devSn;
@ApiModelProperty(value = "项目ID")
private String projectSn;
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "是否预警(0未预警;1:预警)")
private Integer alarmFlag;
@ApiModelProperty(value = "进场日期")
private String addTime;
@ApiModelProperty(value = "企业名称")
private String enterpriseName;
}

View File

@ -0,0 +1,22 @@
package com.zhgd.xmgl.modules.review.entity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class MachineryStat {
@ApiModelProperty(value = "设备类型")
private Integer typeNum = 4;
@ApiModelProperty(value = "进场机械")
private Integer machineryNum;
@ApiModelProperty(value = "预警设备")
private Integer alarmNum;
@ApiModelProperty(value = "机械设备列表")
private List<MachineryDev> devList;
}

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.zhgd.xmgl.modules.review.entity.MonitorDev;
import java.util.List;
import java.util.Map;
/**
* @Description: 视频监控信息
@ -14,4 +15,6 @@ import java.util.List;
public interface IMonitorDevService extends IService<MonitorDev> {
List<MonitorDev> getDevList(MonitorDev monitorDev);
Map<String, Object> getStationStat(String projectSn);
}

View File

@ -3,6 +3,8 @@ 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.basicdata.entity.DictionaryItem;
import com.zhgd.xmgl.modules.basicdata.service.IDictionaryItemService;
import com.zhgd.xmgl.modules.bigdevice.entity.GantryCrane;
import com.zhgd.xmgl.modules.bigdevice.entity.Lifter;
import com.zhgd.xmgl.modules.bigdevice.entity.Tower;
@ -24,7 +26,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@ -57,6 +61,9 @@ public class MonitorDevServiceImpl extends ServiceImpl<MonitorDevMapper, Monitor
@Autowired
private ILifterService lifterService;
@Autowired
private IDictionaryItemService dictionaryItemService;
@Override
public List<MonitorDev> getDevList(MonitorDev monitorDev) {
@ -67,97 +74,73 @@ public class MonitorDevServiceImpl extends ServiceImpl<MonitorDevMapper, Monitor
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);
buildDevInfo(list, videoItem.getItemId().toString(), videoItem.getVideoName(), devList, 1);
}
}
} 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);
buildDevInfo(list, environmentDev.getId().toString(), environmentDev.getDeviceName(), devList, 2);
}
} else if (monitorDev.getCategory() == 3) {
devList = this.list(Wrappers.<MonitorDev>lambdaQuery().eq(MonitorDev::getCategory, 3));
List<DictionaryItem> stationType = dictionaryItemService.list(Wrappers.<DictionaryItem>lambdaQuery()
.eq(DictionaryItem::getDictionaryEncoding, "station_type"));
for (MonitorDev monitorDev1 : devList) {
List<DictionaryItem> itemList = stationType.stream().filter(s -> s.getData().equals(monitorDev1.getStationType())).collect(Collectors.toList());
monitorDev1.setStationTypeName(itemList.size() > 0 ? itemList.get(0).getName() : "");
}
} 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);
buildDevInfo(list, tower.getId().toString(), tower.getDevName(), devList, 11);
}
} 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);
buildDevInfo(list, bridgeErectMachineDev.getId().toString(), bridgeErectMachineDev.getDevName(), devList, 12);
}
} 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);
buildDevInfo(list, gantryCrane.getId().toString(), gantryCrane.getDevName(), devList, 13);
}
} 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);
buildDevInfo(list, lifter.getId().toString(), lifter.getDevName(), devList, 14);
}
}
return devList;
}
@Override
public Map<String, Object> getStationStat(String projectSn) {
Map<String, Object> resultMap = new HashMap<>();
List<MonitorDev> devList = this.list(Wrappers.<MonitorDev>lambdaQuery()
.eq(MonitorDev::getProjectSn, projectSn)
.eq(MonitorDev::getCategory, 3));
List<DictionaryItem> stationType = dictionaryItemService.list(Wrappers.<DictionaryItem>lambdaQuery()
.eq(DictionaryItem::getDictionaryEncoding, "station_type"));
for (DictionaryItem dictionaryItem : stationType) {
Integer count = Math.toIntExact(devList.stream().filter(d -> d.getStationType().equals(dictionaryItem.getData())).count());
resultMap.put(dictionaryItem.getName(), count);
}
return resultMap;
}
private void buildDevInfo(List<MonitorDev> list, String id, String devName, List<MonitorDev> devList, Integer category) {
MonitorDev dev = new MonitorDev();
List<MonitorDev> collect = list.stream().filter(l -> StringUtils.isNotBlank(l.getDevSn()) && l.getDevSn().equals(id)).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.setCategory(category);
dev.setDevSn(id);
dev.setName(devName);
devList.add(dev);
}
}

View File

@ -7,6 +7,7 @@ import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gexin.fastjson.JSON;
import com.zhgd.annotation.OperLog;
import com.zhgd.jeecg.common.api.vo.Result;
@ -24,6 +25,7 @@ import com.zhgd.xmgl.modules.safetyhat.generator.PolygonTrajectoryGenerator;
import com.zhgd.xmgl.modules.safetyhat.service.IMockSafetyHatDataConfigService;
import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatDataService;
import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatDevService;
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
import com.zhgd.xmgl.util.RundeSafeyHatUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@ -345,15 +347,25 @@ public class SafetyHatDataController {
return Result.ok();
}
@OperLog(operModul = "智能安全帽实时数据管理", operType = "查询", operDesc = "区域人员列表")
@ApiOperation(value = "区域人员列表", notes = "区域人员列表", httpMethod = "POST")
@OperLog(operModul = "智能安全帽实时数据管理", operType = "查询", operDesc = "区域绑定人员列表")
@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 = "/getWorkerListByRegion")
public Result<WorkerListyByRegionVo> getWorkerListByRegion(@ApiIgnore @RequestBody Map<String, Object> param) {
public Result<Page<WorkerInfo>> getWorkerListByRegion(@ApiIgnore @RequestBody Map<String, Object> param) {
return Result.success(safetyHatDataService.getWorkerListByRegion(param));
}
@OperLog(operModul = "智能安全帽实时数据管理", operType = "查询", operDesc = "区域非法人员列表")
@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 = "/getWorkerListByRegion1")
public Result<Page<WorkerInfo>> getWorkerListByRegion1(@ApiIgnore @RequestBody Map<String, Object> param) {
return Result.success(safetyHatDataService.getWorkerListByRegion1(param));
}
}

View File

@ -1,6 +1,8 @@
package com.zhgd.xmgl.modules.safetyhat.entity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
@Data
public class WorkerNumAndRegionName {
@ -8,5 +10,11 @@ public class WorkerNumAndRegionName {
private Integer workerNum;
private Integer bindNum;
private String regionName;
private Long regionId;
private String fenceShape;
private String fenceShapeArr;
private Integer rangeType;
private Integer areaRadius;
private Double longitude;
private Double latitude;
}

View File

@ -1,11 +1,13 @@
package com.zhgd.xmgl.modules.safetyhat.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatData;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev;
import com.zhgd.xmgl.modules.safetyhat.entity.vo.WorkerListyByRegionVo;
import com.zhgd.xmgl.modules.safetyhat.entity.vo.WorkerNumByRegionVo;
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
import java.util.HashMap;
import java.util.List;
@ -100,5 +102,7 @@ public interface ISafetyHatDataService extends IService<SafetyHatData> {
WorkerNumByRegionVo countWorkerNumByRegionToday(Map<String, Object> param);
WorkerListyByRegionVo getWorkerListByRegion(Map<String, Object> param);
Page<WorkerInfo> getWorkerListByRegion(Map<String, Object> param);
Page<WorkerInfo> getWorkerListByRegion1(Map<String, Object> param);
}

View File

@ -16,7 +16,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.xmgl.constant.Cts;
import com.zhgd.xmgl.modules.location.entity.LocationData;
import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
@ -353,7 +352,14 @@ public class SafetyHatDataServiceImpl extends ServiceImpl<SafetyHatDataMapper, S
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());
workerNumAndRegionName.setRegionName(region.getFenceName());
workerNumAndRegionName.setRegionId(region.getId());
workerNumAndRegionName.setFenceShape(region.getFenceShape());
workerNumAndRegionName.setFenceShapeArr(region.getFenceShapeArr());
workerNumAndRegionName.setRangeType(region.getRangeType());
workerNumAndRegionName.setAreaRadius(region.getAreaRadius());
workerNumAndRegionName.setLatitude(region.getLatitude());
workerNumAndRegionName.setLongitude(region.getLongitude());
list.add(workerNumAndRegionName);
}
WorkerNumByRegionVo oneVo = new WorkerNumByRegionVo();
@ -363,7 +369,7 @@ public class SafetyHatDataServiceImpl extends ServiceImpl<SafetyHatDataMapper, S
}
@Override
public WorkerListyByRegionVo getWorkerListByRegion(Map<String, Object> param) {
public Page<WorkerInfo> getWorkerListByRegion(Map<String, Object> param) {
String projectSn = MapUtils.getString(param, "projectSn");
String regionId = MapUtils.getString(param, "regionId");
SafetyHatFence safetyHatFence = safetyHatFenceMapper.selectById(regionId);
@ -380,19 +386,47 @@ public class SafetyHatDataServiceImpl extends ServiceImpl<SafetyHatDataMapper, S
allWorker.add(-1L);
param.put("workerIdList", allWorker);
List<WorkerInfo> workerInfoList = workerInfoMapper.selectWorkerInfoList(new Page<>(-1, -1), param);
WorkerListyByRegionVo vo = new WorkerListyByRegionVo();
List<WorkerInfo> collect = workerInfoList.stream().filter(w -> bindWorkerIds.contains(w.getId())).collect(Collectors.toList());
for (WorkerInfo workerInfo : collect) {
workerInfo.setInserviceType(workerSet.contains(workerInfo.getId()) ? 1 : 2);
}
collect.sort((a,b) -> a.getInserviceType().compareTo(b.getInserviceType()));
vo.setList(collect);
Page<WorkerInfo> page = PageUtil.getPage(param);
int fromIndex = (int) (page.getSize() * (page.getCurrent() - 1));
int toIndex = (int) (fromIndex + page.getSize());
toIndex = toIndex > collect.size() ? collect.size() : toIndex;
page.setRecords(collect.subList(fromIndex, toIndex));
return page;
}
@Override
public Page<WorkerInfo> getWorkerListByRegion1(Map<String, Object> param) {
String projectSn = MapUtils.getString(param, "projectSn");
String regionId = MapUtils.getString(param, "regionId");
SafetyHatFence safetyHatFence = safetyHatFenceMapper.selectById(regionId);
List<SafetyHatDev> safetyHatDevs = safetyHatDevMapper.selectList(Wrappers.<SafetyHatDev>lambdaQuery().like(SafetyHatDev::getFenceId, regionId));
// 区域绑定的人员
List<Long> bindWorkerIds = safetyHatDevs.stream().map(s -> s.getWorkerInfoId()).collect(Collectors.toList());
// 今天进入区域人员
List<SafetyHatData> datas = safetyHatDataMapper.getNewestDataGroupByProjectSn(projectSn);
// 在区域中的人员
Set<Long> workerSet = getWorkerNumInFence(safetyHatFence, datas);
Set<Long> allWorker = new HashSet<>();
allWorker.addAll(workerSet);
allWorker.addAll(bindWorkerIds);
allWorker.add(-1L);
param.put("workerIdList", allWorker);
List<WorkerInfo> workerInfoList = workerInfoMapper.selectWorkerInfoList(new Page<>(-1, -1), param);
List<WorkerInfo> collect1 = workerInfoList.stream().filter(w -> !bindWorkerIds.contains(w.getId()) && workerSet.contains(w.getId())).collect(Collectors.toList());
for (WorkerInfo workerInfo : collect1) {
workerInfo.setInserviceType(1);
}
vo.setList1(collect1);
return vo;
Page<WorkerInfo> page = PageUtil.getPage(param);
int fromIndex = (int) (page.getSize() * (page.getCurrent() - 1));
int toIndex = (int) (fromIndex + page.getSize());
toIndex = toIndex > collect1.size() ? collect1.size() : toIndex;
page.setRecords(collect1.subList(fromIndex, toIndex));
return page;
}
private Set<Long> getWorkerNumInFence(SafetyHatFence fence, List<SafetyHatData> datas) {

View File

@ -12,6 +12,7 @@ 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.car.entity.CarInfo;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatData;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatFence;
@ -260,7 +261,17 @@ public class VehiclePositionDataController {
@ApiImplicitParam(name = "regionId", value = "区域ID", paramType = "body", required = true, dataType = "String")
})
@PostMapping(value = "/getVehicleListByRegion")
public Result<VehicleListByRegionVo> getVehicleListByRegion(@ApiIgnore @RequestBody Map<String, Object> param) {
public Result<Page<CarInfo>> getVehicleListByRegion(@ApiIgnore @RequestBody Map<String, Object> param) {
return Result.success(vehiclePositionDataService.getVehicleListByRegion(param));
}
@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 = "/getVehicleListByRegion1")
public Result<Page<CarInfo>> getVehicleListByRegion1(@ApiIgnore @RequestBody Map<String, Object> param) {
return Result.success(vehiclePositionDataService.getVehicleListByRegion1(param));
}
}

View File

@ -24,8 +24,7 @@
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
where vpd.id in
<foreach collection="param.devList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>

View File

@ -2,11 +2,12 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhgd.xmgl.modules.vehicleposition.mapper.VehiclePositionDevMapper">
<select id="pageList" resultType="com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionDev">
select * from (select vpd.id, vpd.project_sn, vpd.dev_sn, vpd.heartbeat_time, vpd.fence_id, CONCAT(IFNULL(vpd.enterprise_name, ''), IFNULL(en.enterprise_name, '')) enterpriseName,
select * from (select vpd.id, vpd.project_sn, vpd.dev_sn, vpd.type, vpd.heartbeat_time, vpd.fence_id, CONCAT(IFNULL(vpd.enterprise_name, ''), IFNULL(en.enterprise_name, '')) enterpriseName,
CONCAT(IFNULL(vpd.number_plate, ''), IFNULL(ci.car_number, '')) numberPlate,
CONCAT(IFNULL(vpd.car_type, ''), IFNULL(ct.car_type_name, '')) carType,
CONCAT(IFNULL(vpd.driver, ''), IFNULL(wi.worker_name, '')) driver,
CONCAT(IFNULL(vpd.driver_telephone, ''), IFNULL(ci.driver_telephone, '')) driverTelephone
CONCAT(IFNULL(vpd.driver_telephone, ''), IFNULL(ci.driver_telephone, '')) driverTelephone,
vpd2.longitude, vpd2.latitude
from vehicle_position_dev vpd
LEFT JOIN car_info ci ON ci.id = vpd.car_id
LEFT JOIN enterprise_info en ON en.id = ci.enterprise_id

View File

@ -1,7 +1,9 @@
package com.zhgd.xmgl.modules.vehicleposition.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhgd.xmgl.modules.car.entity.CarInfo;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionData;
import com.zhgd.xmgl.modules.vehicleposition.entity.vo.VehicleListByRegionVo;
@ -39,5 +41,7 @@ public interface IVehiclePositionDataService extends IService<VehiclePositionDat
*/
void add(VehiclePositionData vehiclePositionData);
VehicleListByRegionVo getVehicleListByRegion(Map<String, Object> param);
Page<CarInfo> getVehicleListByRegion(Map<String, Object> param);
Page<CarInfo> getVehicleListByRegion1(Map<String, Object> param);
}

View File

@ -107,7 +107,7 @@ public class VehiclePositionDataServiceImpl extends ServiceImpl<VehiclePositionD
@Override
public VehicleListByRegionVo getVehicleListByRegion(Map<String, Object> param) {
public Page<CarInfo> 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);
@ -116,10 +116,12 @@ public class VehiclePositionDataServiceImpl extends ServiceImpl<VehiclePositionD
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))
List<String> bindCars = vehiclePositionDevList.stream().filter(v -> v.getFenceId() != null && Arrays.asList(v.getFenceId().split(",")).contains(regionId))
.map(s -> s.getNumberPlate()).collect(Collectors.toList());
// 今天进入区域人员
param.put("devList", onlineDev);
List<Long> collect1 = onlineDev.stream().map(d -> d.getId()).collect(Collectors.toList());
collect1.add(0L);
param.put("devList", collect1);
List<VehiclePositionData> datas = baseMapper.getNewestDataGroupByProjectSn(param);
// 在区域中的车辆车牌
Set<String> carSet = checkInFence(safetyHatFence, datas);
@ -137,13 +139,52 @@ public class VehiclePositionDataServiceImpl extends ServiceImpl<VehiclePositionD
carInfo.setInserviceType(carSet.contains(carInfo.getCarNumber()) ? 1 : 2);
}
collect.sort((a,b) -> a.getInserviceType().compareTo(b.getInserviceType()));
vo.setList(collect);
Page<CarInfo> page = PageUtil.getPage(param);
int fromIndex = (int) (page.getSize() * (page.getCurrent() - 1));
int toIndex = (int) (fromIndex + page.getSize());
toIndex = toIndex > collect.size() ? collect.size() : toIndex;
page.setRecords(collect.subList(fromIndex, toIndex));
return page;
}
@Override
public Page<CarInfo> getVehicleListByRegion1(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> bindCaIds = vehiclePositionDevList.stream().filter(v -> v.getFenceId() != null && Arrays.asList(v.getFenceId().split(",")).contains(regionId))
.map(s -> s.getDevSn()).collect(Collectors.toList());
List<String> bindCars = carInfoMapper.selectBatchIds(bindCaIds).stream().map(c -> c.getCarNumber()).collect(Collectors.toList());
// 今天进入区域人员
List<Long> collect2 = onlineDev.stream().map(d -> d.getId()).collect(Collectors.toList());
collect2.add(0L);
param.put("devList", collect2);
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));
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;
Page<CarInfo> page = PageUtil.getPage(param);
int fromIndex = (int) (page.getSize() * (page.getCurrent() - 1));
int toIndex = (int) (fromIndex + page.getSize());
toIndex = toIndex > collect1.size() ? collect1.size() : toIndex;
page.setRecords(collect1.subList(fromIndex, toIndex));
return page;
}
private Set<String> checkInFence(SafetyHatFence fence, List<VehiclePositionData> datas) {