Commit df137b3f authored by hanbing's avatar hanbing

[add] 快速特勤,添加分组/修改分组

parent 05cef3a1
...@@ -137,6 +137,26 @@ public class SpecialServiceController { ...@@ -137,6 +137,26 @@ public class SpecialServiceController {
return JsonViewObject.newInstance().success(outDirList); return JsonViewObject.newInstance().success(outDirList);
} }
@AspectLog(description = "分组列表", operationType = BaseEnum.OperationTypeEnum.UPDATE)
@ApiOperation(value = "分组列表", notes = "分组列表", response = GroupListVO.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/groupList",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
public JsonViewObject groupList(@RequestBody SpecialServiceIdBO specialServiceIdBO) {
GroupListVO groupListVO = specialServiceService.groupList(specialServiceIdBO);
return JsonViewObject.newInstance().success(groupListVO);
}
@AspectLog(description = "修改分组", operationType = BaseEnum.OperationTypeEnum.UPDATE)
@ApiOperation(value = "修改分组", notes = "修改分组", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/updateGroup",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
public JsonViewObject updateGroup(@RequestBody GroupListVO groupListVO) {
specialServiceService.updateGroup(groupListVO);
return JsonViewObject.newInstance().success();
}
@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)
......
...@@ -46,4 +46,6 @@ public interface SpecialServiceCrossMapper { ...@@ -46,4 +46,6 @@ public interface SpecialServiceCrossMapper {
void deleteCrossBySpecialServiceId(@Param("id") Integer id); void deleteCrossBySpecialServiceId(@Param("id") Integer id);
Integer selectSpecialServiceIdByCrossId(String crossId); Integer selectSpecialServiceIdByCrossId(String crossId);
void updateGroupName(String crossId, String groupName);
} }
...@@ -40,4 +40,8 @@ public interface SpecialServiceService { ...@@ -40,4 +40,8 @@ public interface SpecialServiceService {
List<String> getOutDirList(CrossIdVO crossIdVO); List<String> getOutDirList(CrossIdVO crossIdVO);
void batchLock(List<LockControlVO> lockControlVOList); void batchLock(List<LockControlVO> lockControlVOList);
GroupListVO groupList(SpecialServiceIdBO specialServiceIdBO);
void updateGroup(GroupListVO groupListVO);
} }
...@@ -33,6 +33,7 @@ import org.springframework.stereotype.Service; ...@@ -33,6 +33,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* @author Kent HAN * @author Kent HAN
...@@ -663,6 +664,99 @@ public class SpecialServiceServiceImpl implements SpecialServiceService { ...@@ -663,6 +664,99 @@ public class SpecialServiceServiceImpl implements SpecialServiceService {
specialServiceMapper.updateStatusDisable(specialServiceId); specialServiceMapper.updateStatusDisable(specialServiceId);
} }
@Override
public GroupListVO groupList(SpecialServiceIdBO specialServiceIdBO) {
GroupListVO groupListVO = new GroupListVO();
Integer specialServiceId = specialServiceIdBO.getId();
SpecialServicePO specialServicePO = specialServiceMapper.selectById(specialServiceId);
String specialServiceName = specialServicePO.getName();
groupListVO.setSpecialServiceName(specialServiceName);
List<GroupListVO.GroupListElement> groupList = buildGroupList(specialServicePO);
groupListVO.setGroupList(groupList);
return groupListVO;
}
@Override
@Transactional
public void updateGroup(GroupListVO groupListVO) {
List<GroupListVO.GroupListElement> groupList = groupListVO.getGroupList();
for (GroupListVO.GroupListElement groupListElement : groupList) {
String groupName = groupListElement.getGroupName();
if (!"未分组路口".equals(groupName)){
List<CrossListElement> crossList = groupListElement.getCrossList();
for (CrossListElement crossListElement : crossList) {
String crossId = crossListElement.getCrossId();
specialServiceCrossMapper.updateGroupName(crossId, groupName);
}
}
}
}
private List<GroupListVO.GroupListElement> buildGroupList(SpecialServicePO specialServicePO) {
List<GroupListVO.GroupListElement> groupList = new ArrayList<>();
Integer specialServiceId = specialServicePO.getId();
List<SpecialServiceCrossPO> specialServiceCrossList =
specialServiceCrossMapper.selectBySpecialServiceId(specialServiceId);
Map<String, List<SpecialServiceCrossPO>> map = specialServiceCrossList.stream()
.collect(Collectors.groupingBy(SpecialServiceCrossPO::getGroupName));
for (String groupName : map.keySet()) {
GroupListVO.GroupListElement groupListElement = new GroupListVO.GroupListElement();
groupListElement.setGroupName(groupName);
List<SpecialServiceCrossPO> groupCrossList = map.get(groupName);
Collections.sort(groupCrossList, Comparator.comparing(SpecialServiceCrossPO::getSort));
StringBuilder wktBuilder = new StringBuilder();
List<SpecialServiceDetailVO.CrossListElement> crossList = new ArrayList<>();
buildWktAndCrosslist(wktBuilder, crossList, groupCrossList, groupName);
groupListElement.setWkt(wktBuilder.toString());
groupListElement.setCrossList(crossList);
groupList.add(groupListElement);
}
return groupList;
}
private void buildWktAndCrosslist(StringBuilder wktBuilder, List<CrossListElement> crossList,
List<SpecialServiceCrossPO> groupCrossList, String groupName) {
for (int i = 0; i < groupCrossList.size(); i++) {
SpecialServiceCrossPO currentCrossElement = groupCrossList.get(i);
// 构造wkt
if (!"未分组路口".equals(groupName) && i != groupCrossList.size() - 1) { // 有分组且不是组内最后一个路口
SpecialServiceCrossPO nextCrossElement = groupCrossList.get(i + 1);
String nextCrossId = nextCrossElement.getCrossId();
String currentCrossId = currentCrossElement.getCrossId();
RidInfoEntity ridInfoEntity = ridInfoMapper.selectByStartEnd(currentCrossId, nextCrossId);
String wktElement = ridInfoEntity.getWkt();
wktBuilder.append(wktElement).append(";");
}
// 构造crossList
String currentCrossId = currentCrossElement.getCrossId();
BaseCrossInfoPO currentCross = baseCrossInfoMapper.selectById(currentCrossId);
CrossListElement crossListElement = new CrossListElement();
crossListElement.setCrossName(currentCross.getName());
crossListElement.setCrossId(currentCrossId);
setElementStartEnd(groupCrossList, i, currentCrossId, crossListElement);
crossListElement.setStatus(currentCrossElement.getStatus());
crossListElement.setSort(currentCrossElement.getSort());
crossList.add(crossListElement);
}
// 去wkt掉最后一个分号
if (wktBuilder.length() > 0) {
wktBuilder.setLength(wktBuilder.length() - 1);
}
}
private List<SpecialServiceDetailVO.CrossListElement> buildCrossList(Integer specialServiceId) { private List<SpecialServiceDetailVO.CrossListElement> buildCrossList(Integer specialServiceId) {
List<SpecialServiceDetailVO.CrossListElement> crossList = new ArrayList<>(); List<SpecialServiceDetailVO.CrossListElement> crossList = new ArrayList<>();
List<SpecialServiceCrossPO> specialServiceCrossList = List<SpecialServiceCrossPO> specialServiceCrossList =
...@@ -678,52 +772,7 @@ public class SpecialServiceServiceImpl implements SpecialServiceService { ...@@ -678,52 +772,7 @@ public class SpecialServiceServiceImpl implements SpecialServiceService {
crossListElement.setCrossName(baseCrossInfoPO.getName()); crossListElement.setCrossName(baseCrossInfoPO.getName());
crossListElement.setCrossId(crossId); crossListElement.setCrossId(crossId);
if (i == 0) { // 开始路口 setElementStartEnd(specialServiceCrossList, i, currentCrossId, crossListElement);
crossListElement.setRouteStart("");
SpecialServiceCrossPO nextCross = specialServiceCrossList.get(i + 1);
String nextCrossId = nextCross.getCrossId();
// 构建路名+方向
RidInfoEntity ridInfoEntity = ridInfoMapper.selectByStartEnd(currentCrossId, nextCrossId);
String name = ridInfoEntity.getName(); // 西湖路:湘江中路@书院路路段
String[] split = name.split(":");
String streetName = split[0];
Integer outDir = ridInfoEntity.getOutDir();
String ourDirMsg = CrossDirEnum.getMsgByCode(outDir);
crossListElement.setRouteEnd(streetName + ourDirMsg);
} else if (i == specialServiceCrossList.size() - 1) { // 结束路口
crossListElement.setRouteEnd("");
SpecialServiceCrossPO preCross = specialServiceCrossList.get(i - 1);
String preCrossId = preCross.getCrossId();
// 构建路名+方向
RidInfoEntity ridInfoEntity = ridInfoMapper.selectByStartEnd(preCrossId, currentCrossId);
String name = ridInfoEntity.getName(); // 西湖路:湘江中路@书院路路段
String[] split = name.split(":");
String streetName = split[0];
Integer inDir = ridInfoEntity.getInDir();
String inDirMsg = CrossDirEnum.getMsgByCode(inDir);
crossListElement.setRouteStart(streetName + inDirMsg);
} else { // 中间路口
SpecialServiceCrossPO preCross = specialServiceCrossList.get(i - 1);
SpecialServiceCrossPO nextCross = specialServiceCrossList.get(i + 1);
String preCrossId = preCross.getCrossId();
String nextCrossId = nextCross.getCrossId();
// 路线起点
RidInfoEntity ridInfoEntity = ridInfoMapper.selectByStartEnd(preCrossId, currentCrossId);
String name = ridInfoEntity.getName(); // 西湖路:湘江中路@书院路路段
String[] split = name.split(":");
String streetName = split[0];
Integer inDir = ridInfoEntity.getInDir();
String inDirMsg = CrossDirEnum.getMsgByCode(inDir);
crossListElement.setRouteStart(streetName + inDirMsg);
// 路线终点
RidInfoEntity ridInfoEntity2 = ridInfoMapper.selectByStartEnd(currentCrossId, nextCrossId);
String name2 = ridInfoEntity2.getName(); // 西湖路:湘江中路@书院路路段
String[] split2 = name2.split(":");
String streetName2 = split2[0];
Integer outDir = ridInfoEntity2.getOutDir();
String ourDirMsg = CrossDirEnum.getMsgByCode(outDir);
crossListElement.setRouteEnd(streetName2 + ourDirMsg);
}
crossListElement.setStatus(currentCross.getStatus()); crossListElement.setStatus(currentCross.getStatus());
crossListElement.setSort(currentCross.getSort()); crossListElement.setSort(currentCross.getSort());
...@@ -734,6 +783,55 @@ public class SpecialServiceServiceImpl implements SpecialServiceService { ...@@ -734,6 +783,55 @@ public class SpecialServiceServiceImpl implements SpecialServiceService {
return crossList; return crossList;
} }
private void setElementStartEnd(List<SpecialServiceCrossPO> specialServiceCrossList, int i, String currentCrossId, CrossListElement crossListElement) {
if (i == 0) { // 开始路口
crossListElement.setRouteStart("");
SpecialServiceCrossPO nextCross = specialServiceCrossList.get(i + 1);
String nextCrossId = nextCross.getCrossId();
// 构建路名+方向
RidInfoEntity ridInfoEntity = ridInfoMapper.selectByStartEnd(currentCrossId, nextCrossId);
String name = ridInfoEntity.getName(); // 西湖路:湘江中路@书院路路段
String[] split = name.split(":");
String streetName = split[0];
Integer outDir = ridInfoEntity.getOutDir();
String ourDirMsg = CrossDirEnum.getMsgByCode(outDir);
crossListElement.setRouteEnd(streetName + ourDirMsg);
} else if (i == specialServiceCrossList.size() - 1) { // 结束路口
crossListElement.setRouteEnd("");
SpecialServiceCrossPO preCross = specialServiceCrossList.get(i - 1);
String preCrossId = preCross.getCrossId();
// 构建路名+方向
RidInfoEntity ridInfoEntity = ridInfoMapper.selectByStartEnd(preCrossId, currentCrossId);
String name = ridInfoEntity.getName(); // 西湖路:湘江中路@书院路路段
String[] split = name.split(":");
String streetName = split[0];
Integer inDir = ridInfoEntity.getInDir();
String inDirMsg = CrossDirEnum.getMsgByCode(inDir);
crossListElement.setRouteStart(streetName + inDirMsg);
} else { // 中间路口
SpecialServiceCrossPO preCross = specialServiceCrossList.get(i - 1);
SpecialServiceCrossPO nextCross = specialServiceCrossList.get(i + 1);
String preCrossId = preCross.getCrossId();
String nextCrossId = nextCross.getCrossId();
// 路线起点
RidInfoEntity ridInfoEntity = ridInfoMapper.selectByStartEnd(preCrossId, currentCrossId);
String name = ridInfoEntity.getName(); // 西湖路:湘江中路@书院路路段
String[] split = name.split(":");
String streetName = split[0];
Integer inDir = ridInfoEntity.getInDir();
String inDirMsg = CrossDirEnum.getMsgByCode(inDir);
crossListElement.setRouteStart(streetName + inDirMsg);
// 路线终点
RidInfoEntity ridInfoEntity2 = ridInfoMapper.selectByStartEnd(currentCrossId, nextCrossId);
String name2 = ridInfoEntity2.getName(); // 西湖路:湘江中路@书院路路段
String[] split2 = name2.split(":");
String streetName2 = split2[0];
Integer outDir = ridInfoEntity2.getOutDir();
String ourDirMsg = CrossDirEnum.getMsgByCode(outDir);
crossListElement.setRouteEnd(streetName2 + ourDirMsg);
}
}
@NotNull @NotNull
private List<BaseCrossInfoPO> getRouteList(BaseCrossInfoPO startCross, BaseCrossInfoPO endCross) { private List<BaseCrossInfoPO> getRouteList(BaseCrossInfoPO startCross, BaseCrossInfoPO endCross) {
String endCrossLonLatStr = getCrossLonLatStr(endCross); String endCrossLonLatStr = getCrossLonLatStr(endCross);
......
package net.wanji.web.vo.specialService;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author Kent HAN
* @date 2022/11/9 17:21
*/
@NoArgsConstructor
@Data
@ApiModel(value = "GroupListVO")
public class GroupListVO {
@ApiModelProperty(value = "特勤名称",notes = "")
private String specialServiceName;
private List<GroupListElement> groupList;
@NoArgsConstructor
@Data
public static class GroupListElement {
@ApiModelProperty(value = "分组名称",notes = "")
private String groupName;
@ApiModelProperty(value = "wkt",notes = "")
private String wkt;
private List<SpecialServiceDetailVO.CrossListElement> crossList;
}
}
...@@ -56,6 +56,12 @@ ...@@ -56,6 +56,12 @@
where special_service_id = #{specialServiceId} and cross_id = #{endCrossid} where special_service_id = #{specialServiceId} and cross_id = #{endCrossid}
</update> </update>
<update id="updateGroupName">
update t_special_service_cross
set group_name = #{groupName}
where cross_id = #{crossId}
</update>
<delete id="deleteCross"> <delete id="deleteCross">
delete from t_special_service_cross delete from t_special_service_cross
where special_service_id = #{specialServiceId} and cross_id = #{crossId} where special_service_id = #{specialServiceId} and cross_id = #{crossId}
......
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