From 6681a33940c02c59a6f8e1540bfc11d2afb1c4dc Mon Sep 17 00:00:00 2001 From: yyb <1416014977@qq.com> Date: Tue, 20 Jan 2026 17:08:55 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E8=AE=A2=E5=8D=95=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=90=8E=EF=BC=8C=E5=BE=85=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E9=87=91=E9=A2=9D=EF=BC=8C=E6=9C=AA=E6=89=A3=E9=99=A4=EF=BC=8C?= =?UTF-8?q?=E5=B7=B2=E6=94=AF=E4=BB=98=E9=87=91=E9=A2=9D=E6=9C=AA=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/m2pool/lease/mq/MessageReceiver.java | 2 +- .../netty/handler/ServerChannelHandler.java | 67 ++++++++++++++----- .../m2pool/lease/task/OrderAndPayTask.java | 29 ++++---- 3 files changed, 68 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/m2pool/lease/mq/MessageReceiver.java b/src/main/java/com/m2pool/lease/mq/MessageReceiver.java index 76592c2..cafcf95 100644 --- a/src/main/java/com/m2pool/lease/mq/MessageReceiver.java +++ b/src/main/java/com/m2pool/lease/mq/MessageReceiver.java @@ -419,7 +419,7 @@ public class MessageReceiver { .id(leasePayWithdrawMessage.getId()) .amount(payWithdrawReturnMessage.getAmount().add(payWithdrawReturnMessage.getFee())) .status(payWithdrawReturnMessage.getStatus()) - .blockHeight(payWithdrawReturnMessage.getBlock_height()) + .blockHeight(payWithdrawReturnMessage.getBlock_height() != null ? payWithdrawReturnMessage.getBlock_height() : 0) .txHash(payWithdrawReturnMessage.getTx_hash()) .build()); } diff --git a/src/main/java/com/m2pool/lease/netty/handler/ServerChannelHandler.java b/src/main/java/com/m2pool/lease/netty/handler/ServerChannelHandler.java index 1ed325b..91ff846 100644 --- a/src/main/java/com/m2pool/lease/netty/handler/ServerChannelHandler.java +++ b/src/main/java/com/m2pool/lease/netty/handler/ServerChannelHandler.java @@ -56,6 +56,9 @@ public class ServerChannelHandler extends SimpleChannelInboundHandler item.setEffectTime(effectTime)); List realMachineList = needCheckInfo.get(false); - List tempMachineList = needCheckInfo.get(true); + List tempMachineList = needCheckInfo.get(true) != null ? needCheckInfo.get(true) : new ArrayList<>(); boolean realCheck = compare(needUpdateInfo, realMachineList); //主表信息和本次客户端发送消息不相同 + 并且临时表没有信息 if(!realCheck && tempMachineList.isEmpty()){ @@ -209,20 +213,24 @@ public class ServerChannelHandler extends SimpleChannelInboundHandler() - .eq(LeaseMachineTempConfig::getMachineId, machineId)); - leaseMachineTempConfigMapper.insertBatch(needUpdateInfo); - return; - } - //ABA - if (realCheck && !tempCheck){ - //删除临时表数据 - leaseMachineTempConfigMapper.delete(new LambdaQueryWrapper() - .eq(LeaseMachineTempConfig::getMachineId, machineId)); + + if (!tempMachineList.isEmpty()){ + boolean tempCheck = compare(needUpdateInfo, tempMachineList); + if (!realCheck && !tempCheck){ + //删除临时表数据 + 新增临时表数据 + leaseMachineTempConfigMapper.delete(new LambdaQueryWrapper() + .eq(LeaseMachineTempConfig::getMachineId, machineId)); + leaseMachineTempConfigMapper.insertBatch(needUpdateInfo); + return; + } + //ABA + if (realCheck && !tempCheck){ + //删除临时表数据 + leaseMachineTempConfigMapper.delete(new LambdaQueryWrapper() + .eq(LeaseMachineTempConfig::getMachineId, machineId)); + } } + }else{ //删除主表信息 + 新增主表数据 leaseMachineConfigService.remove(new LambdaUpdateWrapper() @@ -283,9 +291,34 @@ public class ServerChannelHandler extends SimpleChannelInboundHandler() + .select(LeaseOrderMining::getOrderId,LeaseOrderMining::getOrderItemId) + .eq(LeaseOrderMining::getWalletAddress, clientConfigurationMining.getWallet_address()) + .eq(LeaseOrderMining::getWorkerId, clientConfigurationMining.getWorker_id()) + ); + //1.1订单主表状态改为11矿池连接失败,订单已取消 和详情表 状态改为0 租约过期 + leaseOrderItemMapper.updateById(LeaseOrderItem.builder() + .id(leaseOrderMining.getOrderId()) + .status(0) + .build()); + leaseOrderInfoMapper.updateById(LeaseOrderInfo.builder() + .id(leaseOrderMining.getOrderId()) + .status(11) + .build()); + //TODO 1.2修改买家和卖家钱包余额 + + } } } diff --git a/src/main/java/com/m2pool/lease/task/OrderAndPayTask.java b/src/main/java/com/m2pool/lease/task/OrderAndPayTask.java index 15e3b7f..29985ac 100644 --- a/src/main/java/com/m2pool/lease/task/OrderAndPayTask.java +++ b/src/main/java/com/m2pool/lease/task/OrderAndPayTask.java @@ -140,8 +140,8 @@ public class OrderAndPayTask { } - @Scheduled(cron = "0 0/30 * * * ? ") - //@Scheduled(cron = "0 40 2 * * ? ") + @Scheduled(cron = "0 0/1 * * * ? ") + //@Scheduled(cron = "0 0/30 * * * ? ") @Async("scheduledTaskExecutor") @DSTransactional public void paymentTaskV2(){ @@ -252,6 +252,7 @@ public class OrderAndPayTask { //已支付金额 和实际待支付金额 item.setAlreadyPayAmount(item.getAlreadyPayAmount().add(item.getPrice().multiply(BigDecimal.valueOf(item.getNumbers())))); item.setSettlePayRealAmount(item.getSettlePayRealAmount().add(realPayAmount)); + item.setAlreadyPayRealAmount(item.getAlreadyPayRealAmount().add(realPayAmount)); //设置理论支付金额 和 冻结金额 额 (冻结金额 = 理论支付金额) build.setBlockAmount(build.getBlockAmount().add(item.getPrice().multiply(BigDecimal.valueOf(item.getNumbers())))); build.setAmount(build.getAmount().add(item.getPrice().multiply(BigDecimal.valueOf(item.getNumbers())))); @@ -302,10 +303,10 @@ public class OrderAndPayTask { for (LeaseOrderItem orderTimeInfoDto : oneDayApartOrder) { orderCompleteMap.putIfAbsent(orderTimeInfoDto.getOrderId(), true); // 计算订单结束时间(startTime + leaseTime天) - LocalDateTime endTime = orderTimeInfoDto.getCreateTime().plusDays(orderTimeInfoDto.getLeaseTime()); + //LocalDateTime endTime = orderTimeInfoDto.getCreateTime().plusDays(orderTimeInfoDto.getLeaseTime()); // 开发环境 测试用1分钟当一天 差值改为差1分钟 - //LocalDateTime endTime = orderTimeInfoDto.getCreateTime().plusMinutes(orderTimeInfoDto.getLeaseTime()); + LocalDateTime endTime = orderTimeInfoDto.getCreateTime().plusMinutes(orderTimeInfoDto.getLeaseTime() * 30); // 获取订单完成的订单详情:比较 now 和 endTime 的年月日时分秒差值是否小于30分 long minuteTime = Duration.between(now, endTime).toMinutes(); if (minuteTime <= 0) { @@ -326,14 +327,16 @@ public class OrderAndPayTask { LocalDate nowDate = now.toLocalDate(); LocalDate startDate = orderTimeInfoDto.getCreateTime().toLocalDate(); long minuteDate = Duration.between(startTime, nowTime).toMinutes(); - if (!nowDate.equals(startDate) && minuteDate <= 30 && minuteDate >= 0) { + //if (!nowDate.equals(startDate) && minuteDate <= 30 && minuteDate >= 0) { + // needPayIds.add(orderTimeInfoDto.getId()); + // needPayInfos.add(orderTimeInfoDto); + //} + //开发环境 + if ( minuteDate >= 30) { needPayIds.add(orderTimeInfoDto.getId()); needPayInfos.add(orderTimeInfoDto); } - //开发环境 - // needPayIds.add(orderTimeInfoDto.getId()); - // needPayInfos.add(orderTimeInfoDto); //记录某个订单下所有子项目是否都完成 orderCompleteMap.put(orderTimeInfoDto.getOrderId(), false); } @@ -346,6 +349,7 @@ public class OrderAndPayTask { ); } + private static Integer dataPoints = 6; /** * 获取各orderItemId 所需支付的金额 @@ -369,19 +373,19 @@ public class OrderAndPayTask { .collect(Collectors.toList()); // 补零到48个数据点 - while (ratios.size() < 48) { + while (ratios.size() < dataPoints) { ratios.add(BigDecimal.ZERO); } // 计算总和并除以48 BigDecimal finalValue = ratios.stream() .reduce(BigDecimal.ZERO, BigDecimal::add) - .divide(BigDecimal.valueOf(48), 2, RoundingMode.HALF_UP); - + .divide(BigDecimal.valueOf(dataPoints), 2, RoundingMode.HALF_UP); BigDecimal payAmount = itemInfo.getPrice() .multiply(BigDecimal.valueOf(itemInfo.getNumbers())); + if (finalValue.compareTo(BigDecimal.valueOf(0.95)) <= 0){ payAmount = payAmount.multiply(finalValue); } @@ -888,9 +892,10 @@ public class OrderAndPayTask { // 合并相同查询条件的记录,避免 SQL CASE WHEN 只执行第一条的问题 List mergedRecordList = mergePayRecordMessages(reocrdList); + //订单详情结算待结算金额 + leaseOrderItemMapper.updateSettleAmount(mergedRecordList); int buyerUpdate = leaseUserWalletDataMapper.updateBalanceAndBlockBalance(mergedRecordList); int sellerUpdate = leaseShopConfigMapper.updateBalance(mergedRecordList); - if (buyerUpdate > 0 || sellerUpdate > 0){ for (LeasePayRecordMessage item : reocrdList) { recordLog(item);