Răsfoiți Sursa

1、专场逻辑调整;
2、完结物流订单逻辑调整;

zk 2 ani în urmă
părinte
comite
883a696efd
23 a modificat fișierele cu 396 adăugiri și 223 ștergeri
  1. 10 6
      sckw-auth/src/main/java/com/sckw/auth/controller/AuthController.java
  2. 24 9
      sckw-auth/src/main/java/com/sckw/auth/service/impl/AuthServiceImpl.java
  3. 41 12
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/RequestCheckFilter.java
  4. 9 2
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/Global.java
  5. 3 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/EncryUtil.java
  6. 7 6
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/constant/HttpStatus.java
  7. 9 3
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java
  8. 0 46
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/CompleteLogisticsOrderV1Param.java
  9. 0 48
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/CreateOrCancelLogisticsOrderV1Param.java
  10. 8 2
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/GoodsLoadingParam.java
  11. 20 22
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java
  12. 1 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java
  13. 2 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtAcceptCarriageOrderController.java
  14. 4 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtLogisticsConsignmentController.java
  15. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OrderManualCompletionDto.java
  16. 21 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderFinishVO.java
  17. 43 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderGoodsLoadingVo.java
  18. 8 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtAcceptCarriageOrderService.java
  19. 26 10
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtConsignOrderService.java
  20. 16 9
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  21. 91 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderGoodsService.java
  22. 51 32
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtTransportCommonService.java
  23. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java

+ 10 - 6
sckw-auth/src/main/java/com/sckw/auth/controller/AuthController.java

@@ -5,6 +5,7 @@ import com.sckw.auth.service.IAuthService;
 import com.sckw.core.model.enums.LoginMethodEnum;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
