Procházet zdrojové kódy

新增有盛报表

donglang před 22 hodinami
rodič
revize
0e1b1cbb62

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

@@ -139,6 +139,13 @@ public interface TradeOrderInfoService {
      */
     List<OrderUnitInfoDetailVO> queryOrderUnitInfByTOrderId(Set<Long> tradeOrderId);
 
+    /**
+     * 通交易订单id查询交易订单采购/销售企业信息     * @param tradeOrderId
+     *
+     * @return
+     */
+    List<OrderUnitInfoDetailVO> queryOrderUnitInfByTOrderIds(Set<Long> tradeOrderId, String unitType);
+
     /**
      * 通过企业名称模糊查询
      *
@@ -194,4 +201,6 @@ public interface TradeOrderInfoService {
 
     List<OrderUnitInfoDetailVO> queryOrderUnitByTradeOrderId(Long tradeOrderId);
 
+    List<TradeOrderGoodsVo> queryOrderGoodsByTOrderIds(Set<Long> tradeOrderIds);
+
 }

+ 29 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/TradeOrderGoodsVo.java

@@ -0,0 +1,29 @@
+package com.sckw.order.api.model;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+
+@Data
+@Schema(description = "数据统计-商品")
+public class TradeOrderGoodsVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 7143305943655450894L;
+
+    @Schema(description = "贸易订单id")
+    private Long tradeOrderId;
+
+    @Schema(description = "商品id")
+    private Long goodsId;
+
+    @Schema(description = "商品名称")
+    private String goodsName;
+
+    @Schema(description = "金额")
+    private BigDecimal amount;
+}

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

@@ -968,6 +968,28 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
 
     }
 
+    @Override
+    public List<OrderUnitInfoDetailVO> queryOrderUnitInfByTOrderIds(Set<Long> tradeOrderId, String unitType) {
+        List<KwoTradeOrderUnit> kwoTradeOrderUnits = kwoTradeOrderUnitRepository.queryByOrderIdsAndUnitType(tradeOrderId, unitType);
+        if (CollectionUtils.isEmpty(kwoTradeOrderUnits)) {
+            return Collections.emptyList();
+        }
+        return kwoTradeOrderUnits.stream().map(unit -> {
+            OrderUnitInfoDetailVO vo = new OrderUnitInfoDetailVO();
+            vo.setId(unit.getId());
+            vo.setTOrderId(unit.getTOrderId());
+            vo.setTOrderNo(unit.getTOrderNo());
+            vo.setUnitType(unit.getUnitType());
+            vo.setEntId(unit.getEntId());
+            vo.setFirmName(unit.getFirmName());
+            vo.setContactsId(unit.getContactsId());
+            vo.setContacts(unit.getContacts());
+            vo.setPhone(unit.getPhone());
+            return vo;
+        }).collect(Collectors.toList());
+
+    }
+
 
     @Override
     public List<OrderUnitInfoDetailVO> queryOrderUnitInfByEntName(String entName) {
@@ -1020,4 +1042,22 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         }).collect(Collectors.toList());
     }
 
+    @Override
+    public  List<TradeOrderGoodsVo> queryOrderGoodsByTOrderIds(Set<Long> tradeOrderIds) {
+        List<KwoTradeOrderGoods> tradeOrderGoods = kwoTradeOrderGoodsRepository.queryByOrderIds(tradeOrderIds);
+        if (CollectionUtils.isEmpty(tradeOrderGoods)) {
+            return Collections.emptyList();
+        }
+        return tradeOrderGoods.stream().map(goods -> {
+            TradeOrderGoodsVo vo = new TradeOrderGoodsVo();
+            vo.setTradeOrderId(goods.getTOrderId());
+            vo.setGoodsId(goods.getGoodsId());
+            vo.setGoodsName(goods.getGoodsName());
+            vo.setAmount(goods.getUnitPrice());
+            return vo;
+        }).collect(Collectors.toList());
+
+    }
+
+
 }

+ 8 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/repository/KwoTradeOrderUnitRepository.java

@@ -67,4 +67,12 @@ public class KwoTradeOrderUnitRepository extends ServiceImpl<KwoTradeOrderUnitMa
                         .like(KwoTradeOrderUnit::getFirmName, entName)
         );
     }
+
+    public List<KwoTradeOrderUnit> queryByOrderIdsAndUnitType(Set<Long> tradeOrderIds, String unitType) {
+        return list(Wrappers.<KwoTradeOrderUnit>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0)
+                .in(KwoTradeOrderUnit::getTOrderId, tradeOrderIds)
+                .eq(KwoTradeOrderUnit::getUnitType, unitType));
+    }
+
 }

+ 3 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/enterpriseApp/AppWayBillController.java

@@ -20,6 +20,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
  * @author jc
  * @description 企业端app运单controller
@@ -437,7 +439,7 @@ public class AppWayBillController {
      */
     @Operation(summary = "运单每日报表", description = "运单每日报表")
     @PostMapping("/queryWaybillOrderReport")
-    public BaseResult<PageDataResult<WaybillOrderReportResp>> queryWaybillOrderReport(WaybillOrderReportQueryParam param){
+    public BaseResult<List<WaybillOrderReportResp>> queryWaybillOrderReport(WaybillOrderReportQueryParam param){
         waybillOrderService.queryWaybillOrderReport(param);
         return BaseResult.success();
     }

+ 2 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderReportQueryParam.java

@@ -47,7 +47,8 @@ public class WaybillOrderReportQueryParam extends PageReq implements Serializabl
      */
     @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
     @Schema(description = "时间")
-    private Date endTime;
+    @NotNull(message = "时间不能为空")
+    private Date oneDayTime;
 
 
 }

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderReportResp.java

@@ -42,7 +42,7 @@ public class WaybillOrderReportResp implements Serializable {
      * 采购单位id
      */
     @Schema(description = "采购单位id")
-    private String ProcurementEntId;
+    private Long ProcurementEntId;
 
     /**
      * 采购单位名称

+ 8 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtGatekeeperWaybillOrderRepository.java

@@ -52,4 +52,12 @@ public class KwtGatekeeperWaybillOrderRepository extends ServiceImpl<KwtGatekeep
                         .orderByDesc(KwtGatekeeperWaybillOrder::getId));
     }
 
+    public List<KwtGatekeeperWaybillOrder> queryGatekeeperByWaybillOrders(List<Long> waybillOrderIds, Integer type) {
+        return list(
+                Wrappers.<KwtGatekeeperWaybillOrder>lambdaQuery()
+                        .in(CollectionUtils.isNotEmpty(waybillOrderIds), KwtGatekeeperWaybillOrder::getWOrderId, waybillOrderIds)
+                        .eq(KwtGatekeeperWaybillOrder::getType, type)
+                        .orderByDesc(KwtGatekeeperWaybillOrder::getId));
+    }
+
 }

+ 7 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderGoodsRepository.java

@@ -61,4 +61,11 @@ public class KwtLogisticsOrderGoodsRepository extends ServiceImpl<KwtLogisticsOr
                 .eq(KwtLogisticsOrderGoods::getDelFlag, 0)
                 .in(KwtLogisticsOrderGoods::getLOrderId, lOrderIds));
     }
+
+    public List<KwtLogisticsOrderGoods> queryByLogOrderIds(Set<Long> logOrderIds) {
+        return list(Wrappers.<KwtLogisticsOrderGoods>lambdaQuery()
+                .eq(KwtLogisticsOrderGoods::getDelFlag,0)
+                .in(KwtLogisticsOrderGoods::getLOrderId, logOrderIds)
+        );
+    }
 }

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

@@ -620,7 +620,7 @@ public class GatekeeperOrderService {
      * @return
      */
     private static List<StatisticsWaybillResp.OrderBillStatusStatistics> calculateStatusStatistics(List<KwtGatekeeperWaybillOrder> orderList) {
-        log.info("开始统计计算,param:{}", JSON.toJSONString(orderList));
+        log.info("开始统计计算,运单总条数:{}", orderList.size());
         //车辆停留超时配置
         double configHours = 2000;
 

+ 211 - 38
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

@@ -23,8 +23,10 @@ import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.fleet.api.model.vo.RTruckVo;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
+import com.sckw.order.api.model.GoodsVo;
 import com.sckw.order.api.model.OrderDetailVo;
 import com.sckw.order.api.model.OrderUnitInfoDetailVO;
+import com.sckw.order.api.model.TradeOrderGoodsVo;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.product.api.model.KwpGoods;
 import com.sckw.system.api.RemoteSystemService;
@@ -41,6 +43,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.script.DefaultRedisScript;
 import org.springframework.stereotype.Service;
@@ -78,6 +81,7 @@ public class WaybillOrderService {
     private final KwtWaybillOrderNodeRepository waybillOrderNodeRepository;
     private final KwtWaybillOrderWeighbridgeRepository waybillOrderWeighbridgeRepository;
     private final KwtLogisticsOrderContractRepository logisticsOrderContractRepository;
+    private final KwtGatekeeperWaybillOrderRepository gatekeeperWaybillOrderRepository;
 
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
     RemoteSystemService remoteSystemService;
@@ -1064,7 +1068,7 @@ public class WaybillOrderService {
                             tradeIdAndOrderDetailVoMap,tradeIdAndLogOrderList,logisticsOrderIdAndSubtaskList,
                             dictValueAndDictResDtoMap, goodsIdAndGoodsMap);
                 }).collect(Collectors.toList());
-        log.info("{}物流运单查询结束,result:{}", isRawOre ? "原矿运输" : "正常流程", JSON.toJSONString(orderList));
+        log.info("{}物流运单查询结束,size:{}", isRawOre ? "原矿运输" : "正常流程", orderList.size());
         return orderList;
     }
 
@@ -1976,69 +1980,238 @@ public class WaybillOrderService {
      * @param param
      * @return
      */
-    public PageDataResult<WaybillOrderReportResp> queryWaybillOrderReport(WaybillOrderReportQueryParam param) {
+    public List<WaybillOrderReportResp> queryWaybillOrderReport(WaybillOrderReportQueryParam param) {
         log.info("[报表]开始查询运单每日报表:{}", JSON.toJSONString(param));
+        // 查询运单数据
+        List<WaybillOrderReportResp> orderRepoost = getWaybillOrderRepoost(param);
+        //汇总数据
+        List<WaybillOrderReportResp> orderGroupedReportList = buildGroupedReport(orderRepoost);
+
+        return orderGroupedReportList;
+    }
+
+    /**
+     * 将扁平的运单列表转换为“汇总行在前,明细在后”的报表格式
+     */
+    public List<WaybillOrderReportResp> buildGroupedReport(List<WaybillOrderReportResp> rawList) {
+        log.info("[报表]开始分组汇总!");
+        if (rawList == null || rawList.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        // 1. 排序优先级:单位ID -> 商品名称 -> 离场时间(倒序或正序均可)
+        rawList.sort(Comparator.comparing(WaybillOrderReportResp::getProcurementEntId, Comparator.nullsLast(Long::compareTo))
+                .thenComparing(WaybillOrderReportResp::getGoodsName, Comparator.nullsLast(String::compareTo))
+                .thenComparing(WaybillOrderReportResp::getLeaveTime, Comparator.nullsLast(Date::compareTo)));
+
+        // 2. 分组:LinkedHashMap保持插入顺序
+        Map<String, List<WaybillOrderReportResp>> groupedMap = rawList.stream()
+                .collect(Collectors.groupingBy(
+                        item -> item.getProcurementEntId() + "_" + item.getGoodsName(),
+                        LinkedHashMap::new,
+                        Collectors.toList()
+                ));
+
+        List<WaybillOrderReportResp> resultList = new ArrayList<>();
+
+        // 3. 遍历组装:【汇总行】 -> 【明细行】
+        for (Map.Entry<String, List<WaybillOrderReportResp>> entry : groupedMap.entrySet()) {
+            List<WaybillOrderReportResp> details = entry.getValue();
+            if (details.isEmpty())  {
+                continue;
+            }
+
+            WaybillOrderReportResp firstItem = details.get(0);
+
+            // A. 创建并添加【汇总行】 ---
+            WaybillOrderReportResp summaryRow = createSummaryRow(firstItem, details);
+            resultList.add(summaryRow);
+
+            // B. 添加【明细行】 ---
+            // 此时 details 已经是排好序的了,直接追加即可
+            resultList.addAll(details);
+        }
+        log.info("[报表]分组汇总结束!");
+        return resultList;
+    }
+
+    /**
+     * 计算并生成一行汇总数据
+     */
+    private WaybillOrderReportResp createSummaryRow(WaybillOrderReportResp sample, List<WaybillOrderReportResp> details) {
+        log.info("[报表]开始生成一行汇总数据!");
+        WaybillOrderReportResp summary = new WaybillOrderReportResp();
+
+        // 复制分组维度的信息
+        summary.setId(-1L);
+        summary.setProcurementEntId(sample.getProcurementEntId());
+
+        BigDecimal totalMoney = BigDecimal.ZERO;
+        BigDecimal totalNetWeight = BigDecimal.ZERO;
+        BigDecimal totalGrossWeight = BigDecimal.ZERO;
+        BigDecimal totalTareWeight = BigDecimal.ZERO;
+
+
+        // 累加计算
+        for (WaybillOrderReportResp item : details) {
+            totalMoney = totalMoney.add(item.getTotalPrice() != null ? item.getTotalPrice() : BigDecimal.ZERO);
+            totalNetWeight = totalNetWeight.add(item.getAmount() != null ? item.getAmount() : BigDecimal.ZERO);
+            totalGrossWeight = totalGrossWeight.add(item.getGrossAmount() != null ? item.getGrossAmount() : BigDecimal.ZERO);
+            totalTareWeight = totalTareWeight.add(item.getTareAmount() != null ? item.getTareAmount() : BigDecimal.ZERO);
+        }
+
+        // 赋值给汇总行
+        summary.setTotalPrice(totalMoney);
+        summary.setAmount(totalNetWeight);
+        summary.setGrossAmount(totalGrossWeight);
+        summary.setTareAmount(totalTareWeight);
+        log.info("[报表]生成一行汇总数据结束!");
+        return summary;
+    }
+
+
+    private List<WaybillOrderReportResp> getWaybillOrderRepoost(WaybillOrderReportQueryParam param) {
 
         // 1. 贸易订单id
-        Set<Long> tOrderId = tradeOrderInfoService.queryOrderIdByEntId(param.getEntId(), "2");
-        if (CollectionUtils.isEmpty(tOrderId)) {
+        Set<Long> tOrderIds = tradeOrderInfoService.queryOrderIdByEntId(param.getEntId(), "2");
+        if (CollectionUtils.isEmpty(tOrderIds)) {
             log.info("当前企业无贸易订单!,entId:{}", param.getEntId());
-            return PageDataResult.empty(param.getPageNum(), param.getPageSize());
+            return new ArrayList<>();
         }
-        // 2. 贸易订单
-        List<OrderDetailVo> tOrderList = tradeOrderInfoService.queryByTradeOrderIds(tOrderId);
-        if (CollectionUtils.isEmpty(tOrderList)) {
-            throw new BusinessPlatfromException(ErrorCodeEnum.TRADE_ORDER_NOT_FOUND, "贸易订单不存在,tOrderIds:" + JSON.toJSONString(tOrderId));
+
+        // 2. 采购商
+        List<OrderUnitInfoDetailVO> tOrderUnit= tradeOrderInfoService.queryOrderUnitInfByTOrderIds(tOrderIds, "1");
+        if (CollectionUtils.isEmpty(tOrderUnit)) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.TRADE_ORDER_NOT_FOUND, "采购商不存在,tOrderIds:" + JSON.toJSONString(tOrderIds));
         }
-        Map<Long, OrderDetailVo> tOrderMap = tOrderList.stream()
-                .collect(Collectors.toMap(OrderDetailVo::getId, Function.identity(), (x, y) -> x));
+        Map<Long, OrderUnitInfoDetailVO> tOrderUnitMap = tOrderUnit.stream()
+                .collect(Collectors.toMap(OrderUnitInfoDetailVO::getTOrderId, Function.identity(), (x, y) -> x));
 
-        // 2. 物流订单
-        List<KwtLogisticsOrder> logisticsOrders = logisticsOrderRepository.queryByTradeOrderIds(tOrderId);
+        //3. 贸易商品
+        List<TradeOrderGoodsVo> tOrderGoodsVos = tradeOrderInfoService.queryOrderGoodsByTOrderIds(tOrderIds);
+        if (CollectionUtils.isEmpty(tOrderGoodsVos)) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.TRADE_ORDER_NOT_FOUND, "贸易商品不存在,tOrderIds:" + JSON.toJSONString(tOrderIds));
+        }
+        Map<Long, TradeOrderGoodsVo> tOrderGoodsMap = tOrderGoodsVos.stream()
+                .collect(Collectors.toMap(TradeOrderGoodsVo::getTradeOrderId, Function.identity(), (x, y) -> x));
+
+        // 4. 物流订单
+        List<KwtLogisticsOrder> logisticsOrders = logisticsOrderRepository.queryByTradeOrderIds(tOrderIds);
         if (CollectionUtils.isEmpty(logisticsOrders)) {
-            throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ORDER_NOT_FOUND, "物流订单不存在,tOrderIds:" + JSON.toJSONString(tOrderId));
+            throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ORDER_NOT_FOUND, "物流订单不存在,tOrderIds:" + JSON.toJSONString(tOrderIds));
         }
         Set<Long> lOrderIds= logisticsOrders.stream().map(KwtLogisticsOrder::getId).collect(Collectors.toSet());
+        Map<Long, KwtLogisticsOrder> logOrderMap = logisticsOrders.stream()
+                .collect(Collectors.toMap(KwtLogisticsOrder::getId, Function.identity(), (x, y) -> x));
 
-        // 3.物流卸货订单
+        // 5.物流卸货订单
         List<KwtLogisticsOrderAddress> lOrderAddresseList = logisticsOrderAddressRepository.queryByLogOrderIds(lOrderIds);
         if (CollectionUtils.isEmpty(lOrderAddresseList)) {
             throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ADDRESS_NOT_FOUND, "物流订单卸货信息不存在,lOrderIds:" + JSON.toJSONString(lOrderIds));
         }
