Commit e4f75e3f authored by duanruiming's avatar duanruiming

[add] 态势检测-辖区分组、区域列表

parent c9a388ff
...@@ -3,6 +3,7 @@ package net.wanji.web.controller; ...@@ -3,6 +3,7 @@ package net.wanji.web.controller;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import net.wanji.feign.pojo.result.JsonViewObject; import net.wanji.feign.pojo.result.JsonViewObject;
import net.wanji.web.po.AreaTreePO;
import net.wanji.web.service.SituationDetectionService; import net.wanji.web.service.SituationDetectionService;
import net.wanji.web.vo.situationDetection.*; import net.wanji.web.vo.situationDetection.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -168,4 +169,20 @@ public class SituationDetectionController extends BaseController { ...@@ -168,4 +169,20 @@ public class SituationDetectionController extends BaseController {
return jsonViewObject.success(list); return jsonViewObject.success(list);
} }
@ApiOperation(value = "辖区分组", notes = "辖区分组")
@GetMapping("/jurisdictionTree")
public JsonViewObject jurisdictionTree() {
List<AreaTreePO> areaTreePOS = situationDetectionService.jurisdictionTree();
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
return jsonViewObject.success(areaTreePOS);
}
@ApiOperation(value = "查询区域列表", notes = "辖区分组")
@GetMapping("/selectAreaList")
public JsonViewObject selectAreaList(Integer areaId) {
List<AreaListVO> areaListVOS = situationDetectionService.selectAreaList(areaId);
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
return jsonViewObject.success(areaListVOS);
}
} }
...@@ -56,7 +56,8 @@ public class TBaseCrossInfoController { ...@@ -56,7 +56,8 @@ public class TBaseCrossInfoController {
@ApiOperation(value = "路网管理-路口管理-区域名称下拉框", notes = "路网管理-路口管理-区域名称下拉框") @ApiOperation(value = "路网管理-路口管理-区域名称下拉框", notes = "路网管理-路口管理-区域名称下拉框")
@GetMapping("/areaTree") @GetMapping("/areaTree")
public JsonViewObject areaTree() { public JsonViewObject areaTree() {
return crossInfoService.areaTree(); JsonViewObject jsonViewObject = JsonViewObject.newInstance();
return jsonViewObject.success(crossInfoService.areaTree());
} }
} }
package net.wanji.web.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author duanruiming
* @date 2023/02/06 14:56
*/
@Data
@ApiModel(value = "区域路口实体", description = "区域路口实体")
public class TBaseAreaCross {
@ApiModelProperty(name = "id", notes = "")
private Integer id;
@ApiModelProperty(name = "区域编号", notes = "")
private Integer areaId;
@ApiModelProperty(name = "路口编号", notes = "")
private String crossId;
@ApiModelProperty(name = "创建时间", notes = "")
private Date gmtCreate;
@ApiModelProperty(name = "修改时间", notes = "")
private Date gmtModified;
}
package net.wanji.web.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.web.entity.TBaseAreaCross;
import org.springframework.stereotype.Repository;
/**
* @author duanruiming
* @date 2023/02/06 15:01
*/
@Repository
public interface TBaseAreaCrossMapper extends BaseMapper<TBaseAreaCross> {
}
...@@ -33,4 +33,7 @@ public interface TBaseAreaInfoMapper extends BaseMapper<TBaseAreaInfo> { ...@@ -33,4 +33,7 @@ public interface TBaseAreaInfoMapper extends BaseMapper<TBaseAreaInfo> {
int updateByPrimaryKey(TBaseAreaInfo record); int updateByPrimaryKey(TBaseAreaInfo record);
List<AreaTreePO> selectAreaTree(); List<AreaTreePO> selectAreaTree();
List<AreaTreePO> selectJurisdictionArea();
} }
package net.wanji.web.po; package net.wanji.web.po;
import lombok.Getter; import io.swagger.annotations.ApiModel;
import lombok.Setter; import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List; import java.util.List;
...@@ -13,22 +14,20 @@ import java.util.List; ...@@ -13,22 +14,20 @@ import java.util.List;
* @author wj * @author wj
* @since 2022-11-28 * @since 2022-11-28
*/ */
@Getter @Data
@Setter @ApiModel(value = "树形区域目录实体", description = "树形区域目录实体")
public class AreaTreePO { public class AreaTreePO {
/** @ApiModelProperty(value = "行政区划代码")
* 行政区划代码
*/
private Integer areaCode; private Integer areaCode;
/** @ApiModelProperty(value = "行政区划名称")
* 行政区划名称
*/
private String areaName; private String areaName;
@ApiModelProperty(value = "父行政区划代码")
private Integer parentCode; private Integer parentCode;
@ApiModelProperty(value = "子行政区划列表")
private List<AreaTreePO> children; private List<AreaTreePO> children;
} }
package net.wanji.web.service; package net.wanji.web.service;
import net.wanji.web.entity.TBaseCrossInfo; import net.wanji.web.entity.TBaseCrossInfo;
import net.wanji.web.po.AreaTreePO;
import net.wanji.web.vo.situationDetection.*; import net.wanji.web.vo.situationDetection.*;
import java.text.ParseException; import java.text.ParseException;
...@@ -34,4 +35,8 @@ public interface SituationDetectionService { ...@@ -34,4 +35,8 @@ public interface SituationDetectionService {
List<CrossDeviceStatusInfoOutVO> crossDeviceStatusInfo(); List<CrossDeviceStatusInfoOutVO> crossDeviceStatusInfo();
TBaseCrossInfo selectCrossInfoById(String signalId); TBaseCrossInfo selectCrossInfoById(String signalId);
List<AreaTreePO> jurisdictionTree();
List<AreaListVO> selectAreaList(Integer areaId);
} }
...@@ -157,7 +157,7 @@ public class TBaseCrossInfoService { ...@@ -157,7 +157,7 @@ public class TBaseCrossInfoService {
* 区域名称下拉框 * 区域名称下拉框
* *
*/ */
public JsonViewObject areaTree() { public List<AreaTreePO> areaTree() {
List<AreaTreePO> infos = areaInfoMapper.selectAreaTree(); List<AreaTreePO> infos = areaInfoMapper.selectAreaTree();
// 构建树 // 构建树
Map<Integer, List<AreaTreePO>> parentCodeMap = infos.stream().collect(Collectors.groupingBy(AreaTreePO::getParentCode)); Map<Integer, List<AreaTreePO>> parentCodeMap = infos.stream().collect(Collectors.groupingBy(AreaTreePO::getParentCode));
...@@ -170,6 +170,6 @@ public class TBaseCrossInfoService { ...@@ -170,6 +170,6 @@ public class TBaseCrossInfoService {
} }
} }
infos = infos.stream().filter(po -> po.getParentCode() != null).collect(Collectors.toList()); infos = infos.stream().filter(po -> po.getParentCode() != null).collect(Collectors.toList());
return JsonViewObject.newInstance().success(infos); return infos;
} }
} }
...@@ -3,15 +3,19 @@ package net.wanji.web.service.impl; ...@@ -3,15 +3,19 @@ package net.wanji.web.service.impl;
import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import net.wanji.web.common.enums.*; import net.wanji.web.common.enums.*;
import net.wanji.web.common.util.CrossUtil; import net.wanji.web.common.util.CrossUtil;
import net.wanji.web.entity.TBaseAreaCross;
import net.wanji.web.entity.TBaseAreaInfo;
import net.wanji.web.entity.TBaseCrossInfo; import net.wanji.web.entity.TBaseCrossInfo;
import net.wanji.web.mapper.*; import net.wanji.web.mapper.*;
import net.wanji.web.po.*; import net.wanji.web.po.*;
import net.wanji.web.service.SituationDetectionService; import net.wanji.web.service.SituationDetectionService;
import net.wanji.web.service.TBaseCrossInfoService;
import net.wanji.web.vo.situationDetection.*; import net.wanji.web.vo.situationDetection.*;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.text.ParseException; import java.text.ParseException;
...@@ -26,29 +30,22 @@ import java.util.stream.Collectors; ...@@ -26,29 +30,22 @@ import java.util.stream.Collectors;
* @date 2022/10/26 13:48 * @date 2022/10/26 13:48
*/ */
@Service @Service
@RequiredArgsConstructor
public class SituationDetectionServiceImpl implements SituationDetectionService { public class SituationDetectionServiceImpl implements SituationDetectionService {
@Autowired private final OptRecordsMapper optRecordsMapper;
OptRecordsMapper optRecordsMapper; private final CrossAlarmMapper crossAlarmMapper;
@Autowired private final EventAlarmMapper eventAlarmMapper;
CrossAlarmMapper crossAlarmMapper; private final ControlHistMapper controlHistMapper;
@Autowired private final VehicleTraceMapper vehicleTraceMapper;
EventAlarmMapper eventAlarmMapper; private final VideoDeviceInfoMapper videoDeviceInfoMapper;
@Autowired private final GreenwaveRealtimeMapper greenwaveRealtimeMapper;
ControlHistMapper controlHistMapper; private final AllDeviceStatusMapper allDeviceStatusMapper;
@Autowired private final GreenwaveCrossMapper greenwaveCrossMapper;
VehicleTraceMapper vehicleTraceMapper; private final TBaseCrossInfoMapper tBaseCrossInfoMapper;
@Autowired private final TBaseAreaInfoMapper tBaseAreaInfoMapper;
VideoDeviceInfoMapper videoDeviceInfoMapper; private final TBaseCrossInfoService tBaseCrossInfoService;
@Autowired private final TBaseAreaCrossMapper tBaseAreaCrossMapper;
GreenwaveRealtimeMapper greenwaveRealtimeMapper;
@Autowired
AllDeviceStatusMapper allDeviceStatusMapper;
@Autowired
GreenwaveCrossMapper greenwaveCrossMapper;
@Autowired
TBaseCrossInfoMapper tBaseCrossInfoMapper;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
...@@ -393,6 +390,66 @@ public class SituationDetectionServiceImpl implements SituationDetectionService ...@@ -393,6 +390,66 @@ public class SituationDetectionServiceImpl implements SituationDetectionService
public TBaseCrossInfo selectCrossInfoById(String signalId) { public TBaseCrossInfo selectCrossInfoById(String signalId) {
return tBaseCrossInfoMapper.selectById(signalId); return tBaseCrossInfoMapper.selectById(signalId);
} }
@Override
public List<AreaTreePO> jurisdictionTree() {
// 行政列表
List<AreaTreePO> areaTreePOS = tBaseCrossInfoService.areaTree();
List<AreaTreePO> resultList = areaTreePOS.stream().filter(areaTreePO -> areaTreePO.getChildren() != null).collect(Collectors.toList());
// 辖区构建
List<AreaTreePO> jurisdictionAreaList = tBaseAreaInfoMapper.selectJurisdictionArea();
Map<Integer, List<AreaTreePO>> parentCodeListMap = jurisdictionAreaList.stream().collect(Collectors.groupingBy(AreaTreePO::getParentCode));
for (AreaTreePO areaTreePO : resultList) {
List<AreaTreePO> childrenList = areaTreePO.getChildren();
for (AreaTreePO child : childrenList) {
Integer areaCode = child.getAreaCode();
if (!parentCodeListMap.isEmpty() && parentCodeListMap.containsKey(areaCode)) {
child.setChildren(parentCodeListMap.get(areaCode));
}
}
}
return resultList;
}
@Override
public List<AreaListVO> selectAreaList(Integer areaId) {
List<AreaListVO> results = new ArrayList<>();
LambdaQueryWrapper<TBaseAreaCross> queryWrapper = new LambdaQueryWrapper<>();
if (Objects.nonNull(areaId)) {
queryWrapper.eq(TBaseAreaCross::getAreaId, areaId);
}
List<TBaseAreaCross> entityList = tBaseAreaCrossMapper.selectList(queryWrapper);
// key:辖区编号 value:路口列表
Map<Integer, List<TBaseAreaCross>> areaIdMap = entityList.stream().collect(Collectors.groupingBy(TBaseAreaCross::getAreaId));
// 辖区列表
LambdaQueryWrapper<TBaseAreaInfo> tBaseAreaInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
tBaseAreaInfoLambdaQueryWrapper.eq(TBaseAreaInfo::getType, 2);
List<TBaseAreaInfo> jurisdictionAreaList = tBaseAreaInfoMapper.selectList(tBaseAreaInfoLambdaQueryWrapper);
// 构建区域返回列表
for (Map.Entry<Integer, List<TBaseAreaCross>> entry : areaIdMap.entrySet()) {
AreaListVO areaListVO = new AreaListVO();
Set<String> crossIds = new HashSet<>();
Set<String> ployLines = new HashSet<>();
List<TBaseAreaCross> crosseList = entry.getValue();
for (TBaseAreaCross tBaseAreaCross : crosseList) {
for (TBaseAreaInfo tBaseAreaInfo : jurisdictionAreaList) {
if (Objects.equals(tBaseAreaCross.getAreaId(), tBaseAreaInfo.getCode())) {
crossIds.add(tBaseAreaCross.getCrossId());
ployLines.add(tBaseAreaInfo.getPolylines());
}
}
}
areaListVO.setCrossIds(crossIds);
areaListVO.setPloyLines(ployLines);
results.add(areaListVO);
}
return results;
}
} }
class CrossAlarmComparator implements Comparator<CrossAlarmOutVO> { class CrossAlarmComparator implements Comparator<CrossAlarmOutVO> {
......
package net.wanji.web.vo.situationDetection;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Set;
/**
* @author duanruiming
* @date 2023/02/06 14:43
*/
@Data
@ApiModel(value = "区域列表实体", description = "区域列表实体")
public class AreaListVO {
@ApiModelProperty(value = "区域路口编号列表")
private Set<String> crossIds;
@ApiModelProperty(value = "区域点列表")
private Set<String> ployLines;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.web.mapper.TBaseAreaCrossMapper">
<resultMap id="BaseResultMap" type="net.wanji.web.entity.TBaseAreaCross">
<id column="id" property="id" jdbcType="INTEGER"/>
<result column="area_id" property="areaId" jdbcType="INTEGER"/>
<result column="cross_id" property="crossId" jdbcType="VARCHAR"/>
<result column="gmt_create" property="gmtCreate" jdbcType="TIMESTAMP"/>
<result column="gmt_modified" property="gmtModified" jdbcType="TIMESTAMP"/>
</resultMap>
</mapper>
\ No newline at end of file
...@@ -155,7 +155,15 @@ ...@@ -155,7 +155,15 @@
gmt_modified = #{gmtModified,jdbcType=TIMESTAMP} gmt_modified = #{gmtModified,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=INTEGER} where id = #{id,jdbcType=INTEGER}
</update> </update>
<!-- 查询行政区域 -->
<select id="selectAreaTree" resultType="net.wanji.web.po.AreaTreePO"> <select id="selectAreaTree" resultType="net.wanji.web.po.AreaTreePO">
select id, code areaCode, name areaName, parent_code parentCode from t_base_area_info select id, code areaCode, name areaName, parent_code parentCode
from t_base_area_info where type = 1
</select> </select>
<!-- 查询交警辖区 -->
<select id="selectJurisdictionArea" resultType="net.wanji.web.po.AreaTreePO">
select id, code areaCode, name areaName, parent_code parentCode
from t_base_area_info where type = 2
</select>
</mapper> </mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment