m2pool项目提交

Signed-off-by: jxy_duyi <2826961034@qq.com>
This commit is contained in:
jxy_duyi
2025-04-10 18:44:21 +08:00
parent faaeb24007
commit c4f34073c4
508 changed files with 50991 additions and 0 deletions

View File

@@ -0,0 +1,216 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>m2pool-modules</artifactId>
<groupId>com.m2pool</groupId>
<version>3.5.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>m2pool-pool</artifactId>
<dependencies>
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud Alibaba Sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot Actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Swagger UI -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.fox.version}</version>
</dependency>
<!-- Mysql Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<scope>provided</scope>
</dependency>
<!-- &lt;!&ndash; Mybatis-Plus &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>com.baomidou</groupId>-->
<!-- <artifactId>mybatis-plus-boot-starter</artifactId>-->
<!-- <exclusions>-->
<!-- <exclusion>-->
<!-- <artifactId>jsqlparser</artifactId>-->
<!-- <groupId>com.github.jsqlparser</groupId>-->
<!-- </exclusion>-->
<!--&lt;!&ndash; <exclusion>&ndash;&gt;-->
<!--&lt;!&ndash; <artifactId>mybatis</artifactId>&ndash;&gt;-->
<!--&lt;!&ndash; <groupId>org.mybatis</groupId>&ndash;&gt;-->
<!--&lt;!&ndash; </exclusion>&ndash;&gt;-->
<!-- </exclusions>-->
<!-- </dependency>-->
<!-- M2Pool Common DataSource -->
<dependency>
<groupId>com.m2pool</groupId>
<artifactId>common-datasource</artifactId>
</dependency>
<!-- M2Pool Common security -->
<dependency>
<groupId>com.m2pool</groupId>
<artifactId>common-security</artifactId>
</dependency>
<dependency>
<groupId>com.m2pool</groupId>
<artifactId>common-log</artifactId>
</dependency>
<dependency>
<groupId>com.m2pool</groupId>
<artifactId>common-swagger</artifactId>
</dependency>
<!-- WebSocket-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
<scope>compile</scope>
</dependency>
<!--google两步认证相关-->
<dependency>
<groupId>de.taimos</groupId>
<artifactId>totp</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.18.0</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version> <!-- 请使用最新版本 -->
</dependency>
</dependencies>
<profiles>
<profile>
<!-- 本地环境 -->
<id>dev</id>
<properties>
<spring.profile>dev</spring.profile>
<nacos.server.address>127.0.0.1:8808</nacos.server.address>
</properties>
<activation>
<!-- 是否默认激活 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 测试环境 -->
<id>test</id>
<properties>
<spring.profile>test</spring.profile>
<nacos.server.address>127.0.0.1:8808</nacos.server.address>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
<profile>
<!-- 生产环境 -->
<id>prod</id>
<properties>
<spring.profile>prod</spring.profile>
<nacos.server.address>127.0.0.1:8808</nacos.server.address>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
</profiles>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,34 @@
package com.m2pool.pool;
import com.m2pool.common.swagger.annotation.EnableCustomSwagger2;
import com.m2pool.common.security.annotation.EnableCustomConfig;
import com.m2pool.common.security.annotation.EnableM2PoolFeignClients;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
/**
* @Description pool服务入口类
* @Date 2024/6/14 13:42
* @Author dy
*/
@EnableCustomConfig
@EnableCustomSwagger2
@EnableM2PoolFeignClients
@SpringBootApplication
@MapperScan({"com.m2pool.pool.mapper"})
public class M2PoolApplication {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(M2PoolApplication.class,args);
System.out.println("m2pool矿池微服务启动成功");
}
}

View File

@@ -0,0 +1,19 @@
//package com.m2pool.pool.config;
//
//import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
//import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
///**
// * @Description TODO
// * @Date 2024/6/14 11:15
// * @Author dy
// */
//@Configuration
//public class MybatisPlusConfig {
// @Bean
// public PaginationInterceptor paginationInterceptor(){
// return new PaginationInterceptor();
// }
//}

View File

@@ -0,0 +1,77 @@
package com.m2pool.pool.config;
import com.m2pool.pool.factory.IgnoreSSLRequestFactory;
import org.apache.http.client.HttpClient;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContextBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
/**
* @Description TODO
* @Date 2024/6/14 14:59
* @Author dy
*/
@Configuration
public class RestTemplateConfig {
/**
* 使用ssl对证书进行验证需要将证书导出到jdk管理仓库
* 命令keytool -import -v -trustcacerts -alias mytest -file "D:/tmp/mytest.cer" -keystore "C:/Program Files/Java/jdk1.8.0_131/jre/lib/security/cacerts"
*/
//@Bean("restTemplate")
//@Primary
//public RestTemplate restTemplate() throws NoSuchAlgorithmException, KeyManagementException {
// HttpComponentsClientHttpRequestFactory httpRequestFactory = new
// HttpComponentsClientHttpRequestFactory();
// httpRequestFactory.setConnectionRequestTimeout(6 * 1000); //获取连接池连接的超时时间(毫秒)
// httpRequestFactory.setConnectTimeout(6 * 1000); //连接上服务器(握手成功)的时间(毫秒)
// httpRequestFactory.setReadTimeout(60 * 1000); //返回数据时间(毫秒)
// httpRequestFactory.setHttpClient(httpClient());
// RestTemplate restTemplate = new RestTemplate(httpRequestFactory);
// return restTemplate;
//}
/**
* 绕过ssl对证书进行验证无需将证书导出到jdk管理仓库
*/
@Bean("restTemplateIgnoreSSL")
public RestTemplate restTemplateIgnoreSSL() throws NoSuchAlgorithmException, KeyManagementException {
IgnoreSSLRequestFactory requestFactory = new IgnoreSSLRequestFactory(httpClient());
requestFactory.setConnectTimeout(60000); //连接上服务器(握手成功)的时间
requestFactory.setReadTimeout(60000); //返回数据时间
RestTemplate restTemplate = new RestTemplate(requestFactory);
return restTemplate;
}
@Bean
public HttpClient httpClient() throws KeyManagementException, NoSuchAlgorithmException {
SSLContextBuilder contextBuilder = new SSLContextBuilder();
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(contextBuilder.build(), NoopHostnameVerifier.INSTANCE);
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", new PlainConnectionSocketFactory())
.register("https", socketFactory).build();
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
connectionManager.setMaxTotal(200);
connectionManager.setDefaultMaxPerRoute(100);
CloseableHttpClient httpClient = HttpClientBuilder.create().setConnectionManager(connectionManager).build();
return httpClient;
}
}

View File

@@ -0,0 +1,22 @@
package com.m2pool.pool.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
/**
* @Description scheduler配置类
* @Date 2024/10/25 10:26
* @Author 杜懿
*/
@Configuration
public class ScheduledTaskConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(20);
taskScheduler.initialize();
taskRegistrar.setTaskScheduler(taskScheduler);
}
}

View File

@@ -0,0 +1,20 @@
package com.m2pool.pool.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
/**
* @Description websocket 配置
* @Date 2024/6/14 11:09
* @Author dy
*/
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter()
{
return new ServerEndpointExporter();
}
}

View File

@@ -0,0 +1,79 @@
package com.m2pool.pool.controller;
import com.github.pagehelper.PageHelper;
import com.m2pool.common.core.web.Result.AjaxResult;
import com.m2pool.common.core.web.controller.BaseController;
import com.m2pool.common.core.web.page.TableDataInfo;
import com.m2pool.common.security.annotation.RequiresLogin;
import com.m2pool.pool.dto.NoticeListDto;
import com.m2pool.pool.service.NoticeService;
import com.m2pool.pool.vo.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Description 告警系统相关请求接口
* @Date 2024/6/14 9:54
* @Author dy
*/
@RestController
@RequestMapping("/notice")
public class NoticeController extends BaseController {
@Autowired
private NoticeService noticeService;
@PostMapping("/addNoticeEmail")
@ApiOperation(value = "添加告警邮箱")
@RequiresLogin
public AjaxResult addNoticeEmail(@RequestBody NoticeAddVo vo){
return noticeService.addNoticeEmail(vo);
}
@PostMapping("/getCode")
@ApiOperation(value = "绑定通知邮箱 发送邮箱验证码")
@RequiresLogin
public AjaxResult getCode(@RequestBody NoticeAddVo vo){
clearPage();
return noticeService.getCode(vo);
}
@PostMapping("/getList")
@ApiOperation(value = "获取当前用户绑定的通知邮箱列表 ")
@RequiresLogin
public TableDataInfo getNoticeEmailList(@RequestBody NoticePageVo vo){
PageHelper.startPage(vo.getPage(),vo.getLimit());
List<NoticeListDto> list = noticeService.getNoticeEmailList(vo);
return getDataTable(list);
}
@PostMapping("/updateInfo")
@ApiOperation(value = "修改通知邮箱备注信息")
@RequiresLogin
public AjaxResult updateInfo(@RequestBody NoticeUpdateVo vo){
return noticeService.updateInfo(vo);
}
@DeleteMapping("/deleteEmail")
@ApiOperation(value = "删除通知邮箱")
@RequiresLogin
public AjaxResult deleteEmail(@RequestBody NoticeDelVo vo){
return noticeService.deleteEmail(vo);
}
}

View File

@@ -0,0 +1,203 @@
package com.m2pool.pool.controller;
import com.github.pagehelper.PageHelper;
import com.m2pool.common.core.web.Result.AjaxResult;
import com.m2pool.common.core.web.controller.BaseController;
import com.m2pool.common.core.web.page.TableDataInfo;
import com.m2pool.common.security.annotation.RequiresLogin;
import com.m2pool.pool.dto.BlockInfoDto;
import com.m2pool.pool.service.MinerAccountService;
import com.m2pool.pool.service.PoolService;
import com.m2pool.pool.vo.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
* @Description 统一请求接口
* @Date 2024/6/14 9:54
* @Author dy
*/
@RestController
//@RequestMapping("/pool")
public class PoolController extends BaseController {
@Autowired
private PoolService poolService;
@Autowired
private MinerAccountService maService;
@PostMapping("/getCoinInfo")
@ApiOperation(value = "获取币种(矿池)信息")
public AjaxResult getCoinInfo(@Valid @RequestBody CoinVo vo){
return poolService.getPoolInfo(vo);
}
@PostMapping("/checkAccount")
@ApiOperation(value = "校验挖矿账号是否存在")
public boolean checkAccount(@Valid @RequestBody MinerAccountAddVo vo){
return poolService.checkAccount(vo);
}
@PostMapping("/getPoolPower")
@ApiOperation(value = "获取币种(矿池)算力曲线图")
public AjaxResult getPoolPower(@Valid @RequestBody CoinVo vo){
return poolService.getPoolPower(vo);
}
//@PostMapping("/getMinerCount")
//@ApiOperation(value = "获取币种(矿池)矿工数量曲线图")
//public AjaxResult getMinerCount(@Valid @RequestBody CoinVo com.m2pool.chat.vo){
//
// return poolService.getMinerCount(com.m2pool.chat.vo);
//
//}
@PostMapping("/getLuck")
@ApiOperation(value = "获取币种(矿池)幸运值")
public AjaxResult getLuck(@Valid @RequestBody CoinVo vo){
return poolService.getLuckByCoin(vo);
}
@PostMapping("/getBlockInfo")
@ApiOperation(value = "获取币种(矿池)报块信息")
public TableDataInfo getBlockInfo(@RequestBody() CoinVo vo){
PageHelper.startPage(vo.getPage(),vo.getLimit());
List<BlockInfoDto> list = poolService.getBlockInfoList(vo);
return getDataTable(list);
}
//@PostMapping("/getPoolPowerDistribution")
//@ApiOperation(value = "获取当前矿池算力分布 柱状图")
//public AjaxResult getPoolPowerDistribution(@Valid @RequestBody CoinVo com.m2pool.chat.vo){
// //暂未使用
// return poolService.getPoolPowerDistribution(com.m2pool.chat.vo);
//
//}
@PostMapping("/getMinerAccountPower")
@ApiOperation(value = "获取当前挖矿账号算力曲线图")
@RequiresLogin
public AjaxResult getMinerAccountPower(@Valid @RequestBody AccountVo vo){
return maService.getMinerAccountPower(vo);
}
@PostMapping("/getAccountPowerDistribution")
@ApiOperation(value = "获取当前挖矿账号算力分布 柱状图")
@RequiresLogin
public AjaxResult getAccountPowerDistribution(@Valid @RequestBody AccountVo vo){
return maService.getAccountPowerDistribution(vo);
}
@PostMapping("/getMinerAccountInfo")
@ApiOperation(value = "获取当前挖矿账户收益信息")
@RequiresLogin
public AjaxResult getMinerAccountInfo(@Valid @RequestBody AccountVo vo){
return maService.getMinerAccountInfo(vo);
}
@PostMapping("/getMinerList")
@ApiOperation(value = "获取当前挖矿账户下矿工详情")
@RequiresLogin
public AjaxResult getMinerList(@Valid @RequestBody MinerListVo vo){
return maService.getMinerList(vo);
}
@PostMapping("/getMinerPower")
@ApiOperation(value = "获取矿工算力曲线图")
@RequiresLogin
public AjaxResult getMinerPower(@Valid @RequestBody MinerVo vo){
return maService.getMinerPower(vo);
}
//@PostMapping("/getMinerPowerDistribution")
//@ApiOperation(value = "获取矿工算力分布 柱状图")
//@RequiresLogin
//public AjaxResult getMinerPowerDistribution(@Valid @RequestBody MinerVo com.m2pool.chat.vo){
//
// return maService.getMinerPowerDistribution(com.m2pool.chat.vo);
//
//}
@PostMapping("/getHistoryIncome")
@ApiOperation(value = "获取收益历史记录")
@RequiresLogin
public TableDataInfo getHistoryIncome(@RequestBody() AccountVo vo){
//PageHelper.startPage(com.m2pool.chat.vo.getPage(),com.m2pool.chat.vo.getLimit());
return maService.getHistoryIncome(vo);
}
@PostMapping("/getHistoryOutcome")
@ApiOperation(value = "获取账号提现历史记录")
@RequiresLogin
public TableDataInfo getHistoryOutcome(@RequestBody() AccountVo vo){
return maService.getHistoryOutcome(vo);
}
@PostMapping(value = {"/getCoinBalanceList","/getCoinBalancetList"})
@ApiOperation(value = "获取币种余额list")
public AjaxResult getCoinBalancetList(@RequestBody BalanceListGetVo vo){
return poolService.getCoinBalanceList(vo);
}
@PostMapping("/getNetPower")
@ApiOperation(value = "获取全网算力曲线")
public AjaxResult getNetPower(@Valid @RequestBody CoinVo vo){
return poolService.getNetPower(vo);
}
@PostMapping("/getParam")
@ApiOperation(value = "根据币种获取计算器相关参数")
public AjaxResult getParam(@Valid @RequestBody CoinVo vo){
return poolService.getParam(vo);
}
@GetMapping("/test2")
@ApiOperation(value = "")
public AjaxResult test2(){
return poolService.test2();
}
@GetMapping("/test1")
@ApiOperation(value = "")
public AjaxResult test1(){
return poolService.test1();
}
}

