Browse Source

提交物流订单相关接口

chenxiaofei 7 tháng trước cách đây
mục cha
commit
53b03b3036
27 tập tin đã thay đổi với 806 bổ sung74 xóa
  1. 2 0
      sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/RemoteFleetService.java
  2. 10 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/QueryLogisticDetailResp.java
  3. 5 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/QueryLogisticListResp.java
  4. 19 18
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractLogisticsService.java
  5. 11 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfFleetController.java
  6. 10 3
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckController.java
  7. 33 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dubbo/RemoteFleetServiceImpl.java
  8. 25 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/QueryFleetReq.java
  9. 5 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/TruckInfoReq.java
  10. 125 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/QueryFleetResp.java
  11. 7 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetRepository.java
  12. 2 2
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetTruckRepository.java
  13. 20 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckRepository.java
  14. 107 4
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfFleetService.java
  15. 27 3
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java
  16. 1 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java
  17. 32 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtLogisticsOrderController.java
  18. 5 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/QueryLogisticsOrderReq.java
  19. 41 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/CapacityReq.java
  20. 69 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/CapacityVo.java
  21. 40 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/DeleteCapacityReq.java
  22. 44 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderCirculateRepository.java
  23. 7 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderContractRepository.java
  24. 9 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java
  25. 136 25
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  26. 12 15
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java
  27. 2 0
      sql/2025/11/30/2025_11_30_cxf_alert.sql

+ 2 - 0
sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/RemoteFleetService.java

@@ -107,4 +107,6 @@ public interface RemoteFleetService {
 
 
     List<RTruckVo> findTruckByTruckIds(Set<Long> truckIds);
+
+    List<RFleetVo> findFleetByIds(Set<Long> fleetIds);
 }

+ 10 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/QueryLogisticDetailResp.java

@@ -148,6 +148,16 @@ public class QueryLogisticDetailResp implements Serializable {
         @Schema(description = "通用价格")
         private BigDecimal commonPrice;
 
+        /**
+         * 合同状态
+         */
+        @Schema(description = "合同状态")
+        private String contractStatus;
+        /**
+         * 合同状态描述
+         */
+        @Schema(description = "合同状态描述")
+        private String contractStatusDesc;
 
 
     }

+ 5 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/QueryLogisticListResp.java

@@ -100,6 +100,11 @@ public class QueryLogisticListResp implements Serializable {
      */
     @Schema(description = "终止日期")
     private String endDate;
+    /**
+     * 发起人id
+     */
+    @Schema(description = "发起人id")
+    private Long initiatorId;
     /**
      * 发起人
      */

+ 19 - 18
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractLogisticsService.java

@@ -1058,7 +1058,7 @@ public class KwcContractLogisticsService {
                 req.getContractNo(),
                 req.getContractName(),entIdList);
         List<KwcContractLogistics> records = page.getRecords();
-        if (CollectionUtils.isNotEmpty(records)) {
+        if (CollectionUtils.isEmpty(records)) {
             return PageDataResult.empty(req.getPageNum(),req.getPageSize());
         }
         //发起人id
@@ -1071,10 +1071,7 @@ public class KwcContractLogisticsService {
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(userIds)){
             longUserCacheResDtoMap = remoteSystemService.queryUserCacheMapByIds(userIds);
         }
-        //企业id
-        Set<Long> entIds = records.stream()
-                .map(KwcContractLogistics::getEntId)
-                .collect(Collectors.toSet());
+
         //合同id
         Set<Long> contractIds = records.stream()
                 .map(KwcContractLogistics::getId)
@@ -1151,6 +1148,7 @@ public class KwcContractLogisticsService {
             queryLogisticListResp.setStartDate(startDate);
             String endDate = DateUtils.format(r.getEndTime(), DateUtils.DATE_TIME_PATTERN);
             queryLogisticListResp.setEndDate(endDate);
+            queryLogisticListResp.setInitiatorId(r.getCreateBy());
             UserCacheResDto userCacheResDto = finalLongUserCacheResDtoMap.getOrDefault(r.getCreateBy(), new UserCacheResDto());
             queryLogisticListResp.setInitiator(userCacheResDto.getName());
             EntCacheResDto entInfo = userCacheResDto.getEntInfo();
@@ -1170,19 +1168,13 @@ public class KwcContractLogisticsService {
     public Boolean addOrUpdateLogisticsContract(LogisticListReq req) {
         log.info("新增物流合同,请求参数 :{}", JSON.toJSONString(req));
         //查询物流合同
-        KwcContractLogistics kwcContractLogistics =
-                kwcContractLogisticsRepository.queryById(req.getId());
-        if (org.apache.commons.lang3.StringUtils.equals(kwcContractLogistics.getContractNo(),
-                req.getBaseInfo().getContractCode())){
-            throw new BusinessException("合同已存在,合同编号:{}", req.getBaseInfo().getContractCode());
-        }
         long contactId = new IdWorker(1L).nextId();
 
         KwcContractLogistics saveContractLogistics = new KwcContractLogistics();
         Date date = new Date();
         LogisticListReq.TradeBaseInfo baseInfo = req.getBaseInfo();
         if (Objects.nonNull(req.getId())){
-            saveContractLogistics.setId(contactId);
+            saveContractLogistics.setId(req.getId());
         }else {
             saveContractLogistics.setId(contactId);
         }
@@ -1274,11 +1266,13 @@ public class KwcContractLogisticsService {
         List<KwcContractLogisticsUnit> units = Lists.newArrayList();
         //存供应商
         if(Objects.nonNull(baseInfo.getProvideEntId())) {
-            buildLogisticsUnit(contactId, baseInfo.getProvideEntId(), baseInfo.getProvidePhone(), entCacheResDtoMap, date, units);
+            buildLogisticsUnit(contactId, baseInfo.getProvideEntId(), baseInfo.getProvidePhone(), entCacheResDtoMap,
+                    date, units,CooperateTypeEnum.SUPPLIER.getCode());
         }
         //存采购商
         if (Objects.nonNull(baseInfo.getPurchaseEntId())) {
-            buildLogisticsUnit(contactId, baseInfo.getPurchaseEntId(), baseInfo.getPurchasePhone(), entCacheResDtoMap, date, units);
+            buildLogisticsUnit(contactId, baseInfo.getPurchaseEntId(), baseInfo.getPurchasePhone(), entCacheResDtoMap
+                    , date, units,CooperateTypeEnum.PURCHASER.getCode());
         }
         //删除企业
         kwcContractLogisticsUnitRepository.removeByContractId(contactId);
@@ -1288,18 +1282,22 @@ public class KwcContractLogisticsService {
 
     private static void buildLogisticsUnit(long contactId, Long entId, String phone ,
                                            Map<Long
-            , EntCacheResDto> entCacheResDtoMap, Date date, List<KwcContractLogisticsUnit> units) {
+            , EntCacheResDto> entCacheResDtoMap, Date date, List<KwcContractLogisticsUnit> units,Integer unitType) {
         KwcContractLogisticsUnit kwcContractTradeUnit = new KwcContractLogisticsUnit();
         kwcContractTradeUnit.setId(new IdWorker(1L).nextId());
         kwcContractTradeUnit.setContractId(contactId);
-        kwcContractTradeUnit.setUnitType(CooperateTypeEnum.SUPPLIER.getCode());
+        kwcContractTradeUnit.setUnitType(unitType);
         kwcContractTradeUnit.setEntId(entId);
         EntCacheResDto entCacheResDto = entCacheResDtoMap.get(kwcContractTradeUnit.getEntId());
+        kwcContractTradeUnit.setFirmName("");
+        kwcContractTradeUnit.setContacts("");
+        kwcContractTradeUnit.setPhone("");
         if (Objects.nonNull(entCacheResDto)) {
             kwcContractTradeUnit.setFirmName(entCacheResDto.getFirmName());
+            kwcContractTradeUnit.setContacts(entCacheResDto.getContacts());
+            kwcContractTradeUnit.setPhone(entCacheResDto.getPhone());
         }
-        kwcContractTradeUnit.setContacts(entCacheResDto.getContacts());
-        kwcContractTradeUnit.setPhone(entCacheResDto.getPhone());
+
         kwcContractTradeUnit.setSignPhone(phone);
         kwcContractTradeUnit.setStatus(Global.NO);
         kwcContractTradeUnit.setCreateBy(LoginUserHolder.getUserId());
@@ -1368,6 +1366,9 @@ public class KwcContractLogisticsService {
                 String.valueOf(logistics.getSigningWay())));
         tradeBaseInfo.setStartTime(logistics.getStartTime());
         tradeBaseInfo.setCommonPrice(logistics.getCommonPrice());
+        tradeBaseInfo.setContractStatus(String.valueOf(logistics.getStatus()));
+        tradeBaseInfo.setContractStatusDesc(ContractStatusEnum.getNameByCode(logistics.getStatus()));
+
 
         queryLogisticListResp.setBaseInfo(tradeBaseInfo);
         queryLogisticListResp.setContractFile(logistics.getSigningUrl());

+ 11 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfFleetController.java

@@ -10,12 +10,16 @@ import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.core.web.response.ResponseUtil;
+import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.excel.easyexcel.RequestHolder;
 import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.fleet.model.dto.KwfFleetDto;
+import com.sckw.fleet.model.request.QueryFleetReq;
 import com.sckw.fleet.model.vo.KwfFleetVo;
+import com.sckw.fleet.model.vo.QueryFleetResp;
 import com.sckw.fleet.service.KwfFleetService;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
@@ -140,4 +144,11 @@ public class KwfFleetController {
     public HttpResult findTruckList(@RequestBody Map<String, Object> params) throws SystemException {
         return HttpResult.ok(fleetService.findTruckList(params));
     }
+    /**
+     * 分页查询车队列表
+     */
+    @PostMapping("/findFleetByPage")
+    public BaseResult<PageDataResult<QueryFleetResp>> findFleetByPage(@RequestBody QueryFleetReq req) {
+        return BaseResult.success(fleetService.findFleetByPage(req));
+    }
 }

+ 10 - 3
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckController.java

@@ -19,9 +19,7 @@ import com.sckw.fleet.model.dto.GpsByTruckNoDto;
 import com.sckw.fleet.model.dto.KwfTransportLicenseDto;
 import com.sckw.fleet.model.dto.KwfTruckDto;
 import com.sckw.fleet.model.dto.KwfTruckLicenseDto;
-import com.sckw.fleet.model.request.CapacityStatusReq;
-import com.sckw.fleet.model.request.TruckInfoReq;
-import com.sckw.fleet.model.request.TruckNoReq;
+import com.sckw.fleet.model.request.*;
 import com.sckw.fleet.model.vo.*;
 import com.sckw.fleet.service.KwfTruckService;
 import com.sckw.system.api.RemoteSystemService;
@@ -344,4 +342,13 @@ public class KwfTruckController {
     public BaseResult<List<KwfTruckVo>> queryTruckNo(@RequestBody TruckNoReq req) {
         return BaseResult.success(truckService.queryTruckNo(req));
     }
+
+    /**
+     * 添加运力分页查询车辆信息
+     */
+    @PostMapping("/queryPageCapacityTruck")
+    @Operation(summary = "添加运力分页查询车辆信息", description = "添加运力分页查询车辆信息")
+    public BaseResult<PageDataResult<KwfTruckDetailVo>> queryPageCapacityTruck(@RequestBody TruckInfoReq req) {
+        return BaseResult.success(truckService.queryPageCapacityTruck(req));
+    }
 }

+ 33 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dubbo/RemoteFleetServiceImpl.java

@@ -14,6 +14,7 @@ import com.sckw.fleet.model.*;
 import com.sckw.fleet.repository.*;
 import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboService;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -400,5 +401,37 @@ public class RemoteFleetServiceImpl implements RemoteFleetService {
 
     }
 
+    @Override
+    public List<RFleetVo> findFleetByIds(Set<Long> fleetIds) {
+        List<KwfFleet> fleets = fleetRepository.findByfleetIds(fleetIds);
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(fleets)){
+            return Collections.emptyList();
+        }
+        return fleets.stream()
+                .map(RemoteFleetServiceImpl::getRFleetVo)
+                .collect(Collectors.toList());
+    }
+
+    @NotNull
+    private static RFleetVo getRFleetVo(KwfFleet fleet) {
+        RFleetVo rFleetVo = new RFleetVo();
+        rFleetVo.setId(fleet.getId());
+        rFleetVo.setRemark(fleet.getRemark());
+        rFleetVo.setStatus(fleet.getStatus());
+        rFleetVo.setCreateBy(fleet.getCreateBy());
+        rFleetVo.setCreateTime(fleet.getCreateTime());
+        rFleetVo.setUpdateBy(fleet.getUpdateBy());
+        rFleetVo.setUpdateTime(fleet.getUpdateTime());
+        rFleetVo.setDelFlag(fleet.getDelFlag());
+        rFleetVo.setEntId(fleet.getEntId());
+        rFleetVo.setCaptainId(fleet.getCaptainId());
+        rFleetVo.setName(fleet.getName());
+        rFleetVo.setContacts(fleet.getContacts());
+        rFleetVo.setPhone(fleet.getPhone());
+
+
+        return rFleetVo;
+    }
+
 
 }

+ 25 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/QueryFleetReq.java

@@ -0,0 +1,25 @@
+package com.sckw.fleet.model.request;
+
+import com.sckw.core.web.request.PageReq;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 查询车辆请求参数
+ * @create :2025-11-12 16:11:00
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class QueryFleetReq extends PageReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 6703980100931396505L;
+    /**
+     * 车队id
+     */
+    private String fleetId;
+}

+ 5 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/TruckInfoReq.java

@@ -40,4 +40,9 @@ public class TruckInfoReq extends PageReq implements Serializable {
      */
     @Schema(description = "结束时间")
     private String endTime;
+    /**
+     * 车辆业务状态(0空闲、1任务)
+     */
+    @Schema(description = "车辆业务状态(0空闲、1任务)")
+    private String businessStatus;
 }

+ 125 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/QueryFleetResp.java

@@ -0,0 +1,125 @@
+package com.sckw.fleet.model.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 查询车辆请求参数
+ * @create :2025-11-12 16:11:00
+ */
+
+@Data
+public class QueryFleetResp  implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 6703980100931396505L;
+    /**
+     * 主键id
+     */
+    @Schema(description = "主键id")
+    private Long id;
+
+    /**
+     * 企业id
+     */
+    @Schema(description = "企业id")
+    private Long entId;
+
+    /**
+     * 车队长id
+     */
+    @Schema(description = "车队长id")
+    private Long captainId;
+    /**
+     * 车队长名称
+     */
+    @Schema(description = "车队长名称")
+    private String captainName;
+
+    /**
+     * 车队名称
+     */
+    @Schema(description = "车队名称")
+    private String name;
+
+    /**
+     * 车队联系人
+     */
+    @Schema(description = "车队联系人")
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    @Schema(description = "联系电话")
+    private String phone;
+
+    /**
+     * 创建人
+     */
+    @Schema(description = "创建人")
+    private String createBy;
+
+    /**
+     * 创建人
+     */
+    @Schema(description = "创建人")
+    private String createByName;
+
+    /**
+     * 创建时间
+     */
+    @Schema(description = "创建时间")
+    private String createTime;
+
+
+   /**
+     * 更新时间
+     */
+    @Schema(description = "更新时间")
+    private String updateTime;
+
+    /**
+     * 备注
+     */
+    @Schema(description = "备注")
+    private String remark;
+    /**
+     * 车队车辆数量
+     */
+    @Schema(description = "车队车辆数量")
+    private Integer truckNum;
+
+    /**
+     * 车辆信息
+     */
+    @Schema(description = "车辆信息")
+    private List<TruckInfo> truckInfo;
+    @Data
+    public static class TruckInfo implements Serializable{
+        @Serial
+        private static final long serialVersionUID = -1243328886609432583L;
+        /**
+         * 车辆id
+         */
+        @Schema(description = "车辆id")
+        private Long truckId;
+        /**
+         * 车牌号
+         */
+        @Schema(description = "车牌号")
+        private String truckNo;
+        /**
+         * 车辆轴数
+         */
+        @Schema(description = "车辆轴数")
+        private String axleNum;
+    }
+}

+ 7 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetRepository.java

@@ -63,4 +63,11 @@ public class KwfFleetRepository extends ServiceImpl<KwfFleetMapper, KwfFleet> {
                 .orderByDesc(BaseModel::getId)
                 .last("limit 1"));
     }
+
+    public IPage<KwfFleet> queryByPage(String fleetId, int pageNum, int pageSize) {
+        return page(new Page<>(pageNum, pageSize),
+                Wrappers.<KwfFleet>lambdaQuery()
+                        .eq(BaseModel::getDelFlag,0)
+                        .eq(StringUtils.isNotBlank(fleetId),KwfFleet::getId, fleetId));
+    }
 }

+ 2 - 2
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetTruckRepository.java

@@ -17,11 +17,11 @@ import java.util.Set;
  */
 @Repository
 public class KwfFleetTruckRepository extends ServiceImpl<KwfFleetTruckMapper, KwfFleetTruck> {
-    public List<KwfFleetTruck> queryByFleetIds(Set<Long> truckIds) {
+    public List<KwfFleetTruck> queryByFleetIds(Set<Long> fleetIds) {
 
         return list(Wrappers.<KwfFleetTruck>lambdaQuery()
                 .eq(BaseModel::getDelFlag,0)
-                .in(KwfFleetTruck::getFleetId,truckIds));
+                .in(KwfFleetTruck::getFleetId,fleetIds));
     }
 
     public List<KwfFleetTruck> queryByTruckId(Long truckId) {

+ 20 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckRepository.java

@@ -84,4 +84,24 @@ public class KwfTruckRepository extends ServiceImpl<KwfTruckMapper, KwfTruck> {
                 .eq(BaseModel::getDelFlag,0)
                 .in(KwfTruck::getId, truckIds));
     }
+
+    public IPage<KwfTruck> queryByPage(int pageNum, int pageSize, Long entId,Integer businessStatus, String truckNo) {
+        return page(new Page<>(pageNum, pageSize), Wrappers.<KwfTruck>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0)
+                .eq(Objects.nonNull(entId),KwfTruck::getEntId, entId)
+                .like(StringUtils.isNotBlank(truckNo),KwfTruck::getTruckNo, truckNo)
+                .eq(Objects.nonNull(businessStatus),KwfTruck::getBusinessStatus, businessStatus)
+                .orderByDesc(KwfTruck::getId));
+    }
+
+    public KwfTruck queryByTruckId(Long truckId) {
+        return getOne(Wrappers.<KwfTruck>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0)
+                .eq(KwfTruck::getId, truckId)
+                .last("limit 1"));
+    }
+
+    public Boolean updateTruck(KwfTruck updateTruck) {
+       return update(updateTruck, Wrappers.<KwfTruck>lambdaQuery().eq(KwfTruck::getId, updateTruck.getId()));
+    }
 }

+ 107 - 4
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfFleetService.java

@@ -1,27 +1,44 @@
 package com.sckw.fleet.service;
 
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import com.sckw.core.exception.SystemException;
+import com.sckw.core.model.base.BaseModel;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.DateUtils;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.fleet.dao.KwfFleetMapper;
 import com.sckw.fleet.model.KwfFleet;
+import com.sckw.fleet.model.KwfFleetTruck;
+import com.sckw.fleet.model.KwfTruck;
 import com.sckw.fleet.model.dto.KwfFleetDto;
+import com.sckw.fleet.model.request.QueryFleetReq;
 import com.sckw.fleet.model.vo.KwfFleetTruckCountVo;
 import com.sckw.fleet.model.vo.KwfFleetVo;
+import com.sckw.fleet.model.vo.QueryFleetResp;
+import com.sckw.fleet.repository.KwfFleetRepository;
+import com.sckw.fleet.repository.KwfFleetTruckRepository;
+import com.sckw.fleet.repository.KwfTruckRepository;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+
+import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -29,13 +46,19 @@ import java.util.stream.Collectors;
  * @desc 车队
  * @date 2023/7/6 0006
  */
+@Slf4j
 @Service
+@RequiredArgsConstructor
 public class KwfFleetService {
 
     @Autowired
     KwfFleetMapper fleetDao;
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private RemoteSystemService remoteSystemService;
+    private final KwfFleetRepository kwfFleetRepository;
+    private final KwfFleetTruckRepository kwfFleetTruckRepository;
+    @Autowired
+    private KwfTruckRepository kwfTruckRepository;
 
     /**
      * @param key 主键id
@@ -184,4 +207,84 @@ public class KwfFleetService {
         result.put("truckCounts", truckCounts);
         return result;
     }
+
+    public PageDataResult<QueryFleetResp> findFleetByPage(QueryFleetReq req) {
+        log.info("查询车队列表请求:{}", JSON.toJSONString( req));
+        IPage<KwfFleet> page = kwfFleetRepository.queryByPage(req.getFleetId(),req.getPageNum(), req.getPageSize());
+        List<KwfFleet> records = page.getRecords();
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(records)){
+            return PageDataResult.empty(req.getPageNum(), req.getPageSize());
+        }
+        Set<Long> userIds = Sets.newHashSet();
+        Set<Long> fleetIds = Sets.newHashSet();
+        records.forEach(item -> {
+            userIds.add(item.getCreateBy());
+            userIds.add(item.getCaptainId());
+        });
+        //查询用户信息
+        Map<Long, UserCacheResDto> userIdAndUserCacheResDtoMap = remoteSystemService.queryUserCacheMapByIds(new ArrayList<>(userIds));
+        //查询车辆
+        List<KwfFleetTruck> kwfFleetTrucks = kwfFleetTruckRepository.queryByFleetIds(fleetIds);
+        Map<Long, List<KwfFleetTruck>> fleetIdAndKwfFleetTruckList = Maps.newHashMap();
+        Set<Long> truckIds = Sets.newHashSet();
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwfFleetTrucks)){
+            fleetIdAndKwfFleetTruckList =
+                    kwfFleetTrucks.stream().collect(Collectors.groupingBy(KwfFleetTruck::getFleetId));
+            truckIds = kwfFleetTrucks.stream().map(KwfFleetTruck::getTruckId).collect(Collectors.toSet());
+        }
+        //查询车辆信息
+        Map<Long, KwfTruck> truckIdAndTruckMap = Maps.newHashMap();
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(truckIds)){
+            List<KwfTruck> trucks = kwfTruckRepository.queryByTruckIds(truckIds);
+            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(trucks)){
+                truckIdAndTruckMap = trucks.stream()
+                        .collect(Collectors.toMap(BaseModel::getId,
+                        Function.identity(), (e1, e2) -> e1));
+            }
+        }
+
+        Map<Long, List<KwfFleetTruck>> finalFleetIdAndKwfFleetTruckList = fleetIdAndKwfFleetTruckList;
+        List<QueryFleetResp> fleets = records.stream()
+                .map(item -> getQueryFleetResp(item, userIdAndUserCacheResDtoMap, finalFleetIdAndKwfFleetTruckList,truckIdAndTruckMap))
+                .toList();
+        return PageDataResult.of(page, fleets);
+    }
+
+    @NotNull
+    private static QueryFleetResp getQueryFleetResp(KwfFleet item,
+                                                    Map<Long, UserCacheResDto> userIdAndUserCacheResDtoMap, Map<Long, List<KwfFleetTruck>> finalFleetIdAndKwfFleetTruckList,Map<Long, KwfTruck> truckIdAndTruckMap) {
+        QueryFleetResp fleet = new QueryFleetResp();
+        fleet.setId(item.getId());
+        fleet.setEntId(item.getEntId());
+        fleet.setCaptainId(item.getCaptainId());
+        UserCacheResDto userCacheResDto = userIdAndUserCacheResDtoMap.getOrDefault(item.getCaptainId(), new UserCacheResDto());
+        fleet.setCaptainName(userCacheResDto.getName());
+        fleet.setName(item.getName());
+        fleet.setContacts(item.getContacts());
+        fleet.setPhone(item.getPhone());
+        fleet.setCreateBy(String.valueOf(item.getCreateBy()));
+        UserCacheResDto createUser = userIdAndUserCacheResDtoMap.getOrDefault(item.getCreateBy(),
+                new UserCacheResDto());
+        fleet.setCreateByName(createUser.getName());
+        fleet.setCreateTime(DateUtils.format(item.getCreateTime(),DateUtils.DATE_TIME_PATTERN));
+        fleet.setUpdateTime(DateUtils.format(item.getUpdateTime(),DateUtils.DATE_TIME_PATTERN));
+        fleet.setRemark(item.getRemark());
+        List<KwfFleetTruck> trucks = finalFleetIdAndKwfFleetTruckList.getOrDefault(item.getId(), new ArrayList<>());
+        List<QueryFleetResp.TruckInfo> truckInfos = trucks.stream()
+                .map(x -> getTruckInfo(truckIdAndTruckMap, x))
+                .collect(Collectors.toList());
+        fleet.setTruckInfo(truckInfos);
+        fleet.setTruckNum(trucks.size());
+
+        return fleet;
+    }
+
+    private static QueryFleetResp.TruckInfo getTruckInfo(Map<Long, KwfTruck> truckIdAndTruckMap, KwfFleetTruck x) {
+        QueryFleetResp.TruckInfo truckInfo = new QueryFleetResp.TruckInfo();
+        KwfTruck truck = truckIdAndTruckMap.getOrDefault(x.getTruckId(), new KwfTruck());
+        truckInfo.setTruckId(truck.getId());
+        truckInfo.setTruckNo(truck.getTruckNo());
+        truckInfo.setAxleNum(truck.getCarAxis());
+        return truckInfo;
+    }
 }

+ 27 - 3
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java

@@ -12,6 +12,7 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.common.enums.enums.FileEnum;
+import com.sckw.core.exception.BusinessException;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.base.BaseModel;
 import com.sckw.core.model.constant.Global;
@@ -33,9 +34,7 @@ import com.sckw.fleet.config.UrlConfigProperties;
 import com.sckw.fleet.dao.*;
 import com.sckw.fleet.model.*;
 import com.sckw.fleet.model.dto.*;
-import com.sckw.fleet.model.request.CapacityStatusReq;
-import com.sckw.fleet.model.request.TruckInfoReq;
-import com.sckw.fleet.model.request.TruckNoReq;
+import com.sckw.fleet.model.request.*;
 import com.sckw.fleet.model.vo.*;
 import com.sckw.fleet.repository.*;
 import com.sckw.system.api.RemoteSystemService;
@@ -1809,4 +1808,29 @@ public class KwfTruckService {
         }
         return truckVoList;
     }
+
+
+    public PageDataResult<KwfTruckDetailVo> queryPageCapacityTruck(TruckInfoReq req) {
+         log.info("查询添加运力车辆请求参数:{}",JSON.toJSONString( req));
+         if (Objects.isNull(req.getEntId())){
+             throw new BusinessException("企业id不能为空");
+         }
+         Integer businessStatus = org.apache.commons.lang3.StringUtils.isBlank(req.getBusinessStatus()) ? null :
+                 Integer.parseInt(req.getBusinessStatus());
+        IPage<KwfTruck> kwfTruckIPage = kwfTruckRepository.queryByPage(req.getPageNum(), req.getPageSize(), req.getEntId(), businessStatus,
+                req.getTruckNo());
+        List<KwfTruck> records = kwfTruckIPage.getRecords();
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty( records)){
+            return PageDataResult.empty(req.getPageNum(),req.getPageSize());
+        }
+        List<KwfTruckDetailVo> truckInfoVos = records.stream().map(truck -> {
+            KwfTruckDetailVo truckInfoVo = new KwfTruckDetailVo();
+            truckInfoVo.setId(truck.getId());
+            truckInfoVo.setTruckNo(truck.getTruckNo());
+            truckInfoVo.setBusinessStatus(truck.getBusinessStatus());
+            truckInfoVo.setCarAxis(truck.getCarAxis());
+            return truckInfoVo;
+        }).collect(Collectors.toList());
+        return PageDataResult.of(kwfTruckIPage, truckInfoVos);
+    }
 }

+ 1 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java

@@ -1556,7 +1556,7 @@ public class KwsEnterpriseService {
     public EntInfoResp queryEntInfo(EntInfoReq req) {
         //如果是发起方是采购方,采购方只能是自己和下级,供应方可以选所有入住的供应企业
         // 如果发起方是供应方,则供应方是能自己和下级,采购方可以是所有入住企业
-        if (req.getLoginEntType().contains(req.getLoginEntType())){
+        if (req.getEntType().contains(req.getLoginEntType())){
             //登录客户的企业类型和查询的类型是一直的说明只能查询自己和自己的下级
             //发起方的公司信息
             return getEntInfoResp(req);

+ 32 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtLogisticsOrderController.java

@@ -1,7 +1,11 @@
 package com.sckw.transport.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.common.collect.Sets;
 import com.sckw.core.annotation.RepeatSubmit;
+import com.sckw.core.exception.BusinessException;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.HttpResult;
@@ -12,11 +16,11 @@ import com.sckw.transport.model.dto.LogisticsOrderSubcontractDto;
 import com.sckw.transport.model.param.AddLogisticsOrderParam;
 import com.sckw.transport.model.param.LogisticsOrderResp;
 import com.sckw.transport.model.param.QueryLogisticsOrderReq;
-import com.sckw.transport.model.vo.LogisticsOrderDetailResp;
-import com.sckw.transport.model.vo.LogisticsOrderDispatchResp;
-import com.sckw.transport.model.vo.LogisticsOrderReq;
+import com.sckw.transport.model.vo.*;
 import com.sckw.transport.service.KwtLogisticsConsignmentService;
 import com.sckw.transport.service.KwtTransportCommonService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -25,6 +29,9 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @author lfdc
@@ -36,6 +43,7 @@ import java.util.List;
 @RestController
 @RequiredArgsConstructor
 @RequestMapping(value = "/kwtLogisticsOrder")
+@Tag(name = "物流订单相关接口")
 public class KwtLogisticsOrderController {
 
     @Autowired
@@ -127,6 +135,7 @@ public class KwtLogisticsOrderController {
      * 分页查询物流订单
      */
     @PostMapping(value = "/queryLogisticsOrderByPage")
+    @Operation(summary = "分页查询物流订单", description = "分页查询物流订单")
     public BaseResult<PageDataResult<LogisticsOrderResp>> queryLogisticsOrderByPage(@RequestBody QueryLogisticsOrderReq req) {
         return BaseResult.success(logisticsConsignmentService.queryLogisticsOrderByPage( req));
     }
@@ -146,4 +155,24 @@ public class KwtLogisticsOrderController {
         return BaseResult.success(logisticsConsignmentService.getLogisticsOrderDispatch(req));
     }
 
+    /**
+     * 分页查询已派运力
+     */
+    @PostMapping("/pageCapacity")
+    @Operation(summary = "分页查询已派运力", description = "分页查询已派运力")
+    public BaseResult<PageDataResult<CapacityVo>> pageCapacity(@RequestBody @Valid CapacityReq req) {
+        return BaseResult.success(logisticsConsignmentService.pageCapacity(req));
+    }
+
+
+    /**
+     * 关闭启用已派运力
+     */
+
+    @PostMapping("/closeCapacity")
+    @Operation(summary = "关闭启用已派运力", description = "关闭启用已派运力")
+    public BaseResult<Boolean> closeCapacity(@RequestBody @Valid DeleteCapacityReq req) {
+        return BaseResult.success(logisticsConsignmentService.closeCapacity(req));
+    }
+
 }

+ 5 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/QueryLogisticsOrderReq.java

@@ -19,6 +19,11 @@ import java.io.Serializable;
 public class QueryLogisticsOrderReq extends PageReq implements Serializable {
     @Serial
     private static final long serialVersionUID = -1959135761190054856L;
+    /**
+     * 物流合同id
+     */
+    @Schema(description = "物流合同id")
+    private String contractId;
     /**
      * 订单编号
      */

+ 41 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/CapacityReq.java

@@ -0,0 +1,41 @@
+package com.sckw.transport.model.vo;
+
+import com.sckw.core.web.request.PageReq;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 运力查询请求参数
+ * @create :2025-11-13 08:58:00
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class CapacityReq extends PageReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -8135595203081724425L;
+    /**
+     * 车牌号
+     */
+    @Schema(description = "车牌号")
+    private String truckNo;
+    /**
+     * 运单id
+     */
+    @Schema(description = "运单id")
+    @NotBlank(message = "运单id不能为空")
+    private String logOrderId;
+    /**
+     * 企业id
+     */
+    @Schema(description = "企业id")
+    @NotBlank(message = "企业id不能为空")
+    private String entId;
+}

+ 69 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/CapacityVo.java

@@ -0,0 +1,69 @@
+package com.sckw.transport.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description :
+ * @create :2025-11-13 08:59:00
+ */
+@Data
+public class CapacityVo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -4852346389057003547L;
+    /**
+     * 车辆id
+     */
+    @Schema(description = "车辆id")
+    private String truckId;
+    /**
+     * 车牌号
+     */
+    @Schema(description = "车牌号")
+    private String truckNo;
+    /**
+     * 车辆轴数
+     */
+    @Schema(description = "车辆轴数")
+    private String carAxis;
+    /**
+     * 完成车次
+     */
+    @Schema(description = "完成车次")
+    private String finishWaybillCount;
+    /**
+     * 累计装货量
+     */
+    @Schema(description = "累计装货量")
+    private String loadAmount;
+    /**
+     * 累计卸货量
+     */
+    @Schema(description = "累计卸货量")
+    private String unloadAmount;
+    /**
+     * 状态
+     */
+    @Schema(description = "状态")
+    private String status;
+    /**
+     * 状态描述
+     */
+    @Schema(description = "状态描述")
+    private String statusDesc;
+    /**
+     * 派车状态 0正常、1关闭
+     */
+    @Schema(description = "派车状态 0正常、1关闭")
+    private String dispatchStatus;
+    /**
+     * 派车状态描述
+     */
+    @Schema(description = "派车状态描述")
+    private String dispatchStatusDesc;
+}

