Преглед на файлове

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

xucaiqin преди 2 години
родител
ревизия
fc1265ac06
променени са 23 файла, в които са добавени 545 реда и са изтрити 104 реда
  1. 15 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/LogisticsOrderEnum.java
  2. 25 5
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwLogisticsOrder.java
  3. 15 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/KwfTruckReportVo.java
  4. 1 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckReportService.java
  5. 1 1
      sckw-modules/sckw-fleet/src/main/resources/mapper/KwfTruckReportMapper.xml
  6. 2 2
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  7. 3 3
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java
  8. 6 0
      sckw-modules/sckw-transport/pom.xml
  9. 16 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/AcceptCarriageOrderController.java
  10. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/ConsignOrderController.java
  11. 3 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java
  12. 12 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderMapper.java
  13. 2 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/AddOrderDTO.java
  14. 2 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OrderDTO.java
  15. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/SendCarDto1.java
  16. 3 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/CarWaybillVO.java
  17. 45 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillCountVo.java
  18. 16 6
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java
  19. 170 45
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ConsignOrderService.java
  20. 135 28
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java
  21. 13 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java
  22. 3 4
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml
  23. 54 1
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

+ 15 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/LogisticsOrderEnum.java

@@ -138,4 +138,19 @@ public enum LogisticsOrderEnum {
         }
         return null;
     }
+
+    /**
+     * @param status 物流订单状态
+     * @description 校验物流订单是否运输完成
+     * @author zk
+     * @date 2023/7/31
+     **/
+    public static boolean transportCompleted(int status) {
+        if (status != LogisticsOrderEnum.HAVE_FINISHED.getCode()
+                && status != LogisticsOrderEnum.HAVE_RECONCILED.getCode()
+                && status != LogisticsOrderEnum.HAVE_ALREADY_SETTLED.getCode()) {
+            return false;
+        }
+        return true;
+    }
 }

+ 25 - 5
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwLogisticsOrder.java

