算单日报表数据

This commit is contained in:
2026-04-25 20:42:48 +08:00
parent 75f3520e22
commit 8cfa29b30b
6 changed files with 222 additions and 15 deletions

View File

@@ -1,11 +1,19 @@
package com.rj.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.rj.entity.LbDailyUserTradeReport;
import com.rj.mapper.LbDailyUserTradeReportMapper;
import com.rj.service.ILbDailyUserTradeReportService;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* <p>
* 当天用户交易报表 服务实现类
@@ -14,4 +22,65 @@ import org.springframework.stereotype.Service;
@Service
public class LbDailyUserTradeReportServiceImpl extends ServiceImpl<LbDailyUserTradeReportMapper, LbDailyUserTradeReport>
implements ILbDailyUserTradeReportService {
private static final String DATA_TYPE_REPORT_SUM = "report_sum";
@Override
public Map<String, Object> calculateReportSumByDateAndTenant(LocalDate reportDate, String tenantId) {
Map<String, Object> result = new HashMap<>();
LocalDateTime start = reportDate.atStartOfDay();
LocalDateTime end = reportDate.plusDays(1).atStartOfDay();
LambdaQueryWrapper<LbDailyUserTradeReport> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(LbDailyUserTradeReport::getTenantId, tenantId)
.ge(LbDailyUserTradeReport::getReportDate, start)
.lt(LbDailyUserTradeReport::getReportDate, end)
.ne(LbDailyUserTradeReport::getDataType, DATA_TYPE_REPORT_SUM);
BigDecimal yestodayBuyAmt = BigDecimal.ZERO;
BigDecimal dailySellAmt = BigDecimal.ZERO;
BigDecimal dailyBuyAmt = BigDecimal.ZERO;
BigDecimal serviceAmt = BigDecimal.ZERO;
BigDecimal diffAmt = BigDecimal.ZERO;
BigDecimal dikouAmt = BigDecimal.ZERO;
for (LbDailyUserTradeReport item : list(queryWrapper)) {
yestodayBuyAmt = yestodayBuyAmt.add(defaultZero(item.getYestodayBuyAmt()));
dailySellAmt = dailySellAmt.add(defaultZero(item.getDailySellAmt()));
dailyBuyAmt = dailyBuyAmt.add(defaultZero(item.getDailyBuyAmt()));
serviceAmt = serviceAmt.add(defaultZero(item.getServiceAmt()));
diffAmt = diffAmt.add(defaultZero(item.getDiffAmt()));
dikouAmt = dikouAmt.add(defaultZero(item.getDikouAmt()));
}
LbDailyUserTradeReport summary = new LbDailyUserTradeReport();
summary.setId(UUID.randomUUID().toString());
summary.setTenantId(tenantId);
summary.setDataType(DATA_TYPE_REPORT_SUM);
summary.setReportDate(start);
summary.setYestodayBuyAmt(yestodayBuyAmt);
summary.setDailySellAmt(dailySellAmt);
summary.setDailyBuyAmt(dailyBuyAmt);
summary.setServiceAmt(serviceAmt);
summary.setDiffAmt(diffAmt);
summary.setDikouAmt(dikouAmt);
summary.setDescContent("系统汇总记录");
summary.setCreatedAt(LocalDateTime.now());
summary.setUpdatedAt(LocalDateTime.now());
boolean success = save(summary);
result.put("success", success);
if (success) {
result.put("message", "汇总成功");
result.put("data", summary);
return result;
}
result.put("message", "汇总失败");
return result;
}
private BigDecimal defaultZero(BigDecimal value) {
return value == null ? BigDecimal.ZERO : value;
}
}

View File

