|
@@ -16,6 +16,7 @@ import java.time.Duration;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.UUID;
|
|
import java.util.UUID;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 订单结算服务实现
|
|
* 订单结算服务实现
|
|
@@ -32,15 +33,17 @@ public class OrderSettlementServiceImpl implements OrderSettlementService {
|
|
|
private final WalletDetailService walletDetailService;
|
|
private final WalletDetailService walletDetailService;
|
|
|
private final AccountService accountService;
|
|
private final AccountService accountService;
|
|
|
private final SplitRecordService splitRecordService;
|
|
private final SplitRecordService splitRecordService;
|
|
|
|
|
+ private final PayLogService payLogService;
|
|
|
private final MpMsgTemplateService mpMsgTemplateService;
|
|
private final MpMsgTemplateService mpMsgTemplateService;
|
|
|
|
|
|
|
|
public OrderSettlementServiceImpl(WashOrderService washOrderService, WalletDetailService walletDetailService,
|
|
public OrderSettlementServiceImpl(WashOrderService washOrderService, WalletDetailService walletDetailService,
|
|
|
AccountService accountService, SplitRecordService splitRecordService,
|
|
AccountService accountService, SplitRecordService splitRecordService,
|
|
|
- MpMsgTemplateService mpMsgTemplateService) {
|
|
|
|
|
|
|
+ PayLogService payLogService, MpMsgTemplateService mpMsgTemplateService) {
|
|
|
this.washOrderService = washOrderService;
|
|
this.washOrderService = washOrderService;
|
|
|
this.walletDetailService = walletDetailService;
|
|
this.walletDetailService = walletDetailService;
|
|
|
this.accountService = accountService;
|
|
this.accountService = accountService;
|
|
|
this.splitRecordService = splitRecordService;
|
|
this.splitRecordService = splitRecordService;
|
|
|
|
|
+ this.payLogService = payLogService;
|
|
|
this.mpMsgTemplateService = mpMsgTemplateService;
|
|
this.mpMsgTemplateService = mpMsgTemplateService;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -93,6 +96,8 @@ public class OrderSettlementServiceImpl implements OrderSettlementService {
|
|
|
|
|
|
|
|
washOrderService.updateById(washOrder);
|
|
washOrderService.updateById(washOrder);
|
|
|
|
|
|
|
|
|
|
+ backfillUnattributedRecharges(washOrder.getUserId());
|
|
|
|
|
+
|
|
|
if (orderInfo.getAmount() == 0) {
|
|
if (orderInfo.getAmount() == 0) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
@@ -169,4 +174,50 @@ public class OrderSettlementServiceImpl implements OrderSettlementService {
|
|
|
splitRecordService.saveBatch(List.of(crossExpend, crossIncome));
|
|
splitRecordService.saveBatch(List.of(crossExpend, crossIncome));
|
|
|
log.info("订单:{},跨店分账完成", washOrder.getOrderId());
|
|
log.info("订单:{},跨店分账完成", washOrder.getOrderId());
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ private void backfillUnattributedRecharges(Long userId) {
|
|
|
|
|
+ var userStationId = KymCache.INSTANCE.getUserStationId(userId);
|
|
|
|
|
+ if (userStationId == null) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ var walletDetails = walletDetailService.lambdaQuery()
|
|
|
|
|
+ .eq(WalletDetail::getUserId, userId)
|
|
|
|
|
+ .eq(WalletDetail::getType, WalletDetail.TYPE_充值)
|
|
|
|
|
+ .eq(WalletDetail::getStatus, WalletDetail.STATUS_已确认)
|
|
|
|
|
+ .list();
|
|
|
|
|
+
|
|
|
|
|
+ if (walletDetails.isEmpty()) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ var outTradeNos = walletDetails.stream().map(WalletDetail::getOrderNo).toList();
|
|
|
|
|
+ var payLogs = payLogService.lambdaQuery().in(PayLog::getOutTradeNo, outTradeNos).list();
|
|
|
|
|
+ if (payLogs.isEmpty()) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ var allTxIds = payLogs.stream().map(PayLog::getTransactionId).collect(Collectors.toSet());
|
|
|
|
|
+ var existingTxIds = splitRecordService.lambdaQuery()
|
|
|
|
|
+ .in(SplitRecord::getTradeNo, allTxIds)
|
|
|
|
|
+ .eq(SplitRecord::getType, SplitRecord.TYPE_RECHARGE)
|
|
|
|
|
+ .list()
|
|
|
|
|
+ .stream()
|
|
|
|
|
+ .map(SplitRecord::getTradeNo)
|
|
|
|
|
+ .collect(Collectors.toSet());
|
|
|
|
|
+
|
|
|
|
|
+ for (var payLog : payLogs) {
|
|
|
|
|
+ if (!existingTxIds.contains(payLog.getTransactionId())) {
|
|
|
|
|
+ var splitRecord = new SplitRecord()
|
|
|
|
|
+ .setFromStationId(userStationId)
|
|
|
|
|
+ .setToStationId(userStationId)
|
|
|
|
|
+ .setTradeNo(payLog.getTransactionId())
|
|
|
|
|
+ .setAmount(payLog.getTotal())
|
|
|
|
|
+ .setType(SplitRecord.TYPE_RECHARGE);
|
|
|
|
|
+ splitRecordService.save(splitRecord);
|
|
|
|
|
+ log.info("追溯补建充值分账:用户={}, 站点={}, 交易号={}, 金额={}",
|
|
|
|
|
+ userId, userStationId, payLog.getTransactionId(), payLog.getTotal());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|