View File

@@ -0,0 +1,146 @@
package com.m2pool.pool.controller;
import com.github.pagehelper.PageHelper;
import com.m2pool.common.core.utils.StringUtils;
import com.m2pool.common.core.web.Result.AjaxResult;
import com.m2pool.common.core.web.controller.BaseController;
import com.m2pool.common.core.web.page.TableDataInfo;
import com.m2pool.common.security.annotation.RequiresLogin;
import com.m2pool.pool.dto.UserReadPageInfoReturnDto;
import com.m2pool.pool.service.ReadOnlyService;
import com.m2pool.pool.vo.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
* @Description 统一请求接口
* @Date 2024/6/14 9:54
* @Author dy
*/
@RestController
@RequestMapping("/read")
public class ReadOnlyController extends BaseController {
@Autowired
private ReadOnlyService roService;
@PostMapping("/getHtmlUrl")
@ApiOperation(value = "创建只读页面 ")
@RequiresLogin
public AjaxResult getHtmlUrl(@Valid @RequestBody ReadOnlyHtmlCreateVo vo){
return roService.createPageUrl(vo);
}
@PostMapping("/getUrlList")
@ApiOperation(value = "获取当前用户只读页面列表 ")
@RequiresLogin
public TableDataInfo getUrlList(@RequestBody(required = false) PageVo vo){
if(StringUtils.isNull(vo)){
vo = new PageVo();
}
PageHelper.clearPage();
return roService.getUrlList(vo);
}
@PostMapping("/getUrlInfo")
@ApiOperation(value = "获取当前只读页面基础信息 ")
@RequiresLogin
public AjaxResult getUrlInfo(@Valid @RequestBody ReadOnlyKeyVo vo){
return roService.getUrlInfo(vo);
}
@PostMapping("/changeUrlInfo")
@ApiOperation(value = "修改只读页面 只能修改备注和权限")
@RequiresLogin
public AjaxResult changeUrlInfo(@Valid @RequestBody ReadOnlyHtmlChangeVo vo){
return roService.changeUrlInfo(vo);
}
@DeleteMapping("/delPage")
@ApiOperation(value = "修改只读页面 只能修改备注和权限")
@RequiresLogin
public AjaxResult delPage(@Valid @RequestBody ReadOnlyKeyVo vo){
return roService.delPageByKey(vo);
}
@PostMapping("/getPageInfo")
@ApiOperation(value = "只读页面 获取只读页面 权限信息")
public AjaxResult getPageInfo(@Valid @RequestBody ReadOnlyKeyVo vo){
return roService.getPageInfo(vo);
}
@PostMapping("/getMinerAccountPower")
@ApiOperation(value = "只读页面 获取只读页面 挖矿账号算力曲线图")
public AjaxResult getMinerAccountPower(@Valid @RequestBody ReadOnlyIntervalVo vo){
return roService.getMinerAccountPower(vo);
}
@PostMapping("/getAccountPowerDistribution")
@ApiOperation(value = "只读页面 获取挖矿账号算力分布 柱状图")
public AjaxResult getAccountPowerDistribution(@Valid @RequestBody ReadOnlyIntervalVo vo){
return roService.getAccountPowerDistribution(vo);
}
@PostMapping("/getProfitInfo")
@ApiOperation(value = "只读页面 获取挖矿账户收益信息")
public AjaxResult getMinerAccountInfo(@Valid @RequestBody ReadOnlyKeyVo vo){
return roService.getProfitInfo(vo);
}
@PostMapping("/getMinerList")
@ApiOperation(value = "只读页面 获取挖矿账户下矿工详情")
public AjaxResult getMinerList(@Valid @RequestBody ReadOnlyListVo vo){
PageHelper.clearPage();
return roService.getMinerList(vo);
}
@PostMapping("/getMinerPower")
@ApiOperation(value = "只读页面 获取矿工算力曲线图")
public AjaxResult getMinerPower(@Valid @RequestBody ReadOnlyMinerVo vo){
return roService.getMinerPower(vo);
}
@PostMapping("/getHistoryIncome")
@ApiOperation(value = "获取收益历史记录")
public TableDataInfo getHistoryIncome(@RequestBody() ReadOnlyPageVo vo){
PageHelper.clearPage();
return roService.getHistoryIncome(vo);
}
@PostMapping("/getHistoryOutcome")
@ApiOperation(value = "获取账号提现历史记录")
public TableDataInfo getHistoryOutcome(@RequestBody() ReadOnlyPageVo vo){
PageHelper.clearPage();
return roService.getHistoryOutcome(vo);
}
}

View File

@@ -0,0 +1,192 @@
package com.m2pool.pool.controller;
import com.github.pagehelper.PageHelper;
import com.m2pool.common.core.text.Convert;
import com.m2pool.common.core.utils.StringUtils;
import com.m2pool.common.core.web.Result.AjaxResult;
import com.m2pool.common.core.web.controller.BaseController;
import com.m2pool.common.core.web.page.TableDataInfo;
import com.m2pool.common.security.annotation.Logical;
import com.m2pool.common.security.annotation.RequiresLogin;
import com.m2pool.common.security.annotation.RequiresRoles;
import com.m2pool.pool.dto.IdsDto;
import com.m2pool.pool.dto.TicketListDto;
import com.m2pool.pool.service.TicketService;
import com.m2pool.pool.vo.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
/**
* @Description 统一请求接口
* @Date 2022/5/27 9:54
* @Author 杜懿
*/
@RestController
@RequestMapping("/ticket")
public class TicketController extends BaseController {
@Autowired
private TicketService ticketService;
@PostMapping("/uploadFile")
@ApiOperation(value = "文件上传")
public AjaxResult uploadFile(@RequestParam("file") MultipartFile[] file){
try {
return ticketService.uploadFiles(file);
} catch (SQLException e) {
e.printStackTrace();
return AjaxResult.error("服务器异常,请联系管理员");
}
}
@GetMapping("/downloadFile")
@ApiOperation(value = "文件批量下载")
public void download(IdsDto dto, HttpServletRequest request, HttpServletResponse response){
ticketService.downloadByIds(dto.getIds(),request,response);
}
@PostMapping("/submitTicket")
@ApiOperation(value = "提交工单")
@RequiresLogin
public AjaxResult submitTicket(@RequestBody(required = false) TicketVo vo){
if(StringUtils.isNull(vo)){vo = new TicketVo();}
return ticketService.submitTicket(vo);
}
@PostMapping("/resubmitTicket")
@ApiOperation(value = "工单内容补充工单")
@RequiresLogin
@RequiresRoles(value = {"admin", "registered"}, logical = Logical.OR)
public AjaxResult resubmitTicket(@RequestBody ResubmitTicketVo vo){
return ticketService.resubmitTicket(vo);
}
@PostMapping({"/getPrivateTicket","privateConsume"})
@ApiOperation(value = "个人工单列表")
@RequiresLogin
@RequiresRoles(value = {"admin", "registered"}, logical = Logical.OR)
public AjaxResult getPrivateTicket(@RequestBody(required = false) PrivateTicketListVo vo){
if(StringUtils.isNull(vo)){
vo = new PrivateTicketListVo();
vo.setStatus(0);
}
return ticketService.getPrivateTicketByStatus(vo);
}
@PostMapping({"/privateTicketDetails","getTicketDetails"})
@ApiOperation(value = "个人工单详情")
@RequiresLogin
public AjaxResult getPrivateTicketDetails(@RequestBody() IdVo vo){
return ticketService.getPrivateTicketDetails(vo.getId());
}
@PostMapping("/endTicket")
@ApiOperation(value = "用户关闭工单")
@RequiresLogin
@RequiresRoles(value = {"admin", "registered"}, logical = Logical.OR)
public AjaxResult endTicket(@RequestBody(required = false) EndTicketVo vo){
return ticketService.endTicket(vo);
}
/********************* admin相关接口 *************************/
//@PostMapping("/getTicketList")
//@ApiOperation(value = "按状态搜索后台工单列表")
//@RequiresLogin
//@RequiresRoles(value = {"admin", "accounting","support","maintainer"}, logical = Logical.OR)
//public TableDataInfo getTicketList(@RequestBody StatusVo com.m2pool.chat.vo){
// PageHelper.startPage(com.m2pool.chat.vo.getPage(),com.m2pool.chat.vo.getLimit());
// List<TicketListDto> list = ticketService.getTicketList(com.m2pool.chat.vo.getStatus());
// return getDataTable(list);
//}
@PostMapping("/bk/getAllTicket")
@ApiOperation(value = "条件搜索后台所有工单列表")
@RequiresLogin
@RequiresRoles("admin")
public TableDataInfo getAllTicket(@RequestBody AllTicketListVo vo){
System.out.println("com.m2pool.chat.vo"+vo);
if(StringUtils.isNotBlank(vo.getCond())){
System.out.println("不为空");
Pattern pattern = Pattern.compile("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$");
if(pattern.matcher(vo.getCond()).matches()){
//验证是否是邮箱
System.out.println("邮箱"+vo.getCond());
vo.setEmail(vo.getCond());
}else {
//判断是否是id
Long id = Convert.toLong(vo.getCond(), 0L);
System.out.println(id);
if(id > 0){
System.out.println("工单id"+vo.getCond());
vo.setId(id);
}else {
return getDataTable(new ArrayList<>());
}
}
}
PageHelper.startPage(vo.getPage(),vo.getLimit());
return getDataTable(ticketService.getAllTicket(vo)) ;
}
@PostMapping("/bk/endTicket")
@ApiOperation(value = "关闭用户工单")
@RequiresLogin
@RequiresRoles(value = {"admin"}, logical = Logical.OR)
public AjaxResult endUserTicket(@RequestBody(required = false) IdVo vo){
return ticketService.closeTicket(vo);
}
@PostMapping("/bk/list")
@ApiOperation(value = "根据状态获取type为线上(type=0)的工单")
@RequiresLogin
@RequiresRoles(value = {"admin"}, logical = Logical.OR)
public TableDataInfo onlineTicketList(@RequestBody StatusVo vo){
PageHelper.startPage(vo.getPage(),vo.getLimit());
List<TicketListDto> list = ticketService.getSupportTicketList(vo);
return getDataTable(list);
}
@PostMapping("/bk/details")
@ApiOperation(value = "工单详情")
@RequiresLogin
@RequiresRoles(value = {"admin"}, logical = Logical.OR)
public AjaxResult onlineTicketDetails(@RequestBody IdVo vo){
if(StringUtils.isNull(vo)){
return AjaxResult.error("工单id缺失");
}
return ticketService.getTicketDetails(vo.getId());
}
@PostMapping("/bk/respon")
@ApiOperation(value = "回复工单")
@RequiresLogin
@RequiresRoles(value = {"admin"}, logical = Logical.OR)
public AjaxResult onlineResponTicket(@RequestBody ResponTicketVo vo){
return ticketService.onlineResponTicket(vo);
}
}

View File

