Kaynağa Gözat

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

xucaiqin 2 yıl önce
ebeveyn
işleme
72719d4627
33 değiştirilmiş dosya ile 1593 ekleme ve 166 silme
  1. 1 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/constant/HttpStatus.java
  2. 5 0
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/model/dto/res/CooperateManageQueryResDto.java
  3. 32 22
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/CommonBusinessService.java
  4. 37 29
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmCooperateApplyService.java
  5. 21 9
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmCooperateManageService.java
  6. 2 1
      sckw-modules/sckw-manage/src/main/resources/mapper/KwmCooperateMapper.xml
  7. 1 1
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/res/KwmMessageListResVO.java
  8. 46 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/enums/TransportDemandStatusEnum.java
  9. 2 2
      sckw-modules/sckw-order/src/main/java/com/sckw/order/enums/WantBuyStatusEnum.java
  10. 77 22
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTransportDemandService.java
  11. 84 26
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwpWantBuyService.java
  12. 201 0
      sckw-modules/sckw-payment/src/main/resources/bootstrap-lfdc.yml
  13. 1 1
      sckw-modules/sckw-product/src/main/java/com/sckw/product/enums/GoodsStatusEnum.java
  14. 5 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/pojo/FindMenuTreePojo.java
  15. 6 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsMenuService.java
  16. 6 0
      sckw-modules/sckw-system/src/main/resources/mapper/KwsMenuDao.xml
  17. 5 0
      sckw-modules/sckw-transport/pom.xml
  18. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/AcceptCarriageOrderController.java
  19. 10 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java
  20. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderMapper.java
  21. 203 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/KwtLogisticsOrderTreeVo.java
  22. 55 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LogisticsCountVo.java
  23. 39 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/StatisticsAmountVO.java
  24. 34 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/StatisticsMoneyVO.java
  25. 18 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/StatisticsResultVO.java
  26. 39 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/StatisticsTotalPriceVO.java
  27. 39 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/StatisticsWaitingAmountVO.java
  28. 93 7
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java
  29. 114 32
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ConsignOrderService.java
  30. 139 6
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java
  31. 232 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java
  32. 31 0
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml
  33. 12 0
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

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

