Browse Source

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

donglang 2 months ago
parent
commit
dcab46ab7f
24 changed files with 1021 additions and 227 deletions
  1. 2 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java
  2. 1 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictTypeEnum.java
  3. 4 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/exception/GlobalSystemExceptionHandler.java
  4. 3 1
      sckw-common/sckw-common-remote/src/main/java/com/sckw/remote/annotation/SckwRemoteApplication.java
  5. 6 0
      sckw-gateway/pom.xml
  6. 55 0
      sckw-gateway/src/main/java/com/sckw/gateway/config/GatewayExceptionConfig.java
  7. 119 0
      sckw-gateway/src/main/java/com/sckw/gateway/exception/GatewayGlobalExceptionHandler.java
  8. 89 0
      sckw-gateway/src/main/java/com/sckw/gateway/pojo/HttpResult.java
  9. 198 0
      sckw-gateway/src/main/java/com/sckw/gateway/pojo/HttpStatus.java
  10. 51 0
      sckw-gateway/src/main/java/com/sckw/gateway/utils/GatewayExceptionUtil.java
  11. 15 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcContractSaleController.java
  12. 3 2
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/ContractDetailReq.java
  13. 1 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/ContractTradeReqVo.java
  14. 52 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/QueryTradeReq.java
  15. 101 101
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/ContractDetailResp.java
  16. 27 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeRepository.java
  17. 13 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeUnitRepository.java
  18. 1 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeGoodsService.java
  19. 7 6
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractLogisticsService.java
  20. 219 89
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractTradeService.java
  21. 5 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/TradeOrderManageController.java
  22. 5 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/QueryTradeOrderReq.java
  23. 1 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/QueryTradeOrderResp.java
  24. 43 26
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/TradeOrderManageService.java

+ 2 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java

