Răsfoiți Sursa

运输模块拓展

xucaiqin 1 lună în urmă
părinte
comite
c702139b7b
15 a modificat fișierele cu 516 adăugiri și 102 ștergeri
  1. 22 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtLogisticsOrderController.java
  2. 7 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java
  3. 29 14
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderV1Mapper.java
  4. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/UnloadingHandler.java
  5. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrder.java
  6. 4 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/AddLogisticOrderDTO.java
  7. 55 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsEntDto.java
  8. 60 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/CreateLogisticsAddressParam.java
  9. 74 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/CreateLogisticsOrderParam.java
  10. 24 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderSaleDto.java
  11. 29 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderSaleVo.java
  12. 2 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtAcceptCarriageOrderService.java
  13. 115 26
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  14. 67 52
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java
  15. 25 1
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderV1Mapper.xml

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

@@ -7,10 +7,14 @@ import com.sckw.core.web.constant.HttpStatus;
 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.transport.model.LogisticsOrderPara;
 import com.sckw.transport.api.model.param.OrderPara;
-import com.sckw.transport.model.dto.*;
+import com.sckw.transport.model.LogisticsOrderPara;
+import com.sckw.transport.model.dto.LogisticOrderSelectReq;
+import com.sckw.transport.model.dto.LogisticsConsignmentDto;
+import com.sckw.transport.model.dto.LogisticsOrderFinishDto;
+import com.sckw.transport.model.dto.LogisticsOrderSubcontractDto;
 import com.sckw.transport.model.param.AddLogisticsOrderParam;
+import com.sckw.transport.model.param.CreateLogisticsOrderParam;
 import com.sckw.transport.model.param.LogisticsOrderResp;
 import com.sckw.transport.model.param.QueryLogisticsOrderReq;
 import com.sckw.transport.model.vo.*;
@@ -67,7 +71,22 @@ public class KwtLogisticsOrderController {
         }
     }
 
-
+    /**
+     *
+     */
+    @Validated
+    @RepeatSubmit(interval = 1000, message = "前方拥堵,请稍后尝试")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @Operation(summary = "原矿运输下单")
+    public HttpResult create(@Valid @RequestBody CreateLogisticsOrderParam addLogisticsOrderParam) {
+        log.info("转运订单传递参数信息:{}", JSONObject.toJSONString(addLogisticsOrderParam));
+        try {
+            return logisticsConsignmentService.createLogisticsOrder(addLogisticsOrderParam);
+        } catch (Exception e) {
+            log.error("转运订单 error :{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
     /**
      * 承运订单/托运订单-自建物流订单 V4.2
      *

+ 7 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java

@@ -17,15 +17,14 @@ 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.ExcelUtil;
+import com.sckw.payment.api.model.dto.common.R;
 import com.sckw.transport.api.model.param.AddLogisticOrderParam;
 import com.sckw.transport.dubbo.TransportServiceImpl;
 import com.sckw.transport.model.dto.*;
-import com.sckw.transport.model.dto.WaybillOrderSelectReq;
 import com.sckw.transport.model.param.WaybillOrderNodeReq;
 import com.sckw.transport.model.param.WaybillOrderReq;
 import com.sckw.transport.model.param.WaybillOrderResp;
 import com.sckw.transport.model.vo.*;
-import com.sckw.transport.model.vo.WaybillOrderSelectOptionVo;
 import com.sckw.transport.service.KwtWaybillOrderService;
 import com.sckw.transport.service.KwtWaybillOrderV1Service;
 import io.swagger.v3.oas.annotations.Operation;
@@ -756,4 +755,10 @@ public class KwtWaybillOrderController {
 
         return BaseResult.success(waybillOrderService.getWaybillOrderSelectList(req));
     }
+
+    @GetMapping("/saleSum")
+    @Operation(summary = "主要商品销售数据")
+    public R<WaybillOrderSaleVo> saleSum() {
+        return R.ok(waybillOrderV1Service.saleSum());
+    }
 }

+ 29 - 14
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderV1Mapper.java

@@ -2,16 +2,14 @@ package com.sckw.transport.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.core.model.vo.TableTop;
-import com.sckw.transport.model.KwtWaybillOrder;
 import com.sckw.transport.model.KwtWaybillOrderV1;
 import com.sckw.transport.model.dto.OrderCarDTO;
 import com.sckw.transport.model.dto.WaybillOrderQueryDto;
 import com.sckw.transport.model.dto.WaybillSubtaskOrderQueryDto;
-import com.sckw.transport.model.vo.WaybillCountVo;
-import com.sckw.transport.model.vo.WaybillOrderSelectVo;
-import com.sckw.transport.model.vo.WaybillOrderSubtaskVo;
+import com.sckw.transport.model.vo.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+
 import java.util.List;
 import java.util.Map;
 
@@ -25,6 +23,7 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
 
     /**
      * 查询统计
+     *
      * @param params 查询参数
      * @return 统计数据
      */
@@ -32,6 +31,7 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
 
     /**
      * 查询统计
+     *
      * @param params 查询参数
      * @return 统计数据
      */
@@ -39,6 +39,7 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
 
     /**
      * 查询统计
+     *
      * @param params 查询参数
      * @return 统计数据
      */
@@ -46,6 +47,7 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
 
     /**
      * 司机端任务统计
+     *
      * @param driverId 司机ID
      * @return 统计数据
      */
@@ -53,6 +55,7 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
 
     /**
      * 司机端查询运单
+     *
      * @param params {driverId 司机ID, busStatus  1待接单/2出车/3执行/4完结, month月份, startTime 开始实际, endTime 结束时间}
      * @return 返回值
      */
@@ -60,14 +63,16 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
 
     /**
      * 查询统计司机或车辆关联订单数量信息
+     *
      * @param driverId 司机ID
-     * @param truckId 车辆ID
+     * @param truckId  车辆ID
      * @return 统计信息
      */
     WaybillCountVo findCountByDriverOrTruck(@Param("driverId") Long driverId, @Param("truckId") Long truckId);
 
     /**
      * 查询统计运单数量信息
+     *
      * @param lOrderId 物流订单ID
      * @return 统计信息
      */
@@ -75,15 +80,17 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
 
     /**
      * 查询统计司机或车辆关联订单运量信息
+     *
      * @param driverId 司机ID
-     * @param truckId 车辆ID
+     * @param truckId  车辆ID
      * @return 统计信息
      */
     WaybillCountVo findAmountByDriverOrTruck(@Param("driverId") Long driverId, @Param("truckId") Long truckId);
 
     /**
      * 查询统计车辆关联订单未完结数量
-     * @param type 运单类型
+     *
+     * @param type    运单类型
      * @param truckId 车辆ID
      * @return 统计信息
      */
@@ -91,6 +98,7 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
 
     /**
      * 查询统计物流订单运量(地址关联)
+     *
      * @param params {
      *               upperlOrderId 下级分包物流订单,
      *               lOrderId 物流订单id,
@@ -104,6 +112,7 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
 
     /**
      * 计算地址下所有的运单榜单上的运量
+     *
      * @param params {
      *               wAddressIds 运单地址ID集,
      *               type  榜单装卸货类型
@@ -115,6 +124,7 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
 
     /**
      * 易订单id查找相关联车辆信息
+     *
      * @param params {tOrderIds 贸易订单ID, page , pageSize}
      * @return 车辆信息
      */
@@ -122,11 +132,12 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
 
     /**
      * 查询车辆运单
+     *
      * @param params {driverId 司机ID, truckNo车牌号, busStatus 状态 2出车/3执行/4完结}
+     * @return 运单信息
      * @desc 查询车辆运单
      * @author zk
      * @date 2023/9/6
-     * @return 运单信息
      **/
     List<KwtWaybillOrderV1> findWaybillOrder(Map<String, Object> params);
 
@@ -138,20 +149,24 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
 
     /**
      * 查询订单
-     * @param orderId 订单id
-     * @param type 类型
+     *
+     * @param orderId    订单id
+     * @param type       类型
      * @param statusList 状态集
      * @return 订单信息
      */
-    Map<String,Object> selectOrderByOrderId(@Param("orderId") Long orderId,
-                                            @Param("type") Integer type,
-                                            @Param("statusList") List<Long> statusList);
+    Map<String, Object> selectOrderByOrderId(@Param("orderId") Long orderId,
+                                             @Param("type") Integer type,
+                                             @Param("statusList") List<Long> statusList);
 
     /**
      * 统计物流订单的车辆运单
+     *
      * @param lOrderId 物流订单订单ID
      * @return 统计信息
      */
     int findWaybillOrderCountByLOrderId(@Param("lOrderId") Long lOrderId);
 
-}
+    WaybillOrderSaleDto saleSum(@Param("list") List<String> list);
+
+}

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/UnloadingHandler.java

@@ -54,7 +54,7 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
     @Autowired
     private KwtLogisticsOrderUnitRepository kwtLogisticsOrderUnitRepository;
 
-    @Autowired
+    @Autowired(required = false)
     private PaymentFeignService paymentFeignService;
 
     //用于存储动态状态

+ 2 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrder.java

@@ -8,7 +8,6 @@ import jakarta.validation.constraints.Min;
 import lombok.Data;
 
 import java.io.Serializable;
-import java.lang.reflect.Type;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.Date;
@@ -258,5 +257,6 @@ public class KwtLogisticsOrder implements Serializable {
 
     @TableField(exist = false)
     private String yearAndMonth;
+    private Integer orderType;
 
-}
+}