-        Map<Long, KwtLogisticsOrderAddress> addressMap = lOrderAddresseList
-                .stream().collect(Collectors.toMap(KwtLogisticsOrderAddress::getLOrderId, Function.identity(), (x, y) -> x));
+        Map<Long, KwtLogisticsOrderAddress> addressMap = lOrderAddresseList.stream()
+                .collect(Collectors.toMap(KwtLogisticsOrderAddress::getLOrderId, Function.identity(), (x, y) -> x));
 
-        // 4.运单
-        LambdaQueryWrapper<KwtWaybillOrder> queryWrapper = Wrappers.<KwtWaybillOrder>lambdaQuery()
-                .eq(KwtWaybillOrder::getEntId, param.getEntId())
-                .eq(KwtWaybillOrder::getDelFlag, 0)
-                .in(KwtWaybillOrder::getLOrderId, lOrderIds)
-                .ge(KwtWaybillOrder::getStatus,18)
-                .orderByDesc(KwtWaybillOrder::getCreateTime)
-                .orderByDesc(KwtWaybillOrder::getId);
-        List<KwtWaybillOrder> waybillOrderList = waybillOrderRepository.list(queryWrapper);
-        if (CollectionUtils.isEmpty(waybillOrderList)) {
-            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "物流运单不存在,lOrderIds:" + JSON.toJSONString(lOrderIds));
+        // 6.运单
+        List<KwtWaybillOrder> waybillOrderList = queryWaybillOrders(param, lOrderIds);
+        List<Long> wOrderIds = waybillOrderList.stream().map(KwtWaybillOrder::getId).collect(Collectors.toList());
+
+        // 7. 运单装货单
+        List<KwtWaybillOrderTicket> ticketList = waybillOrderTicketRepository.queryByWOrderIdsAndType(wOrderIds, Global.ADDRESS_LOAD);
+        if (CollectionUtils.isEmpty(ticketList)) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "运单装货单不存在,wOrderIds:" + JSON.toJSONString(wOrderIds));
         }