@@ -0,0 +1,246 @@
package com.m2pool.pool.controller;
import com.github.pagehelper.PageHelper;
import com.m2pool.common.core.utils.StringUtils;
import com.m2pool.common.core.web.Result.AjaxResult;
import com.m2pool.common.core.web.controller.BaseController;
import com.m2pool.common.core.web.page.TableDataInfo;
import com.m2pool.common.security.annotation.RequiresLogin;
import com.m2pool.pool.dto.UserApiDto;
import com.m2pool.pool.service.GoogleAuthService;
import com.m2pool.pool.service.MinerAccountService;
import com.m2pool.pool.service.UserMinserService;
import com.m2pool.pool.vo.*;
import com.m2pool.system.api.RemoteUserService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
* @Description 统一请求接口
* @Date 2024/6/14 9:54
* @Author dy
*/
@RestController
@RequestMapping("/user")
public class UserController extends BaseController {
@Autowired
private UserMinserService umService;
@Autowired
private GoogleAuthService googleAuthService;
@Autowired
private MinerAccountService maService;
@Autowired
private RemoteUserService userService;
@PostMapping("/addMinerAccount")
@ApiOperation(value = "绑定挖矿账号")
@RequiresLogin
public AjaxResult addMinerAccount(@Valid @RequestBody MinerAccountAddVo vo){
return umService.addMinerAccount(vo);
}
@PostMapping("/checkAccount")
@ApiOperation(value = "校验挖矿账号是否存在")
@RequiresLogin
public AjaxResult checkAccount(@Valid @RequestBody MinerAccountAddVo vo){
return umService.checkAccount(vo);
}
@PostMapping("/checkBalance")
@ApiOperation(value = "校验钱包可用性")
@RequiresLogin
public AjaxResult checkBalance(@Valid @RequestBody BalanceCheckVo vo){
return umService.checkBalance(vo);
}
@PostMapping("/check")
@ApiOperation(value = "校验账户是否可用和钱包可用性")
@RequiresLogin
public AjaxResult check(@Valid @RequestBody MaBalanceCheckVo vo){
return umService.checkMaAndBalance(vo);
}
@DeleteMapping("/delMinerAccount")
@ApiOperation(value = "删除挖矿账号")
@RequiresLogin
public AjaxResult delMinerAccount(@Valid @RequestBody MinerAccountDelVo vo){
return umService.delMinerAccount(vo);
}
@PostMapping("/addBalance")
@ApiOperation(value = "挖矿账户绑定钱包-->>现改为 修改钱包地址或起付线以及切换自动提现激活状态")
@RequiresLogin
public AjaxResult addBalance(@Valid @RequestBody AccountBalanceAddVo vo){
return umService.addBalance(vo);
}
//@PostMapping("/updateBalance")
//@ApiOperation(value = "挖矿账户解绑钱包")
//@RequiresLogin
//public AjaxResult updateBalance(@Valid @RequestBody AccountBalanceAddVo com.m2pool.chat.vo){
//
// return umService.updateBalance(com.m2pool.chat.vo);
//
//}
@PostMapping("/getAccountList")
@ApiOperation(value = "获取用户当前币种下所有挖矿账号")
@RequiresLogin
public AjaxResult getAccountList(){
return umService.getAccountList();
}
@PostMapping("/getAccountGradeList")
@ApiOperation(value = "获取用户当前币种下所有挖矿账号")
@RequiresLogin
public AjaxResult getAccountGradeList(){
return umService.getAccountGradeList();
}
@PostMapping("/getMinerAccountBalance")
@ApiOperation(value = "获取当前矿工账号绑定钱包地址")
@RequiresLogin
public AjaxResult getMinerAccountBalance(@RequestBody MinerIdVo vo){
return umService.getMinerAccountBalance(vo);
}
/**************************************** google两步验证相关接口 ***********************************************************/
@PostMapping("/ifBind")
@ApiOperation(value = "校验钱包可用性")
@RequiresLogin
public AjaxResult ifBind(){
clearPage();
return googleAuthService.ifBind();
}
@PostMapping("/getBindInfo")
@ApiOperation(value = "获取谷歌验证器 安全码和验证码")
@RequiresLogin
public AjaxResult getBindInfo(){
clearPage();
return googleAuthService.getBindInfo();
}
@PostMapping("/getBindCode")
@ApiOperation(value = "绑定谷歌验证器 发送邮箱验证码")
@RequiresLogin
public AjaxResult getBindCode(){
clearPage();
return googleAuthService.getBindCode();
}
@PostMapping("/bindGoogle")
@ApiOperation(value = "绑定谷歌验证器")
@RequiresLogin
public AjaxResult bindGoogle(@Valid @RequestBody GoogleBindVo vo){
clearPage();
return googleAuthService.bindGoogle(vo);
}
@PostMapping("/closeStepTwo")
@ApiOperation(value = "关闭两步验证")
@RequiresLogin
public AjaxResult closeStepTwo(@Valid @RequestBody GoogleCloseVo vo){
clearPage();
return googleAuthService.closeStepTwp(vo);
}
@PostMapping("/getCloseCode")
@ApiOperation(value = "关闭谷歌验证器 发送邮箱验证码")
@RequiresLogin
public AjaxResult getCloseCode(){
clearPage();
return googleAuthService.getCloseCode();
}
@PostMapping("/emailIfBind")
@ApiOperation(value = "校验钱包可用性")
public AjaxResult emailIfBind(@Valid @RequestBody EmailVo vo){
clearPage();
return googleAuthService.emailIfBind(vo);
}
@PostMapping("/getApiKey")
@ApiOperation(value = "创建apiKey")
@RequiresLogin
public AjaxResult getApiKey(@Valid @RequestBody ApiKeyCreateVo vo){
return umService.createApiKey(vo);
}
@PostMapping("/getApiList")
@ApiOperation(value = "获取当前用户apiKEY列表 ")
@RequiresLogin
public TableDataInfo getApiList(@RequestBody(required = false) PageVo vo){
if(StringUtils.isNull(vo)){
vo = new PageVo();
}
PageHelper.startPage(vo.getPage(),vo.getLimit());
List<UserApiDto> list = umService.getApiList(vo);
return getDataTable(list);
}
@PostMapping("/getApiInfo")
@ApiOperation(value = "获取当前只读页面基础信息 ")
@RequiresLogin
public AjaxResult getApiInfo(@Valid @RequestBody ApiKeyInfoVo vo){
return umService.getApiInfo(vo);
}
@PostMapping("/updateAPI")
@ApiOperation(value = "修改API绑定信息 只能修改备注和权限")
@RequiresLogin
public AjaxResult updateAPI(@Valid @RequestBody ApiKeyUpdateVo vo){
return umService.updateApi(vo);
}
@DeleteMapping("/delApi")
@ApiOperation(value = "删除指定api 只能修改备注和权限")
@RequiresLogin
public AjaxResult delApi(@Valid @RequestBody ApiKeyDelVo vo){
return umService.deleteApi(vo);
}
}

View File

@@ -0,0 +1,29 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 曲线图数据结构
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class AccountPowerDto implements Serializable {
/** 日期 */
private Date date;
/** 矿池算力 */
private double pv;
/** 有效提交数 */
private BigDecimal accepts;
/** 被拒提交数 */
private BigDecimal rejects;
}

View File

@@ -0,0 +1,37 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 曲线图数据结构
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class AccountProfitInfoDto implements Serializable {
/** 挖矿账户 */
private String account;
/** 总收益 */
private BigDecimal totalProfit;
/** 总支出 */
private BigDecimal expend;
/** 昨日收益 */
private BigDecimal preProfit;
/** 今日收益 */
private BigDecimal todayPorfit;
/** 余额 */
private BigDecimal balance;
private BigDecimal withdrawable;
}

View File

@@ -0,0 +1,26 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description TODO
* @Date 2022/6/20 17:44
* @Author 杜懿
*/
@Data
public class AllTicketListDto {
private int id;
private Date date;
private String desc;
private String email;
private String status;
}

View File

@@ -0,0 +1,25 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 幸运值
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class BalanceListDto implements Serializable {
/** 挖矿账户名 */
private String user;
/** 钱包地址 */
private String address;
/** 起付线 */
private double amount;
}

View File

@@ -0,0 +1,31 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Description 当前币种矿池报块信息
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class BlockInfoDto implements Serializable {
/** 区块高度 */
private int height;
/** 报块时间 */
private Date date;
/** 区块hash */
private String hash;
/** 报块奖励 */
private double reward;
/** 交易费 */
private double fees;
}

View File

@@ -0,0 +1,32 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 返回数据实体
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class CalParamDto implements Serializable {
/** 币种 */
private String coin;
/** 全网算力 */
private BigDecimal netHashrate;
/** 区块奖励 */
private BigDecimal reward;
/** 每日报块数 */
private BigDecimal count;
/** 矿池手续费 */
private BigDecimal poolFee;
}

View File

@@ -0,0 +1,21 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Description 返回数据实体
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class ComDataDto implements Serializable {
/** 时间 */
private Date date;
/** 数据值 */
private Object value;
}

View File

@@ -0,0 +1,25 @@
package com.m2pool.pool.dto;
import com.alibaba.nacos.shaded.com.google.gson.annotations.SerializedName;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 返回数据实体
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class CountDto implements Serializable {
/** 时间 */
private Date dataTime;
/** 数据条数 */
private int num;
private BigDecimal price;
}

View File

@@ -0,0 +1,25 @@
package com.m2pool.pool.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 返回数据实体
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class DateBigDecimalDto implements Serializable {
/** 时间 */
private Date pDate;
/** 数据值 */
private BigDecimal value;
private BigDecimal price;
}

View File

@@ -0,0 +1,28 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 返回数据实体
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class DateBigDecimalsDto implements Serializable {
/** 时间 */
private Date date;
/** 数据值 */
private BigDecimal value1;
private BigDecimal value2;
private BigDecimal value3;
private BigDecimal value4;
}

View File

@@ -0,0 +1,22 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 返回数据实体
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class DateStrBigDecimalDto implements Serializable {
/** 时间 */
private String date;
/** 数据值 */
private BigDecimal value;
}

View File

@@ -0,0 +1,21 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @Description 返回数据实体
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class DateStrStringDto implements Serializable {
/** 时间 */
private String date;
/** 数据值 */
private String value;
}

View File

@@ -0,0 +1,22 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 返回数据实体
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class DateStringDto implements Serializable {
/** 时间 */
private Date date;
/** 数据值 */
private String value;
}

View File

@@ -0,0 +1,25 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 返回数据实体
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class DistributionDto implements Serializable {
/** 算力范围低值 */
private int low;
/** 算力范围高值 */
private int high;
/** 矿工数 */
private int count;
}

View File

@@ -0,0 +1,22 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 返回数据实体
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class GoogleInfoDto implements Serializable {
/** 谷歌验证码 */
private String secret;
/** 二维码 */
private String img;
}

View File

@@ -0,0 +1,15 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 返回数据实体
* @Date 2022/5/30 11:17
* @Author 杜懿
*/
@Data
public class IdsDto implements Serializable {
private String ids;
}

View File

@@ -0,0 +1,35 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 矿工信息总览表对象
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class IncomeDto implements Serializable {
/** 时间 */
private Date date;
/** 难度 */
private String difficult;
/** 币种/矿池 */
private String coin;
/** 收益 */
private BigDecimal amount;
/** 备注 */
private double mhs;
private String comment;
}

View File

@@ -0,0 +1,28 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Description 幸运值
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class LuckDto implements Serializable {
/** 3日幸运值 */
private double luck3d;
/** 7日幸运值 */
private double luck7d;
/** 30日幸运值 */
private double luck30d;
/** 90日幸运值 */
private double luck90d;
}

View File

@@ -0,0 +1,31 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 矿工信息总览表对象
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class MinerAccountBalanceDto implements Serializable {
private long id;
/** 挖矿账户 */
private String ma;
/** 提现收款地址 */
private String balance;
/** 是否激活 */
private int active;
private double amount;
private String remark;
}

View File

@@ -0,0 +1,22 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Description 币种(矿池)矿工数量曲线图数据结构
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class MinerCountLineDto implements Serializable {
/** 日期 */
private Date date;
/** 矿工数量 */
private int value;
}

View File

@@ -0,0 +1,59 @@
package com.m2pool.pool.dto;
import com.fasterxml.jackson.annotation.JsonAlias;
import lombok.Data;
import javax.naming.Name;
import java.io.Serializable;
import java.util.Date;
/**
* @Description 当前币种矿池信息
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class MinerDataDto implements Serializable {
/** id */
private long id;
/** 时间 */
private Date date;
/** 挖矿账号 */
private String user;
/** 矿工名 */
private String miner;
private String refindex;
/** 1小时平均算力 */
private double mhs;
/** 24小时平均算力 */
private double mhs24h;
/** 申请次数?通过次数? */
private int accepts;
/** 被拒次数 */
private int rejects;
/** 拒绝率 */
//private int rejects_ratio;
@JsonAlias("rejects_ratio")
private double rejectsRatio;
/** 最后一次提交的时间 */
@JsonAlias("last_submit")
private Date lastSubmit;
/** 1天内在线时间 */
private String state;
/** 是否在线 */
private String online;
}

View File

