|
@@ -53,10 +53,20 @@ public class TblDzbcAreaServiceImpl implements ITblDzbcAreaService {
|
|
|
LambdaQueryWrapper<TblDzbcArea> lqw = buildQueryWrapper(bo);
|
|
LambdaQueryWrapper<TblDzbcArea> lqw = buildQueryWrapper(bo);
|
|
|
Page<TblDzbcAreaVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
Page<TblDzbcAreaVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
|
|
|
|
|
|
- List<TblDzbcSiteVo> selectList = siteMapper.selectVoList();
|
|
|
|
|
|
|
+ List<TblDzbcSiteVo> selectList = siteMapper.selectVoList();
|
|
|
|
|
+
|
|
|
|
|
+ // hasSchedul=1 时过滤站点,只保留有未过期排班的站点
|
|
|
|
|
+ if (bo.getHasSchedul() != null && bo.getHasSchedul() == 1) {
|
|
|
|
|
+ List<Long> siteIdsWithSchedul = getSiteIdsWithSchedul();
|
|
|
|
|
+ selectList = selectList.stream()
|
|
|
|
|
+ .filter(siteVo -> siteIdsWithSchedul.contains(siteVo.getId()))
|
|
|
|
|
+ .toList();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ List<TblDzbcSiteVo> finalSelectList = selectList;
|
|
|
result.getRecords().forEach(areaVo -> {
|
|
result.getRecords().forEach(areaVo -> {
|
|
|
try{
|
|
try{
|
|
|
- areaVo.setSites(selectList.stream().filter(siteVo -> siteVo.getAreaId().equals(areaVo.getId())).toList());
|
|
|
|
|
|
|
+ areaVo.setSites(finalSelectList.stream().filter(siteVo -> siteVo.getAreaId().equals(areaVo.getId())).toList());
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
areaVo.setSites(new ArrayList<>());
|
|
areaVo.setSites(new ArrayList<>());
|
|
|
}
|
|
}
|
|
@@ -67,6 +77,32 @@ public class TblDzbcAreaServiceImpl implements ITblDzbcAreaService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
|
|
+ * 获取有未过期排班的站点ID列表
|
|
|
|
|
+ * 站点关联:有排班的路线(普通/多站点)关联的站点
|
|
|
|
|
+ */
|
|
|
|
|
+ private List<Long> getSiteIdsWithSchedul() {
|
|
|
|
|
+ // 1. 普通路线的站点:站点的 areaId 等于路线的 startArea 或 endArea
|
|
|
|
|
+ // 查询有排班的普通路线(startArea/endArea)对应的站点
|
|
|
|
|
+ String normalSiteSql = "SELECT DISTINCT s.id FROM tbl_dzbc_site s " +
|
|
|
|
|
+ "INNER JOIN tbl_dzbc_path p ON p.id IN " +
|
|
|
|
|
+ "(SELECT path_id FROM tbl_dzbc_path_scheduling WHERE mdate >= CURDATE() AND path_id IS NOT NULL AND (ext2 IS NULL OR ext2->'$.type' != 2)) " +
|
|
|
|
|
+ "WHERE s.area_id = p.start_area OR s.area_id = p.end_area";
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 多站点路线的站点:通过 path_site 表关联
|
|
|
|
|
+ String multiSiteSql = "SELECT DISTINCT site_id FROM tbl_dzbc_path_site WHERE path_id IN " +
|
|
|
|
|
+ "(SELECT path_id FROM tbl_dzbc_path_scheduling WHERE mdate >= CURDATE() AND path_id IS NOT NULL AND ext2->'$.type' = 2)";
|
|
|
|
|
+
|
|
|
|
|
+ // 合并查询
|
|
|
|
|
+ String allSiteSql = "(" + normalSiteSql + ") UNION (" + multiSiteSql + ")";
|
|
|
|
|
+
|
|
|
|
|
+ return siteMapper.selectList(new LambdaQueryWrapper<TblDzbcSite>()
|
|
|
|
|
+ .inSql(TblDzbcSite::getId, allSiteSql))
|
|
|
|
|
+ .stream()
|
|
|
|
|
+ .map(TblDzbcSite::getId)
|
|
|
|
|
+ .toList();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
* 查询定制班车-区域列表
|
|
* 查询定制班车-区域列表
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|