wenhongquan 2 mesi fa
parent
commit
d30a51a3f5

+ 38 - 2
ruoyi-modules/ruoyi-dzbc/src/main/java/org/dromara/system/service/impl/TblDzbcAreaServiceImpl.java

@@ -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