Parcourir la source

Merge remote-tracking branch 'origin/dev_20251130' into dev_20251130

# Conflicts:
#	sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java
donglang il y a 1 mois
Parent
commit
5fd983f920
81 fichiers modifiés avec 2151 ajouts et 801 suppressions
  1. 68 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/BaseIotResult.java
  2. 0 1
      sckw-gateway/src/main/java/com/sckw/gateway/exception/GatewayGlobalExceptionHandler.java
  3. 4 2
      sckw-gateway/src/main/java/com/sckw/gateway/utils/GatewayExceptionUtil.java
  4. 20 0
      sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/RemoteContractService.java
  5. 147 0
      sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/vo/KwcContractLogisticsDto.java
  6. 4 0
      sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/model/vo/RTruckVo.java
  7. 1 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java
  8. 20 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/feign/TradeOrderApi.java
  9. 26 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/TradeOrderPara.java
  10. 47 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/TradeOrderVo.java
  11. 1 1
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/EntCacheResDto.java
  12. 1 1
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/KwsEnterpriseResDto.java
  13. 4 3
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/feign/VehicleTraceClient.java
  14. 84 3
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/feign/VehicleTraceFeignConfig.java
  15. 59 0
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/dto/LocalDateTimeDeserializer.java
  16. 6 1
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/dto/VehicleReturnData.java
  17. 48 0
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/param/AddLogisticOrderParam.java
  18. 1 18
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/param/LogisticInfo.java
  19. 3 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dao/KwcContractTradeMapper.java
  20. 24 4
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dubbo/RemoteContractServiceImpl.java
  21. 1 3
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsRepository.java
  22. 3 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsUnitRepository.java
  23. 2 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeGoodsRepository.java
  24. 1 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeUnitRepository.java
  25. 30 4
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractLogisticsService.java
  26. 159 134
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractTradeService.java
  27. 26 0
      sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractTradeMapper.xml
  28. 12 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckController.java
  29. 13 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckRouteController.java
  30. 1 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dubbo/RemoteFleetServiceImpl.java
  31. 39 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/QueryTruckRouteByDriverReq.java
  32. 37 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/QueryTruckRoteVo.java
  33. 44 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/TruckBusinessStatusStatisticsVo.java
  34. 2 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/TruckRoteDetailVo.java
  35. 25 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckRepository.java
  36. 16 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckRouteRepository.java
  37. 65 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckRouteService.java
  38. 30 4
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java
  39. 2 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderController.java
  40. 4 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderMapper.java
  41. 35 4
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java
  42. 26 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/feign/TradeOrderApiImpl.java
  43. 2 2
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/TradeOrderAppStatisticParamDTO.java
  44. 17 2
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/TradeOrderListSelectDTO.java
  45. 1 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderDetailRes.java
  46. 6 13
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderListResVO.java
  47. 6 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/repository/KwoTradeOrderRepository.java
  48. 172 299
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  49. 111 131
      sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderMapper.xml
  50. 5 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/res/GoodsEntInfo.java
  51. 15 9
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java
  52. 2 2
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/pojo/FindPojoParam.java
  53. 2 3
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/EntFindPageReqVo.java
  54. 5 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/SysDictResp.java
  55. 10 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/SysDictTypeRepository.java
  56. 24 13
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java
  57. 23 5
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/SysDictFlexBusinessService.java
  58. 10 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwfTruckTraceController.java
  59. 12 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java
  60. 9 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java
  61. 46 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/AddLogisticOrderDTO.java
  62. 23 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/GenerateTraceReq.java
  63. 1 19
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticData.java
  64. 2 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/MapVehicleQueryReq.java
  65. 18 6
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/VehicleExceptionQueryReq.java
  66. 1 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/VehicleRouteData.java
  67. 31 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillOrderSelectReq.java
  68. 13 9
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/VehiclesTrajectoryReq.java
  69. 10 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/MapVehicleVo.java
  70. 53 15
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/VehicleExceptionVo.java
  71. 35 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderSelectOptionVo.java
  72. 2 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderRepository.java
  73. 45 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtVehicleExceptionRepository.java
  74. 30 6
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java
  75. 27 5
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtAcceptCarriageOrderService.java
  76. 65 19
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  77. 28 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java
  78. 6 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java
  79. 48 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/VehicleExceptionService.java
  80. 93 36
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java
  81. 1 1
      sckw-modules/sckw-transport/src/main/resources/bootstrap.yml

+ 68 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/BaseIotResult.java

@@ -0,0 +1,68 @@
+package com.sckw.core.web.response;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Author: donglang
+ * @CreateTime: 2025-10-09
+ * @Description: 返回模型
+ * @Version: 1.0
+ */
+
+@Data
+public class BaseIotResult<T> implements Serializable {
+
+
+    /**
+     * 处理是否成功
+     */
+    protected boolean success = true;
+
+    /**
+     * 错误码
+     */
+    protected String code;
+
+    /**
+     * 错误信息
+     */
+    protected String message;
+
+    /**
+     * 业务数据
+     */
+    protected T data;
+
+    /**
+     * 构建成功结果,包含具体信息
+     */
+    public static <T> BaseIotResult<T> success(T data) {
+        BaseIotResult<T> result = new BaseIotResult<>();
+        result.setSuccess(true);
+        result.setCode("0");
+        result.setData(data);
+        return result;
+    }
+
+    /**
+     * 构建成功结果,无返回具体信息
+     */
+    public static <T> BaseIotResult<T> success() {
+        return success(null);
+    }
+
+    /**
+     * 构建失败结果,返回错误信息
+     */
+    public static <T> BaseIotResult<T> error(String code, String message) {
+        BaseIotResult<T> result = new BaseIotResult<>();
+        result.setSuccess(false);
+        result.setCode(code);
+        result.setMessage(message);
+        return result;
+    }
+
+}

+ 0 - 1
sckw-gateway/src/main/java/com/sckw/gateway/exception/GatewayGlobalExceptionHandler.java

@@ -83,7 +83,6 @@ public class GatewayGlobalExceptionHandler implements ErrorWebExceptionHandler {
         HttpResult result = GatewayExceptionUtil.buildServiceUnavailableResponse(request, throwable);
         response.setStatusCode(HttpStatus.OK);
         response.getHeaders().setContentType(MediaType.APPLICATION_JSON);
-
         // 记录异常日志
         log.warn("网关统一异常处理: 路径={}, 方法={}, 响应={}", path, method, result);
 

+ 4 - 2
sckw-gateway/src/main/java/com/sckw/gateway/utils/GatewayExceptionUtil.java

@@ -29,12 +29,14 @@ public class GatewayExceptionUtil {
             org.springframework.web.server.ResponseStatusException statusException =
                     (org.springframework.web.server.ResponseStatusException) throwable;
             if (statusException.getStatusCode().value() == 503) {
-                return HttpResult.error(60500, "服务暂时不可用,请稍后重试");
+                return HttpResult.error(60500, "服务请求异常,请稍后重试");
+            }else{
+                return HttpResult.error(60500, "服务请求异常,请稍后重试["+statusException.getStatusCode().value()+"]");
             }
         }
 
         // 默认返回服务不可用
-        return HttpResult.error(60500, "服务暂时不可用,请稍后重试");
+        return HttpResult.error(60500, "服务请求异常,请稍后重试");
     }
 
     /**

+ 20 - 0
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/RemoteContractService.java

@@ -1,6 +1,7 @@
 package com.sckw.contract.api;
 
 import com.sckw.contract.api.model.dto.res.*;
+import com.sckw.contract.api.model.vo.KwcContractLogisticsDto;
 import com.sckw.contract.api.model.vo.TradeContractGoodsDto;
 import com.sckw.contract.api.model.vo.TradeContractResDto;
 
@@ -76,6 +77,15 @@ public interface RemoteContractService {
      */
     TradeContractGoodsDto queryTradeContractNew(Long entId, Long goodsId, LocalDateTime time);
 
+    /**
+     * 查询签约的商品
+     *
+     * @param entId
+     * @param time
+     * @return
+     */
+    List<Long> querySignTradeContract(Long entId, LocalDateTime time);
+
     /**
      * 查询物流合同信息
      */
@@ -85,4 +95,14 @@ public interface RemoteContractService {
      * 查询贸易合同信息
      */
     List<ContractTradeOrderInfo> queryContractTradeOrder(ContractTradeOrderDto contractTradeOrderDto);
+
+    /**
+     * 查询合同关联的商品信息
+     *
+     * @param contractId
+     * @return
+     */
+    List<Long> queryTradeContractInfo(Long contractId);
+
+    KwcContractLogisticsDto queryContractByContractId(Long contractId);
 }

+ 147 - 0
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/vo/KwcContractLogisticsDto.java

@@ -0,0 +1,147 @@
+package com.sckw.contract.api.model.vo;
+
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 物流合同(承运合同/托运合同)
+ * @TableName kwc_contract_logistics
+ */
+@Data
+public class KwcContractLogisticsDto implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 7160755505692180593L;
+    /**
+     * 主键
+     */
+
+    private Long id;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 合同编号
+     */
+    private String contractNo;
+
+    /**
+     * 合同名称
+     */
+    private String name;
+
+    /**
+     * 签约方式
+     */
+    private Integer signingWay;
+
+    /**
+     * 计费方式(1按装货量、2按卸货量、3按车次)
+     */
+    private Integer charging;
+
+    /**
+     * 交易方式(1预付款、2货到付款)
+     */
+    private Integer trading;
+
+    /**
+     * 派车方式(1手动派车、2自动派车)
+     */
+    private Integer dispatching;
+    /**
+     * 开始日期
+     */
+    private Date startTime;
+
+    /**
+     * 结束日期
+     */
+    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
+    private Date endTime;
+
+    /**
+     * 数量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 履行量
+     */
+    private BigDecimal performedAmount;
+
+    /**
+     * 签署文件
+     */
+    private String signingUrl;
+
+    /**
+     * 已签署文件
+     */
+    private String signedUrl;
+
+    /**
+     * 签约编号
+     */
+    private String signingNo;
+
+    /**
+     * 合同关联id
+     */
+    private Long contractPid;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 用户状态  0已签约 1已完结 2已保存(草稿) 3签约中
+     */
+    private Integer status;
+
+    /**
+     * 创建人
+     */
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 修改人
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 是否删除(0未删除,1删除)
+     */
+    private Integer delFlag;
+
+    /**
+     * 业务id
+     */
+    private String businessId;
+    /**
+     * 通用价格
+     */
+    private BigDecimal commonPrice;
+
+}

+ 4 - 0
sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/model/vo/RTruckVo.java

@@ -84,4 +84,8 @@ public class RTruckVo implements Serializable {
      * 车辆状态
      */
     private Integer status;
+     /**
+     * 能源类型
+     */
+    private Integer energyType;
 }

+ 1 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java

@@ -129,6 +129,7 @@ public interface TradeOrderInfoService {
     Boolean associateEnt(Long firstEntId, Long secondEntId);
 
     OrderDetailVo queryByTradeOrderId(Long tradeOrderId);
+    List<OrderDetailVo> queryByTradeOrderIds(Set<Long> tradeOrderId);
 
     /**
      * 通交易订单id查询交易订单采购/销售企业信息     * @param tradeOrderId

+ 20 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/feign/TradeOrderApi.java

@@ -0,0 +1,20 @@
+package com.sckw.order.api.feign;
+
+import com.sckw.order.api.model.TradeOrderPara;
+import com.sckw.order.api.model.TradeOrderVo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+import java.util.List;
+
+/**
+ * @author xucaiqin
+ * @date 2025-12-01 15:26:28
+ */
+@FeignClient(name = "sckw-order-ai", contextId = "tradeOrderApi")
+public interface TradeOrderApi {
+
+    @GetMapping(value = "/trade/order/get")
+    List<TradeOrderVo> queryTradeOrder(TradeOrderPara tradeOrderPara);
+
+}

+ 26 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/TradeOrderPara.java

@@ -0,0 +1,26 @@
+package com.sckw.order.api.model;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Getter
+@Setter
+@ToString
+public class TradeOrderPara implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 6909518527687999256L;
+    @NotNull(message = "开始时间不能为空")
+    private LocalDateTime startTime;
+    @NotNull(message = "开始时间不能为空")
+    private LocalDateTime endTime;
+
+    private List<Long> entId;
+}

+ 47 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/TradeOrderVo.java

@@ -0,0 +1,47 @@
+package com.sckw.order.api.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Getter
+@Setter
+@ToString
+public class TradeOrderVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 6909518527687999256L;
+    private Integer status;
+    private String statusLabel;
+    @JsonProperty("tOrderNo")
+    private String tOrderNo;
+    /**
+     * 采购企业
+     */
+    private String buyEntName;
+    /**
+     * 供应企业
+     */
+    private String sellEntName;
+    private String goodsName;
+    private String goodsType;
+    private String goodsTypeLabel;
+    private BigDecimal unitPrice;
+    private Integer unit;
+    private String unitLabel;
+    private BigDecimal amount;
+    private BigDecimal price;
+    private BigDecimal loadAmount;
+    private BigDecimal unloadAmount;
+    private Integer chargeType;
+    private String chargeTypeLabel;
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+}

+ 1 - 1
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/EntCacheResDto.java

@@ -139,5 +139,5 @@ public class EntCacheResDto implements Serializable {
      * 专属客户经理(用户ID)
      */
     private Long manager;
-
+    private String website;
 }

+ 1 - 1
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/KwsEnterpriseResDto.java

@@ -166,6 +166,6 @@ public class KwsEnterpriseResDto implements Serializable {
      * 主营业务
      */
     private String business;
-
+    private String website;
 
 }

+ 4 - 3
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/feign/VehicleTraceClient.java

@@ -1,5 +1,6 @@
 package com.sckw.transport.api.feign;
 
+import com.sckw.core.web.response.BaseIotResult;
 import com.sckw.core.web.response.BaseResult;
 import com.sckw.transport.api.model.dto.VehicleDataDTO;
 import com.sckw.transport.api.model.dto.VehicleReturnData;
@@ -32,7 +33,7 @@ public interface VehicleTraceClient {
      * @return 车辆位置信息
      */
     @PostMapping("/queryRealTimeLocation")
-    BaseResult<VehicleReturnData> queryRealTimeLocation(@RequestBody VehicleDataDTO vehicleDataDTO);
+    BaseIotResult<VehicleReturnData> queryRealTimeLocation(@RequestBody VehicleDataDTO vehicleDataDTO);
 
     /**
      * 查询车辆轨迹列表
@@ -40,7 +41,7 @@ public interface VehicleTraceClient {
      * @return 车辆轨迹列表
      */
     @PostMapping("/queryVehicleDataList")
-    BaseResult<List<VehicleReturnData>> queryVehicleDataList(@RequestBody VehicleDataDTO vehicleDataDTO);
+    BaseIotResult<List<VehicleReturnData>> queryVehicleDataList(@RequestBody VehicleDataDTO vehicleDataDTO);
 
     /**
      * 上报车辆轨迹
@@ -48,5 +49,5 @@ public interface VehicleTraceClient {
      * @return 上报结果
      */
     @PostMapping("/saveVehicleData")
-    BaseResult<Void> saveVehicleData(@RequestBody Object request);
+    BaseIotResult<Void> saveVehicleData(@RequestBody Object request);
 }

+ 84 - 3
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/feign/VehicleTraceFeignConfig.java

@@ -1,13 +1,27 @@
 package com.sckw.transport.api.feign;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
 import feign.Logger;
 import feign.Request;
+import feign.Response;
 import feign.Retryer;
+import feign.codec.Decoder;
 import feign.codec.ErrorDecoder;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.ObjectFactory;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.cloud.openfeign.support.ResponseEntityDecoder;
+import org.springframework.cloud.openfeign.support.SpringDecoder;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+import org.springframework.util.StreamUtils;
 
+import java.io.IOException;
+import java.lang.reflect.Type;
+import java.nio.charset.StandardCharsets;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -56,9 +70,76 @@ public class VehicleTraceFeignConfig {
     @Bean
     public ErrorDecoder errorDecoder() {
         return (methodKey, response) -> {
-            log.error("车辆轨迹服务调用失败, 方法: {}, 状态码: {}", 
-                methodKey, response.status());
-            return new RuntimeException("车辆轨迹服务调用失败: " + response.reason());
+            String responseBody = "";
+            try {
+                if (response.body() != null) {
+                    responseBody = new String(StreamUtils.copyToByteArray(response.body().asInputStream()), StandardCharsets.UTF_8);
+                }
+            } catch (IOException e) {
+                log.warn("读取响应体失败", e);
+            }
+            log.error("车辆轨迹服务调用失败, 方法: {}, 状态码: {}, 响应体: {}", 
+                methodKey, response.status(), responseBody);
+            return new RuntimeException("车辆轨迹服务调用失败: " + response.reason() + ", 响应: " + responseBody);
+        };
+    }
+
+    /**
+     * 自定义 Feign 解码器,支持 Java 8 时间类型(LocalDateTime 等)
+     * 支持 ISO 8601 格式:2025-12-05T00:00:00.000+00:00
+     */
+    @Bean
+    public Decoder feignDecoder() {
+        ObjectMapper objectMapper = new ObjectMapper();
+        // 注册 Java 8 时间模块(自动支持 ISO 8601 格式)
+        objectMapper.registerModule(new JavaTimeModule());
+        // 禁用将日期写为时间戳(使用 ISO 8601 字符串格式)
+        objectMapper.disable(com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+        // 忽略未知属性,避免外部服务返回多余字段导致解析失败
+        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        // 允许空对象
+        objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
+        // 允许单值作为数组
+        objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
+        // 允许空值
+        objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true);
+        
+        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(objectMapper);
+        ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(converter);
+        
+        // 包装解码器,添加错误日志
+        Decoder defaultDecoder = new ResponseEntityDecoder(new SpringDecoder(objectFactory));
+        return new Decoder() {
+            @Override
+            public Object decode(Response response, Type type) throws IOException {
+                // 先保存响应体内容,以便在解码失败时记录日志
+                String responseBody = "";
+                byte[] bodyBytes = null;
+                if (response.body() != null) {
+                    try {
+                        bodyBytes = StreamUtils.copyToByteArray(response.body().asInputStream());
+                        responseBody = new String(bodyBytes, StandardCharsets.UTF_8);
+                    } catch (IOException ex) {
+                        log.warn("读取响应体失败", ex);
+                    }
+                }
+                
+                try {
+                    // 使用保存的响应体重新构建 Response,因为流已经被读取
+                    if (bodyBytes != null) {
+                        Response rebuiltResponse = response.toBuilder()
+                            .body(bodyBytes)
+                            .build();
+                        return defaultDecoder.decode(rebuiltResponse, type);
+                    } else {
+                        return defaultDecoder.decode(response, type);
+                    }
+                } catch (Exception e) {
+                    log.error("Feign 解码失败, 类型: {}, 状态码: {}, 响应体: {}, 错误: {}", 
+                        type, response.status(), responseBody, e.getMessage(), e);
+                    throw e;
+                }
+            }
         };
     }
 }

+ 59 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/dto/LocalDateTimeDeserializer.java

@@ -0,0 +1,59 @@
+package com.sckw.transport.api.model.dto;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.time.OffsetDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
+
+/**
+ * 自定义 LocalDateTime 反序列化器
+ * 支持解析带时区的 ISO 8601 格式(如:2025-12-05T00:00:00.000+00:00)
+ * 自动转换为 LocalDateTime(忽略时区信息)
+ */
+@Slf4j
+public class LocalDateTimeDeserializer extends StdDeserializer<LocalDateTime> {
+
+    private static final long serialVersionUID = 1L;
+
+    public LocalDateTimeDeserializer() {
+        super(LocalDateTime.class);
+    }
+
+    @Override
+    public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
+        String dateTimeStr = p.getText();
+        if (dateTimeStr == null || dateTimeStr.trim().isEmpty()) {
+            return null;
+        }
+
+        dateTimeStr = dateTimeStr.trim();
+
+        // 优先尝试解析带时区的格式(如:2025-12-05T00:00:00.000+00:00)
+        // OffsetDateTime 可以解析带时区偏移的 ISO 8601 格式
+        try {
+            OffsetDateTime offsetDateTime = OffsetDateTime.parse(dateTimeStr);
+            return offsetDateTime.toLocalDateTime();
+        } catch (DateTimeParseException e) {
+            // 如果解析失败,尝试不带时区的格式
+            try {
+                // 尝试解析不带时区的 ISO 格式(如:2025-12-05T00:00:00 或 2025-12-05T00:00:00.000)
+                return LocalDateTime.parse(dateTimeStr, DateTimeFormatter.ISO_LOCAL_DATE_TIME);
+            } catch (DateTimeParseException e2) {
+                // 尝试其他常见格式
+                try {
+                    return LocalDateTime.parse(dateTimeStr, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+                } catch (DateTimeParseException e3) {
+                    log.error("所有时间格式解析失败: {}", dateTimeStr, e3);
+                    throw new IOException("无法解析时间字符串: " + dateTimeStr, e3);
+                }
+            }
+        }
+    }
+}
+

+ 6 - 1
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/dto/VehicleReturnData.java

@@ -1,9 +1,11 @@
 package com.sckw.transport.api.model.dto;
 
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.sql.Timestamp;
 import java.time.LocalDateTime;
 
 /**
@@ -19,8 +21,11 @@ public class VehicleReturnData implements Serializable {
 
     /**
      * 时间戳
+     * IoT平台返回ISO 8601格式:2025-12-05T00:00:00.000+00:00
+     * 使用自定义反序列化器支持带时区的格式
      */
-    private LocalDateTime ts;
+   // @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private Timestamp ts;
 
     /**
      * 车牌号

+ 48 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/param/AddLogisticOrderParam.java

@@ -1,5 +1,6 @@
 package com.sckw.transport.api.model.param;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import jakarta.validation.constraints.Max;
 import jakarta.validation.constraints.Min;
 import jakarta.validation.constraints.NotBlank;
@@ -9,6 +10,7 @@ import lombok.Data;
 import java.io.Serial;
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.List;
 
 
@@ -38,6 +40,32 @@ public class AddLogisticOrderParam implements Serializable {
      */
     @NotBlank(message = "订单编号不能为空")
     private String tradeOrderNo;
+
+    /**
+     * 非托运方单位
+     */
+    @NotBlank(message = "非托运方单位名称不能为空")
+    private String nonConsignCompany;
+    /**
+     * 非托运方单位id
+     */
+    @NotBlank(message = "非托运方单位id不能为空")
+    private Long nonConsignCompanyId;
+    /**
+     * 非托运方联系电话
+     */
+    @NotBlank(message = "非托运方联系电话不能为空")
+    private String nonConsignContactPhone;
+    /**
+     * 非托运方联系人
+     */
+    @NotBlank(message = "非托运方联系人不能为空")
+    private String nonConsignContacts;
+    /**
+     * 非托运方联系人id
+     */
+    @NotBlank(message = "非托运方联系人id不能为空")
+    private Long nonConsignContactsId;
     /**
      * 托运单位
      */