-        Map<Long, KwtWaybillOrder> waybillOrderMap = waybillOrderList.stream().collect(Collectors.toMap(KwtWaybillOrder::getLOrderId, Function.identity(), (x, y) -> x));
+        Map<Long, KwtWaybillOrderTicket> ticketMap = ticketList.stream()
+                .collect(Collectors.toMap(KwtWaybillOrderTicket::getWOrderId, Function.identity(), (x, y) -> x));
 
-        // 5.
+        // 8.门卫
+        List<KwtGatekeeperWaybillOrder> gatekeepers = gatekeeperWaybillOrderRepository.queryGatekeeperByWaybillOrders(wOrderIds, Global.ADDRESS_LOAD);
+        if (CollectionUtils.isEmpty(gatekeepers)) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "门卫运单不存在,wOrderIds:" + JSON.toJSONString(wOrderIds));
+        }
+        Map<Long, KwtGatekeeperWaybillOrder> gatekeeperMap = gatekeepers.stream()
+                .collect(Collectors.toMap(KwtGatekeeperWaybillOrder::getWOrderId, Function.identity(), (x, y) -> x));
 
+        //组装参数
+        List<WaybillOrderReportResp> orderList = waybillOrderList.stream()
+                .map(waybillOrder -> {
+                    return getWaybillOrderReport(waybillOrder, tOrderUnitMap, tOrderGoodsMap, logOrderMap, addressMap, ticketMap, gatekeeperMap);
+                }).collect(Collectors.toList());
+        log.info("[报表]查询运单每日报表结算,还未分组, size:{}",orderList.size());
+        return orderList;
+    }
 
 
 