+import jakarta.servlet.http.HttpServletRequest;
 import jakarta.validation.Valid;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -29,12 +30,14 @@ public class AuthController {
      * @date: 2023/6/16
      */
     @PostMapping("/login")
-    public HttpResult login(@Valid @RequestBody LoginReqVo reqVo,
-                            @RequestHeader(name = "Client-Type", required = true) String clientType,
-                            @RequestHeader(name = "System-Type", required = true) int systemType,
-                            @RequestHeader(name = "Access-Special", required = true) String accessSpecial) {
+    public HttpResult login(@Valid @RequestBody LoginReqVo reqVo, HttpServletRequest request) {
+        int systemType = request.getIntHeader("System-Type");
+        String clientType = request.getHeader("Client-Type");
+        String accessSpecial = request.getHeader("Access-Special");
+
         reqVo.setSystemType(systemType);
         reqVo.setClientType(clientType);
+
         LoginBase loginBase = new LoginBase();
         loginBase.setAccount(reqVo.getAccount());
         loginBase.setPassword(reqVo.getPassword());
@@ -53,8 +56,9 @@ public class AuthController {
      * @date: 2023/9/27
      */
     @PostMapping("getLoginResByToken")
-    public HttpResult getLoginResByToken(@RequestHeader(name = "Client-Type", required = true) String clientType,
-                                         @RequestHeader(name = "Access-Token", required = true) String token) {
+    public HttpResult getLoginResByToken(HttpServletRequest request) {
+        String clientType = request.getHeader("Client-Type");
+        String token = request.getHeader("Access-Token");
         return HttpResult.ok(authService.getLoginResByToken(clientType, token));
     }
 

+ 24 - 9
sckw-auth/src/main/java/com/sckw/auth/service/impl/AuthServiceImpl.java

@@ -17,6 +17,7 @@ import com.sckw.core.model.enums.LoginMethodEnum;
 import com.sckw.core.model.enums.SystemTypeEnum;
 import com.sckw.core.utils.*;
 import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.constant.RequestConstant;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.model.LoginUserInfo;
 import com.sckw.core.web.response.HttpResult;
@@ -261,7 +262,7 @@ public class AuthServiceImpl implements IAuthService {
         if (StringUtils.isBlank(params.getClientType())) {
             return HttpResult.error(HttpStatus.PARAMETERS_MISSING_CODE, "客户端类型不能为空!");
         }
-        if (StringUtils.isBlank(params.getAccessSpecial())) {
+        if (StringUtils.isBlank(params.getAccessSpecial()) && params.getSystemType() != SystemTypeEnum.MANAGE.getCode()) {
             return HttpResult.error(HttpStatus.PARAMETERS_MISSING_CODE, "平台标识不能为空!");
         }
         if (StringUtils.isBlank(params.getAccount())) {
@@ -303,14 +304,17 @@ public class AuthServiceImpl implements IAuthService {
      * @date 2023/12/14
      **/
     public HttpResult checkSpecial(LoginBase loginBase, EntCacheResDto enterprise) {
+        /*校验*/
+        //运营端不做校验
+        if (loginBase.getSystemType() == SystemTypeEnum.MANAGE.getCode()) {
+            return HttpResult.ok();
+        }
         //平台专场集
         List<SpecialResVo> specialResVos = systemService.findSpecial();
         //企业所属专场
         String special = enterprise != null ? enterprise.getSpecial() : null;
         //用户当前使用平台
         String accessSpecial = loginBase.getAccessSpecial();
-
-        /*校验*/
         //校验是否存在专场数据
         if (CollectionUtils.isEmpty(specialResVos)) {
             return HttpResult.error(HttpStatus.PARAMETERS_MISSING_CODE, "系统平台标识码缺失,请联系平台系统管理员确认!");
@@ -328,10 +332,15 @@ public class AuthServiceImpl implements IAuthService {
         }
 
         //校验专场状态
-        if (specialRes != null && specialRes.getIsMain() != Global.YES) {
+        if (specialRes != null && specialRes.getIsMain() != Global.NO) {
             return HttpResult.error(HttpStatus.PARAMETERS_MISSING_CODE, "您当前使用的平台暂停使用,如有疑问请联系平台系统管理员确认!");
         }
 
+        //司机端可以登陆所有平台,只对任务数据做隔离
+        if (loginBase.getSystemType() == SystemTypeEnum.DRIVER.getCode()) {
+            return HttpResult.ok();
+        }
+
         //校验企业非专场时,Hearder中标识码是否为主平台标识码
         if (StringUtils.isBlank(special) ) {
             if (specialRes != null && specialRes.getIsMain() != NumberConstant.ONE) {
@@ -406,13 +415,19 @@ public class AuthServiceImpl implements IAuthService {
      * @date 2023/8/18
      **/
     private String generateToken(LoginBase loginBase, Long userId) {
+        String account = loginBase.getAccount();
+        String clientType = loginBase.getClientType();
+        Integer systemType = loginBase.getSystemType();
+        String special = loginBase.getAccessSpecial();
+        Long timestamp = System.currentTimeMillis();
         Map<String, Object> info = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         info.put("userId", userId);
-        info.put("account", loginBase.getAccount());
-        info.put("clientType", loginBase.getClientType());
-        info.put("systemType", loginBase.getSystemType());
-//        info.put("timestamp", System.currentTimeMillis());
-        String key = Global.getFullUserTokenKey(loginBase.getClientType(), userId);
+        info.put("account", account);
+        info.put("clientType", clientType);
+        info.put("systemType", systemType);
+        info.put("special", special);
+        //info.put("timestamp", timestamp);
+        String key = Global.getFullUserTokenKey(clientType, !systemType.equals(SystemTypeEnum.MANAGE.getCode()) ? special : null, userId);
         String token = EncryUtil.encryV1(Global.PRI_KEY, JSON.toJSONString(info));
         int expireTime = ClientTypeEnum.expireTime(loginBase.getClientType());
         RedissonUtils.putString(key, token, expireTime);

+ 41 - 12
sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/RequestCheckFilter.java

@@ -74,7 +74,8 @@ public class RequestCheckFilter implements Filter {
         HttpServletResponse response = (HttpServletResponse) servletResponse;
         String token = request.getHeader(RequestConstant.TOKEN);
         String clientType = request.getHeader(RequestConstant.CLIENT_TYPE);
-        String systemType = request.getHeader(RequestConstant.SYSTEM_TYPE);
+        Integer systemType = request.getIntHeader(RequestConstant.SYSTEM_TYPE);
+        String accessSpecial = request.getHeader(RequestConstant.ACCESS_SPECIAL);
         String requestUri = request.getRequestURI();
 
         /*1、非token校验接口放行*/
@@ -85,8 +86,9 @@ public class RequestCheckFilter implements Filter {
 
         /*2、校验token**/
         /*2.1、校验token非空*/
-        if (StringUtils.isBlank(token)) {
-            ResponseUtil.writer(response, HttpResult.error(HttpStatus.TOKEN_INVALID_CODE, HttpStatus.UN_LOGIN_MESSAGE));
+        HttpResult result = checkBlank(token, clientType, systemType, accessSpecial);
+        if (result.getCode() != HttpStatus.SUCCESS_CODE) {
+            ResponseUtil.writer(response, result);
             return;
         }
 
@@ -99,7 +101,8 @@ public class RequestCheckFilter implements Filter {
 
         /*2.3、从redis获取用户登录token*/
         Long userId = StringUtils.isNotBlank(tokenMap.get("userId")) ? NumberUtils.parseLong(tokenMap.get("userId")) : null;
-        String redisUserToken = RedissonUtils.getString(Global.getFullUserTokenKey(clientType, userId));
+        String key = Global.getFullUserTokenKey(clientType, accessSpecial, userId);
+        String redisUserToken = RedissonUtils.getString(key);
         if (StringUtils.isBlank(redisUserToken)) {
             ResponseUtil.writer(response, HttpResult.error(HttpStatus.TOKEN_INVALID_CODE, HttpStatus.TOKEN_INVALID_MESSAGE));
             return;
@@ -112,7 +115,7 @@ public class RequestCheckFilter implements Filter {
         }
 
         /*3、校验登录用户信息*/
-        String key = Global.getFullUserLoginKey(NumberUtils.parseInt(systemType), userId);
+        key = Global.getFullUserLoginKey(systemType, userId);
         String userInfoStr = RedissonUtils.getString(key);
         LoginUserInfo loginUserInfo = StringUtils.isNotBlank(userInfoStr) ? JSON.parseObject(userInfoStr, LoginUserInfo.class) : null;
         if (Objects.isNull(loginUserInfo)) {
@@ -130,8 +133,7 @@ public class RequestCheckFilter implements Filter {
         /*4、登录中的企业信息*/
         String loginEntStr = RedissonUtils.getString(Global.getFullUserEntKey(loginUserInfo.getEntId()));
         LoginEntInfo loginEntInfo = StringUtils.isNotBlank(loginEntStr) ? JSON.parseObject(loginEntStr, LoginEntInfo.class) : null;
-
-        if (SystemTypeEnum.MANAGE.getCode().equals(Integer.parseInt(systemType))) {
+        if (SystemTypeEnum.MANAGE.getCode().equals(systemType)) {
             //redis 获取客户经理绑定企业ID
             String managerKey = Global.getCustomerManagerUserLoginKey(SystemTypeEnum.MANAGE.getCode(), loginUserInfo.getId());
             RSet<Object> set = RedissonUtils.getSet(managerKey);
@@ -143,15 +145,15 @@ public class RequestCheckFilter implements Filter {
             }
             LoginUserHolder.set(loginUserInfo);
             LoginEntHolder.set(loginEntInfo);
-            RedissonUtils.putString(Global.getFullUserTokenKey(clientType, userId), token, ClientTypeEnum.expireTime(clientType));
-            RedissonUtils.putString(Global.getFullUserLoginKey(NumberUtils.parseInt(systemType), loginUserInfo.getId()), JSON.toJSONString(loginUserInfo), Global.APP_TOKEN_EXPIRE);
+            RedissonUtils.putString(Global.getFullUserTokenKey(clientType , accessSpecial, userId), token, ClientTypeEnum.expireTime(clientType));
+            RedissonUtils.putString(Global.getFullUserLoginKey(systemType, loginUserInfo.getId()), JSON.toJSONString(loginUserInfo), Global.APP_TOKEN_EXPIRE);
             RedissonUtils.putString(Global.getFullUserEntKey(loginEntInfo.getId()), JSON.toJSONString(loginEntInfo), Global.APP_TOKEN_EXPIRE);
             filterChain.doFilter(servletRequest, servletResponse);
             LoginUserHolder.remove();
             return;
         }
 
-        if ((StringUtils.isBlank(loginEntStr) || loginEntInfo == null) && NumberUtils.parseInt(systemType) != SystemTypeEnum.MANAGE.getCode()) {
+        if ((StringUtils.isBlank(loginEntStr) || loginEntInfo == null) && !Objects.equals(systemType, SystemTypeEnum.MANAGE.getCode())) {
             ResponseUtil.writer(response, HttpResult.error(HttpStatus.TOKEN_INVALID_CODE, HttpStatus.UN_LOGIN_MESSAGE));
             return;
         } else {
@@ -188,9 +190,9 @@ public class RequestCheckFilter implements Filter {
 //        }
         LoginUserHolder.set(loginUserInfo);
         LoginEntHolder.set(loginEntInfo);
-        RedissonUtils.putString(Global.getFullUserLoginKey(NumberUtils.parseInt(systemType), loginUserInfo.getId()), JSON.toJSONString(loginUserInfo), Global.APP_TOKEN_EXPIRE);
+        RedissonUtils.putString(Global.getFullUserLoginKey(systemType, loginUserInfo.getId()), JSON.toJSONString(loginUserInfo), Global.APP_TOKEN_EXPIRE);
         RedissonUtils.putString(Global.getFullUserEntKey(loginEntInfo.getId()), JSON.toJSONString(loginEntInfo), Global.APP_TOKEN_EXPIRE);
-        RedissonUtils.putString(Global.getFullUserTokenKey(clientType, userId), token, ClientTypeEnum.expireTime(clientType));
+        RedissonUtils.putString(Global.getFullUserTokenKey(clientType, accessSpecial, userId), token, ClientTypeEnum.expireTime(clientType));
         filterChain.doFilter(servletRequest, servletResponse);
         LoginUserHolder.remove();
         LoginEntHolder.remove();
@@ -208,6 +210,33 @@ public class RequestCheckFilter implements Filter {
         return RedissonUtils.contains(Global.REDIS_SYS_MENU_PREFIX + clientType + Global.COLON + userId, url);
     }
 
+    /**
+     * @param token token
+     * @param clientType 客户端类型
+     * @param systemType 系统类型
+     * @param accessSpecial 专场标识
+     * @return 校验结果
+     * @desc Hearder内容校验
+     * @author zk
+     * @date 2023/12/14
+     **/
+    private HttpResult checkBlank(String token, String clientType, Integer systemType, String accessSpecial) {
+        if (StringUtils.isBlank(token)) {
+            return HttpResult.error(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.UN_LOGIN_MESSAGE);
+        }
+        if (StringUtils.isBlank(clientType)) {
+            return HttpResult.error(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.INVALID_REQUEST);
+        }
+        if (StringUtils.isBlank(systemType)) {
+            return HttpResult.error(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.INVALID_REQUEST);
+        }
+        if (StringUtils.isBlank(accessSpecial) && !Objects.equals(systemType, SystemTypeEnum.MANAGE.getCode())) {
+            return HttpResult.error(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.INVALID_REQUEST);
+        }
+        accessSpecial = !Objects.equals(systemType, SystemTypeEnum.MANAGE.getCode()) ? accessSpecial : null;
+        return HttpResult.ok();
+    }
+
     public static void main(String[] args) {
         Map<String, Object> tokenMap = EncryUtil.descryV2(Global.PRI_KEY, "afc3fc350d5c17e52beba3bcd631eaca9f5f440509f72b182880a429b1b9b22b53154436ec72865566320514f3a6e39389c2ed412180c90b07f6ff66c12a5e139ed05793cf37d580ae9a2a166ddd79d6b7cd10e209d78c6eee9381d878df29f7");
         System.out.println(tokenMap);

+ 9 - 2
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/Global.java

@@ -1,5 +1,8 @@
 package com.sckw.core.model.constant;
 
+import com.sckw.core.common.enums.StringConstant;
+import com.sckw.core.utils.StringUtils;
+
 /**
  * All rights Reserved, Designed By www.51wph.com
  *
@@ -285,8 +288,12 @@ public class Global {
     }
 
     /**完整的用户登录tokenkey*/
-    public static String getFullUserTokenKey(String clientType, Long userId) {
-        return REDIS_USER_TOKEN_PREFIX + clientType + COLON + userId;
+    public static String getFullUserTokenKey(String clientType, String accessSpecial, Long userId) {
+        String builder = REDIS_USER_TOKEN_PREFIX +
+                (StringUtils.isNotNull(clientType) ? clientType + COLON: null) +
+                (StringUtils.isNotNull(accessSpecial) ? accessSpecial + COLON: null) +
+                (StringUtils.isNotNull(userId) ? userId : null);
+        return builder;
     }
 
     /**完整的用户企业信息key*/

+ 3 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/EncryUtil.java

@@ -318,5 +318,8 @@ public class EncryUtil {
         String singStr = createSign(params, "xinyuan20200819");
         System.out.println("sign:" +singStr);
         System.out.println("timeStamp:" +timeStamp);
+        String token = "dade5058e78847ca5672263c5b821fc09d06083611ab0f6d076af88f082f05384838b3714729e48088c6fc1d1c09763e85e35675a20ac9df50e443b92e1c18e06f9951c7d6a2905a79b889f8617ab143fc97350b5c68f0512f7c18dbf2e49eaf";
+        Map<String, Object> tokenMap = EncryUtil.descryV2(Global.PRI_KEY, token);
+        System.out.println(tokenMap);
     }
 }

+ 7 - 6
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/constant/HttpStatus.java

@@ -9,6 +9,7 @@ public class HttpStatus {
 
     /**成功状态码*/
     public static final int SUCCESS_CODE = 60200;
+
     /**成功提示信息*/
     public static final String SUCCESS_MESSAGE = "success";
 
@@ -23,14 +24,13 @@ public class HttpStatus {
 
     /**全局异常状态码*/
     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 = "攻城狮正在拼命优化,请您稍候再试!";
 
@@ -45,6 +45,7 @@ public class HttpStatus {
     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;

+ 9 - 3
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java

@@ -3,6 +3,9 @@ package com.sckw.order.api.dubbo;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.order.api.model.*;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 /**
  * @desc: 贸易订单信息相关dubbo
  * @author: yzc
@@ -41,10 +44,13 @@ public interface TradeOrderInfoService {
      * @desc: 生成或撤销物流订单
      * @author: yzc
      * @date: 2023-08-03 10:57
-     * @Param param:
+     * @Param tOrderId: 贸易订单ID
+     * @Param unit: 单位
+     * @Param entrustAmount: 委托量
+     * @Param loading: 辅助单位信息
      * @return: com.sckw.core.web.response.HttpResult
      */
-    HttpResult createOrCancelLogisticsOrderV1(CreateOrCancelLogisticsOrderV1Param param);
+    HttpResult createOrCancelLogisticsOrderV1(Long tOrderId, List<GoodsLoadingParam> loading);
 
     /**
      * @desc: 完结物流订单
@@ -62,7 +68,7 @@ public interface TradeOrderInfoService {
      * @Param param:
      * @return: com.sckw.core.web.response.HttpResult
      */
-    HttpResult completeLogisticsOrderV1(CompleteLogisticsOrderV1Param param);
+    HttpResult completeLogisticsOrderV1(Long tOrderId, List<GoodsLoadingV1Param> loading);
 
     /**
      * @desc: 更新订单实际交付量

+ 0 - 46
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/CompleteLogisticsOrderV1Param.java

@@ -1,46 +0,0 @@
-package com.sckw.order.api.model;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
-import lombok.experimental.Accessors;
-import java.io.Serial;
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * @desc: 更新订单委托量、已履约量
- * @author: yzc
- * @date: 2023-08-03 10:52
- */
-@Getter
-@Setter
-@ToString
-@Accessors(chain = true)
-public class CompleteLogisticsOrderV1Param implements Serializable {
-    @Serial
-    private static final long serialVersionUID = 8425395587373735142L;
-
-    /**
-     * 订单id
-     */
-    @JsonProperty("tOrderId")
-    private Long tOrderId;
-
-    /**
-     * 实装变量 减少传负数,增加传正数
-     */
-    List<GoodsLoadingV1Param> loading;
-
-    /**
-     * 更新用户id 需传,订单状态变化记录需要
-     */
-    private Long updateBy;
-
-    /**
-     * 更新者姓名 需传,订单状态变化记录需要
-     */
-    private String updateByName;
-
-}

+ 0 - 48
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/CreateOrCancelLogisticsOrderV1Param.java

@@ -1,48 +0,0 @@
-package com.sckw.order.api.model;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
-import lombok.experimental.Accessors;
-
-import java.io.Serial;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.List;
-
-/**
- * @desc: 更新订单委托量、已履约量
- * @author: yzc
- * @date: 2023-08-03 10:52
- */
-@Getter
-@Setter
-@ToString
-@Accessors(chain = true)
-public class CreateOrCancelLogisticsOrderV1Param implements Serializable {
-    @Serial
-    private static final long serialVersionUID = 8425395587373735142L;
-
-    /**
-     * 订单id
-     */
-    @JsonProperty("tOrderId")
-    private Long tOrderId;
-
-    /**
-     * 任务量  生成物流订单传正数,撤销物流订单传负数
-     */
-    List<GoodsLoadingParam> loading;
-
-    /**
-     * 更新用户id 需传,订单状态变化记录需要
-     */
-    private Long updateBy;
-
-    /**
-     * 更新者姓名 需传,订单状态变化记录需要
-     */
-    private String updateByName;
-
-}

+ 8 - 2
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/GoodsLoadingParam.java

@@ -17,15 +17,21 @@ public class GoodsLoadingParam {
     private String unit;
 
     /**
-     * 装卸货数
+     * 委托
      */
     private BigDecimal amount;
 
+    /**
+     * 装卸货数量
+     */
+    private BigDecimal loadAmount;
+
     public GoodsLoadingParam() {
     }
 
-    public GoodsLoadingParam(String unit, BigDecimal amount) {
+    public GoodsLoadingParam(String unit, BigDecimal amount, BigDecimal loadAmount) {
         this.unit = unit;
         this.amount = amount;
+        this.loadAmount = loadAmount;
     }
 }

+ 20 - 22
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java

@@ -7,6 +7,7 @@ import com.google.common.collect.Lists;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.StringUtils;
+import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.mongo.model.SckwTradeOrder;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
@@ -146,12 +147,10 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
     }
 
     @Override
-    public HttpResult createOrCancelLogisticsOrderV1(CreateOrCancelLogisticsOrderV1Param param) {
+    public HttpResult createOrCancelLogisticsOrderV1(Long tOrderId, List<GoodsLoadingParam> loading) {
         /*1、数据校验*/
-        Long id = param.getTOrderId();
-        Long updateBy = param.getUpdateBy();
-        String updateByName = param.getUpdateByName();
-        List<GoodsLoadingParam> loading = param.getLoading();
+        Long updateBy = LoginUserHolder.getUserId();
+        String updateByName = LoginUserHolder.getUserName();
         if (Objects.isNull(updateBy) || StringUtils.isBlank(updateByName)) {
             return HttpResult.error("操作人信息不能为空!");
         }
@@ -165,12 +164,12 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         }
 
         /*2、数据处理*/
-        String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, id);
+        String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, tOrderId);
         if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
             return HttpResult.error("业务繁忙,请稍后再试!");
         }
         try {
-            KwoTradeOrder order = kwoTradeOrderService.getById(id);
+            KwoTradeOrder order = kwoTradeOrderService.getById(tOrderId);
             if (Objects.isNull(order)) {
                 return HttpResult.error("订单不存在!");
             }
@@ -180,16 +179,17 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
 
             //更新贸易订单/商品辅助单位
             for (GoodsLoadingParam goodsLoading:loading) {
-                BigDecimal amount = goodsLoading.getAmount();
-                BigDecimal totalEntrustAmount = Objects.isNull(order.getEntrustAmount()) ? amount : amount.add(order.getEntrustAmount());
+                //差值
+                BigDecimal differenceAmount = goodsLoading.getLoadAmount().subtract(goodsLoading.getAmount());
+                BigDecimal totalEntrustAmount = Objects.isNull(order.getEntrustAmount()) ? differenceAmount : differenceAmount.add(order.getEntrustAmount());
                 if (goodsLoading.getUnit().equals(order.getUnit())) {
-                    order.setEntrustAmount(totalEntrustAmount).setUpdateBy(param.getUpdateBy());
+                    order.setEntrustAmount(totalEntrustAmount).setUpdateBy(updateBy);
                     kwoTradeOrderService.updateById(order);
 
                     //更新mongodb
                     SckwTradeOrder updateParam = new SckwTradeOrder();
                     updateParam.setTOrderId(order.getId()).setEntrustAmount(totalEntrustAmount.doubleValue())
-                            .setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
+                            .setUpdateBy(updateBy).setUpdateByName(updateByName).setUpdateTime(new Date());
                     saveMongoDb(updateParam);
                 }
             }
@@ -245,12 +245,10 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public HttpResult completeLogisticsOrderV1(CompleteLogisticsOrderV1Param param) {
+    public HttpResult completeLogisticsOrderV1(Long tOrderId, List<GoodsLoadingV1Param> loading) {
         /*1、数据校验*/
-        Long id = param.getTOrderId();
-        Long updateBy = param.getUpdateBy();
-        String updateByName = param.getUpdateByName();
-        List<GoodsLoadingV1Param> loading = param.getLoading();
+        Long updateBy = LoginUserHolder.getUserId();
+        String updateByName = LoginUserHolder.getUserName();
         if (Objects.isNull(updateBy) || StringUtils.isBlank(updateByName)) {
             return HttpResult.error("操作人信息不能为空!");
         }
@@ -266,11 +264,11 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         }
 
         /*2、数据处理*/
-        String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, id);
+        String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, tOrderId);
         if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
             return HttpResult.error("业务繁忙,请稍后再试!");
         }
-        KwoTradeOrder order = kwoTradeOrderService.getById(id);
+        KwoTradeOrder order = kwoTradeOrderService.getById(tOrderId);
         if (Objects.isNull(order)) {
             return HttpResult.error("订单不存在!");
         }
@@ -288,17 +286,17 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
                         ? actualLoadAmount : actualUnloadAmount;
                 BigDecimal totalActualAmount = actualAmount.add(addActualAmount);
                 if (goodsLoading.getUnit().equals(order.getUnit())) {
-                    order.setActualAmount(totalActualAmount).setUpdateBy(param.getUpdateBy());
+                    order.setActualAmount(totalActualAmount).setUpdateBy(updateBy);
                     kwoTradeOrderService.updateById(order);
 
                     //更新mongodb
                     SckwTradeOrder updateParam = new SckwTradeOrder();
                     updateParam.setTOrderId(order.getId()).setActualAmount(totalActualAmount.doubleValue()).setStatus(order.getStatus())
-                            .setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
+                            .setUpdateBy(updateBy).setUpdateByName(updateByName).setUpdateTime(new Date());
                     saveMongoDb(updateParam);
                 } else {
-                    KwoTradeOrderGoodsUnit goodsUnit = tradeOrderGoodsUnitService.findByIdAndUnit(param.getTOrderId(), goodsLoading.getUnit());
-                    goodsUnit.setActualAmount(totalActualAmount).setUpdateBy(param.getUpdateBy());
+                    KwoTradeOrderGoodsUnit goodsUnit = tradeOrderGoodsUnitService.findByIdAndUnit(tOrderId, goodsLoading.getUnit());
+                    goodsUnit.setActualAmount(totalActualAmount).setUpdateBy(updateBy);
                     tradeOrderGoodsUnitService.updateById(goodsUnit);
                 }
             }

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

@@ -1258,7 +1258,7 @@ public class KwsEnterpriseService {
 
         //专场
         List<String> specialCode = kwsSpecialService.findSpecialByEntId(enterprise.getId());
-        entCacheResDto.setSpecial(String.join(Global.COMMA, specialCode));
+        entCacheResDto.setSpecial(CollectionUtils.isNotEmpty(specialCode) ? String.join(Global.COMMA, specialCode) : null);
         return entCacheResDto;
     }
 

+ 2 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtAcceptCarriageOrderController.java

@@ -341,7 +341,8 @@ public class KwtAcceptCarriageOrderController {
     public HttpResult acceptCarriageOrderFinishDetail(@RequestParam("orderId") @NotBlank(message = "数据id不能为空") String orderId) {
         log.info("承运订单-完结订单-页面数据查询 传递参数信息:{}", orderId);
         try {
-            return acceptCarriageOrderService.acceptCarriageOrderFinishDetail(orderId);
+            //return acceptCarriageOrderService.acceptCarriageOrderFinishDetail(orderId);
+            return transportCommonService.orderFinishDetail(orderId);
         } catch (Exception e) {
             log.error("承运订单-完结订单-页面数据查询 error :{}", e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());

+ 4 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtLogisticsConsignmentController.java

@@ -174,7 +174,8 @@ public class KwtLogisticsConsignmentController {
     public HttpResult selectPurchaseOrderFinish(@RequestParam("orderId") @NotBlank(message = "数据id不能为空") String orderId) {
         log.info("采购订单-托运订单列表-订单完结-数据查询 传递参数信息:{}", orderId);
         try {
-            return logisticsConsignmentService.selectOrderFinishVo(orderId, "1");
+            //return logisticsConsignmentService.selectOrderFinishVo(orderId, "1");
+            return transportCommonService.orderFinishDetail(orderId);
         } catch (Exception e) {
             log.error("采购订单-托运订单列表-订单完结-数据查询 error :{}", e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
@@ -303,7 +304,8 @@ public class KwtLogisticsConsignmentController {
     public HttpResult selectSellOrderFinish(@RequestParam("orderId") @NotBlank(message = "数据id不能为空") String orderId) {
         log.info("销售订单-托运订单列表-订单完结-数据查询 传递参数信息:{}", orderId);
         try {
-            return logisticsConsignmentService.selectOrderFinishVo(orderId, "2");
+            //return logisticsConsignmentService.selectOrderFinishVo(orderId, "2");
+            return transportCommonService.orderFinishDetail(orderId);
         } catch (Exception e) {
             log.error("销售订单-托运订单列表-订单完结-数据查询 error :{}", e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());

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

@@ -26,7 +26,7 @@ public class OrderManualCompletionDto {
     private String remark;
 
     /**
-     * 卸货信息
+     * 卸货信息
      */
     List<OrderGoodsLoadingDto> loading;
 }

+ 21 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderFinishVO.java

@@ -1,8 +1,10 @@
 package com.sckw.transport.model.vo;
 
+import com.sckw.transport.model.dto.OrderGoodsLoadingDto;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @author lfdc
@@ -11,24 +13,39 @@ import java.math.BigDecimal;
  */
 @Data
 public class OrderFinishVO {
+
     /**
      * 总运单次数
      */
     private Integer number;
 
+    /**
+     * 装卸货单位
+     */
+    private String unit;
+
+    /**
+     * 装卸货单位
+     */
+    private String unitName;
+
     /**
      * 运输
      */
     private BigDecimal amount;
 
     /**
-     * 总卸货量
+     * 装货数
      */
-    private BigDecimal unloadAmount;
+    private BigDecimal loadAmount;
 
+    /**
+     * 卸货数量
+     */
+    private BigDecimal unloadAmount;
 
     /**
-     * 总装货量
+     * 辅助单位信息
      */
-    private BigDecimal loadAmount;
+    List<OrderGoodsLoadingVo> assistUnit;
 }

+ 43 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderGoodsLoadingVo.java

@@ -0,0 +1,43 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+import java.math.BigDecimal;
+
+/**
+ * @desc 手动完结
+ * @author zk
+ * @date 2023/12/15 0015
+ */
+@Data
+public class OrderGoodsLoadingVo {
+
+    /**
+     * 装卸货单位
+     */
+    private String unit;
+
+    /**
+     * 装卸货单位
+     */
+    private String unitName;
+
+    /**
+     * 装货数量
+     */
+    private BigDecimal loadAmount;
+
+    /**
+     * 卸货数量
+     */
+    private BigDecimal unloadAmount;
+
+    public OrderGoodsLoadingVo() {
+    }
+
+    public OrderGoodsLoadingVo(String unit, String unitName, BigDecimal loadAmount, BigDecimal unloadAmount) {
+        this.unit = unit;
+        this.unitName = unitName;
+        this.loadAmount = loadAmount;
+        this.unloadAmount = unloadAmount;
+    }
+}

+ 8 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtAcceptCarriageOrderService.java

@@ -823,12 +823,14 @@ public class KwtAcceptCarriageOrderService {
                     } else {
                         if (logisticsOrder.getTOrderId() != null) {
                             /**将生成的分配量->贸易订单*/
-                            CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
+                            /*CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
                             param.setTOrderId(Long.valueOf(logisticsOrder.getTOrderId()));
                             param.setEntrustAmount(logisticsOrder.getAmount().negate());
                             param.setUpdateBy(LoginUserHolder.getUserId());
                             param.setUpdateByName(LoginUserHolder.getUserName());
-                            HttpResult result1 = tradeOrderInfoService.createOrCancelLogisticsOrder(param);
+                            HttpResult result1 = tradeOrderInfoService.createOrCancelLogisticsOrder(param);*/
+                            List<GoodsLoadingParam> goodsLoading = logisticsOrderGoodsService.goodsLoadingParams(logisticsOrder, false);
+                            HttpResult result1 = tradeOrderInfoService.createOrCancelLogisticsOrderV1(logisticsOrder.getTOrderId(), goodsLoading);
                             if (result1.getCode() != HttpStatus.SUCCESS_CODE) {
                                 log.info("{}拒绝接单->贸易订单失败!,返回信息:{}", "id:" + logisticsOrder.getTOrderId() + "orderNo" + logisticsOrder.getTOrderNo(), JSONObject.toJSONString(result1));
                                 throw new BusinessException("{" + logisticsOrder.getTOrderNo() + "} 拒绝接单->贸易订单失败!");
@@ -1548,12 +1550,14 @@ public class KwtAcceptCarriageOrderService {
                     }
 
                     /**将生成的分配量->贸易订单*/
-                    CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
+                    /*CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
                     param.setTOrderId(logisticsOrder.getTOrderId());
                     param.setEntrustAmount(orderFinishDTO.getLoadAmount().subtract(logisticsOrder.getAmount()));
                     param.setUpdateBy(LoginUserHolder.getUserId());
                     param.setUpdateByName(LoginUserHolder.getUserName());
-                    HttpResult result1 = tradeOrderInfoService.createOrCancelLogisticsOrder(param);
+                    HttpResult result1 = tradeOrderInfoService.createOrCancelLogisticsOrder(param);*/
+                    List<GoodsLoadingParam> goodsLoading = logisticsOrderGoodsService.goodsLoadingParams(logisticsOrder, true);
+                    HttpResult result1 = tradeOrderInfoService.createOrCancelLogisticsOrderV1(logisticsOrder.getTOrderId(), goodsLoading);
                     if (result1.getCode() != HttpStatus.SUCCESS_CODE) {
                         log.info("{}拒绝接单->贸易订单失败!,返回信息:{}", "id:" + logisticsOrder.getTOrderId() + "orderNo" + logisticsOrder.getTOrderNo(), JSONObject.toJSONString(result1));
                         throw new BusinessException("{" + logisticsOrder.getTOrderNo() + "} 拒绝接单->贸易订单失败!" + result1.getMsg());

+ 26 - 10
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtConsignOrderService.java

@@ -33,10 +33,7 @@ import com.sckw.mongo.model.SckwLogisticsOrder;
 import com.sckw.mongo.model.SckwWaybillOrder;
 import com.sckw.mongo.model.TableTops;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
-import com.sckw.order.api.model.CompleteLogisticsOrderParam;
-import com.sckw.order.api.model.CreateOrCancelLogisticsOrderParam;
-import com.sckw.order.api.model.OrderDetailRes;
-import com.sckw.order.api.model.UnitInfoDetailRes;
+import com.sckw.order.api.model.*;
 import com.sckw.payment.api.dubbo.PaymentDubboService;
 import com.sckw.payment.api.model.dto.SettlementMoney;
 import com.sckw.redis.config.RedisLockUtil;
@@ -940,12 +937,15 @@ public class KwtConsignOrderService {
                         throw new BusinessException("单据完结出现错误!" + httpResult.getMsg());
                     }
 
-                    CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
+                    /**将生成的分配量->贸易订单*/
+                    /*CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
                     param.setTOrderId(logisticsOrder.getTOrderId());
                     param.setEntrustAmount(orderFinishDTO.getLoadAmount().subtract(logisticsOrder.getAmount()));
                     param.setUpdateBy(LoginUserHolder.getUserId());
                     param.setUpdateByName(LoginUserHolder.getUserName());
-                    HttpResult result1 = tradeOrderInfoService.createOrCancelLogisticsOrder(param);
+                    HttpResult result1 = tradeOrderInfoService.createOrCancelLogisticsOrder(param);*/
+                    List<GoodsLoadingParam> goodsLoading = logisticsOrderGoodsService.goodsLoadingParams(logisticsOrder, true);
+                    HttpResult result1 = tradeOrderInfoService.createOrCancelLogisticsOrderV1(logisticsOrder.getTOrderId(), goodsLoading);
                     if (result1.getCode() != HttpStatus.SUCCESS_CODE) {
                         log.info("托运订单手动完结订单-完结订单,返回信息:{}", "id:" + logisticsOrder.getTOrderId() + "orderNo" + logisticsOrder.getTOrderNo(), JSONObject.toJSONString(result1));
                         throw new BusinessException("{" + logisticsOrder.getTOrderNo() + "} 托运订单手动完结订单-完结订单!" + result1.getMsg());
@@ -1261,17 +1261,33 @@ public class KwtConsignOrderService {
      * @return
      */
     public HttpResult consignOrderFinishDetail(String orderId) {
-        OrderFinishVO finishVO = kwtLogisticsOrderMapper.selectOrderFinishData(orderId);
         Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN){{
             put("upperlOrderId", orderId);
             put("passStatus", Global.NUMERICAL_ONE);
         }};
         WaybillCountVo waybillOrderCount = kwtWaybillOrderMapper.findWaybillOrderCount(map);
         OrderFinishVO orderFinishVO = new OrderFinishVO();
-        orderFinishVO.setLoadAmount(waybillOrderCount == null ? NumberConstant.ZERO_TWO : waybillOrderCount.getLoadAmount());
-        orderFinishVO.setUnloadAmount(waybillOrderCount == null ? NumberConstant.ZERO_TWO : waybillOrderCount.getUnloadAmount());
+        List<OrderGoodsLoadingVo> assistUnit = new ArrayList<>();
+        //单位
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.UNIT_TYPE.getType()));
+        Map<String, String> unitMap = dict != null ? dict.get(DictTypeEnum.UNIT_TYPE.getType()) : null;
+        //物流订单
+        KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderMapper.selectById(orderId);
+        //物流订单辅助单位信息
+        List<KwtLogisticsOrderGoodsUnit> goodsUnits = logisticsOrderGoodsService.findGoodsUnit(logisticsOrder.getId());
+        if (CollectionUtils.isNotEmpty(goodsUnits)) {
+            goodsUnits.forEach(e ->{
+                assistUnit.add(new OrderGoodsLoadingVo(e.getUnit(), unitMap != null ? unitMap.get(e.getUnit()) : null, e.getTotalLoadAmount(), e.getTotalUnloadAmount()));
+            });
+        }
+
         orderFinishVO.setNumber(waybillOrderCount == null ? NumberConstant.ZERO : waybillOrderCount.getTotalComplete());
-        orderFinishVO.setAmount(finishVO.getAmount());
+        orderFinishVO.setUnit(logisticsOrder.getUnit());
+        orderFinishVO.setUnitName(unitMap != null ? unitMap.get(logisticsOrder.getUnit()) : null);
+        orderFinishVO.setAmount(logisticsOrder.getAmount());
+        orderFinishVO.setLoadAmount(logisticsOrder.getTotalLoadAmount());
+        orderFinishVO.setUnloadAmount(logisticsOrder.getTotalUnloadAmount());
+        orderFinishVO.setAssistUnit(assistUnit);
         return HttpResult.ok(orderFinishVO);
     }
 

+ 16 - 9
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -255,12 +255,14 @@ public class KwtLogisticsConsignmentService {
         sendMongoDB(lOrderNo, orderId, bo, tradeOrder, orderStatus);
 
         /**将生成的分配量->贸易订单*/
-        CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
+        /*CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
         param.setTOrderId(Long.valueOf(bo.getTOrderId()));
         param.setEntrustAmount(bo.getCarryingCapacity());
         param.setUpdateBy(LoginUserHolder.getUserId());
         param.setUpdateByName(LoginUserHolder.getUserName());
-        HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrder(param);
+        //HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrder(param);*/
+        List<GoodsLoadingParam> goodsLoading = logisticsOrderGoodsService.goodsLoadingParams(order, true);
+        HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(order.getTOrderId(), goodsLoading);
         if (httpResult.getCode() != HttpStatus.SUCCESS_CODE) {
             log.info("{}生成物流托运失败!,返回信息:{}", tradeOrder.getTOrderNo(), JSONObject.toJSONString(httpResult));
             throw new BusinessException("{" + tradeOrder.getTOrderNo() + "}生成物流托运失败!" + httpResult.getMsg());
@@ -1178,13 +1180,15 @@ public class KwtLogisticsConsignmentService {
             return result;
         } else {
             /**撤退推送接口数据溯源修改贸易订单已委托量*/
-            CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
+            /*CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
             param.setTOrderId(kwtLogisticsOrder.getTOrderId());
             param.setEntrustAmount(kwtLogisticsOrder.getAmount().negate());
             param.setUpdateBy(LoginUserHolder.getUserId());
             param.setUpdateByName(LoginUserHolder.getUserName());
-            HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrder(param);
-            log.info("销售订单撤销托运-溯源贸易订单请求数据:{},返回数据:{}", JSONObject.toJSONString(param), JSONObject.toJSONString(httpResult));
+            HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrder(param);*/
+            List<GoodsLoadingParam> goodsLoading = logisticsOrderGoodsService.goodsLoadingParams(kwtLogisticsOrder, false);
+            HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(kwtLogisticsOrder.getTOrderId(), goodsLoading);
+            log.info("销售订单撤销托运-溯源贸易订单请求数据:{}[],返回数据:{}", kwtLogisticsOrder.getTOrderId(), JSONObject.toJSONString(goodsLoading), JSONObject.toJSONString(httpResult));
             if (HttpStatus.SUCCESS_CODE == httpResult.getCode()) {
 //                    kwtLogisticsOrder.setDelFlag(NumberConstant.ONE);
                 kwtLogisticsOrder.setUpdateTime(new Date());
@@ -1279,13 +1283,16 @@ public class KwtLogisticsConsignmentService {
             return result;
         } else {
             /**撤退推送接口数据溯源修改贸易订单已委托量*/
-            CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
+            /*CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
             param.setTOrderId(kwtLogisticsOrder.getTOrderId());
             param.setEntrustAmount(kwtLogisticsOrder.getAmount().negate());
             param.setUpdateBy(LoginUserHolder.getUserId());
             param.setUpdateByName(LoginUserHolder.getUserName());
-            HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrder(param);
-            log.info("采购订单撤销托运-溯源贸易订单请求数据:{},返回数据:{}", JSONObject.toJSONString(param), JSONObject.toJSONString(httpResult));
+            HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrder(param);*/
+            List<GoodsLoadingParam> goodsLoading = logisticsOrderGoodsService.goodsLoadingParams(kwtLogisticsOrder, false);
+            HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(kwtLogisticsOrder.getTOrderId(), goodsLoading);
+
+            log.info("采购订单撤销托运-溯源贸易订单请求数据:{}[],返回数据:{}", kwtLogisticsOrder.getTOrderId(), JSONObject.toJSONString(goodsLoading), JSONObject.toJSONString(httpResult));
             if (HttpStatus.SUCCESS_CODE == httpResult.getCode()) {
 //                    kwtLogisticsOrder.setDelFlag(NumberConstant.ONE);
 //                    kwtLogisticsOrder.setUpdateTime(new Date());
@@ -1491,7 +1498,7 @@ public class KwtLogisticsConsignmentService {
         param.setEntrustAmount(orderFinishDTO.getLoadAmount().subtract(logisticsOrder.getAmount()));
         param.setUpdateBy(LoginUserHolder.getUserId());
         param.setUpdateByName(LoginUserHolder.getUserName());
-        HttpResult result1 = tradeOrderInfoService.createOrCancelLogisticsOrder(param);
+        HttpResult result1 = null;//tradeOrderInfoService.createOrCancelLogisticsOrder(param);
         if (result1.getCode() != HttpStatus.SUCCESS_CODE) {
             log.info("采购订单/销售订单完结订单,返回信息:{}", "id:" + logisticsOrder.getTOrderId() + "orderNo" + logisticsOrder.getTOrderNo(), JSONObject.toJSONString(result1));
             throw new BusinessException("{" + logisticsOrder.getTOrderNo() + "} 采购订单/销售订单完结订单失败!" + result1.getMsg());

+ 91 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderGoodsService.java

@@ -8,6 +8,7 @@ import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.order.api.model.GoodsLoadingParam;
 import com.sckw.order.api.model.OrderDetailRes;
 import com.sckw.transport.dao.KwtLogisticsOrderGoodsMapper;
 import com.sckw.transport.dao.KwtLogisticsOrderGoodsUnitMapper;
@@ -250,12 +251,14 @@ public class KwtLogisticsOrderGoodsService {
             for (GoodsUnitParam goodsUnit:assistUnit) {
                 BigDecimal conversionValue = goodsUnit.getConversionValue();
                 if (logisticsOrder.getCarryingCapacityUnit().equals(goodsUnit.getFromUnit())) {
-                    if (amount.compareTo(arryingCapacity.multiply(conversionValue)) >= 0) {
+                    BigDecimal value = arryingCapacity.multiply(conversionValue);
+                    if (amount.compareTo(value) >= 0) {
                         return true;
                     }
                 }
                 if (logisticsOrder.getCarryingCapacityUnit().equals(goodsUnit.getToUnit())) {
-                    if (amount.compareTo(arryingCapacity.divide(conversionValue)) >= 0) {
+                    BigDecimal value = arryingCapacity.divide(conversionValue);
+                    if (amount.compareTo(value) >= 0) {
                         return true;
                     }
                 }
@@ -277,4 +280,90 @@ public class KwtLogisticsOrderGoodsService {
         }});
         return BeanUtils.copyToList(assistUnit, GoodsUnitVo.class);
     }
+
+    /**
+     * 获取物流订单辅助单位信息
+     * @param lOrderId 物流订单
+     * @return 辅助单位信息
+     */
+    public List<KwtLogisticsOrderGoodsUnit> findGoodsUnit(Long lOrderId) {
+        //辅助单位
+        List<KwtLogisticsOrderGoodsUnit> assistUnit = goodsUnitMapper.findGoodsUnit(new HashMap<>(NumberConstant.SIXTEEN){{
+            put("lOrderId", lOrderId);
+        }});
+        return assistUnit;
+    }
+
+    /**
+     * 贸易订单参数处理-物流订单完结
+     * @param logisticsOrder 物流订单
+     * @param loading 装载信息
+     * @return 贸易订单
+     */
+    public List<GoodsLoadingParam> goodsLoadingParams(KwtLogisticsOrder logisticsOrder, List<OrderGoodsLoadingDto> loading) {
+        List<GoodsLoadingParam> loadingParams = new ArrayList<>();
+        //辅助单位
+        List<KwtLogisticsOrderGoodsUnit> assistUnit = goodsUnitMapper.findGoodsUnit(new HashMap<>(NumberConstant.SIXTEEN){{
+            put("lOrderId", logisticsOrder.getId());
+        }});
+        //数据处理
+        if (CollectionUtils.isNotEmpty(loading)) {
+            loading.forEach(e -> {
+                BigDecimal loadAmount = e.getLoadAmount();
+                if (e.getUnit().equals(logisticsOrder.getUnit())) {
+                    loadingParams.add(new GoodsLoadingParam(e.getUnit(), logisticsOrder.getAmount(), loadAmount));
+                } else {
+                    if (CollectionUtils.isNotEmpty(assistUnit)) {
+                        assistUnit.forEach(ee -> {
+                            BigDecimal conversionValue = ee.getConversionValue();
+                            if (e.getUnit().equals(ee.getFromUnit())) {
+                                BigDecimal value = loadAmount.multiply(conversionValue);
+                                loadingParams.add(new GoodsLoadingParam(e.getUnit(), value, loadAmount));
+                            }
+                            if (e.getUnit().equals(ee.getToUnit())) {
+                                BigDecimal value = loadAmount.divide(conversionValue);
+                                loadingParams.add(new GoodsLoadingParam(e.getUnit(), value, loadAmount));
+                            }
+                        });
+                    }
+                }
+            });
+        }
+        return loadingParams;
+    }
+
+    /**
+     * 贸易订单参数处理-物流订单撤销/物流委托
+     * @param logisticsOrder 物流订单
+     * @param operator 运算符正负,贸易订单加减(true 正、false 减)
+     * @return 贸易订单
+     */
+    public List<GoodsLoadingParam> goodsLoadingParams(KwtLogisticsOrder logisticsOrder, boolean operator) {
+        List<GoodsLoadingParam> loadingParams = new ArrayList<>();
+        //辅助单位
+        List<KwtLogisticsOrderGoodsUnit> assistUnit = goodsUnitMapper.findGoodsUnit(new HashMap<>(NumberConstant.SIXTEEN){{
+            put("lOrderId", logisticsOrder.getId());
+        }});
+        //住单位
+        BigDecimal amount = logisticsOrder.getAmount();
+        loadingParams.add(new GoodsLoadingParam(logisticsOrder.getUnit(), operator ? amount : amount.negate(), logisticsOrder.getTotalLoadAmount()));
+
+        //数据处理
+        if (CollectionUtils.isNotEmpty(assistUnit)) {
+            assistUnit.forEach(ee -> {
+                BigDecimal loadAmount = ee.getTotalLoadAmount();
+                BigDecimal conversionValue = ee.getConversionValue();
+                if (ee.getUnit().equals(ee.getFromUnit())) {
+                    BigDecimal value = loadAmount.multiply(conversionValue);
+                    loadingParams.add(new GoodsLoadingParam(ee.getUnit(), operator ? value : value.negate(), loadAmount));
+                }
+                if (ee.getUnit().equals(ee.getToUnit())) {
+                    BigDecimal value = loadAmount.divide(conversionValue);
+                    loadingParams.add(new GoodsLoadingParam(ee.getUnit(), operator ? value : value.negate(), loadAmount));
+                }
+            });
+        }
+        return loadingParams;
+    }
+
 }

+ 51 - 32
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtTransportCommonService.java

@@ -343,8 +343,8 @@ public class KwtTransportCommonService {
     /**
      * 撤销托运
      *
-     * @param orderDto
-     * @return
+     * @param orderDto 请求参数
+     * @return 处理结果
      */
     @Transactional(rollbackFor = Exception.class)
     public HttpResult cancelConsign(CancelOrderDTO orderDto) {
@@ -371,15 +371,10 @@ public class KwtTransportCommonService {
                 if (ObjectUtils.isEmpty(logisticsOrder.getPid()) && "1".equals(logisticsOrder.getType())) {
                     /**并不存在分包,撤销数据回归到贸易订单,[待接单状态]下才能撤销托运*/
                     /**调用dubbo 修改数值*/
-                    Long tOrderId = logisticsOrder.getTOrderId();
-                    CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
-                    param.setEntrustAmount(logisticsOrder.getAmount().negate());
-                    param.setUpdateBy(LoginUserHolder.getUserId());
-                    param.setUpdateByName(LoginUserHolder.getUserName());
-                    param.setTOrderId(tOrderId);
-                    HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrder(param);
+                    List<GoodsLoadingParam> goodsLoading = logisticsOrderGoodsService.goodsLoadingParams(logisticsOrder, false);
+                    HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(logisticsOrder.getTOrderId(), goodsLoading);
                     if (HttpStatus.SUCCESS_CODE != httpResult.getCode()) {
-                        log.info("撤销托运错误:,请求参数:{},响应信息:{}", JSONObject.toJSONString(param), JSONObject.toJSONString(httpResult));
+                        log.info("撤销托运错误:,请求参数:{}{},响应信息:{}", logisticsOrder.getTOrderId(), JSONObject.toJSONString(goodsLoading), JSONObject.toJSONString(httpResult));
                     }
                     logisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
                             .eq(KwtLogisticsOrder::getId, logisticsOrder.getId())
@@ -503,9 +498,9 @@ public class KwtTransportCommonService {
     /**
      * 根据物流订单修改物流状态表
      *
-     * @param id
-     * @param remark
-     * @param logisticsOrderEnum
+     * @param id 物流订单ID
+     * @param remark 备注
+     * @param logisticsOrderEnum 物流订单昨天枚举
      */
     private void updateOrderTrack(Long id, String remark, LogisticsOrderEnum logisticsOrderEnum) {
         KwtLogisticsOrderTrack orderTrack = logisticsOrderTrackMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderTrack>()
@@ -795,6 +790,42 @@ public class KwtTransportCommonService {
         return HttpResult.ok(build);
     }
 
+    /**
+     * 托运订单(自建、采购、贸易)/承运订单(自建、托运)-完结订单-数据查询展示
+     * @param orderId 物流订单id
+     * @return 数据
+     */
+    public HttpResult orderFinishDetail(String orderId) {
+        Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN){{
+            put("upperlOrderId", orderId);
+            put("passStatus", Global.NUMERICAL_ONE);
+        }};
+        WaybillCountVo waybillOrderCount = waybillOrderMapper.findWaybillOrderCount(map);
+        OrderFinishVO orderFinishVO = new OrderFinishVO();
+        List<OrderGoodsLoadingVo> assistUnit = new ArrayList<>();
+        //单位
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.UNIT_TYPE.getType()));
+        Map<String, String> unitMap = dict != null ? dict.get(DictTypeEnum.UNIT_TYPE.getType()) : null;
+        //物流订单
+        KwtLogisticsOrder logisticsOrder = logisticsOrderMapper.selectById(orderId);
+        //物流订单辅助单位信息
+        List<KwtLogisticsOrderGoodsUnit> goodsUnits = logisticsOrderGoodsService.findGoodsUnit(logisticsOrder.getId());
+        if (CollectionUtils.isNotEmpty(goodsUnits)) {
+            goodsUnits.forEach(e ->{
+                assistUnit.add(new OrderGoodsLoadingVo(e.getUnit(), unitMap != null ? unitMap.get(e.getUnit()) : null, e.getTotalLoadAmount(), e.getTotalUnloadAmount()));
+            });
+        }
+
+        orderFinishVO.setNumber(waybillOrderCount == null ? NumberConstant.ZERO : waybillOrderCount.getTotalComplete());
+        orderFinishVO.setUnit(logisticsOrder.getUnit());
+        orderFinishVO.setUnitName(unitMap != null ? unitMap.get(logisticsOrder.getUnit()) : null);
+        orderFinishVO.setAmount(logisticsOrder.getAmount());
+        orderFinishVO.setLoadAmount(logisticsOrder.getTotalLoadAmount());
+        orderFinishVO.setUnloadAmount(logisticsOrder.getTotalUnloadAmount());
+        orderFinishVO.setAssistUnit(assistUnit);
+        return HttpResult.ok(orderFinishVO);
+    }
+
     /**
      * @param params 手动完结参数
      * @desc 完结物流订单-采购/销售/托运/承运
@@ -862,35 +893,23 @@ public class KwtTransportCommonService {
                 /**是否是一级订单,是->推送至贸易*/
                 if (logisticsOrder.getPid() == null && "1".equals(logisticsOrder.getType())) {
                     List<GoodsLoadingV1Param> loadings = new ArrayList<>();
-                    List<GoodsLoadingParam> createOrCancelLoading = new ArrayList<>();
                     List<OrderGoodsLoadingDto> loading = params.getLoading();
                     loading.forEach(e ->{
                         loadings.add(new GoodsLoadingV1Param(e.getUnit(), e.getLoadAmount(), e.getUnloadAmount()));
-                        createOrCancelLoading.add(new GoodsLoadingParam(e.getUnit(), e.getLoadAmount()));
                     });
                     //数据推送至贸易订单-更新总装卸货量
-                    CompleteLogisticsOrderV1Param tradeOrder = new CompleteLogisticsOrderV1Param();
-                    tradeOrder.setTOrderId(logisticsOrder.getTOrderId());
-                    tradeOrder.setLoading(loadings);
-                    tradeOrder.setUpdateBy(LoginUserHolder.getUserId());
-                    tradeOrder.setUpdateByName(LoginUserHolder.getUserName());
-                    log.info("托运订单手动完结请求参数:{}", JSONObject.toJSONString(tradeOrder));
-                    HttpResult httpResult = tradeOrderInfoService.completeLogisticsOrderV1(tradeOrder);
+                    HttpResult httpResult = tradeOrderInfoService.completeLogisticsOrderV1(logisticsOrder.getTOrderId(), loadings);
                     if (httpResult.getCode() != HttpStatus.SUCCESS_CODE) {
-                        log.info("贸易订单手动完结订单异常,传递信息:{},返回信息:{}", JSONObject.toJSONString(tradeOrder), JSONObject.toJSONString(httpResult));
+                        log.info("贸易订单手动完结订单异常,传递信息:{}{},返回信息:{}", logisticsOrder.getTOrderId(), loadings, JSONObject.toJSONString(httpResult));
                         throw new BusinessException("单据完结出现错误!" + httpResult.getMsg());
                     }
 
                     //数据推送至贸易订单-更新时间装货量
-                    CreateOrCancelLogisticsOrderV1Param param = new CreateOrCancelLogisticsOrderV1Param();
-                    param.setTOrderId(logisticsOrder.getTOrderId());
-                    param.setLoading(createOrCancelLoading);
-                    param.setUpdateBy(LoginUserHolder.getUserId());
-                    param.setUpdateByName(LoginUserHolder.getUserName());
-                    HttpResult result1 = tradeOrderInfoService.createOrCancelLogisticsOrderV1(param);
-                    if (result1.getCode() != HttpStatus.SUCCESS_CODE) {
-                        log.info("托运订单手动完结订单-完结订单,返回信息:{}", "id:" + logisticsOrder.getTOrderId() + "orderNo" + logisticsOrder.getTOrderNo(), JSONObject.toJSONString(result1));
-                        throw new BusinessException("{" + logisticsOrder.getTOrderNo() + "} 托运订单手动完结订单-完结订单!" + result1.getMsg());
+                    List<GoodsLoadingParam> goodsLoading = logisticsOrderGoodsService.goodsLoadingParams(logisticsOrder, loading);
+                    httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(logisticsOrder.getTOrderId(), goodsLoading);
+                    if (httpResult.getCode() != HttpStatus.SUCCESS_CODE) {
+                        log.info("托运订单手动完结订单-完结订单,传递信息:{},返回信息:{}", "id:" + logisticsOrder.getTOrderId() + "orderNo" + logisticsOrder.getTOrderNo(), JSONObject.toJSONString(httpResult));
+                        throw new BusinessException("{" + logisticsOrder.getTOrderNo() + "} 托运订单手动完结订单-完结订单!" + httpResult.getMsg());
                     }
                 }
 

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

@@ -2180,7 +2180,7 @@ public class KwtWaybillOrderService {
         result.put("loadUrls", loadTicket != null ? FileUtils.spliceBatch(loadTicket.getUrls()) : null);
         result.put("loadOperateTime", loadTicket != null ? DateUtil.dateTimeFormatter(loadTicket.getOperateTime()) : null);
         result.put("loadCreateTime", loadTicket != null ? DateUtil.dateTimeFormatter(loadTicket.getCreateTime()) : null);
-        result.put("loadCreateByName", usersMap.get(loadTicket.getUpdateBy()));
+        result.put("loadCreateByName", loadTicket != null ? usersMap.get(loadTicket.getUpdateBy()) : null);
         result.put("loadCityName", loadAddress != null ? loadAddress.getCityName() : null);
         result.put("loadDetailAddress", loadAddress != null ? loadAddress.getDetailAddress() : null);
         result.put("unloadStatus", loadTicket != null ? 0 : 1);