Commit df137b3f authored by hanbing's avatar hanbing

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

parent 05cef3a1
......@@ -137,6 +137,26 @@ public class SpecialServiceController {
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)
@ApiOperation(value = "更新路口", notes = "更新路口", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
......
......@@ -46,4 +46,6 @@ public interface SpecialServiceCrossMapper {
void deleteCrossBySpecialServiceId(@Param("id") Integer id);
Integer selectSpecialServiceIdByCrossId(String crossId);
void updateGroupName(String crossId, String groupName);
}
......@@ -40,4 +40,8 @@ public interface SpecialServiceService {
List<String> getOutDirList(CrossIdVO crossIdVO);
void batchLock(List<LockControlVO> lockControlVOList);
GroupListVO groupList(SpecialServiceIdBO specialServiceIdBO);
void updateGroup(GroupListVO groupListVO);
}
......@@ -33,6 +33,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author Kent HAN
......@@ -663,6 +664,99 @@ public class SpecialServiceServiceImpl implements SpecialServiceService {
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) {
List<SpecialServiceDetailVO.CrossListElement> crossList = new ArrayList<>();
List<SpecialServiceCrossPO> specialServiceCrossList =
......@@ -678,6 +772,18 @@ public class SpecialServiceServiceImpl implements SpecialServiceService {
crossListElement.setCrossName(baseCrossInfoPO.getName());
crossListElement.setCrossId(crossId);
setElementStartEnd(specialServiceCrossList, i, currentCrossId, crossListElement);
crossListElement.setStatus(currentCross.getStatus());
crossListElement.setSort(currentCross.getSort());
crossList.add(crossListElement);
}
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);
......@@ -724,14 +830,6 @@ public class SpecialServiceServiceImpl implements SpecialServiceService {
String ourDirMsg = CrossDirEnum.getMsgByCode(outDir);
crossListElement.setRouteEnd(streetName2 + ourDirMsg);
}
crossListElement.setStatus(currentCross.getStatus());
crossListElement.setSort(currentCross.getSort());
crossList.add(crossListElement);
}
return crossList;
}
@NotNull
......
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 @@
where special_service_id = #{specialServiceId} and cross_id = #{endCrossid}
</update>
<update id="updateGroupName">
update t_special_service_cross
set group_name = #{groupName}
where cross_id = #{crossId}
</update>
<delete id="deleteCross">
delete from t_special_service_cross
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