Sfoglia il codice sorgente

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

# Conflicts:
#	sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/RemoteFleetService.java
#	sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTicket.java
#	sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderTicketRepository.java
donglang 1 mese fa
parent
commit
1f8b340c5c
84 ha cambiato i file con 2849 aggiunte e 568 eliminazioni
  1. 1 1
      pom.xml
  2. 16 0
      sckw-auth/src/main/java/com/sckw/auth/controller/AuthController.java
  3. 37 0
      sckw-auth/src/main/java/com/sckw/auth/model/vo/req/RoleChangeVo.java
  4. 2 0
      sckw-auth/src/main/java/com/sckw/auth/service/IAuthService.java
  5. 32 3
      sckw-auth/src/main/java/com/sckw/auth/service/impl/AuthServiceImpl.java
  6. 105 0
      sckw-auth/src/main/java/com/sckw/auth/service/impl/UserService.java
  7. 1 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillV1Enum.java
  8. 16 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/DateTimeUtil.java
  9. 1 0
      sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/constant/RedisConstant.java
  10. 1 1
      sckw-common/sckw-common-remote/src/main/java/com/sckw/remote/annotation/SckwRemoteApplication.java
  11. 17 1
      sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/RemoteContractService.java
  12. 36 0
      sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/vo/GoodsInfoDto.java
  13. 19 0
      sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/vo/TradeContractGoodsDto.java
  14. 85 0
      sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/vo/TradeContractResDto.java
  15. 44 0
      sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/vo/TradeContractUnitDto.java
  16. 3 0
      sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/RemoteFleetService.java
  17. 6 1
      sckw-modules-api/sckw-modules-bom/pom.xml
  18. 1 0
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/dubbo/GoodsInfoService.java
  19. 1 0
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/RemoteSystemService.java
  20. 26 5
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/RemoteUserService.java
  21. 17 4
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportRemoteService.java
  22. 300 0
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/param/AddLogisticOrderParam.java
  23. 22 0
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/param/OrderFinishParam.java
  24. 24 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcContractSaleController.java
  25. 19 7
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dao/KwcContractTradeMapper.java
  26. 53 142
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dubbo/RemoteContractServiceImpl.java
  27. 4 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/dto/res/QueryListResDto.java
  28. 5 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTrade.java
  29. 0 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/LogisticListReq.java
  30. 8 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/QueryLogisticListReq.java
  31. 5 3
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/QueryListResVo.java
  32. 6 2
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsRepository.java
  33. 6 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsUnitRepository.java
  34. 22 2
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeRepository.java
  35. 34 14
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractLogisticsService.java
  36. 302 73
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractTradeService.java
  37. 132 42
      sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractTradeMapper.xml
  38. 34 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dubbo/RemoteFleetServiceImpl.java
  39. 4 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/QueryFleetReq.java
  40. 4 2
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetRepository.java
  41. 9 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetTruckRepository.java
  42. 31 3
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfFleetService.java
  43. 5 1
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/controller/KwmAddressController.java
  44. 10 7
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/model/vo/req/QueryByEntReqVo.java
  45. 0 3
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmAddressService.java
  46. 45 56
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmCooperateManageService.java
  47. 1 1
      sckw-modules/sckw-message/pom.xml
  48. 5 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/TradeOrderManageService.java
  49. 15 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/dubbo/GoodsInfoServiceImpl.java
  50. 1 1
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/GoodsInfoReq.java
  51. 8 1
      sckw-modules/sckw-product/src/main/java/com/sckw/product/repository/KwpGoodsRepository.java
  52. 2 1
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java
  53. 2 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsEnterpriseController.java
  54. 13 2
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsRoleController.java
  55. 20 3
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dubbo/RemoteSystemServiceImpl.java
  56. 13 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dubbo/RemoteUserServiceImpl.java
  57. 1 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/pojo/FindEntListPojo.java
  58. 1 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/EntRegisterReqVo.java
  59. 6 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/KwsEntTypeRepository.java
  60. 38 52
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java
  61. 18 8
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsRoleService.java
  62. 5 5
      sckw-modules/sckw-system/src/main/resources/mapper/KwsEnterpriseDao.xml
  63. 94 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/config/OpenApiConfig.java
  64. 2 8
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtLogisticsOrderController.java
  65. 96 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java
  66. 0 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderAddress.java
  67. 9 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTicket.java
  68. 1 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTrack.java
  69. 298 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/AddLogisticOrderDTO.java
  70. 5 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderReq.java
  71. 20 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderResp.java
  72. 3 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/CapacityReq.java
  73. 12 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/ReviewWaybillOrderReq.java
  74. 5 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderCirculateRepository.java
  75. 10 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderGoodsRepository.java
  76. 4 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java
  77. 4 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderSubtaskRepository.java
  78. 27 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderTicketRepository.java
  79. 231 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtAcceptCarriageOrderService.java
  80. 60 30
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  81. 217 49
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java
  82. 5 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java
  83. 20 0
      sckw-modules/sckw-transport/src/main/resources/bootstrap.yml
  84. 26 1
      sql/2025/11/30/2025_11_30_cxf_alert.sql

+ 1 - 1
pom.xml

@@ -396,7 +396,7 @@
             </activation>
             <properties>
                 <profiles.active>test</profiles.active>
-                <nacos.server>10.10.10.230:8848</nacos.server>
+                <nacos.server>10.10.10.224:8848</nacos.server>
                 <nacos.namespace>sckw-ng-service-platform</nacos.namespace>
             </properties>
         </profile>

+ 16 - 0
sckw-auth/src/main/java/com/sckw/auth/controller/AuthController.java

@@ -47,6 +47,22 @@ public class AuthController {
         return authService.login(loginBase);
     }
 
+    /**
+     * 切换角色
+     *
+     * @param reqVo
+     * @return
+     */
+    @PostMapping("/changeRole")
+    public HttpResult changeRole(@Valid @RequestBody RoleChangeVo reqVo, HttpServletRequest request) {
+        int systemType = request.getIntHeader("System-Type");
+        String clientType = request.getHeader("Client-Type");
+
+        reqVo.setSystemType(systemType);
+        reqVo.setClientType(clientType);
+        return authService.changeRole(reqVo);
+    }
+
     /**
      * @return HttpResult
      * @desc: 根据token获取登录信息

+ 37 - 0
sckw-auth/src/main/java/com/sckw/auth/model/vo/req/RoleChangeVo.java

@@ -0,0 +1,37 @@
+package com.sckw.auth.model.vo.req;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author czh
+ * @desc 登录接口入参
+ * @date 2023/6/12
+ */
+@Data
+public class RoleChangeVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -6021472117198868910L;
+
+    /**
+     * 角色id
+     */
+    @NotNull(message = "角色id不能为空")
+    private Long roleId;
+    @NotNull(message = "企业id不能为空")
+    private Long entId;
+
+    /**
+     * 系统类型(1 运营管理中心/2 运营管理中心/3 司机应用/4 官网)
+     */
+    private int systemType;
+
+    /**
+     * 客户端类型(ios 苹果设备/android 安卓设备/pc 浏览器/pc-background 管理系统)
+     */
+    private String clientType;
+}

+ 2 - 0
sckw-auth/src/main/java/com/sckw/auth/service/IAuthService.java

@@ -51,4 +51,6 @@ public interface IAuthService {
      * @date: 2023/9/27
      */
     LoginResVo1 getLoginResByToken(String clientType, String token);
+
+    HttpResult changeRole(RoleChangeVo reqVo);
 }

+ 32 - 3
sckw-auth/src/main/java/com/sckw/auth/service/impl/AuthServiceImpl.java

@@ -4,7 +4,7 @@ import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSON;
 import com.sckw.auth.model.vo.req.ForgetPasswordReqVo;
 import com.sckw.auth.model.vo.req.LoginBase;
-import com.sckw.auth.model.vo.req.RegisterReqVo;
+import com.sckw.auth.model.vo.req.RoleChangeVo;
 import com.sckw.auth.model.vo.res.LoginResVo;
 import com.sckw.auth.model.vo.res.LoginResVo1;
 import com.sckw.auth.service.IAuthService;
@@ -28,14 +28,12 @@ import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.RemoteUserService;
 import com.sckw.system.api.model.dto.req.ForgetPasswordReqDto;
-import com.sckw.system.api.model.dto.req.RegisterReqDto;
 import com.sckw.system.api.model.dto.req.UserLoginReqDto;
 import com.sckw.system.api.model.dto.res.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.redisson.api.RSet;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -407,6 +405,35 @@ public class AuthServiceImpl implements IAuthService {
         return loginRes;
     }
 
+    @Override
+    public HttpResult changeRole(RoleChangeVo reqVo) {
+        KwsUserResDto user = systemService.queryUserDetails(LoginUserHolder.getAccount(), LoginUserHolder.getSystemType());
+
+        /*信息校验**/
+        if (user == null) {
+            return HttpResult.error(HttpStatus.QUERY_FAIL_CODE, "账号不存在,请检查并重新输入!");
+        }
+
+        if (user.getStatus() == Global.YES) {
+            return HttpResult.error(HttpStatus.CODE_10301, "您的账号已冻结,如需帮助,请致电平台客服!");
+        }
+
+        //企业信息
+        EntCacheResDto enterprise = systemService.queryEntDetails(reqVo.getEntId());
+        if (Objects.equals(LoginUserHolder.getSystemType(), SystemTypeEnum.COMPANY.getCode())) {
+            if (enterprise == null) {
+                return HttpResult.error(HttpStatus.QUERY_FAIL_CODE, "账号没有归属企业,请检查并重新输入!");
+            }
+        }
+        if (enterprise != null && enterprise.getStatus() == Global.YES) {
+            return HttpResult.error(HttpStatus.QUERY_FAIL_CODE, "企业已冻结,如需帮助,请致电平台客服!");
+        }
+
+        UserService userService = new UserService(reqVo, user, enterprise, remoteUserService);
+        userService.run();
+        return HttpResult.ok("切换成功,请刷新菜单");
+    }
+
     /**
      * @param loginBase {}
      * @param userId    用户ID
@@ -526,6 +553,8 @@ public class AuthServiceImpl implements IAuthService {
             loginUserInfo.setStatus(user.getStatus());
             loginUserInfo.setIsMain(user.getIsMain());
             loginUserInfo.setEntId(user.getEntId());
+            loginUserInfo.setUseRoleId(user.getRoleId());
+            loginUserInfo.setUseEntId(user.getEntId());
             loginUserInfo.setEntName(enterprise != null ? enterprise.getFirmName() : null);
 
             //普通用户需要填充数据权限

+ 105 - 0
sckw-auth/src/main/java/com/sckw/auth/service/impl/UserService.java

@@ -0,0 +1,105 @@
+package com.sckw.auth.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
+import com.sckw.auth.model.vo.req.RoleChangeVo;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.StringUtils;
+import com.sckw.core.web.model.LoginUserInfo;
+import com.sckw.redis.utils.RedissonUtils;
+import com.sckw.system.api.RemoteUserService;
+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.UserAccessMenuInfoResDto;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author xucaiqin
+ * @date 2025-11-15 10:28:35
+ */
+@Slf4j
+public class UserService {
+    private final RoleChangeVo loginBase;
+
+    private final KwsUserResDto user;
+
+
+    private final EntCacheResDto enterprise;
+
+    private final RemoteUserService remoteUserService;
+
+    public UserService(RoleChangeVo loginBase, KwsUserResDto user, EntCacheResDto enterprise,
+                       RemoteUserService remoteUserService) {
+        this.loginBase = loginBase;
+        this.user = user;
+        this.enterprise = enterprise;
+        this.remoteUserService = remoteUserService;
+    }
+
+    public void run() {
+        if (user == null) {
+            return;
+        }
+        //存用户登录信息
+        LoginUserInfo loginUserInfo = new LoginUserInfo();
+        loginUserInfo.setId(user.getId());
+        loginUserInfo.setSystemType(loginBase.getSystemType());
+        loginUserInfo.setClientType(loginBase.getClientType());
+        loginUserInfo.setAccount(user.getPhone());
+        loginUserInfo.setUserName(user.getName());
+        loginUserInfo.setPhone(user.getPhone());
+        loginUserInfo.setStatus(user.getStatus());
+        loginUserInfo.setIsMain(user.getIsMain());
+        loginUserInfo.setEntId(user.getEntId());
+        loginUserInfo.setUseRoleId(loginBase.getRoleId());
+        loginUserInfo.setUseEntId(loginBase.getEntId());
+        loginUserInfo.setEntName(enterprise != null ? enterprise.getFirmName() : null);
+
+        //普通用户需要填充数据权限 //11.15 用户id数据权限已经去掉
+//        if (user.getIsMain().equals(Global.NO)) {
+//            loginUserInfo.setAuthUserIdList(remoteUserService.queryAuthUserList(user.getId()));
+//        } else {
+//            List<FindEntUserResDto> entUser = remoteUserService.findEntUser(user.getEntId());
+//            if (CollectionUtils.isNotEmpty(entUser)) {
+//                loginUserInfo.setAuthUserIdList(entUser.stream().map(FindEntUserResDto::getUserId).distinct().toList());
+//            }
+//        }
+        saveEntList(loginUserInfo);
+        String key = Global.getFullUserLoginKey(loginUserInfo.getSystemType(), loginUserInfo.getId());
+        RedissonUtils.putString(key, JSON.toJSONString(loginUserInfo), Global.APP_TOKEN_EXPIRE);
+        //存缓存请求地址
+        saveMenusToCache(user.getId(), loginUserInfo.getSystemType(), loginBase.getRoleId());
+    }
+
+
+    private void saveEntList(LoginUserInfo loginUserInfo) {
+        List<Long> childEntList = remoteUserService.findChildEntList(loginUserInfo.getUseEntId());
+        if (CollUtil.isNotEmpty(childEntList)) {
+            loginUserInfo.setChildEntList(childEntList);
+        }
+    }
+
+    private void saveMenusToCache(Long userId, Integer systemType, Long roleId) {
+        //存权限菜单
+        List<UserAccessMenuInfoResDto> userAccessMenuInfo = remoteUserService.queryRoleMenu(roleId);
+        if (CollectionUtils.isEmpty(userAccessMenuInfo)) {
+            RedissonUtils.delete(Global.REDIS_SYS_MENU_PREFIX + systemType + Global.COLON + userId);
+            log.error("未查询到用户 [{}] 角色 [{}] 的菜单权限", userId, roleId);
+            return;
+        }
+
+        List<String> menus = new ArrayList<>();
+        for (UserAccessMenuInfoResDto userAccessMenuInfoResDto : userAccessMenuInfo) {
+            String links = userAccessMenuInfoResDto.getLinks();
+            if (StringUtils.isNotBlank(links)) {
+                menus.addAll(Arrays.asList(userAccessMenuInfoResDto.getLinks().split(",")));
+            }
+        }
+        RedissonUtils.putSet(Global.REDIS_SYS_MENU_PREFIX + userId, menus);
+    }
+}

+ 1 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillV1Enum.java

@@ -49,7 +49,7 @@ public enum CarWaybillV1Enum {
     /**
      * 已作废
      */
-    APPROVAL_TREAT(99, "已作废"),
+    APPROVAL_TREAT(99, "已取消"),
 
     ;
 

+ 16 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/DateTimeUtil.java

@@ -4,6 +4,7 @@ package com.sckw.core.utils;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
+import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.TemporalAdjusters;
@@ -301,6 +302,21 @@ public class DateTimeUtil {
         return dateRange;
     }
 
+    /**
+     * 获取当前时间到次日00:00剩余多少秒
+     *
+     * @return
+     */
+    public static long getTime() {
+        // 当前时间
+        LocalDateTime now = LocalDateTime.now();
+        // 次日 00:00
+        LocalDateTime nextMidnight = now.plusDays(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
+        // 转换为毫秒数并计算差值
+        return (nextMidnight.toInstant(ZoneOffset.of("+8")).toEpochMilli()
+                - now.toInstant(ZoneOffset.of("+8")).toEpochMilli()) / 1000;
+    }
+
     public static void main(String[] args) {
 
         System.out.println(parse("2023-12-11"));

+ 1 - 0
sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/constant/RedisConstant.java

@@ -122,5 +122,6 @@ public class RedisConstant {
      * uid:filter:channel->time
      */
     public static final String WALLET_TIME = "%s:%s:%s";
+    public static final String HOT_KEY = "hot:key";
 
 }

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

@@ -12,6 +12,6 @@ import java.lang.annotation.*;
 @Inherited
 @EnableDubbo
 @EnableFeignClients({"com.sckw.*.api.feign"})
-@ComponentScan(basePackages = {"com.sckw.message.consumer","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"})
+@ComponentScan(basePackages = {"com.sckw.message.consumer","com.sckw.file.config", "com.sckw.payment.config", "com.sckw.fleet.config", "com.sckw.remote.filter", "com.sckw.*.dao","com.sckw.*.controller", "com.sckw.*.service", "com.sckw.*.repository", "com.sckw.*.dubbo", "com.sckw.*.model", "com.sckw.transport.*", "com.sckw.*.serivce","com.sckw.transport.config"})
 public @interface SckwRemoteApplication {
 }

+ 17 - 1
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/RemoteContractService.java

@@ -1,11 +1,12 @@
 package com.sckw.contract.api;
 
 import com.sckw.contract.api.model.dto.res.*;
+import com.sckw.contract.api.model.vo.TradeContractGoodsDto;
+import com.sckw.contract.api.model.vo.TradeContractResDto;
 
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 /**
  * @author czh
@@ -57,6 +58,21 @@ public interface RemoteContractService {
      */
     ContractLogisticsAndTradeOrderResDto queryContractByContractId(Long tradeOrderContractId,Long tradeId);
 
+    /**
+     * 查询贸易合同
+     * @param tradeContractId
+     * @return
+     */
+    TradeContractResDto queryTradeContract(Long tradeContractId,Long goodsId);
+
+    /**
+     * 查询最新的签约合同
+     * @param entId 买方企业
+     * @param goodsId
+     * @return
+     */
+    TradeContractGoodsDto queryTradeContractNew(Long entId, Long goodsId);
+
     /**
      * 查询物流合同信息
      */

+ 36 - 0
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/vo/GoodsInfoDto.java

@@ -0,0 +1,36 @@
+package com.sckw.contract.api.model.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+
+@Data
+public class GoodsInfoDto implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 2656035411576510101L;
+    /**
+     * 商品skuid
+     */
+    private Long skuId;
+    /**
+     * 数量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 履行量
+     */
+    private BigDecimal performedAmount;
+    /**
+     * 单位(吨、方、箱、件)
+     */
+    private String unit;
+    /**
+     * 价格
+     */
+    private BigDecimal price;
+}

+ 19 - 0
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/vo/TradeContractGoodsDto.java

@@ -0,0 +1,19 @@
+package com.sckw.contract.api.model.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+
+@Data
+public class TradeContractGoodsDto implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 2656035411576510101L;
+
+    private BigDecimal price;
+
+
+}

+ 85 - 0
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/vo/TradeContractResDto.java

@@ -0,0 +1,85 @@
+package com.sckw.contract.api.model.vo;
+
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+
+@Data
+public class TradeContractResDto implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 2656035411576510101L;
+
+    /**
+     * 贸易合同id
+     */
+    private Long id;
+
+    /**
+     * 贸易合同名
+     */
+    private String contactName;
+
+    /**
+     * 贸易合同号
+     */
+    private String contractNo;
+
+    /**
+     * 签约方式(1线上签约、2线下签约)
+     */
+    private Integer signingWay;
+
+    /**
+     * 交易方式(1预付款、2货到付款)
+     */
+    private Integer trading;
+
+    /**
+     * 开始日期
+     */
+    private Date startTime;
+
+    /**
+     * 结束日期
+     */
+    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
+    private Date endTime;
+    /**
+     * 数量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 履行量
+     */
+    private BigDecimal performedAmount;
+    private Long contractPid;
+    private Integer status;
+    /**
+     * 结算方式
+     */
+    private Integer settlement;
+
+    /**
+     * 托运方式 1-采购方托运,2-供应方托运
+     */
+    private Integer consignment;
+    /**
+     * 卸货方式
+     */
+    private Integer unloadWay;
+
+    private GoodsInfoDto goodsInfoDto;
+    /**
+     * 贸易合同关联的企业信息
+     */
+    private List<TradeContractUnitDto> unitList;
+}

+ 44 - 0
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/vo/TradeContractUnitDto.java

@@ -0,0 +1,44 @@
+package com.sckw.contract.api.model.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+@Data
+public class TradeContractUnitDto implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 2656035411576510101L;
+    /**
+     * 单位类型(1采购单位、2销售单位)
+     */
+    private String unitType;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 企业名称
+     */
+    private String firmName;
+
+    /**
+     * 联系人id
+     */
+    private Long contactsId;
+
+    /**
+     * 联系人姓名
+     */
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+}

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

@@ -113,4 +113,7 @@ public interface RemoteFleetService {
     RTruckVo findTruckByTruckNo(String truckNo);
 
     void updateTruckTareAmount(RTruckVo truckNo);
+
+    RFleetVo findFleetByTruckId(Long truckId, Long entId);
+
 }

+ 6 - 1
sckw-modules-api/sckw-modules-bom/pom.xml

@@ -62,6 +62,11 @@
                 <artifactId>sckw-manage-api</artifactId>
                 <version>${project.version}</version>
             </dependency>
