From a84fcbed56fe1f7ebda6862b44994d571d14ea04 Mon Sep 17 00:00:00 2001 From: cst61 Date: Sun, 7 Jun 2026 22:11:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=BA=E5=A4=A9=E7=BB=9F=E8=AE=A1=E4=BF=AE?= =?UTF-8?q?=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rj/controller/LbOrderRowController.java | 13 +-- .../rj/dto/LbOrderRowGenerateSumRequest.java | 9 ++- .../com/rj/service/ILbOrderRowService.java | 7 +- .../service/impl/LbOrderRowServiceImpl.java | 81 ++++++++++++------- 4 files changed, 71 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/rj/controller/LbOrderRowController.java b/src/main/java/com/rj/controller/LbOrderRowController.java index 2ba91c3..7b51103 100644 --- a/src/main/java/com/rj/controller/LbOrderRowController.java +++ b/src/main/java/com/rj/controller/LbOrderRowController.java @@ -116,11 +116,13 @@ public class LbOrderRowController { @PostMapping("/generate-daily-sum") @Operation( - summary = "按日汇总生成 sum_data 与人天统计", + summary = "按日汇总生成统计数据", description = - "按购买时间区间、租户 id 查询 lb_order_row 明细:每天生成一条 sum_data(today_total_money_sum、" - + "today_unresell_count、today_order_count、avg_amt 等);同时按 buyer_phone + 购买日期" - + "生成 day_stat 人天统计(当天购买总单数、当天购买总金额、平均金额)并写入表") + "按购买时间区间、租户 id 查询 lb_order_row 明细并写入统计:" + + "dataType=sum_data 时每天生成一条汇总(today_total_money_sum、today_unresell_count、" + + "today_order_count、avg_amt 等);" + + "dataType=day_stat 时按 buyer_phone + 购买日期生成人天统计(当天购买总单数、" + + "当天购买总金额、平均金额)") public ResponseEntity> generateDailySum( @Parameter(description = "汇总条件", required = true) @RequestBody LbOrderRowGenerateSumRequest request) { @@ -128,7 +130,8 @@ public class LbOrderRowController { lbOrderRowService.generateDailySumData( request.getBuyTimeStart(), request.getBuyTimeEnd(), - request.getTenantId()); + request.getTenantId(), + request.getDataType()); Boolean success = (Boolean) result.get("success"); if (success != null && success) { return ResponseEntity.ok(result); diff --git a/src/main/java/com/rj/dto/LbOrderRowGenerateSumRequest.java b/src/main/java/com/rj/dto/LbOrderRowGenerateSumRequest.java index 00774c0..71f6782 100644 --- a/src/main/java/com/rj/dto/LbOrderRowGenerateSumRequest.java +++ b/src/main/java/com/rj/dto/LbOrderRowGenerateSumRequest.java @@ -4,10 +4,10 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; /** - * 按购买时间区间与租户,将 {@code lb_order_row} 明细按日汇总为 {@code sum_data} 并写入表。 + * 按购买时间区间与租户,将 {@code lb_order_row} 明细按日汇总写入表。 */ @Data -@Schema(description = "LB 订单按日汇总生成 sum_data 请求") +@Schema(description = "LB 订单按日汇总请求") public class LbOrderRowGenerateSumRequest { @Schema(description = "购买时间起(buy_time 下限),可空表示不限制") @@ -18,4 +18,9 @@ public class LbOrderRowGenerateSumRequest { @Schema(description = "租户 id", requiredMode = Schema.RequiredMode.REQUIRED) private String tenantId; + + @Schema( + description = "统计类型:sum_data=按天汇总,day_stat=按 buyer_phone + 购买日期人天统计", + requiredMode = Schema.RequiredMode.REQUIRED) + private String dataType; } diff --git a/src/main/java/com/rj/service/ILbOrderRowService.java b/src/main/java/com/rj/service/ILbOrderRowService.java index cf3df12..ba70388 100644 --- a/src/main/java/com/rj/service/ILbOrderRowService.java +++ b/src/main/java/com/rj/service/ILbOrderRowService.java @@ -49,10 +49,11 @@ public interface ILbOrderRowService extends IService { Integer hxrOrderStatus); /** - * 按购买时间区间与租户查询明细,按天汇总为 {@code sum_data},并按 {@code buyer_phone} + 购买日期 - * 生成 {@code day_stat} 人天统计,写入 {@code lb_order_row}。 + * 按购买时间区间与租户查询明细生成统计并写入 {@code lb_order_row}。 + * {@code dataType=sum_data} 按天汇总;{@code dataType=day_stat} 按 buyer_phone + 购买日期人天统计。 */ - Map generateDailySumData(String buyTimeStart, String buyTimeEnd, String tenantId); + Map generateDailySumData( + String buyTimeStart, String buyTimeEnd, String tenantId, String dataType); /** * 按购买时间区间与租户查询 {@code lb_order_row} 明细,将卖家姓名分批发送至钉钉(每批最多 15 条记录)。 diff --git a/src/main/java/com/rj/service/impl/LbOrderRowServiceImpl.java b/src/main/java/com/rj/service/impl/LbOrderRowServiceImpl.java index 53cf2f5..1e65903 100644 --- a/src/main/java/com/rj/service/impl/LbOrderRowServiceImpl.java +++ b/src/main/java/com/rj/service/impl/LbOrderRowServiceImpl.java @@ -429,7 +429,7 @@ public class LbOrderRowServiceImpl extends ServiceImpl generateDailySumData( - String buyTimeStart, String buyTimeEnd, String tenantId) { + String buyTimeStart, String buyTimeEnd, String tenantId, String dataType) { Map result = new HashMap<>(); try { if (tenantId == null || tenantId.trim().isEmpty()) { @@ -437,6 +437,17 @@ public class LbOrderRowServiceImpl extends ServiceImpl details = listDetailRowsByBuyTimeRange(buyTimeStart, buyTimeEnd, tid); @@ -445,6 +456,7 @@ public class LbOrderRowServiceImpl extends ServiceImpl sumRows = new ArrayList<>(byDay.size()); - List buyerDayStatRows = new ArrayList<>(); + List statRows; int skippedNoBuyerPhone = 0; - for (Map.Entry> entry : byDay.entrySet()) { - LocalDate day = entry.getKey(); - List dayRows = entry.getValue(); - sumRows.add(buildDailySumRow(tid, day, dayRows, nowStr)); - Map> byBuyerPhone = new LinkedHashMap<>(); - for (LbOrderRow row : dayRows) { - String buyerPhone = trimToNull(row.getBuyerPhone()); - if (buyerPhone == null) { - skippedNoBuyerPhone++; - continue; - } - byBuyerPhone.computeIfAbsent(buyerPhone, k -> new ArrayList<>()).add(row); + if (SUM_DATA_TYPE.equals(statType)) { + statRows = new ArrayList<>(byDay.size()); + for (Map.Entry> entry : byDay.entrySet()) { + statRows.add(buildDailySumRow(tid, entry.getKey(), entry.getValue(), nowStr)); } - for (Map.Entry> buyerEntry : byBuyerPhone.entrySet()) { - buyerDayStatRows.add( - buildBuyerDayStatRow( - tid, day, buyerEntry.getKey(), buyerEntry.getValue(), nowStr)); + } else { + statRows = new ArrayList<>(); + for (Map.Entry> entry : byDay.entrySet()) { + LocalDate day = entry.getKey(); + List dayRows = entry.getValue(); + Map> byBuyerPhone = new LinkedHashMap<>(); + for (LbOrderRow row : dayRows) { + String buyerPhone = trimToNull(row.getBuyerPhone()); + if (buyerPhone == null) { + skippedNoBuyerPhone++; + continue; + } + byBuyerPhone.computeIfAbsent(buyerPhone, k -> new ArrayList<>()).add(row); + } + for (Map.Entry> buyerEntry : byBuyerPhone.entrySet()) { + statRows.add( + buildBuyerDayStatRow( + tid, day, buyerEntry.getKey(), buyerEntry.getValue(), nowStr)); + } + } + if (statRows.isEmpty()) { + result.put("success", false); + result.put("message", "明细 buyer_phone 均缺失,无法生成人天统计"); + result.put("skippedNoBuyTime", skippedNoBuyTime); + result.put("skippedNoBuyerPhone", skippedNoBuyerPhone); + result.put("dataType", statType); + return result; } } - List allStatRows = new ArrayList<>(sumRows.size() + buyerDayStatRows.size()); - allStatRows.addAll(sumRows); - allStatRows.addAll(buyerDayStatRows); - - int upserted = upsertBatch(allStatRows); + int upserted = upsertBatch(statRows); boolean ok = upserted >= 0; result.put("success", ok); result.put("message", ok ? "按日汇总完成" : "保存失败"); result.put("generated", ok ? upserted : 0); - result.put("sumDataGenerated", ok ? sumRows.size() : 0); - result.put("buyerDayStatGenerated", ok ? buyerDayStatRows.size() : 0); result.put("sourceCount", details.size()); result.put("skippedNoBuyTime", skippedNoBuyTime); - result.put("skippedNoBuyerPhone", skippedNoBuyerPhone); + result.put("dataType", statType); + if (BUYER_DAY_STAT_DATA_TYPE.equals(statType)) { + result.put("skippedNoBuyerPhone", skippedNoBuyerPhone); + } if (ok) { - result.put("data", sumRows); - result.put("buyerDayStatData", buyerDayStatRows); + result.put("data", statRows); } return result; } catch (Exception e) {