Эх сурвалжийг харах

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

xucaiqin 2 жил өмнө
parent
commit
03b4c8aca1
36 өөрчлөгдсөн 657 нэмэгдсэн , 255 устгасан
  1. 1 0
      sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/utils/ExcelUtil.java
  2. 1 1
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java
  3. 2 7
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/CompleteLogisticsOrderParam.java
  4. 5 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/GoodsInfoDetailRes.java
  5. 5 0
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsDetail.java
  6. 4 0
      sckw-modules/sckw-contract/pom.xml
  7. 5 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/QueryListReqVo.java
  8. 5 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/QueryListResVo.java
  9. 5 2
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsService.java
  10. 17 2
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeService.java
  11. 5 0
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/model/vo/res/AddressQueryResVo.java
  12. 0 5
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/model/vo/res/FindEntCooperateResVo.java
  13. 1 1
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/CommonBusinessService.java
  14. 1 3
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmAddressService.java
  15. 2 1
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmCooperateApplyService.java
  16. 4 15
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmCooperateManageService.java
  17. 3 3
      sckw-modules/sckw-manage/src/main/resources/mapper/KwmCooperateMapper.xml
  18. 10 17
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java
  19. 0 47
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/GoodsInfo.java
  20. 67 2
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/GoodsInfoDetailRes.java
  21. 13 25
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  22. 1 1
      sckw-modules/sckw-product/src/main/java/com/sckw/product/controller/KwpGoodsController.java
  23. 2 0
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwAcceptCarriageService.java
  24. 8 3
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderService.java
  25. 10 0
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/vo/AcceptCarriageOrderVo.java
  26. 4 5
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java
  27. 1 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsUserService.java
  28. 6 5
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/LogisticsConsignmentController.java
  29. 7 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java
  30. 5 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrder.java
  31. 3 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/AddOrderDTO.java
  32. 8 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderDetailVO.java
  33. 20 7
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java
  34. 411 93
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java
  35. 8 5
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java
  36. 7 1
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml

+ 1 - 0
sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/utils/ExcelUtil.java

@@ -104,6 +104,7 @@ public class ExcelUtil {
         fileName = URLEncoder.encode(fileName + "-" + DateUtil.dateToStr(LocalDate.now()), "UTF-8").replaceAll("\\+", "%20");
         response.setContentType("application/vnd.ms-excel");
         response.setCharacterEncoding("UTF-8");
+        response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
         response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
     }
 

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