@@ -95,6 +95,8 @@ public enum DictEnum {
     CONSIGNMENT_WAY_2("consignment_way", "2", "供应方托运"),
     SETTLEMENT_WAY_1("settlement_way", "1", "线上结算"),
     SETTLEMENT_WAY_2("settlement_way", "2", "线下结算"),
+    LOAD_UNLOAD_WAY_1("load_unload_way", "1", "按装货量"),
+    LOAD_UNLOAD_WAY_2("load_unload_way", "2", "按卸货量"),
     ;
 
     private final String type;

+ 1 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictTypeEnum.java

@@ -52,6 +52,7 @@ public enum DictTypeEnum {
     ORDER_SOURCE("order_source", "订单来源"),
     CONSIGNMENT_WAY("consignment_way", "托运方式"),
     SETTLEMENT_WAY(" settlement_way", "结算方式"),
+    LOAD_UNLOAD_WAY("load_unLoad_way", "装卸方式"),
     ;
 
     private final String type;

+ 4 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/exception/GlobalSystemExceptionHandler.java

@@ -33,6 +33,10 @@ public class GlobalSystemExceptionHandler {
     @ResponseBody
     public HttpResult handlerRuntimeException(RuntimeException e) {
         log.error("业务异常:", e);
+        // 处理Dubbo服务不可用异常
+        if (e.getMessage() != null && e.getMessage().contains("No provider available")) {
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, "服务暂时不可用,请稍后重试");
+        }
         return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
     }
 

+ 3 - 1
sckw-common/sckw-common-remote/src/main/java/com/sckw/remote/annotation/SckwRemoteApplication.java

@@ -11,6 +11,8 @@ import java.lang.annotation.*;
 @Inherited
 @EnableDubbo
 @EnableFeignClients({"com.sckw.*.api.feign"})
-@ComponentScan(basePackages = {"com.sckw.file.config","com.sckw.payment.config","com.sckw.fleet.config","com.sckw" + ".remote.filter","com.sckw.*.controller", "com.sckw.*.service","com.sckw.*.repository", "com.sckw.*.dubbo", "com.sckw.*.model","com.sckw.transport.*"})
+@ComponentScan(basePackages = {"com.sckw.file.config","com.sckw.payment.config","com.sckw.fleet.config","com.sckw" +
+        ".remote.filter","com.sckw.*.controller", "com.sckw.*.service","com.sckw.*.repository", "com.sckw.*.dubbo",
+        "com.sckw.*.model","com.sckw.transport.*","com.sckw.*.serivce"})
 public @interface SckwRemoteApplication {
 }

+ 6 - 0
sckw-gateway/pom.xml

@@ -86,6 +86,12 @@
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba.fastjson2</groupId>
+            <artifactId>fastjson2</artifactId>
+            <version>2.0.57</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>

+ 55 - 0
sckw-gateway/src/main/java/com/sckw/gateway/config/GatewayExceptionConfig.java

@@ -0,0 +1,55 @@
+package com.sckw.gateway.config;
+
+import com.sckw.gateway.exception.GatewayGlobalExceptionHandler;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.boot.autoconfigure.web.ServerProperties;
+import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.http.codec.ServerCodecConfigurer;
+import org.springframework.web.reactive.result.view.ViewResolver;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @desc: 网关异常配置
+ * @date: 2025-11-10
+ */
+@Configuration
+public class GatewayExceptionConfig {
+
+    private final ServerProperties serverProperties;
+
+    private final ApplicationContext applicationContext;
+
+    private final List<ViewResolver> viewResolvers;
+
+    private final ServerCodecConfigurer serverCodecConfigurer;
+
+    public GatewayExceptionConfig(ServerProperties serverProperties,
+                                  ObjectProvider<List<ViewResolver>> viewResolversProvider,
+                                  ServerCodecConfigurer serverCodecConfigurer,
+                                  ApplicationContext applicationContext) {
+        this.serverProperties = serverProperties;
+        this.applicationContext = applicationContext;
+        this.viewResolvers = viewResolversProvider.getIfAvailable(Collections::emptyList);
+        this.serverCodecConfigurer = serverCodecConfigurer;
+    }
+
+    /**
+     * 自定义异常处理
+     */
+    @Bean
+    @Order(Ordered.HIGHEST_PRECEDENCE)
+    public ErrorWebExceptionHandler errorWebExceptionHandler() {
+        GatewayGlobalExceptionHandler exceptionHandler = new GatewayGlobalExceptionHandler();
+        exceptionHandler.setMessageWriters(this.serverCodecConfigurer.getWriters());
+        exceptionHandler.setMessageReaders(this.serverCodecConfigurer.getReaders());
+        exceptionHandler.setViewResolvers(this.viewResolvers);
+        return exceptionHandler;
+    }
+}

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

@@ -0,0 +1,119 @@
+package com.sckw.gateway.exception;
+
+import com.sckw.gateway.pojo.HttpResult;
+import com.sckw.gateway.utils.GatewayExceptionUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.codec.HttpMessageReader;
+import org.springframework.http.codec.HttpMessageWriter;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.util.Assert;
+import org.springframework.web.reactive.function.BodyInserters;
+import org.springframework.web.reactive.function.server.ServerRequest;
+import org.springframework.web.reactive.function.server.ServerResponse;
+import org.springframework.web.reactive.result.view.ViewResolver;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @desc: 网关全局异常处理器
+ * @date: 2025-11-10
+ */
+@Slf4j
+public class GatewayGlobalExceptionHandler implements ErrorWebExceptionHandler {
+
+    /**
+     * MessageReader
+     */
+    private List<HttpMessageReader<?>> messageReaders = Collections.emptyList();
+
+    /**
+     * MessageWriter
+     */
+    private List<HttpMessageWriter<?>> messageWriters = Collections.emptyList();
+
+    /**
+     * ViewResolvers
+     */
+    private List<ViewResolver> viewResolvers = Collections.emptyList();
+
+    /**
+     * 存储处理异常后的信息
+     */
+    private ThreadLocal<Map<String, Object>> exceptionHandlerResult = new ThreadLocal<>();
+
+    /**
+     * 参考AbstractErrorWebExceptionHandler
+     */
+    public void setMessageReaders(List<HttpMessageReader<?>> messageReaders) {
+        Assert.notNull(messageReaders, "'messageReaders' must not be null");
+        this.messageReaders = messageReaders;
+    }
+
+    /**
+     * 参考AbstractErrorWebExceptionHandler
+     */
+    public void setViewResolvers(List<ViewResolver> viewResolvers) {
+        this.viewResolvers = viewResolvers;
+    }
+
+    /**
+     * 参考AbstractErrorWebExceptionHandler
+     */
+    public void setMessageWriters(List<HttpMessageWriter<?>> messageWriters) {
+        Assert.notNull(messageWriters, "'messageWriters' must not be null");
+        this.messageWriters = messageWriters;
+    }
+
+    @Override
+    public Mono<Void> handle(ServerWebExchange exchange, Throwable throwable) {
+        // 按照异常类型进行处理
+        ServerHttpRequest request = exchange.getRequest();
+        ServerHttpResponse response = exchange.getResponse();
+        String path = request.getPath().value();
+        String method = request.getMethod().name();
+        // 使用工具类构建统一的异常响应
+        HttpResult result = GatewayExceptionUtil.buildServiceUnavailableResponse(request, throwable);
+        response.setStatusCode(HttpStatus.OK);
+        response.getHeaders().setContentType(MediaType.APPLICATION_JSON);
+
+        // 记录异常日志
+        log.warn("网关统一异常处理: 路径={}, 方法={}, 响应={}", path, method, result);
+
+        // 返回统一的错误响应
+        return response.writeWith(Mono.fromSupplier(() -> {
+            try {
+                byte[] bytes = com.alibaba.fastjson2.JSON.toJSONBytes(result);
+                return response.bufferFactory().wrap(bytes);
+            } catch (Exception e) {
+                log.error("网关异常响应序列化失败", e);
+                return response.bufferFactory().wrap("{\"code\":60500,\"msg\":\"系统异常\",\"data\":null}".getBytes());
+            }
+        }));
+    }
+
+    /**
+     * 参考AbstractErrorWebExceptionHandler
+     */
+    private Mono<ServerResponse> renderErrorResponse(ServerRequest request) {
+        Map<String, Object> result = exceptionHandlerResult.get();
+        return ServerResponse.status(HttpStatus.OK)
+                .contentType(MediaType.APPLICATION_JSON)
+                .body(BodyInserters.fromValue(result));
+    }
+
+    /**
+     * 参考AbstractErrorWebExceptionHandler
+     */
+    @SuppressWarnings("unchecked")
+    private Map<String, Object> getErrorAttributes(ServerRequest request) {
+        return exceptionHandlerResult.get();
+    }
+}

+ 89 - 0
sckw-gateway/src/main/java/com/sckw/gateway/pojo/HttpResult.java

@@ -0,0 +1,89 @@
+package com.sckw.gateway.pojo;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * HTTP结果封装
+ * @author zk
+ * @date Oct 29, 2018
+ */
+@Data
+public class HttpResult implements Serializable {
+
+    private int code = HttpStatus.SUCCESS_CODE;
+    private String msg = HttpStatus.SUCCESS_MESSAGE;
+    private Object data;
+
+    public static HttpResult error() {
+        return error(HttpStatus.GLOBAL_EXCEPTION_CODE, HttpStatus.GLOBAL_EXCEPTION_MESSAGE);
+    }
+
+    public static HttpResult error(String msg) {
+        return error(HttpStatus.GLOBAL_EXCEPTION_CODE, msg);
+    }
+
+    public static HttpResult error(int code, String msg) {
+        HttpResult r = new HttpResult();
+        r.setCode(code);
+        r.setMsg(msg);
+        return r;
+    }
+
+    public static HttpResult error(String msg, Object data) {
+        HttpResult r = new HttpResult();
+        r.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
+        r.setMsg(msg);
+        r.setData(data);
+        return r;
+    }
+
+    public static HttpResult error(int code, String msg, Object data) {
+        HttpResult r = new HttpResult();
+        r.setCode(code);
+        r.setMsg(msg);
+        r.setData(data);
+        return r;
+    }
+
+
+    public static HttpResult ok() {
+        return new HttpResult();
+    }
+
+    public static HttpResult ok(String msg) {
+        HttpResult r = new HttpResult();
+        r.setMsg(msg);
+        return r;
+    }
+
+    public static HttpResult ok(Object data) {
+        HttpResult r = new HttpResult();
+        r.setData(data);
+        return r;
+    }
+
+    public static HttpResult ok(int code, String msg) {
+        HttpResult r = new HttpResult();
+        r.setCode(code);
+        r.setMsg(msg);
+        return r;
+    }
+
+    public static HttpResult ok(String msg, Object data) {
+        HttpResult r = new HttpResult();
+        r.setMsg(msg);
+        r.setData(data);
+        return r;
+    }
+
+    public static HttpResult ok(int code, String msg, Object data) {
+        HttpResult r = new HttpResult();
+        r.setCode(code);
+        r.setMsg(msg);
+        r.setData(data);
+        return r;
+    }
+}

+ 198 - 0
sckw-gateway/src/main/java/com/sckw/gateway/pojo/HttpStatus.java

@@ -0,0 +1,198 @@
+package com.sckw.gateway.pojo;
+
+/**
+ * @Description 自定义接口请求状态码(和http请求码无关)
+ * @Author zk
+ * @Date 2019/5/13 0013
+ */
+public class HttpStatus {
+
+    /**成功状态码*/
+    public static final int SUCCESS_CODE = 60200;
+
+    /**成功提示信息*/
+    public static final String SUCCESS_MESSAGE = "success";
+
+    /**未登录状态码*/
+    public static final int UN_LOGIN_CODE = 60300;
+    /**未登录提示信息*/
+    public static final String UN_LOGIN_MESSAGE = "您尚未登录,请先登录!";
+
+    /**访问权限状态码*/
+    public static final int AUTHORITY_NO_CODE = 60403;
+    public static final String ACCESS_FIAL = "暂无该功能权限!";
+
+    /**全局异常状态码*/
+    public static final int GLOBAL_EXCEPTION_CODE = 60500;
+
+    /**完结贸易订单失败异常码*/
+    public static final int COMPLETE_TORDER_FAIL_CODE = 60666;
+
+    /** 商品上架失败异常码*/
+    public static final int GOODS_PUT_ON_SHELVES_FAIL_CODE = 60667;
+
+    /**全局异常提示信息*/
+    public static final String GLOBAL_EXCEPTION_MESSAGE = "攻城狮正在拼命优化,请您稍候再试!";
+
+    /**参数缺失状态码*/
+    public static final int PARAMETERS_MISSING_CODE = 60600;
+    public static final String ID_MISSING = "id不能为空!";
+    public static final String ACCOUNT_MISSING = "用户账号必填!";
+    public static final String ACCOUNT_FREEZE = "用户账号不能重复冻结!";
+    public static final String ACCOUNT_UNFREEZE = "用户账号不能重复解冻!";
+    public static final String PWD_MISSING = "密码不能为空!";
+    public static final String TOKEN_MISSING = "token不能为空!";
+    public static final String TOKEN_ERROR = "非法token!";
+    public static final String CAPCHA_ERROR = "验证码无效!";
+    public static final String ADDRESS_EXISTS = "地点已存在,不可重复!";
+    public static final String INVALID_REQUEST = "无效的接口请求!";
+
+    /**其他自定义状态码*/
+    public static final int CODE_60603 = 60603;
+    public static final String ENTCERTIFICATES_INVAILD = "您的企业资质已失效,暂没有权限访问,请尽快更新资质";
+    public static final String ENTCERTIFICATES_NOT_REGISTER = "您未做企业资质认证,暂没有权限访问";
+    public static final String ENTCERTIFICATES_NOT_PASS = "您的企业资质认证还在审核中,暂没有权限访问";
+
+
+
+    public static final int CODE_60604 = 60604;
+    public static final int CODE_60605 = 60605;
+    public static final int CODE_60606 = 60606;
+    public static final int CODE_60607 = 60607;
+    public static final int CODE_60608 = 60608;
+    public static final int CODE_60609 = 60609;
+    /**sentinel异常code定义*/
+    public static final int CODE_60701 = 60701;
+    public static final int CODE_60801 = 60801;
+    public static final int CODE_60901 = 60901;
+    public static final int CODE_601001 = 601001;
+    public static final int CODE_601101 = 601101;
+    public static final int CODE_601201 = 601201;
+
+    public static final String FLOW_EXCEPTION_ERROR_MESSAGE = "您的访问过于频繁,请稍后重试";
+    public static final String DEGRADE_EXCEPTION_ERROR_MESSAGE = "调用服务响应异常,请稍后重试";
+    public static final String PARAM_FLOW_EXCEPTION_ERROR_MESSAGE = "您对热点参数访问过于频繁,请稍后重试";
+    public static final String SYSTEM_BLOCK_EXCEPTION_ERROR_MESSAGE = "已触碰系统的红线规则,请检查访问参数";
+    public static final String AUTHORITY_EXCEPTION_ERROR_MESSAGE = "授权规则检测不同,请检查访问参数";
+    public static final String OTHER_EXCEPTION_ERROR_MESSAGE = "非法访问,请稍后重试";
+
+    /**版本号和接口版本不对称状态码*/
+    public static final int VERSION_NOT_NEWEST_CODE = 60700;
+    /**版本号和接口版本不对称提示信息*/
+    public static final String VERSION_NOT_NEWEST_MESSAGE = "当前版本较低,请更新升级后再试!";
+
+
+    /**参数格式不正确状态码*/
+    public static final int PARAMETERS_PATTERN_ERROR_CODE = 60800;
+    /**参数格式不正确提示信息*/
+    public static final String PARAMETERS_PATTERN_ERROR_MESSAGE = "参数格式不正确";
+    public static final String CONTACTS_ERROR = "联系人格式不正确";
+    public static final String CONTACTS_PHONE_ERROR = "联系人手机号格式不正确";
+    public static final String LEGAL_NAME_ERROR = "法人格式不正确";
+    public static final String LEGAL_PHONE_ERROR = "法人手机号格式不正确";
+    public static final String LEGAL_ID_CARD_ERROR = "法人身份证号格式不正确";
+    public static final String ENT_CODE_ERROR = "营业执照编号格式不正确";
+
+    /**账号在别处登录状态码*/
+    public static final int ACCOUNT_OTHER_LOGIN_CODE = 60900;
+    /**账号在别处登录提示信息*/
+    public static final String ACCOUNT_OTHER_LOGIN_MESSAGE = "您的账号已在其他设备登录,如非本人操作,请及时修改密码!";
+
+
+    /**token无效状态码*/
+    public static final int TOKEN_INVALID_CODE = 60901;
+    /**token无效提示信息*/
+    public static final String TOKEN_INVALID_MESSAGE = "由于您一段时间未操作,为了您的账户安全,请重新登录!";
+
+    /**请求超过次数*/
+    public static final int FREQUENCY_OUT = 60902;
+    /**请求超过次数提示信息*/
+    public static final String FREQUENCY_OUT_MESSAGE = "您的操作过于频繁,请刷新浏览器或稍候重试!";
+
+    /**审核状态状态码*/
+    public static final int ACCOUNT_AUDIT_CODE = 60903;
+    /**审核状态状提示信息*/
+    public static final String ACCOUNT_AUDIT_MESSAGE = "您所属企业企业资质审批未通过,请核实确认!";
+
+    /**微信账号未绑定态码*/
+    public static final int WECHAR_BIND_CODE = 60904;
+    /**微信账号未绑定提示信息*/
+    public static final String WECHAR_BIND_MESSAGE = "您的微信还未绑定危品汇账号!";
+
+    /**
+     * 自定义状态码,该状态码没有特殊含义,只是提供一个状态标识(目前提供9个,可自行扩展)
+     * 现作为校验失败的一类异常码
+     */
+    public static final int CODE_10301 = 10301;
+
+    /**数据库的操作失败*/
+    public static final int CRUD_FAIL_CODE = 60601;
+    public static final String UPDATE_FAIL = "更新失败";
+    public static final String INSERT_FAIL = "新增失败";
+    public static final String DELETE_FAIL = "删除失败";
+
+    /**未查询到相关信息*/
+    public static final int QUERY_FAIL_CODE = 60602;
+    public static final String ACCOUNT_NOT_EXISTS = "用户信息不存在或已失效";
+    public static final String ENT_NOT_EXISTS = "企业信息不存在或已失效";
+    public static final String DEPT_NOT_EXISTS = "机构信息不存在或已失效";
+    public static final String ENTCERTIFICATES_NOT_EXISTS = "未查询到企业资质信息";
+    public static final String ROLE_NOT_EXISTS = "未查询到关联的角色";
+    public static final String USER_DEPT_NOT_EXISTS = "未查询到用户-机构关联信息";
+    public static final String MENU_NOT_EXISTS = "未查询到菜单信息";
+    public static final String PARENT_MENU_NOT_EXISTS = "未查询到父菜单信息";
+    public static final String PARENT_UNIT_NOT_EXISTS = "未查询到父级单位信息";
+    public static final String COOPERATE_ATTRIBUTE_NOT_EXISTS = "未查询到已有的合作属性";
+    public static final String COOPERATE_NOT_EXISTS = "未查询到合作记录或已失效";
+    public static final String COOPERATE_CANCEL_EXISTS = "未查询到可撤销的记录";
+    public static final String ADDRESS_NOT_EXISTS = "未查询到地址记录或已失效";
+    public static final String CONTRACT_NOT_EXISTS = "未查询到合同或已失效";
+    public static final String BANNER_NOT_EXISTS = "未查询到banner数据或已失效";
+
+    /**自定义提示消息*/
+    public static final String PASSWD_ERROR = "密码不正确";
+    public static final String PASSWD_REPEAT = "新密码与旧密码不能一样!";
+    public static final String CAPTCHA_ERROR = "验证码输入错误";
+    public static final String MSG_001 = "密码重置成功";
+    public static final String MSG_002 = "密码修改成功";
+    public static final String MSG_003 = "新增成功";
+    public static final String MSG_004 = "审批完成";
+    public static final String MSG_005 = "更新成功";
+    public static final String MSG_006 = "当前系统不允许绑定多个岗位!";
+    public static final String MSG_007 = "注册成功!";
+    public static final String MSG_008 = "删除成功!";
+    public static final String MSG_009 = "认证提交成功!";
+    public static final String MSG_010 = "绑定成功!";
+    public static final String MSG_011 = "当前企业还存在员工数据,不能删除!";
+    public static final String MSG_012 = "只能解除状态为合作中的记录!";
+    public static final String MSG_013 = "只能删除状态为已解除的记录!";
+    public static final String MSG_014 = "导出失败";
+    public static final String MSG_015 = "与对方企业存在待审核的合作关系,请撤销或者完成审核再申请!";
+    public static final String MSG_016 = "与对方企业已存在相同属性的合作关系!";
+    public static final String MSG_017 = "发起申请成功!";
+    public static final String MSG_018 = "撤销成功!";
+    public static final String MSG_019 = "只能操作正在审核中的记录!";
+    public static final String MSG_020 = "当前机构还存在员工数据,不能删除!";
+    public static final String MSG_021 = "不能重复设置默认地址!";
+    public static final String MSG_022 = "只能对草稿进行删除!";
+    public static final String MSG_023 = "解除成功!";
+    public static final String MSG_024 = "名称不能重复!";
+    public static final String MSG_025 = "禁止删除本人信息!";
+    public static final String MSG_026 = "资质认证审核中,请等待审核后再提交!";
+    public static final String MSG_027 = "一级机构不能删除!";
+    public static final String MSG_028 = "合同未签约,不能手动完结!";
+    public static final String MSG_029 = "合同编号超长!";
+    public static final String MSG_030 = "合同名称超长!";
+    public static final String MSG_031 = "您与所选企业存在未完结销售订单,当前无法删除!";
+    public static final String MSG_032 = "您与所选企业存在未完结托运承运订单,当前无法删除!";
+    public static final String MSG_033 = "当前企业资质在审核中,无法删除!";
+    public static final String MSG_034 = "您与所选企业存在未完结对账单,当前无法删除!";
+    public static final String MSG_035 = "地址信息已存在";
+
+    public static final String ENT_EXISTS = "企业已存在,不可重复!";
+    public static final String ACCOUNT_EXISTS = "用户账号已存在!";
+    public static final String DICTTYPE_EXISTS = "字典类型已存在,不可重复!";
+    public static final String DICT_EXISTS = "字典键值已存在,不可重复!";
+    public static final String PL34 = "3PL和4PL不能同时注册!";
+
+}

+ 51 - 0
sckw-gateway/src/main/java/com/sckw/gateway/utils/GatewayExceptionUtil.java

@@ -0,0 +1,51 @@
+package com.sckw.gateway.utils;
+
+import com.sckw.gateway.pojo.HttpResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+
+/**
+ * @desc: 网关异常处理工具类
+ * @date: 2025-11-10
+ */
+@Slf4j
+public class GatewayExceptionUtil {
+
+    /**
+     * 构建服务不可用响应
+     */
+    public static HttpResult buildServiceUnavailableResponse(ServerHttpRequest request, Throwable throwable) {
+        String path = request.getPath().value();
+        String method = request.getMethod().name();
+
+        log.error("网关服务不可用异常: 路径={}, 方法={}, 异常信息={}", path, method, throwable.getMessage());
+
+        // 根据异常类型返回不同的错误信息
+        if (throwable instanceof org.springframework.cloud.gateway.support.NotFoundException) {
+            return HttpResult.error(60500, "目标服务不存在或未启动");
+        } else if (throwable instanceof org.springframework.cloud.gateway.support.TimeoutException) {
+            return HttpResult.error(60500, "服务响应超时,请稍后重试");
+        } else if (throwable instanceof org.springframework.web.server.ResponseStatusException) {
+            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, "服务暂时不可用,请稍后重试");
+    }
+
+    /**
+     * 构建网关内部错误响应
+     */
+    public static HttpResult buildInternalErrorResponse(ServerHttpRequest request, Throwable throwable) {
+        String path = request.getPath().value();
+        String method = request.getMethod().name();
+
+        log.error("网关内部错误: 路径={}, 方法={}, 异常信息={}", path, method, throwable.getMessage(), throwable);
+
+        return HttpResult.error(60500, "网关内部错误,请联系管理员");
+    }
+}

+ 15 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcContractSaleController.java

@@ -49,6 +49,21 @@ public class KwcContractSaleController {
         return BaseResult.success(kwcContractTradeService.queryListByPage(reqVo));
     }
 
+    /**
+     * @desc: 分页查询
+     * @param: reqVo 分页入参
+     * @author: sky
+     * @date 2023/7/17  如果上面不能用可以用这个
+     * @return HttpResult
+     */
+    @PostMapping("/queryTradeListByPage")
+    @Operation(summary = "分页查询贸易合同")
+    public BaseResult<PageDataResult<QueryListResVo>> queryTradeListByPage(@RequestBody QueryTradeReq req) {
+        //reqVo.setEntType(EntTypeEnum.SUPPLIER.getCode());
+        return BaseResult.success(kwcContractTradeService.queryTradeListByPage(req));
+    }
+
+
     /**
      * @param reqVo 新增入参
      * @return HttpResult

+ 3 - 2
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/ContractDetailReq.java

@@ -22,11 +22,12 @@ public class ContractDetailReq implements Serializable {
      * 合同编号
      */
     @Schema(description = "合同编号")
-    @NotBlank(message = "合同编号不能为空")
+
     private String contractCode;
     /**
      * 物流合同id
      */
     @Schema(description = "物流合同id")
-    private Long contractId;
+    @NotBlank(message = "合同id不能为空")
+    private String contractId;
 }

+ 1 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/ContractTradeReqVo.java

@@ -39,7 +39,7 @@ public class ContractTradeReqVo implements Serializable {
      * 合同文件
      */
 
-    @NotBlank(message = "合同文件不能为空")
+    //@NotBlank(message = "合同文件不能为空")
     private String contractFile;
 
     /**

+ 52 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/QueryTradeReq.java

@@ -0,0 +1,52 @@
+package com.sckw.contract.model.vo.req;
+
+import com.sckw.core.web.request.PageReq;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 贸易订单分页查询
+ * @create :2025-11-10 11:14:00
+ */
+@Data
+public class QueryTradeReq extends PageReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 2211511377945341272L;
+    /**
+     * 合同编号
+     */
+    @Schema(description = "合同编号")
+    private String contractCode;
+    /**
+     * 合同名称
+     */
+    @Schema(description = "合同名称")
+    private String contractName;
+    /**
+     * 补充合同编号
+     */
+    @Schema(description = "补充合同编号")
+    private String supplementCode;
+    /**
+     * 采购单位id
+     */
+    @Schema(description = "采购单位id")
+    private String purchaseEntId;
+    /**
+     * 供应单位id
+     */
+    @Schema(description = "供应单位id")
+    private String supplyEntId;
+    /**
+     * 合同状态  0已签约 1已完结 2已保存(草稿) 3签约中
+     */
+    @Schema(description = "合同状态")
+    private Integer status;
+    @Schema(description = "企业id")
+    private String entId;
+}

+ 101 - 101
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/ContractDetailResp.java

@@ -56,8 +56,8 @@ public class ContractDetailResp implements Serializable {
     @Schema(description = "标的信息")
     private List<TradeGoodsInfo> goodsInfo;
 
-    @Schema(description = "关联贸易订单")
-    private AssociatedOrder associatedOrder;
+//    @Schema(description = "关联贸易订单")
+//    private AssociatedOrder associatedOrder;
 
     /**
      * 备注
@@ -229,103 +229,103 @@ public class ContractDetailResp implements Serializable {
         @Schema(description = "生效结束时间")
         private Date effectiveEntTime;
     }
-    @Data
-    public static class AssociatedOrder implements Serializable{
-        @Serial
-        private static final long serialVersionUID = 3157352506945080734L;
-        /**
-         * 订单id
-         */
-        @Schema(description = "订单id")
-        private Long orderId;
-        /**
-         * 订单状态
-         */
-        @Schema(description = "订单状态")
-        private Integer orderStatus;
-        /**
-         * 订单编号
-         */
-        @Schema(description = "订单编号")
-        private String orderCode;
-        /**
-         * 采购单位id
-         */
-        @Schema(description = "采购单位id")
-        private Long purchaseEntId;
-        /**
-         * 采购单位名称
-         */
-        @Schema(description = "采购单位名称")
-        private String purchaseEntName;
-        /**
-         * 供应单位id
-         */
-        @Schema(description = "供应单位id")
-        private Long provideEntId;
-        /**
-         * 供应单位名称
-         */
-        @Schema(description = "供应单位名称")
-        private String provideEntName;
-        /**
-         * 运输单位id
-         */
-        @Schema(description = "运输单位id")
-        private Long transportEntId;
-        /**
-         * 运输单位名称
-         */
-        @Schema(description = "运输单位名称")
-        private String transportEntName;
-        /**
-         * 商品id
-         */
-        @Schema(description = "商品id")
-        private Long goodsId;
-        /**
-         * 商品名称
-         */
-        @Schema(description = "商品名称")
-        private String goodsName;
-        /**
-         * 计费方式
-         */
-        @Schema(description = "计费方式")
-        private Integer billingWay;
-        /**
-         * 计费方式描述
-         */
-        @Schema(description = "计费方式描述")
-        private String billingWayDesc;
-        /**
-         * 下单量
-         */
-        @Schema(description = "下单量")
-        private String amount;
-        /**
-         * 累计装货量
-         */
-        @Schema(description = "累计装货量")
-        private String loadAmount;
-        /**
-         * 累计卸货量
-         */
-        @Schema(description = "累计卸货量")
-        private String unloadAmount;
-        /**
-         * 运输单价
-         */
-        private String transportPrice;
-        /**
-         * 装货地址
-         */
-        @Schema(description = "装货地址")
-        private String loadAddress;
-        /**
-         * 卸货地址
-         */
-        @Schema(description = "卸货地址")
-        private String unloadAddress;
-    }
+//    @Data
+//    public static class AssociatedOrder implements Serializable{
+//        @Serial
+//        private static final long serialVersionUID = 3157352506945080734L;
+//        /**
+//         * 订单id
+//         */
+//        @Schema(description = "订单id")
+//        private Long orderId;
+//        /**
+//         * 订单状态
+//         */
+//        @Schema(description = "订单状态")
+//        private Integer orderStatus;
+//        /**
+//         * 订单编号
+//         */
+//        @Schema(description = "订单编号")
+//        private String orderCode;
+//        /**
+//         * 采购单位id
+//         */
+//        @Schema(description = "采购单位id")
+//        private Long purchaseEntId;
+//        /**
+//         * 采购单位名称
+//         */
+//        @Schema(description = "采购单位名称")
+//        private String purchaseEntName;
+//        /**
+//         * 供应单位id
+//         */
+//        @Schema(description = "供应单位id")
+//        private Long provideEntId;
+//        /**
+//         * 供应单位名称
+//         */
+//        @Schema(description = "供应单位名称")
+//        private String provideEntName;
+//        /**
+//         * 运输单位id
+//         */
+//        @Schema(description = "运输单位id")
+//        private Long transportEntId;
+//        /**
+//         * 运输单位名称
+//         */
+//        @Schema(description = "运输单位名称")
+//        private String transportEntName;
+//        /**
+//         * 商品id
+//         */
+//        @Schema(description = "商品id")
+//        private Long goodsId;
+//        /**
+//         * 商品名称
+//         */
+//        @Schema(description = "商品名称")
+//        private String goodsName;
+//        /**
+//         * 计费方式
+//         */
+//        @Schema(description = "计费方式")
+//        private Integer billingWay;
+//        /**
+//         * 计费方式描述
+//         */
+//        @Schema(description = "计费方式描述")
+//        private String billingWayDesc;
+//        /**
+//         * 下单量
+//         */
+//        @Schema(description = "下单量")
+//        private String amount;
+//        /**
+//         * 累计装货量
+//         */
+//        @Schema(description = "累计装货量")
+//        private String loadAmount;
+//        /**
+//         * 累计卸货量
+//         */
+//        @Schema(description = "累计卸货量")
+//        private String unloadAmount;
+//        /**
+//         * 运输单价
+//         */
+//        private String transportPrice;
+//        /**
+//         * 装货地址
+//         */
+//        @Schema(description = "装货地址")
+//        private String loadAddress;
+//        /**
+//         * 卸货地址
+//         */
+//        @Schema(description = "卸货地址")
+//        private String unloadAddress;
+//    }
 }

