Преглед изворни кода

Merge remote-tracking branch 'origin/dev_20260131' into dev_20260131_youshen430

# Conflicts:
#	sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/SalesWaybillOrderService.java
donglang пре 1 месец
родитељ
комит
0803dd585f
16 измењених фајлова са 234 додато и 50 уклоњено
  1. 7 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java
  2. 1 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckEntRepository.java
  3. 1 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfDriverService.java
  4. 72 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java
  5. 8 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java
  6. 5 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderListResVO.java
  7. 6 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  8. 3 3
      sckw-modules/sckw-order/src/main/java/com/sckw/order/util/TradeOrderDashboardUtils.java
  9. 3 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderQueryParam.java
  10. 4 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtGatekeeperWaybillOrderRepository.java
  11. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderSubtaskRepository.java
  12. 2 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtAcceptCarriageOrderService.java
  13. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  14. 15 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/GatekeeperOrderService.java
  15. 80 26
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/SalesWaybillOrderService.java
  16. 24 10
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

+ 7 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java

@@ -146,6 +146,13 @@ public interface TradeOrderInfoService {
      */
      */
     List<OrderUnitInfoDetailVO> queryOrderUnitInfByEntName(String entName);
     List<OrderUnitInfoDetailVO> queryOrderUnitInfByEntName(String entName);
 
 
+    /**
+     * 通过企业查询贸易订单id
+     *
+     * @return
+     */
+    Set<Long> queryOrderIdByEntId(Long entId, String unitType);
+
 
 
     /**
     /**
      * 查询近期的贸易订单,计算商品的近期销量
      * 查询近期的贸易订单,计算商品的近期销量

+ 1 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckEntRepository.java

@@ -27,7 +27,7 @@ public class KwfTruckEntRepository extends ServiceImpl<KwfTruckEntMapper, KwfTru
     public List<KwfTruckEnt> findTruckEntByEntIds(Set<Long> entId) {
     public List<KwfTruckEnt> findTruckEntByEntIds(Set<Long> entId) {
         return list(Wrappers.<KwfTruckEnt>lambdaQuery()
         return list(Wrappers.<KwfTruckEnt>lambdaQuery()
                 .eq(BaseModel::getDelFlag,0)
                 .eq(BaseModel::getDelFlag,0)
-                .eq(KwfTruckEnt::getEntId,entId)
+                .in(KwfTruckEnt::getEntId,entId)
                 .orderByDesc(BaseModel::getCreateTime));
                 .orderByDesc(BaseModel::getCreateTime));
     }
     }
 }
 }

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

@@ -399,7 +399,7 @@ public class KwfDriverService {
         
         
         log.info("调用truckService.saveTruck保存车辆档案,truckNo={}", request.getTruckNo());
         log.info("调用truckService.saveTruck保存车辆档案,truckNo={}", request.getTruckNo());
         try {
         try {
-            truckService.saveTruck(truckSaveParam);
+            truckService.saveTruck1(truckSaveParam);
             log.info("车辆档案保存成功,truckNo={}", request.getTruckNo());
             log.info("车辆档案保存成功,truckNo={}", request.getTruckNo());
         } catch (Exception e) {
         } catch (Exception e) {
             log.error("车辆档案保存异常,truckNo={}", request.getTruckNo(), e);
             log.error("车辆档案保存异常,truckNo={}", request.getTruckNo(), e);

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

@@ -1962,8 +1962,9 @@ public class KwfTruckService {
         Map<String, KwfTruck> truckMap = new HashMap<>();
         Map<String, KwfTruck> truckMap = new HashMap<>();
         if (!truckNoList.isEmpty()) {
         if (!truckNoList.isEmpty()) {
             List<KwfTruck> kwfTruckList = findTruckByEntIds(entId);
             List<KwfTruck> kwfTruckList = findTruckByEntIds(entId);
+            //过滤掉已经停用的车牌号
             List<KwfTruck> trucks = kwfTruckList.stream().filter(Objects::nonNull)
             List<KwfTruck> trucks = kwfTruckList.stream().filter(Objects::nonNull)
-                    .filter(truck -> truck.getTruckNo() != null && truckNoList.contains(truck.getTruckNo()))
+                    .filter(truck -> truck.getTruckNo() != null && truckNoList.contains(truck.getTruckNo()) && Objects.equals(truck.getStatus(), 0))
                     .collect(Collectors.toList());
                     .collect(Collectors.toList());
             truckMap = trucks.stream()
             truckMap = trucks.stream()
                 .collect(Collectors.toMap(KwfTruck::getTruckNo, Function.identity(), (k1, k2) -> k1));
                 .collect(Collectors.toMap(KwfTruck::getTruckNo, Function.identity(), (k1, k2) -> k1));
@@ -2362,7 +2363,77 @@ public class KwfTruckService {
         }
         }
 
 
     }
     }
+    /**
+     * 保存车辆
+     * @param param
+     * @return
+     */
+    public void saveTruck1(TruckSaveParam param) {
+        log.info("保存车辆,id:{}", JSON.toJSONString(param));
+        if (Objects.equals(param.getEnergyType(), TruckEnergyTypeEnum.TRADITIONAL.getCode())) {
+            if (param.getEev() == null) {
+                throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "传统能源车辆的排放标准不能为空!");
+            }
+        }
 
 
+        // 新增
+        if (param.getId() == null) {
+            KwfTruck kwfTruck = kwfTruckRepository.getOne(Wrappers.<KwfTruck>lambdaQuery()
+                    .eq(KwfTruck::getTruckNo, param.getTruckNo()));
+            KwfTruck truck = new KwfTruck();
+            truck.setTruckNo(param.getTruckNo());
+            truck.setType(param.getType());
+            truck.setEnergyType(param.getEnergyType());
+            truck.setEev(param.getEev());
+            truck.setCarAxis(param.getCarAxis());
+            truck.setBrand(param.getBrand());
+            truck.setVin(param.getVin());
+            truck.setEngineNo(param.getEngineNo());
+            truck.setAnnualInspectionTime(param.getAnnualInspectionTime());
+            truck.setTransportValidityTime(param.getTransportValidityTime());
+            truck.setPositionDevice(param.getPositionDevice());
+            truck.setTruckLicense(param.getTruckLicense());
+            truck.setTransportLicense(param.getTransportLicense());
+            truck.setEnvironmentalList(param.getEnvironmentalList());
+            truck.setStatus(TruckStatusEnum.NORMAL.getCode());
+            truck.setDelFlag(0);
+            truck.setBlacklist(0);
+            truck.setCreateTime(new Date());
+            kwfTruckRepository.save(truck);
+
+            // 车队班组绑定
+            truckFleetEdit(truck.getId(), param.getFleetId());
+
+            // 车辆信息与企业关联信息
+            truckEntEdit(truck);
+        } else {
+            // 更新车辆
+            KwfTruck truck = kwfTruckRepository.getById(param.getId());
+            if (truck == null) {
+                throw new BusinessPlatfromException(ErrorCodeEnum.DRIVER_NOT_FOUND, "车辆不已存在");
+            }
+            truck.setTruckNo(param.getTruckNo());
+            truck.setType(param.getType());
+            truck.setEnergyType(param.getEnergyType());
+            truck.setEev(param.getEev());
+            truck.setCarAxis(param.getCarAxis());
+            truck.setBrand(param.getBrand());
+            truck.setVin(param.getVin());
+            truck.setEngineNo(param.getEngineNo());
+            truck.setAnnualInspectionTime(param.getAnnualInspectionTime());
+            truck.setTransportValidityTime(param.getTransportValidityTime());
+            truck.setPositionDevice(param.getPositionDevice());
+            truck.setTruckLicense(param.getTruckLicense());
+            truck.setTransportLicense(param.getTransportLicense());
+            truck.setEnvironmentalList(param.getEnvironmentalList());
+            truck.setUpdateTime(new Date());
+            kwfTruckRepository.updateById(truck);
+
+            // 车队班组绑定
+            truckFleetEdit(truck.getId(), param.getFleetId());
+        }
+
+    }
     /**
     /**
      * 车辆停用/启用
      * 车辆停用/启用
      * @param param
      * @param param

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

@@ -991,5 +991,13 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
 
 
     }
     }
 
 
+    @Override
+    public Set<Long> queryOrderIdByEntId(Long entId, String unitType) {
+        return kwoTradeOrderUnitRepository.queryByEntIdAndUnitType(entId, unitType)
+                .stream()
+                .map(KwoTradeOrderUnit::getTOrderId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+    }
 
 
 }
 }

+ 5 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderListResVO.java

@@ -232,4 +232,9 @@ public class OrderListResVO {
      */
      */
     @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
     private Date createTime;
