Commit 2f8b1844 authored by hanbing's avatar hanbing

[add] 快速特勤,添加特勤

parent e7e45a4a
package net.wanji.web.bo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.wanji.web.vo.RouteElementVO;
import javax.validation.constraints.Pattern;
import java.util.List;
/**
* @author Kent HAN
* @date 2022/11/8 11:01
*/
@Data
@ApiModel(value = "AddSpecialServiceBO", description = "快速特勤-添加特勤输入参数")
public class AddSpecialServiceBO {
@ApiModelProperty(value = "特勤名称")
@Pattern(regexp = "^[\\u4E00-\\u9FA5\\w\\-]{0,16}$", message = "只能包含中文、英文、数字、下划线和中横线,0~16个字符")
String name;
@ApiModelProperty(value = "起点坐标,格式:112.968523,28.179455")
String startLocation;
@ApiModelProperty(value = "终点坐标,格式:112.968523,28.179455")
String endLocation;
@ApiModelProperty(value = "特勤路线")
List<RouteElementVO> route;
@ApiModelProperty(value = "关联车辆")
@Pattern(regexp = "^[\\u4E00-\\u9FA5\\w\\-]{0,16}$", message = "编号只能包含中文、英文、数字、下划线和中横线,0~16个字符")
String plateNum;
}
...@@ -7,9 +7,9 @@ import io.swagger.annotations.ApiResponses; ...@@ -7,9 +7,9 @@ import io.swagger.annotations.ApiResponses;
import net.wanji.common.annotation.aspect.AspectLog; import net.wanji.common.annotation.aspect.AspectLog;
import net.wanji.common.enums.BaseEnum; import net.wanji.common.enums.BaseEnum;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.web.bo.AddSpecialServiceBO;
import net.wanji.web.bo.IsValidPointBO; import net.wanji.web.bo.IsValidPointBO;
import net.wanji.web.bo.SpecialServiceRouteBO; import net.wanji.web.bo.SpecialServiceRouteBO;
import net.wanji.web.common.exception.CrossRelationException;
import net.wanji.web.service.SpecialServiceService; import net.wanji.web.service.SpecialServiceService;
import net.wanji.web.vo.RouteElementVO; import net.wanji.web.vo.RouteElementVO;
import net.wanji.web.vo.specialService.*; import net.wanji.web.vo.specialService.*;
...@@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
...@@ -61,8 +62,8 @@ public class SpecialServiceController { ...@@ -61,8 +62,8 @@ public class SpecialServiceController {
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON) produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/addSpecialService", @PostMapping(value = "/addSpecialService",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON) produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
public JsonViewObject addSpecialService(@RequestBody AddSpecialServiceInVO addSpecialServiceInVO) { public JsonViewObject addSpecialService(@RequestBody @Valid AddSpecialServiceBO addSpecialServiceBO) {
specialServiceService.addSpecialService(addSpecialServiceInVO); specialServiceService.addSpecialService(addSpecialServiceBO);
JsonViewObject jsonViewObject = JsonViewObject.newInstance(); JsonViewObject jsonViewObject = JsonViewObject.newInstance();
return jsonViewObject.success(); return jsonViewObject.success();
...@@ -109,37 +110,6 @@ public class SpecialServiceController { ...@@ -109,37 +110,6 @@ public class SpecialServiceController {
return jsonViewObject.success(); return jsonViewObject.success();
} }
@AspectLog(description = "添加路口", operationType = BaseEnum.OperationTypeEnum.INSERT)
@ApiOperation(value = "添加路口", notes = "添加路口", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/addCross",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
public JsonViewObject addCross(@RequestBody AddCrossInVO addCrossInVO) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try {
specialServiceService.addCross(addCrossInVO);
return jsonViewObject.success();
} catch (CrossRelationException e) {
return jsonViewObject.fail("路段关系不正确");
}
}
@AspectLog(description = "路口列表", operationType = BaseEnum.OperationTypeEnum.QUERY)
@ApiOperation(value = "路口列表", notes = "路口列表", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/crossList",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = CrossListOutVO.class),
})
public JsonViewObject crossList(@RequestBody CrossListInVO crossListInVO) {
Integer specialServiceId = crossListInVO.getSpecialServiceId();
List<CrossListOutVO> crossListOutVOList = specialServiceService.crossList(specialServiceId);
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
return jsonViewObject.success(crossListOutVOList);
}
@AspectLog(description = "更新路口", operationType = BaseEnum.OperationTypeEnum.UPDATE) @AspectLog(description = "更新路口", operationType = BaseEnum.OperationTypeEnum.UPDATE)
@ApiOperation(value = "更新路口", notes = "更新路口", response = JsonViewObject.class, @ApiOperation(value = "更新路口", notes = "更新路口", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON) produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
...@@ -164,29 +134,6 @@ public class SpecialServiceController { ...@@ -164,29 +134,6 @@ public class SpecialServiceController {
return jsonViewObject.success(); return jsonViewObject.success();
} }
@AspectLog(description = "一键特勤", operationType = BaseEnum.OperationTypeEnum.UPDATE)
@ApiOperation(value = "一键特勤", notes = "一键特勤", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/enableSpecialService",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
public JsonViewObject enableSpecialService(@RequestBody EnableDisableSpecialServiceInVO enableDisableSpecialServiceInVO) {
specialServiceService.enableSpecialService(enableDisableSpecialServiceInVO);
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
return jsonViewObject.success();
}
@AspectLog(description = "一键取消特勤", operationType = BaseEnum.OperationTypeEnum.DELETE)
@ApiOperation(value = "一键取消特勤", notes = "一键取消特勤", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/disableSpecialService",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
public JsonViewObject disableSpecialService(@RequestBody EnableDisableSpecialServiceInVO enableDisableSpecialServiceInVO) {
specialServiceService.disableSpecialService(enableDisableSpecialServiceInVO);
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
return jsonViewObject.success();
}
@AspectLog(description = "路口进口列表", operationType = BaseEnum.OperationTypeEnum.QUERY) @AspectLog(description = "路口进口列表", operationType = BaseEnum.OperationTypeEnum.QUERY)
@ApiOperation(value = "路口进口列表", notes = "路口进口列表", response = JsonViewObject.class, @ApiOperation(value = "路口进口列表", notes = "路口进口列表", response = JsonViewObject.class,
......
package net.wanji.web.mapper; package net.wanji.web.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import net.wanji.web.po.SpecialServiceCrossPO; import net.wanji.web.po.SpecialServiceCrossPO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -12,7 +11,6 @@ import java.util.List; ...@@ -12,7 +11,6 @@ import java.util.List;
* @date 2022/11/8 14:48 * @date 2022/11/8 14:48
*/ */
@Repository @Repository
@DS("webService")
public interface SpecialServiceCrossMapper { public interface SpecialServiceCrossMapper {
void insertOne(SpecialServiceCrossPO specialServiceCrossPO); void insertOne(SpecialServiceCrossPO specialServiceCrossPO);
......
package net.wanji.web.mapper; package net.wanji.web.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import net.wanji.web.po.SpecialServicePO; import net.wanji.web.po.SpecialServicePO;
import net.wanji.web.vo.specialService.UpdateSpecialServiceInVO; import net.wanji.web.vo.specialService.UpdateSpecialServiceInVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -13,7 +12,6 @@ import java.util.List; ...@@ -13,7 +12,6 @@ import java.util.List;
* @date 2022/11/8 11:14 * @date 2022/11/8 11:14
*/ */
@Repository @Repository
@DS("webService")
public interface SpecialServiceMapper { public interface SpecialServiceMapper {
void insertOne(SpecialServicePO specialServicePO); void insertOne(SpecialServicePO specialServicePO);
......
...@@ -19,21 +19,23 @@ public class SpecialServiceCrossPO { ...@@ -19,21 +19,23 @@ public class SpecialServiceCrossPO {
/** 特勤ID */ /** 特勤ID */
@ApiModelProperty(name = "特勤ID",notes = "") @ApiModelProperty(name = "特勤ID",notes = "")
private Integer specialServiceId ; private Integer specialServiceId ;
@ApiModelProperty(name = "分组名称",notes = "")
private String groupName = "未分组路口";
/** 路口编号 */ /** 路口编号 */
@ApiModelProperty(name = "路口编号",notes = "") @ApiModelProperty(name = "路口ID",notes = "")
private String crossId ; private String crossId ;
/** 进口方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北 */ /** 进口方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北 */
@ApiModelProperty(name = "进口方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "") @ApiModelProperty(name = "驶入方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
private Integer dir = 1 ; private Integer inDir ;
/** 转向:l左转;s直行;r右转;u掉头 */ @ApiModelProperty(name = "驶出方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
@ApiModelProperty(name = "转向:l左转;s直行;r右转;u掉头",notes = "") private Integer outDir ;
private String turn ; @ApiModelProperty(name = "路口顺序号",notes = "")
/** 顺序号 */
@ApiModelProperty(name = "顺序号",notes = "")
private Integer sort ; private Integer sort ;
/** 执行状态:1成功;0失败 */ @ApiModelProperty(name = "锁定状态:1锁定;0解锁",notes = "")
@ApiModelProperty(name = "执行状态:1成功;0失败",notes = "") private Integer status ;
private Integer status = 0 ; @ApiModelProperty(name = "自动解锁:1是;0否",notes = "")
private Integer autoUnlock ;
/** 创建时间 */ /** 创建时间 */
@ApiModelProperty(name = "创建时间",notes = "") @ApiModelProperty(name = "创建时间",notes = "")
private Date gmtCreate ; private Date gmtCreate ;
......
...@@ -12,29 +12,27 @@ import java.util.Date; ...@@ -12,29 +12,27 @@ import java.util.Date;
*/ */
@Data @Data
public class SpecialServicePO { public class SpecialServicePO {
/** 特勤ID */
@Id @Id
@ApiModelProperty(name = "特勤ID",notes = "") @ApiModelProperty(name = "特勤ID",notes = "")
private Integer id ; private Integer id ;
/** 特勤名称 */
@ApiModelProperty(name = "特勤名称",notes = "") @ApiModelProperty(name = "特勤名称",notes = "")
private String name ; private String name ;
/** 控制类型:1手动;2自动 */ @ApiModelProperty(name = "关联车辆车牌号",notes = "")
private String plateNum ;
@ApiModelProperty(name = "控制类型:1手动;2自动",notes = "") @ApiModelProperty(name = "控制类型:1手动;2自动",notes = "")
private Integer controlModel = 1; private Integer controlModel = 1;
/** 特勤线路长度 */
@ApiModelProperty(name = "特勤线路长度",notes = "") @ApiModelProperty(name = "特勤线路长度",notes = "")
private Double length = 0.0 ; private Double length = 0.0 ;
/** 是否被删除:1是;0否 */
@ApiModelProperty(name = "是否被删除:1是;0否",notes = "")
private Integer isDel = 0 ;
/** 特勤状态:1执行;0未执行 */
@ApiModelProperty(name = "特勤状态:1执行;0未执行",notes = "") @ApiModelProperty(name = "特勤状态:1执行;0未执行",notes = "")
private Integer status = 0 ; private Integer status = 0 ;
/** 创建时间 */ @ApiModelProperty(value = "起点坐标,格式:112.968523,28.179455")
String startLocation;
@ApiModelProperty(value = "终点坐标,格式:112.968523,28.179455")
String endLocation;
@ApiModelProperty(name = "是否被删除:1是;0否",notes = "")
private Integer isDel = 0 ;
@ApiModelProperty(name = "创建时间",notes = "") @ApiModelProperty(name = "创建时间",notes = "")
private Date gmtCreate ; private Date gmtCreate ;
/** 修改时间 */
@ApiModelProperty(name = "修改时间",notes = "") @ApiModelProperty(name = "修改时间",notes = "")
private Date gmtModified ; private Date gmtModified ;
} }
package net.wanji.web.service; package net.wanji.web.service;
import net.wanji.web.bo.AddSpecialServiceBO;
import net.wanji.web.bo.IsValidPointBO; import net.wanji.web.bo.IsValidPointBO;
import net.wanji.web.bo.SpecialServiceRouteBO; import net.wanji.web.bo.SpecialServiceRouteBO;
import net.wanji.web.vo.RouteElementVO; import net.wanji.web.vo.RouteElementVO;
...@@ -13,7 +14,7 @@ import java.util.Set; ...@@ -13,7 +14,7 @@ import java.util.Set;
* @date 2022/11/8 11:06 * @date 2022/11/8 11:06
*/ */
public interface SpecialServiceService { public interface SpecialServiceService {
void addSpecialService(AddSpecialServiceInVO addSpecialServiceInVO); void addSpecialService(AddSpecialServiceBO addSpecialServiceBO);
List<ListSpecialServicesOutVO> listSpecialServices(String adCode); List<ListSpecialServicesOutVO> listSpecialServices(String adCode);
...@@ -21,18 +22,10 @@ public interface SpecialServiceService { ...@@ -21,18 +22,10 @@ public interface SpecialServiceService {
void deleteSpecialService(Integer id); void deleteSpecialService(Integer id);
void addCross(AddCrossInVO addCrossInVO);
List<CrossListOutVO> crossList(Integer specialServiceId);
void updateCross(UpdateCrossInVO updateCrossInVO); void updateCross(UpdateCrossInVO updateCrossInVO);
void deleteCross(DeleteCrossInVO deleteCrossInVO); void deleteCross(DeleteCrossInVO deleteCrossInVO);
void enableSpecialService(EnableDisableSpecialServiceInVO enableDisableSpecialServiceInVO);
void disableSpecialService(EnableDisableSpecialServiceInVO enableDisableSpecialServiceInVO);
Set<String> crossInList(String crossId); Set<String> crossInList(String crossId);
List<List<RouteElementVO>> specialServiceRoute(SpecialServiceRouteBO specialServiceRouteBO); List<List<RouteElementVO>> specialServiceRoute(SpecialServiceRouteBO specialServiceRouteBO);
......
...@@ -2,7 +2,6 @@ package net.wanji.web.service.impl; ...@@ -2,7 +2,6 @@ package net.wanji.web.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpUtil;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import net.wanji.common.gts.GeometryUtil; import net.wanji.common.gts.GeometryUtil;
...@@ -14,13 +13,10 @@ import net.wanji.databus.dao.mapper.BaseCrossInfoMapper; ...@@ -14,13 +13,10 @@ import net.wanji.databus.dao.mapper.BaseCrossInfoMapper;
import net.wanji.databus.dao.mapper.CrossDirDataRealtimeMapper; import net.wanji.databus.dao.mapper.CrossDirDataRealtimeMapper;
import net.wanji.databus.dao.mapper.RidInfoMapper; import net.wanji.databus.dao.mapper.RidInfoMapper;
import net.wanji.databus.po.BaseCrossInfoPO; import net.wanji.databus.po.BaseCrossInfoPO;
import net.wanji.databus.po.TBaseCrossInfo; import net.wanji.web.bo.AddSpecialServiceBO;
import net.wanji.web.bo.IsValidPointBO; import net.wanji.web.bo.IsValidPointBO;
import net.wanji.web.bo.SpecialServiceRouteBO; import net.wanji.web.bo.SpecialServiceRouteBO;
import net.wanji.web.common.enums.CrossDirEnum; import net.wanji.web.common.enums.CrossDirEnum;
import net.wanji.web.common.enums.CrossPhasePlanTurnTypeEnum;
import net.wanji.web.common.enums.SpecialServiceCrossTurnEnum;
import net.wanji.web.common.exception.CrossRelationException;
import net.wanji.web.mapper.*; import net.wanji.web.mapper.*;
import net.wanji.web.po.CrossDirTurnPO; import net.wanji.web.po.CrossDirTurnPO;
import net.wanji.web.po.RidInfoPO; import net.wanji.web.po.RidInfoPO;
...@@ -28,7 +24,10 @@ import net.wanji.web.po.SpecialServiceCrossPO; ...@@ -28,7 +24,10 @@ import net.wanji.web.po.SpecialServiceCrossPO;
import net.wanji.web.po.SpecialServicePO; import net.wanji.web.po.SpecialServicePO;
import net.wanji.web.service.SpecialServiceService; import net.wanji.web.service.SpecialServiceService;
import net.wanji.web.vo.RouteElementVO; import net.wanji.web.vo.RouteElementVO;
import net.wanji.web.vo.specialService.*; import net.wanji.web.vo.specialService.DeleteCrossInVO;
import net.wanji.web.vo.specialService.ListSpecialServicesOutVO;
import net.wanji.web.vo.specialService.UpdateCrossInVO;
import net.wanji.web.vo.specialService.UpdateSpecialServiceInVO;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Geometry;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
...@@ -68,11 +67,101 @@ public class SpecialServiceServiceImpl implements SpecialServiceService { ...@@ -68,11 +67,101 @@ public class SpecialServiceServiceImpl implements SpecialServiceService {
private CrossDirDataRealtimeMapper crossDirDataRealtimeMapper; private CrossDirDataRealtimeMapper crossDirDataRealtimeMapper;
@Override @Override
public void addSpecialService(AddSpecialServiceInVO addSpecialServiceInVO) { @Transactional
public void addSpecialService(AddSpecialServiceBO addSpecialServiceBO) {
// 插入特勤表
SpecialServicePO specialServicePO = new SpecialServicePO(); SpecialServicePO specialServicePO = new SpecialServicePO();
String name = addSpecialServiceInVO.getName(); specialServicePO.setName(addSpecialServiceBO.getName());
specialServicePO.setName(name); specialServicePO.setPlateNum(addSpecialServiceBO.getPlateNum());
specialServicePO.setStartLocation(addSpecialServiceBO.getStartLocation());
specialServicePO.setEndLocation(addSpecialServiceBO.getEndLocation());
specialServiceMapper.insertOne(specialServicePO); specialServiceMapper.insertOne(specialServicePO);
Integer specialServiceId = specialServicePO.getId();
// 插入特勤路口关系表
List<RouteElementVO> route = addSpecialServiceBO.getRoute();
for (int i = 0; i < route.size(); i++) {
RouteElementVO routeElementVO = route.get(i);
String startName = routeElementVO.getStartName();
BaseCrossInfoPO startCross = baseCrossInfoMapper.selectByName(startName);
String startCrossId = startCross.getId();
String endName = routeElementVO.getEndName();
BaseCrossInfoPO endCross = baseCrossInfoMapper.selectByName(endName);
String endCrossId = endCross.getId();
RidInfoEntity ridInfoEntity = ridInfoMapper.selectByStartEnd(startCrossId, endCrossId);
if (i != route.size() - 1) { // 非结束路段
SpecialServiceCrossPO specialServiceCrossPO = new SpecialServiceCrossPO();
specialServiceCrossPO.setSpecialServiceId(specialServiceId);
specialServiceCrossPO.setCrossId(startCrossId);
// 计算方向
if (i == 0) { // 开始路口
specialServiceCrossPO.setInDir(0);
Integer outDir = ridInfoEntity.getOutDir();
specialServiceCrossPO.setOutDir(outDir);
} else { // 中间路口
// 获取上一个路段
RouteElementVO preRoute = route.get(i - 1);
String preStartName = preRoute.getStartName();
BaseCrossInfoPO preStartCross = baseCrossInfoMapper.selectByName(preStartName);
String preStartCrossId = preStartCross.getId();
String preEndName = preRoute.getEndName();
BaseCrossInfoPO preEndCross = baseCrossInfoMapper.selectByName(preEndName);
String preEndCrossId = preEndCross.getId();
RidInfoEntity preRid = ridInfoMapper.selectByStartEnd(preStartCrossId, preEndCrossId);
// 当前路口驶入方向
Integer inDir = preRid.getInDir();
// 当前路口使出方向
Integer outDir = ridInfoEntity.getOutDir();
specialServiceCrossPO.setInDir(inDir);
specialServiceCrossPO.setOutDir(outDir);
}
specialServiceCrossPO.setSort(i + 1);
specialServiceCrossPO.setStatus(0);
specialServiceCrossPO.setAutoUnlock(0);
specialServiceCrossMapper.insertOne(specialServiceCrossPO);
} else { // 结束路段
// 开始路口
SpecialServiceCrossPO specialServiceCrossPO = new SpecialServiceCrossPO();
specialServiceCrossPO.setSpecialServiceId(specialServiceId);
specialServiceCrossPO.setCrossId(startCrossId);
// 获取上一个路段
RouteElementVO preRoute = route.get(i - 1);
String preStartName = preRoute.getStartName();
BaseCrossInfoPO preStartCross = baseCrossInfoMapper.selectByName(preStartName);
String preStartCrossId = preStartCross.getId();
String preEndName = preRoute.getEndName();
BaseCrossInfoPO preEndCross = baseCrossInfoMapper.selectByName(preEndName);
String preEndCrossId = preEndCross.getId();
RidInfoEntity preRid = ridInfoMapper.selectByStartEnd(preStartCrossId, preEndCrossId);
// 当前路口驶入方向
Integer inDir = preRid.getInDir();
// 当前路口使出方向
Integer outDir = ridInfoEntity.getOutDir();
specialServiceCrossPO.setInDir(inDir);
specialServiceCrossPO.setOutDir(outDir);
specialServiceCrossPO.setSort(i + 1);
specialServiceCrossPO.setStatus(0);
specialServiceCrossPO.setAutoUnlock(0);
specialServiceCrossMapper.insertOne(specialServiceCrossPO);
// 结束路口
SpecialServiceCrossPO specialServiceCrossPOEnd = new SpecialServiceCrossPO();
specialServiceCrossPOEnd.setSpecialServiceId(specialServiceId);
specialServiceCrossPOEnd.setCrossId(endCrossId);
Integer inDirEnd = ridInfoEntity.getInDir();
specialServiceCrossPOEnd.setInDir(inDirEnd);
specialServiceCrossPOEnd.setOutDir(0);
specialServiceCrossPOEnd.setSort(i + 2);
specialServiceCrossPOEnd.setStatus(0);
specialServiceCrossPOEnd.setAutoUnlock(0);
specialServiceCrossMapper.insertOne(specialServiceCrossPOEnd);
}
}
} }
@Override @Override
...@@ -113,96 +202,6 @@ public class SpecialServiceServiceImpl implements SpecialServiceService { ...@@ -113,96 +202,6 @@ public class SpecialServiceServiceImpl implements SpecialServiceService {
specialServiceCrossMapper.deleteCrossBySpecialServiceId(id); specialServiceCrossMapper.deleteCrossBySpecialServiceId(id);
} }
@Override
@Transactional
public void addCross(AddCrossInVO addCrossInVO) throws RuntimeException{
Integer specialServiceId = addCrossInVO.getSpecialServiceId();
String endCrossid = addCrossInVO.getCrossId();
SpecialServiceCrossPO specialServiceCrossPO = new SpecialServiceCrossPO();
BeanUtils.copyProperties(addCrossInVO, specialServiceCrossPO);
// 构造顺序号
Integer maxSort = specialServiceCrossMapper.getMaxSort(specialServiceId);
if (maxSort == null) {
maxSort = 1;
} else {
maxSort++;
}
if (maxSort > 1) {
// 插入路段长度,插入转向
// 查询上一个路口ID
Integer preSort = maxSort - 1;
String startCrossid = specialServiceCrossMapper.selectCrossIdBySort(specialServiceId, preSort);
// 查询路段
RidInfoPO ridInfoPO = customRidInfoMapper.selectOne(startCrossid, endCrossid);
// 路段关系不正确
if (ridInfoPO == null) {
throw new CrossRelationException("路段关系不正确");
}
// 插入路段长度
Double roadLength = ridInfoPO.getLength();
Double oldLength = specialServiceMapper.selectRoadLength(specialServiceId);
oldLength += roadLength;
specialServiceMapper.updateLength(specialServiceId, oldLength);
// 插入上一个路口转向
String startCrossOutDirId = ridInfoPO.getStartCrossdirid();
Integer startCrossInDir = specialServiceCrossMapper.selectStartCrossInDir(specialServiceId, startCrossid);
String startCrossInDirId = startCrossid + "_" + startCrossInDir + "_2_1";
CrossDirTurnPO crossDirTurnPO = crossDirTurnMapper.selectOneByInAndOutIds(startCrossInDirId, startCrossOutDirId);
String turntype = crossDirTurnPO.getTurntype();
specialServiceCrossMapper.updateTurn(specialServiceId, startCrossid, turntype);
// 更新当前路口进口
String endDirCode = ridInfoPO.getEndDir();
Integer endDirInt = Integer.parseInt(endDirCode);
specialServiceCrossPO.setDir(endDirInt);
}
specialServiceCrossPO.setSort(maxSort);
specialServiceCrossMapper.insertOne(specialServiceCrossPO);
}
@Override
public List<CrossListOutVO> crossList(Integer specialServiceId) {
List<SpecialServiceCrossPO> specialServiceCrossPOList =
specialServiceCrossMapper.selectBySpecialServiceId(specialServiceId);
List<CrossListOutVO> crossListOutVOList = new ArrayList<>();
for (int i = 0; i < specialServiceCrossPOList.size(); i++) {
SpecialServiceCrossPO specialServiceCrossPO = specialServiceCrossPOList.get(i);
CrossListOutVO crossListOutVO = new CrossListOutVO();
String crossId = specialServiceCrossPO.getCrossId();
crossListOutVO.setCrossId(crossId);
Integer sort = specialServiceCrossPO.getSort();
crossListOutVO.setSort(sort);
crossListOutVO.setStatus(specialServiceCrossPO.getStatus());
TBaseCrossInfo tBaseCrossInfo = tBaseBaseCrossInfoMapper.selectByPrimaryKey(specialServiceCrossPO.getCrossId());
// 经纬度
String location = tBaseCrossInfo.getLocation();
double[] lonLat = CrossUtil.getLonLat(location);
crossListOutVO.setLongitude(lonLat[0]);
crossListOutVO.setLatitude(lonLat[1]);
// 路口名称
crossListOutVO.setName(tBaseCrossInfo.getName());
// 获取控制方向
Integer dirCode = specialServiceCrossPO.getDir();
String dir = CrossDirEnum.getMsgByCode(dirCode);
String turnCode = specialServiceCrossPO.getTurn();
if (turnCode != null) {
String turn = SpecialServiceCrossTurnEnum.getMsgByCode(turnCode);
String dirAndTurn = dir + turn;
crossListOutVO.setDirAndTurn(dirAndTurn);
}
// 获取wkt
if (i < specialServiceCrossPOList.size() - 1) {
SpecialServiceCrossPO nextPO = specialServiceCrossPOList.get(i + 1);
String startCrossid = specialServiceCrossPO.getCrossId();
String endCrossid = nextPO.getCrossId();
String wkt = customRidInfoMapper.selectWkt(startCrossid, endCrossid);
crossListOutVO.setWkt(wkt);
}
crossListOutVOList.add(crossListOutVO);
}
return crossListOutVOList;
}
@Override @Override
@Transactional @Transactional
public void updateCross(UpdateCrossInVO updateCrossInVO) { public void updateCross(UpdateCrossInVO updateCrossInVO) {
...@@ -245,85 +244,6 @@ public class SpecialServiceServiceImpl implements SpecialServiceService { ...@@ -245,85 +244,6 @@ public class SpecialServiceServiceImpl implements SpecialServiceService {
specialServiceCrossMapper.deleteCross(specialServiceId, crossId); specialServiceCrossMapper.deleteCross(specialServiceId, crossId);
} }
@Override
public void enableSpecialService(EnableDisableSpecialServiceInVO enableDisableSpecialServiceInVO) {
Integer specialServiceId = enableDisableSpecialServiceInVO.getSpecialServiceId();
specialServiceMapper.updateStatusEnable(specialServiceId);
List<SpecialServiceCrossPO> specialServiceCrossPOList =
specialServiceCrossMapper.selectBySpecialServiceId(specialServiceId);
for (SpecialServiceCrossPO specialServiceCrossPO : specialServiceCrossPOList) {
// 构造请求体
EnableDisableSpecialServiceOutVO enableDisableSpecialServiceOutVO = new EnableDisableSpecialServiceOutVO();
PhaseLockVO phaseLockVO = new PhaseLockVO();
Integer dirInt = specialServiceCrossPO.getDir();
String dirStr = dirInt.toString();
String turnStr = specialServiceCrossPO.getTurn();
String turnCode = CrossPhasePlanTurnTypeEnum.getCodeByMsg(turnStr);
String phaseId = crossPhasePlanMapper.selectPhaseId(dirStr, turnCode);
phaseLockVO.setPhaseid(phaseId);
List<PhaseLockVO> phaseLockVOList = Arrays.asList(phaseLockVO);
enableDisableSpecialServiceOutVO.setPhases(phaseLockVOList);
enableDisableSpecialServiceOutVO.setCommand(1);
String crossId = specialServiceCrossPO.getCrossId();
// 发送请求
String url = "http://10.102.1.182/utc/controlCommand/lockControl";
String s = gson.toJson(enableDisableSpecialServiceOutVO);
String response = HttpUtil.post(url, s);
EnableDisableSpecialServiceResponseVO enableDisableSpecialServiceResponseVO =
gson.fromJson(response, EnableDisableSpecialServiceResponseVO.class);
Boolean success = enableDisableSpecialServiceResponseVO.getSuccess();
// 更新路口状态
if (success) {
specialServiceCrossMapper.updateStatusSuccess(specialServiceId, crossId);
} else {
specialServiceCrossMapper.updateStatusFail(specialServiceId, crossId);
}
}
}
@Override
public void disableSpecialService(EnableDisableSpecialServiceInVO enableDisableSpecialServiceInVO) {
Integer specialServiceId = enableDisableSpecialServiceInVO.getSpecialServiceId();
specialServiceMapper.updateStatusDisable(specialServiceId);
List<SpecialServiceCrossPO> specialServiceCrossPOList =
specialServiceCrossMapper.selectBySpecialServiceId(specialServiceId);
for (SpecialServiceCrossPO specialServiceCrossPO : specialServiceCrossPOList) {
// 构造请求体
EnableDisableSpecialServiceOutVO enableDisableSpecialServiceOutVO = new EnableDisableSpecialServiceOutVO();
PhaseLockVO phaseLockVO = new PhaseLockVO();
Integer dirInt = specialServiceCrossPO.getDir();
String dirStr = dirInt.toString();
String turnStr = specialServiceCrossPO.getTurn();
String turnCode = CrossPhasePlanTurnTypeEnum.getCodeByMsg(turnStr);
String phaseId = crossPhasePlanMapper.selectPhaseId(dirStr, turnCode);
phaseLockVO.setPhaseid(phaseId);
List<PhaseLockVO> phaseLockVOList = Arrays.asList(phaseLockVO);
enableDisableSpecialServiceOutVO.setPhases(phaseLockVOList);
enableDisableSpecialServiceOutVO.setCommand(0);
String crossId = specialServiceCrossPO.getCrossId();
// 发送请求
String url = "http://10.102.1.182/utc/controlCommand/lockControl";
String s = gson.toJson(enableDisableSpecialServiceOutVO);
String response = HttpUtil.post(url, s);
EnableDisableSpecialServiceResponseVO enableDisableSpecialServiceResponseVO =
gson.fromJson(response, EnableDisableSpecialServiceResponseVO.class);
Boolean success = enableDisableSpecialServiceResponseVO.getSuccess();
// 更新路口状态
if (success) {
specialServiceCrossMapper.updateStatusSuccess(specialServiceId, crossId);
} else {
specialServiceCrossMapper.updateStatusFail(specialServiceId, crossId);
}
}
}
@Override @Override
public Set<String> crossInList(String crossId) { public Set<String> crossInList(String crossId) {
List<String> crossInIdList = crossDirTurnMapper.crossInList(crossId); List<String> crossInIdList = crossDirTurnMapper.crossInList(crossId);
......
package net.wanji.web.vo; package net.wanji.web.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -8,6 +9,7 @@ import lombok.Data; ...@@ -8,6 +9,7 @@ import lombok.Data;
* @date 2023/5/16 14:27 * @date 2023/5/16 14:27
*/ */
@Data @Data
@ApiModel(value = "RouteElementVO", description = "特勤路线列表元素")
public class RouteElementVO { public class RouteElementVO {
@ApiModelProperty(value = "起点坐标") @ApiModelProperty(value = "起点坐标")
private String startLonLat; private String startLonLat;
......
package net.wanji.web.vo.specialService;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author Kent HAN
* @date 2022/11/8 11:01
*/
@Data
@ApiModel(value = "AddSpecialServiceInVO", description = "快速特勤-添加特勤输入参数")
public class AddSpecialServiceInVO {
@ApiModelProperty(value = "城市代码,示例值:110000")
String adCode;
@ApiModelProperty(value = "特勤名称")
String name;
}
...@@ -4,20 +4,26 @@ ...@@ -4,20 +4,26 @@
<!-- 通用查询映射结果 --> <!-- 通用查询映射结果 -->
<resultMap type="net.wanji.web.po.SpecialServiceCrossPO" id="BaseResultMap"> <resultMap type="net.wanji.web.po.SpecialServiceCrossPO" id="BaseResultMap">
<result property="id" column="id"/> <result property="id" column="id" />
<result property="specialServiceId" column="special_service_id"/> <result property="specialServiceId" column="special_service_id" />
<result property="crossId" column="cross_id"/> <result property="groupName" column="group_name" />
<result property="dir" column="dir"/> <result property="crossId" column="cross_id" />
<result property="turn" column="turn"/> <result property="inDir" column="in_dir" />
<result property="sort" column="sort"/> <result property="outDir" column="out_dir" />
<result property="status" column="status"/> <result property="sort" column="sort" />
<result property="gmtCreate" column="gmt_create"/> <result property="status" column="status" />
<result property="gmtModified" column="gmt_modified"/> <result property="autoUnlock" column="auto_unlock" />
<result property="gmtCreate" column="gmt_create" />
<result property="gmtModified" column="gmt_modified" />
</resultMap> </resultMap>
<insert id="insertOne"> <sql id="Base_Column_List">
insert into t_special_service_cross(special_service_id,cross_id,dir,sort,status) id,special_service_id,group_name,cross_id,in_dir,out_dir,sort,status,auto_unlock,gmt_create,gmt_modified
values (#{specialServiceId},#{crossId},#{dir},#{sort},#{status}) </sql>
<insert id="insertOne" keyProperty="id" useGeneratedKeys="true">
insert into t_special_service_cross(special_service_id,cross_id,in_dir,out_dir,sort,status,auto_unlock)
values (#{specialServiceId},#{crossId},#{inDir},#{outDir},#{sort},#{status},#{autoUnlock})
</insert> </insert>
<update id="updateTurn"> <update id="updateTurn">
......
...@@ -4,19 +4,26 @@ ...@@ -4,19 +4,26 @@
<!-- 通用查询映射结果 --> <!-- 通用查询映射结果 -->
<resultMap type="net.wanji.web.po.SpecialServicePO" id="BaseResultMap"> <resultMap type="net.wanji.web.po.SpecialServicePO" id="BaseResultMap">
<result property="id" column="id"/> <result property="id" column="id" />
<result property="name" column="name"/> <result property="name" column="name"/>
<result property="plateNum" column="plate_num"/>
<result property="controlModel" column="control_model"/> <result property="controlModel" column="control_model"/>
<result property="length" column="length"/> <result property="length" column="length"/>
<result property="isDel" column="is_del"/>
<result property="status" column="status"/> <result property="status" column="status"/>
<result property="startLocation" column="start_location"/>
<result property="endLocation" column="end_location"/>
<result property="isDel" column="is_del"/>
<result property="gmtCreate" column="gmt_create"/> <result property="gmtCreate" column="gmt_create"/>
<result property="gmtModified" column="gmt_modified"/> <result property="gmtModified" column="gmt_modified"/>
</resultMap> </resultMap>
<insert id="insertOne"> <sql id="Base_Column_List">
insert into t_special_service_info(name,control_model,length,is_del,status) id,name,plate_num,control_model,length,status,start_location,end_location,is_del,gmt_create,gmt_modified
values (#{name},#{controlModel},#{length},#{isDel},#{status}) </sql>
<insert id="insertOne" keyProperty="id" useGeneratedKeys="true">
insert into t_special_service_info(name,plate_num,control_model,length,status,start_location,end_location,is_del)
values (#{name},#{plateNum},#{controlModel},#{length},#{status},#{startLocation},#{endLocation},#{isDel})
</insert> </insert>
<insert id="insertLength"> <insert id="insertLength">
......
...@@ -28,7 +28,7 @@ public interface BaseCrossInfoMapper extends BaseMapper<TBaseCrossInfo> { ...@@ -28,7 +28,7 @@ public interface BaseCrossInfoMapper extends BaseMapper<TBaseCrossInfo> {
BaseCrossInfoPO selectById(String crossId); BaseCrossInfoPO selectById(String crossId);
List<BaseCrossInfoPO> selectByName(String name); BaseCrossInfoPO selectByName(String name);
List<BaseCrossInfoPO> selectAll(); List<BaseCrossInfoPO> selectAll();
......
...@@ -266,4 +266,10 @@ ...@@ -266,4 +266,10 @@
</if> </if>
</where> </where>
</select> </select>
<select id="selectByName" resultType="net.wanji.databus.po.BaseCrossInfoPO">
select <include refid="baseColumn"/>
from t_base_cross_info
where name = #{name}
</select>
</mapper> </mapper>
\ No newline at end of file
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