+            <dependency>
+                <groupId>com.sckw</groupId>
+                <artifactId>sckw-product-api</artifactId>
+                <version>${project.version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
-</project>
+</project>

+ 1 - 0
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/dubbo/GoodsInfoService.java

@@ -75,4 +75,5 @@ public interface GoodsInfoService {
     List<Long> getGoodsByGoodsNameAndTaxRate(String goodsName, String goodsTaxRate);
 
     List<KwpGoods> getGoodsByNameTypeDesc(String goodsName, String goodsType, String goodsSpec);
+    List<KwpGoods> findGoodsByGoodsName(String goodsName);
 }

+ 1 - 0
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/RemoteSystemService.java

@@ -75,6 +75,7 @@ public interface RemoteSystemService {
      * @date: 2023/7/7
      */
     List<SysDictResDto> queryDictBottom(String type, String value);
+    List<SysDictResDto> queryGoodsDict(String keywords);
 
     /**
      * @param type 字典类型 value key

+ 26 - 5
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/RemoteUserService.java

@@ -17,6 +17,7 @@ public interface RemoteUserService {
 
     /**
      * 根据用户名查用户信息
+     *
      * @param username 用户账号
      * @return
      */
@@ -24,6 +25,7 @@ public interface RemoteUserService {
 
     /**
      * 根据用户姓名模糊查用户信息
+     *
      * @param name 用户姓名
      * @return list
      */
@@ -31,6 +33,7 @@ public interface RemoteUserService {
 
     /**
      * 根据用户id查用户和机构关联关系
+     *
      * @param userId 用户id
      * @return
      */
@@ -38,6 +41,7 @@ public interface RemoteUserService {
 
     /**
      * 根据机构id查机构信息
+     *
      * @param ids
      * @return
      */
@@ -53,15 +57,17 @@ public interface RemoteUserService {
 
     /**
      * 校验密码
-     * @param account 入参传的账号
-     * @param password 入参传的密码
+     *
+     * @param account    入参传的账号
+     * @param password   入参传的密码
      * @param currentPwd 当前用户的密码
-     * @param salt 当前用户的盐
+     * @param salt       当前用户的盐
      */
     void checkPassword(String account, String password, String currentPwd, String salt) throws SystemException;
 
     /**
      * 检验用户信息
+     *
      * @param account
      * @return
      */
@@ -69,6 +75,7 @@ public interface RemoteUserService {
 
     /**
      * 根基id查企业
+     *
      * @param entId
      * @return
      */
@@ -92,9 +99,17 @@ public interface RemoteUserService {
      */
     List<UserAccessMenuInfoResDto> queryUserAccessMenu(long id);
 
+    /**
+     * 查询角色对一个你的菜单
+     *
+     * @param roleId
+     * @return
+     */
+    List<UserAccessMenuInfoResDto> queryRoleMenu(Long roleId);
+
 
     /**
-     * @param userLoginReqDto  用户登录信息
+     * @param userLoginReqDto 用户登录信息
      * @desc: 保存用户登录信息
      * @author: czh
      * @date: 2023/6/19
@@ -232,7 +247,7 @@ public interface RemoteUserService {
     List<Long> findEntIds(List<Integer> entTypes, String firmName);
 
     /**
-     * @param entIds 企业ID
+     * @param entIds   企业ID
      * @param userName 用户名称
      * @desc 根据企业ID或用户名称搜索用户ID(适用于关键字搜索)
      * @author zk
@@ -243,6 +258,7 @@ public interface RemoteUserService {
 
     /**
      * 通过用户id查询所有的企业信息(传递的是客户经理用户的id)
+     *
      * @param userId 客户经理id
      * @return list 企业id数组
      */
@@ -250,6 +266,7 @@ public interface RemoteUserService {
 
     /**
      * 通过用户id查询所有的企业信息(传递的是客户经理用户的id)-判断是不是管理员账户
+     *
      * @param userId 客户经理id
      * @return list 企业id数组
      */
@@ -257,6 +274,7 @@ public interface RemoteUserService {
 
     /**
      * 通过用户id查询所有的企业信息(传递的是客户经理用户的id)
+     *
      * @param userIds 客户经理id
      * @return list 企业id数组
      */
@@ -264,6 +282,7 @@ public interface RemoteUserService {
 
     /**
      * 通过用户id查询所有的企业信息(传递的是客户经理用户的id)
+     *
      * @param userIds 客户经理id
      * @return list 企业id数组
      */
@@ -271,12 +290,14 @@ public interface RemoteUserService {
 
     /**
      * 通过账号类型查出相关所有的企业账户
+     *
      * @param systemType
      * @return
      */
     List<Long> selectUserBySystemType(Integer systemType);
 
     List<Long> findAllEnterprise();
+
     List<Long> findChildEntList(Long entId);
 
     List<Long> findEntListByUserId(Long userId);

+ 17 - 4
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportRemoteService.java

@@ -1,14 +1,16 @@
 package com.sckw.transport.api.dubbo;
 
+import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.transport.api.model.dto.AcceptCarriageLogisticsOrderDto;
 import com.sckw.transport.api.model.dto.AccountCheckingBindDTO;
 import com.sckw.transport.api.model.dto.RWaybillOrderDto;
-import com.sckw.transport.api.model.param.CapacityTruckParam;
-import com.sckw.transport.api.model.param.ContractSignLogisticsParam;
-import com.sckw.transport.api.model.param.LogisticsOrderParam;
-import com.sckw.transport.api.model.param.UpdateOrderStatusDto;
+import com.sckw.transport.api.model.param.*;
 import com.sckw.transport.api.model.vo.*;
+import io.swagger.v3.oas.annotations.Operation;
+import jakarta.validation.Valid;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.List;
 import java.util.Set;
@@ -156,4 +158,15 @@ public interface TransportRemoteService {
      * @return
      */
     List<CapacityTruckVO> queryCapacityTruck(CapacityTruckParam param);
+
+    /**
+     *新增物流订单
+     * @param param 请求参数
+     */
+    void addLogisticOrder(AddLogisticOrderParam param);
+
+    /**
+     * 完结订单
+     */
+    Boolean logisticOrderFinish(@RequestBody @Valid OrderFinishParam req);
 }

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

@@ -0,0 +1,300 @@
+package com.sckw.transport.api.model.param;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+
+
+/**
+ * @author PC
+ */
+@Data
+public class AddLogisticOrderParam implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 6529826978061848338L;
+    //物流信息
+    private List<LogisticInfo> logisticInfo;
+    /**
+     * 交易订单id
+     */
+    private Long tradeOrderId;
+    /**
+     * 交易订单号
+     */
+    @NotBlank(message = "订单编号不能为空")
+    private String tradeOrderNo;
+    /**
+     * 托运单位
+     */
+    @NotBlank(message = "托运单位名称不能为空")
+    private String consignCompany;
+    /**
+     * 托运单位id
+     */
+    @NotBlank(message = "托运单位id不能为空")
+    private Long consignCompanyId;
+
+    /**
+     * 托运联系电话
+     */
+    @NotBlank(message = "托运联系电话不能为空")
+    private String consignContactPhone;
+
+    /**
+     * 托运联系人
+     */
+    @NotBlank(message = "托运联系人不能为空")
+    private String consignContacts;
+
+    /**
+     * 托运联系人id
+     */
+    @NotBlank(message = "托运联系人id不能为空")
+    private Long consignContactsId;
+
+
+
+    /**
+    * 货物id
+    */
+    @NotNull(message = "货物id不能为空")
+    private Long goodsId;
+    /**
+     * 货物名称
+     */
+    @NotNull(message = "货物名称不能为空")
+    private String goodsName;
+
+    /**
+     * 货物类型
+     */
+    @NotBlank(message = "货物类型不能为空")
+    private String goodsType;
+
+
+    /**
+     * 商品价值(扣亏货值)
+     */
+    private BigDecimal goodsPrice;
+    /**
+     * 商品价值(扣亏货值)单位
+     */
+    private String goodsPriceUnit;
+
+
+    /**
+     *装货地址名称
+     */
+    private String loadName;
+
+    /**
+     * 装货城市编码
+     */
+    private Integer loadCityCode;
+
+    /**
+     * 装货城市名称
+     */
+    private String loadCityName;
+
+    /**
+     * 装货联系人
+     */
+    @NotBlank(message = "装货联系人不能为空")
+    private String loadContacts;
+
+    /**
+     * 装货联系电话
+     */
+    @NotBlank(message = "装货联系电话不能为空")
+    private String loadPhone;
+
+    /**
+     * 装货详细地址
+     */
+    @NotBlank(message = "装货详细地址不能为空")
+    private String loadDetailAddress;
+
+    /**
+     *卸货地址id
+     */
+    private Long unloadId;
+
+    /**
+     *卸货地址名称
+     */
+    private String unloadName;
+
+    /**
+     * 卸货城市编码
+     */
+    @NotNull(message = "卸货城市编码不能为空")
+    @Min(value = 0, message = "卸货城市编码必须大于等于{value}")
+    @Max(value = 1000000, message = "卸货城市编码必须小于等于{value}")
+    private Integer unloadCityCode;
+
+    /**
+     * 卸货城市名称
+     */
+    @NotBlank(message = "卸货城市名称不能为空")
+    private String unloadCityName;
+
+    @Data
+    public static class LogisticInfo {
+        /**
+         * 合同id
+         */
+        @NotNull(message = "合同id不能为空")
+        private Long contractId;
+
+        /**
+         * 合同编号
+         */
+        @NotBlank(message = "合同编号不能为空")
+        private String contractNo;
+
+        /**
+         * 合同名称
+         */
+        @NotBlank(message = "合同名称不能为空")
+        private String contractName;
+        /**
+         * 承运单位ID
+         */
+        @NotBlank(message = "承运单位ID不能为空")
+        private Long acceptCompanyId;
+
+        /**
+         * 承运联系电话
+         */
+        @NotBlank(message = "承运联系电话不能为空")
+        private String acceptContactPhone;
+
+
+        /**
+         * 承运联系人
+         */
+        @NotBlank(message = "承运联系人id不能为空")
+        private String acceptContacts;
+
+        /**
+         * 承运联系人id
+         */
+        @NotBlank(message = "承运联系人id不能为空")
+        private Long acceptContactsId;
+
+        /**
+         * 承运单位
+         */
+        @NotBlank(message = "承运单位不能为空")
+        private String acceptCompany;
+        /**
+         * 运价
+         */
+        @NotNull(message = "运价不能为空")
+        private BigDecimal price;
+
+        /**
+         * 运价方式
+         */
+        @NotNull(message = "运价方式不能为空")
+        private Long priceType;
+
+
+        /**
+         * 计划卸货时间
+         */
+        @NotNull(message = "计划卸货时间不能为空")
+        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+        private LocalDate endTime;
+
+        /**
+         * 计划发货时间
+         */
+        @NotNull(message = "计划发货时间不能为空")
+        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+        private LocalDate startTime;
+
+
+
+        /**
+         * 卸货联系人
+         */
+        @NotBlank(message = "卸货联系人不能为空")
+        private String unloadContacts;
+
+        /**
+         * 卸货联系电话
+         */
+        @NotBlank(message = "卸货联系电话不能为空")
+        private String unloadPhone;
+
+        /**
+         * 卸货详细地址
+         */
+        @NotBlank(message = "卸货详细地址不能为空")
+        private String unloadDetailAddress;
+
+
+        /**
+         * 总量
+         */
+        @NotNull(message = "总量不能为空")
+
+        private BigDecimal amount;
+
+        /**
+         * 总量单位
+         */
+        @NotBlank(message = "总量单位不能为空")
+        private String amountUnit;
+
+        /**
+         * 合理损耗
+         */
+
+        private BigDecimal loss;
+        /**
+         * 支付方式
+         */
+        @NotNull(message = "支付方式不能为空")
+        private Long payment;
+
+
+        /**
+         * 签约方式
+         */
+        @NotNull(message = "签约方式不能为空")
+        private Integer signingWay;
+
+        /**
+         * 合理损耗单位
+         */
+        @NotBlank(message = "合理损耗单位不能为空")
+        private String lossUnit;
+        /**
+         * 计费方式
+         */
+        @NotNull(message = "计费方式不能为空")
+        private String billingMode;
+
+        /**
+         * 备注
+         */
+        private String remark;
+        /**
+         * 订单创建类型(1.贸易订单生成,2自建订单生成)
+         */
+        private Integer type;
+
+    }
+}

+ 22 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/param/OrderFinishParam.java

@@ -0,0 +1,22 @@
+package com.sckw.transport.api.model.param;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description :
+ * @create :2025-11-20 14:14:00
+ */
+@Data
+public class OrderFinishParam implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -8497329584784837085L;
+    /**
+     * 物流订单id
+     */
+    private Long logisticOrderId;
+}

+ 24 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcContractSaleController.java

@@ -1,5 +1,9 @@
 package com.sckw.contract.controller;
 
+import com.sckw.contract.api.model.dto.res.ContractLogisticsOrderResDto;
+import com.sckw.contract.api.model.dto.res.ContractTradeOrderDto;
+import com.sckw.contract.api.model.dto.res.ContractTradeOrderInfo;
+import com.sckw.contract.api.model.dto.res.LogisticsOrderDto;
 import com.sckw.contract.model.vo.req.*;
 import com.sckw.contract.model.vo.res.ContractDetailResp;
 import com.sckw.contract.model.vo.res.QueryListResVo;
@@ -21,6 +25,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 
 /**
  * @author czh
@@ -60,7 +66,7 @@ public class KwcContractSaleController {
     @Operation(summary = "分页查询贸易合同")
     public BaseResult<PageDataResult<QueryListResVo>> queryTradeListByPage(@RequestBody QueryTradeReq req) {
         //reqVo.setEntType(EntTypeEnum.SUPPLIER.getCode());
-        return BaseResult.success(kwcContractTradeService.queryTradeListByPage(req));
+        return null;
     }
 
 
@@ -260,4 +266,21 @@ public class KwcContractSaleController {
     public BaseResult<ContractDetailResp> queryContractDetail(@Valid @RequestBody ContractDetailReq req) {
         return BaseResult.success(kwcContractTradeService.queryContractDetail(req));
     }
+
+    /**
+     * 查询物流合同
+     */
+    @PostMapping("/queryContractLogisticsOrder")
+    @Operation(summary = "查询物流合同")
+    public BaseResult<List<ContractLogisticsOrderResDto>> queryContractLogisticsOrder(@Valid @RequestBody LogisticsOrderDto req) {
+        return BaseResult.success(kwcContractTradeService.queryContractLogisticsOrder(req));
+    }
+    /**
+     * 查询贸易合同
+     */
+    @PostMapping("/queryContractTradeOrder")
+    @Operation(summary = "查询贸易合同")
+    public BaseResult<List<ContractTradeOrderInfo>> queryContractTradeOrder(@Valid @RequestBody ContractTradeOrderDto req) {
+        return BaseResult.success(kwcContractTradeService.queryContractTradeOrder(req));
+    }
 }

+ 19 - 7
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dao/KwcContractTradeMapper.java

@@ -1,6 +1,7 @@
 package com.sckw.contract.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.contract.api.model.vo.TradeContractGoodsDto;
 import com.sckw.contract.model.dto.req.QueryListReqDto;
 import com.sckw.contract.model.dto.res.QueryContractValidCountResDto;
 import com.sckw.contract.model.dto.res.QueryListResDto;
@@ -12,26 +13,28 @@ import org.apache.ibatis.annotations.Param;
 import java.util.List;
 
 /**
-* @author PC
-* @description 针对表【kwc_contract_trade(交易合同(采购合同/销售合同))】的数据库操作Mapper
-* @createDate 2023-07-13 13:36:19
-* @Entity com.sckw.contract.model.entity.KwcContractTrade
-*/
+ * @author PC
+ * @description 针对表【kwc_contract_trade(交易合同(采购合同/销售合同))】的数据库操作Mapper
+ * @createDate 2023-07-13 13:36:19
+ * @Entity com.sckw.contract.model.entity.KwcContractTrade
+ */
 @Mapper
 public interface KwcContractTradeMapper extends BaseMapper<KwcContractTrade> {
 
 
     /**
+     * @return QueryListResVo
      * @desc: 查询
      * @param: reqVo
      * @author: sky
      * @date 2023/7/17
-     * @return QueryListResVo
      */
     List<QueryListResDto> queryList(QueryListReqDto reqVo);
 
+    List<QueryListResDto> queryList1(QueryListReqDto reqVo);
+
     /**
-     * @param entIdList  企业id
+     * @param entIdList 企业id
      * @return QueryContractValidCountResDto
      * @desc: 查各个类型的有效合同  贸易和物流写一起算了
      * @author: czh
@@ -47,6 +50,15 @@ public interface KwcContractTradeMapper extends BaseMapper<KwcContractTrade> {
      * @date: 2023/9/13
      */
     List<QueryListResDto> queryTradeList(@Param("reqVo") QueryListReqVo reqVo, @Param("authEntIdList") List<Long> authEntIdList);
+
+    /**
+     * 当前企业,当前商品,最新的签约价
+     *
+     * @param entId
+     * @param goodsId
+     * @return
+     */
+    TradeContractGoodsDto queryNewSignPrice(@Param("entId") Long entId, @Param("goodsId") Long goodsId);
 }
 
 

+ 53 - 142
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dubbo/RemoteContractServiceImpl.java

@@ -1,21 +1,26 @@
 package com.sckw.contract.dubbo;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.google.common.collect.Sets;
 import com.sckw.contract.api.RemoteContractService;
 import com.sckw.contract.api.model.dto.res.*;
-import com.sckw.contract.dao.KwcContractLogisticsMapper;
-import com.sckw.contract.dao.KwcContractLogisticsUnitMapper;
-import com.sckw.contract.dao.KwcContractTradeMapper;
+import com.sckw.contract.api.model.vo.GoodsInfoDto;
+import com.sckw.contract.api.model.vo.TradeContractGoodsDto;
+import com.sckw.contract.api.model.vo.TradeContractResDto;
+import com.sckw.contract.api.model.vo.TradeContractUnitDto;
+import com.sckw.contract.dao.*;
 import com.sckw.contract.model.dto.res.QueryContractValidCountResDto;
 import com.sckw.contract.model.entity.*;
 import com.sckw.contract.repository.*;
 import com.sckw.contract.service.KwcContractLogisticsUnitService;
+import com.sckw.contract.service.operateService.KwcContractTradeService;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.ContractStatusEnum;
 import com.sckw.core.model.enums.CooperateTypeEnum;
 import com.sckw.core.model.enums.SigningWayEnum;
+import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.transport.api.dubbo.TransportRemoteService;
@@ -53,18 +58,22 @@ public class RemoteContractServiceImpl implements RemoteContractService {
 
     @Autowired
     private KwcContractTradeMapper kwcContractTradeMapper;
-
+    @Autowired
+    private KwcContractTradeGoodsMapper kwcContractTradeGoodsMapper;
+    @Autowired
+    private KwcContractTradeUnitMapper kwcContractTradeUnitMapper;
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
     private RemoteSystemService remoteSystemService;
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
-    private TransportRemoteService transportRemoteService ;
+    private TransportRemoteService transportRemoteService;
 
-    private final KwcContractTradeRepository kwcContractTradeRepository ;
+    private final KwcContractTradeRepository kwcContractTradeRepository;
     private final KwcContractLogisticsRepository contractLogisticsRepository;
     private final KwcContractTradeUnitRepository kwcContractTradeUnitRepository;
     private final KwcContractTradeGoodsRepository kwcContractTradeGoodsRepository;
     private final KwcContractLogisticsUnitRepository kwcContractLogisticsUnitRepository;
     private final KwcContractLogisticsGoodsRepository kwcContractLogisticsGoodsRepository;
+    private final KwcContractTradeService kwcContractTradeService;
 
     @Override
     public Map<Long, ContractCommonInfoResDto> queryContractBaseInfo(List<Long> contractIds) {
@@ -210,11 +219,11 @@ public class RemoteContractServiceImpl implements RemoteContractService {
     }
 
     @Override
-    public ContractLogisticsAndTradeOrderResDto queryContractByContractId(Long tradeOrderContractId,Long tradeId) {
+    public ContractLogisticsAndTradeOrderResDto queryContractByContractId(Long tradeOrderContractId, Long tradeId) {
         //根据贸易合同查询贸易合同
         KwcContractTrade kwcContractTrade = kwcContractTradeRepository.queryByContractId(tradeOrderContractId);
-        if (Objects.isNull(kwcContractTrade)){
-            return new ContractLogisticsAndTradeOrderResDto() ;
+        if (Objects.isNull(kwcContractTrade)) {
+            return new ContractLogisticsAndTradeOrderResDto();
         }
         ContractLogisticsAndTradeOrderResDto contractLogisticsAndTradeOrderResDto = new ContractLogisticsAndTradeOrderResDto();
         contractLogisticsAndTradeOrderResDto.setId(kwcContractTrade.getId());
@@ -223,13 +232,13 @@ public class RemoteContractServiceImpl implements RemoteContractService {
         //根据贸易订单id查询物流订单和物流合同关联信息
         List<LogisticContractVo> logisticContractVos = transportRemoteService.queryLogisticContractByTradeId(tradeId);
         Set<Long> logContractIds = Sets.newHashSet();
-        if (CollectionUtils.isNotEmpty(logisticContractVos)){
+        if (CollectionUtils.isNotEmpty(logisticContractVos)) {
             logContractIds =
                     logisticContractVos.stream().map(LogisticContractVo::getLogContractId).collect(Collectors.toSet());
         }
         //查询物流合同
         List<KwcContractLogistics> contractLogistics = contractLogisticsRepository.queryByLogisticContractIds(logContractIds);
-        if (CollectionUtils.isNotEmpty(contractLogistics)){
+        if (CollectionUtils.isNotEmpty(contractLogistics)) {
             List<ContractLogisticsAndTradeOrderResDto.ContractLogisticsOrder> contractLogisticsOrders = contractLogistics.stream().map(c -> {
                 ContractLogisticsAndTradeOrderResDto.ContractLogisticsOrder contractLogisticsOrder = new ContractLogisticsAndTradeOrderResDto.ContractLogisticsOrder();
                 contractLogisticsOrder.setLogisticsContractId(c.getId());
@@ -244,149 +253,51 @@ public class RemoteContractServiceImpl implements RemoteContractService {
     }
 
     @Override
-    public List<ContractLogisticsOrderResDto> queryContractLogisticsOrder(LogisticsOrderDto logisticsOrderDto) {
-        log.info("查询物流合同请求:{}",JSON.toJSONString( logisticsOrderDto));
-
-        if (Objects.isNull(logisticsOrderDto.getGoodsId())) {
-            throw new BusinessException("商品id不能为空!");
-        }
-        if (Objects.isNull(logisticsOrderDto.getEntId())) {
-            throw new BusinessException("托运方企业id不能为空!");
-        }
-        //查询物流公司
-        List<KwcContractLogisticsUnit> contractLogistics =
-                kwcContractLogisticsUnitRepository.queryByEntId(logisticsOrderDto.getEntId());
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(contractLogistics)){
-            return Collections.emptyList();
-        }
-        //物流订单和类型组成唯一key
-        Map<String, KwcContractLogisticsUnit> contractLogisticsMap =
-                contractLogistics.stream()
-                .collect(Collectors.toMap(c -> c.getContractId() + "_" + c.getUnitType(),
-                        Function.identity(), (x, y) -> x));
-        //物流订单合id
-        Set<Long> logTradeContractIds =
-                contractLogistics.stream().map(KwcContractLogisticsUnit::getContractId).collect(Collectors.toSet());
-
-        //查询商品信息
-       List<KwcContractLogisticsGoods> kwcContractLogisticsGoods = kwcContractLogisticsGoodsRepository.queryByLogIdsAndGoodsId(logTradeContractIds,
-                logisticsOrderDto.getGoodsId());
-       if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwcContractLogisticsGoods)){
-           return Collections.emptyList();
-       }
-       //合同id和商品映射
-        Map<Long, KwcContractLogisticsGoods> contractLogisticsGoodsMap =
-                kwcContractLogisticsGoods.stream().collect(Collectors.toMap(KwcContractLogisticsGoods::getContractId,
-                Function.identity(), (x, y) -> x));
-        Set<Long> logTradeContractIdList =
-                kwcContractLogisticsGoods.stream().map(KwcContractLogisticsGoods::getContractId).collect(Collectors.toSet());
-       //查询物流订单
-        List<KwcContractLogistics> logistics = contractLogisticsRepository.queryByLogisticContractIds(logTradeContractIdList);
-        if (CollectionUtils.isEmpty( logistics)){
-            return Collections.emptyList();
+    public TradeContractResDto queryTradeContract(Long tradeContractId, Long goodsId) {
+        KwcContractTrade kwcContractTrade = kwcContractTradeMapper.selectById(tradeContractId);
+        if (Objects.nonNull(kwcContractTrade)) {
+            TradeContractResDto tradeContractResDto = BeanUtils.toBean(kwcContractTrade, TradeContractResDto.class);
+            tradeContractResDto.setId(kwcContractTrade.getId());
+            tradeContractResDto.setContactName(kwcContractTrade.getName());
+            tradeContractResDto.setContractNo(kwcContractTrade.getContractNo());
+            KwcContractTradeGoods kwcContractTradeGoods = kwcContractTradeGoodsMapper.selectOne(new LambdaQueryWrapper<KwcContractTradeGoods>()
+                    .eq(KwcContractTradeGoods::getContractId, tradeContractId)
+                    .eq(KwcContractTradeGoods::getGoodsId, goodsId)
+                    .eq(KwcContractTradeGoods::getDelFlag, 0)
+            );
+            Optional.ofNullable(kwcContractTradeGoods).ifPresent(d -> tradeContractResDto.setGoodsInfoDto(BeanUtils.toBean(d, GoodsInfoDto.class)));
+
+            List<KwcContractTradeUnit> kwcContractTradeUnits = kwcContractTradeUnitMapper.selectList(new LambdaQueryWrapper<KwcContractTradeUnit>().eq(KwcContractTradeUnit::getContractId, tradeContractId)
+                    .eq(KwcContractTradeUnit::getDelFlag, 0));
+            Optional.ofNullable(kwcContractTradeUnits).ifPresent(d -> tradeContractResDto.setUnitList(d.stream().map(t -> BeanUtils.toBean(t, TradeContractUnitDto.class)).toList()));
+
+            return tradeContractResDto;
         }
-       return logistics.stream()
-                .map(log -> getContractLogisticsOrderResDto(log, contractLogisticsMap, contractLogisticsGoodsMap))
-               .collect(Collectors.toList());
+        return null;
+    }
 
+    @Override
+    public TradeContractGoodsDto queryTradeContractNew(Long entId, Long goodsId) {
+        return kwcContractTradeMapper.queryNewSignPrice(entId,goodsId);
     }
 
-    @NotNull
-    private static ContractLogisticsOrderResDto getContractLogisticsOrderResDto(KwcContractLogistics log, Map<String, KwcContractLogisticsUnit> contractLogisticsMap, Map<Long, KwcContractLogisticsGoods> contractLogisticsGoodsMap) {
-        ContractLogisticsOrderResDto contractLogisticsOrderResDto = new ContractLogisticsOrderResDto();
-        contractLogisticsOrderResDto.setId(log.getId());
-        contractLogisticsOrderResDto.setContactName(log.getName());
-        contractLogisticsOrderResDto.setContractNo(log.getContractNo());
-        contractLogisticsOrderResDto.setSigningWay(log.getSigningWay());
-        contractLogisticsOrderResDto.setStatus(log.getStatus());
-        KwcContractLogisticsUnit consignEnt = contractLogisticsMap.getOrDefault(log.getId() + "_" + CooperateTypeEnum.CONSIGN.getCode(),
-                new KwcContractLogisticsUnit());
-        KwcContractLogisticsUnit acceptCarriageEnt = contractLogisticsMap.getOrDefault(log.getId() + "_" + CooperateTypeEnum.CARRIAGE.getCode(),
-                new KwcContractLogisticsUnit());
-        contractLogisticsOrderResDto.setConsignEntId(consignEnt.getContractId());
-        contractLogisticsOrderResDto.setConsignEntName(consignEnt.getFirmName());
-        contractLogisticsOrderResDto.setAcceptCarriageEntId(acceptCarriageEnt.getContractId());
-        contractLogisticsOrderResDto.setAcceptCarriageEntName(acceptCarriageEnt.getFirmName());
-        KwcContractLogisticsGoods goods = contractLogisticsGoodsMap.getOrDefault(log.getId(),
-                new KwcContractLogisticsGoods());
-        contractLogisticsOrderResDto.setPrice(goods.getPrice());
-        return contractLogisticsOrderResDto;
+    @Override
+    public List<ContractLogisticsOrderResDto> queryContractLogisticsOrder(LogisticsOrderDto logisticsOrderDto) {
+        log.info("查询物流合同请求:{}", JSON.toJSONString(logisticsOrderDto));
+        return kwcContractTradeService.queryContractLogisticsOrder(logisticsOrderDto);
+
     }
 
+
+
     @Override
     public List<ContractTradeOrderInfo> queryContractTradeOrder(ContractTradeOrderDto contractTradeOrderDto) {
         log.info("查询贸易合同订单,请求:{}", JSON.toJSONString(contractTradeOrderDto));
-        checkParam(contractTradeOrderDto.getGoodsId(), contractTradeOrderDto.getEntId(), contractTradeOrderDto.getEntType());
-        //查询贸易合同企业信息
-        List<KwcContractTradeUnit> tradeUnits = kwcContractTradeUnitRepository.queryByEntIdAndUnitType(contractTradeOrderDto.getEntId(),
-                contractTradeOrderDto.getEntType());
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(tradeUnits)){
-            return Collections.emptyList();
-        }
-        Set<Long> contractIds =
-                tradeUnits.stream().map(KwcContractTradeUnit::getContractId).collect(Collectors.toSet());
-        //查询商品信息
-        List<KwcContractTradeGoods> kwcContractGoods = kwcContractTradeGoodsRepository.queryByContractIdsAndGoodsId(contractIds,
-                contractTradeOrderDto.getGoodsId());
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwcContractGoods)){
-            return Collections.emptyList();
-        }
-        Set<Long> contractIdList = kwcContractGoods.stream()
-                        .map(KwcContractTradeGoods::getContractId)
-                        .collect(Collectors.toSet());
-        //查询贸易合同
-        List<KwcContractTrade> kwcContractTrades = kwcContractTradeRepository.queryByContractIds(contractIdList);
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwcContractTrades)){
-            return Collections.emptyList();
-        }
-       return kwcContractTrades.stream().map(RemoteContractServiceImpl::getContractTradeOrderInfo)
-               .collect(Collectors.toList());
+       return kwcContractTradeService.queryContractTradeOrder(contractTradeOrderDto);
     }
 
-    private static void checkParam(Long contractTradeOrderDto, Long contractTradeOrderDto1, Integer contractTradeOrderDto2) {
-        if (Objects.isNull(contractTradeOrderDto)) {
-            throw new BusinessException("商品id不能为空!");
-        }
-        if (Objects.isNull(contractTradeOrderDto1)) {
-            throw new BusinessException("托运方企业id不能为空!");
-        }
-        if (Objects.isNull(contractTradeOrderDto2)) {
-            throw new BusinessException("企业类型不能为空!");
-        }
-    }
 
-    @NotNull
-    private static ContractTradeOrderInfo getContractTradeOrderInfo(KwcContractTrade c) {
-        ContractTradeOrderInfo contractTradeOrderInfo = new ContractTradeOrderInfo();
-        contractTradeOrderInfo.setId(c.getId());
-        contractTradeOrderInfo.setEntId(c.getEntId());
-        contractTradeOrderInfo.setContractNo(c.getContractNo());
-        contractTradeOrderInfo.setName(c.getName());
-        contractTradeOrderInfo.setSigningWay(c.getSigningWay());
-        contractTradeOrderInfo.setTrading(c.getTrading());
-        contractTradeOrderInfo.setStartTime(c.getStartTime());
-        contractTradeOrderInfo.setEndTime(c.getEndTime());
-        contractTradeOrderInfo.setAmount(c.getAmount());
-        contractTradeOrderInfo.setPerformedAmount(c.getPerformedAmount());
-        contractTradeOrderInfo.setSigningUrl(c.getSigningUrl());
-        contractTradeOrderInfo.setSignedUrl(c.getSignedUrl());
-        contractTradeOrderInfo.setSigningNo(c.getSigningNo());
-        contractTradeOrderInfo.setContractPid(c.getContractPid());
-        contractTradeOrderInfo.setRemark(c.getRemark());
-        contractTradeOrderInfo.setStatus(c.getStatus());
-        contractTradeOrderInfo.setCreateBy(c.getCreateBy());
-        contractTradeOrderInfo.setCreateTime(c.getCreateTime());
-        contractTradeOrderInfo.setUpdateBy(c.getUpdateBy());
-        contractTradeOrderInfo.setUpdateTime(c.getUpdateTime());
-        contractTradeOrderInfo.setDelFlag(c.getDelFlag());
-        contractTradeOrderInfo.setBusinessId(c.getBusinessId());
-        contractTradeOrderInfo.setSettlement(c.getSettlement());
-        contractTradeOrderInfo.setConsignment(c.getConsignment());
-        contractTradeOrderInfo.setUnloadWay(c.getUnloadWay());
-        contractTradeOrderInfo.setSalesmanId(c.getSalesmanId());
-        contractTradeOrderInfo.setSalesmanPhone(c.getSalesmanPhone());
-        return contractTradeOrderInfo;
-    }
+
 
 
     private ContractCommonInfoResDto fillContractLogistics(KwcContractLogistics kwcContractLogistics) {

+ 4 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/dto/res/QueryListResDto.java

@@ -168,6 +168,10 @@ public class QueryListResDto {
      * 父合同名
      */
     private String contractPname;
+    /**
+     * 父合同编号
+     */
+    private String contractPidNo;
 
     /**
      * 卸货方式

+ 5 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTrade.java

@@ -157,5 +157,9 @@ public class KwcContractTrade implements Serializable {
      */
     @TableField("salesman_phone")
     private String salesmanPhone;
-
+    /**
+     * 签约时间
+     */
+    @TableField("sign_time")
+    private Date signTime;
 }

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

@@ -56,7 +56,6 @@ public class LogisticListReq implements Serializable {
      * 标的信息
      */
     @Schema(description = "标的信息")
-    @NotNull(message = "标的信息不能为空")
     private List<TradeGoodsInfo> goodsInfo;
 
     /**

+ 8 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/QueryLogisticListReq.java

@@ -39,4 +39,12 @@ public class QueryLogisticListReq extends PageReq implements Serializable {
      */
     @Schema(description = "承运单位id")
     private String carriageCompanyId;
+    /**
+     * 状态
+     */
+    private String status;
+    /**
+     * 企业id
+     */
+    private String entId;
 }

+ 5 - 3
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/QueryListResVo.java

@@ -131,6 +131,11 @@ public class QueryListResVo implements Serializable {
      */
     @Schema(description = "父合同名")
     private String contractPname;
+    /**
+     * 主合同编号
+     */
+    @Schema(description = "主合同编号")
+    private String contractPidNo;
 
     /**
      * 计费方式中文名
@@ -212,7 +217,4 @@ public class QueryListResVo implements Serializable {
 
 
 
-
-
-
 }

+ 6 - 2
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsRepository.java

@@ -12,6 +12,7 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 
 /**
@@ -23,12 +24,15 @@ import java.util.Set;
 @Repository
 public class KwcContractLogisticsRepository extends ServiceImpl<KwcContractLogisticsMapper, KwcContractLogistics> {
     public IPage<KwcContractLogistics> queryByPage(int pageNum, int pageSize, String contractNo, String contractName,
-                                                   List<Long> entIdList) {
+                                                   String status,
+                                                   Long entId,Set<Long> contractIds ) {
         return page(new Page<>(pageNum, pageSize), Wrappers.<KwcContractLogistics>lambdaQuery()
                 .eq(KwcContractLogistics::getDelFlag, 0)
-                .in(CollectionUtils.isNotEmpty(entIdList), KwcContractLogistics::getEntId, entIdList)
+                .eq(Objects.nonNull(entId), KwcContractLogistics::getEntId, entId)
                 .like(StringUtils.isNotBlank(contractNo), KwcContractLogistics::getContractNo, contractNo)
                 .like(StringUtils.isNotBlank(contractName), KwcContractLogistics::getName, contractName)
+                .eq(StringUtils.isNotBlank(status), KwcContractLogistics::getStatus, status)
+                .in(CollectionUtils.isNotEmpty(contractIds), KwcContractLogistics::getId, contractIds)
                 .orderByDesc(KwcContractLogistics::getCreateTime)
                 .orderByDesc(KwcContractLogistics::getId));
     }

+ 6 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsUnitRepository.java

@@ -54,4 +54,10 @@ public class KwcContractLogisticsUnitRepository extends ServiceImpl<KwcContractL
                 .eq(KwcContractLogisticsUnit::getEntId, entId)
                 .eq(KwcContractLogisticsUnit::getDelFlag,0));
     }
+
+    public List<KwcContractLogisticsUnit> queryByEntIds(List<Long> entIdList) {
+       return list(Wrappers.<KwcContractLogisticsUnit>lambdaQuery()
+                .eq(KwcContractLogisticsUnit::getDelFlag,0)
+                .in(KwcContractLogisticsUnit::getEntId, entIdList));
+    }
 }

+ 22 - 2
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeRepository.java

@@ -57,15 +57,35 @@ public class KwcContractTradeRepository extends ServiceImpl<KwcContractTradeMapp
                 .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));
+                .in(CollectionUtils.isNotEmpty(authEntIdList),KwcContractTrade::getEntId, authEntIdList));
 
     }
 
+    public List<KwcContractTrade> queryTradeListByPageList( List<Long> authEntIdList,String contractCode,
+                                                         String contractName, String supplementCode,
+                                                            Set<Long> contractIds, Integer status, int pageNum, int pageSize) {
+        return list( 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)
+                .like(StringUtils.isNotBlank(supplementCode),KwcContractTrade::getContractPid, supplementCode)
+                .in(CollectionUtils.isNotEmpty(contractIds),KwcContractTrade::getId, contractIds)
+                .in(CollectionUtils.isNotEmpty(authEntIdList),KwcContractTrade::getEntId, authEntIdList));
+
+    }
+
+
     public List<KwcContractTrade> queryByContractIds(Set<Long> contractPids) {
 
         return list(Wrappers.<KwcContractTrade>lambdaQuery()
                 .eq(KwcContractTrade::getDelFlag,0)
                 .in(KwcContractTrade::getContractPid, contractPids));
     }
+
+    public List<KwcContractTrade> findByContractIds(Set<Long> contractIdList) {
+        return list(Wrappers.<KwcContractTrade>lambdaQuery()
+                .eq(KwcContractTrade::getDelFlag, 0)
+                .in(KwcContractTrade::getId, contractIdList));
+    }
 }

+ 34 - 14
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractLogisticsService.java

@@ -9,6 +9,7 @@ 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.KwcContractLogisticsMapper;
 import com.sckw.contract.model.dto.req.QueryListReqDto;
 import com.sckw.contract.model.dto.res.QueryListResDto;
@@ -40,6 +41,7 @@ import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.product.api.model.KwpGoods;
 import com.sckw.stream.enums.MessageEnum;
 import com.sckw.stream.model.UserInfo;
 import com.sckw.system.api.RemoteSystemService;
@@ -1046,6 +1048,8 @@ public class KwcContractLogisticsService {
 
     public PageDataResult<QueryLogisticListResp> queryLogisticsContractListByPage(QueryLogisticListReq req) {
         log.info("分页查询物流合同参数:{}", JSON.toJSONString( req));
+        Long entId = org.apache.commons.lang3.StringUtils.isNotBlank(req.getEntId()) ?  Long.valueOf(req.getEntId()) :
+                null;
         List<Long> entIdList = Lists.newArrayList();
         if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getConsignCompanyId())){
             entIdList.add(Long.valueOf(req.getConsignCompanyId()));
@@ -1053,10 +1057,18 @@ public class KwcContractLogisticsService {
         if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getCarriageCompanyId())){
             entIdList.add(Long.valueOf(req.getCarriageCompanyId()));
         }
+        //查询物流企业
+        Set<Long> contractIdList = Sets.newHashSet();
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(entIdList)){
+            List<KwcContractLogisticsUnit> units = kwcContractLogisticsUnitRepository.queryByEntIds(entIdList);
+            if (CollectionUtils.isNotEmpty(units)) {
+                contractIdList = units.stream().map(KwcContractLogisticsUnit::getContractId).collect(Collectors.toSet());
+            }
+        }
 
         IPage<KwcContractLogistics> page =kwcContractLogisticsRepository.queryByPage(req.getPageNum(),req.getPageSize(),
                 req.getContractNo(),
-                req.getContractName(),entIdList);
+                req.getContractName(),req.getStatus(),entId,contractIdList);
         List<KwcContractLogistics> records = page.getRecords();
         if (CollectionUtils.isEmpty(records)) {
             return PageDataResult.empty(req.getPageNum(),req.getPageSize());
@@ -1183,17 +1195,17 @@ public class KwcContractLogisticsService {
         saveContractLogistics.setSigningWay(baseInfo.getSigningWay());
         saveContractLogistics.setStartTime(baseInfo.getStartTime());
         saveContractLogistics.setEndTime(baseInfo.getEndTime());
-        saveContractLogistics.setStatus(ContractStatusEnum.WAIT_APPROVE.getCode());
+        saveContractLogistics.setStatus(ContractStatusEnum.SUBMIT.getCode());
         saveContractLogistics.setCreateBy(LoginUserHolder.getUserId());
         saveContractLogistics.setCreateTime(date);
         saveContractLogistics.setUpdateBy(LoginUserHolder.getUserId());
         saveContractLogistics.setUpdateTime(date);
         saveContractLogistics.setCommonPrice(baseInfo.getCommonPrice());
-        saveContractLogistics.setSigningUrl(changeFile(req.getContractFile()));
+        saveContractLogistics.setSigningUrl(req.getContractFile());
         kwcContractLogisticsRepository.saveOrUpdateLogistics(saveContractLogistics);
 
         //保存交易商品信息
-        saveLogisticsGoods(req, contactId);
+        saveLogisticsGoods(req, saveContractLogistics.getId());
         //保存物流企业信息
         List<Long> entIdList = new ArrayList<>();
         if (Objects.nonNull(baseInfo.getProvideEntId())) {
@@ -1207,7 +1219,7 @@ public class KwcContractLogisticsService {
             return false;
         }
 
-        saveLogisticListUnit(entIdList, baseInfo, contactId, date);
+        saveLogisticListUnit(entIdList, baseInfo, saveContractLogistics.getId(), date);
 
         return Boolean.TRUE;
     }
@@ -1228,6 +1240,9 @@ public class KwcContractLogisticsService {
         kwcContractLogisticsGoodsRepository.deleteByContractId(contactId);
         LogisticListReq.TradeBaseInfo baseInfo = req.getBaseInfo();
         List<LogisticListReq.TradeGoodsInfo> goodsInfos = req.getGoodsInfo();
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(goodsInfos)){
+            return;
+        }
         List<KwcContractLogisticsGoods> goods = goodsInfos.stream()
                 .map(x -> getKwcContractLogisticsGoods(x, contactId,baseInfo))
                 .collect(Collectors.toList());
@@ -1239,7 +1254,6 @@ public class KwcContractLogisticsService {
                                                                           long contactId,LogisticListReq.TradeBaseInfo baseInfo) {
         KwcContractLogisticsGoods logisticsGoods = new KwcContractLogisticsGoods();
         Date date1 = new Date();
-        logisticsGoods.setId(x.getGoodsId());
         logisticsGoods.setContractId(contactId);
         logisticsGoods.setGoodsId(x.getGoodsId());
         logisticsGoods.setGoodsName(x.getGoodsName());
@@ -1266,12 +1280,12 @@ public class KwcContractLogisticsService {
         //存供应商
         if(Objects.nonNull(baseInfo.getProvideEntId())) {
             buildLogisticsUnit(contactId, baseInfo.getProvideEntId(), baseInfo.getProvidePhone(), entCacheResDtoMap,
-                    date, units,CooperateTypeEnum.SUPPLIER.getCode());
+                    date, units,CooperateTypeEnum.CONSIGN.getCode());
         }
         //存采购商
         if (Objects.nonNull(baseInfo.getPurchaseEntId())) {
             buildLogisticsUnit(contactId, baseInfo.getPurchaseEntId(), baseInfo.getPurchasePhone(), entCacheResDtoMap
-                    , date, units,CooperateTypeEnum.PURCHASER.getCode());
+                    , date, units,CooperateTypeEnum.CARRIAGE.getCode());
         }
         //删除企业
         kwcContractLogisticsUnitRepository.removeByContractId(contactId);
@@ -1339,18 +1353,18 @@ public class KwcContractLogisticsService {
     }
 
     @NotNull
-    private static QueryLogisticDetailResp getQueryLogisticDetailResp(KwcContractLogistics logistics, Map<String, KwcContractLogisticsUnit> contractUniTypeAndUnitMap, List<KwcContractLogisticsGoods> kwcContractLogisticsGoods) {
+    private QueryLogisticDetailResp getQueryLogisticDetailResp(KwcContractLogistics logistics, Map<String, KwcContractLogisticsUnit> contractUniTypeAndUnitMap, List<KwcContractLogisticsGoods> kwcContractLogisticsGoods) {
         QueryLogisticDetailResp queryLogisticListResp = new QueryLogisticDetailResp();
         queryLogisticListResp.setId(logistics.getId());
         queryLogisticListResp.setPid(logistics.getContractPid());
         QueryLogisticDetailResp.TradeBaseInfo tradeBaseInfo = new QueryLogisticDetailResp.TradeBaseInfo();
-        KwcContractLogisticsUnit logisticsUnit = contractUniTypeAndUnitMap.get(logistics.getId() + "-" + CooperateTypeEnum.PURCHASER.getCode());
+        KwcContractLogisticsUnit logisticsUnit = contractUniTypeAndUnitMap.get(logistics.getId() + "-" + CooperateTypeEnum.CARRIAGE.getCode());
         if (Objects.nonNull(logisticsUnit)){
             tradeBaseInfo.setPurchaseEntId(logisticsUnit.getEntId());
             tradeBaseInfo.setPurchasePhone(logisticsUnit.getPhone());
         }
         KwcContractLogisticsUnit providerLogisticsUnit =
-                contractUniTypeAndUnitMap.get(logistics.getId() + "-" + CooperateTypeEnum.PURCHASER.getCode());
+                contractUniTypeAndUnitMap.get(logistics.getId() + "-" + CooperateTypeEnum.CONSIGN.getCode());
         if (Objects.nonNull(providerLogisticsUnit)){
             tradeBaseInfo.setProvideEntId(providerLogisticsUnit.getEntId());
             tradeBaseInfo.setProvidePhone(providerLogisticsUnit.getPhone());
@@ -1372,8 +1386,13 @@ public class KwcContractLogisticsService {
         queryLogisticListResp.setContractFile(logistics.getSigningUrl());
         List<QueryLogisticDetailResp.TradeGoodsInfo> tradeGoodsInfos = Lists.newArrayList();
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwcContractLogisticsGoods)){
+            //查询商品信息
+            Map<Long, KwpGoods> kwpGoodsMap = goodsInfoService.getGoodsByIds(kwcContractLogisticsGoods.
+                    stream().map(KwcContractLogisticsGoods::getGoodsId)
+                            .distinct()
+                    .collect(Collectors.toList()));
             tradeGoodsInfos = kwcContractLogisticsGoods.stream()
-                    .map(KwcContractLogisticsService::getTradeGoodsInfo)
+                    .map(x->getTradeGoodsInfo(x, kwpGoodsMap))
                     .collect(Collectors.toList());
         }
 
@@ -1382,10 +1401,11 @@ public class KwcContractLogisticsService {
         return queryLogisticListResp;
     }
 
-    private static QueryLogisticDetailResp.TradeGoodsInfo getTradeGoodsInfo(KwcContractLogisticsGoods x) {
+    private static QueryLogisticDetailResp.TradeGoodsInfo getTradeGoodsInfo(KwcContractLogisticsGoods x,Map<Long, KwpGoods> kwpGoodsMap) {
         QueryLogisticDetailResp.TradeGoodsInfo tradeGoodsInfo = new QueryLogisticDetailResp.TradeGoodsInfo();
         tradeGoodsInfo.setGoodsId(x.getGoodsId());
-        tradeGoodsInfo.setGoodsName(x.getGoodsName());
+        KwpGoods kwpGoods = kwpGoodsMap.getOrDefault(x.getGoodsId(), new KwpGoods());
+        tradeGoodsInfo.setGoodsName(kwpGoods.getName()+"/"+kwpGoods.getGoodsType()+"/"+kwpGoods.getSpec());
         tradeGoodsInfo.setAmount(x.getAmount());
         tradeGoodsInfo.setAmountUnit(x.getUnit());
         tradeGoodsInfo.setPrice(x.getPrice());

+ 302 - 73
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractTradeService.java

@@ -4,12 +4,15 @@ 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.api.model.dto.res.ContractLogisticsOrderResDto;
+import com.sckw.contract.api.model.dto.res.ContractTradeOrderDto;
+import com.sckw.contract.api.model.dto.res.ContractTradeOrderInfo;
+import com.sckw.contract.api.model.dto.res.LogisticsOrderDto;
 import com.sckw.contract.dao.KwcContractTradeMapper;
 import com.sckw.contract.model.dto.req.QueryListReqDto;
 import com.sckw.contract.model.dto.res.QueryListResDto;
@@ -97,6 +100,7 @@ public class KwcContractTradeService {
     private final KwcContractTradeOrderRepository kwcContractTradeOrderRepository;
     private final KwcContractLogisticsUnitRepository kwcContractLogisticsUnitRepository;
     private final KwcContractLogisticsGoodsRepository kwcContractLogisticsGoodsRepository;
+    private final KwcContractLogisticsRepository contractLogisticsRepository;
 
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private RemoteSystemService remoteSystemService;
@@ -152,49 +156,69 @@ public class KwcContractTradeService {
      * @date 2023/7/17
      */
     public PageResult queryListByPage(QueryListReqVo reqVo) {
-        PageHelper.startPage(reqVo.getPage(), reqVo.getPageSize());
-        QueryListReqDto queryListReqDto = new QueryListReqDto();
-        BeanUtils.copyProperties(reqVo, queryListReqDto);
-        List<Long> allEnt = new ArrayList<>();
-        if (Objects.isNull(reqVo.getEntId())) {
-            queryListReqDto.setEntId(LoginUserHolder.getEntId());
-        }
-        allEnt.add(queryListReqDto.getEntId());
-
-        EntCacheResDto entCacheResDto = remoteSystemService.queryEntTreeById(queryListReqDto.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());
-            }
-        }
-        queryListReqDto.setAllEnt(allEnt);
 
-        if (StringUtils.isNotBlank(reqVo.getKeywords())) {
-            List<KwsUserResDto> userByName = remoteUserService.getUserByName(reqVo.getKeywords());
-            if (CollectionUtils.isNotEmpty(userByName)) {
-                queryListReqDto.setInitiateList(userByName.stream().map(KwsUserResDto::getId).toList());
-            }
-        }
-
-        List<QueryListResDto> queryListResDtos = kwcContractTradeMapper.queryList(queryListReqDto);
-        if (CollectionUtils.isEmpty(queryListResDtos)) {
-            return PageHelperUtil.getPageResult(new PageInfo<>());
-        }
-
-        //获取贸易合同id
-        Set<Long> tradeContractIds =
-                queryListResDtos.stream().map(QueryListResDto::getId).collect(Collectors.toSet());
-        //查询贸易合同关联商品
-        List<KwcContractTradeGoods> tradeContractGoods = kwcContractTradeGoodsRepository.queryByContractIds(tradeContractIds);
-        Map<Long, List<KwcContractTradeGoods>> contractIdGoodsIdKeyAndGoodsMap = Maps.newHashMap();
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(tradeContractGoods)){
-            contractIdGoodsIdKeyAndGoodsMap =
-                    tradeContractGoods.stream().collect(Collectors.groupingBy(KwcContractTradeGoods::getContractId));
-        }
-        List<QueryListResVo> list = getQueryListResVos(queryListResDtos, contractIdGoodsIdKeyAndGoodsMap);
-        return PageHelperUtil.getPageResult(new PageInfo<>(list), queryListResDtos, reqVo.getPageSize());
+        QueryTradeReq queryTradeReq = new QueryTradeReq();
+        queryTradeReq.setContractCode(reqVo.getContractCode());
+        queryTradeReq.setContractName(reqVo.getContractName());
+        queryTradeReq.setSupplementCode(reqVo.getSupplementCode());
+        queryTradeReq.setPurchaseEntId(reqVo.getPurchaseEntId());
+        queryTradeReq.setSupplyEntId(reqVo.getSupplyEntId());
+        queryTradeReq.setStatus(reqVo.getStatus());
+        queryTradeReq.setEntId(String.valueOf(reqVo.getEntId()));
+        queryTradeReq.setPageNum(reqVo.getPage());
+        queryTradeReq.setPageSize(reqVo.getPageSize());
+
+        List<QueryListResVo> queryListResVoPageDataResult = queryTradeListByPage(queryTradeReq);
+       // List<QueryListResVo> list1 = queryListResVoPageDataResult.getList();
+//        QueryListReqDto queryListReqDto = new QueryListReqDto();
+//        BeanUtils.copyProperties(reqVo, queryListReqDto);
+//        List<Long> allEnt = new ArrayList<>();
+//        if (Objects.isNull(reqVo.getEntId())) {
+//            queryListReqDto.setEntId(LoginUserHolder.getEntId());
+//        }
+//        allEnt.add(queryListReqDto.getEntId());
+//
+//        EntCacheResDto entCacheResDto = remoteSystemService.queryEntTreeById(queryListReqDto.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());
+//            }
+//        }
+//        queryListReqDto.setAllEnt(allEnt);
+//
+//        if (StringUtils.isNotBlank(reqVo.getKeywords())) {
+//            List<KwsUserResDto> userByName = remoteUserService.getUserByName(reqVo.getKeywords());
+//            if (CollectionUtils.isNotEmpty(userByName)) {
+//                queryListReqDto.setInitiateList(userByName.stream().map(KwsUserResDto::getId).toList());
+//            }
+//        }
+//
+//        List<QueryListResDto> queryListResDtos = kwcContractTradeMapper.queryList1(queryListReqDto);
+//        if (CollectionUtils.isEmpty(queryListResDtos)) {
+//            return PageHelperUtil.getPageResult(new PageInfo<>());
+//        }
+//        //查询公司信息
+//        Set<Long> tradeContractIds = queryListResDtos.stream().map(QueryListResDto::getId).collect(Collectors.toSet());
+//        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<KwcContractTradeGoods> tradeContractGoods = kwcContractTradeGoodsRepository.queryByContractIds(tradeContractIds);
+//        Map<Long, List<KwcContractTradeGoods>> contractIdGoodsIdKeyAndGoodsMap = Maps.newHashMap();
+//        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(tradeContractGoods)){
+//            contractIdGoodsIdKeyAndGoodsMap =
+//                    tradeContractGoods.stream().collect(Collectors.groupingBy(KwcContractTradeGoods::getContractId));
+//        }
+//        List<QueryListResVo> list = getQueryListResVos(queryListResDtos, contractIdGoodsIdKeyAndGoodsMap,contractUnitTypeKeyAndUnitMap);
+        return PageHelperUtil.getPageResult(new PageInfo<>(queryListResVoPageDataResult), queryListResVoPageDataResult, reqVo.getPageSize());
     }
 
 
@@ -205,7 +229,8 @@ public class KwcContractTradeService {
      * @author: czh
      * @date: 2023/7/18
      */
-    private List<QueryListResVo> getQueryListResVos(List<QueryListResDto> queryListResDtos,Map<Long, List<KwcContractTradeGoods>> contractIdGoodsIdKeyAndGoodsMap ) {
+    private List<QueryListResVo> getQueryListResVos(List<QueryListResDto> queryListResDtos,Map<Long,
+            List<KwcContractTradeGoods>> contractIdGoodsIdKeyAndGoodsMap,Map<String, KwcContractTradeUnit> contractUnitTypeKeyAndUnitMap ) {
         Map<Long, UserCacheResDto> longUserCacheResDtoMap = new HashMap<>(8);
         List<Long> initiateByList = queryListResDtos.stream().map(QueryListResDto::getInitiateBy).toList();
         if (CollectionUtils.isNotEmpty(initiateByList)) {
@@ -233,6 +258,19 @@ public class KwcContractTradeService {
                 queryListResVo.setInitiateName(userCacheResDto.getName());
                 queryListResVo.setInitiateEntName(Objects.isNull(userCacheResDto.getEntInfo()) ? "" : userCacheResDto.getEntInfo().getFirmName());
             }
+            if (MapUtils.isNotEmpty(contractUnitTypeKeyAndUnitMap)){
+                KwcContractTradeUnit kwcContractTradeUnit =
+                        contractUnitTypeKeyAndUnitMap.getOrDefault(queryListResDto.getId() + "-" + EntTypeEnum.SUPPLIER.getCode()
+                                , new KwcContractTradeUnit());
+                KwcContractTradeUnit contractTradeUnit =
+                        contractUnitTypeKeyAndUnitMap.getOrDefault(queryListResDto.getId() + "-" + EntTypeEnum.PURCHASER.getCode()
+                                , new KwcContractTradeUnit());
+                queryListResVo.setProvideEntId(String.valueOf(kwcContractTradeUnit.getEntId()));
+                queryListResVo.setPurchaseEntId(String.valueOf(contractTradeUnit.getEntId()));
+                queryListResVo.setProvideEntName(kwcContractTradeUnit.getFirmName());
+                queryListResVo.setPurchaseEntName(contractTradeUnit.getFirmName());
+            }
+
             queryListResVo.setTradingName(DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), String.valueOf(queryListResDto.getTrading())));
             queryListResVo.setStatusName(Objects.requireNonNull(ContractStatusEnum.getName(queryListResDto.getStatus())).getName());
             queryListResVo.setSigningWayName(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(), queryListResDto.getSigningWay()));
@@ -281,7 +319,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(reqVo.getContractFile());
         if (kwcContractTradeMapper.insert(kwcContractTrade) <= 0) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
         }
@@ -335,6 +373,10 @@ public class KwcContractTradeService {
                 }
             }
         }
+        KwcContractTrade kwcContractTrade = kwcContractTradeRepository.queryByContractNo(baseInfo.getContractCode());
+        if (Objects.nonNull(kwcContractTrade)) {
+            throw new SystemException("合同编号已存在!");
+        }
     }
 
     private static boolean hasDuplicateGoodsId(List<TradeGoodsInfoReqVo> goodsInfo) {
@@ -728,7 +770,7 @@ public class KwcContractTradeService {
             }
         }
         kwcContractTrade.setAmount(amountTotal);
-        kwcContractTrade.setSigningUrl(changeFile(reqVo.getContractFile()));
+        kwcContractTrade.setSigningUrl(reqVo.getContractFile());
         kwcContractTrade.setStatus(ContractStatusEnum.SAVE.getCode());
         kwcContractTrade.setUpdateBy(LoginUserHolder.getUserId());
         kwcContractTrade.setUpdateTime(date);
@@ -888,7 +930,7 @@ public class KwcContractTradeService {
             throw new SystemException(HttpStatus.SUCCESS_CODE, "暂无数据,请确认!");
         }
 
-        List<QueryListResVo> list = getQueryListResVos(queryListResDtos,null);
+        List<QueryListResVo> list = getQueryListResVos(queryListResDtos,null,null);
         List<TradeListExport> dataList = BeanUtils.copyToList(list, TradeListExport.class);
         ExcelUtil.downData(response, TradeListExport.class, dataList);
     }
@@ -909,7 +951,7 @@ public class KwcContractTradeService {
         if (CollectionUtils.isEmpty(queryListResDtos)) {
             return Collections.emptyList();
         }
-        return getQueryListResVos(queryListResDtos,null);
+        return getQueryListResVos(queryListResDtos,null,null);
     }
 
 
@@ -1135,15 +1177,15 @@ public class KwcContractTradeService {
 
 
         //根据父id查询补充合同id
+        Set<Long> contractIds  = Sets.newHashSet();
         List<KwcContractTrade> kwcContractTrades = kwcContractTradeRepository.queryByPid(req.getPid());
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwcContractTrades)){
-            throw new BusinessException("没有补充合同");
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwcContractTrades)){
+            contractIds.addAll( kwcContractTrades.stream()
+                    .map(KwcContractTrade::getId)
+                    .collect(Collectors.toSet()));
         }
 
         //获取合同id
-        Set<Long> contractIds = kwcContractTrades.stream()
-                .map(KwcContractTrade::getId)
-                .collect(Collectors.toSet());
         contractIds.add(req.getPid());
         //查询标的信息
         //根据商品id查询标的信息和主合同
@@ -1257,7 +1299,7 @@ public class KwcContractTradeService {
 
         kwcContractTrade.setId(contactId);
         kwcContractTrade.setStatus(ContractStatusEnum.SAVE.getCode());
-        kwcContractTrade.setSigningUrl(changeFile(req.getContractFile()));
+        kwcContractTrade.setSigningUrl(req.getContractFile());
         if (kwcContractTradeMapper.insert(kwcContractTrade) <= 0) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
         }
@@ -1327,6 +1369,7 @@ public class KwcContractTradeService {
         //签约 (状态由带签约变成签约)
         if (Objects.equals(req.getStatus(), ContractStatusEnum.SIGNED.getCode()) && Objects.equals(kwcContractTrade.getStatus(), ContractStatusEnum.SUBMIT.getCode())) {
             updateKwcContractTrade.setStatus(ContractStatusEnum.SIGNED.getCode());
+            updateKwcContractTrade.setSignTime(new Date());
         }
         //手动完结 (如果不传状态就表示手动完结) 如果当前状态是待签约或者待签约 那么变为作废
         if (Objects.equals(req.getStatus(),ContractStatusEnum.CANNEL.getCode()) && Arrays.asList(ContractStatusEnum.WAIT_APPROVE.getCode(),
@@ -1385,7 +1428,7 @@ public class KwcContractTradeService {
         ContractDetailResp.TradeBaseInfo baseInfo = getBaseInfo(ctTypeKeyAndUnitMap, kwcContractTrade);
         contractDetailResp.setBaseInfo(baseInfo);
         //文件合同
-        contractDetailResp.setContractFile(kwcContractTrade.getSignedUrl());
+        contractDetailResp.setContractFile(kwcContractTrade.getSigningUrl());
 
         //标地信息
         if (CollectionUtils.isNotEmpty(tradeGoods)){
@@ -1408,7 +1451,7 @@ public class KwcContractTradeService {
         ContractDetailResp.TradeGoodsInfo tradeGoodsInfo = new ContractDetailResp.TradeGoodsInfo();
         tradeGoodsInfo.setGoodsId(t.getGoodsId());
         KwpGoods goods = finalGoodsIdAndGoodsMap.getOrDefault(t.getGoodsId(), new KwpGoods());
-        tradeGoodsInfo.setGoodsName(goods.getName());
+        tradeGoodsInfo.setGoodsName(goods.getName()+"/"+goods.getGoodsType()+"/"+goods.getSpec());
         tradeGoodsInfo.setAmount(t.getAmount());
         tradeGoodsInfo.setPrice(t.getPrice());
         tradeGoodsInfo.setUnit(t.getUnit());
@@ -1453,7 +1496,9 @@ public class KwcContractTradeService {
         return tradeBaseInfo;
     }
 
-    public PageDataResult<QueryListResVo> queryTradeListByPage(QueryTradeReq req) {
+    public  List<QueryListResVo> queryTradeListByPage(QueryTradeReq req) {
+
+        Long entId = StringUtils.isNotBlank(req.getEntId()) ? Long.valueOf(req.getEntId()) : null;
         Set<Long> entIds = Sets.newHashSet();
         if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getPurchaseEntId())) {
             //查询企业 信息
@@ -1462,7 +1507,7 @@ public class KwcContractTradeService {
         if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getSupplyEntId())) {
             entIds.add(Long.valueOf(req.getSupplyEntId()));
         }
-        Set<Long> contractIds = Sets.newHashSet();
+        Set<Long> contractIds = null;
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(entIds)){
            List<KwcContractTradeUnit> units = kwcContractTradeUnitRepository.queryByEntIds(entIds);
            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(units)){
@@ -1472,25 +1517,30 @@ public class KwcContractTradeService {
         List<Long> allEnt = Lists.newArrayList();
         if (StringUtils.isBlank(req.getEntId())) {
             req.setEntId(String.valueOf(LoginUserHolder.getEntId()));
+            allEnt.add(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());
+
+        if (Objects.nonNull(entId)) {
+         allEnt.add(entId);
+         EntCacheResDto entCacheResDto = remoteSystemService.queryEntTreeById(entId);
+            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());
+                }
             }
         }
-
+        PageHelper.startPage(req.getPageNum(), req.getPageSize());
         //分页查询合同信息
-        IPage<KwcContractTrade> page = kwcContractTradeRepository.queryTradeListByPage(allEnt,
+        List<KwcContractTrade> records = kwcContractTradeRepository.queryTradeListByPageList(allEnt,
                 req.getContractCode(),
                 req.getContractName(),
+                req.getSupplementCode(),
                 contractIds, req.getStatus(), req.getPageNum(), req.getPageSize());
-        List<KwcContractTrade> records = page.getRecords();
+       // List<KwcContractTrade> records = page.getRecords();
         if (org.apache.commons.collections4.CollectionUtils.isEmpty(records)){
-            return PageDataResult.empty(req.getPageNum(), req.getPageSize());
+            return Collections.emptyList();
         }
         Set<Long> tradeContractIds = records.stream().map(KwcContractTrade::getId).collect(Collectors.toSet());
         //获取父id
@@ -1524,10 +1574,18 @@ public class KwcContractTradeService {
         List<QueryListResVo> queryListResVos = records.stream()
                 .map(t -> getQueryListResVo(t, finalContractUnitTypeKeyAndUnitMap, finalPidIdAndTradeMap, longUserCacheResDtoMap))
                 .collect(Collectors.toList());
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getPurchaseEntId())){
+            queryListResVos = queryListResVos.stream()
+                    .filter(x-> org.apache.commons.lang3.StringUtils.equals(x.getPurchaseEntId(), req.getPurchaseEntId()))
+                    .collect(Collectors.toList());
+        }
 
-
-
-        return PageDataResult.of(page, queryListResVos);
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getSupplyEntId())){
+            queryListResVos = queryListResVos.stream()
+                    .filter(x-> org.apache.commons.lang3.StringUtils.equals(x.getProvideEntId(), req.getSupplyEntId()))
+                    .collect(Collectors.toList());
+        }
+        return queryListResVos;
     }
 
     @NotNull
@@ -1576,7 +1634,178 @@ public class KwcContractTradeService {
         queryListResVo.setEndTime(t.getEndTime());
         queryListResVo.setInitiateTime(t.getCreateTime());
         queryListResVo.setRemark(t.getRemark());
-        queryListResVo.setSignTime(t.getCreateTime());
+        queryListResVo.setSignTime(t.getSignTime());
         return queryListResVo;
     }
+
+
+    public List<ContractLogisticsOrderResDto> queryContractLogisticsOrder(LogisticsOrderDto logisticsOrderDto) {
+        log.info("查询物流合同请求:{}",JSON.toJSONString( logisticsOrderDto));
+
+        if (Objects.isNull(logisticsOrderDto.getGoodsId())) {
+            throw new BusinessException("商品id不能为空!");
+        }
+        if (Objects.isNull(logisticsOrderDto.getEntId())) {
+            throw new BusinessException("托运方企业id不能为空!");
+        }
+        //通过托运企业查询物流公司
+        List<KwcContractLogisticsUnit> contractLogistics =
+                kwcContractLogisticsUnitRepository.queryByEntId(logisticsOrderDto.getEntId());
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(contractLogistics)){
+            return Collections.emptyList();
+        }
+        //物流订单合id
+        Set<Long> logTradeContractIds = contractLogistics.stream()
+                .map(KwcContractLogisticsUnit::getContractId).collect(Collectors.toSet());
+
+        //查询商品信息
+        List<KwcContractLogisticsGoods> kwcContractLogisticsGoods = kwcContractLogisticsGoodsRepository.queryByLogIdsAndGoodsId(logTradeContractIds,
+                logisticsOrderDto.getGoodsId());
+        Map<Long, KwcContractLogisticsGoods> contractLogisticsGoodsMap = Maps.newHashMap();
+
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwcContractLogisticsGoods)){
+            contractLogisticsGoodsMap = kwcContractLogisticsGoods.stream()
+                    .collect(Collectors.toMap(KwcContractLogisticsGoods::getContractId,
+                            Function.identity(), (x, y) -> x));
+            logTradeContractIds = kwcContractLogisticsGoods.stream()
+                    .map(KwcContractLogisticsGoods::getContractId)
+                    .collect(Collectors.toSet());
+        }
+
+        //查询物流订单
+        List<KwcContractLogistics> logistics = contractLogisticsRepository.queryByLogisticContractIds(logTradeContractIds);
+        if (CollectionUtils.isEmpty( logistics)){
+            return Collections.emptyList();
+        }
+        Date date = new Date();
+        logistics = logistics.stream()
+                .filter(log -> Objects.equals(log.getStatus(),ContractStatusEnum.SIGNED.getCode())
+                && log.getStartTime().before(date) &&  log.getEndTime().after( date))
+                .collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(logistics)){
+            return Collections.emptyList();
+        }
+        //查询企业
+        List<KwcContractLogisticsUnit> units = kwcContractLogisticsUnitRepository.queryByContractIds(logTradeContractIds);
+        //物流订单和类型组成唯一key
+        Map<String, KwcContractLogisticsUnit> contractLogisticsMap = Maps.newHashMap();
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(units)){
+            contractLogisticsMap = units.stream()
+                            .collect(Collectors.toMap(c -> c.getContractId() + "_" + c.getUnitType(),
+                                    Function.identity(), (x, y) -> x));
+        }
+        Map<String, KwcContractLogisticsUnit> finalContractLogisticsMap = contractLogisticsMap;
+        Map<Long, KwcContractLogisticsGoods> finalContractLogisticsGoodsMap = contractLogisticsGoodsMap;
+        return logistics.stream()
+                .map(log -> getContractLogisticsOrderResDto(log, finalContractLogisticsMap, finalContractLogisticsGoodsMap))
+                .collect(Collectors.toList());
+
+    }
+
+    @NotNull
+    private static ContractLogisticsOrderResDto getContractLogisticsOrderResDto(KwcContractLogistics log, Map<String, KwcContractLogisticsUnit> contractLogisticsMap, Map<Long, KwcContractLogisticsGoods> contractLogisticsGoodsMap) {
+        ContractLogisticsOrderResDto contractLogisticsOrderResDto = new ContractLogisticsOrderResDto();
+        contractLogisticsOrderResDto.setId(log.getId());
+        contractLogisticsOrderResDto.setContactName(log.getName());
+        contractLogisticsOrderResDto.setContractNo(log.getContractNo());
+        contractLogisticsOrderResDto.setSigningWay(log.getSigningWay());
+        contractLogisticsOrderResDto.setStatus(log.getStatus());
+        KwcContractLogisticsUnit consignEnt = contractLogisticsMap.getOrDefault(log.getId() + "_" + CooperateTypeEnum.CONSIGN.getCode(),
+                new KwcContractLogisticsUnit());
+        KwcContractLogisticsUnit acceptCarriageEnt = contractLogisticsMap.getOrDefault(log.getId() + "_" + CooperateTypeEnum.CARRIAGE.getCode(),
+                new KwcContractLogisticsUnit());
+        contractLogisticsOrderResDto.setConsignEntId(consignEnt.getContractId());
+        contractLogisticsOrderResDto.setConsignEntName(consignEnt.getFirmName());
+        contractLogisticsOrderResDto.setAcceptCarriageEntId(acceptCarriageEnt.getContractId());
+        contractLogisticsOrderResDto.setAcceptCarriageEntName(acceptCarriageEnt.getFirmName());
+        KwcContractLogisticsGoods goods = contractLogisticsGoodsMap.getOrDefault(log.getId(),
+                new KwcContractLogisticsGoods());
+        contractLogisticsOrderResDto.setPrice(StringUtils.isNotBlank(goods.getPrice()) ? goods.getPrice() : log.getCommonPrice());
+        return contractLogisticsOrderResDto;
+    }
+
+
+
+    public List<ContractTradeOrderInfo> queryContractTradeOrder(ContractTradeOrderDto contractTradeOrderDto) {
+        log.info("查询贸易合同订单,请求:{}", JSON.toJSONString(contractTradeOrderDto));
+        checkParam(contractTradeOrderDto.getGoodsId(), contractTradeOrderDto.getEntId(), contractTradeOrderDto.getEntType());
+        //查询贸易合同企业信息
+        List<KwcContractTradeUnit> tradeUnits = kwcContractTradeUnitRepository.queryByEntIdAndUnitType(contractTradeOrderDto.getEntId(),
+                contractTradeOrderDto.getEntType());
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(tradeUnits)){
+            return Collections.emptyList();
+        }
+        Map<String, KwcContractTradeUnit> conTractTradeUnitMap =
+                tradeUnits.stream().collect(Collectors.toMap(x -> x.getContractId() +
+                        "_" + x.getUnitType(), Function.identity(),
+                (x, y) -> x));
+        Set<Long> contractIds =
+                tradeUnits.stream().map(KwcContractTradeUnit::getContractId).collect(Collectors.toSet());
+        //查询商品信息
+        List<KwcContractTradeGoods> kwcContractGoods = kwcContractTradeGoodsRepository.queryByContractIdsAndGoodsId(contractIds,
+                contractTradeOrderDto.getGoodsId());
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwcContractGoods)){
+            return Collections.emptyList();
+        }
+        //只查询已签约的
+        Set<Long> contractIdList = kwcContractGoods.stream()
+                .filter(x->Objects.equals(x.getStatus(), ContractStatusEnum.SIGNED.getCode()))
+                .map(KwcContractTradeGoods::getContractId)
+                .collect(Collectors.toSet());
+        //查询贸易合同
+        List<KwcContractTrade> kwcContractTrades = kwcContractTradeRepository.findByContractIds(contractIdList);
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwcContractTrades)){
+            return Collections.emptyList();
+        }
+        return kwcContractTrades.stream()
+                .map(x-> getContractTradeOrderInfo(x, conTractTradeUnitMap,contractTradeOrderDto.getEntType()))
+                .collect(Collectors.toList());
+    }
+    private static void checkParam(Long contractTradeOrderDto, Long contractTradeOrderDto1, Integer contractTradeOrderDto2) {
+        if (Objects.isNull(contractTradeOrderDto)) {
+            throw new BusinessException("商品id不能为空!");
+        }
+        if (Objects.isNull(contractTradeOrderDto1)) {
+            throw new BusinessException("托运方企业id不能为空!");
+        }
+        if (Objects.isNull(contractTradeOrderDto2)) {
+            throw new BusinessException("企业类型不能为空!");
+        }
+    }
+    @NotNull
+    private static ContractTradeOrderInfo getContractTradeOrderInfo(KwcContractTrade c, Map<String,
+            KwcContractTradeUnit> conTractTradeUnitMap,Integer entType) {
+        ContractTradeOrderInfo contractTradeOrderInfo = new ContractTradeOrderInfo();
+        contractTradeOrderInfo.setId(c.getId());
+        KwcContractTradeUnit unit = conTractTradeUnitMap.getOrDefault(c.getId() + "_" + entType,
+                new KwcContractTradeUnit());
+        contractTradeOrderInfo.setEntId(unit.getEntId());
+        contractTradeOrderInfo.setContractNo(unit.getFirmName());
+        contractTradeOrderInfo.setName(c.getName());
+        contractTradeOrderInfo.setSigningWay(c.getSigningWay());
+        contractTradeOrderInfo.setTrading(c.getTrading());
+        contractTradeOrderInfo.setStartTime(c.getStartTime());
+        contractTradeOrderInfo.setEndTime(c.getEndTime());
+        contractTradeOrderInfo.setAmount(c.getAmount());
+        contractTradeOrderInfo.setPerformedAmount(c.getPerformedAmount());
+        contractTradeOrderInfo.setSigningUrl(c.getSigningUrl());
+        contractTradeOrderInfo.setSignedUrl(c.getSignedUrl());
+        contractTradeOrderInfo.setSigningNo(c.getSigningNo());
+        contractTradeOrderInfo.setContractPid(c.getContractPid());
+        contractTradeOrderInfo.setRemark(c.getRemark());
+        contractTradeOrderInfo.setStatus(c.getStatus());
+        contractTradeOrderInfo.setCreateBy(c.getCreateBy());
+        contractTradeOrderInfo.setCreateTime(c.getCreateTime());
+        contractTradeOrderInfo.setUpdateBy(c.getUpdateBy());
+        contractTradeOrderInfo.setUpdateTime(c.getUpdateTime());
+        contractTradeOrderInfo.setDelFlag(c.getDelFlag());
+        contractTradeOrderInfo.setBusinessId(c.getBusinessId());
+        contractTradeOrderInfo.setSettlement(c.getSettlement());
+        contractTradeOrderInfo.setConsignment(c.getConsignment());
+        contractTradeOrderInfo.setUnloadWay(c.getUnloadWay());
+        contractTradeOrderInfo.setSalesmanId(c.getSalesmanId());
+        contractTradeOrderInfo.setSalesmanPhone(c.getSalesmanPhone());
+        return contractTradeOrderInfo;
+    }
+
 }

