update 修复生成订单,钱包未校验问题
This commit is contained in:
@@ -99,13 +99,12 @@ public interface LeaseMachineMapper extends BaseMapper<LeaseMachine> {
|
|||||||
*/
|
*/
|
||||||
int updateLockState(@Param("list") List<LeaseMachine> asicMachines);
|
int updateLockState(@Param("list") List<LeaseMachine> asicMachines);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改asic 矿机售出数量
|
* 修改asic 矿机售出数量
|
||||||
* @param gpuMachines
|
* @param list
|
||||||
* @return
|
* @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 矿机出售数量
|
//修改ASIC 矿机出售数量
|
||||||
if (!asicMachines.isEmpty()){
|
if (!asicMachines.isEmpty()){
|
||||||
int asicUpdate = leaseMachineMapper.updateLockNumbers(asicMachines);
|
// 合并相同 id 的机器,避免 SQL CASE WHEN 只执行第一条的问题
|
||||||
i += asicUpdate;
|
List<LeaseMachine> mergedAsicMachines = mergeMachines(asicMachines);
|
||||||
|
System.out.println("打印"+JSONUtil.toJsonPrettyStr(mergedAsicMachines));
|
||||||
|
leaseMachineMapper.updateBatchLockNumbers(mergedAsicMachines);
|
||||||
|
i += asicMachines.size();
|
||||||
}
|
}
|
||||||
if (i != machineIds.size()){
|
if (i != machineIds.size()){
|
||||||
throw new OrderException("订单中已有商品售出,请刷新购物车删除已售出商品,重新结算生成订单");
|
throw new OrderException("订单中已有商品售出,请刷新购物车删除已售出商品,重新结算生成订单");
|
||||||
@@ -915,8 +918,11 @@ public class LeaseOrderInfoServiceImpl extends ServiceImpl<LeaseOrderInfoMapper,
|
|||||||
//if(!checkGpuMachine(gpuMachines)){
|
//if(!checkGpuMachine(gpuMachines)){
|
||||||
// throw new OrderException("购买的GPU商品中,存在客户端不在线的矿机!");
|
// throw new OrderException("购买的GPU商品中,存在客户端不在线的矿机!");
|
||||||
//}
|
//}
|
||||||
//发送消息
|
//gpu矿机处理 发送消息
|
||||||
sendMessageToClientAndInsertPurchasedMachine(SecurityUtils.getUserId(),userEmail,gpuMachines,orderMiningInfoDtoList,endMiningMap,machineOrderIdMap,machineOrderItemIdMap);
|
sendMessageToClientAndInsertPurchasedMachine(SecurityUtils.getUserId(),userEmail,gpuMachines,orderMiningInfoDtoList,endMiningMap,machineOrderIdMap,machineOrderItemIdMap);
|
||||||
|
|
||||||
|
//TODO asic 矿机处理
|
||||||
|
|
||||||
return Result.success("订单生成成功");
|
return Result.success("订单生成成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -971,7 +977,7 @@ public class LeaseOrderInfoServiceImpl extends ServiceImpl<LeaseOrderInfoMapper,
|
|||||||
|
|
||||||
StringBuilder errors = new StringBuilder();
|
StringBuilder errors = new StringBuilder();
|
||||||
String addressVerify = "";
|
String addressVerify = "";
|
||||||
List<OrderMiningInfoDto> addressInfos = new ArrayList();
|
|
||||||
if(!orderMiningInfoDtos.isEmpty()){
|
if(!orderMiningInfoDtos.isEmpty()){
|
||||||
Map<String, List<OrderMiningInfoDto>> collect = orderMiningInfoDtos.stream().collect(Collectors.groupingBy(OrderMiningInfoDto::getWalletAddress));
|
Map<String, List<OrderMiningInfoDto>> collect = orderMiningInfoDtos.stream().collect(Collectors.groupingBy(OrderMiningInfoDto::getWalletAddress));
|
||||||
collect.forEach((address,list)->{
|
collect.forEach((address,list)->{
|
||||||
@@ -980,14 +986,13 @@ public class LeaseOrderInfoServiceImpl extends ServiceImpl<LeaseOrderInfoMapper,
|
|||||||
errors.append(orderMiningInfoDto.getWorkerId()).append(" ");
|
errors.append(orderMiningInfoDto.getWorkerId()).append(" ");
|
||||||
}
|
}
|
||||||
errors.append("请重新输入矿工号\n");
|
errors.append("请重新输入矿工号\n");
|
||||||
addressInfos.add(list.get(0));
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StringUtils.isNotEmpty(errors.toString())){
|
if (StringUtils.isNotEmpty(errors.toString())){
|
||||||
return errors.toString();
|
return errors.toString();
|
||||||
}
|
}
|
||||||
for (OrderMiningInfoDto addressInfo : addressInfos) {
|
for (OrderMiningInfoDto addressInfo : orderMiningInfoDtoList) {
|
||||||
if (!WalletRuleCheckUtils.checkAddress(addressInfo.getCoin(),addressInfo.getWalletAddress())){
|
if (!WalletRuleCheckUtils.checkAddress(addressInfo.getCoin(),addressInfo.getWalletAddress())){
|
||||||
addressVerify = addressInfo.getWalletAddress() + "钱包地址格式错误";
|
addressVerify = addressInfo.getWalletAddress() + "钱包地址格式错误";
|
||||||
break;
|
break;
|
||||||
@@ -1122,4 +1127,35 @@ public class LeaseOrderInfoServiceImpl extends ServiceImpl<LeaseOrderInfoMapper,
|
|||||||
info.setPurchasedMachines(list);
|
info.setPurchasedMachines(list);
|
||||||
return Result.success(info);
|
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())
|
.chain(LeaseOrderItem.getChain()).build())
|
||||||
.distinct()
|
.distinct()
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
//查询到对应商铺对应的 chain 然后比较上面的链对应的地址是否改变
|
|
||||||
List<ShopConfigDelDto> shopConfigList = leaseShopConfigMapper.selectShopConfigByShopIdAndSymbolAndChain(collect);
|
|
||||||
List<LeaseOrderItem> updateOrderItemList = new ArrayList<>();
|
List<LeaseOrderItem> updateOrderItemList = new ArrayList<>();
|
||||||
// 遍历 orderItemList
|
if (!collect.isEmpty()){
|
||||||
for (LeaseOrderItem orderItem : orderItemList) {
|
//查询到对应商铺对应的 chain 然后比较上面的链对应的地址是否改变
|
||||||
for (ShopConfigDelDto shopConfig : shopConfigList) {
|
List<ShopConfigDelDto> shopConfigList = leaseShopConfigMapper.selectShopConfigByShopIdAndSymbolAndChain(collect);
|
||||||
// 检查 chain 和 shopId 是否相同
|
// 遍历 orderItemList
|
||||||
if (orderItem.getShopId().equals(shopConfig.getShopId()) &&
|
for (LeaseOrderItem orderItem : orderItemList) {
|
||||||
orderItem.getChain().equals(shopConfig.getChain())) {
|
for (ShopConfigDelDto shopConfig : shopConfigList) {
|
||||||
// 检查 address 是否不同
|
// 检查 chain 和 shopId 是否相同
|
||||||
if (!orderItem.getAddress().equals(shopConfig.getPayAddress())) {
|
if (orderItem.getShopId().equals(shopConfig.getShopId()) &&
|
||||||
// 更新 orderItem 的 address
|
orderItem.getChain().equals(shopConfig.getChain())) {
|
||||||
orderItem.setAddress(shopConfig.getPayAddress());
|
// 检查 address 是否不同
|
||||||
updateOrderItemList.add(orderItem);
|
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;
|
return orderItemList;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -796,7 +798,7 @@ public class OrderAndPayTask {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*订单完成后---发送支付消息到mq 一个买家对应一个卖家
|
*订单全部已完成
|
||||||
* @param orderIds
|
* @param orderIds
|
||||||
*/
|
*/
|
||||||
public void sendMessageToMq(List<Long> orderIds){
|
public void sendMessageToMq(List<Long> orderIds){
|
||||||
|
|||||||
@@ -149,8 +149,8 @@ public class WalletRuleCheckUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ---------------NEXA校验-------------------
|
// ---------------NEXA校验-------------------
|
||||||
private static final Pattern NEXA_PATTERN = Pattern.compile("^nexa:[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]{40}$");
|
private static final Pattern NEXA_PATTERN2 = Pattern.compile("^[0-9a-zA-Z]{48}$");
|
||||||
public static boolean checkNEXA(String address) {
|
public static boolean checkNEXA(String address) {
|
||||||
if (address.startsWith("nexa:")){
|
if (address.startsWith("nexa:")){
|
||||||
return StringUtils.isNotEmpty(address) && NEXA_PATTERN.matcher(address).matches();
|
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();
|
return StringUtils.isNotEmpty( address) && CLORE_PATTERN.matcher(address).matches();
|
||||||
}
|
}
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
System.out.println(checkNEXA("0x550de999a4d8bd33dc5856d80ea3d196eac97427"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -349,20 +349,6 @@
|
|||||||
</foreach>
|
</foreach>
|
||||||
and sale_state = 0
|
and sale_state = 0
|
||||||
</update>
|
</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="getCoinAndAlgoById" resultType="com.m2pool.lease.dto.v2.MiningConfigDto">
|
||||||
select
|
select
|
||||||
id,
|
id,
|
||||||
@@ -480,6 +466,37 @@
|
|||||||
)
|
)
|
||||||
</update>
|
</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 id="checkHasSaleMachineByShopId" resultType="java.lang.Integer">
|
||||||
SELECT
|
SELECT
|
||||||
COUNT(*)
|
COUNT(*)
|
||||||
|
|||||||
Reference in New Issue
Block a user