update 每日结算,改为订单结束结算
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user