+ 132 - 42
sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractTradeMapper.xml

@@ -9,21 +9,21 @@
                a.trading,
                a.name contractName,
                a.contract_no,
-               c.create_by initiateBy,
-               c.create_time initiateTime,
+               a.create_by initiateBy,
+               a.create_time initiateTime,
                a.create_time,
                a.start_time,
                a.end_time,
                a.id,
                a.remark,
                a.signing_way,
-               d.create_time signTime,
+               a.create_time signTime,
                a.status,
                b.unit_type,
                b.ent_id,
                b.firm_name entName,
-               e.ent_id targetEntId,
-               e.firm_name targetEntName,
+               b.ent_id targetEntId,
+               b.firm_name targetEntName,
                a.contract_pid contractPid,
                a.performed_amount performedAmount,
                f.name contractPname,
@@ -32,17 +32,17 @@
           from kwc_contract_trade a
           left join kwc_contract_trade_unit b
             on a.id = b.contract_id
-           and b.unit_type = #{entType}
-           and case when a.status != 3 then b.ent_id in
-                <foreach collection="allEnt" separator="," open="(" close=")" item="item">
-                    #{item}
-                </foreach>
-               else 1=1
-                end
+<!--           and b.unit_type = #{entType}-->
+<!--           and case when a.status != 3 then b.ent_id in-->
+<!--                <foreach collection="allEnt" separator="," open="(" close=")" item="item">-->
+<!--                    #{item}-->
+<!--                </foreach>-->
+<!--               else 1=1-->
+<!--                end-->
            and b.del_flag = 0