@@ -190,4 +218,24 @@ public class AddLogisticOrderParam implements Serializable {
      */
     @NotBlank(message = "经度不能为空")
     private String unloadLng;
+
+    /**
+     * 计费方式
+     */
+    @NotNull(message = "计费方式不能为空")
+    private String billingMode;
+
+    /**
+     * 计划卸货时间
+     */
+    @NotNull(message = "计划卸货时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate endTime;
+
+    /**
+     * 计划发货时间
+     */
+    @NotNull(message = "计划发货时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate startTime;
 }

+ 1 - 18
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/param/LogisticInfo.java

@@ -74,19 +74,6 @@ public class LogisticInfo implements Serializable {
         private Long priceType;
 
 
-        /**
-         * 计划卸货时间
-         */
-        @NotNull(message = "计划卸货时间不能为空")
-        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-        private LocalDate endTime;
-
-        /**
-         * 计划发货时间
-         */
-        @NotNull(message = "计划发货时间不能为空")
-        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-        private LocalDate startTime;
 
 
         /**
@@ -125,11 +112,7 @@ public class LogisticInfo implements Serializable {
          */
         @NotBlank(message = "合理损耗单位不能为空")
         private String lossUnit;
-        /**
-         * 计费方式
-         */
-        @NotNull(message = "计费方式不能为空")
-        private String billingMode;
+
 
         /**
          * 备注

+ 3 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dao/KwcContractTradeMapper.java

@@ -60,6 +60,9 @@ public interface KwcContractTradeMapper extends BaseMapper<KwcContractTrade> {
      * @return
      */
     TradeContractGoodsDto queryNewSignPrice(@Param("entId") Long entId, @Param("goodsId") Long goodsId, @Param("time")LocalDateTime time);
+    List<Long> querySignTradeContract(@Param("entId") Long entId,  @Param("time")LocalDateTime time);
+
+    List<Long> selectByContract(@Param("contractId") Long contractId);
 }
 
 

+ 24 - 4
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dubbo/RemoteContractServiceImpl.java

@@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.google.common.collect.Sets;
 import com.sckw.contract.api.RemoteContractService;
 import com.sckw.contract.api.model.dto.res.*;
-import com.sckw.contract.api.model.vo.GoodsInfoDto;
-import com.sckw.contract.api.model.vo.TradeContractGoodsDto;
-import com.sckw.contract.api.model.vo.TradeContractResDto;
-import com.sckw.contract.api.model.vo.TradeContractUnitDto;
+import com.sckw.contract.api.model.vo.*;
 import com.sckw.contract.dao.*;
 import com.sckw.contract.model.dto.res.QueryContractValidCountResDto;
 import com.sckw.contract.model.entity.*;
@@ -279,6 +276,11 @@ public class RemoteContractServiceImpl implements RemoteContractService {
         return kwcContractTradeMapper.queryNewSignPrice(entId, goodsId, time);
     }
 
+    @Override
+    public List<Long> querySignTradeContract(Long entId, LocalDateTime time) {
+        return kwcContractTradeMapper.querySignTradeContract(entId, time);
+    }
+
     @Override
     public List<ContractLogisticsOrderResDto> queryContractLogisticsOrder(LogisticsOrderDto logisticsOrderDto) {
         log.info("查询物流合同请求:{}", JSON.toJSONString(logisticsOrderDto));
@@ -293,6 +295,24 @@ public class RemoteContractServiceImpl implements RemoteContractService {
         return kwcContractTradeService.queryContractTradeOrder(contractTradeOrderDto);
     }
 
+    @Override
+    public List<Long> queryTradeContractInfo(Long contractId) {
+        return kwcContractTradeService.queryTradeContractInfo(contractId);
+    }
+
+    @Override
+    public KwcContractLogisticsDto queryContractByContractId(Long contractId) {
+        KwcContractLogistics kwcContractTrade = kwcContractLogisticsMapper.selectById(contractId);
+        if (Objects.nonNull(kwcContractTrade)) {
+            KwcContractLogisticsDto tradeContractResDto = new KwcContractLogisticsDto();
+            tradeContractResDto.setId(kwcContractTrade.getId());
+            tradeContractResDto.setName(kwcContractTrade.getName());
+            tradeContractResDto.setContractNo(kwcContractTrade.getContractNo());
+            return tradeContractResDto;
+        }
+        return new KwcContractLogisticsDto();
+    }
+
 
     private ContractCommonInfoResDto fillContractLogistics(KwcContractLogistics kwcContractLogistics) {
         ContractCommonInfoResDto contractCommonInfoResDto = new ContractCommonInfoResDto();

+ 1 - 3
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsRepository.java

@@ -60,9 +60,7 @@ public class KwcContractLogisticsRepository extends ServiceImpl<KwcContractLogis
     }
 
     public Boolean updateLogistics(KwcContractLogistics updateLogistics) {
-       return update(updateLogistics,
-                Wrappers.<KwcContractLogistics>lambdaQuery()
-                        .eq(KwcContractLogistics::getId, updateLogistics.getId()));
+       return updateById(updateLogistics);
     }
 
     public List<KwcContractLogistics> queryByEntId(Long entId) {

+ 3 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsUnitRepository.java

@@ -10,6 +10,7 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 
 /**
@@ -55,9 +56,10 @@ public class KwcContractLogisticsUnitRepository extends ServiceImpl<KwcContractL
                 .eq(KwcContractLogisticsUnit::getDelFlag,0));
     }
 
-    public List<KwcContractLogisticsUnit> queryByEntIds(List<Long> entIdList) {
+    public List<KwcContractLogisticsUnit> queryByEntIds(List<Long> entIdList,Integer entType) {
        return list(Wrappers.<KwcContractLogisticsUnit>lambdaQuery()
                 .eq(KwcContractLogisticsUnit::getDelFlag,0)
+                .eq(Objects.nonNull(entType),KwcContractLogisticsUnit::getUnitType, entType)
                 .in(KwcContractLogisticsUnit::getEntId, entIdList));
     }
 }

+ 2 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeGoodsRepository.java

@@ -7,6 +7,7 @@ import com.sckw.contract.model.entity.KwcContractTradeGoods;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 
 /**
@@ -47,6 +48,6 @@ public class KwcContractTradeGoodsRepository extends ServiceImpl<KwcContractTrad
         return list(Wrappers.<KwcContractTradeGoods>lambdaQuery()
                 .eq(KwcContractTradeGoods::getDelFlag,0)
                 .in(KwcContractTradeGoods::getContractId, contractIds)
-                .eq(KwcContractTradeGoods::getGoodsId, goodsId));
+                .eq(Objects.nonNull(goodsId),KwcContractTradeGoods::getGoodsId, goodsId));
     }
 }

+ 1 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeUnitRepository.java

@@ -8,6 +8,7 @@ import com.sckw.contract.model.entity.KwcContractTradeUnit;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 
 /**

+ 30 - 4
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractLogisticsService.java

@@ -1065,20 +1065,31 @@ public class KwcContractLogisticsService {
 
         List<Long> entIdList = Lists.newArrayList();
         entIdList.add(entId);
+        Integer type = null;
         if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getConsignCompanyId())){
             entIdList.add(Long.valueOf(req.getConsignCompanyId()));
+            type = CooperateTypeEnum.CONSIGN.getCode();
         }
         if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getCarriageCompanyId())){
             entIdList.add(Long.valueOf(req.getCarriageCompanyId()));
+            type = CooperateTypeEnum.CARRIAGE.getCode();
         }
         //查询物流企业
         Set<Long> contractIdList = Sets.newHashSet();
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(entIdList)){
-            List<KwcContractLogisticsUnit> units = kwcContractLogisticsUnitRepository.queryByEntIds(entIdList);
+            List<KwcContractLogisticsUnit> units = kwcContractLogisticsUnitRepository.queryByEntIds(entIdList, type);
             if (CollectionUtils.isNotEmpty(units)) {
-                contractIdList = units.stream().map(KwcContractLogisticsUnit::getContractId).collect(Collectors.toSet());
+                Set<Long> contractIds = units.stream().filter(x -> Objects.equals(x.getEntId(), entId))
+                        .map(KwcContractLogisticsUnit::getContractId)
+                        .collect(Collectors.toSet());
+                contractIdList = units.stream()
+                        .filter(x->contractIds.contains(x.getContractId()))
+                        .map(KwcContractLogisticsUnit::getContractId).collect(Collectors.toSet());
             }
         }
+        if (CollectionUtils.isEmpty(contractIdList) && CollectionUtils.isNotEmpty(entIdList)){
+            return PageDataResult.empty(req.getPageNum(),req.getPageSize());
+        }
 
         IPage<KwcContractLogistics> page =kwcContractLogisticsRepository.queryByPage(req.getPageNum(),req.getPageSize(),
                 req.getContractNo(),
@@ -1564,20 +1575,35 @@ public class KwcContractLogisticsService {
         }
         List<Long> entIdList = Lists.newArrayList();
         entIdList.add(entId);
+        Integer type = null;
         if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getConsignCompanyId())){
             entIdList.add(Long.valueOf(req.getConsignCompanyId()));
+            type = CooperateTypeEnum.CONSIGN.getCode();
         }
         if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getCarriageCompanyId())){
             entIdList.add(Long.valueOf(req.getCarriageCompanyId()));
+            type = CooperateTypeEnum.CARRIAGE.getCode();
         }
         //查询物流企业
         Set<Long> contractIdList = Sets.newHashSet();
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(entIdList)){
-            List<KwcContractLogisticsUnit> units = kwcContractLogisticsUnitRepository.queryByEntIds(entIdList);
+            List<KwcContractLogisticsUnit> units = kwcContractLogisticsUnitRepository.queryByEntIds(entIdList,type);
             if (CollectionUtils.isNotEmpty(units)) {
-                contractIdList = units.stream().map(KwcContractLogisticsUnit::getContractId).collect(Collectors.toSet());
+                Set<Long> contractIds = units.stream().filter(x -> Objects.equals(x.getEntId(), entId))
+                        .map(KwcContractLogisticsUnit::getContractId)
+                        .collect(Collectors.toSet());
+                contractIdList = units.stream()
+                        .map(KwcContractLogisticsUnit::getContractId)
+                        .filter(contractId ->contractIds.contains(contractId)).collect(Collectors.toSet());
             }
         }
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(contractIdList) && org.apache.commons.collections4.CollectionUtils.isNotEmpty(entIdList)){
+            Map<Integer, List<KwcContractLogistics>> statusAndLogOrdersMap = new HashMap<>();
+            List<ContractStatusCountResp.ContractStatusCount> statusCounts = statusEnums.stream()
+                    .map(x -> getContractStatusCount(x, statusAndLogOrdersMap))
+                    .collect(Collectors.toList());
+            contractStatusCountResp.setContractStatusInfo(statusCounts);
+        }
 
         if(org.apache.commons.collections4.CollectionUtils.isEmpty(contractIdList)
                 && !org.apache.commons.lang3.StringUtils.isAllBlank(req.getConsignCompanyId(),req.getCarriageCompanyId())){

+ 159 - 134
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractTradeService.java

@@ -40,7 +40,6 @@ import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.order.api.model.ContractSignCompletedParam;
-import com.sckw.order.api.model.OrderDetailVo;
 import com.sckw.order.api.model.TradeOrderContractVo;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.product.api.model.KwpGoods;
@@ -48,7 +47,10 @@ import com.sckw.stream.enums.MessageEnum;
 import com.sckw.stream.model.UserInfo;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.RemoteUserService;
-import com.sckw.system.api.model.dto.res.*;
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
+import com.sckw.system.api.model.dto.res.EntTypeResDto;
+import com.sckw.system.api.model.dto.res.SysDictResDto;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.model.vo.RWaybillSubOrderVo;
 import jakarta.servlet.http.HttpServletResponse;
@@ -553,7 +555,7 @@ public class KwcContractTradeService {
             }
             fileList.add(JSON.toJSONString(jsonArray));
         }
-        
+
         contractTradeDetailResVo.setContractFile(fileList.stream().filter(StringUtils::isNotBlank).toList());
 
         //流程记录
@@ -906,7 +908,7 @@ public class KwcContractTradeService {
             throw new SystemException(HttpStatus.SUCCESS_CODE, "暂无数据,请确认!");
         }
 
-        List<QueryListResVo> list = getQueryListResVos(queryListResDtos,null,null);
+        List<QueryListResVo> list = getQueryListResVos(queryListResDtos, null, null);
         List<TradeListExport> dataList = BeanUtils.copyToList(list, TradeListExport.class);
         ExcelUtil.downData(response, TradeListExport.class, dataList);
     }
@@ -1090,7 +1092,7 @@ public class KwcContractTradeService {
             authEntIdList.addAll(ids);
         }
 
-        List<QueryListResDto> queryListResDtoList = kwcContractTradeMapper.queryTradeList(reqVo,authEntIdList);
+        List<QueryListResDto> queryListResDtoList = kwcContractTradeMapper.queryTradeList(reqVo, authEntIdList);
         if (CollectionUtils.isNotEmpty(queryListResDtoList)) {
             Map<Integer, List<QueryListResDto>> collect = queryListResDtoList.stream().collect(Collectors.groupingBy(QueryListResDto::getStatus));
             for (FindListGroupResVo findListGroupResVo : list) {
@@ -1123,7 +1125,7 @@ public class KwcContractTradeService {
             authEntIdList.addAll(ids);
         }
 
-        List<QueryListResDto> queryListResDtos = kwcContractTradeMapper.queryTradeList(reqVo,authEntIdList);
+        List<QueryListResDto> queryListResDtos = kwcContractTradeMapper.queryTradeList(reqVo, authEntIdList);
         if (CollectionUtils.isEmpty(queryListResDtos)) {
             throw new SystemException(HttpStatus.SUCCESS_CODE, "暂无数据,请确认!");
         }
@@ -1153,10 +1155,10 @@ public class KwcContractTradeService {
 
 
         //根据父id查询补充合同id
-        Set<Long> contractIds  = Sets.newHashSet();
+        Set<Long> contractIds = Sets.newHashSet();
         List<KwcContractTrade> kwcContractTrades = kwcContractTradeRepository.queryByPid(req.getPid());
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwcContractTrades)){
-            contractIds.addAll( kwcContractTrades.stream()
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwcContractTrades)) {
+            contractIds.addAll(kwcContractTrades.stream()
                     .map(KwcContractTrade::getId)
                     .collect(Collectors.toSet()));
         }
@@ -1166,7 +1168,7 @@ public class KwcContractTradeService {
         //查询标的信息
         //根据商品id查询标的信息和主合同
         List<KwcContractTradeGoods> kwcContractTradeGoods =
-                kwcContractTradeGoodsRepository.queryByConTractIdsGoodsIds(contractIds,goodsIds);
+                kwcContractTradeGoodsRepository.queryByConTractIdsGoodsIds(contractIds, goodsIds);
         //商品id映射商品信息(排除主合同查看是否存在补充合同的商品信息)
         Map<Long, KwcContractTradeGoods> goodsIdAndGoodsMap = kwcContractTradeGoods.stream()
                 .filter(x -> !Objects.equals(x.getContractId(), req.getPid()))
@@ -1174,24 +1176,24 @@ public class KwcContractTradeService {
         //过滤主合同查看的标信息 , 合同id商品id组成唯一key映射商品信息
         Map<String, KwcContractTradeGoods> contractTradeKeyAndGoodsMap =
                 kwcContractTradeGoods.stream().filter(x -> Objects.equals(x.getContractId(), req.getPid()))
-                .peek(x -> x.setContractIdGoodsIdKey(x.getContractId() + "-" + x.getGoodsId()))
-                .collect(Collectors.toMap(KwcContractTradeGoods::getContractIdGoodsIdKey, Function.identity(), (x, y) -> x));
+                        .peek(x -> x.setContractIdGoodsIdKey(x.getContractId() + "-" + x.getGoodsId()))
+                        .collect(Collectors.toMap(KwcContractTradeGoods::getContractIdGoodsIdKey, Function.identity(), (x, y) -> x));
 
         //商品id映射交易商品信息
         List<KwcContractTradeGoods> saveOrUpdateTradeGoods = Lists.newArrayList();
         req.getGoodsInfo().forEach(g -> {
             KwcContractTradeGoods tradeGoods = goodsIdAndGoodsMap.get(g.getGoodsId());
-            if (Objects.isNull(tradeGoods)){
+            if (Objects.isNull(tradeGoods)) {
                 //作为新增对象
-                buildTradeGoods(req, g, contractTradeKeyAndGoodsMap, saveOrUpdateTradeGoods,contactId);
+                buildTradeGoods(req, g, contractTradeKeyAndGoodsMap, saveOrUpdateTradeGoods, contactId);
 
-            }else {
+            } else {
                 //如果不为空判断时间是否重叠 存在则报错
                 if (g.getEffectiveStartTime().after(tradeGoods.getStartTime()) && g.getEffectiveStartTime().before(tradeGoods.getEndTime())
-                        || (g.getEffectiveEntTime().after(tradeGoods.getStartTime()) && g.getEffectiveEntTime().before(tradeGoods.getEndTime()))){
-                    throw new BusinessException("商品:"+g.getGoodsName() +"时间重叠,只有先结束之前的补充合同,才能进行创建;");
+                        || (g.getEffectiveEntTime().after(tradeGoods.getStartTime()) && g.getEffectiveEntTime().before(tradeGoods.getEndTime()))) {
+                    throw new BusinessException("商品:" + g.getGoodsName() + "时间重叠,只有先结束之前的补充合同,才能进行创建;");
                 }
-                buildTradeGoods(req, g, contractTradeKeyAndGoodsMap, saveOrUpdateTradeGoods,contactId);
+                buildTradeGoods(req, g, contractTradeKeyAndGoodsMap, saveOrUpdateTradeGoods, contactId);
             }
         });
 
@@ -1200,7 +1202,7 @@ public class KwcContractTradeService {
 
     private static void buildTradeGoods(SupplyContractTradeReq req, SupplyContractTradeReq.TradeGoodsInfo g,
                                         Map<String, KwcContractTradeGoods> contractTradeKeyAndGoodsMap,
-                                        List<KwcContractTradeGoods> saveTradeGoods,long contactId) {
+                                        List<KwcContractTradeGoods> saveTradeGoods, long contactId) {
         Long userId = LoginUserHolder.getUserId();
         Date date = new Date();
         KwcContractTradeGoods saveSupplyTradeGoods = new KwcContractTradeGoods();
@@ -1223,7 +1225,7 @@ public class KwcContractTradeService {
 
         KwcContractTradeGoods tradeGoodsData =
                 contractTradeKeyAndGoodsMap.get(req.getPid() + "-" + g.getGoodsId());
-        if (Objects.nonNull(tradeGoodsData)){
+        if (Objects.nonNull(tradeGoodsData)) {
             KwcContractTradeGoods mainTradeGoods = new KwcContractTradeGoods();
             mainTradeGoods.setId(tradeGoodsData.getId());
             mainTradeGoods.setPrice(g.getPrice());
@@ -1233,7 +1235,7 @@ public class KwcContractTradeService {
         saveTradeGoods.add(saveSupplyTradeGoods);
     }
 
-    private void saveTradeContract(SupplyContractTradeReq req,long contactId) {
+    private void saveTradeContract(SupplyContractTradeReq req, long contactId) {
         SupplyContractTradeReq.TradeBaseInfo baseInfo = req.getBaseInfo();
         List<SupplyContractTradeReq.TradeGoodsInfo> goodsInfo = req.getGoodsInfo();
         Date date = new Date();
@@ -1282,27 +1284,27 @@ public class KwcContractTradeService {
     }
 
     private static void checkParams(SupplyContractTradeReq req) {
-        if (hasDuplicateGoodsIds(req.getGoodsInfo())){
-            throw new BusinessException( "标信息有重复");
+        if (hasDuplicateGoodsIds(req.getGoodsInfo())) {
+            throw new BusinessException("标信息有重复");
         }
         //判断时间大小
         boolean startTimeBefore = req.getGoodsInfo().stream()
                 .filter(t -> Objects.nonNull(t.getEffectiveStartTime()) && Objects.nonNull(req.getBaseInfo().getStartTime()))
                 .anyMatch(t -> t.getEffectiveStartTime().before(req.getBaseInfo().getStartTime()));
         if (startTimeBefore) {
-            throw new BusinessException( "标信息开始时间不能早于合同开始时间");
+            throw new BusinessException("标信息开始时间不能早于合同开始时间");
         }
         boolean endTimeAfter = req.getGoodsInfo().stream()
                 .filter(t -> Objects.nonNull(t.getEffectiveEntTime()) && Objects.nonNull(req.getBaseInfo().getEndTime()))
                 .anyMatch(t -> t.getEffectiveEntTime().after(req.getBaseInfo().getEndTime()));
-        if (endTimeAfter){
-            throw new BusinessException( "标信息结束时间不能晚于合同结束时间");
+        if (endTimeAfter) {
+            throw new BusinessException("标信息结束时间不能晚于合同结束时间");
         }
         boolean b = req.getGoodsInfo().stream()
                 .filter(t -> Objects.nonNull(t.getEffectiveEntTime()) && Objects.nonNull(t.getEffectiveStartTime()))
                 .anyMatch(t -> t.getEffectiveEntTime().before(t.getEffectiveStartTime()));
-        if (b){
-            throw new BusinessException( "标信息结束时间不能早于开始时间");
+        if (b) {
+            throw new BusinessException("标信息结束时间不能早于开始时间");
         }
     }
 
@@ -1341,22 +1343,22 @@ public class KwcContractTradeService {
         }
         //签约 (状态由带签约或者待审核变成签约)
         if (Objects.equals(req.getStatus(), ContractStatusEnum.SIGNED.getCode()) &&
-                Arrays.asList(ContractStatusEnum.SUBMIT.getCode(), ContractStatusEnum.WAIT_APPROVE.getCode(),ContractStatusEnum.CANNEL.getCode())
+                Arrays.asList(ContractStatusEnum.SUBMIT.getCode(), ContractStatusEnum.WAIT_APPROVE.getCode(), ContractStatusEnum.CANNEL.getCode())
                         .contains(kwcContractTrade.getStatus())) {
             updateKwcContractTrade.setStatus(ContractStatusEnum.SIGNED.getCode());
             updateKwcContractTrade.setSignTime(new Date());
         }
         //手动完结 (如果不传状态就表示手动完结) 如果当前状态是待签约或者待签约 那么变为作废
-        if (Objects.equals(req.getStatus(),ContractStatusEnum.CANNEL.getCode()) && Arrays.asList(ContractStatusEnum.WAIT_APPROVE.getCode(),
-                ContractStatusEnum.SUBMIT.getCode()).contains(kwcContractTrade.getStatus())){
+        if (Objects.equals(req.getStatus(), ContractStatusEnum.CANNEL.getCode()) && Arrays.asList(ContractStatusEnum.WAIT_APPROVE.getCode(),
+                ContractStatusEnum.SUBMIT.getCode()).contains(kwcContractTrade.getStatus())) {
             updateKwcContractTrade.setStatus(ContractStatusEnum.CANNEL.getCode());
         }
         //手动完结 如果当前的状态是已经签约,订单变成已完结
-        if (Objects.equals(req.getStatus(),ContractStatusEnum.CANNEL.getCode()) && Objects.equals(kwcContractTrade.getStatus(),
-                ContractStatusEnum.SIGNED.getCode())){
+        if (Objects.equals(req.getStatus(), ContractStatusEnum.CANNEL.getCode()) && Objects.equals(kwcContractTrade.getStatus(),
+                ContractStatusEnum.SIGNED.getCode())) {
             updateKwcContractTrade.setStatus(ContractStatusEnum.COMPLETE.getCode());
         }
-       return kwcContractTradeRepository.updateByContractId(updateKwcContractTrade);
+        return kwcContractTradeRepository.updateByContractId(updateKwcContractTrade);
 
     }
 
@@ -1369,7 +1371,7 @@ public class KwcContractTradeService {
         }
         //根据订单号查询交易企业信息
         List<KwcContractTradeUnit> tradeUnits = kwcContractTradeUnitRepository.queryByContractId(kwcContractTrade.getId());
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(tradeUnits)){
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(tradeUnits)) {
             return new ContractDetailResp();
         }
         //安装合同id和单位类型组合成key映射公司对象
@@ -1381,17 +1383,17 @@ public class KwcContractTradeService {
         //查询商品合同
         List<KwcContractTradeGoods> tradeGoods = kwcContractTradeGoodsRepository.queryByContractId(kwcContractTrade.getId());
         List<Long> goodsIds = Lists.newArrayList();
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(tradeGoods)){
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(tradeGoods)) {
             //获取商品id
-             goodsIds = tradeGoods.stream()
+            goodsIds = tradeGoods.stream()
                     .map(KwcContractTradeGoods::getGoodsId)
-                     .distinct()
+                    .distinct()
                     .collect(Collectors.toList());
 
         }
         //查询商品 商品id映射商品
         Map<Long, KwpGoods> goodsIdAndGoodsMap = Maps.newHashMap();
-        if (CollectionUtils.isNotEmpty(goodsIds)){
+        if (CollectionUtils.isNotEmpty(goodsIds)) {
             goodsIdAndGoodsMap = goodsInfoService.getGoodsByIds(goodsIds);
 
         }
@@ -1399,12 +1401,12 @@ public class KwcContractTradeService {
         //查询字典
         List<SysDictResDto> sysDictResDtos = remoteSystemService.queryDictByType(DictTypeEnum.PRODUCT_NAME_TYPE.getType());
         Map<String, SysDictResDto> dictValueAndDictResDtoMap = new HashMap<>();
-        if (CollectionUtils.isNotEmpty(sysDictResDtos)){
+        if (CollectionUtils.isNotEmpty(sysDictResDtos)) {
             //字典value映射字典
             dictValueAndDictResDtoMap = sysDictResDtos.stream()
                     .collect(Collectors.toMap(SysDictResDto::getValue, Function.identity()));
 
-         }
+        }
 
 
         ContractDetailResp contractDetailResp = new ContractDetailResp();
@@ -1417,7 +1419,7 @@ public class KwcContractTradeService {
         contractDetailResp.setContractFile(kwcContractTrade.getSigningUrl());
 
         //标地信息
-        if (CollectionUtils.isNotEmpty(tradeGoods)){
+        if (CollectionUtils.isNotEmpty(tradeGoods)) {
             Map<Long, KwpGoods> finalGoodsIdAndGoodsMap = goodsIdAndGoodsMap;
             Map<String, SysDictResDto> finalDictValueAndDictResDtoMap = dictValueAndDictResDtoMap;
             List<ContractDetailResp.TradeGoodsInfo> tradeGoodsInfos = tradeGoods.stream()
@@ -1440,10 +1442,10 @@ public class KwcContractTradeService {
         tradeGoodsInfo.setGoodsId(t.getGoodsId());
         KwpGoods goods = finalGoodsIdAndGoodsMap.getOrDefault(t.getGoodsId(), new KwpGoods());
         SysDictResDto dictResDto = dictValueAndDictResDtoMap.getOrDefault(goods.getGoodsType(), new SysDictResDto());
-        tradeGoodsInfo.setGoodsName(goods.getName()+"/"+dictResDto.getLabel()+"/"+goods.getSpec());
+        tradeGoodsInfo.setGoodsName(goods.getName() + "/" + dictResDto.getLabel() + "/" + goods.getSpec());
         tradeGoodsInfo.setAmount(t.getAmount());
         tradeGoodsInfo.setPrice(t.getPrice());
-        tradeGoodsInfo.setUnit(DictEnum.getLabel(DictTypeEnum.UNIT_TYPE.getType(),t.getUnit()));
+        tradeGoodsInfo.setUnit(DictEnum.getLabel(DictTypeEnum.UNIT_TYPE.getType(), t.getUnit()));
         tradeGoodsInfo.setEffectiveStartTime(t.getStartTime());
         tradeGoodsInfo.setEffectiveEntTime(t.getEndTime());
         return tradeGoodsInfo;
@@ -1466,10 +1468,10 @@ public class KwcContractTradeService {
         tradeBaseInfo.setContractName(kwcContractTrade.getName());
         tradeBaseInfo.setContractStatus(String.valueOf(kwcContractTrade.getStatus()));
         tradeBaseInfo.setContractStatusDesc(ContractStatusEnum.getNameByCode(kwcContractTrade.getStatus()));
-        if (Objects.nonNull(kwcContractTrade.getEndTime())){
+        if (Objects.nonNull(kwcContractTrade.getEndTime())) {
             tradeBaseInfo.setEndTime(kwcContractTrade.getEndTime());
             String endDate = DateUtils.format(kwcContractTrade.getEndTime(), DateUtils.DATE_PATTERN);
-            if (org.apache.commons.lang3.StringUtils.equals(endDate,"9999-12-30")){
+            if (org.apache.commons.lang3.StringUtils.equals(endDate, "9999-12-30")) {
                 tradeBaseInfo.setEndTime(null);
             }
         }
@@ -1492,33 +1494,40 @@ public class KwcContractTradeService {
         return tradeBaseInfo;
     }
 
-    public  List<QueryListResVo> queryTradeListByPage(QueryTradeReq req) {
+    public List<QueryListResVo> queryTradeListByPage(QueryTradeReq req) {
 
         Long entId;
-        if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getEntId())){
-            entId =Long.valueOf(req.getEntId());
-        }else {
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getEntId())) {
+            entId = Long.valueOf(req.getEntId());
+        } else {
             entId = LoginUserHolder.getEntId();
         }
+       // Integer type = null;
         Set<Long> entIds = Sets.newHashSet();
         entIds.add(entId);
         if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getPurchaseEntId())) {
             //查询企业 信息
             entIds.add(Long.valueOf(req.getPurchaseEntId()));
+            //  type = CooperateTypeEnum.PURCHASER.getCode();
         }
         if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getSupplyEntId())) {
             entIds.add(Long.valueOf(req.getSupplyEntId()));
+            //type = CooperateTypeEnum.SUPPLIER.getCode();
         }
         Set<Long> contractIds = null;
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(entIds)){
-           List<KwcContractTradeUnit> units = kwcContractTradeUnitRepository.queryByEntIds(entIds);
-           if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(units)){
-              contractIds = units.stream()
-                      .map(KwcContractTradeUnit::getContractId)
-                      .collect(Collectors.toSet());
-           }
-        }
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(contractIds)){
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(entIds)) {
+            List<KwcContractTradeUnit> units = kwcContractTradeUnitRepository.queryByEntIds(entIds);
+            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(units)) {
+                Set<Long> contractIdList = units.stream().filter(x -> Objects.equals(x.getEntId(), entId))
+                        .map(KwcContractTradeUnit::getContractId)
+                        .collect(Collectors.toSet());
+                contractIds = units.stream()
+                        .map(KwcContractTradeUnit::getContractId)
+                        .filter(contractIdList::contains)
+                        .collect(Collectors.toSet());
+            }
+        }
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(contractIds)) {
             return Collections.emptyList();
         }
         PageHelper.startPage(req.getPageNum(), req.getPageSize());
@@ -1528,50 +1537,50 @@ public class KwcContractTradeService {
                 req.getContractName(),
                 req.getSupplementCode(),
                 contractIds, req.getStatus(), req.getPageNum(), req.getPageSize());
-       // List<KwcContractTrade> records = page.getRecords();
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(records)){
+        // List<KwcContractTrade> records = page.getRecords();
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(records)) {
             return Collections.emptyList();
         }
         entIds.addAll(records.stream().map(KwcContractTrade::getEntId).collect(Collectors.toSet()));
         List<EntTypeResDto> ents = remoteSystemService.queryEntTypeByIds(entIds);
-        Map<Long, EntTypeResDto> entIdAndEntMap = Maps.newHashMap() ;
-        if (CollectionUtils.isNotEmpty(ents)){
+        Map<Long, EntTypeResDto> entIdAndEntMap = Maps.newHashMap();
+        if (CollectionUtils.isNotEmpty(ents)) {
             entIdAndEntMap =
                     ents.stream().collect(Collectors.toMap(EntTypeResDto::getEntId, Function.identity(), (v1, v2) -> v1));
         }
         //如果登录方是采购方,创建方是提供方,那么采购方只能看到已经签约的合同
         EntTypeResDto entTypeResDto = entIdAndEntMap.getOrDefault(entId, new EntTypeResDto());
         //如果登录方是采购商,创建方是供应方,那么采购商只能看到已经签约的合同
-        List<KwcContractTrade> contractTrades  = Lists.newArrayList();
-        List<KwcContractTrade> contractTrades1  = Lists.newArrayList();
-        if (entTypeResDto.getType().equals(EntTypeEnum.PURCHASER.getCode())){
+        List<KwcContractTrade> contractTrades = Lists.newArrayList();
+        List<KwcContractTrade> contractTrades1 = Lists.newArrayList();
+        if (entTypeResDto.getType().equals(EntTypeEnum.PURCHASER.getCode())) {
             List<Integer> statusList = Arrays.asList(ContractStatusEnum.SIGNED.getCode(), ContractStatusEnum.COMPLETE.getCode());
             Map<Long, EntTypeResDto> finalEntIdAndEntMap1 = entIdAndEntMap;
 
             records.forEach(record -> {
                 EntTypeResDto orDefault = finalEntIdAndEntMap1.getOrDefault(record.getEntId(), new EntTypeResDto());
-                if (Objects.equals(orDefault.getType(),EntTypeEnum.SUPPLIER.getCode()) && statusList.contains(record.getStatus())){
+                if (Objects.equals(orDefault.getType(), EntTypeEnum.SUPPLIER.getCode()) && statusList.contains(record.getStatus())) {
                     contractTrades.add(record);
-                }else if (Objects.equals(orDefault.getType(),EntTypeEnum.PURCHASER.getCode())) {
+                } else if (Objects.equals(orDefault.getType(), EntTypeEnum.PURCHASER.getCode())) {
                     contractTrades1.add(record);
                 }
             });
         }
         //如果登录方是供应方,创建方是采购方,那么供应方不能看到已作废的 合同
-        if (entTypeResDto.getType().equals(EntTypeEnum.SUPPLIER.getCode())){
+        if (entTypeResDto.getType().equals(EntTypeEnum.SUPPLIER.getCode())) {
             Map<Long, EntTypeResDto> finalEntIdAndEntMap = entIdAndEntMap;
             records.forEach(record -> {
-                        EntTypeResDto orDefault = finalEntIdAndEntMap.getOrDefault(record.getEntId(), new EntTypeResDto());
-                        if (Objects.equals(orDefault.getType(),EntTypeEnum.PURCHASER.getCode()) && !Objects.equals(record.getStatus(),ContractStatusEnum.CANNEL.getCode())){
-                            contractTrades.add(record);
-                        }else if (Objects.equals(orDefault.getType(),EntTypeEnum.SUPPLIER.getCode())){
-                            contractTrades1.add(record);
-                        }
+                EntTypeResDto orDefault = finalEntIdAndEntMap.getOrDefault(record.getEntId(), new EntTypeResDto());
+                if (Objects.equals(orDefault.getType(), EntTypeEnum.PURCHASER.getCode()) && !Objects.equals(record.getStatus(), ContractStatusEnum.CANNEL.getCode())) {
+                    contractTrades.add(record);
+                } else if (Objects.equals(orDefault.getType(), EntTypeEnum.SUPPLIER.getCode())) {
+                    contractTrades1.add(record);
+                }
             });
         }
         contractTrades.addAll(contractTrades1);
         records = contractTrades;
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(records)){
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(records)) {
             return Collections.emptyList();
         }
 
@@ -1580,18 +1589,18 @@ public class KwcContractTradeService {
         Set<Long> contractPids = records.stream().map(KwcContractTrade::getContractPid).collect(Collectors.toSet());
         //根据父id查询父合同信息
         Map<Long, KwcContractTrade> pidIdAndTradeMap = Maps.newHashMap();
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(contractPids)){
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(contractPids)) {
             List<KwcContractTrade> contractPidList = kwcContractTradeRepository.queryByContractIds(contractPids);
 
             pidIdAndTradeMap =
                     contractPidList.stream().collect(Collectors.toMap(KwcContractTrade::getId
-                    , Function.identity(), (v1, v2) -> v1));
+                            , Function.identity(), (v1, v2) -> v1));
         }
 
         //查询公司信息
         List<KwcContractTradeUnit> tradeUnits = kwcContractTradeUnitRepository.queryByContractIds(tradeContractIds);
         Map<String, KwcContractTradeUnit> contractUnitTypeKeyAndUnitMap = Maps.newHashMap();
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(tradeUnits)){
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(tradeUnits)) {
             contractUnitTypeKeyAndUnitMap = tradeUnits.stream()
                     .peek(x -> x.setContractIdUniTypeKey(x.getContractId() + "-" + x.getUnitType()))
                     .collect(Collectors.toMap(KwcContractTradeUnit::getContractIdUniTypeKey, Function.identity(), (v1
@@ -1606,7 +1615,7 @@ public class KwcContractTradeService {
         List<TradeOrderContractVo> tradeOrderContractVos = tradeOrderInfoService.queryByTradeContactIds(tradeContractIds);
         Map<Long, RWaybillSubOrderVo> tradeOrderIdAndWaybillMap = Maps.newHashMap();
         Map<Long, TradeOrderContractVo> contractIdAndContractMap = Maps.newHashMap();
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(tradeOrderContractVos)){
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(tradeOrderContractVos)) {
             contractIdAndContractMap = tradeOrderContractVos.stream()
                     .collect(Collectors.toMap(TradeOrderContractVo::getContractId, Function.identity(), (v1, v2) -> v1));
             //贸易订单id
@@ -1615,7 +1624,7 @@ public class KwcContractTradeService {
                     .collect(Collectors.toSet());
             //通过贸易订单id查询物流运单
             List<RWaybillSubOrderVo> rWaybillSubOrderVos = transportRemoteService.queryWaybillOrderByTradeOrderIds(tradeOrderIds);
-            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(rWaybillSubOrderVos)){
+            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(rWaybillSubOrderVos)) {
                 tradeOrderIdAndWaybillMap = rWaybillSubOrderVos.stream()
                         .collect(Collectors.toMap(RWaybillSubOrderVo::getTradeId, Function.identity(), (k1, k2) -> k1));
             }
@@ -1623,8 +1632,8 @@ public class KwcContractTradeService {
         //根据合同id查询合同商品
         List<KwcContractTradeGoods> tradeGoods = kwcContractTradeGoodsRepository.queryByContractIds(tradeContractIds);
         Map<Long, KwcContractTradeGoods> goodsIdAndGoodsMap = Maps.newHashMap();
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(tradeGoods)){
-            goodsIdAndGoodsMap = tradeGoods.stream().collect(Collectors.toMap(KwcContractTradeGoods::getGoodsId,Function.identity(), (v1, v2) -> v1));
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(tradeGoods)) {
+            goodsIdAndGoodsMap = tradeGoods.stream().collect(Collectors.toMap(KwcContractTradeGoods::getGoodsId, Function.identity(), (v1, v2) -> v1));
         }
 
         Map<Long, KwcContractTrade> finalPidIdAndTradeMap = pidIdAndTradeMap;
@@ -1636,15 +1645,15 @@ public class KwcContractTradeService {
                 .map(t -> getQueryListResVo(t, finalContractUnitTypeKeyAndUnitMap, finalPidIdAndTradeMap, longUserCacheResDtoMap,
                         finalTradeOrderIdAndWaybillMap, finalContractIdAndContractMap, finalGoodsIdAndGoodsMap))
                 .collect(Collectors.toList());
-        if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getPurchaseEntId())){
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getPurchaseEntId())) {
             queryListResVos = queryListResVos.stream()
-                    .filter(x-> org.apache.commons.lang3.StringUtils.equals(x.getPurchaseEntId(), req.getPurchaseEntId()))
+                    .filter(x -> org.apache.commons.lang3.StringUtils.equals(x.getPurchaseEntId(), req.getPurchaseEntId()))
                     .collect(Collectors.toList());
         }
 
-        if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getSupplyEntId())){
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getSupplyEntId())) {
             queryListResVos = queryListResVos.stream()
-                    .filter(x-> org.apache.commons.lang3.StringUtils.equals(x.getProvideEntId(), req.getSupplyEntId()))
+                    .filter(x -> org.apache.commons.lang3.StringUtils.equals(x.getProvideEntId(), req.getSupplyEntId()))
                     .collect(Collectors.toList());
         }
         return queryListResVos;
@@ -1669,14 +1678,14 @@ public class KwcContractTradeService {
         queryListResVo.setPurchaseEntName(purchaseEnt.getFirmName());
         KwcContractTradeUnit provideEnt =
                 finalContractUnitTypeKeyAndUnitMap.getOrDefault(t.getId() + "-" + CooperateTypeEnum.SUPPLIER.getCode(),
-                new KwcContractTradeUnit());
+                        new KwcContractTradeUnit());
         queryListResVo.setProvideEntId(String.valueOf(provideEnt.getEntId()));
         queryListResVo.setProvideEntName(provideEnt.getFirmName());
         //queryListResVo.setCheckedEntName();
         queryListResVo.setContractNo(t.getContractNo());
         queryListResVo.setContractName(t.getName());
         queryListResVo.setSigningWay(String.valueOf(t.getSigningWay()));
-        queryListResVo.setSigningWayName(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(),String.valueOf(t.getSigningWay())));
+        queryListResVo.setSigningWayName(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(), String.valueOf(t.getSigningWay())));
         queryListResVo.setUnloadWay(String.valueOf(t.getUnloadWay()));
         queryListResVo.setUnloadWayName(DictEnum.getLabel(DictTypeEnum.LOAD_UNLOAD_WAY.getType(),
                 String.valueOf(t.getUnloadWay())));
@@ -1686,17 +1695,17 @@ public class KwcContractTradeService {
         List<RWaybillSubOrderVo.BillSubOrder> subOrders = subOrderVo.getSubOrders();
         BigDecimal unloadQty = BigDecimal.ZERO;
         BigDecimal performedAmountMoney = BigDecimal.ZERO;
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(subOrders)){
-            if (Objects.equals(t.getUnloadWay(),Integer.parseInt(DictEnum.LOAD_UNLOAD_WAY_1.getValue()))){
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(subOrders)) {
+            if (Objects.equals(t.getUnloadWay(), Integer.parseInt(DictEnum.LOAD_UNLOAD_WAY_1.getValue()))) {
                 unloadQty = subOrders.stream()
-                        .filter(x->Arrays.asList(CarWaybillV1Enum.COMPLETION_LOADING.getCode(),CarWaybillV1Enum.WAIT_UNLOADING.getCode())
+                        .filter(x -> Arrays.asList(CarWaybillV1Enum.COMPLETION_LOADING.getCode(), CarWaybillV1Enum.WAIT_UNLOADING.getCode())
                                 .contains(x.getStatus()))
                         .map(RWaybillSubOrderVo.BillSubOrder::getLoadAmount)
                         .filter(Objects::nonNull)
                         .reduce(BigDecimal.ZERO, BigDecimal::add);
-            }else {
+            } else {
                 unloadQty = subOrders.stream()
-                        .filter(x->Objects.equals(x.getStatus(),CarWaybillV1Enum.WAIT_UNLOADING.getCode()))
+                        .filter(x -> Objects.equals(x.getStatus(), CarWaybillV1Enum.WAIT_UNLOADING.getCode()))
                         .map(RWaybillSubOrderVo.BillSubOrder::getUnloadAmount)
                         .filter(Objects::nonNull)
                         .reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -1720,15 +1729,15 @@ public class KwcContractTradeService {
         UserCacheResDto userCacheResDto = longUserCacheResDtoMap.getOrDefault(t.getCreateBy(), new UserCacheResDto());
         queryListResVo.setInitiatorId(t.getCreateBy());
         queryListResVo.setInitiateName(userCacheResDto.getName());
-        if (Objects.nonNull(userCacheResDto.getEntInfo())){
+        if (Objects.nonNull(userCacheResDto.getEntInfo())) {
             queryListResVo.setInitiateEntName(userCacheResDto.getEntInfo().getFirmName());
         }
         queryListResVo.setCreateTime(t.getCreateTime());
         queryListResVo.setStartTime(t.getStartTime());
-        if (Objects.nonNull(t.getStartTime())){
+        if (Objects.nonNull(t.getStartTime())) {
             queryListResVo.setEndTime(t.getEndTime());
             String endDate = DateUtils.format(t.getEndTime(), DateUtils.DATE_PATTERN);
-            if (org.apache.commons.lang3.StringUtils.equals(endDate,"9999-12-30")){
+            if (org.apache.commons.lang3.StringUtils.equals(endDate, "9999-12-30")) {
                 queryListResVo.setEndTime(null);
             }
         }
@@ -1740,7 +1749,7 @@ public class KwcContractTradeService {
 
 
     public List<ContractLogisticsOrderResDto> queryContractLogisticsOrder(LogisticsOrderDto logisticsOrderDto) {
-        log.info("查询物流合同请求:{}",JSON.toJSONString( logisticsOrderDto));
+        log.info("查询物流合同请求:{}", JSON.toJSONString(logisticsOrderDto));
 
         if (Objects.isNull(logisticsOrderDto.getGoodsId())) {
             throw new BusinessException("商品id不能为空!");
@@ -1751,7 +1760,7 @@ public class KwcContractTradeService {
         //通过托运企业查询物流公司
         List<KwcContractLogisticsUnit> contractLogistics =
                 kwcContractLogisticsUnitRepository.queryByEntId(logisticsOrderDto.getEntId());
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(contractLogistics)){
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(contractLogistics)) {
             return Collections.emptyList();
         }
         //物流订单合id
@@ -1763,7 +1772,7 @@ public class KwcContractTradeService {
                 logisticsOrderDto.getGoodsId());
         Map<Long, KwcContractLogisticsGoods> contractLogisticsGoodsMap = Maps.newHashMap();
 
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwcContractLogisticsGoods)){
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwcContractLogisticsGoods)) {
             contractLogisticsGoodsMap = kwcContractLogisticsGoods.stream()
                     .collect(Collectors.toMap(KwcContractLogisticsGoods::getContractId,
                             Function.identity(), (x, y) -> x));
@@ -1774,26 +1783,26 @@ public class KwcContractTradeService {
 
         //查询物流订单
         List<KwcContractLogistics> logistics = contractLogisticsRepository.queryByLogisticContractIds(logTradeContractIds);
-        if (CollectionUtils.isEmpty( logistics)){
+        if (CollectionUtils.isEmpty(logistics)) {
             return Collections.emptyList();
         }
         Date date = new Date();
         logistics = logistics.stream()
                 .filter(log -> Objects.nonNull(log.getStartTime()) && Objects.nonNull(log.getEndTime()))
-                .filter(log -> Objects.equals(log.getStatus(),ContractStatusEnum.SIGNED.getCode())
-                && log.getStartTime().before(date) &&  log.getEndTime().after( date))
+                .filter(log -> Objects.equals(log.getStatus(), ContractStatusEnum.SIGNED.getCode())
+                        && log.getStartTime().before(date) && log.getEndTime().after(date))
                 .collect(Collectors.toList());
-        if (CollectionUtils.isEmpty(logistics)){
+        if (CollectionUtils.isEmpty(logistics)) {
             return Collections.emptyList();
         }
         //查询企业
         List<KwcContractLogisticsUnit> units = kwcContractLogisticsUnitRepository.queryByContractIds(logTradeContractIds);
         //物流订单和类型组成唯一key
         Map<String, KwcContractLogisticsUnit> contractLogisticsMap = Maps.newHashMap();
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(units)){
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(units)) {
             contractLogisticsMap = units.stream()
-                            .collect(Collectors.toMap(c -> c.getContractId() + "_" + c.getUnitType(),
-                                    Function.identity(), (x, y) -> x));
+                    .collect(Collectors.toMap(c -> c.getContractId() + "_" + c.getUnitType(),
+                            Function.identity(), (x, y) -> x));
         }
         Map<String, KwcContractLogisticsUnit> finalContractLogisticsMap = contractLogisticsMap;
         Map<Long, KwcContractLogisticsGoods> finalContractLogisticsGoodsMap = contractLogisticsGoodsMap;
@@ -1832,7 +1841,6 @@ public class KwcContractTradeService {
     }
 
 
-
     public List<ContractTradeOrderInfo> queryContractTradeOrder(ContractTradeOrderDto contractTradeOrderDto) {
         log.info("查询贸易合同订单,请求:{}", JSON.toJSONString(contractTradeOrderDto));
         checkParam(contractTradeOrderDto.getGoodsId(), contractTradeOrderDto.getEntId(), contractTradeOrderDto.getEntType());
@@ -1861,19 +1869,19 @@ public class KwcContractTradeService {
         //查询商品信息
         List<KwcContractTradeGoods> kwcContractGoods = kwcContractTradeGoodsRepository.queryByContractIdsAndGoodsId(contractIds,
                 contractTradeOrderDto.getGoodsId());
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwcContractGoods)){
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwcContractGoods)) {
             return Collections.emptyList();
         }
         Map<Long, KwcContractTradeGoods> contractGoodsMap = kwcContractGoods.stream()
                 .collect(Collectors.toMap(KwcContractTradeGoods::getContractId,Function.identity(),(x,y)->x));
         //只查询已签约的
         Set<Long> contractIdList = kwcContractGoods.stream()
-                .filter(x->Objects.equals(x.getStatus(), ContractStatusEnum.SIGNED.getCode()))
+                .filter(x -> Objects.equals(x.getStatus(), ContractStatusEnum.SIGNED.getCode()))
                 .map(KwcContractTradeGoods::getContractId)
                 .collect(Collectors.toSet());
         //查询贸易合同
         List<KwcContractTrade> kwcContractTrades = kwcContractTradeRepository.findByContractIds(contractIdList);
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwcContractTrades)){
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwcContractTrades)) {
             return Collections.emptyList();
         }
         kwcContractTrades = kwcContractTrades.stream()
@@ -1883,8 +1891,9 @@ public class KwcContractTradeService {
                 .map(x-> getContractTradeOrderInfo(x, conTractTradeUnitMap,contractTradeOrderDto.getEntType(),contractGoodsMap))
                 .collect(Collectors.toList());
     }
+
     private static void checkParam(Long contractTradeOrderDto, Long contractTradeOrderDto1, Integer contractTradeOrderDto2) {
-        if (Objects.isNull(contractTradeOrderDto)) {
+        if (Objects.isNull(contractTradeOrderDto) && Objects.equals(contractTradeOrderDto2,1)) {
             throw new BusinessException("商品id不能为空!");
         }
         if (Objects.isNull(contractTradeOrderDto1)) {
@@ -1894,6 +1903,7 @@ public class KwcContractTradeService {
             throw new BusinessException("企业类型不能为空!");
         }
     }
+
     @NotNull
     private static ContractTradeOrderInfo getContractTradeOrderInfo(KwcContractTrade c, Map<String,
             KwcContractTradeUnit> conTractTradeUnitMap,Integer entType, Map<Long, KwcContractTradeGoods> contractGoodsMap) {
@@ -1908,7 +1918,7 @@ public class KwcContractTradeService {
         contractTradeOrderInfo.setTrading(c.getTrading());
         contractTradeOrderInfo.setStartTime(c.getStartTime());
         contractTradeOrderInfo.setEndTime(c.getEndTime());
-        contractTradeOrderInfo.setAmount(Objects.isNull(c.getAmount()) ? new BigDecimal("-1") : c.getAmount());
+
         contractTradeOrderInfo.setPerformedAmount(c.getPerformedAmount());
         contractTradeOrderInfo.setSigningUrl(c.getSigningUrl());
         contractTradeOrderInfo.setSignedUrl(c.getSignedUrl());
@@ -1929,6 +1939,7 @@ public class KwcContractTradeService {
         contractTradeOrderInfo.setSalesmanPhone(c.getSalesmanPhone());
         KwcContractTradeGoods kwcContractTradeGoods = contractGoodsMap.getOrDefault(c.getId(), new KwcContractTradeGoods());
         contractTradeOrderInfo.setSignPrice(Objects.nonNull(kwcContractTradeGoods.getPrice())?kwcContractTradeGoods.getPrice():new BigDecimal("-1"));
+        contractTradeOrderInfo.setAmount(Objects.isNull(kwcContractTradeGoods.getAmount()) ? new BigDecimal("-1") : kwcContractTradeGoods.getAmount());
         return contractTradeOrderInfo;
     }
 
@@ -1941,29 +1952,38 @@ public class KwcContractTradeService {
         ContractStatusCountResp contractStatusCountResp = new ContractStatusCountResp();
         contractStatusCountResp.setTotalNum("0");
         Long entId;
-        if (Objects.nonNull(req.getEntId())){
-            entId =req.getEntId();
-        }else {
+        if (Objects.nonNull(req.getEntId())) {
+            entId = req.getEntId();
+        } else {
             entId = LoginUserHolder.getEntId();
         }
+       // Integer type =null;
         Set<Long> entIds = Sets.newHashSet();
         entIds.add(entId);
         if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getPurchaseEntId())) {
             //查询企业 信息
             entIds.add(Long.valueOf(req.getPurchaseEntId()));
+           // type=CooperateTypeEnum.PURCHASER.getCode();
         }
         if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getSupplyEntId())) {
             entIds.add(Long.valueOf(req.getSupplyEntId()));
+           // type=CooperateTypeEnum.SUPPLIER.getCode();
         }
         Set<Long> contractIds = null;
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(entIds)){
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(entIds)) {
             List<KwcContractTradeUnit> units = kwcContractTradeUnitRepository.queryByEntIds(entIds);
-            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(units)){
-                contractIds = units.stream().map(KwcContractTradeUnit::getContractId).collect(Collectors.toSet());
+            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(units)) {
+                Set<Long> contractList = units.stream().filter(x -> Objects.equals(x.getEntId(), entId))
+                        .map(KwcContractTradeUnit::getContractId)
+                        .collect(Collectors.toSet());
+                contractIds = units.stream()
+                        .map(KwcContractTradeUnit::getContractId)
+                        .filter(contractList::contains)
+                        .collect(Collectors.toSet());
             }
         }
         if (org.apache.commons.collections4.CollectionUtils.isEmpty(contractIds)
-                && !org.apache.commons.lang3.StringUtils.isAllBlank(req.getPurchaseEntId(),req.getSupplyEntId())){
+                && !org.apache.commons.lang3.StringUtils.isAllBlank(req.getPurchaseEntId(), req.getSupplyEntId())) {
             Map<Integer, List<KwcContractTrade>> statusAndLogOrdersMap = new HashMap<>();
             List<ContractStatusCountResp.ContractStatusCount> statusCounts = statusEnums.stream()
                     .map(x -> getContractStatusCount(x, statusAndLogOrdersMap))
@@ -1978,9 +1998,9 @@ public class KwcContractTradeService {
                 req.getSupplementCode(),
                 contractIds, req.getStatus(), 0, 0);
 
-       // List<KwcContractTrade> kwcContractTrades = kwcContractTradeRepository.queryTradeListByPageList(LoginUserHolder.getEntId());
+        // List<KwcContractTrade> kwcContractTrades = kwcContractTradeRepository.queryTradeListByPageList(LoginUserHolder.getEntId());
 
-        if (CollectionUtils.isEmpty(kwcContractTrades)){
+        if (CollectionUtils.isEmpty(kwcContractTrades)) {
             Map<Integer, List<KwcContractTrade>> statusAndLogOrdersMap = new HashMap<>();
             List<ContractStatusCountResp.ContractStatusCount> statusCounts = statusEnums.stream()
                     .map(x -> getContractStatusCount(x, statusAndLogOrdersMap))
@@ -1990,45 +2010,45 @@ public class KwcContractTradeService {
         }
         entIds.addAll(kwcContractTrades.stream().map(KwcContractTrade::getEntId).collect(Collectors.toSet()));
         List<EntTypeResDto> ents = remoteSystemService.queryEntTypeByIds(entIds);
-        Map<Long, EntTypeResDto> entIdAndEntMap = Maps.newHashMap() ;
-        if (CollectionUtils.isNotEmpty(ents)){
+        Map<Long, EntTypeResDto> entIdAndEntMap = Maps.newHashMap();
+        if (CollectionUtils.isNotEmpty(ents)) {
             entIdAndEntMap =
                     ents.stream().collect(Collectors.toMap(EntTypeResDto::getEntId, Function.identity(), (v1, v2) -> v1));
         }
         //如果登录方是采购方,创建方是提供方,那么采购方只能看到已经签约的合同
         EntTypeResDto entTypeResDto = entIdAndEntMap.getOrDefault(entId, new EntTypeResDto());
         //如果登录方是采购商,创建方是供应方,那么采购商只能看到已经签约的合同
-        List<KwcContractTrade> contractTrades  = Lists.newArrayList();
-        List<KwcContractTrade> contractTrades1  = Lists.newArrayList();
-        if (entTypeResDto.getType().equals(EntTypeEnum.PURCHASER.getCode())){
+        List<KwcContractTrade> contractTrades = Lists.newArrayList();
+        List<KwcContractTrade> contractTrades1 = Lists.newArrayList();
+        if (entTypeResDto.getType().equals(EntTypeEnum.PURCHASER.getCode())) {
 
             List<Integer> statusList = Arrays.asList(ContractStatusEnum.SIGNED.getCode(), ContractStatusEnum.COMPLETE.getCode());
             Map<Long, EntTypeResDto> finalEntIdAndEntMap1 = entIdAndEntMap;
 
             kwcContractTrades.forEach(record -> {
                 EntTypeResDto orDefault = finalEntIdAndEntMap1.getOrDefault(record.getEntId(), new EntTypeResDto());
-                if (Objects.equals(orDefault.getType(),EntTypeEnum.SUPPLIER.getCode()) && statusList.contains(record.getStatus())){
+                if (Objects.equals(orDefault.getType(), EntTypeEnum.SUPPLIER.getCode()) && statusList.contains(record.getStatus())) {
                     contractTrades.add(record);
-                }else if (Objects.equals(orDefault.getType(),EntTypeEnum.PURCHASER.getCode())){
+                } else if (Objects.equals(orDefault.getType(), EntTypeEnum.PURCHASER.getCode())) {
                     contractTrades1.add(record);
                 }
             });
         }
         //如果登录方是供应方,创建方是采购方,那么供应方不能看到已作废的 合同
-        if (entTypeResDto.getType().equals(EntTypeEnum.SUPPLIER.getCode())){
+        if (entTypeResDto.getType().equals(EntTypeEnum.SUPPLIER.getCode())) {
             Map<Long, EntTypeResDto> finalEntIdAndEntMap = entIdAndEntMap;
             kwcContractTrades.forEach(record -> {
                 EntTypeResDto orDefault = finalEntIdAndEntMap.getOrDefault(record.getEntId(), new EntTypeResDto());
-                if (Objects.equals(orDefault.getType(),EntTypeEnum.PURCHASER.getCode()) && !Objects.equals(record.getStatus(),ContractStatusEnum.CANNEL.getCode())){
+                if (Objects.equals(orDefault.getType(), EntTypeEnum.PURCHASER.getCode()) && !Objects.equals(record.getStatus(), ContractStatusEnum.CANNEL.getCode())) {
                     contractTrades.add(record);
-                }else if (Objects.equals(orDefault.getType(),EntTypeEnum.SUPPLIER.getCode())){
+                } else if (Objects.equals(orDefault.getType(), EntTypeEnum.SUPPLIER.getCode())) {
                     contractTrades1.add(record);
                 }
             });
         }
         contractTrades.addAll(contractTrades1);
         kwcContractTrades = contractTrades;
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwcContractTrades)){
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwcContractTrades)) {
             Map<Integer, List<KwcContractTrade>> statusAndLogOrdersMap = new HashMap<>();
             List<ContractStatusCountResp.ContractStatusCount> statusCounts = statusEnums.stream()
                     .map(x -> getContractStatusCount(x, statusAndLogOrdersMap))
@@ -2057,4 +2077,9 @@ public class KwcContractTradeService {
         contractStatusCount.setOrderNum(String.valueOf(finalStatusAndLogOrdersMap1.getOrDefault(x.getCode(), new ArrayList<>()).size()));
         return contractStatusCount;
     }
-}
+
+    public List<Long> queryTradeContractInfo(Long contractId) {
+        return kwcContractTradeMapper.selectByContract(contractId);
+    }
+}
+

+ 26 - 0
sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractTradeMapper.xml

@@ -301,4 +301,30 @@
             limit 1
         </where>
     </select>
+    <select id="querySignTradeContract" resultType="java.lang.Long">
+        select distinct b.goods_id
+        from kwc_contract_trade a
+                 left join kwc_contract_trade_goods b on a.id = b.contract_id and b.del_flag = 0
+                 left join kwc_contract_trade_unit c on a.id = c.contract_id and c.del_flag = 0
+        <where>
+            a.del_flag = 0
+              and a.status = 0
+              and c.unit_type = 2
+              and a.start_time &lt; #{time}
+              and (a.end_time &gt; #{time} OR a.end_time IS NULL)
+              and c.ent_id = #{entId}
+            order by a.create_time desc
+        </where>
+    </select>
+
+    <select id="selectByContract" resultType="java.lang.Long">
+        select distinct b.goods_id
+        from kwc_contract_trade a
+        left join kwc_contract_trade_goods b on a.id = b.contract_id and b.del_flag = 0
+        <where>
+            a.del_flag = 0
+            and a.status = 0
+            and a.id = #{contractId}
+        </where>
+    </select>
 </mapper>

+ 12 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckController.java

@@ -224,6 +224,18 @@ public class KwfTruckController {
         return HttpResult.ok(truckService.truckStatistics());
     }
 
+    /**
+     * 统计车辆业务状态数量(全部、空闲、任务中)
+     * @return 统计结果
+     * @author system
+     * @date 2025/12/08
+     */
+    @GetMapping("/truckBusinessStatusStatistics")
+    @Operation(summary = "车辆业务状态统计", description = "统计全部、空闲、任务中的车辆数量")
+    public BaseResult<TruckBusinessStatusStatisticsVo> truckBusinessStatusStatistics() {
+        return BaseResult.success(truckService.truckBusinessStatusStatistics());
+    }
+
     /**
      * @param params {truckNo 車牌號}
      * @desc 车辆查询(业务关联+归属车辆)

+ 13 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckRouteController.java

@@ -3,6 +3,7 @@ package com.sckw.fleet.controller;
 import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.fleet.model.request.DeleteTruckRoteReq;
+import com.sckw.fleet.model.request.QueryTruckRouteByDriverReq;
 import com.sckw.fleet.model.request.QueryTruckRoteReq;
 import com.sckw.fleet.model.request.TruckRoteDetailReq;
 import com.sckw.fleet.model.vo.QueryTruckRoteVo;
@@ -54,4 +55,16 @@ public class KwfTruckRouteController {
     public BaseResult<TruckRoteDetailVo> truckRouteDetail(@Valid @RequestBody TruckRoteDetailReq req) {
         return BaseResult.success(truckService.truckRouteDetail(req));
     }
+
+    /**
+     * 根据司机ID和装货卸货地址查询常用路线
+     * @param req 请求参数
+     * @return 常用路线信息
+     */
+    @PostMapping("/queryByDriver")
+    @Operation(summary = "根据司机ID和装货卸货地址查询常用路线", description = "根据司机ID和装货卸货地址查询常用路线")
+    public BaseResult<QueryTruckRoteVo> queryTruckRouteByDriver(@Valid @RequestBody QueryTruckRouteByDriverReq req) {
+        return BaseResult.success(truckService.queryTruckRouteByDriver(req));
+    }
+
 }

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

@@ -344,6 +344,7 @@ public class RemoteFleetServiceImpl implements RemoteFleetService {
         rTruckVo.setTruckType(StringUtils.isBlank(truck.getType()) ? "": String.valueOf(truck.getType()));
         rTruckVo.setStatus(truck.getStatus());
         rTruckVo.setCarAxis(truck.getCarAxis());
+        rTruckVo.setEnergyType(truck.getEnergyType());
         return rTruckVo;
     }
 

+ 39 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/QueryTruckRouteByDriverReq.java

@@ -0,0 +1,39 @@
+package com.sckw.fleet.model.request;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 根据司机ID和装货卸货地址查询常用路线请求参数
+ * @author PC
+ */
+@Data
+public class QueryTruckRouteByDriverReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 司机id
+     */
+    @NotNull(message = "司机ID不能为空")
+    @Schema(description = "司机id")
+    private Long driverId;
+
+    /**
+     * 装货地址(起始点)
+     */
+    @NotNull(message = "装货地址不能为空")
+    @Schema(description = "装货地址(起始点)")
+    private String startPoint;
+
+    /**
+     * 卸货地址
+     */
+    @NotNull(message = "卸货地址不能为空")
+    @Schema(description = "卸货地址")
+    private String unloadingPoint;
+}

+ 37 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/QueryTruckRoteVo.java

@@ -5,6 +5,10 @@ import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
 
 /**
  * @author PC
@@ -13,6 +17,11 @@ import java.io.Serializable;
 public class QueryTruckRoteVo implements Serializable {
     @Serial
     private static final long serialVersionUID = 2817549090778895464L;
+    /**
+     * 主键id
+     */
+    @Schema(description = "主键id")
+    private Long id;
     /**
      * 车牌号
      */
@@ -62,5 +71,32 @@ public class QueryTruckRoteVo implements Serializable {
      * 车辆id
      */
     @Schema(description = "车辆id")
-    private String id;
+    private String truckId;
+    /**
+     * 轨迹详情
+     */
+    @Schema(description = "轨迹详情")
+    List<TruckRoteDetail> truckRoteDetails;
+    @Data
+    public static class TruckRoteDetail implements Serializable{
+        @Serial
+        private static final long serialVersionUID = -3239327435958023091L;
+        /**
+         * 定位时间
+         */
+        @Schema(description = "定位时间")
+        private LocalDateTime ts;
+
+        /**
+         * 经度
+         */
+        @Schema(description = "经度")
+        private String longitude;
+
+        /**
+         * 纬度
+         */
+        @Schema(description = "纬度")
+        private String latitude;
+    }
 }

+ 44 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/TruckBusinessStatusStatisticsVo.java

@@ -0,0 +1,44 @@
+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;
+
+/**
+ * 车辆业务状态统计返回数据
+ * @author system
+ */
+@Data
+@Schema(description = "车辆业务状态统计")
+public class TruckBusinessStatusStatisticsVo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 全部车辆数量
+     */
+    @Schema(description = "全部车辆数量")
+    private Long totalCount;
+
+    /**
+     * 空闲车辆数量(business_status = 0)
+     */
+    @Schema(description = "空闲车辆数量")
+    private Long idleCount;
+
+    /**
+     * 任务中车辆数量(business_status = 1)
+     */
+    @Schema(description = "任务中车辆数量")
+    private Long busyCount;
+
+    public static TruckBusinessStatusStatisticsVo of(Long totalCount, Long idleCount, Long busyCount) {
+        TruckBusinessStatusStatisticsVo vo = new TruckBusinessStatusStatisticsVo();
+        vo.setTotalCount(totalCount);
+        vo.setIdleCount(idleCount);
+        vo.setBusyCount(busyCount);
+        return vo;
+    }
+}

+ 2 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/TruckRoteDetailVo.java

@@ -10,6 +10,7 @@ import lombok.EqualsAndHashCode;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.sql.Timestamp;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -37,7 +38,7 @@ public class TruckRoteDetailVo implements Serializable {
          * 定位时间
          */
         @Schema(description = "定位时间")
-        private LocalDateTime ts;
+        private Timestamp ts;
 
         /**
          * 经度

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

@@ -125,4 +125,29 @@ public class KwfTruckRepository extends ServiceImpl<KwfTruckMapper, KwfTruck> {
                 .eq(KwfTruck::getEntId, entId)
                 .orderByDesc(BaseModel::getCreateTime));
     }
+
+    /**
+     * 统计车辆总数(根据企业ID)
+     * @param entId 企业ID
+     * @return 车辆总数
+     */
+    public List<KwfTruck> countByEntId(Long entId) {
+        return list(Wrappers.<KwfTruck>lambdaQuery()
+                .select(BaseModel::getId,KwfTruck::getBusinessStatus)
+                .eq(BaseModel::getDelFlag, 0)
+                .eq(Objects.nonNull(entId), KwfTruck::getEntId, entId));
+    }
+
+    /**
+     * 统计指定业务状态的车辆数量(根据企业ID)
+     * @param entId 企业ID
+     * @param businessStatus 业务状态(0空闲、1任务)
+     * @return 车辆数量
+     */
+    public Long countByEntIdAndBusinessStatus(Long entId, Integer businessStatus) {
+        return count(Wrappers.<KwfTruck>lambdaQuery()
+                .eq(BaseModel::getDelFlag, 0)
+                .eq(Objects.nonNull(entId), KwfTruck::getEntId, entId)
+                .eq(Objects.nonNull(businessStatus), KwfTruck::getBusinessStatus, businessStatus));
+    }
 }

+ 16 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckRouteRepository.java

@@ -62,4 +62,20 @@ public class KwfTruckRouteRepository extends ServiceImpl<KwfTruckRouteMapper, Kw
                 .eq(KwfTruckRoute::getUnloadingPoint, unloadingPoint)
                 .eq(KwfTruckRoute::getDelFlag,0));
     }