@@ -0,0 +1,59 @@
package com.m2pool.pool.dto;
import com.fasterxml.jackson.annotation.JsonAlias;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Description 当前币种矿池信息
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class MinerDataInsertDBDto implements Serializable {
/** id */
private long id;
/** 时间 */
private String date;
/** 挖矿账号 */
private String user;
/** 矿工名 */
private String miner;
/** 1小时平均算力 */
private double mhs;
/** 24小时平均算力 */
private double mhs24h;
///** 申请次数?通过次数? */
//private int accepts;
//
///** 被拒次数 */
//private int rejects;
//
///** 拒绝率 */
////private int rejects_ratio;
//@JsonAlias("rejects_ratio")
//private double rejectsRatio;
/** 最后一次提交的时间 */
@JsonAlias("last_submit")
private String lastSubmit;
///** */
//private double duration;
/** 是否在线 */
//private String online;
private String state;
}

View File

@@ -0,0 +1,37 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Description 矿工信息总览表对象
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class MinerDto implements Serializable {
private String id;
/** 矿工名 */
private String miner;
/** 1小时平均算力 */
private double rate;
/** 24小时平均算力 */
private double dailyRate;
/** 拒绝率 */
private double reject;
/** 最后提交时间 */
private Date submit;
private String status;
private long offline = 0;
}

View File

@@ -0,0 +1,50 @@
package com.m2pool.pool.dto;
import com.fasterxml.jackson.annotation.JsonAlias;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @Description 矿工信息总览表对象
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class MinerListDto implements Serializable {
/** 总矿机数 */
private int all;
/** 在线矿机数 */
private int online;
/** 离线矿机数 */
private int offline;
/** 矿工名 */
private String miner;
/** 1小时平均算力 */
private double rate;
/** 24小时平均算力 */
private double dailyRate;
/** 拒绝率 */
private double reject;
private Date submit;
/** 总条数 */
private int total;
/** 总页数 */
private int page;
/** 最后一次提交的时间 */
private List<MinerDto> rows;
}

View File

@@ -0,0 +1,27 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 矿工信息总览表对象
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class NoticeListDto implements Serializable {
/** 通知邮箱记录表id */
private long id;
/** 通知邮箱 */
private String email;
/** 币种/矿池 */
private String remark;
}

View File

@@ -0,0 +1,28 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 矿工信息总览表对象
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class NoticeMinerCoinListDto implements Serializable {
///** 通知邮箱记录表id */
//private long id;
/** 通知邮箱 */
private String email;
/** 挖矿账户 */
private String miner;
///** 币种 */
//private String coin;
}

View File

@@ -0,0 +1,25 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Description 文件
* @Date 2024/6/14 15:57
* @Author dy
*/
@Data
public class OfflineUserMinerDto implements Serializable {
private Date date;
private String user;
private String miners;
private int offline;
}

View File

@@ -0,0 +1,34 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Description 支出表实体类
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class OutcomeDto implements Serializable {
/** 时间 */
private Date date;
/** 提现地址 */
private String address;
/** 币种/矿池 */
private String coin;
/** 收益 */
private double amount;
/** 交易id */
private String txid;
private int status = 1;
}

View File

@@ -0,0 +1,22 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 幸运值
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class PageInfoDto implements Serializable {
/** 网址 */
private String url;
/** 页面标号 */
private String key;
}

View File

@@ -0,0 +1,22 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 幸运值
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class PageUrlDto implements Serializable {
/** 网址 */
private String url;
/** 页面标号 */
private String key;
}

View File

@@ -0,0 +1,49 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Description 当前币种矿池信息
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class PoolInfoDto implements Serializable {
/** 币种参数名 */
private String coin;
/** 页面显示名 */
private String name;
/** 算法 */
private String algorithm;
/** 全网算力 */
private String totalPower;
/** 全网难度 */
private String totalDifficulty;
/** 币价 */
private String price;
/** 当前高度 */
private long height;
/** 矿池算力 */
private String poolPower;
/** 矿工数 */
private String poolMc;
/** 收费模式 **/
private String model ="PPLNS";
/** 费率% 默认为1%**/
private int fee = 1;
}

View File

@@ -0,0 +1,28 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 曲线图数据结构
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class PowerLineDto implements Serializable {
/** 日期 */
private Date date;
/** 矿工算力 */
private BigDecimal pv;
/** 拒绝率 */
private BigDecimal rejectRate;
private double price;
}

View File

@@ -0,0 +1,23 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.util.Date;
/**
* @Description TODO
* @Date 2022/6/20 17:44
* @Author 杜懿
*/
@Data
public class PrivateTicketListDto {
private int id;
private Date date;
private String email;
private String status;
}

View File

@@ -0,0 +1,27 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 收益
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class ProfitDto implements Serializable {
/** 算力范围低值 */
private long id;
/** 结算时间 */
private Date date;
/** 收益 */
private BigDecimal profit;
private int status;
}

View File

@@ -0,0 +1,29 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 文件
* @Date 2024/6/14 15:57
* @Author dy
*/
@Data
public class ReadOnlyPageInfo implements Serializable {
/** 只读页面表id */
private long id;
/** 权限配置 */
private String[] config;
private String coin;
private String account;
private String img;
}

View File

@@ -0,0 +1,29 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 返回数据实体
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class SysFileDto implements Serializable {
/** 多文件拼接 */
private String id;
/**
* 文件名称
*/
private String name;
/**
* 文件地址
*/
private String url;
}

View File

@@ -0,0 +1,31 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.util.Date;
/**
* @Description TODO
* @Date 2022/6/20 17:44
* @Author 杜懿
*/
@Data
public class TicketContentDto {
private Date time;
private String content;
private String name;
private String files;
private String videoPath;
private String audioPath;
private String imagePath;
}

View File

@@ -0,0 +1,25 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.util.Date;
/**
* @Description TODO
* @Date 2022/6/20 17:44
* @Author 杜懿
*/
@Data
public class TicketDto {
private int id;
private String email;
private String desc;
private Date createTime;
private int status;
}

View File

@@ -0,0 +1,23 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.util.Date;
/**
* @Description TODO
* @Date 2022/6/20 17:44
* @Author 杜懿
*/
@Data
public class TicketListDto {
private int id;
private Date date;
private String email;
private String status;
}

View File

@@ -0,0 +1,29 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* @Description TODO
* @Date 2022/6/20 17:44
* @Author 杜懿
*/
@Data
public class TicketPrivateDto {
private int id;
private String email;
private String desc;
private Date createTime;
private String status;
private List<TicketContentDto> list;
}

View File

@@ -0,0 +1,27 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 幸运值
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class UserAccountDto implements Serializable {
private long id;
/** 网站用户名 */
private String user;
/** 挖矿账户名 */
private String account;
/** 币种 */
private String coin;
}

View File

@@ -0,0 +1,20 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 幸运值
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class UserAccountGradeDto implements Serializable {
private long id;
/** 挖矿账户名 */
private String account;
}

View File

@@ -0,0 +1,27 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @Description 幸运值
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class UserAccountGradeListDto implements Serializable {
/** 币种 */
private String coin;
/** 矿池展示名 */
private String title;
/** 图片地址 */
private String img;
private List<UserAccountGradeDto> children;
}

View File

@@ -0,0 +1,35 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 幸运值
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class UserAccountListDto implements Serializable {
private long id;
/** 挖矿账户名 */
private String ma;
/** 币种 */
private String coin;
private String pool;
/** 备注 */
private String remark;
private String img;
private String addr;
private int addrStatus;
}

View File

@@ -0,0 +1,28 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 文件
* @Date 2024/6/14 15:57
* @Author dy
*/
@Data
public class UserApiDto implements Serializable {
/** 只读页面表id */
private long id;
private String user;
private String key;
private String ip;
/** 权限 */
private String[] perms;
}

View File

@@ -0,0 +1,25 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 文件
* @Date 2024/6/14 15:57
* @Author dy
*/
@Data
public class UserApiInfoReturnDto implements Serializable {
/** 只读页面表id */
private long id;
/** 页面请求路径 */
private String ip;
/** 权限配置 */
private String[] perms;
}

View File

@@ -0,0 +1,23 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 曲线图数据结构
* @Date 2024/6/13 11:17
* @Author dy
*/
@Data
public class UserPowerDto implements Serializable {
/** 挖矿账户名 */
private String user;
/** 矿池算力 */
private BigDecimal mhs;
}

View File

@@ -0,0 +1,44 @@
package com.m2pool.pool.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 文件
* @Date 2024/6/14 15:57
* @Author dy
*/
@Data
public class UserReadPageInfoReturnDto implements Serializable {
/** 只读页面表id */
private long id;
/** 只读页面编码 */
private String key;
private String user;
/** 页面请求路径 */
private String url;
private String img;
/** 挖矿账户 */
private String account;
/** 币种 */
private String coin;
/** 币种展示名*/
private String label;
/** 权限配置 */
private String[] config;
/** 备注 */
private String remark;
}

View File

@@ -0,0 +1,36 @@
package com.m2pool.pool.entity;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 文件
* @Date 2024/6/14 15:57
* @Author dy
*/
@Data
public class BlockInfo implements Serializable {
/** 区块高度 */
private long height;
/** 全网难度 */
private BigDecimal difficulty;
/** 全网算力 */
private BigDecimal power;
/** 报块奖励 */
private BigDecimal reward;
/** 报块手续费 */
private BigDecimal fees;
/** 报块实际收益 */
private BigDecimal profit;
}

View File

@@ -0,0 +1,26 @@
package com.m2pool.pool.entity;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @Description 文件
* @Date 2024/6/14 15:57
* @Author dy
*/
@Data
public class GoogleInfo implements Serializable {
/** 邮箱 */
private String email;
/** 谷歌验证码 */
private String secret;
/** 谷歌验证码 */
private int status;
}

View File

@@ -0,0 +1,33 @@
package com.m2pool.pool.entity;
import lombok.Data;
import java.util.Date;
/**
* @Description
* @Date 2024/11/19 15:57
* @Author 杜懿
*/
@Data
public class M2File {
/** id */
private Long id;
/** 时间 */
private Date createTime;
/** value */
private String fileName;
private String url;
// 0 图片 1音频 2视频
private int fileType;
private String userName;
}

View File

@@ -0,0 +1,30 @@
package com.m2pool.pool.entity;
import lombok.Data;
import java.util.Date;
/**
* @Description 文件
* @Date 2024/6/14 15:57
* @Author dy
*/
@Data
public class M2PoolFile {
/** id */
private Long id;
/** 时间 */
private Date createTime;
/** value */
private String fileName;
private String url;
private String userName;
}

View File

@@ -0,0 +1,19 @@
//package com.m2pool.pool.entity;
//
//import lombok.Data;
//
///**
// * @Description TODO
// * @Date 2025/3/21 18:16
// * @Author 杜懿
// */
//@Data
//public class NotifyMsgAlph {
// //ID interface{} `json:"id"`
// //Method string `json:"method"`
// //Params [5]interface{} `json:"params"`
//
// private Object id;
// private String method;
// private Object[] params;
//}

View File

@@ -0,0 +1,47 @@
package com.m2pool.pool.entity;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
* @Description TODO
* @Date 2025/4/3 12:47
* @Author 杜懿
*/
@Data
public class NotifyMsgParams {
@JsonProperty("jobId")
public String jobId;
//jobId
@JsonProperty("fromGroup")
public int fromGroup;
//header
@JsonProperty("toGroup")
public int toGroup;
//header
@JsonProperty("headerBlob")
public String header;
@JsonProperty("txsBlob")
public String txs;
@JsonProperty("targetBlob")
public String target;
@JsonProperty("height")
public long height;
@JsonProperty("diff")
public double diff;
@JsonProperty("nonce")
public String nonce;
@JsonProperty("extranonce1")
public String extranonce1;
@JsonProperty("extranonce2_size")
public long extranonce2Size;
}

View File

@@ -0,0 +1,29 @@
package com.m2pool.pool.entity;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Set;
/**
* @Description 文件
* @Date 2024/6/14 15:57
* @Author dy
*/
@Data
public class OpenApiKey implements Serializable {
/** 用户唯一标识 */
private String key;
/** 用户邮箱 */
private String user;
/** apiKey绑定的ip */
private String apiIp;
private String permissions;
}

View File

@@ -0,0 +1,36 @@
package com.m2pool.pool.entity;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 文件
* @Date 2024/6/14 15:57
* @Author dy
*/
@Data
public class PoolPower implements Serializable {
/** 日期 */
private Date date;
/** 日期str 入库要用String */
private String dateStr;
/** 矿池算力 */
private BigDecimal mhs;
/** 总矿工数 */
private int miners;
/** 在线矿工数 */
private int online;
/** 离线矿工数 */
private int offline;
}

View File

@@ -0,0 +1,44 @@
package com.m2pool.pool.entity;
import lombok.Data;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.Socket;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingDeque;
/**
* @Description TODO
* @Date 2025/3/17 10:00
* @Author 杜懿
*/
@Data
public class TempMiner {
public String coin;
public String pool;
public String user;
public String password;
public int id;
public String state;
// net.conn
public OutputStream conn;
public String extraNonce1;
public int extraNonce2Size;
public double difficulty;
public String jobId;
public String header;
public String nbits;
//64位无符号整数
public BigDecimal jobTime;
public String blockData;
//64位无符号整数
public long nonce;
public long blockNonce;
//chan bool
private final BlockingQueue<Boolean> newJobCh = new LinkedBlockingDeque<>();
public volatile boolean running = false;
public volatile boolean newJob = false;
}