-        Page<KwtWaybillOrder> page = waybillOrderRepository.page(new Page<>(param.getPageNum(), param.getPageSize()), queryWrapper);
-        List<KwtWaybillOrder> records = page.getRecords();
-        if (CollectionUtils.isEmpty(records)) {
-            log.info("当前企业无已离场数据,entId:{}", param.getEntId());
-            return PageDataResult.empty(param.getPageNum(), param.getPageSize());
-        }
+    private List<KwtWaybillOrder> queryWaybillOrders(WaybillOrderReportQueryParam param, Set<Long> lOrderIds) {
+        //当天开始时间
+        Date startOfDay = DateUtils.getStartOfDay(param.getOneDayTime(), DateUtils.DATE_TIME_PATTERN);
+        //当天结算时间
+        Date endOfDay = DateUtils.getEndOfDay(param.getOneDayTime());
+
+        LambdaQueryWrapper<KwtWaybillOrder> queryWrapper = Wrappers.<KwtWaybillOrder>lambdaQuery()
+                .in(KwtWaybillOrder::getLOrderId, lOrderIds)
+                .ge(KwtWaybillOrder::getCreateTime, startOfDay)
+                .le(KwtWaybillOrder::getCreateTime, endOfDay)
+                .eq(KwtWaybillOrder::getStatus,25)
+                .eq(KwtWaybillOrder::getDelFlag, 0)
+                .orderByDesc(KwtWaybillOrder::getUpdateTime);
 
+        Page<KwtWaybillOrder> pageList = waybillOrderRepository.page(new Page<>(param.getPageNum(), param.getPageSize()), queryWrapper);
 
-        log.info("[报表]查询运单每日报表结束:{}", JSON.toJSONString(param));
+        List<KwtWaybillOrder> waybillOrderList = pageList.getRecords();
+        if (CollectionUtils.isEmpty(waybillOrderList)) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "物流运单不存在,lOrderIds:" + JSON.toJSONString(lOrderIds));
+        }
+        return waybillOrderList;
+    }
 