+
+    /**
+     * 根据司机ID和装货卸货地址查询常用路线
+     * @param driverId 司机ID
+     * @param startPoint 装货地址(起始点)
+     * @param unloadingPoint 卸货地址
+     * @return 常用路线信息
+     */
+    public KwfTruckRoute queryByDriverIdAndAddress(Long driverId, String startPoint, String unloadingPoint) {
+        return getOne(Wrappers.<KwfTruckRoute>lambdaQuery()
+                .eq(KwfTruckRoute::getDriverId, driverId)
+                .eq(KwfTruckRoute::getStartPoint, startPoint)
+                .eq(KwfTruckRoute::getUnloadingPoint, unloadingPoint)
+                .eq(KwfTruckRoute::getDelFlag, 0)
+                .last("limit 1"));
+    }
 }

+ 65 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckRouteService.java

@@ -10,6 +10,7 @@ import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.fleet.model.*;
 import com.sckw.fleet.model.dto.KwfTruckRouteDto;
 import com.sckw.fleet.model.request.DeleteTruckRoteReq;
+import com.sckw.fleet.model.request.QueryTruckRouteByDriverReq;
 import com.sckw.fleet.model.request.QueryTruckRoteReq;
 
 import com.sckw.fleet.model.request.TruckRoteDetailReq;
@@ -23,6 +24,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -139,7 +141,7 @@ public class KwfTruckRouteService {
      */
     private static QueryTruckRoteVo getQueryTruckRoteVo(KwfTruckRoute r, Map<Long, KwfFleet> fleetIdAndFleetMap, Map<Long, KwfDriver> driverIdAndDriverMap) {
         QueryTruckRoteVo queryTruckRoteVo = new QueryTruckRoteVo();
-        queryTruckRoteVo.setId(String.valueOf(r.getId()));
+        queryTruckRoteVo.setId(r.getId());
         queryTruckRoteVo.setTruckNo(r.getTruckNo());
         queryTruckRoteVo.setStartPoint(r.getStartPoint());
         queryTruckRoteVo.setUnloadingPoint(r.getUnloadingPoint());
@@ -174,4 +176,66 @@ public class KwfTruckRouteService {
         truckRoteDetailVo.setTruckRoteDetails(truckRoteDetails);
         return truckRoteDetailVo;
     }
+
+    /**
+     * 根据司机ID和装货卸货地址查询常用路线
+     * @param req 请求参数
+     * @return 常用路线信息
+     */
+    public QueryTruckRoteVo queryTruckRouteByDriver(QueryTruckRouteByDriverReq req) {
+        log.info("根据司机ID和装货卸货地址查询常用路线,请求参数 :{}", JSON.toJSONString(req));
+        
+        // 查询常用路线
+        KwfTruckRoute truckRoute = truckRouteRepository.queryByDriverIdAndAddress(
+                req.getDriverId(), 
+                req.getStartPoint(), 
+                req.getUnloadingPoint()
+        );
+        
+        if (Objects.isNull(truckRoute)) {
+            log.info("未查询到司机ID:{},装货地址:{},卸货地址:{} 的常用路线", 
+                    req.getDriverId(), req.getStartPoint(), req.getUnloadingPoint());
+            return null;
+        }
+        
+        // 组装返回数据
+        QueryTruckRoteVo vo = new QueryTruckRoteVo();
+        vo.setId(truckRoute.getId());
+        vo.setTruckId(String.valueOf(truckRoute.getTruckId()));
+        vo.setTruckNo(truckRoute.getTruckNo());
+        vo.setStartPoint(truckRoute.getStartPoint());
+        vo.setUnloadingPoint(truckRoute.getUnloadingPoint());
+        vo.setDriverId(String.valueOf(truckRoute.getDriverId()));
+        vo.setSortedTime(truckRoute.getShortestTime());
+        vo.setUpdateTime(DateUtils.format(truckRoute.getUpdateTime(), DateUtils.DATE_TIME_PATTERN));
+        
+        // 查询车队信息
+        if (Objects.nonNull(truckRoute.getFleetId())) {
+            vo.setFleetId(String.valueOf(truckRoute.getFleetId()));
+            KwfFleet fleet = fleetRepository.getById(truckRoute.getFleetId());
+            if (Objects.nonNull(fleet)) {
+                vo.setFleetName(fleet.getName());
+            }
+        }
+        
+        // 查询司机信息
+        KwfDriver driver = driverRepository.getById(truckRoute.getDriverId());
+        if (Objects.nonNull(driver)) {
+            vo.setDriverName(driver.getName());
+        }
+
+        String pointInfo = truckRoute.getPointInfo();
+        if (StringUtils.isNotBlank(pointInfo)) {
+            List<QueryTruckRoteVo.TruckRoteDetail> truckRoteDetails = JSON.parseArray(pointInfo, QueryTruckRoteVo.TruckRoteDetail.class);
+            truckRoteDetails =truckRoteDetails.stream()
+                    .sorted(Comparator.comparing(QueryTruckRoteVo.TruckRoteDetail::getTs))
+                    .collect(Collectors.toList());
+
+            vo.setTruckRoteDetails(truckRoteDetails);
+        }
+
+        return vo;
+    }
+
+
 }

+ 30 - 4
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java

@@ -26,6 +26,7 @@ import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginEntHolder;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.request.HttpClientUtil;
+import com.sckw.core.web.response.BaseIotResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.result.PageDataResult;
@@ -831,6 +832,31 @@ public class KwfTruckService {
         return truckDao.truckStatistics(LoginUserHolder.getEntId());
     }
 
+    /**
+     * 统计车辆业务状态数量(全部、空闲、任务中)
+     * @return 统计结果
+     * @author system
+     * @date 2025/12/08
+     */
+    public TruckBusinessStatusStatisticsVo truckBusinessStatusStatistics() {
+        log.info("统计车辆业务状态数量(全部、空闲、任务中)");
+        Long entId = LoginUserHolder.getEntId();
+        // 统计全部车辆数量
+        List<KwfTruck> trucks = kwfTruckRepository.countByEntId(entId);
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty( trucks)){
+            return TruckBusinessStatusStatisticsVo.of(0L, 0L, 0L);
+        }
+        // 统计空闲车辆数量(business_status = 0)
+        Long idleCount = trucks.stream()
+                .filter(x -> x.getBusinessStatus() == 0)
+                .collect(Collectors.counting());
+        // 统计任务中车辆数量(business_status = 1)
+        Long busyCount = trucks.stream()
+                .filter(x -> x.getBusinessStatus() == 1)
+                .collect(Collectors.counting());
+        return TruckBusinessStatusStatisticsVo.of(Long.parseLong(String.valueOf(trucks.size())), idleCount, busyCount);
+    }
+
     /**
      * @param params {truckNo 車牌號}
      * @desc 车辆查询(业务关联 + 归属车辆)
@@ -1630,9 +1656,9 @@ public class KwfTruckService {
         
         try {
             // 使用 Feign 调用查询实时位置
-            BaseResult<VehicleReturnData> result = vehicleTraceClient.queryRealTimeLocation(vehicleDataDTO);
+            BaseIotResult<VehicleReturnData> result = vehicleTraceClient.queryRealTimeLocation(vehicleDataDTO);
             
-            if (result == null || result.getCode() != 0 || result.getData() == null) {
+            if (result == null || result.getCode() != "0" || result.getData() == null) {
                 log.warn("查询实时轨迹返回空数据, 运单号: {}", odrderNo);
                 return null;
             }
@@ -1650,9 +1676,9 @@ public class KwfTruckService {
         
         try {
             // 使用 Feign 调用查询实时位置
-            BaseResult<VehicleReturnData> result = vehicleTraceClient.queryRealTimeLocation(vehicleDataDTO);
+            BaseIotResult<VehicleReturnData> result = vehicleTraceClient.queryRealTimeLocation(vehicleDataDTO);
             
-            if (result == null || result.getCode() != 0 || result.getData() == null) {
+            if (result == null || result.getCode() != "0" || result.getData() == null) {
                 log.warn("查询实时轨迹返回空数据, 车牌号: {}", truckId);
                 return null;
             }

+ 2 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderController.java

@@ -271,7 +271,8 @@ public class KwoTradeOrderController {
      * @return: com.sckw.core.web.response.HttpResult
      */
     @PostMapping(value = "/tradeOrderStatistic", produces = MediaType.APPLICATION_JSON_VALUE)
-    public HttpResult statistic(@RequestBody @Validated TradeOrderListStatisticParam params) {
+    @Operation(summary = "查询贸易订单统计信息")
+    public HttpResult statistic(@RequestBody @Validated TradeOrderListSelectParam params) {
         return HttpResult.ok(kwoTradeOrderService.tradeOrderStatistic(params));
     }
 

+ 4 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderMapper.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.core.model.vo.TableTop;
 import com.sckw.order.api.model.OrderSaleVo;
 import com.sckw.order.api.model.TradeOrderCountStatisticsDTO;
+import com.sckw.order.api.model.TradeOrderPara;
+import com.sckw.order.api.model.TradeOrderVo;
 import com.sckw.order.model.KwoTradeOrder;
 import com.sckw.order.model.dto.*;
 import com.sckw.order.model.vo.res.TradeOrderAppStatisticVO;
@@ -146,4 +148,6 @@ public interface KwoTradeOrderMapper extends BaseMapper<KwoTradeOrder> {
     List<Long> selectGoodsId(@Param("entId") Long entId);
 
     List<OrderSaleVo> querySaleOrder(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end);
+
+    List<TradeOrderVo> selectData(@Param("para")TradeOrderPara para);
 }

+ 35 - 4
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java

@@ -25,6 +25,7 @@ import com.sckw.stream.model.SckwBusSum;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboService;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.stream.function.StreamBridge;
 import org.springframework.transaction.annotation.Transactional;
@@ -32,10 +33,6 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -581,6 +578,40 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         return orderDetailRes;
     }
 
+    @Override
+    public List<OrderDetailVo> queryByTradeOrderIds(Set<Long> tradeOrderIds) {
+         List<KwoTradeOrder> kwoTradeOrders = kwoTradeOrderRepository.queryByTradeOrderIds(tradeOrderIds);
+         if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwoTradeOrders)){
+             return List.of();
+         }
+
+        return kwoTradeOrders.stream().map(TradeOrderInfoServiceImpl::getOrderDetailVo).collect(Collectors.toList());
+    }
+
+    @NotNull
+    private static OrderDetailVo getOrderDetailVo(KwoTradeOrder x) {
+        OrderDetailVo orderDetailVo = new OrderDetailVo();
+        orderDetailVo.setEntId(x.getEntId());
+        orderDetailVo.setId(x.getId());
+        orderDetailVo.setTOrderNo(x.getTOrderNo());
+        orderDetailVo.setAmount(x.getAmount());
+        orderDetailVo.setUnit(x.getUnit());
+        orderDetailVo.setPrice(x.getPrice());
+        orderDetailVo.setTrading(x.getTrading());
+        orderDetailVo.setPickupType(x.getPickupType());
+        orderDetailVo.setDeliveryType(x.getDeliveryType());
+        orderDetailVo.setStartTime(x.getStartTime());
+        orderDetailVo.setEndTime(x.getEndTime());
+        orderDetailVo.setEntrustAmount(x.getEntrustAmount());
+        orderDetailVo.setActualAmount(x.getActualAmount());
+        orderDetailVo.setAssociateStatement(x.getAssociateStatement());
+        orderDetailVo.setSource(x.getSource());
+        orderDetailVo.setChargeType(x.getChargeType());
+        orderDetailVo.setConsignmentWay(x.getConsignmentWay());
+        orderDetailVo.setStatus(x.getStatus());
+        return orderDetailVo;
+    }
+
     @Override
     public List<Long> querySignGoods(Long entId) {
         return kwoTradeOrderService.querySignGoods(entId);

+ 26 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/feign/TradeOrderApiImpl.java

@@ -0,0 +1,26 @@
+package com.sckw.order.feign;
+
+import com.sckw.order.api.feign.TradeOrderApi;
+import com.sckw.order.api.model.TradeOrderPara;
+import com.sckw.order.api.model.TradeOrderVo;
+import com.sckw.order.serivce.KwoTradeOrderService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author xucaiqin
+ * @date 2025-12-01 15:26:28
+ */
+@RestController
+@RequiredArgsConstructor
+public class TradeOrderApiImpl implements TradeOrderApi {
+    private final KwoTradeOrderService kwoTradeOrderService;
+
+
+    @Override
+    public List<TradeOrderVo> queryTradeOrder(TradeOrderPara tradeOrderPara) {
+        return kwoTradeOrderService.queryOrder(tradeOrderPara);
+    }
+}

+ 2 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/TradeOrderAppStatisticParamDTO.java

@@ -27,9 +27,9 @@ public class TradeOrderAppStatisticParamDTO {
     private Integer orderType;
 
     /**
-     * 是否主账号(0是/1否)
+     * 是否主账号(1是/0否)
      */
     private Integer isMain;
 
 
-}
+}

+ 17 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/TradeOrderListSelectDTO.java

@@ -1,5 +1,6 @@
 package com.sckw.order.model.dto;
 
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -23,6 +24,8 @@ public class TradeOrderListSelectDTO {
      * 企业id
      */
     private Long entId;
+    //企业类型 1-卖方 2-买方
+    private Integer entType;
 
     /**
      * 用户id
@@ -30,9 +33,12 @@ public class TradeOrderListSelectDTO {
     private Long userId;
 
     /**
-     * 是否主账号(0是/1否)
+     * 是否主账号(1是/0否)
      */
     private Integer isMain;
+    //是否平台管理员
+    private Boolean manager;
+    private List<Long> entList;
 
     /**
      * 订单类型(1采购订单、2销售订单)
@@ -102,4 +108,13 @@ public class TradeOrderListSelectDTO {
      * 订单状态
      */
     private Integer status;
-}
+
+    @Schema(description = "供应单位")
+    private Long saleEntId;
+
+    @Schema(description = "采购单位")
+    private Long buyEntId;
+
+    @Schema(description = "承运单位")
+    private Long transportEntId;
+}