View File

@@ -0,0 +1,27 @@
package com.m2pool.pool.entity;
import lombok.Data;
import java.util.Date;
/**
* @Description TODO
* @Date 2022/6/20 17:44
* @Author 杜懿
*/
@Data
public class Ticket {
private int id;
private String email;
private Date createTime;
private int status;
//问题描述
private String desc;
}

View File

@@ -0,0 +1,28 @@
package com.m2pool.pool.entity;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 文件
* @Date 2024/6/14 15:57
* @Author dy
*/
@Data
public class UserApi implements Serializable {
/** 只读页面表id */
private long id;
private String user;
private String key;
private String ip;
/** 权限 */
private String perms;
}

View File

@@ -0,0 +1,29 @@
package com.m2pool.pool.entity;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 文件
* @Date 2024/6/14 15:57
* @Author dy
*/
@Data
public class UserGoogleAuthInfo implements Serializable {
/** 邮箱 */
private String email;
/** 谷歌验证码 */
private String secret;
private String pwd;
/** 谷歌验证码 */
private int status;
}

View File

@@ -0,0 +1,31 @@
package com.m2pool.pool.entity;
import lombok.Data;
import java.util.Date;
/**
* @Description 用户网站账户-用户挖矿账号名数据
* 对应数据库user_miner_account数据
* @Date 2024/6/14 15:57
* @Author dy
*/
@Data
public class UserMinerAccount {
private long id;
/** 网站账号名 */
private String user;
/** 挖矿账号名 */
private String ma;
/** 对应矿池 参数名 */
private String coin;
private String remark;
}

View File

@@ -0,0 +1,45 @@
package com.m2pool.pool.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Description 文件
* @Date 2024/6/14 15:57
* @Author dy
*/
@Data
public class UserReadOnlyPage implements Serializable {
private long id;
/** 邮箱 */
private String email;
/** 币种 */
private String coin;
/** 挖矿账户 */
private String account;
/** 只读页面key */
private String key;
/** 页面权限配置 */
private String config;
/** 备注 */
private String remark;
private String lang;
/** 创建时间 */
private Date createTime;
/** 修改时间 */
private Date updateTime;
}

View File

@@ -0,0 +1,42 @@
package com.m2pool.pool.entity;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @Description 文件
* @Date 2024/6/14 15:57
* @Author dy
*/
@Data
public class UserReadOnlyPageInfo implements Serializable {
/** 只读页面表id */
private long id;
/** 只读页面编码 */
private String key;
private String user;
/** 页面请求路径 */
private String url;
/** 挖矿账户 */
private String account;
/** 币种 */
private String coin;
/** 权限配置 */
private String config;
/** 备注 */
private String remark;
private String lang;
}

View File

@@ -0,0 +1,39 @@
package com.m2pool.pool.enums;
/**
* @Description 矿池
* @Date 2022/5/20 11:15
* @Author 杜懿
*/
public enum BalanceUseStatus {
START(0, "正常"),
DELETE(99, "停用");
/** 币种参数名 */
private final int code;
/** 页面显示名 */
private final String status;
BalanceUseStatus(int code, String status) {
this.code = code;
this.status = status;
}
public int getCode() {
return code;
}
public String getStatus() {
return status;
}
public static String getStatusByCode(int code){
for (BalanceUseStatus t : BalanceUseStatus.values()) {
if(t.getCode()==code){
return t.getStatus();
}
}
return "";
}
}

View File

@@ -0,0 +1,39 @@
package com.m2pool.pool.enums;
/**
* @Description 矿池
* @Date 2022/5/20 11:15
* @Author 杜懿
*/
public enum MinerAccountStatus {
START(0, "正常"),
DELETE(11, "停用");
/** 币种参数名 */
private final int code;
/** 页面显示名 */
private final String status;
MinerAccountStatus(int code, String status) {
this.code = code;
this.status = status;
}
public int getCode() {
return code;
}
public String getStatus() {
return status;
}
public static String getStatusByCode(int code){
for (MinerAccountStatus t : MinerAccountStatus.values()) {
if(t.getCode()==code){
return t.getStatus();
}
}
return "";
}
}

View File

@@ -0,0 +1,63 @@
package com.m2pool.pool.enums;
/**
* @Description 矿池
* @Date 2022/5/20 11:15
* @Author 杜懿
*/
public enum NodeConfig {
GRS("grs", "13.213.4.56", "1441", "test", "test"),
MONA("mona", "13.213.4.56", "9402", "test", "test"),
DGBS("dgbs", "13.214.176.64", "14022", "test", "test"),
DGBQ("dgbq", "13.214.176.64", "14022", "test", "test"),
DGBO("dgbo", "13.214.176.64", "14022", "test", "test"),
DGB_QUBIT_A10("dgb_qubit_a10", "127.0.0.1", "3306", "user", "pwd"),
DGB_SKEIN_A10("dgb_skein_a10", "127.0.0.1", "3306", "user", "pwd"),
DGB_ODO_B20("dgb_odo_b20", "127.0.0.1", "3306", "user", "pwd"),
NEXA("nexa", "18.139.85.190", "7227", "test", "test"),
RXD("rxd", "13.214.176.64", "7332", "test", "test"),
ALPH("alph", "18.141.161.129", "12973", "test", "test"),
ENX("enx", "13.214.6.253", "12973", "test", "test");
/** 币种参数名 */
private final String coin;
/** 页面显示名 */
private final String ip;
/** 算法 */
private final String host;
private final String user;
private final String pwd;
NodeConfig(String coin, String ip, String host, String user, String pwd) {
this.coin = coin;
this.ip = ip;
this.host = host;
this.user = user;
this.pwd = pwd;
}
public String getCoin() {
return coin;
}
public String getIp() {
return ip;
}
public String getHost() {
return host;
}
public String getUser() {
return user;
}
public String getPwd() {
return pwd;
}
}

View File

@@ -0,0 +1,45 @@
package com.m2pool.pool.enums;
import java.math.BigDecimal;
/**
* @Description 矿池 相关的
* @Date 2022/5/20 11:15
* @Author 杜懿
*/
public enum NodeConstant {
GRS("grs", BigDecimal.valueOf(Math.pow(2,32)).divide(BigDecimal.valueOf(60),2,BigDecimal.ROUND_HALF_UP)),
MONA("mona", BigDecimal.valueOf(Math.pow(2,32)).divide(BigDecimal.valueOf(90),2,BigDecimal.ROUND_HALF_UP)),
DGBS("dgbs", BigDecimal.valueOf(Math.pow(2,32)).divide(BigDecimal.valueOf(73.2),2,BigDecimal.ROUND_HALF_UP)),
DGBQ("dgbq", BigDecimal.valueOf(Math.pow(2,32)).divide(BigDecimal.valueOf(73.2),2,BigDecimal.ROUND_HALF_UP)),
DGBO("dgbo", BigDecimal.valueOf(Math.pow(2,32)).divide(BigDecimal.valueOf(73.2),2,BigDecimal.ROUND_HALF_UP)),
DGB_QUBIT_A10("dgb_qubit_a10", BigDecimal.valueOf(Math.pow(2,32)).divide(BigDecimal.valueOf(120),2,BigDecimal.ROUND_HALF_UP)),
DGB_SKEIN_A10("dgb_skein_a10", BigDecimal.valueOf(Math.pow(2,32)).divide(BigDecimal.valueOf(120),2,BigDecimal.ROUND_HALF_UP)),
DGB_ODO_B20("dgb_odo_b20", BigDecimal.valueOf(Math.pow(2,32)).divide(BigDecimal.valueOf(120),2,BigDecimal.ROUND_HALF_UP)),
NEXA("nexa", BigDecimal.valueOf(Math.pow(2,32)).subtract(BigDecimal.ONE).divide(BigDecimal.valueOf(120),2,BigDecimal.ROUND_HALF_UP)),
RXD("rxd", BigDecimal.valueOf(Math.pow(2,32)).subtract(BigDecimal.ONE).divide(BigDecimal.valueOf(300),2,BigDecimal.ROUND_HALF_UP)),
ALPH("alph", BigDecimal.valueOf(Math.pow(2,32)).subtract(BigDecimal.ONE).divide(BigDecimal.valueOf(16),2,BigDecimal.ROUND_HALF_UP)),
ENX("enx", BigDecimal.valueOf(Math.pow(2,32)).subtract(BigDecimal.ONE).divide(BigDecimal.valueOf(1),2,BigDecimal.ROUND_HALF_UP));
/** 币种参数名 */
private final String coin;
/** 换算系数 */
private final BigDecimal factor;
NodeConstant(String coin, BigDecimal factor) {
this.coin = coin;
this.factor = factor;
}
public String getCoin() {
return coin;
}
public BigDecimal getFactor() {
return factor;
}
}

View File

@@ -0,0 +1,49 @@
package com.m2pool.pool.enums;
/**
* @Description 矿池默认起付额
* @Date 2022/5/20 11:15
* @Author 杜懿
*/
public enum PoolAmount {
GRS("grs", 1),
MONA("mona", 1),
DGBS("dgbs", 1),
DGBQ("dgbq", 1),
DGBO("dgbo", 1),
DGB_QUBIT_A10("dgb_qubit_a10", 100),
DGB_SKEIN_A10("dgb_skein_a10", 100),
DGB_ODO_B20("dgb_odo_b20", 100),
NEXA("nexa", 10000),
RXD("rxd", 100),
ALPH("alph", 1),
ENX("enx", 5000);
/** 币种参数名 */
private final String coin;
/** 单位 */
private final double amount;
PoolAmount(String coin, double amount) {
this.coin = coin;
this.amount = amount;
}
public String getCoin() {
return coin;
}
public double getAmount(){return amount;}
public static double getAmountByCoin(String coin){
for (PoolAmount t : PoolAmount.values()) {
if(t.getCoin().equals(coin)){
return t.getAmount();
}
}
return 10000;
}
}

View File

@@ -0,0 +1,59 @@
package com.m2pool.pool.enums;
import java.math.BigDecimal;
/**
* @Description 矿池 收益计数器相关常量
* @Date 2022/5/20 11:15
* @Author 杜懿
*/
public enum PoolCalParamConfig {
GRS("grs", BigDecimal.valueOf(Math.pow(2,32)), BigDecimal.valueOf(1440),BigDecimal.valueOf(0.01)),
MONA("mona", BigDecimal.valueOf(Math.pow(2,32)), BigDecimal.valueOf(960),BigDecimal.valueOf(0.01)),
DGBS("dgbs", BigDecimal.valueOf(Math.pow(2,32)), BigDecimal.valueOf(1180),BigDecimal.valueOf(0.01)),
DGBQ("dgbq", BigDecimal.valueOf(Math.pow(2,32)), BigDecimal.valueOf(1180),BigDecimal.valueOf(0.01)),
DGBO("dgbo", BigDecimal.valueOf(Math.pow(2,32)), BigDecimal.valueOf(1180),BigDecimal.valueOf(0.01)),
DGB2_ODO("dgb2_odo", BigDecimal.valueOf(Math.pow(2,32)), BigDecimal.valueOf(720),BigDecimal.valueOf(0.01)),
DGB_QUBIT_A10("dgb_qubit_a10", BigDecimal.valueOf(Math.pow(2,32)), BigDecimal.valueOf(720),BigDecimal.valueOf(0.01)),
DGB_SKEIN_A10("dgb_skein_a10", BigDecimal.valueOf(Math.pow(2,32)), BigDecimal.valueOf(720),BigDecimal.valueOf(0.01)),
DGB_ODO_B20("dgb_odo_b20", BigDecimal.valueOf(Math.pow(2,32)), BigDecimal.valueOf(720),BigDecimal.valueOf(0.01)),
NEXA("nexa", BigDecimal.valueOf(Math.pow(2,32)), BigDecimal.valueOf(720),BigDecimal.valueOf(0.01)),
RXD("rxd", BigDecimal.valueOf(Math.pow(2,32)), BigDecimal.valueOf(288),BigDecimal.valueOf(0.01)),
ALPH("alph", BigDecimal.valueOf(Math.pow(2,32)), BigDecimal.valueOf(5400),BigDecimal.valueOf(0.01)),
ENX("enx", BigDecimal.valueOf(Math.pow(2,32)), BigDecimal.valueOf(86400),BigDecimal.valueOf(0.00));
/** 币种参数名 */
private final String coin;
/** 报块所需哈希次数 难度为1时 */
private final BigDecimal hashTime;
/** 每日出块数 s*/
private final BigDecimal count;
private final BigDecimal poolFees;
PoolCalParamConfig(String coin, BigDecimal hashTime, BigDecimal count, BigDecimal poolFees) {
this.coin = coin;
this.hashTime = hashTime;
this.count = count;
this.poolFees = poolFees;
}
public String getCoin() {
return coin;
}
public BigDecimal getHashTime() {
return hashTime;
}
public BigDecimal getCount() {
return count;
}
public BigDecimal getPoolFees() {
return poolFees;
}
}

View File

