Commit 510d52b1 authored by duanruiming's avatar duanruiming

Merge remote-tracking branch 'origin/master'

parents 3b2faf47 0c6d15d7
package net.wanji.opt.controllerv2.comprehensivequery;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.entity.comprehensivequery.CrossLaneDataHistPoExtendName;
import net.wanji.opt.entity.comprehensivequery.GreenTreeEntity;
import net.wanji.opt.servicev2.comprehensivequery.ComprehensiveQueryService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.ws.rs.core.MediaType;
import java.util.ArrayList;
import java.util.List;
/**
* @author huangwm
* @date 2025/03/06 18:33
*/
@Api(value = "ComprehensiveQueryController", description = "综合查询", tags = "综合查询")
@RequestMapping("/ComprehensiveQuery")
@RestController
@Slf4j
public class ComprehensiveQueryController {
@Resource
private ComprehensiveQueryService comprehensiveQueryService;
@ApiOperation(value = "获取干线与路口树", notes = "获取干线与路口树", httpMethod="GET", response =JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@GetMapping(value = "/getGreenAndCross")
@ApiImplicitParams({
})
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = String.class),
})
public JsonViewObject getGreenAndCross() {
List<GreenTreeEntity> list = new ArrayList<>();
try {
list = comprehensiveQueryService.getGreenAndCross();
} catch (Exception e) {
log.error("综合查询-获取干线与路口树-查询失败:{}", e);
JsonViewObject.newInstance().success(list);
}
return JsonViewObject.newInstance().success(list);
}
@ApiOperation(value = "获取综合查询数据", notes = "获取综合查询数据", httpMethod="GET", response =JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@GetMapping(value = "/getComprehensiveQuery")
@ApiImplicitParams({
@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 = "objectType", value = "范围 0:路口级指标 1:方向级指标 2:转向级指标", required = true, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "groupType", value = "时间粒度 0--5分钟 1--15分钟 2--30分钟 3--60分钟", required = true, dataType = "String", paramType = "query"),
})
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = String.class),
})
public JsonViewObject getComprehensiveQuery(String crossId , String startTime ,String endTime ,String objectType ,String groupType) {
List<CrossLaneDataHistPoExtendName> list = new ArrayList<>();
try {
list = comprehensiveQueryService.getCrossStatusDistribution(crossId, startTime , endTime , objectType , groupType);
} catch (Exception e) {
log.error("综合查询-综合查询数据-查询失败:{}", e);
JsonViewObject.newInstance().success(list);
}
return JsonViewObject.newInstance().success(list);
}
}
...@@ -38,7 +38,6 @@ public class EvaluationInfoController { ...@@ -38,7 +38,6 @@ public class EvaluationInfoController {
@ApiResponses({ @ApiResponses({
@ApiResponse(code = 200, message = "OK", response = AreaProblemOverview.class), @ApiResponse(code = 200, message = "OK", response = AreaProblemOverview.class),
}) })
public JsonViewObject problemOverview(String crossId,String startTime, String endTime,String contrastStartTime,String constrastEndTime) { public JsonViewObject problemOverview(String crossId,String startTime, String endTime,String contrastStartTime,String constrastEndTime) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance(); JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try{ try{
...@@ -51,6 +50,80 @@ public class EvaluationInfoController { ...@@ -51,6 +50,80 @@ public class EvaluationInfoController {
return jsonViewObject; return jsonViewObject;
} }
@ApiOperation(value = "方案评价-溢出", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiImplicitParams({
@ApiImplicitParam(name = "crossId", value = "路口ID", required = true, dataType = "String"),
@ApiImplicitParam(name = "startTime", value = "分析时段开始时间", required = false, dataType = "string"),
@ApiImplicitParam(name = "endTime", value = "分析时段截止时间", required = false, dataType = "string"),
@ApiImplicitParam(name = "contrastStartTime", value = "对比时段开始时间", required = false, dataType = "string"),
@ApiImplicitParam(name = "constrastEndTime", value = "对比时段截止时间", required = false, dataType = "string"),
})
@GetMapping(value = "/overFlow")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = AreaProblemOverview.class),
})
public JsonViewObject summaryEvaluation(String crossId,String startTime, String endTime,String contrastStartTime,String constrastEndTime) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try{
Map<String,Object> resData=evaluationInfoService.summaryEvaluation(crossId,startTime,endTime,contrastStartTime,constrastEndTime);
jsonViewObject.success(resData);
}catch (Exception e){
jsonViewObject.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonViewObject;
}
@ApiOperation(value = "方案评价-失衡", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiImplicitParams({
@ApiImplicitParam(name = "crossId", value = "路口ID", required = true, dataType = "String"),
@ApiImplicitParam(name = "startTime", value = "分析时段开始时间", required = false, dataType = "string"),
@ApiImplicitParam(name = "endTime", value = "分析时段截止时间", required = false, dataType = "string"),
@ApiImplicitParam(name = "contrastStartTime", value = "对比时段开始时间", required = false, dataType = "string"),
@ApiImplicitParam(name = "constrastEndTime", value = "对比时段截止时间", required = false, dataType = "string"),
})
@GetMapping(value = "/unbalance")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = AreaProblemOverview.class),
})
public JsonViewObject unbalanceEvaluation(String crossId,String startTime, String endTime,String contrastStartTime,String constrastEndTime) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try{
Map<String,Object> resData=evaluationInfoService.unbalanceEvaluation(crossId,startTime,endTime,contrastStartTime,constrastEndTime);
jsonViewObject.success(resData);
}catch (Exception e){
jsonViewObject.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonViewObject;
}
@ApiOperation(value = "方案评价-空放", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiImplicitParams({
@ApiImplicitParam(name = "crossId", value = "路口ID", required = true, dataType = "String"),
@ApiImplicitParam(name = "startTime", value = "分析时段开始时间", required = false, dataType = "string"),
@ApiImplicitParam(name = "endTime", value = "分析时段截止时间", required = false, dataType = "string"),
@ApiImplicitParam(name = "contrastStartTime", value = "对比时段开始时间", required = false, dataType = "string"),
@ApiImplicitParam(name = "constrastEndTime", value = "对比时段截止时间", required = false, dataType = "string"),
})
@GetMapping(value = "/idle")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = AreaProblemOverview.class),
})
public JsonViewObject idleEvaluation(String crossId,String startTime, String endTime,String contrastStartTime,String constrastEndTime) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try{
Map<String,Object> resData=evaluationInfoService.idleEvaluation(crossId,startTime,endTime,contrastStartTime,constrastEndTime);
jsonViewObject.success(resData);
}catch (Exception e){
jsonViewObject.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonViewObject;
}
} }
package net.wanji.opt.controllerv2.syslog;
import cn.hutool.core.date.DateUtil;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.entity.syslog.SysOptimizeLog;
import net.wanji.opt.servicev2.syslog.SysLogServer;
import net.wanji.opt.vo2.CrossGreenStatusTimeRateVO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.ws.rs.core.MediaType;
import java.util.Collections;
import java.util.List;
/**
* @author huangwm
* @date 2025/03/06 18:33
*/
@Api(value = "sysLogController", description = "系统日志", tags = "系统日志")
@RequestMapping("/sysLog")
@RestController
@Slf4j
public class sysLogController {
@Resource
private SysLogServer sysLogServer;
@ApiOperation(value = "获取系统优化日志", notes = "获取系统优化日志",httpMethod="GET", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@GetMapping(value = "/getOptimizeLog")
@ApiImplicitParams({
@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"),
})
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = String.class),
})
public JsonViewObject getOptimizeLog(String crossId,String startTime,String endTime) {
List<SysOptimizeLog> list = Collections.emptyList();
try {
list = sysLogServer.findSysOptimizeLog(crossId,startTime,endTime);
} catch (Exception e) {
log.error("系统日志-优化日志-查询失败:{}", e);
JsonViewObject.newInstance().success(list);
}
return JsonViewObject.newInstance().success(list);
}
}
package net.wanji.opt.dao.mapper.comprehensivequery;
import net.wanji.opt.entity.comprehensivequery.GreenAndCrossEntity;
import net.wanji.opt.po.base.CrossLaneDataHistPoExtend;
import java.util.List;
import java.util.Map;
public interface ComprehensiveQueryMapper {
List<GreenAndCrossEntity> getGreenAndCross();
List<GreenAndCrossEntity> getCross();
List<CrossLaneDataHistPoExtend> findCrossObjectIndex(Map<String,Object> params);
}
...@@ -2,6 +2,7 @@ package net.wanji.opt.dao.mapper.evaluation; ...@@ -2,6 +2,7 @@ package net.wanji.opt.dao.mapper.evaluation;
import net.wanji.common.framework.mapper.BaseInterfaceMapper; import net.wanji.common.framework.mapper.BaseInterfaceMapper;
import net.wanji.opt.entity.evaluation.EventInfo; import net.wanji.opt.entity.evaluation.EventInfo;
import net.wanji.opt.entity.eventoptimize.TEventOptimizeInfo;
import net.wanji.opt.entity.judgeanalysis.AnalysisProblemAndStrategyDay; import net.wanji.opt.entity.judgeanalysis.AnalysisProblemAndStrategyDay;
import java.util.List; import java.util.List;
...@@ -19,5 +20,8 @@ public interface CrossProblemEvaluationMapper { ...@@ -19,5 +20,8 @@ public interface CrossProblemEvaluationMapper {
public List<AnalysisProblemAndStrategyDay> findOVerFlowInfo(); public List<AnalysisProblemAndStrategyDay> findOVerFlowInfo();
List<TEventOptimizeInfo> getOverflow(String crossId, String startTime, String endTime);
List<TEventOptimizeInfo> getContrastOverflow(String crossId, String contrastStartTime, String constrastEndTime);
} }
package net.wanji.opt.dao.mapper.syslog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.opt.entity.judgeanalysis.AnalysisProblemCrossDay;
import net.wanji.opt.entity.syslog.SysOptimizeLog;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 系统日志
* </p>
* @author huangwm
* @date 2025/3/26
*/
public interface SysLogMapper extends BaseMapper<SysOptimizeLog> {
List<SysOptimizeLog> findSysOptimizeLog(@Param("crossId") String crossId, @Param("startTime") String startTime,@Param("endTime") String endTime);
}
package net.wanji.opt.entity.comprehensivequery;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper=false)
public class CrossEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 路口ID
*/
private String crossId;
/**
* 路口名称
*/
private String crossName;
}
package net.wanji.opt.entity.comprehensivequery;
import lombok.Data;
import lombok.EqualsAndHashCode;
import net.wanji.opt.po.base.CrossLaneDataHistPoExtend;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper=false)
public class CrossLaneDataHistPoExtendName extends CrossLaneDataHistPoExtend implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 路口名称
*/
private String crossName;
}
package net.wanji.opt.entity.comprehensivequery;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper=false)
public class GreenAndCrossEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 干线ID
*/
private String greenId;
/**
* 干线名称
*/
private String greenName;
/**
* 路口ID
*/
private String crossId;
/**
* 路口名称
*/
private String crossName;
/**
* 排序
*/
private String sort;
}
package net.wanji.opt.entity.comprehensivequery;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper=false)
public class GreenTreeEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 干线ID
*/
private String greenId;
/**
* 干线名称
*/
private String greenName;
/**
* 路口数据集
*/
private List<CrossEntity> children;
}
package net.wanji.opt.entity.syslog;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("t_signal_command_log")
public class SysOptimizeLog implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 路口ID
*/
private String crossId;
/**
* 路口名称
*/
private String name;
/**
* IP地址
*/
private String ip;
/**
* 写入时间
*/
private String inserTime;
/**
* 操作人
*/
private String operateUser;
/**
* 操作内容
*/
private String commandType;
/**
* 操作结果
*/
private String commandResult;
/**
* 请求时间
*/
private String queryTime;
}
package net.wanji.opt.servicev2.comprehensivequery;
import net.wanji.opt.entity.comprehensivequery.CrossLaneDataHistPoExtendName;
import net.wanji.opt.entity.comprehensivequery.GreenTreeEntity;
import java.util.List;
import java.util.Map;
public interface ComprehensiveQueryService {
List<GreenTreeEntity> getGreenAndCross();
List<CrossLaneDataHistPoExtendName> getCrossStatusDistribution(String crossId , String startTime , String endTime , String objectType , String groupType);
}
package net.wanji.opt.servicev2.comprehensivequery.impl;
import net.wanji.common.enums.BaseEnum;
import net.wanji.opt.dao.mapper.comprehensivequery.ComprehensiveQueryMapper;
import net.wanji.opt.entity.comprehensivequery.CrossEntity;
import net.wanji.opt.entity.comprehensivequery.CrossLaneDataHistPoExtendName;
import net.wanji.opt.entity.comprehensivequery.GreenAndCrossEntity;
import net.wanji.opt.entity.comprehensivequery.GreenTreeEntity;
import net.wanji.opt.po.base.CrossLaneDataHistPoExtend;
import net.wanji.opt.servicev2.comprehensivequery.ComprehensiveQueryService;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.validation.constraints.Future;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>
* 综合查询
* </p>
*
* @author huangwm
* @since 2025-03-26
*/
@Service
public class ComprehensiveQueryServiceImpl implements ComprehensiveQueryService {
@Resource
private ComprehensiveQueryMapper comprehensiveQueryMapper;
@Override
public List<GreenTreeEntity> getGreenAndCross() {
List<GreenAndCrossEntity> list = comprehensiveQueryMapper.getGreenAndCross();
String greenNameTemp = "";
List<CrossEntity> crossList = new ArrayList<>();
List<GreenTreeEntity> greenList = new ArrayList<>();
GreenTreeEntity greenTreeEntity = new GreenTreeEntity();
CrossEntity crossEntity = new CrossEntity();
int a = 0;
for(GreenAndCrossEntity temp : list){
// 判断干线名称是否一致
if(!greenNameTemp.equals(temp.getGreenName())){
greenNameTemp = temp.getGreenName();
//判断是否是空数组,第一次进入的时候是空数组,后续是有数据的数组需要把数据添加进去
if(greenTreeEntity.getGreenId() != null){
greenTreeEntity.setChildren(crossList);
greenList.add(greenTreeEntity);
greenTreeEntity = new GreenTreeEntity();
greenTreeEntity.setGreenId(temp.getGreenId());
greenTreeEntity.setGreenName(temp.getGreenName());
crossEntity = new CrossEntity();
crossList = new ArrayList<>();
crossEntity.setCrossName(temp.getCrossName());
crossEntity.setCrossId(temp.getCrossId());
crossList.add(crossEntity);
}else {
greenTreeEntity.setGreenId(temp.getGreenId());
greenTreeEntity.setGreenName(temp.getGreenName());
crossEntity = new CrossEntity();
crossList = new ArrayList<>();
crossEntity.setCrossName(temp.getCrossName());
crossEntity.setCrossId(temp.getCrossId());
crossList.add(crossEntity);
}
}else {
crossEntity = new CrossEntity();
crossEntity.setCrossName(temp.getCrossName());
crossEntity.setCrossId(temp.getCrossId());
crossList.add(crossEntity);
if (a == list.size() - 1) {
greenTreeEntity.setChildren(crossList);
greenList.add(greenTreeEntity);
}
}
a++;
}
return greenList;
}
@Override
public List<CrossLaneDataHistPoExtendName> getCrossStatusDistribution(String crossId , String startTime ,String endTime ,String objectType ,String groupType) {
List<CrossLaneDataHistPoExtendName> resultList = new ArrayList<>();
List<GreenAndCrossEntity> CrossList = comprehensiveQueryMapper.getCross();
String[] crossIdArray = crossId.split(",");
for (String id : crossIdArray) {
String crossName = "";
for(GreenAndCrossEntity temp : CrossList){
if(id.equals(temp.getCrossId())){
crossName = temp.getCrossName();
}
}
Map<String, Object> params = new HashMap<>();
params.put("crossId", id);
params.put("startDate", startTime);
params.put("endDate", endTime);
params.put("groupType", groupType);
params.put("objectType", objectType);
List<CrossLaneDataHistPoExtend> list = comprehensiveQueryMapper.findCrossObjectIndex(params);
for (CrossLaneDataHistPoExtend c : list) {
CrossLaneDataHistPoExtendName temp = new CrossLaneDataHistPoExtendName();
temp.setCrossId(c.getCrossId());
temp.setStartTime(c.getStartTime());
temp.setDirType(c.getDirType());
temp.setTurnType(c.getTurnType());
temp.setFlow(c.getFlow());
temp.setSpeed(c.getSpeed());
temp.setMaxQueueLength(c.getMaxQueueLength());
temp.setMinQueueLength(c.getMinQueueLength());
temp.setAvgQueueLength(c.getAvgQueueLength());
temp.setStopTimes(c.getStopTimes());
temp.setDelayTime(c.getDelayTime());
temp.setTrafficIndex(c.getTrafficIndex());
temp.setCrossName(crossName);
if(c.getDirType() > 0 ){
temp.setDirTypeName(BaseEnum.SignalDirectionEnum.getNameByCode(c.getDirType()));
}
if(c.getTurnType() > 0){
temp.setTurnTypeName(BaseEnum.TurnTypeEnum.getNameByCode(c.getTurnType()));
}
resultList.add(temp);
}
}
return resultList;
}
}
...@@ -8,4 +8,10 @@ import java.util.Map; ...@@ -8,4 +8,10 @@ import java.util.Map;
public interface EvaluationInfoService extends IService<CrossDataHistPO> { public interface EvaluationInfoService extends IService<CrossDataHistPO> {
Map<String,Object> getListEvaluationSummarize(String crossId, String startTime, String endTime, String contrastStartTime, String constrastEndTime); Map<String,Object> getListEvaluationSummarize(String crossId, String startTime, String endTime, String contrastStartTime, String constrastEndTime);
Map<String, Object> summaryEvaluation(String crossId, String startTime, String endTime, String contrastStartTime, String constrastEndTime);
Map<String, Object> unbalanceEvaluation(String crossId, String startTime, String endTime, String contrastStartTime, String constrastEndTime);
Map<String, Object> idleEvaluation(String crossId, String startTime, String endTime, String contrastStartTime, String constrastEndTime);
} }
package net.wanji.opt.servicev2.syslog;
import com.baomidou.mybatisplus.extension.service.IService;
import net.wanji.opt.entity.syslog.SysOptimizeLog;
import java.util.List;
/**
* <p>
* 系统日志 服务类
* </p>
*
* @author huangwm
* @since 2025-03-26
*/
public interface SysLogServer extends IService<SysOptimizeLog> {
List<SysOptimizeLog> findSysOptimizeLog(String crossId,String startTime,String endTime);
}
package net.wanji.opt.servicev2.syslog.impl;
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.judgeanalysis.AnalysisProblemCrossDay;
import net.wanji.opt.entity.syslog.SysOptimizeLog;
import net.wanji.opt.servicev2.syslog.SysLogServer;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* <p>
* 系统日志
* </p>
*
* @author huangwm
* @since 2025-03-26
*/
@Service
public class SysLogServerImpl extends ServiceImpl<SysLogMapper, SysOptimizeLog> implements SysLogServer {
@Resource
private SysLogMapper sysLogMapper;
@Override
public List<SysOptimizeLog> findSysOptimizeLog(String crossId,String startTime,String endTime) {
return sysLogMapper.findSysOptimizeLog(crossId,startTime,endTime);
}
}
<?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.comprehensivequery.ComprehensiveQueryMapper">
<resultMap id="BaseResultMap" type="net.wanji.opt.entity.comprehensivequery.GreenAndCrossEntity">
<result property="greenId" column="greenId"></result>
<result property="greenName" column="greenName"></result>
<result property="crossId" column="crossId"></result>
<result property="crossName" column="crossName"></result>
<result property="sort" column="sort"></result>
</resultMap>
<select id="getGreenAndCross" resultMap="BaseResultMap" >
select a.green_id as greenId, c.name as greenName , a.cross_id as crossId , b.name as crossName ,a.sort
from t_greenwave_cross a
left join t_base_cross_info b on a.cross_id = b.id
left join t_greenwave_info c on a.green_id = c.id
where a.green_id <![CDATA[ < ]]> 99
group by a.green_id ,a.sort
</select>
<select id="getCross" resultMap="BaseResultMap" >
select id as crossId,name as crossName from t_base_cross_info t where t.is_signal = 1
</select>
<!-- 统一接口:绿波路口车道级指标趋势,支持按5分钟粒度、15分钟粒度、30分钟粒度、1小时粒度汇聚 -->
<select id="findCrossObjectIndex"
resultType="net.wanji.opt.po.base.CrossLaneDataHistPoExtend">
SELECT MIN(ifnull(t.unit_time,#{startDate})) start_time,
cross_id ,
lane_no ,
dir_type ,
turn_type ,
SUM(flow) flow,
round(AVG(speed),2) speed,
MAX(queue_length) max_queue_length,
MIN(queue_length) min_queue_length,
round(AVG(queue_length)) avg_queue_length,
round(AVG(stop_times),2) stop_times,
round(AVG(delay_time),2) delay_time,
round(AVG(traffic_index),2) traffic_index,
round(AVG(sturation),4) sturation,
round(AVG(green_light_efficiency),4) green_light_efficiency,
round(AVG(vehicle_length_ratio_mean),4) vehicle_length_ratio_mean,
group_concat(service_level) service_level
FROM
(
SELECT start_time,
(case
when #{groupType}=0 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 5 ) * 5 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=1 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 15 ) * 15 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=2 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 30 ) * 30 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=3 then DATE_FORMAT(start_time,'%Y-%m-%d %H:00:00' )
when #{groupType}=4 then DATE_FORMAT(start_time,'%Y-%m-%d 00:00:00' )
else DATE_FORMAT(start_time,'%Y-01-01 00:00:00') <!-- 按查询时间范围不分粒度进行聚合处理 -->
end
) unit_time,
t.cross_id,
<choose>
<!-- 路口级 -->
<when test="objectType==0">
null as lane_no,
null as dir_type,
null as turn_type,
ifnull(service_level,'A') service_level,
traffic_index,
green_light_efficiency,
null as vehicle_length_ratio_mean,
</when>
<!-- 方向级 -->
<when test="objectType==1">
dir_type,
null as lane_no,
null as turn_type,
null as service_level,
traffic_index,
green_light_efficiency,
null as vehicle_length_ratio_mean,
</when>
<!-- 转向级 -->
<when test="objectType==2">
t.in_dir as dir_type,
t.turn_type,
null as lane_no,
null as service_level,
traffic_index,
green_light_efficiency,
null as vehicle_length_ratio_mean,
</when>
<otherwise>
</otherwise>
</choose>
flow,
speed,
queue_length,
stop_times,
delay_time,
sturation
<choose>
<!-- 路口级 -->
<when test="objectType==0">
FROM t_cross_data_hist t
</when>
<!-- 方向级 -->
<when test="objectType==1">
FROM t_cross_dir_data_hist t
</when>
<!-- 转向级 -->
<when test="objectType==2">
FROM t_cross_turn_data_hist t
</when>
<otherwise>
</otherwise>
</choose>
where 1=1
<if test="crossId!=null and crossId !=''">
and t.cross_id = #{crossId}
</if>
<if test="startDate !=null and endDate !=null">
and dt >= date_format(#{startDate},'%Y%m%d') and dt &lt;= date_format(#{endDate},'%Y%m%d')
AND start_time >= #{startDate} and start_time &lt; #{endDate}
</if>
<choose>
<!-- 方向级 -->
<when test="objectType==1">
and dir_type in (1,3,5,7)
</when>
<!-- 转向级 -->
<when test="objectType==2">
and t.in_dir in (1,3,5,7)
</when>
<otherwise>
</otherwise>
</choose>
) t
<choose>
<!-- 路口级 -->
<when test="objectType==0">
GROUP BY t.cross_id,unit_time
</when>
<!-- 方向级 -->
<when test="objectType==1">
GROUP BY t.cross_id,t.dir_type,unit_time
</when>
<!-- 转向级 -->
<when test="objectType==2">
GROUP BY t.cross_id,t.dir_type,t.turn_type,unit_time
</when>
<otherwise>
</otherwise>
</choose>
</select>
</mapper>
\ No newline at end of file
...@@ -9,7 +9,37 @@ ...@@ -9,7 +9,37 @@
FROM t_event_optimize_info FROM t_event_optimize_info
WHERE 1=1 WHERE 1=1
</select> </select>
<select id="getOverflow" parameterType="net.wanji.opt.entity.eventoptimize.TEventOptimizeInfo" resultType="net.wanji.opt.entity.eventoptimize.TEventOptimizeInfo" >
SELECT
cross_id,duration,opt_status,
event_type,opt_duration
FROM
t_event_optimize_info
WHERE
1=1
<if test="crossId!=null and crossId!=''">
AND cross_id=#{crossId}
</if>
<if test="startTime!=null and startTime!='' and endTime!='' and endTime!=null">
AND happen_start_time>=#{startTime} and happen_start_time &lt;=#{endTime}
</if>
</select>
<select id="getContrastOverflow" parameterType="net.wanji.opt.entity.eventoptimize.TEventOptimizeInfo" resultType="net.wanji.opt.entity.eventoptimize.TEventOptimizeInfo">
SELECT
cross_id,duration,opt_status,
event_type,opt_duration
FROM
t_event_optimize_info
WHERE
1=1
<if test="crossId!=null and crossId!=''">
AND cross_id=#{crossId}
</if>
<if test="contrastStartTime!=null and contrastStartTime!='' and constrastEndTime!='' and constrastEndTime!=null">
AND happen_start_time>=#{contrastStartTime} and happen_start_time &lt;=#{constrastEndTime}
</if>
</select>
</mapper> </mapper>
\ No newline at end of file
<?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.syslog.SysLogMapper">
<resultMap id="SysOptimizeLogMap" type="net.wanji.opt.entity.syslog.SysOptimizeLog">
<result property="crossId" column="cross_id"></result>
<result property="name" column="name"></result>
<result property="ip" column="ip"></result>
<result property="inserTime" column="insert_time"></result>
<result property="operateUser" column="operate-user"></result>
<result property="commandType" column="command_type"></result>
<result property="commandResult" column="command_result"></result>
<result property="queryTime" column="query_time"></result>
</resultMap>
<select id="findSysOptimizeLog" resultMap="SysOptimizeLogMap" parameterType="String">
SELECT t.query_time,t.ip ,t.cross_id,t1.name ,t.`operate-user`,
case t.command_type when 1 then '步进控制/恢复(公用)' when 2 then '恢复时间表(公用)' when 3 then '相位锁定/解锁(公用)' when 4 then '临时方案下发(公用)' when 5 then '定时任务恢复失败' end as command_type ,
case t.command_result when 1 then '成功' when 2 then '失败' when 3 then '停止失败任务解锁' end as command_result
FROM t_signal_utc_jinan.t_signal_command_log t
left join t_signal_utc_jinan.t_cross_info t1 on t.cross_id = t1.id
where t.query_time BETWEEN DATE_FORMAT(#{startTime},'%Y-%m-%d %H:%i:%s') and DATE_FORMAT(#{endTime},'%Y-%m-%d %H:%i:%s')
and t.data_info is not null
and t.command_type <![CDATA[ < ]]> 10
and t.cross_id = #{crossId}
order by t.query_time desc
</select>
</mapper>
\ No newline at end of file
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