+ 27 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeRepository.java

@@ -1,14 +1,20 @@
 package com.sckw.contract.repository;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sckw.contract.dao.KwcContractTradeMapper;
 import com.sckw.contract.model.entity.KwcContractTrade;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
+import java.util.Objects;
+import java.util.Set;
 
 /**
  * @author :chenXiaoFei
@@ -27,7 +33,7 @@ public class KwcContractTradeRepository extends ServiceImpl<KwcContractTradeMapp
     public KwcContractTrade queryByContractId( Long contractId) {
         return getOne(Wrappers.<KwcContractTrade>lambdaQuery()
                 .eq(KwcContractTrade::getDelFlag, 0)
-                .eq(KwcContractTrade::getContractNo, contractId)
+                .eq(KwcContractTrade::getId, contractId)
                 .last("limit 1"));
     }
 
@@ -42,4 +48,24 @@ public class KwcContractTradeRepository extends ServiceImpl<KwcContractTradeMapp
                 .eq(KwcContractTrade::getContractNo, contractCode)
                 .last("limit 1"));
     }
+
+    public IPage<KwcContractTrade> queryTradeListByPage( List<Long> authEntIdList,String contractCode,
+                                                         String contractName, Set<Long> contractIds, Integer status, int pageNum, int pageSize) {
+        return page(new Page<>(pageNum, pageSize), Wrappers.<KwcContractTrade>lambdaQuery()
+                .eq(KwcContractTrade::getDelFlag, 0)
+                .like(StringUtils.isNotBlank(contractCode),KwcContractTrade::getContractNo, contractCode)
+                .like(StringUtils.isNotBlank(contractName),KwcContractTrade::getName, contractName)
+                .eq(Objects.nonNull(status),KwcContractTrade::getStatus, status)
+                .in(CollectionUtils.isNotEmpty(contractIds),KwcContractTrade::getId, contractIds)
+                .in(CollectionUtils.isNotEmpty(authEntIdList),KwcContractTrade::getEntId, authEntIdList)
+                .eq(KwcContractTrade::getDelFlag, 0));
+
+    }
+
+    public List<KwcContractTrade> queryByContractIds(Set<Long> contractPids) {
+
+        return list(Wrappers.<KwcContractTrade>lambdaQuery()
+                .eq(KwcContractTrade::getDelFlag,0)
+                .in(KwcContractTrade::getContractPid, contractPids));
+    }
 }

+ 13 - 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.Set;
 
 /**
  * @author :chenXiaoFei
@@ -22,4 +23,16 @@ public class KwcContractTradeUnitRepository extends ServiceImpl<KwcContractTrade
                 .eq(KwcContractTradeUnit::getContractId, contractId)
                 .eq(KwcContractTradeUnit::getDelFlag, 0));
     }
+
+    public List<KwcContractTradeUnit> queryByEntIds(Set<Long> entIds) {
+        return list(Wrappers.<KwcContractTradeUnit>lambdaQuery()
+                .eq(KwcContractTradeUnit::getDelFlag, 0)
+                .in(KwcContractTradeUnit::getEntId, entIds));
+    }
+
+    public List<KwcContractTradeUnit> queryByContractIds(Set<Long> tradeContractIds) {
+        return list(Wrappers.<KwcContractTradeUnit>lambdaQuery()
+                .eq(KwcContractTradeUnit::getDelFlag, 0)
+                .in(KwcContractTradeUnit::getContractId, tradeContractIds));
+    }
 }

+ 1 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeGoodsService.java

@@ -69,6 +69,7 @@ public class KwcContractTradeGoodsService {
         kwcContractTradeGoods.setStatus(Global.NO);
         kwcContractTradeGoods.setUnit(g.getUnit());
         kwcContractTradeGoods.setPrice(g.getPrice());
+        kwcContractTradeGoods.setAmount(g.getAmount());
         kwcContractTradeGoods.setCreateBy(userId);
         kwcContractTradeGoods.setCreateTime(date);
         kwcContractTradeGoods.setUpdateBy(userId);

+ 7 - 6
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractLogisticsService.java

@@ -48,6 +48,7 @@ import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.KwsUserResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import com.sckw.transport.api.model.vo.RWaybillSubOrderVo;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -1135,11 +1136,11 @@ public class KwcContractLogisticsService {
                 if (b){
                     queryLogisticListResp.setContractTransportAmount(null);
                 }else {
-                    double totalTransportAmount = goods.stream()
-                            .filter(g -> Objects.nonNull(g.getAmount()))
-                            .mapToDouble(x -> Double.parseDouble(String.valueOf(x.getAmount())))
-                            .sum();
-                    queryLogisticListResp.setTotalTransportAmount(String.valueOf( totalTransportAmount));
+                    BigDecimal totalTransportAmount = goods.stream()
+                            .map(KwcContractLogisticsGoods::getAmount)
+                            .filter(Objects::nonNull)
+                            .reduce(BigDecimal.ZERO, BigDecimal::add);
+                    queryLogisticListResp.setTotalTransportAmount(totalTransportAmount.setScale(2, RoundingMode.HALF_UP).toPlainString());
                 }
 
 
@@ -1314,7 +1315,7 @@ public class KwcContractLogisticsService {
         if (Objects.isNull(req.getContractId())){
             throw new BusinessException("物流合同id不能为空");
         }
-        KwcContractLogistics logistics = kwcContractLogisticsRepository.queryById(req.getContractId());
+        KwcContractLogistics logistics = kwcContractLogisticsRepository.queryById(Long.valueOf(req.getContractId()));
         if (Objects.isNull(logistics)){
             throw new BusinessException("物流合同不存在");
         }

+ 219 - 89
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractTradeService.java

@@ -4,10 +4,12 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import com.sckw.contract.dao.KwcContractTradeMapper;
 import com.sckw.contract.model.dto.req.QueryListReqDto;
 import com.sckw.contract.model.dto.res.QueryListResDto;
@@ -51,6 +53,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -106,7 +109,7 @@ public class KwcContractTradeService {
 
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private TradeOrderInfoService tradeOrderInfoService;
-    @DubboReference(version = "1.0.0", group = "design", check = false)
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
     private TransportRemoteService transportRemoteService;
 
     /**销售合同*/
