Commit a981bb1b authored by duanruiming's avatar duanruiming

Merge remote-tracking branch 'origin/master'

parents 00bf0bfb 489e3f6f
......@@ -36,6 +36,26 @@ public class GreenWaveCrossRidController {
@ApiOperation(httpMethod="GET",value="干线拥堵信息", notes="")
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔", required = true, dataType = "String",defaultValue = "1,2"),
@ApiImplicitParam(name = "dayType", value = "高峰类型 1早高峰 2晚高峰 3全天", required = true, dataType = "String",defaultValue = "1"),
})
@GetMapping(value = "/getGreenWeekDataList")
public JsonViewObject getGreenWeekDataList(@RequestParam(value = "ids", required = false, defaultValue = "2") String ids,
@RequestParam(value = "type", required = false, defaultValue = "2") String type
) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try {
JSONObject object = greenWaveCrossRidService.getGreenInfoList(ids);
jsonViewObject.success(object);
} catch (Exception e) {
jsonViewObject.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonViewObject;
}
@ApiOperation(httpMethod="GET",value="干线基础信息", notes="")
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔", required = true, dataType = "String",defaultValue = "1,2"),
......
package net.wanji.opt.controllerv2.report;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.i18n.I18nResourceBundle;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.controllerv2.judgeanalysis.design.response.areaproblem.AreaCrossProblemAnalysisResult;
import net.wanji.opt.controllerv2.report.design.GreenReportOverviewAnalysisResult;
import net.wanji.opt.controllerv2.report.design.GreenReportSamePeriodCompareResult;
import net.wanji.opt.servicev2.report.GreenWaveCrossRidService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 干线概况 接口API
* </p>
* @version 1.0
* @author
* @Date 2025-03-18
*/
@RestController
@Slf4j
@RequestMapping("/green-wave-overview")
@Api(value="GreenWaveCrossRidController", description="干线分析报告接口", tags = "干线分析报告")
public class GreenWaveOverviewController {
@Autowired
private GreenWaveCrossRidService greenWaveCrossRidService;
@ApiOperation(httpMethod="GET",value="干线概况-总体情况说明", notes="")
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔【为空时查询所有干线】", required = true, dataType = "String",defaultValue = "1,2"),
@ApiImplicitParam(name = "year", value = "年份", required = true, dataType = "String",defaultValue = "2025"),
@ApiImplicitParam(name = "week", value = "一年的第几周", required = true, dataType = "String",defaultValue = "20"),
})
@GetMapping(value = "/getOverallSituation")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = GreenReportOverviewAnalysisResult.class),
})
public JsonViewObject getGreenInfoList(Integer year,Integer week, String ids) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try {
} catch (Exception e) {
jsonViewObject.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonViewObject;
}
@ApiOperation(httpMethod="GET",value="干线概况-工作日同期对比", notes="")
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔", required = true, dataType = "String",defaultValue = "1,2"),
@ApiImplicitParam(name = "year", value = "年份", required = true, dataType = "String",defaultValue = "2025"),
@ApiImplicitParam(name = "week", value = "一年的第几周", required = true, dataType = "String",defaultValue = "20"),
})
@GetMapping(value = "/getSamePeriodCompare")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = GreenReportSamePeriodCompareResult.class),
})
public JsonViewObject getSamePeriodCompare(Integer year,Integer week, String ids) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try {
} catch (Exception e) {
jsonViewObject.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonViewObject;
}
}
......@@ -79,7 +79,7 @@ class GreenReportOverview {
@ApiModelProperty(value = "最长时间拥堵时段分布",example = "周一7:30~8:15")
private String maxCongestTimeDistribute;
@ApiModelProperty(value = "本周拥堵时段集中分布情况",example = "周一7:30~8:15")
@ApiModelProperty(value = "本周拥堵时段集中分布情况",example = "周一7:30~8:15,周五17:30~18:15")
private String weekCongestTimeDistribute;
}
......
package net.wanji.opt.controllerv2.report.design;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.wanji.opt.controllerv2.judgeanalysis.design.response.ParentResult;
import java.util.ArrayList;
import java.util.List;
@Data
public class GreenReportSamePeriodCompareResult extends ParentResult {
private List<GreenReportSamePeriodCompareDataResponse> content;
public List<GreenReportSamePeriodCompareDataResponse> getContent() {
return content;
}
public GreenReportSamePeriodCompareResult setContent(List<GreenReportSamePeriodCompareDataResponse> content) {
this.content = content;
return this;
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}
@Data
class GreenReportSamePeriodCompareDataResponse {
@ApiModelProperty(value = "路口ID", example = "")
private String greenId;
@ApiModelProperty(value = "干线名称", example = "")
private String greenName;
@ApiModelProperty(value = "早高峰流量情况", example = "减少")
private String amPeakSituation;
@ApiModelProperty(value = "晚高峰流量情况", example = "减少")
private String pmPeakSituation;
@ApiModelProperty(value = "行程时间同比情况", example = "增加20s")
private String amTravelTimeSituation;
@ApiModelProperty(value = "行程时间同比情况", example = "减少20s")
private String pmTravelTimeSituation;
private List<GreenReportSamePeriodData> dataList = new ArrayList<>();
}
@Data
class GreenReportSamePeriodData {
@ApiModelProperty(value = "峰期类型 早高峰、晚高峰、全天", example = "早高峰")
private String peakName;
@ApiModelProperty(value = "通行量(辆)", example = "736278")
private Integer peakFlow;
@ApiModelProperty(value = "通行量同比", example = "-1.5%")
private Double peakFlowRatio;
@ApiModelProperty(value = "拥堵指数", example = "3.5")
private Double congestIndex;
@ApiModelProperty(value = "拥堵指数同比", example = "3.5%")
private Double congestIndexRatio;
@ApiModelProperty(value = "平均车速km/h", example = "30.5")
private Double avgSpeed;
@ApiModelProperty(value = "平均车速同比", example = "-1.5%")
private Double avgSpeedRatio;
@ApiModelProperty(value = "行程时间(分钟)", example = "6.5")
private Double travelTime;
@ApiModelProperty(value = "行程时间同比", example = "-1.5%")
private Double travelTimeRatio;
}
package net.wanji.opt.controllerv2.strategy;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.i18n.I18nResourceBundle;
......@@ -12,6 +13,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import net.wanji.opt.entity.strategy.dto.StrategyPriorityGroup;
import net.wanji.opt.servicev2.strategy.StrategyPriorityService;
import net.wanji.opt.synthesis.pojo.StrategyFactoryEntity;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -33,7 +35,7 @@ import java.util.Map;
* @author fengyi
* @since 2025-03-28
*/
@Api(tags = "策略优先级日计划详情表")
@Api(tags = "策略管理")
@RestController
@RequestMapping("/strategy-priority")
@Slf4j
......@@ -147,4 +149,38 @@ public class StrategyPriorityController {
}
return jsonView;
}
@ApiOperation(value = "策略管理-策略优先级批量保存", notes = "批量保存", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON,hidden = false)
@ApiImplicitParams({
@ApiImplicitParam(name = "dataList", value = "优先级配置数据", required = false, dataType = "String"),
})
@PostMapping("/savePriority")
public JsonViewObject savePriority(@RequestBody List<StrategyPriorityGroup>dataList){
JsonViewObject jsonView = JsonViewObject.newInstance();
try {
strategyPriorityService.savePriority(dataList);
jsonView.success();
} catch (Exception e) {
jsonView.fail(I18nResourceBundle.getConstants("SAVE_FAILED_MSG"));
log.error("{} StrategyPriorityController-savePriority", this.getClass().getSimpleName(), e);
}
return jsonView;
}
@ApiOperation(value = "策略管理-策略优先级数据回显", notes = "数据回显", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON,hidden = false)
@ApiImplicitParams({
@ApiImplicitParam(name = "crossId", value = "路口id", required = true, dataType = "String")
})
@GetMapping("/getPriorityConfig")
public JsonViewObject getPriorityData(@RequestParam(required = true) String crossId){
JsonViewObject jsonView = JsonViewObject.newInstance();
try {
List<StrategyFactoryEntity>list=strategyPriorityService.getPriorityData(crossId);
jsonView.success(list);
} catch (Exception e) {
jsonView.fail(I18nResourceBundle.getConstants("SAVE_FAILED_MSG"));
log.error("{} StrategyPriorityController-getPriorityData", this.getClass().getSimpleName(), e);
}
return jsonView;
}
}
\ No newline at end of file
package net.wanji.opt.controllerv2.syslog;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.rest.JsonViewObject;
......@@ -35,18 +36,19 @@ public class sysLogController {
@ApiImplicitParam(name = "crossId", value = "路口id", required = true, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "startTime", value = "日期 格式:yyyy-MM-dd h:i:s", required = true, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "endTime", value = "日期 格式:yyyy-MM-dd h:i:s", required = true, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "pageNum", value = "分页页码", required = true, dataType = "Integer", paramType = "query"),
@ApiImplicitParam(name = "pageSize", value = "分页数据条数", required = true, dataType = "Integer", paramType = "query"),
})
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = String.class),
})
public JsonViewObject getOptimizeLog(String crossId,String startTime,String endTime) {
List<SysOptimizeLog> list = Collections.emptyList();
public JsonViewObject getOptimizeLog(String crossId,String startTime,String endTime,Integer pageNum,Integer pageSize) {
try {
list = sysLogServer.findSysOptimizeLog(crossId,startTime,endTime);
JSONObject list = sysLogServer.findSysOptimizeLog(crossId,startTime,endTime,pageNum,pageSize);
return JsonViewObject.newInstance().success(list);
} catch (Exception e) {
log.error("系统日志-优化日志-查询失败:{}", e);
JsonViewObject.newInstance().success(list);
return JsonViewObject.newInstance().success("");
}
return JsonViewObject.newInstance().success(list);
}
}
package net.wanji.opt.dao.mapper.judgeanalysis;
import net.wanji.opt.entity.judgeanalysis.AnalysisGreenCongestionPeriod;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
public interface AnalysisGreenCongestionPeriodMapper {
List<AnalysisGreenCongestionPeriod> selectGreenDataHist(@Param("date") String date);
void insertGreenCongestionPeriodData(Map<String, Object> map);
}
package net.wanji.opt.dao.mapper.report;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.databus.dao.entity.GreenwaveHistPO;
import net.wanji.opt.entity.report.ConfigPeakHours;
import net.wanji.opt.entity.report.GreenWaveWeekData;
import net.wanji.opt.servicev2.report.GreenWaveWeekDataService;
......@@ -22,5 +23,7 @@ public interface GreenWaveWeekDataMapper extends BaseMapper<GreenWaveWeekData> {
Integer getFlowByTime(@Param("greenId") Integer greenId,@Param("dir") Integer dir,@Param("startDate") String startDate,@Param("endDate") String endDate,@Param("startTime") String startTime,@Param("endTime") String endTime);
void insertOrUpdateBatch(@Param("list") List<GreenWaveWeekData> greenWaveWeekDataList);
List<GreenwaveHistPO> selectAllByTime(@Param("greenId") Integer greenId,@Param("roadDirection") String roadDirection,@Param("startDate") String startDate,@Param("endDate") String endDate,@Param("startTime") String startTime,@Param("endTime") String endTime);
// MyBatis-Plus 提供了基本的 CRUD 方法,这里无需额外定义
}
\ No newline at end of file
package net.wanji.opt.dao.mapper.strategy;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.wanji.opt.entity.strategy.StrategyPriorityConfig;
import net.wanji.opt.entity.strategy.StrategyPriorityDailyInfo;
import java.util.List;
import java.util.Map;
......@@ -55,5 +56,19 @@ public interface StrategyPriorityMapper extends BaseMapper<StrategyPriorityDaily
List<StrategyFactoryEntity> getSceneList();
List<StrategyFactoryEntity> getCompanyList();
void savePriorityInsert(List<StrategyPriorityConfig> saveList);
List<StrategyPriorityConfig> selectPriorityTable(String crossId);
void deletePriorityConfig(String crossId);
List<String> getstrategyNo(String crossId);
List<StrategyFactoryEntity> getPriorityConfigData(@Param("strategyNo") List<String> strategyNo,@Param("crossId") String crossId);
}
package net.wanji.opt.entity.judgeanalysis;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "AnalysisGreenCongestionPeriod", description = "")
public class AnalysisGreenCongestionPeriod {
@ApiModelProperty(value = "干线ID")
private String greenId;
@ApiModelProperty(value = "道路方向")
private String roadDirection;
@ApiModelProperty(value = "开始时间")
private String startTime;
@ApiModelProperty(value = "状态")
private String status;
}
......@@ -29,7 +29,10 @@ public class GreenWaveWeekData {
private Integer congestCount; // 拥堵次数
@ApiModelProperty(value = "拥堵总时长,单位秒")
private Double congestDuration; // 拥堵总时长,单位秒
private Double congestDuration;
@ApiModelProperty(value = "最大拥堵持续时长,单位秒")
private Double maxCongestDuration;
@ApiModelProperty(value = "总流量")
private Integer flow; // 总流量
......@@ -40,11 +43,17 @@ public class GreenWaveWeekData {
@ApiModelProperty(value = "平均速度")
private Double speed; // 平均速度
@ApiModelProperty(value = "高峰类型 1早高峰 2晚高峰 3全天")
private String peakType;
@ApiModelProperty(value = "类型:1工作日 2节假日")
private String peakType; // 类型:1工作日 2节假日
private String dayType;
@ApiModelProperty(value = "高峰类型 1早高峰 2晚高峰 3全天")
private String dayType; // 高峰类型 1早高峰 2晚高峰 3全天
@ApiModelProperty(value = "最大拥堵时段")
private String maxCongestionPeriod;
@ApiModelProperty(value = "第二大拥堵时段")
private String secondCongestionPeriod;
@ApiModelProperty(value = "数据统计范围的开始时间")
private String startTime; // 数据统计范围的开始时间
......
package net.wanji.opt.entity.strategy.dto;
import io.swagger.models.auth.In;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import net.wanji.opt.entity.strategy.StrategyPriorityConfig;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper=false)
@NoArgsConstructor
@AllArgsConstructor
public class StrategyPriorityGroup {
//分组ID
private Integer labelCode;
//分组名称
private String label;
//路口Id
private String crossId;
//优先级的配置信息
private List<StrategyPriorityConfig> data;
}
package net.wanji.opt.servicev2.judgeanalysis;
import java.text.ParseException;
public interface AnalysisGreenCongestionPeriodService {
public void selectCountByCongestionPeriod() throws ParseException;
}
package net.wanji.opt.servicev2.judgeanalysis.impl;
import net.wanji.opt.dao.mapper.judgeanalysis.AnalysisGreenCongestionPeriodMapper;
import net.wanji.opt.entity.judgeanalysis.AnalysisGreenCongestionPeriod;
import net.wanji.opt.servicev2.judgeanalysis.AnalysisGreenCongestionPeriodService;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.WeekFields;
import java.util.*;
import java.util.stream.Collectors;
/**
* <p>
* 干线拥堵时段实现类
* </p>
*
* @author hwm
* @since 2025-03-20
*/
@Service
public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCongestionPeriodService {
@Resource
private AnalysisGreenCongestionPeriodMapper analysisGreenCongestionPeriodMapper;
public void selectCountByCongestionPeriod() throws ParseException {
LocalDate currentDate = LocalDate.now();
// 获取本周一的日期
LocalDate mondayOfThisWeek = currentDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
// 获取上周一的日期
LocalDate todayOfWeek = mondayOfThisWeek.plusDays(-7);
//获取上周日的日期
LocalDate endOfWeek = mondayOfThisWeek.plusDays(-1);
WeekFields weekFields = WeekFields.of(Locale.getDefault());
//获取上周的周数
int Number = todayOfWeek.get(weekFields.weekOfYear());
int year = currentDate.getYear();
String weekNumber = String.valueOf(year) + String.valueOf(Number);
//循环7天处理数据
for (int i = 0; i < 7; i++) {
LocalDate date = todayOfWeek.plusDays(i);
//获取干线数据
List<AnalysisGreenCongestionPeriod> greenList = analysisGreenCongestionPeriodMapper.selectGreenDataHist(date.toString());
LinkedList<AnalysisGreenCongestionPeriod> queue = new LinkedList<>();
String greenId = "";
String roadDirection = "";
String startTime = "";
String endTime = "";
for(AnalysisGreenCongestionPeriod temp : greenList){
if(temp.getGreenId().equals(greenId) && temp.getRoadDirection().equals(roadDirection)){
if(temp.getStatus().equals("2")){
List<AnalysisGreenCongestionPeriod> list = queue.stream().filter(item -> item.getStatus().equals("3")).collect(Collectors.toList());
if(!CollectionUtils.isNotEmpty(list)){
List<AnalysisGreenCongestionPeriod> list1 = queue.stream().filter(item -> item.getStatus().equals("2")).collect(Collectors.toList());
if(!CollectionUtils.isNotEmpty(list1)){
startTime = temp.getStartTime();
}
}else {
if(list.size() == 1 && queue.getFirst().getStatus().equals("3") ){
endTime = queue.getFirst().getStartTime();
Map<String,Object> map = new HashMap<>();
map.put("startTime",startTime);
map.put("endTime",endTime);
map.put("weekNumber",weekNumber);
map.put("weekDay",i + 1);
map.put("roadDirection",roadDirection);
map.put("peakType",isMoning(startTime));
map.put("weekStartTime",todayOfWeek);
map.put("weekEndTime",endOfWeek);
map.put("greenId",greenId);
map.put("status",queue.getFirst().getStatus());
//写入缓行数据
analysisGreenCongestionPeriodMapper.insertGreenCongestionPeriodData(map);
//记录缓行开始时间
if(queue.get(1).getStatus().equals("2")) {
startTime = queue.get(1).getStartTime();
}else if (queue.getLast().getStatus().equals("2")) {
startTime = queue.getLast().getStartTime();
}else {
startTime = temp.getStartTime();
}
}
}
}else if(temp.getStatus().equals("1")){
List<AnalysisGreenCongestionPeriod> list = queue.stream().filter(item -> item.getStatus().equals("3")).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(list) && queue.size() > 2 && list.size() == 1 && queue.getFirst().getStatus().equals("3")){
endTime = queue.getFirst().getStartTime();
Map<String,Object> map = new HashMap<>();
map.put("startTime",startTime);
map.put("endTime",endTime);
map.put("weekNumber",weekNumber);
map.put("weekDay",i + 1);
map.put("roadDirection",roadDirection);
map.put("peakType",isMoning(startTime));
map.put("weekStartTime",todayOfWeek);
map.put("weekEndTime",endOfWeek);
map.put("greenId",greenId);
map.put("status",queue.getFirst().getStatus());
//写入缓行数据
analysisGreenCongestionPeriodMapper.insertGreenCongestionPeriodData(map);
if(queue.get(1).getStatus().equals("2")) {
startTime = queue.get(1).getStartTime();
}
}else {
List<AnalysisGreenCongestionPeriod> list1 = queue.stream().filter(item -> item.getStatus().equals("2")).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(list1) && queue.size() > 2 && list1.size() == 1 && queue.getFirst().getStatus().equals("2") && !queue.get(1).getStatus().equals("3")){
endTime = queue.getFirst().getStartTime();
Map<String,Object> map = new HashMap<>();
map.put("startTime",startTime);
map.put("endTime",endTime);
map.put("weekNumber",weekNumber);
map.put("weekDay",i + 1);
map.put("roadDirection",roadDirection);
map.put("peakType",isMoning(startTime));
map.put("weekStartTime",todayOfWeek);
map.put("weekEndTime",endOfWeek);
map.put("greenId",greenId);
map.put("status",queue.getFirst().getStatus());
//写入缓行数据
analysisGreenCongestionPeriodMapper.insertGreenCongestionPeriodData(map);
}
}
}else if(temp.getStatus().equals("3")){
List<AnalysisGreenCongestionPeriod> list = queue.stream().filter(item -> item.getStatus().equals("3")).collect(Collectors.toList());
if(!CollectionUtils.isNotEmpty(list)){
List<AnalysisGreenCongestionPeriod> list1 = queue.stream().filter(item -> item.getStatus().equals("2")).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(list1) && list1.size() >= 1 && queue.getLast().getStatus().equals("2") ){
endTime = queue.getLast().getStartTime();
Map<String,Object> map = new HashMap<>();
map.put("startTime",startTime);
map.put("endTime",endTime);
map.put("weekNumber",weekNumber);
map.put("weekDay",i + 1);
map.put("roadDirection",roadDirection);
map.put("peakType",isMoning(startTime));
map.put("weekStartTime",todayOfWeek);
map.put("weekEndTime",endOfWeek);
map.put("greenId",greenId);
map.put("status",queue.getLast().getStatus());
//写入缓行数据
analysisGreenCongestionPeriodMapper.insertGreenCongestionPeriodData(map);
//记录拥堵开始时间
startTime = temp.getStartTime();
}else {
startTime = temp.getStartTime();
}
}
}
enqueue(queue,temp);
}else if(temp.getGreenId().equals(greenId) && !temp.getRoadDirection().equals(roadDirection)){
queue.clear();
roadDirection = temp.getRoadDirection();
if(temp.getStatus().equals("2")){
startTime = temp.getStartTime();
}
enqueue(queue,temp);
}else {
queue.clear();
greenId = temp.getGreenId();
roadDirection = temp.getRoadDirection();
if(temp.getStatus().equals("2")){
startTime = temp.getStartTime();
}
enqueue(queue,temp);
}
}
}
}
public void enqueue(LinkedList<AnalysisGreenCongestionPeriod> queue , AnalysisGreenCongestionPeriod temp ){
if(queue.size() >= 3 ){
queue.poll();
}
queue.offer(temp);
}
public Integer isMoning(String date) throws ParseException {
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date temp = fmt.parse(date);
int hour = temp.getHours();
if(hour <= 12){
return 1;
}else {
return 2;
}
}
}
......@@ -4,6 +4,8 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import net.wanji.databus.dao.entity.GreenwaveHistPO;
import net.wanji.databus.dao.mapper.GreenwaveHistMapper;
import net.wanji.opt.dao.mapper.report.GreenWaveWeekDataMapper;
import net.wanji.opt.entity.report.ConfigPeakHours;
import net.wanji.opt.entity.report.GreenWaveWeekData;
......@@ -13,16 +15,10 @@ import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.WeekFields;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.*;
@Service
@Slf4j
......@@ -32,6 +28,12 @@ public class GreenWaveWeekDataServiceImpl extends ServiceImpl<GreenWaveWeekDataM
private GreenWaveWeekDataService greenWaveWeekDataService;
@Autowired
private GreenWaveWeekDataMapper greenWaveWeekDataMapper;
@Autowired
private GreenwaveHistMapper greenwaveHistMapper;
private static final int TIME_GAP_THRESHOLD = 900; // 时间间隔阈值,单位为秒
private static final int MINUTES_PER_RECORD = 5; // 每条记录对应的时间,单位为分钟
private static final int SECONDS_PER_MINUTE = 60; // 每分钟的秒数
@Override
public void insertGreenWaveWeekData() {
......@@ -48,26 +50,26 @@ public class GreenWaveWeekDataServiceImpl extends ServiceImpl<GreenWaveWeekDataM
for (ConfigPeakHours configPeakHour : configPeakHours) {
String startTime = configPeakHour.getStartTime();
String endTime = configPeakHour.getEndTime();
List<GreenWaveWeekData> greenWaveWeekDataList = greenWaveWeekDataMapper.selectGreenWaveWeekDataByTime(startDate, endDate,startTime,endTime);
List<GreenWaveWeekData> greenWaveWeekDataList = greenWaveWeekDataMapper.selectGreenWaveWeekDataByTime(startDate, endDate, startTime, endTime);
greenWaveWeekDataList.forEach(x -> {
x.setPeakType(String.valueOf(configPeakHour.getPeakType()));
x.setDayType(String.valueOf(configPeakHour.getDayType()));
x.setStartTime(startDate);
x.setEndTime(endDate);
Integer dir = getDir(x.getRoadDirection());
Integer flow = greenWaveWeekDataMapper.getFlowByTime(x.getGreenId(), dir, startDate, endDate,startTime,endTime);
Integer flow = greenWaveWeekDataMapper.getFlowByTime(x.getGreenId(), dir, startDate, endDate, startTime, endTime);
x.setFlow(flow);
x.setYearWeek(getWeekNumberOfYear(startOfLastWeek));
x.setInsertTime(new Date());
GreenWaveWeekData greenWaveWeekData = getGreenWaveWeekData(x, startTime, endTime);
});
greenWaveWeekDataService.insertOrUpdateBatch(greenWaveWeekDataList);
log.info("周总体拥堵高峰期概况批量保存或更新成功!");
}
List<GreenWaveWeekData> greenWaveWeekDataList = greenWaveWeekDataMapper.selectGreenWaveWeekData(startDate, endDate);
greenWaveWeekDataList.forEach(x -> {
x.setPeakType("1");
x.setDayType("3");
x.setPeakType("3");
x.setDayType("1");
x.setStartTime(startDate);
x.setEndTime(endDate);
Integer dir = getDir(x.getRoadDirection());
......@@ -75,9 +77,165 @@ public class GreenWaveWeekDataServiceImpl extends ServiceImpl<GreenWaveWeekDataM
x.setFlow(flow);
x.setYearWeek(getWeekNumberOfYear(startOfLastWeek));
x.setInsertTime(new Date());
GreenWaveWeekData greenWaveWeekData = getGreenWaveWeekData(x, null, null);
});
greenWaveWeekDataService.insertOrUpdateBatch(greenWaveWeekDataList);
log.info("周总体拥堵高峰期概况批量保存或更新成功!");
log.info("周总体拥堵全天概况批量保存或更新成功!");
}
private GreenWaveWeekData getGreenWaveWeekData(GreenWaveWeekData x, String startTime, String endTime) {
List<GreenwaveHistPO> greenwaveHistPOS = greenWaveWeekDataMapper.selectAllByTime(x.getGreenId(), x.getRoadDirection(), x.getStartTime(), x.getEndTime(), startTime, endTime);
if (ObjectUtils.isEmpty(greenwaveHistPOS)) {
x.setCongestIndex(0.0);
x.setMaxCongestIndex(0.0);
x.setCongestCount(0);
x.setMaxCongestDuration(0.0);
return x;
}
//拥堵次数
int count = 1;
//每次拥堵条数
int mCount = 1;
//最大拥堵指数
double maxCongestIndex = 0;
//每次拥堵指数和
double congestIndex = greenwaveHistPOS.get(0).getTrafficIndex();
//拥堵指数和
double congestIndexAll = 0;
//最大拥堵持续时长
int maxCongestDuration = 0;
int secondCongestDuration = 0;
//拥堵时间
Date congestStartTime = greenwaveHistPOS.get(0).getStartTime();
Date congestEndTime = null;
Date maxCongestStartTime = null;
Date maxCongestEndTime = null;
Date secondCongestStartTime = null;
Date secondCongestEndTime = null;
Calendar calendar = Calendar.getInstance();
//判断是否只有一条拥堵数据
if (greenwaveHistPOS.size() == 1) {
maxCongestIndex = greenwaveHistPOS.get(0).getTrafficIndex();
congestIndexAll = maxCongestIndex;
maxCongestDuration = MINUTES_PER_RECORD * SECONDS_PER_MINUTE;
// 使用 Calendar 添加 5 分钟
calendar.setTime(congestStartTime);
calendar.add(Calendar.MINUTE, 5);
// 获取更新后的时间
maxCongestEndTime = calendar.getTime();
maxCongestStartTime = congestStartTime;
} else {
for (int i = 1; i < greenwaveHistPOS.size(); i++) {
GreenwaveHistPO greenwaveHistPONext = greenwaveHistPOS.get(i);
GreenwaveHistPO greenwaveHistPO = greenwaveHistPOS.get(i - 1);
if (greenwaveHistPONext.getBatchTime() - greenwaveHistPO.getBatchTime() > TIME_GAP_THRESHOLD) {
//获取最大拥堵指数
if (congestIndex / mCount > maxCongestIndex) {
maxCongestIndex = congestIndex / mCount;
}
//拥堵指数和
congestIndexAll += congestIndex / mCount;
//拥堵持续时间
int congestDuration = mCount * MINUTES_PER_RECORD * SECONDS_PER_MINUTE;
calendar.setTime(greenwaveHistPO.getStartTime());
calendar.add(Calendar.MINUTE, MINUTES_PER_RECORD);
// 获取更新后的时间
congestEndTime = calendar.getTime();
//最大拥堵持续时间
//最大拥堵持续时间
if (maxCongestDuration < congestDuration) {
maxCongestDuration = congestDuration;
maxCongestStartTime = congestStartTime;
maxCongestEndTime = congestEndTime;
}else if (secondCongestDuration < congestDuration) {
secondCongestDuration = congestDuration;
secondCongestStartTime = congestStartTime;
secondCongestEndTime = congestEndTime;
}
//新一次拥堵
count++;
mCount = 1;
congestIndex = greenwaveHistPONext.getTrafficIndex();
congestStartTime = greenwaveHistPONext.getStartTime();
if (i == greenwaveHistPOS.size() - 1) {
//获取最大拥堵指数
if (congestIndex / mCount > maxCongestIndex) {
maxCongestIndex = congestIndex / mCount;
}
//拥堵指数和
congestIndexAll += congestIndex / mCount;
//拥堵持续时间
congestDuration = mCount * MINUTES_PER_RECORD * SECONDS_PER_MINUTE;
// 使用 Calendar 添加 5 分钟
calendar.setTime(congestStartTime);
calendar.add(Calendar.MINUTE, MINUTES_PER_RECORD);
// 获取更新后的时间
congestEndTime = calendar.getTime();
//最大拥堵持续时间
if (maxCongestDuration < congestDuration) {
maxCongestDuration = congestDuration;
maxCongestStartTime = congestStartTime;
maxCongestEndTime = congestEndTime;
}else if (secondCongestDuration < congestDuration) {
secondCongestDuration = congestDuration;
secondCongestStartTime = congestStartTime;
secondCongestEndTime = congestEndTime;
}
}
} else {
congestIndex += greenwaveHistPONext.getTrafficIndex();
mCount++;
if (i == greenwaveHistPOS.size() - 1) {
//获取最大拥堵指数
if (congestIndex / mCount > maxCongestIndex) {
maxCongestIndex = congestIndex / mCount;
}
//拥堵指数和
congestIndexAll += congestIndex / mCount;
//拥堵持续时间
int congestDuration = mCount * MINUTES_PER_RECORD * SECONDS_PER_MINUTE;
// 获取更新后的时间
calendar.setTime(greenwaveHistPONext.getStartTime());
calendar.add(Calendar.MINUTE, MINUTES_PER_RECORD);
// 获取更新后的时间
congestEndTime = calendar.getTime();
//最大拥堵持续时间
if (maxCongestDuration < congestDuration) {
maxCongestDuration = congestDuration;
maxCongestStartTime = congestStartTime;
maxCongestEndTime = congestEndTime;
}else if (secondCongestDuration < congestDuration) {
secondCongestDuration = congestDuration;
secondCongestStartTime = congestStartTime;
secondCongestEndTime = congestEndTime;
}
}
}
}
}
x.setCongestIndex(congestIndexAll / count);
x.setMaxCongestIndex(maxCongestIndex);
x.setCongestCount(count);
x.setMaxCongestDuration((double) maxCongestDuration);
String formattedTimeRange = formatTimeRange(maxCongestStartTime, maxCongestEndTime);
x.setMaxCongestionPeriod(formattedTimeRange);
if (!ObjectUtils.isEmpty(secondCongestStartTime) && !ObjectUtils.isEmpty(secondCongestEndTime)) {
String formattedTimeRange1 = formatTimeRange(secondCongestStartTime, secondCongestEndTime);
if (!formattedTimeRange.equals(formattedTimeRange1)) {
x.setSecondCongestionPeriod(formattedTimeRange1);
}
}
return x;
}
@Override
......@@ -101,12 +259,19 @@ public class GreenWaveWeekDataServiceImpl extends ServiceImpl<GreenWaveWeekDataM
}
}
/*
* 获取周数
* */
public static int getWeekNumberOfYear(LocalDateTime date) {
WeekFields weekFields = WeekFields.of(Locale.getDefault()); // 使用默认区域设置
return date.get(weekFields.weekOfWeekBasedYear());
public static Integer getWeekNumberOfYear(LocalDateTime date) {
// 使用默认区域设置获取周字段
WeekFields weekFields = WeekFields.of(Locale.getDefault());
// 获取年份
int year = date.get(weekFields.weekBasedYear());
// 获取周数
int weekNumber = date.get(weekFields.weekOfWeekBasedYear());
// 拼接成 "yyyyw" 格式
String format = String.format("%d%d", year, weekNumber);
return Integer.valueOf(format);
}
/*
......@@ -149,4 +314,44 @@ public class GreenWaveWeekDataServiceImpl extends ServiceImpl<GreenWaveWeekDataM
.with(LocalTime.MAX); // 设置时间为 23:59:59
return lastSunday;
}
public static String formatTimeRange(Date startTime, Date endTime) {
// 将 Date 转换为 LocalDateTime
LocalDateTime startDateTime = startTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
LocalDateTime endDateTime = endTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
// 获取星期几
DayOfWeek dayOfWeek = startDateTime.getDayOfWeek();
String weekDay = getWeekDayName(dayOfWeek);
// 格式化时间为 HH:mm
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");
String startTimeStr = startDateTime.format(timeFormatter);
String endTimeStr = endDateTime.format(timeFormatter);
// 拼接结果
return weekDay + " " + startTimeStr + "~" + endTimeStr;
}
private static String getWeekDayName(DayOfWeek dayOfWeek) {
// 映射 DayOfWeek 到中文星期名称
switch (dayOfWeek) {
case MONDAY:
return "周一";
case TUESDAY:
return "周二";
case WEDNESDAY:
return "周三";
case THURSDAY:
return "周四";
case FRIDAY:
return "周五";
case SATURDAY:
return "周六";
case SUNDAY:
return "周日";
default:
return "";
}
}
}
\ No newline at end of file
package net.wanji.opt.servicev2.strategy;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.entity.strategy.StrategyPriorityDailyInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import net.wanji.opt.entity.strategy.dto.StrategyPriorityGroup;
import net.wanji.opt.synthesis.pojo.StrategyFactoryEntity;
import java.util.List;
......@@ -61,4 +63,9 @@ public interface StrategyPriorityService extends IService<StrategyPriorityDailyI
List<StrategyFactoryEntity> getSceneList();
List<StrategyFactoryEntity> getCompanyList();
void savePriority(List<StrategyPriorityGroup> dataList);
List<StrategyFactoryEntity> getPriorityData(String crossId);
}
package net.wanji.opt.servicev2.strategy.impl;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.alibaba.nacos.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.i18n.I18nResourceBundle;
import net.wanji.opt.dao.mapper.strategy.StrategyPriorityMapper;
import net.wanji.opt.entity.strategy.StrategyPriorityConfig;
import net.wanji.opt.entity.strategy.StrategyPriorityDailyInfo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import net.wanji.opt.entity.strategy.dto.StrategyPriorityGroup;
import net.wanji.opt.servicev2.strategy.StrategyPriorityService;
import net.wanji.opt.synthesis.pojo.StrategyFactoryEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
......@@ -19,6 +29,7 @@ import java.util.List;
* @since 2025-03-28
*/
@Service
@Slf4j
public class StrategyPriorityServiceImpl extends ServiceImpl<StrategyPriorityMapper, StrategyPriorityDailyInfo> implements StrategyPriorityService {
@Resource
......@@ -122,4 +133,61 @@ import java.util.List;
List<StrategyFactoryEntity> strategyList=strategyPriorityMapper.getCompanyList();
return strategyList;
}
@Override
@Transactional
public void savePriority(List<StrategyPriorityGroup> dataList) {
try {
List<StrategyPriorityConfig> saveList = new ArrayList<>();
for (StrategyPriorityGroup group : dataList) {
String label = group.getLabel();
Integer labelCode = group.getLabelCode();
//路口id
String crossId = group.getCrossId();
//先判断表里有没有数据,有的话删除t_strategy_priority_config
List<StrategyPriorityConfig> priorityConfig = strategyPriorityMapper.selectPriorityTable(crossId);
if (priorityConfig.size() > 0) {
strategyPriorityMapper.deletePriorityConfig(crossId);
}
if (CollectionUtils.isNotEmpty(group.getData())) {
for (StrategyPriorityConfig item : group.getData()) {
StrategyPriorityConfig strategyPriorityConfig = new StrategyPriorityConfig();
strategyPriorityConfig.setCrossId(crossId);
//分组id
strategyPriorityConfig.setGroupId(labelCode);
//分组名称
strategyPriorityConfig.setGroupName(label);
//策略编号
strategyPriorityConfig.setStrategyNo(item.getStrategyNo());
//优先级
strategyPriorityConfig.setPriority(item.getPriority());
saveList.add(strategyPriorityConfig);
}
}
}
strategyPriorityMapper.savePriorityInsert(saveList);
} catch (Exception e) {
log.error("{} savePriority", this.getClass().getSimpleName(), e);
throw e;
}
}
@Override
@Transactional
public List<StrategyFactoryEntity> getPriorityData(String crossId) {
try {
//先获取策略编号
List<String> strategyNo = strategyPriorityMapper.getstrategyNo(crossId);
List<StrategyFactoryEntity> priorityList = strategyPriorityMapper.getPriorityConfigData(strategyNo,crossId);
return priorityList;
}catch (Exception e){
log.error("{} getPriorityData", this.getClass().getSimpleName(), e);
throw e;
}
}
}
package net.wanji.opt.servicev2.syslog;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import net.wanji.opt.entity.syslog.SysOptimizeLog;
import java.util.List;
......@@ -14,5 +15,5 @@ import java.util.List;
*/
public interface SysLogServer extends IService<SysOptimizeLog> {
List<SysOptimizeLog> findSysOptimizeLog(String crossId,String startTime,String endTime);
JSONObject findSysOptimizeLog(String crossId, String startTime, String endTime, Integer pageNum, Integer pageSize);
}
package net.wanji.opt.servicev2.syslog.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import net.wanji.opt.dao.mapper.judgeanalysis.AnalysisProblemCrossDayMapper;
import net.wanji.opt.dao.mapper.syslog.SysLogMapper;
import net.wanji.opt.entity.comprehensivequery.CrossLaneDataHistPoExtendName;
import net.wanji.opt.entity.judgeanalysis.AnalysisProblemCrossDay;
import net.wanji.opt.entity.syslog.SysOptimizeLog;
import net.wanji.opt.servicev2.syslog.SysLogServer;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
......@@ -25,8 +30,17 @@ public class SysLogServerImpl extends ServiceImpl<SysLogMapper, SysOptimizeLog>
private SysLogMapper sysLogMapper;
@Override
public List<SysOptimizeLog> findSysOptimizeLog(String crossId,String startTime,String endTime) {
return sysLogMapper.findSysOptimizeLog(crossId,startTime,endTime);
public JSONObject findSysOptimizeLog(String crossId,String startTime,String endTime,Integer pageNum,Integer pageSize) {
List<SysOptimizeLog> list = sysLogMapper.findSysOptimizeLog(crossId,startTime,endTime);
List<SysOptimizeLog> collect = new ArrayList<>();
if(CollectionUtils.isNotEmpty(list)){
collect = list.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
}
JSONObject result = new JSONObject();
result.put("fullDataList",list);
result.put("pageList",collect);
result.put("totalPage",Math.ceil((double) list.size() / pageSize));
result.put("totalSize",list.size());
return result;
}
}
......@@ -46,4 +46,21 @@ public class StrategyFactoryEntity {
@ApiModelProperty("优化类型")
@TableField("opt_type")
private Integer optType;
/*非数据库字段*/
/**
* 优先级
*/
private Integer priority;
/**
* 路口ID
*/
private String crossId;
/**
* 分组名称
*/
private String label;
/**
* 分组ID
*/
private Integer labelCode;
}
package net.wanji.opt.task;
import lombok.extern.slf4j.Slf4j;
import net.wanji.opt.servicev2.judgeanalysis.AnalysisGreenCongestionPeriodService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Profile;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.ParseException;
@Component
@Configurable
@EnableScheduling
@Slf4j
@Profile("docker")
public class AnalysisGreenCongestionPeriodWeekTask {
@Autowired
private AnalysisGreenCongestionPeriodService analysisGreenCongestionPeriodService;
@Scheduled(cron = "0 0 2 ? * 1")
public void task() throws ParseException {
analysisGreenCongestionPeriodService.selectCountByCongestionPeriod();
}
}
......@@ -21,7 +21,7 @@ public class GreenWaveWeekDataTask implements ApplicationRunner {
log.info("服务启动时--周总体拥堵概况更新--任务执行时间:" + LocalDateTime.now());
// 周总体拥堵概况更新
try {
greenWaveWeekDataService.insertGreenWaveWeekData();
// greenWaveWeekDataService.insertGreenWaveWeekData();
}catch (Exception e){
log.error("服务启动时--周总体拥堵概况更新--任务执行错误" + e);
}
......@@ -34,7 +34,7 @@ public class GreenWaveWeekDataTask implements ApplicationRunner {
@Scheduled(cron = "0 30 0 ? * MON")
public void executeWeeklyTask() {
//周总体拥堵概况更新
log.info("定时任务--周总体拥堵概况更新--执行结束时间:" + LocalDateTime.now());
log.info("定时任务--周总体拥堵概况更新--执行开始时间:" + LocalDateTime.now());
try {
greenWaveWeekDataService.insertGreenWaveWeekData();
}catch (Exception e){
......
<?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">
<mapper namespace="net.wanji.opt.dao.mapper.judgeanalysis.AnalysisGreenCongestionPeriodMapper">
<!-- 通用查询映射结果 -->
<resultMap id="AnalysisGreenCongestionPeriodMap" type="net.wanji.opt.entity.judgeanalysis.AnalysisGreenCongestionPeriod">
<result column="green_id" property="greenId"/>
<result column="road_direction" property="roadDirection"/>
<result column="start_time" property="startTime"/>
<result column="status" property="status"/>
</resultMap>
<select id="selectGreenDataHist" parameterType="String" resultMap="AnalysisGreenCongestionPeriodMap">
SELECT a.green_id,a.road_direction,a.start_time,a.status FROM t_greenwave_hist a
where a.start_time between DATE_FORMAT(#{date},'%Y-%m-%d 00:00:00') and DATE_FORMAT(#{date},'%Y-%m-%d 23:59:59')
and a.green_id is not null
order by a.green_id,a.road_direction,a.start_time
</select>
<insert id="insertGreenCongestionPeriodData" parameterType="map">
insert into t_analysis_green_wave_congest_time_span (green_id,road_direction,week_day,congest_start_time,congest_end_time,congest_index,status,travel_time,speed,peak_type,year_week,week_start_time,week_end_time,insert_time)
SELECT a.green_id,a.road_direction,#{weekDay} as week_day, DATE_FORMAT(#{startTime},'%Y-%m-%d %H:%i:%s') as congest_start_time,DATE_FORMAT(DATE_ADD(#{endTime},INTERVAL 5 MINUTE),'%Y-%m-%d %H:%i:%s') as congest_end_time,AVG(traffic_index),#{status} as status,CEIL(AVG(trval_time)),AVG(speed),
#{peakType} as peak_type,#{weekNumber} as year_week,DATE_FORMAT(#{weekStartTime},'%Y-%m-%d') as week_start_time,DATE_FORMAT(#{weekEndTime},'%Y-%m-%d') as week_end_time,now()
FROM t_greenwave_hist a
where a.start_time between DATE_FORMAT(#{startTime},'%Y-%m-%d %H:%i:%s') and DATE_FORMAT(#{endTime},'%Y-%m-%d %H:%i:%s')
and a.green_id = #{greenId}
and a.road_direction = #{roadDirection}
</insert>
</mapper>
\ No newline at end of file
......@@ -6,7 +6,7 @@
<insert id="insertOrUpdateBatch">
INSERT INTO t_analysis_green_wave_week_data (
green_id, road_direction, congest_index, max_congest_index, congest_count,
congest_duration, flow, travel_time, speed, peak_type, day_type,
congest_duration, max_congest_duration, flow, travel_time, speed, peak_type, max_congestion_period, second_congestion_period, day_type,
start_time, end_time, year_week, insert_time
)
VALUES
......@@ -18,10 +18,13 @@
#{item.maxCongestIndex},
#{item.congestCount},
#{item.congestDuration},
#{item.maxCongestDuration},
#{item.flow},
#{item.travelTime},
#{item.speed},
#{item.peakType},
#{item.maxCongestionPeriod},
#{item.secondCongestionPeriod},
#{item.dayType},
#{item.startTime},
#{item.endTime},
......@@ -34,9 +37,12 @@
max_congest_index = VALUES(max_congest_index),
congest_count = VALUES(congest_count),
congest_duration = VALUES(congest_duration),
max_congest_duration = VALUES(max_congest_duration),
flow = VALUES(flow),
travel_time = VALUES(travel_time),
speed = VALUES(speed),
max_congestion_period = VALUES(max_congestion_period),
second_congestion_period = VALUES(second_congestion_period),
start_time = VALUES(start_time),
end_time = VALUES(end_time),
insert_time = VALUES(insert_time);
......@@ -48,25 +54,33 @@
select * from t_config_peak_hours;
</select>
<select id="selectGreenWaveWeekDataByTime" resultType="net.wanji.opt.entity.report.GreenWaveWeekData">
SELECT green_id,road_direction,max(traffic_index) max_congest_index,avg(traffic_index) congest_index,sum(status>=3) congest_count,sum(status>=3)*60*5 congest_duration,avg(speed) speed,sum(trval_time) travel_time
from t_greenwave_hist where start_time BETWEEN #{startDate} and #{endDate} AND TIME( start_time ) BETWEEN #{startTime} AND #{endTime} GROUP BY green_id,road_direction
SELECT green_id,road_direction,max(traffic_index) max_congest_index,avg(traffic_index) congest_index,sum(status>=3)*60*5 congest_duration,avg(speed) speed,sum(trval_time) travel_time
from t_greenwave_hist where start_time BETWEEN #{startDate} AND #{endDate} AND TIME( start_time ) BETWEEN #{startTime} AND #{endTime} GROUP BY green_id,road_direction
</select>
<select id="selectGreenWaveWeekData" resultType="net.wanji.opt.entity.report.GreenWaveWeekData">
SELECT green_id,road_direction,max(traffic_index) max_congest_index,avg(traffic_index) congest_index,sum(status>=3) congest_count,sum(status>=3)*60*5 congest_duration,avg(speed) speed,sum(trval_time) travel_time
from t_greenwave_hist where start_time BETWEEN #{startDate} and #{endDate} GROUP BY green_id,road_direction
SELECT green_id,road_direction,max(traffic_index) max_congest_index,avg(traffic_index) congest_index,sum(status>=3)*60*5 congest_duration,avg(speed) speed,sum(trval_time) travel_time
from t_greenwave_hist where start_time BETWEEN #{startDate} AND #{endDate} GROUP BY green_id,road_direction
</select>
<select id="getFlow" resultType="java.lang.Integer">
SELECT COALESCE(flow, 0) from
(select cross_id from t_greenwave_cross where green_id = #{greenId} and sort = 1) cross_data
left join
(SELECT sum(flow) as flow,cross_id from t_cross_dir_data_hist where start_time BETWEEN #{startDate} and #{endDate} and dir_type = #{dir} GROUP BY cross_id) cross_flow on cross_data.cross_id = cross_flow.cross_id
(SELECT sum(flow) as flow,cross_id from t_cross_dir_data_hist where start_time BETWEEN #{startDate} AND #{endDate} and dir_type = #{dir} GROUP BY cross_id) cross_flow on cross_data.cross_id = cross_flow.cross_id
</select>
<select id="getFlowByTime" resultType="java.lang.Integer">
SELECT COALESCE(flow, 0) from
(select cross_id from t_greenwave_cross where green_id = #{greenId} and sort = 1) cross_data
left join
(SELECT sum(flow) as flow,cross_id from t_cross_dir_data_hist where start_time BETWEEN #{startDate} and #{endDate} AND TIME( start_time ) BETWEEN #{startTime} AND #{endTime} and dir_type = #{dir} GROUP BY cross_id) cross_flow on cross_data.cross_id = cross_flow.cross_id
(SELECT sum(flow) as flow,cross_id from t_cross_dir_data_hist where start_time BETWEEN #{startDate} AND #{endDate} AND TIME( start_time ) BETWEEN #{startTime} AND #{endTime} and dir_type = #{dir} GROUP BY cross_id) cross_flow on cross_data.cross_id = cross_flow.cross_id
</select>
<select id="selectAllByTime" resultType="net.wanji.databus.dao.entity.GreenwaveHistPO">
select * from t_greenwave_hist where start_time BETWEEN #{startDate} AND #{endDate}
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
and TIME( start_time ) BETWEEN #{startTime} AND #{endTime}
</if>
and green_id = #{greenId}
and status >= 3 and road_direction = #{roadDirection} order by start_time
</select>
</mapper>
\ No newline at end of file
......@@ -148,4 +148,62 @@
FROM
t_strategy_factory_info
</select>
<insert id="savePriorityInsert" parameterType="java.util.List">
INSERT INTO
t_strategy_priority_config (cross_id,group_id,group_name,priority,strategy_no)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.crossId},#{item.groupId},#{item.groupName},#{item.priority},#{item.strategyNo})
</foreach>
</insert>
<select id="selectPriorityTable" parameterType="map" resultType="net.wanji.opt.entity.strategy.StrategyPriorityConfig">
select
id,group_id,cross_id
FROM
t_strategy_priority_config
WHERE
1=1
<if test="crossId!=null and crossId!=''">
and cross_id = #{crossId}
</if>
</select>
<delete id="deletePriorityConfig" parameterType="map">
DELETE
FROM t_strategy_priority_config
WHERE cross_id =#{crossId}
</delete>
<select id="getPriorityConfigData" parameterType="map" resultType="net.wanji.opt.synthesis.pojo.StrategyFactoryEntity">
SELECT
t2.method,t2.strategy_name,t2.strategy_no,
t2.mark,t2.company,t1.priority as priority,
t1.group_id as labelCode ,t1.group_name as label,t1.cross_id as crossId
FROM
t_strategy_priority_config t1
LEFT JOIN t_strategy_factory_info t2 on t1.strategy_no=t2.strategy_no
WHERE
1=1
AND t1.strategy_no IN
<foreach item="item" collection="strategyNo" open="(" close=")" separator=",">
#{item}
</foreach>
<if test="crossId!=null and crossId!=''">
AND t1.cross_id=#{crossId}
</if>
</select>
<select id="getstrategyNo" resultType="java.lang.String">
SELECT
strategy_no
FROM
t_strategy_priority_config
WHERE
1=1
<if test="crossId!=null and crossId!=''">
AND cross_id=#{crossId}
</if>
</select>
</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