人天统计修改bug

This commit is contained in:
2026-06-07 22:11:49 +08:00
parent 21ec3321d0
commit a84fcbed56
4 changed files with 71 additions and 39 deletions

View File

@@ -429,7 +429,7 @@ public class LbOrderRowServiceImpl extends ServiceImpl<LbOrderRowMapper, LbOrder
@Override
@Transactional(rollbackFor = Exception.class)
public Map<String, Object> generateDailySumData(
String buyTimeStart, String buyTimeEnd, String tenantId) {
String buyTimeStart, String buyTimeEnd, String tenantId, String dataType) {
Map<String, Object> result = new HashMap<>();
try {
if (tenantId == null || tenantId.trim().isEmpty()) {
@@ -437,6 +437,17 @@ public class LbOrderRowServiceImpl extends ServiceImpl<LbOrderRowMapper, LbOrder
result.put("message", "tenantId不能为空");
return result;
}
String statType = dataType != null ? dataType.trim() : "";
if (statType.isEmpty()) {
result.put("success", false);
result.put("message", "dataType不能为空");
return result;
}
if (!SUM_DATA_TYPE.equals(statType) && !BUYER_DAY_STAT_DATA_TYPE.equals(statType)) {
result.put("success", false);
result.put("message", "dataType 仅支持 sum_data 或 day_stat");
return result;
}
String tid = tenantId.trim();
List<LbOrderRow> details = listDetailRowsByBuyTimeRange(buyTimeStart, buyTimeEnd, tid);
@@ -445,6 +456,7 @@ public class LbOrderRowServiceImpl extends ServiceImpl<LbOrderRowMapper, LbOrder
result.put("message", "时间范围内无明细数据");
result.put("generated", 0);
result.put("sourceCount", 0);
result.put("dataType", statType);
return result;
}
@@ -463,50 +475,61 @@ public class LbOrderRowServiceImpl extends ServiceImpl<LbOrderRowMapper, LbOrder
result.put("success", false);
result.put("message", "明细 buy_time 均无法解析为日期,无法汇总");
result.put("skippedNoBuyTime", skippedNoBuyTime);
result.put("dataType", statType);
return result;
}
String nowStr = LocalDateTime.now().format(DAY_TIME_FMT);
List<LbOrderRow> sumRows = new ArrayList<>(byDay.size());
List<LbOrderRow> buyerDayStatRows = new ArrayList<>();
List<LbOrderRow> statRows;
int skippedNoBuyerPhone = 0;
for (Map.Entry<LocalDate, List<LbOrderRow>> entry : byDay.entrySet()) {
LocalDate day = entry.getKey();
List<LbOrderRow> dayRows = entry.getValue();
sumRows.add(buildDailySumRow(tid, day, dayRows, nowStr));
Map<String, List<LbOrderRow>> 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<LocalDate, List<LbOrderRow>> entry : byDay.entrySet()) {
statRows.add(buildDailySumRow(tid, entry.getKey(), entry.getValue(), nowStr));
}
for (Map.Entry<String, List<LbOrderRow>> buyerEntry : byBuyerPhone.entrySet()) {
buyerDayStatRows.add(
buildBuyerDayStatRow(
tid, day, buyerEntry.getKey(), buyerEntry.getValue(), nowStr));
} else {
statRows = new ArrayList<>();
for (Map.Entry<LocalDate, List<LbOrderRow>> entry : byDay.entrySet()) {
LocalDate day = entry.getKey();
List<LbOrderRow> dayRows = entry.getValue();
Map<String, List<LbOrderRow>> 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<String, List<LbOrderRow>> 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<LbOrderRow> 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) {