@@ -29,7 +29,7 @@ public interface TradeOrderInfoService {
     HttpResult updateOrderStatus(UpdateOrderStatusParam param);
 
     /**
-     * @desc: 废弃,请用orderAmountUpdate
+     * @desc: 废弃
      * @desc: 更新订单委托量、已履约量
      * @author: yzc
      * @date: 2023-07-18 18:34

+ 2 - 7
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/CompleteLogisticsOrderParam.java

@@ -28,17 +28,12 @@ public class CompleteLogisticsOrderParam implements Serializable {
     private Long tOrderId;
 
     /**
-     * 任务量  传负数
-     */
-    private BigDecimal entrustAmount;
-
-    /**
-     * 实装量 传正数
+     * 实装总量 传正数
      */
     private BigDecimal actualLoadAmount;
 
     /**
-     * 实卸量  传正数
+     * 实卸总量  传正数
      */
     private BigDecimal actualUnloadAmount;
 

+ 5 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/GoodsInfoDetailRes.java

@@ -52,6 +52,11 @@ public class GoodsInfoDetailRes implements Serializable {
      */
     private String goodsName;
 
+    /**
+     * 商品库存
+     */
+    private BigDecimal goodsAmount;
+
     /**
      * 商品类型
      */

+ 5 - 0
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsDetail.java

@@ -167,6 +167,11 @@ public class GoodsDetail implements Serializable {
      */
     private String statusLabel;
 
+    /**
+     * 是否删除
+     */
+    private Integer delFlag;
+
     /**
      * 商品详情图片
      */

+ 4 - 0
sckw-modules/sckw-contract/pom.xml

@@ -68,6 +68,10 @@
             <version>1.0.0</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-order-api</artifactId>
+        </dependency>
 
     </dependencies>
     <build>

+ 5 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/QueryListReqVo.java

@@ -68,4 +68,9 @@ public class QueryListReqVo extends PageRequest implements Serializable {
      */
     private Long targetEntId;
 
+    /**
+     * 企业id
+     */
+    private Long entId;
+
 }

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

@@ -116,6 +116,11 @@ public class QueryListResVo implements Serializable {
      */
     private String signingWayName;
 
+    /**
+     * 签约方式
+     */
+    private String signingWay;
+
     /**
      * 签约时间
      */

+ 5 - 2
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsService.java

@@ -450,7 +450,9 @@ public class KwcContractLogisticsService {
         PageHelper.startPage(reqVo.getPage(), reqVo.getPageSize());
         QueryListReqDto queryListReqDto = new QueryListReqDto();
         BeanUtils.copyProperties(reqVo, queryListReqDto);
-        queryListReqDto.setEntId(LoginUserHolder.getEntId());
+        if (Objects.isNull(reqVo.getEntId())) {
+            queryListReqDto.setEntId(LoginUserHolder.getEntId());
+        }
         List<QueryListResDto> queryListResDtos = kwcContractLogisticsMapper.queryList(queryListReqDto);
         if (CollectionUtils.isEmpty(queryListResDtos)) {
             return PageHelperUtil.getPageResult(new PageInfo<>());
@@ -491,7 +493,8 @@ public class KwcContractLogisticsService {
             }
             queryListResVo.setChargingName(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(), String.valueOf(queryListResDto.getCharging())));
             queryListResVo.setStatusName(Objects.requireNonNull(ContractStatusEnum.getName(queryListResDto.getStatus())).getName());
-            queryListResVo.setSigningWayName(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(), String.valueOf(queryListResDto.getSigningWay())));
+            queryListResVo.setSigningWayName(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(), queryListResDto.getSigningWay()));
+            queryListResVo.setSigningWay(queryListResDto.getSigningWay());
             queryListResVo.setPerformedAmount(queryListResDto.getPerformedAmount());
             queryListResVo.setAmount(queryListResDto.getAmount());
             list.add(queryListResVo);

+ 17 - 2
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeService.java

@@ -24,6 +24,8 @@ import com.sckw.core.utils.*;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.excel.utils.EasyExcelUtil;
+import com.sckw.order.api.dubbo.TradeOrderInfoService;
+import com.sckw.order.api.model.ContractSignCompletedParam;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.product.api.model.KwpGoods;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
@@ -69,6 +71,9 @@ public class KwcContractTradeService {
     @DubboReference(version = "2.0.0", group = "design", check = false)
     private GoodsInfoService goodsInfoService;
 
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    private TradeOrderInfoService tradeOrderInfoService;
+
     /**
      * @return PageResult
      * @desc: 分页查询
@@ -80,7 +85,9 @@ public class KwcContractTradeService {
         PageHelper.startPage(reqVo.getPage(), reqVo.getPageSize());
         QueryListReqDto queryListReqDto = new QueryListReqDto();
         BeanUtils.copyProperties(reqVo, queryListReqDto);
-        queryListReqDto.setEntId(LoginUserHolder.getEntId());
+        if (Objects.isNull(reqVo.getEntId())) {
+            queryListReqDto.setEntId(LoginUserHolder.getEntId());
+        }
         List<QueryListResDto> queryListResDtos = kwcContractTradeMapper.queryList(queryListReqDto);
         if (CollectionUtils.isEmpty(queryListResDtos)) {
             return PageHelperUtil.getPageResult(new PageInfo<>());
@@ -122,7 +129,8 @@ public class KwcContractTradeService {
             }
             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(), String.valueOf(queryListResDto.getSigningWay())));
+            queryListResVo.setSigningWayName(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(), queryListResDto.getSigningWay()));
+            queryListResVo.setSigningWay(queryListResDto.getSigningWay());
             queryListResVo.setAmount(queryListResDto.getAmount());
             queryListResVo.setPerformedAmount(new BigDecimal("0"));
             list.add(queryListResVo);
@@ -456,6 +464,13 @@ public class KwcContractTradeService {
         if (kwcContractTradeMapper.updateById(kwcContractTrade) <= 0) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
         }
+
+        //完结相关订单
+        ContractSignCompletedParam contractSignCompletedParam = new ContractSignCompletedParam();
+        contractSignCompletedParam.setContractId(kwcContractTrade.getContractPid());
+        contractSignCompletedParam.setUpdateBy(LoginUserHolder.getUserId());
+        contractSignCompletedParam.setUpdateByName(LoginUserHolder.getUserName());
+        tradeOrderInfoService.contractSignCompleted(contractSignCompletedParam);
     }
 
 

+ 5 - 0
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/model/vo/res/AddressQueryResVo.java

@@ -99,6 +99,11 @@ public class AddressQueryResVo implements Serializable {
      */
     private String type;
 
+    /**
+     * 地址类型
+     */
+    private Integer typeCode;
+
     /**
      * 修改时间
      */

+ 0 - 5
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/model/vo/res/FindEntCooperateResVo.java

@@ -42,9 +42,4 @@ public class FindEntCooperateResVo implements Serializable {
      */
     private String phone;
 
-    /**
-     * 对方企业
-     */
-    List<FindEntCooperateResVo> target;
-
 }

+ 1 - 1
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/CommonBusinessService.java

@@ -181,7 +181,7 @@ public class CommonBusinessService {
             String targetEntName = entMap.get(targetEntId);
             String keywords = reqDto.getKeywords();
             if (StringUtils.isNotBlank(keywords)) {
-                if (!targetEntName.contains(keywords) && !matchContacts(keywords, cooperateManageQueryResDto)) {
+                if (StringUtils.isBlank(targetEntName) || (!targetEntName.contains(keywords) && !matchContacts(keywords, cooperateManageQueryResDto))) {
                     continue;
                 }
             }

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

@@ -124,6 +124,7 @@ public class KwmAddressService {
         kwmAddresses.forEach(item -> {
             AddressQueryResVo addressQueryResVo = new AddressQueryResVo();
             BeanUtils.copyProperties(item, addressQueryResVo);
+            addressQueryResVo.setTypeCode(item.getType());
             UserCacheResDto userCacheResDto = userCacheResDtoMap.get(item.getCreateBy());
             SysDictResDto sysDictResDto = stringSysDictResDtoMap.get(DictTypeEnum.ADDRESS_TYPE.getType() + Global.POUND + item.getType());
             if (Objects.nonNull(sysDictResDto)) {
@@ -254,9 +255,6 @@ public class KwmAddressService {
      */
     @Transactional(rollbackFor = {})
     public void add(AddressAddReqVo reqVo) {
-        Integer cityCode = reqVo.getCityCode();
-
-
         LambdaQueryWrapper<KwmAddress> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(KwmAddress::getName, reqVo.getName()).
                 eq(KwmAddress::getDelFlag, Global.NO).

+ 2 - 1
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmCooperateApplyService.java

@@ -357,6 +357,7 @@ public class KwmCooperateApplyService {
                     in(KwmCooperateType::getStatus, statusList).
                     eq(KwmCooperateType::getDelFlag, Global.NO));
             List<KwmCooperateType> updateKwmCooperateTypes = kwmCooperateTypes.stream().filter(x -> x.getStatus().equals(CooperateStatusEnum.PROCESS.getCode())).toList();
+            List<Integer> currentStatusList = updateKwmCooperateTypes.stream().map(KwmCooperateType::getStatus).toList();
             if (CollectionUtils.isEmpty(updateKwmCooperateTypes)) {
                 throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.COOPERATE_CANCEL_EXISTS);
             }
@@ -374,7 +375,7 @@ public class KwmCooperateApplyService {
             item.setUpdateBy(userId);
             item.setUpdateTime(date);
             item.setApprovalRemark(remark);
-            if (kwmCooperateTypes.stream().noneMatch(x -> x.getStatus().equals(CooperateStatusEnum.OK.getCode()))) {
+            if (!currentStatusList.contains(CooperateStatusEnum.OK.getCode())) {
                 item.setStatus(type);
             }
             if (kwmCooperateMapper.updateById(item) <= 0) {

+ 4 - 15
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmCooperateManageService.java

@@ -200,7 +200,7 @@ public class KwmCooperateManageService {
      * @date: 2023/7/11
      */
     private boolean checkUserPermission(int status) {
-        return status != CooperateStatusEnum.OK.getCode() && LoginUserHolder.getSystemType() != SystemTypeEnum.MANAGE.getCode();
+        return status != CooperateStatusEnum.OK.getCode() && !LoginUserHolder.getSystemType().equals(SystemTypeEnum.MANAGE.getCode());
     }
 
     /**
@@ -254,8 +254,7 @@ public class KwmCooperateManageService {
     public List<FindListGroupResVo> findListGroup(CooperateManageQueryReqVo reqVo) {
         //初始化分组返参
         List<FindListGroupResVo> result = commonBusinessService.init();
-
-        List<CooperateManageQueryResVo> list = commonBusinessService.findList(buildQueryParam(reqVo));
+        List<CooperateManageQueryResVo> list = findList(buildQueryParam(reqVo));
         if (CollectionUtils.isEmpty(list)) {
             return result;
         }
@@ -273,7 +272,7 @@ public class KwmCooperateManageService {
      * @author: czh
      * @date: 2023/7/22
      */
-    public FindEntCooperateResVo findEntCooperate(FindEntCooperateReqVo reqVo) {
+    public List<FindEntCooperateResVo> findEntCooperate(FindEntCooperateReqVo reqVo) {
         Long id = reqVo.getId();
         Integer cooperateType = reqVo.getCooperateType();
         LambdaQueryWrapper<KwmCooperate> wrapper = new LambdaQueryWrapper<>();
@@ -345,17 +344,7 @@ public class KwmCooperateManageService {
 //                targetEntList.add(findEntCooperateResVo);
 //            });
 //        });
-
-        FindEntCooperateResVo findEntCooperateResVo = new FindEntCooperateResVo();
-        EntCacheResDto entCacheResDto = remoteSystemService.queryEntCacheById(id);
-        KwmCooperate kwmCooperate = kwmCooperates.get(0);
-        findEntCooperateResVo.setEntId(id);
-        findEntCooperateResVo.setEntName(entCacheResDto.getFirmName());
-        findEntCooperateResVo.setContactsId(kwmCooperate.getInviterEntId().equals(id) ? kwmCooperate.getInviterContactsId() : kwmCooperate.getInviteeContactsId());
-        findEntCooperateResVo.setContacts(kwmCooperate.getInviterEntId().equals(id) ? kwmCooperate.getInviterContacts() : kwmCooperate.getInviteeContacts());
-        findEntCooperateResVo.setPhone(kwmCooperate.getInviterEntId().equals(id) ? kwmCooperate.getInviterPhone() : kwmCooperate.getInviteePhone());
-        findEntCooperateResVo.setTarget(targetEntList);
-        return findEntCooperateResVo;
+        return targetEntList;
     }
 
 

+ 3 - 3
sckw-modules/sckw-manage/src/main/resources/mapper/KwmCooperateMapper.xml

@@ -70,7 +70,7 @@
                and exists (select 1
                              from kwm_cooperate_type c
                             where c.cooperate_id = a.id
-                               and c.statu = 1
+                               and c.status = 1
                                and c.del_flag = 0
                               and c.type in
                             <foreach collection="reqDto.cooperateTypes" item="item" open="(" close=")" separator=",">
@@ -151,7 +151,7 @@
             and exists (select 1
                             from kwm_cooperate_type c
                             where c.cooperate_id = a.id
-                              and c.statu = 1
+                              and c.status = 1
                                 and c.del_flag = 0
                             and c.type in
                         <foreach collection="reqDto.cooperateTypes" item="item" open="(" close=")" separator=",">
@@ -160,7 +160,7 @@
                         )
         </if>
         <if test="reqDto.status != null and reqDto.status.size() > 0">
-            and b.status in
+            and a.status in
             <foreach collection="reqDto.status" item="item" open="(" close=")" separator=",">
                 #{item}
             </foreach>

+ 10 - 17
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java

@@ -148,20 +148,19 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
     public HttpResult completeLogisticsOrder(CompleteLogisticsOrderParam param) {
         log.info("物流订单完结入参:{}", JSON.toJSONString(param));
         Long id = param.getTOrderId();
-        BigDecimal entrustAmount = param.getEntrustAmount();
         BigDecimal actualLoadAmount = param.getActualLoadAmount();
         BigDecimal actualUnloadAmount = param.getActualUnloadAmount();
         Long updateBy = param.getUpdateBy();
         String updateByName = param.getUpdateByName();
-        if (Objects.isNull(updateBy) || StringUtils.isBlank(updateByName)) {
-            return HttpResult.error("操作人信息不能为空!");
-        }
-        if (Objects.isNull(entrustAmount) || Objects.isNull(actualLoadAmount) || Objects.isNull(actualUnloadAmount)) {
-            return HttpResult.error("任务量或装卸量不能为空!");
+        if (Objects.isNull(actualLoadAmount) || Objects.isNull(actualUnloadAmount)) {
+            return HttpResult.error("装卸总量不能为空!");
         }
         if (Objects.isNull(param.getIsAllComplete())) {
             return HttpResult.error("物流订单是否已全部完结不能为空!");
         }
+        if (Objects.isNull(updateBy) || StringUtils.isBlank(updateByName)) {
+            return HttpResult.error("操作人信息不能为空!");
+        }
         String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, id);
         if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
             return HttpResult.error("业务繁忙,请稍后再试!");
@@ -174,15 +173,9 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
             if (!Objects.equals(String.valueOf(order.getStatus()), DictEnum.TORDER_STATUS_4.getValue())) {
                 return HttpResult.error("执行中的订单才可物流托运!");
             }
-            BigDecimal totalEntrustAmount = Objects.isNull(order.getEntrustAmount()) ? entrustAmount : order.getEntrustAmount().add(entrustAmount);
-            BigDecimal totalActualAmount;
-            if (Objects.equals(order.getDeliveryType(), DictEnum.DELIVERY_TYPE_0.getValue())) {
-                totalActualAmount = Objects.isNull(order.getActualAmount()) ? actualLoadAmount : order.getActualAmount().add(actualLoadAmount);
-            } else {
-                totalActualAmount = Objects.isNull(order.getActualAmount()) ? actualUnloadAmount : order.getActualAmount().add(actualUnloadAmount);
-            }
-            order.setEntrustAmount(totalEntrustAmount).setActualAmount(totalActualAmount).setUpdateBy(param.getUpdateBy());
-            if (param.getIsAllComplete() && totalActualAmount.compareTo(order.getAmount()) >= 0) {
+            BigDecimal actualAmount = Objects.equals(order.getDeliveryType(), DictEnum.DELIVERY_TYPE_0.getValue()) ? actualLoadAmount : actualUnloadAmount;
+            order.setActualAmount(actualAmount).setUpdateBy(param.getUpdateBy());
+            if (param.getIsAllComplete() && actualAmount.compareTo(order.getAmount()) >= 0) {
                 order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue()));
                 KwoTradeOrderTrack track = new KwoTradeOrderTrack();
                 track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setStatus(order.getStatus())
@@ -192,8 +185,8 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
             kwoTradeOrderService.updateById(order);
             //更新mongodb
             SckwTradeOrder updateParam = new SckwTradeOrder();
-            updateParam.setTOrderId(order.getId()).setEntrustAmount(totalEntrustAmount).setActualAmount(totalActualAmount)
-                    .setStatus(order.getStatus()).setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
+            updateParam.setTOrderId(order.getId()).setActualAmount(actualAmount).setStatus(order.getStatus())
+                    .setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
             saveMongoDb(updateParam);
         } finally {
             RedissonUtils.unlock(lockKey);

+ 0 - 47
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/GoodsInfo.java

@@ -26,36 +26,6 @@ public class GoodsInfo {
     @NotNull(message = "商品id不能为空")
     private Long goodsId;
 
-    /**
-     * 商品编号
-     */
-    @NotBlank(message = "商品编号不能为空")
-    private String goodsCode;
-
-    /**
-     * 商品名称
-     */
-    @NotBlank(message = "商品名称不能为空")
-    private String goodsName;
-
-    /**
-     * 商品类型
-     */
-    @NotBlank(message = "商品类型不能为空")
-    private String goodsType;
-
-    /**
-     * 商品发票税率(%)
-     */
-    @NotBlank(message = "商品发票税率不能为空")
-    private String goodsTaxRate;
-
-    /**
-     * 商品尺寸大小
-     */
-    @NotBlank(message = "商品尺寸大小不能为空")
-    private String goodsSpec;
-
     /**
      * 单位(吨、方、箱、件)
      */
@@ -73,21 +43,4 @@ public class GoodsInfo {
     @DecimalMin(value = "0.00",message = "订单成交单价最小为零")
     private BigDecimal unitPrice;
 
-    /**
-     * 商品skuId
-     */
-    private Long skuId;
-
-    /**
-     * 收款单位id
-     */
-    @NotNull(message = "收款单位id不能为空")
-    private Long collectionUnitId;
-
-    /**
-     * 收款单位名称
-     */
-    @NotBlank(message = "收款单位名称不能为空")
-    private String collectionUnit;
-
 }

+ 67 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/GoodsInfoDetailRes.java

@@ -1,6 +1,5 @@
 package com.sckw.order.model.vo.res;
 
-import com.sckw.order.model.vo.req.GoodsInfo;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -8,6 +7,7 @@ import lombok.experimental.Accessors;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * @desc: 商品信息详情响应
@@ -18,10 +18,70 @@ import java.io.Serializable;
 @Setter
 @ToString
 @Accessors(chain = true)
-public class GoodsInfoDetailRes extends GoodsInfo implements Serializable {
+public class GoodsInfoDetailRes implements Serializable {
 
     @Serial
     private static final long serialVersionUID = 1427251412395875742L;
+
+    /**
+     * 商品id
+     */
+    private Long goodsId;
+
+    /**
+     * 商品编号
+     */
+    private String goodsCode;
+
+    /**
+     * 商品名称
+     */
+    private String goodsName;
+
+    /**
+     * 商品类型
+     */
+    private String goodsType;
+
+    /**
+     * 商品发票税率(%)
+     */
+    private String goodsTaxRate;
+
+    /**
+     * 商品尺寸大小
+     */
+    private String goodsSpec;
+
+    /**
+     * 单位(吨、方、箱、件)
+     */
+    private String unit;
+    /**
+     * 价格段id
+     */
+    private Long priceRangeId;
+
+    /**
+     * 订单成交单价
+     */
+    private BigDecimal unitPrice;
+
+    /**
+     * 商品skuId
+     */
+    private Long skuId;
+
+    /**
+     * 收款单位id
+     */
+    private Long collectionUnitId;
+
+    /**
+     * 收款单位名称
+     */
+    private String collectionUnit;
+
     /**
      * 商品类型label
      */
@@ -37,4 +97,9 @@ public class GoodsInfoDetailRes extends GoodsInfo implements Serializable {
      */
     private String goodsTaxRateLabel;
 
+    /**
+     * 商品库存
+     */
+    private BigDecimal goodsAmount;
+
 }

+ 13 - 25
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -27,6 +27,7 @@ import com.sckw.payment.api.model.constant.ChannelEnum;
 import com.sckw.payment.api.model.dto.WalletDto;
 import com.sckw.payment.api.model.dto.common.R;
 import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.product.api.model.GoodsDetail;
 import com.sckw.product.api.model.KwpGoods;
 import com.sckw.redis.constant.RedisConstant;
 import com.sckw.redis.utils.RedissonUtils;
@@ -118,8 +119,16 @@ public class KwoTradeOrderService {
         GoodsInfo goodsInfo = param.getGoodsInfo();
         KwoTradeOrderGoods goods = BeanUtils.copyProperties(goodsInfo, KwoTradeOrderGoods.class);
         if (Objects.nonNull(goods)) {
-            goods.setTOrderId(id).setTOrderNo(tOrderNo);
+            GoodsDetail goodsDetail = goodsInfoService.getDetailById(goods.getGoodsId());
+            if (Objects.isNull(goodsDetail) || !Objects.equals(goodsDetail.getStatus(), 1)
+                    || Objects.equals(goodsDetail.getDelFlag(), Global.YES)) {
+                throw new BusinessException("商品不存在或已下架!");
+            }
+            goods.setTOrderId(id).setTOrderNo(tOrderNo).setGoodsType(goodsDetail.getGoodsType());
             kwoTradeOrderGoodsService.insert(goods);
+            order.setGoodsId(goodsDetail.getId()).setUnit(goodsDetail.getUnit()).setUnitPrice(goods.getUnitPrice())
+                    .setGoodsName(goodsDetail.getName()).setGoodsType(goodsDetail.getGoodsType()).setGoodsCode(goodsDetail.getCode())
+                    .setGoodsTaxRate(goodsDetail.getTaxRate()).setGoodsSpec(goodsDetail.getSpec());
             BeanUtils.copyProperties(goodsInfo, order);
         }
         //单位信息
@@ -384,12 +393,12 @@ public class KwoTradeOrderService {
                 EntCacheResDto entCache = remoteSystemService.queryEntCacheById(goods.getEntId());
                 GoodsInfoDetailRes goodsDetail = new GoodsInfoDetailRes();
                 goodsDetail.setGoodsTypeLabel(DictEnum.getLabel(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), goods.getGoodsType()))
-                        .setGoodsUnitLabel(DictEnum.getLabel(DictTypeEnum.UNIT_TYPE.getType(), goods.getUnit()))
+                        .setGoodsUnitLabel(DictEnum.getLabel(DictTypeEnum.UNIT_TYPE.getType(), goods.getUnit())).setGoodsAmount(goods.getAmount())
                         .setGoodsTaxRateLabel(DictEnum.getLabel(DictTypeEnum.TAX_RATE.getType(), goods.getTaxRate()))
                         .setGoodsId(goods.getId()).setGoodsCode(goods.getCode()).setGoodsName(goods.getName())
                         .setGoodsType(goods.getGoodsType()).setGoodsTaxRate(goods.getTaxRate()).setGoodsSpec(goods.getSpec())
                         .setUnit(goods.getUnit()).setPriceRangeId(orderGoods.getPriceRangeId()).setUnitPrice(orderGoods.getUnitPrice())
-                        .setSkuId(orderGoods.getSkuId()).setCollectionUnitId(goods.getEntId()).setCollectionUnitId(goods.getEntId())
+                        .setSkuId(orderGoods.getSkuId()).setCollectionUnitId(goods.getEntId())
                         .setCollectionUnit(Objects.isNull(entCache) ? null : entCache.getFirmName());
                 detail.setGoodsInfo(goodsDetail);
             }
@@ -539,36 +548,15 @@ public class KwoTradeOrderService {
         if (Objects.isNull(goodsInfo.getGoodsId())) {
             throw new BusinessException("商品id不能为空!");
         }
-        if (StringUtils.isBlank(goodsInfo.getGoodsCode())) {
-            throw new BusinessException("商品编号不能为空!");
-        }
-        if (StringUtils.isBlank(goodsInfo.getGoodsName())) {
-            throw new BusinessException("商品名称不能为空!");
-        }
-        if (StringUtils.isBlank(goodsInfo.getGoodsType())) {
-            throw new BusinessException("商品类型不能为空!");
-        }
-        if (StringUtils.isBlank(goodsInfo.getGoodsTaxRate())) {
-            throw new BusinessException("商品发票税率不能为空!");
-        }
-        if (StringUtils.isBlank(goodsInfo.getGoodsSpec())) {
-            throw new BusinessException("商品尺寸大小不能为空!");
-        }
         if (StringUtils.isBlank(goodsInfo.getUnit())) {
             throw new BusinessException("商品单位不能为空!");
         }
-        if (Objects.isNull(goodsInfo.getPriceRangeId())) {
+        if (Objects.isNull(goodsInfo.getPriceRangeId()) && Objects.equals(source, DictEnum.TORDER_SOURCE_1.getValue())) {
             throw new BusinessException("价格段id不能为空!");
         }
         if (Objects.isNull(goodsInfo.getUnitPrice()) || goodsInfo.getUnitPrice().compareTo(BigDecimal.ZERO) < 0) {
             throw new BusinessException("订单成交单价不能为空且不能为负数!");
         }
-        if (Objects.isNull(goodsInfo.getCollectionUnitId())) {
-            throw new BusinessException("收款单位id不能为空!");
-        }
-        if (StringUtils.isBlank(goodsInfo.getCollectionUnit())) {
-            throw new BusinessException("收款单位名称不能为空!");
-        }
 
         List<UnitInfo> unitInfos = param.getUnitInfo();
         if (CollectionUtils.isEmpty(unitInfos)) {

+ 1 - 1
sckw-modules/sckw-product/src/main/java/com/sckw/product/controller/KwpGoodsController.java

@@ -50,7 +50,7 @@ public class KwpGoodsController {
      * @Param addGoodsParam:
      * @return: com.sckw.core.web.response.HttpResult
      */
-    @Log(description = "添加上架草稿")
+    @Log(description = "添加上架商品")
     @PostMapping(value = "/addShelves", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult addShelves(@RequestBody @Validated AddGoodsParam addGoodsParam) {
         kwpGoodsService.addShelves(addGoodsParam);

+ 2 - 0
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwAcceptCarriageService.java

@@ -249,11 +249,13 @@ public class KwAcceptCarriageService {
                     null : String.valueOf(logisticsOrder.getSettlementCycle()));
             vo.setAppointor(logisticsOrder.getCreateByName());
             vo.setBillingMode(logisticsOrder.getBillingMode());
+            vo.setCarrierCompanyId(String.valueOf(logisticsOrder.getCarrierEntId()));
             vo.setCarrierCompany(logisticsOrder.getCarrierFirmName());
             vo.setCarrierOrder(logisticsOrder.getWOrderNo());
             vo.setCarrierPhone(logisticsOrder.getCarrierPhone());
             vo.setCarryingCapacity(logisticsOrder.getCarryingCapacity() == null ?
                     null : String.valueOf(logisticsOrder.getCarryingCapacity()));
+            vo.setConsignCompanyId(String.valueOf(logisticsOrder.getCheckEntId()));
             vo.setConsignCompany(logisticsOrder.getCheckFirmName());
             vo.setConsignContacts(logisticsOrder.getCheckContacts());
             vo.setConsignPhone(logisticsOrder.getCheckPhone());

+ 8 - 3
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderService.java

@@ -89,13 +89,18 @@ public class KwOrderService {
         List<OrderListRes> result = new ArrayList<>();
         list.forEach(e -> {
             OrderListRes order = BeanUtils.copyProperties(e, OrderListRes.class);
+            String loadCityName = Objects.isNull(e.getLoadCityName()) ? "" : e.getLoadCityName();
+            String unloadCityName = Objects.isNull(e.getUnloadCityName()) ? "" : e.getUnloadCityName();
+            String loadDetailAddress = Objects.isNull(e.getLoadDetailAddress()) ? "" : e.getLoadDetailAddress();
+            String unloadDetailAddress = Objects.isNull(e.getUnloadDetailAddress()) ? "" : e.getUnloadDetailAddress();
             order.setStatusLabel(DictEnum.getLabel(DictTypeEnum.TORDER_STATUS.getType(), String.valueOf(e.getStatus())))
                     .setTrading(DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), e.getTrading()))
                     .setDeliveryType(DictEnum.getLabel(DictTypeEnum.DELIVERY_TYPE.getType(), e.getDeliveryType()))
                     .setPickupTypeLabel(DictEnum.getLabel(DictTypeEnum.PICKUP_TYPE.getType(), e.getPickupType()))
-                    .setLoadDetailAddressInfo(e.getLoadCityName() + e.getUnloadDetailAddress())
-                    .setUnloadDetailAddressInfo(e.getUnloadCityName() + e.getUnloadDetailAddress())
-                    .setConsignmentStatus(Objects.isNull(e.getEntrustAmount()) || e.getEntrustAmount().compareTo(e.getAmount()) < 0 ? "待托运" : "已托运")
+                    .setLoadDetailAddressInfo(loadCityName + loadDetailAddress)
+                    .setUnloadDetailAddressInfo(unloadCityName + unloadDetailAddress)
+                    .setConsignmentStatus(Objects.isNull(e.getEntrustAmount()) || Objects.isNull(e.getAmount())
+                            || e.getEntrustAmount().compareTo(e.getAmount()) < 0 ? "待托运" : "已托运")
                     .setSource(DictEnum.getLabel(DictTypeEnum.TORDER_SOURCE.getType(), e.getSource()));
             result.add(order);
         });

+ 10 - 0
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/vo/AcceptCarriageOrderVo.java

@@ -22,6 +22,11 @@ public class AcceptCarriageOrderVo extends PageRequest {
      * 计费方式
      */
     private String billingMode;
+
+    /**
+     * 承运单位ID
+     */
+    private String carrierCompanyId;
     /**
      * 承运单位
      */
@@ -42,6 +47,11 @@ public class AcceptCarriageOrderVo extends PageRequest {
      * 分配承运量
      */
     private String carryingCapacity;
+
+    /**
+     * 托运单位id
+     */
+    private String consignCompanyId;
     /**
      * 托运单位
      */

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

@@ -544,15 +544,14 @@ public class KwsEnterpriseService {
         for (BusinessLicense businessLicense : businessLicenseList) {
             Integer type = businessLicense.getType();
             if (type.equals(CertificateTypeEnum.BUSINESSLICENSE.getCode())) {
-                if (!RegularUtils.matchWithFix(RegularUtils.NUMBER_AND_UPPERCASE_LATTER, reqVo.getCode(), 18)) {
+                if (!RegularUtils.matchWithFix(RegularUtils.NUMBER_AND_UPPERCASE_LATTER, businessLicense.getCode(), 18)) {
                     throw new SystemException(HttpStatus.PARAMETERS_PATTERN_ERROR_CODE, HttpStatus.ENT_CODE_ERROR);
                 }
             }
 
-            if (type.equals(CertificateTypeEnum.CORPORATION_IDCARD.getCode())) {
-                throw new SystemException(HttpStatus.PARAMETERS_PATTERN_ERROR_CODE, HttpStatus.LEGAL_ID_CARD_ERROR);
-
-            }
+//            if (type.equals(CertificateTypeEnum.CORPORATION_IDCARD.getCode())) {
+//                throw new SystemException(HttpStatus.PARAMETERS_PATTERN_ERROR_CODE, HttpStatus.LEGAL_ID_CARD_ERROR);
+//            }
         }
 
         if (StringUtils.isNotBlank(reqVo.getContacts()) && !RegularUtils.matchs(RegularUtils.NAME, reqVo.getContacts())) {

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

@@ -144,7 +144,7 @@ public class KwsUserService {
 
         /*存企业机构等*/
         //目前注册接口只有企业管理员进来
-        if (reqDto.getIsMain() == Global.YES && reqDto.getSystemType() != SystemTypeEnum.MANAGE.getCode()) {
+        if (reqDto.getIsMain() == Global.YES && !reqDto.getSystemType().equals(SystemTypeEnum.MANAGE.getCode())) {
             KwsEnterprise kwsEnterprise = new KwsEnterprise();
             long entId = new IdWorker(1L).nextId();
             kwsEnterprise.setId(entId);

+ 6 - 5
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/LogisticsConsignmentController.java

@@ -81,7 +81,7 @@ public class LogisticsConsignmentController {
     public HttpResult purchaseLogisticsOrderCount(@RequestParam("id") @NotBlank(message = "单据id不能为空") String id) {
         log.info("采购订单-托运订单列表 传递参数信息:{}", id);
         try {
-            return logisticsConsignmentService.logisticsOrderCount(id,"1");
+            return logisticsConsignmentService.logisticsOrderCount(id, "1");
         } catch (Exception e) {
             log.error("采购订单-托运订单列表 error :{}", e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
@@ -110,7 +110,7 @@ public class LogisticsConsignmentController {
     /**
      * 采购订单-车辆信息-销售订单id
      *
-     * @param ids       销售订单ids
+     * @param ids      销售订单ids
      * @param page
      * @param pageSize
      * @return
@@ -213,12 +213,13 @@ public class LogisticsConsignmentController {
     public HttpResult sellLogisticsOrderCount(@RequestParam("id") @NotBlank(message = "单据id不能为空") String id) {
         log.info("销售订单-托运订单列表 传递参数信息:{}", id);
         try {
-            return logisticsConsignmentService.logisticsOrderCount(id,"2");
+            return logisticsConsignmentService.logisticsOrderCount(id, "2");
         } catch (Exception e) {
             log.error("销售订单-托运订单列表 error :{}", e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }
+
     /**
      * 销售订单-车辆列表-销售订单id
      *
@@ -283,11 +284,11 @@ public class LogisticsConsignmentController {
     @Validated
     @RequestMapping(value = "/sellOrderFinish", method = RequestMethod.POST)
     public HttpResult sellOrderFinish(@RequestBody @Validated OrderFinishDTO orderFinishDTO) {
-        log.info("采购订单-托运订单列表-完结订单 传递参数信息:{}", JSONObject.toJSONString(orderFinishDTO));
+        log.info("销售订单-托运订单列表-完结订单 传递参数信息:{}", JSONObject.toJSONString(orderFinishDTO));
         try {
             return logisticsConsignmentService.orderFinish(orderFinishDTO, "2");
         } catch (Exception e) {
-            log.error("采购订单-托运订单列表-完结订单 error :{}", e.getMessage(), e);
+            log.error("销售订单-托运订单列表-完结订单 error :{}", e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }

+ 7 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java

@@ -157,4 +157,11 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      * @return
      */
     List<AddressResDTO> getAddressDetailListByEntId(@Param("entId") Long entId);
+
+    /**
+     *
+     * @param id
+     * @return
+     */
+    int selectMaxLevel(@Param("id") String id);
 }

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

@@ -1,5 +1,6 @@
 package com.sckw.transport.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import jakarta.validation.constraints.DecimalMin;
@@ -11,6 +12,7 @@ import lombok.Data;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @author lfdc
@@ -20,6 +22,9 @@ import java.util.Date;
 @Data
 @TableName("kwt_logistics_order")
 public class KwtLogisticsOrder implements Serializable {
+
+    @TableField(exist = false)
+    private List<KwtLogisticsOrder> childList;
     /**
      * 主键
      */

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

@@ -217,8 +217,8 @@ public class AddOrderDTO {
      * 装货城市编码
      */
     @NotNull(message = "装货城市编码不能为空")
-    @Min(value = 0,message = "城市编码必须大于等于{value}")
-    @Max(value = 999,message = "城市编码必须小于等于{value}")
+    @Min(value = 0,message = "装货城市编码必须大于等于{value}")
+    @Max(value = 1000000,message = "装货城市编码必须小于等于{value}")
     private Integer loadCityCode;
 
     /**
@@ -260,7 +260,7 @@ public class AddOrderDTO {
      */
     @NotNull(message = "卸货城市编码不能为空")
     @Min(value = 0,message = "卸货城市编码必须大于等于{value}")
-    @Max(value = 999,message = "卸货城市编码必须小于等于{value}")
+    @Max(value = 1000000,message = "卸货城市编码必须小于等于{value}")
     private Integer unloadCityCode;
 
     /**

+ 8 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderDetailVO.java

@@ -14,6 +14,10 @@ public class OrderDetailVO {
      * 计费方式
      */
     private String billingMode;
+    /**
+     * 承运单位id
+     */
+    private Long carrierCompanyId;
     /**
      * 承运单位
      */
@@ -30,6 +34,10 @@ public class OrderDetailVO {
      * 收款单位
      */
     private String collectionCompany;
+    /**
+     * 托运单位id
+     */
+    private Long consignCompanyId;
     /**
      * 托运单位
      */

+ 20 - 7
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java

@@ -214,14 +214,24 @@ public class AcceptCarriageOrderService {
         logisticsOrderMapper.updateById(logisticsOrder);
         //修改父级mongodb数据
         //更新mongodb
-        SckwLogisticsOrder sckwLogisticsOrder = mongoTemplate.findById(logisticsOrder.getId(), SckwLogisticsOrder.class);
-        SckwLogisticsOrder updateParam = BeanUtils.copyProperties(sckwLogisticsOrder, SckwLogisticsOrder.class);
-        updateParam.setSubcontractAmount(logisticsOrder.getSubcontractAmount().add(new BigDecimal(bo.getCarryingCapacity())))
-                .setUpdateTime(new Date()).setUpdateBy(LoginUserHolder.getUserId()).setUpdateByName(LoginUserHolder.getUserName());
+        SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
+        lOrder.set_id(order.getId());
+        lOrder.setLOrderId(order.getId());
+        lOrder.setEntrustAmount(order.getEntrustAmount());
+        lOrder.setStatus(String.valueOf(order.getStatus()));
+        lOrder.setUpdateTime(order.getUpdateTime());
+        lOrder.setUpdateBy(order.getUpdateBy());
+        lOrder.setUpdateByName(LoginUserHolder.getUserName());
+        lOrder.setSubcontractAmount(logisticsOrder.getSubcontractAmount().add(new BigDecimal(bo.getCarryingCapacity())));        //rabbitMq业务汇总数据发送/消费对象
         SckwBusSum busSum = new SckwBusSum();
+        //业务汇总类型
+        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+        //操作对象(1新增/2修改/3替换数据)
+        busSum.setMethod(2);
+        //业务汇总数据对象
+        busSum.setObject(lOrder);
         busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
         busSum.setMethod(NumberConstant.TWO);
-        busSum.setObject(updateParam);
         streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
         //新增当前分包mongodb数据
         subcontractSendMongoDB(lOrderNo, orderId, bo, logisticsOrder, orderStatus);
@@ -548,9 +558,9 @@ public class AcceptCarriageOrderService {
     private void insertSubcontractLogisticsGoods(SubcontractConsignmentDTO bo, String lOrderNo, Long orderId) {
         KwtLogisticsOrderGoods kwtLogisticsOrderGoods = new KwtLogisticsOrderGoods();
         kwtLogisticsOrderGoods.setId(new IdWorker(NumberConstant.ONE).nextId());
-        kwtLogisticsOrderGoods.setGoodsId(Long.parseLong(bo.getGoodsId()));
+//        kwtLogisticsOrderGoods.setGoodsId(Long.parseLong(bo.getGoodsId()));
         kwtLogisticsOrderGoods.setGoodsName(bo.getGoodsName());
-        kwtLogisticsOrderGoods.setSkuId(StringUtils.isBlank(bo.getSkuId()) ? null : Long.parseLong(bo.getSkuId()));
+//        kwtLogisticsOrderGoods.setSkuId(StringUtils.isBlank(bo.getSkuId()) ? null : Long.parseLong(bo.getSkuId()));
         kwtLogisticsOrderGoods.setLOrderId(orderId);
         kwtLogisticsOrderGoods.setLOrderNo(lOrderNo);
         kwtLogisticsOrderGoods.setUpdateBy(LoginUserHolder.getUserId());
@@ -635,6 +645,7 @@ public class AcceptCarriageOrderService {
                     .set(KwtLogisticsOrder::getUpdateTime, new Date())
                     .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId()));
         } else {
+            //todo 当前为删除订单 后续要改为拒绝接单  数据统计在页面已退回状态中
             //删除订单
             logisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
                     .eq(StringUtils.isNotBlank(orderDTO.getLOrderId()), KwtLogisticsOrder::getId, orderDTO.getLOrderId())
@@ -1153,12 +1164,14 @@ public class AcceptCarriageOrderService {
             }
         }
         if (unitOne != null) {
+            orderDetailVO.setConsignCompanyId(unitOne.getId());
             orderDetailVO.setConsignCompany(unitOne.getFirmName());
             orderDetailVO.setConsignContacts(unitOne.getContacts());
             orderDetailVO.setConsignPhone(unitOne.getPhone());
             orderDetailVO.setCollectionCompany(unitOne.getFirmName());
         }
         if (unitTwo != null) {
+            orderDetailVO.setCarrierCompanyId(unitTwo.getId());
             orderDetailVO.setCarrierCompany(unitTwo.getFirmName());
             orderDetailVO.setCarrierContacts(unitTwo.getContacts());
             orderDetailVO.setCarrierPhone(unitTwo.getPhone());

+ 411 - 93
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java

@@ -1,5 +1,6 @@
 package com.sckw.transport.service;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ArrayUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
@@ -7,7 +8,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.contract.api.RemoteContractService;
 import com.sckw.core.common.enums.NumberConstant;
-import com.sckw.core.common.enums.StringConstant;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.enums.CarWaybillEnum;
@@ -27,8 +27,8 @@ import com.sckw.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.model.SckwLogisticsOrder;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.order.api.model.AddressInfoDetail;
+import com.sckw.order.api.model.CreateOrCancelLogisticsOrderParam;
 import com.sckw.order.api.model.OrderDetailRes;
-import com.sckw.order.api.model.UpdateOrderAmountParam;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.product.api.model.KwpGoods;
 import com.sckw.stream.model.SckwBusSum;
@@ -40,9 +40,11 @@ import com.sckw.transport.model.dto.OrderCarDTO;
 import com.sckw.transport.model.dto.OrderFinishDTO;
 import com.sckw.transport.model.param.LogisticsConsignmentParam;
 import com.sckw.transport.model.vo.OrderFinishVO;
+import io.seata.core.context.RootContext;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.stream.function.StreamBridge;
 import org.springframework.stereotype.Service;
@@ -50,10 +52,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -526,7 +525,7 @@ public class LogisticsConsignmentService {
      */
     public HttpResult purchaseLogisticsOrder(String id, Integer page, Integer pageSize, String type) {
         Long count = getLogisticsOrderCount(id, type);
-        Integer newPage = page - 1;
+        Integer newPage = (page - 1) * pageSize;
         List<LogisticsOrderDTO> list = getLogisticsOrderData(id, newPage, pageSize, type);
         PageResult build = PageResult.build(page, pageSize, count, list);
         return HttpResult.ok(build);
@@ -765,19 +764,58 @@ public class LogisticsConsignmentService {
         return HttpResult.ok(build);
     }
 
+    //    /**
+//     * 销售订单获取车辆信息
+//     *
+//     * @param id
+//     * @param page
+//     * @param pageSize
+//     * @return
+//     */
+//    public HttpResult sellLogisticsCar(String id, Integer page, Integer pageSize) {
+//        Long count = getLogisticsCarDataCount(id);
+//        Integer newPage = (page - 1) * pageSize;
+//        List<OrderCarDTO> list = getLogisticsCarData(id, newPage, pageSize);
+//        PageResult build = PageResult.build(page, pageSize, count, list);
+//        return HttpResult.ok(build);
+//    }
+
     /**
-     * 销售订单获取车辆信息
+     * 销售订单-车辆列表-销售订单id
      *
-     * @param id
+     * @param ids
      * @param page
      * @param pageSize
      * @return
      */
-    public HttpResult sellLogisticsCar(String id, Integer page, Integer pageSize) {
-        Long count = getLogisticsCarDataCount(id);
-        Integer newPage = page - 1;
-        List<OrderCarDTO> list = getLogisticsCarData(id, newPage, pageSize);
-        PageResult build = PageResult.build(page, pageSize, count, list);
+    public HttpResult sellLogisticsCar(String ids, Integer page, Integer pageSize) {
+        List<String> stringList = StringUtils.splitStrToList(ids, String.class);
+        if (CollectionUtils.isEmpty(stringList)) {
+            return HttpResult.ok();
+        }
+        List<OrderCarDTO> returnList = new ArrayList<>();
+        for (String id : stringList) {
+            List<OrderCarDTO> list = waybillOrderMapper.selectWaybillOrderCarListNotPage(id);
+            List<String> collect = list.stream().map(OrderCarDTO::getTruckNo).collect(Collectors.toList());
+            Map<String, RTruckVo> truck = remoteFleetService.findTruck(collect);
+            for (OrderCarDTO orderCarDTO : list) {
+//            orderCarDTO.setDriverId(String.valueOf(orderCarDTO.getDriverId()));
+//            orderCarDTO.setDriverName(orderCarDTO.getDriverName());
+//            orderCarDTO.setDriverPhone(orderCarDTO.getDriverPhone());
+//            orderCarDTO.setDriverCard(orderCarDTO.getDriverCard());
+                orderCarDTO.setLoadAmount(truck.get(orderCarDTO.getTruckNo()) == null ?
+                        null : (truck.get(orderCarDTO.getTruckNo()).getActualWeight() == null ?
+                        null : (String.valueOf(truck.get(orderCarDTO.getTruckNo()).getActualWeight()))));
+            }
+            if (CollectionUtils.isNotEmpty(list)) {
+                returnList.addAll(list);
+            }
+        }
+        List<OrderCarDTO> subList = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(returnList)) {
+            subList = returnList.stream().skip((page - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
+        }
+        PageResult build = PageResult.build(page, pageSize, returnList.stream().count(), subList);
         return HttpResult.ok(build);
     }
 
@@ -843,21 +881,29 @@ public class LogisticsConsignmentService {
                 jsonObject.put("message", "单据状态异常或单据不存在");
                 jsonObject.put("status", HttpStatus.GLOBAL_EXCEPTION_CODE);
             } else {
-                OrderDetailRes orderDetailRes = tradeOrderInfoService.getOrderDetailById(Long.parseLong(s));
-                UpdateOrderAmountParam param = new UpdateOrderAmountParam();
+                /**撤退推送接口数据溯源修改贸易订单已委托量*/
+                CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
                 param.setTOrderId(Long.parseLong(s));
-                param.setActualAmount(orderDetailRes.getActualAmount().add(kwtLogisticsOrder.getLoadAmount()));
-                param.setEntrustAmount(orderDetailRes.getEntrustAmount().add(kwtLogisticsOrder.getEntrustAmount().subtract(kwtLogisticsOrder.getLoadAmount())));
-                tradeOrderInfoService.updateOrderAmount(param);
-                kwtLogisticsOrder.setDelFlag(1);
-                kwtLogisticsOrder.setUpdateTime(new Date());
-                kwtLogisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
-                kwtLogisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
-                        .eq(KwtLogisticsOrder::getId, kwtLogisticsOrder.getId())
-                        .set(KwtLogisticsOrder::getDelFlag, NumberConstant.ONE)
-                        .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId())
-                        .set(KwtLogisticsOrder::getUpdateTime, new Date()));
-                jsonObject.put("status", HttpStatus.SUCCESS_CODE);
+                param.setEntrustAmount(kwtLogisticsOrder.getLoadAmount().negate());
+                param.setUpdateBy(LoginUserHolder.getUserId());
+                param.setUpdateByName(LoginUserHolder.getUserName());
+                HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrder(param);
+                if (HttpStatus.SUCCESS_CODE == httpResult.getCode()) {
+                    kwtLogisticsOrder.setDelFlag(NumberConstant.ONE);
+                    kwtLogisticsOrder.setUpdateTime(new Date());
+                    kwtLogisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+                    kwtLogisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
+                            .eq(KwtLogisticsOrder::getId, kwtLogisticsOrder.getId())
+                            .set(KwtLogisticsOrder::getDelFlag, NumberConstant.ONE)
+                            .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId())
+                            .set(KwtLogisticsOrder::getUpdateTime, new Date()));
+                    jsonObject.put("status", HttpStatus.SUCCESS_CODE);
+                    jsonObject.put("message", "操作成功");
+                } else {
+                    JSONObject.toJSONString(httpResult);
+                    jsonObject.put("status", HttpStatus.GLOBAL_EXCEPTION_CODE);
+                    jsonObject.put("message", "操作失败:" + httpResult.getMsg());
+                }
             }
             list.add(jsonObject);
         });
@@ -885,21 +931,28 @@ public class LogisticsConsignmentService {
                 jsonObject.put("message", "单据状态异常或单据不存在");
                 jsonObject.put("status", HttpStatus.GLOBAL_EXCEPTION_CODE);
             } else {
-                OrderDetailRes orderDetailRes = tradeOrderInfoService.getOrderDetailById(Long.parseLong(s));
-                UpdateOrderAmountParam param = new UpdateOrderAmountParam();
+                /**撤退推送接口数据溯源修改贸易订单已委托量*/
+                CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
                 param.setTOrderId(Long.parseLong(s));
-                param.setActualAmount(orderDetailRes.getActualAmount().add(kwtLogisticsOrder.getLoadAmount()));
-                param.setEntrustAmount(orderDetailRes.getEntrustAmount().add(kwtLogisticsOrder.getEntrustAmount().subtract(kwtLogisticsOrder.getLoadAmount())));
-                tradeOrderInfoService.updateOrderAmount(param);
-                kwtLogisticsOrder.setDelFlag(1);
-                kwtLogisticsOrder.setUpdateTime(new Date());
-                kwtLogisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
-                kwtLogisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
-                        .eq(KwtLogisticsOrder::getId, kwtLogisticsOrder.getId())
-                        .set(KwtLogisticsOrder::getDelFlag, NumberConstant.ONE)
-                        .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId())
-                        .set(KwtLogisticsOrder::getUpdateTime, new Date()));
-                jsonObject.put("status", HttpStatus.SUCCESS_CODE);
+                param.setEntrustAmount(kwtLogisticsOrder.getLoadAmount().negate());
+                param.setUpdateBy(LoginUserHolder.getUserId());
+                param.setUpdateByName(LoginUserHolder.getUserName());
+                HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrder(param);
+                if (HttpStatus.SUCCESS_CODE == httpResult.getCode()) {
+                    kwtLogisticsOrder.setDelFlag(NumberConstant.ONE);
+                    kwtLogisticsOrder.setUpdateTime(new Date());
+                    kwtLogisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+                    kwtLogisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
+                            .eq(KwtLogisticsOrder::getId, kwtLogisticsOrder.getId())
+                            .set(KwtLogisticsOrder::getDelFlag, NumberConstant.ONE)
+                            .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId())
+                            .set(KwtLogisticsOrder::getUpdateTime, new Date()));
+                    jsonObject.put("status", HttpStatus.SUCCESS_CODE);
+                    jsonObject.put("message", "操作失败:" + httpResult.getMsg());
+                } else {
+                    jsonObject.put("status", HttpStatus.GLOBAL_EXCEPTION_CODE);
+                    jsonObject.put("message", "操作失败:" + httpResult.getMsg());
+                }
             }
             list.add(jsonObject);
         });
@@ -912,7 +965,8 @@ public class LogisticsConsignmentService {
      * @param type           类型
      * @return
      */
-    @Transactional(rollbackFor = Exception.class)
+//    @Transactional(rollbackFor = Exception.class)
+//    @GlobalTransactional(timeoutMills = 120000)
     public HttpResult orderFinish(OrderFinishDTO orderFinishDTO, String type) {
         HttpResult httpResult = ValidUtil.serviceValid(orderFinishDTO);
         if (!String.valueOf(httpResult.getCode()).equals(String.valueOf(HttpStatus.SUCCESS_CODE))) {
@@ -920,9 +974,13 @@ public class LogisticsConsignmentService {
         }
         //1采购 2销售
         if (String.valueOf(NumberConstant.ONE).equals(type)) {
+            log.info("采购订单-托运订单列表-完结订单 处理开始 seata xid:{}", RootContext.getXID());
             purchaseOrderFinish(orderFinishDTO);
+            log.info("采购订单-托运订单列表-完结订单 处理结束 seata xid:{}", RootContext.getXID());
         } else if (String.valueOf(NumberConstant.TWO).equals(type)) {
+            log.info("销售订单-托运订单列表-完结订单 处理开始 seata xid:{}", RootContext.getXID());
             sellOrderFinish(orderFinishDTO);
+            log.info("销售订单-托运订单列表-完结订单 处理结束 seata xid:{}", RootContext.getXID());
         } else {
             throw new RuntimeException("完结订单-单据类型异常!");
         }
@@ -943,7 +1001,7 @@ public class LogisticsConsignmentService {
      *
      * @param orderFinishDTO
      */
-    private void purchaseOrderFinish(OrderFinishDTO orderFinishDTO) {
+    public void purchaseOrderFinish(OrderFinishDTO orderFinishDTO) {
         /** 订单完结 物流运单状态为【待派车】、【运输中】可操作*/
         /**完结拦截 必须车辆运单无正在运输中的单据才能完结 状态有 待接单之后已核弹之前的状态 都不能完结*/
         /**完结订单-对应物流订单下子订单都要进行完结*/
@@ -953,7 +1011,7 @@ public class LogisticsConsignmentService {
         KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
                 .eq(KwtLogisticsOrder::getId, id));
         if (logisticsOrder == null) {
-            throw new RuntimeException("采购订单-完结订单-物流单据不存在!");
+            throw new BusinessException("采购订单-完结订单-物流单据不存在!");
         }
         if (logisticsOrder.getLoadAmount().compareTo(orderFinishDTO.getLoadAmount()) > 0) {
             throw new BusinessException("完结订单,实装量不能大于分配量");
@@ -963,47 +1021,285 @@ public class LogisticsConsignmentService {
                 && !LogisticsOrderEnum.IN_TRANSIT.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))) {
             throw new RuntimeException("当前运单并不属于【待派车】,【运输中】状态");
         }
-        /**完结拦截*/
+        //防止正序递归影响时长-先行判断当前物流订单
+        //验证当前物流订单是否还存在进行的车辆运单
+        boolean flag = judgmentWaybillOrderIsFinish(id);
+        if (flag) {
+            throw new BusinessException("您现在有车辆运单正在执行中,该订单目前不可完结,请先将运单执行完毕");
+        }
+        //通过pids查看是否存在下游分包数据
+        /**完结订单-对应物流订单下子订单都要进行完结*/
+        List<KwtLogisticsOrder> kwtLogisticsOrders = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getDelFlag, NumberConstant.ZERO)
+                .apply(id != null, "FIND_IN_SET ('" + id + "', pids)").ne(KwtLogisticsOrder::getId, id));
+        //存在子集
+        if (CollectionUtils.isNotEmpty(kwtLogisticsOrders)) {
+            List<Long> collect = kwtLogisticsOrders.stream().map(KwtLogisticsOrder::getId).collect(Collectors.toList());
+            //验证 是否存在进行中车辆运单
+            List<KwtLogisticsOrder> kwtLogisticsOrderList = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>().in(KwtLogisticsOrder::getId, collect));
+            if (CollectionUtils.isNotEmpty(kwtLogisticsOrderList)) {
+                judgmentLogisticsOrderIsFinish(logisticsOrder);
+            }
+            // 按照父级ID分组
+            //判断是不是一级(一级的情况下,pid为null 方便处理,赋值为OL)
+            List<KwtLogisticsOrder> list = kwtLogisticsOrders.stream()
+                    .map(object -> {
+                        KwtLogisticsOrder LogisticsOrder = new KwtLogisticsOrder();
+                        BeanUtils.copyProperties(object, LogisticsOrder);
+                        if (LogisticsOrder.getPid() == null) {
+                            LogisticsOrder.setPid(0L);
+                        }
+                        return LogisticsOrder;
+                    })
+                    .collect(Collectors.toList());
+            Map<Long, List<KwtLogisticsOrder>> groupByParentIdMap = list.stream().collect(Collectors.groupingBy(KwtLogisticsOrder::getPid));
+            //存放:对应的当前节点ID数据
+            Set<Long> topToLowerChildIdSet = new HashSet<>();
+            // 取出顶级数据(也就是父级ID为0的数据  父级ID也可以自定义 当前赋值0L)
+            List<KwtLogisticsOrder> topTreeNodes = groupByParentIdMap.get(0L);
+            if (CollectionUtils.isEmpty(topTreeNodes)) {
+                /**当前传输的代表不是一级 可能是二级或者三级
+                 topTreeNodes = groupByParentIdMap.get(Long.parseLong(id));*/
+                getMinimumChildIdArray(groupByParentIdMap, Long.parseLong(id), topToLowerChildIdSet);
+                System.out.println("当前节点【" + id + "】节点下所有的根节点数据集合:" + topToLowerChildIdSet.toString());
+            } else {
+                for (KwtLogisticsOrder node : topTreeNodes) {
+                    getMinimumChildIdArray(groupByParentIdMap, node.getId(), topToLowerChildIdSet);
+                }
+                System.out.println("0节点(传输为一级)下所有的根节点数据集合:" + topToLowerChildIdSet.toString());
+            }
+            //处理当前传递的id下  全部完结需要改的量
+            BigDecimal decimals = new BigDecimal("0.00");
+            BigDecimal decimal = judgmentOrderFinish(id, topToLowerChildIdSet, decimals,logisticsOrder);
+            //返回给贸易订单实际装卸货量
+            Map map = countOrderNumber(logisticsOrder.getTOrderId());
+            //修改单据状态
+//            updateLogisticOrderStatus(id,orderFinishDTO);
+        } else {
+            //不存在子集
+            /**
+             * 验证是否存在进行中的车辆运单
+             * 统计当前物流订单的 分配量/实装量/实卸量
+             * 验证当前贸易订单是否存在进行中的物流运单
+             * */
+            judgmentLogisticsOrderIsFinish(logisticsOrder);
+        }
+    }
+
+    private Map countOrderNumber(Long tOrderId) {
+        Map<String, BigDecimal> map = new HashMap<>();
+        BigDecimal loadAmountTotal = new BigDecimal("0.00");
+        BigDecimal unloadAmountTotal = new BigDecimal("0.00");
+        List<KwtLogisticsOrder> kwtLogisticsOrderList = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>().eq(KwtLogisticsOrder::getTOrderId, tOrderId));
+        for (KwtLogisticsOrder kwtLogisticsOrder : kwtLogisticsOrderList) {
+            BigDecimal loadAmount = kwtLogisticsOrder.getLoadAmount();
+            BigDecimal unloadAmount = kwtLogisticsOrder.getUnloadAmount();
+            loadAmountTotal = loadAmountTotal.add(loadAmount);
+            unloadAmountTotal = unloadAmountTotal.add(unloadAmount);
+        }
+        return map;
+    }
+
+    private void updateLogisticOrderStatus(String id, OrderFinishDTO orderFinishDTO) {
+        /**完结订单-对应物流订单下子订单都要进行完结*/
+        List<KwtLogisticsOrder> kwtLogisticsOrders = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getDelFlag, NumberConstant.ZERO)
+                .apply(id != null, "FIND_IN_SET ('" + id + "', pids)"));
+        for (KwtLogisticsOrder kwtLogisticsOrder : kwtLogisticsOrders) {
+            updateLogisticOrderAndTrack(kwtLogisticsOrder.getId(), orderFinishDTO);
+        }
+    }
+
+    /**
+     * 处理当前传递的id下  全部完结
+     *
+     * @param id                   当前完结物流订单传递id
+     * @param topToLowerChildIdSet 当前传递的下的最末一级的物流订单主键id
+     * @param  logisticsOrder 本省物流订单
+     */
+    private BigDecimal judgmentOrderFinish(String id, Set<Long> topToLowerChildIdSet, BigDecimal amount,KwtLogisticsOrder logisticsOrder) {
+        //代表是否是子订单都已经完结,需要完结父订单状态
+        if (CollectionUtils.isNotEmpty(topToLowerChildIdSet)) {
+            List<KwtLogisticsOrder> kwtLogisticsOrderList = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                    .in(KwtLogisticsOrder::getId, topToLowerChildIdSet)
+            );
+            if (CollectionUtils.isNotEmpty(kwtLogisticsOrderList)) {
+                for (KwtLogisticsOrder kwtLogisticsOrder : kwtLogisticsOrderList) {
+                    BigDecimal entrustAmount = kwtLogisticsOrder.getEntrustAmount();
+                    BigDecimal subcontractAmount = kwtLogisticsOrder.getSubcontractAmount();
+                    if (subcontractAmount.compareTo(new BigDecimal("0.00")) == 0) {
+                        //最底下根节点-获取父级
+                        KwtLogisticsOrder selectOne = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                                .eq(KwtLogisticsOrder::getId, kwtLogisticsOrder.getPid())
+                        );
+                        BigDecimal amount1 = kwtLogisticsOrder.getAmount().subtract(entrustAmount.add(subcontractAmount));
+                        amount = amount.add(amount1);
+                        kwtLogisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
+                                .eq(KwtLogisticsOrder::getId, selectOne.getId())
+                                .set(KwtLogisticsOrder::getEntrustAmount, selectOne.getEntrustAmount().subtract(kwtLogisticsOrder.getEntrustAmount()))
+                                .set(KwtLogisticsOrder::getSubcontractAmount, selectOne.getSubcontractAmount().subtract(kwtLogisticsOrder.getSubcontractAmount()))
+                        );
+                    } else {
+                        continue;
+                    }
+                }
+            }
+        }
+        return amount;
+    }
+
+    private void ssssssss(String id, KwtLogisticsOrder kwtLogisticsOrder, BigDecimal amount) {
+        String pid = String.valueOf(kwtLogisticsOrder.getPid());
+        Long lOrderId = kwtLogisticsOrder.getId();
+        BigDecimal amount1 = kwtLogisticsOrder.getAmount();
+        BigDecimal entrustAmount = kwtLogisticsOrder.getEntrustAmount();
+        BigDecimal subcontractAmount = kwtLogisticsOrder.getSubcontractAmount();
+        BigDecimal subtract = amount1.subtract(entrustAmount.add(subcontractAmount));
+        amount = amount.add(subtract);
+        KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getId, lOrderId)
+        );
+        if (!id.equals(pid)) {
+            id = String.valueOf(lOrderId);
+            ssssssss(id, kwtLogisticsOrder, amount);
+        }
+    }
+
+
+    private void updateLogisticOrderAndTrack(Long lOrderId, OrderFinishDTO orderFinishDTO) {
+        Integer code = LogisticsOrderEnum.HAVE_FINISHED.getCode();
+        kwtLogisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
+                .set(KwtLogisticsOrder::getStatus, code)
+                .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId())
+                .set(KwtLogisticsOrder::getUpdateTime, new Date())
+                .eq(KwtLogisticsOrder::getId, lOrderId)
+        );
+        KwtLogisticsOrderTrack track = kwtLogisticsOrderTrackMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderTrack>()
+                .eq(KwtLogisticsOrderTrack::getLOrderId, lOrderId).eq(KwtLogisticsOrderTrack::getStatus, code)
+        );
+        if (track != null) {
+            kwtLogisticsOrderTrackMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrderTrack>()
+                    .set(KwtLogisticsOrderTrack::getUpdateBy, LoginUserHolder.getUserId())
+                    .set(KwtLogisticsOrderTrack::getUpdateTime, new Date())
+            );
+        } else {
+            KwtLogisticsOrderTrack orderTrack = new KwtLogisticsOrderTrack();
+            orderTrack.setId(new IdWorker(NumberConstant.ONE).nextId());
+            orderTrack.setLOrderId(lOrderId);
+            orderTrack.setRemark(orderFinishDTO.getRemark());
+            orderTrack.setStatus(code);
+            orderTrack.setCreateBy(LoginUserHolder.getUserId());
+            orderTrack.setCreateTime(new Date());
+            orderTrack.setUpdateBy(LoginUserHolder.getUserId());
+            orderTrack.setUpdateTime(new Date());
+            orderTrack.setDelFlag(NumberConstant.ZERO);
+            kwtLogisticsOrderTrackMapper.insert(orderTrack);
+        }
+    }
+
+    /**
+     * 根据父级节点获取最低层次 那一级的节点数据
+     * 1
+     * /   \
+     * 2     3
+     * / \   / \
+     * 4  5  6  7
+     * 上面的树形结构调用此方法  根据1 可以获取到  [4 5 6 7]
+     * 根据3 可以获得到  [6 7]
+     *
+     * @param groupByParentIdMap   所有的元素集合(根据父级ID进行了分组) 分组方法可以使用lambda 如下:
+     *                             Map<String, List<Person>> peopleByCity = personStream.collect(Collectors.groupingBy(Person::getCity));
+     * @param pid                  父级ID
+     * @param topToLowerChildIdSet 存储最深根节点的数据集合
+     */
+    public static Set<Long> getMinimumChildIdArray(Map<Long, List<KwtLogisticsOrder>> groupByParentIdMap,
+                                                   Long pid, Set<Long> topToLowerChildIdSet) {
+        // 存放当前pid对应的所有根节点ID数据
+        Set<Long> currentPidLowerChildIdSet = new HashSet<>();
+        // 获取当前pid下所有的子节点
+        List<KwtLogisticsOrder> childTreeNodes = groupByParentIdMap.get(pid);
+        if (CollUtil.isEmpty(childTreeNodes)) {
+            return null;
+        }
+        for (KwtLogisticsOrder treeNode : childTreeNodes) {
+            Set<Long> lowerChildIdSet = getMinimumChildIdArray(groupByParentIdMap, treeNode.getId(), currentPidLowerChildIdSet);
+            if (CollUtil.isEmpty(lowerChildIdSet)) {
+                // 如果返回null  表示当前遍历的treeNode节点为最底层的节点
+                currentPidLowerChildIdSet.add(treeNode.getId());
+            }
+        }
+        System.out.println("当前父级ID:" + pid + "下所有的根节点数据:" + currentPidLowerChildIdSet.toString());
+        // 把当前获取到的根节点数据 一并保存到上一个节点父级ID集合中
+        topToLowerChildIdSet.addAll(currentPidLowerChildIdSet);
+        return currentPidLowerChildIdSet;
+    }
+
+    /**
+     * 验证当前物流订单是否存在未完结的车辆运单
+     *
+     * @param id 对应物流订单id
+     */
+    private boolean judgmentWaybillOrderIsFinish(String id) {
+        boolean flag = false;
         List<Integer> statusList = new ArrayList<>();
+        statusList.add(CarWaybillEnum.PENDING_ORDER.getCode());
         statusList.add(CarWaybillEnum.PENDING_VEHICLE.getCode());
         statusList.add(CarWaybillEnum.EXIT_COMPLETED.getCode());
         statusList.add(CarWaybillEnum.WAIT_LOADING.getCode());
         statusList.add(CarWaybillEnum.COMPLETION_LOADING.getCode());
         statusList.add(CarWaybillEnum.WAIT_UNLOADING.getCode());
         statusList.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
+        statusList.add(CarWaybillEnum.APPROVAL_PASS.getCode());
         int count = waybillOrderMapper.selectDataByLorderId(id, statusList);
         if (count > NumberConstant.ZERO) {
-            throw new RuntimeException("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕");
+            flag = true;
         }
-        /**完结订单-对应物流订单下子订单都要进行完结*/
-        List<KwtLogisticsOrder> kwtLogisticsOrders = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
-                .in(KwtLogisticsOrder::getPids, Long.parseLong(orderFinishDTO.getId())));
-        if (CollectionUtils.isNotEmpty(kwtLogisticsOrders)) {
-            for (KwtLogisticsOrder kwtLogisticsOrder : kwtLogisticsOrders) {
-                String[] split = kwtLogisticsOrder.getPids().split(StringConstant.COMMA);
-                if (split.length > NumberConstant.ONE) {
-                    for (String s : split) {
-                        if (String.valueOf(kwtLogisticsOrder.getId()).equals(s)) {
-                            //本身订单
-                            //只存在当前订单无分包订单
-                            /**单据完结修改状态以及数据*/
-                            updateDataByItself(logisticsOrder, orderFinishDTO);
-                        } else {
-                            //修改分包后的订单-代表存在分包订单
-                            /**单据完结修改状态以及数据*/
-                            updateDataBySubset(orderFinishDTO, s);
-                        }
-                    }
-                } else {
-                    //只存在当前订单无分包订单
-                    /**单据完结修改状态以及数据*/
-                    updateDataByItself(logisticsOrder, orderFinishDTO);
-                }
-            }
+        return flag;
+    }
+
+    /**
+     * 验证是否存在进行中的车辆运单
+     * 统计当前物流订单的 分配量/实装量/实卸量
+     * 验证当前贸易订单是否存在进行中的物流运单
+     *
+     * @param logisticsOrder 物流订单数据
+     */
+    public void judgmentLogisticsOrderIsFinish(KwtLogisticsOrder logisticsOrder) {
+        //查询是否存在进行中的车辆运单 取至 CarWaybillEnum 枚举类
+        long[] waybillStatus = {1, 2, 3, 4, 5, 6, 7, 8};
+        List<KwtWaybillOrder> waybillOrders = waybillOrderMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrder>()
+                .eq(KwtWaybillOrder::getLOrderId, logisticsOrder.getId())
+                .in(KwtWaybillOrder::getStatus, waybillStatus));
+        if (CollectionUtils.isNotEmpty(waybillOrders)) {
+            log.info("完结订单时存在进行中的车辆运单,物流订单id:{},物流订单编号:{},车辆运单:{}",
+                    logisticsOrder.getId(), logisticsOrder.getLOrderNo(), JSONObject.toJSONString(waybillOrders));
+            throw new BusinessException("不能进行订单完结,存在进行中的车辆运单");
         }
+        //获取贸易订单下物流运单是否存在进行中的单据(贸易订单统计物流订单) 取至 LogisticsOrderEnum枚举类
+        long[] logisticsStatus = {0, 1, 2, 3};
+        List<KwtLogisticsOrder> orderList = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getTOrderId, logisticsOrder.getTOrderId())
+                .in(KwtLogisticsOrder::getStatus, logisticsStatus));
+        boolean flag = true;
+        if (CollectionUtils.isNotEmpty(orderList)) {
+            log.info("完结订单时存在当前进行中的贸易订单下的物流运单,物流订单id:{},物流订单编号:{},贸易订单id:{},贸易订单编号:{},当前贸易订单其他物流订单:{}",
+                    logisticsOrder.getId(), logisticsOrder.getLOrderNo(), logisticsOrder.getTOrderId(), JSONObject.toJSONString(waybillOrders), JSONObject.toJSONString(orderList));
+            throw new BusinessException("完结订单时存在当前进行中的贸易订单下的物流运单");
+        }
+        //防止事务脏读,幻读.重新查询 物流订单数据
+//        KwtLogisticsOrder kwtLogisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>().eq(KwtLogisticsOrder::getId, logisticsOrder.getId()));
+//        CompleteLogisticsOrderParam param = new CompleteLogisticsOrderParam();
+//        param.setTOrderId(logisticsOrder.getTOrderId());
+//        param.setEntrustAmount(kwtLogisticsOrder.getAmount().negate());
+//        param.setActualLoadAmount(kwtLogisticsOrder.getLoadAmount());
+//        param.setActualUnloadAmount(kwtLogisticsOrder.getUnloadAmount());
+//        param.setIsAllComplete(flag);
+//        param.setUpdateBy(LoginUserHolder.getUserId());
+//        param.setUpdateByName(LoginUserHolder.getUserName());
+//        tradeOrderInfoService.completeLogisticsOrder(param);
     }
 
-    private void updateDataBySubset(OrderFinishDTO orderFinishDTO, String orderId) {
+    public void updateDataBySubset(OrderFinishDTO orderFinishDTO, String orderId) {
         KwtLogisticsOrder kwtLogisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
                 .eq(KwtLogisticsOrder::getId, Long.parseLong(orderId)));
         if (kwtLogisticsOrder != null) {
@@ -1012,16 +1308,27 @@ public class LogisticsConsignmentService {
             kwtLogisticsOrder.setUpdateTime(new Date());
             kwtLogisticsOrder.setRemark(orderFinishDTO.getRemark());
             kwtLogisticsOrderMapper.updateById(kwtLogisticsOrder);
-            KwtLogisticsOrderTrack track = new KwtLogisticsOrderTrack();
-            track.setId(new IdWorker(NumberConstant.ONE).nextId());
-            track.setLOrderId(kwtLogisticsOrder.getId());
-            track.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
-            track.setCreateTime(new Date());
-            track.setRemark(orderFinishDTO.getRemark());
-            track.setCreateBy(LoginUserHolder.getUserId());
-            track.setUpdateBy(LoginUserHolder.getUserId());
-            track.setUpdateTime(new Date());
-            kwtLogisticsOrderTrackMapper.insert(track);
+            KwtLogisticsOrderTrack logisticsOrderTrack = kwtLogisticsOrderTrackMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderTrack>()
+                    .eq(KwtLogisticsOrderTrack::getLOrderId, orderId)
+                    .eq(KwtLogisticsOrderTrack::getStatus, LogisticsOrderEnum.HAVE_FINISHED.getCode()));
+            if (logisticsOrderTrack == null) {
+                KwtLogisticsOrderTrack track = new KwtLogisticsOrderTrack();
+                track.setId(new IdWorker(NumberConstant.ONE).nextId());
+                track.setLOrderId(kwtLogisticsOrder.getId());
+                track.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+                track.setCreateTime(new Date());
+                track.setRemark(orderFinishDTO.getRemark());
+                track.setCreateBy(LoginUserHolder.getUserId());
+                track.setUpdateBy(LoginUserHolder.getUserId());
+                track.setUpdateTime(new Date());
+                kwtLogisticsOrderTrackMapper.insert(track);
+            } else {
+                kwtLogisticsOrderTrackMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrderTrack>()
+                        .eq(KwtLogisticsOrderTrack::getLOrderId, orderId)
+                        .set(KwtLogisticsOrderTrack::getRemark, orderFinishDTO.getRemark())
+                        .set(KwtLogisticsOrderTrack::getUpdateTime, new Date())
+                        .set(KwtLogisticsOrderTrack::getUpdateBy, LoginUserHolder.getUserId()));
+            }
             /**单据完结修改Mongodb*/
             SckwLogisticsOrder updateParam = new SckwLogisticsOrder();
             updateParam.setLOrderId(kwtLogisticsOrder.getId())
@@ -1049,16 +1356,27 @@ public class LogisticsConsignmentService {
         logisticsOrder.setUpdateTime(new Date());
         logisticsOrder.setRemark(orderFinishDTO.getRemark());
         kwtLogisticsOrderMapper.updateById(logisticsOrder);
-        KwtLogisticsOrderTrack track = new KwtLogisticsOrderTrack();
-        track.setId(new IdWorker(NumberConstant.ONE).nextId());
-        track.setLOrderId(logisticsOrder.getId());
-        track.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
-        track.setCreateTime(new Date());
-        track.setRemark(orderFinishDTO.getRemark());
-        track.setCreateBy(LoginUserHolder.getUserId());
-        track.setUpdateBy(LoginUserHolder.getUserId());
-        track.setUpdateTime(new Date());
-        kwtLogisticsOrderTrackMapper.insert(track);
+        KwtLogisticsOrderTrack logisticsOrderTrack = kwtLogisticsOrderTrackMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderTrack>()
+                .eq(KwtLogisticsOrderTrack::getLOrderId, logisticsOrder.getId())
+                .eq(KwtLogisticsOrderTrack::getStatus, LogisticsOrderEnum.HAVE_FINISHED.getCode()));
+        if (logisticsOrderTrack == null) {
+            KwtLogisticsOrderTrack track = new KwtLogisticsOrderTrack();
+            track.setId(new IdWorker(NumberConstant.ONE).nextId());
+            track.setLOrderId(logisticsOrder.getId());
+            track.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+            track.setCreateTime(new Date());
+            track.setRemark(orderFinishDTO.getRemark());
+            track.setCreateBy(LoginUserHolder.getUserId());
+            track.setUpdateBy(LoginUserHolder.getUserId());
+            track.setUpdateTime(new Date());
+            kwtLogisticsOrderTrackMapper.insert(track);
+        } else {
+            kwtLogisticsOrderTrackMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrderTrack>()
+                    .eq(KwtLogisticsOrderTrack::getLOrderId, logisticsOrder.getId())
+                    .set(KwtLogisticsOrderTrack::getRemark, orderFinishDTO.getRemark())
+                    .set(KwtLogisticsOrderTrack::getUpdateTime, new Date())
+                    .set(KwtLogisticsOrderTrack::getUpdateBy, LoginUserHolder.getUserId()));
+        }
         /**单据完结修改Mongodb*/
         SckwLogisticsOrder updateParam = new SckwLogisticsOrder();
         updateParam.setLOrderId(Long.parseLong(orderFinishDTO.getId()))

+ 8 - 5
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java

@@ -118,8 +118,8 @@ public class TransportCommonService {
      */
     private OrderDetailVO getOrderData(DocumentParamDTO dto) {
         KwtLogisticsOrder logisticsOrder = logisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
-                .eq(KwtLogisticsOrder::getId, dto.getId())
-                .eq(StringUtils.isNotBlank(dto.getDocumentNo()), KwtLogisticsOrder::getLOrderNo, dto.getDocumentNo())
+                        .eq(KwtLogisticsOrder::getId, dto.getId())
+                        .eq(StringUtils.isNotBlank(dto.getDocumentNo()), KwtLogisticsOrder::getLOrderNo, dto.getDocumentNo())
                 /**.eq(KwtLogisticsOrder::getEntId, LoginUserHolder.getEntId())*/);
         if (logisticsOrder == null) {
             log.info("查无单据:{}", JSONObject.toJSONString(dto));
@@ -156,12 +156,14 @@ public class TransportCommonService {
             }
         }
         if (unitOne != null) {
+            orderDetailVO.setConsignCompanyId(unitOne.getId());
             orderDetailVO.setConsignCompany(unitOne.getFirmName());
             orderDetailVO.setConsignContacts(unitOne.getContacts());
             orderDetailVO.setConsignPhone(unitOne.getPhone());
             orderDetailVO.setCollectionCompany(unitOne.getFirmName());
         }
         if (unitTwo != null) {
+            orderDetailVO.setCarrierCompanyId(unitTwo.getId());
             orderDetailVO.setCarrierCompany(unitTwo.getFirmName());
             orderDetailVO.setCarrierContacts(unitTwo.getContacts());
             orderDetailVO.setCarrierPhone(unitTwo.getPhone());
@@ -198,8 +200,8 @@ public class TransportCommonService {
         log.info("订单-撤销托运请求参数:{}", JSONObject.toJSONString(orderDto));
         HttpResult result = new HttpResult();
         KwtLogisticsOrder logisticsOrder = logisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
-                .eq(KwtLogisticsOrder::getId, orderDto.getId())
-                .eq(KwtLogisticsOrder::getLOrderNo, orderDto.getOrderNo())
+                        .eq(KwtLogisticsOrder::getId, orderDto.getId())
+                        .eq(KwtLogisticsOrder::getLOrderNo, orderDto.getOrderNo())
                 /**.eq(KwtLogisticsOrder::getEntId, LoginUserHolder.getEntId())*/);
         if (logisticsOrder == null) {
             result.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
@@ -262,6 +264,7 @@ public class TransportCommonService {
 
     /**
      * 对账管理-运费收款对账界面查询接口
+     *
      * @param logisticsOrderParam
      * @return
      */
@@ -275,7 +278,7 @@ public class TransportCommonService {
             logisticsOrderParam.setEndTime(logisticsOrderParam.getEndTime() + " 23:59:59");
         }
         Integer page = logisticsOrderParam.getPage();
-        logisticsOrderParam.setPage(logisticsOrderParam.getPage() - 1);
+        logisticsOrderParam.setPage((logisticsOrderParam.getPage() - 1) * logisticsOrderParam.getPageSize());
         List<LogisticsOrderDTO> list = logisticsOrderMapper.selectLogisticOrderData(logisticsOrderParam, dictId);
         Long count = logisticsOrderMapper.selectLogisticOrderCount(logisticsOrderParam, dictId);
         if (CollectionUtils.isNotEmpty(list)) {

+ 7 - 1
sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml

@@ -137,7 +137,7 @@
                 AND a.payment = #{dictId}
             </if>
             <if test="logisticsOrderParam.companyId !=null and logisticsOrderParam.companyId != ''">
-                AND d.ent_id = #{logisticsOrderParam.companyId}
+                AND a.ent_id = #{logisticsOrderParam.companyId}
             </if>
             <if test="logisticsOrderParam.taxRate != null and logisticsOrderParam.taxRate != ''">
                 AND a.tax_rate = #{logisticsOrderParam.taxRate}
@@ -509,4 +509,10 @@
     <select id="getAddressDetailListByEntId" resultType="com.sckw.transport.api.model.dto.AddressResDTO">
 
     </select>
+    <select id="selectMaxLevel" resultType="java.lang.Integer">
+        SELECT MAX(LEVEL)
+        FROM kwt_logistics_order
+        WHERE del_flag = 0
+          AND FIND_IN_SET(#{id}, pids)
+    </select>
 </mapper>