Commit 9ea30edc authored by hanbing's avatar hanbing

[add] 诊断优化,查询方案优化

parent d3fcdf4e
...@@ -2,18 +2,9 @@ package net.wanji.opt.common.exception; ...@@ -2,18 +2,9 @@ package net.wanji.opt.common.exception;
import net.wanji.common.framework.exceptionhandler.GlobalExceptionHandler; import net.wanji.common.framework.exceptionhandler.GlobalExceptionHandler;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* 全局异常处理 * 全局异常处理
* *
...@@ -22,40 +13,11 @@ import java.util.Map; ...@@ -22,40 +13,11 @@ import java.util.Map;
*/ */
@RestControllerAdvice @RestControllerAdvice
public class OptExceptionHandler extends GlobalExceptionHandler { public class OptExceptionHandler extends GlobalExceptionHandler {
@ExceptionHandler(value = MethodArgumentNotValidException.class) /**
public JsonViewObject methodArgumentExceptionHandler(MethodArgumentNotValidException e) { * 字段值重复异常
BindingResult bindingResult = e.getBindingResult(); */
List<ObjectError> allErrors = bindingResult.getAllErrors();
String message = "";
for (ObjectError error : allErrors) {
message = error.getDefaultMessage();
}
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
return jsonViewObject.fail(message);
}
@ExceptionHandler(value = DuplicateKeyException.class)
public JsonViewObject duplicateKeyExceptionHandler(DuplicateKeyException e) {
return JsonViewObject.newInstance().fail(e);
}
@ExceptionHandler(value = UniqueException.class) @ExceptionHandler(value = UniqueException.class)
public JsonViewObject uniqueExceptionHandler(UniqueException e) { public JsonViewObject uniqueExceptionHandler(UniqueException e) {
return JsonViewObject.newInstance().fail(e); return JsonViewObject.newInstance().fail(e);
} }
@ExceptionHandler(value = Exception.class)
public JsonViewObject exceptionHandler(Exception e) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
return jsonViewObject.fail("服务器内部错误");
}
private Map<String, String> getErrors(BindingResult result) {
Map<String, String> map = new HashMap<>();
List<FieldError> list = result.getFieldErrors();
for (FieldError error : list) {
map.put(error.getField(), error.getDefaultMessage());
}
return map;
}
} }
\ No newline at end of file
...@@ -6,17 +6,15 @@ import io.swagger.annotations.ApiResponse; ...@@ -6,17 +6,15 @@ import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses; import io.swagger.annotations.ApiResponses;
import net.wanji.common.dto.CrossIdDTO; import net.wanji.common.dto.CrossIdDTO;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.dto.DiagnoCrossListDTO;
import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO; import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO;
import net.wanji.opt.service.DiagnoService; import net.wanji.opt.service.DiagnoService;
import net.wanji.opt.vo.CrossIdAndLocationVO; import net.wanji.opt.vo.CrossIdAndLocationVO;
import net.wanji.opt.vo.DiagnoCrossVO; import net.wanji.opt.vo.SchemeOptVO;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; 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;
...@@ -36,19 +34,8 @@ public class DiagnoController { ...@@ -36,19 +34,8 @@ public class DiagnoController {
this.diagnoService = diagnoService; this.diagnoService = diagnoService;
} }
@ApiOperation(value = "路口列表", notes = "路口列表", response = JsonViewObject.class, @ApiOperation(value = "查询路口当前场景、优化策略、优化方法", notes = "查询路口当前场景、优化策略、优化方法",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON) response = JsonViewObject.class,
@PostMapping(value = "/diagnoCrossList",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = DiagnoCrossVO.class),
})
public JsonViewObject diagnoCrossList(@RequestBody @Valid DiagnoCrossListDTO diagnoCrossListDTO) {
List<DiagnoCrossVO> diagnoCrossVOList = diagnoService.diagnoCrossList(diagnoCrossListDTO);
return JsonViewObject.newInstance().success(diagnoCrossVOList);
}
@ApiOperation(value = "查询路口当前场景", notes = "查询路口当前场景", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON) produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/queryCrossScene", @PostMapping(value = "/queryCrossScene",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON) produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
...@@ -71,4 +58,16 @@ public class DiagnoController { ...@@ -71,4 +58,16 @@ public class DiagnoController {
List<CrossIdAndLocationVO> crossIdAndLocationVOList = diagnoService.queryNeighborCross(crossIdDTO); List<CrossIdAndLocationVO> crossIdAndLocationVOList = diagnoService.queryNeighborCross(crossIdDTO);
return JsonViewObject.newInstance().success(crossIdAndLocationVOList); return JsonViewObject.newInstance().success(crossIdAndLocationVOList);
} }
@ApiOperation(value = "查询方案优化", notes = "查询方案优化", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/querySchemeOpt",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = SchemeOptVO.class),
})
public JsonViewObject querySchemeOpt(@RequestBody CrossIdDTO crossIdDTO) {
SchemeOptVO schemeOptVO = diagnoService.querySchemeOpt(crossIdDTO);
return JsonViewObject.newInstance().success(schemeOptVO);
}
} }
\ No newline at end of file
...@@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Param; ...@@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @author hfx * @author hfx
...@@ -21,4 +22,35 @@ public interface CrossSchemeMapper { ...@@ -21,4 +22,35 @@ public interface CrossSchemeMapper {
*/ */
List<CrossSchemePO> listCrossSchemeInfo(@Param("crossId") String crossId, @Param("schemeNo")String schemeNo, @Param("id")Integer id); List<CrossSchemePO> listCrossSchemeInfo(@Param("crossId") String crossId, @Param("schemeNo")String schemeNo, @Param("id")Integer id);
void insertBatch(@Param("entities") List<CrossSchemePO> entities);
Integer selectIdByCrossIdAndSchemeNo(@Param("crossId") String crossId, @Param("schemeNo") String schemeNo);
void updateCoordPhase(@Param("crossId") String crossId,
@Param("schemeNo") String schemeNo,
@Param("phaseId") Integer phaseId);
List<CrossSchemePO> selectByCrossId(@Param("crossId") String crossId);
Integer selectIdByCrossIdAndSchemeName(@Param("crossId") String crossId,
@Param("schemeName") String schemeName);
CrossSchemePO selectByCrossIdAndSchemeName(@Param("crossId") String crossId,
@Param("schemeName") String schemeName);
CrossSchemePO selectById(@Param("id") Integer id);
void insertOne(CrossSchemePO crossSchemePO);
void update(CrossSchemePO crossSchemePO);
Set<Integer> selectIdsByCrossId(String crossId);
void deleteByIds(Set<Integer> existedIds);
void resetStatus(String crossId);
void updateStatus(Integer schemeId);
CrossSchemePO selectByCrossIdAndSchemeNo(String crossId, String schemeNo);
} }
...@@ -13,7 +13,7 @@ import java.util.List; ...@@ -13,7 +13,7 @@ import java.util.List;
@Repository @Repository
public interface CrossSchemeOptLogMapper { public interface CrossSchemeOptLogMapper {
List<CrossSchemeOptLogPO> selectByCrossId(); List<CrossSchemeOptLogPO> selectByCrossId(String crossId);
int insertOne(CrossSchemeOptLogPO entity); int insertOne(CrossSchemeOptLogPO entity);
......
...@@ -3,6 +3,8 @@ package net.wanji.opt.po.base; ...@@ -3,6 +3,8 @@ package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.Date;
/** /**
* @author hfx * @author hfx
* @date 2023/01/12 13:29:39 * @date 2023/01/12 13:29:39
...@@ -10,26 +12,39 @@ import lombok.Data; ...@@ -10,26 +12,39 @@ import lombok.Data;
*/ */
@Data @Data
public class CrossSchemePO { public class CrossSchemePO {
/** 方案ID */
@ApiModelProperty(name = "方案ID",notes = "") @ApiModelProperty(name = "方案ID",notes = "")
private Integer id; private Integer id ;
/** 方案号 */
@ApiModelProperty(name = "方案号",notes = "") @ApiModelProperty(name = "方案号",notes = "")
private String schemeNo; private String schemeNo ;
/** 方案名称 */
@ApiModelProperty(name = "方案名称",notes = "") @ApiModelProperty(name = "方案名称",notes = "")
private String name; private String name ;
/** 路口ID */
@ApiModelProperty(name = "路口ID",notes = "") @ApiModelProperty(name = "路口ID",notes = "")
private String crossId; private String crossId ;
/** 周期 */
@ApiModelProperty(name = "周期(秒)",notes = "") @ApiModelProperty(name = "周期",notes = "")
private Integer cycle; private Integer cycle = 0;
/** 协调相位ID */
@ApiModelProperty(name = "协调相位ID",notes = "") @ApiModelProperty(name = "协调相位ID",notes = "")
private Integer coordPhase; private Integer coordPhase = 0 ;
/** 相位差 */
@ApiModelProperty(name = "相位差",notes = "") @ApiModelProperty(name = "相位差",notes = "")
private Integer offset; private Integer offset = 0;
/** 数据来源:1信号机;2平台 */
@ApiModelProperty(name = "数据来源:1信号机;2平台",notes = "")
private Integer source ;
/** 删除标识:1删除;0未删除 */
@ApiModelProperty(name = "删除标识:1删除;0未删除",notes = "")
private Integer isDeleted ;
@ApiModelProperty(name = "状态:1执行;0未执行",notes = "")
private Integer status = 0 ;
/** 创建时间 */
@ApiModelProperty(name = "创建时间",notes = "")
private Date gmtCreate ;
/** 修改时间 */
@ApiModelProperty(name = "修改时间",notes = "")
private Date gmtModified ;
} }
package net.wanji.opt.service; package net.wanji.opt.service;
import net.wanji.common.dto.CrossIdDTO; import net.wanji.common.dto.CrossIdDTO;
import net.wanji.opt.dto.DiagnoCrossListDTO;
import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO; import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO;
import net.wanji.opt.vo.CrossIdAndLocationVO; import net.wanji.opt.vo.CrossIdAndLocationVO;
import net.wanji.opt.vo.DiagnoCrossVO; import net.wanji.opt.vo.SchemeOptVO;
import java.util.List; import java.util.List;
...@@ -13,9 +12,9 @@ import java.util.List; ...@@ -13,9 +12,9 @@ import java.util.List;
* @date 2023/3/2 10:09 * @date 2023/3/2 10:09
*/ */
public interface DiagnoService { public interface DiagnoService {
List<DiagnoCrossVO> diagnoCrossList(DiagnoCrossListDTO diagnoCrossListDTO);
AddOrUpdateSceneDTO queryCrossScene(CrossIdDTO crossIdDTO); AddOrUpdateSceneDTO queryCrossScene(CrossIdDTO crossIdDTO);
List<CrossIdAndLocationVO> queryNeighborCross(CrossIdDTO crossIdDTO); List<CrossIdAndLocationVO> queryNeighborCross(CrossIdDTO crossIdDTO);
SchemeOptVO querySchemeOpt(CrossIdDTO crossIdDTO);
} }
package net.wanji.opt.service.impl; package net.wanji.opt.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.github.pagehelper.PageInfo; 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.dto.CrossIdDTO;
...@@ -9,24 +8,29 @@ import net.wanji.databus.dao.entity.RidInfoEntity; ...@@ -9,24 +8,29 @@ import net.wanji.databus.dao.entity.RidInfoEntity;
import net.wanji.databus.dao.mapper.RidInfoMapper; import net.wanji.databus.dao.mapper.RidInfoMapper;
import net.wanji.opt.dao.mapper.CrossDirInfoMapper; import net.wanji.opt.dao.mapper.CrossDirInfoMapper;
import net.wanji.opt.dao.mapper.CrossInfoMapper; import net.wanji.opt.dao.mapper.CrossInfoMapper;
import net.wanji.opt.dao.mapper.CrossSchemeMapper;
import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper;
import net.wanji.opt.dao.mapper.strategy.SceneMapper; import net.wanji.opt.dao.mapper.strategy.SceneMapper;
import net.wanji.opt.dao.mapper.strategy.SceneStrategyMapper; import net.wanji.opt.dao.mapper.strategy.SceneStrategyMapper;
import net.wanji.opt.dao.mapper.trend.CrossDataRealtimeMapper; import net.wanji.opt.dao.mapper.trend.CrossDataRealtimeMapper;
import net.wanji.opt.dto.DiagnoCrossListDTO;
import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO; import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO;
import net.wanji.opt.dto.strategy.QuerySceneDTO; import net.wanji.opt.dto.strategy.QuerySceneDTO;
import net.wanji.opt.po.base.CrossInfoPO; import net.wanji.opt.po.base.CrossInfoPO;
import net.wanji.opt.po.base.CrossSchemeOptLogPO;
import net.wanji.opt.po.base.CrossSchemePO;
import net.wanji.opt.po.strategy.ScenePO; import net.wanji.opt.po.strategy.ScenePO;
import net.wanji.opt.po.trend.CrossDataRealtimePO; import net.wanji.opt.po.trend.CrossDataRealtimePO;
import net.wanji.opt.service.DiagnoService; import net.wanji.opt.service.DiagnoService;
import net.wanji.opt.service.strategy.SceneService; import net.wanji.opt.service.strategy.SceneService;
import net.wanji.opt.vo.CrossIdAndLocationVO; import net.wanji.opt.vo.CrossIdAndLocationVO;
import net.wanji.opt.vo.DiagnoCrossVO; import net.wanji.opt.vo.SchemeOptVO;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Optional;
/** /**
* @author Kent HAN * @author Kent HAN
...@@ -42,25 +46,19 @@ public class DiagnoServiceImpl implements DiagnoService { ...@@ -42,25 +46,19 @@ public class DiagnoServiceImpl implements DiagnoService {
private final SceneMapper sceneMapper; private final SceneMapper sceneMapper;
private final CrossDirInfoMapper crossDirInfoMapper; private final CrossDirInfoMapper crossDirInfoMapper;
private final RidInfoMapper ridInfoMapper; private final RidInfoMapper ridInfoMapper;
private final CrossSchemeOptLogMapper crossSchemeOptLogMapper;
private final CrossSchemeMapper crossSchemeMapper;
public DiagnoServiceImpl(CrossInfoMapper crossInfoMapper, CrossDataRealtimeMapper crossDataRealtimeMapper, public DiagnoServiceImpl(CrossInfoMapper crossInfoMapper, CrossDataRealtimeMapper crossDataRealtimeMapper,
SceneService sceneService, SceneStrategyMapper sceneStrategyMapper, SceneMapper sceneMapper, CrossDirInfoMapper crossDirInfoMapper, RidInfoMapper ridInfoMapper) { SceneService sceneService, SceneStrategyMapper sceneStrategyMapper, SceneMapper sceneMapper, CrossDirInfoMapper crossDirInfoMapper, RidInfoMapper ridInfoMapper, CrossSchemeOptLogMapper crossSchemeOptLogMapper, CrossSchemeMapper crossSchemeMapper) {
this.crossInfoMapper = crossInfoMapper; this.crossInfoMapper = crossInfoMapper;
this.crossDataRealtimeMapper = crossDataRealtimeMapper; this.crossDataRealtimeMapper = crossDataRealtimeMapper;
this.sceneService = sceneService; this.sceneService = sceneService;
this.sceneMapper = sceneMapper; this.sceneMapper = sceneMapper;
this.crossDirInfoMapper = crossDirInfoMapper; this.crossDirInfoMapper = crossDirInfoMapper;
this.ridInfoMapper = ridInfoMapper; this.ridInfoMapper = ridInfoMapper;
} this.crossSchemeOptLogMapper = crossSchemeOptLogMapper;
this.crossSchemeMapper = crossSchemeMapper;
@Override
public List<DiagnoCrossVO> diagnoCrossList(DiagnoCrossListDTO diagnoCrossListDTO) {
String name = diagnoCrossListDTO.getName();
Integer target = diagnoCrossListDTO.getTarget();
if (target == 1) { // 路口
return queryCross(name);
}
return null;
} }
@Override @Override
...@@ -112,52 +110,52 @@ public class DiagnoServiceImpl implements DiagnoService { ...@@ -112,52 +110,52 @@ public class DiagnoServiceImpl implements DiagnoService {
return crossIdAndLocationVOList; return crossIdAndLocationVOList;
} }
private List<DiagnoCrossVO> queryCross(String name) { @Override
List<DiagnoCrossVO> diagnoCrossVOList = new ArrayList<>(); public SchemeOptVO querySchemeOpt(CrossIdDTO crossIdDTO) {
if (ObjectUtil.isNotEmpty(name)) { String crossId = crossIdDTO.getCrossId();
// 根据name做模糊查询 SchemeOptVO schemeOptVO = new SchemeOptVO();
List<CrossInfoPO> crossInfoPOList = crossInfoMapper.selectByName(name); schemeOptVO.setCrossId(crossId);
diagnoCrossVOList = getDiagnoCrossVOList(crossInfoPOList); List<CrossSchemeOptLogPO> crossSchemeOptLogPOList = crossSchemeOptLogMapper.selectByCrossId(crossId);
} else { Optional<CrossSchemeOptLogPO> max = crossSchemeOptLogPOList.stream()
// 返回全量数据 .max(Comparator.comparing(CrossSchemeOptLogPO::getDataBatchTime));
List<CrossInfoPO> crossInfoPOList = crossInfoMapper.selectAll(); List<CrossSchemeOptLogPO> maxList = getMaxList(crossSchemeOptLogPOList, max);
diagnoCrossVOList = getDiagnoCrossVOList(crossInfoPOList); CrossSchemeOptLogPO crossSchemeOptLogPO = maxList.get(0);
} String optType = crossSchemeOptLogPO.getOptType();
return diagnoCrossVOList; schemeOptVO.setOptType(Integer.parseInt(optType));
String schemeNo = crossSchemeOptLogPO.getSchemeNo();
CrossSchemePO crossSchemePO = crossSchemeMapper.selectByCrossIdAndSchemeNo(crossId, schemeNo);
schemeOptVO.setCycle(crossSchemePO.getCycle());
schemeOptVO.setOffset(crossSchemeOptLogPO.getOffset());
// 构造调整时间列表
List<SchemeOptVO.PhaseOptTime> phaseOptTimeList = buildPhaseOptTimeList(maxList);
schemeOptVO.setPhaseOptTimeList(phaseOptTimeList);
return schemeOptVO;
} }
private List<DiagnoCrossVO> getDiagnoCrossVOList(List<CrossInfoPO> crossInfoPOList) { @NotNull
List<DiagnoCrossVO> diagnoCrossVOList = new ArrayList<>(); private static List<CrossSchemeOptLogPO> getMaxList(List<CrossSchemeOptLogPO> crossSchemeOptLogPOList,
for (CrossInfoPO crossInfoPO : crossInfoPOList) { Optional<CrossSchemeOptLogPO> max) {
DiagnoCrossVO diagnoCrossVO = new DiagnoCrossVO(); int maxBatchTime = max.get().getDataBatchTime();
diagnoCrossVO.setCrossName(crossInfoPO.getName()); List<CrossSchemeOptLogPO> maxList = new ArrayList<>();
String crossId = crossInfoPO.getId(); for (CrossSchemeOptLogPO crossSchemeOptLogPO : crossSchemeOptLogPOList) {
diagnoCrossVO.setCrossId(crossId); int dataBatchTime = crossSchemeOptLogPO.getDataBatchTime();
CrossDataRealtimePO crossDataRealtimePO = crossDataRealtimeMapper.selectByCrossId(crossId); if (dataBatchTime == maxBatchTime) {
Integer status = crossDataRealtimePO.getStatus(); maxList.add(crossSchemeOptLogPO);
diagnoCrossVO.setScene(status);
// 选择优先级最高的策略
QuerySceneDTO querySceneDTO = new QuerySceneDTO();
querySceneDTO.setSceneTarget(1);
querySceneDTO.setPageNum(1);
querySceneDTO.setPageSize(999);
PageInfo<AddOrUpdateSceneDTO> sceneList = sceneService.queryScene(querySceneDTO);
List<AddOrUpdateSceneDTO> list = sceneList.getList();
for (AddOrUpdateSceneDTO addOrUpdateSceneDTO : list) {
Integer sceneNum = addOrUpdateSceneDTO.getSceneNum();
if (Objects.equals(sceneNum, status)) {
List<AddOrUpdateSceneDTO.StrategyListElement> strategyList =
addOrUpdateSceneDTO.getStrategyList();
AddOrUpdateSceneDTO.StrategyListElement strategyListElement = strategyList.get(0);
diagnoCrossVO.setStrategy(strategyListElement.getStrategyName());
// 选择优先级最高的方法
List<AddOrUpdateSceneDTO.IdeaListElement> ideaList = strategyListElement.getIdeaList();
AddOrUpdateSceneDTO.IdeaListElement ideaListElement = ideaList.get(0);
diagnoCrossVO.setIdea(ideaListElement.getIdeaName());
}
} }
diagnoCrossVOList.add(diagnoCrossVO);
} }
return diagnoCrossVOList; return maxList;
}
private List<SchemeOptVO.PhaseOptTime> buildPhaseOptTimeList(List<CrossSchemeOptLogPO> crossSchemeOptLogPOList) {
List<SchemeOptVO.PhaseOptTime> phaseOptTimeList = new ArrayList<>();
for (CrossSchemeOptLogPO crossSchemeOptLogPO : crossSchemeOptLogPOList) {
SchemeOptVO.PhaseOptTime phaseOptTime = new SchemeOptVO.PhaseOptTime();
phaseOptTime.setPhaseNo(crossSchemeOptLogPO.getPhaseNo());
phaseOptTime.setOriGreenTime(crossSchemeOptLogPO.getOriGreenTime());
phaseOptTime.setOptGreenTime(crossSchemeOptLogPO.getOptGreenTime());
phaseOptTime.setOptTime(crossSchemeOptLogPO.getOptTime());
phaseOptTimeList.add(phaseOptTime);
}
return phaseOptTimeList;
} }
} }
package net.wanji.opt.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author Kent HAN
* @date 2023/2/9 8:38
*/
@Data
@NoArgsConstructor
@ApiModel(value = "SchemeOptVO", description = "查询方案优化返回值")
public class SchemeOptVO {
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(value = "优化模式 0手动干预 1中心优化 6边缘优化")
private Integer optType;
@ApiModelProperty(value = "周期")
private Integer cycle;
@ApiModelProperty(value = "相位差")
private Integer offset;
@ApiModelProperty(value = "调整时间表格")
private List<PhaseOptTime> phaseOptTimeList;
@Data
@NoArgsConstructor
@ApiModel(value = "PhaseOptTime", description = "调整时间表格元素")
public static class PhaseOptTime {
@ApiModelProperty(value = "相位编号")
private String phaseNo;
@ApiModelProperty(value = "原绿灯时长")
private Integer oriGreenTime;
@ApiModelProperty(value = "调整后绿灯时长")
private Integer optGreenTime;
@ApiModelProperty(value = "调整时间")
private Integer optTime;
}
}
<?xml version="1.0" encoding="UTF-8"?> <?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"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.CrossSchemeMapper"> <mapper namespace="net.wanji.opt.dao.mapper.CrossSchemeMapper">
<!-- 通用查询映射结果 --> <!-- 通用查询映射结果 -->
<resultMap type="net.wanji.opt.po.base.CrossSchemePO" id="BaseResultMap"> <resultMap type="net.wanji.opt.po.base.CrossSchemePO" id="BaseResultMap">
<result property="id" column="id"/> <result property="id" column="id" />
<result property="schemeNo" column="scheme_no"/> <result property="schemeNo" column="scheme_no"/>
<result property="name" column="name"/> <result property="name" column="name"/>
<result property="crossId" column="cross_id"/> <result property="crossId" column="cross_id"/>
<result property="cycle" column="cycle"/> <result property="cycle" column="cycle"/>
<result property="coordPhase" column="coord_phase"/> <result property="coordPhase" column="coord_phase"/>
<result property="offset" column="offset"/> <result property="offset" column="offset"/>
<result property="source" column="source"/>
<result property="isDeleted" column="is_deleted"/>
<result property="status" column="status"/>
<result property="gmtCreate" column="gmt_create"/>
<result property="gmtModified" column="gmt_modified"/>
</resultMap> </resultMap>
<insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
insert into t_base_cross_scheme(scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,status)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.schemeNo},#{entity.name},#{entity.crossId},#{entity.cycle},#{entity.coordPhase},#{entity.offset},#{entity.source},#{entity.isDeleted},#{entity.status})
</foreach>
</insert>
<insert id="insertOne">
insert into t_base_cross_scheme(scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,status)
values (#{schemeNo},#{name},#{crossId},#{cycle},#{coordPhase},#{offset},#{source},#{isDeleted},#{status})
</insert>
<update id="updateCoordPhase">
update t_base_cross_scheme
set coord_phase = #{phaseId}
where cross_id = #{crossId} and scheme_no = #{schemeNo}
</update>
<update id="update">
update t_base_cross_scheme
<set>
status = 0,
<if test="name != null and name != ''">
name = #{name},
</if>
<if test="cycle != null and cycle != ''">
cycle = #{cycle},
</if>
<if test="coordPhase != null and coordPhase != ''">
coord_phase = #{coordPhase},
</if>
<if test="offset != null and offset != ''">
offset = #{offset},
</if>
<if test="source != null and source != ''">
source = #{source},
</if>
<if test="isDeleted != null and isDeleted != ''">
is_deleted = #{isDeleted},
</if>
<if test="status != null and isDeleted != ''">
status = #{status},
</if>
</set>
where id = #{id}
</update>
<update id="resetStatus">
UPDATE t_base_cross_scheme
SET status = 0
WHERE cross_id = #{crossId}
</update>
<update id="updateStatus">
UPDATE t_base_cross_scheme
SET status = 1
WHERE id = #{schemeId}
</update>
<delete id="deleteByCrossId">
delete from t_base_cross_scheme
where cross_id = #{crossId}
</delete>
<select id="selectIdByCrossIdAndSchemeNo" resultType="java.lang.Integer">
select id from t_base_cross_scheme
where cross_id = #{crossId} and scheme_no = #{schemeNo}
</select>
<!-- 查询方案基础信息列表 --> <!-- 查询方案基础信息列表 -->
<select id="listCrossSchemeInfo" parameterType="String" resultMap="BaseResultMap"> <select id="listCrossSchemeInfo" parameterType="String" resultMap="BaseResultMap">
select select
...@@ -36,5 +111,51 @@ ...@@ -36,5 +111,51 @@
</if> </if>
</select> </select>
<select id="selectByCrossId" resultMap="BaseResultMap">
select
id,scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,status,gmt_create,gmt_modified
from t_base_cross_scheme
where cross_id = #{crossId}
</select>
<select id="selectIdByCrossIdAndSchemeName" resultType="java.lang.Integer">
select id from t_base_cross_scheme
where cross_id = #{crossId} and name = #{schemeName}
</select>
<select id="selectByCrossIdAndSchemeName" resultMap="BaseResultMap">
select
id,scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,status,gmt_create,gmt_modified
from t_base_cross_scheme
where cross_id = #{crossId} and name = #{schemeName}
</select>
<select id="selectById" resultType="net.wanji.opt.po.base.CrossSchemePO">
select
id,scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,status,gmt_create,gmt_modified
from t_base_cross_scheme
where id = #{id}
</select>
<select id="selectIdsByCrossId" resultType="java.lang.Integer">
SELECT id FROM t_base_cross_scheme
WHERE cross_id = #{crossId}
</select>
<select id="selectByCrossIdAndSchemeNo" resultType="net.wanji.opt.po.base.CrossSchemePO">
select
id,scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,status,gmt_create,gmt_modified
from t_base_cross_scheme
where cross_id = #{crossId} and scheme_no = #{schemeNo}
</select>
<delete id="deleteByIds">
DELETE FROM t_base_cross_scheme
WHERE id IN
<foreach collection="existedIds" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</delete>
</mapper> </mapper>
...@@ -2,6 +2,7 @@ package net.wanji.common.framework.exceptionhandler; ...@@ -2,6 +2,7 @@ package net.wanji.common.framework.exceptionhandler;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.validation.FieldError; import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
...@@ -11,9 +12,17 @@ import javax.servlet.http.HttpServletRequest; ...@@ -11,9 +12,17 @@ import javax.servlet.http.HttpServletRequest;
import java.io.IOException; import java.io.IOException;
@RestControllerAdvice
@Slf4j @Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler { public class GlobalExceptionHandler {
/**
* 数据库字段值重复异常
*/
@ExceptionHandler(value = DuplicateKeyException.class)
public JsonViewObject duplicateKeyExceptionHandler(DuplicateKeyException e) {
return JsonViewObject.newInstance().fail(e);
}
/** /**
* IO异常处理 * IO异常处理
......
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