-          left join kwc_contract_trade_track c on a.id = c.contract_id and c.del_flag = 0 and c.type = 1
-          left join kwc_contract_trade_track d on a.id = d.contract_id and d.del_flag = 0 and d.type = 0
-          left join kwc_contract_trade_unit e on a.id = e.contract_id and e.unit_type != #{entType} and e.del_flag = 0
+<!--          left join kwc_contract_trade_track c on a.id = c.contract_id and c.del_flag = 0 -->
+<!--          left join kwc_contract_trade_track d on a.id = d.contract_id and d.del_flag = 0 -->
+<!--          left join kwc_contract_trade_unit e on a.id = e.contract_id and e.unit_type != #{entType} and e.del_flag = 0-->
           left join kwc_contract_trade f on f.id = a.contract_pid
          where a.del_flag = 0
 <!--           and case when a.status = 3 then a.ent_id = #{entId} and #{entType} = 1-->
@@ -61,26 +61,26 @@
         <if test="status != null">
             and a.status = #{status}
         </if>
-        <if test="keywords != null and keywords != ''">
-            and (b.firm_name like concat('%', #{keywords}, '%') or
-                 e.firm_name like concat('%', #{keywords}, '%') or
-                 b.phone like concat('%', #{keywords}, '%') or
-                 b.sign_phone like concat('%', #{keywords}, '%') or
-                 a.contract_no like concat('%', #{keywords}, '%') or
-                 a.name like concat('%', #{keywords}, '%')
-                 <if test="initiateList != null and initiateList.size() > 0">
-                     or a.create_by in
-                     <foreach collection="initiateList" item="item" open="(" close=")" separator=",">
-                         #{item}
-                     </foreach>
-                 </if> )
-        </if>
-        <if test="idList != null and idList.size() > 0">
-            and a.id in
-            <foreach collection="idList" open="(" close=")" separator="," item="item">
-                #{item}
-            </foreach>
-        </if>
+<!--        <if test="keywords != null and keywords != ''">-->
+<!--            and (b.firm_name like concat('%', #{keywords}, '%') or-->
+<!--                 e.firm_name like concat('%', #{keywords}, '%') or-->
+<!--                 b.phone like concat('%', #{keywords}, '%') or-->
+<!--                 b.sign_phone like concat('%', #{keywords}, '%') or-->
+<!--                 a.contract_no like concat('%', #{keywords}, '%') or-->
+<!--                 a.name like concat('%', #{keywords}, '%')-->
+<!--                 <if test="initiateList != null and initiateList.size() > 0">-->
+<!--                     or a.create_by in-->
+<!--                     <foreach collection="initiateList" item="item" open="(" close=")" separator=",">-->
+<!--                         #{item}-->
+<!--                     </foreach>-->
+<!--                 </if> )-->
+<!--        </if>-->
+<!--        <if test="idList != null and idList.size() > 0">-->
+<!--            and a.id in-->
+<!--            <foreach collection="idList" open="(" close=")" separator="," item="item">-->
+<!--                #{item}-->
+<!--            </foreach>-->
+<!--        </if>-->
         <if test="trading != null">
             and a.trading = #{trading}
         </if>
@@ -88,25 +88,25 @@
             and a.signing_way = #{signingWay}
         </if>
         <if test="targetEntId != null">
-            and e.ent_id = #{targetEntId}
+            and b.ent_id = #{targetEntId}
         </if>
         <if test="contractCode != null  and '' != contractCode">
-            and f.contract_no like concat('%',#{contractCode},'%')
+            and a.contract_no like concat('%',#{contractCode},'%')
         </if>
         <if test="contractName != null  and '' != contractName">
-            and f.name  like concat('%',#{contractName},'%')
+            and a.name  like concat('%',#{contractName},'%')
         </if>
         <if test="supplementCode != null  and '' != supplementCode">
             and f.contract_pid != null
             and f.contract_no  like concat('%',#{supplementCode},'%')
         </if>
         <if test="purchaseEntId != null  and '' != purchaseEntId">
-            and e.unit_type = 2
-            and e.id  = #{purchaseEntId}
+            and b.unit_type = 2
+            and b.id  = #{purchaseEntId}
         </if>
         <if test="supplyEntId != null  and '' != supplyEntId">
-            and e.unit_type = 1
-            and e.id = #{supplyEntId}
+            and b.unit_type = 1
+            and b.id = #{supplyEntId}
         </if>
         order by a.create_time desc
     </select>
@@ -207,4 +207,94 @@
         order by a.create_time desc
     </select>
 
+    <select id="queryList1" resultType="com.sckw.contract.model.dto.res.QueryListResDto">
+        select a.amount,
+        a.trading,
+        a.name contractName,
+        a.contract_no,
+        a.create_by initiateBy,
+        a.create_time initiateTime,
+        a.create_time,
+        a.start_time,
+        a.end_time,
+        a.id,
+        a.remark,
+        a.signing_way,
+        a.sign_time signTime,
+        a.status,
+        b.unit_type,
+        b.ent_id,
+        b.firm_name entName,
+        b.ent_id targetEntId,
+        b.firm_name targetEntName,
+        a.contract_pid contractPid,
+        a.performed_amount performedAmount,
+        f.name contractPname,
+        f.contract_no contractPidNo,
+        a.unload_way   unloadWay,
+        a.signing_way signingWay
+        from kwc_contract_trade a
+        left join kwc_contract_trade_unit b
+        on a.id = b.contract_id
+        and b.del_flag = 0
+
+        left join kwc_contract_trade f on f.id = a.contract_pid
+        where a.del_flag = 0
+        <if test="startTime != null">
+            and a.create_time >= #{startTime}
+        </if>
+        <if test="endTime != null">
+            and a.create_time &lt;= #{endTime}
+        </if>
+        <if test="status != null">
+            and a.status = #{status}
+        </if>
+        <if test="trading != null">
+            and a.trading = #{trading}
+        </if>
+        <if test="signingWay != null">
+            and a.signing_way = #{signingWay}
+        </if>
+        <if test="targetEntId != null">
+            and b.ent_id = #{targetEntId}
+        </if>
+        <if test="contractCode != null  and '' != contractCode">
+            and a.contract_no like concat('%',#{contractCode},'%')
+        </if>
+        <if test="contractName != null  and '' != contractName">
+            and a.name  like concat('%',#{contractName},'%')
+        </if>
+        <if test="supplementCode != null  and '' != supplementCode">
+            and f.contract_no  like concat('%',#{supplementCode},'%')
+        </if>
+        <if test="purchaseEntId != null  and '' != purchaseEntId">
+            and b.unit_type = 2
+            and b.id  = #{purchaseEntId}
+        </if>
+        <if test="supplyEntId != null  and '' != supplyEntId">
+            and b.unit_type = 1
+            and b.id = #{supplyEntId}
+        </if>
+        <if test="allEnt != null and allEnt.size() > 0">
+            and a.ent_id in
+            <foreach collection="allEnt" separator="," open="(" close=")" item="item">
+                 #{item}
+            </foreach>
+        </if>
+        order by a.create_time desc
+    </select>
+
+    <select id="queryNewSignPrice" resultType="com.sckw.contract.api.model.vo.TradeContractGoodsDto">
+        select  a.id, b.price
+        from kwc_contract_trade a
+                 left join kwc_contract_trade_goods b on a.id = b.contract_id and b.del_flag = 0
+        <where>
+            a.del_flag = 0
+              and a.status = 0
+              and a.ent_id = #{entId}
+              and b.goods_id = #{goodsId}
+            order by a.create_time desc
+            limit 1
+        </where>
+    </select>
 </mapper>

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

@@ -43,6 +43,7 @@ public class RemoteFleetServiceImpl implements RemoteFleetService {
     private final KwfFleetTruckRepository kwfFleetTruckRepository;
     private final KwfTruckRouteRepository kwfTruckRouteRepository;
     private final KwfTruckAxleNumRepository kwfTruckAxleNumRepository;
+    private final KwfFleetRepository kwfFleetRepository;
 
     /**
      * @param driverIds 司机档案主键id,多个已逗号隔开
@@ -414,6 +415,39 @@ public class RemoteFleetServiceImpl implements RemoteFleetService {
                 .collect(Collectors.toList());
     }
 
+    @Override
+    public RFleetVo findFleetByTruckId(Long truckId, Long entId) {
+        KwfFleetTruck fleetByTruckId = kwfFleetTruckRepository.findFleetByTruckId(truckId, entId);
+        if(Objects.isNull(fleetByTruckId)){
+            return new RFleetVo();
+        }
+        KwfFleet fleet = kwfFleetRepository.queryByFleetId(fleetByTruckId.getFleetId());
+        if (Objects.isNull(fleet)){
+            return new RFleetVo();
+        }
+        return getFleetVo(fleet);
+    }
+
+    @NotNull
+    private static RFleetVo getFleetVo(KwfFleet fleet) {
+        RFleetVo rFleetVo = new RFleetVo();
+        rFleetVo.setId(fleet.getId());
+        rFleetVo.setRemark(fleet.getRemark());
+        rFleetVo.setStatus(fleet.getStatus());
+        rFleetVo.setCreateBy(fleet.getCreateBy());
+        rFleetVo.setCreateTime(fleet.getCreateTime());
+        rFleetVo.setUpdateBy(fleet.getUpdateBy());
+        rFleetVo.setUpdateTime(fleet.getUpdateTime());
+        rFleetVo.setDelFlag(fleet.getDelFlag());
+        rFleetVo.setEntId(fleet.getEntId());
+        rFleetVo.setCaptainId(fleet.getCaptainId());
+        rFleetVo.setName(fleet.getName());
+        rFleetVo.setContacts(fleet.getContacts());
+        rFleetVo.setPhone(fleet.getPhone());
+
+        return rFleetVo;
+    }
+
     @NotNull
     private static RFleetVo getRFleetVo(KwfFleet fleet) {
         RFleetVo rFleetVo = new RFleetVo();

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

@@ -22,4 +22,8 @@ public class QueryFleetReq extends PageReq implements Serializable {
      * 车队id
      */
     private String fleetId;
+    /**
+     * 企业id
+     */
+    private String entId;
 }

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

@@ -64,10 +64,12 @@ public class KwfFleetRepository extends ServiceImpl<KwfFleetMapper, KwfFleet> {
                 .last("limit 1"));
     }
 
-    public IPage<KwfFleet> queryByPage(String fleetId, int pageNum, int pageSize) {
+    public IPage<KwfFleet> queryByPage(Set<Long> allEnt,Long fleetId, int pageNum, int pageSize) {
         return page(new Page<>(pageNum, pageSize),
                 Wrappers.<KwfFleet>lambdaQuery()
                         .eq(BaseModel::getDelFlag,0)
-                        .eq(StringUtils.isNotBlank(fleetId),KwfFleet::getId, fleetId));
+                        .eq(Objects.nonNull(fleetId),KwfFleet::getId, fleetId)
+                        .in(CollectionUtils.isNotEmpty(allEnt),KwfFleet::getEntId, allEnt)
+                        .orderByDesc(BaseModel::getId));
     }
 }

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

@@ -35,4 +35,13 @@ public class KwfFleetTruckRepository extends ServiceImpl<KwfFleetTruckMapper, Kw
                 .eq(BaseModel::getDelFlag,0).
                 in(KwfFleetTruck::getTruckId, truckIds));
     }
+
+    public KwfFleetTruck findFleetByTruckId(Long truckId, Long entId) {
+        return getOne(Wrappers.<KwfFleetTruck>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0)
+                .eq(KwfFleetTruck::getTruckId, truckId)
+                .eq(KwfFleetTruck::getEntId,entId)
+                .orderByDesc(BaseModel::getId)
+                .last("limit 1"));
+    }
 }

+ 31 - 3
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfFleetService.java

@@ -29,6 +29,7 @@ import com.sckw.fleet.repository.KwfFleetRepository;
 import com.sckw.fleet.repository.KwfFleetTruckRepository;
 import com.sckw.fleet.repository.KwfTruckRepository;
 import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -210,9 +211,13 @@ public class KwfFleetService {
 
     public PageDataResult<QueryFleetResp> findFleetByPage(QueryFleetReq req) {
         log.info("查询车队列表请求:{}", JSON.toJSONString( req));
-        IPage<KwfFleet> page = kwfFleetRepository.queryByPage(req.getFleetId(),req.getPageNum(), req.getPageSize());
+        Set<Long> allEnt = getAllEnt(req);
+        Long fleetId = org.apache.commons.lang3.StringUtils.isNotBlank(req.getFleetId()) ?
+                Long.valueOf(req.getFleetId()) : null;
+        IPage<KwfFleet> page = kwfFleetRepository.queryByPage(allEnt,fleetId,req.getPageNum(),
+                req.getPageSize());
         List<KwfFleet> records = page.getRecords();
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(records)){
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(records)){
             return PageDataResult.empty(req.getPageNum(), req.getPageSize());
         }
         Set<Long> userIds = Sets.newHashSet();
@@ -220,9 +225,11 @@ public class KwfFleetService {
         records.forEach(item -> {
             userIds.add(item.getCreateBy());
             userIds.add(item.getCaptainId());
+            fleetIds.add(item.getId());
         });
         //查询用户信息
-        Map<Long, UserCacheResDto> userIdAndUserCacheResDtoMap = remoteSystemService.queryUserCacheMapByIds(new ArrayList<>(userIds));
+        Map<Long, UserCacheResDto> userIdAndUserCacheResDtoMap =
+                remoteSystemService.queryUserCacheMapByIds(new ArrayList<>(userIds));
         //查询车辆
         List<KwfFleetTruck> kwfFleetTrucks = kwfFleetTruckRepository.queryByFleetIds(fleetIds);
         Map<Long, List<KwfFleetTruck>> fleetIdAndKwfFleetTruckList = Maps.newHashMap();
@@ -250,6 +257,27 @@ public class KwfFleetService {
                 .toList();
         return PageDataResult.of(page, fleets);
     }
+    private Set<Long> getAllEnt(QueryFleetReq req) {
+        Set<Long> allEnt = Sets.newHashSet();
+        //根据企业类型查询企业
+        if (StringUtils.isBlank(req.getEntId())){
+            req.setEntId(String.valueOf(LoginUserHolder.getEntId()));
+        }
+
+        if (StringUtils.isBlank(req.getEntId())){
+            return allEnt;
+        }
+        allEnt.add( Long.parseLong(req.getEntId()));
+        EntCacheResDto entCacheResDto = remoteSystemService.queryEntTreeById(Long.parseLong(req.getEntId()));
+        if (Objects.nonNull(entCacheResDto)) {
+            EntCacheResDto entCacheResDto1 = remoteSystemService.queryEntTreeById(entCacheResDto.getId());
+            List<EntCacheResDto> child = entCacheResDto1.getChild();
+            if (CollectionUtils.isNotEmpty(child)) {
+                allEnt.addAll(child.stream().map(EntCacheResDto::getId).toList());
+            }
+        }
+        return allEnt;
+    }
 
     @NotNull
     private static QueryFleetResp getQueryFleetResp(KwfFleet item,

+ 5 - 1
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/controller/KwmAddressController.java

@@ -4,6 +4,8 @@ import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.manage.model.vo.req.*;
 import com.sckw.manage.service.KwmAddressService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +22,7 @@ import org.springframework.web.bind.annotation.RestController;
  */
 @RestController
 @RequestMapping("/kwmAddress")
+@Tag(name = "地址管理", description = "地址管理")
 public class KwmAddressController {
 
     @Autowired
@@ -110,7 +113,8 @@ public class KwmAddressController {
      * @return HttpResult
      */
     @PostMapping("queryByEnt")
-    public HttpResult queryByEnt(@RequestBody QueryByEntReqVo reqVo) {
+    @Operation(summary = "查询地址信息", description = "查企业下的地址")
+    public HttpResult queryByEnt(@RequestBody @Valid QueryByEntReqVo reqVo) {
         return HttpResult.ok(kwmAddressService.queryByEnt(reqVo));
     }
 

+ 10 - 7
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/model/vo/req/QueryByEntReqVo.java

@@ -1,5 +1,7 @@
 package com.sckw.manage.model.vo.req;
 
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
 import java.io.Serial;
@@ -11,6 +13,7 @@ import java.io.Serializable;
  * @date 2023/7/19
  */
 @Data
+@Schema(description = "查询地址信息参数")
 public class QueryByEntReqVo implements Serializable {
 
     @Serial
@@ -19,25 +22,25 @@ public class QueryByEntReqVo implements Serializable {
     /**
      * 企业id
      */
+    @Schema(description = "企业id", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "企业id不能为空")
     private Long id;
 
     /**
      * 地址名称
      */
+    @Schema(description = "地址名称")
     private String name;
 
     /**
-     * 地址名
+     * 所属区域名称
      */
+    @Schema(description = "所属区域名称")
     private String cityName;
 
     /**
-     * 地址名
-     */
-    private String cityTrueName;
-
-    /**
-     * 装货卸货地点
+     * 地址类型
      */
+    @Schema(description = "地址类型")
     private Integer defaultType;
 }

+ 0 - 3
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmAddressService.java

@@ -426,9 +426,6 @@ public class KwmAddressService {
         LambdaQueryWrapper<KwmAddress> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(KwmAddress::getDelFlag, Global.NO);
         wrapper.eq(KwmAddress::getEntId, entCacheResDto.getId());
-        if (StringUtils.isNotBlank(reqVo.getCityTrueName())) {
-            wrapper.eq(KwmAddress::getName, reqVo.getCityTrueName());
-        }
         if (StringUtils.isNotBlank(reqVo.getName())) {
             wrapper.like(KwmAddress::getName, reqVo.getName());
         }

+ 45 - 56
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmCooperateManageService.java

@@ -639,63 +639,52 @@ public class KwmCooperateManageService {
      * @date: 2023/7/22
      */
     public List<FindCooperateByEntResVo> findTargetEntCooperateInOur(FindCooperateByEntReqVo reqVo) {
-        FindCooperateByEntReqVo param = new FindCooperateByEntReqVo();
-        param.setEntId(reqVo.getTargetEntId());
-        param.setCooperateType(commonBusinessService.changeCooperateType(reqVo.getCooperateType()));
-        //查对方有哪些合作单位,再筛选出我方的单位(包括我方主体单位)
-        List<FindCooperateByEntResVo> cooperateByEnt = findCooperateByEnt(param);
-        if (CollectionUtils.isEmpty(cooperateByEnt)) {
-            return Collections.emptyList();
-        }
-
-        Map<Long, EntCacheResDto> longEntCacheResDtoMap = remoteSystemService.queryEntTreeByIds(Collections.singletonList(reqVo.getEntId()));
-        if (longEntCacheResDtoMap.isEmpty()) {
-            throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.ENT_NOT_EXISTS);
-        }
-
-        EntCacheResDto entCacheResDto = longEntCacheResDtoMap.get(reqVo.getEntId());
-        if (Objects.isNull(entCacheResDto)) {
-            throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.ENT_NOT_EXISTS);
-        }
-
-        List<Long> longs = new ArrayList<>();
-        longs.add(reqVo.getEntId());
-        List<EntCacheResDto> child = entCacheResDto.getChild();
-        if (CollectionUtils.isNotEmpty(child)) {
-            longs.addAll(child.stream().map(EntCacheResDto::getId).toList());
-        }
-
-        List<FindCooperateByEntResVo> findCooperateByEntResVos = cooperateByEnt.stream().filter(item -> longs.contains(item.getTargetEntId())).toList();
-        if (CollectionUtils.isEmpty(findCooperateByEntResVos)) {
-            return Collections.emptyList();
-        }
 
-        //由于是以对方单位为第一单位查,所以这里要取反一下
-        long entIdTemp;
-        long contactsId;
-        String entIdName;
-        String contacts;
-        String phone;
-        for (FindCooperateByEntResVo findCooperateByEntResVo : findCooperateByEntResVos) {
-            entIdTemp = findCooperateByEntResVo.getEntId();
-            entIdName = findCooperateByEntResVo.getEntName();
-            contactsId = findCooperateByEntResVo.getContactsId();
-            contacts = findCooperateByEntResVo.getContacts();
-            phone = findCooperateByEntResVo.getPhone();
-
-            findCooperateByEntResVo.setEntId(findCooperateByEntResVo.getTargetEntId());
-            findCooperateByEntResVo.setEntName(findCooperateByEntResVo.getTargetEntName());
-            findCooperateByEntResVo.setContactsId(findCooperateByEntResVo.getTargetContactsId());
-            findCooperateByEntResVo.setContacts(findCooperateByEntResVo.getTargetContacts());
-            findCooperateByEntResVo.setPhone(findCooperateByEntResVo.getTargetPhone());
-            findCooperateByEntResVo.setTargetEntId(entIdTemp);
-            findCooperateByEntResVo.setTargetEntName(entIdName);
-            findCooperateByEntResVo.setTargetContactsId(contactsId);
-            findCooperateByEntResVo.setTargetContacts(contacts);
-            findCooperateByEntResVo.setTargetPhone(phone);
-            findCooperateByEntResVo.setCooperateTypes(commonBusinessService.changeCooperateType(findCooperateByEntResVo.getCooperateTypes()));
-        }
-        return findCooperateByEntResVos;
+//        Map<Long, EntCacheResDto> longEntCacheResDtoMap = remoteSystemService.queryEntTreeByIds(Collections.singletonList(reqVo.getEntId()));
+//        if (longEntCacheResDtoMap.isEmpty()) {
+//            throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.ENT_NOT_EXISTS);
+//        }
+//
+//        EntCacheResDto entCacheResDto = longEntCacheResDtoMap.get(reqVo.getEntId());
+//        if (Objects.isNull(entCacheResDto)) {
+//            throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.ENT_NOT_EXISTS);
+//        }
+//
+//        List<Long> longs = new ArrayList<>();
+//        longs.add(reqVo.getEntId());
+//        List<EntCacheResDto> child = entCacheResDto.getChild();
+//        if (CollectionUtils.isNotEmpty(child)) {
+//            longs.addAll(child.stream().map(EntCacheResDto::getId).toList());
+//        }
+
+        return Collections.emptyList();
+//
+//        //由于是以对方单位为第一单位查,所以这里要取反一下
+//        long entIdTemp;
+//        long contactsId;
+//        String entIdName;
+//        String contacts;
+//        String phone;
+//        for (FindCooperateByEntResVo findCooperateByEntResVo : findCooperateByEntResVos) {
+//            entIdTemp = findCooperateByEntResVo.getEntId();
+//            entIdName = findCooperateByEntResVo.getEntName();
+//            contactsId = findCooperateByEntResVo.getContactsId();
+//            contacts = findCooperateByEntResVo.getContacts();
+//            phone = findCooperateByEntResVo.getPhone();
+//
+//            findCooperateByEntResVo.setEntId(findCooperateByEntResVo.getTargetEntId());
+//            findCooperateByEntResVo.setEntName(findCooperateByEntResVo.getTargetEntName());
+//            findCooperateByEntResVo.setContactsId(findCooperateByEntResVo.getTargetContactsId());
+//            findCooperateByEntResVo.setContacts(findCooperateByEntResVo.getTargetContacts());
+//            findCooperateByEntResVo.setPhone(findCooperateByEntResVo.getTargetPhone());
+//            findCooperateByEntResVo.setTargetEntId(entIdTemp);
+//            findCooperateByEntResVo.setTargetEntName(entIdName);
+//            findCooperateByEntResVo.setTargetContactsId(contactsId);
+//            findCooperateByEntResVo.setTargetContacts(contacts);
+//            findCooperateByEntResVo.setTargetPhone(phone);
+//            findCooperateByEntResVo.setCooperateTypes(commonBusinessService.changeCooperateType(findCooperateByEntResVo.getCooperateTypes()));
+//        }
+//        return findCooperateByEntResVos;
     }
 
 

+ 1 - 1
sckw-modules/sckw-message/pom.xml

@@ -114,4 +114,4 @@
             </plugin>
         </plugins>
     </build>
-</project>
+</project>

+ 5 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/TradeOrderManageService.java

@@ -320,7 +320,11 @@ public class TradeOrderManageService {
         }
 
         //查询供应企业
-        List<KwoTradeOrderUnit> kwoTradeOrderUnits = tradeOrderUnitRepository.queryByEntIds(entIds);
+        List<KwoTradeOrderUnit> kwoTradeOrderUnits = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(entIds)){
+            kwoTradeOrderUnits = tradeOrderUnitRepository.queryByEntIds(entIds);
+        }
+
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwoTradeOrderUnits)){
             orderIds.addAll(kwoTradeOrderUnits.stream()
                     .map(KwoTradeOrderUnit::getTOrderId)

+ 15 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/dubbo/GoodsInfoServiceImpl.java

@@ -110,6 +110,21 @@ public class GoodsInfoServiceImpl implements GoodsInfoService {
     @Override
     public List<KwpGoods> getGoodsByNameTypeDesc(String goodsName, String goodsType, String goodsSpec) {
         List<com.sckw.product.model.KwpGoods> kwpGoods = kwpGoodsRepository.queryByGoodsNameAndTypeAndDesc(goodsName, goodsType, goodsSpec);
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwpGoods)){
+            return Collections.emptyList();
+        }
+        return kwpGoods.stream()
+                .map(GoodsInfoServiceImpl::getKwpGoods)
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    public List<KwpGoods> findGoodsByGoodsName(String goodsName) {
+        List<com.sckw.product.model.KwpGoods> kwpGoods = kwpGoodsRepository.queryByGoodsName(goodsName);
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwpGoods)){
+            return Collections.emptyList();
+        }
+
         return kwpGoods.stream()
                 .map(GoodsInfoServiceImpl::getKwpGoods)
                 .collect(Collectors.toList());

+ 1 - 1
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/GoodsInfoReq.java

@@ -22,10 +22,10 @@ public class GoodsInfoReq implements Serializable {
      * 企业id
      */
     @Schema(description = "企业id")
-    @NotNull(message = "企业id不能为空")
     private String entId;
     /**
      * 商品名称
      */
+    @Schema(description = "商品名称")
     private String goodsName;
 }

+ 8 - 1
sckw-modules/sckw-product/src/main/java/com/sckw/product/repository/KwpGoodsRepository.java

@@ -8,6 +8,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author :chenXiaoFei
@@ -20,7 +21,7 @@ public class KwpGoodsRepository extends ServiceImpl<KwpGoodsMapper, KwpGoods> {
     public List<KwpGoods> queryByEntIdAndGoodsName(Long entId, String goodsName) {
         return list(Wrappers.<KwpGoods>lambdaQuery()
                 .eq(KwpGoods::getDelFlag,0)
-                .eq(KwpGoods::getEntId,entId)
+                .eq(Objects.nonNull(entId),KwpGoods::getEntId,entId)
                 .like(StringUtils.isNotBlank(goodsName),KwpGoods::getName,goodsName));
 
     }
@@ -32,4 +33,10 @@ public class KwpGoodsRepository extends ServiceImpl<KwpGoodsMapper, KwpGoods> {
                 .like(StringUtils.isNotBlank(goodsType),KwpGoods::getGoodsType,goodsType)
                 .like(StringUtils.isNotBlank(goodsSpec),KwpGoods::getSpec,goodsSpec));
     }
+
+    public List<KwpGoods> queryByGoodsName(String goodsName) {
+        return list(Wrappers.<KwpGoods>lambdaQuery()
+                .eq(KwpGoods::getDelFlag,0)
+                .like(StringUtils.isNotBlank(goodsName),KwpGoods::getName,goodsName));
+    }
 }

+ 2 - 1
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java

@@ -1294,7 +1294,8 @@ public class KwpGoodsService {
     public GoodsInfoResp getGoods( GoodsInfoReq req) {
         log.info("查询商品信息,请求参数 :{}", JSON.toJSONString(req));
         //查询上商品信息
-        List<KwpGoods> goods =  kwpGoodsRepository.queryByEntIdAndGoodsName(Long.valueOf(req.getEntId()), req.getGoodsName());
+        Long entId =StringUtils.isNotBlank(req.getEntId()) ? Long.valueOf(req.getEntId()) : null;
+        List<KwpGoods> goods = kwpGoodsRepository.queryByEntIdAndGoodsName(entId, req.getGoodsName());
         if (org.apache.commons.collections4.CollectionUtils.isEmpty( goods)){
             return new GoodsInfoResp();
         }

+ 2 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsEnterpriseController.java

@@ -376,6 +376,7 @@ public class KwsEnterpriseController {
      * @return
      */
     @GetMapping("/query")
+    @Operation(summary = "通过企业名称精确查询企业信息")
     public BaseResult<EntInfo> query(@RequestParam("entName") String entName) {
         return BaseResult.success(kwsEntService.queryEnt(entName));
     }
@@ -389,7 +390,7 @@ public class KwsEnterpriseController {
         return BaseResult.success(kwsEntService.childEnt());
     }
     /**
-     * 查询企业及子企业数据
+     * 查询所有母企业
      * @return
      */
     @GetMapping("/list")

+ 13 - 2
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsRoleController.java

@@ -1,6 +1,5 @@
 package com.sckw.system.controller;
 
-import com.sckw.core.exception.SystemException;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.system.model.vo.req.EditRoleReqVo;
@@ -11,10 +10,12 @@ import jakarta.validation.Valid;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
+
 import java.util.HashMap;
 
 /**
  * 角色
+ *
  * @author zk
  * @date 2023-05-31
  */
@@ -37,6 +38,16 @@ public class KwsRoleController {
         return HttpResult.ok(kwsRoleService.selectByKey(id));
     }
 
+    /**
+     * 查询当前企业拥有的角色列表
+     *
+     * @return
+     */
+    @GetMapping("/list")
+    public HttpResult list(Long entId) {
+        return HttpResult.ok(kwsRoleService.queryList(entId));
+    }
+
     /**
      * @param params {page:页数、pageSize:每页条数、。。。}
      * @return
@@ -89,7 +100,7 @@ public class KwsRoleController {
     }
 
     /**
-     * @param  reqVo 多个角色用","隔开
+     * @param reqVo 多个角色用","隔开
      * @return HttpResult
      * @desc: 用戶分配角色
      * @author: czh

+ 20 - 3
sckw-modules/sckw-system/src/main/java/com/sckw/system/dubbo/RemoteSystemServiceImpl.java

@@ -1,5 +1,6 @@
 package com.sckw.system.dubbo;
 
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -233,6 +234,24 @@ public class RemoteSystemServiceImpl implements RemoteSystemService {
         return BeanUtils.copyToList(checkNextLevelDict(sysDictGroupResDto.getChild()), SysDictResDto.class);
     }
 
+    @Override
+    public List<SysDictResDto> queryGoodsDict(String keywords) {
+        if (StringUtils.isBlank(keywords)) {
+            return Collections.emptyList();
+        }
+        //industry_type  classification_type product_name_type
+        List<SysDictResDto> sysDictResDtos1 = queryDictByType("industry_type");
+        List<SysDictResDto> collect = sysDictResDtos1.stream().filter(d -> StrUtil.contains(d.getLabel(), keywords)).toList();
+        List<SysDictResDto> res = new ArrayList<>(collect);
+        List<SysDictResDto> sysDictResDtos2 = queryDictByType("classification_type");
+        List<SysDictResDto> collect2 = sysDictResDtos2.stream().filter(d -> StrUtil.contains(d.getLabel(), keywords)).toList();
+        res.addAll(collect2);
+        List<SysDictResDto> sysDictResDtos3 = queryDictByType("product_name_type");
+        List<SysDictResDto> collect3 = sysDictResDtos3.stream().filter(d -> StrUtil.contains(d.getLabel(), keywords)).toList();
+        res.addAll(collect3);
+        return res;
+    }
+
     @Override
     public List<SysDictResDto> queryDictFrontAll(String type, String value) {
         if (StringUtils.isBlank(type) || StringUtils.isBlank(value)) {
@@ -885,13 +904,11 @@ public class RemoteSystemServiceImpl implements RemoteSystemService {
     }
 
     @Override
-    public  List<KwsEnterpriseResDto> queryEntListByEntIds(List<Long> entIds) {
+    public List<KwsEnterpriseResDto> queryEntListByEntIds(List<Long> entIds) {
         return remoteBaseService.queryEntListByEntIds(entIds);
     }
 
 
-
-
     @Override
     public EntTypeResDto queryEntTypeById(Long entId) {
         return remoteBaseService.queryEntTypeById(entId).get(0);

+ 13 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/dubbo/RemoteUserServiceImpl.java

@@ -85,7 +85,6 @@ public class RemoteUserServiceImpl implements RemoteUserService {
     public List<KwsRoleResDto> queryRoleInfoByUserId(Long userId) {
         return remoteBaseService.queryRoleInfoByUserId(userId);
     }
-
     @Override
     public List<UserAccessMenuInfoResDto> queryUserAccessMenu(long id) {
         FindMenuTreePojo findMenuTreePojo = new FindMenuTreePojo();
@@ -103,6 +102,19 @@ public class RemoteUserServiceImpl implements RemoteUserService {
         return BeanUtils.copyToList(kwsMenuResVos, UserAccessMenuInfoResDto.class);
     }
 
+    @Override
+    public List<UserAccessMenuInfoResDto> queryRoleMenu(Long roleId) {
+        FindMenuTreePojo findMenuTreePojo = new FindMenuTreePojo();
+        findMenuTreePojo.setRoleIds(Collections.singletonList(roleId));
+
+        List<KwsMenuResVo> kwsMenuResVos = kwsMenuService.findList(findMenuTreePojo);
+        if (CollectionUtils.isEmpty(kwsMenuResVos)) {
+            return Collections.emptyList();
+        }
+
+        return BeanUtils.copyToList(kwsMenuResVos, UserAccessMenuInfoResDto.class);
+    }
+
     @Override
     public void forgetPassword(ForgetPasswordReqDto reqDto) throws SystemException {
         com.sckw.system.model.vo.req.ForgetPasswordReqVo forgetPasswordReqVo = new ForgetPasswordReqVo();

+ 1 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/pojo/FindEntListPojo.java

@@ -211,6 +211,6 @@ public class FindEntListPojo {
     /**
      * 母企业名
      */
-    private String pEntName;
+    private String pentName;
 
 }

+ 1 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/EntRegisterReqVo.java

@@ -29,7 +29,7 @@ public class EntRegisterReqVo implements Serializable {
     /**
      * 母公司id(当注册的公司是一家子公司时,entPid必传)
      */
-    private Long entPid;
+    private Long pid;
 
     /**
      * 企业编号

+ 6 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/KwsEntTypeRepository.java

@@ -30,4 +30,10 @@ public class KwsEntTypeRepository extends ServiceImpl<KwsEntTypeDao, KwsEntType>
                 .eq(BaseModel::getDelFlag,0)
                 .in(KwsEntType::getType, entTypes));
     }
+
+    public KwsEntType queryByEntId(String entId) {
+        return getOne(Wrappers.<KwsEntType>lambdaQuery().eq(BaseModel::getDelFlag,0)
+                .eq(KwsEntType::getEntId, entId)
+                .last("limit 1"));
+    }
 }

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

@@ -351,10 +351,7 @@ public class KwsEnterpriseService {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.MSG_026);
         }
         //校验统一社会信用代码
-        KwsEnterprise kwsEnterprise1 = kwsEnterpriseDao.selectOne(new LambdaQueryWrapper<KwsEnterprise>()
-                .eq(KwsEnterprise::getCreditCode, reqVo.getOrgCode())
-                .eq(KwsEnterprise::getStatus, 0)
-                .eq(KwsEnterprise::getDelFlag, Global.UN_DELETED));
+        KwsEnterprise kwsEnterprise1 = kwsEnterpriseDao.selectOne(new LambdaQueryWrapper<KwsEnterprise>().eq(KwsEnterprise::getCreditCode, reqVo.getOrgCode()).eq(KwsEnterprise::getStatus, 0).eq(KwsEnterprise::getDelFlag, Global.UN_DELETED));
         if (Objects.nonNull(kwsEnterprise1) && !Objects.equals(kwsEnterprise1.getId(), reqVo.getEntId())) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.ENT_CODE);
         }
@@ -442,27 +439,23 @@ public class KwsEnterpriseService {
 
         /*2、存企业类型,一个企业可以有多个类型*/
         List<KwsEntType> listByEntId = kwsEntTypeDao.findListByEntId(entId);
-        List<Integer> currentTypeList = new ArrayList<>();
         if (CollectionUtils.isNotEmpty(listByEntId)) {
-            currentTypeList.addAll(listByEntId.stream().map(KwsEntType::getType).toList());
+            kwsEntTypeDao.deleteBatchIds(listByEntId.stream().map(KwsEntType::getId).collect(Collectors.toList()));
         }
-        Integer type = Integer.parseInt(reqVo.getEntTypes());//只能单选
-
 
-        if (!currentTypeList.contains(type)) {
-            KwsEntType kwsEntType = new KwsEntType();
-            kwsEntType.setEntId(entId);
-            kwsEntType.setType(type);
-            kwsEntType.setId(new IdWorker(1).nextId());
-            kwsEntType.setStatus(ApprovalEnum.PROCESS.getCode());
-            kwsEntType.setCreateBy(userId);
-            kwsEntType.setCreateTime(date);
-            kwsEntType.setUpdateBy(userId);
-            kwsEntType.setUpdateTime(date);
-            kwsEntType.setDelFlag(Global.NO);
-            if (kwsEntTypeDao.insert(kwsEntType) <= 0) {
-                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
-            }
+        Integer type = Integer.parseInt(reqVo.getEntTypes());//只能单选
+        KwsEntType kwsEntType = new KwsEntType();
+        kwsEntType.setEntId(entId);
+        kwsEntType.setType(type);
+        kwsEntType.setId(new IdWorker(1).nextId());
+        kwsEntType.setStatus(ApprovalEnum.PROCESS.getCode());
+        kwsEntType.setCreateBy(userId);
+        kwsEntType.setCreateTime(date);
+        kwsEntType.setUpdateBy(userId);
+        kwsEntType.setUpdateTime(date);
+        kwsEntType.setDelFlag(Global.NO);
+        if (kwsEntTypeDao.insert(kwsEntType) <= 0) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
         }
 
         /*3、存企业证书*/
@@ -1117,17 +1110,13 @@ public class KwsEnterpriseService {
             }
 //            kwsEnterprises = kwsEnterprises.stream().filter(item -> !entIds.contains(item.getId())).collect(Collectors.toList());
             List<Long> longList = kwsEnterprises.stream().map(KwsEnterprise::getId).distinct().collect(Collectors.toList());
-            List<Long> intersection = longList.stream()
-                    .filter(entIds::contains)
-                    .collect(Collectors.toList());
+            List<Long> intersection = longList.stream().filter(entIds::contains).collect(Collectors.toList());
             kwsEnterprises = kwsEnterpriseDao.selectByKeys(intersection);
         } else {
             //求交集数据
             List<Long> entIds = remoteSystemService.queryEntIdsByCode(accessSpecial, null);
             List<Long> longList = kwsEnterprises.stream().map(KwsEnterprise::getId).distinct().collect(Collectors.toList());
-            List<Long> intersection = longList.stream()
-                    .filter(entIds::contains)
-                    .collect(Collectors.toList());
+            List<Long> intersection = longList.stream().filter(entIds::contains).collect(Collectors.toList());
             kwsEnterprises = kwsEnterpriseDao.selectByKeys(intersection);
         }
         if (kwsEnterprises.size() < 1) {
@@ -1455,6 +1444,13 @@ public class KwsEnterpriseService {
     public EntInfoResp queryEntInfo(EntInfoReq req) {
         //如果是发起方是采购方,采购方只能是自己和下级,供应方可以选所有入住的供应企业
         // 如果发起方是供应方,则供应方是能自己和下级,采购方可以是所有入住企业
+        if (org.apache.commons.lang3.StringUtils.isBlank(req.getEntId())) {
+            throw new BusinessException("企业id不能为空");
+        }
+        KwsEntType kwsEntType = kwsEntTypeRepository.queryByEntId(req.getEntId());
+        if (Objects.nonNull(kwsEntType)){
+            req.setLoginEntType(String.valueOf(kwsEntType.getType()));
+        }
         if (req.getEntType().contains(req.getLoginEntType())){
             //登录客户的企业类型和查询的类型是一直的说明只能查询自己和自己的下级
             //发起方的公司信息
@@ -1473,8 +1469,8 @@ public class KwsEnterpriseService {
         }
         Set<Long> entIds = kwsEntTypes.stream().map(KwsEntType::getEntId).collect(Collectors.toSet());
         //根据企业id查询企业信息
-        List<KwsEnterprise> kwsEnterprises = kwsEnterpriseRepository.queryByEntIds(entIds,req.getEntName());
-        if (CollectionUtils.isEmpty(kwsEnterprises)){
+        List<KwsEnterprise> kwsEnterprises = kwsEnterpriseRepository.queryByEntIds(entIds, req.getEntName());
+        if (CollectionUtils.isEmpty(kwsEnterprises)) {
             return new EntInfoResp();
         }
         //组装返回对象
@@ -1498,33 +1494,26 @@ public class KwsEnterpriseService {
         if (CollectionUtils.isEmpty(kwsEnterprises)) {
             return new EntInfoResp();
         }
-        Set<Long> entIds = kwsEnterprises.stream()
-                .map(BaseModel::getId)
-                .collect(Collectors.toSet());
+        Set<Long> entIds = kwsEnterprises.stream().map(BaseModel::getId).collect(Collectors.toSet());
         //根据类型进行过滤
         List<KwsEntType> kwsEntTypes = kwsEntTypeRepository.queryByEntIdsAndType(entIds, req.getEntType());
         if (CollectionUtils.isEmpty(kwsEntTypes)) {
             return new EntInfoResp();
         }
-        Set<Long> entIdList = kwsEntTypes.stream()
-                .map(KwsEntType::getEntId)
-                .collect(Collectors.toSet());
+        Set<Long> entIdList = kwsEntTypes.stream().map(KwsEntType::getEntId).collect(Collectors.toSet());
         //过滤类型表中包含的数据
-        List<EntInfoResp.EntInfo> entInfos = kwsEnterprises.stream()
-                .filter(x -> entIdList.contains(x.getId()))
-                .map(k -> {
-                    EntInfoResp.EntInfo entInfoResp = new EntInfoResp.EntInfo();
-                    entInfoResp.setEntId(String.valueOf(k.getId()));
-                    entInfoResp.setEntName(k.getFirmName());
-                    return entInfoResp;
-                }).collect(Collectors.toList());
+        List<EntInfoResp.EntInfo> entInfos = kwsEnterprises.stream().filter(x -> entIdList.contains(x.getId())).map(k -> {
+            EntInfoResp.EntInfo entInfoResp = new EntInfoResp.EntInfo();
+            entInfoResp.setEntId(String.valueOf(k.getId()));
+            entInfoResp.setEntName(k.getFirmName());
+            return entInfoResp;
+        }).collect(Collectors.toList());
         EntInfoResp entInfoResp = new EntInfoResp();
         entInfoResp.setEntInfos(entInfos);
         return entInfoResp;
     }
 
     /**
-     *
      * @return
      */
     public EntFindInfoResp querySupOrProEnt() {
@@ -1542,7 +1531,7 @@ public class KwsEnterpriseService {
 
         //查询当前供应商的子级企业
         List<KwsEntDeptDto> subEntList = remoteSystemService.queryEntDeptByPid(entCacheResDto.getParentId());
-        if (CollectionUtils.isEmpty(subEntList)){
+        if (CollectionUtils.isEmpty(subEntList)) {
             EntFindInfoVO entFindInfoVO = EntFindInfoVO.toPageResp(entCacheResDto);
             //子级为空,只返回父级供应商
             entFindInfoResp.setSupEntInfo(Lists.newArrayList(entFindInfoVO));
@@ -1562,7 +1551,6 @@ public class KwsEnterpriseService {
     }
 
     /**
-
      * @return KwsEnterprise
      * @desc: 放开接口
      * @author: czh
@@ -1570,9 +1558,7 @@ public class KwsEnterpriseService {
      */
     public List<EntCacheResDto> queryKwsEnterpriseById() {
         //查询采购商企业信息
-        LambdaQueryWrapper<KwsEntType> queryWrapper = Wrappers.<KwsEntType>lambdaQuery()
-                .eq(KwsEntType::getType, 2)
-                .eq(KwsEntType::getDelFlag, 0);
+        LambdaQueryWrapper<KwsEntType> queryWrapper = Wrappers.<KwsEntType>lambdaQuery().eq(KwsEntType::getType, 2).eq(KwsEntType::getDelFlag, 0);
         List<KwsEntType> kwsEntTypes = kwsEntTypeDao.selectList(queryWrapper);
         if (kwsEntTypes.isEmpty()) {
             return new ArrayList<>();
@@ -1583,7 +1569,7 @@ public class KwsEnterpriseService {
     }
 
     public EntInfoResp queryKwsEnterprise(EntInfoReq req) {
-        log.info("查询企业信息请求参数:{}", JSON.toJSONString( req));
+        log.info("查询企业信息请求参数:{}", JSON.toJSONString(req));
         return getInfoResp(req);
 
     }
@@ -1597,7 +1583,7 @@ public class KwsEnterpriseService {
     }
 
     public List<EntBaseInfo> list() {
-        List<KwsEnterprise> kwsEnterprises = kwsEnterpriseDao.selectList(new LambdaQueryWrapper<KwsEnterprise>().eq(KwsEnterprise::getApproval, 1).eq(KwsEnterprise::getStatus, 0));
+        List<KwsEnterprise> kwsEnterprises = kwsEnterpriseDao.selectList(new LambdaQueryWrapper<KwsEnterprise>().eq(KwsEnterprise::getPid, 0).eq(KwsEnterprise::getApproval, 1).eq(KwsEnterprise::getStatus, 0));
         return kwsEnterprises.stream().map(d -> BeanUtils.toBean(d, EntBaseInfo.class)).collect(Collectors.toList());
     }
 }

+ 18 - 8
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsRoleService.java

@@ -1,15 +1,10 @@
 package com.sckw.system.service;
 
-import java.util.Date;
-
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
-import com.sckw.core.model.enums.MenuTypeEnum;
-import com.sckw.core.model.enums.SystemTypeEnum;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.BeanUtils;
@@ -26,11 +21,9 @@ import com.sckw.system.model.*;
 import com.sckw.system.model.pojo.FindManagePojo;
 import com.sckw.system.model.pojo.FindMenuTreePojo;
 import com.sckw.system.model.report.KwsRoleExcel;
-import com.sckw.system.model.report.KwsUserExcel;
 import com.sckw.system.model.vo.req.EditRoleReqVo;
 import com.sckw.system.model.vo.req.RoleBindMenuReqVo;
 import com.sckw.system.model.vo.req.UserBindRoleReqVo;
-import com.sckw.system.model.vo.res.EntBaseInfo;
 import com.sckw.system.model.vo.res.IdResVo;
 import com.sckw.system.model.vo.res.KwsMenuResVo;
 import com.sckw.system.model.vo.res.RoleResVo;
@@ -41,7 +34,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -471,4 +463,22 @@ public class KwsRoleService {
         }
         ExcelUtil.downData(response, KwsRoleExcel.class, BeanUtils.copyToList(roleResVos, KwsRoleExcel.class));
     }
+
+    public List<KwsRole> queryList(Long entId) {
+        LambdaQueryWrapper<KwsRole> wrapper = new LambdaQueryWrapper<>();
+        if (Objects.isNull(entId)) {
+            if (!LoginUserHolder.isManager()) {
+                if (Objects.equals(LoginUserHolder.getIsMain(), Global.YES)) {
+                    wrapper.in(KwsRole::getEntId, LoginUserHolder.getChildEntList());
+                } else {
+                    wrapper.eq(KwsRole::getEntId, LoginUserHolder.getEntId());
+                }
+            } else {
+                wrapper.in(KwsRole::getEntId, LoginUserHolder.getChildEntList());
+            }
+        } else {
+            wrapper.eq(KwsRole::getEntId, entId);
+        }
+        return kwsRoleDao.selectList(wrapper);
+    }
 }

+ 5 - 5
sckw-modules/sckw-system/src/main/resources/mapper/KwsEnterpriseDao.xml

@@ -121,7 +121,7 @@
                min(k.name)                               createByName,
                min(ku.name)                              updateByName,
                min(d.id)                                 pid,
-               min(d.firm_name)                          pEntName
+               min(d.firm_name)                          pentName
         from kws_enterprise a
             left join kws_user k on a.create_by = k.id
             left join kws_user ku on a.update_by = ku.id
@@ -129,7 +129,7 @@
         <if test="dto.approval == null or (dto.approval != null and dto.approval != 2)">
             and b.status != 1
         </if>
-        left join kws_enterprise d on d.id = d.pid
+        left join kws_enterprise d on d.id = a.pid
         where a.del_flag = 0
         <if test="dto.typeList != null and dto.typeList.size() > 0">
             and exists (select 1
@@ -755,7 +755,7 @@
                min(k.name)                               createByName,
                min(ku.name)                              updateByName,
                min(d.id)                                 pid,
-               min(d.firm_name)                          pEntName
+               min(d.firm_name)                          pentName
         from kws_enterprise a
             left join kws_user k on a.create_by = k.id and k.del_flag = 0
             left join kws_user ku on a.update_by = ku.id and ku.del_flag = 0
@@ -763,7 +763,7 @@
         <if test="dto.approval == null or (dto.approval != null and dto.approval != 2)">
             and b.status != 1
         </if>
-        left join kws_enterprise d on a.id = d.pid
+        left join kws_enterprise d on d.id = a.pid
         where a.del_flag = 0
         <!--        <if test="authEntIdList != null and authEntIdList.size() != 0">-->
         <!--            and a.id in-->
@@ -909,7 +909,7 @@
     </select>
 
     <select id="query" resultType="com.sckw.system.model.vo.res.EntInfo">
-        select id, firm_name as entName
+        select id as entId, firm_name as entName
         from kws_enterprise
         where del_flag = 0
           and pid = 0

+ 94 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/config/OpenApiConfig.java

@@ -0,0 +1,94 @@
+package com.sckw.transport.config;
+
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Contact;
+import io.swagger.v3.oas.models.info.Info;
+import io.swagger.v3.oas.models.info.License;
+import io.swagger.v3.oas.models.servers.Server;
+import org.springdoc.core.models.GroupedOpenApi;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.util.List;
+
+/**
+ * @author PC
+ */
+@Configuration
+public class OpenApiConfig implements WebMvcConfigurer {
+
+    @Value("${spring.application.name:Application}")
+    private String applicationName;
+
+    @Bean
+    public OpenAPI customOpenAPI() {
+        return new OpenAPI()
+                .info(new Info()
+                        .title(applicationName + " API")
+                        .version("1.0.0")
+                        .description("物流订单运单DOC文档 - 提供订单运单管理以及相关API接口")
+                        .contact(new Contact()
+                                .name("开物物流订单开发团队")
+                                .email("iot-dev@example.com")
+                                .url("https://iot-platform.com"))
+                        .license(new License()
+                                .name("Apache 2.0")
+                                .url("https://www.apache.org/licenses/LICENSE-2.0")))
+                .servers(List.of(
+                        new Server()
+                                .url("http://localhost:10120")
+                                .description("开发环境"),
+                        new Server()
+                                .url("http://10.10.10.224:10014/")
+                                .description("测试环境"),
+                        new Server()
+                                .url("https://api.transport.example.com")
+                                .description("生产环境")
+                ));
+    }
+
+    @Bean
+    public GroupedOpenApi paymentApi() {
+        return GroupedOpenApi.builder()
+                .group("transport")
+                .packagesToScan("com.sckw.transport.controller")
+                .build();
+    }
+
+    @Bean
+    public GroupedOpenApi transportAppApi() {
+        return GroupedOpenApi.builder()
+                .group("transport-app")
+                .packagesToScan("com.sckw.transport.controller.app")
+                .build();
+    }
+
+    @Bean
+    public GroupedOpenApi transportOperateApi() {
+        return GroupedOpenApi.builder()
+                .group("transport-operate")
+                .packagesToScan("com.sckw.transport.controller.operate")
+                .build();
+    }
+
+    @Bean
+    public GroupedOpenApi transportAllApi() {
+        return GroupedOpenApi.builder()
+                .group("transport-all")
+                .packagesToScan("com.sckw.transport.controller",
+                        "com.sckw.transport.controller.app",
+                        "com.sckw.transport.controller.operate")
+                .build();
+    }
+
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler("/doc.html")
+                .addResourceLocations("classpath:/META-INF/resources/");
+        registry.addResourceHandler("/webjars/**")
+                .addResourceLocations("classpath:/META-INF/resources/webjars/");
+    }
+}

+ 2 - 8
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtLogisticsOrderController.java

@@ -1,11 +1,7 @@
 package com.sckw.transport.controller;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.google.common.collect.Sets;
 import com.sckw.core.annotation.RepeatSubmit;
-import com.sckw.core.exception.BusinessException;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.HttpResult;
@@ -28,10 +24,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-import java.util.stream.Collectors;
 
 /**
  * @author lfdc
@@ -144,12 +136,14 @@ public class KwtLogisticsOrderController {
     * 获取物流订单详情
     */
     @PostMapping(value = "/getLogisticsOrderDetail")
+    @Operation(summary = "获取物流订单详情", description = "获取物流订单详情")
     public BaseResult<LogisticsOrderDetailResp> getLogisticsOrderDetail(@RequestBody @Valid LogisticsOrderReq req) {
         return BaseResult.success(logisticsConsignmentService.getLogisticsOrderDetail(req));
     }
     /**
      * 根据物流订单查询已派运力
      */
+    @Operation(summary = "根据物流订单查询已派运力", description = "根据物流订单查询已派运力")
     @PostMapping(value = "/getLogisticsOrderDispatch")
     public BaseResult<PageDataResult<LogisticsOrderDispatchResp>> getLogisticsOrderDispatch(@RequestBody @Valid LogisticsOrderReq req) {
         return BaseResult.success(logisticsConsignmentService.getLogisticsOrderDispatch(req));

+ 96 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java

@@ -19,6 +19,7 @@ import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.fleet.api.model.vo.RTruckVo;
@@ -38,15 +39,16 @@ import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.model.dto.AcceptCarriageLogisticsOrderDto;
 import com.sckw.transport.api.model.dto.AccountCheckingBindDTO;
 import com.sckw.transport.api.model.dto.RWaybillOrderDto;
-import com.sckw.transport.api.model.param.CapacityTruckParam;
-import com.sckw.transport.api.model.param.ContractSignLogisticsParam;
-import com.sckw.transport.api.model.param.LogisticsOrderParam;
-import com.sckw.transport.api.model.param.UpdateOrderStatusDto;
+import com.sckw.transport.api.model.param.*;
 import com.sckw.transport.api.model.vo.*;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
+import com.sckw.transport.model.dto.AddLogisticOrderDTO;
+import com.sckw.transport.model.vo.OrderFinishReq;
 import com.sckw.transport.repository.*;
+import com.sckw.transport.service.KwtAcceptCarriageOrderService;
 import com.sckw.transport.service.KwtCommonService;
+import com.sckw.transport.service.KwtLogisticsConsignmentService;
 import jakarta.annotation.Resource;
 import jodd.util.StringUtil;
 import lombok.RequiredArgsConstructor;
@@ -129,6 +131,8 @@ public class TransportServiceImpl implements TransportRemoteService {
     private final KwtLogisticsOrderUnitRepository logisticsOrderUnitRepository;
     private final KwtLogisticsOrderContractRepository logisticsOrderContractRepository;
     private final KwtLogisticsOrderCirculateRepository logisticsOrderCirculateRepository;
+    private final KwtAcceptCarriageOrderService kwtAcceptCarriageOrderService;
+    private final KwtLogisticsConsignmentService logisticsConsignmentService;
     /**
      * 对账管理-ids查询
      *
@@ -1085,4 +1089,92 @@ public class TransportServiceImpl implements TransportRemoteService {
         log.info("查询物流订单已派运力车辆成功,结果:{}", com.alibaba.fastjson.JSON.toJSONString(param));
         return truckVOList;
     }
+
+    @Override
+    public void addLogisticOrder(AddLogisticOrderParam param) {
+        log.info("新增物流订单:{}", JSON.toJSONString(param));
+        AddLogisticOrderDTO addLogisticOrderDTO = getAddLogisticOrderDTO(param);
+        kwtAcceptCarriageOrderService.addLogisticOrder( addLogisticOrderDTO);
+    }
+
+    @Override
+    public Boolean logisticOrderFinish(OrderFinishParam req) {
+        log.info("流程完结物流订单:{}", JSON.toJSONString(req));
+        if (Objects.isNull( req.getLogisticOrderId())){
+            throw new BusinessException("物流订单id不能为空");
+        }
+        OrderFinishReq orderFinishReq = new OrderFinishReq();
+        orderFinishReq.setLogisticOrderId(String.valueOf(req.getLogisticOrderId()));
+        return logisticsConsignmentService.logisticOrderFinish(orderFinishReq);
+
+    }
+
+    @NotNull
+    private static AddLogisticOrderDTO getAddLogisticOrderDTO(AddLogisticOrderParam param) {
+        AddLogisticOrderDTO addLogisticOrderDTO = new AddLogisticOrderDTO();
+        List<AddLogisticOrderParam.LogisticInfo> logisticInfo = param.getLogisticInfo();
+        if (CollectionUtils.isEmpty(logisticInfo)) {
+            throw new BusinessException("物流信息不能为空");
+        }
+        List<AddLogisticOrderDTO.LogisticInfo> infos = logisticInfo.stream()
+                .map(TransportServiceImpl::getLogisticInfo)
+                .collect(Collectors.toList());
+        addLogisticOrderDTO.setLogisticInfo(infos);
+        addLogisticOrderDTO.setTradeOrderId(param.getTradeOrderId());
+        addLogisticOrderDTO.setTradeOrderNo(param.getTradeOrderNo());
+        addLogisticOrderDTO.setConsignCompany(param.getConsignCompany());
+        addLogisticOrderDTO.setConsignCompanyId(param.getConsignCompanyId());
+        addLogisticOrderDTO.setConsignContactPhone(param.getConsignContactPhone());
+        addLogisticOrderDTO.setConsignContacts(param.getConsignContacts());
+        addLogisticOrderDTO.setConsignContactsId(param.getConsignContactsId());
+        addLogisticOrderDTO.setGoodsId(param.getGoodsId());
+        addLogisticOrderDTO.setGoodsName(param.getGoodsName());
+        addLogisticOrderDTO.setGoodsType(param.getGoodsType());
+        addLogisticOrderDTO.setGoodsPrice(param.getGoodsPrice());
+        addLogisticOrderDTO.setGoodsPriceUnit(param.getGoodsPriceUnit());
+        addLogisticOrderDTO.setLoadName(param.getLoadName());
+        addLogisticOrderDTO.setLoadCityCode(param.getLoadCityCode());
+        addLogisticOrderDTO.setLoadCityName(param.getLoadCityName());
+        addLogisticOrderDTO.setLoadContacts(param.getLoadContacts());
+        addLogisticOrderDTO.setLoadPhone(param.getLoadPhone());
+        addLogisticOrderDTO.setLoadDetailAddress(param.getLoadDetailAddress());
+        addLogisticOrderDTO.setUnloadId(param.getUnloadId());
+        addLogisticOrderDTO.setUnloadName(param.getUnloadName());
+        addLogisticOrderDTO.setUnloadCityCode(param.getUnloadCityCode());
+        addLogisticOrderDTO.setUnloadCityName(param.getUnloadCityName());
+        return addLogisticOrderDTO;
+    }
+
+    private static AddLogisticOrderDTO.LogisticInfo getLogisticInfo(AddLogisticOrderParam.LogisticInfo logistic) {
+        AddLogisticOrderDTO.LogisticInfo info = new AddLogisticOrderDTO.LogisticInfo();
+        info.setContractId(logistic.getContractId());
+        info.setContractNo(logistic.getContractNo());
+        info.setContractName(logistic.getContractName());
+        info.setAcceptCompanyId(logistic.getAcceptCompanyId());
+        info.setAcceptContactPhone(logistic.getAcceptContactPhone());
+        info.setAcceptContacts(logistic.getAcceptContacts());
+        info.setAcceptContactsId(logistic.getAcceptContactsId());
+        info.setAcceptCompany(logistic.getAcceptCompany());
+        info.setPrice(logistic.getPrice());
+        info.setPriceType(logistic.getPriceType());
+        info.setEndTime(logistic.getEndTime());
+        info.setStartTime(logistic.getStartTime());
+//        info.setUnloadId(logistic.getUnloadId());
+//        info.setUnloadName(logistic.getUnloadName());
+//        info.setUnloadCityCode(logistic.getUnloadCityCode());
+//        info.setUnloadCityName(logistic.getUnloadCityName());
+        info.setUnloadContacts(logistic.getUnloadContacts());
+        info.setUnloadPhone(logistic.getUnloadPhone());
+        info.setUnloadDetailAddress(logistic.getUnloadDetailAddress());
+        info.setAmount(logistic.getAmount());
+        info.setAmountUnit(logistic.getAmountUnit());
+        info.setLoss(logistic.getLoss());
+        info.setPayment(logistic.getPayment());
+        info.setSigningWay(logistic.getSigningWay());
+        info.setLossUnit(logistic.getLossUnit());
+        info.setBillingMode(logistic.getBillingMode());
+        info.setRemark(logistic.getRemark());
+        info.setType(logistic.getType());
+        return info;
+    }
 }

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

@@ -129,7 +129,5 @@ public class KwtLogisticsOrderAddress implements Serializable {
     private Integer delFlag;
 
     private static final long serialVersionUID = 1L;
-    @TableField(exist = false)
-    private String logisticsOrderIdAndUnitTypeKey;
 
 }

+ 9 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTicket.java

@@ -1,5 +1,8 @@
 package com.sckw.transport.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.sckw.core.model.base.BaseModel;
 import lombok.Data;
@@ -71,4 +74,10 @@ public class KwtWaybillOrderTicket extends BaseModel implements Serializable {
      */
     private Date operateTime;
 
+    /**
+     * 上传凭证时间
+     */
+    @TableField("uploading_time")
+    private Date uploadingTime;
+
 }

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

@@ -68,7 +68,6 @@ public class KwtWaybillOrderTrack implements Serializable {
     private Integer delFlag;
 
     private static final long serialVersionUID = 1L;
-    @TableField(exist = false)
-    private String subBillIdAddressIdKey;
+
 
 }

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

@@ -0,0 +1,298 @@
+package com.sckw.transport.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.*;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+
+
+/**
+ * @author PC
+ */
+@Data
+public class AddLogisticOrderDTO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 6529826978061848338L;
+    //物流信息
+    private List<LogisticInfo> logisticInfo;
+    /**
+     * 交易订单id
+     */
+    private Long tradeOrderId;
+    /**
+     * 交易订单号
+     */
+    @NotBlank(message = "订单编号不能为空")
+    private String tradeOrderNo;
+    /**
+     * 托运单位
+     */
+    @NotBlank(message = "托运单位名称不能为空")
+    private String consignCompany;
+    /**
+     * 托运单位id
+     */
+    @NotBlank(message = "托运单位id不能为空")
+    private Long consignCompanyId;
+
+    /**
+     * 托运联系电话
+     */
+    @NotBlank(message = "托运联系电话不能为空")
+    private String consignContactPhone;
+
+    /**
+     * 托运联系人
+     */
+    @NotBlank(message = "托运联系人不能为空")
+    private String consignContacts;
+
+    /**
+     * 托运联系人id
+     */
+    @NotBlank(message = "托运联系人id不能为空")
+    private Long consignContactsId;
+
+
+
+    /**
+    * 货物id
+    */
+    @NotNull(message = "货物id不能为空")
+    private Long goodsId;
+    /**
+     * 货物名称
+     */
+    @NotNull(message = "货物名称不能为空")
+    private String goodsName;
+
+    /**
+     * 货物类型
+     */
+    @NotBlank(message = "货物类型不能为空")
+    private String goodsType;
+
+
+    /**
+     * 商品价值(扣亏货值)
+     */
+    private BigDecimal goodsPrice;
+    /**
+     * 商品价值(扣亏货值)单位
+     */
+    private String goodsPriceUnit;
+
+
+    /**
+     *装货地址名称
+     */
+    private String loadName;
+
+    /**
+     * 装货城市编码
+     */
+    private Integer loadCityCode;
+
+    /**
+     * 装货城市名称
+     */
+    private String loadCityName;
+
+    /**
+     * 装货联系人
+     */
+    @NotBlank(message = "装货联系人不能为空")
+    private String loadContacts;
+
+    /**
+     * 装货联系电话
+     */
+    @NotBlank(message = "装货联系电话不能为空")
+    private String loadPhone;
+
+    /**
+     * 装货详细地址
+     */
+    @NotBlank(message = "装货详细地址不能为空")
+    private String loadDetailAddress;
+
+    /**
+     *卸货地址id
+     */
+    private Long unloadId;
+
+    /**
+     *卸货地址名称
+     */
+    private String unloadName;
+
+    /**
+     * 卸货城市编码
+     */
+    @NotNull(message = "卸货城市编码不能为空")
+    @Min(value = 0, message = "卸货城市编码必须大于等于{value}")
+    @Max(value = 1000000, message = "卸货城市编码必须小于等于{value}")
+    private Integer unloadCityCode;
+
+    /**
+     * 卸货城市名称
+     */
+    @NotBlank(message = "卸货城市名称不能为空")
+    private String unloadCityName;
+
+    @Data
+    public static class LogisticInfo {
+        /**
+         * 合同id
+         */
+        @NotNull(message = "合同id不能为空")
+        private Long contractId;
+
+        /**
+         * 合同编号
+         */
+        @NotBlank(message = "合同编号不能为空")
+        private String contractNo;
+
+        /**
+         * 合同名称
+         */
+        @NotBlank(message = "合同名称不能为空")
+        private String contractName;
+        /**
+         * 承运单位ID
+         */
+        @NotBlank(message = "承运单位ID不能为空")
+        private Long acceptCompanyId;
+
+        /**
+         * 承运联系电话
+         */
+        @NotBlank(message = "承运联系电话不能为空")
+        private String acceptContactPhone;
+
+
+        /**
+         * 承运联系人
+         */
+        @NotBlank(message = "承运联系人id不能为空")
+        private String acceptContacts;
+
+        /**
+         * 承运联系人id
+         */
+        @NotBlank(message = "承运联系人id不能为空")
+        private Long acceptContactsId;
+
+        /**
+         * 承运单位
+         */
+        @NotBlank(message = "承运单位不能为空")
+        private String acceptCompany;
+        /**
+         * 运价
+         */
+        @NotNull(message = "运价不能为空")
+        private BigDecimal price;
+
+        /**
+         * 运价方式
+         */
+        @NotNull(message = "运价方式不能为空")
+        private Long priceType;
+
+
+        /**
+         * 计划卸货时间
+         */
+        @NotNull(message = "计划卸货时间不能为空")
+        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+        private LocalDate endTime;
+
+        /**
+         * 计划发货时间
+         */
+        @NotNull(message = "计划发货时间不能为空")
+        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+        private LocalDate startTime;
+
+
+
+
+        /**
+         * 卸货联系人
+         */
+        @NotBlank(message = "卸货联系人不能为空")
+        private String unloadContacts;
+
+        /**
+         * 卸货联系电话
+         */
+        @NotBlank(message = "卸货联系电话不能为空")
+        private String unloadPhone;
+
+        /**
+         * 卸货详细地址
+         */
+        @NotBlank(message = "卸货详细地址不能为空")
+        private String unloadDetailAddress;
+
+
+        /**
+         * 总量
+         */
+        @NotNull(message = "总量不能为空")
+
+        private BigDecimal amount;
+
+        /**
+         * 总量单位
+         */
+        @NotBlank(message = "总量单位不能为空")
+        private String amountUnit;
+
+        /**
+         * 合理损耗
+         */
+
+        private BigDecimal loss;
+        /**
+         * 支付方式
+         */
+        @NotNull(message = "支付方式不能为空")
+        private Long payment;
+
+
+        /**
+         * 签约方式
+         */
+        @NotNull(message = "签约方式不能为空")
+        private Integer signingWay;
+
+        /**
+         * 合理损耗单位
+         */
+        @NotBlank(message = "合理损耗单位不能为空")
+        private String lossUnit;
+        /**
+         * 计费方式
+         */
+        @NotNull(message = "计费方式不能为空")
+        private String billingMode;
+
+        /**
+         * 备注
+         */
+        private String remark;
+        /**
+         * 订单创建类型(1.贸易订单生成,2自建订单生成)
+         */
+        private Integer type;
+
+    }
+}

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

@@ -94,4 +94,9 @@ public class WaybillOrderReq extends PageReq implements Serializable {
      */
     @Schema(description = "卸货结束时间")
     private String unloadEndTime;
+    /**
+     * 状态
+     */
+    @Schema(description = "状态")
+    private String status;
 }

+ 20 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderResp.java

@@ -26,6 +26,16 @@ public class WaybillOrderResp implements Serializable {
      */
     @Schema(description = "运单号")
     private String waybillOrderNo;
+    /**
+     * 物流订单id
+     */
+    @Schema(description = "物流订单id")
+    private String logisticsOrderId;
+    /**
+     * 物流订单编号
+     */
+    @Schema(description = "物流订单编号")
+    private String logisticsOrderNo;
     /**
      * 托运单位id
      */
@@ -106,6 +116,16 @@ public class WaybillOrderResp implements Serializable {
      */
     @Schema(description = "离场时间")
     private String offsiteTime;
+    /**
+     * 卸货时间
+     */
+    @Schema(description = "卸货时间")
+    private String unloadingTime;
+    /**
+     * 完成时间
+     */
+    @Schema(description = "完成时间")
+    private String completeTime;
     /**
      * 状态
      */

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

@@ -27,10 +27,10 @@ public class CapacityReq extends PageReq implements Serializable {
     @Schema(description = "车牌号")
     private String truckNo;
     /**
-     * 运单id
+     * 物流id
      */
-    @Schema(description = "运单id")
-    @NotBlank(message = "运单id不能为空")
+    @Schema(description = "物流id")
+    @NotBlank(message = "物流id不能为空")
     private String logOrderId;
     /**
      * 企业id

+ 12 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/ReviewWaybillOrderReq.java

@@ -29,4 +29,16 @@ public class ReviewWaybillOrderReq implements Serializable {
     @Schema(description = "状态")
     @NotBlank(message = "状态不能为空")
     private String status;
+
+    /**
+     * 卸货量
+     */
+    @Schema(description = "卸货量")
+    private String unloadAmount;
+
+    /**
+     * 单据地址 多个用逗号隔开
+     */
+    @Schema(description = "单据地址 多个用逗号隔开")
+    private String addressUrl;
 }

+ 5 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderCirculateRepository.java

@@ -22,11 +22,13 @@ import java.util.Set;
  */
 @Repository
 public class KwtLogisticsOrderCirculateRepository extends ServiceImpl<KwtLogisticsOrderCirculateMapper, KwtLogisticsOrderCirculate> {
-    public IPage<KwtLogisticsOrderCirculate> queryByPage(int pageNum, int pageSize,String truckNo, Long entId) {
+    public IPage<KwtLogisticsOrderCirculate> queryByPage(int pageNum, int pageSize,String truckNo, Set<Long> entIds,
+                                                         Long logistOrderId) {
         return page(new Page<>(pageNum, pageSize), Wrappers.<KwtLogisticsOrderCirculate>lambdaQuery()
-                .like(StringUtils.isNotBlank(truckNo),KwtLogisticsOrderCirculate::getTruckNo, truckNo)
                 .eq(KwtLogisticsOrderCirculate::getDelFlag,0)
-                .eq(KwtLogisticsOrderCirculate::getEntId, entId)
+                .in(KwtLogisticsOrderCirculate::getEntId, entIds)
+                .eq(KwtLogisticsOrderCirculate::getLOrderId, logistOrderId)
+                .like(StringUtils.isNotBlank(truckNo),KwtLogisticsOrderCirculate::getTruckNo, truckNo)
                 .orderByDesc(KwtLogisticsOrderCirculate::getCreateTime)
                 .orderByDesc(KwtLogisticsOrderCirculate::getId));
     }

+ 10 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderGoodsRepository.java

@@ -7,6 +7,7 @@ import com.sckw.transport.model.KwtLogisticsOrderGoods;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * @author :chenXiaoFei
@@ -29,12 +30,19 @@ public class KwtLogisticsOrderGoodsRepository extends ServiceImpl<KwtLogisticsOr
         );
     }
 
-    public KwtLogisticsOrderGoods queryByLogOrderId(Long id) {
+    public KwtLogisticsOrderGoods queryByLogOrderId(Long logOrderId) {
         return getOne(Wrappers.<KwtLogisticsOrderGoods>lambdaQuery()
-                .eq(KwtLogisticsOrderGoods::getId,id)
+                .eq(KwtLogisticsOrderGoods::getLOrderId,logOrderId)
                 .eq(KwtLogisticsOrderGoods::getDelFlag,0)
                 .orderByDesc(KwtLogisticsOrderGoods::getId)
                 .last("limit 1")
         );
     }
+
+    public List<KwtLogisticsOrderGoods> queryByGoodsIds(Set<Long> goodsIds) {
+        return list(Wrappers.<KwtLogisticsOrderGoods>lambdaQuery()
+                .eq(KwtLogisticsOrderGoods::getDelFlag,0)
+                .in(KwtLogisticsOrderGoods::getGoodsId,goodsIds)
+        );
+    }
 }

+ 4 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java

@@ -59,10 +59,11 @@ public class KwtWaybillOrderRepository extends ServiceImpl<KwtWaybillOrderMapper
                 .last("limit 1"));
     }
 
-    public KwtWaybillOrder findOneByTruckNo(String truckNo) {
+    public KwtWaybillOrder findOneByTruckNo(String truckNo, Long entId ) {
         return getOne(Wrappers.<KwtWaybillOrder>lambdaQuery()
                 .eq(KwtWaybillOrder::getDelFlag,0)
                 .eq(KwtWaybillOrder::getTruckNo,truckNo)
+                .eq(KwtWaybillOrder::getEntId, entId)
                 .orderByDesc(KwtWaybillOrder::getId)
                 .last("limit 1"));
     }
@@ -130,12 +131,12 @@ public class KwtWaybillOrderRepository extends ServiceImpl<KwtWaybillOrderMapper
         );
     }
 
-    public List<KwtWaybillOrder> queryByBillOrderIdsAndEntId(Set<Long> billOrderIds, Long entId) {
+    public List<KwtWaybillOrder> queryByBillOrderIds(Set<Long> billOrderIds, Long entId) {
         return list(Wrappers.<KwtWaybillOrder>lambdaQuery()
                 .eq(KwtWaybillOrder::getDelFlag,0)
                 .eq(KwtWaybillOrder::getEntId,entId)
                 .in(KwtWaybillOrder::getId, billOrderIds)
-                .orderByDesc(KwtWaybillOrder::getCreateTime)
+                .orderByDesc(KwtWaybillOrder::getUpdateTime)
         );
     }
 

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

@@ -64,13 +64,15 @@ public class KwtWaybillOrderSubtaskRepository extends ServiceImpl<KwtWaybillOrde
                 .eq(KwtWaybillOrderSubtask::getLOrderId,logOrderId));
     }
 
-    public IPage<KwtWaybillOrderSubtask> queryByPage(Long entId, Set<Long> logOrderIds, Set<Long> billOrderIds,
+    public IPage<KwtWaybillOrderSubtask> queryByPage(Set<Long> entIds, Set<Long> logOrderIds, Set<Long> billOrderIds,
+                                                     Integer status,
                                                      int pageNum,
                                                      int pageSize) {
         return page(new Page<>(pageNum, pageSize),
                 Wrappers.<KwtWaybillOrderSubtask>lambdaQuery()
                         .eq(BaseModel::getDelFlag,0)
-                        .eq(Objects.nonNull(entId),KwtWaybillOrderSubtask::getEntId, entId)
+                        .eq(Objects.nonNull( status),KwtWaybillOrderSubtask::getStatus, status)
+                        .in(CollectionUtils.isNotEmpty(entIds),KwtWaybillOrderSubtask::getEntId, entIds)
                         .in(CollectionUtils.isNotEmpty(logOrderIds),KwtWaybillOrderSubtask::getLOrderId, logOrderIds)
                         .in(CollectionUtils.isNotEmpty(billOrderIds),KwtWaybillOrderSubtask::getWOrderId, billOrderIds)
                         .orderByDesc(BaseModel::getCreateTime)

+ 27 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderTicketRepository.java

@@ -8,9 +8,15 @@ import org.springframework.stereotype.Repository;
 
 import java.util.List;
 
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author PC
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description :
+ * @create :2025-11-17 09:25:00
  */
 @Repository
 public class KwtWaybillOrderTicketRepository extends ServiceImpl<KwtWaybillOrderTicketMapper, KwtWaybillOrderTicket> {
@@ -21,4 +27,25 @@ public class KwtWaybillOrderTicketRepository extends ServiceImpl<KwtWaybillOrder
                 .eq(KwtWaybillOrderTicket::getDelFlag,0));
     }
 
+    public List<KwtWaybillOrderTicket> queryByAddressIds(Set<Long> addressIds) {
+        return list(Wrappers.<KwtWaybillOrderTicket>lambdaQuery()
+                .eq(KwtWaybillOrderTicket::getDelFlag,0)
+                .in(KwtWaybillOrderTicket::getWAddressId, addressIds)) ;
+    }
+
+    public Boolean updateByBillOrderIdAndType(KwtWaybillOrderTicket kwtWaybillOrderTicket,Integer  type) {
+        return update(kwtWaybillOrderTicket, Wrappers.<KwtWaybillOrderTicket>lambdaQuery()
+                .eq(KwtWaybillOrderTicket::getWOrderId, kwtWaybillOrderTicket.getWOrderId())
+                .eq(KwtWaybillOrderTicket::getType, type));
+    }
+
+
+    public List<KwtWaybillOrderTicket> queryByOperateTime(Date loadStartTime, Date loadEndTime,Integer  type) {
+        return list(Wrappers.<KwtWaybillOrderTicket>lambdaQuery()
+                .eq(KwtWaybillOrderTicket::getDelFlag,0)
+                .eq(KwtWaybillOrderTicket::getType, type)
+                .between(KwtWaybillOrderTicket::getOperateTime, loadStartTime, loadEndTime));
+    }
+
+
 }

+ 231 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtAcceptCarriageOrderService.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.google.common.collect.Lists;
 import com.sckw.contract.api.RemoteContractService;
 import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
 import com.sckw.core.common.enums.StringConstant;
@@ -58,10 +59,13 @@ import com.sckw.transport.model.param.DriverParam;
 import com.sckw.transport.model.param.LogisticsOrderStatisticsParam;
 import com.sckw.transport.model.vo.*;
 import com.sckw.transport.model.vo.execlVo.AcceptCarriageOrderExcelVo;
+import com.sckw.transport.repository.*;
 import io.seata.spring.annotation.GlobalTransactional;
 import jakarta.annotation.Resource;
+import jakarta.validation.constraints.NotNull;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.MapUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -175,6 +179,12 @@ public class KwtAcceptCarriageOrderService {
     @Autowired
     public KwtLogisticsOrderLineFreightRateMapper lineFreightRateMapper;
 
+    private final KwtLogisticsOrderRepository logisticsOrderRepository;
+    private final KwtLogisticsOrderGoodsRepository logisticsOrderGoodsRepository;
+    private final KwtLogisticsOrderUnitRepository logisticsOrderUnitRepository;
+    private final KwtLogisticsOrderContractRepository  logisticsOrderContractRepository;
+    private final KwtLogisticsOrderAddressRepository  logisticsOrderAddressRepository;
+
 
     /**
      * 承运订单-分包托运
@@ -2046,6 +2056,7 @@ public class KwtAcceptCarriageOrderService {
         return HttpResult.ok(orderFinishVO);
     }
 
+
     /**
      * 承运订单-页面新建订单
      *
@@ -3166,5 +3177,225 @@ public class KwtAcceptCarriageOrderService {
         }
         return null;
     }
+    /*
+     * 物流订单-新建订单
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void addLogisticOrder(AddLogisticOrderDTO orderDTO) {
+        log.info("创建物流订单请求参数:{}",JSON.toJSONString(orderDTO));
+        commonService.getRedisGenerateOrderNo();
+        /**生成订单编号*/
+        String lOrderNo = OrderGenerateSeqNoUtils.getSeqNo(RedisOrderGenerateEnum.LOGISTICS_ORDER, OrderRuleEnum.LOGISTICS_ORDER, "2", "0", "0");
+        /**保存新建数据*/
+
+        List<AddLogisticOrderDTO.LogisticInfo> logisticInfo = orderDTO.getLogisticInfo();
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(logisticInfo)){
+            throw new BusinessException("物流信息不能为空");
+        }
+        List<Long> contractIds = logisticInfo.stream()
+                .map(AddLogisticOrderDTO.LogisticInfo::getContractId)
+                .collect(Collectors.toList());
+        Map<Long, ContractCommonInfoResDto> longContractCommonInfoResDtoMap = remoteContractService.queryContractBaseInfo(contractIds);
+        if (MapUtils.isEmpty(longContractCommonInfoResDtoMap)) {
+            throw new BusinessException("合同不存在");
+        }
+        //判断是否都已经签约
+        boolean b = longContractCommonInfoResDtoMap.values().stream()
+                .allMatch(x -> Objects.equals(x.getStatus(), ContractStatusEnum.SIGNED.getCode()));
+        if (!b) {
+            throw new BusinessException("请先签约选择的所有物流合同");
+        }
+        List<KwtLogisticsOrder> saveLogisticsOrderList = Lists.newArrayList();
+        List<KwtLogisticsOrderAddress> saveAddressList = Lists.newArrayList();
+        List<KwtLogisticsOrderGoods> savelogOrderGoodsList = Lists.newArrayList();
+        List<KwtLogisticsOrderContract> saveContractList = Lists.newArrayList();
+        List<KwtLogisticsOrderUnit> savelogOrderUnitList = Lists.newArrayList();
+        logisticInfo.forEach(x->{
+            Long lOrderId = new IdWorker(NumberConstant.ONE).nextId();
+            //物流订单信息
+            setLogisticOrderInfo(orderDTO, x, lOrderId, lOrderNo, saveLogisticsOrderList);
+
+            //地址信息
+            setLogisticAddress(orderDTO, x, lOrderId, saveAddressList);
+
+            //商品信息
+            setLogisticGoodsInfo(orderDTO, lOrderId, lOrderNo, savelogOrderGoodsList);
+            //物流订单与合同信息
+            setLogisticContractInfo(x, lOrderId, saveContractList);
+            //企业信息数据
+            setLogisticUnitInfo(orderDTO, x, lOrderId, savelogOrderUnitList);
+
+        });
+        logisticsOrderRepository.saveBatch(saveLogisticsOrderList);
+        logisticsOrderAddressRepository.saveBatch(saveAddressList);
+        logisticsOrderGoodsRepository.saveBatch(savelogOrderGoodsList);
+        logisticsOrderContractRepository.saveBatch(saveContractList);
+        logisticsOrderUnitRepository.saveBatch(savelogOrderUnitList);
+    }
 
+    private void setLogisticUnitInfo(AddLogisticOrderDTO orderDTO, AddLogisticOrderDTO.LogisticInfo x, Long lOrderId, List<KwtLogisticsOrderUnit> savelogOrderUnitList) {
+        KwtLogisticsOrderUnit consignUnit = new KwtLogisticsOrderUnit();
+        consignUnit.setId(new IdWorker(NumberConstant.ONE).nextId());
+        consignUnit.setLOrderId(lOrderId);
+        consignUnit.setUnitType(NumberConstant.ONE);
+        consignUnit.setEntId(orderDTO.getConsignCompanyId());
+        List<Long> entIds = new ArrayList<>();
+        entIds.add(orderDTO.getConsignCompanyId());
+        entIds.add(x.getAcceptCompanyId());
+        Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(entIds);
+        EntCacheResDto ent = entMap.get(orderDTO.getConsignCompanyId());
+        if (Objects.isNull(ent)) {
+            throw new BusinessException("企业:" + orderDTO.getConsignCompany() + "的一级企业信息不存在!");
+        }
+        consignUnit.setContactsId(orderDTO.getConsignContactsId());
+        consignUnit.setTopEntId(ent.getId());
+        consignUnit.setFirmName(orderDTO.getConsignCompany());
+        consignUnit.setContacts(orderDTO.getConsignContacts());
+        consignUnit.setPhone(orderDTO.getConsignContactPhone());
+//        consignUnit.setRemark(orderDTO.getRemark());
+        consignUnit.setStatus(NumberConstant.ZERO);
+        consignUnit.setCreateBy(LoginUserHolder.getUserId());
+        consignUnit.setCreateTime(new Date());
+        consignUnit.setUpdateBy(LoginUserHolder.getUserId());
+        consignUnit.setUpdateTime(new Date());
+        savelogOrderUnitList.add(consignUnit);
+        //承运
+        KwtLogisticsOrderUnit unit = new KwtLogisticsOrderUnit();
+        unit.setId(new IdWorker(NumberConstant.TWO).nextId());
+        unit.setLOrderId(lOrderId);
+        unit.setUnitType(NumberConstant.TWO);
+        unit.setEntId(x.getAcceptCompanyId());
+        EntCacheResDto ent1 = entMap.get(x.getAcceptCompanyId());
+        if (Objects.isNull(ent1)) {
+            throw new BusinessException("企业:" + x.getAcceptCompany() + "的一级企业信息不存在!");
+        }
+        unit.setContactsId(x.getAcceptContactsId());
+        unit.setTopEntId(ent1.getId());
+        unit.setFirmName(x.getAcceptCompany());
+        unit.setContacts(x.getAcceptContacts());
+        unit.setPhone(x.getAcceptContactPhone());
+//        unit.setRemark(orderDTO.getRemark());
+        unit.setStatus(NumberConstant.ZERO);
+        unit.setCreateBy(LoginUserHolder.getUserId());
+        unit.setCreateTime(new Date());
+        unit.setUpdateBy(LoginUserHolder.getUserId());
+        unit.setUpdateTime(new Date());
+        savelogOrderUnitList.add(unit);
+    }
+
+    private static void setLogisticContractInfo(AddLogisticOrderDTO.LogisticInfo x, Long lOrderId, List<KwtLogisticsOrderContract> saveContractList) {
+        KwtLogisticsOrderContract contract = new KwtLogisticsOrderContract();
+        contract.setId(new IdWorker(NumberConstant.ONE).nextId());
+        contract.setContractId(x.getContractId());
+        contract.setLOrderId(lOrderId);
+        contract.setContractNo(x.getContractNo());
+        contract.setContractName(x.getContractName());
+        contract.setSigningWay(String.valueOf(x.getSigningWay()));
+        contract.setCreateBy(LoginUserHolder.getUserId());
+        contract.setCreateTime(new Date());
+        contract.setUpdateBy(LoginUserHolder.getUserId());
+        contract.setUpdateTime(new Date());
+        saveContractList.add(contract);
+    }
+
+    private static void setLogisticGoodsInfo(AddLogisticOrderDTO orderDTO, Long lOrderId, String lOrderNo, List<KwtLogisticsOrderGoods> savelogOrderGoodsList) {
+        KwtLogisticsOrderGoods goods = new KwtLogisticsOrderGoods();
+        goods.setId(new IdWorker(NumberConstant.ONE).nextId());
+        goods.setLOrderId(lOrderId);
+        goods.setLOrderNo(lOrderNo);
+        goods.setGoodsName(orderDTO.getGoodsName());
+        goods.setGoodsType(orderDTO.getGoodsType());
+        goods.setStatus(NumberConstant.ZERO);
+        goods.setCreateBy(LoginUserHolder.getUserId());
+        goods.setCreateTime(new Date());
+        goods.setUpdateBy(LoginUserHolder.getUserId());
+        goods.setUpdateTime(new Date());
+        savelogOrderGoodsList.add( goods);
+    }
+
+    private static void setLogisticAddress(AddLogisticOrderDTO orderDTO, AddLogisticOrderDTO.LogisticInfo x, Long lOrderId, List<KwtLogisticsOrderAddress> saveAddressList) {
+        KwtLogisticsOrderAddress loadAddress = new KwtLogisticsOrderAddress();
+        loadAddress.setId(new IdWorker(NumberConstant.ONE).nextId());
+        loadAddress.setLOrderId(lOrderId);
+        loadAddress.setAddressType(NumberConstant.ONE);
+        loadAddress.setName(orderDTO.getLoadName() == null ? null : orderDTO.getLoadName());
+//        loadAddress.setType();
+        loadAddress.setContacts(orderDTO.getLoadContacts());
+        loadAddress.setPhone(orderDTO.getLoadPhone());
+        loadAddress.setCityCode(orderDTO.getLoadCityCode());
+        loadAddress.setCityName(orderDTO.getLoadCityName());
+        loadAddress.setDetailAddress(orderDTO.getLoadDetailAddress());
+
+        loadAddress.setEntryType(NumberConstant.FOUR);
+        loadAddress.setStatus(NumberConstant.ZERO);
+        loadAddress.setCreateBy(LoginUserHolder.getUserId());
+        Date date1 = new Date();
+        loadAddress.setCreateTime(date1);
+        loadAddress.setUpdateBy(LoginUserHolder.getUserId());
+        loadAddress.setUpdateTime(date1);
+        saveAddressList.add(loadAddress);
+        KwtLogisticsOrderAddress unloadAddress = new KwtLogisticsOrderAddress();
+        unloadAddress.setId(new IdWorker(NumberConstant.TWO).nextId());
+        unloadAddress.setLOrderId(lOrderId);
+        unloadAddress.setAddressType(NumberConstant.TWO);
+        unloadAddress.setName(orderDTO.getUnloadName());
+//        unloadAddress.setType();
+        unloadAddress.setContacts(x.getUnloadContacts());
+        unloadAddress.setPhone(x.getUnloadPhone());
+        unloadAddress.setCityCode(orderDTO.getUnloadCityCode());
+        unloadAddress.setCityName(orderDTO.getUnloadCityName());
+        unloadAddress.setDetailAddress(x.getUnloadDetailAddress());
+        unloadAddress.setEntryType(NumberConstant.FOUR);
+        unloadAddress.setStatus(NumberConstant.ZERO);
+        unloadAddress.setCreateBy(LoginUserHolder.getUserId());
+        unloadAddress.setCreateTime(date1);
+        unloadAddress.setUpdateBy(LoginUserHolder.getUserId());
+        unloadAddress.setUpdateTime(date1);
+        saveAddressList.add(unloadAddress);
+    }
+
+    private static void setLogisticOrderInfo(AddLogisticOrderDTO orderDTO, AddLogisticOrderDTO.LogisticInfo x, Long lOrderId, String lOrderNo, List<KwtLogisticsOrder> saveLogisticsOrderList) {
+        KwtLogisticsOrder kwtLogisticsOrder = new KwtLogisticsOrder();
+        kwtLogisticsOrder.setId(lOrderId);
+        kwtLogisticsOrder.setEntId(LoginUserHolder.getEntId());
+        kwtLogisticsOrder.setType(String.valueOf(x.getType()));
+        kwtLogisticsOrder.setTOrderId(orderDTO.getTradeOrderId());
+        kwtLogisticsOrder.setTOrderNo(orderDTO.getTradeOrderNo());
+        kwtLogisticsOrder.setLOrderNo(lOrderNo);
+        kwtLogisticsOrder.setPid(lOrderId);
+        kwtLogisticsOrder.setPids(lOrderId.toString());
+        kwtLogisticsOrder.setBillingMode(x.getBillingMode());
+        kwtLogisticsOrder.setPrice(x.getPrice());
+        kwtLogisticsOrder.setPriceType(x.getPriceType());
+        kwtLogisticsOrder.setAmount(x.getAmount());
+        kwtLogisticsOrder.setUnit(x.getAmountUnit());
+        kwtLogisticsOrder.setLoss(x.getLoss() == null ? null : x.getLoss());
+        kwtLogisticsOrder.setLossUnit(x.getLossUnit());
+        kwtLogisticsOrder.setGoodsPrice(orderDTO.getGoodsPrice());
+        kwtLogisticsOrder.setGoodsPriceUnit(orderDTO.getGoodsPriceUnit());
+        kwtLogisticsOrder.setStartTime(Objects.isNull(x.getStartTime()) ?
+                null : DateUtil.localDateToLocalDateTimeStart(x.getStartTime()));
+        kwtLogisticsOrder.setEndTime(Objects.isNull(x.getEndTime()) ?
+                null : DateUtil.localDateToLocalDateTimeStart(x.getEndTime()));
+        BigDecimal decimal = BigDecimal.ZERO ;
+        kwtLogisticsOrder.setSubcontractAmount(decimal);
+        kwtLogisticsOrder.setEntrustAmount(decimal);
+        kwtLogisticsOrder.setUnloadAmount(decimal);
+        kwtLogisticsOrder.setLoadAmount(decimal);
+        kwtLogisticsOrder.setIgnoreAmount(decimal);
+        kwtLogisticsOrder.setDeficitAmount(decimal);
+        kwtLogisticsOrder.setDeficitPrice(decimal);
+        kwtLogisticsOrder.setTotalUnloadAmount(decimal);
+        kwtLogisticsOrder.setTotalLoadAmount(decimal);
+        kwtLogisticsOrder.setPayment(x.getPayment());
+        kwtLogisticsOrder.setRemark(x.getRemark());
+        kwtLogisticsOrder.setStatus(LogisticsOrderV1Enum.PENDING_ORDER.getCode());
+        kwtLogisticsOrder.setCreateBy(LoginUserHolder.getUserId());
+        Date date = new Date();
+        kwtLogisticsOrder.setCreateTime(date);
+        kwtLogisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+        kwtLogisticsOrder.setUpdateTime(date);
+        kwtLogisticsOrder.setBindStatus(String.valueOf(NumberConstant.ZERO));
+        saveLogisticsOrderList.add(kwtLogisticsOrder);
+    }
 }

+ 60 - 30
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -2236,7 +2236,7 @@ public class KwtLogisticsConsignmentService {
     public PageDataResult<LogisticsOrderResp> queryLogisticsOrderByPage(QueryLogisticsOrderReq req) {
         log.info("分页查询物流订单传递参数信息:{}", JSONObject.toJSONString(req));
 
-        Set<Long> allEnt = getAllEnt(req);
+        Set<Long> allEnt = getAllEnt(req.getEntId());
         //根据托运单位或者承运单位查询企业
         Set<Long> entList = getEntList(req);
 
@@ -2245,8 +2245,7 @@ public class KwtLogisticsConsignmentService {
 
 
         //分页查询物流订单
-       IPage<KwtLogisticsOrder> page = logisticsOrderRepository.queryByPage(allEnt,logOrderIds,req.getOrderStatus(),
-               req.getOrderNo(),
+       IPage<KwtLogisticsOrder> page = logisticsOrderRepository.queryByPage(allEnt,logOrderIds, req.getOrderNo(),req.getOrderStatus(),
                req.getStartTime(), req.getEndTime(), req.getPageNum(), req.getPageSize());
         List<KwtLogisticsOrder> records = page.getRecords();
         if(org.springframework.util.CollectionUtils.isEmpty(records)){
@@ -2295,7 +2294,16 @@ public class KwtLogisticsConsignmentService {
                 .map(x ->getLogisticsOrderResp(x, finalLogOrderIdAndUnitTypeKeyAndUnitMap, finalLogIdAndGoodsMap
                         , finalGoodsIdAndGoodsMap, finalLogisticsOrderIdAndUnitTypeKeyAndAddressMap, finalLogOrderIdAndContractMap))
                 .collect(Collectors.toList());
-
+        if(org.apache.commons.lang3.StringUtils.isNotBlank(req.getConsignCompanyId())){
+            resps = resps.stream()
+                    .filter(x-> org.apache.commons.lang3.StringUtils.equals(x.getConsignCompanyId(), req.getConsignCompanyId()))
+                    .collect(Collectors.toList());
+        }
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getCarriageCompanyId())){
+            resps = resps.stream()
+                    .filter(x-> org.apache.commons.lang3.StringUtils.equals(x.getCarriageCompanyId(), req.getCarriageCompanyId()))
+                    .collect(Collectors.toList());
+        }
         return PageDataResult.of(page,resps);
     }
 
@@ -2329,8 +2337,8 @@ public class KwtLogisticsConsignmentService {
         Map<String, KwtLogisticsOrderAddress> logisticsOrderIdAndUnitTypeKeyAndAddressMap = Maps.newHashMap();
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(logOrderAddressList)){
            logisticsOrderIdAndUnitTypeKeyAndAddressMap =
-                    logOrderAddressList.stream().peek(x -> x.setLogisticsOrderIdAndUnitTypeKey(x.getLOrderId() + "-" + x.getAddressType()))
-                    .collect(Collectors.toMap(KwtLogisticsOrderAddress::getLogisticsOrderIdAndUnitTypeKey,
+                    logOrderAddressList.stream()
+                    .collect(Collectors.toMap(x->x.getLOrderId() + "-" + x.getAddressType(),
                             Function.identity(), (x, y) -> x));
         }
         return logisticsOrderIdAndUnitTypeKeyAndAddressMap;
@@ -2372,19 +2380,21 @@ public class KwtLogisticsConsignmentService {
     }
 
     @NotNull
-    private Set<Long> getAllEnt(QueryLogisticsOrderReq req) {
+    private Set<Long> getAllEnt(String entId) {
         Set<Long> allEnt = Sets.newHashSet();
         //根据企业类型查询企业
-        if (StringUtils.isBlank(req.getEntId())){
-            return allEnt;
+        Long enterId = StringUtils.isBlank(entId) ? LoginUserHolder.getEntId() : Long.parseLong(entId);
+
+        if (Objects.isNull(enterId)){
+          return allEnt;
         }
-        allEnt.add(Long.parseLong(req.getEntId()));
-        EntCacheResDto entCacheResDto = remoteSystemService.queryEntTreeById(Long.parseLong(req.getEntId()));
+        allEnt.add( enterId);
+        EntCacheResDto entCacheResDto = remoteSystemService.queryEntTreeById(enterId);
         if (Objects.nonNull(entCacheResDto)) {
             EntCacheResDto entCacheResDto1 = remoteSystemService.queryEntTreeById(entCacheResDto.getId());
             List<EntCacheResDto> child = entCacheResDto1.getChild();
             if (CollectionUtils.isNotEmpty(child)) {
-                allEnt.addAll(child.stream().filter(x->x.getEntTypes().contains(req.getEntType())).map(EntCacheResDto::getId).toList());
+                allEnt.addAll(child.stream().map(EntCacheResDto::getId).toList());
             }
         }
         return allEnt;
@@ -2411,9 +2421,11 @@ public class KwtLogisticsConsignmentService {
         logisticsOrderResp.setCarriageCompanyName(carriageCompany.getFirmName());
 
         KwtLogisticsOrderGoods goods = finalLogIdAndGoodsMap.getOrDefault(kwtLogisticsOrder.getId(), new KwtLogisticsOrderGoods());
-        KwpGoods kwpGoods = finalGoodsIdAndGoodsMap.getOrDefault(goods.getGoodsId(), new KwpGoods());
-        logisticsOrderResp.setGoodsId(String.valueOf(goods.getId()));
-        logisticsOrderResp.setGoodsName(kwpGoods.getName());
+        KwpGoods kwpGoods = finalGoodsIdAndGoodsMap.get(goods.getGoodsId());
+        if (Objects.nonNull(kwpGoods)){
+            logisticsOrderResp.setGoodsId(String.valueOf(goods.getGoodsId()));
+            logisticsOrderResp.setGoodsName(kwpGoods.getName()+"/"+kwpGoods.getGoodsType()+"/"+kwpGoods.getSpec());
+        }
         logisticsOrderResp.setTransportPrice(Objects.nonNull(kwtLogisticsOrder.getPrice()) ? kwtLogisticsOrder.getPrice().setScale(2,
                 RoundingMode.HALF_UP).toPlainString() : "0.00");
         logisticsOrderResp.setChargeType(kwtLogisticsOrder.getBillingMode());
@@ -2459,7 +2471,7 @@ public class KwtLogisticsConsignmentService {
     public LogisticsOrderDetailResp getLogisticsOrderDetail(@Valid LogisticsOrderReq req) {
         KwtLogisticsOrder logisticsOrder =
                 logisticsOrderRepository.queryByLogisticsOrderId(Long.valueOf(req.getLogisticsOrderId()));
-        if (Objects.nonNull(logisticsOrder)){
+        if (Objects.isNull(logisticsOrder)){
             throw new BusinessException("物流订单不存在");
         }
         //根据物流订单号查询物流合同
@@ -2485,8 +2497,7 @@ public class KwtLogisticsConsignmentService {
         Map<String, KwtLogisticsOrderAddress> logOrderIdAndUnitTypeKeyAndAddressMap = Maps.newHashMap();
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(addressList)){
             logOrderIdAndUnitTypeKeyAndAddressMap = addressList.stream()
-                    .peek(x -> x.setLogisticsOrderIdAndUnitTypeKey(x.getLOrderId() + "-" + x.getAddressType()))
-                    .collect(Collectors.toMap(KwtLogisticsOrderAddress::getLogisticsOrderIdAndUnitTypeKey, Function.identity(), (v1, v2) -> v1));
+                    .collect(Collectors.toMap(x->x.getLOrderId() + "-" + x.getAddressType(), Function.identity(), (v1, v2) -> v1));
         }
 
         //根据物流订单号查询运单信息
@@ -2499,7 +2510,8 @@ public class KwtLogisticsConsignmentService {
     }
 
     @NotNull
-    private static LogisticsOrderDetailResp getLogisticsOrderDetailResp(KwtLogisticsOrderContract orderContract, Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap, KwtLogisticsOrder logisticsOrder, KwpGoods kwpGoods, Map<String, KwtLogisticsOrderAddress> logOrderIdAndUnitTypeKeyAndAddressMap, List<KwtWaybillOrderSubtask> waybillOrderSubtasks) {
+    private static LogisticsOrderDetailResp getLogisticsOrderDetailResp(KwtLogisticsOrderContract orderContract, Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap, KwtLogisticsOrder logisticsOrder,
+                                                                        KwpGoods kwpGoods, Map<String, KwtLogisticsOrderAddress> logOrderIdAndUnitTypeKeyAndAddressMap, List<KwtWaybillOrderSubtask> waybillOrderSubtasks) {
         LogisticsOrderDetailResp logisticsOrderDetailResp = new LogisticsOrderDetailResp();
         //设置合同信息
         setContractInfo(orderContract, logisticsOrderDetailResp);
@@ -2680,9 +2692,9 @@ public class KwtLogisticsConsignmentService {
     public PageDataResult<CapacityVo> pageCapacity(CapacityReq req) {
         log.info("查询车辆列表请求:{}", JSON.toJSONString( req));
         Long logOrderId = Long.parseLong(req.getLogOrderId());
-        Long entId = Long.parseLong(req.getEntId());
+        Set<Long> allEnt = getAllEnt(req.getEntId());
         IPage<KwtLogisticsOrderCirculate> page = logisticsOrderCirculateRepository.queryByPage(req.getPageNum(),
-                req.getPageSize(), req.getTruckNo(),Long.parseLong(req.getEntId()));
+                req.getPageSize(), req.getTruckNo(),allEnt, logOrderId);
         List<KwtLogisticsOrderCirculate> records = page.getRecords();
 
         if (org.apache.commons.collections4.CollectionUtils.isEmpty( records)){
@@ -2711,8 +2723,7 @@ public class KwtLogisticsConsignmentService {
         //查询运单信息
         Map<Long, List<KwtWaybillOrder>> billOrderIdAndWaybillOrderMap = Maps.newHashMap();
         if (CollectionUtils.isNotEmpty(billOrderIds)){
-            List<KwtWaybillOrder> waybillOrders = waybillOrderRepository.queryByBillOrderIdsAndEntId(billOrderIds,
-                    entId);
+            List<KwtWaybillOrder> waybillOrders = waybillOrderRepository.queryByBillOrderIds(billOrderIds);
             if (CollectionUtils.isNotEmpty(waybillOrders)){
                 billOrderIdAndWaybillOrderMap = waybillOrders.stream().filter(x->Objects.equals(x.getStatus(),
                                 CarWaybillEnum.APPROVAL_PASS.getCode()))
@@ -2751,7 +2762,7 @@ public class KwtLogisticsConsignmentService {
             capacityVo.setLoadAmount(loadAmount.setScale(2,RoundingMode.HALF_UP).toPlainString());
             capacityVo.setUnloadAmount(unloadAmount.setScale(2,RoundingMode.HALF_UP).toPlainString());
             capacityVo.setStatus(String.valueOf(waybillOrders.get(0).getStatus()));
-            capacityVo.setStatusDesc(CarWaybillEnum.getName(waybillOrders.get(0).getStatus()));
+            capacityVo.setStatusDesc(CarWaybillV1Enum.geDesc(waybillOrders.get(0).getStatus()));
         }
 
         capacityVo.setDispatchStatus(String.valueOf(t.getStatus()));
@@ -2763,11 +2774,11 @@ public class KwtLogisticsConsignmentService {
     @Transactional(rollbackFor = Exception.class)
     public Boolean closeCapacity(@Valid DeleteCapacityReq req) {
         log.info("关闭启用已派运力请求参数:{}", JSON.toJSONString(req));
+        Long truckId =StringUtils.isNotBlank(req.getTruckId()) ?Long.parseLong(req.getTruckId()) : null;
         List<Long> logisticsOrderIds = req.getLogisticsOrderIds()
                 .stream().map(x -> Long.parseLong(x)).collect(Collectors.toList());
         List<KwtLogisticsOrderCirculate> logisticsOrderCirculate =
-                logisticsOrderCirculateRepository.findOneByLogOrderIdsAndTruckId(logisticsOrderIds,
-                        Long.parseLong(req.getTruckId()));
+                logisticsOrderCirculateRepository.findOneByLogOrderIdsAndTruckId(logisticsOrderIds, truckId);
         if (Objects.isNull(logisticsOrderCirculate)) {
             throw new BusinessException("未找到该运力信息");
         }
@@ -2784,6 +2795,7 @@ public class KwtLogisticsConsignmentService {
         return logisticsOrderCirculateRepository.updateCirculates(orderCirculates);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     public DispatchCarResp dispatchCar(@Valid DispatchCarReq req) {
         log.info("派车请求参数:{}", JSON.toJSONString(req));
         //查询物流订单
@@ -2793,6 +2805,10 @@ public class KwtLogisticsConsignmentService {
         if (Objects.isNull(logisticsOrder)){
             throw new BusinessException("未找到该物流订单信息");
         }
+
+        if (!Objects.equals(logisticsOrder.getStatus(),LogisticsOrderV1Enum.WAIT_DELIVERY.getCode())){
+            throw new BusinessException("该物流订单状态不能进行派车");
+        }
         //车牌id去重
         List<DispatchCarReq.CarInfo> carInfos = req.getCarInfos();
         Set<String> truckIds = carInfos.stream()
@@ -2826,9 +2842,17 @@ public class KwtLogisticsConsignmentService {
             return new DispatchCarResp();
         }
         Boolean b = logisticsOrderCirculateRepository.insertCirculates(insertOrderCirculates);
+        //修改物流订单状态
         if (!b){
             throw new BusinessException("派车失败");
         }
+        KwtLogisticsOrder updateLogisticsOrder = new KwtLogisticsOrder();
+        updateLogisticsOrder.setId(logOrderId);
+        updateLogisticsOrder.setStatus(LogisticsOrderV1Enum.IN_TRANSIT.getCode());
+        Boolean updateFlag = logisticsOrderRepository.updateLogisticsOrder(updateLogisticsOrder);
+        if (!updateFlag){
+            throw new BusinessException("修改物流订单状态失败");
+        }
         dispatchCarResp.setSuccessCount(String.valueOf(insertOrderCirculates.size()));
         return dispatchCarResp;
     }
@@ -2841,6 +2865,7 @@ public class KwtLogisticsConsignmentService {
         logisticsOrderCirculate.setLOrderId(logOrderId);
         logisticsOrderCirculate.setTruckId(Long.valueOf(carInfo.getTruckId()));
         logisticsOrderCirculate.setTruckNo(carInfo.getTruckNo());
+        logisticsOrderCirculate.setDriverId(-9L);
         Date startDate = Objects.nonNull(logisticsOrder.getStartTime()) ?
                 Date.from(logisticsOrder.getStartTime().atZone(ZoneId.systemDefault()).toInstant()) : null;
         logisticsOrderCirculate.setStartTime(startDate);
@@ -2868,8 +2893,13 @@ public class KwtLogisticsConsignmentService {
         }
         KwtLogisticsOrder updateLogisticsOrder = new KwtLogisticsOrder();
         updateLogisticsOrder.setId(logOrderId);
+
+        if (!Arrays.asList(LogisticsOrderV1Enum.WAIT_DELIVERY.getCode(), LogisticsOrderV1Enum.IN_TRANSIT.getCode()).contains(logisticsOrder.getStatus())){
+            throw new BusinessException("该物流订单状态不能进行完结");
+        }
         if (Objects.equals(logisticsOrder.getStatus(), LogisticsOrderV1Enum.WAIT_DELIVERY.getCode())){
-            updateLogisticsOrder.setStatus(LogisticsOrderV1Enum.HAVE_FINISHED.getCode());
+            updateLogisticsOrder.setStatus(LogisticsOrderV1Enum.HAVE_RECONCILED.getCode());
+            return logisticsOrderRepository.updateLogisticsOrder(updateLogisticsOrder);
         }
 
         //查询物流订单下的所有运单
@@ -2879,9 +2909,9 @@ public class KwtLogisticsConsignmentService {
                     CarWaybillV1Enum.WAIT_UNLOADING.getCode()) || !Objects.equals(x.getStatus(),
                     CarWaybillV1Enum.APPROVAL_TREAT.getCode()));
             if (b){
-                updateLogisticsOrder.setStatus(LogisticsOrderEnum.NEARING_COMPLETION.getCode());
-            }else if (Objects.equals(logisticsOrder.getStatus(), LogisticsOrderEnum.NEARING_COMPLETION.getCode())){
-                updateLogisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+                updateLogisticsOrder.setStatus(LogisticsOrderV1Enum.HAVE_FINISHED.getCode());
+            }else {
+                updateLogisticsOrder.setStatus(LogisticsOrderV1Enum.HAVE_RECONCILED.getCode());
             }
         }
         return logisticsOrderRepository.updateLogisticsOrder(updateLogisticsOrder);

+ 217 - 49
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

@@ -124,6 +124,7 @@ public class KwtWaybillOrderV1Service {
     private final KwtLogisticsOrderGoodsRepository kwtLogisticsOrderGoodsRepository;
     private final KwtWaybillOrderSubtaskRepository kwtWaybillOrderSubtaskRepository;
     private final KwtLogisticsOrderRepository kwtLogisticsOrderRepository;
+    private final KwtWaybillOrderTicketRepository  kwtWaybillOrderTicketRepository;
     @Resource
     private StreamBridge streamBridge;
     @DubboReference(version = "1.0.0", group = "design", check = false)
@@ -2156,10 +2157,11 @@ public class KwtWaybillOrderV1Service {
                         .peek(a -> a.setWOrderIdAddressTypeKey(a.getWOrderId() + CommonConstants.UNDERSCORE + a.getAddressType()))
                         .collect(Collectors.toMap(KwtWaybillOrderAddress::getWOrderIdAddressTypeKey, Function.identity(), (k1, k2) -> k1));
                 //查询运单状态信息
-                List<KwtWaybillOrderTrack> tracks =  kwtWaybillOrderTrackRepository.queryByAddressIds(addressIds);
+                //List<KwtWaybillOrderTrack> tracks =  kwtWaybillOrderTrackRepository.queryByAddressIds(addressIds);
+                List<KwtWaybillOrderTicket> tracks = kwtWaybillOrderTicketRepository.queryByAddressIds(addressIds);
                 //地址id映射运单状态
-                Map<Long, KwtWaybillOrderTrack> addressIdAndTrackMap = tracks.stream()
-                        .collect(Collectors.toMap(KwtWaybillOrderTrack::getWAddressId, Function.identity(), (k1, k2) -> k1));
+                Map<Long, KwtWaybillOrderTicket> addressIdAndTrackMap = tracks.stream()
+                        .collect(Collectors.toMap(KwtWaybillOrderTicket::getWAddressId, Function.identity(), (k1, k2) -> k1));
                 RTruckRouteVo rTruckRouteVo = new RTruckRouteVo();
                 rTruckRouteVo.setTruckId(waybillOrder.getTruckId());
                 rTruckRouteVo.setTruckNo(waybillOrder.getTruckNo());
@@ -2172,7 +2174,7 @@ public class KwtWaybillOrderV1Service {
                 AtomicReference<Date> startTime = new AtomicReference<>();
                 AtomicReference<Date> unloadingTime = new AtomicReference<>();
                 addressList.forEach(a->{
-                    KwtWaybillOrderTrack kwtWaybillOrderTrack = addressIdAndTrackMap.get(a.getId());
+                    KwtWaybillOrderTicket kwtWaybillOrderTrack = addressIdAndTrackMap.get(a.getId());
                     if (Objects.equals(a.getAddressType(), AddressTypeEnum.SHIPMENT.getCode())){
                         startTime.set(kwtWaybillOrderTrack.getOperateTime());
                     }
@@ -2935,17 +2937,29 @@ public class KwtWaybillOrderV1Service {
 
     public PageDataResult<WaybillOrderResp> findBillOrderListPage(WaybillOrderReq req) {
         log.info("查询订单列表请求阐述:{}",JSON.toJSONString( req));
-
+        Integer status = org.apache.commons.lang3.StringUtils.isNoneBlank(req.getStatus()) ?
+                Integer.parseInt(req.getStatus()) : null;
+        Set<Long> allEnt = getAllEnt(req);
         //物流订单号集合
         Set<Long> logOrderIds = getLogOrderIds(req);
+        boolean b1 = !org.apache.commons.lang3.StringUtils.isAllBlank(req.getLogisticsOrderNo(), req.getGoodsName(),
+                req.getCarrierId(), req.getConsignorId());
+        if(org.apache.commons.collections4.CollectionUtils.isEmpty(logOrderIds) && b1){
+            return PageDataResult.empty(req.getPageNum(), req.getPageSize());
+        }
 
         //查询运单信息
         //运单id集合
         Set<Long> billOrderIds = getBillOrderIds(req);
+        boolean b = Stream.of(req.getWaybillNo(), req.getTruckNo(), req.getDriverName(), req.getPhone(),
+                        req.getLoadStartTime(),req.getLoadEndTime(),req.getUnloadStartTime(),req.getUnloadEndTime())
+                        .anyMatch(StringUtils::isNotBlank);
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(billOrderIds) && b){
+            return PageDataResult.empty(req.getPageNum(), req.getPageSize());
+        }
 
-        Long entId = StringUtils.isNotBlank(req.getEntId()) ? Long.parseLong(req.getEntId()) : null;
-        IPage<KwtWaybillOrderSubtask> page = waybillOrderSubtaskRepository.queryByPage(entId ,logOrderIds,
-                billOrderIds, req.getPageNum(), req.getPageSize());
+        IPage<KwtWaybillOrderSubtask> page = waybillOrderSubtaskRepository.queryByPage(allEnt ,logOrderIds,
+                billOrderIds,status, req.getPageNum(), req.getPageSize());
         List<KwtWaybillOrderSubtask> records = page.getRecords();
         if (org.apache.commons.collections4.CollectionUtils.isEmpty(records)){
             return PageDataResult.empty(req.getPageNum(), req.getPageSize());
@@ -2981,7 +2995,7 @@ public class KwtWaybillOrderV1Service {
         }
 
         // 查询运单相关的装卸货时间信息
-        Map<String, KwtWaybillOrderTrack> subBillIdAddressIdKeyAndOrderTrackMap = getStringKwtWaybillOrderTrackMap(addressIds);
+        Map<String, KwtWaybillOrderTicket> subBillIdAddressIdKeyAndOrderTrackMap = getStringKwtWaybillOrderTrackMap(addressIds);
 
         //更具物流订单查询商品
         List<KwtLogisticsOrderGoods> logisticsOrderGoods =
@@ -2992,18 +3006,30 @@ public class KwtWaybillOrderV1Service {
             goodsIds = logisticsOrderGoods.stream()
                     .map(KwtLogisticsOrderGoods::getGoodsId).distinct().collect(Collectors.toList());
             logOrderIdAndGoodsIdMap =
-                    logisticsOrderGoods.stream().collect(Collectors.toMap(KwtLogisticsOrderGoods::getId, Function.identity(),
+                    logisticsOrderGoods.stream().collect(Collectors.toMap(KwtLogisticsOrderGoods::getLOrderId,
+                            Function.identity(),
                     (k1, k2) -> k1));
         }
         //查询商品信息
         Map<Long, KwpGoods> kwpGoodsMap = goodsInfoService.getGoodsByIds(goodsIds);
 
-
+        //查询订单信息
+        List<KwtLogisticsOrder> kwtLogisticsOrders = kwtLogisticsOrderRepository.queryByLogisticsOrderIds(new ArrayList<>(logicsOrderIds));
+        Map<Long, KwtLogisticsOrder> logIdAndOrderMap =  Maps.newHashMap();
+        if (CollectionUtils.isNotEmpty(kwtLogisticsOrders)){
+           logIdAndOrderMap = kwtLogisticsOrders.stream()
+                   .collect(Collectors.toMap(KwtLogisticsOrder::getId,
+                             Function.identity(), (k1,
+                                                                                                                                                        k2) -> k1));
+        }
         Map<String, KwtWaybillOrderAddress> finalSubOrderIdAddressTypeKeyAndAddressMap = subOrderIdAddressTypeKeyAndAddressMap;
         Map<Long, KwtLogisticsOrderGoods> finalLogOrderIdAndGoodsIdMap = logOrderIdAndGoodsIdMap;
+        Map<Long, KwtLogisticsOrder> finalLogIdAndOrderMap = logIdAndOrderMap;
         List<WaybillOrderResp> resps = records.stream()
-                .map(record -> getWaybillOrderResp(record, waybillOrderIdAndBillOrderMap, logOrderIdUnitTypeKeyAndUnitMap, finalLogOrderIdAndGoodsIdMap, kwpGoodsMap, finalSubOrderIdAddressTypeKeyAndAddressMap, subBillIdAddressIdKeyAndOrderTrackMap))
+                .map(record -> getWaybillOrderResp(record, waybillOrderIdAndBillOrderMap,
+                        logOrderIdUnitTypeKeyAndUnitMap, finalLogOrderIdAndGoodsIdMap, kwpGoodsMap, finalSubOrderIdAddressTypeKeyAndAddressMap, subBillIdAddressIdKeyAndOrderTrackMap, finalLogIdAndOrderMap))
                 .collect(Collectors.toList());
+
         return PageDataResult.of(page,resps);
     }
 
@@ -3017,6 +3043,29 @@ public class KwtWaybillOrderV1Service {
         }
         return waybillOrderIdAndBillOrderMap;
     }
+    @NotNull
+    private Set<Long> getAllEnt(WaybillOrderReq req) {
+        Set<Long> allEnt = Sets.newHashSet();
+        //根据企业类型查询企业
+        if (StringUtils.isBlank(req.getEntId())){
+            req.setEntId(String.valueOf(LoginUserHolder.getEntId()));
+        }
+
+        if (StringUtils.isBlank(req.getEntId())){
+            return allEnt;
+        }
+        allEnt.add( Long.parseLong(req.getEntId()));
+        EntCacheResDto entCacheResDto = remoteSystemService.queryEntTreeById(Long.parseLong(req.getEntId()));
+        if (Objects.nonNull(entCacheResDto)) {
+            EntCacheResDto entCacheResDto1 = remoteSystemService.queryEntTreeById(entCacheResDto.getId());
+            List<EntCacheResDto> child = entCacheResDto1.getChild();
+            if (CollectionUtils.isNotEmpty(child)) {
+                allEnt.addAll(child.stream()
+                        .map(EntCacheResDto::getId).toList());
+            }
+        }
+        return allEnt;
+    }
 
     @NotNull
     private Map<String, KwtLogisticsOrderUnit> getStringKwtLogisticsOrderUnitMap(List<Long> logicsOrderIds) {
@@ -3032,16 +3081,17 @@ public class KwtWaybillOrderV1Service {
     }
 
     @NotNull
-    private Map<String, KwtWaybillOrderTrack> getStringKwtWaybillOrderTrackMap(Set<Long> addressIds) {
-        List<KwtWaybillOrderTrack> kwtWaybillOrderTracks = Lists.newArrayList();
+    private Map<String, KwtWaybillOrderTicket> getStringKwtWaybillOrderTrackMap(Set<Long> addressIds) {
+        List<KwtWaybillOrderTicket> kwtWaybillOrderTracks = Lists.newArrayList();
         if (CollectionUtils.isNotEmpty(addressIds)){
-             kwtWaybillOrderTracks = kwtWaybillOrderTrackRepository.queryByAddressIds(addressIds);
+            // kwtWaybillOrderTracks = kwtWaybillOrderTrackRepository.queryByAddressIds(addressIds);
+             kwtWaybillOrderTracks = kwtWaybillOrderTicketRepository.queryByAddressIds(addressIds);
         }
-        Map<String, KwtWaybillOrderTrack> subBillIdAddressIdKeyAndOrderTrackMap = Maps.newHashMap();
+        Map<String, KwtWaybillOrderTicket> subBillIdAddressIdKeyAndOrderTrackMap = Maps.newHashMap();
         if (CollectionUtils.isNotEmpty(kwtWaybillOrderTracks)){
             subBillIdAddressIdKeyAndOrderTrackMap =
-                    kwtWaybillOrderTracks.stream().peek(x->x.setSubBillIdAddressIdKey(x.getWSubtaskId()+"-"+x.getWAddressId()))
-                            .collect(Collectors.toMap(KwtWaybillOrderTrack::getSubBillIdAddressIdKey,
+                    kwtWaybillOrderTracks.stream()
+                            .collect(Collectors.toMap(x -> x.getWSubtaskId() + "-" + x.getWAddressId(),
                                     Function.identity(), (k1, k2) -> k1));
         }
         return subBillIdAddressIdKeyAndOrderTrackMap;
@@ -3068,12 +3118,30 @@ public class KwtWaybillOrderV1Service {
             entIds.add(Long.parseLong(req.getCarrierId()));
         }
         //根据单位查询订单id
-        List<KwtLogisticsOrderUnit> unitList = kwtLogisticsOrderUnitRepository.queryByEntIds(entIds);
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(unitList)){
-            logOrderIds.addAll(unitList.stream()
-                    .map(KwtLogisticsOrderUnit::getLOrderId)
-                    .collect(Collectors.toSet())) ;
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(entIds)){
+            List<KwtLogisticsOrderUnit> unitList = kwtLogisticsOrderUnitRepository.queryByEntIds(entIds);
+            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(unitList)){
+                logOrderIds.addAll(unitList.stream()
+                        .map(KwtLogisticsOrderUnit::getLOrderId)
+                        .collect(Collectors.toSet())) ;
+            }
+         }
+        List<KwtLogisticsOrderGoods> logisticsOrderGoods =null ;
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getGoodsName())){
+            List<KwpGoods> goods = goodsInfoService.findGoodsByGoodsName(req.getGoodsName());
+            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(goods)){
+                Set<Long> goodsIds = goods.stream()
+                        .map(KwpGoods::getId)
+                        .collect(Collectors.toSet());
+               logisticsOrderGoods = kwtLogisticsOrderGoodsRepository.queryByGoodsIds(goodsIds);
+            }
         }
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(logisticsOrderGoods)){
+            logOrderIds.addAll(logisticsOrderGoods.stream()
+                    .map(KwtLogisticsOrderGoods::getLOrderId)
+                    .collect(Collectors.toSet()));
+        }
+
         return logOrderIds;
     }
 
@@ -3090,18 +3158,48 @@ public class KwtWaybillOrderV1Service {
                         .collect(Collectors.toSet()));
             }
         }
+        if (org.apache.commons.lang3.StringUtils.isNoneBlank(req.getLoadStartTime(),req.getLoadEndTime())){
+            Date loadStartTime = DateUtils.formatDate(req.getLoadStartTime());
+            Date loadEndTime = DateUtils.formatDate(req.getLoadEndTime());
+            List<KwtWaybillOrderTicket> tickets = kwtWaybillOrderTicketRepository.queryByOperateTime(loadStartTime,
+                    loadEndTime,1);
+            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty( tickets)){
+                billOrderIds.addAll(tickets.stream()
+                        .map(KwtWaybillOrderTicket::getWOrderId)
+                        .collect(Collectors.toSet()));
+            }
+        }
+
+        if (org.apache.commons.lang3.StringUtils.isNoneBlank(req.getUnloadStartTime(),req.getUnloadEndTime())){
+            Date unloadStartTime = DateUtils.formatDate(req.getUnloadStartTime());
+            Date unloadEndTime = DateUtils.formatDate(req.getUnloadEndTime());
+            List<KwtWaybillOrderTicket> tickets = kwtWaybillOrderTicketRepository.queryByOperateTime(unloadStartTime,
+                    unloadEndTime,2);
+            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty( tickets)){
+                billOrderIds.addAll(tickets.stream()
+                        .map(KwtWaybillOrderTicket::getWOrderId)
+                        .collect(Collectors.toSet()));
+            }
+        }
         return billOrderIds;
     }
 
     @NotNull
     private static WaybillOrderResp getWaybillOrderResp(KwtWaybillOrderSubtask record, Map<Long, KwtWaybillOrder> finalWaybillOrderIdAndBillOrderMap,
-                                                        Map<String, KwtLogisticsOrderUnit> finalLogOrderIdUnitTypeKeyAndUnitMap, Map<Long, KwtLogisticsOrderGoods> finalLogOrderIdAndGoodsIdMap, Map<Long, KwpGoods> kwpGoodsMap
-            , Map<String, KwtWaybillOrderAddress> finalSubOrderIdAddressTypeKeyAndAddressMap, Map<String, KwtWaybillOrderTrack> finalSubBillIdAddressIdKeyAndOrderTrackMap) {
+                                                        Map<String, KwtLogisticsOrderUnit> finalLogOrderIdUnitTypeKeyAndUnitMap,
+                                                        Map<Long, KwtLogisticsOrderGoods> finalLogOrderIdAndGoodsIdMap,
+                                                        Map<Long, KwpGoods> kwpGoodsMap,
+                                                        Map<String, KwtWaybillOrderAddress> finalSubOrderIdAddressTypeKeyAndAddressMap,
+                                                        Map<String, KwtWaybillOrderTicket> finalSubBillIdAddressIdKeyAndOrderTrackMap,
+                                                        Map<Long, KwtLogisticsOrder> finalLogIdAndOrderMap) {
         WaybillOrderResp waybillOrderResp = new WaybillOrderResp();
         KwtWaybillOrder billOrder = finalWaybillOrderIdAndBillOrderMap.getOrDefault(record.getWOrderId(),
                 new KwtWaybillOrder());
         waybillOrderResp.setWaybillOrderId(String.valueOf(billOrder.getId()));
         waybillOrderResp.setWaybillOrderNo(billOrder.getWOrderNo());
+        waybillOrderResp.setLogisticsOrderId(String.valueOf(record.getLOrderId()));
+        KwtLogisticsOrder order = finalLogIdAndOrderMap.getOrDefault(record.getLOrderId(), new KwtLogisticsOrder());
+        waybillOrderResp.setLogisticsOrderNo(order.getLOrderNo());
         KwtLogisticsOrderUnit consignUnit = finalLogOrderIdUnitTypeKeyAndUnitMap.getOrDefault(record.getLOrderId() + "-" + NumberConstant.ONE,
                 new KwtLogisticsOrderUnit());
         waybillOrderResp.setConsignUnitId(String.valueOf(consignUnit.getEntId()));
@@ -3118,8 +3216,10 @@ public class KwtWaybillOrderV1Service {
 
         KwtLogisticsOrderGoods goods = finalLogOrderIdAndGoodsIdMap.getOrDefault(lOrderId,
                 new KwtLogisticsOrderGoods());
-        KwpGoods kwpGoods = kwpGoodsMap.getOrDefault(goods.getGoodsId(), new KwpGoods());
-        waybillOrderResp.setGoodsName(kwpGoods.getName()+"/"+kwpGoods.getGoodsType()+"/"+kwpGoods.getSpec());
+        KwpGoods kwpGoods = kwpGoodsMap.get(goods.getGoodsId());
+        if (Objects.nonNull(kwpGoods)){
+            waybillOrderResp.setGoodsName(kwpGoods.getName()+"/"+kwpGoods.getGoodsType()+"/"+kwpGoods.getSpec());
+        }
         waybillOrderResp.setTaskNum(Objects.nonNull(billOrder.getEntrustAmount()) ?
                 billOrder.getEntrustAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "0.00");
         waybillOrderResp.setLoadingNetWeight(Objects.nonNull(billOrder.getLoadAmount()) ?
@@ -3134,16 +3234,22 @@ public class KwtWaybillOrderV1Service {
                 new KwtWaybillOrderAddress());
         waybillOrderResp.setUnloadingAddress(unloadingAdd.getDetailAddress());
 
-        KwtWaybillOrderTrack loadTrack =
+        KwtWaybillOrderTicket loadTrack =
                 finalSubBillIdAddressIdKeyAndOrderTrackMap.getOrDefault(record.getId() + "-" + loadingAdd.getId(),
-                new KwtWaybillOrderTrack());
+                new KwtWaybillOrderTicket());
 
         waybillOrderResp.setAcceptTime(DateUtils.format(record.getCreateTime(),DateUtils.DATE_TIME_PATTERN));
-        KwtWaybillOrderTrack unloadTrack =
+        KwtWaybillOrderTicket unloadTrack =
                 finalSubBillIdAddressIdKeyAndOrderTrackMap.getOrDefault(record.getId() + "-" + loadingAdd.getId(),
-                        new KwtWaybillOrderTrack());
+                        new KwtWaybillOrderTicket());
         waybillOrderResp.setLoadingTime(DateUtils.format(loadTrack.getOperateTime(),DateUtils.DATE_TIME_PATTERN));
+        //todo  cxf
         waybillOrderResp.setOffsiteTime(DateUtils.format(unloadTrack.getOperateTime(),DateUtils.DATE_TIME_PATTERN));
+        waybillOrderResp.setUnloadingTime(DateUtils.format(unloadTrack.getOperateTime(),DateUtils.DATE_TIME_PATTERN));
+        if (Objects.equals(record.getStatus(), CarWaybillV1Enum.WAIT_UNLOADING.getCode())){
+            waybillOrderResp.setCompleteTime(DateUtils.format(record.getUpdateTime(),DateUtils.DATE_TIME_PATTERN));
+        }
+
         waybillOrderResp.setStatus(String.valueOf(record.getStatus()));
         waybillOrderResp.setStatusDesc(CarWaybillV1Enum.geDesc(record.getStatus()));
         return waybillOrderResp;
@@ -3182,24 +3288,41 @@ public class KwtWaybillOrderV1Service {
         Long fleetId = Objects.nonNull(truck) && org.apache.commons.lang3.StringUtils.isNotBlank(truck.getFleetId()) ?
                 Long.parseLong(truck.getFleetId()) : null;
 
-        RFleetVo fleet = remoteFleetService.findFleetById(fleetId);
+
+        RFleetVo fleet = null;
+        try {
+            fleet = remoteFleetService.findFleetByTruckId(billOrder.getTruckId(),LoginUserHolder.getEntId());
+        } catch (Exception e) {
+            log.info("查询车队信息异常:{}",  e.getMessage());
+        }
 
         //查询商品信息
         KwtLogisticsOrderGoods goods = kwtLogisticsOrderGoodsRepository.queryByLogOrderId(logOrder.getId());
+        KwpGoods kwpGoods = null;
+        if(Objects.nonNull(goods)){
+            kwpGoods = goodsInfoService.getGoodsById(goods.getGoodsId());
+        }
         //查询运单装货地址卸货地址
         List<KwtWaybillOrderAddress> kwtWaybillOrderAddresses = waybillOrderAddressRepository.queryByWOrderId(billOrder.getId());
         Map<String, KwtWaybillOrderAddress> keyAndAddressMap = Maps.newHashMap() ;
         if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwtWaybillOrderAddresses)){
             keyAndAddressMap = kwtWaybillOrderAddresses.stream()
-                    .collect(Collectors.toMap(x -> x.getId() + "-" + x.getAddressType(),
+                    .collect(Collectors.toMap(x -> x.getWOrderId() + "-" + x.getAddressType(),
                     Function.identity(), (x, y) -> x));
         }
 
-        return getWaybillOrderDetailResp(billOrder, logOrder, truck, fleet, goods, keyAndAddressMap);
+        return getWaybillOrderDetailResp( subtask,billOrder, logOrder, truck, fleet, goods,
+                keyAndAddressMap,kwpGoods);
     }
 
     @NotNull
-    private static WaybillOrderDetailResp getWaybillOrderDetailResp(KwtWaybillOrder billOrder, KwtLogisticsOrder logOrder, RTruckVo truck, RFleetVo fleet, KwtLogisticsOrderGoods goods, Map<String, KwtWaybillOrderAddress> keyAndAddressMap) {
+    private static WaybillOrderDetailResp getWaybillOrderDetailResp( KwtWaybillOrderSubtask subtask,
+                                                                     KwtWaybillOrder billOrder,
+                                                                     KwtLogisticsOrder logOrder,
+                                                                     RTruckVo truck, RFleetVo fleet,
+                                                                     KwtLogisticsOrderGoods goods,
+                                                                     Map<String, KwtWaybillOrderAddress> keyAndAddressMap,
+                                                                     KwpGoods kwpGoods ) {
         WaybillOrderDetailResp waybillOrderDetailResp = new WaybillOrderDetailResp();
         waybillOrderDetailResp.setWaybillOrderId(String.valueOf(billOrder.getId()));
         waybillOrderDetailResp.setLogisticOrderNo(logOrder.getLOrderNo());
@@ -3209,19 +3332,21 @@ public class KwtWaybillOrderV1Service {
         waybillOrderDetailResp.setDriverName(billOrder.getDriverName());
         waybillOrderDetailResp.setDriverPhone(billOrder.getDriverPhone());
         waybillOrderDetailResp.setDriverIdCard(billOrder.getDriverIdcard());
-        waybillOrderDetailResp.setGoodsName(Optional.ofNullable(goods).map(KwtLogisticsOrderGoods::getGoodsName).orElse( ""));
+        if (Objects.nonNull(kwpGoods)){
+            waybillOrderDetailResp.setGoodsName(kwpGoods.getName()+ "/" +goods.getGoodsType()+"/"+ kwpGoods.getSpec());
+        }
         KwtWaybillOrderAddress loadAdd = keyAndAddressMap.getOrDefault(billOrder.getId() + "-" + AddressTypeEnum.SHIPMENT.getCode(), new KwtWaybillOrderAddress());
         waybillOrderDetailResp.setLoadAddress(loadAdd.getDetailAddress());
         KwtWaybillOrderAddress unLoadAdd =
                 keyAndAddressMap.getOrDefault(billOrder.getId() + "-" + AddressTypeEnum.TAKE.getCode(),
                         new KwtWaybillOrderAddress());
         waybillOrderDetailResp.setUnloadAddress(unLoadAdd.getDetailAddress());
-        waybillOrderDetailResp.setTaskVolume(Objects.nonNull(billOrder.getEntrustAmount()) ?
-                billOrder.getEntrustAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
-        waybillOrderDetailResp.setLoadAmount(Objects.nonNull(billOrder.getLoadAmount()) ?
-                billOrder.getLoadAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
-        waybillOrderDetailResp.setUnloadAmount(Objects.nonNull(billOrder.getUnloadAmount()) ?
-                billOrder.getUnloadAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
+        waybillOrderDetailResp.setTaskVolume(Objects.nonNull(subtask.getEntrustAmount()) ?
+                subtask.getEntrustAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
+        waybillOrderDetailResp.setLoadAmount(Objects.nonNull(subtask.getLoadAmount()) ?
+                subtask.getLoadAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
+        waybillOrderDetailResp.setUnloadAmount(Objects.nonNull(subtask.getUnloadAmount()) ?
+                subtask.getUnloadAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
         return waybillOrderDetailResp;
     }
 
@@ -3243,17 +3368,60 @@ public class KwtWaybillOrderV1Service {
         updateOrder.setId(billOrder.getId());
         KwtWaybillOrderSubtask updateSubtask = new KwtWaybillOrderSubtask();
         updateSubtask.setId(subtask.getId());
-        //运单当前状态是已卸货,传入的订单是已完成  驳回的订单可以通过完善单证变成已完成
-        List<Integer> statusList = Arrays.asList(CarWaybillV1Enum.COMPLETION_LOADING.getCode(),
-                CarWaybillV1Enum.COMPLETION_UNLOADING.getCode());
-        if (statusList.contains(billOrder.getStatus()) && Objects.equals(status, CarWaybillV1Enum.WAIT_UNLOADING.getCode())){
+        KwtWaybillOrderTicket kwtWaybillOrderTicket = new KwtWaybillOrderTicket();
+        //单证审核 运单当前状态是已卸货,传入的订单是已完成
+        if (Objects.equals(status, CarWaybillV1Enum.WAIT_UNLOADING.getCode()) && Objects.equals(billOrder.getStatus(), CarWaybillV1Enum.COMPLETION_LOADING.getCode())){
+            updateOrder.setStatus( status);
+            updateSubtask.setStatus(status);
+            boolean b = kwtWaybillOrderRepository.updateById(updateOrder) && kwtWaybillOrderSubtaskRepository.updateById(updateSubtask);
+            //修改物流订单数据
+            KwtLogisticsOrder kwtLogistics= kwtLogisticsOrderRepository.queryByLogisticsOrderId(subtask.getLOrderId());
+            //获取更新 订单状态
+            KwtLogisticsOrder kwtLogisticsOrder = getKwtLogisticsOrder(kwtLogistics, subtask);
+            boolean b1 = kwtLogisticsOrderRepository.updateById(kwtLogisticsOrder);
+
+            if (!b || !b1){
+                throw new BusinessException("审核运单失败");
+            }
+            return Boolean.TRUE;
+        }
+        // 驳回的订单可以通过完善单证变成已完成
+        if (Objects.equals(billOrder.getStatus(), CarWaybillV1Enum.COMPLETION_UNLOADING.getCode()) && Objects.equals(status,
+                CarWaybillV1Enum.WAIT_UNLOADING.getCode())){
             updateOrder.setStatus(status);
             updateSubtask.setStatus(status);
+            updateSubtask.setUnloadAmount(Objects.nonNull(req.getUnloadAmount()) ? new BigDecimal(req.getUnloadAmount()) : null);
             boolean b = kwtWaybillOrderRepository.updateById(updateOrder) && kwtWaybillOrderSubtaskRepository.updateById(updateSubtask);
-            if (!b){
-               throw new BusinessException("运单状态更新失败");
+            kwtWaybillOrderTicket.setWOrderId(waybillId);
+            kwtWaybillOrderTicket.setUrls(req.getAddressUrl());
+            kwtWaybillOrderTicket.setUploadingTime(new Date());
+            Boolean b1 = kwtWaybillOrderTicketRepository.updateByBillOrderIdAndType(kwtWaybillOrderTicket, 2);
+            if (!b || !b1){
+               throw new BusinessException("完整单证失败");
             }
+            return Boolean.TRUE;
         }
-        return Boolean.TRUE;
+        return Boolean.FALSE;
+    }
+
+    @NotNull
+    private static KwtLogisticsOrder getKwtLogisticsOrder(KwtLogisticsOrder kwtLogistics, KwtWaybillOrderSubtask subtask) {
+        if (Objects.isNull(kwtLogistics)){
+            throw new BusinessException("物流订单信息不存在");
+        }
+        BigDecimal entrustAmount  = Objects.isNull(kwtLogistics.getEntrustAmount())  ? BigDecimal.ZERO: kwtLogistics.getEntrustAmount();
+        BigDecimal subEntrustAmount = Objects.isNull(subtask.getEntrustAmount()) ? BigDecimal.ZERO: subtask.getEntrustAmount();
+        BigDecimal loadAmount  = Objects.isNull(kwtLogistics.getLoadAmount())  ? BigDecimal.ZERO: kwtLogistics.getLoadAmount();
+        BigDecimal subLoadAmount = Objects.isNull(subtask.getLoadAmount()) ? BigDecimal.ZERO: subtask.getLoadAmount();
+        BigDecimal unloadAmount  = Objects.isNull(kwtLogistics.getUnloadAmount())  ? BigDecimal.ZERO: kwtLogistics.getUnloadAmount();
+        BigDecimal subUnloadAmount = Objects.isNull(subtask.getUnloadAmount()) ? BigDecimal.ZERO: subtask.getUnloadAmount();
+
+
+        KwtLogisticsOrder kwtLogisticsOrder = new KwtLogisticsOrder();
+        kwtLogisticsOrder.setId(kwtLogistics.getId());
+        kwtLogisticsOrder.setEntrustAmount(entrustAmount.add(subEntrustAmount));
+        kwtLogisticsOrder.setLoadAmount(loadAmount.add(subLoadAmount));
+        kwtLogisticsOrder.setUnloadAmount(unloadAmount.add(subUnloadAmount));
+        return kwtLogisticsOrder;
     }
 }

+ 5 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java

@@ -12,6 +12,7 @@ import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.utils.DateUtils;
 import com.sckw.core.utils.HttpUtil;
 import com.sckw.core.web.constant.CommonConstants;
+import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.fleet.api.model.vo.RDriverVo;
@@ -336,7 +337,8 @@ public class kwfTruckTraceService {
             instance.setLocationTime(collectZjxlResponse.getResult().getFirstVcl().getOfflineTime());
         }
         //查询关联订单号
-        KwtWaybillOrder oneByTruckNo = kwtWaybillOrderRepository.findOneByTruckNo(truckNo);
+
+        KwtWaybillOrder oneByTruckNo = kwtWaybillOrderRepository.findOneByTruckNo(truckNo,LoginUserHolder.getEntId());
 
         KwtWaybillOrderSubtask waybillOrderSubtask = kwtWaybillOrderSubtaskRepository.findOneByWOrderNo(oneByTruckNo.getWOrderNo());
         instance.setLogicOrderNo(Objects.nonNull(waybillOrderSubtask) && Objects.nonNull(waybillOrderSubtask.getLOrderId())
@@ -410,13 +412,13 @@ public class kwfTruckTraceService {
      */
     public CurrentTaskTraceReqVo queryCurrentTaskTrace(CurrentTaskTraceReq req) {
         log.info("查询当前任务轨迹参数:{}", req);
-       
 
+        Long entId = LoginUserHolder.getEntId();
         String wOrderNo = StringUtils.EMPTY ;
         if (StringUtils.isNotBlank(req.getOrderNo())){
             wOrderNo  = req.getOrderNo();
         }else {
-            KwtWaybillOrder waybillOrder = kwtWaybillOrderRepository.findOneByTruckNo(req.getTruckNo());
+            KwtWaybillOrder waybillOrder = kwtWaybillOrderRepository.findOneByTruckNo(req.getTruckNo(),entId);
             wOrderNo = Optional.ofNullable(waybillOrder).map(KwtWaybillOrder::getWOrderNo).orElse("");
         }
         //查询数据中台获取轨迹

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

@@ -10,3 +10,23 @@ spring:
   main:
     allow-bean-definition-overriding: true
     allow-circular-references: true
+mybatis-plus:
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+
+logging:
+  level:
+    root: info
+    com.sckw.payment: debug
+
+# SpringDoc OpenAPI 配置
+springdoc:
+  swagger-ui:
+    path: /swagger-ui.html
+    tags-sorter: alpha
+    operations-sorter: alpha
+  api-docs:
+    path: /v3/api-docs
+  show-actuator: true
+  cache:
+    disabled: true

+ 26 - 1
sql/2025/11/30/2025_11_30_cxf_alert.sql

@@ -4,6 +4,8 @@ ALTER TABLE kwc_contract_trade ADD unload_way tinyint      NOT NULL default 0  c
 ALTER TABLE kwc_contract_trade ADD salesman_id tinyint   NOT NULL default 0  comment '销售人员id(对应供应方的员工信息)';
 ALTER TABLE kwc_contract_trade ADD salesman_phone varchar(11)   NOT NULL default ''  comment '销售人员电话';
 
+ALTER TABLE kwc_contract_trade ADD sign_time  datetime   NULL  comment '签约时间';
+
 ALTER TABLE kwp_goods ADD price_unit varchar(10)   NOT NULL default ''  comment '价格单位(元,万元)';
 
 
@@ -31,4 +33,27 @@ ALTER TABLE kwo_trade_order ADD consignment_way TINYINT NOT NULL default '0'  co
 ALTER TABLE kwo_trade_order_goods ADD goods_name varchar(255)   NOT NULL default ''  comment '商品名称';
 
 
-ALTER TABLE kwf_truck ADD selected_capacity tinyint NOT NULL default '0'  comment '已选运力(0-未选运力,1-已选运力)';
+
+ALTER TABLE kwt_waybill_order_ticket ADD uploading_time  datetime NULL comment '上传凭证时间';
+
+
+
+
+# create table kwt_node_trajectory
+# (
+#     id           bigint        not null comment '主键'
+#         primary key,
+#     w_order_id   bigint        not null comment '车辆运单id',
+#     w_subtask_id bigint        null comment '运单关联子单ID',
+#     w_address_id bigint        null comment '车辆运单地址ID',
+#     order_status tinyint       null comment '运单状态',
+#     truck_id     bigint        null comment '车辆id',
+#     truck_no     varchar(11)        null comment '车牌号',
+#     driver_id    bigint        null comment '司机id',
+#     driver_name    bigint        null comment '司机名称',
+#     weighbridge_id  bigint      null comment '地磅id',
+#     weighbridge_name  bigint      null comment '地磅名称',
+#     create_by    bigint        not null default 0 comment '创建人',
+#     create_time  datetime      not null default CURRENT_TIMESTAMP comment '创建时间'
+# )
+#     comment '车辆运单-节点轨迹';