@@ -278,7 +281,7 @@ public class KwcContractTradeService {
         long contactId = new IdWorker(1L).nextId();
         kwcContractTrade.setId(contactId);
         kwcContractTrade.setStatus(ContractStatusEnum.WAIT_APPROVE.getCode());
-        kwcContractTrade.setSigningUrl(changeFile(reqVo.getContractFile()));
+       // kwcContractTrade.setSigningUrl(changeFile(reqVo.getContractFile()));
         if (kwcContractTradeMapper.insert(kwcContractTrade) <= 0) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
         }
@@ -1342,7 +1345,7 @@ public class KwcContractTradeService {
     public ContractDetailResp queryContractDetail(@Valid ContractDetailReq req) {
         log.info("查询合同详情,请求参数 :{}", JSON.toJSONString(req));
         //查询本地商品合同信息
-        KwcContractTrade kwcContractTrade = kwcContractTradeRepository.queryByContractNo(req.getContractCode());
+        KwcContractTrade kwcContractTrade = kwcContractTradeRepository.queryByContractId(Long.valueOf(req.getContractId()));
         if (Objects.isNull(kwcContractTrade)) {
             return new ContractDetailResp();
         }
@@ -1419,98 +1422,98 @@ public class KwcContractTradeService {
                     .collect(Collectors.toList());
             contractDetailResp.setGoodsInfo(tradeGoodsInfos);
         }
-        //获取关联贸易订单
-        ContractDetailResp.AssociatedOrder associatedOrder = getAssociateOrder(kwcContractTradeOrder,orderDetailVo,
-                ctTypeKeyAndUnitMap,
-                kwcContractTrade, contractIdUnitTypeKeyAndUnitMap, goodsIdAndGoodsMap,
-                contractIdGoodsIdKeyAndGoodsMap,tradeOrderIdAndSubOrderVoMap);
-        contractDetailResp.setAssociatedOrder(associatedOrder);
+//        //获取关联贸易订单
+//        ContractDetailResp.AssociatedOrder associatedOrder = getAssociateOrder(kwcContractTradeOrder,orderDetailVo,
+//                ctTypeKeyAndUnitMap,
+//                kwcContractTrade, contractIdUnitTypeKeyAndUnitMap, goodsIdAndGoodsMap,
+//                contractIdGoodsIdKeyAndGoodsMap,tradeOrderIdAndSubOrderVoMap);
+//        contractDetailResp.setAssociatedOrder(associatedOrder);
 
         contractDetailResp.setRemark(kwcContractTrade.getRemark());
 
         return contractDetailResp;
     }
 
-    private static ContractDetailResp.AssociatedOrder getAssociateOrder(KwcContractTradeOrder kwcContractTradeOrder,OrderDetailVo orderDetailVo, Map<String,
-            KwcContractTradeUnit> ctTypeKeyAndUnitMap, KwcContractTrade kwcContractTrade, Map<String, KwcContractLogisticsUnit> contractIdUnitTypeKeyAndUnitMap,
-                                                                        Map<Long, KwpGoods> goodsIdAndGoodsMap, Map<String, KwcContractLogisticsGoods> contractIdGoodsIdKeyAndGoodsMap
-    ,Map<Long, RWaybillSubOrderVo> tradeOrderIdAndSubOrderVoMap) {
-        ContractDetailResp.AssociatedOrder associatedOrder = new ContractDetailResp.AssociatedOrder();
-        if (Objects.nonNull(kwcContractTradeOrder)){
-            associatedOrder.setOrderId(kwcContractTradeOrder.getOrderId());
-            associatedOrder.setOrderStatus(kwcContractTradeOrder.getStatus());
-            associatedOrder.setOrderCode(kwcContractTradeOrder.getOrderNo());
-            KwcContractTradeUnit purchaseUnit =
-                    ctTypeKeyAndUnitMap.getOrDefault(kwcContractTrade.getId() + "-" + CooperateTypeEnum.PURCHASER.getCode(), new KwcContractTradeUnit());
-
-
-            KwcContractTradeUnit provideUnit =
-                    ctTypeKeyAndUnitMap.getOrDefault(kwcContractTrade.getId() + "-" + CooperateTypeEnum.SUPPLIER.getCode(), new KwcContractTradeUnit());
-
-            associatedOrder.setPurchaseEntId(purchaseUnit.getEntId());
-            associatedOrder.setPurchaseEntName(purchaseUnit.getFirmName());
-            associatedOrder.setProvideEntId(provideUnit.getEntId());
-            associatedOrder.setProvideEntName(provideUnit.getFirmName());
-
-            KwcContractLogisticsUnit logisticsUnit =
-                    contractIdUnitTypeKeyAndUnitMap.get(kwcContractTrade.getId() + "-" + CooperateTypeEnum.CONSIGN.getCode());
-            if (Objects.nonNull(logisticsUnit)){
-                associatedOrder.setTransportEntId(logisticsUnit.getEntId());
-                associatedOrder.setTransportEntName(logisticsUnit.getFirmName());
-            }
-            KwcContractLogisticsUnit logisticsCarrigeUnit =
-                    contractIdUnitTypeKeyAndUnitMap.get(kwcContractTrade.getId() + "-" + CooperateTypeEnum.CARRIAGE.getCode());
-            if (Objects.nonNull(logisticsCarrigeUnit)){
-                associatedOrder.setTransportEntId(logisticsCarrigeUnit.getEntId());
-                associatedOrder.setTransportEntName(logisticsCarrigeUnit.getFirmName());
-            }
-            OrderDetailVo.GoodsInfo goodsInfo = orderDetailVo.getGoodsInfo();
-            if (Objects.nonNull(goodsInfo)){
-                associatedOrder.setGoodsId(goodsInfo.getGoodsId());
-                KwpGoods goods = goodsIdAndGoodsMap.getOrDefault(goodsInfo.getGoodsId(), new KwpGoods());
-                associatedOrder.setGoodsName(goods.getName());
-            }
-
-
-            associatedOrder.setBillingWay(orderDetailVo.getChargeType());
-            associatedOrder.setBillingWayDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
-                    String.valueOf(orderDetailVo.getChargeType())));
-            associatedOrder.setAmount(Objects.nonNull(orderDetailVo.getAmount()) ?
-                    orderDetailVo.getAmount().toPlainString() : null);
-            RWaybillSubOrderVo rWaybillSubOrderVo = tradeOrderIdAndSubOrderVoMap.get(kwcContractTrade.getId());
-            List<RWaybillSubOrderVo.BillSubOrder> subOrders = rWaybillSubOrderVo.getSubOrders();
-
-            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(subOrders)){
-                String loadAmount = subOrders.stream()
-                        .map(RWaybillSubOrderVo.BillSubOrder::getLoadAmount)
-                        .filter(Objects::nonNull)
-                        .reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString();
-                associatedOrder.setLoadAmount(loadAmount);
-                String unloadAmount = subOrders.stream()
-                        .map(RWaybillSubOrderVo.BillSubOrder::getUnloadAmount)
-                        .filter(Objects::nonNull)
-                        .reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString();
-                associatedOrder.setUnloadAmount(unloadAmount);
-            }
-
-
-            List<OrderDetailVo.AddressInfo> addressInfos = orderDetailVo.getAddressInfo();
-            Map<String, OrderDetailVo.AddressInfo> tradeOrderIdAndUnitTypeKeyAndUnitMap = Maps.newHashMap() ;
-            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(addressInfos)){
-               tradeOrderIdAndUnitTypeKeyAndUnitMap =
-                        addressInfos.stream().peek(x -> x.setTradeOrderIdTypeKey(x.getTOrderId() + "-" + x.getAddressType()))
-                        .collect(Collectors.toMap(OrderDetailVo.AddressInfo::getTradeOrderIdTypeKey, Function.identity(), (x, y) -> x));
-            }
-
-            associatedOrder.setTransportPrice(Objects.nonNull(orderDetailVo.getPrice()) ?
-                    orderDetailVo.getPrice().setScale(2, RoundingMode.HALF_UP).toPlainString() : null);
-            OrderDetailVo.AddressInfo loadAdd = tradeOrderIdAndUnitTypeKeyAndUnitMap.getOrDefault(kwcContractTradeOrder.getContractId() + "-" + AddressTypeEnum.SHIPMENT.getCode(), new OrderDetailVo.AddressInfo());
-            associatedOrder.setLoadAddress(loadAdd.getDetailAddress());
-            OrderDetailVo.AddressInfo unloadAdd = tradeOrderIdAndUnitTypeKeyAndUnitMap.getOrDefault(kwcContractTradeOrder.getContractId() + "-" + AddressTypeEnum.SHIPMENT.getCode(), new OrderDetailVo.AddressInfo());
-            associatedOrder.setUnloadAddress(unloadAdd.getDetailAddress());
-        }
-        return associatedOrder;
-    }
+//    private static ContractDetailResp.AssociatedOrder getAssociateOrder(KwcContractTradeOrder kwcContractTradeOrder,OrderDetailVo orderDetailVo, Map<String,
+//            KwcContractTradeUnit> ctTypeKeyAndUnitMap, KwcContractTrade kwcContractTrade, Map<String, KwcContractLogisticsUnit> contractIdUnitTypeKeyAndUnitMap,
+//                                                                        Map<Long, KwpGoods> goodsIdAndGoodsMap, Map<String, KwcContractLogisticsGoods> contractIdGoodsIdKeyAndGoodsMap
+//    ,Map<Long, RWaybillSubOrderVo> tradeOrderIdAndSubOrderVoMap) {
+//        ContractDetailResp.AssociatedOrder associatedOrder = new ContractDetailResp.AssociatedOrder();
+//        if (Objects.nonNull(kwcContractTradeOrder)){
+//            associatedOrder.setOrderId(kwcContractTradeOrder.getOrderId());
+//            associatedOrder.setOrderStatus(kwcContractTradeOrder.getStatus());
+//            associatedOrder.setOrderCode(kwcContractTradeOrder.getOrderNo());
+//            KwcContractTradeUnit purchaseUnit =
+//                    ctTypeKeyAndUnitMap.getOrDefault(kwcContractTrade.getId() + "-" + CooperateTypeEnum.PURCHASER.getCode(), new KwcContractTradeUnit());
+//
+//
+//            KwcContractTradeUnit provideUnit =
+//                    ctTypeKeyAndUnitMap.getOrDefault(kwcContractTrade.getId() + "-" + CooperateTypeEnum.SUPPLIER.getCode(), new KwcContractTradeUnit());
+//
+//            associatedOrder.setPurchaseEntId(purchaseUnit.getEntId());
+//            associatedOrder.setPurchaseEntName(purchaseUnit.getFirmName());
+//            associatedOrder.setProvideEntId(provideUnit.getEntId());
+//            associatedOrder.setProvideEntName(provideUnit.getFirmName());
+//
+//            KwcContractLogisticsUnit logisticsUnit =
+//                    contractIdUnitTypeKeyAndUnitMap.get(kwcContractTrade.getId() + "-" + CooperateTypeEnum.CONSIGN.getCode());
+//            if (Objects.nonNull(logisticsUnit)){
+//                associatedOrder.setTransportEntId(logisticsUnit.getEntId());
+//                associatedOrder.setTransportEntName(logisticsUnit.getFirmName());
+//            }
+//            KwcContractLogisticsUnit logisticsCarrigeUnit =
+//                    contractIdUnitTypeKeyAndUnitMap.get(kwcContractTrade.getId() + "-" + CooperateTypeEnum.CARRIAGE.getCode());
+//            if (Objects.nonNull(logisticsCarrigeUnit)){
+//                associatedOrder.setTransportEntId(logisticsCarrigeUnit.getEntId());
+//                associatedOrder.setTransportEntName(logisticsCarrigeUnit.getFirmName());
+//            }
+//            OrderDetailVo.GoodsInfo goodsInfo = orderDetailVo.getGoodsInfo();
+//            if (Objects.nonNull(goodsInfo)){
+//                associatedOrder.setGoodsId(goodsInfo.getGoodsId());
+//                KwpGoods goods = goodsIdAndGoodsMap.getOrDefault(goodsInfo.getGoodsId(), new KwpGoods());
+//                associatedOrder.setGoodsName(goods.getName());
+//            }
+//
+//
+//            associatedOrder.setBillingWay(orderDetailVo.getChargeType());
+//            associatedOrder.setBillingWayDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
+//                    String.valueOf(orderDetailVo.getChargeType())));
+//            associatedOrder.setAmount(Objects.nonNull(orderDetailVo.getAmount()) ?
+//                    orderDetailVo.getAmount().toPlainString() : null);
+//            RWaybillSubOrderVo rWaybillSubOrderVo = tradeOrderIdAndSubOrderVoMap.get(kwcContractTrade.getId());
+//            List<RWaybillSubOrderVo.BillSubOrder> subOrders = rWaybillSubOrderVo.getSubOrders();
+//
+//            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(subOrders)){
+//                String loadAmount = subOrders.stream()
+//                        .map(RWaybillSubOrderVo.BillSubOrder::getLoadAmount)
+//                        .filter(Objects::nonNull)
+//                        .reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString();
+//                associatedOrder.setLoadAmount(loadAmount);
+//                String unloadAmount = subOrders.stream()
+//                        .map(RWaybillSubOrderVo.BillSubOrder::getUnloadAmount)
+//                        .filter(Objects::nonNull)
+//                        .reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString();
+//                associatedOrder.setUnloadAmount(unloadAmount);
+//            }
+//
+//
+//            List<OrderDetailVo.AddressInfo> addressInfos = orderDetailVo.getAddressInfo();
+//            Map<String, OrderDetailVo.AddressInfo> tradeOrderIdAndUnitTypeKeyAndUnitMap = Maps.newHashMap() ;
+//            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(addressInfos)){
+//               tradeOrderIdAndUnitTypeKeyAndUnitMap =
+//                        addressInfos.stream().peek(x -> x.setTradeOrderIdTypeKey(x.getTOrderId() + "-" + x.getAddressType()))
+//                        .collect(Collectors.toMap(OrderDetailVo.AddressInfo::getTradeOrderIdTypeKey, Function.identity(), (x, y) -> x));
+//            }
+//
+//            associatedOrder.setTransportPrice(Objects.nonNull(orderDetailVo.getPrice()) ?
+//                    orderDetailVo.getPrice().setScale(2, RoundingMode.HALF_UP).toPlainString() : null);
+//            OrderDetailVo.AddressInfo loadAdd = tradeOrderIdAndUnitTypeKeyAndUnitMap.getOrDefault(kwcContractTradeOrder.getContractId() + "-" + AddressTypeEnum.SHIPMENT.getCode(), new OrderDetailVo.AddressInfo());
+//            associatedOrder.setLoadAddress(loadAdd.getDetailAddress());
+//            OrderDetailVo.AddressInfo unloadAdd = tradeOrderIdAndUnitTypeKeyAndUnitMap.getOrDefault(kwcContractTradeOrder.getContractId() + "-" + AddressTypeEnum.SHIPMENT.getCode(), new OrderDetailVo.AddressInfo());
+//            associatedOrder.setUnloadAddress(unloadAdd.getDetailAddress());
+//        }
+//        return associatedOrder;
+//    }
 
     private static ContractDetailResp.TradeGoodsInfo getTradeGoodsInfo(KwcContractTradeGoods t, Map<Long,
             KwpGoods> finalGoodsIdAndGoodsMap) {
@@ -1559,4 +1562,131 @@ public class KwcContractTradeService {
         tradeBaseInfo.setSalesmanPhone(kwcContractTrade.getSalesmanPhone());
         return tradeBaseInfo;
     }
+
+    public PageDataResult<QueryListResVo> queryTradeListByPage(QueryTradeReq req) {
+        Set<Long> entIds = Sets.newHashSet();
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getPurchaseEntId())) {
+            //查询企业 信息
+            entIds.add(Long.valueOf(req.getPurchaseEntId()));
+        }
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getSupplyEntId())) {
+            entIds.add(Long.valueOf(req.getSupplyEntId()));
+        }
+        Set<Long> contractIds = Sets.newHashSet();
+        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());
+           }
+        }
+        List<Long> allEnt = Lists.newArrayList();
+        if (StringUtils.isBlank(req.getEntId())) {
+            req.setEntId(String.valueOf(LoginUserHolder.getEntId()));
+        }
+        allEnt.add(Long.valueOf(req.getEntId()));
+        EntCacheResDto entCacheResDto = remoteSystemService.queryEntTreeById(Long.valueOf(req.getEntId()));
+        if (Objects.nonNull(entCacheResDto)) {
+            EntCacheResDto entCacheResDto1 = remoteSystemService.queryEntTreeById(entCacheResDto.getId());
+            List<EntCacheResDto> child = entCacheResDto1.getChild();
+            if (CollectionUtils.isNotEmpty(child)) {
+                allEnt.addAll(child.stream().map(EntCacheResDto::getId).toList());
+            }
+        }
+
+        //分页查询合同信息
+        IPage<KwcContractTrade> page = kwcContractTradeRepository.queryTradeListByPage(allEnt,
+                req.getContractCode(),
+                req.getContractName(),
+                contractIds, req.getStatus(), req.getPageNum(), req.getPageSize());
+        List<KwcContractTrade> records = page.getRecords();
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(records)){
+            return PageDataResult.empty(req.getPageNum(), req.getPageSize());
+        }
+        Set<Long> tradeContractIds = records.stream().map(KwcContractTrade::getId).collect(Collectors.toSet());
+        //获取父id
+        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)){
+            List<KwcContractTrade> contractPidList = kwcContractTradeRepository.queryByContractIds(contractPids);
+
+            pidIdAndTradeMap =
+                    contractPidList.stream().collect(Collectors.toMap(KwcContractTrade::getId
+                    , 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)){
+            contractUnitTypeKeyAndUnitMap = tradeUnits.stream()
+                    .peek(x -> x.setContractIdUniTypeKey(x.getContractId() + "-" + x.getUnitType()))
+                    .collect(Collectors.toMap(KwcContractTradeUnit::getContractIdUniTypeKey, Function.identity(), (v1
+                            , v2) -> v1));
+        }
+        //查询用户信息
+        //获取创建人
+        List<Long> createBys =
+                records.stream().map(KwcContractTrade::getCreateBy).distinct().collect(Collectors.toList());
+        Map<Long, UserCacheResDto> longUserCacheResDtoMap = remoteSystemService.queryUserCacheMapByIds(createBys);
+        Map<Long, KwcContractTrade> finalPidIdAndTradeMap = pidIdAndTradeMap;
+        Map<String, KwcContractTradeUnit> finalContractUnitTypeKeyAndUnitMap = contractUnitTypeKeyAndUnitMap;
+        List<QueryListResVo> queryListResVos = records.stream()
+                .map(t -> getQueryListResVo(t, finalContractUnitTypeKeyAndUnitMap, finalPidIdAndTradeMap, longUserCacheResDtoMap))
+                .collect(Collectors.toList());
+
+
+
+        return PageDataResult.of(page, queryListResVos);
+    }
+
+    @NotNull
+    private static QueryListResVo getQueryListResVo(KwcContractTrade t, Map<String, KwcContractTradeUnit> finalContractUnitTypeKeyAndUnitMap, Map<Long, KwcContractTrade> finalPidIdAndTradeMap, Map<Long, UserCacheResDto> longUserCacheResDtoMap) {
+        QueryListResVo queryListResVo = new QueryListResVo();
+        queryListResVo.setId(t.getId());
+        queryListResVo.setStatus(t.getStatus());
+        queryListResVo.setStatusName(ContractStatusEnum.getNameByCode(t.getStatus()));
+
+        KwcContractTradeUnit purchaseEnt = finalContractUnitTypeKeyAndUnitMap.getOrDefault(t.getId() + "-" + CooperateTypeEnum.PURCHASER.getCode(),
+                new KwcContractTradeUnit());
+        queryListResVo.setPurchaseEntId(String.valueOf(purchaseEnt.getEntId()));
+        queryListResVo.setPurchaseEntName(purchaseEnt.getFirmName());
+        KwcContractTradeUnit provideEnt =
+                finalContractUnitTypeKeyAndUnitMap.getOrDefault(t.getId() + "-" + CooperateTypeEnum.SUPPLIER.getCode(),
+                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.setUnloadWay(String.valueOf(t.getUnloadWay()));
+        queryListResVo.setUnloadWayName(DictEnum.getLabel(DictTypeEnum.LOAD_UNLOAD_WAY.getType(),
+                String.valueOf(t.getUnloadWay())));
+        queryListResVo.setAmount(t.getAmount());
+        queryListResVo.setPerformedAmount(t.getPerformedAmount());
+
+        // queryListResVo.setPerformedAmountMoney();
+        queryListResVo.setContractPid(t.getContractPid());
+        KwcContractTrade parentTrade = finalPidIdAndTradeMap.getOrDefault(t.getContractPid(),
+                new KwcContractTrade());
+        queryListResVo.setContractPname(parentTrade.getName());
+
+//            queryListResVo.setChargingName();
+//            queryListResVo.setTradingName();
+//            queryListResVo.setCarrierEntName();
+        UserCacheResDto userCacheResDto = longUserCacheResDtoMap.getOrDefault(t.getCreateBy(), new UserCacheResDto());
+        queryListResVo.setInitiateName(userCacheResDto.getName());
+        if (Objects.nonNull(userCacheResDto.getEntInfo())){
+            queryListResVo.setInitiateEntName(userCacheResDto.getEntInfo().getFirmName());
+        }
+        queryListResVo.setCreateTime(t.getCreateTime());
+        queryListResVo.setStartTime(t.getStartTime());
+        queryListResVo.setEndTime(t.getEndTime());
+        queryListResVo.setInitiateTime(t.getCreateTime());
+        queryListResVo.setRemark(t.getRemark());
+        queryListResVo.setSignTime(t.getCreateTime());
+        return queryListResVo;
+    }
 }