+ 1 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderDetailRes.java

@@ -84,6 +84,7 @@ public class OrderDetailRes implements Serializable {
      * 提货方式label
      */
     private String pickupTypeLabel;
+    private String payWayLabel;
 
     /**
      * 交付类型(签发交付、签收交付)

+ 6 - 13
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderListResVO.java

@@ -10,7 +10,6 @@ import lombok.experimental.Accessors;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.Date;
-import java.util.List;
 
 /**
  * @desc: 订单列表响应参数
@@ -169,33 +168,27 @@ public class OrderListResVO {
      */
     private String projectName;
 
-    /**
-     * 装货地址信息
-     */
-    private List<LoadAddressResVO> loadAddresses;
-    /**
-     * 卸货地址信息
-     */
-    private List<UnloadAddressResVO> unloadAddresses;
     /**
      * 装货地点名称
      */
-    private List<String> loadName;
+    private String loadName;
 
     /**
      * 装货地点
      */
-    private List<String> loadAddress;
+    private String loadAddress;
 
     /**
      * 卸货地点点名称
      */
-    private List<String> unloadName;
+    private String unloadName;
 
     /**
      * 卸货地点
      */
-    private List<String> unloadAddress;
+    private String unloadAddress;
+    private String unloadContact;
+    private String unloadContactPhone;
 
     /**
      * 计划开始时间

+ 6 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/repository/KwoTradeOrderRepository.java

@@ -43,4 +43,10 @@ public class KwoTradeOrderRepository extends ServiceImpl<KwoTradeOrderMapper, Kw
                 .eq(KwoTradeOrder::getId, tradeOrderId)
                 .eq(KwoTradeOrder::getDelFlag, 0));
     }
+
+    public List<KwoTradeOrder> queryByTradeOrderIds(Set<Long> tradeOrderIds) {
+        return list(Wrappers.<KwoTradeOrder>lambdaQuery()
+                .eq(KwoTradeOrder::getDelFlag, 0)
+                .in(KwoTradeOrder::getId, tradeOrderIds));
+    }
 }

+ 172 - 299
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -34,15 +35,17 @@ import com.sckw.core.web.response.HttpResult;
 import com.sckw.manage.api.RemoteManageService;
 import com.sckw.manage.api.model.dto.res.FindEntCooperateResVo;
 import com.sckw.mongo.model.SckwTradeOrder;
-import com.sckw.order.api.model.OrderSaleVo;
-import com.sckw.order.api.model.TradeOrderCountStatisticsDTO;
-import com.sckw.order.api.model.TradeOrderSettlePara;
+import com.sckw.order.api.model.*;
 import com.sckw.order.dao.KwoTradeOrderMapper;
 import com.sckw.order.enums.ContractStatusEnum;
 import com.sckw.order.enums.*;
 import com.sckw.order.model.*;
 import com.sckw.order.model.dto.*;
+import com.sckw.order.model.vo.req.ContractInfo;
 import com.sckw.order.model.vo.req.*;
+import com.sckw.order.model.vo.res.GoodsInfoDetailRes;
+import com.sckw.order.model.vo.res.OrderDetailRes;
+import com.sckw.order.model.vo.res.UnitInfoDetailRes;
 import com.sckw.order.model.vo.res.*;
 import com.sckw.payment.api.dubbo.PayCenterDubboService;
 import com.sckw.payment.api.dubbo.PaymentDubboService;
@@ -77,7 +80,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -147,12 +149,7 @@ public class KwoTradeOrderService {
      */
     public void addPurchaseOrderDraft(PurchaseOrderDraftParam param) {
         KwoTradeOrder order = BeanUtil.copyProperties(param, KwoTradeOrder.class);
-        order.setEntId(LoginUserHolder.getEntId())
-                .setTOrderNo(getOrderNo())
-                .setStartTime(DateUtils.localDateToDateStart(param.getStartTime()))
-                .setEndTime(DateUtils.localDateToDateEnd(param.getEndTime()))
-                .setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null)
-                .setSource(OrderSourceEnum.PURCHASE.getType()).setStatus(OrderStatusEnum.SAVED.getCode());
+        order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(getOrderNo()).setStartTime(DateUtils.localDateToDateStart(param.getStartTime())).setEndTime(DateUtils.localDateToDateEnd(param.getEndTime())).setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null).setSource(OrderSourceEnum.PURCHASE.getType()).setStatus(OrderStatusEnum.SAVED.getCode());
         kwoTradeOrderMapper.insert(order);
         addOtherOrderInfo(order, BeanUtil.copyProperties(param, ValetOrderParam.class), false, true);
     }
@@ -170,15 +167,7 @@ public class KwoTradeOrderService {
         Long id = tradeOrder.getId();
         String tOrderNo = tradeOrder.getTOrderNo();
         SckwTradeOrder order = new SckwTradeOrder();
-        order.setFirmName(LoginUserHolder.getEntName())
-                .setCreateByName(LoginUserHolder.getUserName())
-                .setUpdateByName(LoginUserHolder.getUserName())
-                .setTOrderId(id)
-                .setAssociateStatement(0)
-                .setPrice(Objects.isNull(tradeOrder.getPrice()) ? null : tradeOrder.getPrice().doubleValue())
-                .setAmount(Objects.isNull(tradeOrder.getAmount()) ? null : tradeOrder.getAmount().doubleValue())
-                .setEntrustAmount(Objects.isNull(tradeOrder.getEntrustAmount()) ? null : tradeOrder.getEntrustAmount().doubleValue())
-                .setActualAmount(Objects.isNull(tradeOrder.getActualAmount()) ? null : tradeOrder.getActualAmount().doubleValue());
+        order.setFirmName(LoginUserHolder.getEntName()).setCreateByName(LoginUserHolder.getUserName()).setUpdateByName(LoginUserHolder.getUserName()).setTOrderId(id).setAssociateStatement(0).setPrice(Objects.isNull(tradeOrder.getPrice()) ? null : tradeOrder.getPrice().doubleValue()).setAmount(Objects.isNull(tradeOrder.getAmount()) ? null : tradeOrder.getAmount().doubleValue()).setEntrustAmount(Objects.isNull(tradeOrder.getEntrustAmount()) ? null : tradeOrder.getEntrustAmount().doubleValue()).setActualAmount(Objects.isNull(tradeOrder.getActualAmount()) ? null : tradeOrder.getActualAmount().doubleValue());
 
         BeanUtil.copyProperties(tradeOrder, order);
 
@@ -188,9 +177,7 @@ public class KwoTradeOrderService {
         KwoTradeOrderGoods goods = BeanUtil.copyProperties(goodsInfo, KwoTradeOrderGoods.class);
         if (Objects.nonNull(goods) && Objects.nonNull(goods.getGoodsId())) {
             GoodsDetail goodsDetail = goodsInfoService.getDetailById(goods.getGoodsId());
-            if (Objects.isNull(goodsDetail)
-                    || !Objects.equals(goodsDetail.getStatus(), 1)
-                    || Objects.equals(goodsDetail.getDelFlag(), Global.YES)) {
+            if (Objects.isNull(goodsDetail) || !Objects.equals(goodsDetail.getStatus(), 1) || Objects.equals(goodsDetail.getDelFlag(), Global.YES)) {
                 throw new BusinessException("商品不存在或已下架!");
             }
             goods.setTOrderId(id).setTOrderNo(tOrderNo).setGoodsType(goodsDetail.getGoodsType());
@@ -212,9 +199,7 @@ public class KwoTradeOrderService {
             }
 
             //订单关联商品信息
-            order.setGoodsId(goodsDetail.getId()).setUnit(goodsDetail.getUnit()).setUnitPrice(goods.getUnitPrice().doubleValue())
-                    .setGoodsName(goodsDetail.getName()).setGoodsType(goodsDetail.getGoodsType()).setGoodsCode(goodsDetail.getCode())
-                    .setGoodsTaxRate(goodsDetail.getTaxRate()).setGoodsSpec(goodsDetail.getSpec()).setGoodsThumb(goodsDetail.getThumb());
+            order.setGoodsId(goodsDetail.getId()).setUnit(goodsDetail.getUnit()).setUnitPrice(goods.getUnitPrice().doubleValue()).setGoodsName(goodsDetail.getName()).setGoodsType(goodsDetail.getGoodsType()).setGoodsCode(goodsDetail.getCode()).setGoodsTaxRate(goodsDetail.getTaxRate()).setGoodsSpec(goodsDetail.getSpec()).setGoodsThumb(goodsDetail.getThumb());
         }
         if (Objects.isNull(order.getUnitPrice())) {
             order.setUnitPrice(BigDecimal.ZERO.doubleValue());
@@ -236,11 +221,9 @@ public class KwoTradeOrderService {
                 unit.setTOrderId(id).setTOrderNo(tOrderNo).setTopEntId(ent.getId());
                 list.add(unit);
                 if (Objects.equals(e.getUnitType(), OrderUnitTypeEnum.PURCHASE.getType())) {
-                    order.setProcureEntId(e.getEntId()).setProcureTopEntId(unit.getTopEntId()).setProcureFirmName(e.getFirmName())
-                            .setProcureContacts(e.getContacts()).setProcurePhone(e.getPhone()).setProcureContactsId(e.getContactsId());
+                    order.setProcureEntId(e.getEntId()).setProcureTopEntId(unit.getTopEntId()).setProcureFirmName(e.getFirmName()).setProcureContacts(e.getContacts()).setProcurePhone(e.getPhone()).setProcureContactsId(e.getContactsId());
                 } else {
-                    order.setSupplyEntId(e.getEntId()).setSupplyTopEntId(unit.getTopEntId()).setSupplyFirmName(e.getFirmName())
-                            .setSupplyContacts(e.getContacts()).setSupplyPhone(e.getPhone()).setSupplyContactsId(e.getContactsId());
+                    order.setSupplyEntId(e.getEntId()).setSupplyTopEntId(unit.getTopEntId()).setSupplyFirmName(e.getFirmName()).setSupplyContacts(e.getContacts()).setSupplyPhone(e.getPhone()).setSupplyContactsId(e.getContactsId());
                 }
             });
             kwoTradeOrderUnitService.insertBatch(list);
@@ -291,21 +274,16 @@ public class KwoTradeOrderService {
                 //todo MongoDB如何存多个地址信息?
                 if (Objects.equals(address.getAddressType(), OrderAddressTypeEnum.LOAD.getType())) {
                     address.setSort(loadSort.getAndIncrement());
-                    order.setLoadName(e.getName()).setLoadType(e.getType()).setLoadContacts(e.getContacts())
-                            .setLoadPhone(e.getPhone()).setLoadCityCode(String.valueOf(e.getCityCode())).setLoadCityName(e.getCityName())
-                            .setLoadDetailAddress(e.getDetailAddress()).setLoadLat(e.getLat()).setLoadLng(e.getLng());
+                    order.setLoadName(e.getName()).setLoadType(e.getType()).setLoadContacts(e.getContacts()).setLoadPhone(e.getPhone()).setLoadCityCode(String.valueOf(e.getCityCode())).setLoadCityName(e.getCityName()).setLoadDetailAddress(e.getDetailAddress()).setLoadLat(e.getLat()).setLoadLng(e.getLng());
                 } else {
                     address.setSort(unloadSort.getAndIncrement());
-                    order.setUnloadName(e.getName()).setUnloadType(e.getType()).setUnloadContacts(e.getContacts())
-                            .setUnloadPhone(e.getPhone()).setUnloadCityCode(String.valueOf(e.getCityCode())).setUnloadCityName(e.getCityName())
-                            .setUnloadDetailAddress(e.getDetailAddress()).setUnloadLat(e.getLat()).setUnloadLng(e.getLng());
+                    order.setUnloadName(e.getName()).setUnloadType(e.getType()).setUnloadContacts(e.getContacts()).setUnloadPhone(e.getPhone()).setUnloadCityCode(String.valueOf(e.getCityCode())).setUnloadCityName(e.getCityName()).setUnloadDetailAddress(e.getDetailAddress()).setUnloadLat(e.getLat()).setUnloadLng(e.getLng());
                 }
                 //地址信息
                 Long addressId = kwoTradeOrderAddressService.add(address);
                 //分配量信息
                 KwoTradeOrderAmount orderAmount = new KwoTradeOrderAmount();
-                orderAmount.setTOrderId(id).setAmount(e.getAmount())
-                        .setTAddressId(addressId);
+                orderAmount.setTOrderId(id).setAmount(e.getAmount()).setTAddressId(addressId);
                 tradeOrderAmountService.add(orderAmount);
             });
         }
@@ -357,12 +335,7 @@ public class KwoTradeOrderService {
      */
     public void addValetOrderDraft(ValetOrderDraftParam param) {
         KwoTradeOrder order = BeanUtil.copyProperties(param, KwoTradeOrder.class);
-        order.setEntId(LoginUserHolder.getEntId())
-                .setTOrderNo(getOrderNo())
-                .setStartTime(DateUtils.localDateToDateStart(param.getStartTime()))
-                .setEndTime(DateUtils.localDateToDateEnd(param.getEndTime()))
-                .setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null)
-                .setSource(OrderSourceEnum.SALE.getType()).setStatus(OrderStatusEnum.SAVED.getCode());
+        order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(getOrderNo()).setStartTime(DateUtils.localDateToDateStart(param.getStartTime())).setEndTime(DateUtils.localDateToDateEnd(param.getEndTime())).setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null).setSource(OrderSourceEnum.SALE.getType()).setStatus(OrderStatusEnum.SAVED.getCode());
         kwoTradeOrderMapper.insert(order);
         addOtherOrderInfo(order, BeanUtil.copyProperties(param, ValetOrderParam.class), false, true);
     }
@@ -381,17 +354,10 @@ public class KwoTradeOrderService {
         }
         OrderCheckDTO orderCheck = BeanUtil.copyProperties(param, OrderCheckDTO.class);
         getTopEnt(orderCheck, param.getUnitInfo());
-        orderCheck.setGoodsId(goodsInfo.getGoodsId()).setUnitPrice(goodsInfo.getUnitPrice())
-                .setOrderSource(OrderSourceEnum.PURCHASE.getType());
+        orderCheck.setGoodsId(goodsInfo.getGoodsId()).setUnitPrice(goodsInfo.getUnitPrice()).setOrderSource(OrderSourceEnum.PURCHASE.getType());
         orderCheck(orderCheck, false);
         KwoTradeOrder order = BeanUtil.copyProperties(param, KwoTradeOrder.class);
-        order.setEntId(LoginUserHolder.getEntId())
-                .setTOrderNo(getOrderNo())
-                .setStartTime(DateUtils.localDateToDateStart(param.getStartTime()))
-                .setEndTime(DateUtils.localDateToDateEnd(param.getEndTime()))
-                .setUnit(param.getGoodsInfo().getUnit())
-                .setSource(OrderSourceEnum.PURCHASE.getType())
-                .setStatus(OrderStatusEnum.WAIT_ACCEPTED.getCode());
+        order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(getOrderNo()).setStartTime(DateUtils.localDateToDateStart(param.getStartTime())).setEndTime(DateUtils.localDateToDateEnd(param.getEndTime())).setUnit(param.getGoodsInfo().getUnit()).setSource(OrderSourceEnum.PURCHASE.getType()).setStatus(OrderStatusEnum.WAIT_ACCEPTED.getCode());
         kwoTradeOrderMapper.insert(order);
         //扣减库存
         HttpResult updateResult = goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
@@ -466,10 +432,7 @@ public class KwoTradeOrderService {
         urls.put(ClientTypeEnum.pc.getValue(), pcUrl);
         urls.put(ClientTypeEnum.app.getValue(), appUrl);
         SckwMessage msg = new SckwMessage(msgEnum);
-        msg.setParams(params)
-                .setMsgUrls(urls)
-                .setUserInfos(userInfos)
-                .setCreateBy(LoginUserHolder.getUserId());
+        msg.setParams(params).setMsgUrls(urls).setUserInfos(userInfos).setCreateBy(LoginUserHolder.getUserId());
         log.info("有新的提醒消息:{}", JSON.toJSONString(msg));
         streamBridge.send("sckw-message", JSON.toJSONString(msg));
     }