@@ -0,0 +1,51 @@
package com.m2pool.pool.enums;
/**
* @Description 矿池单位换算
* @Date 2022/5/20 11:15
* @Author 杜懿
*/
public enum PoolProfitScale {
GRS("grs", 2),
MONA("mona", 2),
DGBS("dgbs", 2),
DGBQ("dgbq", 2),
DGBO("dgbo", 2),
DGB2_ODO("dgb2_odo", 2),
DGB_QUBIT_A10("dgb_qubit_a10", 2),
DGB_SKEIN_A10("dgb_skein_a10", 2),
DGB_ODO_B20("dgb_odo_b20", 2),
NEXA("nexa", 2),
RXD("rxd", 2),
ALPH("alph", 2),
ENX("enx", 2);
/** 币种参数名 */
private final String coin;
private final int scale ;
PoolProfitScale(String coin, int scale) {
this.coin = coin;
this.scale = scale;
}
public String getCoin() {
return coin;
}
public int getScale() {
return scale;
}
public static int getScaleByCoin(String coin){
for (PoolProfitScale t : PoolProfitScale.values()) {
if(t.getCoin().equals(coin)){
return t.getScale();
}
}
return 8;
}
}

View File

@@ -0,0 +1,62 @@
package com.m2pool.pool.enums;
/**
* @Description 矿池单位换算
* @Date 2022/5/20 11:15
* @Author 杜懿
*/
public enum PoolUnits {
GRS("grs", "MH/s", 1000*1000, 1000),
MONA("mona", "MH/s", 1000*1000, 1000),
DGBS("dgbs", "MH/s", 1000*1000, 1000),
DGBQ("dgbq", "MH/s", 1000*1000, 1000),
DGBO("dgbo", "MH/s", 1000*1000, 1000),
DGB2_ODO("dgb2_odo", "MH/s", 1000*1000, 1000),
DGB_QUBIT_A10("dgb_qubit_a10", "MH/s", 1000*1000, 1000),
DGB_SKEIN_A10("dgb_skein_a10", "MH/s", 1000*1000, 1000),
DGB_ODO_B20("dgb_odo_b20", "MH/s", 1000*1000, 1000),
NEXA("nexa", "MH/s", 1000*1000, 1000),
RXD("rxd", "MH/s", 1000*1000, 1000),
ALPH("alph", "MH/s", 1000*1000, 1000),
ENX("enx", "MH/s", 1000*1000, 1000);
/** 币种参数名 */
private final String coin;
/** 矿池数据单位 */
private final String unit;
/** 换算率 数据库原始数据换算为H/s的换算率 */
private final int hRate ;
/** 换算率 数据库原始数据换算为H/s的换算率 */
private final int gRate ;
PoolUnits(String coin, String unit, int hRate, int gRate) {
this.coin = coin;
this.unit = unit;
this.hRate = hRate;
this.gRate = gRate;
}
public String getCoin() {
return coin;
}
public String getUnit() {
return unit;
}
public int gethRate() {
return hRate;
}
public int getgRate() {
return gRate;
}
}

View File

@@ -0,0 +1,104 @@
package com.m2pool.pool.enums;
/**
* @Description 矿池
* @Date 2022/5/20 11:15
* @Author 杜懿
*/
public enum Pools {
GRS("grs", "grs", "groestl", "grs_pool_blkstats", "grs_mhs", "grs_pool","grs.svg",0.985),
MONA("mona", "mona", "Lyra2REv2", "mona_pool_blkstats", "mona_mhs", "mona_pool","mona.svg",0.985),
DGBS("dgbs", "dgb(skein)", "DigiByte(Skein)", "dgbs_pool_blkstats", "dgbs_mhs", "dgbs_pool","dgb.svg",0.985),
DGBQ("dgbq", "dgb(qubit)", "DigiByte(Qubit)", "dgbq_pool_blkstats", "dgbq_mhs", "dgbq_pool","dgb.svg",0.985),
DGBO("dgbo", "dgb(odocrypt)", "DigiByte(Odocrypt)", "dgbo_pool_blkstats", "dgbo_mhs", "dgbo_pool","dgb.svg",0.985),
//DGB2_ODO("dgb2_odo", "dgb-odocrypt-pool2", "odocrypt", "dgb2_odo_pool_blkstats", "dgb2_odo_miners", "dgb2_odo_pool"),
DGB_QUBIT_A10("dgb_qubit_a10", "dgb-qubit-pool2", "qubit", "dgb_qubit_a10_pool_blkstats", "dgb_qubit_a10_miners", "dgb_qubit_a10_pool","dgb.svg",0.985),
DGB_SKEIN_A10("dgb_skein_a10", "dgb-skein-pool2", "skein", "dgb_skein_a10_pool_blkstats", "dgb_skein_a10_miners", "dgb_skein_a10_pool","dgb.svg",0.985),
DGB_ODO_B20("dgb_odo_b20", "dgb-odoscrypt-pool3", "odocrypt", "dgb_odo_b20_pool_blkstats", "dgb_odo_b20_miners", "dgb_odo_b20_pool","dgb.svg",0.985),
NEXA("nexa", "nexa", "NexaPow", "nexa_pool_blkstats", "nexa_mhs", "nexa_pool","nexa.png",0.985),
RXD("rxd", "Radiant", "Sha512256D", "rxd_pool_blkstats", "rxd_mhs", "rxd_pool","rxd.png",0.985),
ALPH("alph", "Alephium", "Blake3", "alph_pool_blkstats", "alph_mhs", "alph_pool","alph.svg",0.985),
ENX("enx", "entropyx", "kHeavyHash", "enx_pool_blkstats", "enx_mhs", "enx_pool","enx.svg",0.985);
/** 币种参数名 */
private final String coin;
/** 页面显示名 */
private final String name;
/** 算法 */
private final String algorithm;
/** 报块数据表名 */
private final String blkTable;
/** 矿机表名 */
private final String mhs;
/** 矿池表名 */
private final String poolTable;
private final String img;
private final double fac;
Pools(String coin, String name, String algorithm, String blkTable, String mhs, String poolTable,String img,double fac) {
this.coin = coin;
this.name = name;
this.algorithm = algorithm;
this.blkTable = blkTable;
this.mhs = mhs;
this.poolTable = poolTable;
this.img = img;
this.fac = fac;
}
public String getCoin() {
return coin;
}
public String getName() {
return name;
}
public String getAlgorithm() {
return algorithm;
}
public String getBlkTable() {
return blkTable;
}
public String getMhs() {
return mhs;
}
public String getPoolTable() {
return poolTable;
}
public String getImg() {
return img;
}
public double getFac() {
return fac;
}
public static String getNameByCoin(String coin){
for (Pools t : Pools.values()) {
if(t.getCoin().equals(coin)){
return t.getName();
}
}
return "";
}
public static String getImgByCoin(String coin){
for (Pools t : Pools.values()) {
if(t.getCoin().equals(coin)){
return t.getImg();
}
}
return "";
}
}

View File

@@ -0,0 +1,44 @@
package com.m2pool.pool.enums;
/**
* @Description 工单状态枚举类
* @Date 2022/5/20 11:15
* @Author 杜懿
*/
public enum TicketStatusType {
//ps:4是后台人员已回复用户但用户还未读 13是用户已读
STATUS_NULL(0,""),
STATUS_ONE(1,"待处理"),
STATUS_TWO(2,"客服处理中"),
STATUS_TEN(10,"已完结");
private final int code;
private final String status;
TicketStatusType(int code, String status)
{
this.code = code;
this.status = status;
}
public int getCode()
{
return code;
}
public String getStatus()
{
return status;
}
public static String getStatusByCode(int code){
for (TicketStatusType t : TicketStatusType.values()) {
if(t.getCode()==code){
return t.getStatus();
}
}
return "";
}
}

View File

@@ -0,0 +1,133 @@
package com.m2pool.pool.factory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import javax.net.ssl.*;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.Socket;
import java.security.cert.X509Certificate;
/**
* @Description TODO
* @Date 2024/6/14 11:47
* @Author dy
*/
public class HttpsClientRequestFactory extends SimpleClientHttpRequestFactory{
@Override
protected void prepareConnection(HttpURLConnection connection, String httpMethod) {
try {
if (!(connection instanceof HttpsURLConnection)) {
throw new RuntimeException("An instance of HttpsURLConnection is expected");
}
HttpsURLConnection httpsConnection = (HttpsURLConnection) connection;
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}
};
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
httpsConnection.setSSLSocketFactory(new MyCustomSSLSocketFactory(sslContext.getSocketFactory()));
httpsConnection.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
});
super.prepareConnection(httpsConnection, httpMethod);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* We need to invoke sslSocket.setEnabledProtocols(new String[] {"SSLv3"});
* see http://www.oracle.com/technetwork/java/javase/documentation/cve-2014-3566-2342133.html (Java 8 section)
*/
// SSLSocketFactory用于创建 SSLSockets
private static class MyCustomSSLSocketFactory extends SSLSocketFactory {
private final SSLSocketFactory delegate;
public MyCustomSSLSocketFactory(SSLSocketFactory delegate) {
this.delegate = delegate;
}
// 返回默认启用的密码套件。除非一个列表启用对SSL连接的握手会使用这些密码套件。
// 这些默认的服务的最低质量要求保密保护和服务器身份验证
@Override
public String[] getDefaultCipherSuites() {
return delegate.getDefaultCipherSuites();
}
// 返回的密码套件可用于SSL连接启用的名字
@Override
public String[] getSupportedCipherSuites() {
return delegate.getSupportedCipherSuites();
}
@Override
public Socket createSocket(final Socket socket, final String host, final int port,
final boolean autoClose) throws IOException {
final Socket underlyingSocket = delegate.createSocket(socket, host, port, autoClose);
return overrideProtocol(underlyingSocket);
}
@Override
public Socket createSocket(final String host, final int port) throws IOException {
final Socket underlyingSocket = delegate.createSocket(host, port);
return overrideProtocol(underlyingSocket);
}
@Override
public Socket createSocket(final String host, final int port, final InetAddress localAddress,
final int localPort) throws
IOException {
final Socket underlyingSocket = delegate.createSocket(host, port, localAddress, localPort);
return overrideProtocol(underlyingSocket);
}
@Override
public Socket createSocket(final InetAddress host, final int port) throws IOException {
final Socket underlyingSocket = delegate.createSocket(host, port);
return overrideProtocol(underlyingSocket);
}
@Override
public Socket createSocket(final InetAddress host, final int port, final InetAddress localAddress,
final int localPort) throws
IOException {
final Socket underlyingSocket = delegate.createSocket(host, port, localAddress, localPort);
return overrideProtocol(underlyingSocket);
}
private Socket overrideProtocol(final Socket socket) {
if (!(socket instanceof SSLSocket)) {
throw new RuntimeException("An instance of SSLSocket is expected");
}
((SSLSocket) socket).setEnabledProtocols(new String[]{"TLSv1"});
return socket;
}
}
}

View File

@@ -0,0 +1,85 @@
package com.m2pool.pool.factory;
import org.apache.http.client.HttpClient;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
/**
* @Description TODO
* @Date 2024/6/14 14:56
* @Author dy
*/
public class IgnoreSSLRequestFactory extends SimpleClientHttpRequestFactory {
public IgnoreSSLRequestFactory(HttpClient httpClient) {
super();
}
@Override
protected void prepareConnection(HttpURLConnection connection, String httpMethod)
throws IOException {
if (connection instanceof HttpsURLConnection) {
prepareHttpsConnection((HttpsURLConnection) connection);
}
connection.setConnectTimeout(3000);
connection.setReadTimeout(3000);
super.prepareConnection(connection, httpMethod);
}
private void prepareHttpsConnection(HttpsURLConnection connection) {
connection.setHostnameVerifier(new SkipHostnameVerifier());
try {
connection.setSSLSocketFactory(createSslSocketFactory());
} catch (Exception ex) {
// Ignore
}
}
private SSLSocketFactory createSslSocketFactory() throws Exception {
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, new TrustManager[]{new SkipX509TrustManager()},
new SecureRandom());
return context.getSocketFactory();
}
private class SkipHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
}
private static class SkipX509TrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
}

View File

@@ -0,0 +1,31 @@
package com.m2pool.pool.mapper;
import com.m2pool.common.datasource.annotation.DistributionDB;
import com.m2pool.pool.dto.ProfitDto;
import com.m2pool.pool.dto.OutcomeDto;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
/**
* @Description 挖矿账号收益、提现
* @Date 2022/8/30 17:47
* @Author 杜懿
*/
@DistributionDB
public interface AccountDistributionMapper {
public List<ProfitDto> getDistributionByMinerAccount(@Param("coin") String coin, @Param("ma") String ma);
public List<ProfitDto> getDayDistributionByMinerAccount(@Param("coin") String coin, @Param("ma") String ma);
public List<ProfitDto> getDayPendingByMinerAccount(@Param("coin") String coin, @Param("ma") String ma);
public List<OutcomeDto> getOutcomeListByCoinAndUser(@Param("coin") String coin, @Param("ma") String ma);
public BigDecimal getTotalOutByCoinAndUser(@Param("coin") String coin, @Param("ma") String ma);
}

View File