+ 4 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/AddLogisticOrderDTO.java

@@ -20,6 +20,10 @@ public class AddLogisticOrderDTO implements Serializable {
     private static final long serialVersionUID = 6529826978061848338L;
     //物流信息
     private List<LogisticData> logisticInfo;
+    /**
+     * 1-原矿转运订单
+     */
+    private Integer orderType;
 
     /**
      * 企业id

+ 55 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsEntDto.java

@@ -0,0 +1,55 @@
+package com.sckw.transport.model.dto;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.math.BigDecimal;
+
+
+@Getter
+@Setter
+@ToString
+public class LogisticsEntDto {
+
+    /**
+     * 合同id
+     */
+    @NotNull(message = "物流合同不能为空")
+    private Long contractId;
+
+    /**
+     * 合同编号
+     */
+    @NotBlank(message = "合同编号不能为空")
+    private String contractNo;
+
+    @NotNull(message = "承运单位不能为空")
+    private Long entId;
+
+    @NotBlank(message = "承运企业名称不能为空")
+    private String entName;
+    /**
+     * 运输单价
+     */
+    @NotNull(message = "运输单价不能为空")
+    private BigDecimal transportPrice;
+
+    /**
+     * 联系人ID
+     */
+    private Long contactsId;
+
+    /**
+     * 联系人姓名
+     */
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+}

+ 60 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/CreateLogisticsAddressParam.java

@@ -0,0 +1,60 @@
+package com.sckw.transport.model.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author lfdc
+ * @description 物流订单自建订单v4.2
+ * @date 2024-03-05 09:03:01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateLogisticsAddressParam implements Serializable {
+
+    @Schema(description = "地址id")
+    private Long id;
+
+    @Schema(description = "地址名称")
+    private String name;
+    @Schema(description = "地址类型 (1装货地址、2卸货地址)")
+    private String addressType;
+    @Schema(description = "类型")
+    private String type;
+
+    /**
+     * 联系人姓名
+     */
+    @Schema(description = "联系人姓名")
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    @Schema(description = "联系电话")
+    private String phone;
+
+    /**
+     * 所在地区
+     */
+    @Schema(description = "所在地区")
+    private Integer cityCode;
+
+    /**
+     * 所属区域名称
+     */
+    @Schema(description = "所属区域名称")
+    private String cityName;
+
+    /**
+     * 详细地址
+     */
+    @Schema(description = "详细地址")
+    private String detailAddress;
+
+}

+ 74 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/CreateLogisticsOrderParam.java

@@ -0,0 +1,74 @@
+package com.sckw.transport.model.param;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.sckw.transport.model.dto.LogisticsEntDto;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.Digits;
+import jakarta.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * @author lfdc
+ * @description 物流订单自建订单v4.2
+ * @date 2024-03-05 09:03:01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateLogisticsOrderParam implements Serializable {
+    /**
+     * 合同id
+     */
+    @NotNull(message = "物流合同信息不能为空")
+    @Schema(description = "物流合同信息")
+    private List<LogisticsEntDto> logisticsContractList;
+
+    @NotNull(message = "goodsId不能为空")
+    @Schema(description = "商品id")
+    private Long goodsId;
+
+    /**
+     * 总量
+     */
+    @NotNull(message = "总量不能为空")
+    @Digits(integer = 10, fraction = 2, message = "总量格式错误")
+    @DecimalMin(value = "0.00", message = "总量最小值为{value}")
+    @Schema(description = "总量")
+    private BigDecimal amount;
+
+
+    /**
+     * 运输时间
+     */
+    @NotNull(message = "结束运输时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @Schema(description = "结束运输时间")
+    private LocalDate endTime;
+
+    /**
+     * 开始运输时间
+     */
+    @NotNull(message = "开始运输时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @Schema(description = "开始运输时间")
+    private LocalDate startTime;
+
+
+    @NotNull(message = "装货地址不能为空")
+    @Schema(description = "装货地址")
+    private CreateLogisticsAddressParam loadAddress;
+
+    @NotNull(message = "卸货地址不能为空")
+    @Schema(description = "卸货地址")
+    private CreateLogisticsAddressParam unloadAddress;
+
+
+}

+ 24 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderSaleDto.java

@@ -0,0 +1,24 @@
+package com.sckw.transport.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 运单车辆信息VO
+ * @author system
+ */
+@Data
+@Schema(description = "销售数据")
+public class WaybillOrderSaleDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "出货量")
+    private BigDecimal chl;
+    @Schema(description = "销售量")
+    private BigDecimal xsl;
+
+}