@@ -532,11 +495,9 @@ public class KwoTradeOrderService {
             }
             List<FindEntCooperateResVo> entCooperate;
             if (OrderSourceEnum.PURCHASE.getType().equals(param.getOrderSource())) {
-                entCooperate = remoteManageService.findEntCooperate(param.getProcureEntId()
-                        , param.getSupplyEntId(), CooperateTypeEnum.SUPPLIER.getCode());
+                entCooperate = remoteManageService.findEntCooperate(param.getProcureEntId(), param.getSupplyEntId(), CooperateTypeEnum.SUPPLIER.getCode());
             } else {
-                entCooperate = remoteManageService.findEntCooperate(param.getSupplyEntId()
-                        , param.getProcureEntId(), CooperateTypeEnum.PURCHASER.getCode());
+                entCooperate = remoteManageService.findEntCooperate(param.getSupplyEntId(), param.getProcureEntId(), CooperateTypeEnum.PURCHASER.getCode());
             }
             if (CollectionUtils.isEmpty(entCooperate)) {
                 throw new BusinessException("供采双方企业无合作关系!");
@@ -578,19 +539,13 @@ public class KwoTradeOrderService {
     public void addValetOrderSubmit(ValetOrderParam param) {
         OrderCheckDTO orderCheck = BeanUtil.copyProperties(param, OrderCheckDTO.class);
         getTopEnt(orderCheck, param.getUnitInfo());
-        orderCheck.setGoodsId(param.getGoodsInfo().getGoodsId()).setUnitPrice(param.getGoodsInfo().getUnitPrice())
-                .setOrderSource(OrderSourceEnum.SALE.getType());
+        orderCheck.setGoodsId(param.getGoodsInfo().getGoodsId()).setUnitPrice(param.getGoodsInfo().getUnitPrice()).setOrderSource(OrderSourceEnum.SALE.getType());
         orderCheck(orderCheck, false);
         ContractInfo contract = param.getContractInfo();
         contractCheck(contract);
         param.setContractInfo(contract);
         KwoTradeOrder order = BeanUtil.copyProperties(param, KwoTradeOrder.class);
-        order.setEntId(LoginUserHolder.getEntId())
-                .setTOrderNo(getOrderNo())
-                .setStartTime(DateUtils.localDateToDateStart(param.getStartTime()))
-                .setEndTime(DateUtils.localDateToDateEnd(param.getEndTime()))
-                .setUnit(param.getGoodsInfo().getUnit())
-                .setSource(OrderSourceEnum.SALE.getType());
+        order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(getOrderNo()).setStartTime(DateUtils.localDateToDateStart(param.getStartTime())).setEndTime(DateUtils.localDateToDateEnd(param.getEndTime())).setUnit(param.getGoodsInfo().getUnit()).setSource(OrderSourceEnum.SALE.getType());
         String contractStatus = contract.getContractStatus();
         if (Objects.equals(contractStatus, ContractStatusEnum.WAIT_SIGNED.getCode())) {
             order.setStatus(OrderStatusEnum.WAIT_SIGNED.getCode());
@@ -607,8 +562,7 @@ public class KwoTradeOrderService {
         }
         //冻结金额
         if (param.getTrading().startsWith("1")) {
-            HttpResult freezeResult = paymentDubboService.freezeMoney(orderCheck.getProcureTopEntId(),
-                    ChannelEnum.getByTrading(param.getTrading()), orderCheck.getSupplyTopEntId(), param.getPrice(), order.getId());
+            HttpResult freezeResult = paymentDubboService.freezeMoney(orderCheck.getProcureTopEntId(), ChannelEnum.getByTrading(param.getTrading()), orderCheck.getSupplyTopEntId(), param.getPrice(), order.getId());
             if (!Objects.equals(HttpStatus.SUCCESS_CODE, freezeResult.getCode())) {
                 throw new BusinessException(freezeResult.getMsg());
             }
@@ -714,11 +668,7 @@ public class KwoTradeOrderService {
         if (Objects.isNull(order)) {
             throw new BusinessException("不存在该订单!");
         }
-        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(
-                List.of(DictTypeEnum.TRADE_TYPE.getType(), DictTypeEnum.PICKUP_TYPE.getType(),
-                        DictTypeEnum.DELIVERY_TYPE.getType(), DictTypeEnum.TORDER_SOURCE.getType(), DictTypeEnum.TORDER_STATUS.getType(),
-                        DictTypeEnum.PRODUCT_NAME_TYPE.getType(), DictTypeEnum.UNIT_TYPE.getType(), DictTypeEnum.TAX_RATE.getType(),
-                        DictTypeEnum.TORDER_UNIT_TYPE.getType(), DictTypeEnum.TORDER_ADDRESS_TYPE.getType(), DictTypeEnum.ADDRESS_TYPE.getType(), DictTypeEnum.CONSIGNMENT_WAY.getType(), DictTypeEnum.CHARGING_TYPE.getType()));
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.TRADE_TYPE.getType(), DictTypeEnum.PICKUP_TYPE.getType(), DictTypeEnum.DELIVERY_TYPE.getType(), DictTypeEnum.TORDER_SOURCE.getType(), DictTypeEnum.TORDER_STATUS.getType(), DictTypeEnum.PRODUCT_NAME_TYPE.getType(), DictTypeEnum.UNIT_TYPE.getType(), DictTypeEnum.TAX_RATE.getType(), DictTypeEnum.TORDER_UNIT_TYPE.getType(), DictTypeEnum.TORDER_ADDRESS_TYPE.getType(), DictTypeEnum.ADDRESS_TYPE.getType(), DictTypeEnum.CONSIGNMENT_WAY.getType(), DictTypeEnum.CHARGING_TYPE.getType()));
         Map<String, String> tradeMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         Map<String, String> pickupMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         Map<String, String> deleveryMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
@@ -732,7 +682,7 @@ public class KwoTradeOrderService {
         Map<String, String> orderUnitMap, orderAddressMap, addressMap;
         if (CollUtil.isNotEmpty(dict)) {
             tradeMap = dict.get(DictTypeEnum.TRADE_TYPE.getType());
-            pickupMap = dict.get(DictTypeEnum.PICKUP_TYPE.getType());
+            pickupMap = dict.get(DictTypeEnum.CONSIGNMENT_WAY.getType());
             deleveryMap = dict.get(DictTypeEnum.DELIVERY_TYPE.getType());
             sourceMap = dict.get(DictTypeEnum.TORDER_SOURCE.getType());
             statusMap = dict.get(DictTypeEnum.TORDER_STATUS.getType());
@@ -753,16 +703,7 @@ public class KwoTradeOrderService {
         OrderDetailRes detail = BeanUtil.copyProperties(order, OrderDetailRes.class);
         UserCacheResDto createUser = remoteSystemService.queryUserCacheById(detail.getCreateBy());
         EntCacheResDto ent = remoteSystemService.queryEntCacheById(detail.getEntId());
-        detail.setFirmName(Objects.isNull(ent) ? null : ent.getFirmName())
-                .setCreateByName(Objects.isNull(createUser) ? null : createUser.getName())
-                .setTradingLabel(CollUtil.isNotEmpty(tradeMap) ? tradeMap.get(detail.getTrading()) : null)
-                .setPickupTypeLabel(CollUtil.isNotEmpty(pickupMap) ? pickupMap.get(detail.getPickupType()) : null)
-                .setDeliveryTypeLabel(CollUtil.isNotEmpty(deleveryMap) ? deleveryMap.get(detail.getDeliveryType()) : null)
-                .setSourceLabel(CollUtil.isNotEmpty(sourceMap) ? sourceMap.get(detail.getSource()) : null)
-                .setStatusLabel(CollUtil.isNotEmpty(statusMap) ? statusMap.get(String.valueOf(detail.getStatus())) : null)
-                .setChargeTypeLabel(CollUtil.isNotEmpty(chargeTypeMap) ? chargeTypeMap.get(String.valueOf(detail.getChargeType())) : null)
-                .setConsignmentWayLabel(CollUtil.isNotEmpty(consignmentWayMap) ? consignmentWayMap.get(String.valueOf(detail.getConsignmentWay())) : null)
-        ;
+        detail.setFirmName(Objects.isNull(ent) ? null : ent.getFirmName()).setCreateByName(Objects.isNull(createUser) ? null : createUser.getName()).setTradingLabel(CollUtil.isNotEmpty(tradeMap) ? tradeMap.get(detail.getTrading()) : null).setPickupTypeLabel(CollUtil.isNotEmpty(pickupMap) ? pickupMap.get(detail.getPickupType()) : null).setDeliveryTypeLabel(CollUtil.isNotEmpty(deleveryMap) ? deleveryMap.get(detail.getDeliveryType()) : null).setSourceLabel(CollUtil.isNotEmpty(sourceMap) ? sourceMap.get(detail.getSource()) : null).setStatusLabel(CollUtil.isNotEmpty(statusMap) ? statusMap.get(String.valueOf(detail.getStatus())) : null).setChargeTypeLabel(CollUtil.isNotEmpty(chargeTypeMap) ? chargeTypeMap.get(String.valueOf(detail.getChargeType())) : null).setConsignmentWayLabel(CollUtil.isNotEmpty(consignmentWayMap) ? consignmentWayMap.get(String.valueOf(detail.getConsignmentWay())) : null);
         if (Objects.equals(detail.getChargeType(), 1)) {//按装货量
             detail.setDealAmount(detail.getLoadAmount());
         } else {
@@ -775,16 +716,7 @@ public class KwoTradeOrderService {
             if (Objects.nonNull(goods)) {
                 EntCacheResDto entCache = remoteSystemService.queryEntCacheById(goods.getEntId());
                 GoodsInfoDetailRes goodsDetail = new GoodsInfoDetailRes();
-                goodsDetail.setGoodsTypeLabel(CollUtil.isNotEmpty(prodcutNameMap) ? prodcutNameMap.get(goods.getGoodsType()) : null)
-                        .setUnitLabel(CollUtil.isNotEmpty(unitMap) ? unitMap.get(goods.getUnit()) : null)
-                        .setTaxRateLabel(CollUtil.isNotEmpty(taxRateMap) ? taxRateMap.get(goods.getTaxRate()) : null)
-                        .setGoodsAmount(goods.getAmount())
-                        .setGoodsId(goods.getId()).setCode(goods.getCode()).setName(goods.getName())
-                        .setGoodsType(goods.getGoodsType()).setTaxRate(goods.getTaxRate()).setSpec(goods.getSpec())
-                        .setUnit(goods.getUnit()).setPriceRangeId(orderGoods.getPriceRangeId()).setUnitPrice(orderGoods.getUnitPrice())
-                        .setSkuId(orderGoods.getSkuId()).setCollectionUnitId(goods.getEntId()).setGoodsThumb(goods.getThumb())
-                        .setPrepaidLimit(goods.getPrepaidLimit()).setAdvancePrice(goods.getAdvancePrice())
-                        .setCollectionUnit(Objects.isNull(entCache) ? null : entCache.getFirmName());
+                goodsDetail.setGoodsTypeLabel(CollUtil.isNotEmpty(prodcutNameMap) ? prodcutNameMap.get(goods.getGoodsType()) : null).setUnitLabel(CollUtil.isNotEmpty(unitMap) ? unitMap.get(goods.getUnit()) : null).setTaxRateLabel(CollUtil.isNotEmpty(taxRateMap) ? taxRateMap.get(goods.getTaxRate()) : null).setGoodsAmount(goods.getAmount()).setGoodsId(goods.getId()).setCode(goods.getCode()).setName(goods.getName()).setGoodsType(goods.getGoodsType()).setTaxRate(goods.getTaxRate()).setSpec(goods.getSpec()).setUnit(goods.getUnit()).setPriceRangeId(orderGoods.getPriceRangeId()).setUnitPrice(orderGoods.getUnitPrice()).setSkuId(orderGoods.getSkuId()).setCollectionUnitId(goods.getEntId()).setGoodsThumb(goods.getThumb()).setPrepaidLimit(goods.getPrepaidLimit()).setAdvancePrice(goods.getAdvancePrice()).setCollectionUnit(Objects.isNull(entCache) ? null : entCache.getFirmName());
                 detail.setGoodsInfo(goodsDetail);
                 if (Objects.equals(detail.getChargeType(), 1)) {//按装货量
                     detail.setDealMoney(NumberUtil.mul(orderGoods.getUnitPrice(), detail.getLoadAmount()));
@@ -858,11 +790,10 @@ public class KwoTradeOrderService {
                 contractInfo.setContractId(d.getContractId());
                 contractInfo.setContractNo(d.getContractNo());
                 Optional.ofNullable(contractMap.get(d.getContractId())).ifPresent(c -> {
-                            contractInfo.setContractName(c.getContactName());
-                            contractInfo.setContractSigningWay(c.getSigningWayName());
-                            contractInfo.setContractStatus(c.getStatusName());
-                        }
-                );
+                    contractInfo.setContractName(c.getContactName());
+                    contractInfo.setContractSigningWay(c.getSigningWayName());
+                    contractInfo.setContractStatus(c.getStatusName());
+                });
                 return contractInfo;
             }).collect(Collectors.toList());
             detail.setContractInfoList(collect);
@@ -899,15 +830,13 @@ public class KwoTradeOrderService {
         }
         String source = order.getSource();
         Integer status = order.getStatus();
-        if ((!Objects.equals(status, OrderStatusEnum.SAVED.getCode()) && !Objects.equals(status, OrderStatusEnum.RETURNED.getCode()))
-                && Objects.equals(source, OrderSourceEnum.PURCHASE.getType())) {
+        if ((!Objects.equals(status, OrderStatusEnum.SAVED.getCode()) && !Objects.equals(status, OrderStatusEnum.RETURNED.getCode())) && Objects.equals(source, OrderSourceEnum.PURCHASE.getType())) {
             throw new BusinessException("采购下单只能修改已保存及已退回状态的订单!");
         }
         if (Objects.equals(source, OrderSourceEnum.SALE.getType()) && !Objects.equals(status, OrderStatusEnum.SAVED.getCode())) {
             throw new BusinessException("代客下单只能修改已保存状态的订单!");
         }
-        if (!Objects.equals(0, order.getStatus())
-                && kwoTradeOrderUnitService.entMatch(param.getId(), LoginUserHolder.getEntId(), source)) {
+        if (!Objects.equals(0, order.getStatus()) && kwoTradeOrderUnitService.entMatch(param.getId(), LoginUserHolder.getEntId(), source)) {
             throw new BusinessException("无权限修改此订单!");
         }
         OrderCheckDTO orderCheck = new OrderCheckDTO();
@@ -930,8 +859,7 @@ public class KwoTradeOrderService {
             }
             orderCheck = BeanUtil.copyProperties(param, OrderCheckDTO.class);
             getTopEnt(orderCheck, param.getUnitInfo());
-            orderCheck.setGoodsId(param.getGoodsInfo().getGoodsId()).setUnitPrice(param.getGoodsInfo().getUnitPrice())
-                    .setOrderSource(source);
+            orderCheck.setGoodsId(param.getGoodsInfo().getGoodsId()).setUnitPrice(param.getGoodsInfo().getUnitPrice()).setOrderSource(source);
             orderCheck(orderCheck, false);
             //扣减库存
             HttpResult updateResult = goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
@@ -940,31 +868,15 @@ public class KwoTradeOrderService {
             }
             //代客下单冻结金额
             if (Objects.equals(source, OrderSourceEnum.SALE.getType()) && param.getTrading().startsWith("1")) {
-                HttpResult freezeResult = paymentDubboService.freezeMoney(orderCheck.getProcureTopEntId(),
-                        ChannelEnum.getByTrading(param.getTrading()), orderCheck.getSupplyTopEntId(), param.getPrice(), order.getId());
+                HttpResult freezeResult = paymentDubboService.freezeMoney(orderCheck.getProcureTopEntId(), ChannelEnum.getByTrading(param.getTrading()), orderCheck.getSupplyTopEntId(), param.getPrice(), order.getId());
                 if (!Objects.equals(HttpStatus.SUCCESS_CODE, freezeResult.getCode())) {
                     throw new BusinessException(freezeResult.getMsg());
                 }
             }
         }
-        order.setAmount(param.getAmount()).setUnit(Objects.isNull(param.getGoodsInfo()) ? null : param.getGoodsInfo().getUnit())
-                .setPrice(param.getPrice()).setTrading(param.getTrading()).setPickupType(param.getPickupType())
-                .setDeliveryType(param.getDeliveryType())
-                .setStartTime(DateUtils.localDateToDateStart(param.getStartTime()))
-                .setEndTime(DateUtils.localDateToDateEnd(param.getEndTime()))
-                .setRemark(param.getRemark());
+        order.setAmount(param.getAmount()).setUnit(Objects.isNull(param.getGoodsInfo()) ? null : param.getGoodsInfo().getUnit()).setPrice(param.getPrice()).setTrading(param.getTrading()).setPickupType(param.getPickupType()).setDeliveryType(param.getDeliveryType()).setStartTime(DateUtils.localDateToDateStart(param.getStartTime())).setEndTime(DateUtils.localDateToDateEnd(param.getEndTime())).setRemark(param.getRemark());
         LambdaUpdateWrapper<KwoTradeOrder> wrapper = new LambdaUpdateWrapper<>();
-        wrapper.set(KwoTradeOrder::getAmount, order.getAmount())
-                .set(KwoTradeOrder::getUnit, order.getUnit())
-                .set(KwoTradeOrder::getPrice, order.getPrice())
-                .set(KwoTradeOrder::getTrading, order.getTrading())
-                .set(KwoTradeOrder::getPickupType, order.getPickupType())
-                .set(KwoTradeOrder::getDeliveryType, order.getDeliveryType())
-                .set(KwoTradeOrder::getStartTime, order.getStartTime())
-                .set(KwoTradeOrder::getEndTime, order.getEndTime())
-                .set(KwoTradeOrder::getRemark, order.getRemark())
-                .set(KwoTradeOrder::getStatus, order.getStatus())
-                .eq(KwoTradeOrder::getId, order.getId());
+        wrapper.set(KwoTradeOrder::getAmount, order.getAmount()).set(KwoTradeOrder::getUnit, order.getUnit()).set(KwoTradeOrder::getPrice, order.getPrice()).set(KwoTradeOrder::getTrading, order.getTrading()).set(KwoTradeOrder::getPickupType, order.getPickupType()).set(KwoTradeOrder::getDeliveryType, order.getDeliveryType()).set(KwoTradeOrder::getStartTime, order.getStartTime()).set(KwoTradeOrder::getEndTime, order.getEndTime()).set(KwoTradeOrder::getRemark, order.getRemark()).set(KwoTradeOrder::getStatus, order.getStatus()).eq(KwoTradeOrder::getId, order.getId());
         kwoTradeOrderMapper.update(null, wrapper);
         ValetOrderParam valetOrderParam = BeanUtil.copyProperties(param, ValetOrderParam.class);
 
@@ -1097,8 +1009,7 @@ public class KwoTradeOrderService {
     public void acceptanceOrder(AcceptanceOrderParam param) {
         BigDecimal amount = param.getAmount();
         List<UpdateAddressAmountParam> addressAmountParams = param.getAddressAmountParams();
-        BigDecimal totalLoadAmount = addressAmountParams.stream()
-                .map(UpdateAddressAmountParam::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal totalLoadAmount = addressAmountParams.stream().map(UpdateAddressAmountParam::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
         if (amount.compareTo(totalLoadAmount) != 0) {
             throw new BusinessException("分配卸货量总量与订单总量不相符!");
         }
@@ -1107,8 +1018,7 @@ public class KwoTradeOrderService {
         if (unloadCount > 0) {
             throw new BusinessException("装货地址类型信息有误!");
         }
-        BigDecimal totalUnLoadAmount = loadAddressInfoDto.stream()
-                .map(AddressInfoDto::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal totalUnLoadAmount = loadAddressInfoDto.stream().map(AddressInfoDto::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
         if (amount.compareTo(totalUnLoadAmount) != 0) {
             throw new BusinessException("分配装货量总量与订单总量不相符!");
         }
@@ -1131,8 +1041,7 @@ public class KwoTradeOrderService {
         }
         List<KwoTradeOrderUnit> units = kwoTradeOrderUnitService.getByOrderId(order.getId());
         Long saleUnitId = param.getSaleUnitParam().getId();
-        KwoTradeOrderUnit saleUnit = units.stream().filter(e -> Objects.equals(e.getId(), saleUnitId) &&
-                Objects.equals(e.getUnitType(), OrderUnitTypeEnum.SALE.getType())).findFirst().orElse(null);
+        KwoTradeOrderUnit saleUnit = units.stream().filter(e -> Objects.equals(e.getId(), saleUnitId) && Objects.equals(e.getUnitType(), OrderUnitTypeEnum.SALE.getType())).findFirst().orElse(null);
         if (Objects.isNull(saleUnit)) {
             throw new BusinessException("我方单位信息异常!");
         }
@@ -1157,8 +1066,7 @@ public class KwoTradeOrderService {
         orderCheck(orderCheck, true);
         //冻结金额
         if (param.getTrading().startsWith("1")) {
-            HttpResult freezeResult = paymentDubboService.freezeMoney(orderCheck.getProcureTopEntId(),
-                    ChannelEnum.getByTrading(param.getTrading()), orderCheck.getSupplyTopEntId(), param.getPrice(), order.getId());
+            HttpResult freezeResult = paymentDubboService.freezeMoney(orderCheck.getProcureTopEntId(), ChannelEnum.getByTrading(param.getTrading()), orderCheck.getSupplyTopEntId(), param.getPrice(), order.getId());
             if (!Objects.equals(HttpStatus.SUCCESS_CODE, freezeResult.getCode())) {
                 throw new BusinessException(freezeResult.getMsg());
             }
@@ -1175,8 +1083,7 @@ public class KwoTradeOrderService {
         } else {
             throw new BusinessException("Invalid contract status");
         }
-        order.setStartTime(DateUtils.localDateToDateStart(param.getStartTime()))
-                .setEndTime(DateUtils.localDateToDateEnd(param.getEndTime()));
+        order.setStartTime(DateUtils.localDateToDateStart(param.getStartTime())).setEndTime(DateUtils.localDateToDateEnd(param.getEndTime()));
         kwoTradeOrderMapper.updateById(order);
         //更新商品价格
         kwoTradeOrderGoodsService.updateUnitPrice(param.getId(), param.getUnitPrice());
@@ -1185,8 +1092,7 @@ public class KwoTradeOrderService {
             kwoTradeOrderUnitService.updateById(saleUnit);
         }
         //更新装货地址信息
-        List<Long> oldLoadAddressIds = kwoTradeOrderAddressService.getByOrderIdAndType(param.getId(), OrderAddressTypeEnum.LOAD.getType())
-                .stream().map(KwoTradeOrderAddress::getId).toList();
+        List<Long> oldLoadAddressIds = kwoTradeOrderAddressService.getByOrderIdAndType(param.getId(), OrderAddressTypeEnum.LOAD.getType()).stream().map(KwoTradeOrderAddress::getId).toList();
         if (CollUtil.isNotEmpty(oldLoadAddressIds)) {
             kwoTradeOrderAddressService.delByIds(oldLoadAddressIds);
             tradeOrderAmountService.delByOrderIdAndAddressIds(param.getId(), oldLoadAddressIds);
@@ -1194,14 +1100,12 @@ public class KwoTradeOrderService {
         AtomicInteger loadSort = new AtomicInteger(0);
         loadAddressInfoDto.forEach(e -> {
             KwoTradeOrderAddress address = BeanUtil.copyProperties(e, KwoTradeOrderAddress.class);
-            address.setTOrderId(param.getId()).setTOrderNo(order.getTOrderNo())
-                    .setSort(loadSort.getAndIncrement());
+            address.setTOrderId(param.getId()).setTOrderNo(order.getTOrderNo()).setSort(loadSort.getAndIncrement());
             //地址信息
             Long addressId = kwoTradeOrderAddressService.add(address);
             //分配量信息
             KwoTradeOrderAmount orderAmount = new KwoTradeOrderAmount();
-            orderAmount.setTOrderId(param.getId()).setAmount(e.getAmount())
-                    .setTAddressId(addressId);
+            orderAmount.setTOrderId(param.getId()).setAmount(e.getAmount()).setTAddressId(addressId);
             tradeOrderAmountService.add(orderAmount);
         });
         //更新卸货地址分配量信息
@@ -1223,20 +1127,7 @@ public class KwoTradeOrderService {
         }
         //更新mongodb
         SckwTradeOrder updateParam = BeanUtil.copyProperties(param, SckwTradeOrder.class);
-        updateParam.setTOrderId(param.getId())
-                .setStatus(order.getStatus())
-                .setStartTime(DateUtils.localDateToDateStart(param.getStartTime()))
-                .setEndTime(DateUtils.localDateToDateEnd(param.getEndTime()))
-                .setPrice(order.getPrice().doubleValue())
-                .setAmount(order.getAmount().doubleValue())
-                .setUnitPrice(param.getUnitPrice().doubleValue())
-                .setContractId(contractInfo.getContractId())
-                .setContractNo(contractInfo.getContractNo())
-                .setContractName(contractInfo.getContractName())
-                .setContractSigningWay(contractInfo.getContractSigningWay())
-                .setUpdateBy(LoginUserHolder.getUserId())
-                .setUpdateByName(LoginUserHolder.getUserName())
-                .setUpdateTime(new Date());
+        updateParam.setTOrderId(param.getId()).setStatus(order.getStatus()).setStartTime(DateUtils.localDateToDateStart(param.getStartTime())).setEndTime(DateUtils.localDateToDateEnd(param.getEndTime())).setPrice(order.getPrice().doubleValue()).setAmount(order.getAmount().doubleValue()).setUnitPrice(param.getUnitPrice().doubleValue()).setContractId(contractInfo.getContractId()).setContractNo(contractInfo.getContractNo()).setContractName(contractInfo.getContractName()).setContractSigningWay(contractInfo.getContractSigningWay()).setUpdateBy(LoginUserHolder.getUserId()).setUpdateByName(LoginUserHolder.getUserName()).setUpdateTime(new Date());
         saveMongoDb(3, updateParam);
 
     }
@@ -1273,8 +1164,7 @@ public class KwoTradeOrderService {
         }
         //mongodb更新订单状态
         SckwTradeOrder updateParam = new SckwTradeOrder();
-        updateParam.setTOrderId(order.getId()).setStatus(order.getStatus()).setUpdateBy(LoginUserHolder.getUserId())
-                .setUpdateByName(LoginUserHolder.getUserName()).setUpdateTime(new Date());
+        updateParam.setTOrderId(order.getId()).setStatus(order.getStatus()).setUpdateBy(LoginUserHolder.getUserId()).setUpdateByName(LoginUserHolder.getUserName()).setUpdateTime(new Date());
         saveMongoDb(3, updateParam);
         //发送提醒消息
         List<KwoTradeOrderUnit> units = kwoTradeOrderUnitService.getByOrderId(order.getId());
@@ -1292,8 +1182,7 @@ public class KwoTradeOrderService {
     private void rejectOrderSendMsg(List<KwoTradeOrderUnit> units, KwoTradeOrder order) {
         Map<String, Object> map = CollectionUtils.createHashMap();
         map.put("orderNo", order.getTOrderNo());
-        Map<String, KwoTradeOrderUnit> unitMap = units.stream().collect
-                (Collectors.toMap(KwoTradeOrderUnit::getUnitType, Function.identity()));
+        Map<String, KwoTradeOrderUnit> unitMap = units.stream().collect(Collectors.toMap(KwoTradeOrderUnit::getUnitType, Function.identity()));
         KwoTradeOrderUnit purchase = unitMap.get(OrderUnitTypeEnum.PURCHASE.getType());
         KwoTradeOrderUnit supply = unitMap.get(OrderUnitTypeEnum.SALE.getType());
         //给供应企业联系人发消息
@@ -1389,8 +1278,7 @@ public class KwoTradeOrderService {
             remoteContractService.updatePerformed(contract.getContractId(), actualAmount);
             //mongodb更新订单状态
             SckwTradeOrder updateParam = new SckwTradeOrder();
-            updateParam.setTOrderId(order.getId()).setActualAmount(order.getActualAmount().doubleValue()).setStatus(order.getStatus())
-                    .setUpdateBy(LoginUserHolder.getUserId()).setUpdateByName(LoginUserHolder.getUserName()).setUpdateTime(new Date());
+            updateParam.setTOrderId(order.getId()).setActualAmount(order.getActualAmount().doubleValue()).setStatus(order.getStatus()).setUpdateBy(LoginUserHolder.getUserId()).setUpdateByName(LoginUserHolder.getUserName()).setUpdateTime(new Date());
             saveMongoDb(3, updateParam);
         } finally {
             RedissonUtils.unlock(lockKey);
@@ -1416,8 +1304,7 @@ public class KwoTradeOrderService {
         }
         //排除草稿状态权限匹配
         List<Long> filterIds = list.stream().filter(e -> !(Objects.equals(e.getStatus(), 0))).map(KwoTradeOrder::getId).toList();
-        if (CollUtil.isNotEmpty(filterIds) &&
-                kwoTradeOrderUnitService.entBatchMatch(filterIds, LoginUserHolder.getEntId(), String.valueOf(param.getOrderType()))) {
+        if (CollUtil.isNotEmpty(filterIds) && kwoTradeOrderUnitService.entBatchMatch(filterIds, LoginUserHolder.getEntId(), String.valueOf(param.getOrderType()))) {
             throw new BusinessException("无订单操作权限!");
         }
         LambdaUpdateWrapper<KwoTradeOrder> updateWrapper = new LambdaUpdateWrapper<>();
@@ -1431,8 +1318,7 @@ public class KwoTradeOrderService {
         //更新mongodb
         ids.forEach(id -> {
             SckwTradeOrder updateParam = new SckwTradeOrder();
-            updateParam.setTOrderId(id).setDelFlag(Global.YES).setUpdateBy(LoginUserHolder.getUserId())
-                    .setUpdateByName(LoginUserHolder.getUserName()).setUpdateTime(new Date());
+            updateParam.setTOrderId(id).setDelFlag(Global.YES).setUpdateBy(LoginUserHolder.getUserId()).setUpdateByName(LoginUserHolder.getUserName()).setUpdateTime(new Date());
             saveMongoDb(3, updateParam);
         });
 
@@ -1473,8 +1359,7 @@ public class KwoTradeOrderService {
      */
     public List<KwoTradeOrder> getWaitSignByIds(List<Long> tOrderIds) {
         LambdaQueryWrapper<KwoTradeOrder> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(KwoTradeOrder::getStatus, OrderStatusEnum.WAIT_SIGNED.getCode())
-                .in(KwoTradeOrder::getId, tOrderIds).eq(KwoTradeOrder::getDelFlag, Global.NO);
+        wrapper.eq(KwoTradeOrder::getStatus, OrderStatusEnum.WAIT_SIGNED.getCode()).in(KwoTradeOrder::getId, tOrderIds).eq(KwoTradeOrder::getDelFlag, Global.NO);
         List<KwoTradeOrder> list = kwoTradeOrderMapper.selectList(wrapper);
         return CollUtil.emptyIfNull(list);
     }
@@ -1489,9 +1374,7 @@ public class KwoTradeOrderService {
      */
     public void contractCompletedUpdate(List<Long> tOrderIds, Long updateBy) {
         LambdaUpdateWrapper<KwoTradeOrder> wrapper = new LambdaUpdateWrapper<>();
-        wrapper.in(KwoTradeOrder::getId, tOrderIds).eq(KwoTradeOrder::getStatus, OrderStatusEnum.WAIT_SIGNED.getCode())
-                .eq(KwoTradeOrder::getDelFlag, Global.NO).set(KwoTradeOrder::getUpdateBy, updateBy)
-                .set(KwoTradeOrder::getStatus, OrderStatusEnum.EXECUTING.getCode());
+        wrapper.in(KwoTradeOrder::getId, tOrderIds).eq(KwoTradeOrder::getStatus, OrderStatusEnum.WAIT_SIGNED.getCode()).eq(KwoTradeOrder::getDelFlag, Global.NO).set(KwoTradeOrder::getUpdateBy, updateBy).set(KwoTradeOrder::getStatus, OrderStatusEnum.EXECUTING.getCode());
         kwoTradeOrderMapper.update(null, wrapper);
     }
 
@@ -1516,8 +1399,7 @@ public class KwoTradeOrderService {
             return res;
         }
         //装卸货地址类型分组获取装卸货cityCodes
-        Map<String, List<Integer>> map = addressList.stream().collect(Collectors.
-                groupingBy(KwoTradeOrderAddress::getAddressType, Collectors.mapping(KwoTradeOrderAddress::getCityCode, Collectors.toList())));
+        Map<String, List<Integer>> map = addressList.stream().collect(Collectors.groupingBy(KwoTradeOrderAddress::getAddressType, Collectors.mapping(KwoTradeOrderAddress::getCityCode, Collectors.toList())));
         //装货地址下拉列表树
         List<AreaTreeFrontResDto> loadTree = remoteSystemService.queryAreaTreeFrontByCodeList(map.get(OrderAddressTypeEnum.LOAD.getType()));
         //卸货地址下拉列表树
@@ -1535,8 +1417,7 @@ public class KwoTradeOrderService {
      */
     public List<KwoTradeOrder> associateEnt(Collection<Long> tOrderIds) {
         LambdaQueryWrapper<KwoTradeOrder> wrapper = new LambdaQueryWrapper<>();
-        wrapper.in(KwoTradeOrder::getId, tOrderIds).eq(KwoTradeOrder::getDelFlag, Global.NO)
-                .in(KwoTradeOrder::getStatus, 1, 2, 3, 4);
+        wrapper.in(KwoTradeOrder::getId, tOrderIds).eq(KwoTradeOrder::getDelFlag, Global.NO).in(KwoTradeOrder::getStatus, 1, 2, 3, 4);
         List<KwoTradeOrder> list = kwoTradeOrderMapper.selectList(wrapper);
         return CollUtil.emptyIfNull(list);
     }
@@ -1646,10 +1527,7 @@ public class KwoTradeOrderService {
                 unloadDetailAddressList.add(e.getCityName() + e.getDetailAddress());
             }
         });
-        res.setLoadNameList(loadNameList)
-                .setLoadDetailAddressList(loadDetailAddressList)
-                .setUnloadNameList(unloadNameList)
-                .setUnloadDetailAddressList(unloadDetailAddressList);
+        res.setLoadNameList(loadNameList).setLoadDetailAddressList(loadDetailAddressList).setUnloadNameList(unloadNameList).setUnloadDetailAddressList(unloadDetailAddressList);
         return res;
     }
 
@@ -1692,24 +1570,15 @@ public class KwoTradeOrderService {
         Map<Long, UserCacheResDto> userMap = remoteSystemService.queryUserCacheMapByIds(createByIds);
         Map<Long, KwpGoods> goodsMap = goodsInfoService.getGoodsByIds(goodIdList);
         Map<Long, ContractCommonInfoResDto> contractMap = remoteContractService.queryContractBaseInfo(contracIdList);
-        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(
-                DictTypeEnum.TORDER_STATUS.getType(), DictTypeEnum.TRADE_TYPE.getType(), DictTypeEnum.DELIVERY_TYPE.getType(),
-                DictTypeEnum.PICKUP_TYPE.getType(), DictTypeEnum.TORDER_SOURCE.getType()));
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.TORDER_STATUS.getType(), DictTypeEnum.TRADE_TYPE.getType(), DictTypeEnum.SETTLEMENT_WAY.getType(), DictTypeEnum.CONSIGNMENT_WAY.getType(), DictTypeEnum.TORDER_SOURCE.getType()));
         Map<String, SysDictResDto> unitType = remoteSystemService.queryDictMapByType(DictTypeEnum.UNIT_TYPE.getType());
-        Map<String, String> statusMap, tradeMap, deliveryMap, pickupMap, sourceMap;
+        Map<String, String> tradeMap, deliveryMap, pickupMap, sourceMap;
         if (CollUtil.isNotEmpty(dict)) {
-            statusMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TORDER_STATUS.getType())) ?
-                    dict.get(DictTypeEnum.TORDER_STATUS.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
-            tradeMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TRADE_TYPE.getType())) ?
-                    dict.get(DictTypeEnum.TRADE_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
-            deliveryMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.DELIVERY_TYPE.getType())) ?
-                    dict.get(DictTypeEnum.DELIVERY_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
-            pickupMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.PICKUP_TYPE.getType())) ?
-                    dict.get(DictTypeEnum.PICKUP_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
-            sourceMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TORDER_SOURCE.getType())) ?
-                    dict.get(DictTypeEnum.TORDER_SOURCE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            tradeMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TRADE_TYPE.getType())) ? dict.get(DictTypeEnum.TRADE_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            deliveryMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.SETTLEMENT_WAY.getType())) ? dict.get(DictTypeEnum.SETTLEMENT_WAY.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            pickupMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.CONSIGNMENT_WAY.getType())) ? dict.get(DictTypeEnum.CONSIGNMENT_WAY.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            sourceMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TORDER_SOURCE.getType())) ? dict.get(DictTypeEnum.TORDER_SOURCE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
         } else {
-            statusMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
             tradeMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
             deliveryMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
             pickupMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
@@ -1721,14 +1590,9 @@ public class KwoTradeOrderService {
             List<KwoTradeOrderAddress> loadAddresses = kwoTradeOrderAddressService.findByAddress(e.getTOrderId(), AddressTypeEnum.SHIPMENT.getCode());
             //卸货地址
             List<KwoTradeOrderAddress> unloadAddresses = kwoTradeOrderAddressService.findByAddress(e.getTOrderId(), AddressTypeEnum.TAKE.getCode());
-            //装货地点名称
-            List<String> loadName = loadAddresses.stream().map(KwoTradeOrderAddress::getName).toList();
-            //装货地点
-            List<String> loadAddress = loadAddresses.stream().map(item -> item.getCityName() + " " + item.getDetailAddress()).toList();
+            Optional<KwoTradeOrderAddress> loadAddress = loadAddresses.stream().findFirst();
             //卸货地点点名称
-            List<String> unloadName = unloadAddresses.stream().map(KwoTradeOrderAddress::getName).toList();
-            //卸货地点
-            List<String> unloadAddress = unloadAddresses.stream().map(item -> item.getCityName() + " " + item.getDetailAddress()).toList();
+            Optional<KwoTradeOrderAddress> unloadAddress = unloadAddresses.stream().findFirst();
 
             BigDecimal actualAmount = Objects.isNull(e.getActualAmount()) ? BigDecimal.ZERO : e.getActualAmount();
             BigDecimal unitPrice = Objects.isNull(e.getUnitPrice()) ? BigDecimal.ZERO : e.getUnitPrice();
@@ -1737,7 +1601,7 @@ public class KwoTradeOrderService {
             UserCacheResDto userCache = userMap.get(e.getCreateBy());
 
             OrderListResVO vo = BeanUtil.copyProperties(e, OrderListResVO.class);
-            vo.setStatusLabel(statusMap.get(String.valueOf(e.getStatus())))
+            vo.setStatusLabel(TradeOrderStatusEnum.getMsg(e.getStatus()))
                     .setTradingLabel(tradeMap.get(e.getTrading()))
                     .setTrading(tradeMap.get(e.getTrading()))
                     .setDeliveryTypeLabel(deliveryMap.get(e.getDeliveryType()))
@@ -1761,10 +1625,18 @@ public class KwoTradeOrderService {
                     .setEntrustAmount(setScale(e.getEntrustAmount()))
                     .setActualAmount(setScale(e.getActualAmount()))
                     .setCreateByName(Objects.isNull(userCache) ? null : userCache.getName())
-                    .setLoadName(loadName)
-                    .setLoadAddress(loadAddress)
-                    .setUnloadName(unloadName)
-                    .setUnloadAddress(unloadAddress);
+            ;
+            loadAddress.ifPresent(d -> {
+                vo.setLoadName(d.getName());
+                vo.setLoadAddress(d.getCityName() + " " + d.getDetailAddress());
+
+            });
+            unloadAddress.ifPresent(d -> {
+                vo.setUnloadName(d.getName());
+                vo.setUnloadAddress(d.getCityName() + " " + d.getDetailAddress());
+                vo.setUnloadContact(d.getContacts());
+                vo.setUnloadContactPhone(d.getPhone());
+            });
             result.add(vo);
         });
         return PageHelperUtil.getPageResult(new PageInfo<>(result), list, pageSize);
@@ -1779,27 +1651,26 @@ public class KwoTradeOrderService {
      */
     public TradeOrderListSelectDTO buildSelectParam(TradeOrderListStatisticParam params) {
         TradeOrderListSelectDTO dto = BeanUtil.copyProperties(params, TradeOrderListSelectDTO.class);
+        EntTypeResDto entTypeResDto = remoteSystemService.queryEntTypeById(LoginUserHolder.getEntId());
         dto.setEntId(LoginUserHolder.getEntId())
-                .setUserId(LoginUserHolder.getUserId())
+                .setManager(LoginUserHolder.isManager())
+                .setEntType(Objects.nonNull(entTypeResDto) ? entTypeResDto.getType() : null)
+                .setEntList(LoginUserHolder.getChildEntList())
                 .setIsMain(LoginUserHolder.getIsMain());
         //装卸货地址
         String loadCode = params.getShippingAddressCode();
         if (StringUtils.isNotBlank(loadCode) && Objects.nonNull(params.getShippingAddressLevel())) {
             switch (params.getShippingAddressLevel()) {
-                case 1 -> dto.setLoadAddressCode(
-                        loadCode.substring(0, 2).trim());
-                case 2 -> dto.setLoadAddressCode(
-                        loadCode.substring(0, 4).trim());
+                case 1 -> dto.setLoadAddressCode(loadCode.substring(0, 2).trim());
+                case 2 -> dto.setLoadAddressCode(loadCode.substring(0, 4).trim());
                 case 3 -> dto.setLoadAddressCode(loadCode);
             }
         }
         String unloadCode = params.getUnloadingAddressCode();
         if (StringUtils.isNotBlank(unloadCode) && Objects.nonNull(params.getUnloadingAddressLevel())) {
             switch (params.getUnloadingAddressLevel()) {
-                case 1 -> dto.setUnloadAddressCode(
-                        unloadCode.substring(0, 2).trim());
-                case 2 -> dto.setUnloadAddressCode(
-                        unloadCode.substring(0, 4).trim());
+                case 1 -> dto.setUnloadAddressCode(unloadCode.substring(0, 2).trim());
+                case 2 -> dto.setUnloadAddressCode(unloadCode.substring(0, 4).trim());
                 case 3 -> dto.setUnloadAddressCode(unloadCode);
             }
         }
@@ -1851,19 +1722,18 @@ public class KwoTradeOrderService {
      * @author yzc
      * @date 2024/3/15 8:52
      */
-    public TableStatisticRes tradeOrderStatistic(TradeOrderListStatisticParam params) {
+    public TableStatisticRes tradeOrderStatistic(TradeOrderListSelectParam params) {
         TableStatisticRes res = new TableStatisticRes();
         TradeOrderListSelectDTO dto = buildSelectParam(params);
         dto.setStatus(null);
         List<TableTop> tableTops = kwoTradeOrderMapper.tradeOrderStatistic(dto, dto.getGoodIds(), LoginUserHolder.getAuthUserIdList());
         Map<Integer, Integer> map = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         if (CollUtil.isNotEmpty(tableTops)) {
-            map = tableTops.stream().collect(Collectors.toMap
-                    (TableTop::getValue, TableTop::getTotal, (k1, k2) -> k2));
+            map = tableTops.stream().collect(Collectors.toMap(TableTop::getValue, TableTop::getTotal, (k1, k2) -> k2));
         }
         List<TableTop> list = new ArrayList<>();
         int count = 0;
-        for (OrderStatusEnum e : OrderStatusEnum.getSortList()) {
+        for (TradeOrderStatusEnum e : TradeOrderStatusEnum.getSortList()) {
             Integer value = e.getCode();
             int total = Objects.isNull(map.get(value)) ? 0 : map.get(value);
             TableTop tableTop = new TableTop();
@@ -1889,16 +1759,13 @@ public class KwoTradeOrderService {
      */
     public List<TradeOrderAppStatisticVO> appStatistic(TradeOrderAppStatisticParam params) {
         TradeOrderAppStatisticParamDTO dto = new TradeOrderAppStatisticParamDTO();
-        dto.setOrderType(params.getOrderType())
-                .setIsMain(LoginUserHolder.getIsMain())
-                .setEntId(LoginUserHolder.getEntId());
+        dto.setOrderType(params.getOrderType()).setIsMain(LoginUserHolder.getIsMain()).setEntId(LoginUserHolder.getEntId());
         List<Integer> statuses = Arrays.asList(1, 4, 5, 7);
         List<Long> authUserIds = LoginUserHolder.getAuthUserIdList();
         List<TradeOrderAppStatisticVO> tableTops = kwoTradeOrderMapper.appStatistic(dto, statuses, authUserIds);
         Map<Integer, Integer> map = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         if (CollUtil.isNotEmpty(tableTops)) {
-            map = tableTops.stream().collect(Collectors.toMap
-                    (TradeOrderAppStatisticVO::getValue, TradeOrderAppStatisticVO::getTotal, (k1, k2) -> k2));
+            map = tableTops.stream().collect(Collectors.toMap(TradeOrderAppStatisticVO::getValue, TradeOrderAppStatisticVO::getTotal, (k1, k2) -> k2));
         }
         List<TradeOrderAppStatisticVO> statistics = new ArrayList<>();
         for (Integer e : statuses) {
@@ -1930,21 +1797,14 @@ public class KwoTradeOrderService {
         if (CollUtil.isEmpty(orders)) {
             return Collections.emptyList();
         }
-        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(
-                DictTypeEnum.TORDER_STATUS.getType(), DictTypeEnum.PICKUP_TYPE.getType(), DictTypeEnum.DELIVERY_TYPE.getType(),
-                DictTypeEnum.TORDER_SOURCE.getType(), DictTypeEnum.TRADE_TYPE.getType()));
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.TORDER_STATUS.getType(), DictTypeEnum.PICKUP_TYPE.getType(), DictTypeEnum.DELIVERY_TYPE.getType(), DictTypeEnum.TORDER_SOURCE.getType(), DictTypeEnum.TRADE_TYPE.getType()));
         Map<String, String> statusMap, pickupMap, deliveryMap, sourceMap, tradeMap;
         if (CollUtil.isNotEmpty(dict)) {
-            statusMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TORDER_STATUS.getType())) ?
-                    dict.get(DictTypeEnum.TORDER_STATUS.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
-            pickupMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.PICKUP_TYPE.getType())) ?
-                    dict.get(DictTypeEnum.PICKUP_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
-            deliveryMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.DELIVERY_TYPE.getType())) ?
-                    dict.get(DictTypeEnum.DELIVERY_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
-            sourceMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TORDER_SOURCE.getType())) ?
-                    dict.get(DictTypeEnum.TORDER_SOURCE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
-            tradeMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TRADE_TYPE.getType())) ?
-                    dict.get(DictTypeEnum.TRADE_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            statusMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TORDER_STATUS.getType())) ? dict.get(DictTypeEnum.TORDER_STATUS.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            pickupMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.PICKUP_TYPE.getType())) ? dict.get(DictTypeEnum.PICKUP_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            deliveryMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.DELIVERY_TYPE.getType())) ? dict.get(DictTypeEnum.DELIVERY_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            sourceMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TORDER_SOURCE.getType())) ? dict.get(DictTypeEnum.TORDER_SOURCE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            tradeMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TRADE_TYPE.getType())) ? dict.get(DictTypeEnum.TRADE_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
         } else {
             statusMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
             pickupMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
@@ -2002,25 +1862,7 @@ public class KwoTradeOrderService {
             ContractCommonInfoResDto contract = contractMap.get(e.getContractId());
             UserCacheResDto userCache = userMap.get(e.getCreateBy());
             BigDecimal waitEntrustAmount = getWaitEntrustAmount(e.getAmount(), e.getEntrustAmount());
-            vo.setStatus(statusMap.get(String.valueOf(vo.getStatus())))
-                    .setGoodsName(Objects.isNull(goods) ? null : goods.getName())
-                    .setGoodsSpec(Objects.isNull(goods) ? null : goods.getSpec())
-                    .setUnitPrice(String.valueOf(setScale(e.getUnitPrice())))
-                    .setAmount(String.valueOf(setScale(e.getAmount())))
-                    .setPrice(String.valueOf(setScale(e.getPrice())))
-                    .setGoodsTaxRate(Objects.isNull(goods) ? null : goods.getTaxRate())
-                    .setEntrustAmount(String.valueOf(setScale(e.getEntrustAmount())))
-                    .setActualAmount(String.valueOf(setScale(e.getActualAmount())))
-                    .setWaitEntrustAmount(String.valueOf(setScale(waitEntrustAmount)))
-                    .setPickupType(pickupMap.get(e.getPickupType()))
-                    .setDeliveryType(deliveryMap.get(e.getDeliveryType()))
-                    .setSource(sourceMap.get(e.getSource()))
-                    .setTrading(tradeMap.get(e.getTrading()))
-                    .setStartTime(Objects.isNull(e.getStartTime()) ? null : e.getStartTime().toString())
-                    .setEndTime(Objects.isNull(e.getEndTime()) ? null : e.getEndTime().toString())
-                    .setContractSigningWay(Objects.isNull(contract) ? null : contract.getSigningWayName())
-                    .setCreateByName(Objects.isNull(userCache) ? null : userCache.getName())
-                    .setCreateTime(com.sckw.excel.utils.DateUtil.getDateTime(e.getCreateTime()));
+            vo.setStatus(statusMap.get(String.valueOf(vo.getStatus()))).setGoodsName(Objects.isNull(goods) ? null : goods.getName()).setGoodsSpec(Objects.isNull(goods) ? null : goods.getSpec()).setUnitPrice(String.valueOf(setScale(e.getUnitPrice()))).setAmount(String.valueOf(setScale(e.getAmount()))).setPrice(String.valueOf(setScale(e.getPrice()))).setGoodsTaxRate(Objects.isNull(goods) ? null : goods.getTaxRate()).setEntrustAmount(String.valueOf(setScale(e.getEntrustAmount()))).setActualAmount(String.valueOf(setScale(e.getActualAmount()))).setWaitEntrustAmount(String.valueOf(setScale(waitEntrustAmount))).setPickupType(pickupMap.get(e.getPickupType())).setDeliveryType(deliveryMap.get(e.getDeliveryType())).setSource(sourceMap.get(e.getSource())).setTrading(tradeMap.get(e.getTrading())).setStartTime(Objects.isNull(e.getStartTime()) ? null : e.getStartTime().toString()).setEndTime(Objects.isNull(e.getEndTime()) ? null : e.getEndTime().toString()).setContractSigningWay(Objects.isNull(contract) ? null : contract.getSigningWayName()).setCreateByName(Objects.isNull(userCache) ? null : userCache.getName()).setCreateTime(com.sckw.excel.utils.DateUtil.getDateTime(e.getCreateTime()));
             list.add(vo);
         });
         return list;
@@ -2197,9 +2039,8 @@ public class KwoTradeOrderService {
             KwoTradeOrderUnit unit = BeanUtil.copyProperties(e, KwoTradeOrderUnit.class);
             unit.setId(new IdWorker(1).nextId());
             unit.setTOrderId(order.getId())
-                    .setUnitType(e.getUnitType())
-                    .setTOrderNo(order.getTOrderNo())
-                    .setTopEntId(e.getEntId());
+                    .setTOrderNo(order.getTOrderNo()).setTopEntId(e.getEntId());
+            unit.setUnitType(StrUtil.equals(e.getUnitType(), "1") ? "2" : "1");//贸易合同和订单的单位类型相反
             list.add(unit);
         });
         kwoTradeOrderUnitService.insertBatch(list);
@@ -2239,14 +2080,7 @@ public class KwoTradeOrderService {
         order.setAssociateStatement(0);
         order.setChargeType(tradeContractResDto.getUnloadWay());
         order.setConsignmentWay(tradeContractResDto.getConsignment());
-        order.setEntId(LoginUserHolder.getEntId())
-                .setTOrderNo(getOrderNo())
-                .setAmount(tradeOrderParam.getAmount())
-                .setStartTime(DateUtils.localDateToDateStart(tradeOrderParam.getStartTime()))
-                .setEndTime(DateUtils.localDateToDateEnd(tradeOrderParam.getEndTime()))
-                .setSource(OrderSourceEnum.PURCHASE.getType())
-                .setStatus(TradeOrderStatusEnum.AUDIT.getCode())
-                .setRemark(tradeOrderParam.getRemark());
+        order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(getOrderNo()).setAmount(tradeOrderParam.getAmount()).setStartTime(DateUtils.localDateToDateStart(tradeOrderParam.getStartTime())).setEndTime(DateUtils.localDateToDateEnd(tradeOrderParam.getEndTime())).setSource(OrderSourceEnum.PURCHASE.getType()).setStatus(TradeOrderStatusEnum.AUDIT.getCode()).setRemark(tradeOrderParam.getRemark());
         return tradeContractResDto;
     }
 
@@ -2352,15 +2186,12 @@ public class KwoTradeOrderService {
                 logisticInfo.setAcceptCompany("");
                 logisticInfo.setPrice(d.getTransportPrice());
                 logisticInfo.setPriceType(0L);
-                logisticInfo.setEndTime(LocalDate.now());
-                logisticInfo.setStartTime(LocalDate.now());
                 logisticInfo.setAmount(new BigDecimal("0"));
                 logisticInfo.setAmountUnit("");
                 logisticInfo.setLoss(new BigDecimal("0"));
                 logisticInfo.setPayment(0L);
                 logisticInfo.setSigningWay(0);
                 logisticInfo.setLossUnit("");
-                logisticInfo.setBillingMode("");
                 logisticInfo.setRemark("");
                 logisticInfo.setType(0);
 
@@ -2372,40 +2203,39 @@ public class KwoTradeOrderService {
             if (CollUtil.isNotEmpty(list)) {
                 //Map<Long, ContractCommonInfoResDto> contractMap = remoteContractService.queryContractBaseInfo(list.stream().map(KwoTradeOrderTransport::getContractId).collect(Collectors.toList()));
                 List<LogisticInfo> collect = list.stream().map(d -> {
-                            LogisticInfo logisticInfo = new LogisticInfo();
-                            logisticInfo.setContractId(d.getContractId());
-                            logisticInfo.setContractNo(d.getContractNo());
-                            logisticInfo.setContractName("");
-                            logisticInfo.setAcceptCompanyId(d.getEntId());
-                            logisticInfo.setAcceptContactPhone(d.getPhone());
-                            logisticInfo.setAcceptContacts(d.getContacts());
-                            logisticInfo.setAcceptContactsId(d.getContactsId());
-                            logisticInfo.setAcceptCompany(d.getFirmName());
-                            logisticInfo.setPrice(d.getTransportPrice());
-                            logisticInfo.setPriceType(0L);
-                            logisticInfo.setEndTime(LocalDate.now());
-                            logisticInfo.setStartTime(LocalDate.now());
-                            logisticInfo.setAmount(new BigDecimal("0"));
-                            logisticInfo.setAmountUnit("");
-                            logisticInfo.setLoss(new BigDecimal("0"));
-                            logisticInfo.setPayment(0L);
-                            logisticInfo.setSigningWay(0);
-                            logisticInfo.setLossUnit("");
-                            logisticInfo.setBillingMode("");
-                            logisticInfo.setRemark("");
-                            logisticInfo.setType(0);
-
-                            return logisticInfo;
-                        }
-                ).collect(Collectors.toList());
+                    LogisticInfo logisticInfo = new LogisticInfo();
+                    logisticInfo.setContractId(d.getContractId());
+                    logisticInfo.setContractNo(d.getContractNo());
+                    logisticInfo.setContractName("");
+                    logisticInfo.setAcceptCompanyId(d.getEntId());
+                    logisticInfo.setAcceptContactPhone(d.getPhone());
+                    logisticInfo.setAcceptContacts(d.getContacts());
+                    logisticInfo.setAcceptContactsId(d.getContactsId());
+                    logisticInfo.setAcceptCompany(d.getFirmName());
+                    logisticInfo.setPrice(d.getTransportPrice());
+                    logisticInfo.setPriceType(0L);
+                    logisticInfo.setAmount(new BigDecimal("0"));
+                    logisticInfo.setAmountUnit("");
+                    logisticInfo.setLoss(new BigDecimal("0"));
+                    logisticInfo.setPayment(0L);
+                    logisticInfo.setSigningWay(0);
+                    logisticInfo.setLossUnit("");
+                    logisticInfo.setRemark("");
+                    logisticInfo.setType(0);
+
+                    return logisticInfo;
+                }).collect(Collectors.toList());
                 addLogisticOrderParam.setLogisticInfo(collect);
             }
 
         }
         addLogisticOrderParam.setTradeOrderId(kwoTradeOrder.getId());
         addLogisticOrderParam.setTradeOrderNo(kwoTradeOrder.getTOrderNo());
+        addLogisticOrderParam.setBillingMode(String.valueOf(kwoTradeOrder.getChargeType()));
+        addLogisticOrderParam.setStartTime(DateUtils.dateToLocalDate(kwoTradeOrder.getStartTime()));
+        addLogisticOrderParam.setEndTime(DateUtils.dateToLocalDate(kwoTradeOrder.getEndTime()));
         if (Objects.equals(tradeContractResDto.getConsignment(), 1)) {//买方托运
-            KwoTradeOrderUnit kwoTradeOrderUnit = unitMap.get("1");//采购
+            KwoTradeOrderUnit kwoTradeOrderUnit = unitMap.get("1");//买方
             if (Objects.nonNull(kwoTradeOrderUnit)) {
                 addLogisticOrderParam.setConsignCompany(kwoTradeOrderUnit.getFirmName());
                 addLogisticOrderParam.setConsignCompanyId(kwoTradeOrderUnit.getEntId());
@@ -2413,9 +2243,17 @@ public class KwoTradeOrderService {
                 addLogisticOrderParam.setConsignContacts(kwoTradeOrderUnit.getContacts());
                 addLogisticOrderParam.setConsignContactsId(kwoTradeOrderUnit.getContactsId());
             }
+            KwoTradeOrderUnit kwoTradeOrderUnit2 = unitMap.get("2");//卖方
+            if (Objects.nonNull(kwoTradeOrderUnit2)) {
+                addLogisticOrderParam.setNonConsignCompany(kwoTradeOrderUnit2.getFirmName());
+                addLogisticOrderParam.setNonConsignCompanyId(kwoTradeOrderUnit2.getEntId());
+                addLogisticOrderParam.setNonConsignContactPhone(kwoTradeOrderUnit2.getPhone());
+                addLogisticOrderParam.setNonConsignContacts(kwoTradeOrderUnit2.getContacts());
+                addLogisticOrderParam.setNonConsignContactsId(kwoTradeOrderUnit2.getContactsId());
+            }
 
         } else {
-            KwoTradeOrderUnit kwoTradeOrderUnit = unitMap.get("2");//采购
+            KwoTradeOrderUnit kwoTradeOrderUnit = unitMap.get("2");//卖方
             if (Objects.nonNull(kwoTradeOrderUnit)) {
                 addLogisticOrderParam.setConsignCompany(kwoTradeOrderUnit.getFirmName());
                 addLogisticOrderParam.setConsignCompanyId(kwoTradeOrderUnit.getEntId());
@@ -2423,6 +2261,14 @@ public class KwoTradeOrderService {
                 addLogisticOrderParam.setConsignContacts(kwoTradeOrderUnit.getContacts());
                 addLogisticOrderParam.setConsignContactsId(kwoTradeOrderUnit.getContactsId());
             }
+            KwoTradeOrderUnit kwoTradeOrderUnit2 = unitMap.get("1");//买方
+            if (Objects.nonNull(kwoTradeOrderUnit2)) {
+                addLogisticOrderParam.setNonConsignCompany(kwoTradeOrderUnit2.getFirmName());
+                addLogisticOrderParam.setNonConsignCompanyId(kwoTradeOrderUnit2.getEntId());
+                addLogisticOrderParam.setNonConsignContactPhone(kwoTradeOrderUnit2.getPhone());
+                addLogisticOrderParam.setNonConsignContacts(kwoTradeOrderUnit2.getContacts());
+                addLogisticOrderParam.setNonConsignContactsId(kwoTradeOrderUnit2.getContactsId());
+            }
         }
 
         addLogisticOrderParam.setGoodsId(byOrderId.getGoodsId());
@@ -2443,7 +2289,7 @@ public class KwoTradeOrderService {
             addLogisticOrderParam.setLoadLng(kwoTradeOrderAddress.getLng());
         }
 
-        List<KwoTradeOrderAddress> kwoTradeOrderAddresses2 = addressMap.get(String.valueOf(AddressTypeEnum.SHIPMENT.getCode()));
+        List<KwoTradeOrderAddress> kwoTradeOrderAddresses2 = addressMap.get(String.valueOf(AddressTypeEnum.TAKE.getCode()));
         KwoTradeOrderAddress unloadAddress = kwoTradeOrderAddresses2.get(0);
         if (Objects.nonNull(unloadAddress)) {
             addLogisticOrderParam.setUnloadId(unloadAddress.getId());
@@ -2506,4 +2352,31 @@ public class KwoTradeOrderService {
 
         kwoTradeOrderMapper.updateById(kwoTradeOrder1);
     }
+
+    public List<TradeOrderVo> queryOrder(TradeOrderPara tradeOrderPara) {
+        List<TradeOrderVo> tradeOrderVos = kwoTradeOrderMapper.selectData(tradeOrderPara);
+        if (CollUtil.isNotEmpty(tradeOrderVos)) {
+            Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), DictTypeEnum.UNIT_TYPE.getType(), DictTypeEnum.CHARGING_TYPE.getType()));
+            Map<String, String> statusMap, productNameMap, unitMap, chargeTypeMap;
+            if (CollUtil.isNotEmpty(dict)) {
+                statusMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TORDER_STATUS.getType())) ? dict.get(DictTypeEnum.TORDER_STATUS.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+                productNameMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType())) ? dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+                unitMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.UNIT_TYPE.getType())) ? dict.get(DictTypeEnum.UNIT_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+                chargeTypeMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.CHARGING_TYPE.getType())) ? dict.get(DictTypeEnum.CHARGING_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            } else {
+                statusMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+                productNameMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+                unitMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+                chargeTypeMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            }
+            tradeOrderVos.forEach(d -> {
+                d.setStatusLabel(statusMap.get(String.valueOf(d.getStatus())));
+                d.setGoodsTypeLabel(productNameMap.get(d.getGoodsType()));
+                d.setChargeTypeLabel(chargeTypeMap.get(String.valueOf(d.getChargeType())));
+                d.setUnitLabel(unitMap.get(String.valueOf(d.getUnit())));
+            });
+            return tradeOrderVos;
+        }
+        return new ArrayList<>();
+    }
 }

+ 111 - 131
sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderMapper.xml

@@ -82,81 +82,47 @@
         <where>
             a.del_flag = 0
 --          数据权限匹配
-<!--            <choose>-->
-<!--                <when test="entIds == null or entIds.size == 0">-->
-<!--                    <if test="query.isMain == 0">-->
-<!--                        and (-->
-<!--                        <if test="query.orderType == 1">-->
-<!--                            <if test="query.entId != null">-->
-<!--                                    d.top_ent_id = #{query.entId}-->
-<!--                            </if>-->
-<!--                            <if test="authUserIds != null and authUserIds.size() > 0">-->
-<!--                                and d.contacts_id in-->
-<!--                                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">-->
-<!--                                    #{authUserId}-->
-<!--                                </foreach>-->
-<!--                                or d.create_by in-->
-<!--                                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">-->
-<!--                                    #{authUserId}-->
-<!--                                </foreach>-->
-<!--                            </if>-->
-<!--                        </if>-->
-<!--                        <if test="query.orderType == 2">-->
-<!--                            <if test="query.entId != null">-->
-<!--                                e.top_ent_id = #{query.entId}-->
-<!--                            </if>-->
-<!--                            <if test="authUserIds != null and authUserIds.size() > 0">-->
-<!--                                and e.contacts_id in-->
-<!--                                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">-->
-<!--                                    #{authUserId}-->
-<!--                                </foreach>-->
-<!--                                or e.create_by in-->
-<!--                                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">-->
-<!--                                    #{authUserId}-->
-<!--                                </foreach>-->
-<!--                            </if>-->
-<!--                        </if>-->
-<!--                        )-->
-<!--                    </if>-->
-<!--                    <if test="query.isMain == 1">-->
-<!--                        and (-->
-<!--                        <if test="query.orderType == 1">-->
-<!--                            <if test="query.entId != null">-->
-<!--                                d.top_ent_id = #{query.entId}-->
-<!--                            </if>-->
-<!--                        </if>-->
-<!--                        <if test="query.orderType == 2">-->
-<!--                            <if test="query.entId != null">-->
-<!--                                e.top_ent_id = #{query.entId}-->
-<!--                            </if>-->
-<!--                        </if>-->
-<!--                        )-->
-<!--                    </if>-->
-<!--                </when>-->
-<!--                <otherwise>-->
-<!--                    and a.ent_id in-->
-<!--                    <foreach collection="entIds" separator="," open="(" close=")" item="item">-->
-<!--                        #{item}-->
-<!--                    </foreach>-->
-<!--                </otherwise>-->
-<!--            </choose>-->
-
-            --           状态匹配
+            <choose>
+                <when test="query.manager != null and !query.manager">
+                    <if test="query.isMain == 1">
+                        <if test="query.entList != null and query.entList.size() > 0  and query.entType != null">
+                            <if test="query.entType == 1">
+                                and
+                                    e.top_ent_id in
+                                <foreach collection="query.entList" item="authUserId" open="(" close=")" separator=",">
+                                    #{authUserId}
+                                </foreach>
+                            </if>
+                            <if test="query.entType == 2">
+                                and
+                                    d.top_ent_id in
+                                <foreach collection="query.entList" item="authUserId" open="(" close=")" separator=",">
+                                    #{authUserId}
+                                </foreach>
+                            </if>
+                        </if>
+                    </if>
+                    <if test="query.isMain == 0">
+                        <if test="query.entId != null and query.entType != null">
+                            <if test="query.entType == 1">
+                                and e.top_ent_id = #{query.entId}
+                            </if>
+                            <if test="query.entType == 2">
+                                and d.top_ent_id = #{query.entId}
+                            </if>
+                        </if>
+                    </if>
+                </when>
+            </choose>
+            <if test="query.buyEntId != null">
+                and d.ent_id = #{query.buyEntId}
+            </if>
+            <if test="query.saleEntId != null">
+                and e.ent_id = #{query.saleEntId}
+            </if>
             <if test="query.status != null">
                 and a.status = #{query.status}
-                <if test="query.status == 0">
-                    --          草稿状态只能创建订单的人能看
-                      and a.create_by = #{query.userId}
-                </if>
-            </if>
-            <if test="query.status == null">
-                --           非草稿状态or草稿状态且是当前人
-                  and (
-                            a.status != 0
-                        or (a.status = 0 and a.create_by = #{query.userId})
-                    )
             </if>
-            --          关键词匹配
             <if test="query.keywords != null and query.keywords != ''">
                 and (
                         a.t_order_no like concat('%', #{query.keywords}, '%')
@@ -486,71 +452,47 @@
                  LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
         <where>
             a.del_flag = 0
---             数据权限匹配
-            <if test="query.isMain == 0">
-                and (
-                <if test="query.orderType == 1">
-                    <if test="query.entId != null">
-                            d.top_ent_id = #{query.entId}
+            <choose>
+                <when test="query.manager != null and !query.manager">
+                    <if test="query.isMain == 1">
+                        <if test="query.entList != null and query.entList.size() > 0  and query.entType != null">
+                            <if test="query.entType == 1">
+                                and
+                                e.top_ent_id in
+                                <foreach collection="query.entList" item="authUserId" open="(" close=")" separator=",">
+                                    #{authUserId}
+                                </foreach>
+                            </if>
+                            <if test="query.entType == 2">
+                                and
+                                d.top_ent_id in
+                                <foreach collection="query.entList" item="authUserId" open="(" close=")" separator=",">
+                                    #{authUserId}
+                                </foreach>
+                            </if>
+                        </if>
                     </if>
-                    <if test="authUserIds != null and authUserIds.size() > 0">
-                        and d.contacts_id in
-                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                            #{authUserId}
-                        </foreach>
-                        or d.create_by in
-                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                            #{authUserId}
-                        </foreach>
-                    </if>
-                </if>
-                <if test="query.orderType == 2">
-                    <if test="query.entId != null">
-                        e.top_ent_id = #{query.entId}
-                    </if>
-                    <if test="authUserIds != null and authUserIds.size() > 0">
-                        and e.contacts_id in
-                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                            #{authUserId}
-                        </foreach>
-                        or e.create_by in
-                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                            #{authUserId}
-                        </foreach>
+                    <if test="query.isMain == 0">
+                        <if test="query.entId != null and query.entType != null">
+                            <if test="query.entType == 1">
+                                and e.top_ent_id = #{query.entId}
+                            </if>
+                            <if test="query.entType == 2">
+                                and d.top_ent_id = #{query.entId}
+                            </if>
+                        </if>
                     </if>
-                </if>
-                )
+                </when>
+            </choose>
+            <if test="query.buyEntId !=null">
+                and d.ent_id = #{query.buyEntId}
             </if>
-            <if test="query.isMain == 1">
-                and (
-                <if test="query.orderType == 1">
-                    <if test="query.entId != null">
-                        d.top_ent_id = #{query.entId}
-                    </if>
-                </if>
-                <if test="query.orderType == 2">
-                    <if test="query.entId != null">
-                        e.top_ent_id = #{query.entId}
-                    </if>
-                </if>
-                )
+            <if test="query.saleEntId !=null">
+                and e.ent_id = #{query.saleEntId}
             </if>
-            --             状态匹配
             <if test="query.status != null">
                 and a.status = #{query.status}
-                <if test="query.status == 0">
-                    --                     草稿状态只能创建订单的人能看
-                      and a.create_by = #{query.userId}
-                </if>
             </if>
-            <if test="query.status == null">
-                --                 非草稿状态or草稿状态且是当前人
-                  and (
-                            a.status != 0
-                        or (a.status = 0 and a.create_by = #{query.userId})
-                    )
-            </if>
-            --                      关键词匹配
             <if test="query.keywords != null and query.keywords != ''">
                 and (
                         a.t_order_no like concat('%', #{query.keywords}, '%')
@@ -661,7 +603,6 @@
                     and e.top_ent_id = #{query.entId}
                 </if>
             </if>
-            --             状态匹配
             <if test="statuses != null and statuses.size() > 0">
                 and a.status in
                 <foreach collection="statuses" item="item" open="(" close=")" separator=",">
@@ -786,4 +727,43 @@
             order by amount desc
         </where>
     </select>
+
+    <select id="selectData" resultType="com.sckw.order.api.model.TradeOrderVo">
+        select a.status,
+               a.t_order_no tOrderNo,
+               d.firm_name  buyEntName,
+               e.firm_name  sellEntName,
+               ktog.goods_name,
+               ktog.unit_price,
+               ktog.unit,
+               ktog.goods_type,
+               a.amount,
+               a.price,
+               a.load_amount,
+               a.unload_amount,
+               a.charge_type,
+               a.create_time
+        FROM kwo_trade_order a
+                 LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id AND d.unit_type = '1' AND d.del_flag = 0
+                 LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id AND e.unit_type = '2' AND e.del_flag = 0
+                 left join kwo_trade_order_goods ktog on a.id = ktog.t_order_id and ktog.del_flag = 0
+        <where>
+            a.del_flag = 0
+            <if test="para.startTime != null and para.endTime != null">
+                and a.create_time between #{para.startTime,jdbcType=TIMESTAMP} and #{para.endTime,jdbcType=TIMESTAMP}
+            </if>
+            <if test="para.entId != null and para.entId.size() > 0">
+                and (
+                    d.ent_id in
+                <foreach collection="para.entId" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+                or e.ent_id in
+                <foreach collection="para.entId" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+                )
+            </if>
+        </where>
+    </select>
 </mapper>

+ 5 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/res/GoodsEntInfo.java

@@ -59,4 +59,9 @@ public class GoodsEntInfo implements Serializable {
      */
     @Schema(description = "详细地址")
     private String detailAddress;
+
+    /**
+     * 官网
+     */
+    private String website;
 }

+ 15 - 9
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java

@@ -9,7 +9,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 import com.sckw.contract.api.RemoteContractService;
 import com.sckw.contract.api.model.vo.TradeContractGoodsDto;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
@@ -67,7 +66,6 @@ import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -254,6 +252,7 @@ public class KwpGoodsService {
             goodsEntInfo.setEntAddress(supplyEnt.getCityName() + (StrUtil.isNotEmpty(supplyEnt.getDetailAddress()) ? supplyEnt.getDetailAddress() : ""));
             goodsEntInfo.setContacts(supplyEnt.getLegalName());
             goodsEntInfo.setPhone(supplyEnt.getLegalPhone());
+            goodsEntInfo.setWebsite(supplyEnt.getWebsite());
         }
         UserCacheResDto managerInfo = remoteSystemService.queryUserCacheById(detail.getManager());
         if (Objects.nonNull(managerInfo)) {
@@ -1027,7 +1026,11 @@ public class KwpGoodsService {
                 wrapper.notIn(CollUtil.isNotEmpty(longs), KwpGoods::getId, longs);
             }
         }
-        wrapper.last("order by RAND()");
+        if (Objects.nonNull(params.getContractId())) {
+            List<Long> longs = remoteContractService.queryTradeContractInfo(params.getContractId());
+            wrapper.in(CollUtil.isNotEmpty(longs), KwpGoods::getId, longs);
+        }
+        wrapper.orderByAsc(KwpGoods::getId);
         Page<KwpGoods> kwpGoodsPage = kwpGoodsMapper.selectPage(page, wrapper);
         List<KwpGoods> list = kwpGoodsPage.getRecords();
         if (CollectionUtils.isEmpty(list)) {
@@ -1052,14 +1055,16 @@ public class KwpGoodsService {
         List<EntCacheResDto> entList = remoteSystemService.queryEntCacheByIds(supplyEntIds);
         Map<Long, String> entMap = entList.stream().collect(Collectors.toMap(EntCacheResDto::getId, EntCacheResDto::getFirmName, (k1, k2) -> k1));
         Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.PRODUCT_NAME_TYPE.getType(),
-                DictTypeEnum.UNIT_TYPE.getType()));
-        Map<String, String> productNameMap, unitMap;
+                DictTypeEnum.UNIT_TYPE.getType(), DictTypeEnum.GOODS_SPEC.getType()));
+        Map<String, String> productNameMap, unitMap,specMap;
         if (CollectionUtils.isNotEmpty(dict)) {
             productNameMap = dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType());
             unitMap = dict.get(DictTypeEnum.UNIT_TYPE.getType());
+            specMap = dict.get(DictTypeEnum.GOODS_SPEC.getType());
         } else {
             productNameMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
             unitMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            specMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         }
         Long entId = LoginUserHolder.getEntId();
         list.forEach(e -> {
@@ -1068,6 +1073,7 @@ public class KwpGoodsService {
             List<KwpGoodsPriceRange> priceRanges = priceRangeMap.get(e.getId());
             materials.setGoodsTypeLabel(CollectionUtils.isNotEmpty(productNameMap) ? productNameMap.get(e.getGoodsType()) : null)
                     .setUnitLabel(CollectionUtils.isNotEmpty(unitMap) ? unitMap.get(e.getUnit()) : null)
+                    .setSpec(CollectionUtils.isNotEmpty(specMap) ? specMap.get(e.getSpec()) : null)
                     .setAddressName(Objects.isNull(address) ? null : address.getCityName())
                     .setDetailAddress(Objects.isNull(address) ? null : address.getDetailAddress())
                     .setPrice(CollectionUtils.isEmpty(priceRanges) ? null : priceRanges.get(0).getPrice())
@@ -1443,24 +1449,24 @@ public class KwpGoodsService {
         }
         List<String> types = Arrays.asList(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), DictTypeEnum.UNIT_TYPE.getType());
         //组装商品参数
-        Map<String,  Map<String, String>> finalValueAndDictResDtoMap = remoteSystemService.queryDictByType(types);
+        Map<String, Map<String, String>> finalValueAndDictResDtoMap = remoteSystemService.queryDictByType(types);
 
         List<GoodsInfoResp.GoodsInfo> goodsInfos = goods.stream()
                 .filter(e -> Objects.equals(e.getStatus(), GoodsStatusEnum.PUT_ON_SHELVES.getCode()))
-                .map(x->KwpGoodsService.getGoodsInfo(x, finalValueAndDictResDtoMap))
+                .map(x -> KwpGoodsService.getGoodsInfo(x, finalValueAndDictResDtoMap))
                 .collect(Collectors.toList());
         GoodsInfoResp goodsInfoResp = new GoodsInfoResp();
         goodsInfoResp.setGoodsInfoRespList(goodsInfos);
         return goodsInfoResp;
     }
 
-    private static GoodsInfoResp.GoodsInfo getGoodsInfo(KwpGoods x,Map<String,  Map<String, String>> valueAndDictResDtoMap ) {
+    private static GoodsInfoResp.GoodsInfo getGoodsInfo(KwpGoods x, Map<String, Map<String, String>> valueAndDictResDtoMap) {
         GoodsInfoResp.GoodsInfo goodsInfo = new GoodsInfoResp.GoodsInfo();
         goodsInfo.setGoodsId(x.getId());
 
         Map<String, String> productNameMap = valueAndDictResDtoMap.getOrDefault(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), new HashMap<>());
         String productType = productNameMap.get(x.getGoodsType());
-        goodsInfo.setGoodsName(x.getName()+"/"+productType+"/"+x.getSpec());
+        goodsInfo.setGoodsName(x.getName() + "/" + productType + "/" + x.getSpec());
 
         Map<String, String> unitMap = valueAndDictResDtoMap.getOrDefault(DictTypeEnum.UNIT_TYPE.getType(), new HashMap<>());
         goodsInfo.setAmountUnit(unitMap.get(x.getUnit()));

+ 2 - 2
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/pojo/FindPojoParam.java

@@ -32,12 +32,12 @@ public class FindPojoParam extends PageRequest {
     /**
      * 提交开始时间
      */
-    private Date startTime;
+    private String startTime;
 
     /**
      * 提交开始时间
      */
-    private Date endTime;
+    private String endTime;
     /**
      * 提交开始时间
      */

+ 2 - 3
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/EntFindPageReqVo.java

@@ -5,7 +5,6 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
-import java.util.List;
 
 /**
  * @author czh
@@ -68,12 +67,12 @@ public class EntFindPageReqVo extends PageRequest implements Serializable {
     /**
      * 提交开始时间
      */
-    private Date startTime;
+    private String startTime;
 
     /**
      * 提交开始时间
      */
-    private Date endTime;
+    private String endTime;
 
     /**
      * 审核开始时间

+ 5 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/SysDictResp.java

@@ -48,6 +48,11 @@ public class SysDictResp implements Serializable {
      */
     @Schema(description = "类型")
     private String type;
+    /**
+     * 类型名称
+     */
+    @Schema(description = "类型名称")
+    private String typeName;
 
     /**
      * 描述

+ 10 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/SysDictTypeRepository.java

@@ -5,12 +5,14 @@ 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.system.dao.SysDictTypeDao;
+import com.sckw.system.model.SysDict;
 import com.sckw.system.model.SysDictType;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 
 /**
  * 字典类型服务层(MyBatis-Plus 版本)
@@ -74,4 +76,12 @@ public class SysDictTypeRepository extends ServiceImpl<SysDictTypeDao, SysDictTy
                         .like(SysDictType::getType, keyword))
                 .last("LIMIT 100"));
     }
+
+    public List<SysDictType> queryByTypes(Set<String> types) {
+        return list(Wrappers.<SysDictType>lambdaQuery()
+                .select(SysDictType::getId, SysDictType::getName, SysDictType::getType)
+                .eq(SysDictType::getDelFlag, 0)
+                .eq(SysDictType::getStatus, 0)
+                .in(SysDictType::getType, types));
+    }
 }

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

@@ -286,7 +286,10 @@ public class KwsEnterpriseService {
         if (StringUtils.isNotBlank(reqVo.getEntTypes())) {
             findPojoParam.setTypeList(Arrays.stream(reqVo.getEntTypes().split(Global.COMMA)).map(Integer::parseInt).toList());
         }
-
+        if (StrUtil.isNotEmpty(findPojoParam.getStartTime()) && StrUtil.isNotEmpty(findPojoParam.getEndTime())) {
+            findPojoParam.setStartTime(findPojoParam.getStartTime() + " 00:00:00");
+            findPojoParam.setEndTime(findPojoParam.getEndTime() + " 23:59:59");
+        }
         return kwsEnterpriseDao.findPojoAndManager(findPojoParam, authEntIdList);
     }
 
@@ -542,7 +545,7 @@ public class KwsEnterpriseService {
             String loginEntStr = RedissonUtils.getString(Global.getFullUserEntKey(entId));
             LoginEntInfo loginEntInfo = StringUtils.isNotBlank(loginEntStr) ? JSON.parseObject(loginEntStr, LoginEntInfo.class) : null;
             if (Objects.nonNull(loginEntInfo)) {
-                loginEntInfo.setStatus(reqVo.getStatus());
+                loginEntInfo.setStatus(Global.NO);
                 RedissonUtils.putString(Global.getFullUserEntKey(entId), JSONObject.toJSONString(loginEntInfo), Global.PC_TOKEN_EXPIRE);
             }
         }
@@ -992,11 +995,13 @@ public class KwsEnterpriseService {
 
 
         List<KwsEntCheckTrack> list = kwsEntCheckTrackDao.findList(id);
+        boolean isValid = false;
         if (CollectionUtils.isNotEmpty(list)) {
-            entDetailResVo.setValid(list.stream().anyMatch(item -> item.getStatus().equals(Global.NO)));
-        } else {
-            entDetailResVo.setValid(false);
+            isValid = list.stream()
+                    .filter(item -> item.getStatus() != null)
+                    .anyMatch(item -> item.getStatus().equals(Global.NO));
         }
+        entDetailResVo.setValid(isValid);
         return entDetailResVo;
     }
 
@@ -1279,18 +1284,24 @@ public class KwsEnterpriseService {
 
         //企业资质有效性判断  1、当前资质没过期,且状态是已认证  2、只要有认证过一次就算有效  参数判断
         String checkType = String.valueOf(Global.NUMERICAL_TWO);
+        entCacheResDto.setValid(false); // 设置默认值
         if (checkType.equals(Global.NUMERICAL_ONE)) {
             List<CertificateResVo> certificates = queryCertificate(entId);
-            for (CertificateResVo certificate : certificates) {
-                Date expireTime = certificate.getExpireTime();
-                entCacheResDto.setValid(DateUtil.compare(new Date(), expireTime) <= 0);
+            if (CollectionUtils.isNotEmpty(certificates)) {
+                // 只要有一个证书有效,则企业有效
+                boolean hasValidCertificate = certificates.stream()
+                        .filter(cert -> cert.getExpireTime() != null)
+                        .anyMatch(certificate -> DateUtil.compare(new Date(), certificate.getExpireTime()) <= 0);
+                entCacheResDto.setValid(hasValidCertificate);
             }
         } else {
             List<KwsEntCheckTrack> entCheckTrackResDtoList = entCheck(entId);
-            if (CollectionUtils.isEmpty(entCheckTrackResDtoList)) {
-                entCacheResDto.setValid(false);
+            if (CollectionUtils.isNotEmpty(entCheckTrackResDtoList)) {
+                boolean hasApprovedRecord = entCheckTrackResDtoList.stream()
+                        .filter(item -> item.getStatus() != null)
+                        .anyMatch(item -> item.getStatus() == Global.NO);
+                entCacheResDto.setValid(hasApprovedRecord);
             }
-            entCacheResDto.setValid(entCheckTrackResDtoList.stream().anyMatch(item -> item.getStatus() == Global.NO));
         }
 
         return entCacheResDto;
@@ -1508,8 +1519,8 @@ public class KwsEnterpriseService {
         Set<Long> entIds = kwsEnterprises.stream().map(BaseModel::getId).collect(Collectors.toSet());
 
         //查询父企业
-        List<KwsEnterprise> parentEnts  =kwsEnterpriseRepository.queryByParentEntIds(entIds);
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(parentEnts)){
+        List<KwsEnterprise> parentEnts = kwsEnterpriseRepository.queryByParentEntIds(entIds);
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(parentEnts)) {
             kwsEnterprises.addAll(parentEnts);
         }
         //根据类型进行过滤

+ 23 - 5
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/SysDictFlexBusinessService.java

@@ -8,9 +8,11 @@ import com.sckw.core.utils.IdWorker;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.system.model.SysDict;
+import com.sckw.system.model.SysDictType;
 import com.sckw.system.model.vo.req.SysDictReqVo;
 import com.sckw.system.model.vo.res.SysDictResp;
 import com.sckw.system.repository.SysDictRepository;
+import com.sckw.system.repository.SysDictTypeRepository;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -35,6 +37,7 @@ import java.util.stream.Collectors;
 public class SysDictFlexBusinessService {
 
     private final SysDictRepository sysDictRepository;
+    private final SysDictTypeRepository sysDictTypeRepository;
 
     /**
      * 新增字典
@@ -137,6 +140,19 @@ public class SysDictFlexBusinessService {
         if (records == null || records.isEmpty()) {
             return PageDataResult.empty(reqVo.getPageNum(), reqVo.getPageSize());
         }
+
+        //根据商品类型查询商品类型名称
+        Set<String> types = records.stream()
+                .map(SysDict::getType)
+                .collect(Collectors.toSet());
+        //查询商品类型名称
+        List<SysDictType> typeDicts = sysDictTypeRepository.queryByTypes(types);
+        Map<String, SysDictType> typeAndDictMap = Maps.newHashMap();
+        if (CollectionUtils.isNotEmpty(typeDicts)){
+            typeAndDictMap = typeDicts.stream()
+                    .collect(Collectors.toMap(SysDictType::getType, Function.identity(), (k1, k2) -> k1));
+        }
+
         Set<String> parentIds = records.stream()
                 .map(SysDict::getParentId)
                 .collect(Collectors.toSet());
@@ -148,7 +164,7 @@ public class SysDictFlexBusinessService {
                     .collect(Collectors.toMap(BaseModel::getId, Function.identity(), (k1, k2) -> k1));
         }
 
-        List<SysDictResp> sysDictResps = convertToRespList(records,idAndParentDictMap);
+        List<SysDictResp> sysDictResps = convertToRespList(records,idAndParentDictMap,typeAndDictMap);
         return PageDataResult.of(page, sysDictResps);
     }
 
@@ -168,7 +184,7 @@ public class SysDictFlexBusinessService {
     public List<SysDictResp> searchParentDictForSelect(SysDictReqVo reqVo) {
         log.info("查询上级字典下拉列表,请求参数:{}", JSON.toJSONString(reqVo));
         List<SysDict> list = sysDictRepository.searchParentDictForSelect(reqVo.getKeyword());
-        return convertToRespList(list,new HashMap<>());
+        return convertToRespList(list,new HashMap<>(),new HashMap<>());
     }
 
     /**
@@ -204,13 +220,15 @@ public class SysDictFlexBusinessService {
     /**
      * 将实体转换为响应对象
      */
-    private SysDictResp convertToResp(SysDict entity,Map<Long, SysDict> idAndParentDictMap) {
+    private SysDictResp convertToResp(SysDict entity,Map<Long, SysDict> idAndParentDictMap,Map<String, SysDictType> typeAndDictMap) {
         if (entity == null) {
             return null;
         }
         SysDictResp resp = new SysDictResp();
         BeanUtils.copyProperties(entity, resp);
         resp.setStatusName(Objects.equals(entity.getStatus(), 0) ? " 正常" : "锁定");
+        SysDictType sysDictType = typeAndDictMap.getOrDefault(entity.getType(), new SysDictType());
+        resp.setTypeName(sysDictType.getName());
         // 设置父级字典名称
         Long parentId = Optional.ofNullable(entity.getParentId()).filter(StringUtils::isNotBlank).map(Long::parseLong).orElse(null);
         SysDict parentDict = idAndParentDictMap.getOrDefault(parentId, new SysDict());
@@ -221,12 +239,12 @@ public class SysDictFlexBusinessService {
     /**
      * 将实体列表转换为响应对象列表
      */
-    private List<SysDictResp> convertToRespList(List<SysDict> entities,Map<Long, SysDict> idAndParentDictMap ) {
+    private List<SysDictResp> convertToRespList(List<SysDict> entities,Map<Long, SysDict> idAndParentDictMap,Map<String, SysDictType> typeAndDictMap ) {
         if (entities == null || entities.isEmpty()) {
             return List.of();
         }
         return entities.stream()
-                .map(x->convertToResp(x,idAndParentDictMap))
+                .map(x->convertToResp(x,idAndParentDictMap,typeAndDictMap))
                 .collect(Collectors.toList());
     }
 }

+ 10 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwfTruckTraceController.java

@@ -106,6 +106,16 @@ public class KwfTruckTraceController {
         return BaseResult.success(vehicleExceptionService.queryExceptionList(req));
     }
 
+    /**
+     * 分页查询车辆异常图片信息
+     */
+    @PostMapping("/exceptionJkList")
+    @Operation(summary = "车辆异常唯一车牌列表", description = "根据运输企业ID、异常类型、车牌号、定位状态分页查询车辆异常图片信息")
+    public BaseResult<PageDataResult<VehicleExceptionVo>> exceptionJkList(@RequestBody VehicleExceptionQueryReq req) {
+        return BaseResult.success(vehicleExceptionService.exceptionJkList(req));
+    }
+
+
     /**
      * 生成车辆轨迹
      */

+ 12 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java

@@ -20,10 +20,12 @@ import com.sckw.excel.utils.ExcelUtil;
 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;
@@ -744,4 +746,14 @@ public class KwtWaybillOrderController {
         return BaseResult.success(waybillOrderV1Service.queryTruckList());
     }
 
+
+    /**
+     * 运单号下拉列表(支持输入匹配)
+     */
+    @PostMapping("/waybillOrderSelect")
+    @Operation(summary = "运单号下拉列表", description = "支持根据运单号输入匹配,返回运单号、车牌号、司机信息等")
+    public BaseResult<List<WaybillOrderSelectOptionVo>> getWaybillOrderSelectList(@RequestBody WaybillOrderSelectReq req) {
+
+        return BaseResult.success(waybillOrderService.getWaybillOrderSelectList(req));
+    }
 }

+ 9 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java

@@ -1262,6 +1262,12 @@ public class TransportServiceImpl implements TransportRemoteService {
         addLogisticOrderDTO.setUserId(param.getUserId());
         addLogisticOrderDTO.setTradeOrderId(param.getTradeOrderId());
         addLogisticOrderDTO.setTradeOrderNo(param.getTradeOrderNo());
+        addLogisticOrderDTO.setNonConsignCompany(param.getNonConsignCompany());
+        addLogisticOrderDTO.setNonConsignCompanyId(param.getNonConsignCompanyId());
+        addLogisticOrderDTO.setNonConsignContactPhone(param.getNonConsignContactPhone());
+        addLogisticOrderDTO.setNonConsignContacts(param.getNonConsignContacts());
+        addLogisticOrderDTO.setNonConsignContactsId(param.getNonConsignContactsId());
+
         addLogisticOrderDTO.setConsignCompany(param.getConsignCompany());
         addLogisticOrderDTO.setConsignCompanyId(param.getConsignCompanyId());
         addLogisticOrderDTO.setConsignContactPhone(param.getConsignContactPhone());
@@ -1289,6 +1295,9 @@ public class TransportServiceImpl implements TransportRemoteService {
         addLogisticOrderDTO.setLoadLng(param.getLoadLng());
         addLogisticOrderDTO.setUnloadLat(param.getUnloadLat());
         addLogisticOrderDTO.setUnloadLng(param.getUnloadLng());
+        addLogisticOrderDTO.setBillingMode(param.getBillingMode());
+        addLogisticOrderDTO.setStartTime(param.getStartTime());
+        addLogisticOrderDTO.setEndTime(param.getEndTime());
         return addLogisticOrderDTO;
     }
 
@@ -1304,8 +1313,6 @@ public class TransportServiceImpl implements TransportRemoteService {
         info.setAcceptCompany(logistic.getAcceptCompany());
         info.setPrice(logistic.getPrice());
         info.setPriceType(logistic.getPriceType());
-        info.setEndTime(logistic.getEndTime());
-        info.setStartTime(logistic.getStartTime());
 //        info.setUnloadId(logistic.getUnloadId());
 //        info.setUnloadName(logistic.getUnloadName());
 //        info.setUnloadCityCode(logistic.getUnloadCityCode());
@@ -1316,7 +1323,6 @@ public class TransportServiceImpl implements TransportRemoteService {
         info.setPayment(logistic.getPayment());
         info.setSigningWay(logistic.getSigningWay());
         info.setLossUnit(logistic.getLossUnit());
-        info.setBillingMode(logistic.getBillingMode());
         info.setRemark(logistic.getRemark());
         info.setType(logistic.getType());
         return info;

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

@@ -1,11 +1,13 @@
 package com.sckw.transport.model.dto;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import jakarta.validation.constraints.*;
 import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.List;
 
 
@@ -36,6 +38,32 @@ public class AddLogisticOrderDTO implements Serializable {
      */
     @NotBlank(message = "订单编号不能为空")
     private String tradeOrderNo;
+    /**
+     * 非托运方单位
+     */
+    @NotBlank(message = "非托运方单位名称不能为空")
+    private String nonConsignCompany;
+    /**
+     * 非托运方单位id
+     */
+    @NotBlank(message = "非托运方单位id不能为空")
+    private Long nonConsignCompanyId;
+    /**
+     * 非托运方联系电话
+     */
+    @NotBlank(message = "非托运方联系电话不能为空")
+    private String nonConsignContactPhone;
+    /**
+     * 非托运方联系人
+     */
+    @NotBlank(message = "非托运方联系人不能为空")
+    private String nonConsignContacts;
+    /**
+     * 非托运方联系人id
+     */
+    @NotBlank(message = "非托运方联系人id不能为空")
+    private Long nonConsignContactsId;
+
     /**
      * 托运单位
      */
@@ -190,4 +218,22 @@ public class AddLogisticOrderDTO implements Serializable {
      */
     @NotBlank(message = "经度不能为空")
     private String unloadLng;
+    /**
+     * 计费方式
+     */
+    private String billingMode;
+
+    /**
+     * 计划卸货时间
+     */
+    @NotNull(message = "计划卸货时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate endTime;
+
+    /**
+     * 计划发货时间
+     */
+    @NotNull(message = "计划发货时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate startTime;
 }

+ 23 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/GenerateTraceReq.java

@@ -18,26 +18,46 @@ public class GenerateTraceReq implements Serializable {
 
     @Serial
     private static final long serialVersionUID = 1L;
-
+    /**
+     * 日期(格式:yyyy-MM-dd)
+     */
     @Schema(description = "日期(格式:yyyy-MM-dd)", example = "2025-11-18", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotBlank(message = "日期不能为空")
     private String date;
 
+    /**
+     * 运单号
+     */
     @Schema(description = "运单号", example = "T88565469682136456969", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotBlank(message = "运单号不能为空")
     private String wayOrderNo;
 
+    /**
+     * 车牌号
+     */
     @Schema(description = "车牌号", example = "川A888528", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotBlank(message = "车牌号不能为空")
     private String truckNo;
-
+    /**
+     * 当前位置(经纬度,格式:经度,纬度)
+     */
     @Schema(description = "当前位置(经纬度,格式:经度,纬度)", example = "104.065735,30.659462", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotBlank(message = "当前位置不能为空")
     private String currentLocation;
 
+    /**
+     * 当前详细地址
+     */
+    @Schema(description = "当前详细地址")
+    private String currentDetailAddress;
+    /**
+     * 异常位置详细地址
+     */
     @Schema(description = "异常位置详细地址")
     private String exceptionLocation;
-
+    /**
+     * 异常类型(1-车辆偏航,2-急刹车,3-超速,4-异常停车)
+     */
     @Schema(description = "异常类型(1-车辆偏航,2-急刹车,3-超速,4-异常停车)")
     private Integer exceptionType;
 }

+ 1 - 19
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticData.java

@@ -77,20 +77,6 @@ public  class LogisticData implements Serializable {
         private Long priceType;
 
 
-        /**
-         * 计划卸货时间
-         */
-        @NotNull(message = "计划卸货时间不能为空")
-        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-        private LocalDate endTime;
-
-        /**
-         * 计划发货时间
-         */
-        @NotNull(message = "计划发货时间不能为空")
-        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-        private LocalDate startTime;
-
 
         /**
          * 总量
@@ -128,11 +114,7 @@ public  class LogisticData implements Serializable {
          */
         @NotBlank(message = "合理损耗单位不能为空")
         private String lossUnit;
-        /**
-         * 计费方式
-         */
-        @NotNull(message = "计费方式不能为空")
-        private String billingMode;
+
 
         /**
          * 备注

+ 2 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/MapVehicleQueryReq.java

@@ -30,6 +30,8 @@ public class MapVehicleQueryReq  implements Serializable {
     private Integer locationStatus;
     @Schema(description = "任务状态")
     private Integer status;
+    @Schema(description = "车牌号")
+    private String trackNo;
 
     @Schema(description = "排序类型(1-按时间排序,2-耗时排序,3-异常排序)", example = "1")
     private Integer sortType = 1;

+ 18 - 6
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/VehicleExceptionQueryReq.java

@@ -11,22 +11,34 @@ import lombok.Data;
 @Data
 @Schema(description = "车辆异常查询请求")
 public class VehicleExceptionQueryReq {
-    
+    /**
+     * 运输企业ID
+     */
     @Schema(description = "运输企业ID", requiredMode = Schema.RequiredMode.REQUIRED)
     private Long entId;
-    
+    /**
+     * 异常类型(1-车辆偏航,2-急刹车,3-超速,4-异常停车)
+     */
     @Schema(description = "异常类型(1-车辆偏航,2-急刹车,3-超速,4-异常停车)")
     private Integer exceptionType;
-    
+    /**
+     * 车牌号
+     */
     @Schema(description = "车牌号")
     private String truckNo;
-    
+    /**
+     * 定位状态(1-在线,0-离线)
+     */
     @Schema(description = "定位状态(1-在线,0-离线)")
     private Integer locationStatus;
-    
+    /**
+     * 开始时间
+     */
     @Schema(description = "页码", example = "1")
     private Integer pageNum = 1;
-    
+    /**
+     * 结束时间
+     */
     @Schema(description = "每页数量", example = "20")
     private Integer pageSize = 20;
 }

+ 1 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/VehicleRouteData.java

@@ -3,6 +3,7 @@ package com.sckw.transport.model.dto;
 
 import lombok.Data;
 
+import java.sql.Timestamp;
 import java.time.LocalDateTime;
 
 

+ 31 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillOrderSelectReq.java

@@ -0,0 +1,31 @@
+package com.sckw.transport.model.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 运单号下拉查询请求
+ * @author system
+ */
+@Data
+@Schema(description = "运单号下拉查询请求")
+public class WaybillOrderSelectReq implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 运单号
+     */
+    @Schema(description = "运单号(模糊匹配)")
+    private String wOrderNo;
+
+    /**
+     * 企业ID
+     */
+    @Schema(description = "企业ID")
+    private Long entId;
+}

+ 13 - 9
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/VehiclesTrajectoryReq.java

@@ -1,21 +1,23 @@
 package com.sckw.transport.model.param;
 
 import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
-import java.time.LocalDateTime;
-import java.util.Date;
+import java.io.Serial;
+import java.io.Serializable;
+import java.sql.Timestamp;
 
 /**
  * @author PC
  */
 @Data
-@Valid
-public class VehiclesTrajectoryReq {
-    private String ts;
+public class VehiclesTrajectoryReq implements Serializable {
+    
+    @Serial
+    private static final long serialVersionUID = 1L;
+    private Timestamp ts;
     /**
      * 手机号
      */
@@ -47,7 +49,7 @@ public class VehiclesTrajectoryReq {
      * 车速(km/h)
      */
     @Schema(description = "车速(km/h)")
-    @NotBlank(message = "车速speed不能为空")
+    @NotNull(message = "车速speed不能为空")
     private Float speed;
 
     /**
@@ -118,8 +120,10 @@ public class VehiclesTrajectoryReq {
     private VehicleDataVO vehicleDataVO;
 
     @Data
-    @Valid
-    public static class VehicleDataVO {
+    public static class VehicleDataVO implements Serializable {
+        
+        @Serial
+        private static final long serialVersionUID = 1L;
 
         /**
          * 车牌

+ 10 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/MapVehicleVo.java

@@ -35,6 +35,12 @@ public class MapVehicleVo implements Serializable {
 
     @Schema(description = "车辆ID")
     private Long truckId;
+    @Schema(description = "能源类型")
+    private String energyType;
+    @Schema(description = "能源类型描述")
+    private String energyTypeDesc;
+    @Schema(description = "司机id")
+    private Long driverId;
 
     @Schema(description = "司机姓名")
     private String driverName;
@@ -94,4 +100,8 @@ public class MapVehicleVo implements Serializable {
 
     @Schema(description = "异常数量")
     private Integer exceptionCount;
+    @Schema(description = "装货地址")
+    private String loadAddress;
+    @Schema(description = "卸货地址")
+    private String unloadAddress;
 }

+ 53 - 15
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/VehicleExceptionVo.java

@@ -11,46 +11,84 @@ import lombok.Data;
 @Data
 @Schema(description = "车辆异常图片信息")
 public class VehicleExceptionVo {
-    
-    @Schema(description = "图片ID")
+    /**
+     * 主键ID
+     */
+    @Schema(description = "ID")
     private Long id;
-    
+
+    /**
+     * 车牌号
+     */
     @Schema(description = "车牌号")
     private String truckNo;
-    
+    /**
+     * 异常类型代码(1-车辆偏航,2-急刹车,3-超速,4-异常停车)
+     */
     @Schema(description = "异常类型代码(1-车辆偏航,2-急刹车,3-超速,4-异常停车)")
     private Integer exceptionType;
-    
+    /**
+     * 异常类型名称
+     */
     @Schema(description = "异常类型名称")
     private String exceptionTypeName;
-    
+    /**
+     * 图片URL
+     */
     @Schema(description = "图片URL")
     private String imageUrl;
-    
+    /**
+     * 异常时间(yyyy-MM-dd HH:mm:ss)
+     */
     @Schema(description = "异常时间(yyyy-MM-dd HH:mm:ss)")
     private String exceptionTime;
-    
+    /**
+     * 经度
+     */
     @Schema(description = "经度")
     private String longitude;
-    
+
+    /**
+     * 纬度
+     */
     @Schema(description = "纬度")
     private String latitude;
-    
+
+    /**
+     * 位置描述
+     */
     @Schema(description = "位置描述")
     private String location;
-    
+    /**
+     * 定位状态(1-在线,0-离线)
+     */
     @Schema(description = "定位状态(1-在线,0-离线)")
     private Integer locationStatus;
-    
+
+    /**
+     * 定位状态描述
+     */
     @Schema(description = "定位状态描述")
     private String locationStatusDesc;
-    
+    /**
+     * 速度(km/h)
+     */
     @Schema(description = "异常详情描述")
     private String description;
-    
+    /**
+     * 速度(km/h)
+     */
+    @Schema(description = "速度(km/h)")
+    private String speed;
+
+    /**
+     * 司机姓名
+     */
     @Schema(description = "司机姓名")
     private String driverName;
-    
+    /**
+     * 司机电话
+     */
     @Schema(description = "司机电话")
     private String driverPhone;
 }

+ 35 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderSelectOptionVo.java

@@ -0,0 +1,35 @@
+package com.sckw.transport.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 运单号下拉选项VO
+ * @author system
+ */
+@Data
+@Schema(description = "运单号下拉选项")
+public class WaybillOrderSelectOptionVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "运单ID")
+    private Long id;
+
+    @Schema(description = "运单号")
+    private String wOrderNo;
+
+    @Schema(description = "车牌号")
+    private String truckNo;
+
+    @Schema(description = "司机姓名")
+    private String driverName;
+
+    @Schema(description = "司机手机号")
+    private String driverPhone;
+
+    @Schema(description = "运单状态")
+    private Integer status;
+}

+ 2 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderRepository.java

@@ -38,14 +38,13 @@ public class KwtLogisticsOrderRepository extends ServiceImpl<KwtLogisticsOrderMa
                 .eq(KwtLogisticsOrder::getTOrderId, tradeId));
     }
 
-        public IPage<KwtLogisticsOrder> queryByPage(Set<Long> entIds,Set<Long> logisticsOrderIds,Long  tradeOrderId,String orderNo,
+        public IPage<KwtLogisticsOrder> queryByPage(Set<Long> logisticsOrderIds,Long  tradeOrderId,String orderNo,
                                                     String status,
                                                  String startTime, String endTime,  int pageNum, int pageSize) {
         return page(new Page<>(pageNum, pageSize),
                 Wrappers.<KwtLogisticsOrder>lambdaQuery()
                         .eq(KwtLogisticsOrder::getDelFlag, 0)
                         .in(CollectionUtils.isNotEmpty(logisticsOrderIds), KwtLogisticsOrder::getId, logisticsOrderIds)
-                        .in(CollectionUtils.isNotEmpty(entIds), KwtLogisticsOrder::getEntId, entIds)
                         .eq(Objects.nonNull(tradeOrderId),KwtLogisticsOrder::getTOrderId, tradeOrderId)
                         .eq(StringUtils.isNotBlank(status),KwtLogisticsOrder::getStatus, status)
                         .like(StringUtils.isNotBlank(orderNo),KwtLogisticsOrder::getLOrderNo, orderNo)
@@ -105,11 +104,10 @@ public class KwtLogisticsOrderRepository extends ServiceImpl<KwtLogisticsOrderMa
                 .eq(KwtLogisticsOrder::getBillingMode, billingMethod));
     }
 
-    public List<KwtLogisticsOrder> queryList(Set<Long> allEnt, Set<Long> logOrderIds, Long tradeOrderId, String orderNo, String orderStatus, String startTime, String endTime) {
+    public List<KwtLogisticsOrder> queryList( Set<Long> logOrderIds, Long tradeOrderId, String orderNo, String orderStatus, String startTime, String endTime) {
         return list(Wrappers.<KwtLogisticsOrder>lambdaQuery()
                 .eq(KwtLogisticsOrder::getDelFlag,0)
                 .in(CollectionUtils.isNotEmpty(logOrderIds), KwtLogisticsOrder::getId, logOrderIds)
-                .in(CollectionUtils.isNotEmpty(allEnt), KwtLogisticsOrder::getEntId, allEnt)
                 .eq(Objects.nonNull(tradeOrderId),KwtLogisticsOrder::getTOrderId, tradeOrderId)
                 .eq(StringUtils.isNotBlank(orderStatus),KwtLogisticsOrder::getStatus, orderStatus)
                 .ge(StringUtils.isNotBlank(startTime),KwtLogisticsOrder::getLoadTime, startTime)

+ 45 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtVehicleExceptionRepository.java

@@ -42,6 +42,51 @@ public class KwtVehicleExceptionRepository extends ServiceImpl<KwtVehicleExcepti
                         .like(StringUtils.isNotBlank(truckNo), KwtVehicleException::getTruckNo, truckNo)
                         .orderByDesc(KwtVehicleException::getExceptionTime));
     }
+
+    /**
+     * 分页查询每个车牌号异常时间最新的一条记录
+     * 使用子查询确保每个车牌号只返回异常时间最新的一条记录
+     *
+     * @param entId          企业ID
+     * @param exceptionType  异常类型
+     * @param truckNo        车牌号
+     * @param pageNum        页码
+     * @param pageSize       每页数量
+     * @return 分页结果
+     */
+    public IPage<KwtVehicleException> queryExceptionImagePage1(Long entId, Integer exceptionType,
+                                                              String truckNo, int pageNum, int pageSize) {
+        // 构建子查询条件:当前记录的异常时间等于该车牌号的最大异常时间
+        // 使用 (truck_no, exception_time) IN 子查询来确保只查询每个车牌号最新的一条
+        StringBuilder subQuery = new StringBuilder();
+        subQuery.append("(truck_no, exception_time) IN (");
+        subQuery.append("SELECT truck_no, MAX(exception_time) ");
+        subQuery.append("FROM kwt_vehicle_exception ");
+        subQuery.append("WHERE del_flag = 0");
+        
+        if (Objects.nonNull(entId)) {
+            subQuery.append(" AND ent_id = ").append(entId);
+        }
+        if (Objects.nonNull(exceptionType)) {
+            subQuery.append(" AND exception_type = ").append(exceptionType);
+        }
+        if (StringUtils.isNotBlank(truckNo)) {
+            // 转义单引号防止 SQL 注入
+            String escapedTruckNo = truckNo.replace("'", "''");
+            subQuery.append(" AND truck_no LIKE '%").append(escapedTruckNo).append("%'");
+        }
+        
+        subQuery.append(" GROUP BY truck_no)");
+        
+        return page(new Page<>(pageNum, pageSize),
+                Wrappers.<KwtVehicleException>lambdaQuery()
+                        .eq(KwtVehicleException::getDelFlag, 0)
+                        .eq(Objects.nonNull(entId), KwtVehicleException::getEntId, entId)
+                        .eq(Objects.nonNull(exceptionType), KwtVehicleException::getExceptionType, exceptionType)
+                        .like(StringUtils.isNotBlank(truckNo), KwtVehicleException::getTruckNo, truckNo)
+                        .apply(subQuery.toString())
+                        .orderByDesc(KwtVehicleException::getExceptionTime));
+    }
     
     /**
      * 批量查询运单的异常数量

+ 30 - 6
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java

@@ -11,15 +11,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.transport.dao.KwtWaybillOrderMapper;
 import com.sckw.transport.model.KwtWaybillOrder;
+import com.sckw.transport.model.vo.WaybillOrderSelectOptionVo;
 import jakarta.validation.constraints.NotBlank;
 import org.springframework.stereotype.Repository;
 
 import java.time.LocalDateTime;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Author: 马超伟
@@ -30,6 +28,31 @@ import java.util.Set;
 
 @Repository
 public class KwtWaybillOrderRepository extends ServiceImpl<KwtWaybillOrderMapper, KwtWaybillOrder> {
+
+    /**
+     * 查询运单号下拉列表(支持模糊查询)
+     * @param entId 企业ID
+     * @param wOrderNo 运单号(模糊匹配)
+     * @return 运单号列表
+     */
+    public List<KwtWaybillOrder> selectWaybillOrderOptions(Long entId, String wOrderNo) {
+        LambdaQueryWrapper<KwtWaybillOrder> wrapper = Wrappers.<KwtWaybillOrder>lambdaQuery()
+                .select(KwtWaybillOrder::getId,
+                        KwtWaybillOrder::getWOrderNo,
+                        KwtWaybillOrder::getTruckNo,
+                        KwtWaybillOrder::getDriverName,
+                        KwtWaybillOrder::getDriverPhone,
+                        KwtWaybillOrder::getStatus)
+                .eq(KwtWaybillOrder::getDelFlag, 0)
+                .eq(entId != null, KwtWaybillOrder::getEntId, entId)
+                .like(StringUtils.isNotBlank(wOrderNo), KwtWaybillOrder::getWOrderNo, wOrderNo)
+                .orderByDesc(KwtWaybillOrder::getCreateTime)
+                .last("LIMIT 100");
+
+        return list(wrapper);
+
+    }
+
     public Page<KwtWaybillOrder> findPage(String truckNo,int pageNum, int pageSize, Date beforeDate, Date date) {
         Page<KwtWaybillOrder> page = new Page<>(pageNum, pageSize);
         LambdaQueryWrapper<KwtWaybillOrder> wrapper = Wrappers.<KwtWaybillOrder>lambdaQuery()
@@ -227,7 +250,7 @@ public class KwtWaybillOrderRepository extends ServiceImpl<KwtWaybillOrderMapper
      * @return 分页结果
      */
     public IPage<KwtWaybillOrder> queryMapVehicleListPage(Set<Long> entIds, Date startDate, Date endDate,
-                                                           List<Integer> taskingStatus, Set<Long> wayOrderIds, int pageNum, int pageSize) {
+                                                           List<Integer> taskingStatus, Set<Long> wayOrderIds,String truckNo, int pageNum, int pageSize) {
         return page(new Page<>(pageNum, pageSize),
                 Wrappers.<KwtWaybillOrder>lambdaQuery()
                         .eq(KwtWaybillOrder::getDelFlag, 0)
@@ -236,6 +259,7 @@ public class KwtWaybillOrderRepository extends ServiceImpl<KwtWaybillOrderMapper
                         .in(CollectionUtils.isNotEmpty(wayOrderIds), KwtWaybillOrder::getId, wayOrderIds)
                         .ge(Objects.nonNull(startDate), KwtWaybillOrder::getCreateTime, startDate)
                         .le(Objects.nonNull(endDate), KwtWaybillOrder::getCreateTime, endDate)
+                        .like(StringUtils.isNotBlank(truckNo), KwtWaybillOrder::getTruckNo, truckNo)
                         .orderByDesc(KwtWaybillOrder::getUpdateTime));
     }
     

+ 27 - 5
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtAcceptCarriageOrderService.java

@@ -3332,6 +3332,28 @@ public class KwtAcceptCarriageOrderService {
         unit.setUpdateBy(orderDTO.getUserId());
         unit.setUpdateTime(new Date());
         savelogOrderUnitList.add(unit);
+        KwtLogisticsOrderUnit notifyUnit = new KwtLogisticsOrderUnit();
+
+        notifyUnit.setId(new IdWorker(NumberConstant.THREE).nextId());
+        notifyUnit.setLOrderId(lOrderId);
+        notifyUnit.setUnitType(NumberConstant.THREE);
+        notifyUnit.setEntId(orderDTO.getNonConsignCompanyId());
+        EntCacheResDto ent2 = entMap.get(orderDTO.getNonConsignCompanyId());
+        if (Objects.isNull(ent2)) {
+            throw new BusinessException("企业:" + orderDTO.getNonConsignCompany() + "的一级企业信息不存在!");
+        }
+        notifyUnit.setContactsId(orderDTO.getNonConsignContactsId());
+        notifyUnit.setTopEntId(ent2.getId());
+        notifyUnit.setFirmName(orderDTO.getNonConsignCompany());
+        notifyUnit.setContacts(orderDTO.getNonConsignContacts());
+        notifyUnit.setPhone(orderDTO.getNonConsignContactPhone());
+//        unit.setRemark(orderDTO.getRemark());
+        notifyUnit.setStatus(NumberConstant.ZERO);
+        notifyUnit.setCreateBy(orderDTO.getUserId());
+        notifyUnit.setCreateTime(new Date());
+        notifyUnit.setUpdateBy(orderDTO.getUserId());
+        notifyUnit.setUpdateTime(new Date());
+        savelogOrderUnitList.add(notifyUnit);
     }
 
     private static void setLogisticContractInfo(AddLogisticOrderDTO orderDTO,LogisticData x, Long lOrderId, List<KwtLogisticsOrderContract> saveContractList) {
@@ -3422,7 +3444,7 @@ public class KwtAcceptCarriageOrderService {
         kwtLogisticsOrder.setLOrderNo(lOrderNo);
         kwtLogisticsOrder.setPid(lOrderId);
         kwtLogisticsOrder.setPids(lOrderId.toString());
-        kwtLogisticsOrder.setBillingMode(x.getBillingMode());
+        kwtLogisticsOrder.setBillingMode(orderDTO.getBillingMode());
         kwtLogisticsOrder.setPrice(x.getPrice());
         kwtLogisticsOrder.setPriceType(x.getPriceType());
         kwtLogisticsOrder.setAmount(x.getAmount());
@@ -3431,10 +3453,10 @@ public class KwtAcceptCarriageOrderService {
         kwtLogisticsOrder.setLossUnit(x.getLossUnit());
         kwtLogisticsOrder.setGoodsPrice(orderDTO.getGoodsPrice());
         kwtLogisticsOrder.setGoodsPriceUnit(orderDTO.getGoodsPriceUnit());
-        kwtLogisticsOrder.setStartTime(Objects.isNull(x.getStartTime()) ?
-                null : DateUtil.localDateToLocalDateTimeStart(x.getStartTime()));
-        kwtLogisticsOrder.setEndTime(Objects.isNull(x.getEndTime()) ?
-                null : DateUtil.localDateToLocalDateTimeStart(x.getEndTime()));
+        kwtLogisticsOrder.setStartTime(Objects.isNull(orderDTO.getStartTime()) ?
+                null : DateUtil.localDateToLocalDateTimeStart(orderDTO.getStartTime()));
+        kwtLogisticsOrder.setEndTime(Objects.isNull(orderDTO.getEndTime()) ?
+                null : DateUtil.localDateToLocalDateTimeStart(orderDTO.getEndTime()));
         BigDecimal decimal = BigDecimal.ZERO ;
         kwtLogisticsOrder.setSubcontractAmount(decimal);
         kwtLogisticsOrder.setEntrustAmount(decimal);

+ 65 - 19
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -17,6 +17,8 @@ import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import com.sckw.contract.api.RemoteContractService;
 import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
+import com.sckw.contract.api.model.vo.KwcContractLogisticsDto;
+import com.sckw.contract.api.model.vo.TradeContractResDto;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.common.enums.enums.ErrorCodeEnum;
@@ -2235,13 +2237,18 @@ public class KwtLogisticsConsignmentService {
         Set<Long> allEnt = getAllEnt(req.getEntId());
         //根据托运单位或者承运单位查询企业
         Set<Long> entList = getEntList(req);
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(allEnt)) {
+            entList.addAll(allEnt);
+        }
 
         //根据商品名称查询物流订单
-        Set<Long> logOrderIds = getLogOrderIds(req, entList);
-
+        Set<Long> logOrderIds = getLogOrderIds(req, entList,allEnt);
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(logOrderIds) && org.apache.commons.collections4.CollectionUtils.isNotEmpty(entList)){
+            return PageDataResult.empty(req.getPageNum(), req.getPageSize());
+        }
 
         //分页查询物流订单
-       IPage<KwtLogisticsOrder> page = logisticsOrderRepository.queryByPage(allEnt,logOrderIds,req.getTradeOrderId(), req.getOrderNo(),req.getOrderStatus(),
+       IPage<KwtLogisticsOrder> page = logisticsOrderRepository.queryByPage(logOrderIds,req.getTradeOrderId(), req.getOrderNo(),req.getOrderStatus(),
                req.getStartTime(), req.getEndTime(), req.getPageNum(), req.getPageSize());
         List<KwtLogisticsOrder> records = page.getRecords();
         if(org.springframework.util.CollectionUtils.isEmpty(records)){
@@ -2258,6 +2265,17 @@ public class KwtLogisticsConsignmentService {
                     .collect(Collectors.toMap(x -> x.getLOrderId() + "-" + x.getUnitType(),
                             Function.identity(), (x, y) -> x));
         }
+        //查询贸易订单
+        Set<Long> tradeIds = records.stream()
+                .map(KwtLogisticsOrder::getTOrderId)
+                .collect(Collectors.toSet());
+        Map<Long, OrderDetailVo> tradeIdAndOrderDetailVoMap = Maps.newHashMap();
+        if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(tradeIds)){
+            List<OrderDetailVo> orderDetailVos = tradeOrderInfoService.queryByTradeOrderIds(tradeIds);
+            tradeIdAndOrderDetailVoMap = orderDetailVos.stream()
+                    .collect(Collectors.toMap(OrderDetailVo::getId, Function.identity(), (x, y) -> x));
+        }
+
         //查询商品信息
         List<KwtLogisticsOrderGoods> logOrderGoodsList =logisticsOrderGoodsRepository.queryByLogOrderIds(logOrderIdList);
 
@@ -2297,9 +2315,11 @@ public class KwtLogisticsConsignmentService {
         Map<Long, KwtLogisticsOrderContract> finalLogOrderIdAndContractMap = logOrderIdAndContractMap;
 
         Map<String, SysDictResDto> finalDictValueAndDictResDtoMap = dictValueAndDictResDtoMap;
+        Map<Long, OrderDetailVo> finalTradeIdAndOrderDetailVoMap = tradeIdAndOrderDetailVoMap;
         List<LogisticsOrderResp> resps = records.stream()
                 .map(x ->getLogisticsOrderResp(x, finalLogOrderIdAndUnitTypeKeyAndUnitMap, finalLogIdAndGoodsMap
-                        , finalGoodsIdAndGoodsMap, finalLogisticsOrderIdAndUnitTypeKeyAndAddressMap, finalLogOrderIdAndContractMap, finalDictValueAndDictResDtoMap))
+                        , finalGoodsIdAndGoodsMap, finalLogisticsOrderIdAndUnitTypeKeyAndAddressMap, finalLogOrderIdAndContractMap,
+                        finalDictValueAndDictResDtoMap, finalTradeIdAndOrderDetailVoMap))
                 .collect(Collectors.toList());
         if(org.apache.commons.lang3.StringUtils.isNotBlank(req.getConsignCompanyId())){
             resps = resps.stream()
@@ -2352,7 +2372,7 @@ public class KwtLogisticsConsignmentService {
     }
 
     @NotNull
-    private Set<Long> getLogOrderIds(QueryLogisticsOrderReq req, Set<Long> entList) {
+    private Set<Long> getLogOrderIds(QueryLogisticsOrderReq req, Set<Long> entList, Set<Long> allEnt) {
         Set<Long> logOrderIds = Sets.newHashSet();
         if (StringUtils.isNotBlank(req.getContractId())){
             List<KwtLogisticsOrderContract> kwtLogisticsOrderContracts = logisticsOrderContractRepository.queryByContractId(Long.parseLong(req.getContractId()));
@@ -2378,8 +2398,15 @@ public class KwtLogisticsConsignmentService {
             List<KwtLogisticsOrderUnit> logOrderUnits =logisticsOrderUnitRepository.queryByEntIds(entList);
             if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(logOrderUnits)){
                 //获取物流订单
+                Set<Long> logOrderIdList = logOrderUnits.stream()
+                        .filter(x -> allEnt.contains(x.getEntId()))
+                        .map(KwtLogisticsOrderUnit::getLOrderId)
+                        .collect(Collectors.toSet());
                 Set<Long> logOrderFormUnitIds =
-                        logOrderUnits.stream().map(KwtLogisticsOrderUnit::getLOrderId).collect(Collectors.toSet());
+                        logOrderUnits.stream()
+                                .filter(x->logOrderIdList.contains(x.getLOrderId()))
+                                .map(KwtLogisticsOrderUnit::getLOrderId)
+                                .collect(Collectors.toSet());
                 logOrderIds.addAll(logOrderFormUnitIds);
             }
         }
@@ -2418,7 +2445,8 @@ public class KwtLogisticsConsignmentService {
                                                             Map<Long, KwpGoods> finalGoodsIdAndGoodsMap,
                                                             Map<String, KwtLogisticsOrderAddress> finalLogisticsOrderIdAndUnitTypeKeyAndAddressMap,
                                                             Map<Long, KwtLogisticsOrderContract> finalLogOrderIdAndContractMap,
-                                                            Map<String, SysDictResDto> dictValueAndDictResDtoMap) {
+                                                            Map<String, SysDictResDto> dictValueAndDictResDtoMap,
+                                                            Map<Long, OrderDetailVo> tradeIdAndOrderDetailVoMap) {
         LogisticsOrderResp logisticsOrderResp = new LogisticsOrderResp();
         logisticsOrderResp.setLogisticsOrderId(String.valueOf(kwtLogisticsOrder.getId()));
         logisticsOrderResp.setLogisticsOrderNo(kwtLogisticsOrder.getLOrderNo());
@@ -2444,8 +2472,9 @@ public class KwtLogisticsConsignmentService {
         logisticsOrderResp.setChargeType(kwtLogisticsOrder.getBillingMode());
         logisticsOrderResp.setChargeTypeDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
                 String.valueOf(kwtLogisticsOrder.getBillingMode())));
-        logisticsOrderResp.setAmount(Objects.nonNull(kwtLogisticsOrder.getAmount()) ?
-                kwtLogisticsOrder.getAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "0.00");
+        OrderDetailVo orderDetailVo = tradeIdAndOrderDetailVoMap.getOrDefault(kwtLogisticsOrder.getTOrderId(), new OrderDetailVo());
+        logisticsOrderResp.setAmount(Objects.nonNull(orderDetailVo.getAmount()) ?
+                orderDetailVo.getAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "0.00");
         BigDecimal expectedTransportPrice = BigDecimal.ZERO;
         BigDecimal actualTransportPrice = BigDecimal.ZERO;
         expectedTransportPrice =
@@ -2489,6 +2518,11 @@ public class KwtLogisticsConsignmentService {
         }
         //根据物流订单号查询物流合同
         KwtLogisticsOrderContract orderContract = logisticsOrderContractRepository.queryByLogOrderId(logisticsOrder.getId());
+        if (Objects.isNull(orderContract)){
+            log.info("物流合同不存在,物流订单号:{}", logisticsOrder.getId());
+            throw new BusinessException("物流合同不存在");
+        }
+        KwcContractLogisticsDto tradeContractResDto = contractService.queryContractByContractId(orderContract.getContractId());
         //根据订单号查询物流公司信息
         List<KwtLogisticsOrderUnit> unitList = logisticsOrderUnitRepository.queryByLOrderId(logisticsOrder.getId());
         Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap = Maps.newHashMap();
@@ -2517,17 +2551,17 @@ public class KwtLogisticsConsignmentService {
         List<KwtWaybillOrderSubtask> waybillOrderSubtasks = waybillOrderSubtaskRepository.queryByLogId(logisticsOrder.getId());
 
         //获取返回信息
-        return getLogisticsOrderDetailResp(orderContract, logOrderIdUnitTypeKeyAndUnitMap, logisticsOrder, kwpGoods,
+        return getLogisticsOrderDetailResp(orderContract,tradeContractResDto, logOrderIdUnitTypeKeyAndUnitMap, logisticsOrder, kwpGoods,
                 logOrderIdAndUnitTypeKeyAndAddressMap, waybillOrderSubtasks);
 
     }
 
     @NotNull
-    private static LogisticsOrderDetailResp getLogisticsOrderDetailResp(KwtLogisticsOrderContract orderContract, Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap, KwtLogisticsOrder logisticsOrder,
+    private static LogisticsOrderDetailResp getLogisticsOrderDetailResp(KwtLogisticsOrderContract orderContract,KwcContractLogisticsDto tradeContractResDto, Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap, KwtLogisticsOrder logisticsOrder,
                                                                         KwpGoods kwpGoods, Map<String, KwtLogisticsOrderAddress> logOrderIdAndUnitTypeKeyAndAddressMap, List<KwtWaybillOrderSubtask> waybillOrderSubtasks) {
         LogisticsOrderDetailResp logisticsOrderDetailResp = new LogisticsOrderDetailResp();
         //设置合同信息
-        setContractInfo(orderContract, logisticsOrderDetailResp);
+        setContractInfo(orderContract, tradeContractResDto,logisticsOrderDetailResp);
         //设置单位信息
         setUnitInfo(logOrderIdUnitTypeKeyAndUnitMap, logisticsOrder, logisticsOrderDetailResp);
 
@@ -2560,7 +2594,7 @@ public class KwtLogisticsConsignmentService {
         performanceInfoVO.setBillingMode(logisticsOrder.getBillingMode());
         performanceInfoVO.setBillingModeDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
                 logisticsOrder.getBillingMode()));
-        performanceInfoVO.setCompletedCarNum(String.valueOf(logisticsOrder.getTotalTake()));
+        performanceInfoVO.setCompletedCarNum(Objects.isNull(logisticsOrder.getTotalTake()) ? "0" : String.valueOf(logisticsOrder.getTotalTake()));
         performanceInfoVO.setOrderAmount(String.valueOf(waybillOrderSubtasks.size()));
         BigDecimal loadAmount = BigDecimal.ZERO;
         BigDecimal unloadAmount = BigDecimal.ZERO;
@@ -2645,11 +2679,11 @@ public class KwtLogisticsConsignmentService {
         logisticsOrderDetailResp.setUnitInfoVO(unitInfoVO);
     }
 
-    private static void setContractInfo(KwtLogisticsOrderContract orderContract, LogisticsOrderDetailResp logisticsOrderDetailResp) {
+    private static void setContractInfo(KwtLogisticsOrderContract orderContract,KwcContractLogisticsDto tradeContractResDto, LogisticsOrderDetailResp logisticsOrderDetailResp) {
         LogisticsOrderDetailResp.ContractInfoVO contractInfoVO = new LogisticsOrderDetailResp.ContractInfoVO();
-        if (Objects.nonNull(orderContract)){
-            contractInfoVO.setContractNo(orderContract.getContractNo());
-            contractInfoVO.setContractName(orderContract.getContractName());
+        if (Objects.nonNull(tradeContractResDto)){
+            contractInfoVO.setContractNo(tradeContractResDto.getContractNo());
+            contractInfoVO.setContractName(tradeContractResDto.getName());
         }
         logisticsOrderDetailResp.setContractInfoVO(contractInfoVO);
     }
@@ -3029,6 +3063,10 @@ public class KwtLogisticsConsignmentService {
         Set<Long> allEnt = getAllEnt(req.getEntId());
         //根据托运单位或者承运单位查询企业
         Set<Long> entList = getEntList(req);
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(allEnt)){
+            entList.addAll(allEnt);
+        }
+
         if (!org.apache.commons.lang3.StringUtils.isAllBlank(req.getConsignCompanyId(),req.getCarriageCompanyId())
                 && org.apache.commons.collections4.CollectionUtils.isEmpty(entList)){
             Map<Integer, List<KwtLogisticsOrder>> statusAndLogOrdersMap = Maps.newHashMap() ;
@@ -3040,8 +3078,16 @@ public class KwtLogisticsConsignmentService {
         }
 
         //根据商品名称查询物流订单
-        Set<Long> logOrderIds = getLogOrderIds(req, entList);
-        List<KwtLogisticsOrder> logisticsOrders =logisticsOrderRepository.queryList(allEnt,logOrderIds,req.getTradeOrderId(), req.getOrderNo(),req.getOrderStatus(),
+        Set<Long> logOrderIds = getLogOrderIds(req, entList,allEnt);
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(logOrderIds) && org.apache.commons.collections4.CollectionUtils.isNotEmpty(entList)){
+            Map<Integer, List<KwtLogisticsOrder>> statusAndLogOrdersMap = Maps.newHashMap() ;
+            List<OrderStatusStatisticsResp.OrderStatusStatistics> statistics = orderV1Enums.stream()
+                    .map(o -> getOrderStatusStatistics(o, statusAndLogOrdersMap))
+                    .collect(Collectors.toList());
+            orderStatusStatisticsResp.setOrderStatusStatistics(statistics);
+            return orderStatusStatisticsResp;
+         }
+        List<KwtLogisticsOrder> logisticsOrders =logisticsOrderRepository.queryList(logOrderIds,req.getTradeOrderId(), req.getOrderNo(),req.getOrderStatus(),
                 req.getStartTime(), req.getEndTime());
 
         if (Objects.isNull(logisticsOrders)){

+ 28 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java

@@ -31,9 +31,11 @@ import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.transport.dao.*;
+import com.sckw.transport.repository.KwtWaybillOrderRepository;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.vo.*;
+import com.sckw.transport.model.dto.WaybillOrderSelectReq;
 import jakarta.annotation.Resource;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.validation.Valid;
@@ -65,6 +67,8 @@ public class KwtWaybillOrderService {
     @Autowired
     KwtWaybillOrderMapper waybillOrderDao;
     @Autowired
+    KwtWaybillOrderRepository waybillOrderRepository;
+    @Autowired
     KwtWaybillOrderV1Mapper waybillOrderV1Dao;
     @Autowired
     KwtLogisticsOrderMapper logisticsOrderDao;
@@ -107,6 +111,30 @@ public class KwtWaybillOrderService {
     @Value("${message.waybill.refuseSendCar.pc}")
     private String refuseSendCarPcUrl;
 
+    /**
+     * 查询运单号下拉列表(支持模糊查询)
+     * @param req 查询请求
+     * @return 运单号列表
+     */
+    public List<WaybillOrderSelectOptionVo> getWaybillOrderSelectList(WaybillOrderSelectReq req) {
+        Long entId = req.getEntId() != null ? req.getEntId() : LoginUserHolder.getEntId();
+        List<KwtWaybillOrder> waybillOrders = waybillOrderRepository.selectWaybillOrderOptions(entId, req.getWOrderNo());
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(waybillOrders)) {
+            return List.of();
+        }
+
+        return waybillOrders.stream().map(order -> {
+            WaybillOrderSelectOptionVo vo = new WaybillOrderSelectOptionVo();
+            vo.setId(order.getId());
+            vo.setWOrderNo(order.getWOrderNo());
+            vo.setTruckNo(order.getTruckNo());
+            vo.setDriverName(order.getDriverName());
+            vo.setDriverPhone(order.getDriverPhone());
+            vo.setStatus(order.getStatus());
+            return vo;
+        }).collect(Collectors.toList());
+    }
+
     /**
      * @param driverId 司机ID
      * @desc 统计司机任务数(待接单 / 出车 / 执行 / 完结)

+ 6 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.pagehelper.PageHelper;
@@ -28,6 +29,8 @@ 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.BaseIotResult;
+import com.sckw.core.web.response.HttpResult;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.excel.utils.DateUtil;
 import com.sckw.fleet.api.RemoteFleetService;
@@ -2205,13 +2208,13 @@ public class KwtWaybillOrderV1Service {
                     // 使用 Feign 调用查询车辆轨迹列表
                     com.sckw.transport.api.model.dto.VehicleDataDTO vehicleDataDTO1 = new com.sckw.transport.api.model.dto.VehicleDataDTO();
                     vehicleDataDTO.setWOrderNo(waybillOrder.getWOrderNo());
-                    BaseResult<List<com.sckw.transport.api.model.dto.VehicleReturnData>> result = vehicleTraceClient.queryVehicleDataList(vehicleDataDTO1);
+                    BaseIotResult<List<com.sckw.transport.api.model.dto.VehicleReturnData>> result = vehicleTraceClient.queryVehicleDataList(vehicleDataDTO1);
                     
-                    if (result != null && result.getCode()== 0 && result.getData() != null) {
+                    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->{
                             VehicleRouteData vehicleRouteData = new VehicleRouteData();
-                            vehicleRouteData.setTs(x.getTs());
+                            vehicleRouteData.setTs(Objects.nonNull(x.getTs()) ? x.getTs().toLocalDateTime() : null);
                             vehicleRouteData.setLongitude(x.getLongitude());
                             vehicleRouteData.setLatitude(x.getLatitude());
                             return vehicleRouteData;

+ 48 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/VehicleExceptionService.java

@@ -1,11 +1,11 @@
 package com.sckw.transport.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.sckw.core.web.response.BaseIotResult;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.transport.api.feign.VehicleTraceClient;
 import com.sckw.transport.api.model.dto.VehicleDataDTO;
 import com.sckw.transport.api.model.dto.VehicleReturnData;
-import com.sckw.core.web.response.BaseResult;
 import com.sckw.transport.model.KwtVehicleException;
 import com.sckw.transport.model.dto.VehicleExceptionQueryReq;
 import com.sckw.transport.model.enuma.VehicleExceptionTypeEnum;
@@ -14,6 +14,7 @@ import com.sckw.transport.repository.KwtVehicleExceptionRepository;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
@@ -140,15 +141,15 @@ public class VehicleExceptionService {
             try {
                 VehicleDataDTO vehicleDataDTO = new VehicleDataDTO();
                 vehicleDataDTO.setCarNo(truckNo);
-                BaseResult<VehicleReturnData> result = vehicleTraceClient.queryRealTimeLocation(vehicleDataDTO);
+                BaseIotResult<VehicleReturnData> result = vehicleTraceClient.queryRealTimeLocation(vehicleDataDTO);
                 // 默认离线
                 Integer locationStatus = 0;
                 
-                if (result != null && result.getCode() == 0 && result.getData() != null) {
+                if (result != null && StringUtils.equals(result.getCode(), "0") && result.getData() != null) {
                     VehicleReturnData vehicleData = result.getData();
                     
                     // 判断30分钟内有定位数据为在线
-                    if (vehicleData.getTs() != null && vehicleData.getTs().isAfter(thirtyMinutesAgo)) {
+                    if (vehicleData.getTs() != null && vehicleData.getTs().toLocalDateTime().isAfter(thirtyMinutesAgo)) {
                         locationStatus = 1;
                     }
                 }
@@ -162,4 +163,47 @@ public class VehicleExceptionService {
         
         return locationStatusMap;
     }
+
+    public PageDataResult<VehicleExceptionVo> exceptionJkList(VehicleExceptionQueryReq req) {
+        // 分页查询异常图片数据
+        IPage<KwtVehicleException> page = exceptionImageRepository.queryExceptionImagePage1(
+                req.getEntId(),
+                req.getExceptionType(),
+                req.getTruckNo(),
+                req.getPageNum(),
+                req.getPageSize()
+        );
+
+        List<KwtVehicleException> records = page.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            return PageDataResult.empty(req.getPageNum(), req.getPageSize());
+        }
+
+        // 如果有定位状态筛选,需要查询车辆实时定位
+        Map<String, Integer> truckLocationStatusMap = new HashMap<>();
+        if (req.getLocationStatus() != null) {
+            List<String> truckNos = records.stream()
+                    .map(KwtVehicleException::getTruckNo)
+                    .distinct()
+                    .collect(Collectors.toList());
+
+            truckLocationStatusMap = queryVehicleLocationStatus(truckNos);
+        }
+
+        // 转换为VO
+        final Map<String, Integer> finalLocationStatusMap = truckLocationStatusMap;
+        List<VehicleExceptionVo> voList = records.stream()
+                .map(image -> buildVehicleExceptionVo(image, finalLocationStatusMap))
+                .filter(Objects::nonNull)
+                .collect(Collectors.toList());
+
+        // 如果有定位状态筛选,过滤结果
+        if (req.getLocationStatus() != null) {
+            voList = voList.stream()
+                    .filter(vo -> req.getLocationStatus().equals(vo.getLocationStatus()))
+                    .collect(Collectors.toList());
+        }
+
+        return PageDataResult.of(page, voList);
+    }
 }

+ 93 - 36
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java

@@ -9,6 +9,7 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import com.sckw.contract.api.RemoteContractService;
+import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.UrlConstants;
 import com.sckw.core.model.enums.AddressTypeEnum;
@@ -18,6 +19,7 @@ import com.sckw.core.utils.DateUtils;
 import com.sckw.core.utils.HttpUtil;
 import com.sckw.core.web.constant.CommonConstants;
 import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.core.web.response.BaseIotResult;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.core.web.response.BaseResult;
 import com.sckw.fleet.api.RemoteFleetService;
@@ -34,6 +36,7 @@ import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.KwsEnterpriseResDto;
+import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.transport.common.config.UrlConfigProperties;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.TruckDto;
@@ -62,9 +65,8 @@ import org.apache.dubbo.config.annotation.DubboReference;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.stereotype.Service;
 
-import java.time.Duration;
-import java.time.LocalDateTime;
-import java.time.ZoneOffset;
+import java.sql.Timestamp;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -73,6 +75,7 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import lombok.Data;
+import org.springframework.transaction.annotation.Transactional;
 
 
 /**
@@ -92,6 +95,7 @@ public class kwfTruckTraceService {
     private final KwtLogisticsOrderGoodsRepository kwtLogisticsOrderGoodsRepository;
     private final KwtLogisticsOrderRepository kwtLogisticsOrderRepository;
     private final KwtVehicleExceptionRepository kwtVehicleExceptionRepository;
+    private final KwtLogisticsOrderAddressRepository kwtLogisticsOrderAddressRepository;
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
     RemoteSystemService remoteSystemService;
 
@@ -306,7 +310,7 @@ public class kwfTruckTraceService {
         truckDto.setLongitude(vehicleReturnData.getLongitude());
         truckDto.setLatitude(vehicleReturnData.getLatitude());
         if (Objects.nonNull(vehicleReturnData.getTs())){
-            LocalDateTime ts = vehicleReturnData.getTs();
+            LocalDateTime ts = vehicleReturnData.getTs().toLocalDateTime();
             Date date = Date.from(ts.toInstant(ZoneOffset.UTC));
             truckDto.setLocationTime(DateUtils.format(date, DateUtils.DATE_TIME_PATTERN));
         }
@@ -374,7 +378,7 @@ public class kwfTruckTraceService {
         truckInfoVo.setGpsStatus(String.valueOf(vehicleReturn.getSpeed()));
         truckInfoVo.setLongitude(vehicleReturn.getLongitude());
         truckInfoVo.setLatitude(vehicleReturn.getLatitude());
-        truckInfoVo.setLocationTime(Objects.isNull(vehicleReturn.getTs())? "" : DateUtils.format(vehicleReturn.getTs(),DateUtils.DATE_TIME_PATTERN));
+        truckInfoVo.setLocationTime(Objects.isNull(vehicleReturn.getTs())? "" : DateUtils.format(vehicleReturn.getTs().toLocalDateTime(),DateUtils.DATE_TIME_PATTERN));
         KwtWaybillOrder order = kwtWaybillOrderRepository.findOneByTruckId(truckId);
         if (Objects.nonNull(order)){
             truckInfoVo.setTruckNo(order.getTruckNo());
@@ -544,9 +548,9 @@ public class kwfTruckTraceService {
 
         try {
             // 使用 Feign 调用查询实时位置
-            BaseResult<VehicleReturnData> result = vehicleTraceClient.queryRealTimeLocation(vehicleDataDTO);
-
-            if (result == null || result.getCode() != 0 || result.getData() == null) {
+            BaseIotResult<VehicleReturnData> result = vehicleTraceClient.queryRealTimeLocation(vehicleDataDTO);
+            log.info("查询实时轨迹返回数据: {}", JSON.toJSONString( result));
+            if (result == null || !Objects.equals(result.getCode(), "0") || result.getData() == null) {
                 log.warn("查询实时轨迹返回空数据, 车牌号: {}", truckId);
                 return null;
             }
@@ -562,7 +566,7 @@ public class kwfTruckTraceService {
         CurrentTaskTraceReqVo.CurrentTaskTrace currentTaskTrace = new CurrentTaskTraceReqVo.CurrentTaskTrace();
         currentTaskTrace.setLongitude(e.getLongitude());
         currentTaskTrace.setLatitude(e.getLatitude());
-        currentTaskTrace.setLocationTime(Objects.isNull(e.getTs()) ? "" : DateUtils.format(e.getTs(), DateUtils.DATE_TIME_PATTERN));
+        currentTaskTrace.setLocationTime(Objects.isNull(e.getTs()) ? "" : DateUtils.format(e.getTs().toLocalDateTime(), DateUtils.DATE_TIME_PATTERN));
         return currentTaskTrace;
     }
 
@@ -619,9 +623,9 @@ public class kwfTruckTraceService {
         
         try {
             // 使用 Feign 调用上报车辆轨迹
-            BaseResult<Void> result = vehicleTraceClient.saveVehicleData(req);
+            BaseIotResult<Void> result = vehicleTraceClient.saveVehicleData(req);
             
-            if (result == null || result.getCode() != 0) {
+            if (result == null || result.getCode() != "0") {
                 log.error("app上报车辆轨迹失败, 响应: {}", result);
                 throw new BusinessException("app上报车辆轨迹异常");
             }
@@ -686,7 +690,7 @@ public class kwfTruckTraceService {
         log.info("查询车辆下拉列表参数:{}", JSON.toJSONString( req));
         
         // 使用 Repository 查询车辆运单数据
-        List<KwtWaybillOrder> waybillOrders = kwtWaybillOrderRepository.selectTruckListForSelect(req.getTruckNo(),LoginUserHolder.getUserId());
+        List<KwtWaybillOrder> waybillOrders = kwtWaybillOrderRepository.selectTruckListForSelect(req.getTruckNo(),LoginUserHolder.getEntId());
         
         if (CollectionUtils.isEmpty(waybillOrders)) {
             return new ArrayList<>();
@@ -720,9 +724,9 @@ public class kwfTruckTraceService {
             try {
                 VehicleDataDTO vehicleDataDTO = new VehicleDataDTO();
                 vehicleDataDTO.setCarNo(truckNo);
-                BaseResult<VehicleReturnData> result = vehicleTraceClient.queryRealTimeLocation(vehicleDataDTO);
+                BaseIotResult<VehicleReturnData> result = vehicleTraceClient.queryRealTimeLocation(vehicleDataDTO);
 
-                if (result == null || result.getCode() != 0 || result.getData() == null) {
+                if (result == null || !Objects.equals(result.getCode(), "0") || result.getData() == null) {
                     // 无定位数据,设置为离线
                     truckLocationStatusMap.put(truckNo, 0);
                     return truckLocationStatusMap;
@@ -738,7 +742,7 @@ public class kwfTruckTraceService {
                 }
 
                 // 30分钟内为在线
-                if (vehicleData.getTs().isAfter(thirtyMinutesAgo)) {
+                if (vehicleData.getTs().toLocalDateTime().isAfter(thirtyMinutesAgo)) {
                     truckLocationStatusMap.put(truckNo, 1);
                 } else {
                     truckLocationStatusMap.put(truckNo, 0);
@@ -793,13 +797,13 @@ public class kwfTruckTraceService {
         
         // 前置条件:根据承运单位和托运单位筛选出符合条件的运单ID
         Set<Long> wayOrderIds = getWayOrderIds(req);
-        if (CollectionUtils.isEmpty(wayOrderIds) && (StringUtils.isNotBlank(req.getLogisticOrderNo()) || Objects.nonNull(req.getCarrierEntId()) || Objects.nonNull(req.getConsignEntId()))){
+        if (CollectionUtils.isEmpty(wayOrderIds) && (StringUtils.isNotBlank(req.getLogisticOrderNo()) || Objects.nonNull(req.getCarrierEntId()) || Objects.nonNull(req.getConsignEntId()))) {
             return PageDataResult.empty(req.getPageNum(), req.getPageSize());
         }
 
         // 使用 MyBatis-Plus 分页查询(如果有前置筛选条件,则添加运单ID的IN条件)
 
-        IPage<KwtWaybillOrder> page = kwtWaybillOrderRepository.queryMapVehicleListPage(allEnt,startDate, endDate, taskingStatus, wayOrderIds, req.getPageNum(),req.getPageSize() );
+        IPage<KwtWaybillOrder> page = kwtWaybillOrderRepository.queryMapVehicleListPage(allEnt,startDate, endDate, taskingStatus, wayOrderIds,req.getTrackNo(), req.getPageNum(),req.getPageSize() );
         
         List<KwtWaybillOrder> waybillOrders = page.getRecords();
         if (CollectionUtils.isEmpty(waybillOrders)) {
@@ -810,10 +814,24 @@ public class kwfTruckTraceService {
         List<Long> wOrderIds = waybillOrders.stream()
                 .map(KwtWaybillOrder::getId)
                 .collect(Collectors.toList());
-        
+        //获取车辆id
+        List<Long> truckIds = waybillOrders.stream()
+                .map(KwtWaybillOrder::getTruckId)
+                .distinct()
+                .collect(Collectors.toList());
+        //根据车辆id获取车辆信息
+        List<RTruckVo> truckVos = fleetService.findTruckByTruckIds(truckIds);
+        Map<Long, RTruckVo> truckIdMap = new HashMap<>();
+        if (CollectionUtils.isNotEmpty(truckVos)){
+            // 构建车辆ID到车辆信息的映射
+            truckIdMap = truckVos.stream()
+                    .filter(Objects::nonNull)
+                    .collect(Collectors.toMap(RTruckVo::getId, Function.identity(), (k1, k2) -> k1));
+        }
+
         // 查询子运单信息
         List<KwtWaybillOrderSubtask> subtasks = kwtWaybillOrderSubtaskRepository.queryByWOrderIds(wOrderIds);
-        final Map<Long, KwtWaybillOrderSubtask> wOrderIdSubtaskMap;
+         Map<Long, KwtWaybillOrderSubtask> wOrderIdSubtaskMap;
         if (CollectionUtils.isNotEmpty(subtasks)) {
             wOrderIdSubtaskMap = subtasks.stream()
                     .filter(subtask -> subtask.getWOrderId() != null)
@@ -833,13 +851,20 @@ public class kwfTruckTraceService {
 
         List<KwtLogisticsOrderUnit> logisticsOrderUnits = Lists.newArrayList();
         List<KwtLogisticsOrderGoods> goodsList = Lists.newArrayList();
+        List<KwtLogisticsOrderAddress> logisticsOrderAddress = Lists.newArrayList();
         if (CollectionUtils.isNotEmpty(lOrderIds)) {
             // 查询托运企业和承运企业
             logisticsOrderUnits = kwtLogisticsOrderUnitRepository.queryByLOrderIds(new ArrayList<>(lOrderIds));
             // 查询商品信息
             goodsList = kwtLogisticsOrderGoodsRepository.queryByLOrderIds(new ArrayList<>(lOrderIds));
+            //查询物流地址
+            logisticsOrderAddress = kwtLogisticsOrderAddressRepository.queryByLogOrderIds(new ArrayList<>(lOrderIds));
+        }
+        Map<String, KwtLogisticsOrderAddress> logisticsOrderAddressMap = Maps.newHashMap();
+        if (CollectionUtils.isNotEmpty(logisticsOrderAddress)){
+            logisticsOrderAddressMap = logisticsOrderAddress.stream()
+                    .collect(Collectors.toMap(x -> x.getLOrderId() + "_" + x.getAddressType(), Function.identity(), (k1, k2) -> k1));
         }
-
         
         // 按物流订单ID和单位类型分组
         Map<String, KwtLogisticsOrderUnit> unitMap =new HashMap<>();
@@ -888,12 +913,24 @@ public class kwfTruckTraceService {
                     })
                     .collect(Collectors.toList());
         }
-        
+        //查询字段
+        List<SysDictResDto> sysDictResDtos = remoteSystemService.queryDictByType(DictTypeEnum.ENERGY_TYPE.getType());
+        Map<String, SysDictResDto> energyTypeMap  = new HashMap<>();
+        if (CollectionUtils.isNotEmpty(sysDictResDtos)) {
+            // 构建字典映射
+            energyTypeMap = sysDictResDtos.stream()
+                    .collect(Collectors.toMap(SysDictResDto::getValue, Function.identity(), (k1, k2) -> k1));
+         }
+
         // 转换为 VO
         Map<String, KwtLogisticsOrderUnit> finalUnitMap = unitMap;
         Map<Long, KwtLogisticsOrderGoods> finalGoodsMap = goodsMap;
+        Map<Long, RTruckVo> finalTruckIdMap = truckIdMap;
+        Map<String, SysDictResDto> finalEnergyTypeMap = energyTypeMap;
+        Map<String, KwtLogisticsOrderAddress> finalLogisticsOrderAddressMap = logisticsOrderAddressMap;
         List<MapVehicleVo> result = filteredOrders.stream()
-                .map(order -> buildMapVehicleVo(order, wOrderIdSubtaskMap, finalUnitMap, finalGoodsMap, locationInfoMap, exceptionCountMap))
+                .map(order -> buildMapVehicleVo(order, wOrderIdSubtaskMap, finalUnitMap, finalGoodsMap,
+                        locationInfoMap, exceptionCountMap, finalTruckIdMap, finalEnergyTypeMap, finalLogisticsOrderAddressMap))
                 .collect(Collectors.toList());
         
         // 根据排序类型进行排序
@@ -1034,15 +1071,15 @@ public class kwfTruckTraceService {
             try {
                 VehicleDataDTO vehicleDataDTO = new VehicleDataDTO();
                 vehicleDataDTO.setCarNo(truckNo);
-                BaseResult<VehicleReturnData> result = vehicleTraceClient.queryRealTimeLocation(vehicleDataDTO);
-                
+                BaseIotResult<VehicleReturnData> result = vehicleTraceClient.queryRealTimeLocation(vehicleDataDTO);
+                log.info("查询车辆数据中台响应定位信息:{}", JSON.toJSONString( result));
                 VehicleLocationInfo locationInfo = new VehicleLocationInfo();
                 
-                if (result != null && result.getCode() == 0 && result.getData() != null) {
+                if (result != null && StringUtils.equals(result.getCode(), "0") && result.getData() != null) {
                     VehicleReturnData vehicleData = result.getData();
                     
                     // 判断定位状态
-                    if (vehicleData.getTs() != null && vehicleData.getTs().isAfter(thirtyMinutesAgo)) {
+                    if (vehicleData.getTs() != null && vehicleData.getTs().toLocalDateTime().isAfter(thirtyMinutesAgo)) {
                         locationInfo.setLocationStatus(1);
                     } else {
                         locationInfo.setLocationStatus(0);
@@ -1051,7 +1088,7 @@ public class kwfTruckTraceService {
                     locationInfo.setLongitude(vehicleData.getLongitude());
                     locationInfo.setLatitude(vehicleData.getLatitude());
                     if (vehicleData.getTs() != null) {
-                        locationInfo.setLocationTime(vehicleData.getTs().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                        locationInfo.setLocationTime(vehicleData.getTs().toLocalDateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                     }
                     locationInfo.setStatus(vehicleData.getStatus());
                 } else {
@@ -1091,10 +1128,10 @@ public class kwfTruckTraceService {
                 vehicleDataDTO.setWOrderNo(wOrderNo);
                 
                 // 调用Feign接口查询轨迹列表
-                BaseResult<List<com.sckw.transport.api.model.dto.VehicleReturnData>> result = 
+                BaseIotResult<List<VehicleReturnData>> result =
                         vehicleTraceClient.queryVehicleDataList(vehicleDataDTO);
-                
-                if (result != null && result.getCode() == 0 && result.getData() != null) {
+                log.info("查询车辆数据中台响应轨迹数据:{}", JSON.toJSONString( result));
+                if (result != null && StringUtils.equals(result.getCode(), "0") && result.getData() != null) {
                     List<com.sckw.transport.api.model.dto.VehicleReturnData> traceDataList = result.getData();
                     
                     // 统计alarmCode不为null且不为0的记录数量(表示有异常报警)
@@ -1125,12 +1162,16 @@ public class kwfTruckTraceService {
                                            Map<String, KwtLogisticsOrderUnit> unitMap,
                                            Map<Long, KwtLogisticsOrderGoods> goodsMap,
                                            Map<String, VehicleLocationInfo> locationInfoMap,
-                                           Map<String, Integer> exceptionCountMap) {
+                                           Map<String, Integer> exceptionCountMap,
+                                           Map<Long, RTruckVo> truckIdMap,
+                                           Map<String, SysDictResDto> energyTypeMap,
+                                           Map<String, KwtLogisticsOrderAddress> logisticsOrderAddressMap) {
         MapVehicleVo vo = new MapVehicleVo();
         
         // 车辆和司机信息
         vo.setTruckNo(order.getTruckNo());
         vo.setTruckId(order.getTruckId());
+        vo.setDriverId(order.getDriverId());
         vo.setDriverName(order.getDriverName());
         vo.setDriverPhone(order.getDriverPhone());
         vo.setWayOrderId(order.getId());
@@ -1203,7 +1244,16 @@ public class kwfTruckTraceService {
         // 从异常表查询该运单的异常数量
         Integer exceptionCount = exceptionCountMap.getOrDefault(order.getWOrderNo(), 0);
         vo.setExceptionCount(exceptionCount);
-        
+        Long logisticId = Optional.ofNullable(subtask).map(KwtWaybillOrderSubtask::getLOrderId)
+                .orElse(null);
+        KwtLogisticsOrderAddress loadAdd = logisticsOrderAddressMap.getOrDefault(logisticId + "_" + AddressTypeEnum.SHIPMENT.getCode(), new KwtLogisticsOrderAddress());
+        vo.setLoadAddress(loadAdd.getDetailAddress());
+        KwtLogisticsOrderAddress unLoadAdd = logisticsOrderAddressMap.getOrDefault(logisticId + "_" + AddressTypeEnum.TAKE.getCode(), new KwtLogisticsOrderAddress());
+        vo.setUnloadAddress(unLoadAdd.getDetailAddress());
+        RTruckVo truckVo = truckIdMap.getOrDefault(order.getTruckId(), new RTruckVo());
+        vo.setEnergyType(Objects.isNull(truckVo.getEnergyType())? "":String.valueOf(truckVo.getEnergyType()));
+        SysDictResDto dictResDto = energyTypeMap.getOrDefault(String.valueOf(truckVo.getEnergyType()), new SysDictResDto());
+        vo.setEnergyTypeDesc(dictResDto.getLabel());
         return vo;
     }
     
@@ -1242,6 +1292,7 @@ public class kwfTruckTraceService {
      * 生成车辆轨迹数据
      * @param req 生成轨迹请求
      */
+    @Transactional(rollbackFor = Exception.class)
     public void generateTrace(GenerateTraceReq req) {
         log.info("生成车辆轨迹参数:{}", JSON.toJSONString(req));
         
@@ -1273,8 +1324,9 @@ public class kwfTruckTraceService {
 
         try {
             // 调用数据中台保存轨迹数据
-            BaseResult<Void> result = vehicleTraceClient.saveVehicleData(vehiclesTrajectoryReq);
-            if (result.getCode() != 0) {
+            log.info("调用数据中台保存车辆轨迹数据:{}", JSON.toJSONString(vehiclesTrajectoryReq));
+            BaseIotResult<Void> result = vehicleTraceClient.saveVehicleData(vehiclesTrajectoryReq);
+            if (!Objects.equals(result.getCode(), "0")) {
                 log.error("保存车辆轨迹数据失败:{}", result.getMessage());
                 throw new BusinessException("生成轨迹失败:" + result.getMessage());
             }
@@ -1322,7 +1374,12 @@ public class kwfTruckTraceService {
     @NotNull
     private static VehiclesTrajectoryReq getVehiclesTrajectoryReq(GenerateTraceReq req, KwtWaybillOrder order, String longitude, String latitude, KwtLogisticsOrder logisticsOrder, RFleetVo fleetByTruckId) {
         VehiclesTrajectoryReq vehiclesTrajectoryReq = new VehiclesTrajectoryReq();
-        vehiclesTrajectoryReq.setTs(req.getDate());
+        String dateStr = req.getDate();
+        // 输入的日期字符串
+        LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        LocalDateTime dateTime = date.atTime(LocalTime.now());
+        Timestamp timestamp = Timestamp.valueOf(dateTime);
+        vehiclesTrajectoryReq.setTs(timestamp);
         vehiclesTrajectoryReq.setMobile(order.getDriverPhone());
         vehiclesTrajectoryReq.setTruckNo(req.getTruckNo());
         vehiclesTrajectoryReq.setLongitude(longitude);
@@ -1343,7 +1400,7 @@ public class kwfTruckTraceService {
         VehiclesTrajectoryReq.VehicleDataVO vehicleDataVO = new VehiclesTrajectoryReq.VehicleDataVO();
         vehicleDataVO.setCarNo(req.getTruckNo());
         if (fleetByTruckId != null){
-            vehicleDataVO.setFleetId(fleetByTruckId.getId().toString());
+            vehicleDataVO.setFleetId(Objects.nonNull(fleetByTruckId.getId())?fleetByTruckId.getId().toString():"");
             vehicleDataVO.setFleetName(fleetByTruckId.getName());
         }
         vehiclesTrajectoryReq.setVehicleDataVO(vehicleDataVO);

+ 1 - 1
sckw-modules/sckw-transport/src/main/resources/bootstrap.yml

@@ -19,7 +19,7 @@ mybatis-plus:
 logging:
   level:
     root: info
-    com.sckw.payment: debug
+    com.sckw.transport: debug
 
 # SpringDoc OpenAPI 配置
 springdoc: