fix: 优化收益计算、地址校验和提现逻辑
- 修正收益计算将月收益改为日收益,格式化显示为'(币种)' - 统一NEXA地址校验规则,必须带'nexa:'前缀 - 修复提现金额计算逻辑,改为从余额中减去提现金额和手续费 - 优化SQL查询,使用ROW_NUMBER替代变量排序 - 添加用户权限校验,算力保留两位小数并添加单位字段 - 添加空字符串校验和调试日志输出 - 启用提现队列监听功能
This commit is contained in:
@@ -6,6 +6,7 @@ import cn.hutool.json.JSONUtil;
|
|||||||
import com.m2pool.lease.annotation.EncryptedField;
|
import com.m2pool.lease.annotation.EncryptedField;
|
||||||
import com.m2pool.lease.exception.RSAException;
|
import com.m2pool.lease.exception.RSAException;
|
||||||
import com.m2pool.lease.utils.RsaUtils;
|
import com.m2pool.lease.utils.RsaUtils;
|
||||||
|
import io.netty.util.internal.StringUtil;
|
||||||
import org.aspectj.lang.ProceedingJoinPoint;
|
import org.aspectj.lang.ProceedingJoinPoint;
|
||||||
import org.aspectj.lang.annotation.Around;
|
import org.aspectj.lang.annotation.Around;
|
||||||
import org.aspectj.lang.annotation.Aspect;
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
@@ -13,6 +14,7 @@ import org.aspectj.lang.annotation.Pointcut;
|
|||||||
import org.aspectj.lang.reflect.MethodSignature;
|
import org.aspectj.lang.reflect.MethodSignature;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.thymeleaf.util.StringUtils;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Parameter;
|
import java.lang.reflect.Parameter;
|
||||||
@@ -84,6 +86,9 @@ public class DecryptAspect {
|
|||||||
Object value = field.get(obj);
|
Object value = field.get(obj);
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
String encryptedValue = value.toString();
|
String encryptedValue = value.toString();
|
||||||
|
if(StringUtils.isEmpty(encryptedValue)){
|
||||||
|
return;
|
||||||
|
}
|
||||||
System.out.println("加密前地址:"+value +"类型"+(value instanceof String));
|
System.out.println("加密前地址:"+value +"类型"+(value instanceof String));
|
||||||
String decryptedValue = RsaUtils.decrypt(encryptedValue);
|
String decryptedValue = RsaUtils.decrypt(encryptedValue);
|
||||||
field.set(obj, decryptedValue);
|
field.set(obj, decryptedValue);
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ public class OperationLogAspect {
|
|||||||
Field field = tagFields.poll();
|
Field field = tagFields.poll();
|
||||||
field.setAccessible(true);
|
field.setAccessible(true);
|
||||||
try {
|
try {
|
||||||
if (!tagFields.isEmpty() || tag.length() > 0) { // 如果不是第一个元素或者address不为空,才加"--"
|
if ( tag.length() > 0) { // 如果不是第一个元素或者address不为空,才加"--"
|
||||||
tag.append("--");
|
tag.append("--");
|
||||||
}
|
}
|
||||||
tag.append((String) field.get(arg));
|
tag.append((String) field.get(arg));
|
||||||
@@ -85,8 +85,9 @@ public class OperationLogAspect {
|
|||||||
getExtraLogParam(ledgerLog);
|
getExtraLogParam(ledgerLog);
|
||||||
//文件追加用户邮箱和用户id(文件名格式:地址--邮箱--用户id)
|
//文件追加用户邮箱和用户id(文件名格式:地址--邮箱--用户id)
|
||||||
String username = SecurityUtils.getUsername();
|
String username = SecurityUtils.getUsername();
|
||||||
|
Long userId = SecurityUtils.getUserId();
|
||||||
if (username != null){
|
if (username != null){
|
||||||
tag.append("--").append(username).append("--").append(SecurityUtils.getUserId());
|
tag.append("--").append(username).append("--").append(userId);
|
||||||
}
|
}
|
||||||
// 记录日志
|
// 记录日志
|
||||||
ledgerLogService.logOperation(tag.toString(), annotation.value(), ledgerLog.toString());
|
ledgerLogService.logOperation(tag.toString(), annotation.value(), ledgerLog.toString());
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ public class LoginInterceptor implements HandlerInterceptor {
|
|||||||
}
|
}
|
||||||
String userEmail = JwtUtils.getUserName(token);
|
String userEmail = JwtUtils.getUserName(token);
|
||||||
String getUserId = JwtUtils.getUserId(token);
|
String getUserId = JwtUtils.getUserId(token);
|
||||||
|
System.out.println("本地线程:用户ID"+getUserId + "用户邮箱"+userEmail);
|
||||||
//1.把userEmail存入ThreadLocal 本地线程变量中
|
//1.把userEmail存入ThreadLocal 本地线程变量中
|
||||||
SecurityUtils.setUserEmail(userEmail);
|
SecurityUtils.setUserEmail(userEmail);
|
||||||
SecurityUtils.setUserId(Long.valueOf(getUserId));
|
SecurityUtils.setUserId(Long.valueOf(getUserId));
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ public class PageResult<T> implements Serializable
|
|||||||
|
|
||||||
columns.add(TableHeadersDto.builder()
|
columns.add(TableHeadersDto.builder()
|
||||||
.key("monthIncome")
|
.key("monthIncome")
|
||||||
.label("最大月收益")
|
.label("最大日收益")
|
||||||
.type("amount")
|
.type("amount")
|
||||||
.currency("USDT")
|
.currency("USDT")
|
||||||
.period("MONTH")
|
.period("MONTH")
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ public class MachineInfoDto {
|
|||||||
private Integer maxLeaseDays;
|
private Integer maxLeaseDays;
|
||||||
|
|
||||||
@ApiModelProperty(value = "最大月收益 usdt")
|
@ApiModelProperty(value = "最大月收益 usdt")
|
||||||
private BigDecimal monthIncome;
|
private String monthIncome;
|
||||||
|
|
||||||
|
|
||||||
@ApiModelProperty(value = "最大收益币种算法")
|
@ApiModelProperty(value = "最大收益币种算法")
|
||||||
|
|||||||
@@ -33,4 +33,7 @@ public class MiningHashrateInfoDto {
|
|||||||
|
|
||||||
@ApiModelProperty(value = "矿工号")
|
@ApiModelProperty(value = "矿工号")
|
||||||
private String miner;
|
private String miner;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "算力单位")
|
||||||
|
private String unit;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,4 +53,7 @@ public class PurchasedMachineDto {
|
|||||||
@ApiModelProperty(value = "最近实时算力记录时间")
|
@ApiModelProperty(value = "最近实时算力记录时间")
|
||||||
private LocalDateTime recordTime;
|
private LocalDateTime recordTime;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "币种单位")
|
||||||
|
private String unit;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,5 +94,5 @@ public interface LeaseOrderMiningMapper extends BaseMapper<LeaseOrderMining> {
|
|||||||
* @param info
|
* @param info
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<PurchasedMachineDto> getPurchasedMachineInfo(@Param("info") MiningConfigInfoDto info);
|
List<PurchasedMachineDto> getPurchasedMachineInfo(@Param("info") MiningConfigInfoDto info,@Param("authId") Long authId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,11 +9,9 @@ import com.m2pool.lease.constant.RabbitmqConstant;
|
|||||||
import com.m2pool.lease.entity.*;
|
import com.m2pool.lease.entity.*;
|
||||||
import com.m2pool.lease.exception.PayRechargeException;
|
import com.m2pool.lease.exception.PayRechargeException;
|
||||||
import com.m2pool.lease.mapper.*;
|
import com.m2pool.lease.mapper.*;
|
||||||
import com.m2pool.lease.mq.message.RabbitmqDeleteWalletReturnMessage;
|
import com.m2pool.lease.mq.message.*;
|
||||||
import com.m2pool.lease.mq.message.RabbitmqPayAutoReturnMessage;
|
|
||||||
import com.m2pool.lease.mq.message.RabbitmqPayRechargeReturnMessage;
|
|
||||||
import com.m2pool.lease.mq.message.RabbitmqPayWithdrawReturnMessage;
|
|
||||||
import com.m2pool.lease.service.LeaseOrderItemService;
|
import com.m2pool.lease.service.LeaseOrderItemService;
|
||||||
|
import com.m2pool.lease.utils.UuidGeneratorUtil;
|
||||||
import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
||||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||||
import org.springframework.messaging.handler.annotation.Payload;
|
import org.springframework.messaging.handler.annotation.Payload;
|
||||||
@@ -341,6 +339,7 @@ public class MessageReceiver {
|
|||||||
LeasePayWithdrawMessage leasePayWithdrawMessage = handlerBuyerWithdraw(payWithdrawReturnMessage, leasePayWithdrawMessageList);
|
LeasePayWithdrawMessage leasePayWithdrawMessage = handlerBuyerWithdraw(payWithdrawReturnMessage, leasePayWithdrawMessageList);
|
||||||
if (leasePayWithdrawMessage != null){
|
if (leasePayWithdrawMessage != null){
|
||||||
LeaseShopConfig leaseShopConfig = leaseShopConfigMapper.selectOne(new LambdaQueryWrapper<LeaseShopConfig>()
|
LeaseShopConfig leaseShopConfig = leaseShopConfigMapper.selectOne(new LambdaQueryWrapper<LeaseShopConfig>()
|
||||||
|
.select(LeaseShopConfig::getId, LeaseShopConfig::getBalance)
|
||||||
.eq(LeaseShopConfig::getPayAddress, leasePayWithdrawMessage.getFromAddress())
|
.eq(LeaseShopConfig::getPayAddress, leasePayWithdrawMessage.getFromAddress())
|
||||||
.eq(LeaseShopConfig::getChain, leasePayWithdrawMessage.getFromChain())
|
.eq(LeaseShopConfig::getChain, leasePayWithdrawMessage.getFromChain())
|
||||||
.eq(LeaseShopConfig::getPayCoin, leasePayWithdrawMessage.getFromSymbol())
|
.eq(LeaseShopConfig::getPayCoin, leasePayWithdrawMessage.getFromSymbol())
|
||||||
@@ -350,18 +349,20 @@ public class MessageReceiver {
|
|||||||
if (leasePayWithdrawMessage.getStatus() == 1 && payWithdrawReturnMessage.getStatus() == 1){
|
if (leasePayWithdrawMessage.getStatus() == 1 && payWithdrawReturnMessage.getStatus() == 1){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (payWithdrawReturnMessage.getStatus() == 1){
|
|
||||||
leaseShopConfig.setBalance(leaseShopConfig.getBalance()
|
LeasePayWithdrawMessage build = LeasePayWithdrawMessage.builder()
|
||||||
.add(leasePayWithdrawMessage.getAmount())
|
|
||||||
.add(leasePayWithdrawMessage.getServiceCharge()));
|
|
||||||
leaseShopConfigMapper.updateById(leaseShopConfig);
|
|
||||||
}
|
|
||||||
leasePayWithdrawMessageMapper.updateById(LeasePayWithdrawMessage.builder()
|
|
||||||
.id(leasePayWithdrawMessage.getId())
|
.id(leasePayWithdrawMessage.getId())
|
||||||
.status(payWithdrawReturnMessage.getStatus())
|
.status(payWithdrawReturnMessage.getStatus())
|
||||||
.txHash(payWithdrawReturnMessage.getTx_hash())
|
.build();
|
||||||
.blockHeight(payWithdrawReturnMessage.getBlock_height())
|
if (payWithdrawReturnMessage.getStatus() == 1){
|
||||||
.build());
|
leaseShopConfig.setBalance(leaseShopConfig.getBalance()
|
||||||
|
.subtract(payWithdrawReturnMessage.getAmount())
|
||||||
|
.subtract(payWithdrawReturnMessage.getFee()));
|
||||||
|
leaseShopConfigMapper.updateById(leaseShopConfig);
|
||||||
|
build.setTxHash(payWithdrawReturnMessage.getTx_hash());
|
||||||
|
build.setBlockHeight(payWithdrawReturnMessage.getBlock_height());
|
||||||
|
}
|
||||||
|
leasePayWithdrawMessageMapper.updateById(build);
|
||||||
//TODO 修改leaseShopConfig 金额(暂时不修改,提现申请的时候就修改了)
|
//TODO 修改leaseShopConfig 金额(暂时不修改,提现申请的时候就修改了)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -580,22 +581,22 @@ public class MessageReceiver {
|
|||||||
|
|
||||||
|
|
||||||
//提现
|
//提现
|
||||||
//@RabbitListener(queues = RabbitmqConstant.PAY_WITHDRAW_QUEUE,containerFactory ="rabbitListenerContainerFactory")
|
@RabbitListener(queues = RabbitmqConstant.PAY_WITHDRAW_QUEUE,containerFactory ="rabbitListenerContainerFactory")
|
||||||
//@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
//public void listenerWithdrawQueueMessage(@Payload RabbitmqPayWithdrawMessage payAutoReturnMessage) {
|
public void listenerWithdrawQueueMessage(@Payload RabbitmqPayWithdrawMessage payAutoReturnMessage) {
|
||||||
// //发送充值消息
|
//发送充值消息
|
||||||
// RabbitmqPayWithdrawReturnMessage rabbitmqPayRechargeReturnMessage = RabbitmqPayWithdrawReturnMessage.builder()
|
RabbitmqPayWithdrawReturnMessage rabbitmqPayRechargeReturnMessage = RabbitmqPayWithdrawReturnMessage.builder()
|
||||||
// .queue_id(payAutoReturnMessage.getQueue_id())
|
.queue_id(payAutoReturnMessage.getQueue_id())
|
||||||
// .status(1)
|
.status(1)
|
||||||
// .amount(payAutoReturnMessage.getAmount())
|
.amount(payAutoReturnMessage.getAmount())
|
||||||
// .chain(payAutoReturnMessage.getChain())
|
.chain(payAutoReturnMessage.getChain())
|
||||||
// .symbol(payAutoReturnMessage.getSymbol())
|
.symbol(payAutoReturnMessage.getSymbol())
|
||||||
// .from_address(payAutoReturnMessage.getFrom_address())
|
.from_address(payAutoReturnMessage.getFrom_address())
|
||||||
// .tx_hash(UuidGeneratorUtil.generateUuidWithoutHyphen())
|
.tx_hash(UuidGeneratorUtil.generateUuidWithoutHyphen())
|
||||||
// .fee(payAutoReturnMessage.getFee())
|
.fee(payAutoReturnMessage.getFee())
|
||||||
// .build();
|
.build();
|
||||||
// rabbitTemplate.convertAndSend(RabbitmqConstant.PAY_WITHDRAW_RETURN_QUEUE,rabbitmqPayRechargeReturnMessage);
|
rabbitTemplate.convertAndSend(RabbitmqConstant.PAY_WITHDRAW_RETURN_QUEUE,rabbitmqPayRechargeReturnMessage);
|
||||||
//}
|
}
|
||||||
|
|
||||||
|
|
||||||
////测试 开发环境 删除钱包测试
|
////测试 开发环境 删除钱包测试
|
||||||
|
|||||||
@@ -440,9 +440,10 @@ public class ServerChannelHandler extends SimpleChannelInboundHandler<ClientMess
|
|||||||
if (evt instanceof IdleStateEvent) {
|
if (evt instanceof IdleStateEvent) {
|
||||||
IdleStateEvent event = (IdleStateEvent) evt;
|
IdleStateEvent event = (IdleStateEvent) evt;
|
||||||
String ip = getIPString(ctx);
|
String ip = getIPString(ctx);
|
||||||
|
System.out.println("tcp心跳:"+ ip);
|
||||||
String id = ChannelManager.getIdByChannel(ip);
|
String id = ChannelManager.getIdByChannel(ip);
|
||||||
if (event.state() == IdleState.READER_IDLE) {
|
if (event.state() == IdleState.READER_IDLE) {
|
||||||
System.out.println(id+"用户写超时,接受pong"+System.currentTimeMillis());
|
System.out.println(id+"用户读超时,接受pong"+System.currentTimeMillis());
|
||||||
//System.out.println(id+"用户读超时,断开连接");
|
//System.out.println(id+"用户读超时,断开连接");
|
||||||
ChannelManager.removeChannel(ip);
|
ChannelManager.removeChannel(ip);
|
||||||
ctx.disconnect();//断开
|
ctx.disconnect();//断开
|
||||||
|
|||||||
@@ -128,6 +128,7 @@ public class LeaseMachineServiceImpl extends ServiceImpl<LeaseMachineMapper, Lea
|
|||||||
.collect(Collectors.groupingBy(PowerIncomeInfoDto::getMachineId));
|
.collect(Collectors.groupingBy(PowerIncomeInfoDto::getMachineId));
|
||||||
for (MachineInfoDto machineInfo : machineInfoDtoList) {
|
for (MachineInfoDto machineInfo : machineInfoDtoList) {
|
||||||
machineInfo.setPriceList(machinePriceMap.get(machineInfo.getId()));
|
machineInfo.setPriceList(machinePriceMap.get(machineInfo.getId()));
|
||||||
|
machineInfo.setMonthIncome("$"+machineInfo.getMonthIncome()+"("+machineInfo.getCoin()+")");
|
||||||
List<PowerIncomeInfoDto> powerIncomeInfoDtoList = collect.get(machineInfo.getId());
|
List<PowerIncomeInfoDto> powerIncomeInfoDtoList = collect.get(machineInfo.getId());
|
||||||
for (int i = 0; i < powerIncomeInfoDtoList.size(); i++) {
|
for (int i = 0; i < powerIncomeInfoDtoList.size(); i++) {
|
||||||
PowerIncomeInfoDto powerIncomeInfoDto = powerIncomeInfoDtoList.get(i);
|
PowerIncomeInfoDto powerIncomeInfoDto = powerIncomeInfoDtoList.get(i);
|
||||||
|
|||||||
@@ -1022,9 +1022,6 @@ public class LeaseOrderInfoServiceImpl extends ServiceImpl<LeaseOrderInfoMapper,
|
|||||||
for (OrderMiningInfoDto addressInfo : orderMiningInfoDtoList) {
|
for (OrderMiningInfoDto addressInfo : orderMiningInfoDtoList) {
|
||||||
String coin = addressInfo.getCoin();
|
String coin = addressInfo.getCoin();
|
||||||
String walletAddress = addressInfo.getWalletAddress();
|
String walletAddress = addressInfo.getWalletAddress();
|
||||||
if(coin.equalsIgnoreCase("NEXA") && walletAddress.startsWith("nexa:")){
|
|
||||||
addressInfo.setWalletAddress(walletAddress.substring(5));
|
|
||||||
}
|
|
||||||
if (!WalletRuleCheckUtils.checkAddress(coin,walletAddress)){
|
if (!WalletRuleCheckUtils.checkAddress(coin,walletAddress)){
|
||||||
addressVerify = addressInfo.getWalletAddress() + "钱包地址格式错误";
|
addressVerify = addressInfo.getWalletAddress() + "钱包地址格式错误";
|
||||||
break;
|
break;
|
||||||
@@ -1140,9 +1137,11 @@ public class LeaseOrderInfoServiceImpl extends ServiceImpl<LeaseOrderInfoMapper,
|
|||||||
@Override
|
@Override
|
||||||
@DSTransactional
|
@DSTransactional
|
||||||
public Result<MiningConfigInfoDto> getPurchasedInfo(BaseVo baseVo) {
|
public Result<MiningConfigInfoDto> getPurchasedInfo(BaseVo baseVo) {
|
||||||
|
Long authId = SecurityUtils.getUserId();
|
||||||
|
|
||||||
//找到miner 和钱包 ,pool 矿池名
|
//找到miner 和钱包 ,pool 矿池名
|
||||||
MiningConfigInfoDto info = leaseOrderMiningMapper.getPurchasedInfo(baseVo.getId());
|
MiningConfigInfoDto info = leaseOrderMiningMapper.getPurchasedInfo(baseVo.getId());
|
||||||
List<PurchasedMachineDto> list = leaseOrderMiningMapper.getPurchasedMachineInfo(info);
|
List<PurchasedMachineDto> list = leaseOrderMiningMapper.getPurchasedMachineInfo(info,authId);
|
||||||
|
|
||||||
|
|
||||||
//根据钱包 + 币种 + 矿工号 查询 pool 库 pool.kryptex 表 中对应 算力
|
//根据钱包 + 币种 + 矿工号 查询 pool 库 pool.kryptex 表 中对应 算力
|
||||||
@@ -1153,7 +1152,8 @@ public class LeaseOrderInfoServiceImpl extends ServiceImpl<LeaseOrderInfoMapper,
|
|||||||
MiningHashrateInfoDto miningHashrateInfoDto = recentlyHashRateMap.get(purchasedMachineDto.getWorkerId());
|
MiningHashrateInfoDto miningHashrateInfoDto = recentlyHashRateMap.get(purchasedMachineDto.getWorkerId());
|
||||||
if (miningHashrateInfoDto != null){
|
if (miningHashrateInfoDto != null){
|
||||||
purchasedMachineDto.setRecordTime(miningHashrateInfoDto.getRecordTime());
|
purchasedMachineDto.setRecordTime(miningHashrateInfoDto.getRecordTime());
|
||||||
purchasedMachineDto.setPower(miningHashrateInfoDto.getPower());
|
purchasedMachineDto.setPower(miningHashrateInfoDto.getPower().setScale(2, RoundingMode.HALF_UP));
|
||||||
|
purchasedMachineDto.setUnit(miningHashrateInfoDto.getUnit());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ public class GpuRequestApiTask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算月收入
|
* 计算月收入(月收益现在改成日收益)
|
||||||
* @param leaseGpuConfig
|
* @param leaseGpuConfig
|
||||||
* @param coinPower
|
* @param coinPower
|
||||||
* @return
|
* @return
|
||||||
@@ -89,7 +89,8 @@ public class GpuRequestApiTask {
|
|||||||
.divide(coinPower.getHashrate().divide(BigDecimal.valueOf(1000 * 1000), 8, RoundingMode.HALF_UP), 8, RoundingMode.HALF_UP)
|
.divide(coinPower.getHashrate().divide(BigDecimal.valueOf(1000 * 1000), 8, RoundingMode.HALF_UP), 8, RoundingMode.HALF_UP)
|
||||||
.multiply(BigDecimal.valueOf(24 * 60 * 60)
|
.multiply(BigDecimal.valueOf(24 * 60 * 60)
|
||||||
.divide(coinPower.getBlockInterval(), 8, RoundingMode.HALF_UP))
|
.divide(coinPower.getBlockInterval(), 8, RoundingMode.HALF_UP))
|
||||||
.multiply(coinPower.getBlockReward()).multiply(BigDecimal.valueOf(30))
|
.multiply(coinPower.getBlockReward())
|
||||||
|
//.multiply(BigDecimal.valueOf(30))
|
||||||
.multiply(coinPower.getPrice())
|
.multiply(coinPower.getPrice())
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -152,11 +152,12 @@ public class WalletRuleCheckUtils {
|
|||||||
private static final Pattern NEXA_PATTERN = Pattern.compile("^nexa:[0-9a-zA-Z]{48}$");
|
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}$");
|
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();
|
||||||
|
//}else{
|
||||||
|
// return StringUtils.isNotEmpty(address) && NEXA_PATTERN2.matcher(address).matches();
|
||||||
|
//}
|
||||||
return StringUtils.isNotEmpty(address) && NEXA_PATTERN.matcher(address).matches();
|
return StringUtils.isNotEmpty(address) && NEXA_PATTERN.matcher(address).matches();
|
||||||
}else{
|
|
||||||
return StringUtils.isNotEmpty(address) && NEXA_PATTERN2.matcher(address).matches();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------XNA校验-------------------
|
// ---------------XNA校验-------------------
|
||||||
|
|||||||
@@ -77,73 +77,6 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getShopMachineList" resultType="com.m2pool.lease.dto.v2.MachineInfoDto">
|
<select id="getShopMachineList" resultType="com.m2pool.lease.dto.v2.MachineInfoDto">
|
||||||
<!-- SELECT-->
|
|
||||||
<!-- sub.id,-->
|
|
||||||
<!-- sub.host_mac AS hostMac,-->
|
|
||||||
<!-- sub.shop_id as shopId,-->
|
|
||||||
<!-- sub.type,-->
|
|
||||||
<!-- sub.`user`,-->
|
|
||||||
<!-- sub.miner,-->
|
|
||||||
<!-- sub.state,-->
|
|
||||||
<!-- sub.sale_state AS saleState,-->
|
|
||||||
<!-- sub.max_lease_days AS maxLeaseDays,-->
|
|
||||||
<!-- sub.del,-->
|
|
||||||
<!-- sub.power_dissipation as powerDissipation,-->
|
|
||||||
<!-- sub.hashrate as theoryPower,-->
|
|
||||||
<!-- sub.unit,-->
|
|
||||||
<!-- sub.coin,-->
|
|
||||||
<!-- sub.month_income as monthIncome,-->
|
|
||||||
<!-- sub.name as model,-->
|
|
||||||
<!-- sub.algorithm,-->
|
|
||||||
<!-- sub.online_status AS onlineStatus,-->
|
|
||||||
<!-- sub.sale_numbers as saleNumbers,-->
|
|
||||||
<!-- sub.sale_out_numbers as saleOutNumbers,-->
|
|
||||||
<!-- mp.price-->
|
|
||||||
<!-- FROM-->
|
|
||||||
<!-- (-->
|
|
||||||
<!-- SELECT-->
|
|
||||||
<!-- lm.id,-->
|
|
||||||
<!-- lm.host_mac,-->
|
|
||||||
<!-- lm.shop_id,-->
|
|
||||||
<!-- lm.type,-->
|
|
||||||
<!-- lm.`user`,-->
|
|
||||||
<!-- lm.miner,-->
|
|
||||||
<!-- lm.state,-->
|
|
||||||
<!-- lm.sale_state,-->
|
|
||||||
<!-- lm.max_lease_days,-->
|
|
||||||
<!-- lm.del,-->
|
|
||||||
<!-- lm.online_status,-->
|
|
||||||
<!-- lm.sale_numbers,-->
|
|
||||||
<!-- lm.sale_out_numbers,-->
|
|
||||||
<!-- SUM(gpc.power_dissipation) AS power_dissipation,-->
|
|
||||||
<!-- SUM(gpc.hashrate) AS hashrate,-->
|
|
||||||
<!-- SUM(gpc.month_income) AS month_income,-->
|
|
||||||
<!-- gpc.unit,-->
|
|
||||||
<!-- gpc.coin,-->
|
|
||||||
<!-- gpc.name,-->
|
|
||||||
<!-- gpc.algorithm,-->
|
|
||||||
<!-- ROW_NUMBER() OVER (-->
|
|
||||||
<!-- PARTITION BY lm.id-->
|
|
||||||
<!-- ORDER BY SUM(gpc.month_income) DESC-->
|
|
||||||
<!-- ) AS rn-->
|
|
||||||
<!-- FROM-->
|
|
||||||
<!-- lease_machine lm-->
|
|
||||||
<!-- JOIN-->
|
|
||||||
<!-- lease_machine_config gpc ON lm.id = gpc.machine_id AND lm.type = #{shopMachineVo.type} AND lm.shop_id = #{shopMachineVo.shopId} AND lm.online_status = true AND lm.sale_state = 0 AND lm.state = 0-->
|
|
||||||
<!-- GROUP BY lm.id,gpc.coin,gpc.algorithm-->
|
|
||||||
<!-- ) sub-->
|
|
||||||
<!-- LEFT JOIN lease_machine_price mp-->
|
|
||||||
<!-- ON sub.id = mp.machine_id AND mp.coin = #{shopMachineVo.coin} AND mp.chain = #{shopMachineVo.chain} AND mp.del = false AND sub.rn = 1-->
|
|
||||||
<!-- WHERE-->
|
|
||||||
<!-- sub.del = FALSE AND sub.rn = 1-->
|
|
||||||
<!-- <if test="shopMachineVo.minPrice != 0 or shopMachineVo.maxPrice != 0">-->
|
|
||||||
<!-- AND mp.price >= #{shopMachineVo.minPrice} AND mp.price <![CDATA[<=]]> #{shopMachineVo.maxPrice}-->
|
|
||||||
<!-- </if>-->
|
|
||||||
<!-- <if test="shopMachineVo.keyword != null and shopMachineVo.keyword != ''">-->
|
|
||||||
<!-- AND (sub.coin LIKE CONCAT('%', #{shopMachineVo.keyword}, '%') OR sub.algorithm LIKE CONCAT('%', #{shopMachineVo.keyword}, '%'))-->
|
|
||||||
<!-- </if>-->
|
|
||||||
|
|
||||||
-- 开发环境
|
|
||||||
SELECT
|
SELECT
|
||||||
sub.id,
|
sub.id,
|
||||||
sub.host_mac AS hostMac,
|
sub.host_mac AS hostMac,
|
||||||
@@ -159,7 +92,7 @@
|
|||||||
sub.hashrate as theoryPower,
|
sub.hashrate as theoryPower,
|
||||||
sub.unit,
|
sub.unit,
|
||||||
sub.coin,
|
sub.coin,
|
||||||
sub.month_income as monthIncome,
|
ROUND(sub.month_income, 2) as monthIncome,
|
||||||
sub.name as model,
|
sub.name as model,
|
||||||
sub.algorithm,
|
sub.algorithm,
|
||||||
sub.online_status AS onlineStatus,
|
sub.online_status AS onlineStatus,
|
||||||
@@ -169,31 +102,6 @@
|
|||||||
FROM
|
FROM
|
||||||
(
|
(
|
||||||
SELECT
|
SELECT
|
||||||
t.id,
|
|
||||||
t.host_mac,
|
|
||||||
t.shop_id,
|
|
||||||
t.type,
|
|
||||||
t.`user`,
|
|
||||||
t.miner,
|
|
||||||
t.state,
|
|
||||||
t.sale_state,
|
|
||||||
t.max_lease_days,
|
|
||||||
t.del,
|
|
||||||
t.online_status,
|
|
||||||
t.sale_numbers,
|
|
||||||
t.sale_out_numbers,
|
|
||||||
t.power_dissipation,
|
|
||||||
t.hashrate,
|
|
||||||
t.month_income,
|
|
||||||
t.unit,
|
|
||||||
t.coin,
|
|
||||||
t.name,
|
|
||||||
t.algorithm,
|
|
||||||
@rn := IF(@prev_id = t.id, @rn + 1, 1) AS rn,
|
|
||||||
@prev_id := t.id
|
|
||||||
FROM
|
|
||||||
(
|
|
||||||
SELECT
|
|
||||||
lm.id,
|
lm.id,
|
||||||
lm.host_mac,
|
lm.host_mac,
|
||||||
lm.shop_id,
|
lm.shop_id,
|
||||||
@@ -213,15 +121,16 @@
|
|||||||
gpc.unit,
|
gpc.unit,
|
||||||
gpc.coin,
|
gpc.coin,
|
||||||
gpc.name,
|
gpc.name,
|
||||||
gpc.algorithm
|
gpc.algorithm,
|
||||||
|
ROW_NUMBER() OVER (
|
||||||
|
PARTITION BY lm.id
|
||||||
|
ORDER BY SUM(gpc.month_income) DESC
|
||||||
|
) AS rn
|
||||||
FROM
|
FROM
|
||||||
lease_machine lm
|
lease_machine lm
|
||||||
JOIN
|
JOIN
|
||||||
lease_machine_config gpc ON lm.id = gpc.machine_id AND lm.type = #{shopMachineVo.type} AND lm.shop_id = #{shopMachineVo.shopId} AND lm.online_status = true AND lm.sale_state = 0 AND lm.state = 0
|
lease_machine_config gpc ON lm.id = gpc.machine_id AND lm.type = #{shopMachineVo.type} AND lm.shop_id = #{shopMachineVo.shopId} AND lm.online_status = true AND lm.sale_state = 0 AND lm.state = 0
|
||||||
GROUP BY lm.id,gpc.coin,gpc.algorithm,gpc.name,gpc.unit
|
GROUP BY lm.id,gpc.coin,gpc.algorithm
|
||||||
ORDER BY lm.id, SUM(gpc.month_income) DESC
|
|
||||||
) t,
|
|
||||||
(SELECT @rn := 0, @prev_id := 0) r
|
|
||||||
) sub
|
) sub
|
||||||
LEFT JOIN lease_machine_price mp
|
LEFT JOIN lease_machine_price mp
|
||||||
ON sub.id = mp.machine_id AND mp.coin = #{shopMachineVo.coin} AND mp.chain = #{shopMachineVo.chain} AND mp.del = false AND sub.rn = 1
|
ON sub.id = mp.machine_id AND mp.coin = #{shopMachineVo.coin} AND mp.chain = #{shopMachineVo.chain} AND mp.del = false AND sub.rn = 1
|
||||||
@@ -279,35 +188,11 @@
|
|||||||
FROM
|
FROM
|
||||||
(
|
(
|
||||||
SELECT
|
SELECT
|
||||||
t.id,
|
|
||||||
t.shop_id,
|
|
||||||
t.type,
|
|
||||||
t.`user`,
|
|
||||||
t.miner,
|
|
||||||
t.state,
|
|
||||||
t.sale_state,
|
|
||||||
t.max_lease_days,
|
|
||||||
t.del,
|
|
||||||
t.online_status,
|
|
||||||
t.sale_numbers,
|
|
||||||
t.sale_out_numbers,
|
|
||||||
t.power_dissipation,
|
|
||||||
t.hashrate,
|
|
||||||
t.unit,
|
|
||||||
t.coin,
|
|
||||||
t.month_income,
|
|
||||||
t.name,
|
|
||||||
t.algorithm,
|
|
||||||
@rn := IF(@prev_id = t.id, @rn + 1, 1) AS rn,
|
|
||||||
@prev_id := t.id
|
|
||||||
FROM
|
|
||||||
(
|
|
||||||
SELECT
|
|
||||||
lm.id,
|
lm.id,
|
||||||
lm.shop_id,
|
lm.shop_id,
|
||||||
lm.type,
|
lm.type,
|
||||||
lm.user,
|
lm.`user`,
|
||||||
COALESCE(NULLIF(lm.miner, ''), lm.host_mac) as miner,
|
COALESCE(NULLIF(lm.miner,''),lm.host_mac) as miner,
|
||||||
lm.state,
|
lm.state,
|
||||||
lm.sale_state,
|
lm.sale_state,
|
||||||
lm.max_lease_days,
|
lm.max_lease_days,
|
||||||
@@ -321,81 +206,21 @@
|
|||||||
gpc.coin,
|
gpc.coin,
|
||||||
gpc.month_income,
|
gpc.month_income,
|
||||||
gpc.name,
|
gpc.name,
|
||||||
gpc.algorithm
|
gpc.algorithm,
|
||||||
|
ROW_NUMBER() OVER (PARTITION BY lm.id ORDER BY gpc.month_income DESC) as rn
|
||||||
FROM
|
FROM
|
||||||
lease_machine lm
|
lease_machine lm
|
||||||
JOIN
|
JOIN
|
||||||
lease_machine_config gpc ON lm.id = gpc.machine_id AND lm.type = #{sellerMachineVo.type} AND lm.shop_id = #{shopId}
|
lease_machine_config gpc ON lm.id = gpc.machine_id AND lm.type = #{sellerMachineVo.type} AND lm.shop_id = #{shopId}
|
||||||
ORDER BY lm.id, gpc.month_income DESC
|
|
||||||
) t,
|
|
||||||
(SELECT @rn := 0, @prev_id := 0) r
|
|
||||||
) sub
|
) sub
|
||||||
where
|
where
|
||||||
sub.del = false and sub.rn = 1
|
sub.del = false and sub.online_status = 1 and sub.rn = 1
|
||||||
<if test="sellerMachineVo.name != null and sellerMachineVo.name != ''">
|
<if test="sellerMachineVo.name != null and sellerMachineVo.name != ''">
|
||||||
AND sub.name LIKE CONCAT('%', #{sellerMachineVo.name}, '%')
|
AND sub.name LIKE CONCAT('%', #{sellerMachineVo.name}, '%')
|
||||||
</if>
|
</if>
|
||||||
<if test="sellerMachineVo.keyword != null and sellerMachineVo.keyword != ''">
|
<if test="sellerMachineVo.keyword != null and sellerMachineVo.keyword != ''">
|
||||||
AND sub.name LIKE CONCAT('%', #{sellerMachineVo.keyword}, '%')
|
AND sub.name LIKE CONCAT('%', #{sellerMachineVo.keyword}, '%')
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
-- 开发环境
|
|
||||||
<!-- SELECT-->
|
|
||||||
<!-- sub.id,-->
|
|
||||||
<!-- sub.shop_id as shopId,-->
|
|
||||||
<!-- sub.type,-->
|
|
||||||
<!-- sub.`user`,-->
|
|
||||||
<!-- sub.miner,-->
|
|
||||||
<!-- sub.state,-->
|
|
||||||
<!-- sub.sale_state AS saleState,-->
|
|
||||||
<!-- sub.max_lease_days AS maxLeaseDays,-->
|
|
||||||
<!-- sub.del,-->
|
|
||||||
<!-- sub.power_dissipation as powerDissipation,-->
|
|
||||||
<!-- sub.hashrate as theoryPower,-->
|
|
||||||
<!-- sub.unit,-->
|
|
||||||
<!-- sub.coin,-->
|
|
||||||
<!-- sub.month_income as monthIncome,-->
|
|
||||||
<!-- sub.name,-->
|
|
||||||
<!-- sub.algorithm,-->
|
|
||||||
<!-- sub.online_status AS onlineStatus,-->
|
|
||||||
<!-- sub.sale_numbers as saleNumbers,-->
|
|
||||||
<!-- sub.sale_out_numbers as saleOutNumbers-->
|
|
||||||
<!-- FROM-->
|
|
||||||
<!-- (-->
|
|
||||||
<!-- SELECT-->
|
|
||||||
<!-- lm.id,-->
|
|
||||||
<!-- lm.shop_id,-->
|
|
||||||
<!-- lm.type,-->
|
|
||||||
<!-- lm.`user`,-->
|
|
||||||
<!-- lm.miner,-->
|
|
||||||
<!-- lm.state,-->
|
|
||||||
<!-- lm.sale_state,-->
|
|
||||||
<!-- lm.max_lease_days,-->
|
|
||||||
<!-- lm.del,-->
|
|
||||||
<!-- lm.online_status,-->
|
|
||||||
<!-- lm.sale_numbers,-->
|
|
||||||
<!-- lm.sale_out_numbers,-->
|
|
||||||
<!-- gpc.power_dissipation,-->
|
|
||||||
<!-- gpc.hashrate,-->
|
|
||||||
<!-- gpc.unit,-->
|
|
||||||
<!-- gpc.coin,-->
|
|
||||||
<!-- gpc.month_income,-->
|
|
||||||
<!-- gpc.name,-->
|
|
||||||
<!-- gpc.algorithm,-->
|
|
||||||
<!-- ROW_NUMBER() OVER (PARTITION BY lm.id ORDER BY gpc.month_income DESC) as rn-->
|
|
||||||
<!-- FROM-->
|
|
||||||
<!-- lease_machine lm-->
|
|
||||||
<!-- JOIN-->
|
|
||||||
<!-- lease_machine_config gpc ON lm.id = gpc.machine_id AND lm.type = #{sellerMachineVo.type} AND lm.shop_id = #{shopId}-->
|
|
||||||
<!-- ) sub-->
|
|
||||||
<!-- where-->
|
|
||||||
<!-- sub.del = false and sub.rn = 1-->
|
|
||||||
<!-- <if test="sellerMachineVo.name != null and sellerMachineVo.name != ''">-->
|
|
||||||
<!-- AND sub.name LIKE CONCAT('%', #{sellerMachineVo.name}, '%')-->
|
|
||||||
<!-- </if>-->
|
|
||||||
<!-- <if test="sellerMachineVo.keyword != null and sellerMachineVo.keyword != ''">-->
|
|
||||||
<!-- AND sub.name LIKE CONCAT('%', #{sellerMachineVo.keyword}, '%')-->
|
|
||||||
<!-- </if>-->
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
@@ -429,55 +254,30 @@
|
|||||||
SELECT
|
SELECT
|
||||||
*
|
*
|
||||||
FROM
|
FROM
|
||||||
(
|
|
||||||
SELECT
|
|
||||||
t.id,
|
|
||||||
t.shop_id AS shopId,
|
|
||||||
t.type,
|
|
||||||
t.`user`,
|
|
||||||
t.miner,
|
|
||||||
t.state,
|
|
||||||
t.sale_state AS saleState,
|
|
||||||
t.max_lease_days AS maxLeaseDays,
|
|
||||||
t.del,
|
|
||||||
t.power_dissipation AS powerDissipation,
|
|
||||||
t.hashrate AS power,
|
|
||||||
t.unit,
|
|
||||||
t.coin,
|
|
||||||
t.month_income AS monthIncome,
|
|
||||||
t.NAME,
|
|
||||||
t.online_status AS onlineStatus,
|
|
||||||
t.can_sale_numbers as canSaleNumbers,
|
|
||||||
t.algorithm,
|
|
||||||
t.cartInfoId,
|
|
||||||
t.numbers,
|
|
||||||
t.lease_time AS leaseTime,
|
|
||||||
@rn := IF(@prev_id = t.id, @rn + 1, 1) AS rn,
|
|
||||||
@prev_id := t.id
|
|
||||||
FROM
|
|
||||||
(
|
(
|
||||||
SELECT
|
SELECT
|
||||||
sub.id,
|
sub.id,
|
||||||
sub.shop_id ,
|
sub.shop_id AS shopId,
|
||||||
sub.type,
|
sub.type,
|
||||||
sub.`user`,
|
sub.`user`,
|
||||||
sub.miner,
|
sub.miner,
|
||||||
sub.state,
|
sub.state,
|
||||||
sub.sale_state ,
|
sub.sale_state AS saleState,
|
||||||
sub.max_lease_days ,
|
sub.max_lease_days AS maxLeaseDays,
|
||||||
sub.del,
|
sub.del,
|
||||||
sub.power_dissipation ,
|
sub.power_dissipation AS powerDissipation,
|
||||||
sub.hashrate ,
|
sub.hashrate AS power,
|
||||||
sub.unit,
|
sub.unit,
|
||||||
sub.coin,
|
sub.coin,
|
||||||
sub.month_income,
|
sub.month_income AS monthIncome,
|
||||||
sub.NAME,
|
sub.NAME,
|
||||||
sub.online_status ,
|
sub.online_status AS onlineStatus,
|
||||||
sub.can_sale_numbers ,
|
sub.can_sale_numbers as canSaleNumbers,
|
||||||
sub.algorithm,
|
sub.algorithm,
|
||||||
ci.id AS cartInfoId,
|
ci.id AS cartInfoId,
|
||||||
ci.numbers,
|
ci.numbers,
|
||||||
ci.lease_time AS lease_time
|
ci.lease_time AS leaseTime,
|
||||||
|
ROW_NUMBER() OVER ( PARTITION BY sub.id ORDER BY sub.month_income DESC ) AS rn
|
||||||
FROM
|
FROM
|
||||||
(
|
(
|
||||||
SELECT
|
SELECT
|
||||||
@@ -497,7 +297,7 @@
|
|||||||
gpc.month_income AS month_income,
|
gpc.month_income AS month_income,
|
||||||
gpc.unit,
|
gpc.unit,
|
||||||
gpc.coin,
|
gpc.coin,
|
||||||
gpc.name,
|
gpc.NAME,
|
||||||
gpc.algorithm
|
gpc.algorithm
|
||||||
FROM
|
FROM
|
||||||
lease_machine lm
|
lease_machine lm
|
||||||
@@ -505,7 +305,7 @@
|
|||||||
GROUP BY
|
GROUP BY
|
||||||
lm.id,
|
lm.id,
|
||||||
gpc.coin,
|
gpc.coin,
|
||||||
gpc.`algorithm`,gpc.power_dissipation,gpc.hashrate,gpc.month_income, gpc.unit, gpc.name
|
gpc.`algorithm`
|
||||||
) sub
|
) sub
|
||||||
JOIN lease_shopping_cart_info ci ON sub.id = ci.product_machine_id AND ci.user_id = #{userId}
|
JOIN lease_shopping_cart_info ci ON sub.id = ci.product_machine_id AND ci.user_id = #{userId}
|
||||||
AND ci.version = 1
|
AND ci.version = 1
|
||||||
@@ -514,80 +314,9 @@
|
|||||||
<foreach collection="machineIds" item="machineId" open="(" separator="," close=")">
|
<foreach collection="machineIds" item="machineId" open="(" separator="," close=")">
|
||||||
#{machineId}
|
#{machineId}
|
||||||
</foreach>
|
</foreach>
|
||||||
ORDER BY sub.id, sub.month_income DESC
|
|
||||||
) t,
|
|
||||||
(SELECT @rn := 0, @prev_id := 0) r
|
|
||||||
) t
|
) t
|
||||||
WHERE
|
WHERE
|
||||||
rn = 1
|
rn = 1
|
||||||
|
|
||||||
-- 开发环境
|
|
||||||
<!-- SELECT-->
|
|
||||||
<!-- *-->
|
|
||||||
<!-- FROM-->
|
|
||||||
<!-- (-->
|
|
||||||
<!-- SELECT-->
|
|
||||||
<!-- sub.id,-->
|
|
||||||
<!-- sub.shop_id AS shopId,-->
|
|
||||||
<!-- sub.type,-->
|
|
||||||
<!-- sub.`user`,-->
|
|
||||||
<!-- sub.miner,-->
|
|
||||||
<!-- sub.state,-->
|
|
||||||
<!-- sub.sale_state AS saleState,-->
|
|
||||||
<!-- sub.max_lease_days AS maxLeaseDays,-->
|
|
||||||
<!-- sub.del,-->
|
|
||||||
<!-- sub.power_dissipation AS powerDissipation,-->
|
|
||||||
<!-- sub.hashrate AS power,-->
|
|
||||||
<!-- sub.unit,-->
|
|
||||||
<!-- sub.coin,-->
|
|
||||||
<!-- sub.month_income AS monthIncome,-->
|
|
||||||
<!-- sub.NAME,-->
|
|
||||||
<!-- sub.online_status AS onlineStatus,-->
|
|
||||||
<!-- sub.can_sale_numbers as canSaleNumbers,-->
|
|
||||||
<!-- sub.algorithm,-->
|
|
||||||
<!-- ci.id AS cartInfoId,-->
|
|
||||||
<!-- ci.numbers,-->
|
|
||||||
<!-- ci.lease_time AS leaseTime,-->
|
|
||||||
<!-- ROW_NUMBER() OVER ( PARTITION BY sub.id ORDER BY sub.month_income DESC ) AS rn-->
|
|
||||||
<!-- FROM-->
|
|
||||||
<!-- (-->
|
|
||||||
<!-- SELECT-->
|
|
||||||
<!-- lm.id,-->
|
|
||||||
<!-- lm.shop_id,-->
|
|
||||||
<!-- lm.type,-->
|
|
||||||
<!-- lm.`user`,-->
|
|
||||||
<!-- lm.miner,-->
|
|
||||||
<!-- lm.state,-->
|
|
||||||
<!-- lm.sale_state,-->
|
|
||||||
<!-- lm.max_lease_days,-->
|
|
||||||
<!-- lm.del,-->
|
|
||||||
<!-- lm.online_status,-->
|
|
||||||
<!-- lm.can_sale_numbers,-->
|
|
||||||
<!-- gpc.power_dissipation AS power_dissipation,-->
|
|
||||||
<!-- gpc.hashrate,-->
|
|
||||||
<!-- gpc.month_income AS month_income,-->
|
|
||||||
<!-- gpc.unit,-->
|
|
||||||
<!-- gpc.coin,-->
|
|
||||||
<!-- gpc.NAME,-->
|
|
||||||
<!-- gpc.algorithm-->
|
|
||||||
<!-- FROM-->
|
|
||||||
<!-- lease_machine lm-->
|
|
||||||
<!-- JOIN lease_machine_config gpc ON lm.id = gpc.machine_id AND gpc.status = 1-->
|
|
||||||
<!-- GROUP BY-->
|
|
||||||
<!-- lm.id,-->
|
|
||||||
<!-- gpc.coin,-->
|
|
||||||
<!-- gpc.`algorithm`-->
|
|
||||||
<!-- ) sub-->
|
|
||||||
<!-- JOIN lease_shopping_cart_info ci ON sub.id = ci.product_machine_id AND ci.user_id = #{userId}-->
|
|
||||||
<!-- AND ci.version = 1-->
|
|
||||||
<!-- WHERE-->
|
|
||||||
<!-- sub.id IN-->
|
|
||||||
<!-- <foreach collection="machineIds" item="machineId" open="(" separator="," close=")">-->
|
|
||||||
<!-- #{machineId}-->
|
|
||||||
<!-- </foreach>-->
|
|
||||||
<!-- ) t-->
|
|
||||||
<!-- WHERE-->
|
|
||||||
<!-- rn = 1-->
|
|
||||||
</select>
|
</select>
|
||||||
<select id="getCoinAndAlgoList" resultType="com.m2pool.lease.dto.v2.AsicCoinAndAlgoDto">
|
<select id="getCoinAndAlgoList" resultType="com.m2pool.lease.dto.v2.AsicCoinAndAlgoDto">
|
||||||
select
|
select
|
||||||
|
|||||||
@@ -100,19 +100,14 @@
|
|||||||
SELECT
|
SELECT
|
||||||
t.datetime AS recordTime,
|
t.datetime AS recordTime,
|
||||||
t.hashrate AS power,
|
t.hashrate AS power,
|
||||||
t.miner
|
t.miner,
|
||||||
FROM (
|
t.unit
|
||||||
SELECT
|
|
||||||
sub.datetime,
|
|
||||||
sub.hashrate,
|
|
||||||
sub.miner,
|
|
||||||
@rn := IF(@prev_miner = sub.miner, @rn + 1, 1) AS rn,
|
|
||||||
@prev_miner := sub.miner
|
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
datetime,
|
datetime,
|
||||||
hashrate,
|
hashrate,
|
||||||
miner
|
miner,
|
||||||
|
ROW_NUMBER() OVER(PARTITION BY miner ORDER BY datetime DESC) as rn
|
||||||
FROM `${pool}`
|
FROM `${pool}`
|
||||||
WHERE wallet = #{wallet}
|
WHERE wallet = #{wallet}
|
||||||
AND coin = #{coin}
|
AND coin = #{coin}
|
||||||
@@ -121,33 +116,8 @@
|
|||||||
#{item.workerId}
|
#{item.workerId}
|
||||||
</foreach>
|
</foreach>
|
||||||
)
|
)
|
||||||
ORDER BY miner, datetime DESC
|
|
||||||
) sub,
|
|
||||||
(SELECT @rn := 0, @prev_miner := '') r
|
|
||||||
) t
|
) t
|
||||||
WHERE t.rn = 1
|
WHERE t.rn = 1
|
||||||
|
|
||||||
-- 开发环境
|
|
||||||
<!-- SELECT-->
|
|
||||||
<!-- t.datetime AS recordTime,-->
|
|
||||||
<!-- t.hashrate AS power,-->
|
|
||||||
<!-- t.miner-->
|
|
||||||
<!-- FROM (-->
|
|
||||||
<!-- SELECT-->
|
|
||||||
<!-- datetime,-->
|
|
||||||
<!-- hashrate,-->
|
|
||||||
<!-- miner,-->
|
|
||||||
<!-- ROW_NUMBER() OVER(PARTITION BY miner ORDER BY datetime DESC) as rn-->
|
|
||||||
<!-- FROM `${pool}`-->
|
|
||||||
<!-- WHERE wallet = #{wallet}-->
|
|
||||||
<!-- AND coin = #{coin}-->
|
|
||||||
<!-- AND miner IN (-->
|
|
||||||
<!-- <foreach collection="list" item="item" separator=",">-->
|
|
||||||
<!-- #{item.workerId}-->
|
|
||||||
<!-- </foreach>-->
|
|
||||||
<!-- )-->
|
|
||||||
<!-- ) t-->
|
|
||||||
<!-- WHERE t.rn = 1-->
|
|
||||||
</select>
|
</select>
|
||||||
<select id="getRecently24HourHashrate" resultType="com.m2pool.lease.dto.v2.RealHashrateInfoDto">
|
<select id="getRecently24HourHashrate" resultType="com.m2pool.lease.dto.v2.RealHashrateInfoDto">
|
||||||
SELECT
|
SELECT
|
||||||
@@ -211,7 +181,7 @@
|
|||||||
pool = #{info.pool} AND
|
pool = #{info.pool} AND
|
||||||
pool_url = #{info.poolUrl} AND
|
pool_url = #{info.poolUrl} AND
|
||||||
coin = #{info.coin} AND
|
coin = #{info.coin} AND
|
||||||
`algorithm` = #{info.algorithm} AND status = 1
|
`algorithm` = #{info.algorithm} AND auth_id = #{authId} AND status = 1
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -38,29 +38,6 @@
|
|||||||
</select>
|
</select>
|
||||||
<select id="getUserMinerPower" resultType="com.m2pool.lease.dto.UserMinerPowerDto">
|
<select id="getUserMinerPower" resultType="com.m2pool.lease.dto.UserMinerPowerDto">
|
||||||
|
|
||||||
<!-- SELECT-->
|
|
||||||
<!-- sub.`user`,-->
|
|
||||||
<!-- sub.`miner`,-->
|
|
||||||
<!-- sub.startTime,-->
|
|
||||||
<!-- sub.power,-->
|
|
||||||
<!-- sub.coin-->
|
|
||||||
<!-- FROM (-->
|
|
||||||
<!-- SELECT-->
|
|
||||||
<!-- `user`,-->
|
|
||||||
<!-- `miner`,-->
|
|
||||||
<!-- `date` as startTime,-->
|
|
||||||
<!-- mhs as power,-->
|
|
||||||
<!-- #{coin} as coin,-->
|
|
||||||
<!-- ROW_NUMBER() OVER (PARTITION BY `user`, `miner` ORDER BY `date` DESC) as rn-->
|
|
||||||
<!-- FROM ${coin}_mhs30m-->
|
|
||||||
<!-- WHERE-->
|
|
||||||
<!-- <foreach collection="list" item="pair" separator="OR">-->
|
|
||||||
<!-- (`user` = #{pair.user} AND miner = #{pair.miner})-->
|
|
||||||
<!-- </foreach>-->
|
|
||||||
<!-- ) sub-->
|
|
||||||
<!-- WHERE sub.rn = 1; TODO 开发环境修改-->
|
|
||||||
|
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
sub.`user`,
|
sub.`user`,
|
||||||
sub.`miner`,
|
sub.`miner`,
|
||||||
@@ -69,30 +46,53 @@
|
|||||||
sub.coin
|
sub.coin
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
t.`user`,
|
|
||||||
t.`miner`,
|
|
||||||
t.`date` as startTime,
|
|
||||||
t.mhs as power,
|
|
||||||
#{coin} as coin,
|
|
||||||
@row_num := IF(@current_user = t.`user` AND @current_miner = t.`miner`, @row_num + 1, 1) as rn,
|
|
||||||
@current_user := t.`user`,
|
|
||||||
@current_miner := t.`miner`
|
|
||||||
FROM (
|
|
||||||
SELECT
|
|
||||||
`user`,
|
`user`,
|
||||||
`miner`,
|
`miner`,
|
||||||
`date`,
|
`date` as startTime,
|
||||||
mhs
|
mhs as power,
|
||||||
|
#{coin} as coin,
|
||||||
|
ROW_NUMBER() OVER (PARTITION BY `user`, `miner` ORDER BY `date` DESC) as rn
|
||||||
FROM ${coin}_mhs30m
|
FROM ${coin}_mhs30m
|
||||||
WHERE
|
WHERE
|
||||||
<foreach collection="list" item="pair" separator="OR">
|
<foreach collection="list" item="pair" separator="OR">
|
||||||
(`user` = #{pair.user} AND miner = #{pair.miner})
|
(`user` = #{pair.user} AND miner = #{pair.miner})
|
||||||
</foreach>
|
</foreach>
|
||||||
ORDER BY `user`, `miner`, `date` DESC
|
|
||||||
) t
|
|
||||||
JOIN (SELECT @row_num := 0, @current_user := NULL, @current_miner := NULL) vars
|
|
||||||
) sub
|
) sub
|
||||||
WHERE sub.rn = 1;
|
WHERE sub.rn = 1;
|
||||||
|
|
||||||
|
|
||||||
|
<!-- SELECT-->
|
||||||
|
<!-- sub.`user`,-->
|
||||||
|
<!-- sub.`miner`,-->
|
||||||
|
<!-- sub.startTime,-->
|
||||||
|
<!-- sub.power,-->
|
||||||
|
<!-- sub.coin-->
|
||||||
|
<!-- FROM (-->
|
||||||
|
<!-- SELECT-->
|
||||||
|
<!-- t.`user`,-->
|
||||||
|
<!-- t.`miner`,-->
|
||||||
|
<!-- t.`date` as startTime,-->
|
||||||
|
<!-- t.mhs as power,-->
|
||||||
|
<!-- #{coin} as coin,-->
|
||||||
|
<!-- @row_num := IF(@current_user = t.`user` AND @current_miner = t.`miner`, @row_num + 1, 1) as rn,-->
|
||||||
|
<!-- @current_user := t.`user`,-->
|
||||||
|
<!-- @current_miner := t.`miner`-->
|
||||||
|
<!-- FROM (-->
|
||||||
|
<!-- SELECT-->
|
||||||
|
<!-- `user`,-->
|
||||||
|
<!-- `miner`,-->
|
||||||
|
<!-- `date`,-->
|
||||||
|
<!-- mhs-->
|
||||||
|
<!-- FROM ${coin}_mhs30m-->
|
||||||
|
<!-- WHERE-->
|
||||||
|
<!-- <foreach collection="list" item="pair" separator="OR">-->
|
||||||
|
<!-- (`user` = #{pair.user} AND miner = #{pair.miner})-->
|
||||||
|
<!-- </foreach>-->
|
||||||
|
<!-- ORDER BY `user`, `miner`, `date` DESC-->
|
||||||
|
<!-- ) t-->
|
||||||
|
<!-- JOIN (SELECT @row_num := 0, @current_user := NULL, @current_miner := NULL) vars-->
|
||||||
|
<!-- ) sub-->
|
||||||
|
<!-- WHERE sub.rn = 1;-->
|
||||||
</select>
|
</select>
|
||||||
<update id="updateBatchIncome">
|
<update id="updateBatchIncome">
|
||||||
INSERT INTO lease_user_owned_product (id, settle_income, settle_usdt_income,start_time, end_time)
|
INSERT INTO lease_user_owned_product (id, settle_income, settle_usdt_income,start_time, end_time)
|
||||||
|
|||||||
Reference in New Issue
Block a user