+
+    /**
+     * 已履约量
+     */
+    private BigDecimal dealAmount;
 }
 }

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

@@ -1753,6 +1753,12 @@ public class KwoTradeOrderService {
             vo.setActualPrice(actualAmount.multiply(unitPrice).setScale(2, RoundingMode.HALF_UP)).setUnitPrice(setScale(e.getUnitPrice())).setPrice(setScale(e.getPrice())).setUnit(e.getUnit()).setUnitLabel(unitType == null ? e.getUnit() : (unitType.get(e.getUnit()) == null ? e.getUnit() : unitType.get(e.getUnit()).getLabel())).setAmount(setScale(vo.getAmount())).setEntrustAmount(setScale(e.getEntrustAmount())).setActualAmount(setScale(e.getActualAmount())).setCreateByName(Objects.isNull(userCache) ? null : userCache.getName());
             vo.setActualPrice(actualAmount.multiply(unitPrice).setScale(2, RoundingMode.HALF_UP)).setUnitPrice(setScale(e.getUnitPrice())).setPrice(setScale(e.getPrice())).setUnit(e.getUnit()).setUnitLabel(unitType == null ? e.getUnit() : (unitType.get(e.getUnit()) == null ? e.getUnit() : unitType.get(e.getUnit()).getLabel())).setAmount(setScale(vo.getAmount())).setEntrustAmount(setScale(e.getEntrustAmount())).setActualAmount(setScale(e.getActualAmount())).setCreateByName(Objects.isNull(userCache) ? null : userCache.getName());
             vo.setDeliveryTypeLabel(DictEnum.getLabel(DictTypeEnum.LOAD_UNLOAD_WAY.getType(), String.valueOf(e.getChargeType())));
             vo.setDeliveryTypeLabel(DictEnum.getLabel(DictTypeEnum.LOAD_UNLOAD_WAY.getType(), String.valueOf(e.getChargeType())));
             vo.setAddVehicles(e.getAddVehicles());
             vo.setAddVehicles(e.getAddVehicles());
+            if (Objects.equals(e.getChargeType(), 1)) { //按装货量
+                vo.setDealAmount(e.getLoadAmount());
+            } else {
+                vo.setDealAmount(e.getUnloadAmount());
+            }
+
             loadAddress.ifPresent(d -> {
             loadAddress.ifPresent(d -> {
                 vo.setLoadName(d.getName());
                 vo.setLoadName(d.getName());
                 vo.setLoadAddress(d.getCityName() + " " + d.getDetailAddress());
                 vo.setLoadAddress(d.getCityName() + " " + d.getDetailAddress());

+ 3 - 3
sckw-modules/sckw-order/src/main/java/com/sckw/order/util/TradeOrderDashboardUtils.java

@@ -25,11 +25,11 @@ public final class TradeOrderDashboardUtils {
      */
      */
     public static BigDecimal completionRateOf(@Nullable KwoTradeOrder order) {
     public static BigDecimal completionRateOf(@Nullable KwoTradeOrder order) {
         if (order == null) {
         if (order == null) {
-            return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
+            return BigDecimal.ZERO.setScale(2, RoundingMode.DOWN);
         }
         }
         BigDecimal total = order.getAmount();
         BigDecimal total = order.getAmount();
         if (total == null || total.compareTo(BigDecimal.ZERO) <= 0) {
         if (total == null || total.compareTo(BigDecimal.ZERO) <= 0) {
-            return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
+            return BigDecimal.ZERO.setScale(2, RoundingMode.DOWN);
         }
         }
         Integer chargeType = order.getChargeType();
         Integer chargeType = order.getChargeType();
         BigDecimal done;
         BigDecimal done;
@@ -46,6 +46,6 @@ public final class TradeOrderDashboardUtils {
                     .or(() -> Optional.ofNullable(order.getUnloadAmount()))
                     .or(() -> Optional.ofNullable(order.getUnloadAmount()))
                     .orElse(BigDecimal.ZERO);
                     .orElse(BigDecimal.ZERO);
         }
         }
-        return done.multiply(HUNDRED).divide(total, 2, RoundingMode.HALF_UP);
+        return done.multiply(HUNDRED).divide(total, 2, RoundingMode.DOWN);
     }
     }
 }
 }

+ 3 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderQueryParam.java

@@ -2,6 +2,7 @@ package com.sckw.transport.model.param;
 
 
 import com.sckw.core.web.request.PageReq;
 import com.sckw.core.web.request.PageReq;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -31,12 +32,14 @@ public class WaybillOrderQueryParam extends PageReq implements Serializable {
      * 车牌号
      * 车牌号
      */
      */
     @Schema(description = "车牌号")
     @Schema(description = "车牌号")
+    @NotBlank(message = "车牌号不能为空!")
     private String truckNo;
     private String truckNo;
 
 
     /**
     /**
      * 司机id
      * 司机id
      */
      */
     @Schema(description = "司机id")
     @Schema(description = "司机id")
+    @NotNull(message = "司机id不能为空!")
     private Long driverId;
     private Long driverId;
 
 
     /**
     /**

+ 4 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtGatekeeperWaybillOrderRepository.java

@@ -1,5 +1,6 @@
 package com.sckw.transport.repository;
 package com.sckw.transport.repository;
 
 
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sckw.transport.dao.KwtGatekeeperWaybillOrderMapper;
 import com.sckw.transport.dao.KwtGatekeeperWaybillOrderMapper;
@@ -7,6 +8,7 @@ import com.sckw.transport.model.KwtGatekeeperWaybillOrder;
 import org.springframework.stereotype.Repository;
 import org.springframework.stereotype.Repository;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Set;
 
 
 /**
 /**
  * @Author: 门卫车辆订单
  * @Author: 门卫车辆订单
@@ -42,10 +44,10 @@ public class KwtGatekeeperWaybillOrderRepository extends ServiceImpl<KwtGatekeep
                         .last("limit 1"));
                         .last("limit 1"));
     }
     }
 
 
-    public List<KwtGatekeeperWaybillOrder> queryGatekeeperWaybillOrderByEntId(Long entId, List<Integer> status) {
+    public List<KwtGatekeeperWaybillOrder> queryGatekeeperWaybillOrderByEntId(Set<Long> waybillOrderIds, List<Integer> status) {
         return list(
         return list(
                 Wrappers.<KwtGatekeeperWaybillOrder>lambdaQuery()
                 Wrappers.<KwtGatekeeperWaybillOrder>lambdaQuery()
-                        .eq(KwtGatekeeperWaybillOrder::getEntId, entId)
+                        .in(CollectionUtils.isNotEmpty(waybillOrderIds), KwtGatekeeperWaybillOrder::getWOrderId, waybillOrderIds)
                         .in(KwtGatekeeperWaybillOrder::getStatus, status)
                         .in(KwtGatekeeperWaybillOrder::getStatus, status)
                         .orderByDesc(KwtGatekeeperWaybillOrder::getId));
                         .orderByDesc(KwtGatekeeperWaybillOrder::getId));
     }
     }

+ 2 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderSubtaskRepository.java

@@ -97,10 +97,10 @@ public class KwtWaybillOrderSubtaskRepository extends ServiceImpl<KwtWaybillOrde
         );
         );
     }
     }
 
 
-    public List<KwtWaybillOrderSubtask> queryWaybillOrderSubByEntIdAndStatus(Long entId, Integer status, LocalDateTime startTime, LocalDateTime endTime) {
+    public List<KwtWaybillOrderSubtask> queryWaybillOrderSubByEntIdAndStatus(Set<Long> logOrderIds, Integer status, LocalDateTime startTime, LocalDateTime endTime) {
         return list(Wrappers.<KwtWaybillOrderSubtask>lambdaQuery()
         return list(Wrappers.<KwtWaybillOrderSubtask>lambdaQuery()
                 .eq(KwtWaybillOrderSubtask::getDelFlag,0)
                 .eq(KwtWaybillOrderSubtask::getDelFlag,0)
-                .eq(Objects.nonNull(entId),KwtWaybillOrderSubtask::getEntId,entId)
+                .in(CollectionUtils.isNotEmpty(logOrderIds),KwtWaybillOrderSubtask::getLOrderId,logOrderIds)
                 .eq(Objects.nonNull(status),KwtWaybillOrderSubtask::getStatus,status)
                 .eq(Objects.nonNull(status),KwtWaybillOrderSubtask::getStatus,status)
                 .ge(Objects.nonNull(startTime), KwtWaybillOrderSubtask::getUpdateTime, startTime)
                 .ge(Objects.nonNull(startTime), KwtWaybillOrderSubtask::getUpdateTime, startTime)
                 .le(Objects.nonNull(endTime), KwtWaybillOrderSubtask::getUpdateTime, endTime)
                 .le(Objects.nonNull(endTime), KwtWaybillOrderSubtask::getUpdateTime, endTime)

+ 2 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtAcceptCarriageOrderService.java

@@ -86,6 +86,7 @@ import java.text.DecimalFormat;
 import java.text.ParseException;
 import java.text.ParseException;
 import java.time.LocalDate;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.ZoneId;
 import java.time.ZoneId;
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -3686,7 +3687,7 @@ public class KwtAcceptCarriageOrderService {
         kwtLogisticsOrder.setStartTime(Objects.isNull(orderDTO.getStartTime()) ?
         kwtLogisticsOrder.setStartTime(Objects.isNull(orderDTO.getStartTime()) ?
                 null : DateUtil.localDateToLocalDateTimeStart(orderDTO.getStartTime()));
                 null : DateUtil.localDateToLocalDateTimeStart(orderDTO.getStartTime()));
         kwtLogisticsOrder.setEndTime(Objects.isNull(orderDTO.getEndTime()) ?
         kwtLogisticsOrder.setEndTime(Objects.isNull(orderDTO.getEndTime()) ?
-                null : DateUtil.localDateToLocalDateTimeStart(orderDTO.getEndTime()));
+                null : orderDTO.getEndTime().atTime(LocalTime.MAX));
         BigDecimal decimal = BigDecimal.ZERO ;
         BigDecimal decimal = BigDecimal.ZERO ;
         kwtLogisticsOrder.setSubcontractAmount(decimal);
         kwtLogisticsOrder.setSubcontractAmount(decimal);
         kwtLogisticsOrder.setEntrustAmount(decimal);
         kwtLogisticsOrder.setEntrustAmount(decimal);

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -3768,7 +3768,7 @@ public class KwtLogisticsConsignmentService {
             List<Long> truckIdList = logisticsOrderCirculates.stream()
             List<Long> truckIdList = logisticsOrderCirculates.stream()
                     .map(KwtLogisticsOrderCirculate::getTruckId)
                     .map(KwtLogisticsOrderCirculate::getTruckId)
                     .collect(Collectors.toList());
                     .collect(Collectors.toList());
-            List<KwtLogisticsOrderCirculate> saveOrderCirculates = carInfos.stream().filter(t -> truckIdList.contains(t.getTruckId()))
+            List<KwtLogisticsOrderCirculate> saveOrderCirculates = carInfos.stream().filter(t -> !truckIdList.contains(Long.valueOf(t.getTruckId())))
                     .map(t -> getKwtLogisticsOrderCirculate(req, t, logOrderId, logisticsOrder, kwtLogisticsOrderUnit))
                     .map(t -> getKwtLogisticsOrderCirculate(req, t, logOrderId, logisticsOrder, kwtLogisticsOrderUnit))
                     .collect(Collectors.toList());
                     .collect(Collectors.toList());
             insertOrderCirculates.addAll(saveOrderCirculates);
             insertOrderCirculates.addAll(saveOrderCirculates);

+ 15 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/GatekeeperOrderService.java

@@ -402,6 +402,9 @@ public class GatekeeperOrderService {
      * @param gatekeeperOrderPageResult
      * @param gatekeeperOrderPageResult
      */
      */
     private void sort(GatekeeperOrderQueryParam param, List<GatekeeperOrderResp> gatekeeperOrderPageResult) {
     private void sort(GatekeeperOrderQueryParam param, List<GatekeeperOrderResp> gatekeeperOrderPageResult) {
+        if (CollectionUtils.isEmpty(gatekeeperOrderPageResult)) {
+            return;
+        }
         // 根据状态进行排序
         // 根据状态进行排序
         switch (param.getStatus()) {
         switch (param.getStatus()) {
             case 1:
             case 1:
@@ -410,8 +413,18 @@ public class GatekeeperOrderService {
                 break;
                 break;
             case 2:
             case 2:
                 // 待离场:先按照待离场展示,后按照空载待离场和已放行未离场展示,在按照状态变更时间升序
                 // 待离场:先按照待离场展示,后按照空载待离场和已放行未离场展示,在按照状态变更时间升序
-                gatekeeperOrderPageResult.sort(Comparator.comparing((GatekeeperOrderResp order) -> order.getStatus() != 10)
-                        .thenComparing(GatekeeperOrderResp::getUpdateTime));
+                gatekeeperOrderPageResult.sort(
+                        Comparator.comparing((GatekeeperOrderResp order) -> {
+                                    // 状态为空时,也排到后面
+                                    return order.getStatus() == null || order.getStatus() != 10;
+                                })
+                                // 时间为空的排最后
+                                .thenComparing(
+                                        GatekeeperOrderResp::getUpdateTime,
+                                        Comparator.nullsLast(Comparator.naturalOrder())
+                                )
+                );
+                break;
             case 3:
             case 3:
                 // 场内车辆: 车辆进场时间升序
                 // 场内车辆: 车辆进场时间升序
                 gatekeeperOrderPageResult.sort(Comparator.comparing(GatekeeperOrderResp::getIntoTime));
                 gatekeeperOrderPageResult.sort(Comparator.comparing(GatekeeperOrderResp::getIntoTime));

+ 80 - 26
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/SalesWaybillOrderService.java

@@ -5,17 +5,21 @@ import com.alibaba.fastjson.JSON;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.CarWaybillV1Enum;
 import com.sckw.core.model.enums.CarWaybillV1Enum;
 import com.sckw.core.model.enums.GatekeeperStatusEnum;
 import com.sckw.core.model.enums.GatekeeperStatusEnum;
+import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.transport.model.KwtGatekeeperWaybillOrder;
 import com.sckw.transport.model.KwtGatekeeperWaybillOrder;
+import com.sckw.transport.model.KwtLogisticsOrder;
 import com.sckw.transport.model.KwtWaybillOrderSubtask;
 import com.sckw.transport.model.KwtWaybillOrderSubtask;
 import com.sckw.transport.model.param.SalesWaybillOrderQueryParam;
 import com.sckw.transport.model.param.SalesWaybillOrderQueryParam;
 import com.sckw.transport.model.param.SalesWaybillOrderResp;
 import com.sckw.transport.model.param.SalesWaybillOrderResp;
 import com.sckw.transport.model.param.WaybillOrderReq;
 import com.sckw.transport.model.param.WaybillOrderReq;
 import com.sckw.transport.model.vo.StatisticsWaybillResp;
 import com.sckw.transport.model.vo.StatisticsWaybillResp;
 import com.sckw.transport.repository.KwtGatekeeperWaybillOrderRepository;
 import com.sckw.transport.repository.KwtGatekeeperWaybillOrderRepository;
+import com.sckw.transport.repository.KwtLogisticsOrderRepository;
 import com.sckw.transport.repository.KwtWaybillOrderSubtaskRepository;
 import com.sckw.transport.repository.KwtWaybillOrderSubtaskRepository;
 import com.sckw.transport.service.KwtWaybillOrderV1Service;
 import com.sckw.transport.service.KwtWaybillOrderV1Service;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.CollectionUtils;
 
 
@@ -23,10 +27,7 @@ import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -42,6 +43,10 @@ public class SalesWaybillOrderService {
     private final KwtWaybillOrderSubtaskRepository waybillOrderSubtaskRepository;
     private final KwtWaybillOrderSubtaskRepository waybillOrderSubtaskRepository;
     private final KwtWaybillOrderV1Service waybillOrderV1Service;
     private final KwtWaybillOrderV1Service waybillOrderV1Service;
     private final KwtGatekeeperWaybillOrderRepository gatekeeperWaybillOrderRepository;
     private final KwtGatekeeperWaybillOrderRepository gatekeeperWaybillOrderRepository;
+    private final KwtLogisticsOrderRepository logisticsOrderRepository;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 80000)
+    TradeOrderInfoService tradeOrderInfoService;
 
 
     /**
     /**
      * 查询销售数据
      * 查询销售数据
@@ -49,23 +54,66 @@ public class SalesWaybillOrderService {
      * @return
      * @return
      */
      */
     public SalesWaybillOrderResp querySalesStatistics(SalesWaybillOrderQueryParam param) {
     public SalesWaybillOrderResp querySalesStatistics(SalesWaybillOrderQueryParam param) {
-        log.info("查询销售数据:{}", JSON.toJSONString(param));
+        log.info("查询销售数据:{}", param);
         SalesWaybillOrderResp salesResp = new SalesWaybillOrderResp();
         SalesWaybillOrderResp salesResp = new SalesWaybillOrderResp();
+        //查询销售企业的贸易订单id
+        Set<Long> orderIds = tradeOrderInfoService.queryOrderIdByEntId(param.getEntId(), "2");
+        if (CollectionUtils.isEmpty(orderIds)) {
+            return buildSalesWaybillOrderResp();
+        }
+        // 查询销售企业的物流订单id
+        List<KwtLogisticsOrder> logisticsOrders = logisticsOrderRepository.queryByTradeOrderIds(orderIds);
+        if (CollectionUtils.isEmpty(logisticsOrders)) {
+            return buildSalesWaybillOrderResp();
+        }
+
+        Set<Long> logOrderIds = logisticsOrders.stream()
+                .map(KwtLogisticsOrder::getId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+
         // 1. 计算执行中订单(物流订单)
         // 1. 计算执行中订单(物流订单)
         calOngoingLogOrderCount(param, salesResp);
         calOngoingLogOrderCount(param, salesResp);
 
 
         // 2.计算今日车次
         // 2.计算今日车次
-        calTodayTruckCount(param, salesResp);
+        calTodayTruckCount(logOrderIds, salesResp);
 
 
         // 3.计算场内车辆
         // 3.计算场内车辆
-        calInsideVehicleCount(param, salesResp);
-
-        log.info("查询销售数据成功,结果:{}", JSON.toJSONString(salesResp));
+        calInsideVehicleCount(logOrderIds, salesResp);
 
 
+        log.info("查询销售数据成功,结果:{}", salesResp);
         return salesResp;
         return salesResp;
 
 
     }
     }
 
 
+    /**
+     * 构建默认返回数据
+     * @return
+     */
+    private SalesWaybillOrderResp buildSalesWaybillOrderResp() {
+        SalesWaybillOrderResp resp = new SalesWaybillOrderResp();
+        resp.setOngoingLogOrderCount(0);
+        resp.setTodayTruckCount(0);
+        resp.setInsideVehicleCount(0);
+        resp.setTodayShipmentWeightCount(BigDecimal.ZERO);
+        resp.setMonthShipmentWeightCount(BigDecimal.ZERO);
+
+        List<SalesWaybillOrderResp.RecentSevenDayShipmentVO> resultVOs = new ArrayList<>();
+        for (int i = 6; i >= 0; i--) {
+            LocalDate date = LocalDate.now().minusDays(i);
+            String dateStr = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+
+            SalesWaybillOrderResp.RecentSevenDayShipmentVO vo = new SalesWaybillOrderResp.RecentSevenDayShipmentVO();
+            vo.setDate(dateStr);
+            vo.setShipmentWeight(BigDecimal.ZERO);
+            resultVOs.add(vo);
+        }
+
+        resp.setRecentSevenDayShipmentCountVOs(resultVOs);
+
+        return resp;
+    }
+
     /**
     /**
      *  计算执行中订单
      *  计算执行中订单
      * @param param
      * @param param
@@ -95,30 +143,30 @@ public class SalesWaybillOrderService {
 
 
     /**
     /**
      *  计算今日车次
      *  计算今日车次
-     * @param param
+     * @param logOrderIds
      * @param salesResp
      * @param salesResp
      */
      */
-    private void calTodayTruckCount(SalesWaybillOrderQueryParam param, SalesWaybillOrderResp salesResp) {
+    private void calTodayTruckCount(Set<Long> logOrderIds, SalesWaybillOrderResp salesResp) {
         //今日车次/出货量
         //今日车次/出货量
-        todayTruckCount(param, salesResp);
+        todayTruckCount(logOrderIds, salesResp);
         //本月出货量
         //本月出货量
-        monthShipmentWeightCount(param, salesResp);
+        monthShipmentWeightCount(logOrderIds, salesResp);
         //近7天出货量
         //近7天出货量
-        recentSevenDayShipmentCount(param, salesResp);
+        recentSevenDayShipmentCount(logOrderIds, salesResp);
     }
     }
 
 
     /**
     /**
      * 今日车次/出货量
      * 今日车次/出货量
-     * @param param
+     * @param logOrderIds
      * @param salesResp
      * @param salesResp
      */
      */
-    private void todayTruckCount(SalesWaybillOrderQueryParam param, SalesWaybillOrderResp salesResp) {
+    private void todayTruckCount(Set<Long> logOrderIds, SalesWaybillOrderResp salesResp) {
         // 今天 00:00:00
         // 今天 00:00:00
         LocalDateTime todayStart = LocalDate.now().atStartOfDay();
         LocalDateTime todayStart = LocalDate.now().atStartOfDay();
         // 今天 23:59:59
         // 今天 23:59:59
         LocalDateTime todayEnd = LocalDate.now().atTime(23, 59, 59);
         LocalDateTime todayEnd = LocalDate.now().atTime(23, 59, 59);
         List<KwtWaybillOrderSubtask> todayWaybillOrderSub = waybillOrderSubtaskRepository
         List<KwtWaybillOrderSubtask> todayWaybillOrderSub = waybillOrderSubtaskRepository
-                .queryWaybillOrderSubByEntIdAndStatus(param.getEntId(), CarWaybillV1Enum.COMPLETED.getCode(), todayStart, todayEnd);
+                .queryWaybillOrderSubByEntIdAndStatus(logOrderIds, CarWaybillV1Enum.COMPLETED.getCode(), todayStart, todayEnd);
         if (CollectionUtils.isEmpty(todayWaybillOrderSub)) {
         if (CollectionUtils.isEmpty(todayWaybillOrderSub)) {
             salesResp.setTodayTruckCount(Global.NUMERICAL_ZERO);
             salesResp.setTodayTruckCount(Global.NUMERICAL_ZERO);
             salesResp.setTodayShipmentWeightCount(BigDecimal.ZERO);
             salesResp.setTodayShipmentWeightCount(BigDecimal.ZERO);
@@ -135,16 +183,16 @@ public class SalesWaybillOrderService {
 
 
     /**
     /**
      * 本月出货量
      * 本月出货量
-     * @param param
+     * @param logOrderIds
      * @param salesResp
      * @param salesResp
      */
      */
-    private void monthShipmentWeightCount(SalesWaybillOrderQueryParam param, SalesWaybillOrderResp salesResp) {
+    private void monthShipmentWeightCount(Set<Long> logOrderIds, SalesWaybillOrderResp salesResp) {
         // 本月第一天 00:00:00
         // 本月第一天 00:00:00
         LocalDateTime monthStart = LocalDate.now().withDayOfMonth(1).atStartOfDay();
         LocalDateTime monthStart = LocalDate.now().withDayOfMonth(1).atStartOfDay();
         // 本月最后一天 23:59:59
         // 本月最后一天 23:59:59
         LocalDateTime monthEnd = LocalDate.now().withDayOfMonth(LocalDate.now().lengthOfMonth()).atTime(23, 59, 59);
         LocalDateTime monthEnd = LocalDate.now().withDayOfMonth(LocalDate.now().lengthOfMonth()).atTime(23, 59, 59);
         List<KwtWaybillOrderSubtask> monthWaybillOrderSub = waybillOrderSubtaskRepository
         List<KwtWaybillOrderSubtask> monthWaybillOrderSub = waybillOrderSubtaskRepository
-                .queryWaybillOrderSubByEntIdAndStatus(param.getEntId(), CarWaybillV1Enum.COMPLETED.getCode(), monthStart, monthEnd);
+                .queryWaybillOrderSubByEntIdAndStatus(logOrderIds, CarWaybillV1Enum.COMPLETED.getCode(), monthStart, monthEnd);
         if (CollectionUtils.isEmpty(monthWaybillOrderSub)) {
         if (CollectionUtils.isEmpty(monthWaybillOrderSub)) {
             salesResp.setMonthShipmentWeightCount(BigDecimal.ZERO);
             salesResp.setMonthShipmentWeightCount(BigDecimal.ZERO);
         }
         }
@@ -158,10 +206,10 @@ public class SalesWaybillOrderService {
 
 
     /**
     /**
      * 近7天出货量
      * 近7天出货量
-     * @param param
+     * @param logOrderIds
      * @param salesResp
      * @param salesResp
      */
      */
-    private void recentSevenDayShipmentCount(SalesWaybillOrderQueryParam param, SalesWaybillOrderResp salesResp) {
+    private void recentSevenDayShipmentCount(Set<Long> logOrderIds, SalesWaybillOrderResp salesResp) {
         // 7天前 00:00:00
         // 7天前 00:00:00
         LocalDate today = LocalDate.now();
         LocalDate today = LocalDate.now();
         LocalDateTime sevenDaysStartTime = today.minusDays(6).atStartOfDay();
         LocalDateTime sevenDaysStartTime = today.minusDays(6).atStartOfDay();
@@ -170,7 +218,7 @@ public class SalesWaybillOrderService {
 
 
         // 查询数据库,获取近7天的所有已完成子运单数据
         // 查询数据库,获取近7天的所有已完成子运单数据
         List<KwtWaybillOrderSubtask> sevenDayWaybillOrderSubtask = waybillOrderSubtaskRepository
         List<KwtWaybillOrderSubtask> sevenDayWaybillOrderSubtask = waybillOrderSubtaskRepository
-                .queryWaybillOrderSubByEntIdAndStatus(param.getEntId(), CarWaybillV1Enum.COMPLETED.getCode(), sevenDaysStartTime, sevenDaysEndTime);
+                .queryWaybillOrderSubByEntIdAndStatus(logOrderIds, CarWaybillV1Enum.COMPLETED.getCode(), sevenDaysStartTime, sevenDaysEndTime);
 
 
         // 分组统计,按日期聚合求和
         // 分组统计,按日期聚合求和
         Map<String, BigDecimal> dailyWeightMap = sevenDayWaybillOrderSubtask.stream()
         Map<String, BigDecimal> dailyWeightMap = sevenDayWaybillOrderSubtask.stream()
@@ -199,12 +247,18 @@ public class SalesWaybillOrderService {
 
 
     /**
     /**
      * 计算场内车辆
      * 计算场内车辆
-     * @param param
+     * @param logOrderIds
      * @param salesResp
      * @param salesResp
      */
      */
-    private void calInsideVehicleCount(SalesWaybillOrderQueryParam param, SalesWaybillOrderResp salesResp) {
+    private void calInsideVehicleCount(Set<Long> logOrderIds, SalesWaybillOrderResp salesResp) {
+        // 查询运单
+        List<KwtWaybillOrderSubtask> waybillOrderSubtasks = waybillOrderSubtaskRepository.queryByLogIds(new ArrayList<>(logOrderIds));
+        Set<Long> waybillOrderIds = Optional.ofNullable(waybillOrderSubtasks).orElse(Collections.emptyList())
+                .stream().map(KwtWaybillOrderSubtask::getWOrderId)
+                .collect(Collectors.toSet());
+        // 查询门卫
         List<KwtGatekeeperWaybillOrder> kwtGatekeeperWaybillOrders = gatekeeperWaybillOrderRepository
         List<KwtGatekeeperWaybillOrder> kwtGatekeeperWaybillOrders = gatekeeperWaybillOrderRepository
-                .queryGatekeeperWaybillOrderByEntId(param.getEntId(),
+                .queryGatekeeperWaybillOrderByEntId(waybillOrderIds,
                         List.of(GatekeeperStatusEnum.IN_YARD.getCode(),
                         List.of(GatekeeperStatusEnum.IN_YARD.getCode(),
                                 GatekeeperStatusEnum.PENDING_RELEASE.getCode(),
                                 GatekeeperStatusEnum.PENDING_RELEASE.getCode(),
                                 GatekeeperStatusEnum.READY_RELEASE.getCode()));
                                 GatekeeperStatusEnum.READY_RELEASE.getCode()));

+ 24 - 10
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

@@ -998,8 +998,8 @@ public class WaybillOrderService {
         }
         }
 
 
         //查询运单关联数据
         //查询运单关联数据
-        List<WaybillOrderStatusResp> waybillOrdertDatas = getWaybillOrderRelevantData(param, records);
-        waybillResp.setOrderStatusStatistics(calculateStatusStatistics(waybillOrdertDatas));
+//        List<WaybillOrderStatusResp> waybillOrdertDatas = getWaybillOrderRelevantData(param, records);
+        waybillResp.setOrderStatusStatistics(calculateStatusStatistics(param, records));
         return waybillResp;
         return waybillResp;
     }
     }
 
 
@@ -1033,10 +1033,10 @@ public class WaybillOrderService {
 
 
     /**
     /**
      * 计算运单状态统计
      * 计算运单状态统计
-     * @param waybillOrdertDatas
+     * @param records
      * @return
      * @return
      */
      */
-    private static List<StatisticsWaybillResp.OrderBillStatusStatistics> calculateStatusStatistics(List<WaybillOrderStatusResp> waybillOrdertDatas) {
+    private static List<StatisticsWaybillResp.OrderBillStatusStatistics> calculateStatusStatistics(WaybillOrderQueryParam param, List<KwtWaybillOrder> records) {
         // 定义状态码聚合规则
         // 定义状态码聚合规则
         Map<List<String>, String[]> aggregateRules = Map.of(
         Map<List<String>, String[]> aggregateRules = Map.of(
                 Arrays.asList("1", "5", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21"), new String[]{"1", "进行中"},
                 Arrays.asList("1", "5", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21"), new String[]{"1", "进行中"},
@@ -1045,7 +1045,7 @@ public class WaybillOrderService {
         );
         );
 
 
         // 按原始状态统计数量
         // 按原始状态统计数量
-        Map<String, Long> statusCountMap = waybillOrdertDatas.stream()
+        Map<String, Long> statusCountMap = records.stream()
                 .collect(Collectors.groupingBy(va ->String.valueOf(va.getStatus()), Collectors.counting()));
                 .collect(Collectors.groupingBy(va ->String.valueOf(va.getStatus()), Collectors.counting()));
 
 
         // 进行状态聚合
         // 进行状态聚合
@@ -1053,15 +1053,29 @@ public class WaybillOrderService {
                 .map(rule -> {
                 .map(rule -> {
                     List<String> originalStatuses = rule.getKey();
                     List<String> originalStatuses = rule.getKey();
                     String[] aggregateInfo = rule.getValue();
                     String[] aggregateInfo = rule.getValue();
+                    String aggStatus = aggregateInfo[0];  // 1/2/3
+                    String aggDesc = aggregateInfo[1];
 
 
                     // 汇总对应状态的数量
                     // 汇总对应状态的数量
-                    long totalNum = originalStatuses.stream()
-                            .mapToLong(status -> statusCountMap.getOrDefault(status, 0L))
-                            .sum();
+                    long totalNum;
+                    // ===================== 你要的过滤逻辑 =====================
+                    if ("1".equals(aggStatus)) {
+                        // 状态1:按truckNo过滤
+                        totalNum = records.stream()
+                                .filter(va -> originalStatuses.contains(String.valueOf(va.getStatus())))
+                                .filter(va -> Objects.equals(va.getTruckNo(), param.getTruckNo()))
+                                .count();
+                    } else {
+                        // 状态2、3:按driverId过滤
+                        totalNum = records.stream()
+                                .filter(va -> originalStatuses.contains(String.valueOf(va.getStatus())))
+                                .filter(va -> Objects.equals(va.getDriverId(), param.getDriverId()))
+                                .count();
+                    }
                     // 构建聚合结果对象
                     // 构建聚合结果对象
                     StatisticsWaybillResp.OrderBillStatusStatistics aggregateStat = new StatisticsWaybillResp.OrderBillStatusStatistics();
                     StatisticsWaybillResp.OrderBillStatusStatistics aggregateStat = new StatisticsWaybillResp.OrderBillStatusStatistics();
-                    aggregateStat.setOrderStatus(aggregateInfo[0]); // 聚合状态编码
-                    aggregateStat.setOrderStatusDesc(aggregateInfo[1]); // 聚合状态描述
+                    aggregateStat.setOrderStatus(aggStatus); // 聚合状态编码
+                    aggregateStat.setOrderStatusDesc(aggDesc); // 聚合状态描述
                     aggregateStat.setOrderNum(String.valueOf(totalNum)); // 汇总数量
                     aggregateStat.setOrderNum(String.valueOf(totalNum)); // 汇总数量
                     return aggregateStat;
                     return aggregateStat;
                 })
                 })