@@ -89,7 +89,7 @@ public class HttpStatus {
     public static final String LEGAL_NAME_ERROR = "法人格式不正确";
     public static final String LEGAL_PHONE_ERROR = "法人手机号格式不正确";
     public static final String LEGAL_ID_CARD_ERROR = "法人身份证号格式不正确";
-    public static final String ENT_CODE_ERROR = "企业编号格式不正确";
+    public static final String ENT_CODE_ERROR = "营业执照编号格式不正确";
 
     /**账号在别处登录状态码*/
     public static final int ACCOUNT_OTHER_LOGIN_CODE = 60900;

+ 5 - 0
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/model/dto/res/CooperateManageQueryResDto.java

@@ -77,6 +77,11 @@ public class CooperateManageQueryResDto {
      */
     private Long createBy;
 
+    /**
+     * 创建人
+     */
+    private String createByStr;
+
     /**
      * 创建时间
      */

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

@@ -93,7 +93,7 @@ public class CommonBusinessService {
      * @author: czh
      * @date: 2023/7/12
      */
-    public Map<Long, UserCacheResDto> queryUserCacheMapByIds(List<Long> userIds){
+    public Map<Long, UserCacheResDto> queryUserCacheMapByIds(List<Long> userIds) {
         return remoteSystemService.queryUserCacheMapByIds(userIds);
     }
 
@@ -174,19 +174,23 @@ public class CommonBusinessService {
     public List<CooperateManageQueryResVo> getCooperateManageQueryResVos(List<CooperateManageQueryResDto> list) {
         //dubbo接口查用户和企业
         Long entId = LoginUserHolder.getEntId();
-        List<Long> userIds = list.stream().map(CooperateManageQueryResDto::getCreateBy).distinct().toList();
+        List<String> createByList = list.stream().map(CooperateManageQueryResDto::getCreateByStr).toList();
+        List<Long> userIds = new ArrayList<>();
+        for (String createByStr : createByList) {
+            String[] split = createByStr.split(Global.COMMA);
+            for (int n = 0; n < split.length; n ++) {
+                userIds.add(Long.valueOf(split[n]));
+            }
+        }
+
         List<Long> allEntIds = new ArrayList<>();
         List<Long> targetEntIds = list.stream().map(CooperateManageQueryResDto::getTargetEntId).distinct().toList();
         List<Long> ourEntIds = list.stream().map(CooperateManageQueryResDto::getOurEntId).distinct().toList();
         allEntIds.addAll(targetEntIds);
         allEntIds.addAll(ourEntIds);
-        List<UserCacheResDto> userCacheResDtos = remoteSystemService.queryUserCacheByIds(userIds);
+        Map<Long, UserCacheResDto> userCacheResDtoMap = remoteSystemService.queryUserCacheMapByIds(userIds);
         List<EntCacheResDto> entCacheResDtos = remoteSystemService.queryEntCacheByIds(allEntIds);
-        Map<Long, String> userMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         Map<Long, String> entMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
-        if (!CollectionUtils.isEmpty(userCacheResDtos)) {
-            userMap = userCacheResDtos.stream().collect(Collectors.toMap(UserCacheResDto::getId, UserCacheResDto::getName, (oldValue, newValue) -> newValue));
-        }
         if (!CollectionUtils.isEmpty(entCacheResDtos)) {
             entMap = entCacheResDtos.stream().collect(Collectors.toMap(EntCacheResDto::getId, EntCacheResDto::getFirmName, (oldValue, newValue) -> newValue));
         }
@@ -201,7 +205,6 @@ public class CommonBusinessService {
             cooperateManageQueryResVo.setRemark(cooperateManageQueryResDto.getRemark());
             cooperateManageQueryResVo.setStatus(cooperateManageQueryResDto.getStatus());
             cooperateManageQueryResVo.setApplyTypeCode(cooperateManageQueryResDto.getApplyTypeCode());
-            cooperateManageQueryResVo.setCreateByName(userMap.get(cooperateManageQueryResDto.getCreateBy()));
             cooperateManageQueryResVo.setCreateTime(cooperateManageQueryResDto.getCreateTime());
             cooperateManageQueryResVo.setTargetEntName(targetEntName);
             cooperateManageQueryResVo.setTargetEntId(targetEntId);
@@ -209,15 +212,34 @@ public class CommonBusinessService {
             cooperateManageQueryResVo.setEntName(entMap.get(cooperateManageQueryResDto.getOurEntId()));
             cooperateManageQueryResVo.setApprovalRemark(cooperateManageQueryResDto.getApprovalRemark());
 
+            UserCacheResDto userCacheResDto = userCacheResDtoMap.get(cooperateManageQueryResDto.getCreateBy());
+            cooperateManageQueryResVo.setCreateByName(userCacheResDto.getName());
+
+            String typesStr = cooperateManageQueryResDto.getTypes();
+            List<Integer> typelist = new ArrayList<>();
+            String[] split = typesStr.split(Global.COMMA);
+            for (String typeStr : split) {
+                String[] split1 = typeStr.split(Global.POUND);
+                Integer type = Integer.valueOf(split1[0]);
+                Long userId = Long.valueOf(split1[1]);
+                UserCacheResDto userCacheResDto1 = userCacheResDtoMap.get(userId);
+                if (userCacheResDto1.getEntInfo().getId().equals(entId)) {
+                    typelist.add(type);
+                } else {
+                    typelist.add(changeAttribute(type));
+                }
+            }
+            cooperateManageQueryResVo.setCooperateTypes(String.join(Global.COMMA, typelist.stream().distinct().map(String::valueOf).toList()));
+
             //我方是发起方
-            if (entId.compareTo(cooperateManageQueryResDto.getEntId()) == 0) {
+            if (entId.equals(cooperateManageQueryResDto.getEntId())) {
                 cooperateManageQueryResVo.setContacts(cooperateManageQueryResDto.getInviteeContacts());
                 cooperateManageQueryResVo.setPhone(cooperateManageQueryResDto.getInviteePhone());
                 cooperateManageQueryResVo.setContactsId(cooperateManageQueryResDto.getInviteeContactsId());
                 cooperateManageQueryResVo.setManager(cooperateManageQueryResDto.getInviterContacts());
                 cooperateManageQueryResVo.setManagerPhone(cooperateManageQueryResDto.getInviterPhone());
                 cooperateManageQueryResVo.setManagerId(cooperateManageQueryResDto.getInviterContactsId());
-                cooperateManageQueryResVo.setCooperateTypes(cooperateManageQueryResDto.getTypes());
+
             } else {
                 cooperateManageQueryResVo.setContacts(cooperateManageQueryResDto.getInviterContacts());
                 cooperateManageQueryResVo.setPhone(cooperateManageQueryResDto.getInviterPhone());
@@ -225,18 +247,6 @@ public class CommonBusinessService {
                 cooperateManageQueryResVo.setManager(cooperateManageQueryResDto.getInviteeContacts());
                 cooperateManageQueryResVo.setManagerPhone(cooperateManageQueryResDto.getInviteePhone());
                 cooperateManageQueryResVo.setManagerId(cooperateManageQueryResDto.getInviteeContactsId());
-                cooperateManageQueryResVo.setCooperateTypes(changeCooperateType(cooperateManageQueryResDto.getTypes()));
-            }
-
-            //转换合作属性
-            String types = cooperateManageQueryResDto.getTypes();
-            List<Integer> typeList = Arrays.stream(types.split(Global.COMMA)).map(Integer::parseInt).distinct().toList();
-            if (!Objects.equals(LoginUserHolder.getEntId(), cooperateManageQueryResDto.getEntId())) {
-                List<Integer> targetTypes = new ArrayList<>();
-                for (Integer type : typeList) {
-                    targetTypes.add(changeCooperateType(type));
-                }
-                cooperateManageQueryResVo.setCooperateTypes(String.join(Global.COMMA,targetTypes.stream().distinct().map(String::valueOf).toList()));
             }
 
             result.add(cooperateManageQueryResVo);

+ 37 - 29
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmCooperateApplyService.java

@@ -116,7 +116,6 @@ public class KwmCooperateApplyService {
         allEntIds.addAll(targetEntIds);
         Map<Long, UserCacheResDto> userCacheResDtoMap = remoteSystemService.queryUserCacheMapByIds(userIds);
         List<EntCacheResDto> entCacheResDtos = remoteSystemService.queryEntCacheByIds(allEntIds);
-        Map<Long, String> userMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         Map<Long, String> entMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         if (!CollectionUtils.isEmpty(entCacheResDtos)) {
             entMap = entCacheResDtos.stream().collect(Collectors.toMap(EntCacheResDto::getId, EntCacheResDto::getFirmName, (oldValue, newValue) -> newValue));
@@ -134,13 +133,11 @@ public class KwmCooperateApplyService {
             cooperateManageQueryResVo.setStatus(cooperateManageQueryResDto.getStatus());
 
             UserCacheResDto userCacheResDto = userCacheResDtoMap.get(cooperateManageQueryResDto.getCreateBy());
-            if (Objects.nonNull(userCacheResDto)) {
-                cooperateManageQueryResVo.setCreateByName(userCacheResDto.getName());
-                EntCacheResDto entInfo = userCacheResDto.getEntInfo();
-                if (Objects.nonNull(entInfo)) {
-                    cooperateManageQueryResVo.setApplyTypeCode(entId.equals(entInfo.getId()) ? Global.NUMERICAL_ONE : Global.NUMERICAL_TWO);
-                }
-            }
+            cooperateManageQueryResVo.setCreateByName(userCacheResDto.getName());
+            EntCacheResDto entInfo = userCacheResDto.getEntInfo();
+            boolean isOur = entId.equals(entInfo.getId());
+            cooperateManageQueryResVo.setApplyTypeCode(isOur ? Global.NUMERICAL_ONE : Global.NUMERICAL_TWO);
+
             cooperateManageQueryResVo.setTargetEntName(targetEntName);
             cooperateManageQueryResVo.setTargetEntId(targetEntId);
             cooperateManageQueryResVo.setEntId(cooperateManageQueryResDto.getOurEntId());
@@ -148,7 +145,7 @@ public class KwmCooperateApplyService {
             cooperateManageQueryResVo.setApprovalRemark(cooperateManageQueryResDto.getApprovalRemark());
 
             //我方是发起方
-            if (entId.compareTo(cooperateManageQueryResDto.getEntId()) == 0) {
+            if (isOur) {
                 cooperateManageQueryResVo.setContacts(cooperateManageQueryResDto.getInviteeContacts());
                 cooperateManageQueryResVo.setPhone(cooperateManageQueryResDto.getInviteePhone());
                 cooperateManageQueryResVo.setContactsId(cooperateManageQueryResDto.getInviteeContactsId());
@@ -156,7 +153,6 @@ public class KwmCooperateApplyService {
                 cooperateManageQueryResVo.setManagerPhone(cooperateManageQueryResDto.getInviterPhone());
                 cooperateManageQueryResVo.setManagerId(cooperateManageQueryResDto.getInviterContactsId());
                 cooperateManageQueryResVo.setCooperateTypes(cooperateManageQueryResDto.getTypes());
-
             } else {
                 cooperateManageQueryResVo.setContacts(cooperateManageQueryResDto.getInviterContacts());
                 cooperateManageQueryResVo.setPhone(cooperateManageQueryResDto.getInviterPhone());
@@ -165,7 +161,6 @@ public class KwmCooperateApplyService {
                 cooperateManageQueryResVo.setManagerPhone(cooperateManageQueryResDto.getInviteePhone());
                 cooperateManageQueryResVo.setManagerId(cooperateManageQueryResDto.getInviteeContactsId());
                 cooperateManageQueryResVo.setCooperateTypes(commonBusinessService.changeCooperateType(cooperateManageQueryResDto.getTypes()));
-
             }
 
             result.add(cooperateManageQueryResVo);
@@ -257,30 +252,28 @@ public class KwmCooperateApplyService {
                 }
 
                 for (KwmCooperateType kwmCooperateType : kwmCooperateTypeList) {
-                    if (cooperateQueryDto.getKwmCooperate().getEntId().equals(currentEntId) && kwmCooperateType.getStatus() == CooperateStatusEnum.PROCESS.getCode()) {
+                    if (kwmCooperateType.getStatus().equals(CooperateStatusEnum.PROCESS.getCode())) {
                         throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.MSG_015);
                     }
                 }
 
                 //已合作的可以新增,但不能重复新增
                 List<Integer> typeList = kwmCooperateTypeList.stream().map(KwmCooperateType::getType).toList();
-                if (cooperateQueryDto.getKwmCooperate().getInviterEntId().equals(currentEntId)) {
-                    chooseCooperateTypes.forEach(item -> {
-                        if (typeList.contains(item)) {
-                            throw new SystemException(HttpStatus.CODE_10301, HttpStatus.MSG_016);
-                        }
-                    });
-                }
+                chooseCooperateTypes.forEach(item -> {
+                    if (typeList.contains(item)) {
+                        throw new SystemException(HttpStatus.CODE_10301, HttpStatus.MSG_016);
+                    }
+                });
 
-                //对方发起了与之相对的申请,也不能再申请
-                if (cooperateQueryDto.getKwmCooperate().getInviteeEntId().equals(currentEntId)) {
-                    chooseCooperateTypes.forEach(item -> {
-                        Integer relative = commonBusinessService.changeAttribute(item);
-                        if (typeList.contains(relative)) {
-                            throw new SystemException(HttpStatus.CODE_10301, HttpStatus.MSG_016);
-                        }
-                    });
-                }
+//                //对方发起了与之相对的申请,也不能再申请
+//                if (cooperateQueryDto.getKwmCooperate().getInviteeEntId().equals(currentEntId)) {
+//                    chooseCooperateTypes.forEach(item -> {
+//                        Integer relative = commonBusinessService.changeAttribute(item);
+//                        if (typeList.contains(relative)) {
+//                            throw new SystemException(HttpStatus.CODE_10301, HttpStatus.MSG_016);
+//                        }
+//                    });
+//                }
             }
         }
         //保存发起申请
@@ -448,10 +441,25 @@ public class KwmCooperateApplyService {
         }
 
         List<CooperateQueryDto> list = new ArrayList<>();
+        EntCacheResDto entCacheResDto = remoteSystemService.queryEntTreeById(currentEntId);
+
         for (KwmCooperate kwmCooperate : kwmCooperates) {
             CooperateQueryDto cooperateQueryDto = new CooperateQueryDto();
             cooperateQueryDto.setKwmCooperate(kwmCooperate);
-            cooperateQueryDto.setKwmCooperateTypeList(map.get(kwmCooperate.getId()));
+
+            List<KwmCooperateType> kwmCooperateTypeList = map.get(kwmCooperate.getId());
+            if (CollectionUtils.isNotEmpty(kwmCooperateTypeList)) {
+                List<Long> longs = kwmCooperateTypeList.stream().map(KwmCooperateType::getCreateBy).toList();
+                Map<Long, UserCacheResDto> longUserCacheResDtoMap = remoteSystemService.queryUserCacheMapByIds(longs);
+                for (KwmCooperateType kwmCooperateType : kwmCooperateTypeList) {
+                    Long createBy = kwmCooperateType.getCreateBy();
+                    if (!entCacheResDto.getId().equals(longUserCacheResDtoMap.get(createBy).getEntInfo().getId())) {
+                        kwmCooperateType.setType(commonBusinessService.changeCooperateType(kwmCooperateType.getType()));
+                    }
+                }
+            }
+
+            cooperateQueryDto.setKwmCooperateTypeList(kwmCooperateTypeList);
             list.add(cooperateQueryDto);
         }
 

+ 21 - 9
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmCooperateManageService.java

@@ -423,7 +423,7 @@ public class KwmCooperateManageService {
         Long id = reqVo.getId();
         List<KwmCooperate> kwmCooperates = kwmCooperateMapper.findEntCooperate(reqVo);
         if (CollectionUtils.isEmpty(kwmCooperates)) {
-            return null;
+            return Collections.emptyList();
         }
 
         List<KwmCooperateType> kwmCooperateTypeList = new ArrayList<>();
@@ -517,6 +517,7 @@ public class KwmCooperateManageService {
         LambdaQueryWrapper<KwmCooperateType> wrapper = new LambdaQueryWrapper<>();
         wrapper.in(KwmCooperateType::getCooperateId, cooperateIdList);
         wrapper.eq(KwmCooperateType::getDelFlag, Global.NO);
+        wrapper.eq(KwmCooperateType::getStatus, CooperateStatusEnum.OK.getCode());
         List<KwmCooperateType> kwmCooperateTypes = kwmCooperateTypeMapper.selectList(wrapper);
         Map<Long, List<KwmCooperateType>> collect = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         if (CollectionUtils.isNotEmpty(kwmCooperateTypes)) {
@@ -537,6 +538,7 @@ public class KwmCooperateManageService {
         }
 
         List<FindCooperateByEntResVo> list = new ArrayList<>();
+        List<Integer> cooperateTypeList = new ArrayList<>();
         for (KwmCooperate kwmCooperate : kwmCooperates) {
             FindCooperateByEntResVo findCooperateByEntResVo = new FindCooperateByEntResVo();
             findCooperateByEntResVo.setId(kwmCooperate.getId());
@@ -555,13 +557,24 @@ public class KwmCooperateManageService {
 
 
             Long entId = reqVo.getEntId();
-
-            Map<Long, EntCacheResDto> longEntCacheResDtoMap = remoteSystemService.queryEntTreeByIds(Collections.singletonList(entId));
-            Long topId = longEntCacheResDtoMap.get(entId).getId();
+            Map<Long, EntCacheResDto> entCacheResDtoMap = remoteSystemService.queryEntTreeByIds(Collections.singletonList(entId));
+            Long topId = entCacheResDtoMap.get(entId).getId();
             //设置合作属性
-            List<KwmCooperateType> kwmCooperateTypes1 = collect.get(kwmCooperate.getId());
-            String cooperateTypes = String.join(Global.COMMA, kwmCooperateTypes1.stream().map(KwmCooperateType::getType).map(String::valueOf).toList());
-
+            List<KwmCooperateType> kwmCooperateTypeList = collect.get(kwmCooperate.getId());
+            List<Long> userIds = kwmCooperateTypeList.stream().map(KwmCooperateType::getCreateBy).toList();
+            Map<Long, UserCacheResDto> userCacheResDtoMap = remoteSystemService.queryUserCacheMapByIds(userIds);
+            for (KwmCooperateType kwmCooperateType : kwmCooperateTypeList) {
+                Long createBy = kwmCooperateType.getCreateBy();
+                UserCacheResDto userCacheResDto = userCacheResDtoMap.get(createBy);
+                Long id = userCacheResDto.getEntInfo().getId();
+                if (id.equals(topId)) {
+                    cooperateTypeList.add(kwmCooperateType.getType());
+                } else {
+                    cooperateTypeList.add(commonBusinessService.changeCooperateType(kwmCooperateType.getType()));
+                }
+            }
+            String cooperateTypes = String.join(Global.COMMA, cooperateTypeList.stream().map(String::valueOf).distinct().toList());
+            findCooperateByEntResVo.setCooperateTypes(cooperateTypes);
             //设置我方和对方企业信息、联系人
             if (topId.equals(kwmCooperate.getEntId())) {
                 findCooperateByEntResVo.setEntId(kwmCooperate.getInviterEntId());
@@ -574,7 +587,6 @@ public class KwmCooperateManageService {
                 findCooperateByEntResVo.setTargetContactsId(kwmCooperate.getInviteeContactsId());
                 findCooperateByEntResVo.setTargetContacts(kwmCooperate.getInviteeContacts());
                 findCooperateByEntResVo.setTargetPhone(kwmCooperate.getInviteePhone());
-                findCooperateByEntResVo.setCooperateTypes(cooperateTypes);
             } else {
                 findCooperateByEntResVo.setEntId(kwmCooperate.getInviteeEntId());
                 findCooperateByEntResVo.setEntName(inviteeEntName);
@@ -586,9 +598,9 @@ public class KwmCooperateManageService {
                 findCooperateByEntResVo.setTargetContactsId(kwmCooperate.getInviterContactsId());
                 findCooperateByEntResVo.setTargetContacts(kwmCooperate.getInviterContacts());
                 findCooperateByEntResVo.setTargetPhone(kwmCooperate.getInviterPhone());
-                findCooperateByEntResVo.setCooperateTypes(commonBusinessService.changeCooperateType(cooperateTypes));
             }
             list.add(findCooperateByEntResVo);
+            cooperateTypeList.clear();
         }
         return list;
     }

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

@@ -134,7 +134,7 @@
     <select id="findManageList" resultType="com.sckw.manage.model.dto.res.CooperateManageQueryResDto">
         SELECT a.id,
                 min(a.status) status,
-                group_concat(b.type) types,
+                group_concat(concat(b.type, '#', b.create_by)) types,
                 min(a.ent_id) entId,
                 min(a.invitee_ent_id) inviteeEntId,
                 min(a.inviter_ent_id) inviterEntId,
@@ -146,6 +146,7 @@
                 min(a.inviter_phone) inviterPhone,
                 min(b.create_time) createTime,
                 min(b.create_by) createBy,
+                group_concat(b.create_by) createByStr,
                 min(a.remark) remark,
                 min(a.approval_remark) approvalRemark,
                 case when min(a.ent_id) = #{reqDto.currentEntId} then min(a.invitee_ent_id) else min(a.inviter_ent_id) end targetEntId,

+ 1 - 1
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/res/KwmMessageListResVO.java

@@ -59,7 +59,7 @@ public class KwmMessageListResVO implements Serializable {
     /**
      * 提交人
      */
-    private Long creatBy;
+    private Long createBy;
 
     /**
      * 提交人姓名

+ 46 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/enums/TransportDemandStatusEnum.java

@@ -0,0 +1,46 @@
+package com.sckw.order.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * @desc: 运需状态枚举
+ * @author: yzc
+ * @date: 2023-09-19 9:42
+ */
+@AllArgsConstructor
+@Getter
+public enum TransportDemandStatusEnum {
+
+    /**
+     * 运需状态枚举
+     */
+    SAVED(0, "已保存"),
+    PUT_ON_SHELVES(1, "已上架"),
+    TAKE_OFF_SHELVES(2, "已下架");
+
+    private final Integer code;
+    private final String msg;
+
+
+    public static String getNameByCode(Integer code) {
+        TransportDemandStatusEnum[] enums = TransportDemandStatusEnum.values();
+        for (TransportDemandStatusEnum instance : enums) {
+            if (Objects.equals(instance.getCode(), code)) {
+                return instance.getMsg();
+            }
+        }
+        return null;
+    }
+
+    public static List<TransportDemandStatusEnum> getSortList() {
+        TransportDemandStatusEnum[] enums = TransportDemandStatusEnum.values();
+        return Arrays.stream(enums).sorted(Comparator.comparingInt(TransportDemandStatusEnum::getCode)).collect(Collectors.toList());
+    }
+}

+ 2 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/enums/WantBuyStatusEnum.java

@@ -19,10 +19,10 @@ import java.util.stream.Collectors;
 public enum WantBuyStatusEnum {
 
     /**
-     * 产品状态枚举
+     * 求购状态枚举
      */
     SAVED(0, "已保存"),
-    PUT_ON_SHELVES(1, "上架"),
+    PUT_ON_SHELVES(1, "上架"),
     TAKE_OFF_SHELVES(2, "已下架");
 
     private final Integer code;

+ 77 - 22
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTransportDemandService.java

@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.Lists;
-import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
@@ -21,6 +20,7 @@ import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.excel.utils.DateUtil;
 import com.sckw.order.dao.KwoTransportDemandMapper;
+import com.sckw.order.enums.TransportDemandStatusEnum;
 import com.sckw.order.model.KwoTransportDemand;
 import com.sckw.order.model.dto.TransportDemandExport;
 import com.sckw.order.model.vo.req.*;
@@ -65,7 +65,7 @@ public class KwoTransportDemandService {
      */
     public void addDraft(AddTransportDemandDraftParam param) {
         KwoTransportDemand transportDemand = BeanUtils.copyProperties(param, KwoTransportDemand.class);
-        transportDemand.setEntId(LoginUserHolder.getEntId()).setStatus(Integer.valueOf(DictEnum.TRANSPORT_DEMAND_STATUS_0.getValue()));
+        transportDemand.setEntId(LoginUserHolder.getEntId()).setStatus(TransportDemandStatusEnum.SAVED.getCode());
         kwoTransportDemandMapper.insert(transportDemand);
     }
 
@@ -78,7 +78,7 @@ public class KwoTransportDemandService {
      */
     public void addShelves(AddTransportDemandParam param) {
         KwoTransportDemand transportDemand = BeanUtils.copyProperties(param, KwoTransportDemand.class);
-        transportDemand.setEntId(LoginUserHolder.getEntId()).setStatus(Integer.valueOf(DictEnum.TRANSPORT_DEMAND_STATUS_1.getValue()));
+        transportDemand.setEntId(LoginUserHolder.getEntId()).setStatus(TransportDemandStatusEnum.PUT_ON_SHELVES.getCode());
         kwoTransportDemandMapper.insert(transportDemand);
     }
 
@@ -94,10 +94,25 @@ public class KwoTransportDemandService {
         if (Objects.isNull(transportDemand)) {
             throw new BusinessException("数据不存在!");
         }
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.PRODUCT_NAME_TYPE.getType(),
+                DictTypeEnum.TRADE_TYPE.getType(), DictTypeEnum.TRANSPORT_DEMAND_STATUS.getType()));
+        Map<String, String> productNameMap, tradeMap, statusMap;
+        if (CollectionUtils.isEmpty(dict)) {
+            productNameMap = new HashMap<>();
+            tradeMap = new HashMap<>();
+            statusMap = new HashMap<>();
+        } else {
+            productNameMap = CollectionUtils.isEmpty(dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType())) ?
+                    new HashMap<>() : dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType());
+            tradeMap = CollectionUtils.isEmpty(dict.get(DictTypeEnum.TRADE_TYPE.getType())) ?
+                    new HashMap<>() : dict.get(DictTypeEnum.TRADE_TYPE.getType());
+            statusMap = CollectionUtils.isEmpty(dict.get(DictTypeEnum.TRANSPORT_DEMAND_STATUS.getType())) ?
+                    new HashMap<>() : dict.get(DictTypeEnum.TRANSPORT_DEMAND_STATUS.getType());
+        }
         TransportDemandDetailRes res = BeanUtils.copyProperties(transportDemand, TransportDemandDetailRes.class);
-        res.setGoodsTypeLabel(DictEnum.getLabel(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), res.getGoodsType()))
-                .setTradingLabel(DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), res.getTrading()))
-                .setStatusLabel(DictEnum.getLabel(DictTypeEnum.TRANSPORT_DEMAND_STATUS.getType(), String.valueOf(res.getStatus())));
+        res.setGoodsTypeLabel(productNameMap.get(res.getGoodsType()))
+                .setTradingLabel(tradeMap.get(res.getTrading()))
+                .setStatusLabel(statusMap.get(String.valueOf(res.getStatus())));
         return res;
     }
 
@@ -193,6 +208,21 @@ public class KwoTransportDemandService {
         List<EntCacheResDto> entList = remoteSystemService.queryEntCacheByIds(supplyEntIds);
         Map<Long, String> entMap = entList.stream().collect(Collectors.toMap(EntCacheResDto::getId, EntCacheResDto::getFirmName, (k1, k2) -> k1));
 
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.PRODUCT_NAME_TYPE.getType(),
+                DictTypeEnum.TRADE_TYPE.getType(), DictTypeEnum.TRANSPORT_DEMAND_STATUS.getType()));
+        Map<String, String> productNameMap, tradeMap, statusMap;
+        if (CollectionUtils.isNotEmpty(dict)) {
+            productNameMap = CollectionUtils.isNotEmpty(dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType())) ?
+                    dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType()) : new HashMap<>();
+            tradeMap = CollectionUtils.isNotEmpty(dict.get(DictTypeEnum.TRADE_TYPE.getType())) ?
+                    dict.get(DictTypeEnum.TRADE_TYPE.getType()) : new HashMap<>();
+            statusMap = CollectionUtils.isNotEmpty(dict.get(DictTypeEnum.TRANSPORT_DEMAND_STATUS.getType())) ?
+                    dict.get(DictTypeEnum.TRANSPORT_DEMAND_STATUS.getType()) : new HashMap<>();
+        } else {
+            productNameMap = new HashMap<>();
+            tradeMap = new HashMap<>();
+            statusMap = new HashMap<>();
+        }
         List<TransportDemandListRes> result = Lists.newArrayList();
         list.forEach(e -> {
             TransportDemandListRes demand = BeanUtils.copyProperties(e, TransportDemandListRes.class);
@@ -200,9 +230,9 @@ public class KwoTransportDemandService {
             String loadDetailAddress = Objects.nonNull(e.getLoadDetailAddress()) ? e.getLoadDetailAddress() : "";
             String unloadAreaName = Objects.nonNull(e.getUnloadAreaName()) ? e.getUnloadAreaName() : "";
             String unloadDetailAddress = Objects.nonNull(e.getUnloadDetailAddress()) ? e.getUnloadDetailAddress() : "";
-            demand.setGoodsTypeLabel(DictEnum.getLabel(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), e.getGoodsType()))
-                    .setTradingLabel(DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), e.getTrading()))
-                    .setStatusLabel(DictEnum.getLabel(DictTypeEnum.TRANSPORT_DEMAND_STATUS.getType(), String.valueOf(e.getStatus())))
+            demand.setGoodsTypeLabel(productNameMap.get(e.getGoodsType()))
+                    .setTradingLabel(tradeMap.get(e.getTrading()))
+                    .setStatusLabel(statusMap.get(String.valueOf(e.getStatus())))
                     .setLoadAddress(loadAreaName + loadDetailAddress)
                     .setUnloadAddress(unloadAreaName + unloadDetailAddress)
                     .setEntName(entMap.get(e.getEntId()));
@@ -278,9 +308,9 @@ public class KwoTransportDemandService {
         all.setName("全部").setTotal(CollectionUtils.isEmpty(demands) ? 0 : demands.size());
         tableTops.add(all);
 
-        List<DictEnum> enums = DictEnum.getEnumsByType(DictTypeEnum.TRANSPORT_DEMAND_STATUS.getType());
+        List<TransportDemandStatusEnum> enums = TransportDemandStatusEnum.getSortList();
         enums.forEach(e -> {
-            Integer value = Integer.valueOf(e.getValue());
+            Integer value = e.getCode();
             Integer systemType = LoginUserHolder.getSystemType();
             if (Objects.equals(systemType, SystemTypeEnum.MANAGE.getCode()) && Objects.equals(value, Global.NO)) {
                 return;
@@ -288,7 +318,7 @@ public class KwoTransportDemandService {
             List<KwoTransportDemand> list = map.get(value);
             int total = CollectionUtils.isEmpty(list) ? 0 : list.size();
             TableTop tableTop = new TableTop();
-            tableTop.setName(e.getLabel()).setValue(value).setTotal(total);
+            tableTop.setName(e.getMsg()).setValue(value).setTotal(total);
             tableTops.add(tableTop);
 
         });
@@ -319,18 +349,30 @@ public class KwoTransportDemandService {
         List<EntCacheResDto> entList = remoteSystemService.queryEntCacheByIds(supplyEntIds);
         Map<Long, String> entMap = entList.stream().collect(Collectors.toMap(EntCacheResDto::getId, EntCacheResDto::getFirmName, (k1, k2) -> k1));
 
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.PRODUCT_NAME_TYPE.getType(),
+                DictTypeEnum.TRANSPORT_DEMAND_STATUS.getType()));
+        Map<String, String> productNameMap, statusMap;
+        if (CollectionUtils.isEmpty(dict)) {
+            productNameMap = new HashMap<>();
+            statusMap = new HashMap<>();
+        } else {
+            productNameMap = CollectionUtils.isEmpty(dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType())) ?
+                    new HashMap<>() : dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType());
+            statusMap = CollectionUtils.isEmpty(dict.get(DictTypeEnum.TRANSPORT_DEMAND_STATUS.getType())) ?
+                    new HashMap<>() : dict.get(DictTypeEnum.TRANSPORT_DEMAND_STATUS.getType());
+        }
         List<TransportDemandExport> result = Lists.newArrayList();
         AtomicInteger i = new AtomicInteger(1);
         demands.forEach(e -> {
             TransportDemandExport export = BeanUtils.copyProperties(e, TransportDemandExport.class);
-            export.setGoodsTypeLabel(DictEnum.getLabel(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), e.getGoodsType()))
-                    .setStatusLabel(DictEnum.getLabel(DictTypeEnum.TRANSPORT_DEMAND_STATUS.getType(), String.valueOf(e.getStatus())))
+            export.setGoodsTypeLabel(productNameMap.get(e.getGoodsType()))
+                    .setStatusLabel(statusMap.get(String.valueOf(e.getStatus())))
                     .setLoadAddress(e.getLoadAreaName() + e.getLoadDetailAddress()).setSerialNumber(String.valueOf(i.getAndIncrement()))
                     .setUnloadAddress(e.getUnloadAreaName() + e.getUnloadDetailAddress())
                     .setDeadline(Objects.isNull(e.getDeadline()) ? null : DateUtil.dateToStr(e.getDeadline()))
                     .setCreateTime(Objects.isNull(e.getCreateTime()) ? null : DateUtil.getDateTime(e.getCreateTime()))
                     .setUpdateTime(Objects.isNull(e.getUpdateTime()) ? null : DateUtil.getDateTime(e.getUpdateTime()))
-                    .setEntName(entMap != null ? entMap.get(e.getEntId()) : null);
+                    .setEntName(entMap.get(e.getEntId()));
             result.add(export);
         });
         return result;
@@ -346,14 +388,14 @@ public class KwoTransportDemandService {
     public void batchPutOnShelves(List<Long> ids) {
         LambdaQueryWrapper<KwoTransportDemand> wrapper = new LambdaQueryWrapper<>();
         wrapper.in(KwoTransportDemand::getId, ids)
-                .ne(KwoTransportDemand::getStatus, Integer.valueOf(DictEnum.TRANSPORT_DEMAND_STATUS_1.getValue()))
+                .ne(KwoTransportDemand::getStatus, TransportDemandStatusEnum.PUT_ON_SHELVES.getCode())
                 .eq(KwoTransportDemand::getEntId, LoginUserHolder.getEntId()).eq(KwoTransportDemand::getDelFlag, Global.NO);
         List<KwoTransportDemand> list = kwoTransportDemandMapper.selectList(wrapper);
         if (!Objects.equals(ids.size(), list.size())) {
             throw new BusinessException("上架操作仅针对“已下架”“草稿”状态的单据!");
         }
         LambdaUpdateWrapper<KwoTransportDemand> updateWrapper = new LambdaUpdateWrapper<>();
-        updateWrapper.set(KwoTransportDemand::getStatus, Integer.valueOf(DictEnum.TRANSPORT_DEMAND_STATUS_1.getValue()))
+        updateWrapper.set(KwoTransportDemand::getStatus, TransportDemandStatusEnum.PUT_ON_SHELVES.getCode())
                 .in(KwoTransportDemand::getId, ids);
         kwoTransportDemandMapper.update(null, updateWrapper);
     }
@@ -368,14 +410,14 @@ public class KwoTransportDemandService {
     public void batchTakeOffShelves(List<Long> ids) {
         LambdaQueryWrapper<KwoTransportDemand> wrapper = new LambdaQueryWrapper<>();
         wrapper.in(KwoTransportDemand::getId, ids)
-                .eq(KwoTransportDemand::getStatus, Integer.valueOf(DictEnum.TRANSPORT_DEMAND_STATUS_1.getValue()))
+                .eq(KwoTransportDemand::getStatus, TransportDemandStatusEnum.PUT_ON_SHELVES.getCode())
                 .eq(KwoTransportDemand::getEntId, LoginUserHolder.getEntId()).eq(KwoTransportDemand::getDelFlag, Global.NO);
         List<KwoTransportDemand> list = kwoTransportDemandMapper.selectList(wrapper);
         if (!Objects.equals(ids.size(), list.size())) {
             throw new BusinessException("下架操作仅针对“已上架”状态的单据");
         }
         LambdaUpdateWrapper<KwoTransportDemand> updateWrapper = new LambdaUpdateWrapper<>();
-        updateWrapper.set(KwoTransportDemand::getStatus, Integer.valueOf(DictEnum.TRANSPORT_DEMAND_STATUS_2.getValue()))
+        updateWrapper.set(KwoTransportDemand::getStatus, TransportDemandStatusEnum.TAKE_OFF_SHELVES.getCode())
                 .in(KwoTransportDemand::getId, ids);
         kwoTransportDemandMapper.update(null, updateWrapper);
     }
@@ -417,7 +459,7 @@ public class KwoTransportDemandService {
                 wrapper.in(KwoTransportDemand::getGoodsType, goodsTypes);
             }
         }
-        wrapper.eq(KwoTransportDemand::getStatus, Integer.valueOf(DictEnum.TRANSPORT_DEMAND_STATUS_1.getValue()))
+        wrapper.eq(KwoTransportDemand::getStatus, TransportDemandStatusEnum.PUT_ON_SHELVES.getCode())
                 .eq(KwoTransportDemand::getDelFlag, Global.NO);
         Integer loadCode = param.getLoadAreaCode();
         if (Objects.nonNull(loadCode) && Objects.nonNull(param.getLoadAreaLevel())) {
@@ -456,12 +498,25 @@ public class KwoTransportDemandService {
         }
         List<Long> entIds = list.stream().map(KwoTransportDemand::getEntId).toList();
         Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntCacheMapByIds(entIds);
+
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.PRODUCT_NAME_TYPE.getType(),
+                DictTypeEnum.TRADE_TYPE.getType()));
+        Map<String, String> productNameMap, tradeMap;
+        if (CollectionUtils.isEmpty(dict)) {
+            productNameMap = new HashMap<>();
+            tradeMap = new HashMap<>();
+        } else {
+            productNameMap = CollectionUtils.isEmpty(dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType())) ?
+                    new HashMap<>() : dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType());
+            tradeMap = CollectionUtils.isEmpty(dict.get(DictTypeEnum.TRADE_TYPE.getType())) ?
+                    new HashMap<>() : dict.get(DictTypeEnum.TRADE_TYPE.getType());
+        }
         List<TransportDemandSquaresListRes> result = Lists.newArrayList();
         list.forEach(e -> {
             TransportDemandSquaresListRes res = BeanUtils.copyProperties(e, TransportDemandSquaresListRes.class);
             EntCacheResDto ent = entMap.get(e.getEntId());
-            res.setGoodsTypeLabel(DictEnum.getLabel(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), e.getGoodsType()))
-                    .setTradingLabel(DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), e.getTrading()))
+            res.setGoodsTypeLabel(productNameMap.get(e.getGoodsType()))
+                    .setTradingLabel(tradeMap.get(e.getTrading()))
                     .setLoadAddress(e.getLoadAreaName() + e.getLoadDetailAddress())
                     .setUnloadAddress(e.getUnloadAreaName() + e.getUnloadDetailAddress())
                     .setCreateTime(DateUtils.format(e.getCreateTime()))

+ 84 - 26
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwpWantBuyService.java

@@ -4,7 +4,6 @@ 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.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
@@ -21,6 +20,7 @@ import com.sckw.excel.utils.DateUtil;
 import com.sckw.order.dao.KwpWantBuyAddressMapper;
 import com.sckw.order.dao.KwpWantBuyMapper;
 import com.sckw.order.dao.KwpWantBuyTradingMapper;
+import com.sckw.order.enums.WantBuyStatusEnum;
 import com.sckw.order.model.KwoWantBuy;
 import com.sckw.order.model.KwoWantBuyAddress;
 import com.sckw.order.model.KwoWantBuyTrading;
@@ -92,7 +92,7 @@ public class KwpWantBuyService {
                 wantBuySelectParam.setEntIds(entIds);
             }
         }
-        wantBuySelectParam.setStatus(Integer.valueOf(DictEnum.WANT_BUY_STATUS_1.getValue()));
+        wantBuySelectParam.setStatus(WantBuyStatusEnum.PUT_ON_SHELVES.getCode());
 
         // 分页查询求购列表
         PageHelper.startPage(wantBuySelectParam.getPage(), wantBuySelectParam.getPageSize());
@@ -112,14 +112,29 @@ public class KwpWantBuyService {
         Map<Long, String> entMap = entList.stream()
                 .collect(Collectors.toMap(EntCacheResDto::getId, EntCacheResDto::getFirmName, (k1, k2) -> k1));
 
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.TRADE_TYPE.getType(),
+                DictTypeEnum.PRODUCT_NAME_TYPE.getType(), DictTypeEnum.GOODS_STATUS.getType()));
+        Map<String, String> tradeMap, productNameMap, goodsStatusMap;
+        if (CollectionUtils.isNotEmpty(dict)) {
+            tradeMap = CollectionUtils.isNotEmpty(dict.get(DictTypeEnum.TRADE_TYPE.getType())) ?
+                    dict.get(DictTypeEnum.TRADE_TYPE.getType()) : new HashMap<>();
+            productNameMap = CollectionUtils.isNotEmpty(dict.get(DictTypeEnum.TRADE_TYPE.getType())) ?
+                    dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType()) : new HashMap<>();
+            goodsStatusMap = CollectionUtils.isNotEmpty(dict.get(DictTypeEnum.TRADE_TYPE.getType())) ?
+                    dict.get(DictTypeEnum.GOODS_STATUS.getType()) : new HashMap<>();
+        } else {
+            tradeMap = new HashMap<>();
+            productNameMap = new HashMap<>();
+            goodsStatusMap = new HashMap<>();
+        }
         // 对求购列表进行数据处理
         res.forEach(e -> {
             List<String> tradings = e.getWantBuyTradings().stream()
-                    .map(f -> DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), f.getTrading()))
+                    .map(f -> tradeMap.get(f.getTrading()))
                     .collect(Collectors.toList());
             e.setTradings(String.join(Global.COMMA, tradings));
-            e.setGoodsTypeLabel(DictEnum.getLabel(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), e.getGoodsType()));
-            e.setStatusLabel(DictEnum.getLabel(DictTypeEnum.GOODS_STATUS.getType(), String.valueOf(e.getStatus())));
+            e.setGoodsTypeLabel(productNameMap.get(e.getGoodsType()));
+            e.setStatusLabel(goodsStatusMap.get(String.valueOf(e.getStatus())));
             e.setEntName(Objects.nonNull(entMap.get(e.getEntId())) ? entMap.get(e.getEntId()) : null);
         });
 
@@ -157,14 +172,29 @@ public class KwpWantBuyService {
         List<EntCacheResDto> entList = remoteSystemService.queryEntCacheByIds(supplyEntIds);
         Map<Long, String> entMap = entList.stream()
                 .collect(Collectors.toMap(EntCacheResDto::getId, EntCacheResDto::getFirmName, (k1, k2) -> k1));
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.TRADE_TYPE.getType(),
+                DictTypeEnum.PRODUCT_NAME_TYPE.getType(), DictTypeEnum.GOODS_STATUS.getType()));
+        Map<String, String> tradeMap, productNameMap, goodsStatusMap;
+        if (CollectionUtils.isEmpty(dict)) {
+            tradeMap = new HashMap<>();
+            productNameMap = new HashMap<>();
+            goodsStatusMap = new HashMap<>();
+        } else {
+            tradeMap = CollectionUtils.isEmpty(dict.get(DictTypeEnum.TRADE_TYPE.getType())) ?
+                    new HashMap<>() : dict.get(DictTypeEnum.TRADE_TYPE.getType());
+            productNameMap = CollectionUtils.isEmpty(dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType())) ?
+                    new HashMap<>() : dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType());
+            goodsStatusMap = CollectionUtils.isEmpty(dict.get(DictTypeEnum.GOODS_STATUS.getType())) ?
+                    new HashMap<>() : dict.get(DictTypeEnum.GOODS_STATUS.getType());
+        }
         //把查询出来的集合wantBuyTradings里面对的tranding 转成字符串放在String里面
         wantBuyDto.forEach(wantBuySelectRes -> {
             List<String> tradings = wantBuySelectRes.getWantBuyTradings().stream()
-                    .map(wantBuyTradingRes -> DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), wantBuyTradingRes.getTrading()))
+                    .map(wantBuyTradingRes -> tradeMap.get(wantBuyTradingRes.getTrading()))
                     .collect(Collectors.toList());
             wantBuySelectRes.setTradings(String.join(Global.COMMA, tradings));
-            wantBuySelectRes.setGoodsTypeLabel(DictEnum.getLabel(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), wantBuySelectRes.getGoodsType()));
-            wantBuySelectRes.setStatusLabel(DictEnum.getLabel(DictTypeEnum.GOODS_STATUS.getType(), String.valueOf(wantBuySelectRes.getStatus())));
+            wantBuySelectRes.setGoodsTypeLabel(productNameMap.get(wantBuySelectRes.getGoodsType()));
+            wantBuySelectRes.setStatusLabel(goodsStatusMap.get(String.valueOf(wantBuySelectRes.getStatus())));
             wantBuySelectRes.setEntName(Objects.nonNull(entMap.get(wantBuySelectRes.getEntId())) ? entMap.get(wantBuySelectRes.getEntId()) : null);
         });
 
