Commit a1f2138e authored by hanbing's avatar hanbing

[update] 优化干线方案评价接口性能

parent 2f9fc26e
......@@ -698,14 +698,14 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
private void fillLineSchemeBuffer(List<GreenwaveHistPO> filteredList, Map<String, LineSchemeDTO> lineSchemeBuffer)
throws ParseException {
List<GreenwaveCrossPO> greenwaveCrossPOList = greenwaveCrossMapper.selectAll();
List<CrossSectionPO> baseCrossSectionPOList = baseCrossSectionMapper.selectAll();
List<BaseCrossPlanPO> baseCrossPlanPOList = baseCrossPlanMapper.selectAll();
for (GreenwaveHistPO greenwaveHistPO : filteredList) {
Integer histGreenwaveId = greenwaveHistPO.getId();
Date histGreenwaveGmtModified = greenwaveHistPO.getGmtModified();
List<GreenwaveCrossPO> greenwaveCrossPOList = greenwaveCrossMapper.selectAll();
List<CrossSectionPO> baseCrossSectionPOList = baseCrossSectionMapper.selectAll();
List<BaseCrossPlanPO> baseCrossPlanPOList = baseCrossPlanMapper.selectAll();
for (GreenwaveCrossPO greenwaveCrossPO : greenwaveCrossPOList) {
Integer sectionId = greenwaveCrossPO.getSectionId();
// 判断绿波历史发生时间是否在时段内
......@@ -1089,9 +1089,12 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
String dirStr = split[0];
Integer dir = BaseEnum.SignalDirectionEnum.getCodeByName(dirStr);
List<CrossDirDataHistPO> totalCrossDirDataHistPOList = new ArrayList<>();
String boStartDayStr = dayFormat.format(boStartTime);
String boEndDayStr = dayFormat.format(boEndTime);
List<CrossDirDataHistPO> poInSectionList = crossDirDataHistMapper.selectByTimeSection(boStartDayStr, boEndDayStr, startHourMinuteStr, endHourMinuteStr);
for (GreenwaveCrossPO greenwaveCrossPO : greenwaveCrossPOList) {
buildTotalCrossDirHistList(boStartTime, boEndTime, startHourMinuteStr, endHourMinuteStr, dirStr, dir,
totalCrossDirDataHistPOList, greenwaveCrossPO);
buildTotalCrossDirHistList(dirStr, dir, totalCrossDirDataHistPOList, greenwaveCrossPO, poInSectionList);
}
// 获取协调方向评价指标
......@@ -1104,8 +1107,8 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
Integer dir1 = BaseEnum.SignalDirectionEnum.getCodeByName(s);
List<CrossDirDataHistPO> totalCrossDirDataHistPOList1 = new ArrayList<>();
for (GreenwaveCrossPO greenwaveCrossPO : greenwaveCrossPOList) {
buildTotalCrossDirHistList(boStartTime, boEndTime, startHourMinuteStr, endHourMinuteStr, dirStr1, dir1,
totalCrossDirDataHistPOList1, greenwaveCrossPO);
buildTotalCrossDirHistList(dirStr1, dir1, totalCrossDirDataHistPOList1,
greenwaveCrossPO, poInSectionList);
coordSpeed = (int) (totalCrossDirDataHistPOList1.stream()
.mapToDouble(CrossDirDataHistPO::getSpeed)
......@@ -1406,17 +1409,19 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
}
private void buildTotalCrossDirHistList(
Date boStartTime, Date boEndTime, String startHourMinuteStr, String endHourMinuteStr, String dirStr,
Integer dir, List<CrossDirDataHistPO> totalCrossDirDataHistPOList, GreenwaveCrossPO greenwaveCrossPO) {
String dirStr, Integer dir, List<CrossDirDataHistPO> totalCrossDirDataHistPOList,
GreenwaveCrossPO greenwaveCrossPO, List<CrossDirDataHistPO> poInSectionList) {
String crossId = greenwaveCrossPO.getCrossId();
Integer dirCode = dir;
dirCode = convertDirCode(dirStr, crossId, dirCode);
String boStartDayStr = dayFormat.format(boStartTime);
String boEndDayStr = dayFormat.format(boEndTime);
List<CrossDirDataHistPO> crossDirDataHistPOList = crossDirDataHistMapper.selectByCrossDirAndTimeSection(
crossId, dirCode, boStartDayStr, boEndDayStr, startHourMinuteStr, endHourMinuteStr);
totalCrossDirDataHistPOList.addAll(crossDirDataHistPOList);
Integer finalDirCode = dirCode;
List<CrossDirDataHistPO> filteredList = poInSectionList.stream()
.filter(po -> po.getCrossId().equals(crossId) && po.getDirType().equals(finalDirCode))
.collect(Collectors.toList());
totalCrossDirDataHistPOList.addAll(filteredList);
}
private Integer convertDirCode(String dirStr, String crossId, Integer dirCode) {
......
......@@ -72,4 +72,5 @@ public interface CrossDirDataHistMapper extends BaseMapper<CrossDirDataHistPO> {
@Param("endHourMinuteStr") String endHourMinuteStr
);
List<CrossDirDataHistPO> selectByTimeSection(String boStartDayStr, String boEndDayStr, String startHourMinuteStr, String endHourMinuteStr);
}
......@@ -245,4 +245,12 @@
AND DATE_FORMAT(FROM_UNIXTIME(batch_time), '%H:%i') BETWEEN #{startHourMinuteStr} AND #{endHourMinuteStr}
</select>
<select id="selectByTimeSection" resultType="net.wanji.databus.po.CrossDirDataHistPO">
SELECT <include refid="Base_Column_List"></include>
FROM t_cross_dir_data_hist
WHERE in_out_type = 1
AND DATE_FORMAT(FROM_UNIXTIME(batch_time), '%Y-%m-%d') BETWEEN #{boStartDayStr} AND #{boEndDayStr}
AND DATE_FORMAT(FROM_UNIXTIME(batch_time), '%H:%i') BETWEEN #{startHourMinuteStr} AND #{endHourMinuteStr}
</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