update 修复生成订单,钱包未校验问题

This commit is contained in:
yyb
2026-01-12 14:50:13 +08:00
parent 267c79152c
commit e88ee6357b
5 changed files with 96 additions and 42 deletions

View File

@@ -905,8 +905,11 @@ public class LeaseOrderInfoServiceImpl extends ServiceImpl<LeaseOrderInfoMapper,
}
//修改ASIC 矿机出售数量
if (!asicMachines.isEmpty()){
int asicUpdate = leaseMachineMapper.updateLockNumbers(asicMachines);
i += asicUpdate;
// 合并相同 id 的机器,避免 SQL CASE WHEN 只执行第一条的问题
List<LeaseMachine> mergedAsicMachines = mergeMachines(asicMachines);
System.out.println("打印"+JSONUtil.toJsonPrettyStr(mergedAsicMachines));
leaseMachineMapper.updateBatchLockNumbers(mergedAsicMachines);
i += asicMachines.size();
}
if (i != machineIds.size()){
throw new OrderException("订单中已有商品售出,请刷新购物车删除已售出商品,重新结算生成订单");
@@ -915,8 +918,11 @@ public class LeaseOrderInfoServiceImpl extends ServiceImpl<LeaseOrderInfoMapper,
//if(!checkGpuMachine(gpuMachines)){
// throw new OrderException("购买的GPU商品中,存在客户端不在线的矿机!");
//}
//发送消息
//gpu矿机处理 发送消息
sendMessageToClientAndInsertPurchasedMachine(SecurityUtils.getUserId(),userEmail,gpuMachines,orderMiningInfoDtoList,endMiningMap,machineOrderIdMap,machineOrderItemIdMap);
//TODO asic 矿机处理
return Result.success("订单生成成功");
}
@@ -971,7 +977,7 @@ public class LeaseOrderInfoServiceImpl extends ServiceImpl<LeaseOrderInfoMapper,
StringBuilder errors = new StringBuilder();
String addressVerify = "";
List<OrderMiningInfoDto> addressInfos = new ArrayList();
if(!orderMiningInfoDtos.isEmpty()){
Map<String, List<OrderMiningInfoDto>> collect = orderMiningInfoDtos.stream().collect(Collectors.groupingBy(OrderMiningInfoDto::getWalletAddress));
collect.forEach((address,list)->{
@@ -980,14 +986,13 @@ public class LeaseOrderInfoServiceImpl extends ServiceImpl<LeaseOrderInfoMapper,
errors.append(orderMiningInfoDto.getWorkerId()).append(" ");
}
errors.append("请重新输入矿工号\n");
addressInfos.add(list.get(0));
});
}
if (StringUtils.isNotEmpty(errors.toString())){
return errors.toString();
}
for (OrderMiningInfoDto addressInfo : addressInfos) {
for (OrderMiningInfoDto addressInfo : orderMiningInfoDtoList) {
if (!WalletRuleCheckUtils.checkAddress(addressInfo.getCoin(),addressInfo.getWalletAddress())){
addressVerify = addressInfo.getWalletAddress() + "钱包地址格式错误";
break;
@@ -1122,4 +1127,35 @@ public class LeaseOrderInfoServiceImpl extends ServiceImpl<LeaseOrderInfoMapper,
info.setPurchasedMachines(list);
return Result.success(info);
}
/**
* 合并相同 id 的机器,避免 SQL CASE WHEN 只执行第一条的问题
* @param machines 机器列表
* @return 合并后的机器列表
*/
private List<LeaseMachine> mergeMachines(List<LeaseMachine> machines) {
if (machines == null || machines.isEmpty()) {
return new ArrayList<>();
}
return new ArrayList<>(machines.stream()
.collect(Collectors.groupingBy(
LeaseMachine::getId,
Collectors.collectingAndThen(
Collectors.toList(),
list -> {
LeaseMachine merged = list.get(0);
Integer totalSaleOutNumbers = list.stream()
.mapToInt(m -> m.getSaleOutNumbers() != null ? m.getSaleOutNumbers() : 0)
.sum();
Integer totalCanSaleNumbers = list.stream()
.mapToInt(m -> m.getCanSaleNumbers() != null ? m.getCanSaleNumbers() : 0)
.sum();
merged.setSaleOutNumbers(totalSaleOutNumbers);
merged.setCanSaleNumbers(totalCanSaleNumbers);
return merged;
}
)
))
.values());
}
}