update 每日结算,改为订单结束结算
This commit is contained in:
@@ -219,33 +219,9 @@ public class OrderAndPayTask {
|
|||||||
Map<Long, List<LeaseOrderItem>> userMapItem = needPayInfos.stream()
|
Map<Long, List<LeaseOrderItem>> userMapItem = needPayInfos.stream()
|
||||||
.collect(Collectors.groupingBy(LeaseOrderItem::getOrderId));
|
.collect(Collectors.groupingBy(LeaseOrderItem::getOrderId));
|
||||||
|
|
||||||
List<LeasePayRecordMessageInfo> recordMessageInfoList = new ArrayList<>();
|
|
||||||
List<LeaseOrderItem> saleIngList = new ArrayList<>();
|
List<LeaseOrderItem> saleIngList = new ArrayList<>();
|
||||||
// 按照订单分组
|
// 按照订单分组
|
||||||
userMapItem.forEach((orderId, items) -> {
|
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) {
|
for (LeaseOrderItem item : items) {
|
||||||
BigDecimal realAmount = orderItemToPriceMap.get(item.getId());
|
BigDecimal realAmount = orderItemToPriceMap.get(item.getId());
|
||||||
BigDecimal practicalPower = orderIdToHashrateMap.get(item.getId());
|
BigDecimal practicalPower = orderIdToHashrateMap.get(item.getId());
|
||||||
@@ -256,24 +232,12 @@ public class OrderAndPayTask {
|
|||||||
item.setSettlePayRealAmount(item.getSettlePayRealAmount().add(realPayAmount));
|
item.setSettlePayRealAmount(item.getSettlePayRealAmount().add(realPayAmount));
|
||||||
item.setPracticalPower(item.getPracticalPower().add(practicalPower)
|
item.setPracticalPower(item.getPracticalPower().add(practicalPower)
|
||||||
.divide(BigDecimal.valueOf(2), 2, RoundingMode.HALF_UP));
|
.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);
|
saleIngList.add(item);
|
||||||
}
|
}
|
||||||
//实际支付金额即使为0也要记录
|
|
||||||
recordMessageInfoList.add(build);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//修改订单支付金额等相关信息
|
//修改订单支付金额等相关信息
|
||||||
leaseOrderItemService.updateBatchById(saleIngList);
|
leaseOrderItemService.updateBatchById(saleIngList);
|
||||||
//保存支付信息到支付记录表中
|
|
||||||
if (!recordMessageInfoList.isEmpty()){
|
|
||||||
leasePayRecordMessageInfoService.saveBatch(recordMessageInfoList);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//2.处理完成的订单 (订单部分完成)
|
//2.处理完成的订单 (订单部分完成)
|
||||||
if(!itemCompleteIds.isEmpty()){
|
if(!itemCompleteIds.isEmpty()){
|
||||||
@@ -796,92 +760,84 @@ public class OrderAndPayTask {
|
|||||||
* @param orderIds
|
* @param orderIds
|
||||||
*/
|
*/
|
||||||
public void sendMessageToMq(List<Long> 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));
|
||||||
|
|
||||||
// 合并后的处理
|
System.out.println("yyb-订单原始信息:"+JSONUtil.toJsonPrettyStr(leaseOrderItems));
|
||||||
Map<String, List<LeasePayRecordMessageInfo>> infoMap = new HashMap<>();
|
if (leaseOrderItems.isEmpty()){
|
||||||
Set<Long> shopIds = new HashSet<>();
|
return;
|
||||||
for (LeasePayRecordMessageInfo message : leasePayRecordMessages) {
|
|
||||||
// 处理分组逻辑
|
|
||||||
infoMap.computeIfAbsent(message.getOrderId(), k -> new ArrayList<>()).add(message);
|
|
||||||
// 收集shopId
|
|
||||||
shopIds.add(message.getShopId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//按订单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信息
|
//获取卖家邮箱和用户id信息
|
||||||
List<LeaseShop> leaseShops = leaseShopMapper.selectBatchIds(shopIds);
|
List<LeaseShop> leaseShops = leaseShopMapper.selectBatchIds(shopIds);
|
||||||
Map<Long, LeaseShop> sellerInfoMap = leaseShops.stream().collect(Collectors.toMap(LeaseShop::getId, Function.identity()));
|
Map<Long, LeaseShop> sellerInfoMap = leaseShops.stream().collect(Collectors.toMap(LeaseShop::getId, Function.identity()));
|
||||||
|
|
||||||
List<LeasePayRecordMessage> reocrdList = new ArrayList<>();
|
List<LeasePayRecordMessage> reocrdList = new ArrayList<>();
|
||||||
//遍历按订单id分组后的map
|
//遍历按订单id分组后的map
|
||||||
infoMap.forEach((orderId, payRecordMessagesList) -> {
|
orderItemMap.forEach((orderId, orderItemList) -> {
|
||||||
LeasePayRecordMessageInfo initForm = payRecordMessagesList.get(0);
|
LeaseOrderItem firstItem = orderItemList.get(0);
|
||||||
//long timestamp = System.currentTimeMillis()/1000;
|
LeaseOrderInfo orderInfo = orderInfoMap.get(orderId);
|
||||||
//RabbitmqPayAutoMessage build = RabbitmqPayAutoMessage.builder()
|
LeaseShop leaseShop = sellerInfoMap.get(firstItem.getShopId());
|
||||||
// .queue_id(initForm.getQueueId())
|
|
||||||
// .chain(initForm.getFromChain())
|
//计算该订单的总支付金额
|
||||||
// .symbol(initForm.getFromSymbol())
|
BigDecimal totalAmount = BigDecimal.ZERO;
|
||||||
// .from_address(initForm.getFromAddress())
|
BigDecimal totalBlockAmount = BigDecimal.ZERO;
|
||||||
// .to_address(initForm.getToAddress())
|
BigDecimal totalRealAmount = BigDecimal.ZERO;
|
||||||
// .fee(feeMap.get(orderId))
|
BigDecimal totalNeedAmount = BigDecimal.ZERO;
|
||||||
// .amount(BigDecimal.ZERO)
|
|
||||||
// .blockAmount(BigDecimal.ZERO)
|
for (LeaseOrderItem item : orderItemList) {
|
||||||
// .needAmount(BigDecimal.ZERO)
|
//理论支付金额 = 单价 * 数量 * 租期天数
|
||||||
// .timestamp(timestamp)
|
BigDecimal itemAmount = item.getPrice().multiply(BigDecimal.valueOf(item.getNumbers()))
|
||||||
// .sign(HashUtils.sha256(timestamp))
|
.multiply(BigDecimal.valueOf(item.getLeaseTime()));
|
||||||
// .build();
|
totalAmount = totalAmount.add(itemAmount);
|
||||||
LeaseShop leaseShop = sellerInfoMap.get(initForm.getShopId());
|
totalBlockAmount = totalBlockAmount.add(itemAmount);
|
||||||
|
//实际支付金额 = 累积的实际支付金额
|
||||||
|
totalRealAmount = totalRealAmount.add(item.getSettlePayRealAmount());
|
||||||
|
totalNeedAmount = totalNeedAmount.add(item.getSettlePayRealAmount());
|
||||||
|
}
|
||||||
|
|
||||||
LeasePayRecordMessage build = LeasePayRecordMessage.builder()
|
LeasePayRecordMessage build = LeasePayRecordMessage.builder()
|
||||||
.queueId(initForm.getQueueId())
|
.queueId(orderInfo.getOrderNumber())
|
||||||
.fromAddress(initForm.getFromAddress())
|
.fromAddress(firstItem.getFromAddress())
|
||||||
.toAddress(initForm.getToAddress())
|
.toAddress(firstItem.getAddress())
|
||||||
.orderNumber(initForm.getOrderNumber())
|
.orderNumber(orderInfo.getOrderNumber())
|
||||||
.orderId(orderId)
|
.orderId(String.valueOf(orderId))
|
||||||
.shopId(initForm.getShopId())
|
.shopId(firstItem.getShopId())
|
||||||
.userId(initForm.getUserId())
|
.userId(firstItem.getUserId())
|
||||||
.authId(initForm.getAuthId())
|
.authId(orderInfo.getAuthId())
|
||||||
.blockAmount(BigDecimal.ZERO)
|
.blockAmount(totalBlockAmount)
|
||||||
.amount(BigDecimal.ZERO)
|
.amount(totalAmount)
|
||||||
.realAmount(BigDecimal.ZERO)
|
.realAmount(totalRealAmount)
|
||||||
.needAmount(BigDecimal.ZERO)
|
.needAmount(totalNeedAmount)
|
||||||
.fromSymbol(initForm.getFromSymbol())
|
.fromSymbol(firstItem.getFromSymbol())
|
||||||
.fromChain(initForm.getFromChain())
|
.fromChain(firstItem.getFromChain())
|
||||||
.toSymbol(initForm.getToSymbol())
|
.toSymbol(firstItem.getSymbol())
|
||||||
.toChain(initForm.getToChain())
|
.toChain(firstItem.getChain())
|
||||||
.sellerId(leaseShop.getAuthId())
|
.sellerId(leaseShop.getAuthId())
|
||||||
.status(1)
|
.status(1)
|
||||||
.sellerEmail(leaseShop.getUserEmail())
|
.sellerEmail(leaseShop.getUserEmail())
|
||||||
.build();
|
.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);
|
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);
|
leasePayRecordMessageService.saveBatch(reocrdList);
|
||||||
|
System.out.println("yyb-订单信息合并前"+JSONUtil.toJsonPrettyStr(reocrdList));
|
||||||
// 合并修改条件相同数据
|
// 合并修改条件相同数据
|
||||||
List<LeasePayRecordMessage> mergedRecordList = mergePayRecordMessages(reocrdList);
|
List<LeasePayRecordMessage> mergedRecordList = mergePayRecordMessages(reocrdList);
|
||||||
|
System.out.println("yyb-订单信息合并后"+JSONUtil.toJsonPrettyStr(mergedRecordList));
|
||||||
//订单详情结算待结算金额
|
//订单详情结算待结算金额
|
||||||
leaseOrderItemMapper.updateSettleAmount(mergedRecordList);
|
leaseOrderItemMapper.updateSettleAmount(mergedRecordList);
|
||||||
int buyerUpdate = leaseUserWalletDataMapper.updateBalanceAndBlockBalance(mergedRecordList);
|
int buyerUpdate = leaseUserWalletDataMapper.updateBalanceAndBlockBalance(mergedRecordList);
|
||||||
|
|||||||
Reference in New Issue
Block a user