wenhongquan 3 месяцев назад
Родитель
Сommit
102b7380d5

+ 4 - 2
ruoyi-modules/ruoyi-dzbc/src/main/java/org/dromara/system/controller/TblDzbcMultiSitePathController.java

@@ -37,10 +37,12 @@ public class TblDzbcMultiSitePathController extends BaseController {
     /**
      * 根据站点ID查询包含该站点的多站点路线列表
      * @param siteId 站点ID
+     * @param hasSchedul 是否只返回有未过期排班的路线 1-是 0-否(默认)
      */
     @GetMapping("/listBySiteId/{siteId}")
-    public R<List<TblDzbcMultiSitePathVo>> listBySiteId(@PathVariable Long siteId) {
-        return R.ok(tblDzbcMultiSitePathService.queryBySiteId(siteId));
+    public R<List<TblDzbcMultiSitePathVo>> listBySiteId(@PathVariable Long siteId,
+                                                        @RequestParam(required = false, defaultValue = "0") Integer hasSchedul) {
+        return R.ok(tblDzbcMultiSitePathService.queryBySiteId(siteId, hasSchedul));
     }
 
     @Log(title = "多站点路线", businessType = BusinessType.EXPORT)

+ 5 - 0
ruoyi-modules/ruoyi-dzbc/src/main/java/org/dromara/system/domain/bo/TblDzbcAreaBo.java

@@ -68,5 +68,10 @@ public class TblDzbcAreaBo extends BaseEntity {
     //@NotBlank(message = "扩展2不能为空", groups = { AddGroup.class, EditGroup.class })
     private String ext2;
 
+    /**
+     * 是否只返回有未过期排班的区域 1-是 0-否(默认)
+     */
+    private Integer hasSchedul;
+
 
 }

+ 5 - 0
ruoyi-modules/ruoyi-dzbc/src/main/java/org/dromara/system/domain/bo/TblDzbcMultiSitePathBo.java

@@ -14,4 +14,9 @@ public class TblDzbcMultiSitePathBo extends TblDzbcMultiSitePath {
     private String name;
 
     private Integer status;
+
+    /**
+     * 是否只返回有排班的路线 1-是 0-否(默认)
+     */
+    private Integer hasSchedul;
 }

+ 5 - 0
ruoyi-modules/ruoyi-dzbc/src/main/java/org/dromara/system/domain/bo/TblDzbcPathBo.java

@@ -75,5 +75,10 @@ public class TblDzbcPathBo extends BaseEntity {
 
     private String costTime;
 
+    /**
+     * 是否只返回有排班的路线 1-是 0-否(默认)
+     */
+    private Integer hasSchedul;
+
 
 }

+ 2 - 1
ruoyi-modules/ruoyi-dzbc/src/main/java/org/dromara/system/service/ITblDzbcMultiSitePathService.java

@@ -16,9 +16,10 @@ public interface ITblDzbcMultiSitePathService {
     /**
      * 根据站点ID查询包含该站点的多站点路线列表
      * @param siteId 站点ID
+     * @param hasSchedul 是否只返回有未过期排班的路线 1-是 0-否(默认)
      * @return 路线列表
      */
-    List<TblDzbcMultiSitePathVo> queryBySiteId(Long siteId);
+    List<TblDzbcMultiSitePathVo> queryBySiteId(Long siteId, Integer hasSchedul);
 
     TableDataInfo<TblDzbcMultiSitePathVo> queryPageList(TblDzbcMultiSitePathBo bo, PageQuery pageQuery);
 

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

@@ -84,6 +84,24 @@ public class TblDzbcAreaServiceImpl implements ITblDzbcAreaService {
         lqw.eq(bo.getKyzId() != null, TblDzbcArea::getKyzId, bo.getKyzId());
         lqw.eq(StringUtils.isNotBlank(bo.getExt1()), TblDzbcArea::getExt1, bo.getExt1());
         lqw.eq(StringUtils.isNotBlank(bo.getExt2()), TblDzbcArea::getExt2, bo.getExt2());
+        // hasSchedul: 1-只返回有未过期排班的区域 0或不传-返回全部
+        // 区域关联:站点(areaId) → 路线(startArea/endArea) 或 站点 → 多站点路线
+        if (bo.getHasSchedul() != null && bo.getHasSchedul() == 1) {
+            lqw.apply("id IN (" +
+                // 普通路线关联的区域
+                "SELECT DISTINCT id FROM tbl_dzbc_area WHERE id IN " +
+                "(SELECT DISTINCT area_id FROM tbl_dzbc_site WHERE id IN " +
+                "(SELECT DISTINCT start_area FROM tbl_dzbc_path WHERE id IN " +
+                "(SELECT DISTINCT path_id FROM tbl_dzbc_path_scheduling WHERE mdate >= CURDATE() AND path_id IS NOT NULL AND (ext2 IS NULL OR ext2->'$.type' != 2))) " +
+                "OR id IN (SELECT DISTINCT end_area FROM tbl_dzbc_path WHERE id IN " +
+                "(SELECT DISTINCT path_id FROM tbl_dzbc_path_scheduling WHERE mdate >= CURDATE() AND path_id IS NOT NULL AND (ext2 IS NULL OR ext2->'$.type' != 2)))) " +
+                "OR id IN (" +
+                // 多站点路线关联的区域
+                "SELECT DISTINCT area_id FROM tbl_dzbc_site WHERE id IN " +
+                "(SELECT DISTINCT site_id FROM tbl_dzbc_path_site WHERE path_id IN " +
+                "(SELECT DISTINCT path_id FROM tbl_dzbc_path_scheduling WHERE mdate >= CURDATE() AND path_id IS NOT NULL AND ext2->'$.type' = 2)))" +
+                ")");
+        }
         return lqw;
     }
 

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

@@ -8,6 +8,7 @@ import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.system.domain.TblDzbcMultiSitePath;
+import org.dromara.system.domain.TblDzbcPathScheduling;
 import org.dromara.system.domain.TblDzbcPathSite;
 import org.dromara.system.domain.TblDzbcSitePrice;
 import org.dromara.system.domain.bo.TblDzbcMultiSitePathBo;
@@ -15,6 +16,7 @@ import org.dromara.system.domain.vo.TblDzbcMultiSitePathVo;
 import org.dromara.system.domain.vo.TblDzbcPathSiteVo;
 import org.dromara.system.domain.vo.TblDzbcSitePriceVo;
 import org.dromara.system.mapper.TblDzbcMultiSitePathMapper;
+import org.dromara.system.mapper.TblDzbcPathSchedulingMapper;
 import org.dromara.system.mapper.TblDzbcPathSiteMapper;
 import org.dromara.system.mapper.TblDzbcSitePriceMapper;
 import org.dromara.system.service.ITblDzbcMultiSitePathService;
@@ -32,6 +34,7 @@ public class TblDzbcMultiSitePathServiceImpl implements ITblDzbcMultiSitePathSer
     private final TblDzbcMultiSitePathMapper baseMapper;
     private final TblDzbcPathSiteMapper pathSiteMapper;
     private final TblDzbcSitePriceMapper sitePriceMapper;
+    private final TblDzbcPathSchedulingMapper schedulingMapper;
 
     @Override
     public TblDzbcMultiSitePathVo queryById(Long id) {
@@ -39,7 +42,7 @@ public class TblDzbcMultiSitePathServiceImpl implements ITblDzbcMultiSitePathSer
     }
 
     @Override
-    public List<TblDzbcMultiSitePathVo> queryBySiteId(Long siteId) {
+    public List<TblDzbcMultiSitePathVo> queryBySiteId(Long siteId, Integer hasSchedul) {
         // 1. 查找包含该站点的所有路线ID
         LambdaQueryWrapper<TblDzbcPathSite> lqw = Wrappers.lambdaQuery();
         lqw.eq(TblDzbcPathSite::getSiteId, siteId);
@@ -54,7 +57,24 @@ public class TblDzbcMultiSitePathServiceImpl implements ITblDzbcMultiSitePathSer
             .distinct()
             .collect(Collectors.toList());
 
-        // 2. 根据路线ID查询路线信息
+        // 2. 如果需要过滤有排班的路线
+        if (hasSchedul != null && hasSchedul == 1) {
+            // 查询有未过期排班的多站点路线ID
+            LambdaQueryWrapper<TblDzbcPathScheduling> schedulLqw = Wrappers.lambdaQuery();
+            schedulLqw.in(TblDzbcPathScheduling::getPathId, pathIds);
+            schedulLqw.ge(TblDzbcPathScheduling::getMdate, new java.util.Date());
+            schedulLqw.apply("ext2->'$.type' = 2");
+            List<TblDzbcPathScheduling> schedulList = schedulingMapper.selectList(schedulLqw);
+            if (schedulList == null || schedulList.isEmpty()) {
+                return Collections.emptyList();
+            }
+            pathIds = schedulList.stream()
+                .map(TblDzbcPathScheduling::getPathId)
+                .distinct()
+                .collect(Collectors.toList());
+        }
+
+        // 3. 根据路线ID查询路线信息
         return baseMapper.selectVoBatchIds(pathIds);
     }
 
@@ -112,6 +132,11 @@ public class TblDzbcMultiSitePathServiceImpl implements ITblDzbcMultiSitePathSer
         LambdaQueryWrapper<TblDzbcMultiSitePath> lqw = Wrappers.lambdaQuery();
         lqw.like(org.dromara.common.core.utils.StringUtils.isNotBlank(bo.getName()), TblDzbcMultiSitePath::getName, bo.getName());
         lqw.eq(bo.getStatus() != null, TblDzbcMultiSitePath::getStatus, bo.getStatus());
+        // hasSchedul: 1-只返回有未过期排班的路线 0或不传-返回全部
+        // type=2 表示多站点路线
+        if (bo.getHasSchedul() != null && bo.getHasSchedul() == 1) {
+            lqw.apply("id IN (SELECT DISTINCT path_id FROM tbl_dzbc_path_scheduling WHERE path_id IS NOT NULL AND mdate >= CURDATE() AND ext2->'$.type' = 2)");
+        }
         lqw.orderByDesc(TblDzbcMultiSitePath::getId);
         return lqw;
     }

+ 4 - 0
ruoyi-modules/ruoyi-dzbc/src/main/java/org/dromara/system/service/impl/TblDzbcPathServiceImpl.java

@@ -76,6 +76,10 @@ public class TblDzbcPathServiceImpl implements ITblDzbcPathService {
         lqw.eq(StringUtils.isNotBlank(bo.getMtime()), TblDzbcPath::getMtime, bo.getMtime());
         lqw.eq(StringUtils.isNotBlank(bo.getExt1()), TblDzbcPath::getExt1, bo.getExt1());
         lqw.eq(StringUtils.isNotBlank(bo.getExt2()), TblDzbcPath::getExt2, bo.getExt2());
+        // hasSchedul: 1-只返回有未过期排班的路线 0或不传-返回全部
+        if (bo.getHasSchedul() != null && bo.getHasSchedul() == 1) {
+            lqw.apply("id IN (SELECT DISTINCT path_id FROM tbl_dzbc_path_scheduling WHERE path_id IS NOT NULL AND mdate >= CURDATE())");
+        }
         if(params != null && !params.isEmpty()){
             if(params.containsKey("recommend")){
                 lqw.apply(StringUtils.format(" ext1->'$.recommend' = {}", params.get("recommend").toString()));