+ 40 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/DeleteCapacityReq.java

@@ -0,0 +1,40 @@
+package com.sckw.transport.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description :
+ * @create :2025-11-13 09:40:00
+ */
+@Data
+public class DeleteCapacityReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -7642942717551088599L;
+    /**
+     * 车辆id
+     */
+    @NotBlank(message = "车辆id不能为空")
+    @Schema(description = "车辆id")
+    private String truckId;
+
+    /**
+     * 物流订单id
+     */
+    @NotBlank(message = "物流订单id")
+    @Schema(description = "物流订单id")
+    private String logisticsOrderId;
+    /**
+     * 派车状态(0-启用,1-关闭)
+     */
+    @NotBlank(message = "派车状态不能为空")
+    @Schema(description = "派车状态(0-启用,1-关闭)")
+    private String status;
+
+}

+ 44 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderCirculateRepository.java

@@ -0,0 +1,44 @@
+package com.sckw.transport.repository;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.transport.dao.KwtLogisticsOrderCirculateMapper;
+import com.sckw.transport.model.KwtLogisticsOrderCirculate;
+import org.springframework.stereotype.Repository;
+
+import java.util.Set;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 物流订单车辆关系
+ * @create :2025-11-13 11:31:00
+ */
+@Repository
+public class KwtLogisticsOrderCirculateRepository extends ServiceImpl<KwtLogisticsOrderCirculateMapper, KwtLogisticsOrderCirculate> {
+    public IPage<KwtLogisticsOrderCirculate> queryByPage(int pageNum, int pageSize,String truckNo, Long entId) {
+        return page(new Page<>(pageNum, pageSize), Wrappers.<KwtLogisticsOrderCirculate>lambdaQuery()
+                .like(StringUtils.isNotBlank(truckNo),KwtLogisticsOrderCirculate::getTruckNo, truckNo)
+                .eq(KwtLogisticsOrderCirculate::getDelFlag,0)
+                .eq(KwtLogisticsOrderCirculate::getEntId, entId)
+                .orderByDesc(KwtLogisticsOrderCirculate::getCreateTime)
+                .orderByDesc(KwtLogisticsOrderCirculate::getId));
+    }
+
+    public KwtLogisticsOrderCirculate findOneByLogOrderIdAndTruckId(Long logOrderId, Long truckId) {
+        return getOne(Wrappers.<KwtLogisticsOrderCirculate>lambdaQuery().eq(KwtLogisticsOrderCirculate::getDelFlag,0)
+                .eq(KwtLogisticsOrderCirculate::getLOrderId, logOrderId)
+                .eq(KwtLogisticsOrderCirculate::getTruckId, truckId)
+                .last("limit 1")
+        );
+    }
+
+    public Boolean updateCirculate(KwtLogisticsOrderCirculate updateCirCulate) {
+        return update(updateCirCulate,
+                Wrappers.<KwtLogisticsOrderCirculate>lambdaUpdate()
+                        .eq(KwtLogisticsOrderCirculate::getId, updateCirCulate.getId()));
+    }
+}