@@ -206,8 +236,7 @@ public class KwpWantBuyService {
      **/
     @Transactional(rollbackFor = Exception.class)
     public void addDraft(AddDraftWantBuyParam param) {
-        Integer status = Integer.valueOf(DictEnum.WANT_BUY_STATUS_0.getValue());
-        addWantBuy(BeanUtils.copyProperties(param, AddWantBuyParam.class), status);
+        addWantBuy(BeanUtils.copyProperties(param, AddWantBuyParam.class), WantBuyStatusEnum.SAVED.getCode());
     }
 
     /**
@@ -219,8 +248,7 @@ public class KwpWantBuyService {
      **/
     @Transactional(rollbackFor = Exception.class)
     public void addShelves(AddWantBuyParam param) {
-        Integer status = Integer.valueOf(DictEnum.WANT_BUY_STATUS_1.getValue());
-        addWantBuy(param, status);
+        addWantBuy(param, WantBuyStatusEnum.PUT_ON_SHELVES.getCode());
     }
 
     /**
@@ -263,14 +291,14 @@ public class KwpWantBuyService {
      **/
     public void batchPutOnShelves(List<Long> ids) {
         LambdaQueryWrapper<KwoWantBuy> wrapper = new LambdaQueryWrapper<>();
-        wrapper.in(KwoWantBuy::getId, ids).ne(KwoWantBuy::getStatus, Integer.valueOf(DictEnum.WANT_BUY_STATUS_1.getValue()))
+        wrapper.in(KwoWantBuy::getId, ids).ne(KwoWantBuy::getStatus, WantBuyStatusEnum.PUT_ON_SHELVES.getCode())
                 .eq(KwoWantBuy::getEntId, LoginUserHolder.getEntId()).eq(KwoWantBuy::getDelFlag, Global.NO);
         List<KwoWantBuy> list = kwpWantBuyMapper.selectList(wrapper);
         if (!Objects.equals(ids.size(), list.size())) {
             throw new BusinessException("上架操作仅针对“已下架”“草稿”状态的单据!");
         }
         LambdaUpdateWrapper<KwoWantBuy> updateWrapper = new LambdaUpdateWrapper<>();
-        updateWrapper.set(KwoWantBuy::getStatus, Integer.valueOf(DictEnum.WANT_BUY_STATUS_1.getValue()))
+        updateWrapper.set(KwoWantBuy::getStatus, WantBuyStatusEnum.PUT_ON_SHELVES.getCode())
                 .in(KwoWantBuy::getId, ids);
         kwpWantBuyMapper.update(null, updateWrapper);
     }
@@ -283,14 +311,14 @@ public class KwpWantBuyService {
     public void batchTakeOffShelves(WantBuyDels param) {
         List<Long> ids = StringUtils.splitStrToList(param.getIds(), Long.class);
         LambdaQueryWrapper<KwoWantBuy> wrapper = new LambdaQueryWrapper<>();
-        wrapper.in(KwoWantBuy::getId, ids).eq(KwoWantBuy::getStatus, Integer.valueOf(DictEnum.WANT_BUY_STATUS_1.getValue()))
+        wrapper.in(KwoWantBuy::getId, ids).eq(KwoWantBuy::getStatus, WantBuyStatusEnum.PUT_ON_SHELVES.getCode())
                 .eq(KwoWantBuy::getEntId, LoginUserHolder.getEntId()).eq(KwoWantBuy::getDelFlag, Global.NO);
         List<KwoWantBuy> list = kwpWantBuyMapper.selectList(wrapper);
         if (!Objects.equals(ids.size(), list.size())) {
             throw new BusinessException("下架操作仅针对“已上架”状态的单据");
         }
         LambdaUpdateWrapper<KwoWantBuy> updateWrapper = new LambdaUpdateWrapper<>();
-        updateWrapper.set(KwoWantBuy::getStatus, Integer.valueOf(DictEnum.WANT_BUY_STATUS_2.getValue())).in(KwoWantBuy::getId, ids);
+        updateWrapper.set(KwoWantBuy::getStatus, WantBuyStatusEnum.TAKE_OFF_SHELVES.getCode()).in(KwoWantBuy::getId, ids);
         kwpWantBuyMapper.update(null, updateWrapper);
     }
 
@@ -331,14 +359,32 @@ public class KwpWantBuyService {
             throw new BusinessException("求购信息不存在");
         }
         WantBuyDetailRes responseData = BeanUtils.copyProperties(kwoWantBuy, WantBuyDetailRes.class);
-        responseData.setGoodsTypeLabel(DictEnum.getLabel(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), responseData.getGoodsType()))
-                .setStatusLabel(DictEnum.getLabel(DictTypeEnum.WANT_BUY_STATUS.getType(), String.valueOf(responseData.getStatus())));
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.PRODUCT_NAME_TYPE.getType(),
+                DictTypeEnum.WANT_BUY_STATUS.getType(), DictTypeEnum.TORDER_ADDRESS_TYPE.getType(), DictTypeEnum.TRADE_TYPE.getType()));
+        Map<String, String> productNameMap, wantBuyStatusMap, orderAddressMap, tradeMap;
+        if (CollectionUtils.isEmpty(dict)) {
+            productNameMap = new HashMap<>();
+            wantBuyStatusMap = new HashMap<>();
+            orderAddressMap = new HashMap<>();
+            tradeMap = new HashMap<>();
+        } else {
+            productNameMap = CollectionUtils.isEmpty(dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType())) ?
+                    new HashMap<>() : dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType());
+            wantBuyStatusMap = CollectionUtils.isEmpty(dict.get(DictTypeEnum.WANT_BUY_STATUS.getType())) ?
+                    new HashMap<>() : dict.get(DictTypeEnum.WANT_BUY_STATUS.getType());
+            orderAddressMap = CollectionUtils.isEmpty(dict.get(DictTypeEnum.TORDER_ADDRESS_TYPE.getType())) ?
+                    new HashMap<>() : dict.get(DictTypeEnum.TORDER_ADDRESS_TYPE.getType());
+            tradeMap = CollectionUtils.isEmpty(dict.get(DictTypeEnum.TRADE_TYPE.getType())) ?
+                    new HashMap<>() : dict.get(DictTypeEnum.TRADE_TYPE.getType());
+        }
+        responseData.setGoodsTypeLabel(productNameMap.get(responseData.getGoodsType()))
+                .setStatusLabel(wantBuyStatusMap.get(String.valueOf(responseData.getStatus())));
         //求购地址信息
         KwoWantBuyAddress address = kwpWantBuyAddressMapper.selectOne(new LambdaQueryWrapper<KwoWantBuyAddress>()
                 .eq(KwoWantBuyAddress::getWantBuyId, id).eq(KwoWantBuyAddress::getDelFlag, Global.NO).last("LIMIT 1"));
         if (Objects.nonNull(address)) {
             WantBuyAddressDetailRes wantBuyAddressInfo = BeanUtils.copyProperties(address, WantBuyAddressDetailRes.class);
-            wantBuyAddressInfo.setTypeLabel(DictEnum.getLabel(DictTypeEnum.TORDER_ADDRESS_TYPE.getType(), wantBuyAddressInfo.getType()));
+            wantBuyAddressInfo.setTypeLabel(orderAddressMap.get(wantBuyAddressInfo.getType()));
             responseData.setAddressInfo(wantBuyAddressInfo);
         }
         //获取求购企业信息
