Просмотр исходного кода

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

xucaiqin 2 лет назад
Родитель
Сommit
117a63c774
41 измененных файлов с 1135 добавлено и 91 удалено
  1. 14 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/OrderGenerateSeqNoUtils.java
  2. 26 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/StringUtils.java
  3. 2 0
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwLogisticsOrder.java
  4. 6 0
      sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/constant/RedisConstant.java
  5. 20 2
      sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/enums/MessageEnum.java
  6. 5 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UnitInfoDetailRes.java
  7. 1 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeService.java
  8. 1 0
      sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractLogisticsMapper.xml
  9. 3 1
      sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractTradeMapper.xml
  10. 1 1
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/KwmMessageUserService.java
  11. 15 5
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SckwMessageHandlerService.java
  12. 10 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java
  13. 5 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrderUnit.java
  14. 3 3
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AcceptanceOrderParam.java
  15. 6 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/UnitInfo.java
  16. 38 15
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  17. 2 0
      sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderUnitMapper.xml
  18. 1 0
      sckw-modules/sckw-report/src/main/java/com/sckw/report/controller/KwTransportController.java
  19. 4 2
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderService.java
  20. 38 13
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwTransportService.java
  21. 15 0
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/vo/OrderListRes.java
  22. 17 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/AcceptCarriageOrderController.java
  23. 13 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/WaybillManagementController.java
  24. 6 9
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java
  25. 10 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderAddressMapper.java
  26. 2 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderMapper.java
  27. 20 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/AddOrderDTO.java
  28. 26 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/ContractParam.java
  29. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/DriverListVo.java
  30. 508 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/SckwLogisticsOrderVO.java
  31. 17 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillDetailVO.java
  32. 38 9
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java
  33. 37 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/CommonService.java
  34. 15 7
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ConsignOrderService.java
  35. 39 8
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java
  36. 12 11
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java
  37. 39 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java
  38. 30 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/WaybillManagementService.java
  39. 75 1
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml
  40. 11 0
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderAddressMapper.xml
  41. 3 0
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

+ 14 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/OrderGenerateSeqNoUtils.java

@@ -74,6 +74,20 @@ public class OrderGenerateSeqNoUtils {
         return appendKey.toString();
     }
 