@@ -0,0 +1,50 @@
package com.m2pool.pool.mapper;
import com.m2pool.common.datasource.annotation.DistributionDB;
import com.m2pool.common.datasource.annotation.GAuth;
import com.m2pool.pool.dto.GoogleInfoDto;
import com.m2pool.pool.dto.ProfitDto;
import com.m2pool.pool.entity.GoogleInfo;
import com.m2pool.pool.entity.UserGoogleAuthInfo;
import com.m2pool.system.api.entity.SysUser;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @Description 谷歌验证器相关sql
* @Date 2022/8/30 17:47
* @Author 杜懿
*/
@GAuth
public interface GoogleAuthMapper {
/**
* 查询是否绑定google验证器
* @param email
* @return
*/
public boolean checkIfBindByEmail(@Param("email") String email);
/**
* 获取谷歌验证码
* @param email
* @return
*/
public GoogleInfo getGoogleInfoByEmail(@Param("email") String email);
public UserGoogleAuthInfo getUserInfoByEmail(@Param("email") String email);
public boolean bingGoogleAuthenticator(@Param("info") UserGoogleAuthInfo info);
/**
* 判断验证码是否已存在
* @param secret
* @return
*/
public boolean checkSecretIfExist(@Param("secret") String secret);
public boolean closeGoogleAuthenticator(@Param("info") UserGoogleAuthInfo info);
}

View File

@@ -0,0 +1,49 @@
package com.m2pool.pool.mapper;
import com.m2pool.common.datasource.annotation.UserDB;
import com.m2pool.pool.dto.NoticeListDto;
import com.m2pool.pool.dto.NoticeMinerCoinListDto;
import com.m2pool.pool.dto.OfflineUserMinerDto;
import com.m2pool.pool.dto.UserAccountDto;
import com.m2pool.pool.vo.NoticeAddVo;
import com.m2pool.pool.vo.NoticeDelVo;
import com.m2pool.pool.vo.NoticePageVo;
import com.m2pool.pool.vo.NoticeUpdateVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* @Description 邮箱通知相关sql
* @Date 2022/8/30 17:47
* @Author 杜懿
*/
@UserDB
public interface NoticeMapper {
//查询当前账号绑定通知邮箱
public List<NoticeListDto> getNoticeEmailListByMaId(@Param("vo") NoticePageVo vo,@Param("user") String user);
//检查当前记录id和当前挖矿账号以及当前用户账号是否对应
public boolean checkIdAndMa(@Param("id") long id,@Param("user") String user);
public boolean checkEmailIfExist(@Param("maId") long maId,@Param("email") String email);
public long getMaIdByIdAndUser(@Param("id") long id, @Param("user") String user);
//查询当前账号绑定通知邮箱个数
public int getNoticeEmailCountByMaId(@Param("maId") long maId);
//新增通知邮箱
public boolean addNoticeEmail(@Param("vo") NoticeAddVo vo);
//修改通知邮箱备注
public boolean updateInfo(@Param("vo") NoticeUpdateVo vo);
//删除通知邮箱
public boolean deleteNoticeInfoById(@Param("vo") NoticeDelVo vo,@Param("maId") Long maId);
public List<NoticeMinerCoinListDto> getNoticeEmailListByMinerAndCoin(@Param("list") List<OfflineUserMinerDto> list, @Param("coin") String coin);
}

View File

@@ -0,0 +1,176 @@
package com.m2pool.pool.mapper;
import com.m2pool.common.datasource.annotation.DistributionDB;
import com.m2pool.common.datasource.annotation.HashRateDB;
import com.m2pool.common.datasource.annotation.InfoDB;
import com.m2pool.pool.dto.*;
import com.m2pool.pool.entity.PoolPower;
import com.m2pool.pool.vo.DateValueVo;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
/**
* @Description TODO
* @Date 2022/8/30 17:47
* @Author 杜懿
*/
@InfoDB
public interface PoolMapper {
@HashRateDB
public PoolInfoDto getPoolInfoByCoin(@Param("table") String table);
@HashRateDB
public Double getNowPoolDailyPower(@Param("table") String table);
@HashRateDB
public Double getNowPoolPower(@Param("table") String table);
public List<PowerLineDto> get30mPoolPowerList(@Param("table") String table);
public List<PowerLineDto> getDailyPoolPowerList(@Param("table") String table);
public List<PowerLineDto> getHourNetPowerList(@Param("table") String table);
public List<BlockInfoDto> getGRSBlockInfoList();
public List<BlockInfoDto> getMonaBlockInfoList();
public List<BlockInfoDto> getDgbQubitBlockInfoList();
public List<BlockInfoDto> getDgbSkeinBlockInfoList();
public List<BlockInfoDto> getDGBODOBlockInfoList();
public List<BlockInfoDto> getDgbQubitA10BlockInfoList();
public List<BlockInfoDto> getDgbSkeinA10BlockInfoList();
public List<BlockInfoDto> getDGBODOB20BlockInfoList();
public List<BlockInfoDto> getRXDBlockInfoList();
public List<BlockInfoDto> getNEXABlockInfoList();
public List<BlockInfoDto> getALPHBlockInfoList();
public List<BlockInfoDto> getENXBlockInfoList();
@DistributionDB
public List<BlockInfoDto> getNewNEXABlockInfoList(@Param("date") String date);
@DistributionDB
public List<BlockInfoDto> getNewGRSBlockInfoList(@Param("date") String date);
@DistributionDB
public List<BlockInfoDto> getNewMONABlockInfoList(@Param("date") String date);
@DistributionDB
public List<BlockInfoDto> getNewDGBQBlockInfoList(@Param("date") String date);
@DistributionDB
public List<BlockInfoDto> getNewDGBSBlockInfoList(@Param("date") String date);
@DistributionDB
public List<BlockInfoDto> getNewDGBOBlockInfoList(@Param("date") String date);
@DistributionDB
public List<BlockInfoDto> getNewRXDBlockInfoList(@Param("date") String date);
@DistributionDB
public List<BlockInfoDto> getNewALPHBlockInfoList(@Param("date") String date);
@DistributionDB
public List<BlockInfoDto> getNewENXBlockInfoList(@Param("date") String date);
@HashRateDB
public List<MinerDataDto> getMinerInfoList(@Param("table") String table);
//public List<MinerDataDto> get24hMinerInfoList(@Param("table") String table);
public List<PowerLineDto> get30mAccountPowerListByAccount(@Param("table") String table, @Param("user") String user);
public List<PowerLineDto> getDailyAccountPowerListByAccount(@Param("table") String table, @Param("user") String user);
public List<PowerLineDto> get24hAccountPowerListByAccount(@Param("table") String table, @Param("user") String user);
//todo 考虑删除
public List<MinerDataDto> getDailyPoolPowerDistributionList(@Param("table") String table);
//todo 考虑删除
public List<MinerDataDto> getDailyAccountPowerDistributionList(@Param("table") String table, @Param("user") String user);
public List<PowerLineDto> getMinerPowerList(@Param("table") String table, @Param("user") String user, @Param("miner") String miner);
//todo 考虑删除
public List<MinerDataDto> getDailyMinerPowerDistributionList(@Param("table") String table, @Param("user") String user, @Param("miner") String miner);
@HashRateDB
public List<MinerDataDto> getHourMinerDataList(@Param("table") String table,@Param("now") String now);
@HashRateDB
public List<MinerDataDto> getDailyMinerDataList(@Param("table") String table,@Param("now") String now);
//todo 考虑删除
public List<MinerDataDto> getUserHourMinerDataList(@Param("table") String table);
//todo 考虑删除
public List<MinerDataDto> getUserDailyMinerDataList(@Param("table") String table);
//从网站的算力总表拿大于date的数据条数
public int getLastDataTime(@Param("table") String table,@Param("date") String date);
//批量写入算力数据
public boolean batchInsertMhsDataToDB(@Param("table") String table,@Param("list") List<MinerDataInsertDBDto> list);
public boolean batchInsertUserMhsDateToDB(@Param("table") String table,@Param("list") List<MinerDataInsertDBDto> list);
//public boolean batchInsertUserMhsDataToDB(@Param("table") String table,@Param("list") List<MinerDataInsertDBDto> list);
//写入全网算力数据 30m
public boolean insertNetPower(@Param("table") String table,@Param("date") String date,@Param("vo") DateValueVo vo);
//写入币价数据 30m
public boolean insertPrice(@Param("table") String table,@Param("date") String date,@Param("vo") DateValueVo vo);
//@Pool2DB
//public boolean insertMhsDataToDB(@Param("table") String table,@Param("list") List<MinerDataDto> list);
//报块信息表
public boolean batchInsertNexaPoolBlkToDB(@Param("list") List<BlockInfoDto> list);
public boolean batchInsertGRSPoolBlkToDB(@Param("list") List<BlockInfoDto> list);
public boolean batchInsertMONAPoolBlkToDB(@Param("list") List<BlockInfoDto> list);
public boolean batchInsertDGBOPoolBlkToDB(@Param("list") List<BlockInfoDto> list);
public boolean batchInsertDGBQPoolBlkToDB(@Param("list") List<BlockInfoDto> list);
public boolean batchInsertDGBSPoolBlkToDB(@Param("list") List<BlockInfoDto> list);
public boolean batchInsertRXDPoolBlkToDB(@Param("list") List<BlockInfoDto> list);
public boolean batchInsertALPHPoolBlkToDB(@Param("list") List<BlockInfoDto> list);
public boolean batchInsertENXPoolBlkToDB(@Param("list") List<BlockInfoDto> list);
//todo 矿池统计数据入库
public boolean insertPoolPower(@Param("table") String table,@Param("vo") PoolPower vo);
public BigDecimal getPoolTodayTotalPower(@Param("coin") String coin, @Param("date") String date);
public List<UserPowerDto> getUserTodayTotalPower(@Param("coin") String coin, @Param("date") String date);
public List<DateBigDecimalDto> getDailyPoolPower(@Param("coin") String coin);
public List<DateBigDecimalDto> getDailyNetPower(@Param("coin") String coin);
public BigDecimal getAvgNetPower(@Param("coin") String coin, @Param("date") String date);
//todo 分配数据入库 目的:整合主库分库
public List<OfflineUserMinerDto> getOfflineList(@Param("table") String table, @Param("date") String date);
}

View File

@@ -0,0 +1,158 @@
package com.m2pool.pool.mapper;
import com.m2pool.pool.dto.*;
import com.m2pool.pool.entity.M2File;
import com.m2pool.pool.entity.Ticket;
import com.m2pool.pool.vo.*;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface TicketMapper {
/**
* 修改工单状态
* @param id
* @param status
* @return
*/
public boolean changeTicketStatus(@Param("id") long id, @Param("status") int status);
/**
* 修改工单update_time
* @param id
* @return
*/
public boolean changeTicketUpdateTime(@Param("id") long id);
/**
* 添加上传文件的保存信息
* @param vo
* @return
*/
public boolean insertFileInfo(@Param("vo") M2File vo);
/**
* 根据id获取文件相关信息
* @param id
* @return
*/
public M2File getFileInfoById(Long id);
/**
* 根据工单id查询工单是否存在
* @param id
* @return
*/
public int checkTicketExist(@Param("id") long id);
/**
* 新增工单
* @param data
* @return
*/
public boolean insertTicket(@Param("data") Ticket data);
/**
* 工单补充内容提交工单信息
* @param vo
* @return
*/
public boolean insertTicketSupplement(@Param("vo") ResubmitTicketVo vo);
public Integer getTicketSupplementCountByTicketId(@Param("id") long id);
/**
* 根据工单id 获取工单补充提交内容
* @param id
* @return
*/
public List<TicketContentDto> getTicketSupplementListByTicketId(@Param("id") long id);
/**
* 根据工单id 获取工单回复内容
* @param id
* @return
*/
public List<TicketContentDto> getTicketResponListByTicketId(@Param("id") long id);
/**
* 查询个人工单列表
* @return
* @param vo
*/
public List<PrivateTicketListDto> getPrivateTicketList(@Param("vo") PrivateTicketListVo vo, @Param("email") String email);
/**
* 个人处理中的工单列表
* @return
*/
public List<PrivateTicketListDto> getPrivateProcessingTicketList(@Param("vo") PrivateTicketListVo vo, @Param("email") String email);
/**
* 个人 已完结的工单列表
* @return
*/
public List<PrivateTicketListDto> getPrivateEndTicketList(@Param("vo") PrivateTicketListVo vo,@Param("email") String email);
/**
* 查看工单详情
* @param id
* @return
*/
public TicketDto getTicketById(@Param("id") long id);
/**
* 根据工单id查看工单状态
* @param id
* @return
*/
public int getTicketStatusById(@Param("id") long id);
/**
* 查看工单详情
* @param id
* @return
*/
public TicketPrivateDto getBackendTicketById(@Param("id") long id);
/**
* 查看个人工单详情
* @param id
* @param email
* @return
*/
public TicketPrivateDto getPrivateTicketById(@Param("id") long id, @Param("email") String email);
/**
* 根据状态和类型查询工单列表
* @param vo
* @return
*/
public List<TicketListDto> getTicketListByStatusAndType(@Param("vo") StatusVo vo);
/**
* 后台获取总览工单 条件搜索 工单号/用户邮箱/时间
* @param vo
* @return
*/
public List<AllTicketListDto> getTicketListByCond(@Param("vo") AllTicketListVo vo);
public List<TicketListDto> getAllTicketList(@Param("vo") StatusVo vo);
/**
* 添加工单回复
* @param vo
* @return
*/
public boolean insertRespon(@Param("vo") ResponTicketVo vo, @Param("name") String name);
}

