update 修复生成订单,钱包未校验问题
This commit is contained in:
@@ -99,13 +99,12 @@ public interface LeaseMachineMapper extends BaseMapper<LeaseMachine> {
|
||||
*/
|
||||
int updateLockState(@Param("list") List<LeaseMachine> asicMachines);
|
||||
|
||||
|
||||
/**
|
||||
* 修改asic 矿机售出数量
|
||||
* @param gpuMachines
|
||||
* @param list
|
||||
* @return
|
||||
*/
|
||||
int updateLockNumbers(@Param("list") List<LeaseMachine> gpuMachines);
|
||||
boolean updateBatchLockNumbers(@Param("list") List<LeaseMachine> list);
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -769,26 +769,28 @@ public class OrderAndPayTask {
|
||||
.chain(LeaseOrderItem.getChain()).build())
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
//查询到对应商铺对应的 chain 然后比较上面的链对应的地址是否改变
|
||||
List<ShopConfigDelDto> shopConfigList = leaseShopConfigMapper.selectShopConfigByShopIdAndSymbolAndChain(collect);
|
||||
List<LeaseOrderItem> updateOrderItemList = new ArrayList<>();
|
||||
// 遍历 orderItemList
|
||||
for (LeaseOrderItem orderItem : orderItemList) {
|
||||
for (ShopConfigDelDto shopConfig : shopConfigList) {
|
||||
// 检查 chain 和 shopId 是否相同
|
||||
if (orderItem.getShopId().equals(shopConfig.getShopId()) &&
|
||||
orderItem.getChain().equals(shopConfig.getChain())) {
|
||||
// 检查 address 是否不同
|
||||
if (!orderItem.getAddress().equals(shopConfig.getPayAddress())) {
|
||||
// 更新 orderItem 的 address
|
||||
orderItem.setAddress(shopConfig.getPayAddress());
|
||||
updateOrderItemList.add(orderItem);
|
||||
if (!collect.isEmpty()){
|
||||
//查询到对应商铺对应的 chain 然后比较上面的链对应的地址是否改变
|
||||
List<ShopConfigDelDto> shopConfigList = leaseShopConfigMapper.selectShopConfigByShopIdAndSymbolAndChain(collect);
|
||||
// 遍历 orderItemList
|
||||
for (LeaseOrderItem orderItem : orderItemList) {
|
||||
for (ShopConfigDelDto shopConfig : shopConfigList) {
|
||||
// 检查 chain 和 shopId 是否相同
|
||||
if (orderItem.getShopId().equals(shopConfig.getShopId()) &&
|
||||
orderItem.getChain().equals(shopConfig.getChain())) {
|
||||
// 检查 address 是否不同
|
||||
if (!orderItem.getAddress().equals(shopConfig.getPayAddress())) {
|
||||
// 更新 orderItem 的 address
|
||||
orderItem.setAddress(shopConfig.getPayAddress());
|
||||
updateOrderItemList.add(orderItem);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
leaseOrderItemService.updateBatchById(updateOrderItemList);
|
||||
}
|
||||
leaseOrderItemService.updateBatchById(updateOrderItemList);
|
||||
return orderItemList;
|
||||
|
||||
}
|
||||
@@ -796,7 +798,7 @@ public class OrderAndPayTask {
|
||||
|
||||
|
||||
/**
|
||||
*订单完成后---发送支付消息到mq 一个买家对应一个卖家
|
||||
*订单全部已完成
|
||||
* @param orderIds
|
||||
*/
|
||||
public void sendMessageToMq(List<Long> orderIds){
|
||||
|
||||
@@ -149,8 +149,8 @@ public class WalletRuleCheckUtils {
|
||||
}
|
||||
|
||||
// ---------------NEXA校验-------------------
|
||||
private static final Pattern NEXA_PATTERN = Pattern.compile("^nexa:[0-9a-zA-Z]{40}$");
|
||||
private static final Pattern NEXA_PATTERN2 = Pattern.compile("^[0-9a-zA-Z]{40}$");
|
||||
private static final Pattern NEXA_PATTERN = Pattern.compile("^nexa:[0-9a-zA-Z]{48}$");
|
||||
private static final Pattern NEXA_PATTERN2 = Pattern.compile("^[0-9a-zA-Z]{48}$");
|
||||
public static boolean checkNEXA(String address) {
|
||||
if (address.startsWith("nexa:")){
|
||||
return StringUtils.isNotEmpty(address) && NEXA_PATTERN.matcher(address).matches();
|
||||
@@ -177,6 +177,6 @@ public class WalletRuleCheckUtils {
|
||||
return StringUtils.isNotEmpty( address) && CLORE_PATTERN.matcher(address).matches();
|
||||
}
|
||||
public static void main(String[] args) {
|
||||
|
||||
System.out.println(checkNEXA("0x550de999a4d8bd33dc5856d80ea3d196eac97427"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -349,20 +349,6 @@
|
||||
</foreach>
|
||||
and sale_state = 0
|
||||
</update>
|
||||
<update id="updateLockNumbers">
|
||||
<foreach collection="list" item="item" separator=";">
|
||||
UPDATE lease_machine
|
||||
SET
|
||||
sale_out_numbers = #{item.saleOutNumbers},
|
||||
sale_state = CASE WHEN #{item.saleOutNumbers} = sale_numbers THEN 1 ELSE sale_state END,
|
||||
can_sale_numbers = #{item.canSaleNumbers}
|
||||
WHERE
|
||||
id = #{item.id}
|
||||
AND sale_out_numbers = #{item.lockNumbers}
|
||||
</foreach>
|
||||
</update>
|
||||
|
||||
|
||||
<select id="getCoinAndAlgoById" resultType="com.m2pool.lease.dto.v2.MiningConfigDto">
|
||||
select
|
||||
id,
|
||||
@@ -480,6 +466,37 @@
|
||||
)
|
||||
</update>
|
||||
|
||||
<update id="updateBatchLockNumbers">
|
||||
UPDATE lease_machine
|
||||
SET
|
||||
sale_out_numbers = CASE
|
||||
<foreach collection="list" item="item">
|
||||
WHEN id = #{item.id} AND sale_out_numbers = #{item.lockNumbers}
|
||||
THEN sale_out_numbers + #{item.saleOutNumbers}
|
||||
</foreach>
|
||||
ELSE sale_out_numbers
|
||||
END,
|
||||
can_sale_numbers = CASE
|
||||
<foreach collection="list" item="item">
|
||||
WHEN id = #{item.id} AND sale_out_numbers = #{item.lockNumbers}
|
||||
THEN can_sale_numbers - #{item.canSaleNumbers}
|
||||
</foreach>
|
||||
ELSE can_sale_numbers
|
||||
END,
|
||||
sale_state = CASE
|
||||
<foreach collection="list" item="item">
|
||||
WHEN id = #{item.id} AND sale_out_numbers = #{item.lockNumbers}
|
||||
THEN CASE WHEN (sale_out_numbers + #{item.saleOutNumbers}) >= sale_numbers THEN 1 ELSE sale_state END
|
||||
</foreach>
|
||||
ELSE sale_state
|
||||
END
|
||||
WHERE id IN (
|
||||
<foreach collection="list" item="item" separator=",">
|
||||
#{item.id}
|
||||
</foreach>
|
||||
)
|
||||
</update>
|
||||
|
||||
<select id="checkHasSaleMachineByShopId" resultType="java.lang.Integer">
|
||||
SELECT
|
||||
COUNT(*)
|
||||
|
||||
Reference in New Issue
Block a user