@@ -126,17 +126,17 @@ public class SckwLogisticsOrder {
     private BigDecimal subcontractAmount;
 
     /**
-     * 已委托量
+     * 已委托量(自己承运量)
      */
     private BigDecimal entrustAmount;
 
     /**
-     * 卸货量
+     * 卸货量(自己承运总卸货量)
      */
     private BigDecimal unloadAmount;
 
     /**
-     * 装货量
+     * 装货量(自己承运总装货量)
      */
     private BigDecimal loadAmount;
 
@@ -146,15 +146,35 @@ public class SckwLogisticsOrder {
     private BigDecimal ignoreAmount;
 
     /**
-     * 亏吨量
+     * 亏吨量(自己承运总亏吨量)
      */
     private BigDecimal deficitAmount;
 
     /**
-     * 亏吨扣款
+     * 亏吨扣款(自己承运总亏吨扣款)
      */
     private BigDecimal deficitPrice;
 
+    /**
+     * 总卸货量(自己承运总卸货量+分包承运总卸货量)
+     */
+    private BigDecimal unloadTotalAmount;
+
+    /**
+     * 总装货量(自己承运总装货量+分包承运总装货量)
+     */
+    private BigDecimal loadTotalAmount;
+
+    /**
+     * 总亏吨量(自己承运总亏吨量+分包承运总亏吨量)
+     */
+    private BigDecimal deficitTotalAmount;
+
+    /**
+     * 总亏吨扣款(自己承运总亏吨扣款+分包承运总亏吨扣款)
+     */
+    private BigDecimal deficitTotalPrice;
+
     /**
      * 付款方式(预付款、线下支付、第三方支付)
      */

+ 15 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/KwfTruckReportVo.java

@@ -33,6 +33,17 @@ public class KwfTruckReportVo {
     @ExcelProperty(value = "车牌号")
     private String truckNo;
 
+    /**
+     * 状态
+     */
+    @ExcelIgnore
+    private int status;
+    /**
+     * 状态名称
+     */
+    @ExcelProperty(value = "状态")
+    private int statusName;
+
     /**
      * 司机主键id
      */
@@ -159,4 +170,8 @@ public class KwfTruckReportVo {
     @ExcelProperty(value = "备注")
     private String remark;
 
+    public String getStatusName() {
+        return status == 1 ? "正常" : status == 2 ? "临时" : "异常";
+    }
+
 }

+ 1 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckReportService.java

@@ -248,7 +248,7 @@ public class KwfTruckReportService {
                 truckReport.setDriverId(driver.getId());
             } else {
                 //校验司机是否已上报
-                Map<String, Object> driver = trucks.get(0);
+                Map<String, Object> driver = drivers.get(0);
                 Object driverId = driver.get("id");
                 List<Map<String, Object>> reports = truckReportDao.findList(new HashMap() {{
                     put("driverId", driverId);

+ 1 - 1
sckw-modules/sckw-fleet/src/main/resources/mapper/KwfTruckReportMapper.xml

@@ -47,7 +47,7 @@
 
     <select id="findPage" resultType="com.sckw.fleet.model.vo.KwfTruckReportVo" parameterType="java.util.Map" >
         SELECT
-            trr.id, trr.ent_id entId, trr.truck_id truckId, driver_id driverId, trr.remark, trr.status,
+            trr.id, trr.ent_id entId, trr.truck_id truckId, driver_id driverId, trr.remark, tr.status,
             trr.create_by createBy, trr.create_time createTime, trr.update_time updateTime, trr.remark,
             tr.truck_no truckNo, tr.actual_weight actualWeight, tr.business_status businessStatus,
             dr.`name` driverName, dr.phone driverPhone, dr.idcard driverIdcard, dr.ent_id driverEntId,

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

@@ -298,10 +298,10 @@ public class KwoTradeOrderService {
         }
         BigDecimal advancePrice = goods.getAdvancePrice().multiply(new BigDecimal("10000"));
         //直接采购下单才校验预付款限额
-        if (Objects.equals(param.getOrderSource(), DictEnum.TORDER_SOURCE_1.getValue()) && trading.startsWith("0") && price.compareTo(advancePrice) < 0) {
+        if (Objects.equals(param.getOrderSource(), DictEnum.TORDER_SOURCE_1.getValue()) && trading.startsWith("1") && price.compareTo(advancePrice) < 0) {
             throw new BusinessException("您的订单总额未达到预付限额,请确认");
         }
-        if (trading.startsWith("0")) {
+        if (trading.startsWith("1")) {
             R<List<WalletDto>> wallet = payCenterDubboService.wallet(param.getProcureTopEntId(), ChannelEnum.getByCode(trading), param.getSupplyTopEntId());
             if (Objects.isNull(wallet) || Objects.equals(wallet.getCode(), 0)) {
                 throw new BusinessException("校验预付钱包异常,请联系管理员!");

+ 3 - 3
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java

@@ -96,7 +96,7 @@ public class KwpGoodsService {
      */
     @Transactional(rollbackFor = Exception.class)
     public void addShelves(AddGoodsParam addGoodsParam) {
-        if (addGoodsParam.getTrading().startsWith("0") && Objects.isNull(addGoodsParam.getAdvancePrice())) {
+        if (addGoodsParam.getTrading().startsWith("1") && Objects.isNull(addGoodsParam.getAdvancePrice())) {
             throw new BusinessException("交易方式为预付款时,预付款最低限额不能为空!");
         }
         Long entId = LoginUserHolder.getEntId();
@@ -322,7 +322,7 @@ public class KwpGoodsService {
         if (StringUtils.isBlank(param.getTrading())) {
             throw new BusinessException("交易方式不能为空!");
         }
-        if (param.getTrading().startsWith("0") && Objects.isNull(param.getAdvancePrice())) {
+        if (param.getTrading().startsWith("1") && Objects.isNull(param.getAdvancePrice())) {
             throw new BusinessException("交易方式为预付款时,预付款最低限额不能为空!");
         }
 
@@ -839,7 +839,7 @@ public class KwpGoodsService {
             throw new BusinessException("商品不存在或已下架!");
         }
         BigDecimal amount = goods.getAmount();
-        if (!goods.getTrading().startsWith("0")) {
+        if (!goods.getTrading().startsWith("1")) {
             return amount;
         }
         if (Objects.isNull(param.getProcureEntId()) || Objects.isNull(param.getSupplyEntId())) {

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

@@ -107,6 +107,12 @@
             <version>1.0.0</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-manage-api</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
         <!-- validation -->
         <dependency>
             <groupId>org.springframework.boot</groupId>

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

@@ -168,6 +168,22 @@ public class AcceptCarriageOrderController {
         }
     }
 
+    /**
+     * 承运订单-获取分包托运列表-数据统计
+     *
+     * @param lOrderId 单据id
+     * @return
+     */
+    @RequestMapping(value = "/getSubcontractConsignmentCount", method = RequestMethod.GET)
+    public HttpResult getSubcontractConsignmentCount(@RequestParam("lOrderId") @NotBlank(message = "单据id不能为空") String lOrderId) {
+        try {
+            return acceptCarriageOrderService.getSubcontractConsignmentCount(lOrderId);
+        } catch (Exception e) {
+            log.error("承运订单-获取分包托运列表 error:{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
     /**
      * 承运订单-设置停止接单-查询
      *

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

@@ -58,7 +58,7 @@ public class ConsignOrderController {
     }
 
     /**
-     * 托运订单获取车辆信息
+     * 托运订单-获取车辆信息
      *
      * @param orderDto
      * @return

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

@@ -9,6 +9,7 @@ import com.sckw.transport.model.param.LogisticsOrderParam;
 import com.sckw.transport.model.vo.DriverListVo;
 import com.sckw.transport.model.vo.OrderFinishVO;
 import com.sckw.transport.model.vo.SubcontractConsignmentVO;
+import com.sckw.transport.model.vo.WaybillCountVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -102,8 +103,8 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
     OrderFinishVO selectOrderFinishData(@Param("orderId") String orderId);
 
     /**
-     * @param params {lOrderId 物流订单id}
-     * @desc 查询下级分包物流订单
+     * @param params {ownOrderId 物流订单id, upperlOrderId 下级分包物流订单,belowlOrderId 所属上级分包}
+     * @desc 查询分包物流订单
      * @author zk
      * @date 2023/7/20
      **/

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

@@ -5,10 +5,12 @@ import com.sckw.mongo.model.TableTops;
 import com.sckw.transport.model.KwtWaybillOrder;
 import com.sckw.transport.model.dto.OrderCarDTO;
 import com.sckw.transport.model.dto.WayBillDetailDTO;
+import com.sckw.transport.model.vo.WaybillCountVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 @Mapper
 public interface KwtWaybillOrderMapper extends BaseMapper<KwtWaybillOrder> {
@@ -26,6 +28,8 @@ public interface KwtWaybillOrderMapper extends BaseMapper<KwtWaybillOrder> {
 
     List<OrderCarDTO> selectWaybillOrderCarList(@Param("id") String id, @Param("page") int page, @Param("pageSize") int pageSize);
 
+    List<OrderCarDTO> selectWaybillOrderCarListGroupByTruckNo(@Param("id") String id, @Param("page") int page, @Param("pageSize") int pageSize);
+
     Long selectWaybillOrderCarCount(@Param("id") String id);
 
     /**
@@ -62,4 +66,12 @@ public interface KwtWaybillOrderMapper extends BaseMapper<KwtWaybillOrder> {
      * @return
      */
     int selectDataByLorderId(@Param("id") String id, @Param("statusList") List<Integer> statusList);
+
+    /**
+     * @param params {lOrderId 物流订单id, upperlOrderId 下级分包物流订单,belowlOrderId 所属上级分包, loadCountStatus 有效装货状态, unloadCountStatus 有效卸货状态}
+     * @desc 统计车辆运单
+     * @author zk
+     * @date 2023/7/31
+     **/
+    WaybillCountVo findWaybillOrderCount(Map params);
 }

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

@@ -128,7 +128,7 @@ public class AddOrderDTO {
     private BigDecimal amount;
 
     /**
-     * 总量
+     * 总量单位
      */
     @NotBlank(message = "总量单位不能为空")
     private String amountUnit;
@@ -143,6 +143,7 @@ public class AddOrderDTO {
     /**
      * 合理损耗单位
      */
+    @NotBlank(message = "合理损耗单位不能为空")
     private String lossUnit;
 
     /**

+ 2 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OrderDTO.java

@@ -1,6 +1,7 @@
 package com.sckw.transport.model.dto;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.sckw.core.model.page.PageRequest;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -12,7 +13,7 @@ import lombok.experimental.Accessors;
  */
 @Data
 @Accessors(chain = true)
-public class OrderDTO {
+public class OrderDTO extends PageRequest {
     @JsonProperty("orderNo")
     @NotNull(message = "单据编号不能为空")
     private String orderNo;

+ 2 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/SendCarDto1.java

@@ -116,7 +116,7 @@ public class SendCarDto1 {
     /**
      * 装货时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(locale="zh", pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @NotNull(message = "开始时间不能为空")
     private Date loadDateTime;
@@ -124,7 +124,7 @@ public class SendCarDto1 {
     /**
      * 卸货时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(locale="zh", pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @NotNull(message = "结束时间不能为空")
     private Date unloadDateTime;

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

@@ -3,6 +3,8 @@ package com.sckw.transport.model.vo;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
+import java.math.BigDecimal;
+
 /**
  * @author lfdc
  * @description 车辆运单
@@ -68,7 +70,7 @@ public class CarWaybillVO {
     /**
      * 扣亏量/吨
      */
-    private String deduct;
+    private BigDecimal deduct;
     /**
      * 派车人
      */

+ 45 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillCountVo.java

@@ -0,0 +1,45 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author zk
+ * @desc 车辆运单统计
+ * @date 2023/7/31 0031
+ */
+@Data
+public class WaybillCountVo {
+    /**
+     * 装货量
+     */
+    private BigDecimal entrustAmount;
+
+    /**
+     * 装货量
+     */
+    private BigDecimal loadAmount;
+
+    /**
+     * 卸货量
+     */
+    private BigDecimal unloadAmount;
+
+    /**
+     * 亏吨量
+     */
+    private BigDecimal deficitAmount;
+
+    /**
+     * 装货时间(第一单车辆运单装货时间)
+     */
+    private Date loadTime;
+
+    /**
+     * 卸货时间(最后一单车辆运单卸货时间)
+     */
+    private Date unloadTime;
+
+
+}

+ 16 - 6
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java

@@ -13,6 +13,7 @@ import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
+import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.*;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
@@ -21,6 +22,7 @@ import com.sckw.excel.utils.DateUtil;
 import com.sckw.excel.utils.ValidUtil;
 import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.fleet.api.model.vo.RTruckVo;
+import com.sckw.manage.api.RemoteManageService;
 import com.sckw.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.model.SckwLogisticsOrder;
 import com.sckw.mongo.model.SckwWaybillOrder;
@@ -29,7 +31,6 @@ import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.product.api.model.KwpGoods;
 import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
-import com.sckw.system.api.RemoteUserService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.transport.dao.*;
@@ -76,7 +77,7 @@ public class AcceptCarriageOrderService {
     RemoteContractService remoteContractService;
 
     @DubboReference(version = "2.0.0", group = "design", check = false, timeout = 6000)
-    RemoteUserService remoteUserService;
+    RemoteManageService remoteManageService;
 
     @Resource
     private StreamBridge streamBridge;
@@ -627,7 +628,6 @@ public class AcceptCarriageOrderService {
     public HttpResult getSubcontractConsignment(String lOrderId, Integer page, Integer pageSize) {
         Integer newPage = page - 1;
         List<SubcontractConsignmentVO> list = logisticsOrderMapper.getSubcontractConsignment(lOrderId, newPage, pageSize);
-
         //联查数据
         /**运价方式*/
         Map<String, String> priceDictData = getDictData(DictTypeEnum.PRICE_TYPE.getType());
@@ -650,9 +650,20 @@ public class AcceptCarriageOrderService {
                 subcontractConsignmentVO.setSettlementCycle(settlementDictData == null ? null : settlementDictData.get(subcontractConsignmentVO.getSettlementCycle()));
             }
         }
+        PageResult build = PageResult.build(page, pageSize, list.stream().count(), list);
+        return HttpResult.ok(build);
+    }
+
+
+    /**
+     * 分包列表下方数据统计
+     * @param lOrderId  物流订单id
+     * @return
+     */
+    public HttpResult getSubcontractConsignmentCount(String lOrderId) {
         /**页面数据统计*/
-//        List<Map> countList = logisticsOrderMapper.countSubcontractConsignmentById(lOrderId);
-        return HttpResult.ok(list);
+        List<Map> countList = logisticsOrderMapper.countSubcontractConsignmentById(lOrderId);
+        return HttpResult.ok(countList);
     }
 
     public String getDictData(String type, String value) {
@@ -1129,7 +1140,6 @@ public class AcceptCarriageOrderService {
             log.info("承运订单创建订单异常");
             throw new RuntimeException("自建订单异常");
         }
-        //todo dubbo根据企业获取地址信息
         /**获取商品信息*/
         KwpGoods goods = goodsInfoService.getGoodsById(Long.parseLong(orderDTO.getGoodsId()));
         if (goods == null) {

+ 170 - 45
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ConsignOrderService.java

@@ -9,6 +9,7 @@ import com.sckw.core.common.enums.StringConstant;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
+import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.StringTimeUtil;
@@ -27,9 +28,9 @@ import com.sckw.system.api.RemoteSystemService;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.AddOrderDTO;
+import com.sckw.transport.model.dto.OrderCarDTO;
 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 com.sckw.transport.model.vo.OrderFinishVO;
 import jakarta.annotation.Resource;
@@ -121,6 +122,160 @@ public class ConsignOrderService {
         return httpResult;
     }
 
+    /**
+     * 托运订单/承运订单-获取车辆运单-下方数据统计
+     *
+     * @param orderDto
+     * @return
+     */
+    public HttpResult getCarWaybillByOrderCount(OrderDTO orderDto) {
+        HttpResult httpResult = new HttpResult();
+        if (String.valueOf(NumberConstant.ONE).equals(orderDto.getType())) {
+            httpResult = getCarWaybillByOrderByConsignCount(orderDto);
+        } else if (String.valueOf(NumberConstant.TWO).equals(orderDto.getType())) {
+            httpResult = getCarWaybillByOrderByAcceptCarriageCount(orderDto);
+        } else {
+            throw new RuntimeException("单据类型错误");
+        }
+        return httpResult;
+    }
+
+    /**
+     * 托运订单-车辆运单列表统计
+     *
+     * @param orderDto
+     * @return
+     */
+    private HttpResult getCarWaybillByOrderByConsignCount(OrderDTO orderDto) {
+        KwtLogisticsOrder order = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                        .eq(StringUtils.isNotBlank(orderDto.getId()), KwtLogisticsOrder::getId, Long.parseLong(orderDto.getId()))
+                        .eq(StringUtils.isNotBlank(orderDto.getOrderNo()), KwtLogisticsOrder::getLOrderNo, orderDto.getOrderNo())
+                /**.eq(KwtLogisticsOrder::getEntId, LoginUserHolder.getEntId())*/);
+        if (ObjectUtils.isEmpty(order)) {
+            return HttpResult.ok();
+        }
+        List<KwtWaybillOrder> kwtWaybillOrders = kwtWaybillOrderMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrder>()
+                        .eq(StringUtils.isNotBlank(order.getId()), KwtWaybillOrder::getLOrderId, order.getId())
+                /**.eq(KwtWaybillOrder::getEntId, LoginUserHolder.getEntId())*/);
+        JSONObject statistics = new JSONObject();
+        //合理损耗
+        BigDecimal loss = order.getLoss();
+        //派车量
+        BigDecimal sendCarWeighNumber = new BigDecimal(NumberConstant.ZERO);
+        //装货量
+        BigDecimal loadAmountNumber = new BigDecimal(NumberConstant.ZERO);
+        //卸货量
+        BigDecimal unloadAmountNumber = new BigDecimal(NumberConstant.ZERO);
+        /**亏吨量/吨->装货量-卸货量
+         扣亏量/吨->亏吨量-合理损耗*/
+        //亏吨量
+        BigDecimal defectiveWeighNumber = new BigDecimal(NumberConstant.ZERO);
+        //扣亏量/吨
+        BigDecimal deductWeighNumber = new BigDecimal(NumberConstant.ZERO);
+        if (CollectionUtils.isNotEmpty(kwtWaybillOrders)) {
+            for (KwtWaybillOrder kwtWaybillOrder : kwtWaybillOrders) {
+                CarWaybillVO carWaybillVo = new CarWaybillVO();
+                //扣亏量/吨->亏吨量-合理损耗值(分配量(委托量)*合理损耗)
+                BigDecimal deduct = null;
+                if (kwtWaybillOrder.getDeficitAmount() != null && (kwtWaybillOrder.getDeficitAmount().compareTo(new BigDecimal(NumberConstant.ZERO)) == NumberConstant.ZERO)) {
+                    deduct = kwtWaybillOrder.getDeficitAmount().subtract(order.getLoss() == null ? new BigDecimal(NumberConstant.ZERO) : order.getLoss());
+                }
+                carWaybillVo.setSendCarWeigh(kwtWaybillOrder.getEntrustAmount() == null ? null : String.valueOf(kwtWaybillOrder.getEntrustAmount()));
+                /**亏吨量/吨->装货量-卸货量
+                 扣亏量/吨->亏吨量*合理损耗*/
+                carWaybillVo.setDefectiveWeigh(kwtWaybillOrder.getDeficitAmount() == null ? null : String.valueOf(kwtWaybillOrder.getDeficitAmount()));
+                carWaybillVo.setDeduct(kwtWaybillOrder.getDeficitAmount().compareTo(new BigDecimal(NumberConstant.ZERO)) == 0 ?
+                        new BigDecimal(NumberConstant.ZERO) : kwtWaybillOrder.getDeficitAmount().multiply(loss.divide(BigDecimal.valueOf(1000L))));
+                sendCarWeighNumber = sendCarWeighNumber.add(kwtWaybillOrder.getLoadAmount());
+                if (carWaybillVo.getLoadAmount() != null) {
+                    loadAmountNumber = loadAmountNumber.add(new BigDecimal(carWaybillVo.getLoadAmount()));
+                }
+                if (carWaybillVo.getUnloadAmount() != null) {
+                    unloadAmountNumber = unloadAmountNumber.add(new BigDecimal(carWaybillVo.getUnloadAmount()));
+                }
+                if (carWaybillVo.getDefectiveWeigh() != null) {
+                    defectiveWeighNumber = defectiveWeighNumber.add(new BigDecimal(carWaybillVo.getDefectiveWeigh()));
+                }
+                deductWeighNumber = deductWeighNumber.add(carWaybillVo.getDeduct());
+            }
+        }
+        statistics.put("count", kwtWaybillOrders.size());
+        statistics.put("sendCarWeighNumber", sendCarWeighNumber);
+        statistics.put("loadAmountNumber", loadAmountNumber);
+        statistics.put("unloadAmountNumber", unloadAmountNumber);
+        statistics.put("defectiveWeighNumber", defectiveWeighNumber);
+        statistics.put("deductWeighNumber", deductWeighNumber);
+        return HttpResult.ok(statistics);
+    }
+
+    /**
+     * 承运订单-车辆运单列表-下方统计
+     *
+     * @param orderDto
+     * @return
+     */
+    private HttpResult getCarWaybillByOrderByAcceptCarriageCount(OrderDTO orderDto) {
+        KwtLogisticsOrder order = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                        .eq(StringUtils.isNotBlank(orderDto.getId()), KwtLogisticsOrder::getId, Long.parseLong(orderDto.getId()))
+                        .eq(StringUtils.isNotBlank(orderDto.getOrderNo()), KwtLogisticsOrder::getLOrderNo, orderDto.getOrderNo())
+                /**.eq(KwtLogisticsOrder::getEntId, LoginUserHolder.getEntId())*/);
+        if (ObjectUtils.isEmpty(order)) {
+            return HttpResult.ok();
+        }
+        List<KwtWaybillOrder> kwtWaybillOrders = kwtWaybillOrderMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrder>()
+                        .eq(StringUtils.isNotBlank(order.getId()), KwtWaybillOrder::getLOrderId, order.getId())
+                /**.eq(KwtWaybillOrder::getEntId, LoginUserHolder.getEntId())*/);
+        JSONObject statistics = new JSONObject();
+        //合理损耗
+        BigDecimal loss = order.getLoss();
+        //派车量
+        BigDecimal sendCarWeighNumber = new BigDecimal(NumberConstant.ZERO);
+        //装货量
+        BigDecimal loadAmountNumber = new BigDecimal(NumberConstant.ZERO);
+        //卸货量
+        BigDecimal unloadAmountNumber = new BigDecimal(NumberConstant.ZERO);
+        /**亏吨量/吨->装货量-卸货量
+         扣亏量/吨->亏吨量-合理损耗*/
+        //亏吨量
+        BigDecimal defectiveWeighNumber = new BigDecimal(NumberConstant.ZERO);
+        //扣亏量/吨
+        BigDecimal deductWeighNumber = new BigDecimal(NumberConstant.ZERO);
+        if (CollectionUtils.isNotEmpty(kwtWaybillOrders)) {
+            for (KwtWaybillOrder kwtWaybillOrder : kwtWaybillOrders) {
+                CarWaybillVO carWaybillVo = new CarWaybillVO();
+                //扣亏量/吨->亏吨量-合理损耗值(分配量(委托量)*合理损耗)
+                BigDecimal deduct = null;
+                if (kwtWaybillOrder.getDeficitAmount() != null && (kwtWaybillOrder.getDeficitAmount().compareTo(new BigDecimal(NumberConstant.ZERO)) == NumberConstant.ZERO)) {
+                    deduct = kwtWaybillOrder.getDeficitAmount().subtract(order.getLoss() == null ? new BigDecimal(NumberConstant.ZERO) : order.getLoss());
+                }
+                carWaybillVo.setSendCarWeigh(kwtWaybillOrder.getEntrustAmount() == null ? null : String.valueOf(kwtWaybillOrder.getEntrustAmount()));
+                /**亏吨量/吨->装货量-卸货量
+                 扣亏量/吨->亏吨量*合理损耗*/
+                carWaybillVo.setDefectiveWeigh(kwtWaybillOrder.getDeficitAmount() == null ? null : String.valueOf(kwtWaybillOrder.getDeficitAmount()));
+                carWaybillVo.setDeduct(kwtWaybillOrder.getDeficitAmount().compareTo(new BigDecimal(NumberConstant.ZERO)) == 0 ?
+                        new BigDecimal(NumberConstant.ZERO) : kwtWaybillOrder.getDeficitAmount().multiply(loss.divide(BigDecimal.valueOf(1000L))));
+                sendCarWeighNumber = sendCarWeighNumber.add(kwtWaybillOrder.getLoadAmount());
+                if (carWaybillVo.getLoadAmount() != null) {
+                    loadAmountNumber = loadAmountNumber.add(new BigDecimal(carWaybillVo.getLoadAmount()));
+                }
+                if (carWaybillVo.getUnloadAmount() != null) {
+                    unloadAmountNumber = unloadAmountNumber.add(new BigDecimal(carWaybillVo.getUnloadAmount()));
+                }
+                if (carWaybillVo.getDefectiveWeigh() != null) {
+                    defectiveWeighNumber = defectiveWeighNumber.add(new BigDecimal(carWaybillVo.getDefectiveWeigh()));
+                }
+                deductWeighNumber = deductWeighNumber.add(carWaybillVo.getDeduct());
+            }
+        }
+        statistics.put("count", kwtWaybillOrders.size());
+        statistics.put("sendCarWeighNumber", sendCarWeighNumber);
+        statistics.put("loadAmountNumber", loadAmountNumber);
+        statistics.put("unloadAmountNumber", unloadAmountNumber);
+        statistics.put("defectiveWeighNumber", defectiveWeighNumber);
+        statistics.put("deductWeighNumber", deductWeighNumber);
+        return HttpResult.ok(statistics);
+    }
+
     /**
      * 通过订单id+类型 查询承运订单-车辆运单
      *
@@ -195,7 +350,7 @@ public class ConsignOrderService {
                 /**亏吨量/吨->装货量-卸货量
                  扣亏量/吨->亏吨量-合理损耗*/
                 carWaybillVo.setDefectiveWeigh(kwtWaybillOrder.getDeficitAmount() == null ? null : String.valueOf(kwtWaybillOrder.getDeficitAmount()));
-                carWaybillVo.setDeduct(String.valueOf(deduct));
+                carWaybillVo.setDeduct(deduct);
 //                carWaybillVo.setAppointor(remoteSystemService.queryUserCacheById(kwtWaybillOrder.getCreateBy()) == null ?
 //                        String.valueOf(kwtWaybillOrder.getCreateBy()) : remoteSystemService.queryUserCacheById(kwtWaybillOrder.getCreateBy()).getName());
                 if (carWaybillVo.getLoadAmount() != null) {
@@ -239,12 +394,8 @@ public class ConsignOrderService {
         }
         List<KwtWaybillOrder> kwtWaybillOrders = kwtWaybillOrderMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrder>()
                         .eq(StringUtils.isNotBlank(order.getId()), KwtWaybillOrder::getLOrderId, order.getId())
+                        .last("limit" + (orderDto.getPage() - 1) + " , " + orderDto.getPageSize())
                 /**.eq(KwtWaybillOrder::getEntId, LoginUserHolder.getEntId())*/);
-        JSONObject statistics = new JSONObject();
-        BigDecimal sendCarWeighNumber = new BigDecimal(NumberConstant.ZERO);
-        BigDecimal loadAmountNumber = new BigDecimal(NumberConstant.ZERO);
-        BigDecimal unloadAmountNumber = new BigDecimal(NumberConstant.ZERO);
-        BigDecimal defectiveWeighNumber = new BigDecimal(NumberConstant.ZERO);
         if (CollectionUtils.isNotEmpty(kwtWaybillOrders)) {
             for (KwtWaybillOrder kwtWaybillOrder : kwtWaybillOrders) {
                 CarWaybillVO carWaybillVo = new CarWaybillVO();
@@ -295,31 +446,14 @@ public class ConsignOrderService {
                 /**亏吨量/吨->装货量-卸货量
                  扣亏量/吨->亏吨量-合理损耗*/
                 carWaybillVo.setDefectiveWeigh(kwtWaybillOrder.getDeficitAmount() == null ? null : String.valueOf(kwtWaybillOrder.getDeficitAmount()));
-                carWaybillVo.setDeduct(String.valueOf(deduct));
+                carWaybillVo.setDeduct(deduct);
 //                carWaybillVo.setAppointor(remoteSystemService.queryUserCacheById(kwtWaybillOrder.getCreateBy()) == null ?
 //                        String.valueOf(kwtWaybillOrder.getCreateBy()) : remoteSystemService.queryUserCacheById(kwtWaybillOrder.getCreateBy()).getName());
-                sendCarWeighNumber = sendCarWeighNumber.add(kwtWaybillOrder.getLoadAmount());
-                if (carWaybillVo.getLoadAmount() != null) {
-                    loadAmountNumber = loadAmountNumber.add(new BigDecimal(carWaybillVo.getLoadAmount()));
-                }
-                if (carWaybillVo.getUnloadAmount() != null) {
-                    unloadAmountNumber = unloadAmountNumber.add(new BigDecimal(carWaybillVo.getUnloadAmount()));
-                }
-                if (carWaybillVo.getDefectiveWeigh() != null) {
-                    defectiveWeighNumber = defectiveWeighNumber.add(new BigDecimal(carWaybillVo.getDefectiveWeigh()));
-                }
                 returnList.add(carWaybillVo);
             }
         }
-        statistics.put("count", kwtWaybillOrders.size());
-        statistics.put("sendCarWeighNumber", sendCarWeighNumber);
-        statistics.put("loadAmountNumber", loadAmountNumber);
-        statistics.put("unloadAmountNumber", unloadAmountNumber);
-        statistics.put("defectiveWeighNumber", defectiveWeighNumber);
-        Map map = new HashMap<>();
-        map.put("returnList", returnList);
-        map.put("statistics", statistics);
-        return HttpResult.ok(map);
+        PageResult result = PageResult.build(orderDto.getPage(), orderDto.getPageSize(), returnList.stream().count(), returnList);
+        return HttpResult.ok(result);
     }
 
     /**
@@ -335,27 +469,18 @@ public class ConsignOrderService {
             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());
+        List<OrderCarDTO> list = kwtWaybillOrderMapper.selectWaybillOrderCarListGroupByTruckNo(orderDto.getId(), orderDto.getPage(), orderDto.getPageSize());
+        if (CollectionUtils.isNotEmpty(list)) {
+            List<String> stringList = list.stream().map(OrderCarDTO::getTruckNo).collect(Collectors.toList());
             Map<String, RTruckVo> truck = remoteFleetService.findTruck(stringList);
-            for (KwtWaybillOrder KwtWaybillOrder : waybillOrders) {
-                CarDataVO carDataVo = new CarDataVO();
-                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);
+            for (OrderCarDTO dto : list) {
+                dto.setLoadAmount(truck.get(dto.getTruckNo()) == null ?
+                        null : (truck.get(dto.getTruckNo()).getActualWeight() == null ?
+                        null : (String.valueOf(truck.get(dto.getTruckNo()).getActualWeight()))));
             }
         }
-        return HttpResult.ok(carDataVOS);
+        PageResult build = PageResult.build(orderDto.getPage(), orderDto.getPageSize(), (long) list.size(), list);
+        return HttpResult.ok(build);
     }
 
     /**

+ 135 - 28
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java

@@ -3,10 +3,7 @@ package com.sckw.transport.service;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
-import com.sckw.core.utils.BeanUtils;
-import com.sckw.core.utils.CollectionUtils;
-import com.sckw.core.utils.IdWorker;
-import com.sckw.core.utils.StringUtils;
+import com.sckw.core.utils.*;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
@@ -17,6 +14,7 @@ import com.sckw.stream.model.SckwBusSum;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.*;
+import com.sckw.transport.model.vo.WaybillCountVo;
 import jakarta.annotation.Resource;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.stream.function.StreamBridge;
@@ -26,6 +24,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 
@@ -1000,9 +999,12 @@ public class KwtWaybillOrderService {
         //承运订单已装货量=承运订单原装货量+当前车辆运单装货量
         BigDecimal loadAmount = logisticsOrder.getLoadAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getLoadAmount();
         logisticsOrder.setLoadAmount(loadAmount.add(waybillOrder.getLoadAmount()));
-        logisticsOrder.setLoadTime(waybillOrder.getUpdateTime());
+        logisticsOrder.setLoadTime(logisticsOrder.getLoadTime() == null ?waybillOrder.getUpdateTime() : logisticsOrder.getLoadTime());
         logisticsOrderDao.updateById(logisticsOrder);
 
+        //校验当前承运订单是否运输完成(修改状态+统计量)
+        checkLogisticsByStatusV1(waybillOrder.getLOrderId());
+
         /**5Mongodb数据更新**/
         //1车辆运单
         SckwWaybillOrder wOrder = new SckwWaybillOrder();
@@ -1106,10 +1108,12 @@ public class KwtWaybillOrderService {
         //承运订单亏吨量=承运订单装货量-承运订单卸货量
         logisticsOrder.setDeficitAmount(logisticsOrder.getLoadAmount().subtract(logisticsOrder.getUnloadAmount()));
         //承运订单亏吨扣款
-        deficitPrice(logisticsOrder);
+        BigDecimal deficitPrice = deficitPrice(logisticsOrder.getLoadAmount(), logisticsOrder.getDeficitAmount(), logisticsOrder.getLoss(), logisticsOrder.getGoodsPrice());
+        logisticsOrder.setDeficitPrice(deficitPrice);
         logisticsOrderDao.updateById(logisticsOrder);
-        //校验当前承运订单是否运输完成
-        setLogisticsByUnloading(logisticsOrder.getId());
+
+        //校验当前承运订单是否运输完成(修改状态+统计量)
+        checkLogisticsByStatusV1(waybillOrder.getLOrderId());
 
         /**5Mongodb数据更新**/
         //1车辆运单
@@ -1134,33 +1138,34 @@ public class KwtWaybillOrderService {
     }
 
     /**
-     * @param logisticsOrder 物流订单
-     * @desc 计算物流订单亏吨扣款
+     * @param loadAmount 装货量
+     * @param deficitAmount 亏吨量
+     * @param loss 合理损耗
+     * @param goodsPrice 货值单价
+     * @desc 计算亏吨扣款
      * @author zk
      * @date 2023/7/27
      **/
-    public void deficitPrice(KwtLogisticsOrder logisticsOrder) {
+    public BigDecimal deficitPrice(BigDecimal loadAmount, BigDecimal deficitAmount, BigDecimal loss, BigDecimal goodsPrice) {
         //承运订单亏吨扣款=(承运订单亏吨量 -(承运订单装货量 * 承运订单合理损耗))* 扣亏货值
-        BigDecimal loadAmount = logisticsOrder.getLoadAmount();
-        BigDecimal deficitAmount = logisticsOrder.getDeficitAmount();
-        BigDecimal loss = logisticsOrder.getLoss() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getLoss();
-        BigDecimal goodsPrice = logisticsOrder.getGoodsPrice() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getGoodsPrice();
+        loss = loss == null ? new BigDecimal(Global.AMOUNT) : loss;
+        goodsPrice = goodsPrice == null ? new BigDecimal(Global.AMOUNT) : goodsPrice;
         BigDecimal deficitPrice = deficitAmount.subtract(loadAmount.multiply(loss).setScale(4, RoundingMode.HALF_UP))
                 .multiply(goodsPrice).setScale(4, RoundingMode.HALF_UP);
-        logisticsOrder.setDeficitPrice(deficitPrice);
+        return deficitPrice;
     }
 
     /**
      * @param lOrderId 承运订单ID
-     * @description 校验当前承运订单是否运输完成
+     * @description 校验当前承运订单是否运输完成(修改状态)
      * @author zk
      * @date 2023/7/27
      **/
-    public void setLogisticsByUnloading(Long lOrderId) {
+    public void checkLogisticsByStatus(Long lOrderId) {
         /**
          校验当前承运订单是否运输完成(虑该当前承运订单上下级物流订单)
-         存在下级分包,下级物流订单和当前物流订单全部运输完成则修改当前物流订单状态为已完成(HAVE_FINISHED)
-         当前物流订单属于分包:需要判断上级及同级分包全部运输完成修改上级物流订单状态为已完成(HAVE_FINISHED)-一直向上到一级物流订单
+         1存在下级分包,下级物流订单和当前物流订单全部运输完成则修改当前物流订单状态为已完成(HAVE_FINISHED)
+         2当前物流订单属于分包:需要判断上级及同级分包全部运输完成修改上级物流订单状态为已完成(HAVE_FINISHED)-一直向上到一级物流订单
          **/
         //承运单信息
         KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(lOrderId);
@@ -1169,11 +1174,11 @@ public class KwtWaybillOrderService {
             return;
         }
 
-        /**存在下级分包**/
+        /**1存在下级分包**/
         BigDecimal subcontractAmount = logisticsOrder.getSubcontractAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getSubcontractAmount();
         if (subcontractAmount.compareTo(new BigDecimal(Global.AMOUNT)) == 0) {
             List<KwtLogisticsOrder> logisticsOrders = logisticsOrderDao.findLogisticsOrder(
-                    new HashMap(){{put("upperlOrderId", logisticsOrder.getId()); put("lOrderId", logisticsOrder.getId());}});
+                    new HashMap(){{put("upperlOrderId", logisticsOrder.getId()); put("ownOrderId", logisticsOrder.getId());}});
             for (KwtLogisticsOrder logisticsOrder1:logisticsOrders) {
                 if (logisticsOrder1.getStatus() == LogisticsOrderEnum.TO_BE_PLANNED.getCode()
                         || logisticsOrder1.getStatus() == LogisticsOrderEnum.PENDING_ORDER.getCode()
@@ -1200,15 +1205,98 @@ public class KwtWaybillOrderService {
             editSckwLogisticsOrder(lOrder, logisticsOrder);
         }
 
-        /**当前物流订单属于分包(存在上级物流订单)**/
-        //当前承运订单所属分包层级
-        //int level = checkLogisticsLevel(logisticsOrder);
+        /**2当前物流订单属于分包(存在上级物流订单)**/
+        //获取所有上级物流订单ID(当前物流订单ID除外)
         String pids = logisticsOrder.getPids();
         if (StringUtils.isNotBlank(pids)) {
-            String [] idArray = pids.split(",");
-            for (String id : idArray) {
-                KwtLogisticsOrder order = logisticsOrderDao.selectById(id);
+            List<Long> idArray = (List)Arrays.asList(pids);
+            for (Long id : idArray) {
+                //当前物流订单ID除外
+                if (id != lOrderId) {
+                    /**校验当前承运订单是否运输完成**/
+                    checkLogisticsByStatus(id);
+                }
+            }
+        }
+    }
+
+    /**
+     * @param lOrderId 承运订单ID
+     * @description 校验当前承运订单是否运输完成(修改状态+统计量)
+     * @author zk
+     * @date 2023/7/27
+     **/
+    public void checkLogisticsByStatusV1(Long lOrderId) {
+        /**
+         校验当前承运订单是否运输完成(虑该当前承运订单上下级物流订单)
+         1存在下级分包,下级物流订单和当前物流订单全部运输完成则修改当前物流订单状态为已完成(HAVE_FINISHED)、统计值
+         2当前物流订单属于分包:需要判断上级及同级分包全部运输完成修改上级物流订单状态为已完成(HAVE_FINISHED)、统计值-一直向上到一级物流订单
+         **/
+        //承运单信息
+        KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(lOrderId);
 
+        /**1存在下级分包**/
+        boolean subcontractBool = true;
+        BigDecimal subcontractAmount = logisticsOrder.getSubcontractAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getSubcontractAmount();
+        if (subcontractAmount.compareTo(new BigDecimal(Global.AMOUNT)) > 0) {
+            /**1-1校验下级分包是否全部运输完成**/
+            List<KwtLogisticsOrder> logisticsOrders = logisticsOrderDao.findLogisticsOrder(
+                    new HashMap(){{put("upperlOrderId", logisticsOrder.getId()); put("ownOrderId", logisticsOrder.getId());}});
+            for (KwtLogisticsOrder logisticsOrder1:logisticsOrders) {
+                if (!LogisticsOrderEnum.transportCompleted(logisticsOrder1.getStatus())) {
+                    //下级分包承运订单运输未完成
+                    subcontractBool = false;
+                }
+            }
+        }
+
+        /**校验当前承运订单是否运输完成**/
+        WaybillCountVo waybillCount = waybillOrderDao.findWaybillOrderCount( new HashMap(){{put("lOrderId", logisticsOrder.getId());
+            put("passStatus", 1); }});
+        //物流运单状态(不包含已完成、已对账、已结算)+ 物流订单上级委派量-下游分包总量 <= 自己承运总装货量 + 下级分包全部运输完成
+        if (!LogisticsOrderEnum.transportCompleted(logisticsOrder.getStatus())
+                && logisticsOrder.getAmount().subtract(subcontractAmount).compareTo(waybillCount.getLoadAmount()) <= 0
+                && subcontractBool) {
+            /**1-2下级分包承运订单运输完成**/
+            logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+            logisticsOrderDao.updateById(logisticsOrder);
+
+            /**1-3承运订单状态记录**/
+            KwtLogisticsOrderTrack orderTrack = new KwtLogisticsOrderTrack();
+            orderTrack.setLOrderId(logisticsOrder.getId());
+            orderTrack.setStatus(logisticsOrder.getStatus());
+            orderTrack.setRemark(LogisticsOrderEnum.getName(logisticsOrder.getStatus()));
+            logisticsOrderTrackDao.insert(orderTrack);
+        }
+
+        //车辆运单统计
+        /**1-4Mongodb数据更新**/
+        //车辆运单统计
+        waybillCount = waybillOrderDao.findWaybillOrderCount( new HashMap(){{put("lOrderId", logisticsOrder.getId());
+            put("unloadCountStatus", 1); put("upperlOrderId", logisticsOrder.getId()); }});
+        //2承运订单
+        SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
+        lOrder.setLoadTime(waybillCount.getLoadTime());
+        lOrder.setUnloadTime(waybillCount.getUnloadTime());
+        lOrder.setLoadTotalAmount(waybillCount.getLoadAmount());
+        lOrder.setUnloadTotalAmount(waybillCount.getUnloadAmount());
+        lOrder.setDeficitTotalAmount(waybillCount.getDeficitAmount());
+        BigDecimal deficitPrice = deficitPrice(waybillCount.getLoadAmount(), waybillCount.getDeficitAmount(),
+                logisticsOrder.getLoss(), logisticsOrder.getGoodsPrice());
+        lOrder.setDeficitPrice(deficitPrice);
+        editSckwLogisticsOrder(lOrder, logisticsOrder);
+
+        /**2当前物流订单属于分包(存在上级物流订单)**/
+        //获取所有上级物流订单ID(当前物流订单ID除外)
+        String pids = logisticsOrder.getPids();
+        if (StringUtils.isNotBlank(pids)) {
+            List<Long> idArray = (List)Arrays.asList(pids);
+            for (Long id : idArray) {
+                //当前物流订单ID除外
+                if (id != lOrderId) {
+                    /**校验当前承运订单是否运输完成**/
+                    checkLogisticsByStatusV1(id);
+                }
             }
         }
     }
@@ -1221,16 +1309,32 @@ public class KwtWaybillOrderService {
      **/
     public HttpResult editTicket(WaybillOrderTicketDto params) {
         /**校验**/
+        KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(params.getWOrderId());
+        if (waybillOrder == null) {
+            return HttpResult.error("车辆运单信息不存在!");
+        }
         KwtWaybillOrderTicket ticket = waybillOrderTicketDao.findWaybillOrderTicket(params.getWOrderId(), params.getType());
         if (ticket == null) {
             return HttpResult.error("车辆运单榜单信息不存在!");
         }
 
+        /**更新车辆运单信息**/
+        waybillOrder.setLoadAmount(params.getType() == 1 ? params.getAmount() : waybillOrder.getLoadAmount());
+        waybillOrder.setUnloadAmount(params.getType() == 2 ? params.getAmount() : waybillOrder.getUnloadAmount());
+        waybillOrder.setDeficitAmount(waybillOrder.getLoadAmount().subtract(waybillOrder.getUnloadAmount()));
+        waybillOrderDao.updateById(waybillOrder);
+
         /**更新榜单信息**/
         BeanUtils.copyProperties(params, ticket);
         waybillOrderTicketDao.updateById(ticket);
 
         /**更新承运订单装卸货量**/
+        //有更新装卸货量才会更新物流订单量
+        if (waybillOrder.getLoadAmount().compareTo(params.getAmount()) != 0
+                || waybillOrder.getUnloadAmount().compareTo(params.getAmount()) != 0) {
+            //校验当前承运订单是否运输完成(修改状态+统计量)
+            checkLogisticsByStatusV1(waybillOrder.getLOrderId());
+        }
 
         return HttpResult.ok("修改单证成功!");
     }
@@ -1272,6 +1376,9 @@ public class KwtWaybillOrderService {
         wOrder.set_id(waybillOrder.getId());
         editSckwWaybillOrder(wOrder, waybillOrder, 2);
 
+        /**4校验当前承运订单是否运输完成(修改状态+统计量)**/
+        checkLogisticsByStatusV1(waybillOrder.getLOrderId());
+
         /**4发送消息**/
 
         return HttpResult.ok("车辆运单审核完成!");

+ 13 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java

@@ -21,6 +21,7 @@ import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.utils.ValidUtil;
 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.order.api.dubbo.TradeOrderInfoService;
@@ -49,6 +50,7 @@ import org.springframework.util.ObjectUtils;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author lfdc
@@ -643,6 +645,17 @@ public class LogisticsConsignmentService {
 
     private List<OrderCarDTO> getLogisticsCarData(String id, Integer page, Integer pageSize) {
         List<OrderCarDTO> list = waybillOrderMapper.selectWaybillOrderCarList(id, page, pageSize);
+        List<String> stringList = list.stream().map(OrderCarDTO::getTruckNo).collect(Collectors.toList());
+        Map<String, RTruckVo> truck = remoteFleetService.findTruck(stringList);
+        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()))));
+        }
         return list;
     }
 

+ 3 - 4
sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml

@@ -375,8 +375,7 @@
         </where>
     </select>
 
-    <select id="findLogisticsOrder" resultType="com.sckw.transport.model.KwtLogisticsOrder"
-            parameterType="java.util.Map">
+    <select id="findLogisticsOrder" resultType="com.sckw.transport.model.KwtLogisticsOrder" parameterType="java.util.Map">
         select
         id, ent_id entId, t_order_id tOrderId, t_order_no tOrderNo, l_order_no lOrderNo, pid, pids,
         settlement_cycle settlementCycle, price, price_type priceType, billing_mode billingMode,
@@ -392,11 +391,11 @@
         </if>
         <if test="upperlOrderId != null and upperlOrderId != ''">
             and FIND_IN_SET(#{upperlOrderId, jdbcType=BIGINT}, pids)
-            and id != #{lOrderId, jdbcType=BIGINT}
+            and id != #{ownOrderId, jdbcType=BIGINT}
         </if>
         <if test="belowlOrderId != null and belowlOrderId != ''">
             and FIND_IN_SET(id, #{belowlOrderId, jdbcType=VARCHAR})
-            and id != #{lOrderId, jdbcType=BIGINT}
+            and id != #{ownOrderId, jdbcType=BIGINT}
         </if>
     </select>
 </mapper>

+ 54 - 1
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

@@ -38,7 +38,8 @@
                a.driver_id     as driverId,
                a.driver_name   as driverName,
                a.driver_phone  as driverPhone,
-               a.driver_idcard as driverIdcard,
+               a.driver_idcard as driverCard,
+               a.truck_no      as truckNo,
                a.l_order_id    as lOrderId,
                b.l_order_no    as lOrderNo,
                b.t_order_id    as tOrderId,
@@ -145,4 +146,56 @@
             </if>
         </where>
     </select>
+
+    <select id="findWaybillOrderCount" resultType="com.sckw.transport.model.vo.WaybillCountVo" parameterType="java.util.Map">
+        SELECT
+        IFNULL(SUM(wo.entrust_amount), 0.0) entrustAmount, IFNULL(SUM(wo.load_amount), 0.0) loadAmount,
+        IFNULL(SUM(wo.unload_amount), 0.0) unloadAmount, IFNULL(SUM(wo.deficit_amount), 0.0) deficitAmount,
+        MIN(wot1.time) loadTime, MAX(wot2.time) unloadTime
+        from kwt_waybill_order wo
+        left join kwt_waybill_order_ticket wot1 on wot1.w_order_id = wo.id and wot1.type = 1 and wot1.del_flag = 0
+        left join kwt_waybill_order_ticket wot2 on wot2.w_order_id = wo.id and wot2.type = 2 and wot2.del_flag = 0
+        left join kwt_logistics_order lo on lo.id = wo.l_order_id
+        where wo.del_flag = 0 and lo.del_flag = 0
+        <if test="lOrderId != null and lOrderId != ''">
+            and lo.id = #{lOrderId, jdbcType=BIGINT}
+        </if>
+        <if test="passStatus != null and passStatus != ''">
+            wo.status = 8
+        </if>
+        <if test="loadCountStatus != null and loadCountStatus != ''">
+            wo.status in (5, 6, 7, 8, 12)
+        </if>
+        <if test="unloadCountStatus != null and unloadCountStatus != ''">
+            wo.status in (7, 8, 12)
+        </if>
+        <if test="upperlOrderId != null and upperlOrderId != ''">
+            and FIND_IN_SET(#{upperlOrderId, jdbcType=BIGINT}, pids)
+        </if>
+        <if test="belowlOrderId != null and belowlOrderId != ''">
+            and FIND_IN_SET(id, #{belowlOrderId, jdbcType=VARCHAR})
+        </if>
+    </select>
+    <select id="selectWaybillOrderCarListGroupByTruckNo" resultType="com.sckw.transport.model.dto.OrderCarDTO">
+        SELECT
+        a.truck_no AS truckNo,
+        COUNT( a.truck_no ) AS count,
+        a.driver_id AS driverId,
+        a.driver_name AS driverName,
+        a.driver_phone AS driverPhone,
+        a.driver_idcard AS driverCard
+        FROM
+        `kwt_waybill_order` a
+        LEFT JOIN kwt_logistics_order b ON a.l_order_id = b.id
+        AND B.del_flag = 0
+        AND b.del_flag = 0
+        <where>
+            <if test="id != null and id != ''">
+                and a.l_order_id = #{id}
+            </if>
+        </where>
+        GROUP BY
+        a.truck_no
+        limit #{page},#{pageSize}
+    </select>
 </mapper>