+ 5 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/TradeOrderManageController.java

@@ -11,6 +11,8 @@ import com.sckw.order.model.vo.req.*;
 import com.sckw.order.model.vo.res.QueryTradeOrderResp;
 import com.sckw.order.model.vo.res.TradeOrderDetailResp;
 import com.sckw.order.serivce.TradeOrderManageService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.AllArgsConstructor;
 import org.springframework.http.MediaType;
@@ -30,6 +32,7 @@ import java.util.List;
 @AllArgsConstructor
 @RestController
 @RequestMapping("/kwOrderManage")
+@Tag(name = "贸易订单管理")
 public class TradeOrderManageController {
 
     private final TradeOrderManageService tradeOrderManageService;
@@ -93,6 +96,7 @@ public class TradeOrderManageController {
      * 分页查询贸易订单
      */
     @PostMapping(value = "/pageQueryTradeOrder")
+    @Operation(summary = "分页查询贸易订单")
     public BaseResult<PageDataResult<QueryTradeOrderResp>> pageQueryTradeOrder(@RequestBody @Validated QueryTradeOrderReq req) {
         return BaseResult.success(tradeOrderManageService.pageQueryTradeOrder(req));
     }
@@ -101,6 +105,7 @@ public class TradeOrderManageController {
      * 获取贸易订单详情
      */
     @PostMapping(value = "/getTradeOrderDetail")
+    @Operation(summary = "获取贸易订单详情")
     public BaseResult<TradeOrderDetailResp> getTradeOrderDetail(@RequestBody @Validated TradeOrderDetailReq req) {
         return BaseResult.success(tradeOrderManageService.getTradeOrderDetail(req));
     }

+ 5 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/QueryTradeOrderReq.java

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

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

@@ -78,6 +78,7 @@ public class QueryTradeOrderResp  implements Serializable {
     /**
      * 计费方式描述
      */
+    @Schema(description = "计费方式描述")
     private String chargeTypeDesc;
 
     /**

+ 43 - 26
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/TradeOrderManageService.java

@@ -211,6 +211,9 @@ public class TradeOrderManageService {
                     .map(KwoTradeOrderGoods::getTOrderId)
                     .toList();
         }
+        if (StringUtils.isNotBlank(req.getTradeOrderId())){
+            orderIds.add(Long.valueOf(req.getTradeOrderId()));
+        }
 
         //分页查询订单
         IPage<KwoTradeOrder> page = tradeOrderRepository.queryByPage(orderIds,req.getOrderNo(),req.getOrderStartTime(),
@@ -351,14 +354,16 @@ public class TradeOrderManageService {
                 new RWaybillSubOrderVo());
         List<RWaybillSubOrderVo.BillSubOrder> subOrders = subOrderVo.getSubOrders();
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(subOrders)) {
-            double sum = subOrders.stream()
-                    .filter(s -> Objects.nonNull(s.getLoadAmount()))
-                    .mapToDouble(s -> s.getLoadAmount().doubleValue()).sum();
-            double unloadQty = subOrders.stream()
-                    .filter(s -> Objects.nonNull(s.getUnloadAmount()))
-                    .mapToDouble(s -> s.getUnloadAmount().doubleValue()).sum();
-            queryTradeOrderResp.setLoadQty(String.valueOf(sum));
-            queryTradeOrderResp.setUnloadQty(String.valueOf(unloadQty));
+            BigDecimal sum = subOrders.stream()
+                    .map(RWaybillSubOrderVo.BillSubOrder::getLoadAmount)
+                    .filter(Objects::nonNull)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal unloadQty = subOrders.stream()
+                    .map(RWaybillSubOrderVo.BillSubOrder::getUnloadAmount)
+                    .filter(Objects::nonNull)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            queryTradeOrderResp.setLoadQty(sum.setScale(2, RoundingMode.HALF_UP).toPlainString());
+            queryTradeOrderResp.setUnloadQty(unloadQty.setScale(2, RoundingMode.HALF_UP).toPlainString());
         }
         queryTradeOrderResp.setOrderQty(Objects.nonNull(tradeOrder.getAmount()) ?
                 tradeOrder.getAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
@@ -482,28 +487,36 @@ public class TradeOrderManageService {
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(subOrders)){
         
             //累计装货量
-            double loadTotal = subOrders.stream().filter(x -> Objects.nonNull(x.getLoadAmount()))
-                    .mapToDouble(x -> x.getLoadAmount().doubleValue()).sum();
-            double unloadTotal = subOrders.stream().filter(x -> Objects.nonNull(x.getUnloadAmount()))
-                    .mapToDouble(x -> x.getUnloadAmount().doubleValue()).sum();
-            double loadAmount = 0.0 ;
+            BigDecimal loadTotal = subOrders.stream()
+                    .map(RWaybillSubOrderVo.BillSubOrder::getLoadAmount)
+                    .filter(Objects::nonNull)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal unloadTotal = subOrders.stream()
+                    .map(RWaybillSubOrderVo.BillSubOrder::getUnloadAmount)
+                    .filter(Objects::nonNull)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal loadAmount = BigDecimal.ZERO ;
             if (org.apache.commons.lang3.StringUtils.equals(String.valueOf(tradeOrder.getTrading()),
                     DictEnum.CHARGING_TYPE_2.getValue())){
                 //已履约量
-                loadAmount = subOrders.stream().filter(x -> Objects.nonNull(x.getUnloadAmount()))
-                        .mapToDouble(x -> x.getUnloadAmount().doubleValue()).sum();
+                loadAmount = subOrders.stream()
+                        .map(RWaybillSubOrderVo.BillSubOrder::getUnloadAmount)
+                        .filter(Objects::nonNull)
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
             }else if (org.apache.commons.lang3.StringUtils.equals(String.valueOf(tradeOrder.getTrading()),
                     DictEnum.CHARGING_TYPE_1.getValue())){
                 //已履约量
-                loadAmount = subOrders.stream().filter(x -> Objects.nonNull(x.getLoadAmount()))
-                        .mapToDouble(x -> x.getLoadAmount().doubleValue()).sum();
+                loadAmount = subOrders.stream()
+                        .map(RWaybillSubOrderVo.BillSubOrder::getLoadAmount)
+                        .filter(Objects::nonNull)
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
              
             }
-            tradeOrderPerformanceInfo.setLoadAmount(String.valueOf(loadAmount));
+            tradeOrderPerformanceInfo.setLoadAmount(loadAmount.setScale(2, RoundingMode.HALF_UP).toPlainString());
 
-            tradeOrderPerformanceInfo.setLoadTotal(String.valueOf(loadTotal));
+            tradeOrderPerformanceInfo.setLoadTotal(loadTotal.setScale(2, RoundingMode.HALF_UP).toPlainString());
 
-            tradeOrderPerformanceInfo.setUnloadTotal(String.valueOf(unloadTotal));
+            tradeOrderPerformanceInfo.setUnloadTotal(unloadTotal.setScale(2, RoundingMode.HALF_UP).toPlainString());
             //按照物流id进行分组
             Map<Long, List<RWaybillSubOrderVo.BillSubOrder>> logIdAndSubOrderVoMap =
                     subOrders.stream().collect(Collectors.groupingBy(RWaybillSubOrderVo.BillSubOrder::getLOrderId));
@@ -512,20 +525,24 @@ public class TradeOrderManageService {
                 KwtLogisticsOrderVO logisticsOrder = finalLogIdAndLogisticsOrderMap.getOrDefault(logId, new KwtLogisticsOrderVO());
                 BigDecimal price =
                         Optional.ofNullable(logisticsOrder).map(KwtLogisticsOrderVO::getPrice).orElse(BigDecimal.ZERO);
-                double sum = 0.0 ;
+                BigDecimal sum = BigDecimal.ZERO ;
                 if (org.apache.commons.lang3.StringUtils.equals(String.valueOf(tradeOrder.getTrading()),
                         DictEnum.CHARGING_TYPE_2.getValue())){
                     //已履约量
-                    sum = subOrderVos.stream().filter(x -> Objects.nonNull(x.getUnloadAmount()))
-                            .mapToDouble(x -> x.getUnloadAmount().doubleValue()).sum();
+                    sum = subOrderVos.stream()
+                            .map(RWaybillSubOrderVo.BillSubOrder::getUnloadAmount)
+                            .filter(Objects::nonNull)
+                            .reduce(BigDecimal.ZERO, BigDecimal::add);
                 }else if (org.apache.commons.lang3.StringUtils.equals(String.valueOf(tradeOrder.getTrading()),
                         DictEnum.CHARGING_TYPE_1.getValue())){
                     //已履约量
-                    sum = subOrderVos.stream().filter(x -> Objects.nonNull(x.getLoadAmount()))
-                            .mapToDouble(x -> x.getLoadAmount().doubleValue()).sum();
+                    sum = subOrderVos.stream()
+                            .map(RWaybillSubOrderVo.BillSubOrder::getLoadAmount)
+                            .filter(Objects::nonNull)
+                            .reduce(BigDecimal.ZERO, BigDecimal::add);
 
                 }
-             tradeOrderPerformanceInfo.setLoadAmountPrice(price.multiply(new BigDecimal(sum)).setScale(2,
+             tradeOrderPerformanceInfo.setLoadAmountPrice(price.multiply(sum).setScale(2,
                      RoundingMode.HALF_UP).toPlainString());
             });
         }