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

根据原型修改参数调用
完结订单逻辑修改

lengfaqiang 2 лет назад
Родитель
Сommit
48cb5645bd

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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