人天统计修改bug
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user