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);
/** /**
......
...@@ -15,10 +15,7 @@ import net.wanji.databus.bo.CrossIdBO; ...@@ -15,10 +15,7 @@ import net.wanji.databus.bo.CrossIdBO;
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.*; import net.wanji.databus.dto.*;
import net.wanji.databus.po.BaseCrossLightsPO; import net.wanji.databus.po.*;
import net.wanji.databus.po.CrossBaseLaneInfoPO;
import net.wanji.databus.po.CrossLaneLightsPO;
import net.wanji.databus.po.SaveToUtcPO;
import net.wanji.databus.vo.*; import net.wanji.databus.vo.*;
import net.wanji.feign.service.UtcFeignClients; import net.wanji.feign.service.UtcFeignClients;
import net.wanji.web.common.enums.CrossDirChangeEnum; import net.wanji.web.common.enums.CrossDirChangeEnum;
...@@ -41,7 +38,6 @@ import javax.validation.constraints.NotNull; ...@@ -41,7 +38,6 @@ import javax.validation.constraints.NotNull;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* @author Kent HAN * @author Kent HAN
...@@ -728,15 +724,19 @@ public class PlanSendServiceImpl implements PlanSendService { ...@@ -728,15 +724,19 @@ public class PlanSendServiceImpl implements PlanSendService {
if (schemeId == 85){ if (schemeId == 85){
return ringPhasePO; return ringPhasePO;
} }
CrossIdBO crossIdBO = new CrossIdBO(); /*CrossIdBO crossIdBO = new CrossIdBO();
crossIdBO.setCrossId(crossIdAndTimeDTO.getCrossId()); crossIdBO.setCrossId(crossIdAndTimeDTO.getCrossId());
SaveSchemeConfigDTO saveSchemeConfigDTO = schemeConfigServiceImpl.listSchemeConfig(crossIdBO); SaveSchemeConfigDTO saveSchemeConfigDTO = schemeConfigServiceImpl.listSchemeConfig(crossIdBO);
List<SaveSchemeConfigDTO.PhaseScheme> phaseSchemeList = saveSchemeConfigDTO.getPhaseSchemeList(); List<SaveSchemeConfigDTO.PhaseScheme> phaseSchemeList = saveSchemeConfigDTO.getPhaseSchemeList();
*/
List<SaveSchemeConfigDTO.PhaseScheme> phaseSchemeList = schemeConfigServiceImpl.buildPhaseSchemeListByCrossIdAndSchemeNo(crossIdAndTimeDTO.getCrossId(), String.valueOf(schemeId));
if (ObjectUtil.isEmpty(phaseSchemeList)){ if (ObjectUtil.isEmpty(phaseSchemeList)){
return ringPhasePO; return ringPhasePO;
} }
List<SaveSchemeConfigDTO.PhaseScheme> collected = phaseSchemeList.stream().filter(x -> x.getSchemeNo().equals(content.getSchemeNo())).collect(Collectors.toList()); /*List<SaveSchemeConfigDTO.PhaseScheme> collected = phaseSchemeList.stream().filter(x -> x.getSchemeNo().equals(content.getSchemeNo())).collect(Collectors.toList());
SaveSchemeConfigDTO.PhaseScheme phaseScheme = collected.get(0); SaveSchemeConfigDTO.PhaseScheme phaseScheme = collected.get(0);*/
SaveSchemeConfigDTO.PhaseScheme phaseScheme = phaseSchemeList.get(0);
SaveSchemeConfigDTO.RingListElement ringListElement = phaseScheme.getRingList().get(0); SaveSchemeConfigDTO.RingListElement ringListElement = phaseScheme.getRingList().get(0);
List<SaveSchemeConfigDTO.GroupListElement> groupList = ringListElement.getGroupList(); List<SaveSchemeConfigDTO.GroupListElement> groupList = ringListElement.getGroupList();
SaveSchemeConfigDTO.GroupListElement groupListElement = groupList.get(0); SaveSchemeConfigDTO.GroupListElement groupListElement = groupList.get(0);
...@@ -796,6 +796,164 @@ public class PlanSendServiceImpl implements PlanSendService { ...@@ -796,6 +796,164 @@ public class PlanSendServiceImpl implements PlanSendService {
return ringPhasePO; return ringPhasePO;
} }
@Override
public RingPhasePO phaseListByTimeRingNew(CrossIdAndTimeDTO crossIdAndTimeDTO) {
RingPhasePO ringPhasePO = new RingPhasePO();
List<SaveSchemeConfigDTO.PhaseListElement> oriPhaseList = new ArrayList<>();
List<SaveSchemeConfigDTO.PhaseListElement> optPhaseList = new ArrayList<>();
QueryByCrossIdAndTimeDTO queryByCrossIdAndTimeDTO = new QueryByCrossIdAndTimeDTO();
queryByCrossIdAndTimeDTO.setCrossId(crossIdAndTimeDTO.getCrossId());
queryByCrossIdAndTimeDTO.setDatetime(crossIdAndTimeDTO.getDatetime());
JsonViewObject jsonViewObject = utcFeignClients.selectSchemeByParams(queryByCrossIdAndTimeDTO);
if (jsonViewObject.getCode() != 200){
return ringPhasePO;
}
ObjectMapper objectMapper = JacksonUtils.getInstance();
BaseCrossSchemePO content = objectMapper.convertValue(jsonViewObject.getContent(), BaseCrossSchemePO.class);
if (ObjectUtil.isEmpty(content)){
return ringPhasePO;
}
int schemeId = Integer.valueOf(content.getSchemeNo());
//黃闪
if (schemeId == 85){
return ringPhasePO;
}
List<SaveSchemeConfigDTO.PhaseScheme> phaseSchemeList = schemeConfigServiceImpl.buildPhaseSchemeListByCrossIdAndSchemeNo(crossIdAndTimeDTO.getCrossId(), String.valueOf(schemeId));
if (ObjectUtil.isEmpty(phaseSchemeList)){
return ringPhasePO;
}
SaveSchemeConfigDTO.PhaseScheme phaseScheme = phaseSchemeList.get(0);
SaveSchemeConfigDTO.RingListElement ringListElement = phaseScheme.getRingList().get(0);
List<SaveSchemeConfigDTO.GroupListElement> groupList = ringListElement.getGroupList();
SaveSchemeConfigDTO.GroupListElement groupListElement = groupList.get(0);
oriPhaseList = groupListElement.getPhaseList();
if (ObjectUtil.isNotEmpty(oriPhaseList)) {
//修改方向
oriPhaseList.forEach(x -> {
List<SaveSchemeConfigDTO.DirListElement> dirList = x.getDirList();
if (ObjectUtil.isNotNull(dirList)){
dirList.forEach(dir -> {
dir.setDir(CrossDirChangeEnum.getMsgByCode(dir.getDir()).getDir());
});
}
});
//TODO 查询当前时间前后半小时的数据
CrossSchemeQueryDTO crossSchemeQueryDT = new CrossSchemeQueryDTO();
crossSchemeQueryDT.setCrossId(crossIdAndTimeDTO.getCrossId());
crossSchemeQueryDT.setPattern(String.valueOf(schemeId));
crossSchemeQueryDT.setDatetime(crossIdAndTimeDTO.getDatetime());
JsonViewObject viewObject = utcFeignClients.selectCrossSchemeOptLogByParams(crossSchemeQueryDT);
Integer optCode = viewObject.getCode();
if (optCode != 200 ) {
optPhaseList = oriPhaseList;
log.error("远程调用,获取优化后的方案信息 异常,路口id:{},方案号:", crossIdAndTimeDTO.getCrossId(), schemeId);
} else {
ObjectMapper mapper = JacksonUtils.getInstance();
SchemeOptLogPO schemeOptLogPO = mapper.convertValue(viewObject.getContent(), new TypeReference<SchemeOptLogPO>() {
});
List<CrossSchemeStageOptLogPO> beforeTime = schemeOptLogPO.getBeforeTime();
List<CrossSchemeStageOptLogPO> afterTime = schemeOptLogPO.getAfterTime();
//30分钟之前有数据,取就行 ;如果30分钟之前没有数,则取原方案
if (CollectionUtil.isNotEmpty(beforeTime)){
for (int i = 0; i < beforeTime.size(); i++) {
if (i == oriPhaseList.size()){
break;
}
CrossSchemeStageOptLogPO optLogPO = beforeTime.get(i);
SaveSchemeConfigDTO.PhaseListElement phaseListElement = oriPhaseList.get(i);
SaveSchemeConfigDTO.PhaseListElement optPhase = new SaveSchemeConfigDTO.PhaseListElement();
BeanUtils.copyProperties(phaseListElement,optPhase);
Integer yellowTime = phaseListElement.getYellowTime();
Integer redTime = phaseListElement.getRedTime();
//相位时间
Integer phaseTime = optLogPO.getPhaseTime();
//绿灯时间
int greenTime = phaseTime - yellowTime - redTime;
if (greenTime <= 0){
optPhase.setGreenTime(phaseTime);
optPhase.setYellowTime(0);
optPhase.setRedTime(0);
}else {
optPhase.setGreenTime(greenTime);
}
optPhaseList.add(optPhase);
}
oriPhaseList.clear();
oriPhaseList.addAll(optPhaseList);
}
if (CollectionUtil.isNotEmpty(afterTime)){
optPhaseList.clear();
for (int i = 0; i < afterTime.size(); i++) {
if (i == oriPhaseList.size()){
break;
}
CrossSchemeStageOptLogPO optLogPO = beforeTime.get(i);
SaveSchemeConfigDTO.PhaseListElement phaseListElement = oriPhaseList.get(i);
SaveSchemeConfigDTO.PhaseListElement optPhase = new SaveSchemeConfigDTO.PhaseListElement();
BeanUtils.copyProperties(phaseListElement,optPhase);
Integer yellowTime = phaseListElement.getYellowTime();
Integer redTime = phaseListElement.getRedTime();
//相位时间
Integer phaseTime = optLogPO.getPhaseTime();
//绿灯时间
int greenTime = phaseTime - yellowTime - redTime;
if (greenTime <= 0){
optPhase.setGreenTime(phaseTime);
optPhase.setYellowTime(0);
optPhase.setRedTime(0);
}else {
optPhase.setGreenTime(greenTime);
}
optPhaseList.add(optPhase);
}
}
/* List<CrossSchemeStageOptLogPO> crossSchedulesPOList = mapper.convertValue(optView.getContent(), new TypeReference<List<CrossSchemeStageOptLogPO>>() {
});
if (ObjectUtils.isNotEmpty(crossSchedulesPOList)) {
for (int i = 0; i < crossSchedulesPOList.size(); i++) {
if (i == oriPhaseList.size()){
break;
}
CrossSchemeStageOptLogPO optLogPO = crossSchedulesPOList.get(i);
SaveSchemeConfigDTO.PhaseListElement phaseListElement = oriPhaseList.get(i);
SaveSchemeConfigDTO.PhaseListElement optPhase = new SaveSchemeConfigDTO.PhaseListElement();
BeanUtils.copyProperties(phaseListElement,optPhase);
Integer yellowTime = phaseListElement.getYellowTime();
Integer redTime = phaseListElement.getRedTime();
//相位时间
Integer phaseTime = optLogPO.getPhaseTime();
//绿灯时间
int greenTime = phaseTime - yellowTime - redTime;
if (greenTime <= 0){
optPhase.setGreenTime(phaseTime);
optPhase.setYellowTime(0);
optPhase.setRedTime(0);
}else {
optPhase.setGreenTime(greenTime);
}
optPhaseList.add(optPhase);
}
}*/
}
}
ringPhasePO.setOriPhaseList(oriPhaseList);
ringPhasePO.setOptPhaseList(optPhaseList);
return ringPhasePO;
}
@Override @Override
public List<SaveSchemeConfigDTO.PhaseListElement> phaseListByTimeSingleRing(CrossIdAndTimeDTO crossIdAndTimeDTO) { public List<SaveSchemeConfigDTO.PhaseListElement> phaseListByTimeSingleRing(CrossIdAndTimeDTO crossIdAndTimeDTO) {
List<SaveSchemeConfigDTO.PhaseListElement> phaseListByTime = new ArrayList<>(); List<SaveSchemeConfigDTO.PhaseListElement> phaseListByTime = new ArrayList<>();
......
...@@ -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