update 每日结算,改为订单结束结算

This commit is contained in:
yyb
2026-01-22 15:58:32 +08:00
parent b5931e81d4
commit d2b041fdc8

View File

@@ -219,33 +219,9 @@ public class OrderAndPayTask {
Map<Long, List<LeaseOrderItem>> userMapItem = needPayInfos.stream()
.collect(Collectors.groupingBy(LeaseOrderItem::getOrderId));
List<LeasePayRecordMessageInfo> recordMessageInfoList = new ArrayList<>();
List<LeaseOrderItem> saleIngList = new ArrayList<>();
// 按照订单分组
userMapItem.forEach((orderId, items) -> {
LeaseOrderItem leaseOrderItem = items.get(0);
//因为同一个订单的queueId相同所以这里直接使用订单id
LeaseOrderInfo orderInfo = queueIdMap.get(orderId);
//买方信息
LeasePayRecordMessageInfo build = LeasePayRecordMessageInfo.builder()
.orderId(String.valueOf(orderId))
.orderNumber(orderInfo.getOrderNumber())
.queueId(orderInfo.getOrderNumber())
.fromAddress(leaseOrderItem.getFromAddress())
.toAddress(leaseOrderItem.getAddress())
.amount(BigDecimal.ZERO)
.realAmount(BigDecimal.ZERO)
.needAmount(BigDecimal.ZERO)
.blockAmount(BigDecimal.ZERO)
.fromChain(leaseOrderItem.getChain())
.fromSymbol(leaseOrderItem.getSymbol())
.shopId(leaseOrderItem.getShopId())
.userId(leaseOrderItem.getUserId())
.toChain(leaseOrderItem.getChain())
.toSymbol(leaseOrderItem.getSymbol())
.authId(orderInfo.getAuthId())
.build();
for (LeaseOrderItem item : items) {
BigDecimal realAmount = orderItemToPriceMap.get(item.getId());
BigDecimal practicalPower = orderIdToHashrateMap.get(item.getId());
@@ -256,24 +232,12 @@ public class OrderAndPayTask {
item.setSettlePayRealAmount(item.getSettlePayRealAmount().add(realPayAmount));
item.setPracticalPower(item.getPracticalPower().add(practicalPower)
.divide(BigDecimal.valueOf(2), 2, RoundingMode.HALF_UP));
//设置理论支付金额 和 冻结金额 额 (冻结金额 = 理论支付金额)
build.setBlockAmount(build.getBlockAmount().add(item.getPrice().multiply(BigDecimal.valueOf(item.getNumbers()))));
build.setAmount(build.getAmount().add(item.getPrice().multiply(BigDecimal.valueOf(item.getNumbers()))));
// 实际支付金额 + 理论实际应支付金额
build.setRealAmount(build.getRealAmount().add(realPayAmount));
build.setNeedAmount(build.getNeedAmount().add(realPayAmount));
saleIngList.add(item);
}
//实际支付金额即使为0也要记录
recordMessageInfoList.add(build);
});
//修改订单支付金额等相关信息
leaseOrderItemService.updateBatchById(saleIngList);
//保存支付信息到支付记录表中
if (!recordMessageInfoList.isEmpty()){
leasePayRecordMessageInfoService.saveBatch(recordMessageInfoList);
}
}
//2.处理完成的订单 (订单部分完成)
if(!itemCompleteIds.isEmpty()){
@@ -796,92 +760,84 @@ public class OrderAndPayTask {
* @param orderIds
*/
public void sendMessageToMq(List<Long> orderIds){
List<LeasePayRecordMessageInfo> leasePayRecordMessages = leasePayRecordMessageInfoService.list(new LambdaQueryWrapper<LeasePayRecordMessageInfo>()
.in(LeasePayRecordMessageInfo::getOrderId, orderIds));
//从订单详情表查询所有订单项
List<LeaseOrderItem> leaseOrderItems = leaseOrderItemMapper.selectList(new LambdaQueryWrapper<LeaseOrderItem>()
.in(LeaseOrderItem::getOrderId, orderIds));
// 合并后的处理
Map<String, List<LeasePayRecordMessageInfo>> infoMap = new HashMap<>();
Set<Long> shopIds = new HashSet<>();
for (LeasePayRecordMessageInfo message : leasePayRecordMessages) {
// 处理分组逻辑
infoMap.computeIfAbsent(message.getOrderId(), k -> new ArrayList<>()).add(message);
// 收集shopId
shopIds.add(message.getShopId());
System.out.println("yyb-订单原始信息:"+JSONUtil.toJsonPrettyStr(leaseOrderItems));
if (leaseOrderItems.isEmpty()){
return;
}
//按订单ID分组
Map<Long, List<LeaseOrderItem>> orderItemMap = leaseOrderItems.stream()
.collect(Collectors.groupingBy(LeaseOrderItem::getOrderId));
//获取订单信息
List<LeaseOrderInfo> leaseOrderInfos = leaseOrderInfoMapper.selectList(new LambdaQueryWrapper<LeaseOrderInfo>()
.in(LeaseOrderInfo::getId, orderIds));
Map<Long, LeaseOrderInfo> orderInfoMap = leaseOrderInfos.stream()
.collect(Collectors.toMap(LeaseOrderInfo::getId, Function.identity()));
//收集shopId
Set<Long> shopIds = leaseOrderItems.stream().map(LeaseOrderItem::getShopId).collect(Collectors.toSet());
//获取卖家邮箱和用户id信息
List<LeaseShop> leaseShops = leaseShopMapper.selectBatchIds(shopIds);
Map<Long, LeaseShop> sellerInfoMap = leaseShops.stream().collect(Collectors.toMap(LeaseShop::getId, Function.identity()));
List<LeasePayRecordMessage> reocrdList = new ArrayList<>();
//遍历按订单id分组后的map
infoMap.forEach((orderId, payRecordMessagesList) -> {
LeasePayRecordMessageInfo initForm = payRecordMessagesList.get(0);
//long timestamp = System.currentTimeMillis()/1000;
//RabbitmqPayAutoMessage build = RabbitmqPayAutoMessage.builder()
// .queue_id(initForm.getQueueId())
// .chain(initForm.getFromChain())
// .symbol(initForm.getFromSymbol())
// .from_address(initForm.getFromAddress())
// .to_address(initForm.getToAddress())
// .fee(feeMap.get(orderId))
// .amount(BigDecimal.ZERO)
// .blockAmount(BigDecimal.ZERO)
// .needAmount(BigDecimal.ZERO)
// .timestamp(timestamp)
// .sign(HashUtils.sha256(timestamp))
// .build();
LeaseShop leaseShop = sellerInfoMap.get(initForm.getShopId());
orderItemMap.forEach((orderId, orderItemList) -> {
LeaseOrderItem firstItem = orderItemList.get(0);
LeaseOrderInfo orderInfo = orderInfoMap.get(orderId);
LeaseShop leaseShop = sellerInfoMap.get(firstItem.getShopId());
//计算该订单的总支付金额
BigDecimal totalAmount = BigDecimal.ZERO;
BigDecimal totalBlockAmount = BigDecimal.ZERO;
BigDecimal totalRealAmount = BigDecimal.ZERO;
BigDecimal totalNeedAmount = BigDecimal.ZERO;
for (LeaseOrderItem item : orderItemList) {
//理论支付金额 = 单价 * 数量 * 租期天数
BigDecimal itemAmount = item.getPrice().multiply(BigDecimal.valueOf(item.getNumbers()))
.multiply(BigDecimal.valueOf(item.getLeaseTime()));
totalAmount = totalAmount.add(itemAmount);
totalBlockAmount = totalBlockAmount.add(itemAmount);
//实际支付金额 = 累积的实际支付金额
totalRealAmount = totalRealAmount.add(item.getSettlePayRealAmount());
totalNeedAmount = totalNeedAmount.add(item.getSettlePayRealAmount());
}
LeasePayRecordMessage build = LeasePayRecordMessage.builder()
.queueId(initForm.getQueueId())
.fromAddress(initForm.getFromAddress())
.toAddress(initForm.getToAddress())
.orderNumber(initForm.getOrderNumber())
.orderId(orderId)
.shopId(initForm.getShopId())
.userId(initForm.getUserId())
.authId(initForm.getAuthId())
.blockAmount(BigDecimal.ZERO)
.amount(BigDecimal.ZERO)
.realAmount(BigDecimal.ZERO)
.needAmount(BigDecimal.ZERO)
.fromSymbol(initForm.getFromSymbol())
.fromChain(initForm.getFromChain())
.toSymbol(initForm.getToSymbol())
.toChain(initForm.getToChain())
.queueId(orderInfo.getOrderNumber())
.fromAddress(firstItem.getFromAddress())
.toAddress(firstItem.getAddress())
.orderNumber(orderInfo.getOrderNumber())
.orderId(String.valueOf(orderId))
.shopId(firstItem.getShopId())
.userId(firstItem.getUserId())
.authId(orderInfo.getAuthId())
.blockAmount(totalBlockAmount)
.amount(totalAmount)
.realAmount(totalRealAmount)
.needAmount(totalNeedAmount)
.fromSymbol(firstItem.getFromSymbol())
.fromChain(firstItem.getFromChain())
.toSymbol(firstItem.getSymbol())
.toChain(firstItem.getChain())
.sellerId(leaseShop.getAuthId())
.status(1)
.sellerEmail(leaseShop.getUserEmail())
.build();
for (LeasePayRecordMessageInfo leasePayRecordMessage : payRecordMessagesList) {
build.setAmount(build.getAmount().add(leasePayRecordMessage.getAmount()));
build.setBlockAmount(build.getBlockAmount().add(leasePayRecordMessage.getBlockAmount()));
//现在可以删除NeedAmount这个字段了.新版本不存在需支付真实金额和实际支付真实金额不同的情况
build.setNeedAmount(build.getNeedAmount().add(leasePayRecordMessage.getNeedAmount()));
build.setRealAmount(build.getRealAmount().add(leasePayRecordMessage.getRealAmount()));
}
reocrdList.add(build);
//旧版本
//订单全部完成后不再需要发送支付信息,直接从买家钱包转账到卖家钱包
//try {
// rabbitTemplate.convertAndSend(PAY_AUTO_QUEUE, build);
//}catch (Exception e){
// //设置状态为消息发送失败
// build1.setStatus(4);
// System.out.println("消息发送失败"+e.getMessage());
//}finally {
// reocrdList.add(build1);
//}
//新版本:买家钱包 冻结余额和余额减少 卖家钱包余额增加
});
leasePayRecordMessageService.saveBatch(reocrdList);
System.out.println("yyb-订单信息合并前"+JSONUtil.toJsonPrettyStr(reocrdList));
// 合并修改条件相同数据
List<LeasePayRecordMessage> mergedRecordList = mergePayRecordMessages(reocrdList);
System.out.println("yyb-订单信息合并后"+JSONUtil.toJsonPrettyStr(mergedRecordList));
//订单详情结算待结算金额
leaseOrderItemMapper.updateSettleAmount(mergedRecordList);
int buyerUpdate = leaseUserWalletDataMapper.updateBalanceAndBlockBalance(mergedRecordList);