Commit a8673e53 authored by 黄福新's avatar 黄福新

[add] 1、路口失衡优化接口、逻辑定义;2、删除优化服务公共工具类,调用wj-common

parent ab344be5
......@@ -24,6 +24,11 @@
<artifactId>wj-common</artifactId>
<version>0.0.2</version>
</dependency>
<dependency>
<groupId>net.wanji</groupId>
<artifactId>wj-databus</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
......
......@@ -7,36 +7,6 @@ public class Constants {
*/
public static final String SYSTEM_ABBR = "OPT";
/**
* 否
*/
public static final Integer NO = 0;
/**
* 是
*/
public static final Integer YES = 1;
/**
* 分隔符:下划线
**/
public static final String SEPARATOR_UNDER_LINE = "_";
/**
* 分隔符:逗号
**/
public static final String SEPARATOR_COMMA = ",";
/**
* 分隔符:减号
**/
public static final String SEPARATOR_MINUS = "-";
/**
* 分隔符:冒号
**/
public static final String SEPARATOR_COLON = ":";
/**
* 相位(灯态)锁定
*/
......
package net.wanji.opt.common;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* @Description: [API响应结果封装]
* @author hfx
* @version 1.0
* Created on 2019/4/28 19:45
*/
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class Result implements Serializable {
private Integer status;
private String msg;
private Object data;
public static Result success() {
return new Result(ResultCode.SUCCESS.getStatus(), ResultCode.SUCCESS.getMsg(), null);
}
public static Result fail() {
return new Result(ResultCode.FAIL.getStatus(), ResultCode.FAIL.getMsg(), null);
}
public static Result success(Object data) {
return new Result(ResultCode.SUCCESS.getStatus(), ResultCode.SUCCESS.getMsg(), data);
}
public static Result fail(String msg) {
return new Result(ResultCode.FAIL.getStatus(), msg, null);
}
public static Result fail(Integer status, String msg) {
return new Result(status, msg, null);
}
}
package net.wanji.opt.common;
/**
* 响应码枚举,参考HTTP状态码的语义
*/
public enum ResultCode {
SUCCESS(200, "操作成功"),
FAIL(400, "操作失败"),
UNAUTHORIZED(401, "未认证,签名错误"),
INVALID(403, "token无效"),
NOT_FOUND(404, "接口不存在"),
INTERNAL_SERVER_ERROR(500, "服务器内部错误");
private int status;
private String msg;
ResultCode(int status, String msg) {
this.status = status;
this.msg = msg;
}
public int getStatus() {
return status;
}
public String getMsg() {
return msg;
}
}
package net.wanji.opt.common.enums;
public enum CrossStatusEnum {
NORMAL(0, "正常"),
UNBALANCE(1, "失衡"),
CONGESTION(2, "拥堵"),
SPILLOVER(3, "溢出"),
DEADLOCK(4, "死锁");
private Integer code;
private String name;
private CrossStatusEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
public Integer getCode() {
return this.code;
}
public String getName() {
return this.name;
}
}
......@@ -2,6 +2,7 @@ package net.wanji.opt.dao.mapper;
import net.wanji.opt.po.base.CrossSchedulesPO;
import net.wanji.opt.po.base.CrossSchedulesPlanPO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
......@@ -24,9 +25,10 @@ public interface CrossSchedulesMapper {
/**
* 查询调度计划信息列表
* @param crossId
* @param status
* @return
*/
List<CrossSchedulesPlanPO> listSchedulesPlan(String crossId, String schedulesId);
List<CrossSchedulesPlanPO> listSchedulesPlan(@Param("crossId") String crossId, @Param("status") Integer status);
}
......@@ -32,11 +32,17 @@ public class CrossPhaseDTO {
private Integer dirType;
@ApiModelProperty(name = "路口转向:u掉头;l左转;s直行;r右转",notes = "")
private Integer turnType;
private String turnType;
@ApiModelProperty(name = "计划号",notes = "")
private String planNo;
@ApiModelProperty(name = "方案ID",notes = "")
private Integer schemeId;
@ApiModelProperty(name = "方案号",notes = "")
private String schemeNo;
@ApiModelProperty(name = "环号",notes = "")
private Integer ringNo;
......
......@@ -26,12 +26,15 @@ public class CrossSectionDTO {
@ApiModelProperty(name = "计划ID",notes = "")
private Integer planId;
@ApiModelProperty(name = "计划号",notes = "")
private String planNo;
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
@ApiModelProperty(name = "方案ID",notes = "")
private Integer scemeId;
private Integer schemeId;
@ApiModelProperty(name = "控制模式:1定周期;2绿波协调;3黄闪;4全红;5关灯;6单点自适应;7全感应;8半感应;",notes = "")
private Integer control_mode;
private Integer controlMode;
}
package net.wanji.opt.service;
import net.wanji.opt.dto.CrossDataRealtimeDTO;
import java.util.List;
/**
* @author hfx
* @date 2023/1/10 11:12
......@@ -12,7 +16,7 @@ public interface CrossOptimizeService {
* 路口实时优化
* @return
*/
String realtimeOptimize();
String realtimeOptimize(List<CrossDataRealtimeDTO> abnormalCrossList);
/**
* 路口方案优化
......
......@@ -14,10 +14,11 @@ public interface CrossSchedulesService {
/**
* 获取路口调度详情信息列表
* @param crossId
* @param crossId 路口编号
* @param status 调度状态:1执行;0未执行
* @return
*/
List<CrossSchedulesDTO> listCrossSchedulesDetails(String crossId);
List<CrossSchedulesDTO> listCrossSchedulesDetails(String crossId, Integer status);
......
......@@ -32,11 +32,11 @@ public class CrossSchedulesServiceImpl implements CrossSchedulesService {
CrossSectionService crossSectionService;
@Override
public List<CrossSchedulesDTO> listCrossSchedulesDetails(String crossId) {
public List<CrossSchedulesDTO> listCrossSchedulesDetails(String crossId, Integer status) {
List<CrossSchedulesDTO> schedulesDTOList = new ArrayList<>();
// 获取调度计划信息
List<CrossSchedulesPlanPO> schedulesPlanPOList = crossSchedulesMapper.listSchedulesPlan(crossId, null);
List<CrossSchedulesPlanPO> schedulesPlanPOList = crossSchedulesMapper.listSchedulesPlan(crossId, status);
schedulesDTOList = BeanListUtils.populateList(schedulesPlanPOList, schedulesDTOList, CrossSchedulesDTO.class);
// 获取日计划信息
List<CrossSectionDTO> sectionPOList = crossSectionService.listCrossSectionInfo(crossId, null);
......
package net.wanji.opt.task;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.enums.CrossStatusEnum;
import net.wanji.opt.common.Constants;
import net.wanji.opt.dto.CrossDataRealtimeDTO;
import net.wanji.opt.po.CrossDataRealtimePO;
import net.wanji.opt.service.CrossOptimizeService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* @author hfx
* @date 2023/1/16 16:39
* @desc RealtimeOptimizeTask
*/
@Component
@Slf4j
public class CrossMonitorTask {
@Resource
CrossOptimizeService crossOptimizeService;
/**
* 路口实时监测
*/
@Scheduled(cron = "* 0/1 * * * ? ")
public void realtimeMonitor() {
log.info("路口实时监测任务...");
// 获取路口实时监测数据
List<CrossDataRealtimePO> crossDataRealtimePOList = listCrossDataRealtime();
log.info("路口实时数据:{}条", crossDataRealtimePOList.size());
// 测试时无数据暂时注释
// if(crossDataRealtimePOList.isEmpty()) {
// return ;
// }
// 获取所有信控路口异常数据(失衡/拥堵/溢出/死锁)
List<CrossDataRealtimeDTO> abnormalCrossList = listAbnormalCross(crossDataRealtimePOList);
log.info("加载异常路口:{}条", abnormalCrossList.size());
// if(abnormalCrossList.isEmpty()) {
// return ;
// }
// 调用路口实时优化
crossOptimizeService.realtimeOptimize(abnormalCrossList);
}
/**
* 获取异常路口数据
* @return
*/
public List<CrossDataRealtimeDTO> listAbnormalCross(List<CrossDataRealtimePO> crossDataRealtimePOList) {
List<CrossDataRealtimeDTO> dtoList = new ArrayList<>();
CrossDataRealtimeDTO dto = null;
int status = 0;
for (CrossDataRealtimePO po: crossDataRealtimePOList) {
// 获取失衡、拥堵、溢出路口数据
if(Constants.NO.equals(po.getIsSpillover()) || Constants.NO.equals(po.getIsCongestion()) || Constants.NO.equals(po.getIsUnbalance())) {
continue;
}
if(Constants.YES.equals(po.getIsSpillover())) { // 溢出
status = CrossStatusEnum.SPILLOVER.getCode();
} else if(Constants.YES.equals(po.getIsCongestion())) { // 拥堵
status = CrossStatusEnum.CONGESTION.getCode();
} else if(Constants.YES.equals(po.getIsUnbalance())) { // 失衡
status = CrossStatusEnum.UNBALANCE.getCode();
}
dto = new CrossDataRealtimeDTO();
dto.setCrossId(po.getCrossId());
dto.setStatus(status);
dto.setDirList(null);
dto.setTurnList(null);
dtoList.add(dto);
}
return dtoList;
}
/**
* 获取路口实时监测数据
* (暂定从数据中心kafka获取)
* @return
*/
public List<CrossDataRealtimePO> listCrossDataRealtime() {
return new ArrayList<>();
}
}
\ No newline at end of file
package net.wanji.opt.task;
import lombok.extern.slf4j.Slf4j;
import net.wanji.opt.service.CrossOptimizeService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @author hfx
* @date 2023/1/16 16:39
* @desc RealtimeOptimizeTask
*/
@Component
@Slf4j
public class RealtimeOptimizeTask {
@Resource
CrossOptimizeService crossOptimizeService;
@Scheduled(cron = "* 0/1 * * * ? ")
public void run() {
log.info("RealtimeOptimizeTask ...");
crossOptimizeService.realtimeOptimize();
}
}
\ No newline at end of file
......@@ -55,10 +55,10 @@
s.id = sp.schedules_id
AND p.id = sp.plan_id
<if test="crossId != null and crossId != ''">
and cross_id = #{crossId}
and s.cross_id = #{crossId}
</if>
<if test="schedulesId != null and schedulesId != ''">
and s.id = #{schedulesId}
<if test="status != null and status != ''">
and s.status = #{status}
</if>
</select>
......
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