+    /**
+     * 拼接redis key 公共key+[业务标识]+日期
+     *
+     * @param redisOrderGenerateEnum
+     * @param prefix
+     * @param date
+     * @return
+     */
+    public static String getKey(RedisOrderGenerateEnum redisOrderGenerateEnum, OrderRuleEnum prefix, Date date,String lOrderId) {
+        StringBuilder stringBuilder = new StringBuilder();
+        StringBuilder appendKey = stringBuilder.append(redisOrderGenerateEnum.getKey()).append(prefix.getCode()).append(DateUtils.formatDate(date)).append(lOrderId);
+        return appendKey.toString();
+    }
+
     /**
      * 拼接redis key 公共key+[业务标识]不携带日期
      *

+ 26 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/StringUtils.java

@@ -757,6 +757,32 @@ public class StringUtils {
         return String.format(prefix, args);
     }
 
+    /**
+     * @desc: 替换文本变量,变量格式为:${}
+     * @author: yzc
+     * @date: 2023-09-01 9:03
+     * @Param text: 文本
+     * @Param varNames:  变量名map
+     * @return: java.util.List<java.lang.String>  替换后的文本
+     */
+    public static String replaceTextVar(String text, Map<String, Object> varNames) {
+        if (StringUtils.isBlank(text) || CollectionUtils.isEmpty(varNames)) {
+            return text;
+        }
+        Pattern pattern = Pattern.compile("\\$\\{([^}]+)\\}");
+        Matcher matcher = pattern.matcher(text);
+        StringBuilder result = new StringBuilder();
+        while (matcher.find()) {
+            String varName = matcher.group(1);
+            Object varValue = varNames.get(varName);
+            if (Objects.nonNull(varValue)) {
+                matcher.appendReplacement(result, varValue.toString());
+            }
+        }
+        matcher.appendTail(result);
+        return result.toString();
+    }
+
     public static void main(String[] args) {
         Map<String, Object> param = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         param.put("account", "17358629955");

+ 2 - 0
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwLogisticsOrder.java

@@ -125,11 +125,13 @@ public class SckwLogisticsOrder {
     /**
      * 卸货日期
      */
+    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
     private Date unloadTime;
 
     /**
      * 装货日期
      */
+    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
     private Date loadTime;
 
     /**

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

@@ -62,6 +62,12 @@ public class RedisConstant {
     public static final String LOGISTICS_NO_GENERATE_KEY = "order:logistics:no:generate:%s";
 
 
+    /**
+     * 生成物流订单号锁key
+     */
+    public static final String WAYBILL_NO_GENERATE_KEY = "order:waybill:no:generate:%s";
+
+
     /**
      * 消费请求有效时间(秒)
      */

+ 20 - 2
sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/enums/MessageEnum.java

@@ -13,8 +13,26 @@ public enum MessageEnum {
     //认证通过
     AUDIT_PASS("SYSTEM","SYSTEM_ENT_APPR","认证通过通知","审核通过!您的资质已认证成功,危品汇欢迎您的入驻!","terminal,ios,android"),
     //委托单-指派成功
-    RECEIVE_ASSIGN_ENTRUST("BUSINESS", "RECEIVE_ASSIGN_ENTRUST", "新委托单通知",
-            "${firmName}委托承运:从${loadAddress}至${unloadAddress},承运${supplyName},委托量${weight}吨,运价${price}!","terminal,ios,android");
+    RECEIVE_ASSIGN_ENTRUST("BUSINESS", "BUSINESS_RECEIVE_ASSIGN_ENTRUST", "新委托单通知",
+            "${firmName}委托承运:从${loadAddress}至${unloadAddress},承运${supplyName},委托量${weight}吨,运价${price}!","terminal,ios,android"),
+
+    /**
+     * 新销售订单(有新的待受理订单)
+     */
+    NEW_SALE_ORDER("BUSINESS", "BUSINESS_TORDER_NEW_SALE", "有新的待受理订单",
+                                   "${firmName}发起采购,请及时进行受理;订单号:${orderNo}","terminal,ios,android"),
+
+    /**
+     * 新采购订单(有新的代客下单信息)
+     */
+    NEW_PURCHASE_ORDER("BUSINESS", "BUSINESS_TORDER_NEW_PURCHASE", "有新的代客下单信息",
+                           "${firmName}代您发起了商品采购,请确认;订单号:${orderNo}","terminal,ios,android"),
+    /**
+     * 采购订单被驳回
+     */
+    REJECT_PURCHASE_ORDER("BUSINESS", "BUSINESS_TORDER_REJECT_PURCHASE", "采购订单被驳回",
+            "您的采购申请被${firmName}驳回,请及时查看;订单号:${orderNo}","terminal,ios,android"),
+    ;
 
     /**
      * 消息分类

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

@@ -39,6 +39,11 @@ public class UnitInfoDetailRes implements Serializable {
      */
     private String firmName;
 
+    /**
+     * 联系人id
+     */
+    private Long contactsId;
+
     /**
      * 联系人姓名
      */

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

@@ -149,7 +149,7 @@ public class KwcContractTradeService {
             queryListResVo.setSigningWayName(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(), queryListResDto.getSigningWay()));
             queryListResVo.setSigningWay(queryListResDto.getSigningWay());
             queryListResVo.setAmount(queryListResDto.getAmount());
-            queryListResVo.setPerformedAmount(new BigDecimal("0"));
+            queryListResVo.setPerformedAmount(queryListResDto.getPerformedAmount());
             list.add(queryListResVo);
         }
         return list;

+ 1 - 0
sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractLogisticsMapper.xml

@@ -70,6 +70,7 @@
                 <foreach collection="allEnt" separator="," open="(" close=")" item="item">
                     #{item}
                 </foreach>
+               else 1 = 1
                  end
             and b.del_flag = 0
           left join kwc_contract_logistics_track c on a.id = c.contract_id and c.del_flag = 0 and c.type = 1

+ 3 - 1
sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractTradeMapper.xml

@@ -59,7 +59,8 @@
                b.firm_name entName,
                e.ent_id targetEntId,
                e.firm_name targetEntName,
-               a.contract_pid contractPid
+               a.contract_pid contractPid,
+               a.performed_amount performedAmount
           from kwc_contract_trade a
           left join kwc_contract_trade_unit b
             on a.id = b.contract_id
@@ -68,6 +69,7 @@
                 <foreach collection="allEnt" separator="," open="(" close=")" item="item">
                     #{item}
                 </foreach>
+               else 1=1
                 end
            and b.del_flag = 0
           left join kwc_contract_trade_track c on a.id = c.contract_id and c.del_flag = 0 and c.type = 1

+ 1 - 1
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/KwmMessageUserService.java

@@ -83,7 +83,7 @@ public class KwmMessageUserService {
     /**
      * @param messageUsers
      * @return void
-     * @desc: 批量插入(不直接批量插入,防止daoAspect切面失效)
+     * @desc: 批量插入
      * @author: yzc
      * @date: 2023-06-09 15:58
      */

+ 15 - 5
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SckwMessageHandlerService.java

@@ -3,9 +3,9 @@ package com.sckw.message.service;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
 import com.sckw.core.utils.StringUtils;
-import com.sckw.redis.constant.RedisConstant;
 import com.sckw.message.model.KwmMessage;
 import com.sckw.message.model.KwmMessageUser;
+import com.sckw.redis.constant.RedisConstant;
 import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.stream.enums.MessageEnum;
 import com.sckw.stream.model.SckwMessage;
@@ -52,9 +52,16 @@ public class SckwMessageHandlerService {
         }
         //构建message对象
         MessageEnum messageEnum = sckwMessage.getMessageEnum();
-        KwmMessage kwmMessage = KwmMessage.builder().category(messageEnum.getCategory()).type(messageEnum.getType()).title(messageEnum.getTitle())
-                .content(messageEnum.getContent()).clientType(messageEnum.getPushType()).url(sckwMessage.getMsgUrl())
-                .params(JSON.toJSONString(sckwMessage.getParams())).build();
+        String content = StringUtils.replaceTextVar(messageEnum.getContent(), sckwMessage.getParams());
+        KwmMessage kwmMessage = KwmMessage.builder()
+                .category(messageEnum.getCategory())
+                .type(messageEnum.getType())
+                .title(messageEnum.getTitle())
+                .content(content)
+                .clientType(messageEnum.getPushType())
+                .url(sckwMessage.getMsgUrl())
+                .params(JSON.toJSONString(sckwMessage.getParams()))
+                .build();
         kwmMessage.setCreateBy(sckwMessage.getCreateBy());
         kwmMessage.setUpdateBy(sckwMessage.getCreateBy());
         Long msgId = kwmMessageService.insert(kwmMessage);
@@ -62,7 +69,10 @@ public class SckwMessageHandlerService {
         List<String> userIdList = Arrays.asList(userIds.split(","));
         List<KwmMessageUser> messageUsers = Lists.newArrayList();
         userIdList.forEach(e -> {
-            KwmMessageUser messageUser = KwmMessageUser.builder().userId(Long.valueOf(e)).msgId(msgId).build();
+            KwmMessageUser messageUser = KwmMessageUser.builder()
+                    .userId(Long.valueOf(e))
+                    .msgId(msgId)
+                    .build();
             messageUser.setCreateBy(sckwMessage.getCreateBy());
             messageUser.setUpdateBy(sckwMessage.getCreateBy());
             messageUsers.add(messageUser);

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

@@ -2,6 +2,7 @@ package com.sckw.order.dubbo;
 
 import com.alibaba.fastjson2.JSON;
 import com.google.common.collect.Lists;
+import com.sckw.contract.api.RemoteContractService;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.utils.BeanUtils;
@@ -22,6 +23,7 @@ import com.sckw.redis.constant.RedisConstant;
 import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.stream.model.SckwBusSum;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.stream.function.StreamBridge;
@@ -53,6 +55,9 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
     @Autowired
     private KwoTradeOrderUnitService tradeOrderUnitService;
 
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private RemoteContractService remoteContractService;
+
 
     @Override
     public OrderDetailRes getOrderDetailById(Long tOrderId) {
@@ -170,11 +175,16 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
             BigDecimal actualAmount = Objects.equals(order.getDeliveryType(), DictEnum.DELIVERY_TYPE_0.getValue()) ? actualLoadAmount : actualUnloadAmount;
             order.setActualAmount(actualAmount).setUpdateBy(param.getUpdateBy());
             if (param.getIsAllComplete() && actualAmount.compareTo(order.getAmount()) >= 0) {
+                //完结订单
                 order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue()));
+                //记录状态
                 KwoTradeOrderTrack track = new KwoTradeOrderTrack();
                 track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setStatus(order.getStatus())
                         .setCreateBy(updateBy).setUpdateBy(updateBy);
                 kwoTradeOrderTrackService.insert(track);
+                //更新合同履约量
+                KwoTradeOrderContract contract = kwoTradeOrderContractService.getByOrderId(order.getId());
+                remoteContractService.updatePerformed(contract.getContractId(), actualAmount);
             }
             kwoTradeOrderService.updateById(order);
             //更新mongodb

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

@@ -57,6 +57,11 @@ public class KwoTradeOrderUnit extends BaseModel implements Serializable {
      */
     private String firmName;
 
+    /**
+     * 联系人id
+     */
+    private Long contactsId;
+
     /**
      * 联系人姓名
      */

+ 3 - 3
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AcceptanceOrderParam.java

@@ -26,15 +26,15 @@ public class AcceptanceOrderParam {
     private Long id;
 
     @NotNull(message = "订单总量不能为空")
-    @DecimalMin(value = "0.00",message = "订单总量最小为零")
+    @DecimalMin(value = "0.01",message = "订单总量必须大于零")
     private BigDecimal amount;
 
     @NotNull(message = "订单成交单价不能为空")
-    @DecimalMin(value = "0.00",message = "订单成交单价最小为零")
+    @DecimalMin(value = "0.01",message = "订单成交单价必须大于零")
     private BigDecimal unitPrice;
 
     @NotNull(message = "订单金额不能为空")
-    @DecimalMin(value = "0.00",message = "订单金额最小为零")
+    @DecimalMin(value = "0.01",message = "订单金额必须大于零")
     private BigDecimal price;
 
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")

+ 6 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/UnitInfo.java

@@ -37,6 +37,12 @@ public class UnitInfo {
     @NotBlank(message = "企业名称不能为空")
     private String firmName;
 
+    /**
+     * 联系人id
+     */
+    @NotNull(message = "联系人id不能为空")
+    private Long contactsId;
+
     /**
      * 联系人姓名
      */

+ 38 - 15
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -266,6 +266,7 @@ public class KwoTradeOrderService {
             throw new BusinessException(updateResult.getMsg());
         }
         addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
+        //TODO:发送提醒消息
     }
 
     /**
@@ -387,6 +388,7 @@ public class KwoTradeOrderService {
             throw new BusinessException(updateResult.getMsg());
         }
         addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
+        //TODO:发送提醒消息
     }
 
 
@@ -518,19 +520,23 @@ public class KwoTradeOrderService {
         //单位信息
         List<KwoTradeOrderUnit> units = kwoTradeOrderUnitService.getByOrderId(id);
         if (CollectionUtils.isNotEmpty(units)) {
-            List<UnitInfoDetailRes> unitInfos = BeanUtils.copyToList(units, UnitInfoDetailRes.class);
-            unitInfos.forEach(e -> {
-                e.setUnitTypeLabel(DictEnum.getLabel(DictTypeEnum.TORDER_UNIT_TYPE.getType(), e.getUnitType()));
+            List<UnitInfoDetailRes> unitInfos = new ArrayList<>(units.size());
+            units.forEach(e -> {
+                UnitInfoDetailRes unit = BeanUtils.copyProperties(e, UnitInfoDetailRes.class);
+                unit.setUnitTypeLabel(DictEnum.getLabel(DictTypeEnum.TORDER_UNIT_TYPE.getType(), unit.getUnitType()));
+                unitInfos.add(unit);
             });
             detail.setUnitInfo(unitInfos);
         }
         //地址信息
         List<KwoTradeOrderAddress> addressList = kwoTradeOrderAddressService.getByOrderId(id);
         if (CollectionUtils.isNotEmpty(addressList)) {
-            List<AddressInfoDetailRes> addressInfoDetails = BeanUtils.copyToList(addressList, AddressInfoDetailRes.class);
-            addressInfoDetails.forEach(e -> {
-                e.setAddressTypeLabel(DictEnum.getLabel(DictTypeEnum.TORDER_ADDRESS_TYPE.getType(), e.getAddressType()));
-                e.setTypeLabel(DictEnum.getLabel(DictTypeEnum.ADDRESS_TYPE.getType(), e.getType()));
+            List<AddressInfoDetailRes> addressInfoDetails = new ArrayList<>(addressList.size());
+            addressList.forEach(e -> {
+                AddressInfoDetailRes address = BeanUtils.copyProperties(e, AddressInfoDetailRes.class);
+                address.setAddressTypeLabel(DictEnum.getLabel(DictTypeEnum.TORDER_ADDRESS_TYPE.getType(), address.getAddressType()));
+                address.setTypeLabel(DictEnum.getLabel(DictTypeEnum.ADDRESS_TYPE.getType(), address.getType()));
+                addressInfoDetails.add(address);
             });
             detail.setAddressInfo(addressInfoDetails);
         }
@@ -610,6 +616,10 @@ public class KwoTradeOrderService {
         ValetOrderParam valetOrderParam = BeanUtils.copyProperties(param, ValetOrderParam.class);
 
         addOtherOrderInfo(order, valetOrderParam, true);
+        //TODO:发送提醒消息
+        if (Objects.equals(param.getOperateType(), 1)) {
+
+        }
     }
 
 
@@ -675,6 +685,9 @@ public class KwoTradeOrderService {
             if (StringUtils.isBlank(e.getFirmName())) {
                 throw new BusinessException("企业名称不能为空!");
             }
+            if (Objects.isNull(e.getContactsId())) {
+                throw new BusinessException("联系人id不能为空!");
+            }
             if (StringUtils.isBlank(e.getContacts())) {
                 throw new BusinessException("联系人姓名不能为空!");
             }
@@ -830,6 +843,7 @@ public class KwoTradeOrderService {
         updateParam.setTOrderId(order.getId()).setStatus(order.getStatus()).setUpdateBy(LoginUserHolder.getUserId())
                 .setUpdateByName(LoginUserHolder.getUserName()).setUpdateTime(new Date());
         saveMongoDb(3, updateParam);
+        //TODO:发送提醒消息
     }
 
     /**
@@ -860,7 +874,9 @@ public class KwoTradeOrderService {
      * @return: void
      */
     public void completeOrder(CompleteOrderParam param) {
-        KwoTradeOrder order = getById(param.getId());
+        BigDecimal actualAmount = param.getActualAmount();
+        Long tOrderId = param.getId();
+        KwoTradeOrder order = getById(tOrderId);
         if (Objects.isNull(order)) {
             throw new BusinessException("Order not found");
         }
@@ -870,22 +886,22 @@ public class KwoTradeOrderService {
         if (kwoTradeOrderUnitService.entMatch(param.getId(), LoginUserHolder.getEntId(), DictEnum.TORDER_UNIT_TYPE_2.getValue())) {
             throw new BusinessException("无订单操作权限!");
         }
-        if (transportDubboService.checkLogisticsOrderByTradeOrderId(param.getId())) {
+        if (transportDubboService.checkLogisticsOrderByTradeOrderId(tOrderId)) {
             throw new CustomPromptException(HttpStatus.COMPLETE_TORDER_FAIL_CODE, "订单存在未完成的物流托运,不可完结!");
         }
-        String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, param.getId());
+        String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, tOrderId);
         if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
             throw new BusinessException("业务繁忙,请稍后再试!");
         }
         try {
-            order.setActualAmount(param.getActualAmount()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue()));
+            order.setActualAmount(actualAmount).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue()));
             kwoTradeOrderMapper.updateById(order);
             //订单状态记录
             KwoTradeOrderTrack track = new KwoTradeOrderTrack();
-            track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setRemark(param.getRemark()).setStatus(order.getStatus());
+            track.setTOrderId(tOrderId).setTOrderNo(order.getTOrderNo()).setRemark(param.getRemark()).setStatus(order.getStatus());
             kwoTradeOrderTrackService.insert(track);
-            if (param.getActualAmount().compareTo(order.getAmount()) != 0) {
-                KwoTradeOrderGoods goods = kwoTradeOrderGoodsService.getByOrderId(param.getId());
+            if (actualAmount.compareTo(order.getAmount()) != 0) {
+                KwoTradeOrderGoods goods = kwoTradeOrderGoodsService.getByOrderId(tOrderId);
                 if (Objects.isNull(goods)) {
                     throw new BusinessException("商品信息异常!");
                 }
@@ -896,6 +912,12 @@ public class KwoTradeOrderService {
                     throw new BusinessException(updateResult.getMsg());
                 }
             }
+            //更新合同履约量
+            KwoTradeOrderContract contract = kwoTradeOrderContractService.getByOrderId(tOrderId);
+            if (Objects.isNull(contract) || Objects.isNull(contract.getContractId())) {
+                throw new BusinessException("订单合同信息异常");
+            }
+            remoteContractService.updatePerformed(contract.getContractId(), actualAmount);
             //mongodb更新订单状态
             SckwTradeOrder updateParam = new SckwTradeOrder();
             updateParam.setTOrderId(order.getId()).setActualAmount(order.getActualAmount()).setStatus(order.getStatus())
@@ -925,7 +947,8 @@ public class KwoTradeOrderService {
         }
         //排除草稿状态权限匹配
         List<Long> filterIds = list.stream().filter(e -> !(Objects.equals(e.getStatus(), 0))).map(KwoTradeOrder::getId).toList();
-        if (kwoTradeOrderUnitService.entBatchMatch(filterIds, LoginUserHolder.getEntId(), String.valueOf(param.getOrderType()))) {
+        if (CollectionUtils.isNotEmpty(filterIds) &&
+                kwoTradeOrderUnitService.entBatchMatch(filterIds, LoginUserHolder.getEntId(), String.valueOf(param.getOrderType()))) {
             throw new BusinessException("无订单操作权限!");
         }
         LambdaUpdateWrapper<KwoTradeOrder> updateWrapper = new LambdaUpdateWrapper<>();

+ 2 - 0
sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderUnitMapper.xml

@@ -12,6 +12,7 @@
             ent_id,
             top_ent_id,
             firm_name,
+            contacts_id,
             contacts,
             phone,
             remark,
@@ -32,6 +33,7 @@
                 #{item.entId,jdbcType=VARCHAR},
                 #{item.topEntId,jdbcType=VARCHAR},
                 #{item.firmName,jdbcType=VARCHAR},
+                #{item.contactsId,jdbcType=BIGINT},
                 #{item.contacts,jdbcType=VARCHAR},
                 #{item.phone,jdbcType=VARCHAR},
                 #{item.remark,jdbcType=VARCHAR},

+ 1 - 0
sckw-modules/sckw-report/src/main/java/com/sckw/report/controller/KwTransportController.java

@@ -251,6 +251,7 @@ public class KwTransportController {
         }
     }
 
+
     /**
      * 运单管理-运单列表 运单地址查询接口
      * @param tag

+ 4 - 2
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderService.java

@@ -267,7 +267,6 @@ public class KwOrderService {
         Long entId = LoginUserHolder.getEntId();
         String topEnt = Objects.equals(params.getOrderType(), 1) ? "procureTopEntId" : "supplyTopEntId";
         List<Integer> status = Arrays.asList(1, 4, 5, 7);
-        Query query = new Query();
         Criteria criteria = new Criteria();
         criteria.and(topEnt).is(entId).and("status").in(status).and("delFlag").is(0);
         Aggregation aggregation = Aggregation.newAggregation(
@@ -424,12 +423,15 @@ public class KwOrderService {
             OrderListRes order = BeanUtils.copyProperties(e, OrderListRes.class);
             order.setStatusLabel(DictEnum.getLabel(DictTypeEnum.TORDER_STATUS.getType(), String.valueOf(e.getStatus())))
                     .setTrading(DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), e.getTrading()))
+                    .setTradingLabel(DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), e.getTrading()))
                     .setDeliveryType(DictEnum.getLabel(DictTypeEnum.DELIVERY_TYPE.getType(), e.getDeliveryType()))
+                    .setDeliveryTypeLabel(DictEnum.getLabel(DictTypeEnum.DELIVERY_TYPE.getType(), e.getDeliveryType()))
                     .setPickupTypeLabel(DictEnum.getLabel(DictTypeEnum.PICKUP_TYPE.getType(), e.getPickupType()))
                     .setLoadDetailAddressInfo(loadCityName + loadDetailAddress)
                     .setUnloadDetailAddressInfo(unloadCityName + unloadDetailAddress)
                     .setWaitEntrustAmount(getWaitEntrustAmount(e.getAmount(), e.getActualAmount()))
-                    .setSource(DictEnum.getLabel(DictTypeEnum.TORDER_SOURCE.getType(), e.getSource()));
+                    .setSource(DictEnum.getLabel(DictTypeEnum.TORDER_SOURCE.getType(), e.getSource()))
+                    .setSourceLabel(DictEnum.getLabel(DictTypeEnum.TORDER_SOURCE.getType(), e.getSource()));
             result.add(order);
         });
         return PageResult.build(params.getPage(), params.getPageSize(), count, result);

+ 38 - 13
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwTransportService.java

@@ -417,15 +417,32 @@ public class KwTransportService {
                     null : DateUtil.getDateTime(waybillOrder.getCreateTime()));
             vo.setUpdateTime(waybillOrder.getUpdateTime() == null ?
                     null : DateUtil.getDateTime(waybillOrder.getUpdateTime()));
-            vo.setDeficitAmount(waybillOrder.getDeficitAmount() == null ?
-                    null : String.valueOf(waybillOrder.getDeficitAmount()));
-            BigDecimal deficitLoss = waybillOrder.getLoss() == null ? BigDecimal.valueOf(0) : waybillOrder.getLoss();
-            BigDecimal deficitAmount = waybillOrder.getDeficitAmount() == null ? BigDecimal.valueOf(0) : waybillOrder.getDeficitAmount();
-            BigDecimal deficitRealAmount = BigDecimal.valueOf(0);
-            if(deficitAmount.compareTo(BigDecimal.valueOf(0)) > 0) {
-                deficitRealAmount = deficitLoss.subtract(deficitAmount);
+            // 货损量
+            BigDecimal deficitAmount = waybillOrder.getDeficitAmount() == null ?
+                    BigDecimal.valueOf(0) : waybillOrder.getDeficitAmount();
+            vo.setDeficitAmount(String.valueOf(deficitAmount));
+            // 存在装卸货差时 计算扣亏量
+            BigDecimal lossAmount = BigDecimal.valueOf(0);
+            BigDecimal loss = waybillOrder.getLoss() == null ? BigDecimal.valueOf(0) : waybillOrder.getLoss();
+            if(deficitAmount.compareTo(BigDecimal.valueOf(0)) > 0 && loss.compareTo(BigDecimal.valueOf(0)) > 0) {
+                String lossUnit = waybillOrder.getLossUnit();
+                Map<String, SysDictResDto> LossUnitType = remoteSystemService.queryDictMapByType(DictTypeEnum.TAX_RATE_TYPE.getType());
+                SysDictResDto sysDictRes = LossUnitType.get(lossUnit);
+
+                if(sysDictRes.getLabel().equals("%")) {
+                    // 百分比
+                    lossAmount = loss.multiply(waybillOrder.getLoadAmount()).divide(BigDecimal.valueOf(100));
+                } else {
+                    // 千分比
+                    lossAmount = loss.multiply(waybillOrder.getLoadAmount()).divide(BigDecimal.valueOf(1000));
+                }
+                lossAmount = deficitAmount.subtract(lossAmount);
+                if(lossAmount.compareTo(BigDecimal.valueOf(0)) < 0) {
+                    lossAmount = BigDecimal.valueOf(0);
+                }
             }
-            vo.setDeficitRealAmount(deficitRealAmount.toString());
+            // 实际扣亏量
+            vo.setDeficitRealAmount(lossAmount.setScale(2).toString());
             vo.setGoodsPriceUnit(waybillOrder.getGoodsPriceUnit() == null ?
                     null : String.valueOf(waybillOrder.getGoodsPriceUnit()));
             returnList.add(vo);
@@ -501,12 +518,20 @@ public class KwTransportService {
         //设置模糊查询匹配规则  忽略大小写
         // 创建条件对象
         Criteria criteria = new Criteria();
+        Long entId = LoginUserHolder.getEntId();
         //判断承运还是托运企业
-        if (unitType.equals(NumberConstant.ONE)) {
-            criteria.and("checkEntId").is(LoginUserHolder.getEntId());
-        } else {
-            criteria.and("carrierEntId").is(LoginUserHolder.getEntId());
-        }
+//        if (unitType.equals(String.valueOf(NumberConstant.ONE))) {
+//            //托运
+//            criteria.orOperator(
+//                    Criteria.where("checkTopEntId").is("177802391955968000"),
+//                    Criteria.where("checkEntId").is("177802391955968000"));
+//        } else {
+//            //承运企业主键ID
+////            criteria.and("carrierTopEntId").is(entMap.get(LoginUserHolder.getEntId()).getId());
+//            criteria.orOperator(
+//                    Criteria.where("carrierTopEntId").is("177802391955968000"),
+//                    Criteria.where("carrierEntId").is("177802391955968000"));
+//        }
         List<String> stringList = StringUtils.splitStrToList(contractIds, String.class);
         criteria.and("delFlag").is(String.valueOf(NumberConstant.ZERO));
         Query query1 = new Query(criteria);

+ 15 - 0
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/vo/OrderListRes.java

@@ -62,10 +62,20 @@ public class OrderListRes {
      * 交易方式(预付款、货到付款)
      */
     private String trading;
+
+    /**
+     * 交易方式label
+     */
+    private String tradingLabel;
     /**
      * 交付类型(签发交付、签收交付)
      */
     private String deliveryType;
+
+    /**
+     * 交付类型label
+     */
+    private String deliveryTypeLabel;
     /**
      * 提货方式(采方自提、供应配送)
      */
@@ -79,6 +89,11 @@ public class OrderListRes {
      */
     private String source;
 
+    /**
+     * 下单方式label
+     */
+    private String sourceLabel;
+
     /**
      * 合同主键
      */

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

@@ -11,6 +11,7 @@ import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.param.AcceptCarriageOrderQuery;
+import com.sckw.transport.model.param.ContractParam;
 import com.sckw.transport.model.param.DriverParam;
 import com.sckw.transport.model.param.LogisticsOrderParam;
 import com.sckw.transport.service.AcceptCarriageOrderService;
@@ -99,6 +100,22 @@ public class AcceptCarriageOrderController {
         }
     }
 
+
+    /**
+     * 承运合同/托运合同-根据合同id获取托运订单列表
+     * @param contractParam 请求参数
+     * @return
+     */
+    @RequestMapping(value = "/getLogisticsOrderContract", method = RequestMethod.POST)
+    public HttpResult getLogisticsOrderContract(@Validated @RequestBody ContractParam contractParam) {
+        try {
+            return transportCommonService.getLogisticsOrderByContractId(contractParam);
+        } catch (Exception e) {
+            log.error("承运合同/托运合同-根据合同id获取托运订单列表 error:{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
     /**
      * 托运订单/承运订单-撤销托运
      *

+ 13 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/WaybillManagementController.java

@@ -2,7 +2,9 @@ package com.sckw.transport.controller;
 
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.transport.model.dto.AddressDropListDTO;
 import com.sckw.transport.model.dto.WaybillOrderDTO;
+import com.sckw.transport.model.dto.WaybillOrderTicketApprovalDto;
 import com.sckw.transport.service.WaybillManagementService;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
@@ -68,4 +70,15 @@ public class WaybillManagementController {
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }
+
+    /**
+     * @desc 获取企业地址信息
+     * @author zk
+     * @date 2023/9/1
+     **/
+    @GetMapping("/findAddressList")
+    public HttpResult findAddressList(){
+        AddressDropListDTO addresss = waybillManagementService.findAddressList();
+        return HttpResult.ok(addresss);
+    }
 }

+ 6 - 9
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java

@@ -9,10 +9,7 @@ import com.sckw.transport.model.KwtLogisticsOrder;
 import com.sckw.transport.model.param.AcceptCarriageOrderQuery;
 import com.sckw.transport.model.param.DriverParam;
 import com.sckw.transport.model.param.LogisticsOrderParam;
-import com.sckw.transport.model.vo.AcceptCarriageOrderVO;
-import com.sckw.transport.model.vo.DriverListVo;
-import com.sckw.transport.model.vo.OrderFinishVO;
-import com.sckw.transport.model.vo.SubcontractConsignmentVO;
+import com.sckw.transport.model.vo.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -59,6 +56,8 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      */
     List<com.sckw.transport.model.dto.LogisticsOrderDTO> selectOrderListNotPage(@Param("id") String id, @Param("type") String type);
 
+    List<SckwLogisticsOrderVO> selectOrderListByContractId(@Param("type") String type, @Param("entId") Long entId, @Param("contractIds") List<Long> contractIds);
+
     /**
      * 销售订单-采购订单-托运详情(导出)
      *
@@ -187,7 +186,6 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
     List<DriverListVo> selectLoopOrderAndDriverListByOrderIds(@Param("idsList") List<Long> idsList);
 
     /**
-     *
      * @param query
      * @param orderList
      * @param type
@@ -202,7 +200,6 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
 
 
     /**
-     *
      * @param query
      * @param orderList
      * @param type
@@ -210,9 +207,9 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      * @return
      */
     List<TableTops> countLogisticsOrderListByStatus(@Param("query") AcceptCarriageOrderQuery query,
-                                                     @Param("orderList") List<Integer> orderList,
-                                                     @Param("type") String type,
-                                                     @Param("entId") Long entId
+                                                    @Param("orderList") List<Integer> orderList,
+                                                    @Param("type") String type,
+                                                    @Param("entId") Long entId
     );
 
     /**

+ 10 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderAddressMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.transport.model.KwtWaybillOrderAddress;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+import java.util.List;
 
 @Mapper
 public interface KwtWaybillOrderAddressMapper extends BaseMapper<KwtWaybillOrderAddress> {
@@ -18,4 +19,13 @@ public interface KwtWaybillOrderAddressMapper extends BaseMapper<KwtWaybillOrder
      * @date 2023/7/20
      **/
     KwtWaybillOrderAddress findByAddress(@Param("wOrderId") Long wOrderId, @Param("addressType") Integer addressType);
+
+    /**
+     * @param entId 企业信息
+     * @param addressType 地址类型(1装货地址、2卸货地址)
+     * @desc 查询车辆运单装卸货地址CODE
+     * @author zk
+     * @date 2023/7/20
+     **/
+    List<Integer> findAddressCodeList(@Param("entId") Long entId, @Param("addressType") Integer addressType);
 }

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

@@ -147,4 +147,6 @@ public interface KwtWaybillOrderMapper extends BaseMapper<KwtWaybillOrder> {
             @Param("startDate") String startDate,
             @Param("endDate") String endDate
     );
+
+    String getMaxOrderNo(@Param("lOrderNo") String lOrderNo);
 }

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

@@ -217,6 +217,16 @@ public class AddOrderDTO {
     @Length(max = 200, message = "单据编号长度错误最大长度:{max}")
     private String remark;
 
+    /**
+     *装货地址id
+     */
+    private String loadId;
+
+    /**
+     *装货地址名称
+     */
+    private String loadName;
+
     /**
      * 装货城市编码
      */
@@ -259,6 +269,16 @@ public class AddOrderDTO {
      */
     private String loadLng;
 
+    /**
+     *卸货地址id
+     */
+    private String unloadId;
+
+    /**
+     *卸货地址名称
+     */
+    private String unloadName;
+
     /**
      * 卸货城市编码
      */

+ 26 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/ContractParam.java

@@ -0,0 +1,26 @@
+package com.sckw.transport.model.param;
+
+import com.sckw.core.model.page.PageRequest;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+/**
+ * @author lfdc
+ * @description 合同查询列表param
+ * @date 2023-08-03 13:08:51
+ */
+@Data
+public class ContractParam extends PageRequest {
+
+    /**
+     * 合同id  “,”隔开
+     */
+    @NotBlank(message = "合同ids不能为空")
+    private String contractIds;
+    /**
+     * 类型 1 托运合同 2 承运合同
+     */
+    @NotBlank(message = "托运合同不能为空")
+    private String contractType;
+
+}

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/DriverListVo.java

@@ -36,7 +36,7 @@ public class DriverListVo {
     /**
      * 运力状态(0空闲/1任务中)
      */
-    private Integer transportStatus;
+    private String transportStatus;
 
     /**
      * 运输次数

+ 508 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/SckwLogisticsOrderVO.java

@@ -0,0 +1,508 @@
+package com.sckw.transport.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.Date;
+
+/**
+ * @author zk
+ * @desc MongoDB-物流订单信息
+ * @date 2023/7/8
+ */
+@Data
+public class SckwLogisticsOrderVO {
+
+
+    /**
+     * 物流订单ID
+     */
+    private Long lOrderId;
+
+    /**
+     * 物流订单编号
+     */
+    private String lOrderNo;
+
+    /**
+     * 分包上级物流订单id
+     */
+    private Long lOrderPid;
+
+    /**
+     * 单据下所有的id(包含一二三级订单id“,”隔开)
+     */
+    private String lOrderPids;
+
+    /**
+     * 对账是否绑定 0未绑定 1已绑定
+     */
+    private String bindStatus;
+
+
+    /**
+     * 交易订单id(kwo_trade_order)
+     */
+    private Long tOrderId;
+
+    /**
+     * 交易订单编号(kwo_trade_order)
+     */
+    private String tOrderNo;
+
+    /**
+     * 物流订单类型(1 贸易订单生成物流订单、2 自建物流订单)
+     */
+    private Integer type;
+
+    /**
+     * 结算周期(周结、月结、季结)
+     */
+    private Long settlementCycle;
+
+    /**
+     * 结算周期(周结、月结、季结)
+     */
+    private String settlementCycleLabel;
+
+    /**
+     * 运价
+     */
+    private BigDecimal price;
+
+    /**
+     * 运价方式(元/吨、元/车)
+     */
+    private Long priceType;
+
+    /**
+     * 已委托量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 单位(吨、方、箱、件)
+     */
+    private String unit;
+
+    /**
+     * 单位(吨、方、箱、件)
+     */
+    private String unitLabel;
+
+    /**
+     * 合理损耗
+     */
+    private BigDecimal loss;
+
+    /**
+     * 合理损耗单位(‰/kG)
+     */
+    private String lossUnit;
+    /**
+     * 合理损耗单位(‰/kG)
+     */
+    private String lossUnitLabel;
+
+    /**
+     * 商品价值(扣亏货值)
+     */
+    private BigDecimal goodsPrice;
+
+    /**
+     * 商品价值(扣亏货值)单位
+     */
+    private String goodsPriceUnit;
+
+    /**
+     * 商品价值(扣亏货值)单位
+     */
+    private String goodsPriceUnitLabel;
+
+    /**
+     * 卸货日期
+     */
+    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+    private Date unloadTime;
+
+    /**
+     * 装货日期
+     */
+    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+    private Date loadTime;
+
+    /**
+     * 分包量
+     */
+    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 BigDecimal totalDeficitAmount;
+
+    /**
+     * 总亏吨扣款(自己承运总亏吨扣款+分包承运总亏吨扣款)
+     */
+    private BigDecimal totalDeficitPrice;
+
+    /**
+     * 付款方式(预付款、线下支付、第三方支付)
+     */
+    private Long payment;
+
+    /**
+     * 发票税率(%)
+     */
+    private BigDecimal taxRate;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 业务状态
+     */
+    private String status;
+    /**
+     * 业务状态 label
+     */
+    private String statusLabel;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 企业名称
+     */
+    private String firmName;
+
+    /**
+     * 商品主键
+     */
+    private Long goodsId;
+
+    /**
+     * 商品编号
+     */
+    private String goodsCode;
+
+    /**
+     * 商品名称
+     */
+    private String goodsName;
+
+    /**
+     * 商品类型
+     */
+    private String goodsType;
+
+    /**
+     * 商品行业
+     */
+    private Long goodsIndustry;
+
+    /**
+     * 商品尺寸大小
+     */
+    private String goodsSpec;
+
+    /**
+     * 合同主键
+     */
+    private String contractId;
+
+    /**
+     * 合同编号
+     */
+    private String contractNo;
+
+    /**
+     * 合同mc
+     */
+    private String contractName;
+
+    /**
+     * 合同签约方式
+     */
+    private String contractSigningWay;
+
+    /**
+     * 托运企业主键ID
+     */
+    private Long checkId;
+
+    /**
+     * 托运企业主键ID
+     */
+    private Long checkEntId;
+
+    /**
+     * 托运一级企业主键ID
+     */
+    private Long checkTopEntId;
+
+    /**
+     * 托运企业名称
+     */
+    private String checkFirmName;
+
+    /**
+     * 托运企业联系人
+     */
+    private String checkContacts;
+
+    /**
+     * 托运企业联系电话
+     */
+    private String checkPhone;
+
+    /**
+     * 承运企业主键ID
+     */
+    private Long carrierId;
+
+    /**
+     * 承运企业主键ID
+     */
+    private Long carrierEntId;
+
+    /**
+     * 承运企业主键ID
+     */
+    private Long carrierTopEntId;
+
+    /**
+     * 承运企业名称
+     */
+    private String carrierFirmName;
+
+    /**
+     * 承运企业联系人
+     */
+    private String carrierContacts;
+
+    /**
+     * 承运企业联系电话
+     */
+    private String carrierPhone;
+
+    /**
+     * 发货单位
+     */
+    private String shipmentsUnitEntId;
+
+    /**
+     * 发货单位
+     */
+    private String shipmentsUnit;
+
+    /**
+     * 收货单位
+     */
+    private String receiveGoodsUnitEntId;
+
+    /**
+     * 收货单位
+     */
+    private String receiveGoodsUnit;
+
+    /**
+     * 装货地址类型
+     */
+    private Long loadType;
+
+    /**
+     * 装货联系人姓名
+     */
+    private String loadContacts;
+
+    /**
+     * 装货联系电话
+     */
+    private String loadPhone;
+
+    /**
+     * 装货所在地区
+     */
+    private Integer loadCityCode;
+
+    /**
+     * 装货所属区域名称
+     */
+    private String loadCityName;
+
+    /**
+     * 装货详细地址
+     */
+    private String loadDetailAddress;
+
+    /**
+     * 装货纬度
+     */
+    private String loadLat;
+
+    /**
+     * 装货纬度
+     */
+    private String loadLng;
+
+    /**
+     * 卸货地址类型
+     */
+    private Long unloadType;
+
+    /**
+     * 卸货联系人姓名
+     */
+    private String unloadContacts;
+
+    /**
+     * 卸货联系电话
+     */
+    private String unloadPhone;
+
+    /**
+     * 卸货所在地区
+     */
+    private Integer unloadCityCode;
+
+    /**
+     * 卸货所属区域名称
+     */
+    private String unloadCityName;
+
+    /**
+     * 卸货详细地址
+     */
+    private String unloadDetailAddress;
+
+    /**
+     * 卸货纬度
+     */
+    private String unloadLat;
+
+    /**
+     * 卸货纬度
+     */
+    private String unloadLng;
+
+    /**
+     * 创建人主键id
+     */
+    private Long createBy;
+
+    /**
+     * 创建人姓名
+     */
+    private String createByName;
+
+    /**
+     * 创建时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 更新人主键id
+     */
+    private Long updateBy;
+
+    /**
+     * 更新人姓名
+     */
+    private String updateByName;
+
+    /**
+     * 更新时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    /**
+     * 是否删除(0未删除,1删除)
+     */
+    private String delFlag;
+
+    /**
+     * 车辆运单编号
+     */
+    private String wOrderNo;
+
+    /**
+     * 分配的承运量
+     */
+    private BigDecimal carryingCapacity;
+
+    /**
+     * 计费方式
+     */
+    private String billingMode;
+    /**
+     * 计费方式
+     */
+    private String billingModeLabel;
+
+    /**
+     * 计划开始时间
+     */
+//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate startTime;
+    /**
+     * 计划结束时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate endTime;
+}

+ 17 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillDetailVO.java

@@ -43,6 +43,19 @@ public class WaybillDetailVO {
      * 亏吨量
      */
     private BigDecimal deficitAmount;
+
+
+    /**
+     * 单位
+     */
+    private String unit;
+
+
+    /**
+     * 单位翻译
+     */
+    private String unitLabel;
+
     /**
      * 合理损耗
      */
@@ -56,6 +69,10 @@ public class WaybillDetailVO {
      * 扣亏损值
      */
     private BigDecimal goodsPrice;
+    /**
+     * 扣亏损值
+     */
+    private String goodsPriceLabel;
     /**
      * 派车人
      */

+ 38 - 9
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java

@@ -825,11 +825,20 @@ public class AcceptCarriageOrderService {
                 }
             }
         }
+        vo.setUnit(kwtLogisticsOrder.getUnit());
+        if (kwtLogisticsOrder.getUnit() != null) {
+            SysDictResDto dictResDto = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.UNIT_TYPE.getType(), kwtLogisticsOrder.getUnit());
+            vo.setUnitLabel(dictResDto == null ? null : dictResDto.getLabel());
+        }
         vo.setWaybillType(waybillOrder.getType());
         vo.setDeficitAmount(waybillOrder.getDeficitAmount());
         vo.setLoss(kwtLogisticsOrder.getLoss());
         vo.setLossLabel(sysDictResDto == null ? null : sysDictResDto.getLabel());
         vo.setGoodsPrice(sckwWaybillOrder.getGoodsPrice());
+        if (kwtLogisticsOrder.getGoodsPriceUnit() != null) {
+            SysDictResDto dictResDto = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.PRICE_TYPE.getType(), kwtLogisticsOrder.getGoodsPriceUnit());
+            vo.setGoodsPriceLabel(dictResDto == null ? null : dictResDto.getLabel());
+        }
         vo.setAppointor(sckwWaybillOrder.getCreateByName());
         vo.setFleetName(sckwWaybillOrder.getCarrierFirmName());
         vo.setTruckNo(waybillOrder.getTruckNo());
@@ -884,6 +893,13 @@ public class AcceptCarriageOrderService {
             //联查数据
             if (CollectionUtils.isNotEmpty(list)) {
                 for (SubcontractConsignmentVO subcontractConsignmentVO : list) {
+                    //关联父级承运单据号
+                    if (subcontractConsignmentVO.getPid() != null) {
+                        KwtLogisticsOrder kwtLogisticsOrder = logisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>().eq(KwtLogisticsOrder::getId, subcontractConsignmentVO.getPid()));
+                        if (kwtLogisticsOrder != null) {
+                            subcontractConsignmentVO.setCarrierOrderNo(kwtLogisticsOrder.getLOrderNo());
+                        }
+                    }
                     subcontractConsignmentVO.setStatusLabel(LogisticsOrderEnum.getDestination(subcontractConsignmentVO.getStatus()));
                     if (subcontractConsignmentVO.getPriceType() != null) {
                         subcontractConsignmentVO.setPriceTypeLabel(priceDictData == null ? null : priceDictData.get(subcontractConsignmentVO.getPriceType()));
@@ -982,7 +998,10 @@ public class AcceptCarriageOrderService {
             }
             for (DriverListVo driverListVo : list) {
                 if (!ObjectUtils.isEmpty(truck)) {
-                    driverListVo.setTransportStatus(truck.get(driverListVo.getTruckNo()) == null ? null : truck.get(driverListVo.getTruckNo()).getBusinessStatus());
+                    if (truck.get(driverListVo.getTruckNo()) != null) {
+                        Integer businessStatus = truck.get(driverListVo.getTruckNo()).getBusinessStatus();
+                        driverListVo.setTransportStatus((businessStatus == 0) ? "空闲" : "任务中");
+                    }
                     driverListVo.setCarType(truck.get(driverListVo.getTruckNo()) == null ? null : truck.get(driverListVo.getTruckNo()).getTruckType());
                 }
             }
@@ -997,7 +1016,11 @@ public class AcceptCarriageOrderService {
             }
             for (DriverListVo driverListVo : list) {
                 if (!ObjectUtils.isEmpty(truck)) {
-                    driverListVo.setTransportStatus(truck.get(driverListVo.getTruckNo()) == null ? null : truck.get(driverListVo.getTruckNo()).getBusinessStatus());
+//                    driverListVo.setTransportStatus(truck.get(driverListVo.getTruckNo()) == null ? null : truck.get(driverListVo.getTruckNo()).getBusinessStatus());
+                    if (truck.get(driverListVo.getTruckNo()) != null) {
+                        Integer businessStatus = truck.get(driverListVo.getTruckNo()).getBusinessStatus();
+                        driverListVo.setTransportStatus((businessStatus == 0) ? "空闲" : "任务中");
+                    }
                     driverListVo.setCarType(truck.get(driverListVo.getTruckNo()) == null ? null : truck.get(driverListVo.getTruckNo()).getTruckType());
                 }
             }
@@ -1278,10 +1301,12 @@ public class AcceptCarriageOrderService {
 //        if (totalLoadAmount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
 //            throw new BusinessException("完结订单,实装量不能大于分配量");
 //        }
-        BigDecimal amount = logisticsOrder.getAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getAmount();
-        if (amount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
-            throw new BusinessException("完结订单,装货量不能大于运输总量");
-        }
+
+        //todo 2023-09-01 根据要求去除校验 物流订单手动完结,实装量可大于分配量,实卸量目前暂定不可大于实装量;根据计费方式,当对应实装或实卸大于分配量时自然完结
+//        BigDecimal amount = logisticsOrder.getAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getAmount();
+//        if (amount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
+//            throw new BusinessException("完结订单,装货量不能大于运输总量");
+//        }
         if (orderFinishDTO.getUnloadAmount().compareTo(orderFinishDTO.getLoadAmount()) > 0) {
             throw new BusinessException("完结订单,填写卸货量不能大于装货量");
         }
@@ -1357,6 +1382,10 @@ public class AcceptCarriageOrderService {
                 throw new BusinessException("单据完结出现错误!");
             }
         }
+
+        //修改合同履约量
+        commonService.updatePerformed(logisticsOrder, orderFinishDTO.getLoadAmount(), orderFinishDTO.getUnloadAmount());
+
         //修改mongodb的数据
         updateMongoDbByLogisticsOrder(logisticsOrder.getId(), orderFinishDTO, ignoreAmount);
         if (!CollectionUtils.isEmpty(list) && list.size() > 0) {
@@ -1688,7 +1717,7 @@ public class AcceptCarriageOrderService {
             SysDictResDto sysDictResDto = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.TAX_RATE_TYPE.getType(), logisticsOrder.getLossUnit());
             orderDetailVO.setLossLabel(sysDictResDto == null ? null : sysDictResDto.getLabel());
         }
-        if (logisticsOrder.getUnit()!=null){
+        if (logisticsOrder.getUnit() != null) {
             SysDictResDto sysDictResDto = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.UNIT_TYPE.getType(), logisticsOrder.getUnit());
             orderDetailVO.setNumberLabel(sysDictResDto == null ? null : sysDictResDto.getLabel());
         }
@@ -2024,7 +2053,7 @@ public class AcceptCarriageOrderService {
         loadAddress.setId(new IdWorker(NumberConstant.ONE).nextId());
         loadAddress.setLOrderId(lOrderId);
         loadAddress.setAddressType(NumberConstant.ONE);
-//        loadAddress.setName();
+        loadAddress.setName(orderDTO.getLoadName() == null ? null : orderDTO.getLoadName());
 //        loadAddress.setType();
         loadAddress.setContacts(orderDTO.getLoadContacts());
         loadAddress.setPhone(orderDTO.getLoadPhone());
@@ -2045,7 +2074,7 @@ public class AcceptCarriageOrderService {
         unloadAddress.setId(new IdWorker(NumberConstant.TWO).nextId());
         unloadAddress.setLOrderId(lOrderId);
         unloadAddress.setAddressType(NumberConstant.TWO);
-//        unloadAddress.setName();
+        unloadAddress.setName(orderDTO.getUnloadName() == null ? null : orderDTO.getUnloadName());
 //        unloadAddress.setType();
         unloadAddress.setContacts(orderDTO.getUnloadContacts());
         unloadAddress.setPhone(orderDTO.getUnloadPhone());

+ 37 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/CommonService.java

@@ -2,7 +2,10 @@ package com.sckw.transport.service;
 
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sckw.contract.api.RemoteContractService;
 import com.sckw.core.common.enums.NumberConstant;
+import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.model.enums.OrderRuleEnum;
@@ -16,12 +19,16 @@ import com.sckw.redis.constant.RedisConstant;
 import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
+import com.sckw.transport.dao.KwtLogisticsOrderContractMapper;
 import com.sckw.transport.dao.KwtLogisticsOrderMapper;
+import com.sckw.transport.model.KwtLogisticsOrder;
+import com.sckw.transport.model.KwtLogisticsOrderContract;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -37,9 +44,15 @@ public class CommonService {
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
     RemoteSystemService remoteSystemService;
 
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
+    RemoteContractService remoteContractService;
+
     @Autowired
     private KwtLogisticsOrderMapper logisticsOrderMapper;
 
+    @Autowired
+    private KwtLogisticsOrderContractMapper logisticsOrderContractMapper;
+
     /**
      * 组装返回数据
      *
@@ -107,6 +120,7 @@ public class CommonService {
         }
         return arrayList;
     }
+
     public List<String> getDiffrentList(List<String> sourceList, List<String> targetList) {
         return targetList.stream().filter(item -> sourceList.stream().allMatch(each -> !item.equals(each))).collect(Collectors.toList());
     }
@@ -146,4 +160,27 @@ public class CommonService {
             RedissonUtils.unlock(lockKey);
         }
     }
+
+    /**
+     * 修改合同履约量
+     *
+     * @param loadAmount
+     * @param unloadAmount
+     */
+    public void updatePerformed(KwtLogisticsOrder logisticsOrder, BigDecimal loadAmount, BigDecimal unloadAmount) {
+        /**
+         * 更新合同履约量
+         * 根据单据计费方式处理【目前只考虑 按照装货量 按照卸货量 】*/
+        String billingMode = logisticsOrder.getBillingMode();
+        BigDecimal actualAmount = new BigDecimal("0.00");
+        if (DictEnum.CHARGING_TYPE_1.equals(billingMode)) {
+            actualAmount = loadAmount;
+        } else if (DictEnum.CHARGING_TYPE_2.equals(billingMode)) {
+            actualAmount = unloadAmount;
+        } else {
+            throw new BusinessException("单据计费方式错误!");
+        }
+        KwtLogisticsOrderContract contract = logisticsOrderContractMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderContract>().eq(KwtLogisticsOrderContract::getLOrderId, logisticsOrder.getId()));
+        remoteContractService.updatePerformed(contract.getContractId(), actualAmount);
+    }
 }

+ 15 - 7
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ConsignOrderService.java

@@ -595,7 +595,7 @@ public class ConsignOrderService {
                             .eq(StringUtils.isNotBlank(kwtWaybillOrder.getId()), KwtWaybillOrderTicket::getWOrderId, kwtWaybillOrder.getId())
                             .eq(KwtWaybillOrderTicket::getType, NumberConstant.TWO));
                     //合理损耗
-                    BigDecimal loss = order.getLoss();
+                    BigDecimal loss = order.getLoss() == null ? new BigDecimal("0.00") : order.getLoss();
                     /**亏吨量/吨->装货量-卸货量
                      * 合理损耗值=装货量*合理损耗
                      扣亏量/吨->亏吨量-合理损耗值
@@ -646,6 +646,9 @@ public class ConsignOrderService {
 //                        String.valueOf(kwtWaybillOrder.getCreateBy()) : remoteSystemService.queryUserCacheById(kwtWaybillOrder.getCreateBy()).getName());
                     carWaybillVo.setLOrderNo(order.getLOrderNo());
                     carWaybillVo.setLOrderId(String.valueOf(order.getId()));
+                    carWaybillVo.setLoss(loss);
+                    SysDictResDto sysDictResDto = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.TAX_RATE_TYPE.getType(), order.getLossUnit());
+                    carWaybillVo.setLossLabel(sysDictResDto == null ? null : sysDictResDto.getLabel());
                     returnList.add(carWaybillVo);
                 }
             }
@@ -740,10 +743,11 @@ public class ConsignOrderService {
 //        if (totalLoadAmount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
 //            throw new BusinessException("完结订单,实装量不能大于分配量");
 //        }
-        BigDecimal amount = logisticsOrder.getAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getAmount();
-        if (amount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
-            throw new BusinessException("完结订单,装货量不能大于运输总量");
-        }
+        //todo 2023-09-01 根据要求去除校验 物流订单手动完结,实装量可大于分配量,实卸量目前暂定不可大于实装量;根据计费方式,当对应实装或实卸大于分配量时自然完结
+//        BigDecimal amount = logisticsOrder.getAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getAmount();
+//        if (amount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
+//            throw new BusinessException("完结订单,装货量不能大于运输总量");
+//        }
         if (orderFinishDTO.getUnloadAmount().compareTo(orderFinishDTO.getLoadAmount()) > 0) {
             throw new BusinessException("完结订单,填写卸货量不能大于装货量");
         }
@@ -818,6 +822,10 @@ public class ConsignOrderService {
                 throw new BusinessException("单据完结出现错误!");
             }
         }
+
+        //修改合同履约量
+        commonService.updatePerformed(logisticsOrder, orderFinishDTO.getLoadAmount(), orderFinishDTO.getUnloadAmount());
+
         //修改mongodb的数据
         updateMongoDbByLogisticsOrder(logisticsOrder.getId(), orderFinishDTO, ignoreAmount);
         if (!CollectionUtils.isEmpty(list) && list.size() > 0) {
@@ -1263,7 +1271,7 @@ public class ConsignOrderService {
         loadAddress.setId(new IdWorker(NumberConstant.ONE).nextId());
         loadAddress.setLOrderId(lOrderId);
         loadAddress.setAddressType(NumberConstant.ONE);
-//        loadAddress.setName();
+        loadAddress.setName(addOrderDTO.getLoadName() == null ? null : addOrderDTO.getLoadName());
 //        loadAddress.setType();
         loadAddress.setContacts(addOrderDTO.getLoadContacts());
         loadAddress.setPhone(addOrderDTO.getLoadPhone());
@@ -1284,7 +1292,7 @@ public class ConsignOrderService {
         unloadAddress.setId(new IdWorker(NumberConstant.TWO).nextId());
         unloadAddress.setLOrderId(lOrderId);
         unloadAddress.setAddressType(NumberConstant.TWO);
-//        unloadAddress.setName();
+        unloadAddress.setName(addOrderDTO.getUnloadName() == null ? null : addOrderDTO.getUnloadName());
 //        unloadAddress.setType();
         unloadAddress.setContacts(addOrderDTO.getUnloadContacts());
         unloadAddress.setPhone(addOrderDTO.getUnloadPhone());

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

@@ -22,6 +22,8 @@ import com.sckw.mongo.model.SckwLogisticsOrder;
 import com.sckw.mongo.model.SckwWaybillOrder;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.order.api.model.CompleteLogisticsOrderParam;
+import com.sckw.redis.constant.RedisConstant;
+import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
@@ -33,6 +35,7 @@ import com.sckw.transport.model.vo.WaybillCountVo;
 import com.sckw.transport.model.vo.WaybillOrderDriverVo;
 import jakarta.annotation.Resource;
 import jakarta.validation.Valid;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.stream.function.StreamBridge;
@@ -40,6 +43,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
+
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
@@ -50,6 +54,7 @@ import java.util.stream.Collectors;
  * @desc TODO
  * @date 2023/7/19 0019
  */
+@Slf4j
 @Service
 @SuppressWarnings("all")
 public class KwtWaybillOrderService {
@@ -471,7 +476,7 @@ public class KwtWaybillOrderService {
         List<SckwWaybillOrder> sckwWaybillOrders = new ArrayList();
         for (SendCarDto1 sendCarDto : params) {
             /**KwtWaybillOrder数据组装**/
-            String wOrderNo = OrderGenerateSeqNoUtils.getWaybillSeqNo(RedisOrderGenerateEnum.WAYBILL_ORDER, OrderRuleEnum.WAYBILL_ORDER, logisticsOrder.getLOrderNo());
+            String wOrderNo = getRedisGenerateWaybillOrderNo(RedisOrderGenerateEnum.WAYBILL_ORDER, OrderRuleEnum.WAYBILL_ORDER, logisticsOrder.getLOrderNo());
             KwtWaybillOrder waybillOrder = this.setKwtWaybillOrder(sendCarDto, wOrderNo);
             /**数据存储**/
             if (sendCarDto.getType() == Global.NUMERICAL_ONE) {
@@ -514,6 +519,31 @@ public class KwtWaybillOrderService {
         return HttpResult.ok(sckwWaybillOrders);
     }
 
+
+    /**
+     * 获取生成车辆运单单据号最大值处理
+     */
+    public String getRedisGenerateWaybillOrderNo(RedisOrderGenerateEnum redisOrderGenerateEnum, OrderRuleEnum orderRuleEnum, String lOrderNo) {
+        Date date = new Date();
+        String lockKey = String.format(RedisConstant.WAYBILL_NO_GENERATE_KEY, DateUtils.formatDateToYYMMDD(date)) + lOrderNo;
+        String key = OrderGenerateSeqNoUtils.getKeyNotDate(RedisOrderGenerateEnum.WAYBILL_ORDER, OrderRuleEnum.WAYBILL_ORDER, lOrderNo);
+        try {
+        if (Boolean.FALSE.equals(RedissonUtils.exists(key))) {
+            if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
+                throw new BusinessException("业务繁忙,请稍后再试!");
+            }
+            String maxOrderNo = waybillOrderDao.getMaxOrderNo(lOrderNo);
+            if (StringUtils.isNotBlank(maxOrderNo)) {
+                Long maxNum = Long.valueOf(StringUtils.subStrFromIndexToEnd(maxOrderNo, 3));
+                RedissonUtils.setAtomicLong(key, maxNum, DateUtils.getSecondsDay());
+            }
+        }
+        return OrderGenerateSeqNoUtils.getWaybillSeqNo(RedisOrderGenerateEnum.WAYBILL_ORDER, OrderRuleEnum.WAYBILL_ORDER, lOrderNo);
+        } finally {
+            RedissonUtils.unlock(lockKey);
+        }
+    }
+
     /**
      * @param waybillOrder  车辆订单信息
      * @param loadAddress   装货地址信息
@@ -644,12 +674,12 @@ public class KwtWaybillOrderService {
      * @author zk
      * @date 2023/7/20
      **/
-    public KwtWaybillOrder setKwtWaybillOrder(KwtLogisticsOrderCirculate circulate, OperateSendCarDto params) {
+    public KwtWaybillOrder setKwtWaybillOrder(KwtLogisticsOrderCirculate circulate, OperateSendCarDto params, String wOrderNo) {
         KwtWaybillOrder waybillOrder = new KwtWaybillOrder();
         waybillOrder.setId(circulate.getId());
         waybillOrder.setEntId(LoginUserHolder.getEntId());
         waybillOrder.setLOrderId(circulate.getLOrderId());
-        waybillOrder.setWOrderNo("xxxxxx");
+        waybillOrder.setWOrderNo(wOrderNo);
         waybillOrder.setType(params.getType());
         waybillOrder.setStartTime(circulate.getStartTime());
         waybillOrder.setEndTime(circulate.getEndTime());
@@ -1132,7 +1162,8 @@ public class KwtWaybillOrderService {
             //卸货地址
             KwtWaybillOrderAddress unloadAddress = this.getAddress(circulate.getLOrderId(), Global.NUMERICAL_TWO, Global.NUMERICAL_ONE);
             //KwtWaybillOrder数据组装
-            KwtWaybillOrder waybillOrder = setKwtWaybillOrder(circulate, params);
+            String wOrderNo = getRedisGenerateWaybillOrderNo(RedisOrderGenerateEnum.WAYBILL_ORDER, OrderRuleEnum.WAYBILL_ORDER, logisticsOrder.getLOrderNo());
+            KwtWaybillOrder waybillOrder = setKwtWaybillOrder(circulate, params, wOrderNo);
 
             /**2车辆运单存储**/
             ranksSave(waybillOrder, loadAddress, unloadAddress);
@@ -1147,7 +1178,7 @@ public class KwtWaybillOrderService {
 
             /**4更新循环派车数据**/
             circulate.setWOrderId(waybillOrder.getId());
-            circulate.setTotalTake(circulate.getTotalTake() != null ? circulate.getTotalTake() + Global.NUMERICAL_ONE : Global.NUMERICAL_ZERO);
+            circulate.setTotalTake(circulate.getTotalTake() != null ? circulate.getTotalTake() + Global.NUMERICAL_ONE : Global.NUMERICAL_ONE);
             logisticsOrderCirculateDao.updateById(circulate);
 
             /**5Mongodb数据更新**/
@@ -2307,7 +2338,7 @@ public class KwtWaybillOrderService {
      */
     public HttpResult getLogisticsAmountByOrderId(String orderId) {
         KwtLogisticsOrder kwtLogisticsOrder = logisticsOrderDao.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>().eq(KwtLogisticsOrder::getId, Long.parseLong(orderId)));
-        if (kwtLogisticsOrder==null){
+        if (kwtLogisticsOrder == null) {
             return HttpResult.error("单据不存在!");
         }
         BigDecimal amount = kwtLogisticsOrder.getAmount();
@@ -2325,11 +2356,11 @@ public class KwtWaybillOrderService {
         statusList.add(CarWaybillEnum.APPROVAL_NO_PASS.getCode().longValue());
         //趟次
         Map<String, Object> tripMap = waybillOrderDao.selectOrderByOrderId(Long.parseLong(orderId), 1, statusList);
-        tripMap.put("waitDistributionAmount",waitDistributionAmount);
+        tripMap.put("waitDistributionAmount", waitDistributionAmount);
         map.put("trip", tripMap);
         //循环
         Map<String, Object> loopMap = waybillOrderDao.selectOrderByOrderId(Long.parseLong(orderId), 2, statusList);
-        loopMap.put("waitDistributionAmount",waitDistributionAmount);
+        loopMap.put("waitDistributionAmount", waitDistributionAmount);
         map.put("loop", loopMap);
         return HttpResult.ok(map);
     }

+ 12 - 11
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java

@@ -6,7 +6,6 @@ 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.core.common.enums.NumberConstant;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
@@ -88,9 +87,6 @@ public class LogisticsConsignmentService {
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
     RemoteFleetService remoteFleetService;
 
-    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
-    RemoteContractService remoteContractService;
-
     @Autowired
     public KwtLogisticsOrderGoodsMapper kwtLogisticsOrderGoodsMapper;
 
@@ -1170,10 +1166,11 @@ public class LogisticsConsignmentService {
         if (logisticsOrder == null) {
             throw new BusinessException("采购订单-完结订单-物流单据不存在!");
         }
-        BigDecimal amount = logisticsOrder.getAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getAmount();
-        if (amount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
-            throw new BusinessException("完结订单,装货量不能大于运输总量");
-        }
+        //todo 2023-09-01 根据要求去除校验 物流订单手动完结,实装量可大于分配量,实卸量目前暂定不可大于实装量;根据计费方式,当对应实装或实卸大于分配量时自然完结
+//        BigDecimal amount = logisticsOrder.getAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getAmount();
+//        if (amount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
+//            throw new BusinessException("完结订单,装货量不能大于运输总量");
+//        }
         if (orderFinishDTO.getUnloadAmount().compareTo(orderFinishDTO.getLoadAmount()) > 0) {
             throw new BusinessException("完结订单,填写卸货量不能大于装货量");
         }
@@ -1214,7 +1211,11 @@ public class LogisticsConsignmentService {
                 updateMongoDbByLogisticsOrder(kwtLogisticsOrder, orderFinishDTO);
             });
         }
-        //数据推送至贸易订单
+
+        //修改合同履约量
+        commonService.updatePerformed(logisticsOrder, orderFinishDTO.getLoadAmount(), orderFinishDTO.getUnloadAmount());
+
+        /**数据推送至贸易订单*/
         CompleteLogisticsOrderParam tradeOrder = new CompleteLogisticsOrderParam();
         //获取实际装货量-实际卸货量
         Map<String, BigDecimal> map = kwtLogisticsOrderMapper.countAmountByTradeOrderId(logisticsOrder.getTOrderId());
@@ -1894,8 +1895,8 @@ public class LogisticsConsignmentService {
     }
 
     public HttpResult addWaybillNumberDemo() {
-        String seqNo = OrderGenerateSeqNoUtils.getWaybillSeqNo(RedisOrderGenerateEnum.WAYBILL_ORDER, OrderRuleEnum.WAYBILL_ORDER, "T2308290001101");
-        System.out.println(seqNo);
+//        String seqNo = OrderGenerateSeqNoUtils.getWaybillSeqNo(RedisOrderGenerateEnum.WAYBILL_ORDER, OrderRuleEnum.WAYBILL_ORDER,"T2308290001101");
+//        System.out.println(seqNo);
         return HttpResult.ok();
     }
 

+ 39 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java

@@ -25,14 +25,18 @@ import com.sckw.order.api.model.OrderDetailRes;
 import com.sckw.order.api.model.UnitInfoDetailRes;
 import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.transport.api.model.vo.LogisticsOrderVO;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 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 jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -557,4 +561,39 @@ public class TransportCommonService {
         }
         return maps;
     }
+
+    public HttpResult getLogisticsOrderByContractId(ContractParam contractParam) {
+        List<Long> contractIds = StringUtils.splitStrToList(contractParam.getContractIds(), Long.class);
+        Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(Collections.singletonList(LoginUserHolder.getEntId()));
+        List<SckwLogisticsOrderVO> list = logisticsOrderMapper.selectOrderListByContractId(contractParam.getContractType(), entMap.get(LoginUserHolder.getEntId()).getId(), contractIds);
+        List<SckwLogisticsOrderVO> returnList = new ArrayList<>();
+        /**支付方式*/
+//        Map<String, String> dictResDtoMap = getDictData(DictTypeEnum.UNIT_TYPE.getType());
+        /**计量单位*/
+        Map<String, String> unitTypeDictData = getDictData(DictTypeEnum.TRADE_TYPE.getType());
+        /**运价方式*/
+//        Map<String, String> priceDictData = getDictData(DictTypeEnum.PRICE_TYPE.getType());
+        /**计费方式*/
+//        Map<String, String> chargingDictData = getDictData(DictTypeEnum.CHARGING_TYPE.getType());
+        /**结算周期*/
+        Map<String, String> settlementDictData = getDictData(DictTypeEnum.SETTLEMENT_CYCLE.getType());
+        /**签约方式*/
+//        Map<String, String> signingWay = getDictData(DictTypeEnum.SIGNING_TYPE.getType());
+        /**合理损耗*/
+        Map<String, String> taxRateTypeDictData = getDictData(DictTypeEnum.TAX_RATE_TYPE.getType());
+        if (CollectionUtils.isNotEmpty(list)) {
+            for (SckwLogisticsOrderVO vo : list) {
+                vo.setStatusLabel(LogisticsOrderEnum.getDestination(vo.getStatus()));
+                vo.setLossUnitLabel(vo.getLossUnit() == null ? null : taxRateTypeDictData.get(vo.getLossUnit()));
+                vo.setUnitLabel(vo.getUnit() == null ? null : unitTypeDictData.get(vo.getUnit()));
+                vo.setGoodsPriceUnitLabel(vo.getGoodsPriceUnit() == null ? null : unitTypeDictData.get(vo.getGoodsPriceUnit()));
+                vo.setSettlementCycleLabel(vo.getSettlementCycle() == null ? null : settlementDictData.get(vo.getSettlementCycle().toString()));
+                UserCacheResDto userCacheResDto = remoteSystemService.queryUserCacheById(vo.getCreateBy());
+                vo.setCreateByName(userCacheResDto == null ? null : userCacheResDto.getName());
+            }
+            returnList = list.stream().skip((contractParam.getPage() - 1) * contractParam.getPageSize()).limit(contractParam.getPageSize()).collect(Collectors.toList());
+        }
+        PageResult build = PageResult.build(contractParam.getPage(), contractParam.getPageSize(), list.stream().count(), returnList);
+        return HttpResult.ok(build);
+    }
 }

+ 30 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/WaybillManagementService.java

@@ -16,11 +16,13 @@ import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.mongo.model.SckwWaybillOrder;
 import com.sckw.mongo.model.TableTops;
 import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.AreaTreeFrontResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.KwtLogisticsOrder;
 import com.sckw.transport.model.KwtWaybillOrderTrack;
+import com.sckw.transport.model.dto.AddressDropListDTO;
 import com.sckw.transport.model.dto.WayBillDetailDTO;
 import com.sckw.transport.model.dto.WaybillListAppDTO;
 import com.sckw.transport.model.dto.WaybillOrderDTO;
@@ -147,10 +149,14 @@ public class WaybillManagementService {
             waybillCarVO.setDriverId(String.valueOf(info.getTruckId()));
             waybillCarVO.setTrailerNo(info.getTruckTrailerNo());
             // 票据
-            waybillTicketVO.setLoadTime(DateUtil.getDateTime(info.getLoadTime()));
+            if (info.getLoadTime()!=null){
+                waybillTicketVO.setLoadTime(DateUtil.getDateTime(info.getLoadTime()));
+            }
             waybillTicketVO.setLoadWeight(String.valueOf(info.getLoadAmount()));
             waybillTicketVO.setLoadUrl(String.valueOf(info.getLoadUrls()));
-            waybillTicketVO.setUnloadTime(DateUtil.getDateTime(info.getUnloadTime()));
+            if (info.getUnloadTime()!=null){
+                waybillTicketVO.setUnloadTime(DateUtil.getDateTime(info.getUnloadTime()));
+            }
             waybillTicketVO.setUnloadWeight(String.valueOf(info.getUnloadAmount()));
             waybillTicketVO.setUnloadUrl(String.valueOf(info.getUnloadUrls()));
             waybillTicketVO.setDeficitAmount(String.valueOf(info.getDeficitAmount()));
@@ -371,6 +377,7 @@ public class WaybillManagementService {
                         if(e.getCode().equals(e2.getStatus())) {
                             e.setStatus(true);
                             e.setId(e2.getId());
+                            e.setOperateTime(DateUtil.getDateTime(e2.getOperateTime()));
                             e.setCreateTime(DateUtil.getDateTime(e2.getCreateTime()));
                             e.setCreateByName(usersMap.get(e2.getCreateBy()) == null ? null : usersMap.get(e2.getCreateBy()));
                         }
@@ -640,4 +647,25 @@ public class WaybillManagementService {
         }
         return _list;
     }
+
+    /**
+     * @desc 获取企业地址信息
+     * @author zk
+     * @date 2023/9/1
+     **/
+    public AddressDropListDTO findAddressList() {
+        AddressDropListDTO res = new AddressDropListDTO();
+       //装货地址树
+        List<Integer> loadAddressList = kwtWaybillOrderAddressMapper.findAddressCodeList(LoginUserHolder.getEntId(), Global.NUMERICAL_ONE);
+        //卸货地址树
+        List<Integer> unloadAddressList = kwtWaybillOrderAddressMapper.findAddressCodeList(LoginUserHolder.getEntId(), Global.NUMERICAL_TWO);
+
+        //装货地址下拉列表树
+        List<AreaTreeFrontResDto> loadTree = remoteSystemService.queryAreaTreeFrontByCodeList(loadAddressList);
+        res.setLoadAddressList(loadTree);
+        //卸货地址下拉列表树
+        List<AreaTreeFrontResDto> unloadTree = remoteSystemService.queryAreaTreeFrontByCodeList(unloadAddressList);
+        res.setUnloadAddressList(unloadTree);
+        return res;
+    }
 }

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

@@ -100,6 +100,80 @@
           AND a.t_order_id = #{id,jdbcType=VARCHAR}
         order by createTime desc
     </select>
+
+    <select id="selectOrderListByContractId" resultType="com.sckw.transport.model.vo.SckwLogisticsOrderVO">
+        SELECT
+        a.STATUS,
+        a.id AS lOrderId,
+        a.l_order_no AS lOrderNo,
+        f.contract_no AS contractNo,
+        d.id as checkId,
+        d.ent_id as checkEntId,
+        d.top_ent_id as checkTopEntId,
+        d.firm_name AS checkFirmName,
+        e.id as carrierId,
+        e.ent_id as carrierEntId,
+        e.top_ent_id as carrierTopEntId,
+        e.firm_name AS carrierFirmName,
+        g.goods_name AS goodsName,
+        a.amount AS carryingCapacity,
+        a.price AS price,
+        b.city_name AS loadCityName,
+        b.detail_address AS loadDetailAddress,
+        a.payment AS payment,
+        a.loss AS loss,
+        a.loss_unit AS lossUnit,
+        a.goods_price AS goodsPrice,
+        a.goods_price_unit AS goodsPriceUnit,
+        a.settlement_cycle AS settlementCycle,
+        e.contacts AS carrierContacts,
+        e.phone AS carrierPhone,
+        d.contacts AS checkContacts,
+        d.phone AS checkPhone,
+        b.contacts AS loadContacts,
+        b.phone AS loadPhone,
+        c.contacts AS unloadContacts,
+        c.phone AS unloadPhone,
+        a.start_time AS startTime,
+        a.end_time AS endTime,
+        a.remark AS remark,
+        a.create_by AS createBy,
+        a.create_time AS createTime,
+        f.contract_id AS contractId
+        FROM
+        kwt_logistics_order a
+        LEFT JOIN kwt_logistics_order_address b ON a.id = b.l_order_id
+        AND b.address_type = 1
+        AND b.del_flag = 0
+        LEFT JOIN kwt_logistics_order_address c ON a.id = c.l_order_id
+        AND c.address_type = 2
+        AND c.del_flag = 0
+        LEFT JOIN kwt_logistics_order_unit d ON a.id = d.l_order_id
+        AND d.unit_type = 1
+        AND d.del_flag = 0
+        LEFT JOIN kwt_logistics_order_unit e ON a.id = e.l_order_id
+        AND e.unit_type = 2
+        LEFT JOIN kwt_logistics_order_goods g ON a.id = g.l_order_id
+        AND g.del_flag = 0
+        LEFT JOIN kwt_logistics_order_contract f ON a.id = f.l_order_id
+        AND f.del_flag = 0
+        <where>
+            a.del_flag = 0
+<!--            <if test="type == 1">-->
+<!--                and (d.top_ent_id = #{entId} or d.ent_id = #{entId})-->
+<!--            </if>-->
+<!--            <if test="type == 2">-->
+<!--                and (e.top_ent_id = #{entId} or e.ent_id = #{entId})-->
+<!--            </if>-->
+            <if test="contractIds != null and contractIds.size() > 0">
+                and f.contract_id in
+                <foreach collection="contractIds" item="item" separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        ORDER BY a.id DESC
+    </select>
     <select id="selectOrderCount" resultType="java.lang.Long">
         SELECT count(a.id)
         FROM kwt_logistics_order a
@@ -274,7 +348,7 @@
                a.pid,
                a.`status`         as status,
                a.l_order_no       as consignOrderNo,
-               a.l_order_no       as carrierOrderNo,
+<!--               a.l_order_no       as carrierOrderNo,-->
                c.firm_name        as carrierCompany,
                d.goods_name       as goodsName,
                a.amount           as carryingCapacity,

+ 11 - 0
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderAddressMapper.xml

@@ -176,4 +176,15 @@
         and w_order_id = #{wOrderId, jdbcType=BIGINT}
         and address_type = #{addressType, jdbcType=INTEGER}
     </select>
+
+    <select id="findAddressCodeList" resultType="java.lang.Integer" >
+        SELECT
+        DISTINCT kwoa.city_code
+        from kwt_waybill_order kwo
+        left join kwt_waybill_order_address kwoa on kwoa.w_order_id = kwo.id
+        where kwo.del_flag = 0 and kwoa.del_flag = 0
+        and kwo.ent_id = #{entId, jdbcType=BIGINT}
+        and kwoa.address_type = #{addressType, jdbcType=INTEGER}
+    </select>
+
 </mapper>

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

@@ -488,4 +488,7 @@
             </foreach>
         </if>
     </select>
+    <select id="getMaxOrderNo" resultType="java.lang.String">
+        SELECT w_order_no FROM `kwt_waybill_order`  WHERE w_order_no LIKE concat(#{lOrderNo},'%') ORDER BY w_order_no DESC LIMIT 1
+    </select>
 </mapper>