-        return PageDataResult.success(param.getPageNum(), param.getPageSize(), null , null);
 
+    /**
+     * 查询正常流程物流运单
+     * @param param
+     * @return
+     */
+    private WaybillOrderReportResp getWaybillOrderReport(KwtWaybillOrder waybillOrder,
+                                                         Map<Long, OrderUnitInfoDetailVO> tOrderUnitMap,
+                                                         Map<Long, TradeOrderGoodsVo> tOrderGoodsMap,
+                                                         Map<Long, KwtLogisticsOrder> logOrderMap,
+                                                         Map<Long, KwtLogisticsOrderAddress> addressMap,
+                                                         Map<Long, KwtWaybillOrderTicket> ticketMap,
+                                                         Map<Long, KwtGatekeeperWaybillOrder> gatekeeperMap) {
+
+        //订单
+        KwtLogisticsOrder logOrder = logOrderMap.getOrDefault(waybillOrder.getLOrderId(), new KwtLogisticsOrder());
+        //采购商
+        OrderUnitInfoDetailVO tOrderUnit = tOrderUnitMap.getOrDefault(logOrder.getTOrderId(), new OrderUnitInfoDetailVO());
+        //贸易商品
+        TradeOrderGoodsVo tradeOrderGoods = tOrderGoodsMap.getOrDefault(logOrder.getTOrderId(), new TradeOrderGoodsVo());
+        //地址
+        KwtLogisticsOrderAddress loAddress = addressMap.getOrDefault(waybillOrder.getLOrderId(), new KwtLogisticsOrderAddress());
+        //运单装货
+        KwtWaybillOrderTicket ticket = ticketMap.getOrDefault(waybillOrder.getId(), new KwtWaybillOrderTicket());
+        //门卫
+        KwtGatekeeperWaybillOrder gatekeeper = gatekeeperMap.getOrDefault(waybillOrder.getId(), new KwtGatekeeperWaybillOrder());
+
+        WaybillOrderReportResp resp = new WaybillOrderReportResp();
+        resp.setId(waybillOrder.getId());
+        resp.setTruckNo(waybillOrder.getTruckNo());
+        resp.setTradeOrderNo(logOrder.getTOrderNo());
+        resp.setWaybillNo(waybillOrder.getWOrderNo());
+        resp.setProcurementEntId(tOrderUnit.getEntId());
+        resp.setProcurementEntName(tOrderUnit.getFirmName());
+
+        resp.setTareAmount(ticket.getTareAmount());
+        resp.setGrossAmount(ticket.getGrossAmount());
+        resp.setAmount(ticket.getAmount());
+        resp.setGoodsName(gatekeeper.getGoodsName());
+        resp.setLeaveTime(gatekeeper.getLeaveTime());
+        resp.setUnloadingPerson(loAddress.getContacts());
+        resp.setUnitPrice(tradeOrderGoods.getAmount());
+        //装货总价 = 装货净重*单价
+        resp.setTotalPrice(ticket.getAmount().multiply(tradeOrderGoods.getAmount()));
+
+        return resp;
     }