diff --git a/src/main/java/com/m2pool/lease/task/OrderAndPayTask.java b/src/main/java/com/m2pool/lease/task/OrderAndPayTask.java index 85a5fec..15e3b7f 100644 --- a/src/main/java/com/m2pool/lease/task/OrderAndPayTask.java +++ b/src/main/java/com/m2pool/lease/task/OrderAndPayTask.java @@ -141,6 +141,7 @@ public class OrderAndPayTask { } @Scheduled(cron = "0 0/30 * * * ? ") + //@Scheduled(cron = "0 40 2 * * ? ") @Async("scheduledTaskExecutor") @DSTransactional public void paymentTaskV2(){ @@ -181,10 +182,10 @@ public class OrderAndPayTask { needPayInfos = updateOrderItemSellerWalletAddress(needPayInfos); //1.处理需要支付的订单 - //根据 lease_order_item 中订单id 查找到 对应的lease_order_mining 信息 - List miningInfoByOrderId = leaseOrderMiningMapper.getMiningInfoByOrderId(needPayIds); //根据lease_order_mining 中相关信息 钱包 + 币种 + 算法 + 矿工号 + 矿池名 找到对应的实时算力 - if (!miningInfoByOrderId.isEmpty()){ + if (!needPayIds.isEmpty()){ + //根据 lease_order_item 中订单id 查找到 对应的lease_order_mining 信息 + List miningInfoByOrderId = leaseOrderMiningMapper.getMiningInfoByOrderId(needPayIds); Map> collect = miningInfoByOrderId.stream().collect(Collectors.groupingBy(PurchasedMachineListDto::getPool)); //挖矿信息 与 订单详情id 映射 @@ -306,7 +307,8 @@ public class OrderAndPayTask { // 开发环境 测试用1分钟当一天 差值改为差1分钟 //LocalDateTime endTime = orderTimeInfoDto.getCreateTime().plusMinutes(orderTimeInfoDto.getLeaseTime()); // 获取订单完成的订单详情:比较 now 和 endTime 的年月日时分秒差值是否小于30分 - if (Duration.between(now, endTime).toMinutes() <= 30) { + long minuteTime = Duration.between(now, endTime).toMinutes(); + if (minuteTime <= 0) { completeMachines.add(LeaseMachine.builder() .id(orderTimeInfoDto.getProductMachineId()) .canSaleNumbers(orderTimeInfoDto.getNumbers()) @@ -323,8 +325,8 @@ public class OrderAndPayTask { LocalTime startTime = orderTimeInfoDto.getCreateTime().toLocalTime(); LocalDate nowDate = now.toLocalDate(); LocalDate startDate = orderTimeInfoDto.getCreateTime().toLocalDate(); - - if (!nowDate.equals(startDate) && Duration.between(startTime, nowTime).toMinutes() <= 30) { + long minuteDate = Duration.between(startTime, nowTime).toMinutes(); + if (!nowDate.equals(startDate) && minuteDate <= 30 && minuteDate >= 0) { needPayIds.add(orderTimeInfoDto.getId()); needPayInfos.add(orderTimeInfoDto); } @@ -427,8 +429,6 @@ public class OrderAndPayTask { leaseOrderItemMapper.update(LeaseOrderItem.builder().status(0).build(), new LambdaUpdateWrapper() .in(LeaseOrderItem::getId, itemIds)); //修改商品库存矿机表 矿机状态为 0 未售出 - System.out.println("打印"+JSONUtil.toJsonPrettyStr(completeMachines)); - // 合并相同 id 的机器,避免 SQL CASE WHEN 只执行第一条的问题 List mergedMachines = mergeMachines(completeMachines); leaseMachineMapper.updateBatchSaleNumbers(mergedMachines); //挖矿订单信息 改为状态0 租约已过期 @@ -807,7 +807,7 @@ public class OrderAndPayTask { // 合并后的处理 Map> infoMap = new HashMap<>(); - List shopIds = new ArrayList<>(); + Set shopIds = new HashSet<>(); for (LeasePayRecordMessageInfo message : leasePayRecordMessages) { // 处理分组逻辑 infoMap.computeIfAbsent(message.getOrderId(), k -> new ArrayList<>()).add(message); @@ -884,7 +884,6 @@ public class OrderAndPayTask { }); - System.out.println("部分完成"+JSONUtil.toJsonPrettyStr(reocrdList)); leasePayRecordMessageService.saveBatch(reocrdList); // 合并相同查询条件的记录,避免 SQL CASE WHEN 只执行第一条的问题 @@ -892,7 +891,7 @@ public class OrderAndPayTask { int buyerUpdate = leaseUserWalletDataMapper.updateBalanceAndBlockBalance(mergedRecordList); int sellerUpdate = leaseShopConfigMapper.updateBalance(mergedRecordList); - if (buyerUpdate > 0 && sellerUpdate > 0){ + if (buyerUpdate > 0 || sellerUpdate > 0){ for (LeasePayRecordMessage item : reocrdList) { recordLog(item); } diff --git a/src/main/resources/mapper/lease/LeaseShopConfigMapper.xml b/src/main/resources/mapper/lease/LeaseShopConfigMapper.xml index 7ca8107..342dd0b 100644 --- a/src/main/resources/mapper/lease/LeaseShopConfigMapper.xml +++ b/src/main/resources/mapper/lease/LeaseShopConfigMapper.xml @@ -98,22 +98,11 @@ ELSE balance END - WHERE pay_address IN ( - - #{item.fromAddress} - - ) - AND pay_coin IN ( - - #{item.fromSymbol} - - ) - AND chain IN ( - - #{item.fromChain} - - ) - AND del = false + WHERE (pay_address,pay_coin,chain) IN( + + (#{item.fromAddress}, #{item.fromSymbol}, #{item.fromChain}) + + ) AND del = false diff --git a/src/main/resources/mapper/lease/LeaseUserWalletDataMapper.xml b/src/main/resources/mapper/lease/LeaseUserWalletDataMapper.xml index e5d457a..0e4d9c4 100644 --- a/src/main/resources/mapper/lease/LeaseUserWalletDataMapper.xml +++ b/src/main/resources/mapper/lease/LeaseUserWalletDataMapper.xml @@ -123,19 +123,9 @@ ELSE blocked_balance END - WHERE from_address IN ( + WHERE (from_address, from_symbol, from_chain) IN ( - #{item.fromAddress} - - ) - AND from_symbol IN ( - - #{item.fromSymbol} - - ) - AND from_chain IN ( - - #{item.fromChain} + (#{item.fromAddress}, #{item.fromSymbol}, #{item.fromChain}) ) AND del = false