update 订单支付任务,优化部分修改业务

This commit is contained in:
yyb
2026-01-15 14:04:06 +08:00
parent 0af43f1000
commit 6e9beb5235
3 changed files with 17 additions and 39 deletions

View File

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

View File

@@ -98,22 +98,11 @@
</foreach> </foreach>
ELSE balance ELSE balance
END END
WHERE pay_address IN ( WHERE (pay_address,pay_coin,chain) IN(
<foreach collection="list" item="item" separator=","> <foreach collection="list" item="item" separator=",">
#{item.fromAddress} (#{item.fromAddress}, #{item.fromSymbol}, #{item.fromChain})
</foreach> </foreach>
) ) AND del = false
AND pay_coin IN (
<foreach collection="list" item="item" separator=",">
#{item.fromSymbol}
</foreach>
)
AND chain IN (
<foreach collection="list" item="item" separator=",">
#{item.fromChain}
</foreach>
)
AND del = false
</update> </update>

View File

@@ -123,19 +123,9 @@
</foreach> </foreach>
ELSE blocked_balance ELSE blocked_balance
END END
WHERE from_address IN ( WHERE (from_address, from_symbol, from_chain) IN (
<foreach collection="list" item="item" separator=","> <foreach collection="list" item="item" separator=",">
#{item.fromAddress} (#{item.fromAddress}, #{item.fromSymbol}, #{item.fromChain})
</foreach>
)
AND from_symbol IN (
<foreach collection="list" item="item" separator=",">
#{item.fromSymbol}
</foreach>
)
AND from_chain IN (
<foreach collection="list" item="item" separator=",">
#{item.fromChain}
</foreach> </foreach>
) )
AND del = false AND del = false