@@ -353,7 +399,7 @@ public class KwpWantBuyService {
             responseData.setTradings(tradings);
             //改成stream流的方式
             List<String> result = tradings.stream()
-                    .map(trading -> DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), trading))
+                    .map(tradeMap::get)
                     .collect(Collectors.toList());
             String tradingLabels = String.join(Global.COMMA, result);
             //获取到的是一个集合,需要转换成字符串
@@ -454,9 +500,9 @@ public class KwpWantBuyService {
         TableTop all = new TableTop();
         all.setName("全部").setTotal(CollectionUtils.isEmpty(result) ? 0 : result.size());
         tableTops.add(all);
-        List<DictEnum> enums = DictEnum.getEnumsByType(DictTypeEnum.WANT_BUY_STATUS.getType());
+        List<WantBuyStatusEnum> enums = WantBuyStatusEnum.getSortList();
         enums.forEach(e -> {
-            Integer value = Integer.valueOf(e.getValue());
+            Integer value = e.getCode();
             Integer systemType = LoginUserHolder.getSystemType();
             if (Objects.equals(systemType, SystemTypeEnum.MANAGE.getCode()) && Objects.equals(value, Global.NO)) {
                 return;
@@ -464,7 +510,7 @@ public class KwpWantBuyService {
             List<WantBuySelectRes> list = map.get(value);
             int total = CollectionUtils.isEmpty(list) ? 0 : list.size();
             TableTop tableTop = new TableTop();
-            tableTop.setName(e.getLabel()).setValue(value).setTotal(total);
+            tableTop.setName(e.getMsg()).setValue(value).setTotal(total);
             tableTops.add(tableTop);
         });
         TableBottom tableBottom = new TableBottom();
@@ -497,15 +543,27 @@ public class KwpWantBuyService {
         if (CollectionUtils.isEmpty(wantBuyDto)) {
             return Collections.emptyList();
         }
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.TRADE_TYPE.getType(),
+                DictTypeEnum.PRODUCT_NAME_TYPE.getType()));
+        Map<String, String> tradeMap, productNameMap;
+        if (CollectionUtils.isEmpty(dict)) {
+            tradeMap = new HashMap<>();
+            productNameMap = new HashMap<>();
+        } else {
+            tradeMap = CollectionUtils.isEmpty(dict.get(DictTypeEnum.TRADE_TYPE.getType())) ?
+                    new HashMap<>() : dict.get(DictTypeEnum.TRADE_TYPE.getType());
+            productNameMap = CollectionUtils.isEmpty(dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType())) ?
+                    new HashMap<>() : dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType());
+        }
         List<WantBuyExport> result = new ArrayList<>();
         AtomicInteger i = new AtomicInteger(1);
         wantBuyDto.forEach(e -> {
             WantBuyExport export = BeanUtils.copyProperties(e, WantBuyExport.class);
             List<String> tradings = e.getWantBuyTradings().stream()
-                    .map(wantBuyTradingRes -> DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), wantBuyTradingRes.getTrading()))
+                    .map(wantBuyTradingRes -> tradeMap.get(wantBuyTradingRes.getTrading()))
                     .collect(Collectors.toList());
             export.setSerialNumber(String.valueOf(i.getAndIncrement())).setTradings(String.join(Global.COMMA, tradings))
-                    .setGoodsTypeLabel(DictEnum.getLabel(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), e.getGoodsType()))
+                    .setGoodsTypeLabel(productNameMap.get(e.getGoodsType()))
                     .setCreateTime(Objects.isNull(e.getCreateTime()) ? null : DateUtil.getDateTime(e.getCreateTime()))
                     .setUpdateTime(Objects.isNull(e.getUpdateTime()) ? null : DateUtil.getDateTime(e.getUpdateTime()));
             result.add(export);
