Commit ef32802d authored by zhouleilei's avatar zhouleilei

[add]智慧大屏,新增优化对比

parent 5deaf475
...@@ -147,6 +147,19 @@ public class PlanSendController { ...@@ -147,6 +147,19 @@ public class PlanSendController {
return jsonViewObject.success(ringPhasePO); return jsonViewObject.success(ringPhasePO);
} }
@AspectLog(description = "根据路口号和时间(据当前时间半小时)返回相位列表-方案优化对比", operationType = BaseEnum.OperationTypeEnum.UPDATE)
@ApiOperation(value = "根据路口号和时间(据当前时间半小时)返回相位列表-方案优化对比)", notes = "根据路口号和时间(据当前时间半小时)返回相位列表-方案优化对比")
@PostMapping("/phaseListByTimeRingNew")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = SaveSchemeConfigDTO.PhaseListElement.class),
})
public JsonViewObject phaseListByTimeRingNew(@RequestBody CrossIdAndTimeDTO crossIdAndTimeDTO) {
RingPhasePO ringPhasePO = planSendService.phaseListByTimeRingNew(crossIdAndTimeDTO);
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
return jsonViewObject.success(ringPhasePO);
}
@AspectLog(description = "下发数据到UTC", operationType = BaseEnum.OperationTypeEnum.UPDATE) @AspectLog(description = "下发数据到UTC", operationType = BaseEnum.OperationTypeEnum.UPDATE)
@ApiOperation(value = "下发数据到UTC", notes = "下发数据到UTC") @ApiOperation(value = "下发数据到UTC", notes = "下发数据到UTC")
@PostMapping("/saveToUtc") @PostMapping("/saveToUtc")
......
...@@ -33,6 +33,7 @@ public interface PlanSendService { ...@@ -33,6 +33,7 @@ public interface PlanSendService {
// RingPhasePO phaseListByTimeSingleRing(CrossIdAndTimeDTO crossIdAndTimeDTO); // RingPhasePO phaseListByTimeSingleRing(CrossIdAndTimeDTO crossIdAndTimeDTO);
RingPhasePO phaseListByTimeSingleRingNew(CrossIdAndTimeDTO crossIdAndTimeDTO); RingPhasePO phaseListByTimeSingleRingNew(CrossIdAndTimeDTO crossIdAndTimeDTO);
RingPhasePO phaseListByTimeRingNew(CrossIdAndTimeDTO crossIdAndTimeDTO);
List<SaveSchemeConfigDTO.PhaseListElement> phaseListByTimeSingleRing(CrossIdAndTimeDTO crossIdAndTimeDTO); List<SaveSchemeConfigDTO.PhaseListElement> phaseListByTimeSingleRing(CrossIdAndTimeDTO crossIdAndTimeDTO);
/** /**
......
...@@ -236,6 +236,45 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -236,6 +236,45 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
} }
return phaseSchemeList; return phaseSchemeList;
} }
/**
* 通过方案号和路口号构造方案列表
*
* @param crossId
* @return java.util.List<net.wanji.web.dto.SaveSchemeConfigDTO.PhaseScheme>
* @author Kent HAN
* @date 2023/1/12 9:23
*/
public List<SaveSchemeConfigDTO.PhaseScheme> buildPhaseSchemeListByCrossIdAndSchemeNo(String crossId,String schemeNo) {
List<SaveSchemeConfigDTO.PhaseScheme> phaseSchemeList = new ArrayList<>();
List<BaseCrossSchemePO> baseCrossSchemePOList = baseCrossSchemeMapper.listCrossSchemeInfo(crossId,schemeNo,null);
for (BaseCrossSchemePO baseCrossSchemePO : baseCrossSchemePOList) {
SaveSchemeConfigDTO.PhaseScheme phaseScheme = new SaveSchemeConfigDTO.PhaseScheme();
phaseScheme.setSchemeNo(baseCrossSchemePO.getSchemeNo());
phaseScheme.setName(baseCrossSchemePO.getName());
phaseScheme.setSchemeId(baseCrossSchemePO.getId());
// 获取协调相位号
Integer coordPhaseId = baseCrossSchemePO.getCoordPhase();
if (coordPhaseId != null) {
CrossPhasePO crossPhasePO = crossPhaseMapper.selectById(coordPhaseId);
if (crossPhasePO != null) {
phaseScheme.setCoordPhaseNo(crossPhasePO.getPhaseNo());
}
}
phaseScheme.setCycle(baseCrossSchemePO.getCycle());
phaseScheme.setOffset(baseCrossSchemePO.getOffset());
phaseScheme.setStatus(baseCrossSchemePO.getStatus());
// 构造环列表
Integer schemeId = baseCrossSchemeMapper.selectIdByCrossIdAndSchemeNo(crossId, schemeNo);
List<SaveSchemeConfigDTO.RingListElement> ringList = buildRingList(crossId, schemeId);
phaseScheme.setRingList(ringList);
// 构造特殊控制列表
List<SaveSchemeConfigDTO.PhaseListElement> specialControlList = buildSpecialControlList(crossId, schemeId);
phaseScheme.setSpecialControlModeList(specialControlList);
phaseSchemeList.add(phaseScheme);
}
return phaseSchemeList;
}
/** /**
* 构造特殊控制列表 * 构造特殊控制列表
......
...@@ -150,4 +150,8 @@ public interface FeignCommon { ...@@ -150,4 +150,8 @@ public interface FeignCommon {
@PostMapping("/staticInfo/selectSchemeByParams") @PostMapping("/staticInfo/selectSchemeByParams")
JsonViewObject selectSchemeByParams(@RequestBody QueryByCrossIdAndTimeDTO queryByCrossIdAndTimeDTO); JsonViewObject selectSchemeByParams(@RequestBody QueryByCrossIdAndTimeDTO queryByCrossIdAndTimeDTO);
// 根据条件查询临时方案下发日志
@PostMapping("/staticInfo/selectCrossSchemeOptLogByParams")
JsonViewObject selectCrossSchemeOptLogByParams(@RequestBody CrossSchemeQueryDTO crossSchemeQueryDT);
} }
package net.wanji.utc.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
/**
* @ClassName ScheduledConfig
* @Description 定时任务线程池配置
* @Author zhouleilei
* @Date 2025/1/5 17:01
*/
@Configuration
public class ScheduledConfig implements SchedulingConfigurer {
@Bean
public Executor taskExecutor() {
//指定定时任务线程数量,可根据需求自行调节
return Executors.newScheduledThreadPool(10);
}
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.setScheduler(taskExecutor());
}
}
...@@ -186,6 +186,15 @@ public class StaticInfoController { ...@@ -186,6 +186,15 @@ public class StaticInfoController {
public JsonViewObject selectSchemeByParams(@Validated @RequestBody QueryByCrossIdAndTimeDTO queryByCrossIdAndTimeDTO) throws Exception { public JsonViewObject selectSchemeByParams(@Validated @RequestBody QueryByCrossIdAndTimeDTO queryByCrossIdAndTimeDTO) throws Exception {
return staticInfoService.selectSchemeByParams(queryByCrossIdAndTimeDTO); return staticInfoService.selectSchemeByParams(queryByCrossIdAndTimeDTO);
} }
@AspectLog(description = "根据条件查询临时方案下发日志", operationType = BaseEnum.OperationTypeEnum.QUERY)
@PostMapping(value = "/selectCrossSchemeOptLogByParams", produces = MediaType.APPLICATION_JSON)
@ApiOperation(value = "根据条件查询临时方案下发日志", notes = "根据条件查询临时方案下发日志")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = CrossSchedulesPO.class)
})
public JsonViewObject selectSchemeOptLogByParams(@Validated @RequestBody CrossSchemeQueryDTO crossSchemeQueryDTO) throws Exception {
return staticInfoService.selectSchemeOptLogByParams(crossSchemeQueryDTO);
}
} }
...@@ -33,5 +33,6 @@ public interface StaticInfoService { ...@@ -33,5 +33,6 @@ public interface StaticInfoService {
JsonViewObject crossSchemeRings(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception; JsonViewObject crossSchemeRings(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception;
JsonViewObject schemeOptLog(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception; JsonViewObject schemeOptLog(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception;
JsonViewObject selectSchemeByParams(QueryByCrossIdAndTimeDTO queryByCrossIdAndTimeDTO) throws Exception; JsonViewObject selectSchemeByParams(QueryByCrossIdAndTimeDTO queryByCrossIdAndTimeDTO) throws Exception;
JsonViewObject selectSchemeOptLogByParams(CrossSchemeQueryDTO crossSchemeQueryDT) throws Exception;
} }
...@@ -2,6 +2,7 @@ package net.wanji.utc.service.staticinfo; ...@@ -2,6 +2,7 @@ package net.wanji.utc.service.staticinfo;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.databus.dao.entity.CrossSchedulesPO; import net.wanji.databus.dao.entity.CrossSchedulesPO;
import net.wanji.databus.dto.CrossSchemeQueryDTO;
import net.wanji.databus.dto.CrossSchemeRingsDTO; import net.wanji.databus.dto.CrossSchemeRingsDTO;
import net.wanji.databus.dto.QueryByCrossIdAndTimeDTO; import net.wanji.databus.dto.QueryByCrossIdAndTimeDTO;
import net.wanji.utc.common.Result; import net.wanji.utc.common.Result;
...@@ -56,4 +57,6 @@ public interface WanJiCommonStaticInfoService { ...@@ -56,4 +57,6 @@ public interface WanJiCommonStaticInfoService {
JsonViewObject crossSchemeRings(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception; JsonViewObject crossSchemeRings(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception;
JsonViewObject schemeOptLog(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception; JsonViewObject schemeOptLog(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception;
JsonViewObject selectSchemeByParams(QueryByCrossIdAndTimeDTO queryByCrossIdAndTimeDTO) throws Exception; JsonViewObject selectSchemeByParams(QueryByCrossIdAndTimeDTO queryByCrossIdAndTimeDTO) throws Exception;
JsonViewObject selectSchemeOptLogByParams(CrossSchemeQueryDTO crossSchemeQueryDT) throws Exception;
} }
...@@ -244,4 +244,11 @@ public class StaticInfoServiceImpl implements StaticInfoService { ...@@ -244,4 +244,11 @@ public class StaticInfoServiceImpl implements StaticInfoService {
jsonViewObject = wanjiCommonStaticInfoService.selectSchemeByParams(queryByCrossIdAndTimeDTO); jsonViewObject = wanjiCommonStaticInfoService.selectSchemeByParams(queryByCrossIdAndTimeDTO);
return jsonViewObject; return jsonViewObject;
} }
@Override
public JsonViewObject selectSchemeOptLogByParams(CrossSchemeQueryDTO crossSchemeQueryDT) throws Exception {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
jsonViewObject = wanjiCommonStaticInfoService.selectSchemeOptLogByParams(crossSchemeQueryDT);
return jsonViewObject;
}
} }
...@@ -14,11 +14,9 @@ import net.wanji.common.utils.tool.LocalDateTimeUtil; ...@@ -14,11 +14,9 @@ import net.wanji.common.utils.tool.LocalDateTimeUtil;
import net.wanji.common.utils.tool.StringUtils; import net.wanji.common.utils.tool.StringUtils;
import net.wanji.databus.dao.entity.*; import net.wanji.databus.dao.entity.*;
import net.wanji.databus.dao.mapper.*; import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.dto.CrossSchedulesDTO; import net.wanji.databus.dto.*;
import net.wanji.databus.dto.CrossSchemeRingsDTO;
import net.wanji.databus.dto.PlanSectionDTO;
import net.wanji.databus.dto.QueryByCrossIdAndTimeDTO;
import net.wanji.databus.po.CrossSchemeRings; import net.wanji.databus.po.CrossSchemeRings;
import net.wanji.databus.po.SchemeOptLogPO;
import net.wanji.databus.vo.CrossIdVO; import net.wanji.databus.vo.CrossIdVO;
import net.wanji.databus.vo.PlanSectionVO; import net.wanji.databus.vo.PlanSectionVO;
import net.wanji.databus.vo.SchemePhaseLightsVO; import net.wanji.databus.vo.SchemePhaseLightsVO;
...@@ -378,6 +376,20 @@ public class WanJiCommonStaticInfoServiceImpl implements WanJiCommonStaticInfoSe ...@@ -378,6 +376,20 @@ public class WanJiCommonStaticInfoServiceImpl implements WanJiCommonStaticInfoSe
return jsonViewObject; return jsonViewObject;
} }
@Override
public JsonViewObject selectSchemeOptLogByParams(CrossSchemeQueryDTO crossSchemeQueryDT) throws Exception {
String crossId = crossSchemeQueryDT.getCrossId();
String pattern = crossSchemeQueryDT.getPattern();
Date datetime = crossSchemeQueryDT.getDatetime();
long time = datetime.getTime();
SchemeOptLogPO schemeOptLogPO = new SchemeOptLogPO();
List<CrossSchemeStageOptLogPO> beforeTimeList = crossSchemeStageOptLogMapper.getBeforeTimeList(crossId, pattern, time);
List<CrossSchemeStageOptLogPO> afterTimeList = crossSchemeStageOptLogMapper.getAfterTimeList(crossId, pattern, time);
schemeOptLogPO.setBeforeTime(beforeTimeList);
schemeOptLogPO.setAfterTime(afterTimeList);
return JsonViewObject.newInstance().success(schemeOptLogPO);
}
/** /**
* @return net.wanji.databus.dao.entity.BaseCrossSchemePO * @return net.wanji.databus.dao.entity.BaseCrossSchemePO
* @Description 获取方案号 * @Description 获取方案号
......
...@@ -20,7 +20,6 @@ import net.wanji.utc.service.control.ControlCommandService; ...@@ -20,7 +20,6 @@ import net.wanji.utc.service.control.ControlCommandService;
import net.wanji.utc.service.control.ControlCommandStrategyService; import net.wanji.utc.service.control.ControlCommandStrategyService;
import net.wanji.utc.util.StringUtils; import net.wanji.utc.util.StringUtils;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List; import java.util.List;
...@@ -32,7 +31,7 @@ import java.util.concurrent.ConcurrentHashMap; ...@@ -32,7 +31,7 @@ import java.util.concurrent.ConcurrentHashMap;
* @author zhouleilei * @author zhouleilei
* @date 2024/12/30 14:01 * @date 2024/12/30 14:01
*/ */
@Component //@Component
@Slf4j @Slf4j
@SuppressWarnings("all") @SuppressWarnings("all")
public class CommandFaildTask { public class CommandFaildTask {
......
package net.wanji.utc.task;
import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
import net.wanji.databus.dto.CrossSchedulesDTO;
import net.wanji.databus.dto.PlanSectionDTO;
import net.wanji.databus.dto.SchemePhaseLightsDTO;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.utc.cache.CrossInfoCache;
import net.wanji.utc.service.staticinfo.StaticInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import java.util.ArrayList;
import java.util.List;
/**
* 定时同步方案等静态信息
*
* @author zhouleilei
* @date 2024/12/25 13:01
*/
//@Component
@Slf4j
@SuppressWarnings("all")
public class SchemeUpdateTask {
@Autowired
StaticInfoService staticInfoService;
@Scheduled(cron = "0 30 0 * * ?")
public void runningStatusAlarm() throws Exception {
for (CrossInfoPO crossInfoPO : CrossInfoCache.crossInfoList) {
if (ObjectUtil.isEmpty(crossInfoPO.getCode())) {
continue;
}
Integer manufacturerId = crossInfoPO.getManufacturerId();
String id = crossInfoPO.getId();
//同步 方案数据-方案信息、相位信息、灯组信息
SchemePhaseLightsDTO schemePhaseLightsDTO = new SchemePhaseLightsDTO();
schemePhaseLightsDTO.setCrossId(id);
staticInfoService.schemePhaseLights(schemePhaseLightsDTO);
//同步 计划数据-计划信息、时段信息
PlanSectionDTO planSectionDTO = new PlanSectionDTO();
planSectionDTO.setCrossId(id);
planSectionDTO.setPlanNo(-1);
staticInfoService.planSection(planSectionDTO);
//同步 时间表数据
CrossSchedulesDTO crossSchedulesDTO = new CrossSchedulesDTO();
if (manufacturerId == 22) {
//海信
crossSchedulesDTO.setManufacturerCode("HISENSE");
} else if (manufacturerId == 23) {
crossSchedulesDTO.setManufacturerCode("EHUALU");
}
List<String> list = new ArrayList<>();
list.add(id);
crossSchedulesDTO.setCrossIdList(list);
staticInfoService.crossSchedules(crossSchedulesDTO);
log.info("路口 {} 定时同步完成", id);
}
}
}
...@@ -2,6 +2,9 @@ package net.wanji.databus.dao.mapper; ...@@ -2,6 +2,9 @@ package net.wanji.databus.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO; import net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* @ClassName CrossSchemeOptLogMapper * @ClassName CrossSchemeOptLogMapper
...@@ -10,4 +13,21 @@ import net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO; ...@@ -10,4 +13,21 @@ import net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO;
* @Date 2024/11/23 14:34 * @Date 2024/11/23 14:34
*/ */
public interface CrossSchemeStageOptLogMapper extends BaseMapper<CrossSchemeStageOptLogPO> { public interface CrossSchemeStageOptLogMapper extends BaseMapper<CrossSchemeStageOptLogPO> {
/**
* @Description 根据路口号,方案号查询时间戳30分钟前的数据
* @Param [crossId, pattern, timeStamp]
* @return java.util.List<net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO>
**/
List<CrossSchemeStageOptLogPO> getBeforeTimeList(@Param("crossId") String crossId, @Param("pattern") String pattern, @Param("timeStamp") long timeStamp);
/**
* @Description 根据路口号,方案号查询时间戳30分钟后的数据
* @Param [crossId, pattern, timeStamp]
* @return java.util.List<net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO>
**/
List<CrossSchemeStageOptLogPO> getAfterTimeList(@Param("crossId") String crossId, @Param("pattern") String pattern, @Param("timeStamp") long timeStamp);
} }
package net.wanji.databus.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.util.Date;
/**
* @ClassName CrossSchemeRings
* @Description 5.15. 方案环图请求
* @Author zhouleilei
* @Date 2024/11/5 10:37
*/
@Data
@Valid
@ApiModel(value="查询临时方案参数", description="")
public class CrossSchemeQueryDTO {
@ApiModelProperty(value = "路口ID")
@Pattern(regexp = "^[A-Za-z0-9]{11}$", message = "路口编号只能包含英文、数字,必须11个字符")
@NotNull(message = "crossId不能为空")
private String crossId;
@ApiModelProperty(value = "方案号")
@NotNull(message = "pattern 不能为空")
private String pattern;
@ApiModelProperty(value = "查询时间 yyyy-MM-dd HH:mm:ss", required = true)
@NotNull(message = "datetime不可为空")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date datetime;
}
package net.wanji.databus.po;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO;
import java.util.List;
/**
* @ClassName SchemeOptLogPO
* @Description TODO
* @Author zhouleilei
* @Date 2025/1/7 18:56
*/
@Data
@ApiModel(value="查询方案对比参数", description="")
public class SchemeOptLogPO {
@ApiModelProperty(value = "指定时间之前的数据")
private List<CrossSchemeStageOptLogPO> beforeTime;
@ApiModelProperty(value = "指定时间之后的数据")
private List<CrossSchemeStageOptLogPO> afterTime;
}
<?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.databus.dao.mapper.CrossSchemeStageOptLogMapper"> <mapper namespace="net.wanji.databus.dao.mapper.CrossSchemeStageOptLogMapper">
<select id="getBeforeTimeList" resultType="net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO">
SELECT *
FROM t_cross_scheme_opt_log
WHERE
batch_time = (
SELECT MAX(batch_time) FROM t_cross_scheme_opt_log
WHERE cross_id = #{crossId} AND scheme_id = #{pattern}
AND batch_time >= (#{timeStamp}-30*60*1000) AND batch_time &lt; #{timeStamp})
</select>
<select id="getAfterTimeList" resultType="net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO">
SELECT *
FROM t_cross_scheme_opt_log
WHERE
batch_time = (
SELECT MIN(batch_time) FROM t_cross_scheme_opt_log
WHERE cross_id = #{crossId} AND scheme_id = #{pattern}
AND batch_time >= (#{timeStamp}) AND batch_time &lt; (#{timeStamp}+30*60*1000))
</select>
</mapper> </mapper>
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