@@ -99,8 +99,8 @@ public class LbDailyUserTradeServiceImpl extends ServiceImpl<LbDailyUserTradeMap
LambdaQueryWrapper<LbDailyUserTrade> yesterdayWrapper = new LambdaQueryWrapper<>();
yesterdayWrapper.eq(LbDailyUserTrade::getTenantId, normalizedTenantId)
.eq(LbDailyUserTrade::getReportDate, yesterday)
.eq(LbDailyUserTrade::getUserId, trade.getUserId());
.eq(LbDailyUserTrade::getReportDate, yesterday);
// .eq(LbDailyUserTrade::getUserId, trade.getUserId());
if (StringUtils.isNotBlank(trade.getNickname())) {
yesterdayWrapper.eq(LbDailyUserTrade::getNickname, trade.getNickname().trim());
}
@@ -108,7 +108,7 @@ public class LbDailyUserTradeServiceImpl extends ServiceImpl<LbDailyUserTradeMap
.orderByDesc(LbDailyUserTrade::getUpdatedAt)
.last("limit 1");
LbDailyUserTrade lastDateRecord = this.getOne(yesterdayWrapper, false);
BigDecimal yestodaySellAmt = lastDateRecord == null || lastDateRecord.getDailyBuyAmt() == null
BigDecimal yestodayBuyAmt = lastDateRecord == null || lastDateRecord.getDailyBuyAmt() == null
? BigDecimal.ZERO
: lastDateRecord.getDailyBuyAmt();
@@ -117,12 +117,13 @@ public class LbDailyUserTradeServiceImpl extends ServiceImpl<LbDailyUserTradeMap
report.setTenantId(normalizedTenantId);
report.setUserId(trade.getUserId());
report.setNickname(trade.getNickname());
report.setYestodaySellAmt(yestodaySellAmt);
report.setYestodayBuyAmt(yestodayBuyAmt);
report.setDailySellAmt(dailySellAmt);
report.setDailyBuyAmt(dailyBuyAmt);
report.setServiceAmt(dailyBuyAmt.multiply(SERVICE_RATE));
report.setDiffAmt(diffAmt);
report.setReportDate(reportDate.atStartOfDay());
report.setDataType("report_detail");
report.setCreatedAt(now);
report.setUpdatedAt(now);
reportList.add(report);
@@ -395,15 +396,23 @@ public class LbDailyUserTradeServiceImpl extends ServiceImpl<LbDailyUserTradeMap
String tenantId = defaultTenantId == null ? "" : defaultTenantId;
String userId = readString(row, headerMap.get("userId"), formatter);
String nickname = readString(row, headerMap.get("nickname"), formatter);
if (tenantId.isEmpty()) {
return null;
}
LbDailyUserTrade matchedTrade = null;
if (StringUtils.isBlank(userId) && StringUtils.isNotBlank(nickname)) {
matchedTrade = findLatestTradeByNickname(tenantId, nickname);
if (matchedTrade != null && StringUtils.isNotBlank(matchedTrade.getUserId())) {
userId = matchedTrade.getUserId();
}
}
if (userId.isEmpty()) {
userId = nickname;
}
if (userId.isEmpty()) {
userId = "AUTO_" + UUID.randomUUID().toString().replace("-", "");
}
if (tenantId.isEmpty()) {
return null;
}
LbDailyUserTrade trade = new LbDailyUserTrade();
trade.setId(UUID.randomUUID().toString());
@@ -412,8 +421,18 @@ public class LbDailyUserTradeServiceImpl extends ServiceImpl<LbDailyUserTradeMap
trade.setNickname(nickname);
trade.setDailySellAmt(readDecimal(row, headerMap.get("dailySellAmt"), formatter));
trade.setDailyBuyAmt(readDecimal(row, headerMap.get("dailyBuyAmt"), formatter));
trade.setPromoterId(readString(row, headerMap.get("promoterId"), formatter));
trade.setPromoterName(readString(row, headerMap.get("promoterName"), formatter));
String promoterId = readString(row, headerMap.get("promoterId"), formatter);
String promoterName = readString(row, headerMap.get("promoterName"), formatter);
if (matchedTrade != null) {
if (StringUtils.isBlank(promoterId) && StringUtils.isNotBlank(matchedTrade.getPromoterId())) {
promoterId = matchedTrade.getPromoterId();
}
if (StringUtils.isBlank(promoterName) && StringUtils.isNotBlank(matchedTrade.getPromoterName())) {
promoterName = matchedTrade.getPromoterName();
}
}
trade.setPromoterId(promoterId);
trade.setPromoterName(promoterName);
trade.setDescContent(readString(row, headerMap.get("descContent"), formatter));
BigDecimal sell = trade.getDailySellAmt() == null ? BigDecimal.ZERO : trade.getDailySellAmt();
@@ -430,6 +449,15 @@ public class LbDailyUserTradeServiceImpl extends ServiceImpl<LbDailyUserTradeMap
return trade;
}
private LbDailyUserTrade findLatestTradeByNickname(String tenantId, String nickname) {
LambdaQueryWrapper<LbDailyUserTrade> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(LbDailyUserTrade::getTenantId, tenantId)
.eq(LbDailyUserTrade::getNickname, nickname.trim())
.orderByDesc(LbDailyUserTrade::getUpdatedAt)
.last("limit 1");
return this.getOne(wrapper, false);
}
private boolean isEmptyRow(Row row, DataFormatter formatter) {
for (Cell cell : row) {
if (!formatter.formatCellValue(cell).trim().isEmpty()) {