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

采购订单/销售订单-订单完结
承运订单/托运订单-订单完结

lengfaqiang 2 лет назад
Родитель
Сommit
4e4ac54841

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

@@ -195,4 +195,21 @@ public class AcceptCarriageOrderController {
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }
+
+
+    /**
+     * 承运订单-完结订单
+     *
+     * @param orderFinishDTO
+     * @return
+     */
+    @RequestMapping(value = "/commitAcceptCarriageOrderFinish", method = RequestMethod.POST)
+    public HttpResult commitAcceptCarriageOrderFinish(@Validated @RequestBody OrderFinishDTO orderFinishDTO) {
+        try {
+            return acceptCarriageOrderService.commitAcceptCarriageOrderFinish(orderFinishDTO);
+        } catch (Exception e) {
+            log.error("托运订单-完结订单失败:订单id {},error {} ", orderFinishDTO.getId(), e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
 }

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

@@ -3,6 +3,7 @@ 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.OrderDTO;
+import com.sckw.transport.model.dto.OrderFinishDTO;
 import com.sckw.transport.service.ConsignOrderService;
 import jakarta.validation.constraints.NotNull;
 import lombok.RequiredArgsConstructor;
@@ -72,15 +73,15 @@ public class ConsignOrderController {
     /**
      * 托运订单-完结订单
      *
-     * @param orderDto
+     * @param orderFinishDTO
      * @return
      */
-    @RequestMapping(value = "/commitOrderFinish", method = RequestMethod.POST)
-    public HttpResult commitOrderFinish(@Validated @RequestBody OrderDTO orderDto) {
+    @RequestMapping(value = "/commitConsignOrderFinish", method = RequestMethod.POST)
+    public HttpResult commitConsignOrderFinish(@Validated @RequestBody OrderFinishDTO orderFinishDTO) {
         try {
-            return null;
+            return consignOrderService.commitConsignOrderFinish(orderFinishDTO);
         } catch (Exception e) {
-            log.error("托运订单-完结订单失败:订单id {},error {} ", orderDto.getId(), e.getMessage(), e);
+            log.error("托运订单-完结订单失败:订单id {},error {} ", orderFinishDTO.getId(), e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }

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

@@ -15,10 +15,19 @@ public class CarDataVO {
      * 司机姓名
      */
     private String driverName;
+
+    /**
+     * 司机id
+     */
+    private String driverId;
+
     /**
      * 司机电话
      */
     private String driverPhone;
+    /**
+     * 数据id
+     */
     private String id;
     /**
      * 身份证号

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

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.sckw.contract.api.RemoteContractService;
+import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
 import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.common.enums.StringConstant;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
@@ -35,6 +37,7 @@ import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
+import com.sckw.transport.model.dto.OrderFinishDTO;
 import com.sckw.transport.model.dto.OrderTakingDTO;
 import com.sckw.transport.model.dto.StopOrderTakingDTO;
 import com.sckw.transport.model.dto.SubcontractConsignmentDTO;
@@ -75,6 +78,9 @@ public class AcceptCarriageOrderService {
     @DubboReference(version = "2.0.0", group = "design", check = false, timeout = 8000)
     RemoteFleetService fleetService;
 
+    @DubboReference(version = "2.0.0", group = "design", check = false, timeout = 6000)
+    RemoteContractService remoteContractService;
+
     @Resource
     private StreamBridge streamBridge;
 
@@ -183,15 +189,43 @@ public class AcceptCarriageOrderService {
         } else {
             pids = bo.getLOrderId() + StringConstant.COMMA + orderId;
         }
+        /**判断生成物流订单应生成哪一种单据状态*/
+        List<Long> contractList = new ArrayList<>();
+        contractList.add(Long.parseLong(bo.getContractId()));
+        Map<Long, ContractCommonInfoResDto> longContractCommonInfoResDtoMap = remoteContractService.queryContractBaseInfo(contractList);
+        if (CollectionUtils.isEmpty(longContractCommonInfoResDtoMap)) {
+            throw new RuntimeException("并未有对应合同,应先签约合同");
+        }
+        if (longContractCommonInfoResDtoMap.get(Long.parseLong(bo.getContractId())) == null) {
+            throw new RuntimeException("并未有对应合同,应先签约合同");
+        }
+        ContractCommonInfoResDto infoResDto = longContractCommonInfoResDtoMap.get(Long.parseLong(bo.getContractId()));
+        /**状态判断
+         * 是否是已签约合同
+         * */
+        // 0 已签约 1待签约
+        Integer status = infoResDto.getStatus();
+        Integer orderStatus = LogisticsOrderEnum.PENDING_ORDER.getCode();
+        if (NumberConstant.ONE == status) {
+            orderStatus = LogisticsOrderEnum.TO_BE_PLANNED.getCode();
+        } else if (NumberConstant.ZERO == status) {
+            orderStatus = LogisticsOrderEnum.PENDING_ORDER.getCode();
+        } else {
+            log.info("承运订单生成物流托运 承运订单id:{}," +
+                            "承运订单编号:{},合同id:{},合同信息:{}",
+                    bo.getLOrderId(), bo.getLOrderNo(),
+                    bo.getContractId(), JSONObject.toJSONString(infoResDto));
+            throw new RuntimeException("生成物流托运合同异常");
+        }
         insertSubcontractLogisticsGoods(bo, lOrderNo, orderId);
-        insertSubcontractLogisticsOrder(bo, lOrderNo, order, orderId, pids);
+        insertSubcontractLogisticsOrder(bo, lOrderNo, order, orderId, pids,orderStatus);
         insertSubcontractLogisticsOrderContract(bo, orderId);
         insertSubcontractLogisticsOrderUnit(bo, orderId);
         insertSubcontractLogisticsOrderAddress(bo, orderId, logisticsOrder);
-        insertLogisticsOrderTrack(bo, orderId);
+        insertLogisticsOrderTrack(bo, orderId,orderStatus);
         //修改上级分配量以及可分配量委托量等
         logisticsOrder.setSubcontractAmount(logisticsOrder.getSubcontractAmount().add(new BigDecimal(bo.getCarryingCapacity())));
-        subcontractSendMongoDB(lOrderNo, orderId, bo, logisticsOrder);
+        subcontractSendMongoDB(lOrderNo, orderId, bo, logisticsOrder,orderStatus);
         return HttpResult.ok();
     }
 
@@ -203,8 +237,9 @@ public class AcceptCarriageOrderService {
      * @param bo                页面传输实体
      * @param kwtLogisticsOrder 物流订单数据(上一级)
      */
-    private void subcontractSendMongoDB(String lOrderNo, Long orderId, SubcontractConsignmentDTO bo, KwtLogisticsOrder kwtLogisticsOrder) {
+    private void subcontractSendMongoDB(String lOrderNo, Long orderId, SubcontractConsignmentDTO bo, KwtLogisticsOrder kwtLogisticsOrder,Integer orderStatus) {
         SckwLogisticsOrder logisticsOrder = new SckwLogisticsOrder();
+        logisticsOrder.setStatus(String.valueOf(orderStatus));
         logisticsOrder.setLOrderId(orderId);
         logisticsOrder.setLOrderNo(lOrderNo);
         logisticsOrder.setLOrderPid(Long.parseLong(bo.getLOrderId()));
@@ -309,11 +344,11 @@ public class AcceptCarriageOrderService {
      * @param bo
      * @param orderId
      */
-    private void insertLogisticsOrderTrack(SubcontractConsignmentDTO bo, Long orderId) {
+    private void insertLogisticsOrderTrack(SubcontractConsignmentDTO bo, Long orderId,Integer orderStatus) {
         KwtLogisticsOrderTrack entity = new KwtLogisticsOrderTrack();
         entity.setId(new IdWorker(NumberConstant.ONE).nextId());
         entity.setLOrderId(orderId);
-        entity.setStatus(LogisticsOrderEnum.PENDING_ORDER.getCode());
+        entity.setStatus(orderStatus);
         entity.setCreateTime(new Date());
         entity.setUpdateTime(new Date());
         entity.setCreateBy(LoginUserHolder.getUserId());
@@ -443,7 +478,7 @@ public class AcceptCarriageOrderService {
      */
     private void insertSubcontractLogisticsOrder(SubcontractConsignmentDTO bo, String lOrderNo,
                                                  KwtLogisticsOrder order,
-                                                 Long orderId, String pids) {
+                                                 Long orderId, String pids,Integer orderStatus) {
         order.setId(orderId);
         order.setEntId(LoginUserHolder.getEntId());
         order.setTOrderId(order.getTOrderId());
@@ -476,7 +511,7 @@ public class AcceptCarriageOrderService {
         order.setCreateTime(new Date());
         order.setUpdateBy(LoginUserHolder.getUserId());
         order.setUpdateTime(new Date());
-        order.setStatus(LogisticsOrderEnum.PENDING_ORDER.getCode());
+        order.setStatus(orderStatus);
         BigDecimal decimal = new BigDecimal(NumberConstant.ZERO);
         order.setEntrustAmount(decimal);
         order.setSubcontractAmount(decimal);
@@ -656,7 +691,9 @@ public class AcceptCarriageOrderService {
         checkParam(driverParam);
         List<DriverListVo> list = logisticsOrderMapper.selectDriverListById(driverParam);
         for (DriverListVo driverListVo : list) {
-            Map<Long, RTruckVo> truck = fleetService.findTruck(driverListVo.getTruckNo());
+            List<String> objects = new ArrayList<>();
+            objects.add(driverListVo.getTruckNo());
+            Map<String, RTruckVo> truck = fleetService.findTruck(objects);
             if (!ObjectUtils.isEmpty(truck)) {
                 driverListVo.setCarType(truck.get(driverListVo.getDriverId()).getTruckType());
             }
@@ -799,4 +836,149 @@ public class AcceptCarriageOrderService {
         }
         return HttpResult.ok(result);
     }
+
+    /**
+     * 承运订单-分包托运-完结订单
+     *
+     * @param orderFinishDTO
+     * @return
+     */
+    public HttpResult commitAcceptCarriageOrderFinish(OrderFinishDTO orderFinishDTO) {
+        /** 订单完结 物流运单状态为【待派车】、【运输中】可操作*/
+        /**完结拦截 必须车辆运单无正在运输中的单据才能完结 状态有 待接单之后已核弹之前的状态 都不能完结*/
+        /**完结订单-对应物流订单下子订单都要进行完结*/
+        /**完结订单 不做页面填写数量与数据库数量进行计算验证-直接获取页面填写数据进行保存处理*/
+        //物流订单id
+        String id = orderFinishDTO.getId();
+        KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getId, id));
+        if (logisticsOrder == null) {
+            throw new RuntimeException("采购订单-完结订单-物流单据不存在!");
+        }
+        /**订单状态验证*/
+        if (!LogisticsOrderEnum.WAIT_DELIVERY.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))
+                && !LogisticsOrderEnum.IN_TRANSIT.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))) {
+            throw new RuntimeException("当前运单并不属于【待派车】,【运输中】状态");
+        }
+        /**完结拦截*/
+        List<Integer> statusList = new ArrayList<>();
+        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());
+        int count = waybillOrderMapper.selectDataByLorderId(id, statusList);
+        if (count > NumberConstant.ZERO) {
+            throw new RuntimeException("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕");
+        }
+        /**完结订单-对应物流订单下子订单都要进行完结*/
+        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 HttpResult.ok("承运订单-分包托运完结订单成功");
+    }
+
+
+    /**
+     * 承运订单-分包托运-完结订单-修改本身数据
+     * @param logisticsOrder    本身物流订单数据
+     * @param orderFinishDTO    页面传递数据
+     */
+    private void updateDataByItself(KwtLogisticsOrder logisticsOrder, OrderFinishDTO orderFinishDTO) {
+        logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+        logisticsOrder.setLoadAmount(orderFinishDTO.getLoadAmount());
+        logisticsOrder.setUnloadAmount(orderFinishDTO.getUnloadAmount());
+        logisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+        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());
+        logisticsOrderTrackMapper.insert(track);
+        /**单据完结修改Mongodb*/
+        SckwLogisticsOrder updateParam = new SckwLogisticsOrder();
+        updateParam.setLOrderId(Long.parseLong(orderFinishDTO.getId()))
+                .setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus())
+                .setUpdateBy(LoginUserHolder.getUserId())
+                .setUpdateByName(LoginUserHolder.getUserName())
+                .setUpdateTime(new Date())
+                .setLoadAmount(orderFinishDTO.getLoadAmount())
+                .setUnloadAmount(orderFinishDTO.getUnloadAmount())
+        ;
+        SckwBusSum busSum = new SckwBusSum();
+        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+        busSum.setMethod(2);
+        busSum.setObject(updateParam);
+        streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
+    }
+
+    /**
+     * 承运订单-分包托运-完结订单-修改分包订单
+     * @param orderFinishDTO
+     * @param orderId   分包物流订单id
+     */
+    private void updateDataBySubset(OrderFinishDTO orderFinishDTO, String orderId) {
+        KwtLogisticsOrder kwtLogisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getId, Long.parseLong(orderId)));
+        if (kwtLogisticsOrder != null) {
+            kwtLogisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+            kwtLogisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+            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());
+            logisticsOrderTrackMapper.insert(track);
+            /**单据完结修改Mongodb*/
+            SckwLogisticsOrder updateParam = new SckwLogisticsOrder();
+            updateParam.setLOrderId(kwtLogisticsOrder.getId())
+                    .setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus())
+                    .setUpdateBy(LoginUserHolder.getUserId())
+                    .setUpdateByName(LoginUserHolder.getUserName())
+                    .setUpdateTime(new Date())
+            ;
+            SckwBusSum busSum = new SckwBusSum();
+            busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+            busSum.setMethod(2);
+            busSum.setObject(updateParam);
+            streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
+        }
+    }
 }

+ 202 - 17
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ConsignOrderService.java

@@ -1,31 +1,45 @@
 package com.sckw.transport.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.sckw.core.common.enums.NumberConstant;
+import com.sckw.core.common.enums.StringConstant;
+import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.utils.DateUtil;
+import com.sckw.fleet.api.RemoteFleetService;
+import com.sckw.fleet.api.model.vo.RTruckVo;
+import com.sckw.mongo.enums.BusinessTypeEnum;
+import com.sckw.mongo.model.SckwLogisticsOrder;
 import com.sckw.mongo.model.SckwWaybillOrder;
+import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.OrderDTO;
+import com.sckw.transport.model.dto.OrderFinishDTO;
 import com.sckw.transport.model.vo.CarDataVO;
 import com.sckw.transport.model.vo.CarWaybillVO;
+import jakarta.annotation.Resource;
 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;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.stereotype.Service;
 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.stream.Collectors;
 
 /**
  * @author lfdc
@@ -39,9 +53,15 @@ public class ConsignOrderService {
     @DubboReference(version = "2.0.0", group = "design", check = false)
     RemoteSystemService remoteSystemService;
 
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    RemoteFleetService remoteFleetService;
+
     @Autowired
     public MongoTemplate mongoTemplate;
 
+    @Resource
+    private StreamBridge streamBridge;
+
     @Autowired
     public KwtLogisticsOrderMapper kwtLogisticsOrderMapper;
 
@@ -51,6 +71,9 @@ public class ConsignOrderService {
     @Autowired
     public KwtLogisticsOrderUnitMapper kwtLogisticsOrderUnitMapper;
 
+    @Autowired
+    public KwtLogisticsOrderTrackMapper kwtLogisticsOrderTrackMapper;
+
     @Autowired
     public KwtWaybillOrderMapper kwtWaybillOrderMapper;
 
@@ -66,6 +89,7 @@ public class ConsignOrderService {
 
     /**
      * 托运订单/承运订单-获取车辆运单
+     *
      * @param orderDto
      * @return
      */
@@ -83,6 +107,7 @@ public class ConsignOrderService {
 
     /**
      * 通过订单id+类型 查询承运订单-车辆运单
+     *
      * @param orderDto
      * @return
      */
@@ -162,6 +187,7 @@ public class ConsignOrderService {
 
     /**
      * 通过订单id+类型 查询托运订单-车辆运单
+     *
      * @param orderDto
      * @return
      */
@@ -237,25 +263,37 @@ public class ConsignOrderService {
         }
         return HttpResult.ok(returnList);
     }
+
+    /**
+     * 托运订单获取车辆信息
+     *
+     * @param orderDto
+     * @return
+     */
     public HttpResult getCarListByOrder(OrderDTO orderDto) {
-        KwtWaybillOrder waybillOrder = kwtWaybillOrderMapper.selectOne(new LambdaQueryWrapper<KwtWaybillOrder>()
-                .eq(KwtWaybillOrder::getLOrderId, orderDto.getId())
-                .eq(KwtWaybillOrder::getEntId, LoginUserHolder.getEntId()));
-        List<KwtLogisticsOrderCirculate> list = kwtLogisticsOrderCirculateMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrderCirculate>()
-                .eq(KwtLogisticsOrderCirculate::getLOrderId, orderDto.getId())
-                .eq(KwtLogisticsOrderCirculate::getEntId, LoginUserHolder.getEntId()));
-        List<CarDataVO> carDataVOS = new ArrayList<CarDataVO>();
-        if (CollectionUtils.isNotEmpty(list)) {
-            for (KwtLogisticsOrderCirculate circulate : list) {
+        KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getId, orderDto.getId()));
+        if (logisticsOrder == null) {
+            log.error("托运订单获取车辆信息 error id:{},请求参数:{}", orderDto.getId(), JSONObject.toJSONString(orderDto));
+            HttpResult.error("物流订单不存在");
+        }
+        List<KwtWaybillOrder> waybillOrders = kwtWaybillOrderMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrder>()
+                .eq(KwtWaybillOrder::getLOrderId, orderDto.getId()));
+        List<CarDataVO> carDataVOS = new ArrayList<CarDataVO>(NumberConstant.SIXTEEN);
+        if (CollectionUtils.isNotEmpty(waybillOrders)) {
+            List<String> stringList = waybillOrders.stream().map(KwtWaybillOrder::getTruckNo).collect(Collectors.toList());
+            Map<String, RTruckVo> truck = remoteFleetService.findTruck(stringList);
+            for (KwtWaybillOrder KwtWaybillOrder : waybillOrders) {
                 CarDataVO carDataVo = new CarDataVO();
-                //todo dubbo查询
-//                circulate.getDriverId() ;
-//                carDataVo.setDriverName();
-//                carDataVo.getDriverPhone();
-//                carDataVo.getIdCard();
-//                carDataVo.getLoadAmount();
-                carDataVo.setTruckNo(circulate.getTruckNo());
-                carDataVo.setWOrderNo(waybillOrder.getWOrderNo());
+                carDataVo.setDriverId(String.valueOf(KwtWaybillOrder.getDriverId()));
+                carDataVo.setDriverName(KwtWaybillOrder.getDriverName());
+                carDataVo.setDriverPhone(KwtWaybillOrder.getDriverPhone());
+                carDataVo.setIdCard(KwtWaybillOrder.getDriverIdcard());
+                carDataVo.setLoadAmount(truck.get(KwtWaybillOrder.getTruckNo()) == null ?
+                        null : (truck.get(KwtWaybillOrder.getTruckNo()).getActualWeight() == null ?
+                        null : (String.valueOf(truck.get(KwtWaybillOrder.getTruckNo()).getActualWeight()))));
+                carDataVo.setTruckNo(KwtWaybillOrder.getTruckNo());
+                carDataVo.setWOrderNo(KwtWaybillOrder.getWOrderNo());
                 carDataVOS.add(carDataVo);
             }
         }
@@ -272,4 +310,151 @@ public class ConsignOrderService {
         Map<String, String> map = kwtLogisticsOrderMapper.getRejectReason(id, LogisticsOrderEnum.SEND_BACK.getStatus());
         return HttpResult.ok(map);
     }
+
+    /**
+     * 托运订单-完结订单
+     *
+     * @param orderFinishDTO 页面传递数据dto
+     * @return
+     */
+    public HttpResult commitConsignOrderFinish(OrderFinishDTO orderFinishDTO) {
+        /** 订单完结 物流运单状态为【待派车】、【运输中】可操作*/
+        /**完结拦截 必须车辆运单无正在运输中的单据才能完结 状态有 待接单之后已核弹之前的状态 都不能完结*/
+        /**完结订单-对应物流订单下子订单都要进行完结*/
+        /**完结订单 不做页面填写数量与数据库数量进行计算验证-直接获取页面填写数据进行保存处理*/
+        //物流订单id
+        String id = orderFinishDTO.getId();
+        KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getId, id));
+        if (logisticsOrder == null) {
+            throw new RuntimeException("采购订单-完结订单-物流单据不存在!");
+        }
+        /**订单状态验证*/
+        if (!LogisticsOrderEnum.WAIT_DELIVERY.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))
+                && !LogisticsOrderEnum.IN_TRANSIT.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))) {
+            throw new RuntimeException("当前运单并不属于【待派车】,【运输中】状态");
+        }
+        /**完结拦截*/
+        List<Integer> statusList = new ArrayList<>();
+        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());
+        int count = kwtWaybillOrderMapper.selectDataByLorderId(id, statusList);
+        if (count > NumberConstant.ZERO) {
+            throw new RuntimeException("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕");
+        }
+        /**完结订单-对应物流订单下子订单都要进行完结*/
+        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 HttpResult.ok("承运订单-分包托运完结订单成功");
+    }
+
+
+    /**
+     * 承运订单-分包托运-完结订单-修改本身数据
+     *
+     * @param logisticsOrder 本身物流订单数据
+     * @param orderFinishDTO 页面传递数据
+     */
+    private void updateDataByItself(KwtLogisticsOrder logisticsOrder, OrderFinishDTO orderFinishDTO) {
+        logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+        logisticsOrder.setLoadAmount(orderFinishDTO.getLoadAmount());
+        logisticsOrder.setUnloadAmount(orderFinishDTO.getUnloadAmount());
+        logisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+        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);
+        /**单据完结修改Mongodb*/
+        SckwLogisticsOrder updateParam = new SckwLogisticsOrder();
+        updateParam.setLOrderId(Long.parseLong(orderFinishDTO.getId()))
+                .setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus())
+                .setUpdateBy(LoginUserHolder.getUserId())
+                .setUpdateByName(LoginUserHolder.getUserName())
+                .setUpdateTime(new Date())
+                .setLoadAmount(orderFinishDTO.getLoadAmount())
+                .setUnloadAmount(orderFinishDTO.getUnloadAmount())
+        ;
+        SckwBusSum busSum = new SckwBusSum();
+        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+        busSum.setMethod(2);
+        busSum.setObject(updateParam);
+        streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
+    }
+
+    /**
+     * 承运订单-分包托运-完结订单-修改分包订单
+     *
+     * @param orderFinishDTO
+     * @param orderId        分包物流订单id
+     */
+    private void updateDataBySubset(OrderFinishDTO orderFinishDTO, String orderId) {
+        KwtLogisticsOrder kwtLogisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getId, Long.parseLong(orderId)));
+        if (kwtLogisticsOrder != null) {
+            kwtLogisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+            kwtLogisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+            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);
+            /**单据完结修改Mongodb*/
+            SckwLogisticsOrder updateParam = new SckwLogisticsOrder();
+            updateParam.setLOrderId(kwtLogisticsOrder.getId())
+                    .setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus())
+                    .setUpdateBy(LoginUserHolder.getUserId())
+                    .setUpdateByName(LoginUserHolder.getUserName())
+                    .setUpdateTime(new Date())
+            ;
+            SckwBusSum busSum = new SckwBusSum();
+            busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+            busSum.setMethod(2);
+            busSum.setObject(updateParam);
+            streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
+        }
+    }
 }

