Commit 89938984 authored by zhoushiguang's avatar zhoushiguang

干线周报接口-优化计算

parent c886e08d
......@@ -248,77 +248,78 @@ public class OptimizeStatisticTask {
Map<String, List<StrategyCrossResultEntity>> groupByCross = list.stream().collect(Collectors.groupingBy(StrategyCrossResultEntity::getCrossId));
for (Map.Entry<String, List<StrategyCrossResultEntity>> entry : groupByCross.entrySet()) {
List<StrategyCrossResultEntity> value = entry.getValue();
StrategyCrossResultEntity minTime = value.stream().min(Comparator.comparing(o->o.getIssueTime())).orElse(new StrategyCrossResultEntity());
StrategyCrossResultEntity maxTime = value.stream().max(Comparator.comparing(o->o.getIssueTime())).orElse(new StrategyCrossResultEntity());
int duration = value.stream().mapToInt(o->o.getDuration()).sum();
long count = value.size();
//优化控制时段-开始时间
String controlStartTime = DateUtil.formatDate(minTime.getIssueTime(), "yyyy-MM-dd HH:mm:ss");
//优化控制时段-截止时间
String controlEndTime = new DateTime(maxTime.getIssueTime()).plusSeconds(duration).toString(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));
for (StrategyCrossResultEntity result : value) {
//优化控制时段-开始时间
String controlStartTime = DateUtil.formatDate(result.getIssueTime(), "yyyy-MM-dd HH:mm:ss");
//优化控制时段-截止时间
String controlEndTime = new DateTime(result.getIssueTime()).plusSeconds(result.getDuration()).toString(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));
DateTime optStartTime = DateTime.parse(controlStartTime, DateTimeFormat.forPattern(EsDateIndexUtil.YMD_HM_FORMATTER)).minusMinutes(15);
String optStartTimeStr = controlStartTime.substring(0, controlStartTime.indexOf(" ") + 1) + Tools.fillZeroFront(optStartTime.getHourOfDay() + "", 2) + ":" + Tools.fillZeroFront((int) Math.ceil(optStartTime.getMinuteOfHour() / 5) * 5 + "", 2) + ":00";
Map<String, Object> params = new HashMap<>();
params.put("crossId", result.getCrossId());
params.put("startDate", optStartTimeStr);
params.put("endDate", controlEndTime);
params.put("groupType", "0");
params.put("objectType", "4");
//本周指标数据
List<CrossLaneDataHistPoExtend> thisWeekList = greenwaveHistoryMapper.findCrossObjectIndex(params);
AnalysisReportCrossOptimizeDetail thisData = this.getWeedData(thisWeekList);
//上周策略同期-开始时间
DateTime lastWeekDateStartTime = optStartTime.minusWeeks(1).minusMinutes(15);
;
String lastWeekStartTime = lastWeekDateStartTime.toString(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));
String lastOptStartTimeStr = lastWeekStartTime.substring(0, lastWeekStartTime.indexOf(" ") + 1) + Tools.fillZeroFront(lastWeekDateStartTime.getHourOfDay() + "", 2) + ":" + Tools.fillZeroFront((int) Math.ceil(lastWeekDateStartTime.getMinuteOfHour() / 5) * 5 + "", 2) + ":00";
//上周策略同期-截止时间
String lastWeekEndTime = lastWeekDateStartTime.plusSeconds(result.getDuration()).toString(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));
params.put("startDate", lastOptStartTimeStr);
params.put("endDate", lastWeekEndTime);
//上周指标数据
List<CrossLaneDataHistPoExtend> lastWeekList = greenwaveHistoryMapper.findCrossObjectIndex(params);
AnalysisReportCrossOptimizeDetail lastData = this.getWeedData(lastWeekList);
DateTime issueTime = new DateTime(result.getIssueTime());
AnalysisReportCrossOptimizeDetail detail = new AnalysisReportCrossOptimizeDetail();
detail.setCrossId(result.getCrossId());
detail.setYearWeek(Integer.parseInt(issueTime.getYear() + "" + issueTime.getWeekOfWeekyear()));
detail.setWeekDay(issueTime.getDayOfWeek() + 1);
detail.setWeekStartTime(cn.hutool.core.date.DateUtil.beginOfWeek(result.getIssueTime()).toLocalDateTime());
;
detail.setWeekEndTime(cn.hutool.core.date.DateUtil.endOfWeek(result.getIssueTime()).toLocalDateTime());
detail.setOptimizeCount(1);
detail.setOptimizeDuration(result.getDuration());
detail.setOptimizeStartTime(LocalDateTime.parse(controlStartTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
detail.setOptimizeEndTime(LocalDateTime.parse(controlEndTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
detail.setStragetyId(result.getCurrentAlgo());
detail.setCapacity(thisData.getCapacity());
detail.setStopTimes(thisData.getStopTimes());
detail.setDelayTime(thisData.getDelayTime());
detail.setMaxQueueLength(thisData.getMaxQueueLength());
detail.setLastWeekCapacity(lastData.getCapacity());
detail.setLastWeekStopTimes(lastData.getStopTimes());
detail.setLastWeekDelayTime(lastData.getDelayTime());
detail.setLastWeekMaxQueueLength(lastData.getMaxQueueLength());
String eventSerialNumber = result.getEventId();
Map<String, Object> eventParma = new HashMap<>();
eventParma.put("eventSerialNumber", eventSerialNumber);
List<EventInfo> eventInfoList = eventInfoMapper.findByMap(eventParma);
//获取事件方向
if (!eventInfoList.isEmpty()) {
String dir = eventInfoList.get(0).getDir();
detail.setDirs(CommonUtils.getEventHappenDirName(dir));
}
optimizeList.add(detail);
if (optimizeList.size() % 500 == 0) {
analysisReportCrossOptimizeDetailMapper.insertBatch(optimizeList);
optimizeList.clear();
log.info("计算路口周报-路口优分批入库耗时:{}ms,size:{} ,starDate:{}", System.currentTimeMillis() - et1,optimizeList.size(), startDate);
}
DateTime optStartTime = DateTime.parse(controlStartTime, DateTimeFormat.forPattern(EsDateIndexUtil.YMD_HM_FORMATTER)).minusMinutes(15);
String optStartTimeStr = controlStartTime.substring(0, controlStartTime.indexOf(" ") + 1) + Tools.fillZeroFront(optStartTime.getHourOfDay() + "", 2) + ":" + Tools.fillZeroFront((int) Math.ceil(optStartTime.getMinuteOfHour() / 5) * 5 + "", 2) + ":00";
Map<String, Object> params = new HashMap<>();
params.put("crossId", entry.getKey());
params.put("startDate", optStartTimeStr);
params.put("endDate", controlEndTime);
params.put("groupType", "0");
params.put("objectType", "4");
//本周指标数据
List<CrossLaneDataHistPoExtend> thisWeekList = greenwaveHistoryMapper.findCrossObjectIndex(params);
AnalysisReportCrossOptimizeDetail thisData = this.getWeedData(thisWeekList);
//上周策略同期-开始时间
DateTime lastWeekDateStartTime = optStartTime.minusWeeks(1).minusMinutes(15);
;
String lastWeekStartTime = lastWeekDateStartTime.toString(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));
String lastOptStartTimeStr = lastWeekStartTime.substring(0, lastWeekStartTime.indexOf(" ") + 1) + Tools.fillZeroFront(lastWeekDateStartTime.getHourOfDay() + "", 2) + ":" + Tools.fillZeroFront((int) Math.ceil(lastWeekDateStartTime.getMinuteOfHour() / 5) * 5 + "", 2) + ":00";
//上周策略同期-截止时间
String lastWeekEndTime = lastWeekDateStartTime.plusSeconds(minTime.getDuration()).toString(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));
params.put("startDate", lastOptStartTimeStr);
params.put("endDate", lastWeekEndTime);
//上周指标数据
List<CrossLaneDataHistPoExtend> lastWeekList = greenwaveHistoryMapper.findCrossObjectIndex(params);
AnalysisReportCrossOptimizeDetail lastData = this.getWeedData(lastWeekList);
DateTime issueTime = new DateTime(minTime.getIssueTime());
AnalysisReportCrossOptimizeDetail detail = new AnalysisReportCrossOptimizeDetail();
detail.setCrossId(minTime.getCrossId());
detail.setYearWeek(Integer.parseInt(issueTime.getYear() + "" + issueTime.getWeekOfWeekyear()));
detail.setWeekDay(issueTime.getDayOfWeek() + 1);
detail.setWeekStartTime(cn.hutool.core.date.DateUtil.beginOfWeek(minTime.getIssueTime()).toLocalDateTime());
;
detail.setWeekEndTime(cn.hutool.core.date.DateUtil.endOfWeek(minTime.getIssueTime()).toLocalDateTime());
detail.setOptimizeCount((int)count);
detail.setOptimizeDuration(duration);
detail.setOptimizeStartTime(LocalDateTime.parse(controlStartTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
detail.setOptimizeEndTime(LocalDateTime.parse(controlEndTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
detail.setStragetyId(minTime.getCurrentAlgo());
detail.setCapacity(thisData.getCapacity());
detail.setStopTimes(thisData.getStopTimes());
detail.setDelayTime(thisData.getDelayTime());
detail.setMaxQueueLength(thisData.getMaxQueueLength());
detail.setLastWeekCapacity(lastData.getCapacity());
detail.setLastWeekStopTimes(lastData.getStopTimes());
detail.setLastWeekDelayTime(lastData.getDelayTime());
detail.setLastWeekMaxQueueLength(lastData.getMaxQueueLength());
String eventSerialNumber = minTime.getEventId();
Map<String, Object> eventParma = new HashMap<>();
eventParma.put("eventSerialNumber", eventSerialNumber);
List<EventInfo> eventInfoList = eventInfoMapper.findByMap(eventParma);
//获取事件方向
if (!eventInfoList.isEmpty()) {
String dir = eventInfoList.get(0).getDir();
detail.setDirs(CommonUtils.getEventHappenDirName(dir));
}
optimizeList.add(detail);
if (optimizeList.size() % 500 == 0) {
analysisReportCrossOptimizeDetailMapper.insertBatch(optimizeList);
optimizeList.clear();
log.info("计算路口周报-路口优分批入库耗时:{}ms,size:{} ,starDate:{}", System.currentTimeMillis() - et1,optimizeList.size(), startDate);
}
}
//==========================================================================================================//
......
......@@ -22,7 +22,7 @@ import java.util.List;
*/
public class CodeGeneratorMYSQLPlus {
static String baseOutputDir = "./signal-optimize-service";
static String subModulePackage = ".judgeanalysis";
static String subModulePackage = ".report";
public static void main(String[] args) {
// 生成地址 : // System.getProperty("user.dir") == 得到当前项目的实际地址
......@@ -32,7 +32,7 @@ public class CodeGeneratorMYSQLPlus {
System.out.println(outputDir);
// 表名, 注意大小写
String[] tableNames = new String[]{"t_analysis_problem_green_day"};
String[] tableNames = new String[]{"t_analysis_report_cross_optimize_detail"};
// 数据库地址
String url = "jdbc:mysql://localhost:3306/wjdit_ecosystem_db_v1.0.0?serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&characterEncoding=utf8";
......
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