+ 29 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderSaleVo.java

@@ -0,0 +1,29 @@
+package com.sckw.transport.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 运单车辆信息VO
+ * @author system
+ */
+@Data
+@Schema(description = "销售数据")
+public class WaybillOrderSaleVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "石灰石出货量")
+    private BigDecimal shsChl;
+    @Schema(description = "石灰石销售量")
+    private BigDecimal shsXsl;
+
+    @Schema(description = "氧化钙出货量")
+    private BigDecimal yhgChl;
+    @Schema(description = "氧化钙销售量")
+    private BigDecimal yhgXsl;
+
+}

+ 2 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtAcceptCarriageOrderService.java

@@ -126,7 +126,7 @@ public class KwtAcceptCarriageOrderService {
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
     PaymentDubboService paymentDubboService;
 
-    @Autowired
+    @Autowired(required = false)
     private PaymentFeignService paymentFeignService;
 
     @Autowired
@@ -3664,6 +3664,7 @@ public class KwtAcceptCarriageOrderService {
         x.setLOrderNo(lOrderNo);
         kwtLogisticsOrder.setEntId(orderDTO.getEntId());
         kwtLogisticsOrder.setType(String.valueOf(x.getType()));
+        kwtLogisticsOrder.setOrderType(orderDTO.getOrderType());// 拓展
         kwtLogisticsOrder.setTOrderId(orderDTO.getTradeOrderId());
         kwtLogisticsOrder.setTOrderNo(orderDTO.getTradeOrderNo());
         kwtLogisticsOrder.setLOrderNo(lOrderNo);

+ 115 - 26
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -62,10 +62,7 @@ import com.sckw.transport.common.config.MessageUrlConfig;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.*;
-import com.sckw.transport.model.param.AddLogisticsOrderParam;
-import com.sckw.transport.model.param.LogisticsConsignmentParam;
-import com.sckw.transport.model.param.LogisticsOrderResp;
-import com.sckw.transport.model.param.QueryLogisticsOrderReq;
+import com.sckw.transport.model.param.*;
 import com.sckw.transport.model.vo.*;
 import com.sckw.transport.repository.*;
 import io.seata.spring.annotation.GlobalTransactional;
@@ -148,10 +145,10 @@ public class KwtLogisticsConsignmentService {
     @Autowired
     private KwtLogisticsOrderUnitRepository kwtLogisticsOrderUnitRepository;
 
-    @Autowired
+    @Autowired(required = false)
     private PaymentFeignService paymentFeignService;
 
-    @Autowired
+    @Autowired(required = false)
     DataPermissionFeignService dataPermissionFeignService;
 
     @Autowired
@@ -183,6 +180,7 @@ public class KwtLogisticsConsignmentService {
 
     @Autowired
     public KwtWaybillOrderV1Mapper waybillOrderV1Mapper;
+    private final KwtAcceptCarriageOrderService kwtAcceptCarriageOrderService;
 
     private final KwtLogisticsOrderRepository logisticsOrderRepository;
     private final KwtLogisticsOrderGoodsRepository logisticsOrderGoodsRepository;
@@ -2358,7 +2356,7 @@ public class KwtLogisticsConsignmentService {
             endDate = DateUtils.getEndDate(optimizedReq.getEndTime());
         }
         return logisticsOrderRepository.queryByPage(
-                logOrderIds, optimizedReq.getTradeOrderId(), optimizedReq.getOrderNo(),optimizedReq.getTradeOrderNo(),
+                logOrderIds, optimizedReq.getTradeOrderId(), optimizedReq.getOrderNo(), optimizedReq.getTradeOrderNo(),
                 optimizedReq.getOrderStatus(), startDate,
                 endDate, optimizedReq.getPageNum(), optimizedReq.getPageSize());
     }
@@ -2605,6 +2603,97 @@ public class KwtLogisticsConsignmentService {
         return logisticsBaseOrderVos;
     }
 
+    public HttpResult createLogisticsOrder(CreateLogisticsOrderParam addLogisticsOrderParam) {
+        AddLogisticOrderDTO addLogisticOrderDTO = new AddLogisticOrderDTO();
+        addLogisticOrderDTO.setOrderType(1);
+        List<LogisticsEntDto> logisticsContractList = addLogisticsOrderParam.getLogisticsContractList();
+        Long goodsId = addLogisticsOrderParam.getGoodsId();
+        List<LogisticData> collect = logisticsContractList.stream().map(d -> {
+            LogisticData logisticInfo = new LogisticData();
+            logisticInfo.setContractId(d.getContractId());
+            logisticInfo.setContractNo(d.getContractNo());
+            logisticInfo.setContractName("");
+            logisticInfo.setAcceptCompanyId(d.getEntId());
+            logisticInfo.setAcceptContactPhone("");
+            logisticInfo.setAcceptContacts(d.getContacts());
+            logisticInfo.setAcceptContactsId(d.getContactsId());
+            logisticInfo.setAcceptCompany("");
+            logisticInfo.setPrice(d.getTransportPrice());
+            logisticInfo.setPriceType(0L);
+            logisticInfo.setAmount(addLogisticsOrderParam.getAmount());
+            logisticInfo.setAmountUnit("");//默认是吨 todo
+            logisticInfo.setLoss(new BigDecimal("0"));
+            logisticInfo.setPayment(0L);
+            logisticInfo.setSigningWay(0);
+            logisticInfo.setLossUnit("");
+            logisticInfo.setRemark("");
+            logisticInfo.setType(0);
+
+            return logisticInfo;
+        }).collect(Collectors.toList());
+        addLogisticOrderDTO.setLogisticInfo(collect);
+        addLogisticOrderDTO.setEntId(LoginUserHolder.getEntId());
+        addLogisticOrderDTO.setUserId(LoginUserHolder.getUserId());
+        //todo 获取不到的参数
+        addLogisticOrderDTO.setTradeOrderId(null);
+        addLogisticOrderDTO.setTradeOrderNo("");
+
+        addLogisticOrderDTO.setNonConsignCompany("");
+        addLogisticOrderDTO.setNonConsignCompanyId(null);
+        addLogisticOrderDTO.setNonConsignContactPhone("");
+        addLogisticOrderDTO.setNonConsignContacts("");
+        addLogisticOrderDTO.setNonConsignContactsId(null);
+        //todo
+        addLogisticOrderDTO.setConsignCompany("");
+        addLogisticOrderDTO.setConsignCompanyId(null);
+        addLogisticOrderDTO.setConsignContactPhone("");
+        addLogisticOrderDTO.setConsignContacts("");
+        addLogisticOrderDTO.setConsignContactsId(null);
+
+        KwpGoods kwpGoods = null;
+        if (Objects.nonNull(goodsId)) {
+            kwpGoods = goodsInfoService.getGoodsById(goodsId);
+        }
+        addLogisticOrderDTO.setGoodsId(goodsId);
+        addLogisticOrderDTO.setGoodsName(kwpGoods.getName());
+        addLogisticOrderDTO.setGoodsType(kwpGoods.getGoodsType());
+        addLogisticOrderDTO.setGoodsPrice(new BigDecimal("0"));
+        addLogisticOrderDTO.setGoodsPriceUnit(kwpGoods.getPriceUnit());
+        addLogisticOrderDTO.setGoodsUnit(kwpGoods.getUnit());
+
+        CreateLogisticsAddressParam loadAddress = addLogisticsOrderParam.getLoadAddress();
+
+
+        addLogisticOrderDTO.setLoadName(loadAddress.getName());
+        addLogisticOrderDTO.setLoadCityCode(loadAddress.getCityCode());
+        addLogisticOrderDTO.setLoadCityName(loadAddress.getCityName());
+        addLogisticOrderDTO.setLoadContacts(loadAddress.getContacts());
+        addLogisticOrderDTO.setLoadPhone(loadAddress.getPhone());
+        addLogisticOrderDTO.setLoadDetailAddress(loadAddress.getDetailAddress());
+
+        CreateLogisticsAddressParam unloadAddress = addLogisticsOrderParam.getUnloadAddress();
+        addLogisticOrderDTO.setUnloadId(loadAddress.getId());
+        addLogisticOrderDTO.setUnloadName(loadAddress.getName());
+        addLogisticOrderDTO.setUnloadCityCode(loadAddress.getCityCode());
+        addLogisticOrderDTO.setUnloadCityName(loadAddress.getCityName());
+        addLogisticOrderDTO.setUnLoadDetailAddress(loadAddress.getDetailAddress());
+        addLogisticOrderDTO.setUnloadContacts(loadAddress.getContacts());
+        addLogisticOrderDTO.setUnloadPhone(loadAddress.getPhone());
+
+        addLogisticOrderDTO.setLoadLat("");
+        addLogisticOrderDTO.setLoadLng("");
+        addLogisticOrderDTO.setUnloadLat("");
+        addLogisticOrderDTO.setUnloadLng("");
+        addLogisticOrderDTO.setBillingMode("");
+        addLogisticOrderDTO.setStartTime(addLogisticsOrderParam.getStartTime());
+        addLogisticOrderDTO.setEndTime(addLogisticsOrderParam.getEndTime());
+        addLogisticOrderDTO.setDispatchWay(DispatchWayEnums.MANUAL_DISPATCH.getCode());
+        addLogisticOrderDTO.setActualDisPatch(0);
+        addLogisticOrderDTO.setMeasurementWay(0);
+        kwtAcceptCarriageOrderService.addLogisticOrder(addLogisticOrderDTO);
+        return HttpResult.ok();
+    }
+
     /**
      * 基础查询数据
      */
@@ -2720,7 +2809,6 @@ public class KwtLogisticsConsignmentService {
      */
 
 
-
     /**
      * 应用数据权限过滤到物流订单ID集合
      * <p>
@@ -2734,10 +2822,10 @@ public class KwtLogisticsConsignmentService {
     private Set<Long> applyDataPermissionFilterToLogOrderIds(Set<Long> logOrderIds) {
         // 1. 获取当前用户的数据权限配置
         DataPermissionDTO perm = fetchDataPermissionForCurrentUser();
-        
+
         // 如果未获取到权限配置或不需要进行数据过滤,直接返回原始ID集合da
         if (perm == null || !perm.needFilter()) {
-            log.debug("数据权限过滤:无需过滤或权限配置为空,返回原始订单ID集合,大小: {}", 
+            log.debug("数据权限过滤:无需过滤或权限配置为空,返回原始订单ID集合,大小: {}",
                     CollectionUtils.isEmpty(logOrderIds) ? 0 : logOrderIds.size());
             return logOrderIds;
         }
@@ -2764,15 +2852,15 @@ public class KwtLogisticsConsignmentService {
             // 查询这些企业关联的所有物流订单单位信息
             List<KwtLogisticsOrderUnit> units =
                     logisticsOrderUnitRepository.queryByEntIds(new HashSet<>(perm.getVisibleEntIds()));
-            
+
             // 提取出这些单位对应的物流订单ID
             Set<Long> entScopeLogOrderIds = units.stream()
                     .map(KwtLogisticsOrderUnit::getLOrderId)
                     .filter(Objects::nonNull)
                     .collect(Collectors.toSet());
-            
+
             log.debug("数据权限过滤:企业维度关联的订单ID数量: {}", entScopeLogOrderIds.size());
-            
+
             // 取交集:只保留在当前用户可见企业范围内的订单ID
             result.retainAll(entScopeLogOrderIds);
             log.debug("数据权限过滤:企业维度过滤后剩余订单ID数量: {}", result.size());
@@ -2795,7 +2883,7 @@ public class KwtLogisticsConsignmentService {
         log.debug("数据权限过滤:启用个人数据权限,开始按销售员过滤");
         Set<Long> finalResult = filterLogOrderIdsByTradeContractSalesman(result, perm);
         log.info("数据权限过滤完成,最终订单ID数量: {}", finalResult.size());
-        
+
         return finalResult;
     }
 
@@ -2831,7 +2919,7 @@ public class KwtLogisticsConsignmentService {
                 .map(KwtLogisticsOrder::getTOrderId)
                 .filter(Objects::nonNull)
                 .collect(Collectors.toSet());
-        
+
         if (CollectionUtils.isEmpty(tradeIds)) {
             log.warn("个人数据权限过滤:物流订单中未找到关联的贸易订单ID,返回空集合");
             return Sets.newHashSet();
@@ -2888,7 +2976,7 @@ public class KwtLogisticsConsignmentService {
                 .filter(order -> order.getTOrderId() != null && allowedTradeIds.contains(order.getTOrderId()))
                 .map(KwtLogisticsOrder::getId)
                 .collect(Collectors.toSet());
-        
+
         log.debug("个人数据权限过滤:最终保留的物流订单数量: {}", finalLogOrderIds.size());
         return finalLogOrderIds;
     }
@@ -3024,6 +3112,7 @@ public class KwtLogisticsConsignmentService {
 
         return enterId;
     }
+
     private static LogisticsOrderResp getLogisticsOrderResp(KwtLogisticsOrder kwtLogisticsOrder,
                                                             Map<String, KwtLogisticsOrderUnit> finalLogOrderIdAndUnitTypeKeyAndUnitMap,
                                                             Map<Long, KwtLogisticsOrderGoods> finalLogIdAndGoodsMap,
@@ -3774,13 +3863,13 @@ public class KwtLogisticsConsignmentService {
         return Boolean.TRUE;
     }
 
-    private void calculateFreight(List<KwtLogisticsOrder> completedLogisticsOrders){
+    private void calculateFreight(List<KwtLogisticsOrder> completedLogisticsOrders) {
         for (KwtLogisticsOrder logisticsOrder : completedLogisticsOrders) {
             //物流订单已完结,计算待付运费
-            if(Objects.equals(logisticsOrder.getSettlement(),1)){
+            if (Objects.equals(logisticsOrder.getSettlement(), 1)) {
                 //todo 普通结算
 
-            }else if(Objects.equals(logisticsOrder.getSettlement(),2)) {
+            } else if (Objects.equals(logisticsOrder.getSettlement(), 2)) {
                 //记账模式
                 //1解冻运费
                 List<KwtLogisticsOrderUnit> orderUnits = kwtLogisticsOrderUnitRepository.queryByLOrderId(logisticsOrder.getId());
@@ -3794,9 +3883,9 @@ public class KwtLogisticsConsignmentService {
                 unFreezePayableDto.setRemark("物流订单号:" + unFreezePayableDto.getOrderNo() + ",订单完结解冻");
                 log.info("物流订单号:{},订单完结解冻进行中运费,参数:{}", unFreezePayableDto.getOrderNo(),JSON.toJSONString(unFreezePayableDto));
                 BaseResult<Object> unFreezeResult = paymentFeignService.updatePayable(unFreezePayableDto);
-                if(unFreezeResult.getCode()!= HttpStatus.SUCCESS_CODE){
-                    log.error("物流订单号:{},订单完结解冻失败,异常信息为:{}",unFreezePayableDto.getOrderNo(),unFreezeResult.getMessage());
-                    throw new BusinessException("物流订单号:"+unFreezePayableDto.getOrderNo()+",订单完结解冻失败");
+                if (unFreezeResult.getCode() != HttpStatus.SUCCESS_CODE) {
+                    log.error("物流订单号:{},订单完结解冻失败,异常信息为:{}", unFreezePayableDto.getOrderNo(), unFreezeResult.getMessage());
+                    throw new BusinessException("物流订单号:" + unFreezePayableDto.getOrderNo() + ",订单完结解冻失败");
                 }
                 //2计算待付运费
                 WalletPayableDto consumePayableDto = new WalletPayableDto();
@@ -3817,13 +3906,14 @@ public class KwtLogisticsConsignmentService {
                 consumePayableDto.setRemark("物流订单号:" + consumePayableDto.getOrderNo() + ",订单完结消费");
                 log.info("物流订单号:{},订单完结消费,参数:{}", consumePayableDto.getOrderNo(),JSON.toJSONString(consumePayableDto));
                 BaseResult<Object> consumeResult = paymentFeignService.updatePayable(consumePayableDto);
-                if(consumeResult.getCode()!= HttpStatus.SUCCESS_CODE){
-                    log.error("物流订单号:{},订单完结消费失败,异常信息为:{}",unFreezePayableDto.getOrderNo(),consumeResult.getMessage());
-                    throw new BusinessException("物流订单号:"+unFreezePayableDto.getOrderNo()+",订单完结消费失败");
+                if (consumeResult.getCode() != HttpStatus.SUCCESS_CODE) {
+                    log.error("物流订单号:{},订单完结消费失败,异常信息为:{}", unFreezePayableDto.getOrderNo(), consumeResult.getMessage());
+                    throw new BusinessException("物流订单号:" + unFreezePayableDto.getOrderNo() + ",订单完结消费失败");
                 }
             }
         }
     }
+
     private void updateTradeOrder(Set<Long> tradeIds) {
         if (org.apache.commons.collections4.CollectionUtils.isEmpty(tradeIds)) {
             return;
@@ -3932,7 +4022,6 @@ public class KwtLogisticsConsignmentService {
     }
 
 
-
     public List<McpLogisticsOrderVo> queryMcpList(LogisticsOrderPara orderPara) {
         UserResDto userResDto = remoteSystemService.queryUserById(orderPara.getUserId());
         if (Objects.nonNull(userResDto)) {

+ 67 - 52
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

@@ -150,7 +150,7 @@ public class KwtWaybillOrderV1Service {
     private final KwtLogisticsOrderGoodsRepository kwtLogisticsOrderGoodsRepository;
     private final KwtWaybillOrderSubtaskRepository kwtWaybillOrderSubtaskRepository;
     private final KwtLogisticsOrderRepository kwtLogisticsOrderRepository;
-    private final KwtWaybillOrderTicketRepository  kwtWaybillOrderTicketRepository;
+    private final KwtWaybillOrderTicketRepository kwtWaybillOrderTicketRepository;
     private final KwtWaybillOrderNodeRepository kwtWaybillOrderNodeRepository;
     private final VehicleTraceClient vehicleTraceClient;
     @Resource
@@ -183,6 +183,7 @@ public class KwtWaybillOrderV1Service {
     private KwtLogisticsOrderAddressRepository kwtLogisticsOrderAddressRepository;
     // 定义超时时间常量
     private static final long PARALLEL_TIMEOUT_SECONDS = 60;
+
     /**
      * @param params 请求参数
      * @desc 统计
@@ -452,10 +453,10 @@ public class KwtWaybillOrderV1Service {
             waybillOrder.setSendCarWeigh(NumberUtils.parseBigDecimal(waybillOrder.getEntrustAmount()));
             waybillOrder.setDefectiveWeigh(NumberUtils.parseBigDecimal(waybillOrder.getDeficitAmount()));
             waybillOrder.setDeduct(deficitPrice(NumberUtils.parseBigDecimal(waybillOrder.getLoadAmount(), null),
-                                                NumberUtils.parseBigDecimal(waybillOrder.getDeficitAmount(), null),
-                                                waybillOrder.getLoss(),
-                                                waybillOrder.getLossLabel(),
-                                                waybillOrder.getGoodsPrice()));
+                    NumberUtils.parseBigDecimal(waybillOrder.getDeficitAmount(), null),
+                    waybillOrder.getLoss(),
+                    waybillOrder.getLossLabel(),
+                    waybillOrder.getGoodsPrice()));
         }
         return PageHelperUtil.getPageResult(new PageInfo<>(list));
     }
@@ -2227,13 +2228,13 @@ public class KwtWaybillOrderV1Service {
                 //从中台查询轨迹信息
                 VehicleDataDTO vehicleDataDTO = new VehicleDataDTO();
                 vehicleDataDTO.setWOrderNo(waybillOrder.getWOrderNo());
-                
+
                 try {
                     // 使用 Feign 调用查询车辆轨迹列表
                     com.sckw.transport.api.model.dto.VehicleDataDTO vehicleDataDTO1 = new com.sckw.transport.api.model.dto.VehicleDataDTO();
                     vehicleDataDTO.setWOrderNo(waybillOrder.getWOrderNo());
                     BaseIotResult<List<com.sckw.transport.api.model.dto.VehicleReturnData>> result = vehicleTraceClient.queryVehicleDataList(vehicleDataDTO1);
-                    
+
                     if (result != null && org.apache.commons.lang3.StringUtils.equals(result.getCode(), "0") && result.getData() != null) {
                         List<com.sckw.transport.api.model.dto.VehicleReturnData> vehicleReturn = result.getData();
                         List<VehicleRouteData> vehicleReturnData = vehicleReturn.stream().map(x->{
@@ -3003,21 +3004,21 @@ public class KwtWaybillOrderV1Service {
         Long entId =LoginUserHolder.getEntId();
         //entIds.add(entId);
         log.debug("获取企业ID集合: {}", entIds);
-        
+
         CompletableFuture<Set<Long>> logOrderIdsFuture = CompletableFuture.supplyAsync(() -> {
             log.debug("开始查询物流订单ID,参数: {}, 企业ID: {}", JSON.toJSONString(req), entIds);
             Set<Long> result = getLogOrderIds(req, entIds,entId);
             log.debug("物流订单ID查询完成,结果数量: {}", result.size());
             return result;
         });
-        
+
         CompletableFuture<Set<Long>> billOrderIdsFuture = CompletableFuture.supplyAsync(() -> {
             log.debug("开始查询运单ID,参数: {}", req);
             Set<Long> result = getBillOrderIds(req);
             log.debug("运单ID查询完成,结果数量: {}", result.size());
             return result;
         });
-        
+
         CompletableFuture<Map<String, Map<String, String>>> dictFuture = CompletableFuture.supplyAsync(() -> {
             log.debug("开始查询字典数据");
             Map<String, Map<String, String>> result = queryDictionaryData();
@@ -3049,7 +3050,7 @@ public class KwtWaybillOrderV1Service {
         }
 
         // 分页查询子运单信息
-        log.info("开始分页查询子运单信息,物流订单ID数量: {}, 运单ID数量: {}, 状态: {}", 
+        log.info("开始分页查询子运单信息,物流订单ID数量: {}, 运单ID数量: {}, 状态: {}",
                 logOrderIds.size(), billOrderIds.size(), status);
         IPage<KwtWaybillOrderSubtask> page = waybillOrderSubtaskRepository.queryByPage(
                 logOrderIds, billOrderIds, status, req.getPageNum(), req.getPageSize());
@@ -3078,7 +3079,7 @@ public class KwtWaybillOrderV1Service {
         });
 
         log.debug("开始查询物流订单,物流订单ID数量: {}", orderIds.getLogicsOrderIds().size());
-        CompletableFuture<List<KwtLogisticsOrder>> logisticsOrderFuture = CompletableFuture.supplyAsync(() -> 
+        CompletableFuture<List<KwtLogisticsOrder>> logisticsOrderFuture = CompletableFuture.supplyAsync(() ->
                 logisticsOrderRepository.queryByLogOrderIds(orderIds.getLogicsOrderIds()), traceTaskExecutor)
                 .exceptionally(ex -> {
                     log.error("查询物流订单失败", ex);
@@ -3143,8 +3144,8 @@ public class KwtWaybillOrderV1Service {
         log.debug("开始查询贸易合同商品");
         CompletableFuture<List<TradeContractGoodsDto>> contractGoodsFuture =
                 tradeOrderContractFuture.thenCombine(goodsIdsFuture, (contracts, goodsIds) -> {
-                    log.debug("贸易合同和商品ID准备完成,合同数量: {}, 商品ID数量: {}", 
-                            Optional.ofNullable(contracts).map(List::size).orElse(0), 
+                    log.debug("贸易合同和商品ID准备完成,合同数量: {}, 商品ID数量: {}",
+                            Optional.ofNullable(contracts).map(List::size).orElse(0),
                             goodsIds.size());
                     Set<Long> contractIds = Optional.ofNullable(contracts)
                             .orElse(List.of())
@@ -3467,6 +3468,20 @@ public class KwtWaybillOrderV1Service {
                 orderContracGoodstoMap);
     }
 
+    public WaybillOrderSaleVo saleSum() {
+        //石灰石
+        WaybillOrderSaleDto waybillOrderSaleDto = waybillOrderV1Dao.saleSum(List.of("002", "0001", "0002", "0003", "0004", "0005", "0006"));
+        //氧化钙
+        WaybillOrderSaleDto waybillOrderSaleDto2 = waybillOrderV1Dao.saleSum(List.of("003", "0007", "0008", "0009"));
+        WaybillOrderSaleVo waybillOrderSaleVo = new WaybillOrderSaleVo();
+        waybillOrderSaleVo.setShsChl(waybillOrderSaleDto.getChl());
+        waybillOrderSaleVo.setShsXsl(waybillOrderSaleDto.getXsl());
+        waybillOrderSaleVo.setYhgChl(waybillOrderSaleDto2.getChl());
+        waybillOrderSaleVo.setYhgXsl(waybillOrderSaleDto2.getXsl());
+
+        return waybillOrderSaleVo;
+    }
+
     /**
      * 订单ID集合容器
      */
@@ -3558,7 +3573,7 @@ public class KwtWaybillOrderV1Service {
         }
         return subBillIdAddressIdKeyAndOrderTrackMap;
     }
-    
+
     /**
      * 批量查询运单的离场节点
      * @param wOrderIds 运单ID集合
@@ -3567,11 +3582,11 @@ public class KwtWaybillOrderV1Service {
     @NotNull
     private Map<Long, KwtWaybillOrderNode> getOffsiteNodeMap(Set<Long> wOrderIds) {
         Map<Long, KwtWaybillOrderNode> offsiteNodeMap = Maps.newHashMap();
-        
+
         if (CollectionUtils.isEmpty(wOrderIds)) {
             return offsiteNodeMap;
         }
-        
+
         // 查询所有运单的节点数据,过滤出状态为“已离场”的节点
         List<KwtWaybillOrderNode> nodes = kwtWaybillOrderNodeRepository.list(
                 Wrappers.<KwtWaybillOrderNode>lambdaQuery()
@@ -3579,18 +3594,18 @@ public class KwtWaybillOrderV1Service {
                         .eq(KwtWaybillOrderNode::getOrderStatus, CarWaybillV1Enum.WAIT_LOADING.getCode())
                         .orderByAsc(KwtWaybillOrderNode::getCreateTime)
         );
-        
+
         if (CollectionUtils.isNotEmpty(nodes)) {
             // 每个运单只取最后一条离场记录
             offsiteNodeMap = nodes.stream()
                     .collect(Collectors.toMap(
                             KwtWaybillOrderNode::getWOrderId,
                             Function.identity(),
-                            (existing, replacement) -> 
+                            (existing, replacement) ->
                                     existing.getCreateTime().before(replacement.getCreateTime()) ? existing : replacement
                     ));
         }
-        
+
         return offsiteNodeMap;
     }
 
@@ -3715,16 +3730,16 @@ public class KwtWaybillOrderV1Service {
      */
     private Set<Long> applyDataPermissionFilterToLogOrderIds(Set<Long> logOrderIds) {
         log.debug("开始应用数据权限过滤,原始物流订单ID数量: {}", CollectionUtils.isEmpty(logOrderIds) ? 0 : logOrderIds.size());
-        
+
         // 1. 获取当前用户的数据权限配置
         DataPermissionDTO perm = fetchDataPermissionForCurrentUser();
-        
+
         // 如果无需过滤或权限配置为空,直接返回原始ID集合
         if (perm == null || !perm.needFilter()) {
             log.debug("无需进行数据权限过滤,直接返回原始ID集合");
             return logOrderIds;
         }
-        
+
         // 如果原始ID集合为空,直接返回
         if (CollectionUtils.isEmpty(logOrderIds)) {
             log.debug("原始物流订单ID集合为空,无需过滤");
@@ -3736,25 +3751,25 @@ public class KwtWaybillOrderV1Service {
         // 2. 处理企业维度的数据权限
         if (!perm.isAllVisible()) {
             log.debug("非全量可见模式,开始执行企业维度权限过滤");
-            
+
             // 如果可见企业ID列表为空,说明该企业维度下无权限,返回空集合
             if (CollectionUtils.isEmpty(perm.getVisibleEntIds())) {
                 log.warn("当前用户可见企业ID列表为空,过滤结果为空");
                 return Sets.newHashSet();
             }
-            
+
             // 查询可见企业ID关联的所有物流订单单位信息
             List<KwtLogisticsOrderUnit> units =
                     kwtLogisticsOrderUnitRepository.queryByEntIds(new HashSet<>(perm.getVisibleEntIds()));
-            
+
             // 提取这些单位关联的物流订单ID
             Set<Long> entScopeLogOrderIds = units.stream()
                     .map(KwtLogisticsOrderUnit::getLOrderId)
                     .filter(Objects::nonNull)
                     .collect(Collectors.toSet());
-            
+
             log.debug("企业维度过滤:可见企业关联的物流订单ID数量: {}", entScopeLogOrderIds.size());
-            
+
             // 取交集:只保留既在原始列表中,又在可见企业关联列表中的ID
             result.retainAll(entScopeLogOrderIds);
             log.debug("企业维度过滤后剩余ID数量: {}", result.size());
@@ -3808,7 +3823,7 @@ public class KwtWaybillOrderV1Service {
                 .map(KwtLogisticsOrder::getTOrderId)
                 .filter(Objects::nonNull)
                 .collect(Collectors.toSet());
-                
+
         if (CollectionUtils.isEmpty(tradeIds)) {
             log.debug("物流订单中未关联有效的贸易订单ID,返回空集合");
             return Sets.newHashSet();
@@ -3860,7 +3875,7 @@ public class KwtWaybillOrderV1Service {
                 .filter(order -> order.getTOrderId() != null && allowedTradeIds.contains(order.getTOrderId()))
                 .map(KwtLogisticsOrder::getId)
                 .collect(Collectors.toSet());
-                
+
         log.debug("个人数据权限过滤完成,最终保留物流订单ID数量: {}", finalResult.size());
         return finalResult;
     }
@@ -3963,7 +3978,7 @@ public class KwtWaybillOrderV1Service {
      * 对物流订单ID集合进行交集操作
      * 如果原集合为空,则添加新集合的所有元素
      * 如果原集合不为空,则保留原集合与新集合的交集
-     * 
+     *
      * @param logOrderIds 原物流订单ID集合
      * @param newOrderIds 新物流订单ID集合
      */
@@ -4159,13 +4174,13 @@ public class KwtWaybillOrderV1Service {
                 waybillOrderNodeMap.getOrDefault(record.getWOrderId() + "-" + CarWaybillV1Enum.COMPLETION_LOADING.getCode(),
                         new KwtWaybillOrderNode());
         waybillOrderResp.setLoadingTime(DateUtils.format(loadTrack.getCreateTime(),DateUtils.DATE_TIME_PATTERN));
-        
+
         // 从节点表中获取离场时间
         KwtWaybillOrderNode offsiteNode = wOrderIdAndOffsiteNodeMap.get(record.getWOrderId());
         if (offsiteNode != null) {
             waybillOrderResp.setOffsiteTime(DateUtils.format(offsiteNode.getCreateTime(), DateUtils.DATE_TIME_PATTERN));
         }
-        
+
         waybillOrderResp.setUnloadingTime(DateUtils.format(unloadTrack.getCreateTime(),DateUtils.DATE_TIME_PATTERN));
         if (Objects.equals(record.getStatus(), CarWaybillV1Enum.COMPLETED.getCode())){
             waybillOrderResp.setCompleteTime(DateUtils.format(record.getUpdateTime(),DateUtils.DATE_TIME_PATTERN));
@@ -4299,9 +4314,9 @@ public class KwtWaybillOrderV1Service {
         log.debug("所有并行查询完成");
 
         // 获取查询结果
-        return buildWaybillOrderDetailResp(billOrder, subtask, logOrder, truckFuture.join(), 
-                fleetFuture.join(), addressFuture.join(), ticketFuture.join(), userFuture.join(), 
-                goodsFuture.join(), orderDetailFuture.join(), unitFuture.join(), 
+        return buildWaybillOrderDetailResp(billOrder, subtask, logOrder, truckFuture.join(),
+                fleetFuture.join(), addressFuture.join(), ticketFuture.join(), userFuture.join(),
+                goodsFuture.join(), orderDetailFuture.join(), unitFuture.join(),
                 nodeFuture.join(), waybillSubtaskFuture.join(),contractFuture.join());
     }
 
@@ -4387,10 +4402,10 @@ public class KwtWaybillOrderV1Service {
     /**
      * 构建运单详情响应对象
      */
-    private WaybillOrderDetailResp buildWaybillOrderDetailResp(KwtWaybillOrder billOrder, 
-                                                              KwtWaybillOrderSubtask subtask, 
+    private WaybillOrderDetailResp buildWaybillOrderDetailResp(KwtWaybillOrder billOrder,
+                                                              KwtWaybillOrderSubtask subtask,
                                                               KwtLogisticsOrder logOrder,
-                                                              RTruckVo truck, 
+                                                              RTruckVo truck,
                                                               RFleetVo fleet,
                                                               List<KwtLogisticsOrderAddress> kwtWaybillOrderAddresses,
                                                               List<KwtWaybillOrderTicket> orderTicketList,
@@ -4460,7 +4475,7 @@ public class KwtWaybillOrderV1Service {
      * 获取合同采购单位信息
      */
     private List<TradeContractUnitDto> getTradeContractUnits(OrderDetailVo orderDetailVo) {
-        if (Objects.nonNull(orderDetailVo) && Objects.nonNull(orderDetailVo.getContractInfo()) 
+        if (Objects.nonNull(orderDetailVo) && Objects.nonNull(orderDetailVo.getContractInfo())
             && Objects.nonNull(orderDetailVo.getContractInfo().getContractId())) {
             log.debug("查询合同单位信息,合同ID: {}", orderDetailVo.getContractInfo().getContractId());
             return remoteContractService.queryContractUnitByContractId(
@@ -4478,7 +4493,7 @@ public class KwtWaybillOrderV1Service {
                     .filter(Objects::nonNull)
                     .collect(Collectors.toMap(
                             x -> x.getLOrderId() + "-" + x.getAddressType(),
-                            Function.identity(), 
+                            Function.identity(),
                             (x, y) -> x));
         }
         return Maps.newHashMap();
@@ -4493,7 +4508,7 @@ public class KwtWaybillOrderV1Service {
                     .filter(Objects::nonNull)
                     .collect(Collectors.toMap(
                             x -> x.getLOrderId() + "-" + x.getUnitType(),
-                            Function.identity(), 
+                            Function.identity(),
                             (x, y) -> x));
         }
         return Maps.newHashMap();
@@ -4505,7 +4520,7 @@ public class KwtWaybillOrderV1Service {
     private List<KwtWaybillOrderNode> processNodes(List<KwtWaybillOrderNode> nodes) {
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(nodes)) {
             return nodes.stream()
-                    .filter(x -> Objects.nonNull(x) && Objects.nonNull(x.getWeighbridgeId()) && 
+                    .filter(x -> Objects.nonNull(x) && Objects.nonNull(x.getWeighbridgeId()) &&
                                 Objects.nonNull(x.getRemark()) && x.getRemark().contains("称重"))
                     .sorted(Comparator.comparing(KwtWaybillOrderNode::getCreateTime))
                     .collect(Collectors.toList());
@@ -4539,7 +4554,7 @@ public class KwtWaybillOrderV1Service {
                 .filter(Objects::nonNull)
                 .collect(Collectors.toMap(
                         ticket -> ticket.getWOrderId() + "-" + ticket.getType(),
-                        Function.identity(), 
+                        Function.identity(),
                         (x, y) -> x));
     }
 
@@ -4548,7 +4563,7 @@ public class KwtWaybillOrderV1Service {
 
     /**
      * 构建运单详情响应对象
-     * 
+     *
      * @param subtask 运单子任务信息
      * @param billOrder 运单主信息
      * @param logOrder 物流订单信息
@@ -5473,11 +5488,11 @@ public class KwtWaybillOrderV1Service {
      */
     public WaybillOrderNodeVo queryWaybillOrderNodeTimeline(WaybillOrderNodeReq req) {
         log.info("查询运单节点轨迹,请求参数:{}", JSON.toJSONString(req));
-        
+
         // 查询节点轨迹数据
         List<KwtWaybillOrderNode> nodes = kwtWaybillOrderNodeRepository.queryNodesByOrderId(
                 req.getWOrderId(), req.getWSubtaskId());
-        
+
         if (CollectionUtils.isEmpty(nodes)) {
             return new WaybillOrderNodeVo();
         }
@@ -5557,7 +5572,7 @@ public class KwtWaybillOrderV1Service {
      * 构建状态描述文本
      * 格式:车辆【川A5478C】司机【张三】装载货物【铁矿石】【参运】【28.70吨】
      */
-    private String buildStatusDescription(KwtWaybillOrderNode node, 
+    private String buildStatusDescription(KwtWaybillOrderNode node,
                                           KwtWaybillOrderSubtask subtask,
                                           Map<Long, KwtLogisticsOrderGoods> goodsMap,
                                           Map<String, String> unitMap) {
@@ -5615,7 +5630,7 @@ public class KwtWaybillOrderV1Service {
         if (status == null || subtask == null) {
             return "";
         }
-        
+
         // 根据状态返回不同的重量
         // CarWaybillV1Enum: 1-已接单, 5-到达装货点, 10-已装货, 15-已离场, 20-已卸货, 25-已完成, 30-审核驳回, 99-已取消
         if (status.equals(CarWaybillV1Enum.WAIT_LOADING.getCode())) {
@@ -5628,7 +5643,7 @@ public class KwtWaybillOrderV1Service {
             // 20-已卸货-卸货显示实卸量
             return String.valueOf(subtask.getUnloadAmount());
         }
-        
+
         return "";
     }
 
@@ -5644,7 +5659,7 @@ public class KwtWaybillOrderV1Service {
         // 暂时返回经纬度格式
         return String.format("经度:%s, 纬度:%s", lng, lat);
     }
-    
+
     /**
      * 根据运单号模糊查询运单ID和运单号列表
      *
@@ -5654,7 +5669,7 @@ public class KwtWaybillOrderV1Service {
     public List<WaybillOrderSimpleVo> queryWaybillOrderListByWOrderNo(String wOrderNo) {
         // 查询运单数据
         List<KwtWaybillOrder> waybillOrders = kwtWaybillOrderRepository.queryWaybillOrderListByWOrderNo(wOrderNo);
-        
+
         // 转换为VO
         return waybillOrders.stream()
                 .map(order -> {

+ 25 - 1
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderV1Mapper.xml

@@ -517,4 +517,28 @@
         where kwos.del_flag = 0 and kwo.status = 502
         and klo.id = #{lOrderId, jdbcType=BIGINT}
     </select>
-</mapper>
+
+    <select id="saleSum" resultType="com.sckw.transport.model.vo.WaybillOrderSaleDto">
+        SELECT ROUND(SUM(b.unload_amount), 0)                   AS chl,
+               ROUND(SUM(b.unload_amount * klo.goods_price), 0) AS xsl
+        FROM kwt_waybill_order a
+                 INNER JOIN kwt_waybill_order_subtask b
+                            ON a.id = b.w_order_id AND b.del_flag = 0
+                 INNER JOIN kwt_logistics_order klo
+                            ON klo.id = a.l_order_id AND klo.del_flag = 0
+                 INNER JOIN kwt_logistics_order_goods klog
+                            ON klog.l_order_id = a.l_order_id AND klog.del_flag = 0
+        <where>
+            a.del_flag = 0
+              AND b.status = 25              -- 已完成
+              AND b.update_time >= CURDATE() -- 今日完成
+              AND b.update_time &lt; CURDATE() + INTERVAL 1 DAY
+            <if test="list != null and list.size() != 0">
+                AND klog.goods_type IN
+                <foreach collection="list" open="(" close=")" separator="," item="item">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
+</mapper>