+ 7 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderContractRepository.java

@@ -6,6 +6,7 @@ import com.sckw.transport.dao.KwtLogisticsOrderContractMapper;
 import com.sckw.transport.model.KwtLogisticsOrderContract;
 import org.springframework.stereotype.Repository;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Set;
 
@@ -30,4 +31,10 @@ public class KwtLogisticsOrderContractRepository extends ServiceImpl<KwtLogistic
                 .orderByDesc(KwtLogisticsOrderContract::getId)
                 .last("limit 1"));
     }
+
+    public List<KwtLogisticsOrderContract> queryByContractId(Long contractId ) {
+        return list(Wrappers.<KwtLogisticsOrderContract>lambdaQuery()
+                .eq(KwtLogisticsOrderContract::getDelFlag,0)
+                .eq(KwtLogisticsOrderContract::getContractId,contractId));
+    }
 }

+ 9 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java

@@ -129,4 +129,13 @@ public class KwtWaybillOrderRepository extends ServiceImpl<KwtWaybillOrderMapper
                 .in(KwtWaybillOrder::getId, wayBillOrderIds)
         );
     }
+
+    public List<KwtWaybillOrder> queryByBillOrderIdsAndEntId(Set<Long> billOrderIds, Long entId) {
+        return list(Wrappers.<KwtWaybillOrder>lambdaQuery()
+                .eq(KwtWaybillOrder::getDelFlag,0)
+                .eq(KwtWaybillOrder::getEntId,entId)
+                .in(KwtWaybillOrder::getId, billOrderIds)
+                .orderByDesc(KwtWaybillOrder::getCreateTime)
+        );
+    }
 }

+ 136 - 25
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -5,7 +5,6 @@ import cn.hutool.core.util.ArrayUtil;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.alibaba.nacos.shaded.io.grpc.StatusException;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -33,6 +32,7 @@ import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.excel.utils.DateUtil;
 import com.sckw.excel.utils.ValidUtil;
 import com.sckw.fleet.api.RemoteFleetService;
+import com.sckw.fleet.api.model.vo.RFleetVo;
 import com.sckw.fleet.api.model.vo.RTruckVo;
 import com.sckw.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.model.SckwLogisticsOrder;
