Commit f38bef07 authored by fengyasheng's avatar fengyasheng

干线协调方向频发拥堵/缓行路段接口更新-定时任务每天计算

parent e4063f7a
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.opt.entity.judgeanalysis.AnalysisProblemCrossDay;
import net.wanji.opt.entity.judgeanalysis.CrossPoint;
import net.wanji.opt.synthesis.pojo.CrossOptAnalysisEntity;
import net.wanji.opt.vo2.GreenwaveCrossResultDTO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
......@@ -111,5 +112,9 @@ public interface AnalysisProblemCrossDayMapper extends BaseMapper<AnalysisProble
* 获取路口优化数据
*/
List<CrossOptAnalysisEntity> getCrossOptAnalysis(@Param("greenId") String greenId,@Param("crossID") String crossID, @Param("startTime")String startTime,@Param("endTime")String endTime);
List<GreenwaveCrossResultDTO> getTrunkLineCrossProblemByDay();
void insertAnalysisCrossDayData(List<GreenwaveCrossResultDTO> greenwaveCrossResultList);
}
......@@ -74,4 +74,6 @@ public interface AnalysisProblemCrossDayService extends IService<AnalysisProblem
* @param date 日期
*/
CrossOptAnalysisVO getCrossOptAnalysis(String crossID, String startTime,String endTime);
void insertAnalysisProblemCrossDay();
}
......@@ -11,6 +11,8 @@ import net.wanji.opt.entity.judgeanalysis.CrossPoint;
import net.wanji.opt.servicev2.judgeanalysis.AnalysisProblemCrossDayService;
import net.wanji.opt.synthesis.pojo.CrossOptAnalysisEntity;
import net.wanji.opt.vo2.CrossOptAnalysisVO;
import net.wanji.opt.vo2.GreenwaveCrossResult;
import net.wanji.opt.vo2.GreenwaveCrossResultDTO;
import org.locationtech.jts.geom.Geometry;
import org.springframework.stereotype.Service;
......@@ -210,4 +212,11 @@ public class AnalysisProblemCrossDayServiceImpl extends ServiceImpl<AnalysisProb
return crossOptAnalysisVO;
}
@Override
public void insertAnalysisProblemCrossDay() {
List<GreenwaveCrossResultDTO> greenwaveCrossResultList = analysisProblemCrossDayMapper.getTrunkLineCrossProblemByDay();
analysisProblemCrossDayMapper.insertAnalysisCrossDayData(greenwaveCrossResultList);
}
}
package net.wanji.opt.task;
import lombok.extern.slf4j.Slf4j;
import net.wanji.opt.servicev2.judgeanalysis.AnalysisProblemCrossDayService;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDateTime;
@Component
@Slf4j
public class AnalysisProblemCrossDayTask implements ApplicationRunner {
@Resource
private AnalysisProblemCrossDayService analysisProblemCrossDayService;
@Override
public void run(ApplicationArguments args) throws Exception {
log.info("服务启动时--干线协调方向频发拥堵/缓行路段--任务执行时间:" + LocalDateTime.now());
// 干线协调方向频发拥堵/缓行路段
try {
// analysisProblemCrossDayService.insertAnalysisProblemCrossDay();
}catch (Exception e){
log.error("服务启动时--干线协调方向频发拥堵/缓行路段--任务执行错误" + e);
}
log.info("服务启动时--干线协调方向频发拥堵/缓行路段--任务执行结束时间:" + LocalDateTime.now());
}
/**
* 每凌晨 0:30 执行的任务
*/
@Scheduled(cron = "0 10 0 * * ?") public void executeWeeklyTask() {
//干线协调方向频发拥堵/缓行路段
log.info("定时任务--干线协调方向频发拥堵/缓行路段--执行开始时间:" + LocalDateTime.now());
try {
analysisProblemCrossDayService.insertAnalysisProblemCrossDay();
}catch (Exception e){
log.error("定时任务--干线协调方向频发拥堵/缓行路段--任务执行错误" + e);
}
log.info("定时任务--干线协调方向频发拥堵/缓行路段--执行结束时间:" + LocalDateTime.now());
}
}
package net.wanji.opt.vo2;
import lombok.Data;
@Data
public class GreenwaveCrossResult {
// 字段映射 SQL 查询中的列
private Integer greenId;
private Integer dirCount; // count(*) AS dir_count
private String crossId; // b.cross_id
private Integer status; // status
private Integer dirType; // dir_type
private Integer inDir; // a.in_dir
private Integer outDir; // a.out_dir
private String name; // c.name
}
\ No newline at end of file
package net.wanji.opt.vo2;
import lombok.Data;
import java.util.Date;
@Data
public class GreenwaveCrossResultDTO {
// 字段映射 SQL 查询中的列
private String id;
private Integer greenId;
private Integer dirCount; // count(*) AS dir_count
private String crossId; // b.cross_id
private Integer status; // status
private Integer dirType; // dir_type
private Integer inDir; // a.in_dir
private Integer outDir; // a.out_dir
private String name; // c.name
private Date startTime;
private Date endTime;
}
\ No newline at end of file
......@@ -298,6 +298,22 @@
;
</insert>
<insert id="insertAnalysisCrossDayData" parameterType="java.util.List">
INSERT INTO t_analysis_green_wave_cross_day_data (
green_id, dir_count, cross_id, status, dir_type, in_dir, out_dir, name, start_time, end_time
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.greenId}, #{item.dirCount}, #{item.crossId}, #{item.status}, #{item.dirType},
#{item.inDir}, #{item.outDir}, #{item.name}, #{item.startTime}, #{item.endTime}
)
</foreach>
ON DUPLICATE KEY UPDATE
dir_count = VALUES(dir_count),
in_dir = VALUES(in_dir),
out_dir = VALUES(out_dir),
name = VALUES(name)
</insert>
<!-- 根据条件查询表t_analysis_problem_cross_day信息 -->
<select id="checkData" resultMap="AnalysisProblemCrossDayMap">
SELECT dt
......@@ -396,6 +412,27 @@
and t.dt >= date_format(#{startTime},'%Y%m%d') and t.dt &lt;= date_format(#{endTime},'%Y%m%d')
group by status
</select>
<select id="getTrunkLineCrossProblemByDay" resultType="net.wanji.opt.vo2.GreenwaveCrossResultDTO">
SELECT
a.dir_count,
a.cross_id,
a.status,
a.dir_type,
b.in_dir,
b.out_dir,
c.name,
b.green_id,
DATE_SUB(CURDATE(), INTERVAL 1 DAY) as startTime,
DATE_SUB(CURDATE(), INTERVAL 1 SECOND) as endTime
FROM
( SELECT count(*) AS dir_count, cross_id, dir_type, status FROM t_cross_dir_data_hist
WHERE
start_time BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND DATE_SUB(CURDATE(), INTERVAL 1 SECOND)
GROUP BY cross_id, dir_type, status ) a
LEFT JOIN t_greenwave_cross b ON a.cross_id = b.cross_id
LEFT JOIN t_base_cross_info c ON a.cross_id = c.id
where ( b.in_dir = a.dir_type OR b.out_dir = a.dir_type )
</select>
</mapper>
......@@ -367,35 +367,25 @@
</select>
<select id="getTrunkLineCrossProblem" resultType="net.wanji.opt.vo2.GreenwaveCrossResult">
SELECT
a.green_id,
count(*) AS dir_count,
b.cross_id,
sum(dir_count) as dir_count,
cross_id,
status,
dir_type,
a.in_dir,
a.out_dir,
c.name
in_dir,
out_dir,
name,
green_id
FROM
t_greenwave_cross a
LEFT JOIN t_base_cross_info AS c ON a.cross_id = c.id
LEFT JOIN t_cross_dir_data_hist b ON a.cross_id = b.cross_id
WHERE
1=1
<if test="greenId != null">
AND a.green_id = #{greenId}
</if>
<if test="startTime != null and endTime != null">
AND b.start_time BETWEEN #{startTime}
AND #{endTime}
</if>
<if test="status != null">
AND b.status = #{status}
</if>
AND ( a.in_dir = b.dir_type OR a.out_dir = b.dir_type )
GROUP BY
b.cross_id,
dir_type,
status
t_analysis_green_wave_cross_day_data
WHERE
1=1
<if test="startTime != null and endTime != null">
and start_time BETWEEN #{startTime} AND #{endTime}
</if>
<if test="greenId != null">
and green_id = #{greenId}
</if>
GROUP BY cross_id, dir_type, status
</select>
......
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