+ 141 - 83
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java

@@ -5,7 +5,10 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.sckw.contract.api.RemoteContractService;
+import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
 import com.sckw.core.common.enums.NumberConstant;
+import com.sckw.core.common.enums.StringConstant;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
@@ -71,6 +74,9 @@ public class LogisticsConsignmentService {
     @DubboReference(version = "2.0.0", group = "design", check = false, timeout = 6000)
     RemoteFleetService remoteFleetService;
 
+    @DubboReference(version = "2.0.0", group = "design", check = false, timeout = 6000)
+    RemoteContractService remoteContractService;
+
     @Autowired
     public KwtLogisticsOrderGoodsMapper kwtLogisticsOrderGoodsMapper;
 
@@ -92,7 +98,12 @@ public class LogisticsConsignmentService {
     @Autowired
     public KwtWaybillOrderMapper waybillOrderMapper;
 
-
+    /**
+     * 采购订单-物流托运生成托运订单
+     *
+     * @param bo
+     * @return
+     */
     @Transactional(rollbackFor = Exception.class)
     public HttpResult purchaseLogisticsConsignment(LogisticsConsignmentParam bo) {
         HttpResult httpResult = ValidUtil.serviceValid(bo);
@@ -117,6 +128,11 @@ public class LogisticsConsignmentService {
         }
     }
 
+    /**
+     * 销售订单-物流托运生成托运订单
+     * @param bo
+     * @return
+     */
     @Transactional(rollbackFor = Exception.class)
     public HttpResult sellLogisticsConsignment(LogisticsConsignmentParam bo) {
         HttpResult httpResult = ValidUtil.serviceValid(bo);
@@ -152,24 +168,55 @@ public class LogisticsConsignmentService {
         }
         String lOrderNo = com.sckw.transport.utils.StringUtils.getLOrderNo();
         Long orderId = new IdWorker(NumberConstant.ONE).nextId();
+        /**判断生成物流订单应生成哪一种单据状态*/
+        List<Long> contractList = new ArrayList<>();
+        contractList.add(Long.parseLong(bo.getContractId()));
+        Map<Long, ContractCommonInfoResDto> longContractCommonInfoResDtoMap = remoteContractService.queryContractBaseInfo(contractList);
+        if (CollectionUtils.isEmpty(longContractCommonInfoResDtoMap)) {
+            throw new RuntimeException("并未有对应合同,应先签约合同");
+        }
+        if (longContractCommonInfoResDtoMap.get(Long.parseLong(bo.getContractId())) == null) {
+            throw new RuntimeException("并未有对应合同,应先签约合同");
+        }
+        ContractCommonInfoResDto infoResDto = longContractCommonInfoResDtoMap.get(Long.parseLong(bo.getContractId()));
+        /**状态判断
+         * 是否是已签约合同
+         * */
+        // 0 已签约 1待签约
+        Integer status = infoResDto.getStatus();
+        Integer orderStatus = LogisticsOrderEnum.PENDING_ORDER.getCode();
+        if (NumberConstant.ONE == status) {
+            orderStatus = LogisticsOrderEnum.TO_BE_PLANNED.getCode();
+        } else if (NumberConstant.ZERO == status) {
+            orderStatus = LogisticsOrderEnum.PENDING_ORDER.getCode();
+        } else {
+            log.info("采购/销售生成物流托运 贸易订单id:{}," +
+                            "贸易订单编号:{},合同id:{},合同信息:{}",
+                    bo.getTOrderId(), bo.getTOrderNo(),
+                    bo.getContractId(), JSONObject.toJSONString(infoResDto));
+            throw new RuntimeException("生成物流托运合同异常");
+        }
         insertLogisticsGoods(bo, lOrderNo, orderId);
-        insertLogisticsOrder(bo, lOrderNo, order, tradeOrder, orderId);
+        insertLogisticsOrder(bo, lOrderNo, order, tradeOrder, orderId, orderStatus);
         insertLogisticsOrderContract(bo, orderId);
         insertLogisticsOrderUnit(bo, orderId);
         insertLogisticsOrderAddress(bo, orderId);
-        insertLogisticsOrderTrack(bo, orderId);
-        sendMongoDB(lOrderNo, orderId, bo, tradeOrder);
+        insertLogisticsOrderTrack(bo, orderId, orderStatus);
+        sendMongoDB(lOrderNo, orderId, bo, tradeOrder, orderStatus);
     }
 
     /**
      * 组装数据发送至mongoDb
      *
-     * @param lOrderNo
-     * @param orderId
-     * @param bo
+     * @param lOrderNo    物流订单编号
+     * @param orderId     物流订单id
+     * @param bo          页面请求数据
+     * @param tradeOrder  贸易单据
+     * @param orderStatus 物流订单状态
      */
-    private void sendMongoDB(String lOrderNo, Long orderId, LogisticsConsignmentParam bo, OrderDetailRes tradeOrder) {
+    private void sendMongoDB(String lOrderNo, Long orderId, LogisticsConsignmentParam bo, OrderDetailRes tradeOrder, Integer orderStatus) {
         SckwLogisticsOrder logisticsOrder = new SckwLogisticsOrder();
+        logisticsOrder.setStatus(String.valueOf(orderStatus));
         logisticsOrder.setLOrderId(orderId);
         logisticsOrder.setLOrderNo(lOrderNo);
         logisticsOrder.setLOrderPid(null);
@@ -312,7 +359,7 @@ public class LogisticsConsignmentService {
      * @param bo
      * @param orderId
      */
-    private void insertLogisticsOrderTrack(LogisticsConsignmentParam bo, Long orderId) {
+    private void insertLogisticsOrderTrack(LogisticsConsignmentParam bo, Long orderId, Integer orderStatus) {
         KwtLogisticsOrderTrack entity = new KwtLogisticsOrderTrack();
         entity.setId(new IdWorker(NumberConstant.ONE).nextId());
         entity.setLOrderId(orderId);
@@ -328,8 +375,9 @@ public class LogisticsConsignmentService {
     /**
      * 物流订单-商品信息
      *
-     * @param bo
-     * @param lOrderNo
+     * @param bo       页面请求数据
+     * @param lOrderNo 物流订单编号
+     * @param orderId  物流订单表编号
      */
     private void insertLogisticsGoods(LogisticsConsignmentParam bo, String lOrderNo, Long orderId) {
         KwtLogisticsOrderGoods kwtLogisticsOrderGoods = new KwtLogisticsOrderGoods();
@@ -349,20 +397,21 @@ public class LogisticsConsignmentService {
     /**
      * 物流订单-主体
      *
-     * @param bo
-     * @param lOrderNo
-     * @param order
-     * @param tradeOrder
+     * @param bo          页面请求参数
+     * @param lOrderNo    物流订单编号
+     * @param order       物流订单数据
+     * @param tradeOrder  贸易订单数据
+     * @param orderId     物流订单id
+     * @param orderStatus 物流订单状态
      */
-    private void insertLogisticsOrder(LogisticsConsignmentParam bo, String lOrderNo, KwtLogisticsOrder order, OrderDetailRes tradeOrder, Long orderId) {
+    private void insertLogisticsOrder(LogisticsConsignmentParam bo, String lOrderNo, KwtLogisticsOrder order, OrderDetailRes tradeOrder, Long orderId, Integer orderStatus) {
         order.setId(orderId);
         order.setEntId(LoginUserHolder.getEntId());
         order.setTOrderId(Long.parseLong(bo.getTOrderId()));
         order.setTOrderNo(bo.getTOrderNo());
         order.setLOrderNo(lOrderNo);
         order.setPid(null);
-//        order.setPids(orderId + StringConstant.COMMA);
-        order.setPids(orderId.toString());
+        order.setPids(orderId + StringConstant.COMMA);
         order.setSettlementCycle(bo.getSettlementCycle());
         order.setPrice(new BigDecimal(bo.getPrice()));
         order.setPriceType(remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.PRICE_TYPE.getType(), bo.getPriceType()) == null ?
@@ -387,7 +436,7 @@ public class LogisticsConsignmentService {
         order.setCreateTime(new Date());
         order.setUpdateBy(LoginUserHolder.getUserId());
         order.setUpdateTime(new Date());
-        order.setStatus(LogisticsOrderEnum.PENDING_ORDER.getCode());
+        order.setStatus(orderStatus);
         BigDecimal decimal = new BigDecimal(NumberConstant.ZERO);
         /**补充默认值*/
         order.setEntrustAmount(decimal);
@@ -505,7 +554,7 @@ public class LogisticsConsignmentService {
     public HttpResult logisticsOrder(String id, Integer page, Integer pageSize) {
         HttpResult httpResult = new HttpResult();
         OrderDetailRes orderDetailRes = tradeOrderInfoService.getOrderDetailById(Long.parseLong(id));
-        /**根据下单方式决定托运数据是否展示*/
+        /**根据下单方式(代客下单/自主下单)决定托运数据是否展示*/
         boolean flag = false;
         if (String.valueOf(NumberConstant.ONE).equals(orderDetailRes.getSource())) {
             flag = true;
@@ -705,6 +754,7 @@ public class LogisticsConsignmentService {
      * @param type           类型
      * @return
      */
+    @Transactional(rollbackFor = Exception.class)
     public HttpResult orderFinish(OrderFinishDTO orderFinishDTO, String type) {
         HttpResult httpResult = ValidUtil.serviceValid(orderFinishDTO);
         if (!String.valueOf(httpResult.getCode()).equals(String.valueOf(HttpStatus.SUCCESS_CODE))) {
@@ -727,66 +777,7 @@ public class LogisticsConsignmentService {
      * @param orderFinishDTO
      */
     private void sellOrderFinish(OrderFinishDTO orderFinishDTO) {
-        /** 订单完结 物流运单状态为【待派车】、【运输中】可操作*/
-        /**完结拦截 必须车辆运单无正在运输中的单据才能完结 状态有 待接单之后已核弹之前的状态 都不能完结*/
-        /**完结订单 不做页面填写数量与数据库数量进行计算验证-直接获取页面填写数据进行保存处理*/
-        //物流订单id
-        String id = orderFinishDTO.getId();
-        KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
-                .eq(KwtLogisticsOrder::getId, id));
-        if (logisticsOrder == null) {
-            throw new RuntimeException("采购订单-完结订单-物流单据不存在!");
-        }
-        /**订单状态验证*/
-        if (!LogisticsOrderEnum.WAIT_DELIVERY.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))
-                && !LogisticsOrderEnum.IN_TRANSIT.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))) {
-            throw new RuntimeException("当前运单并不属于【待派车】,【运输中】状态");
-        }
-        /**完结拦截*/
-        List<Integer> statusList = new ArrayList<>();
-        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());
-        int count = waybillOrderMapper.selectDataByLorderId(id, statusList);
-        if (count > NumberConstant.ZERO) {
-            throw new RuntimeException("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕");
-        }
-        /**单据完结修改状态以及数据*/
-        logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
-        logisticsOrder.setLoadAmount(orderFinishDTO.getLoadAmount());
-        logisticsOrder.setUnloadAmount(orderFinishDTO.getUnloadAmount());
-        logisticsOrder.setCreateBy(LoginUserHolder.getUserId());
-        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);
-        /**单据完结修改Mongodb*/
-        SckwLogisticsOrder updateParam = new SckwLogisticsOrder();
-        updateParam.setLOrderId(Long.parseLong(id))
-                .setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus())
-                .setUpdateBy(LoginUserHolder.getUserId())
-                .setUpdateByName(LoginUserHolder.getUserName())
-                .setUpdateTime(new Date())
-                .setLoadAmount(orderFinishDTO.getLoadAmount())
-                .setUnloadAmount(orderFinishDTO.getUnloadAmount())
-        ;
-        SckwBusSum busSum = new SckwBusSum();
-        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
-        busSum.setMethod(2);
-        busSum.setObject(updateParam);
-        streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
+        purchaseOrderFinish(orderFinishDTO);
     }
 
     /**
@@ -797,6 +788,7 @@ public class LogisticsConsignmentService {
     private void purchaseOrderFinish(OrderFinishDTO orderFinishDTO) {
         /** 订单完结 物流运单状态为【待派车】、【运输中】可操作*/
         /**完结拦截 必须车辆运单无正在运输中的单据才能完结 状态有 待接单之后已核弹之前的状态 都不能完结*/
+        /**完结订单-对应物流订单下子订单都要进行完结*/
         /**完结订单 不做页面填写数量与数据库数量进行计算验证-直接获取页面填写数据进行保存处理*/
         //物流订单id
         String id = orderFinishDTO.getId();
@@ -822,11 +814,77 @@ public class LogisticsConsignmentService {
         if (count > NumberConstant.ZERO) {
             throw new RuntimeException("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕");
         }
-        /**单据完结修改状态以及数据*/
+        /**完结订单-对应物流订单下子订单都要进行完结*/
+        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);
+                }
+            }
+        }
+    }
+
+    private void updateDataBySubset(OrderFinishDTO orderFinishDTO, String orderId) {
+        KwtLogisticsOrder kwtLogisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getId, Long.parseLong(orderId)));
+        if (kwtLogisticsOrder != null) {
+            kwtLogisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+            kwtLogisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+            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);
+            /**单据完结修改Mongodb*/
+            SckwLogisticsOrder updateParam = new SckwLogisticsOrder();
+            updateParam.setLOrderId(kwtLogisticsOrder.getId())
+                    .setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus())
+                    .setUpdateBy(LoginUserHolder.getUserId())
+                    .setUpdateByName(LoginUserHolder.getUserName())
+                    .setUpdateTime(new Date())
+            ;
+            SckwBusSum busSum = new SckwBusSum();
+            busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+            busSum.setMethod(2);
+            busSum.setObject(updateParam);
+            streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
+        }
+    }
+
+    /**
+     * 完结订单-修改本身数据
+     */
+    private void updateDataByItself(KwtLogisticsOrder logisticsOrder, OrderFinishDTO orderFinishDTO) {
         logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
         logisticsOrder.setLoadAmount(orderFinishDTO.getLoadAmount());
         logisticsOrder.setUnloadAmount(orderFinishDTO.getUnloadAmount());
-        logisticsOrder.setCreateBy(LoginUserHolder.getUserId());
+        logisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
         logisticsOrder.setUpdateTime(new Date());
         logisticsOrder.setRemark(orderFinishDTO.getRemark());
         kwtLogisticsOrderMapper.updateById(logisticsOrder);
@@ -842,7 +900,7 @@ public class LogisticsConsignmentService {
         kwtLogisticsOrderTrackMapper.insert(track);
         /**单据完结修改Mongodb*/
         SckwLogisticsOrder updateParam = new SckwLogisticsOrder();
-        updateParam.setLOrderId(Long.parseLong(id))
+        updateParam.setLOrderId(Long.parseLong(orderFinishDTO.getId()))
                 .setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus())
                 .setUpdateBy(LoginUserHolder.getUserId())
                 .setUpdateByName(LoginUserHolder.getUserName())

+ 26 - 22
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/WaybillManagementService.java

@@ -1,6 +1,5 @@
 package com.sckw.transport.service;
 
-import cn.hutool.log.Log;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.utils.CollectionUtils;
@@ -9,7 +8,10 @@ import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.fleet.api.model.vo.RTruckVo;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
-import com.sckw.transport.dao.*;
+import com.sckw.transport.dao.KwtWaybillOrderAddressMapper;
+import com.sckw.transport.dao.KwtWaybillOrderMapper;
+import com.sckw.transport.dao.KwtWaybillOrderTicketMapper;
+import com.sckw.transport.dao.KwtWaybillOrderTrackMapper;
 import com.sckw.transport.model.KwtWaybillOrderAddress;
 import com.sckw.transport.model.KwtWaybillOrderTicket;
 import com.sckw.transport.model.KwtWaybillOrderTrack;
@@ -25,7 +27,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
@@ -58,6 +59,7 @@ public class WaybillManagementService {
 
     /**
      * 运单详情
+     *
      * @param id
      * @return
      */
@@ -66,8 +68,8 @@ public class WaybillManagementService {
         // 收发地址
         List<KwtWaybillOrderAddress> kwtWaybillOrderAddressList = kwtWaybillOrderAddressMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrderAddress>()
                 .eq(KwtWaybillOrderAddress::getWOrderId, kwtWaybillOrder.getLOrderId()));
-        if(CollectionUtils.isNotEmpty(kwtWaybillOrderAddressList)) {
-            for (KwtWaybillOrderAddress kwtWaybillOrderAddress:kwtWaybillOrderAddressList) {
+        if (CollectionUtils.isNotEmpty(kwtWaybillOrderAddressList)) {
+            for (KwtWaybillOrderAddress kwtWaybillOrderAddress : kwtWaybillOrderAddressList) {
                 // 1装货地址、2卸货地址
                 if (kwtWaybillOrderAddress.getAddressType().equals(NumberConstant.ONE)) {
                     kwtWaybillOrder.setStartLocationName(kwtWaybillOrderAddress.getName());
@@ -83,35 +85,37 @@ public class WaybillManagementService {
         waybillDataVO.setTransportMessage(kwtWaybillOrder);
 
         // 车辆信息
-        Map<Long, RTruckVo> trucks  = remoteFleetService.findTruck(kwtWaybillOrder.getTruckNo());
+        List<String> list = new ArrayList<>(NumberConstant.SIXTEEN);
+        list.add(kwtWaybillOrder.getTruckNo());
+        Map<String, RTruckVo> trucks = remoteFleetService.findTruck(list);
         WaybillCarVO waybillCarVO = new WaybillCarVO();
-        if(CollectionUtils.isNotEmpty(trucks)) {
+        if (CollectionUtils.isNotEmpty(trucks)) {
             waybillCarVO.setType(trucks.get(0).getTruckType());
             waybillCarVO.setTruckId(String.valueOf(trucks.get(0).getId()));
             waybillCarVO.setTrailerNo(trucks.get(0).getTrailerNo());
         }
         waybillCarVO.setDriverId(String.valueOf(kwtWaybillOrder.getDriverId()))
-            .setTruckNo(kwtWaybillOrder.getTruckNo())
-            .setDriverName(kwtWaybillOrder.getDriverName())
-            .setDriverPhone(kwtWaybillOrder.getDriverPhone());
+                .setTruckNo(kwtWaybillOrder.getTruckNo())
+                .setDriverName(kwtWaybillOrder.getDriverName())
+                .setDriverPhone(kwtWaybillOrder.getDriverPhone());
         waybillDataVO.setCarMessage(waybillCarVO);
         // 履约信息
         List<KwtWaybillOrderTicket> kwtWaybillOrderTicket = kwtWaybillOrderTicketMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrderTicket>()
                 .eq(KwtWaybillOrderTicket::getWOrderId, kwtWaybillOrder.getWOrderId()));
         WaybillTicketVO waybillTicketVO = new WaybillTicketVO();
-        if(CollectionUtils.isNotEmpty(kwtWaybillOrderTicket)) {
-            for (KwtWaybillOrderTicket ticket: kwtWaybillOrderTicket) {
+        if (CollectionUtils.isNotEmpty(kwtWaybillOrderTicket)) {
+            for (KwtWaybillOrderTicket ticket : kwtWaybillOrderTicket) {
                 // 装货
                 if (ticket.getType().equals(NumberConstant.ONE)) {
                     waybillTicketVO.setLoadUrl(ticket.getUrls())
-                        .setLoadWeight(String.valueOf(ticket.getGrossAmount()))
-                        .setLoadTime(String.valueOf(ticket.getCreateTime()));
+                            .setLoadWeight(String.valueOf(ticket.getGrossAmount()))
+                            .setLoadTime(String.valueOf(ticket.getCreateTime()));
                 }
                 // 卸货
                 if (ticket.getType().equals(NumberConstant.TWO)) {
                     waybillTicketVO.setUnloadUrl(ticket.getUrls())
-                        .setUnloadWeight(String.valueOf(ticket.getGrossAmount()))
-                        .setUnloadTime(String.valueOf(ticket.getCreateTime()));
+                            .setUnloadWeight(String.valueOf(ticket.getGrossAmount()))
+                            .setUnloadTime(String.valueOf(ticket.getCreateTime()));
                 }
             }
         }
@@ -122,17 +126,17 @@ public class WaybillManagementService {
                 .eq(KwtWaybillOrderTrack::getWOrderId, kwtWaybillOrder.getWOrderId()));
         if (CollectionUtils.isNotEmpty(kwtWaybillOrderTracks)) {
             List<Long> userIds = new ArrayList<>();
-            for (KwtWaybillOrderTrack track: kwtWaybillOrderTracks) {
+            for (KwtWaybillOrderTrack track : kwtWaybillOrderTracks) {
                 userIds.add(track.getCreateBy());
             }
             List<UserCacheResDto> users = remoteSystemService.queryUserCacheByIds(userIds);
-            for (KwtWaybillOrderTrack track: kwtWaybillOrderTracks) {
+            for (KwtWaybillOrderTrack track : kwtWaybillOrderTracks) {
                 WaybillTrackVO waybillTrackVO = new WaybillTrackVO();
                 waybillTrackVO.setId(String.valueOf(track.getId()))
-                    .setRemark(track.getRemark())
-                    .setStatus(String.valueOf(track.getStatus()))
-                    .setCreateBy(String.valueOf(track.getCreateBy()));
-                for (UserCacheResDto user: users) {
+                        .setRemark(track.getRemark())
+                        .setStatus(String.valueOf(track.getStatus()))
+                        .setCreateBy(String.valueOf(track.getCreateBy()));
+                for (UserCacheResDto user : users) {
                     if (Long.valueOf(user.getId()).equals(track.getCreateBy())) {
                         waybillTrackVO.setCreateByName(user.getName())
                                 .setCreateByPhone(user.getPhone());