Commit 6f90b4fb authored by hanbing's avatar hanbing

[add] 路口管理,区域详情

parent 36acb4ce
package net.wanji.web.controller; package net.wanji.web.controller;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses; import io.swagger.annotations.ApiResponses;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.databus.bo.AreaDetailBO;
import net.wanji.web.bo.AddOrUpdateAreaBO; import net.wanji.web.bo.AddOrUpdateAreaBO;
import net.wanji.web.bo.AreaIdBO; import net.wanji.databus.bo.AreaIdBO;
import net.wanji.web.bo.PolygonBO; import net.wanji.web.bo.PolygonBO;
import net.wanji.web.bo.SpecialServiceRouteBO; import net.wanji.web.bo.SpecialServiceRouteBO;
import net.wanji.web.service.impl.CrossManageServiceImpl; import net.wanji.web.service.impl.CrossManageServiceImpl;
import net.wanji.databus.vo.AreaDetailVO;
import net.wanji.web.vo.CrossIdAndNameVO; import net.wanji.web.vo.CrossIdAndNameVO;
import net.wanji.web.vo.ListAreaVO; import net.wanji.web.vo.ListAreaVO;
import net.wanji.web.vo.SelectCrossesByStartEndVO; import net.wanji.web.vo.SelectCrossesByStartEndVO;
...@@ -95,4 +98,16 @@ public class CrossManageController { ...@@ -95,4 +98,16 @@ public class CrossManageController {
return JsonViewObject.newInstance().success(listAreaVO); return JsonViewObject.newInstance().success(listAreaVO);
} }
@ApiOperation(value = "区域详情", notes = "区域详情", produces = MediaType.APPLICATION_JSON)
@PostMapping(value = "/areaDetail", produces = MediaType.APPLICATION_JSON)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = AreaDetailVO.class),
})
public JsonViewObject areaDetail(@RequestBody AreaDetailBO areaDetailBO) {
PageInfo<AreaDetailVO> res = crossManageService.areaDetail(areaDetailBO);
return JsonViewObject.newInstance().success(res);
}
// todo 控制模式列表,修改控制模式
} }
\ No newline at end of file
package net.wanji.web.service; package net.wanji.web.service;
import com.github.pagehelper.PageInfo;
import net.wanji.databus.bo.AreaDetailBO;
import net.wanji.web.bo.AddOrUpdateAreaBO; import net.wanji.web.bo.AddOrUpdateAreaBO;
import net.wanji.web.bo.AreaIdBO; import net.wanji.databus.bo.AreaIdBO;
import net.wanji.web.bo.PolygonBO; import net.wanji.web.bo.PolygonBO;
import net.wanji.web.bo.SpecialServiceRouteBO; import net.wanji.web.bo.SpecialServiceRouteBO;
import net.wanji.databus.vo.AreaDetailVO;
import net.wanji.web.vo.CrossIdAndNameVO; import net.wanji.web.vo.CrossIdAndNameVO;
import net.wanji.web.vo.ListAreaVO; import net.wanji.web.vo.ListAreaVO;
import net.wanji.web.vo.SelectCrossesByStartEndVO; import net.wanji.web.vo.SelectCrossesByStartEndVO;
...@@ -25,4 +28,6 @@ public interface CrossManageService { ...@@ -25,4 +28,6 @@ public interface CrossManageService {
void deleteArea(AreaIdBO areaIdBO); void deleteArea(AreaIdBO areaIdBO);
ListAreaVO listArea(); ListAreaVO listArea();
PageInfo<AreaDetailVO> areaDetail(AreaDetailBO areaDetailBO);
} }
package net.wanji.web.service.impl; package net.wanji.web.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.wanji.common.dto.CrossIdDTO;
import net.wanji.common.gts.GeometryUtil; import net.wanji.common.gts.GeometryUtil;
import net.wanji.common.utils.tool.CrossUtil; import net.wanji.common.utils.tool.CrossUtil;
import net.wanji.databus.bo.AreaDetailBO;
import net.wanji.databus.bo.AreaIdBO;
import net.wanji.databus.dao.entity.CrossSectionPO;
import net.wanji.databus.dao.mapper.BaseAreaInfoMapper; import net.wanji.databus.dao.mapper.BaseAreaInfoMapper;
import net.wanji.databus.dao.mapper.BaseCrossInfoMapper; import net.wanji.databus.dao.mapper.BaseCrossInfoMapper;
import net.wanji.databus.dao.mapper.BaseCrossSectionMapper;
import net.wanji.databus.dto.RunningPlanDTO;
import net.wanji.databus.po.AreaDetailPOExt;
import net.wanji.databus.po.BaseAreaInfoPO; import net.wanji.databus.po.BaseAreaInfoPO;
import net.wanji.databus.po.BaseCrossInfoPO; import net.wanji.databus.po.BaseCrossInfoPO;
import net.wanji.databus.vo.AreaDetailVO;
import net.wanji.web.bo.AddOrUpdateAreaBO; import net.wanji.web.bo.AddOrUpdateAreaBO;
import net.wanji.web.bo.AreaIdBO;
import net.wanji.web.bo.PolygonBO; import net.wanji.web.bo.PolygonBO;
import net.wanji.web.bo.SpecialServiceRouteBO; import net.wanji.web.bo.SpecialServiceRouteBO;
import net.wanji.web.mapper.TBaseAreaCrossMapper; import net.wanji.web.mapper.TBaseAreaCrossMapper;
import net.wanji.web.service.CrossManageService; import net.wanji.web.service.CrossManageService;
import net.wanji.web.service.scheme.impl.RunningPlanServiceImpl;
import net.wanji.web.vo.AreaTreeVO; import net.wanji.web.vo.AreaTreeVO;
import net.wanji.web.vo.CrossIdAndNameVO; import net.wanji.web.vo.CrossIdAndNameVO;
import net.wanji.web.vo.ListAreaVO; import net.wanji.web.vo.ListAreaVO;
import net.wanji.web.vo.SelectCrossesByStartEndVO; import net.wanji.web.vo.SelectCrossesByStartEndVO;
import net.wanji.web.vo.specialService.RouteElementVO; import net.wanji.web.vo.specialService.RouteElementVO;
import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Geometry;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* @author Kent HAN * @author Kent HAN
...@@ -38,13 +53,19 @@ public class CrossManageServiceImpl implements CrossManageService { ...@@ -38,13 +53,19 @@ public class CrossManageServiceImpl implements CrossManageService {
private final BaseAreaInfoMapper baseAreaInfoMapper; private final BaseAreaInfoMapper baseAreaInfoMapper;
private final SpecialServiceServiceImpl specialServiceService; private final SpecialServiceServiceImpl specialServiceService;
private final TBaseAreaCrossMapper areaCrossMapper; private final TBaseAreaCrossMapper areaCrossMapper;
private final BaseCrossSectionMapper crossSectionMapper;
private final RunningPlanServiceImpl runningPlanServiceImpl;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
public CrossManageServiceImpl(BaseCrossInfoMapper crossInfoMapper, BaseAreaInfoMapper baseAreaInfoMapper, public CrossManageServiceImpl(BaseCrossInfoMapper crossInfoMapper, BaseAreaInfoMapper baseAreaInfoMapper,
SpecialServiceServiceImpl specialServiceService, TBaseAreaCrossMapper areaCrossMapper) { SpecialServiceServiceImpl specialServiceService, TBaseAreaCrossMapper areaCrossMapper, BaseCrossSectionMapper crossSectionMapper, RunningPlanServiceImpl runningPlanServiceImpl) {
this.crossInfoMapper = crossInfoMapper; this.crossInfoMapper = crossInfoMapper;
this.baseAreaInfoMapper = baseAreaInfoMapper; this.baseAreaInfoMapper = baseAreaInfoMapper;
this.specialServiceService = specialServiceService; this.specialServiceService = specialServiceService;
this.areaCrossMapper = areaCrossMapper; this.areaCrossMapper = areaCrossMapper;
this.crossSectionMapper = crossSectionMapper;
this.runningPlanServiceImpl = runningPlanServiceImpl;
} }
@Override @Override
...@@ -196,6 +217,113 @@ public class CrossManageServiceImpl implements CrossManageService { ...@@ -196,6 +217,113 @@ public class CrossManageServiceImpl implements CrossManageService {
return listAreaVO; return listAreaVO;
} }
@Override
public PageInfo<AreaDetailVO> areaDetail(AreaDetailBO areaDetailBO) {
Integer areaId = areaDetailBO.getAreaId();
Integer pageNum = areaDetailBO.getPageNum();
Integer pageSize = areaDetailBO.getPageSize();
// 可选参数
String crossName = areaDetailBO.getCrossName();
Integer isSignal = areaDetailBO.getIsSignal();
Integer controlMode = areaDetailBO.getControlMode();
Integer isStart = areaDetailBO.getIsStart();
Integer isSend = areaDetailBO.getIsSend();
PageHelper.startPage(pageNum, pageSize);
List<AreaDetailPOExt> areaDetailPOExtList = baseAreaInfoMapper.selectJoinDetail(
areaId, crossName, isSignal, isStart, isSend);
PageInfo<AreaDetailPOExt> extPageInfo = new PageInfo<>(areaDetailPOExtList);
PageInfo<AreaDetailVO> voPageInfo = new PageInfo<>();
BeanUtils.copyProperties(extPageInfo, voPageInfo);
List<AreaDetailVO> voList = new ArrayList<>();
List<AreaDetailPOExt> extList = extPageInfo.getList();
for (AreaDetailPOExt areaDetailPOExt : extList) {
AreaDetailVO areaDetailVO = new AreaDetailVO();
BeanUtils.copyProperties(areaDetailPOExt, areaDetailVO);
areaDetailVO.setIpPort(areaDetailPOExt.getIp() + ":" + areaDetailPOExt.getPort());
// 获取控制模式
Date datetime = new Date();
String dateStr = sdf.format(datetime);
String crossId = areaDetailPOExt.getCrossId();
// 根据当前时间查询计划
Integer planId = findPlanId(datetime, dateStr, crossId);
if (planId != null) {
List<CrossSectionPO> crossSectionPOList = crossSectionMapper.selectByCrossAndPlan(crossId, planId);
// 获取当前时间整数字面量
SimpleDateFormat formatter = new SimpleDateFormat("HHmm");
String timeString = formatter.format(datetime);
int nowTimeInt = Integer.parseInt(timeString);
for (CrossSectionPO crossSectionPO : crossSectionPOList) {
String startTime = crossSectionPO.getStartTime();
String endTime = crossSectionPO.getEndTime();
Integer startTimeInt = timeStrToInt(startTime);
Integer endTimeInt = timeStrToInt(endTime);
if (nowTimeInt <= endTimeInt && nowTimeInt >= startTimeInt) {
Integer controlModeFromDb = crossSectionPO.getControlMode();
if (controlMode == null || 0 == controlMode) { // 不筛选控制模式
areaDetailVO.setControlMode(controlModeFromDb);
} else if (Objects.equals(controlModeFromDb, controlMode)) { // 筛选控制模式
areaDetailVO.setControlMode(controlModeFromDb);
}
}
}
}
if (areaDetailVO.getControlMode() != null) {
voList.add(areaDetailVO);
}
}
voPageInfo.setList(voList);
return voPageInfo;
}
private Integer timeStrToInt(String time) {
time = time.replace(":", "");
int timeInt = Integer.parseInt(time);
return timeInt;
}
private Integer findPlanId(Date datetime, String dateStr, String crossId) {
CrossIdDTO crossIdDTO = new CrossIdDTO();
crossIdDTO.setCrossId(crossId);
RunningPlanDTO runningPlanDTO = runningPlanServiceImpl.listRunningPlan(crossIdDTO);
List<RunningPlanDTO.SchedulesPlanListElement> schedulesPlanList = runningPlanDTO.getSchedulesPlanList();
for (RunningPlanDTO.SchedulesPlanListElement schedulesPlan : schedulesPlanList) {
List<RunningPlanDTO.ExecListElement> execList = schedulesPlan.getExecList();
for (RunningPlanDTO.ExecListElement execListElement : execList) {
// 先查询特殊日期,再查询星期
List<String> specialDateList = execListElement.getSpecialDateList();
List<Integer> week = execListElement.getWeek();
if (CollectionUtil.isNotEmpty(specialDateList)) {
for (String specialDate : specialDateList) {
String substring = specialDate.substring(0, 10);
if (Objects.equals(dateStr, substring)) {
Integer planId = execListElement.getPlanId();
return planId;
}
}
} else if (CollectionUtil.isNotEmpty(week)) {
for (Integer day : week) {
// 1表示周日,2表示周一
int today = DateUtil.dayOfWeek(datetime);
today -= 1;
if (today == 0) {
today = 7;
}
if (day == today) {
Integer planId = execListElement.getPlanId();
return planId;
}
}
}
}
}
return null;
}
private List<AreaTreeVO> buildJuriList() { private List<AreaTreeVO> buildJuriList() {
List<AreaTreeVO> res = new ArrayList<>(); List<AreaTreeVO> res = new ArrayList<>();
BaseAreaInfoPO areaInfoPO = baseAreaInfoMapper.selectCityPolice(); BaseAreaInfoPO areaInfoPO = baseAreaInfoMapper.selectCityPolice();
......
...@@ -129,6 +129,7 @@ public class RunningPlanServiceImpl implements RunningPlanService { ...@@ -129,6 +129,7 @@ public class RunningPlanServiceImpl implements RunningPlanService {
execListElement.setSpecialDateList(specialDateList); execListElement.setSpecialDateList(specialDateList);
CrossPlanPO crossPlanPO = baseCrossPlanMapper.selectById(planId); CrossPlanPO crossPlanPO = baseCrossPlanMapper.selectById(planId);
execListElement.setPlanName(crossPlanPO.getName()); execListElement.setPlanName(crossPlanPO.getName());
execListElement.setPlanId(crossPlanPO.getId());
execList.add(execListElement); execList.add(execListElement);
} }
return execList; return execList;
......
package net.wanji.databus.bo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author Kent HAN
* @date 2022/11/9 17:21
*/
@Data
@ApiModel(value = "AreaDetailBO")
public class AreaDetailBO {
@ApiModelProperty(value = "页码", required = true)
private Integer pageNum;
@ApiModelProperty(value = "每页记录条数", required = true)
private Integer pageSize;
@ApiModelProperty( value = "区域ID", required = true)
private Integer areaId ;
@ApiModelProperty(value = "路口名称")
private String crossName;
@ApiModelProperty(value = "是否信控路口:1是;0否")
private Integer isSignal;
@ApiModelProperty(value = "控制模式:1定周期;2绿波协调;3黄闪;4全红;5关灯;6单点自适应;7全感应;8半感应;9行人过街")
private Integer controlMode;
@ApiModelProperty(value = "是否启动优化:1是;0否")
private Integer isStart;
@ApiModelProperty(value = "是否下发方案:1是;0否")
private Integer isSend;
}
package net.wanji.web.bo; package net.wanji.databus.bo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
package net.wanji.databus.dao.mapper; package net.wanji.databus.dao.mapper;
import net.wanji.databus.po.AreaDetailPOExt;
import net.wanji.databus.po.BaseAreaInfoPO; import net.wanji.databus.po.BaseAreaInfoPO;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -30,4 +31,7 @@ public interface BaseAreaInfoMapper { ...@@ -30,4 +31,7 @@ public interface BaseAreaInfoMapper {
List<BaseAreaInfoPO> selectByType(Integer type); List<BaseAreaInfoPO> selectByType(Integer type);
BaseAreaInfoPO selectCityPolice(); BaseAreaInfoPO selectCityPolice();
List<AreaDetailPOExt> selectJoinDetail(Integer areaId, String crossName, Integer isSignal, Integer isStart,
Integer isSend);
} }
...@@ -69,5 +69,7 @@ public class RunningPlanDTO { ...@@ -69,5 +69,7 @@ public class RunningPlanDTO {
private List<String> specialDateList; private List<String> specialDateList;
@ApiModelProperty(value = "执行日计划名", required = true) @ApiModelProperty(value = "执行日计划名", required = true)
private String planName; private String planName;
@ApiModelProperty(value = "执行日计划ID", required = true)
private Integer planId;
} }
} }
package net.wanji.databus.po;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "区域详情表连接查询实体")
public class AreaDetailPOExt {
@ApiModelProperty(value = "区域ID")
private Integer areaId;
@ApiModelProperty(value = "路口ID")
private String crossId;
@ApiModelProperty(value = "路口名称")
private String crossName;
@ApiModelProperty(value = "区域名称")
private String areaName;
@ApiModelProperty(value = "信号机编号")
private String code;
@ApiModelProperty(value = "厂商简称")
private String nickName ;
@ApiModelProperty(value = "信号机型号")
private String model ;
@ApiModelProperty(value = "信号机IP")
private String ip ;
@ApiModelProperty(value = "信号机端口")
private String port ;
@ApiModelProperty(value = "是否信控路口:1是;0否")
private Integer isSignal;
@ApiModelProperty(value = "控制模式:1定周期;2绿波协调;3黄闪;4全红;5关灯;6单点自适应;7全感应;8半感应;9行人过街")
private Integer controlMode;
@ApiModelProperty(value = "是否启动优化:1是;0否")
private Integer isStart;
@ApiModelProperty(value = "是否下发方案:1是;0否")
private Integer isSend;
}
\ No newline at end of file
package net.wanji.databus.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "区域详情")
public class AreaDetailVO {
@ApiModelProperty(value = "区域ID")
private Integer areaId;
@ApiModelProperty(value = "路口ID")
private String crossId;
@ApiModelProperty(value = "路口名称")
private String crossName;
@ApiModelProperty(value = "区域名称")
private String areaName;
@ApiModelProperty(value = "信号机编号")
private String code;
@ApiModelProperty(value = "厂商简称")
private String nickName ;
@ApiModelProperty(value = "信号机型号")
private String model ;
@ApiModelProperty(value = "信号机IP/端口")
private String ipPort ;
@ApiModelProperty(value = "是否信控路口:1是;0否")
private Integer isSignal;
@ApiModelProperty(value = "控制模式:1定周期;2绿波协调;3黄闪;4全红;5关灯;6单点自适应;7全感应;8半感应;9行人过街")
private Integer controlMode;
@ApiModelProperty(value = "是否启动优化:1是;0否")
private Integer isStart;
@ApiModelProperty(value = "是否下发方案:1是;0否")
private Integer isSend;
}
\ No newline at end of file
...@@ -62,13 +62,42 @@ ...@@ -62,13 +62,42 @@
<select id="selectByType" resultType="net.wanji.databus.po.BaseAreaInfoPO"> <select id="selectByType" resultType="net.wanji.databus.po.BaseAreaInfoPO">
select <include refid="baseColumnList"/> select <include refid="baseColumnList"/>
from t_base_area_info from t_base_area_info
where type = #{type}; where type = #{type}
</select> </select>
<select id="selectCityPolice" resultType="net.wanji.databus.po.BaseAreaInfoPO"> <select id="selectCityPolice" resultType="net.wanji.databus.po.BaseAreaInfoPO">
select <include refid="baseColumnList"/> select <include refid="baseColumnList"/>
from t_base_area_info from t_base_area_info
where type = 0; where type = 0
</select> </select>
<select id="selectJoinDetail" resultType="net.wanji.databus.po.AreaDetailPOExt">
SELECT t_area.id AS areaId, t_cross.id AS crossId, t_cross.name as crossName,
t_area.name AS areaName, t_signal.code AS code, t_manu.nick_name as nickName,
t_signal.model AS model, t_signal.ip AS ip, t_signal.port AS port,
t_cross.is_signal AS isSignal, t_cross.is_start AS isStart, t_cross.is_send AS isSend
FROM t_base_area_info t_area
JOIN t_base_area_cross t_area_cross ON t_area.id = t_area_cross.area_id
JOIN t_base_cross_info t_cross ON t_area_cross.cross_id = t_cross.id
JOIN t_signal_utc_changsha.t_cross_info t_signal ON t_signal.id = t_cross.id
JOIN t_signal_utc_changsha.t_manufacturer_info t_manu ON t_signal.manufacturer_id = t_manu.id
<where>
t_area.id = #{areaId}
<if test="crossName != null and crossName != ''">
AND t_cross.name like concat('%',#{crossName},'%')
</if>
<if test="isSignal != null">
AND t_cross.is_signal = #{isSignal}
</if>
<if test="isStart != null">
AND t_cross.is_start = #{isStart}
</if>
<if test="isSend != null">
AND t_cross.is_send = #{isSend}
</if>
</where>
ORDER BY t_cross.id
</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