@@ -164,6 +164,7 @@ public class KwtLogisticsConsignmentService {
     private final KwtLogisticsOrderContractRepository logisticsOrderContractRepository;
     private final KwtWaybillOrderSubtaskRepository logisticsOrderSubtaskRepository;
     private final KwtWaybillOrderRepository waybillOrderRepository;
+    private final KwtLogisticsOrderCirculateRepository logisticsOrderCirculateRepository;
     /**
      * 采购订单-物流托运生成托运订单
      *
@@ -2325,21 +2326,34 @@ public class KwtLogisticsConsignmentService {
     @NotNull
     private Set<Long> getLogOrderIds(QueryLogisticsOrderReq req, Set<Long> entList) {
         Set<Long> logOrderIds = Sets.newHashSet();
-        List<KwtLogisticsOrderGoods>  logisticsOrderGoodsList=
-                logisticsOrderGoodsRepository.queryByGoodsName(req.getGoodsName());
-        if(org.springframework.util.CollectionUtils.isEmpty(logisticsOrderGoodsList)){
-            //获取物流订单
-            Set<Long> logOrderFormGoodsIds =
-                    logisticsOrderGoodsList.stream().map(KwtLogisticsOrderGoods::getLOrderId).collect(Collectors.toSet());
-            logOrderIds.addAll(logOrderFormGoodsIds);
-        }
-
-        List<KwtLogisticsOrderUnit> logOrderUnits =logisticsOrderUnitRepository.queryByEntIds(entList);
-        if(org.springframework.util.CollectionUtils.isEmpty(logOrderUnits)){
-            //获取物流订单
-            Set<Long> logOrderFormUnitIds =
-                    logOrderUnits.stream().map(KwtLogisticsOrderUnit::getLOrderId).collect(Collectors.toSet());
-            logOrderIds.addAll(logOrderFormUnitIds);
+        if (StringUtils.isNotBlank(req.getContractId())){
+            List<KwtLogisticsOrderContract> kwtLogisticsOrderContracts = logisticsOrderContractRepository.queryByContractId(Long.parseLong(req.getContractId()));
+            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwtLogisticsOrderContracts)){
+                logOrderIds.addAll(kwtLogisticsOrderContracts.stream()
+                        .map(KwtLogisticsOrderContract::getLOrderId)
+                        .collect(Collectors.toSet()));
+            }
+        }
+
+        if (StringUtils.isNotBlank(req.getGoodsName())){
+            List<KwtLogisticsOrderGoods>  logisticsOrderGoodsList=
+                    logisticsOrderGoodsRepository.queryByGoodsName(req.getGoodsName());
+            if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(logisticsOrderGoodsList)){
+                //获取物流订单
+                Set<Long> logOrderFormGoodsIds =
+                        logisticsOrderGoodsList.stream().map(KwtLogisticsOrderGoods::getLOrderId).collect(Collectors.toSet());
+                logOrderIds.addAll(logOrderFormGoodsIds);
+            }
+        }
+
+        if (CollectionUtils.isNotEmpty(entList)){
+            List<KwtLogisticsOrderUnit> logOrderUnits =logisticsOrderUnitRepository.queryByEntIds(entList);
+            if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(logOrderUnits)){
+                //获取物流订单
+                Set<Long> logOrderFormUnitIds =
+                        logOrderUnits.stream().map(KwtLogisticsOrderUnit::getLOrderId).collect(Collectors.toSet());
+                logOrderIds.addAll(logOrderFormUnitIds);
+            }
         }
         return logOrderIds;
     }
@@ -2348,15 +2362,16 @@ public class KwtLogisticsConsignmentService {
     private Set<Long> getAllEnt(QueryLogisticsOrderReq req) {
         Set<Long> allEnt = Sets.newHashSet();
         //根据企业类型查询企业
-        if(StringUtils.isNotBlank(req.getEntId())){
-            allEnt.add(Long.parseLong(req.getEntId()));
-            EntCacheResDto entCacheResDto = remoteSystemService.queryEntTreeById(Long.parseLong(req.getEntId()));
-            if (Objects.nonNull(entCacheResDto)) {
-                EntCacheResDto entCacheResDto1 = remoteSystemService.queryEntTreeById(entCacheResDto.getId());
-                List<EntCacheResDto> child = entCacheResDto1.getChild();
-                if (CollectionUtils.isNotEmpty(child)) {
-                    allEnt.addAll(child.stream().filter(x->x.getEntTypes().contains(req.getEntType())).map(EntCacheResDto::getId).toList());
-                }
+        if (StringUtils.isBlank(req.getEntId())){
+            return allEnt;
+        }
+        allEnt.add(Long.parseLong(req.getEntId()));
+        EntCacheResDto entCacheResDto = remoteSystemService.queryEntTreeById(Long.parseLong(req.getEntId()));
+        if (Objects.nonNull(entCacheResDto)) {
+            EntCacheResDto entCacheResDto1 = remoteSystemService.queryEntTreeById(entCacheResDto.getId());
+            List<EntCacheResDto> child = entCacheResDto1.getChild();
+            if (CollectionUtils.isNotEmpty(child)) {
+                allEnt.addAll(child.stream().filter(x->x.getEntTypes().contains(req.getEntType())).map(EntCacheResDto::getId).toList());
             }
         }
         return allEnt;
@@ -2649,4 +2664,100 @@ public class KwtLogisticsConsignmentService {
         logisticsOrderDispatchResp.setCloseOrderDesc(CarStatusEnum.getName(truckVo.getStatus()));
         return logisticsOrderDispatchResp;
     }
+
+    public PageDataResult<CapacityVo> pageCapacity(CapacityReq req) {
+        log.info("查询车辆列表请求:{}", JSON.toJSONString( req));
+        Long logOrderId = Long.parseLong(req.getLogOrderId());
+        Long entId = Long.parseLong(req.getEntId());
+        IPage<KwtLogisticsOrderCirculate> page = logisticsOrderCirculateRepository.queryByPage(req.getPageNum(),
+                req.getPageSize(), req.getTruckNo(),Long.parseLong(req.getEntId()));
+        List<KwtLogisticsOrderCirculate> records = page.getRecords();
+
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty( records)){
+            return PageDataResult.empty(req.getPageNum(), req.getPageSize());
+        }
+
+        Set<Long> truckIds = records.stream()
+                .map(KwtLogisticsOrderCirculate::getTruckId)
+                .collect(Collectors.toSet());
+        List<RTruckVo> truckByTruckIds = remoteFleetService.findTruckByTruckIds(truckIds);
+        Map<Long, RTruckVo> truckIdAndTruckMap = Maps.newHashMap();
+        if (CollectionUtils.isNotEmpty(truckByTruckIds)){
+            truckIdAndTruckMap = truckByTruckIds.stream()
+                    .collect(Collectors.toMap(RTruckVo::getId, Function.identity(),(k1, k2)->k1));
+        }
+        //查询子运单信息
+        List<KwtWaybillOrderSubtask> waybillOrderSubtasks = logisticsOrderSubtaskRepository.queryByLogId(logOrderId);
+        Set<Long> billOrderIds = Sets.newHashSet();
+        if (CollectionUtils.isNotEmpty(waybillOrderSubtasks)){
+            //获取主运单id
+            billOrderIds = waybillOrderSubtasks.stream()
+                    .map(KwtWaybillOrderSubtask::getWOrderId)
+                    .collect(Collectors.toSet());
+        }
+        //查询运单信息
+        Map<Long, List<KwtWaybillOrder>> billOrderIdAndWaybillOrderMap = Maps.newHashMap();
+        if (CollectionUtils.isNotEmpty(billOrderIds)){
+            List<KwtWaybillOrder> waybillOrders = waybillOrderRepository.queryByBillOrderIdsAndEntId(billOrderIds,
+                    entId);
+            if (CollectionUtils.isNotEmpty(waybillOrders)){
+                billOrderIdAndWaybillOrderMap = waybillOrders.stream().filter(x->Objects.equals(x.getStatus(),
+                                CarWaybillEnum.APPROVAL_PASS.getCode()))
+                        .collect(Collectors.groupingBy(KwtWaybillOrder::getTruckId));
+            }
+        }
+
+
+        Map<Long, RTruckVo> finalTruckIdAndTruckMap = truckIdAndTruckMap;
+        Map<Long, List<KwtWaybillOrder>> finalBillOrderIdAndWaybillOrderMap = billOrderIdAndWaybillOrderMap;
+        List<CapacityVo> capacityVos = records.stream()
+                .map(t -> getCapacityVo(t, finalTruckIdAndTruckMap, finalBillOrderIdAndWaybillOrderMap))
+                .collect(Collectors.toList());
+        return PageDataResult.of(page, capacityVos);
+
+    }
+
+    @NotNull
+    private static CapacityVo getCapacityVo(KwtLogisticsOrderCirculate t, Map<Long, RTruckVo> finalTruckIdAndTruckMap, Map<Long, List<KwtWaybillOrder>> finalBillOrderIdAndWaybillOrderMap) {
+        CapacityVo capacityVo = new CapacityVo();
+        capacityVo.setTruckId(String.valueOf(t.getTruckId()));
+        capacityVo.setTruckNo(t.getTruckNo());
+        RTruckVo truckVo = finalTruckIdAndTruckMap.getOrDefault(t.getTruckId(), new RTruckVo());
+        capacityVo.setCarAxis(truckVo.getCarAxis());
+        List<KwtWaybillOrder> waybillOrders = finalBillOrderIdAndWaybillOrderMap.get(t.getTruckId());
+        capacityVo.setFinishWaybillCount(String.valueOf(waybillOrders.size()));
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(waybillOrders)){
+            BigDecimal loadAmount = waybillOrders.stream()
+                    .filter(x -> Objects.nonNull(x.getLoadAmount()))
+                    .map(KwtWaybillOrder::getLoadAmount)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal unloadAmount = waybillOrders.stream()
+                    .filter(x -> Objects.nonNull(x.getUnloadAmount()))
+                    .map(KwtWaybillOrder::getUnloadAmount)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            capacityVo.setLoadAmount(loadAmount.setScale(2,RoundingMode.HALF_UP).toPlainString());
+            capacityVo.setUnloadAmount(unloadAmount.setScale(2,RoundingMode.HALF_UP).toPlainString());
+            capacityVo.setStatus(String.valueOf(waybillOrders.get(0).getStatus()));
+            capacityVo.setStatusDesc(CarWaybillEnum.getName(waybillOrders.get(0).getStatus()));
+        }
+
+        capacityVo.setDispatchStatus(String.valueOf(t.getStatus()));
+        capacityVo.setDispatchStatusDesc(Objects.equals(t.getStatus(),0) ? "启用" : "关闭");
+        return capacityVo;
+    }
+
+
+    public Boolean closeCapacity(@Valid DeleteCapacityReq req) {
+        log.info("关闭启用已派运力请求参数:{}", JSON.toJSONString(req));
+        KwtLogisticsOrderCirculate logisticsOrderCirculate =
+                logisticsOrderCirculateRepository.findOneByLogOrderIdAndTruckId(Long.parseLong(req.getLogisticsOrderId()),
+                        Long.parseLong(req.getTruckId()));
+        if (Objects.isNull(logisticsOrderCirculate)) {
+            throw new BusinessException("未找到该运力信息");
+        }
+        KwtLogisticsOrderCirculate updateCirCulate = new KwtLogisticsOrderCirculate();
+        updateCirCulate.setId(logisticsOrderCirculate.getId());
+        updateCirCulate.setStatus(Integer.parseInt(req.getStatus()));
+        return logisticsOrderCirculateRepository.updateCirculate(updateCirCulate);
+    }
 }

+ 12 - 15
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

@@ -10,7 +10,6 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
-import com.sckw.core.model.base.BaseModel;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.constant.UrlConstants;
@@ -22,7 +21,6 @@ import com.sckw.core.utils.*;
 import com.sckw.core.web.constant.CommonConstants;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
-import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.excel.utils.DateUtil;
@@ -2949,23 +2947,21 @@ public class KwtWaybillOrderV1Service {
             return PageDataResult.empty(req.getPageNum(), req.getPageSize());
         }
         //运单id集合
-        Set<Long> wayBillOrderIds = records.stream()
-                .map(KwtWaybillOrderSubtask::getWOrderId)
-                .collect(Collectors.toSet());
+        Set<Long> wayBillOrderIds = Sets.newHashSet();
         //物流订单id集合
-        List<Long> logicsOrderIds = records.stream()
-                .map(KwtWaybillOrderSubtask::getLOrderId)
-                .distinct()
-                .collect(Collectors.toList());
-
+        Set<Long> logicsOrderIds = Sets.newHashSet();
         //子运单id集合
-        Set<Long> subWayBillOrderIds = records.stream()
-                .map(BaseModel::getId)
-                .collect(Collectors.toSet());
+        Set<Long> subWayBillOrderIds = Sets.newHashSet();
+        records.forEach(x->{
+            wayBillOrderIds.add(x.getWOrderId());
+            logicsOrderIds.add(x.getLOrderId());
+            subWayBillOrderIds.add(x.getId());
+        });
+
         //查询主运单信息
         Map<Long, KwtWaybillOrder> waybillOrderIdAndBillOrderMap = getLongKwtWaybillOrderMap(wayBillOrderIds);
         //查询承运托运单位信息
-        Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap = getStringKwtLogisticsOrderUnitMap(logicsOrderIds);
+        Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap = getStringKwtLogisticsOrderUnitMap(new ArrayList<>(logicsOrderIds));
 
         //查询装卸货地址
         List<KwtWaybillOrderAddress> orderAddresses = waybillOrderAddressRepository.queryBySubBillOrderId(subWayBillOrderIds);
@@ -2984,7 +2980,8 @@ public class KwtWaybillOrderV1Service {
         Map<String, KwtWaybillOrderTrack> subBillIdAddressIdKeyAndOrderTrackMap = getStringKwtWaybillOrderTrackMap(addressIds);
 
         //更具物流订单查询商品
-        List<KwtLogisticsOrderGoods> logisticsOrderGoods = kwtLogisticsOrderGoodsRepository.queryByLogOrderIds(logicsOrderIds);
+        List<KwtLogisticsOrderGoods> logisticsOrderGoods =
+                kwtLogisticsOrderGoodsRepository.queryByLogOrderIds(new ArrayList<>(logicsOrderIds));
         Map<Long, KwtLogisticsOrderGoods> logOrderIdAndGoodsIdMap = Maps.newHashMap();
         List<Long> goodsIds = Lists.newArrayList() ;
         if (CollectionUtils.isNotEmpty(logisticsOrderGoods)){

+ 2 - 0
sql/2025/11/30/2025_11_30_cxf_alert.sql

@@ -30,3 +30,5 @@ ALTER TABLE kwo_trade_order ADD charge_type TINYINT NOT NULL default '0'  commen
 ALTER TABLE kwo_trade_order ADD consignment_way TINYINT NOT NULL default '0'  comment '托运方式 1-采购方托运,2-供应方托运';
 ALTER TABLE kwo_trade_order_goods ADD goods_name varchar(255)   NOT NULL default ''  comment '商品名称';
 
+
+ALTER TABLE kwf_truck ADD selected_capacity tinyint NOT NULL default '0'  comment '已选运力(0-未选运力,1-已选运力)';