View File

@@ -0,0 +1,105 @@
package com.m2pool.pool.mapper;
import com.m2pool.common.datasource.annotation.UserDB;
import com.m2pool.pool.dto.*;
import com.m2pool.pool.entity.*;
import com.m2pool.pool.vo.AccountBalanceAddVo;
import com.m2pool.pool.vo.ApiKeyUpdateVo;
import com.m2pool.pool.vo.ReadOnlyHtmlChangeVo;
import com.m2pool.system.api.model.OpenApiKeyInfo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @Description 用户网站账号和挖矿账号相关sql
* @Date 2022/8/30 17:47
* @Author 杜懿
*/
@UserDB
public interface UserAccountMapper {
/**
* 添加挖矿账号
* @param vo
* @return
*/
public boolean userAddMinerAccount(@Param("vo") UserMinerAccount vo);
/**
* 修改挖矿账号 备注等
* @param accountId
* @param vo
* @return
*/
public boolean updateMinerAccountRemark(@Param("accountId") long accountId,@Param("vo") AccountBalanceAddVo vo);
/**
* 挖矿账户绑定钱包
* @param accountId
* @param vo
* @return
*/
public boolean accountAddBalance(@Param("accountId") long accountId, @Param("vo") AccountBalanceAddVo vo);
/** 停止使用地址 */
public boolean accountStopBalance(@Param("id") long id, @Param("vo") AccountBalanceAddVo vo);
/**
* 修改挖矿账户绑定的钱包地址
* @param id
* @param vo
* @return
*/
public boolean updateBalance(@Param("id") long id, @Param("vo") AccountBalanceAddVo vo);
//public List<UserAccountDto> getAccountByUser(@Param("user") String user, @Param("vo") AccountVo vo);
public UserAccountDto getAccountByUserAccountAndCoin(@Param("user") String user, @Param("account") String account, @Param("coin") String coin);
public boolean checkAccountIfExist(@Param("account") String account, @Param("coin") String coin);
public UserAccountDto getAccountByUserAccountId(@Param("user") String user,@Param("id") long id);
public int getAccountNumberByUserAccountAndCoin(@Param("user") String user, @Param("coin") String coin);
public List<UserAccountListDto> getAccountByUserAndCoin(@Param("user") String user);
public UserAccountDto getAccountByUserAndMinerAccount(@Param("user") String user,@Param("ma") String ma);
public MinerAccountBalanceDto getBalanceByMinerAccount(@Param("maId") long maId);
boolean batchDelAccount(@Param("ids") List<Long> ids);
public List<BalanceListDto> getBalanceByCoin(@Param("coin") String coin);
public boolean checkKeyIfExist(@Param("key") String key);
public boolean createReadOnlyPage(@Param("vo") UserReadOnlyPage vo);
public List<UserReadOnlyPageInfo> getPageListByUser(@Param("user") String user);
public UserReadOnlyPageInfo getPageInfoByKey(@Param("key") String key);
public boolean changeReadOnlyPage(@Param("vo") ReadOnlyHtmlChangeVo vo);
public boolean batchDeletePageByKeyAndUser(@Param("keys") List<String> keys,@Param("user") String user);
public int getApiKeyCountByUser(@Param("user") String user);
/**
* 用户绑定apiKey
* @param vo
* @return
*/
public boolean userCreateApiKey(@Param("vo") OpenApiKey vo);
public List<UserApi> getAPIListByUser(@Param("user") String user);
public UserApi getAPIInfoByUserAndId(@Param("id") long id,@Param("user") String user);
public boolean updateApiKey(@Param("vo") ApiKeyUpdateVo vo,@Param("user") String user);
public boolean batchDeleteAPIByIdsAndUser(@Param("ids") List<String> ids,@Param("user") String user);
}

View File

@@ -0,0 +1,32 @@
package com.m2pool.pool.service;
import com.m2pool.common.core.Result.R;
import com.m2pool.system.api.entity.SysFile;
import org.springframework.web.multipart.MultipartFile;
/**
* @Description M2pool 文件上传
* @Date 2022/5/19 17:40
* @Author 杜懿
*/
public interface FileService {
/**
* 文件上传
* @return
*/
public R<SysFile> uploadFile(MultipartFile file);
///**
// * 工具类文件上传
// * @return
// */
//public R<SysFile> uploadToolsFile(MultipartFile file, String fileName);
}

View File

@@ -0,0 +1,60 @@
package com.m2pool.pool.service;
import com.m2pool.common.core.web.Result.AjaxResult;
import com.m2pool.pool.vo.*;
import javax.validation.constraints.Email;
/**
* @Description 谷歌验证器服务类
* @Date 2024/8/19 11:40
* @Author dy
*/
public interface GoogleAuthService {
/**
* 判断账户是否绑定谷歌验证器
* @return
*/
public AjaxResult ifBind();
/**
* 判断邮箱是否绑定谷歌验证器
* @return
* @param vo
*/
public AjaxResult emailIfBind(EmailVo vo);
/**
* 获取google两步验证二维码和安全码字符串
* @return
*/
public AjaxResult getBindInfo();
/**
* 绑定谷歌验证器
* @param vo
* @return
*/
public AjaxResult bindGoogle(GoogleBindVo vo);
/**
* 获取谷歌绑定邮箱验证码
* @return
*/
public AjaxResult getBindCode();
/**
* 获取谷歌绑定邮箱验证码
* @return
*/
public AjaxResult closeStepTwp(GoogleCloseVo vo);
/**
* 获取关闭谷歌绑定邮箱验证码
* @return
*/
public AjaxResult getCloseCode();
}

View File

@@ -0,0 +1,32 @@
package com.m2pool.pool.service;
import org.springframework.web.multipart.MultipartFile;
/**
* 文件上传接口
*
* @author du
*/
public interface ISysFileService
{
/**
* 文件上传接口
*
* @param file 上传的文件
* @return 访问地址
* @throws Exception
*/
public String uploadFile(MultipartFile file) throws Exception;
///**
// * 相关工具类文件上传接口
// *
// * @param file 上传的文件
// * @param fileName
// * @return 访问地址
// * @throws Exception
// */
//public String uploadToolsFile(MultipartFile file,String fileName) throws Exception;
}

View File

@@ -0,0 +1,69 @@
package com.m2pool.pool.service;
import com.m2pool.common.core.utils.FileUploadUtils;
import com.m2pool.common.core.utils.file.MimeTypeUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
/**
* 本地文件存储
*
* @author du
*/
@Primary
@Service
public class LocalSysFileServiceImpl implements ISysFileService
{
/**
* 资源映射路径 前缀
*/
@Value("/statics")
public String localFilePrefix;
/**
* 域名或本机访问地址
*/
//@Value("http://10.168.2.125:9808")
@Value("${myenv.domain}")
public String domain;
/**
* 上传文件存储在本地的根路径
*/
@Value("${myenv.filepath}")
private String localFilePath;
/**
* 本地文件上传接口
*
* @param file 上传的文件
* @return 访问地址
* @throws Exception
*/
@Override
public String uploadFile(MultipartFile file) throws Exception
{
String name = FileUploadUtils.upload(localFilePath, file , MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
String url = domain + localFilePrefix + name;
return url;
}
///**
// * 本地使用手册等相关工具文件文件上传接口
// *
// * @param file 上传的文件
// * @param fileName
// * @return 访问地址
// * @throws Exception
// */
//@Override
//public String uploadToolsFile(MultipartFile file, String fileName) throws Exception
//{
// String name = FileUploadUtils.toolsUpload(localFilePath + "/tools", file ,fileName, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
// String url = domain + localFilePrefix+ "/tools" + name;
// System.out.println("url"+url);
// return url;
//}
}

View File

@@ -0,0 +1,35 @@
package com.m2pool.pool.service;
import com.m2pool.common.core.web.Result.AjaxResult;
import com.m2pool.common.core.web.page.TableDataInfo;
import com.m2pool.pool.dto.OutcomeDto;
import com.m2pool.pool.vo.AccountVo;
import com.m2pool.pool.vo.MinerListVo;
import com.m2pool.pool.vo.MinerVo;
import java.util.List;
/**
* @Description 挖矿账户相关服务类
* @Date 2024/6/14 11:40
* @Author dy
*/
public interface MinerAccountService {
public AjaxResult getMinerAccountPower(AccountVo vo);
public AjaxResult getMinerAccountInfo(AccountVo vo);
public AjaxResult getAccountPowerDistribution(AccountVo vo);
public AjaxResult getMinerList(MinerListVo vo);
public AjaxResult getMinerPower(MinerVo vo);
//public AjaxResult getMinerPowerDistribution(MinerVo com.m2pool.chat.vo);
public TableDataInfo getHistoryIncome(AccountVo vo);
public TableDataInfo getHistoryOutcome(AccountVo vo);
}

View File

@@ -0,0 +1,52 @@
package com.m2pool.pool.service;
import com.m2pool.common.core.web.Result.AjaxResult;
import com.m2pool.pool.dto.NoticeListDto;
import com.m2pool.pool.vo.*;
import java.util.List;
/**
* @Description 告警系统服务类
* @Date 2024/8/19 11:40
* @Author dy
*/
public interface NoticeService {
/**
* 查看当前挖矿账户绑定的通知邮箱 分页
* @return
* @param vo
*/
public List<NoticeListDto> getNoticeEmailList(NoticePageVo vo);
/**
* 对指定挖矿账户添加通知邮箱
* @return
*/
public AjaxResult addNoticeEmail(NoticeAddVo vo);
/**
* 对指定挖矿账户添加通知邮箱
* @return
*/
public AjaxResult getCode(NoticeAddVo vo);
/**
* 修改备注信息
* @param vo
* @return
*/
public AjaxResult updateInfo(NoticeUpdateVo vo);
/**
* 删除挖矿账户绑定的通知邮箱
* @return
*/
public AjaxResult deleteEmail(NoticeDelVo vo);
}

View File

@@ -0,0 +1,42 @@
package com.m2pool.pool.service;
import com.m2pool.common.core.web.Result.AjaxResult;
import com.m2pool.pool.dto.BlockInfoDto;
import com.m2pool.pool.vo.*;
import java.util.List;
/**
* @Description 矿池相关服务类
* @Date 2024/6/14 11:40
* @Author dy
*/
public interface PoolService {
public AjaxResult getPoolInfo(CoinVo vo);
public AjaxResult getPoolPower(CoinVo vo);
public boolean checkAccount(MinerAccountAddVo vo);
//public AjaxResult getMinerCount(CoinVo com.m2pool.chat.vo);
public AjaxResult getLuckByCoin(CoinVo vo);
public List<BlockInfoDto> getBlockInfoList(CoinVo vo);
//public AjaxResult getPoolPowerDistribution(CoinVo com.m2pool.chat.vo);
public AjaxResult getCoinBalanceList(BalanceListGetVo vo);
public AjaxResult getNetPower(CoinVo vo);
public AjaxResult getParam(CoinVo vo);
public AjaxResult test2();
public AjaxResult test1();
}

View File

@@ -0,0 +1,53 @@
package com.m2pool.pool.service;
import com.m2pool.common.core.web.Result.AjaxResult;
import com.m2pool.common.core.web.page.TableDataInfo;
import com.m2pool.pool.dto.UserReadPageInfoReturnDto;
import com.m2pool.pool.vo.*;
import java.util.List;
/**
* @Description 只读页面 挖矿账户相关服务类
* @Date 2024/6/14 11:40
* @Author dy
*/
public interface ReadOnlyService {
/**
* 生成只读页面链接
* @param vo 只读页面基本信息 挖矿账号、币种、备注、权限配置
* @return
*/
public AjaxResult createPageUrl(ReadOnlyHtmlCreateVo vo);
/**
* 获取只读页面列表 查看用户生成的只读页面
* @param vo
* @return
*/
public TableDataInfo getUrlList(PageVo vo);
public AjaxResult getUrlInfo(ReadOnlyKeyVo vo);
public AjaxResult changeUrlInfo(ReadOnlyHtmlChangeVo vo);
public AjaxResult delPageByKey(ReadOnlyKeyVo vo);
public AjaxResult getPageInfo(ReadOnlyKeyVo vo);
public AjaxResult getProfitInfo(ReadOnlyKeyVo vo);
public AjaxResult getMinerAccountPower(ReadOnlyIntervalVo vo);
public AjaxResult getAccountPowerDistribution(ReadOnlyIntervalVo vo);
public AjaxResult getMinerList(ReadOnlyListVo vo);
public AjaxResult getMinerPower(ReadOnlyMinerVo vo);
public TableDataInfo getHistoryIncome(ReadOnlyPageVo vo);
public TableDataInfo getHistoryOutcome(ReadOnlyPageVo vo);
}

Some files were not shown because too many files have changed in this diff Show More