@@ -526,7 +584,7 @@ public class KwpWantBuyService {
                 .eq(KwoWantBuy::getDelFlag, Global.NO)
                 .last("LIMIT 1");
         KwoWantBuy wantBuy = kwpWantBuyMapper.selectOne(wrapper);
-        if (Objects.isNull(wantBuy)){
+        if (Objects.isNull(wantBuy)) {
             throw new BusinessException("求购信息不存在");
         }
         WantBuyContactInfoRes res = new WantBuyContactInfoRes();

+ 201 - 0
sckw-modules/sckw-payment/src/main/resources/bootstrap-lfdc.yml

@@ -0,0 +1,201 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: 10.10.10.230:8848
+        # 命名空间
+        namespace: sckw_lfdc
+        # 共享配置
+        group: sckw-service-platform
+      config:
+        # 配置中心地址
+        server-addr: 10.10.10.230:8848
+        # 配置文件格式
+        file-extension: yaml
+        # 命名空间
+        namespace: sckw_lfdc
+        # 共享配置
+        group: sckw-service-platform
+        #可以读多个配置文件  需要在同一个命名空间下面可以是不同的组
+        extension-configs:
+          - dataId: sckw-common.yml
+            group: sckw-service-platform
+            refresh: true
+#spring:
+#  rabbitmq:
+#    username: admin
+#    password: admin
+#    host: 10.10.10.138
+#    port: 5672
+#    virtual-host: /
+#  cloud:
+#    nacos:
+#      discovery:
+#        # 服务注册地址
+##        server-addr: 47.108.162.14:8848
+#        server-addr: 127.0.0.1:8848
+#        # 命名空间
+#        namespace: sckw-service-platform-dev
+#        # nacos用户名
+#        username: nacos
+#        # nacos密码
+#        password: nacos
+#        # 共享配置
+#        group: sckw-service-platform
+#        # 权重 1-100 数值越大权重越大分配的流量就越大,通常结合权重负载均衡策略
+#      #        weight: 100
+#      config:
+#        # 配置中心地址
+##        server-addr: 47.108.162.14:8848
+#        server-addr: 127.0.0.1:8848
+#        # 配置文件格式
+#        file-extension: yaml
+#        # 命名空间
+#        namespace: sckw-service-platform-dev
+#        # 共享配置
+#        group: sckw-service-platform
+#        enabled: true
+#    stream:
+#      bindings:
+#        sckwSms-out-0:
+#          destination: sckw-sms
+#          content-type: application/json
+#          default-binder: defaultRabbit
+#          group: sckw
+#        sckwMessage-out-0:
+#          destination: sckw-message
+#          content-type: application/json
+#          default-binder: defaultRabbit
+#          group: sckw
+#      binders:
+#        defaultRabbit:
+#          type: rabbit
+#          environment:
+#            spring:
+#              rabbitmq:
+#                virtual-host: /
+#                host: 39.104.134.114
+#                port: 5672
+#                username: wph
+#                password: Yy123...
+#    # sentinel降级配置
+#    sentinel:
+#      transport:
+#        client-ip: ${spring.cloud.client.ip-address} # 获取本机IP地址
+#        port: 8719  #默认8719端口,如果被占用会向上扫描。
+#        #控制台地址
+#        #dashboard: 47.108.162.14:19527
+#        dashboard: 127.0.0.1:19527
+#      log:
+#        #日志路径
+#        dir: logs/sentinel
+#        # 默认将调用链路收敛,导致链路流控效果无效
+#        web-context-unify: false
+#        #持久化nacos配置中
+#      datasource:
+#        #sentinel-rule: # 唯一名称可自定义
+#        #限流
+#        flow:
+#          nacos:
+#            # 设置Nacos的连接地址、命名空间和Group ID
+#            namespace:  sckw-service-platform-dev
+#            server-addr:  ${spring.cloud.nacos.discovery.server-addr}
+#            # username: ${spring.cloud.nacos.discovery.username}
+#            # password: ${spring.cloud.nacos.discovery.password}
+#            # 设置Nacos中配置文件的命名规则
+#            #            data-id:  ${spring.application.name}-sentinel-flow-rules
+#            data-id:  sckw-file-sentinel-flow-rules
+#            group-id: SENTINEL_GROUP
+#            data-type: json
+#            # 必填的重要字段,指定当前规则类型是"限流"
+#            rule-type: flow
+#        #熔断
+#        degrade:
+#          nacos:
+#            namespace:  sckw-service-platform-dev
+#            server-addr: ${spring.cloud.nacos.discovery.server-addr}
+#            #data-id: ${spring.application.name}-sentinel-degrade-rules
+#            data-id: sckw-file-sentinel-degrade-rules
+#            group-id: SENTINEL_GROUP
+#            #熔断
+#            rule-type: degrade
+#      #取消慢加载
+#      eager: true
+#  datasource:
+#    dynamic:
+#      seata: true
+##sfs:
+##  nacos:
+##    server-addr: 127.0.0.1:8848
+##    namespace: 967df0d8-156b-441a-a5ab-615b4a865168
+##    group: MY_GROUP
+##
+##    nacos:
+##      server-addr: ${sfs.nacos.server-addr}
+##      namespace: ${sfs.nacos.namespace}
+##      group: ${sfs.nacos.group}
+#
+##seata:
+##  # seata 服务分组,要与服务端nacos-config.txt中service.vgroup_mapping的后缀对应
+##  # 事务分组名称,要和服务端对应
+##  tx-service-group: sckw-transport-seata-service-group
+##  service:
+##    vgroup-mapping:
+##      # key是事务分组名称 value要和服务端的机房名称保持一致
+##      sckw-transport-seata-service-group: default
+##  registry:
+##    # 指定nacos作为注册中心
+##    type: nacos
+##    nacos:
+##      server-addr: ${spring.cloud.nacos.discovery.server-addr}
+##      #server-addr: 47.108.162.14:8848
+##      namespace: ${spring.cloud.nacos.discovery.namespace}
+##      #      group: SEATA_GROUP
+##      group: ${spring.cloud.nacos.discovery.group}
+##  config:
+##    # 指定nacos作为配置中心
+##    type: nacos
+##    nacos:
+##      server-addr: ${spring.cloud.nacos.discovery.server-addr}
+##      #server-addr: 47.108.162.14:8848
+##      namespace: ${spring.cloud.nacos.discovery.namespace}
+##      group: ${spring.cloud.nacos.discovery.group}
+##  application-id: ${spring.application.name}
+##  #  当前不生效,使用驼峰
+##  enabled: true
+##  #  enable-auto-data-source-proxy: false
+##  enableAutoDataSourceProxy: false
+##  application-id: sckw-seata-file
+## 支持feign对sentinel支持
+##feign:
+##  sentinel:
+##    enabled: true
+#
+#dubbo:
+#  application:
+#    # 此处没有延用spring.application.name是因为当前项目本身也会注册到nacos中,如果dubbo也延用相同的名称,在nacos服务里会看到注册的producer-server服务数为2
+#    name: transport-dubbo-server
+#  protocol:
+#    name: dubbo
+#    port: -1
+#    prefer-serialization: java
+#  registry:
+#    # 配置dubbo的注册中心为nacos
+#    address: nacos://${spring.cloud.nacos.discovery.server-addr}
+#    group: ${spring.cloud.nacos.config.group}
+#    protocol: nacos
+#    #use-as-config-center: false
+#    #use-as-metadata-center: false
+#aliyun:
+#  oss:
+#    endpoint: oss-cn-chengdu.aliyuncs.com
+#    accessKeyId: LTAI5tPEbubCGq5Rdwygbz4Q
+#    secret: 7mQLWMaBJeZPRV1SRGogctYGXwppjQ
+#    bucket: kaiwu-saas
+#links:
+#isBindManyRole:
+#mybatis-plus:
+#  configuration:
+#    # 是否将sql打印到控制面板(该配置会将sql语句和查询的结果都打印到控制台)
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

+ 1 - 1
sckw-modules/sckw-product/src/main/java/com/sckw/product/enums/GoodsStatusEnum.java

@@ -22,7 +22,7 @@ public enum GoodsStatusEnum {
      * 产品状态枚举
      */
     SAVED(0, "已保存"),
-    PUT_ON_SHELVES(1, "上架"),
+    PUT_ON_SHELVES(1, "上架"),
     TAKE_OFF_SHELVES(2, "已下架");
 
     private final Integer code;

+ 5 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/pojo/FindMenuTreePojo.java

@@ -37,4 +37,9 @@ public class FindMenuTreePojo {
      */
     private List<Long> roleIds;
 
+    /**
+     * 企业类型
+     */
+    private List<String> entTypeList;
+
 }

+ 6 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsMenuService.java

@@ -53,6 +53,9 @@ public class KwsMenuService {
     @Autowired
     KwsMenuMappingDao kwsMenuMappingDao;
 
+    @Autowired
+    KwsEntTypeDao kwsEntTypeDao;
+
     /**
      * @param params 实体
      * @desc: 添加新纪录
@@ -319,6 +322,9 @@ public class KwsMenuService {
             return;
         }
         if (Objects.equals(LoginUserHolder.getIsMain(), Global.YES)) {
+            Long entId = LoginUserHolder.getEntId();
+            List<KwsEntType> listByEntId = kwsEntTypeDao.findListByEntId(entId);
+            findMenuTreePojo.setEntTypeList(listByEntId.stream().map(KwsEntType::getType).map(String::valueOf).toList());
             findMenuTreePojo.setEntId(LoginUserHolder.getEntId());
             return;
         }

+ 6 - 0
sckw-modules/sckw-system/src/main/resources/mapper/KwsMenuDao.xml

@@ -276,6 +276,12 @@
     <if test="name != null and name != ''">
       and sm.name = #{name, jdbcType=VARCHAR}
     </if>
+      <if test="entTypeList != null and entTypeList.size() > 0">
+        and
+        <foreach collection="entTypeList" item="item" open="(" close=")" separator=" or ">
+          using_roles like concat('%', #{item}, '%')
+        </foreach>
+      </if>
     <if test="entId != null">
       and smr.ent_id = #{entId}
       and smr.role_id is null

+ 5 - 0
sckw-modules/sckw-transport/pom.xml

@@ -65,6 +65,11 @@
             <version>1.0.0</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-payment-api</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>com.sckw</groupId>
             <artifactId>sckw-common-seata</artifactId>

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

@@ -386,10 +386,10 @@ public class AcceptCarriageOrderController {
 
     /**
      * 工作台-承运业务统计
-     *
+     * @param dateType 1代表周 2代表月
      * @return
      */
-    @RequestMapping(value = "/workbenchStatistics", method = RequestMethod.GET)
+    @RequestMapping(value = "/workbenchStatisticsByAcceptCarriage", method = RequestMethod.GET)
     public HttpResult workbenchStatistics(@RequestParam("dateType") @NotBlank(message = "类型不能为空") String dateType) {
         log.info("工作台-承运业务统计 {}", dateType);
         try {

+ 10 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java

@@ -12,7 +12,6 @@ import com.sckw.transport.model.vo.execlVo.AcceptCarriageOrderExcelVo;
 import com.sckw.transport.model.vo.AcceptCarriageOrderVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
-
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
@@ -151,7 +150,8 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      * @desc 查询分包物流订单
      * @author zk
      * @date 2023/7/20
-     **/
+     *
+     * @return*/
     List<KwtLogisticsOrder> findLogisticsOrder(Map params);
 
     /**
@@ -441,4 +441,12 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
                                                            @Param("userIds") List<Long> userIds,
                                                            @Param("idsList") List<Long> idsList
     );
+
+    /**
+     * @param params {lOrderId 物流订单id, tOrderId 贸易订单id, upperlOrderId 下级分包物流订单, belowlOrderId 所属上级分包, status 状态}
+     * @desc 统计物流订单
+     * @author zk
+     * @date 2023/9/18
+     **/
+    LogisticsCountVo findLogisticsOrderCount(Map<String, Object> params);
 }

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderMapper.java

@@ -83,7 +83,7 @@ public interface KwtWaybillOrderMapper extends BaseMapper<KwtWaybillOrder> {
      * @author zk
      * @date 2023/7/31
      **/
-    WaybillCountVo findWaybillOrderCount(Map params);
+    WaybillCountVo findWaybillOrderCount(Map<String, Object> params);
 
     /**
      * @param driverId 司机ID

+ 203 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/KwtLogisticsOrderTreeVo.java

@@ -0,0 +1,203 @@
+package com.sckw.transport.model.vo;
+
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.Digits;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
+import lombok.Data;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * desc 物流订单层级关系
+ * author zk
+ * date 2023/9/18 0018
+ */
+@Data
+public class KwtLogisticsOrderTreeVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 物流订单类型(1 贸易订单生成物流订单、2 自建物流订单)
+     */
+    private String type;
+
+    /**
+     * 交易订单id(kwo_trade_order)
+     */
+    private Long tOrderId;
+
+    /**
+     * 交易订单编号(kwo_trade_order)
+     */
+    private String tOrderNo;
+
+    /**
+     * 物流订单编号
+     */
+    private String lOrderNo;
+
+    /**
+     * 分包上级物流订单id
+     */
+    private Long pid;
+
+    /**
+     * 分包所有物流订单id
+     */
+    private String pids;
+
+    /**
+     * 当前单据所属等级
+     */
+    private String level;
+
+    /**
+     * 结算周期(周结、月结、季结)
+     */
+    private Long settlementCycle;
+    /**
+     * 计费方式
+     */
+    private String billingMode;
+
+    /**
+     * 运价
+     */
+    private BigDecimal price;
+
+    /**
+     * 运价方式(元/吨、元/车)
+     */
+    @Min(value = 0,message = "运价方式类型不能大于等于{value}")
+    @Max(value = 4,message = "运价方式类型不能大于等于{value}")
+    private Long priceType;
+
+    /**
+     * 已委托量
+     */
+    @Digits(integer = 10,fraction = 2,message = "委托量格式不正确")
+    @DecimalMin(value = "0.00",message = "委托量不能小于{value}")
+    private BigDecimal amount;
+
+    /**
+     * 单位(吨、方、箱、件)
+     */
+    private String unit;
+
+    /**
+     * 合理损耗
+     */
+    private BigDecimal loss;
+
+    /**
+     * 合理损耗单位(‰/kG)
+     */
+    private String lossUnit;
+
+    /**
+     * 商品价值(扣亏货值)
+     */
+    private BigDecimal goodsPrice;
+
+    /**
+     * 商品价值(扣亏货值)单位
+     */
+    private String goodsPriceUnit;
+
+    /**
+     * 计划开始日期
+     */
+    private LocalDate startTime;
+
+    /**
+     * 计划结束日期
+     */
+    private LocalDate endTime;
+
+    /**
+     * 分包量
+     */
+    private BigDecimal subcontractAmount;
+
+    /**
+     * 已委托量
+     */
+    private BigDecimal entrustAmount;
+
+    /**
+     * 卸货量
+     */
+    private BigDecimal unloadAmount;
+
+    /**
+     * 装货量
+     */
+    private BigDecimal loadAmount;
+
+    /**
+     * 忽略剩余量
+     */
+    private BigDecimal ignoreAmount;
+
+    /**
+     * 亏吨量(装货量-卸货量)
+     */
+    private BigDecimal deficitAmount;
+
+    /**
+     * 亏吨扣款
+     */
+    private BigDecimal deficitPrice;
+
+    /**
+     * 卸货-履约量(自己+下游承运总卸货量)
+     */
+    private BigDecimal totalUnloadAmount;
+
+    /**
+     * 装货-履约量(自己+下游承运总装货量)
+     */
+    private BigDecimal totalLoadAmount;
+
+    /**
+     * 实际开始时间(装货)
+     */
+    private Date loadTime;
+
+    /**
+     * 实际结束时间(卸货)
+     */
+    private Date unloadTime;
+
+    /**
+     * 付款方式(预付款、线下支付、第三方支付)
+     */
+    private Long payment;
+
+    /**
+     * 发票税率(%)
+     */
+    private BigDecimal taxRate;
+
+    /**
+     * 用户状态(0正常、1已锁)
+     */
+    private Integer status;
+
+    private List<KwtLogisticsOrderTreeVo> children;
+}

+ 55 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LogisticsCountVo.java

@@ -0,0 +1,55 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * desc 物流订单统计
+ * author zk
+ * date 2023/9/18 0018
+ */
+@Data
+public class LogisticsCountVo {
+
+    /**
+     * 已委托量
+     */
+    private BigDecimal entrustAmount;
+
+    /**
+     * 装货量
+     */
+    private BigDecimal loadAmount;
+
+    /**
+     * 卸货量
+     */
+    private BigDecimal unloadAmount;
+
+    /**
+     * 亏吨量
+     */
+    private BigDecimal deficitAmount;
+
+    /**
+     * 装货时间(第一单车辆运单装货时间)
+     */
+    private Date loadTime;
+
+    /**
+     * 卸货时间(最后一单车辆运单卸货时间)
+     */
+    private Date unloadTime;
+
+    /**
+     * 装货量
+     */
+    private BigDecimal totalLoadAmount;
+
+    /**
+     * 卸货量
+     */
+    private BigDecimal totalUnloadAmount;
+}

+ 39 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/StatisticsAmountVO.java

@@ -0,0 +1,39 @@
+package com.sckw.transport.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author lfdc
+ * @description 工作台-统计承运量
+ * @date 2023-09-18 18:09:06
+ */
+@Data
+public class StatisticsAmountVO implements Serializable {
+    /**
+     * 承运量/托运量
+     */
+    @JsonProperty("amount")
+    private BigDecimal amount;
+
+    /**
+     * 环比
+     */
+    @JsonProperty("chainRatio")
+    private String chainRatio;
+
+    /**
+     * 1 增长 2下降
+     */
+    @JsonProperty("flag")
+    private Integer flag;
+
+    /**
+     * 环比上次承运量
+     */
+    @JsonProperty("lastAmount")
+    private BigDecimal lastAmount;
+}

+ 34 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/StatisticsMoneyVO.java

@@ -0,0 +1,34 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author lfdc
+ * @description 工作台-统计未履约量
+ * @date 2023-09-18 18:09:06
+ */
+@Data
+public class StatisticsMoneyVO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 339614434734438926L;
+    /**
+     * 当月/周 金额
+     */
+    private String current;
+    /**
+     * 上月/周 金额
+     */
+    private String before;
+    /**
+     * 环比
+     */
+    private String chainRatio;
+    /**
+     * 1-增长 2-下降
+     */
+    private Integer flag;
+
+}

+ 18 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/StatisticsResultVO.java

@@ -0,0 +1,18 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author lfdc
+ * @description 工作台-统计承运量
+ * @date 2023-09-18 18:09:06
+ */
+@Data
+public class StatisticsResultVO implements Serializable {
+   private StatisticsWaitingAmountVO waitingAmountVO;
+   private StatisticsAmountVO amountVO;
+   private StatisticsTotalPriceVO totalPriceVO;
+   private StatisticsMoneyVO moneyVO;
+}

+ 39 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/StatisticsTotalPriceVO.java

@@ -0,0 +1,39 @@
+package com.sckw.transport.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author lfdc
+ * @description 工作台-总金额(费用)
+ * @date 2023-09-18 18:09:06
+ */
+@Data
+public class StatisticsTotalPriceVO implements Serializable {
+    /**
+     * 承运收入/托运费用
+     */
+    @JsonProperty("totalPrice")
+    private BigDecimal totalPrice;
+
+    /**
+     * 环比
+     */
+    @JsonProperty("chainRatio")
+    private String chainRatio;
+
+    /**
+     * 1 增长 2下降
+     */
+    @JsonProperty("flag")
+    private Integer flag;
+
+    /**
+     * 环比上次待分配量
+     */
+    @JsonProperty("lastTotalPrice")
+    private BigDecimal lastTotalPrice;
+}

+ 39 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/StatisticsWaitingAmountVO.java

@@ -0,0 +1,39 @@
+package com.sckw.transport.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author lfdc
+ * @description 工作台-统计未履约量
+ * @date 2023-09-18 18:09:06
+ */
+@Data
+public class StatisticsWaitingAmountVO implements Serializable {
+    /**
+     * 待分配量
+     */
+    @JsonProperty("waitingAmount")
+    private BigDecimal waitingAmount;
+
+    /**
+     * 环比
+     */
+    @JsonProperty("chainRatio")
+    private String chainRatio;
+
+    /**
+     * 1 增长 2下降
+     */
+    @JsonProperty("flag")
+    private Integer flag;
+
+    /**
+     * 环比上次待分配量
+     */
+    @JsonProperty("lastWaitingAmount")
+    private BigDecimal lastWaitingAmount;
+}

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

@@ -38,6 +38,8 @@ import com.sckw.order.api.model.CompleteLogisticsOrderParam;
 import com.sckw.order.api.model.CreateOrCancelLogisticsOrderParam;
 import com.sckw.order.api.model.OrderDetailRes;
 import com.sckw.order.api.model.UnitInfoDetailRes;
+import com.sckw.payment.api.dubbo.PaymentDubboService;
+import com.sckw.payment.api.model.dto.SettlementMoney;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.product.api.model.KwpGoods;
 import com.sckw.stream.enums.MessageEnum;
@@ -102,6 +104,9 @@ public class AcceptCarriageOrderService {
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
     RemoteManageService remoteManageService;
 
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
+    PaymentDubboService paymentDubboService;
+
     @Autowired
     public CommonService commonService;
 
@@ -2671,7 +2676,7 @@ public class AcceptCarriageOrderService {
             String lastWeekDateStart = DateUtil.getLastWeekDateStartToString(LocalDate.now(), 13);
             //结束时间
             String lastWeekDateEnd = DateUtil.getLastWeekDateEndToString(7);
-            return computeCompare(id, weekDateStart, weekDateEnd, lastWeekDateStart, lastWeekDateEnd);
+            return computeCompare(id, weekDateStart, weekDateEnd, lastWeekDateStart, lastWeekDateEnd, 2);
         } else if (String.valueOf(NumberConstant.TWO).equals(dateType)) {
 
             //本月
@@ -2688,7 +2693,7 @@ public class AcceptCarriageOrderService {
             String lastMonthDateStart = DateUtil.getBeforeMonthDateAndDaysStartToString(LocalDateTime.now(), 2, -1);
             //结束时间
             String lastMonthDateEnd = DateUtil.getBeforeMonthDateAndDaysEndToString(LocalDateTime.now(), 1, 0);
-            return computeCompare(id, monthDateStart, monthDateEnd, lastMonthDateStart, lastMonthDateEnd);
+            return computeCompare(id, monthDateStart, monthDateEnd, lastMonthDateStart, lastMonthDateEnd, 3);
         } else if (String.valueOf(NumberConstant.THREE).equals(dateType)) {
             //年
             // 获取当前日期
@@ -2714,8 +2719,9 @@ public class AcceptCarriageOrderService {
      * @param lastWeekDateEnd   环比上次结束时间
      * @return
      */
-    private HttpResult computeCompare(Long id, String weekDateStart, String weekDateEnd, String lastWeekDateStart, String lastWeekDateEnd) {
+    private HttpResult computeCompare(Long id, String weekDateStart, String weekDateEnd, String lastWeekDateStart, String lastWeekDateEnd, Integer dateType) {
         HttpResult httpResult = new HttpResult();
+        StatisticsResultVO resultVO = new StatisticsResultVO();
         //获取完结的单据-排除掉不做统计中的数据
         List<Integer> statusList = new ArrayList<>();
         statusList.add(LogisticsOrderEnum.TO_BE_PLANNED.getCode());
@@ -2743,6 +2749,83 @@ public class AcceptCarriageOrderService {
         vo.setLastEntrustAmount(lastWeek.getEntrustAmount());
         vo.setLastSubcontractAmount(lastWeek.getSubcontractAmount());
         vo.setLastTotalPrice(lastWeek.getTotalPrice());
+
+        /**计算待承运量*/
+        computeCompareWaitingAmount(resultVO,currentWeek,lastWeek);
+
+        /**承运量*/
+        computeCompareAmount(resultVO,currentWeek,lastWeek);
+
+        /**总金额(费用)*/
+        computeCompareTotalPrice(resultVO,currentWeek,lastWeek);
+
+        /**待处理的金额*/
+        SettlementMoney settlementMoney = paymentDubboService.countCarrier(id, dateType);
+        StatisticsMoneyVO moneyVO = new StatisticsMoneyVO();
+        moneyVO.setCurrent(settlementMoney.getCurrent());
+        moneyVO.setBefore(settlementMoney.getBefore());
+        moneyVO.setChainRatio(settlementMoney.getPercent());
+        moneyVO.setFlag(settlementMoney.getFlag());
+        resultVO.setMoneyVO(moneyVO);
+        httpResult.setData(resultVO);
+        return httpResult;
+    }
+
+    private void computeCompareTotalPrice(StatisticsResultVO resultVO, StatisticsByOrderVO currentWeek, StatisticsByOrderVO lastWeek) {
+        Integer flag = 1;
+        BigDecimal chainRatio = new BigDecimal("0.00");
+        if (currentWeek.getTotalPrice().compareTo(new BigDecimal("0.00")) == 0
+                && lastWeek.getTotalPrice().compareTo(new BigDecimal("0.00")) == 0) {
+            chainRatio = new BigDecimal("0.00");
+        } else if (currentWeek.getTotalPrice().compareTo(new BigDecimal("0.00")) == 0) {
+            chainRatio = chainRatio.subtract(new BigDecimal("100.00"));
+            flag = 2;
+        } else if (lastWeek.getTotalPrice().compareTo(new BigDecimal("0.00")) == 0) {
+            chainRatio = new BigDecimal("100.00").subtract(chainRatio);
+        } else {
+            chainRatio = (currentWeek.getTotalPrice().subtract(lastWeek.getTotalPrice())).divide(lastWeek.getTotalPrice(), NumberConstant.SIX, BigDecimal.ROUND_HALF_UP)
+                    .multiply(new BigDecimal("100.00")).setScale(NumberConstant.TWO, BigDecimal.ROUND_HALF_UP);
+        }
+        if (chainRatio.compareTo(new BigDecimal("0.00")) == -1) {
+            flag = 2;
+        }
+        StatisticsTotalPriceVO priceVO = new StatisticsTotalPriceVO();
+        priceVO.setTotalPrice(currentWeek.getTotalPrice());
+        priceVO.setChainRatio(chainRatio.abs() + "%");
+        priceVO.setFlag(flag);
+        priceVO.setLastTotalPrice(lastWeek.getTotalPrice());
+        resultVO.setTotalPriceVO(priceVO);
+    }
+
+    private void computeCompareAmount(StatisticsResultVO resultVO, StatisticsByOrderVO currentWeek, StatisticsByOrderVO lastWeek) {
+        Integer amountFlag = 1;
+        BigDecimal amountChainRatio = new BigDecimal("0.00");
+        if (currentWeek.getAmount().compareTo(new BigDecimal("0.00")) == 0
+                && lastWeek.getAmount().compareTo(new BigDecimal("0.00")) == 0) {
+            amountChainRatio = new BigDecimal("0.00");
+        } else if (currentWeek.getAmount().compareTo(new BigDecimal("0.00")) == 0) {
+            amountChainRatio = amountChainRatio.subtract(new BigDecimal("100.00"));
+            amountFlag = 2;
+        } else if (lastWeek.getAmount().compareTo(new BigDecimal("0.00")) == 0) {
+            amountChainRatio = new BigDecimal("100.00").subtract(amountChainRatio);
+        } else {
+            amountChainRatio = (currentWeek.getAmount().subtract(lastWeek.getAmount())).divide(lastWeek.getAmount(), NumberConstant.SIX, BigDecimal.ROUND_HALF_UP)
+                    .multiply(new BigDecimal("100.00")).setScale(NumberConstant.TWO, BigDecimal.ROUND_HALF_UP);
+        }
+        if (amountChainRatio.compareTo(new BigDecimal("0.00")) == -1) {
+            amountFlag = 2;
+        }
+
+        /**承运量*/
+        StatisticsAmountVO amountVO = new StatisticsAmountVO();
+        amountVO.setAmount(currentWeek.getAmount());
+        amountVO.setChainRatio(amountChainRatio.abs() + "%");
+        amountVO.setFlag(amountFlag);
+        amountVO.setLastAmount(lastWeek.getAmount());
+        resultVO.setAmountVO(amountVO);
+    }
+
+    private void computeCompareWaitingAmount(StatisticsResultVO resultVO,StatisticsByOrderVO currentWeek,StatisticsByOrderVO lastWeek) {
         Integer flag = 1;
         BigDecimal chainRatio = new BigDecimal("0.00");
         if (currentWeek.getWaitingAmount().compareTo(new BigDecimal("0.00")) == 0
@@ -2760,10 +2843,13 @@ public class AcceptCarriageOrderService {
         if (chainRatio.compareTo(new BigDecimal("0.00")) == -1) {
             flag = 2;
         }
-        vo.setFlag(flag);
-        vo.setChainRatio(chainRatio.abs() + "%");
-        httpResult.setData(vo);
-        return httpResult;
+        /**待分配量*/
+        StatisticsWaitingAmountVO waitingAmountVO = new StatisticsWaitingAmountVO();
+        waitingAmountVO.setWaitingAmount(currentWeek.getWaitingAmount());
+        waitingAmountVO.setChainRatio(chainRatio.abs() + "%");
+        waitingAmountVO.setFlag(flag);
+        waitingAmountVO.setLastWaitingAmount(lastWeek.getWaitingAmount());
+        resultVO.setWaitingAmountVO(waitingAmountVO);
     }
 
     /**

+ 114 - 32
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ConsignOrderService.java

@@ -36,6 +36,8 @@ import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.order.api.model.CompleteLogisticsOrderParam;
 import com.sckw.order.api.model.OrderDetailRes;
 import com.sckw.order.api.model.UnitInfoDetailRes;
+import com.sckw.payment.api.dubbo.PaymentDubboService;
+import com.sckw.payment.api.model.dto.SettlementMoney;
 import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.AreaTreeFrontResDto;
@@ -99,6 +101,9 @@ public class ConsignOrderService {
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
     RemoteFleetService fleetService;
 
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
+    PaymentDubboService paymentDubboService;
+
     @Autowired
     public CommonService commonService;
 
@@ -1965,7 +1970,7 @@ public class ConsignOrderService {
             String lastWeekDateStart = DateUtil.getLastWeekDateStartToString(LocalDate.now(), 13);
             //结束时间
             String lastWeekDateEnd = DateUtil.getLastWeekDateEndToString(7);
-            return computeCompare(entCacheResDto.getId(), weekDateStart, weekDateEnd, lastWeekDateStart, lastWeekDateEnd);
+            return computeCompare(entCacheResDto.getId(), weekDateStart, weekDateEnd, lastWeekDateStart, lastWeekDateEnd,2);
         } else if (String.valueOf(NumberConstant.TWO).equals(dateType)) {
             //月
             //开始时间
@@ -1977,7 +1982,7 @@ public class ConsignOrderService {
             String lastMonthDateStart = DateUtil.getBeforeMonthDateAndDaysStartToString(LocalDateTime.now(), 2, -1);
             //结束时间
             String lastMonthDateEnd = DateUtil.getBeforeMonthDateAndDaysEndToString(LocalDateTime.now(), 1, 0);
-            return computeCompare(entCacheResDto.getId(), monthDateStart, monthDateEnd, lastMonthDateStart, lastMonthDateEnd);
+            return computeCompare(entCacheResDto.getId(), monthDateStart, monthDateEnd, lastMonthDateStart, lastMonthDateEnd,3);
         } else if (String.valueOf(NumberConstant.THREE).equals(dateType)) {
             //年
 
@@ -1998,8 +2003,9 @@ public class ConsignOrderService {
      * @param lastWeekDateEnd   环比上次结束时间
      * @return
      */
-    private HttpResult computeCompare(Long id, String weekDateStart, String weekDateEnd, String lastWeekDateStart, String lastWeekDateEnd) {
+    private HttpResult computeCompare(Long id, String weekDateStart, String weekDateEnd, String lastWeekDateStart, String lastWeekDateEnd,Integer dateType) {
         HttpResult httpResult = new HttpResult();
+        StatisticsResultVO resultVO = new StatisticsResultVO();
         //本周
         //排除掉不做统计中的数据
         //获取完结的单据
@@ -2007,28 +2013,28 @@ public class ConsignOrderService {
         statusList.add(LogisticsOrderEnum.HAVE_FINISHED.getCode());
         statusList.add(LogisticsOrderEnum.HAVE_RECONCILED.getCode());
         statusList.add(LogisticsOrderEnum.HAVE_ALREADY_SETTLED.getCode());
-        StatisticsByOrderVO statistics = kwtLogisticsOrderMapper.selectAcceptCarriageFinishOrder(statusList, weekDateStart, weekDateEnd, id, OrderTypeEnum.CONSIGN_ORDER.getType());
+        StatisticsByOrderVO currentFinish = kwtLogisticsOrderMapper.selectAcceptCarriageFinishOrder(statusList, weekDateStart, weekDateEnd, id, OrderTypeEnum.CONSIGN_ORDER.getType());
         //获取完结中的单据
         statusList.clear();
         statusList.add(LogisticsOrderEnum.TO_BE_PLANNED.getCode());
         statusList.add(LogisticsOrderEnum.PENDING_ORDER.getCode());
         statusList.add(LogisticsOrderEnum.WAIT_DELIVERY.getCode());
         statusList.add(LogisticsOrderEnum.IN_TRANSIT.getCode());
-        StatisticsByOrderVO statisticsByOrderVO = kwtLogisticsOrderMapper.selectAcceptCarriageAwaitFinishOrder(statusList, weekDateStart, weekDateEnd, id, OrderTypeEnum.CONSIGN_ORDER.getType());
+        StatisticsByOrderVO currentFinishIng= kwtLogisticsOrderMapper.selectAcceptCarriageAwaitFinishOrder(statusList, weekDateStart, weekDateEnd, id, OrderTypeEnum.CONSIGN_ORDER.getType());
         //全部的未履约量
-        BigDecimal waitingAmount = statistics.getWaitingAmount().add(statisticsByOrderVO.getWaitingAmount());
-        BigDecimal amount = statistics.getAmount().add(statisticsByOrderVO.getAmount());
-        BigDecimal entrustAmount = statistics.getEntrustAmount().add(statisticsByOrderVO.getEntrustAmount());
-        BigDecimal subcontractAmount = statistics.getSubcontractAmount().add(statisticsByOrderVO.getSubcontractAmount());
-        BigDecimal totalPrice = statistics.getTotalPrice().add(statisticsByOrderVO.getTotalPrice());
+        BigDecimal waitingAmount = currentFinish.getWaitingAmount().add(currentFinishIng.getWaitingAmount());
+        BigDecimal amount = currentFinish.getAmount().add(currentFinishIng.getAmount());
+        BigDecimal entrustAmount = currentFinish.getEntrustAmount().add(currentFinishIng.getEntrustAmount());
+        BigDecimal subcontractAmount = currentFinish.getSubcontractAmount().add(currentFinishIng.getSubcontractAmount());
+        BigDecimal totalPrice = currentFinish.getTotalPrice().add(currentFinishIng.getTotalPrice());
 
 
-        StatisticsByOrderVO vo = new StatisticsByOrderVO();
-        vo.setWaitingAmount(waitingAmount);
-        vo.setAmount(amount);
-        vo.setEntrustAmount(entrustAmount);
-        vo.setSubcontractAmount(subcontractAmount);
-        vo.setTotalPrice(totalPrice);
+        StatisticsByOrderVO current = new StatisticsByOrderVO();
+        current.setWaitingAmount(waitingAmount);
+        current.setAmount(amount);
+        current.setEntrustAmount(entrustAmount);
+        current.setSubcontractAmount(subcontractAmount);
+        current.setTotalPrice(totalPrice);
 
         //上周
 
@@ -2052,37 +2058,113 @@ public class ConsignOrderService {
         BigDecimal lastSubcontractAmount = lastStatistics.getSubcontractAmount().add(lastStatisticsByOrderVO.getSubcontractAmount());
         BigDecimal lastTotalPrice = lastStatistics.getTotalPrice().add(lastStatisticsByOrderVO.getTotalPrice());
 
-        vo.setLastWaitingAmount(lastWaitingAmount);
-        vo.setLastAmount(lastAmount);
-        vo.setLastEntrustAmount(lastEntrustAmount);
-        vo.setLastSubcontractAmount(lastSubcontractAmount);
-        vo.setLastTotalPrice(lastTotalPrice);
+        StatisticsByOrderVO last = new StatisticsByOrderVO();
+        last.setWaitingAmount(lastWaitingAmount);
+        last.setAmount(lastAmount);
+        last.setEntrustAmount(lastEntrustAmount);
+        last.setSubcontractAmount(lastSubcontractAmount);
+        last.setTotalPrice(lastTotalPrice);
+
+        /**计算待承运量*/
+        computeCompareWaitingAmount(resultVO,current,last);
+
+        /**承运量*/
+        computeCompareAmount(resultVO,current,last);
+
+        /**总金额(费用)*/
+        computeCompareTotalPrice(resultVO,current,last);
+
+        /**待处理的金额*/
+        SettlementMoney settlementMoney = paymentDubboService.countShipper(id, dateType);
+        StatisticsMoneyVO moneyVO = new StatisticsMoneyVO();
+        moneyVO.setCurrent(settlementMoney.getCurrent());
+        moneyVO.setBefore(settlementMoney.getBefore());
+        moneyVO.setChainRatio(settlementMoney.getPercent());
+        moneyVO.setFlag(settlementMoney.getFlag());
+        resultVO.setMoneyVO(moneyVO);
+        httpResult.setData(resultVO);
+        return httpResult;
+    }
 
-        //环比计算
-        BigDecimal chainRatio = new BigDecimal("0.00");
+    private void computeCompareTotalPrice(StatisticsResultVO resultVO, StatisticsByOrderVO currentWeek, StatisticsByOrderVO lastWeek) {
         Integer flag = 1;
-        if (waitingAmount.compareTo(new BigDecimal("0.00")) == 0
-                && lastWaitingAmount.compareTo(new BigDecimal("0.00")) == 0) {
+        BigDecimal chainRatio = new BigDecimal("0.00");
+        if (currentWeek.getTotalPrice().compareTo(new BigDecimal("0.00")) == 0
+                && lastWeek.getTotalPrice().compareTo(new BigDecimal("0.00")) == 0) {
             chainRatio = new BigDecimal("0.00");
-        } else if (waitingAmount.compareTo(new BigDecimal("0.00")) == 0) {
+        } else if (currentWeek.getTotalPrice().compareTo(new BigDecimal("0.00")) == 0) {
             chainRatio = chainRatio.subtract(new BigDecimal("100.00"));
             flag = 2;
-        } else if (lastWaitingAmount.compareTo(new BigDecimal("0.00")) == 0) {
+        } else if (lastWeek.getTotalPrice().compareTo(new BigDecimal("0.00")) == 0) {
             chainRatio = new BigDecimal("100.00").subtract(chainRatio);
         } else {
-            chainRatio = (waitingAmount.subtract(lastWaitingAmount)).divide(lastWaitingAmount, NumberConstant.SIX, BigDecimal.ROUND_HALF_UP)
+            chainRatio = (currentWeek.getTotalPrice().subtract(lastWeek.getTotalPrice())).divide(lastWeek.getTotalPrice(), NumberConstant.SIX, BigDecimal.ROUND_HALF_UP)
                     .multiply(new BigDecimal("100.00")).setScale(NumberConstant.TWO, BigDecimal.ROUND_HALF_UP);
         }
         if (chainRatio.compareTo(new BigDecimal("0.00")) == -1) {
             flag = 2;
         }
-        vo.setFlag(flag);
-        vo.setChainRatio(chainRatio.abs() + "%");
-        httpResult.setData(vo);
-        return httpResult;
+        StatisticsTotalPriceVO priceVO = new StatisticsTotalPriceVO();
+        priceVO.setTotalPrice(currentWeek.getTotalPrice());
+        priceVO.setChainRatio(chainRatio.abs() + "%");
+        priceVO.setFlag(flag);
+        priceVO.setLastTotalPrice(lastWeek.getTotalPrice());
+        resultVO.setTotalPriceVO(priceVO);
     }
 
+    private void computeCompareAmount(StatisticsResultVO resultVO, StatisticsByOrderVO currentWeek, StatisticsByOrderVO lastWeek) {
+        Integer amountFlag = 1;
+        BigDecimal amountChainRatio = new BigDecimal("0.00");
+        if (currentWeek.getAmount().compareTo(new BigDecimal("0.00")) == 0
+                && lastWeek.getAmount().compareTo(new BigDecimal("0.00")) == 0) {
+            amountChainRatio = new BigDecimal("0.00");
+        } else if (currentWeek.getAmount().compareTo(new BigDecimal("0.00")) == 0) {
+            amountChainRatio = amountChainRatio.subtract(new BigDecimal("100.00"));
+            amountFlag = 2;
+        } else if (lastWeek.getAmount().compareTo(new BigDecimal("0.00")) == 0) {
+            amountChainRatio = new BigDecimal("100.00").subtract(amountChainRatio);
+        } else {
+            amountChainRatio = (currentWeek.getAmount().subtract(lastWeek.getAmount())).divide(lastWeek.getAmount(), NumberConstant.SIX, BigDecimal.ROUND_HALF_UP)
+                    .multiply(new BigDecimal("100.00")).setScale(NumberConstant.TWO, BigDecimal.ROUND_HALF_UP);
+        }
+        if (amountChainRatio.compareTo(new BigDecimal("0.00")) == -1) {
+            amountFlag = 2;
+        }
 
+        /**承运量*/
+        StatisticsAmountVO amountVO = new StatisticsAmountVO();
+        amountVO.setAmount(currentWeek.getAmount());
+        amountVO.setChainRatio(amountChainRatio.abs() + "%");
+        amountVO.setFlag(amountFlag);
+        amountVO.setLastAmount(lastWeek.getAmount());
+        resultVO.setAmountVO(amountVO);
+    }
+    private void computeCompareWaitingAmount(StatisticsResultVO resultVO,StatisticsByOrderVO currentWeek,StatisticsByOrderVO lastWeek) {
+        Integer flag = 1;
+        BigDecimal chainRatio = new BigDecimal("0.00");
+        if (currentWeek.getWaitingAmount().compareTo(new BigDecimal("0.00")) == 0
+                && lastWeek.getWaitingAmount().compareTo(new BigDecimal("0.00")) == 0) {
+            chainRatio = new BigDecimal("0.00");
+        } else if (currentWeek.getWaitingAmount().compareTo(new BigDecimal("0.00")) == 0) {
+            chainRatio = chainRatio.subtract(new BigDecimal("100.00"));
+            flag = 2;
+        } else if (lastWeek.getWaitingAmount().compareTo(new BigDecimal("0.00")) == 0) {
+            chainRatio = new BigDecimal("100.00").subtract(chainRatio);
+        } else {
+            chainRatio = (currentWeek.getWaitingAmount().subtract(lastWeek.getWaitingAmount())).divide(lastWeek.getWaitingAmount(), NumberConstant.SIX, BigDecimal.ROUND_HALF_UP)
+                    .multiply(new BigDecimal("100.00")).setScale(NumberConstant.TWO, BigDecimal.ROUND_HALF_UP);
+        }
+        if (chainRatio.compareTo(new BigDecimal("0.00")) == -1) {
+            flag = 2;
+        }
+        /**待分配量*/
+        StatisticsWaitingAmountVO waitingAmountVO = new StatisticsWaitingAmountVO();
+        waitingAmountVO.setWaitingAmount(currentWeek.getWaitingAmount());
+        waitingAmountVO.setChainRatio(chainRatio.abs() + "%");
+        waitingAmountVO.setFlag(flag);
+        waitingAmountVO.setLastWaitingAmount(lastWeek.getWaitingAmount());
+        resultVO.setWaitingAmountVO(waitingAmountVO);
+    }
     /**
      * 工作台-物流运输数据统计
      *

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

@@ -34,6 +34,7 @@ import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.*;
+import com.sckw.transport.model.vo.LogisticsCountVo;
 import com.sckw.transport.model.vo.UserInfoVo;
 import com.sckw.transport.model.vo.WaybillCountVo;
 import com.sckw.transport.model.vo.WaybillOrderDriverVo;
@@ -1069,6 +1070,52 @@ public class KwtWaybillOrderService {
         return HttpResult.ok("车辆运单撤回成功!");
     }
 
+    /**
+     * @param lorderId 物流运单id
+     * @desc 取消派车-物流订单完结(趟次/循环派车)
+     * @author zk
+     * @date 2023/7/24
+     **/
+    public void cancelSendCar(Long lorderId) {
+        /**1数据校验**/
+        KwtLogisticsOrder order = logisticsOrderDao.selectById(lorderId);
+        if (order == null) {
+            return;
+        }
+
+        /**1-5循环派车失效kwt_logistics_order_circulate**/
+        //趟次派车信息
+        List<KwtWaybillOrder> waybillOrders = waybillOrderDao.findWaybillOrder(new HashMap<>(Global.NUMERICAL_SIXTEEN){{
+            put("lOrderId", lorderId);
+            put("status", CarWaybillEnum.PENDING_ORDER.getCode());
+        }});
+        for (KwtWaybillOrder waybillOrder:waybillOrders) {
+            waybillOrder.setStatus(CarWaybillEnum.REVOKED.getCode());
+            waybillOrderDao.updateById(waybillOrder);
+
+            //车辆订单-Mongodb数据更新
+            SckwWaybillOrder wOrder = new SckwWaybillOrder();
+            wOrder.set_id(waybillOrder.getId());
+            editSckwWaybillOrder(wOrder, waybillOrder, 2);
+        }
+
+        //循环派车信息
+        List<KwtLogisticsOrderCirculate> circulates = logisticsOrderCirculateDao.findCirculateList(lorderId, null, null, 0);
+        for (KwtLogisticsOrderCirculate circulate : circulates) {
+            circulate.setStatus(Global.NUMERICAL_ONE);
+            logisticsOrderCirculateDao.updateById(circulate);
+
+            //车辆订单-Mongodb数据更新
+            SckwWaybillOrder wOrder = new SckwWaybillOrder();
+            wOrder.set_id(circulate.getId());
+            KwtWaybillOrder waybillOrder = new KwtWaybillOrder();
+            waybillOrder.setStatus(CarWaybillEnum.REVOKED.getCode());
+            waybillOrder.setUpdateTime(circulate.getUpdateTime());
+            waybillOrder.setUpdateBy(circulate.getUpdateBy());
+            editSckwWaybillOrder(wOrder, waybillOrder, 2);
+        }
+    }
+
     /**
      * @param wOrder mongodb中车辆运单信息
      * @param order  车辆运单信息
@@ -1742,13 +1789,99 @@ public class KwtWaybillOrderService {
         boolean subcontractBool = checkSubcontract(logisticsOrder);
 
         /**1-2校验当前承运订单是否运输完成**/
-        //车辆运单统计
+        //车辆运单统计(运输中的物流订单+车辆运单审核通过)
+        WaybillCountVo waybillCount = waybillOrderDao.findWaybillOrderCount(new HashMap() {{
+            put("upperlOrderId", logisticsOrder.getId());
+            put("passStatus", Global.NUMERICAL_ONE);
+            put("logisticsStatus", LogisticsOrderEnum.IN_TRANSIT.getCode());
+        }});
+        //物流订单统计(运输完成后的物流订单)
+        LogisticsCountVo LogisticsCount = logisticsOrderDao.findLogisticsOrderCount(new HashMap(){{
+            put("upperlOrderId", logisticsOrder.getId());
+            put("finishedStatus", Global.NUMERICAL_ONE);
+        }});
+
+        logisticsOrder.setTotalLoadAmount(waybillCount.getLoadAmount().add(LogisticsCount.getLoadAmount()));
+        logisticsOrder.setTotalUnloadAmount(waybillCount.getUnloadAmount().add(LogisticsCount.getUnloadAmount()));
+        logisticsOrderDao.updateById(logisticsOrder);
+
+        /**1-3更新贸易订单总量**/
+        if (logisticsLevel(logisticsOrder) == Global.NUMERICAL_ONE) {
+            //物流订单统计(运输完成后的物流订单)
+            LogisticsCountVo tradeCount = logisticsOrderDao.findLogisticsOrderCount(new HashMap(){{
+                put("tOrderId", logisticsOrder.getTOrderId());
+                put("finishedStatus", Global.NUMERICAL_ONE);
+            }});
+            //查询贸易订单关联物流运单是否全部完结-totalUnfinished
+            WaybillCountVo tradeCount1 = waybillOrderDao.findWaybillOrderCount(new HashMap() {{
+                put("tOrderId", logisticsOrder.getTOrderId());
+            }});
+            CompleteLogisticsOrderParam tradeOrder = new CompleteLogisticsOrderParam();
+            tradeOrder.setTOrderId(logisticsOrder.getTOrderId());
+            tradeOrder.setActualLoadAmount(tradeCount.getLoadAmount());
+            tradeOrder.setActualUnloadAmount(tradeCount.getUnloadAmount());
+            tradeOrder.setIsAllComplete(tradeCount1.getTotalUnfinished() > 0 ? false : true);
+            tradeOrder.setUpdateBy(LoginUserHolder.getUserId());
+            tradeOrder.setUpdateByName(LoginUserHolder.getUserName());
+            tradeOrderInfoService.completeLogisticsOrder(tradeOrder);
+        }
+
+        /**1-4Mongodb数据更新**/
+        //承运订单
+        SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
+        lOrder.setTotalLoadAmount(logisticsOrder.getTotalLoadAmount());
+        lOrder.setTotalUnloadAmount(logisticsOrder.getTotalUnloadAmount());
+        editSckwLogisticsOrder(lOrder, logisticsOrder);
+
+        /**2当前物流订单属于分包(存在上级物流订单)**/
+        //获取所有上级物流订单ID(当前物流订单ID除外)
+        String pids = logisticsOrder.getPids();
+        if (StringUtils.isNotBlank(pids)) {
+            String[] idArray = pids.split(Global.COMMA);
+            for (String id : idArray) {
+                Long pid = Long.parseLong(id);
+                //当前物流订单ID除外
+                if (!pid.equals(lOrderId)) {
+                    /**校验当前承运订单是否运输完成**/
+                    checkLogisticsByStatus(pid);
+                }
+            }
+        }
+    }
+
+    /**
+     * @param lOrderId 承运订单ID
+     * @description 校验当前承运订单是否运输完成(修改状态 + 统计量)
+     * @author zk
+     * @date 2023/7/27
+     **/
+    public void checkLogisticsByStatusV1(Long lOrderId) {
+        /**
+         校验当前承运订单是否运输完成(虑该当前承运订单上下级物流订单)
+         1存在下级分包,下级物流订单和当前物流订单全部运输完成则修改当前物流订单状态为已完成(HAVE_FINISHED)、统计值
+         2当前物流订单属于分包:需要判断上级及同级分包全部运输完成修改上级物流订单状态为已完成(HAVE_FINISHED)、统计值-一直向上到一级物流订单
+         **/
+
+        /**1存在下级分包**/
+        KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(lOrderId);
+        /**1-1校验下级分包是否全部运输完成**/
+        boolean subcontractBool = checkSubcontract(logisticsOrder);
+
+        /**1-2校验当前承运订单是否运输完成**/
+        //车辆运单统计(运输中的物流订单+车辆运单审核通过)
         WaybillCountVo waybillCount = waybillOrderDao.findWaybillOrderCount(new HashMap() {{
             put("upperlOrderId", logisticsOrder.getId());
-            put("passStatus", 1);
+            put("passStatus", Global.NUMERICAL_ONE);
+            put("logisticsStatus", LogisticsOrderEnum.IN_TRANSIT.getCode());
         }});
-        logisticsOrder.setTotalLoadAmount(waybillCount.getLoadAmount());
-        logisticsOrder.setTotalUnloadAmount(waybillCount.getUnloadAmount());
+        //物流订单统计(运输完成后的物流订单)
+        LogisticsCountVo LogisticsCount = logisticsOrderDao.findLogisticsOrderCount(new HashMap(){{
+            put("upperlOrderId", logisticsOrder.getId());
+            put("finishedStatus", Global.NUMERICAL_ONE);
+        }});
+
+        logisticsOrder.setTotalLoadAmount(waybillCount.getLoadAmount().add(LogisticsCount.getLoadAmount()));
+        logisticsOrder.setTotalUnloadAmount(waybillCount.getUnloadAmount().add(LogisticsCount.getUnloadAmount()));
         BigDecimal subcontractAmount = logisticsOrder.getSubcontractAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getSubcontractAmount();
         //物流运单状态(不包含已完成、已对账、已结算)+ 物流订单上级委派量-下游分包总量 <= 自己承运总装货量 + 下级分包全部运输完成
         if (!LogisticsOrderEnum.transportCompleted(logisticsOrder.getStatus())
@@ -1756,7 +1889,7 @@ public class KwtWaybillOrderService {
                 && subcontractBool) {
             //---------------------------------------------zk 2023-08-01 全量可运
             /**1-3下级分包承运订单运输完成**/
-            //logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());//取消自动完结
+            logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());//取消自动完结
             logisticsOrderDao.updateById(logisticsOrder);
 
             /**1-4承运订单状态记录**/
@@ -1791,7 +1924,7 @@ public class KwtWaybillOrderService {
             //查询贸易订单总装货量/总卸货量
             WaybillCountVo tradeCount = waybillOrderDao.findWaybillOrderCount(new HashMap() {{
                 put("tOrderId", logisticsOrder.getTOrderId());
-                put("passStatus", 1);
+                put("passStatus", Global.NUMERICAL_ONE);
             }});
             //查询贸易订单关联物流运单是否全部完结-totalUnfinished
             WaybillCountVo tradeCount1 = waybillOrderDao.findWaybillOrderCount(new HashMap() {{

+ 232 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java

@@ -1,16 +1,20 @@
 package com.sckw.transport.service;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 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.contract.api.model.dto.res.ContractCommonInfoResDto;
+import com.sckw.core.annotation.Log;
 import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
+import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.model.page.PageResult;
+import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.StringUtils;
@@ -36,8 +40,7 @@ import com.sckw.transport.model.dto.CancelOrderDTO;
 import com.sckw.transport.model.dto.DocumentParamDTO;
 import com.sckw.transport.model.param.ContractParam;
 import com.sckw.transport.model.param.LogisticsOrderParam;
-import com.sckw.transport.model.vo.OrderDetailVO;
-import com.sckw.transport.model.vo.SckwLogisticsOrderVO;
+import com.sckw.transport.model.vo.*;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -733,4 +736,231 @@ public class TransportCommonService {
         PageResult build = PageResult.build(contractParam.getPage(), contractParam.getPageSize(), list.stream().count(), returnList);
         return HttpResult.ok(build);
     }
+
+    /**
+     * @param lOrderId 承运订单ID
+     * @desc 完结物流订单数据处理
+     * @author zk
+     * @date 2023/9/18
+     **/
+    public void closeHandle(Long lOrderId) {
+        /**1数据校验**/
+        KwtLogisticsOrder logisticsOrder = logisticsOrderMapper.selectById(lOrderId);
+        if (logisticsOrder == null) {
+            return;
+        }
+
+        /**2物流订单树形数据结构**/
+        //所有管理物流订单
+        List<KwtLogisticsOrder> orders = logisticsOrderMapper.findLogisticsOrder(new HashMap<>(){{
+            put("upperlOrderId", lOrderId);
+            put("belowlOrderId", logisticsOrder.getPids());
+        }});
+        //数据copy
+        List<KwtLogisticsOrderTreeVo> logisticsOrders = orders.stream().map( order -> {
+                            KwtLogisticsOrderTreeVo logisticsOrderVo = new KwtLogisticsOrderTreeVo();
+                            BeanUtils.copyPropertiesValue(order, logisticsOrderVo);
+                            return logisticsOrderVo;
+                        }
+                ).collect(Collectors.toList());
+        List<KwtLogisticsOrderTreeVo> treeData = findTree(logisticsOrders);
+        /**数据去除已完结订单下级*/
+        orderTreeHandle(treeData);
+
+        /**3链路数据组装*/
+        List<List<KwtLogisticsOrderTreeVo>> orderLinks = new ArrayList<>();
+        for (KwtLogisticsOrderTreeVo order:treeData) {
+            Stack<KwtLogisticsOrderTreeVo> pathStack = new Stack<>();
+            iteratorNode(order, pathStack, orderLinks);
+        }
+        List<KwtLogisticsOrderTreeVo> orderLink = findLink(orderLinks, lOrderId);
+        //倒序
+        Collections.reverse(orderLink);
+
+        /**4数据处理**/
+        for (KwtLogisticsOrderTreeVo order:orderLink) {
+            //排除已完结订单
+            if (Objects.equals(order.getStatus(), LogisticsOrderEnum.HAVE_FINISHED.getCode())) {
+                //计算总装总卸向上级统计
+                continue;
+            }
+
+            //车辆运单统计(运输中的物流订单+车辆运单审核通过)
+            WaybillCountVo waybillCount = waybillOrderMapper.findWaybillOrderCount(new HashMap() {{
+                put("upperlOrderId", order.getId());
+                put("passStatus", Global.NUMERICAL_ONE);
+                put("logisticsStatus", LogisticsOrderEnum.IN_TRANSIT.getCode());
+            }});
+            //物流订单统计(运输完成后的物流订单)
+            LogisticsCountVo LogisticsCount = logisticsOrderMapper.findLogisticsOrderCount(new HashMap(){{
+                put("upperlOrderId", order.getId());
+                put("finishedStatus", Global.NUMERICAL_ONE);
+            }});
+
+            KwtLogisticsOrder currentOrder = logisticsOrderMapper.selectById(lOrderId);
+            currentOrder.setTotalLoadAmount(waybillCount.getLoadAmount().add(LogisticsCount.getLoadAmount()));
+            currentOrder.setTotalUnloadAmount(waybillCount.getUnloadAmount().add(LogisticsCount.getUnloadAmount()));
+            logisticsOrderMapper.updateById(currentOrder);
+
+            /**Mongodb数据更新**/
+            SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
+            lOrder.setTotalLoadAmount(waybillCount.getLoadAmount());
+            lOrder.setTotalUnloadAmount(waybillCount.getUnloadAmount());
+            SckwBusSum busSum = new SckwBusSum();
+            //业务汇总类型
+            busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+            //操作对象(1新增/2修改)
+            busSum.setMethod(NumberConstant.TWO);
+            //业务汇总数据对象
+            busSum.setObject(order);
+            streamBridge.send("sckw-busSum", JSON.toJSONString(busSum));
+
+            //一级物流订单向贸易订单推送数据
+            if (order.getPid() == null) {
+
+            }
+        }
+    }
+
+    /**
+     * @param treeData 物流订单树形数据
+     * @desc 数据去除已完结订单下级
+     * @author zk
+     * @date 2023/9/18
+     **/
+    public static void orderTreeHandle(List<KwtLogisticsOrderTreeVo> treeData){
+        if (CollectionUtil.isEmpty(treeData)) {
+            return;
+        }
+
+        for (KwtLogisticsOrderTreeVo order:treeData) {
+            orderTreeHandle(order.getChildren());
+            if (order.getStatus() == 4) {
+                order.setChildren(null);
+            }
+        }
+    }
+
+    /**
+     * @param orders 物流订单
+     * @desc 树形数据处理
+     * @author zk
+     * @date 2023/9/18
+     **/
+    public static List<KwtLogisticsOrderTreeVo> findTree(List<KwtLogisticsOrderTreeVo> orders) {
+        //跟节点
+        List<KwtLogisticsOrderTreeVo> rootList = new ArrayList();
+
+        //获取根节点数据
+        if (CollectionUtil.isNotEmpty(orders)) {
+            for(KwtLogisticsOrderTreeVo order:orders){
+                if (order.getPid() == null) {
+                    rootList.add(order);
+                }
+            }
+        }
+
+        //遍历,找到二级节点(根节点的id和所有节点中的pid比较)
+        for (KwtLogisticsOrderTreeVo order : rootList) {
+            List<KwtLogisticsOrderTreeVo> child = getChild(order.getId(), orders);
+            order.setChildren(child);
+        }
+
+        return rootList;
+    }
+
+    /**
+     * @param pid 上级物流订单ID
+     * @param orders 物流订单
+     * @desc 树形数据处理-递归
+     * @author zk
+     * @date 2023/9/18
+     **/
+    public static List<KwtLogisticsOrderTreeVo> getChild(Long pid, List<KwtLogisticsOrderTreeVo> orders) {
+        List<KwtLogisticsOrderTreeVo> childList = new ArrayList();
+        for (KwtLogisticsOrderTreeVo order : orders) {
+            if(pid.equals(order.getPid())){
+                //获取当前节点id的所有子列表
+                childList.add(order);
+            }
+        }
+        for (KwtLogisticsOrderTreeVo order : childList) {
+            //将该id的子节点进行遍历,通过递归调用,获取每一个子节点的子节点数据
+            List<KwtLogisticsOrderTreeVo> child = getChild(order.getId(), orders);
+            order.setChildren(child);
+        }
+        if(childList.size()==0){
+            //子节点的长度为0,返回null,null不会被阿里的FastJson包解析
+            return  null;
+        }
+        return childList;
+    }
+
+    /**
+     * @param: order 当前节点
+     * @param: pathstack 栈
+     * @param: orderLinks 设备链路信息
+     * @desc 链路组装
+     * @author zk
+     * @date 2023/8/8
+     **/
+    public static void iteratorNode(KwtLogisticsOrderTreeVo order, Stack<KwtLogisticsOrderTreeVo> pathstack, List orderLinks) {
+        //入栈
+        pathstack.push(order);
+        List childlist = order.getChildren();
+        //没有子节点 说明是叶子结点
+        if (childlist == null){
+            List list = new ArrayList();
+            Iterator stackIt = pathstack.iterator();
+            while (stackIt.hasNext()) {
+                list.add(stackIt.next());
+            }
+            List<KwtLogisticsOrderTreeVo> orders = print(list);
+            orderLinks.add(orders);
+        } else {
+            Iterator iterator = childlist.iterator();
+            while (iterator.hasNext()) {
+                KwtLogisticsOrderTreeVo child = (KwtLogisticsOrderTreeVo) iterator.next();
+                //深度优先 进入递归
+                iteratorNode(child, pathstack, orderLinks);
+                //回溯时候出栈
+                pathstack.pop();
+            }
+        }
+    }
+
+    /**
+     * @param list 树形数据
+     * @desc 链路组装
+     * @author zk
+     * @date 2023/8/8
+     **/
+    private static List<KwtLogisticsOrderTreeVo> print(List list) {
+        List<KwtLogisticsOrderTreeVo> orders = new ArrayList();
+        Iterator iterator = list.iterator();
+        while (iterator.hasNext()) {
+            KwtLogisticsOrderTreeVo order = (KwtLogisticsOrderTreeVo) iterator.next();
+            order.setChildren(null);
+            orders.add(order);
+        }
+        return orders;
+    }
+
+    /**
+     * @param orderLinks 物流订单链路信息
+     * @param lOrderId 物流订单id
+     * @desc 获取当前物流订单垂直链路
+     * @author zk
+     * @date 2023/9/18
+     **/
+    public static List<KwtLogisticsOrderTreeVo> findLink(List<List<KwtLogisticsOrderTreeVo>> orderLinks, Long lOrderId) {
+        for (List<KwtLogisticsOrderTreeVo> logisticsOrders:orderLinks) {
+            for (KwtLogisticsOrderTreeVo order:logisticsOrders) {
+                if (Objects.equals(lOrderId, order.getId())) {
+                    return logisticsOrders;
+                }
+            }
+        }
+        return null;
+    }
 }

+ 31 - 0
sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml

@@ -686,6 +686,12 @@
             and FIND_IN_SET(id, #{belowlOrderId, jdbcType=VARCHAR})
             and id != #{ownOrderId, jdbcType=BIGINT}
         </if>
+        <if test="upperlOrderId != null and upperlOrderId != ''">
+            and FIND_IN_SET(#{upperlOrderId, jdbcType=BIGINT}, pids)
+        </if>
+        <if test="belowlOrderId != null and belowlOrderId != ''">
+            and FIND_IN_SET(id, #{belowlOrderId, jdbcType=VARCHAR})
+        </if>
     </select>
     <select id="selectOrderCountByTorderId" resultType="com.sckw.transport.model.dto.LogisticsOrderDTO">
         SELECT a.id          as lOrderId,
@@ -2519,4 +2525,29 @@
         </where>
         ORDER BY tab.createTime DESC
     </select>
+
+    <select id="findLogisticsOrderCount" resultType="com.sckw.transport.model.vo.LogisticsCountVo" parameterType="java.util.Map">
+        SELECT
+        sum(load_amount) loadAmount, sum(unload_amount) unloadAmount,
+        sum(total_load_amount) totalLoadAmount, sum(total_unload_amount) totalUnloadAmount
+        from kwt_logistics_order where del_flag = 0
+        <if test="tOrderId != null and tOrderId != ''">
+            and t_order_id = #{tOrderId, jdbcType=BIGINT}
+        </if>
+        <if test="lOrderId != null and lOrderId != ''">
+            and id = #{lOrderId, jdbcType=BIGINT}
+        </if>
+        <if test="finishedStatus != null and finishedStatus != ''">
+            and status in (4, 5, 6)
+        </if>
+        <if test="status != null and status != ''">
+            and status = #{lOrderId, jdbcType=INTEGER}
+        </if>
+        <if test="upperlOrderId != null and upperlOrderId != ''">
+            and FIND_IN_SET(#{upperlOrderId, jdbcType=BIGINT}, pids)
+        </if>
+        <if test="belowlOrderId != null and belowlOrderId != ''">
+            and FIND_IN_SET(id, #{belowlOrderId, jdbcType=VARCHAR})
+        </if>
+    </select>
 </mapper>

+ 12 - 0
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

@@ -177,6 +177,9 @@
         <if test="truckId != null and truckId != ''">
             and wo.truck_id = #{truckId, jdbcType=BIGINT}
         </if>
+        <if test="logisticsStatus != null and logisticsStatus != ''">
+            and lo.status  = #{logisticsStatus, jdbcType=INTEGER}
+        </if>
         <if test="passStatus != null and passStatus != ''">
             and wo.status = 8
         </if>
@@ -522,12 +525,21 @@
         kwo.create_time createTime, kwo.driver_id driverId, kwo.driver_name driverName, kwo.driver_phone driverPhone
         FROM kwt_waybill_order kwo
         where kwo.del_flag = 0
+        <if test="tOrderId != null and tOrderId != ''">
+            and kwo.t_order_id = #{tOrderId, jdbcType=BIGINT}
+        </if>
+        <if test="lOrderId != null and lOrderId != ''">
+            and kwo.id = #{lOrderId, jdbcType=BIGINT}
+        </if>
         <if test="driverId != null and driverId != ''">
             and kwo.driver_id = #{driverId, jdbcType=BIGINT}
         </if>
         <if test="truckNo != null and truckNo != ''">
             and kwo.truck_no = #{truckNo, jdbcType=VARCHAR}
         </if>
+        <if test="status != null and status != ''">
+            and kwo.status = #{status, jdbcType=INTEGER}
+        </if>
         <if test="busStatus != null and busStatus == 2">
             and kwo.status = 2
         </if>