@@ -0,0 +1,34 @@
|
||||
package com.m2pool.oapi;
|
||||
|
||||
import com.m2pool.common.security.annotation.EnableCustomConfig;
|
||||
import com.m2pool.common.security.annotation.EnableM2PoolFeignClients;
|
||||
import com.m2pool.common.swagger.annotation.EnableCustomSwagger2;
|
||||
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 open api服务入口类
|
||||
* @Date 2024/6/14 13:42
|
||||
* @Author dy
|
||||
*/
|
||||
@EnableCustomConfig
|
||||
@EnableCustomSwagger2
|
||||
@EnableM2PoolFeignClients
|
||||
@SpringBootApplication
|
||||
@MapperScan({"com.m2pool.oapi.mapper"})
|
||||
public class M2OApiApplication {
|
||||
|
||||
@Bean
|
||||
public RestTemplate restTemplate(){
|
||||
return new RestTemplate();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(M2OApiApplication.class,args);
|
||||
System.out.println("m2pool矿池 开放api微服务启动成功");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package com.m2pool.oapi.controller;
|
||||
|
||||
import com.m2pool.common.core.web.Result.AjaxResult;
|
||||
import com.m2pool.common.core.web.controller.BaseController;
|
||||
import com.m2pool.common.security.annotation.OpenApiPermissions;
|
||||
import com.m2pool.common.security.annotation.RequiresPermissions;
|
||||
import com.m2pool.oapi.service.AccountService;
|
||||
import com.m2pool.oapi.vo.AccountDateVo;
|
||||
import com.m2pool.oapi.vo.AccountVo;
|
||||
import com.m2pool.oapi.vo.CoinVo;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
/**
|
||||
* @Description 统一请求接口
|
||||
* @Date 2024/6/14 9:54
|
||||
* @Author dy
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/account")
|
||||
public class AccountController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private AccountService accountService;
|
||||
|
||||
@PostMapping("/hashrate_real")
|
||||
@ApiOperation(value = "挖矿账户实时算力、24小时算力")
|
||||
@OpenApiPermissions("account")
|
||||
public AjaxResult hashrate_real(@Valid @RequestBody AccountVo vo){
|
||||
|
||||
return accountService.getHashRateReal(vo);
|
||||
|
||||
}
|
||||
|
||||
@PostMapping("/hashrate_history")
|
||||
@ApiOperation(value = "挖矿账户历史算力(只支持24小时,最多3个月)")
|
||||
@OpenApiPermissions("account")
|
||||
public AjaxResult hashRateHistory(@Valid @RequestBody AccountDateVo vo){
|
||||
|
||||
return accountService.getHashRateHistory(vo);
|
||||
|
||||
}
|
||||
|
||||
@PostMapping("/hashrate_last24h")
|
||||
@ApiOperation(value = "挖矿账户最近24小时算力(30分钟算力)")
|
||||
@OpenApiPermissions("account")
|
||||
public AjaxResult getHashRateLast24h(@Valid @RequestBody AccountVo vo){
|
||||
|
||||
return accountService.getHashRateLast24h(vo);
|
||||
|
||||
}
|
||||
|
||||
@PostMapping("/miners_list")
|
||||
@ApiOperation(value = "挖矿账号矿工列表")
|
||||
@OpenApiPermissions("account")
|
||||
public AjaxResult minersList(@Valid @RequestBody AccountVo vo){
|
||||
|
||||
return accountService.getMinersList(vo);
|
||||
|
||||
}
|
||||
|
||||
@PostMapping("/watch")
|
||||
@ApiOperation(value = "挖矿账号矿工总览")
|
||||
@OpenApiPermissions("account")
|
||||
public AjaxResult watch(@Valid @RequestBody AccountVo vo){
|
||||
|
||||
return accountService.getWatch(vo);
|
||||
|
||||
}
|
||||
|
||||
@GetMapping("/test1")
|
||||
@ApiOperation(value = "挖矿账号矿工总览")
|
||||
//@OpenApiPermissions("account")
|
||||
public AjaxResult test1(){
|
||||
|
||||
return AjaxResult.success();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.m2pool.oapi.controller;
|
||||
|
||||
import com.m2pool.common.core.web.Result.AjaxResult;
|
||||
import com.m2pool.common.core.web.controller.BaseController;
|
||||
import com.m2pool.common.security.annotation.OpenApiPermissions;
|
||||
import com.m2pool.common.security.annotation.RequiresPermissions;
|
||||
import com.m2pool.oapi.service.MinerService;
|
||||
import com.m2pool.oapi.vo.AccountDateVo;
|
||||
import com.m2pool.oapi.vo.AccountMinerDateVo;
|
||||
import com.m2pool.oapi.vo.AccountMinerVo;
|
||||
import com.m2pool.oapi.vo.AccountVo;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
/**
|
||||
* @Description 矿机开放api统一请求接口
|
||||
* @Date 2024/6/14 9:54
|
||||
* @Author dy
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/miner")
|
||||
public class MinerController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private MinerService minerService;
|
||||
|
||||
@PostMapping("/hashrate_real")
|
||||
@ApiOperation(value = "挖矿账户实时算力、24小时算力")
|
||||
@OpenApiPermissions("miner")
|
||||
public AjaxResult hashrate_real(@Valid @RequestBody AccountMinerVo vo){
|
||||
|
||||
return minerService.getHashRateReal(vo);
|
||||
|
||||
}
|
||||
|
||||
@PostMapping("/hashrate_history")
|
||||
@ApiOperation(value = "挖矿账户历史算力(只支持24小时,最多3个月)")
|
||||
@OpenApiPermissions("miner")
|
||||
public AjaxResult hashRateHistory(@Valid @RequestBody AccountMinerDateVo vo){
|
||||
|
||||
return minerService.getHashRateHistory(vo);
|
||||
|
||||
}
|
||||
|
||||
@PostMapping("/hashrate_last24h")
|
||||
@ApiOperation(value = "挖矿账户最近24小时算力(30分钟算力)")
|
||||
@OpenApiPermissions("miner")
|
||||
public AjaxResult getHashRateLast24h(@Valid @RequestBody AccountMinerVo vo){
|
||||
|
||||
return minerService.getHashRateLast24h(vo);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package com.m2pool.oapi.controller;
|
||||
|
||||
import com.m2pool.common.core.annotation.RateLimiter;
|
||||
import com.m2pool.common.core.enums.LimitType;
|
||||
import com.m2pool.common.core.web.Result.AjaxResult;
|
||||
import com.m2pool.common.core.web.controller.BaseController;
|
||||
import com.m2pool.common.security.annotation.OpenApiPermissions;
|
||||
import com.m2pool.common.security.annotation.RequiresPermissions;
|
||||
import com.m2pool.oapi.service.PoolService;
|
||||
import com.m2pool.oapi.vo.CoinVo;
|
||||
import com.m2pool.oapi.vo.DateVo;
|
||||
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
/**
|
||||
* @Description 统一请求接口
|
||||
* @Date 2024/6/14 9:54
|
||||
* @Author dy
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/pool")
|
||||
public class PoolController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private PoolService poolService;
|
||||
|
||||
@GetMapping("/hashrate")
|
||||
@ApiOperation(value = "矿池实时算力")
|
||||
@OpenApiPermissions("pool")
|
||||
public AjaxResult hashrate(@Valid CoinVo vo){
|
||||
|
||||
return poolService.getHashRate(vo);
|
||||
|
||||
}
|
||||
|
||||
@GetMapping("/hashrate_history")
|
||||
@ApiOperation(value = "矿池历史算力(最多3个月)")
|
||||
@OpenApiPermissions("pool")
|
||||
public AjaxResult hashRateHistory(@Valid DateVo vo){
|
||||
|
||||
return poolService.getHashRateHistory(vo);
|
||||
|
||||
}
|
||||
|
||||
@GetMapping("/miners_list")
|
||||
@ApiOperation(value = "矿池当前矿工数")
|
||||
@OpenApiPermissions("pool")
|
||||
public AjaxResult getMinersList(@Valid CoinVo vo){
|
||||
|
||||
return poolService.getMinersList(vo);
|
||||
|
||||
}
|
||||
|
||||
@GetMapping("/watch")
|
||||
@ApiOperation(value = "矿池总览")
|
||||
@OpenApiPermissions("pool")
|
||||
@RateLimiter(time = 1,count = 5,limitType = LimitType.IP)
|
||||
public AjaxResult watch(@Valid CoinVo vo){
|
||||
|
||||
return poolService.getWatch(vo);
|
||||
|
||||
}
|
||||
|
||||
@PostMapping("/test")
|
||||
@ApiOperation(value = "矿池总览")
|
||||
@OpenApiPermissions("pool")
|
||||
public AjaxResult test(@Valid @RequestBody CoinVo vo){
|
||||
|
||||
return AjaxResult.success();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.m2pool.oapi.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
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 HashRateDto implements Serializable {
|
||||
|
||||
/** 实时(30m)算力 */
|
||||
@JsonProperty("hashrate")
|
||||
private BigDecimal mhs;
|
||||
|
||||
private Date date;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.m2pool.oapi.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.m2pool.common.core.utils.uuid.UUID;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description 曲线图数据结构
|
||||
* @Date 2024/6/13 11:17
|
||||
* @Author dy
|
||||
*/
|
||||
@Data
|
||||
public class HashRateHistory24hDto implements Serializable {
|
||||
|
||||
/** 24h算力 */
|
||||
@JsonProperty("hashrate_24h")
|
||||
private List<HashRateDto> list;
|
||||
|
||||
/** 单位 h/s, kh/s, mh/s, gh/s,th/s */
|
||||
private String unit;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.m2pool.oapi.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description 曲线图数据结构
|
||||
* @Date 2024/6/13 11:17
|
||||
* @Author dy
|
||||
*/
|
||||
@Data
|
||||
public class HashRateHistory30mDto implements Serializable {
|
||||
|
||||
/** 实时(30m)算力 */
|
||||
@JsonProperty("hashrate_30m")
|
||||
private List<HashRateDto> list;
|
||||
|
||||
/** 单位 h/s, kh/s, mh/s, gh/s,th/s */
|
||||
private String unit;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.m2pool.oapi.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
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 HashRateRealDto implements Serializable {
|
||||
|
||||
/** 实时(30m)算力 */
|
||||
@JsonProperty("hashrate_realtime")
|
||||
private BigDecimal mhs;
|
||||
|
||||
/** 有效提交数 */
|
||||
@JsonProperty("hashrate_24h")
|
||||
private BigDecimal mhs24h;
|
||||
|
||||
/** 单位 h/s, kh/s, mh/s, gh/s,th/s */
|
||||
private String unit;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.m2pool.oapi.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
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 MinerStateDto implements Serializable {
|
||||
|
||||
/** 实时(30m)算力 */
|
||||
private String miner;
|
||||
|
||||
private int state;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.m2pool.oapi.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description 曲线图数据结构
|
||||
* @Date 2024/6/13 11:17
|
||||
* @Author dy
|
||||
*/
|
||||
@Data
|
||||
public class MinerStateListDto implements Serializable {
|
||||
|
||||
/** 24h算力 */
|
||||
@JsonProperty("miner_list")
|
||||
private List<MinerStateDto> list;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.m2pool.oapi.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @Description 曲线图数据结构
|
||||
* @Date 2024/6/13 11:17
|
||||
* @Author dy
|
||||
*/
|
||||
@Data
|
||||
public class MinerWatchDto implements Serializable {
|
||||
|
||||
private long total;
|
||||
|
||||
private long online;
|
||||
|
||||
private long offline;
|
||||
|
||||
private long timeout;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.m2pool.oapi.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description 曲线图数据结构
|
||||
* @Date 2024/6/13 11:17
|
||||
* @Author dy
|
||||
*/
|
||||
@Data
|
||||
public class PoolHashRateHistoryDto implements Serializable {
|
||||
|
||||
/** 矿池(30m)算力 */
|
||||
@JsonProperty("hashrate_30m")
|
||||
private List<HashRateDto> mhsList;
|
||||
|
||||
/** 矿池(24h)算力 */
|
||||
@JsonProperty("hashrate_24h")
|
||||
private List<HashRateDto> mhs24hList;
|
||||
|
||||
/** 单位 h/s, kh/s, mh/s, gh/s,th/s */
|
||||
private String unit;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.m2pool.oapi.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description 矿池总览
|
||||
* @Date 2024/6/13 11:17
|
||||
* @Author dy
|
||||
*/
|
||||
@Data
|
||||
public class PoolWatchDto implements Serializable {
|
||||
|
||||
@JsonProperty("pool_fee")
|
||||
private String fee;
|
||||
|
||||
@JsonProperty("min_pay")
|
||||
private double minPay;
|
||||
|
||||
@JsonProperty("history_last_7days")
|
||||
private List<HashRateDto> list;
|
||||
|
||||
private long miners;
|
||||
|
||||
@JsonProperty("hashrate")
|
||||
private BigDecimal mhs;
|
||||
|
||||
@JsonProperty("last_found")
|
||||
private long height;
|
||||
|
||||
private String unit;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.m2pool.oapi.entity;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
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 ApiKeyInfo implements Serializable {
|
||||
|
||||
/** api_key */
|
||||
private String key;
|
||||
|
||||
private String ip;
|
||||
|
||||
private String user;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.m2pool.oapi.entity;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @Description 曲线图数据结构
|
||||
* @Date 2024/6/13 11:17
|
||||
* @Author dy
|
||||
*/
|
||||
@Data
|
||||
public class MinerState implements Serializable {
|
||||
|
||||
/** 实时(30m)算力 */
|
||||
@JsonProperty("hashrate")
|
||||
private String miner;
|
||||
|
||||
private String state;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.m2pool.oapi.enums;
|
||||
|
||||
/**
|
||||
* @Description 矿池默认起付额
|
||||
* @Date 2022/5/20 11:15
|
||||
* @Author 杜懿
|
||||
*/
|
||||
public enum PoolAmount {
|
||||
|
||||
GRS("grs", 100),
|
||||
MONA("mona", 100),
|
||||
DGB_SKEIN("dgb_skein", 100),
|
||||
DGB_QUBIT("dgb_qubit", 100),
|
||||
DGB_ODO("dgb_odo", 100),
|
||||
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", 10000),
|
||||
ALPH("alph", 10000),
|
||||
ENX("enx", 10000);
|
||||
|
||||
/** 币种参数名 */
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.m2pool.oapi.enums;
|
||||
|
||||
/**
|
||||
* @Description 矿池单位换算
|
||||
* @Date 2022/5/20 11:15
|
||||
* @Author 杜懿
|
||||
*/
|
||||
public enum PoolUnits {
|
||||
|
||||
GRS("grs", "MH/s", 1000, 1000),
|
||||
MONA("mona", "MH/s", 1000, 1000),
|
||||
DGB_SKEIN("dgb_skein", "MH/s", 1000, 1000),
|
||||
DGB_QUBIT("dgb_qubit", "MH/s", 1000, 1000),
|
||||
DGB_ODO("dgb_odo", "MH/s", 1000, 1000),
|
||||
DGB2_ODO("dgb2_odo", "MH/s", 1000, 1000),
|
||||
DGB_QUBIT_A10("dgb_qubit_a10", "MH/s", 1000, 1000),
|
||||
DGB_SKEIN_A10("dgb_skein_a10", "MH/s", 1000, 1000),
|
||||
DGB_ODO_B20("dgb_odo_b20", "MH/s", 1000, 1000),
|
||||
NEXA("nexa", "MH/s", 1000*1000, 1000),
|
||||
RXD("rxd", "MH/s", 1000*1000, 1000),
|
||||
ALPH("aplh", "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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.m2pool.oapi.mapper;
|
||||
|
||||
import com.m2pool.common.datasource.annotation.HashRateDB;
|
||||
import com.m2pool.common.datasource.annotation.InfoDB;
|
||||
import com.m2pool.oapi.dto.HashRateDto;
|
||||
import com.m2pool.oapi.dto.HashRateRealDto;
|
||||
import com.m2pool.oapi.entity.MinerState;
|
||||
import com.m2pool.oapi.vo.AccountDateVo;
|
||||
import com.m2pool.oapi.vo.AccountVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Date 2022/8/30 17:47
|
||||
* @Author 杜懿
|
||||
*/
|
||||
@InfoDB
|
||||
public interface AccountMapper {
|
||||
|
||||
|
||||
@HashRateDB
|
||||
public List<HashRateRealDto> getAccountRealHashRateListByCoinAndAccount(@Param("vo") AccountVo vo);
|
||||
|
||||
public List<HashRateDto> getAccountHashRateHistory24hListByCoinAndAccount(@Param("vo") AccountDateVo vo);
|
||||
|
||||
public List<HashRateDto> getAccountHashRateHistory30mListByCoinAndAccount(@Param("vo") AccountVo vo,@Param("start") String start);
|
||||
|
||||
@HashRateDB
|
||||
public List<MinerState> getMinerListByCoinAndAccount(@Param("vo") AccountVo vo);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.m2pool.oapi.mapper;
|
||||
|
||||
import com.m2pool.common.datasource.annotation.HashRateDB;
|
||||
import com.m2pool.common.datasource.annotation.InfoDB;
|
||||
import com.m2pool.oapi.dto.HashRateDto;
|
||||
import com.m2pool.oapi.dto.HashRateRealDto;
|
||||
import com.m2pool.oapi.vo.AccountDateVo;
|
||||
import com.m2pool.oapi.vo.AccountMinerDateVo;
|
||||
import com.m2pool.oapi.vo.AccountMinerVo;
|
||||
import com.m2pool.oapi.vo.AccountVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Date 2022/8/30 17:47
|
||||
* @Author 杜懿
|
||||
*/
|
||||
@InfoDB
|
||||
public interface MinerMapper {
|
||||
|
||||
@HashRateDB
|
||||
public HashRateRealDto getMinerRealHashRateByCoinAndAccountMiner(@Param("vo") AccountMinerVo vo);
|
||||
|
||||
public List<HashRateDto> getMinerHashRateHistory24hListByCoinAndAccountMiner(@Param("vo") AccountMinerDateVo vo);
|
||||
|
||||
public List<HashRateDto> getMinerHashRateHistory30mListByCoinAndAccountMiner(@Param("vo") AccountMinerVo vo, @Param("start") String start);
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.m2pool.oapi.mapper;
|
||||
|
||||
import com.m2pool.common.datasource.annotation.HashRateDB;
|
||||
import com.m2pool.common.datasource.annotation.InfoDB;
|
||||
import com.m2pool.oapi.dto.HashRateDto;
|
||||
import com.m2pool.oapi.dto.HashRateRealDto;
|
||||
import com.m2pool.oapi.dto.PoolWatchDto;
|
||||
import com.m2pool.oapi.entity.MinerState;
|
||||
import com.m2pool.oapi.vo.AccountVo;
|
||||
import com.m2pool.oapi.vo.CoinVo;
|
||||
import com.m2pool.oapi.vo.DateVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Date 2022/8/30 17:47
|
||||
* @Author 杜懿
|
||||
*/
|
||||
@InfoDB
|
||||
public interface PoolMapper {
|
||||
|
||||
@HashRateDB
|
||||
public HashRateRealDto getPoolRealHashRateListByCoin(@Param("vo") CoinVo vo);
|
||||
|
||||
public List<HashRateDto> getPoolHashRateHistory24hListByCoin(@Param("vo") DateVo vo);
|
||||
|
||||
public List<HashRateDto> getPoolHashRateHistory30mListByCoin(@Param("vo") DateVo vo);
|
||||
|
||||
@HashRateDB
|
||||
public List<MinerState> getMinerListByCoin(@Param("vo") CoinVo vo);
|
||||
|
||||
@HashRateDB
|
||||
public PoolWatchDto getPoolWatchByCoin(@Param("vo") CoinVo vo);
|
||||
|
||||
@HashRateDB
|
||||
public HashRateDto getPoolRealHashRateByCoin(@Param("vo") CoinVo vo);
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.m2pool.oapi.service;
|
||||
|
||||
|
||||
import com.m2pool.common.core.web.Result.AjaxResult;
|
||||
import com.m2pool.oapi.vo.AccountDateVo;
|
||||
import com.m2pool.oapi.vo.AccountVo;
|
||||
import com.m2pool.oapi.vo.DateVo;
|
||||
|
||||
/**
|
||||
* @Description 开放api 矿池 相关服务类
|
||||
* @Date 2024/6/14 11:40
|
||||
* @Author dy
|
||||
*/
|
||||
public interface AccountService {
|
||||
|
||||
public AjaxResult getHashRateReal(AccountVo vo);
|
||||
|
||||
public AjaxResult getHashRateHistory(AccountDateVo vo);
|
||||
|
||||
public AjaxResult getHashRateLast24h(AccountVo vo);
|
||||
|
||||
public AjaxResult getMinersList(AccountVo vo);
|
||||
|
||||
public AjaxResult getWatch(AccountVo vo);
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.m2pool.oapi.service;
|
||||
|
||||
|
||||
import com.m2pool.common.core.web.Result.AjaxResult;
|
||||
import com.m2pool.oapi.vo.AccountDateVo;
|
||||
import com.m2pool.oapi.vo.AccountMinerDateVo;
|
||||
import com.m2pool.oapi.vo.AccountMinerVo;
|
||||
import com.m2pool.oapi.vo.AccountVo;
|
||||
|
||||
/**
|
||||
* @Description 开放api 矿池 相关服务类
|
||||
* @Date 2024/6/14 11:40
|
||||
* @Author dy
|
||||
*/
|
||||
public interface MinerService {
|
||||
|
||||
public AjaxResult getHashRateReal(AccountMinerVo vo);
|
||||
|
||||
public AjaxResult getHashRateHistory(AccountMinerDateVo vo);
|
||||
|
||||
public AjaxResult getHashRateLast24h(AccountMinerVo vo);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.m2pool.oapi.service;
|
||||
|
||||
|
||||
import com.m2pool.common.core.web.Result.AjaxResult;
|
||||
import com.m2pool.oapi.vo.CoinVo;
|
||||
import com.m2pool.oapi.vo.DateVo;
|
||||
|
||||
/**
|
||||
* @Description 开放api 矿池 相关服务类
|
||||
* @Date 2024/6/14 11:40
|
||||
* @Author dy
|
||||
*/
|
||||
public interface PoolService {
|
||||
|
||||
public AjaxResult getHashRate(CoinVo vo);
|
||||
|
||||
public AjaxResult getHashRateHistory(DateVo vo);
|
||||
|
||||
public AjaxResult getMinersList(CoinVo vo);
|
||||
|
||||
public AjaxResult getWatch(CoinVo vo);
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
package com.m2pool.oapi.service.impl;
|
||||
|
||||
import com.m2pool.common.core.text.Convert;
|
||||
import com.m2pool.common.core.utils.DateUtils;
|
||||
import com.m2pool.common.core.utils.StringUtils;
|
||||
import com.m2pool.common.core.web.Result.AjaxResult;
|
||||
import com.m2pool.oapi.dto.*;
|
||||
import com.m2pool.oapi.entity.MinerState;
|
||||
import com.m2pool.oapi.enums.PoolUnits;
|
||||
import com.m2pool.oapi.mapper.AccountMapper;
|
||||
import com.m2pool.oapi.service.AccountService;
|
||||
import com.m2pool.oapi.utils.EnumUtils;
|
||||
import com.m2pool.oapi.vo.AccountDateVo;
|
||||
import com.m2pool.oapi.vo.AccountVo;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Date 2024/9/13 10:47
|
||||
* @Author 杜懿
|
||||
*/
|
||||
@Service
|
||||
public class AccountServiceImpl implements AccountService {
|
||||
|
||||
@Autowired
|
||||
private AccountMapper accountMapperMapper;
|
||||
|
||||
@Override
|
||||
public AjaxResult getHashRateReal(AccountVo vo) {
|
||||
|
||||
PoolUnits unit = (PoolUnits) EnumUtils.get(PoolUnits.class, vo.getCoin());
|
||||
if(StringUtils.isNull(unit)){
|
||||
return AjaxResult.error("coin error");
|
||||
}
|
||||
List<HashRateRealDto> list = accountMapperMapper.getAccountRealHashRateListByCoinAndAccount(vo);
|
||||
|
||||
BigDecimal mhs = list.stream().map(e -> {
|
||||
return e.getMhs();
|
||||
}).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
BigDecimal mhs24h = list.stream().map(e -> {
|
||||
return e.getMhs24h();
|
||||
}).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
HashRateRealDto dto = new HashRateRealDto();
|
||||
dto.setUnit(unit.getUnit());
|
||||
dto.setMhs(mhs);
|
||||
dto.setMhs24h(mhs24h);
|
||||
return AjaxResult.success(dto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult getHashRateHistory(AccountDateVo vo) {
|
||||
System.out.println(vo);
|
||||
|
||||
PoolUnits unit = (PoolUnits) EnumUtils.get(PoolUnits.class, vo.getCoin());
|
||||
if(StringUtils.isNull(unit)){
|
||||
return AjaxResult.error("coin error");
|
||||
}
|
||||
|
||||
Date today = new Date();
|
||||
today.setHours(0);
|
||||
today.setMinutes(0);
|
||||
today.setMinutes(0);
|
||||
|
||||
Calendar ca = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
|
||||
ca.setTime(today);
|
||||
ca.add(Calendar.MONTH,-3);
|
||||
|
||||
Date firstDate = ca.getTime();
|
||||
|
||||
if (StringUtils.isBlank(vo.getStart())){
|
||||
vo.setStart(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,firstDate));
|
||||
}else {
|
||||
if(DateUtils.parseDate(vo.getStart()).before(firstDate)){
|
||||
vo.setStart(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,firstDate));
|
||||
}else {
|
||||
//在三个月之内 不做处理
|
||||
try {
|
||||
DateUtils.parseDate(vo.getStart());
|
||||
}catch (Exception e){
|
||||
//出错说明格式错误有
|
||||
return AjaxResult.error("start param error");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(vo.getEnd())){
|
||||
//在三个月之内 不做处理
|
||||
try {
|
||||
Date end = DateUtils.parseDate(vo.getEnd());
|
||||
if(end.before(DateUtils.parseDate(vo.getStart()))){
|
||||
//end时间在start之前
|
||||
return AjaxResult.error("end Date can not before start Date");
|
||||
}
|
||||
|
||||
if(firstDate.before(end)){
|
||||
return AjaxResult.error("end Date can not before "+DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,firstDate));
|
||||
}
|
||||
}catch (Exception e){
|
||||
//出错说明格式错误有
|
||||
return AjaxResult.error("end param error");
|
||||
}
|
||||
}else {
|
||||
//没有end 则不做处理
|
||||
}
|
||||
|
||||
List<HashRateDto> mhsList = accountMapperMapper.getAccountHashRateHistory24hListByCoinAndAccount(vo);
|
||||
HashRateHistory24hDto dto = new HashRateHistory24hDto();
|
||||
dto.setList(mhsList);
|
||||
dto.setUnit(unit.getUnit());
|
||||
return AjaxResult.success(dto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult getHashRateLast24h(AccountVo vo) {
|
||||
|
||||
long t0 = System.currentTimeMillis();
|
||||
|
||||
PoolUnits unit = (PoolUnits) EnumUtils.get(PoolUnits.class, vo.getCoin());
|
||||
if(StringUtils.isNull(unit)){
|
||||
return AjaxResult.error("coin error");
|
||||
}
|
||||
|
||||
Date today = new Date();
|
||||
|
||||
Calendar ca = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
|
||||
ca.setTime(today);
|
||||
ca.add(Calendar.DATE,-1);
|
||||
|
||||
String start = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,ca.getTime());
|
||||
long t1 = System.currentTimeMillis();
|
||||
List<HashRateDto> list = accountMapperMapper.getAccountHashRateHistory30mListByCoinAndAccount(vo, start);
|
||||
long t2 = System.currentTimeMillis();
|
||||
HashRateHistory30mDto dto = new HashRateHistory30mDto();
|
||||
dto.setList(list);
|
||||
dto.setUnit(unit.getUnit());
|
||||
|
||||
System.out.println("挖矿账户last24h业务 数据库查询耗时:"+(t2-t1)+"ms,业务耗时"+(t2-t0)+"ms");
|
||||
return AjaxResult.success(dto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult getMinersList(AccountVo vo) {
|
||||
|
||||
List<MinerState> list = accountMapperMapper.getMinerListByCoinAndAccount(vo);
|
||||
List<MinerStateDto> minerList = list.stream().map(e -> {
|
||||
MinerStateDto dto = new MinerStateDto();
|
||||
dto.setMiner(e.getMiner());
|
||||
if ("online".equals(e.getState().toLowerCase())) {
|
||||
dto.setState(0);
|
||||
} else if ("offline".equals(e.getState().toLowerCase())) {
|
||||
dto.setState(1);
|
||||
} else {
|
||||
dto.setState(2);
|
||||
}
|
||||
return dto;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
MinerStateListDto minerStateListDto = new MinerStateListDto();
|
||||
minerStateListDto.setList(minerList);
|
||||
|
||||
return AjaxResult.success(minerStateListDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult getWatch(AccountVo vo) {
|
||||
MinerWatchDto dto = new MinerWatchDto();
|
||||
List<MinerState> list = accountMapperMapper.getMinerListByCoinAndAccount(vo);
|
||||
Map<String, Long> map = list.stream().collect(Collectors.groupingBy(
|
||||
MinerState::getState,
|
||||
Collectors.counting()
|
||||
));
|
||||
|
||||
long total = Convert.toLong(list.size(),0L);
|
||||
long online = map.getOrDefault("online", 0L);
|
||||
long offline = map.getOrDefault("offline", 0L);
|
||||
dto.setTotal(total);
|
||||
dto.setOnline(online);
|
||||
dto.setOffline(offline);
|
||||
dto.setTimeout(BigDecimal.valueOf(total)
|
||||
.subtract(BigDecimal.valueOf(online))
|
||||
.subtract(BigDecimal.valueOf(offline))
|
||||
.longValue());
|
||||
|
||||
return AjaxResult.success(dto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
package com.m2pool.oapi.service.impl;
|
||||
|
||||
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
||||
import com.m2pool.common.core.utils.DateUtils;
|
||||
import com.m2pool.common.core.utils.StringUtils;
|
||||
import com.m2pool.common.core.web.Result.AjaxResult;
|
||||
import com.m2pool.oapi.dto.HashRateDto;
|
||||
import com.m2pool.oapi.dto.HashRateHistory24hDto;
|
||||
import com.m2pool.oapi.dto.HashRateHistory30mDto;
|
||||
import com.m2pool.oapi.dto.HashRateRealDto;
|
||||
import com.m2pool.oapi.enums.PoolUnits;
|
||||
import com.m2pool.oapi.mapper.MinerMapper;
|
||||
import com.m2pool.oapi.service.MinerService;
|
||||
import com.m2pool.oapi.utils.EnumUtils;
|
||||
import com.m2pool.oapi.vo.AccountMinerDateVo;
|
||||
import com.m2pool.oapi.vo.AccountMinerVo;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.TimeZone;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Date 2024/9/13 10:49
|
||||
* @Author 杜懿
|
||||
*/
|
||||
@Service
|
||||
public class MinerServiceImpl implements MinerService {
|
||||
|
||||
@Autowired
|
||||
private MinerMapper minerMapper;
|
||||
|
||||
|
||||
@Override
|
||||
public AjaxResult getHashRateReal(AccountMinerVo vo) {
|
||||
PoolUnits unit = (PoolUnits) EnumUtils.get(PoolUnits.class, vo.getCoin());
|
||||
if(StringUtils.isNull(unit)){
|
||||
return AjaxResult.error("coin error");
|
||||
}
|
||||
|
||||
HashRateRealDto dto = minerMapper.getMinerRealHashRateByCoinAndAccountMiner(vo);
|
||||
|
||||
dto.setUnit(unit.getUnit());
|
||||
return AjaxResult.success(dto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult getHashRateHistory(AccountMinerDateVo vo) {
|
||||
PoolUnits unit = (PoolUnits) EnumUtils.get(PoolUnits.class, vo.getCoin());
|
||||
if(StringUtils.isNull(unit)){
|
||||
return AjaxResult.error("coin error");
|
||||
}
|
||||
|
||||
Date today = new Date();
|
||||
today.setHours(0);
|
||||
today.setMinutes(0);
|
||||
today.setMinutes(0);
|
||||
|
||||
Calendar ca = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
|
||||
ca.setTime(today);
|
||||
ca.add(Calendar.MONTH,-3);
|
||||
|
||||
Date firstDate = ca.getTime();
|
||||
|
||||
if (StringUtils.isBlank(vo.getStart())){
|
||||
vo.setStart(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,firstDate));
|
||||
}else {
|
||||
if(DateUtils.parseDate(vo.getStart()).before(firstDate)){
|
||||
vo.setStart(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,firstDate));
|
||||
}else {
|
||||
//在三个月之内 不做处理
|
||||
try {
|
||||
DateUtils.parseDate(vo.getStart());
|
||||
}catch (Exception e){
|
||||
//出错说明格式错误有
|
||||
return AjaxResult.error("start param error");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(vo.getEnd())){
|
||||
//在三个月之内 不做处理
|
||||
try {
|
||||
Date end = DateUtils.parseDate(vo.getEnd());
|
||||
if(end.before(DateUtils.parseDate(vo.getStart()))){
|
||||
//end时间在start之前
|
||||
return AjaxResult.error("end Date can not before start Date");
|
||||
}
|
||||
|
||||
if(firstDate.before(end)){
|
||||
return AjaxResult.error("end Date can not before "+DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,firstDate));
|
||||
}
|
||||
}catch (Exception e){
|
||||
//出错说明格式错误有
|
||||
return AjaxResult.error("end param error");
|
||||
}
|
||||
}else {
|
||||
//没有end 则不做处理
|
||||
}
|
||||
|
||||
List<HashRateDto> mhsList = minerMapper.getMinerHashRateHistory24hListByCoinAndAccountMiner(vo);
|
||||
HashRateHistory24hDto dto = new HashRateHistory24hDto();
|
||||
dto.setList(mhsList);
|
||||
dto.setUnit(unit.getUnit());
|
||||
return AjaxResult.success(dto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult getHashRateLast24h(AccountMinerVo vo) {
|
||||
|
||||
long t0 = System.currentTimeMillis();
|
||||
|
||||
PoolUnits unit = (PoolUnits) EnumUtils.get(PoolUnits.class, vo.getCoin());
|
||||
if(StringUtils.isNull(unit)){
|
||||
return AjaxResult.error("coin error");
|
||||
}
|
||||
|
||||
Date today = new Date();
|
||||
|
||||
Calendar ca = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
|
||||
ca.setTime(today);
|
||||
ca.add(Calendar.DATE,-1);
|
||||
|
||||
String start = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,ca.getTime());
|
||||
long t1 = System.currentTimeMillis();
|
||||
List<HashRateDto> list = minerMapper.getMinerHashRateHistory30mListByCoinAndAccountMiner(vo, start);
|
||||
long t2 = System.currentTimeMillis();
|
||||
HashRateHistory30mDto dto = new HashRateHistory30mDto();
|
||||
dto.setList(list);
|
||||
dto.setUnit(unit.getUnit());
|
||||
long t3 = System.currentTimeMillis();
|
||||
|
||||
return AjaxResult.success(dto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,213 @@
|
||||
package com.m2pool.oapi.service.impl;
|
||||
|
||||
import com.m2pool.common.core.text.Convert;
|
||||
import com.m2pool.common.core.utils.DateUtils;
|
||||
import com.m2pool.common.core.utils.StringUtils;
|
||||
import com.m2pool.common.core.web.Result.AjaxResult;
|
||||
import com.m2pool.oapi.dto.*;
|
||||
import com.m2pool.oapi.entity.MinerState;
|
||||
import com.m2pool.oapi.enums.PoolAmount;
|
||||
import com.m2pool.oapi.enums.PoolUnits;
|
||||
import com.m2pool.oapi.mapper.PoolMapper;
|
||||
import com.m2pool.oapi.service.PoolService;
|
||||
import com.m2pool.oapi.utils.EnumUtils;
|
||||
import com.m2pool.oapi.vo.CoinVo;
|
||||
import com.m2pool.oapi.vo.DateVo;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Date 2024/9/13 10:44
|
||||
* @Author 杜懿
|
||||
*/
|
||||
@Service
|
||||
public class PoolServiceImpl implements PoolService {
|
||||
|
||||
@Autowired
|
||||
private PoolMapper poolMapper;
|
||||
|
||||
@Override
|
||||
public AjaxResult getHashRate(CoinVo vo) {
|
||||
PoolUnits unit = (PoolUnits) EnumUtils.get(PoolUnits.class, vo.getCoin());
|
||||
if(StringUtils.isNull(unit)){
|
||||
return AjaxResult.error("coin error");
|
||||
}
|
||||
|
||||
HashRateRealDto dto = poolMapper.getPoolRealHashRateListByCoin(vo);
|
||||
|
||||
dto.setUnit(unit.getUnit());
|
||||
|
||||
return AjaxResult.success(dto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult getHashRateHistory(DateVo vo) {
|
||||
if(StringUtils.isNull(vo)){
|
||||
return AjaxResult.error("request body cannot be null");
|
||||
}
|
||||
|
||||
PoolUnits unit = (PoolUnits) EnumUtils.get(PoolUnits.class, vo.getCoin());
|
||||
if(StringUtils.isNull(unit)){
|
||||
return AjaxResult.error("coin error");
|
||||
}
|
||||
|
||||
Date today = new Date();
|
||||
today.setHours(0);
|
||||
today.setMinutes(0);
|
||||
today.setMinutes(0);
|
||||
|
||||
Calendar ca = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
|
||||
ca.setTime(today);
|
||||
ca.add(Calendar.MONTH,-3);
|
||||
|
||||
//只允许查询当前日期之前3个月的记录 所以firstDate代表运行查询是最早时间值
|
||||
Date firstDate = ca.getTime();
|
||||
//用start保存最开始用户传入的开始时间 没传start或者错误格式都会导致start为null 后续可以根据start是否为空判断是否有正确传入开始时间
|
||||
Date start = DateUtils.parseDate(vo.getStart());
|
||||
|
||||
Date end = DateUtils.parseDate(vo.getEnd());
|
||||
|
||||
if (StringUtils.isNotNull(end)){
|
||||
//在三个月之内 不做处理
|
||||
if(StringUtils.isNull(start)){
|
||||
//用户没传start 只需比较end 和 firsrDate
|
||||
if(end.before(firstDate) || end.equals(firstDate)){
|
||||
return AjaxResult.error("end Date can not before "+DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,firstDate));
|
||||
}
|
||||
//end 在firstDate之后 符合条件 可以进入后续步骤
|
||||
}else {
|
||||
//用户传了 start 此时有start 和 end以及firstDate 需要优先比较这两个start和end是否符合 start before end
|
||||
if(end.before(start) || end.equals(start)){
|
||||
return AjaxResult.error("end Date must after start Date");
|
||||
}else {
|
||||
//start before end 此时可能的时间顺序有 1、firstDate start end 2、start firstDate end 3、 start end firstDate
|
||||
//第一种情况则正常按用户传的start、end查询 即不做处理
|
||||
//第二种情况则设vo.start为firstDate
|
||||
//第三种情况提示 end 不能在firstDate之前
|
||||
if(start.before(firstDate)){
|
||||
//满足次条件的只有2和3 3会在后面进行拦截 所以此处不用处理
|
||||
//处理第二种情况
|
||||
vo.setStart(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,firstDate));
|
||||
}
|
||||
|
||||
//执行到这里只有1、修正了时间的2 以及3
|
||||
if(end.before(firstDate)){
|
||||
//
|
||||
return AjaxResult.error("end Date can not before "+DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,firstDate));
|
||||
}
|
||||
}
|
||||
}
|
||||
}else {
|
||||
//没有end
|
||||
if(StringUtils.isNotNull(start) && firstDate.before(start)){
|
||||
//只有用户传入了正确格式的开始时间 并且这个时间在firstDate之后才不用修改vo.start 否则都需要设置vo.start为firstDate
|
||||
}else {
|
||||
vo.setStart(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,firstDate));
|
||||
}
|
||||
|
||||
}
|
||||
List<HashRateDto> mhs24hList = poolMapper.getPoolHashRateHistory24hListByCoin(vo);
|
||||
List<HashRateDto> mhs30mList = poolMapper.getPoolHashRateHistory30mListByCoin(vo);
|
||||
PoolHashRateHistoryDto dto = new PoolHashRateHistoryDto();
|
||||
dto.setMhs24hList(mhs24hList);
|
||||
dto.setMhsList(mhs30mList);
|
||||
dto.setUnit(unit.getUnit());
|
||||
|
||||
return AjaxResult.success(dto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult getMinersList(CoinVo vo) {
|
||||
PoolUnits unit = (PoolUnits) EnumUtils.get(PoolUnits.class, vo.getCoin());
|
||||
if(StringUtils.isNull(unit)){
|
||||
//防止coin注入异常数据
|
||||
return AjaxResult.error("coin error");
|
||||
}
|
||||
|
||||
MinerWatchDto dto = new MinerWatchDto();
|
||||
List<MinerState> list = poolMapper.getMinerListByCoin(vo);
|
||||
Map<String, Long> map = list.stream().collect(Collectors.groupingBy(
|
||||
MinerState::getState,
|
||||
Collectors.counting()
|
||||
));
|
||||
|
||||
long total = Convert.toLong(list.size(),0L);
|
||||
long online = map.getOrDefault("online", 0L);
|
||||
long offline = map.getOrDefault("offline", 0L);
|
||||
dto.setTotal(total);
|
||||
dto.setOnline(online);
|
||||
dto.setOffline(offline);
|
||||
dto.setTimeout(BigDecimal.valueOf(total)
|
||||
.subtract(BigDecimal.valueOf(online))
|
||||
.subtract(BigDecimal.valueOf(offline))
|
||||
.longValue());
|
||||
|
||||
return AjaxResult.success(dto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult getWatch(CoinVo vo) {
|
||||
PoolUnits unit = (PoolUnits) EnumUtils.get(PoolUnits.class, vo.getCoin());
|
||||
if(StringUtils.isNull(unit)){
|
||||
//防止coin注入异常数据
|
||||
return AjaxResult.error("coin error");
|
||||
}
|
||||
|
||||
PoolAmount poolAmount = (PoolAmount) EnumUtils.get(PoolAmount.class, vo.getCoin());
|
||||
if(StringUtils.isNull(poolAmount)){
|
||||
//防止coin注入异常数据
|
||||
return AjaxResult.error("coin error");
|
||||
}
|
||||
|
||||
PoolWatchDto watch = poolMapper.getPoolWatchByCoin(vo);
|
||||
if(StringUtils.isNull(watch)){
|
||||
watch = new PoolWatchDto();
|
||||
watch.setMiners(0);
|
||||
watch.setMhs(BigDecimal.ZERO);
|
||||
watch.setHeight(0);
|
||||
}
|
||||
//todo 加到配置文件中
|
||||
int fee = 1;
|
||||
if("enx".equals(vo.getCoin())){
|
||||
Date now =new Date();
|
||||
if(now.before(DateUtils.parseDate("2025-04-21"))){{
|
||||
fee =0;
|
||||
}}
|
||||
}
|
||||
watch.setFee(fee+"% PPLNS");
|
||||
watch.setMinPay(poolAmount.getAmount());
|
||||
|
||||
DateVo dateVo = new DateVo();
|
||||
dateVo.setCoin(vo.coin);
|
||||
//Date today = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.getDate());
|
||||
Date today = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.getDate()+" 00:00:00");
|
||||
|
||||
Calendar ca = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
|
||||
ca.setTime(today);
|
||||
ca.add(Calendar.DATE,-7);
|
||||
|
||||
Date start = ca.getTime();
|
||||
dateVo.setStart(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,start));
|
||||
List<HashRateDto> list = poolMapper.getPoolHashRateHistory24hListByCoin(dateVo);
|
||||
|
||||
list.stream().forEach(e -> {
|
||||
e.setDate(DateUtils.addDays(e.getDate(),-1));
|
||||
//MH/s 每秒转GH/s
|
||||
//e.setPv(e.getPv().divide(BigDecimal.valueOf(1000),scale,BigDecimal.ROUND_HALF_UP).stripTrailingZeros());
|
||||
});
|
||||
|
||||
//最后一条用实时表最新一组数据 字段mhs24h对应实时24h算力
|
||||
HashRateDto lastDto = poolMapper.getPoolRealHashRateByCoin(vo);
|
||||
Date now = DateUtils.parseDate(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD));
|
||||
lastDto.setDate(now);
|
||||
list.add(lastDto);
|
||||
watch.setList(list);
|
||||
watch.setUnit(unit.getUnit());
|
||||
return AjaxResult.success(watch);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.m2pool.oapi.utils;
|
||||
|
||||
import com.m2pool.common.core.utils.StringUtils;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/**
|
||||
* @Description 枚举工具类
|
||||
* @Date 2024/6/13 10:54
|
||||
* @Author dy
|
||||
*/
|
||||
public class EnumUtils {
|
||||
|
||||
/**
|
||||
* 通过值判断数值是否属于枚举类的值
|
||||
* @param clzz 枚举类 Enum
|
||||
* @param code
|
||||
* @author wayleung
|
||||
* @return
|
||||
*/
|
||||
public static boolean isInclude(Class<?> clzz,String code){
|
||||
|
||||
if(StringUtils.isEmpty(code)){
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
if(clzz.isEnum()){
|
||||
Object[] enumConstants = clzz.getEnumConstants();
|
||||
Method name = clzz.getMethod("name");
|
||||
|
||||
for (Object enumConstant:enumConstants){
|
||||
if (name.invoke(enumConstant).equals(code.toUpperCase())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}catch (Exception e){
|
||||
throw new RuntimeException();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* 通过值判断数值是否属于枚举类的值
|
||||
* @param clzz 枚举类 Enum
|
||||
* @param code
|
||||
* @author wayleung
|
||||
* @return
|
||||
*/
|
||||
|
||||
public static Object get(Class<?> clzz,String code){
|
||||
|
||||
if(StringUtils.isEmpty(code)){
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
if(clzz.isEnum()){
|
||||
Object[] enumConstants = clzz.getEnumConstants();
|
||||
Method getInfo = clzz.getMethod("name");
|
||||
for (Object enumConstant:enumConstants){
|
||||
if (getInfo.invoke(enumConstant).equals(code.toUpperCase())) {
|
||||
return enumConstant;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}catch (Exception e){
|
||||
throw new RuntimeException();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String getNumberTypeStr(Class<?> clzz,String value){
|
||||
|
||||
if(StringUtils.isEmpty(value)){
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
if(clzz.isEnum()){
|
||||
Object[] enumConstants = clzz.getEnumConstants();
|
||||
Method getInfo = clzz.getMethod("getInfo");
|
||||
Method getValue = clzz.getMethod("getValue");
|
||||
for (Object enumConstant:enumConstants){
|
||||
if (getInfo.invoke(enumConstant).equals(value)) {
|
||||
return (String) getValue.invoke(enumConstant);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}catch (Exception e){
|
||||
throw new RuntimeException();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.m2pool.oapi.vo;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.m2pool.common.core.xss.Xss;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Date 2024/9/12 15:49
|
||||
* @Author 杜懿
|
||||
*/
|
||||
@Data
|
||||
public class AccountDateVo {
|
||||
|
||||
@NotBlank(message = "矿工账号不能为空")
|
||||
@Xss
|
||||
@JsonProperty("mining_user")
|
||||
@JSONField(name = "mining_user")
|
||||
public String ma;
|
||||
|
||||
@Xss
|
||||
public String coin;
|
||||
|
||||
@Xss
|
||||
public String start;
|
||||
|
||||
@Xss
|
||||
public String end;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.m2pool.oapi.vo;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.m2pool.common.core.xss.Xss;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Date 2024/9/12 15:49
|
||||
* @Author 杜懿
|
||||
*/
|
||||
@Data
|
||||
public class AccountMinerDateVo {
|
||||
|
||||
@NotBlank(message = "矿工账号不能为空")
|
||||
@Xss
|
||||
@JsonProperty("mining_user")
|
||||
@JSONField(name = "mining_user")
|
||||
public String ma;
|
||||
|
||||
@NotBlank(message = "矿机号不能为空")
|
||||
@Xss
|
||||
public String miner;
|
||||
|
||||
@Xss
|
||||
public String coin;
|
||||
|
||||
@Xss
|
||||
public String start;
|
||||
|
||||
@Xss
|
||||
public String end;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.m2pool.oapi.vo;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.m2pool.common.core.xss.Xss;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Date 2024/9/12 15:49
|
||||
* @Author 杜懿
|
||||
*/
|
||||
@Data
|
||||
public class AccountMinerVo {
|
||||
|
||||
@NotBlank(message = "矿工账号不能为空")
|
||||
@Xss
|
||||
@JsonProperty("mining_user")
|
||||
@JSONField(name = "mining_user")
|
||||
public String ma;
|
||||
|
||||
@Xss
|
||||
public String coin;
|
||||
|
||||
@NotBlank(message = "矿机号不能为空")
|
||||
@Xss
|
||||
public String miner;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.m2pool.oapi.vo;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.m2pool.common.core.xss.Xss;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Date 2024/9/12 15:49
|
||||
* @Author 杜懿
|
||||
*/
|
||||
@Data
|
||||
public class AccountVo {
|
||||
|
||||
@NotBlank(message = "矿工账号不能为空")
|
||||
@Xss
|
||||
@JsonProperty("mining_user")
|
||||
@JSONField(name = "mining_user")
|
||||
public String ma;
|
||||
|
||||
@Xss
|
||||
public String coin;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.m2pool.oapi.vo;
|
||||
|
||||
import com.m2pool.common.core.xss.Xss;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Date 2024/9/12 15:49
|
||||
* @Author 杜懿
|
||||
*/
|
||||
@Data
|
||||
public class CoinVo {
|
||||
|
||||
@Xss
|
||||
public String coin;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.m2pool.oapi.vo;
|
||||
|
||||
import com.m2pool.common.core.xss.Xss;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Date 2024/9/12 15:49
|
||||
* @Author 杜懿
|
||||
*/
|
||||
@Data
|
||||
public class DateVo {
|
||||
|
||||
@Xss
|
||||
public String start;
|
||||
|
||||
@Xss
|
||||
public String end;
|
||||
|
||||
@Xss
|
||||
public String coin;
|
||||
}
|
||||
156
m2pool-modules/m2pool-oapi/src/main/resources/bootstrap.yml
Normal file
156
m2pool-modules/m2pool-oapi/src/main/resources/bootstrap.yml
Normal file
@@ -0,0 +1,156 @@
|
||||
server:
|
||||
port: 9207
|
||||
compression:
|
||||
enabled: true
|
||||
mime-types: application/json
|
||||
|
||||
spring:
|
||||
#邮箱基本配置
|
||||
mail:
|
||||
# 配置在limit_time内,用户可以发送limit次验证码
|
||||
limit: 2 这个是我额外的配置,结合邮箱服务用的
|
||||
limitTime: 10 这个是我额外的配置
|
||||
#配置smtp服务主机地址
|
||||
# sina smtp.sina.cn
|
||||
# aliyun smtp.aliyun.com
|
||||
# 163 smtp.163.com 端口号465或994
|
||||
host: mail.privateemail.com
|
||||
#发送者邮箱
|
||||
username: support@m2pool.cc
|
||||
#配置密码,注意不是真正的密码,而是刚刚申请到的授权码
|
||||
# password:
|
||||
# password: m2pool2024@!
|
||||
# password: axvm-zfgx-cgcg-qhhu
|
||||
password: m2pool2024@!
|
||||
#端口号
|
||||
port: 587
|
||||
#默认的邮件编码为UTF-8
|
||||
default-encoding: UTF-8
|
||||
#其他参数
|
||||
properties:
|
||||
mail:
|
||||
#配置SSL 加密工厂
|
||||
smtp:
|
||||
ssl:
|
||||
#本地测试,先放开ssl
|
||||
enable: false
|
||||
required: false
|
||||
#开启debug模式,这样邮件发送过程的日志会在控制台打印出来,方便排查错误
|
||||
debug: false
|
||||
socketFactory:
|
||||
class: javax.net.ssl.SSLSocketFactory
|
||||
|
||||
application:
|
||||
# 应用名称
|
||||
name: m2pool-oapi
|
||||
profiles:
|
||||
# 环境配置
|
||||
active: prod
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
# 服务注册地址
|
||||
server-addr: 127.0.0.1:8808
|
||||
namespace: m2_prod
|
||||
group: m2_prod_group
|
||||
# server-addr: 127.0.0.1:8808
|
||||
config:
|
||||
# 配置中心地址
|
||||
server-addr: 127.0.0.1:8808
|
||||
# server-addr: 127.0.0.1:8808
|
||||
# 配置文件格式
|
||||
file-extension: yml
|
||||
# 共享配置
|
||||
shared-configs:
|
||||
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
namespace: m2_prod
|
||||
group: m2_prod_group
|
||||
servlet:
|
||||
multipart:
|
||||
max-file-size: 2MB
|
||||
max-request-size: 8MB
|
||||
|
||||
myenv:
|
||||
domain: https://www.m2pool.com
|
||||
path: /var/www/html/web
|
||||
img: /img
|
||||
|
||||
|
||||
##测试环境
|
||||
#server:
|
||||
# port: 9507
|
||||
# compression:
|
||||
# enabled: true
|
||||
# mime-types: application/json
|
||||
#
|
||||
#spring:
|
||||
# #邮箱基本配置
|
||||
# mail:
|
||||
# # 配置在limit_time内,用户可以发送limit次验证码
|
||||
# limit: 2 这个是我额外的配置,结合邮箱服务用的
|
||||
# limitTime: 10 这个是我额外的配置
|
||||
# #配置smtp服务主机地址
|
||||
# # sina smtp.sina.cn
|
||||
# # aliyun smtp.aliyun.com
|
||||
# # 163 smtp.163.com 端口号465或994
|
||||
# host: mail.privateemail.com
|
||||
# #发送者邮箱
|
||||
# username: support@m2pool.cc
|
||||
# #配置密码,注意不是真正的密码,而是刚刚申请到的授权码
|
||||
# # password:
|
||||
# # password: m2pool2024@!
|
||||
# # password: axvm-zfgx-cgcg-qhhu
|
||||
# password: m2pool2024@!
|
||||
# #端口号
|
||||
# port: 587
|
||||
# #默认的邮件编码为UTF-8
|
||||
# default-encoding: UTF-8
|
||||
# #其他参数
|
||||
# properties:
|
||||
# mail:
|
||||
# #配置SSL 加密工厂
|
||||
# smtp:
|
||||
# ssl:
|
||||
# #本地测试,先放开ssl
|
||||
# enable: false
|
||||
# required: false
|
||||
# #开启debug模式,这样邮件发送过程的日志会在控制台打印出来,方便排查错误
|
||||
# debug: false
|
||||
# socketFactory:
|
||||
# class: javax.net.ssl.SSLSocketFactory
|
||||
#
|
||||
# application:
|
||||
# # 应用名称
|
||||
# name: m2pool-oapi
|
||||
# profiles:
|
||||
# # 环境配置
|
||||
# active: test
|
||||
# cloud:
|
||||
# nacos:
|
||||
# discovery:
|
||||
# # 服务注册地址
|
||||
# server-addr: 127.0.0.1:8808
|
||||
# namespace: m2_test
|
||||
# group: m2_test_group
|
||||
# # server-addr: 127.0.0.1:8808
|
||||
# config:
|
||||
# # 配置中心地址
|
||||
# server-addr: 127.0.0.1:8808
|
||||
# # server-addr: 127.0.0.1:8808
|
||||
# # 配置文件格式
|
||||
# file-extension: yml
|
||||
# # 共享配置
|
||||
# shared-configs:
|
||||
# - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# namespace: m2_test
|
||||
# group: m2_test_group
|
||||
# servlet:
|
||||
# multipart:
|
||||
# max-file-size: 2MB
|
||||
# max-request-size: 8MB
|
||||
#
|
||||
#myenv:
|
||||
# domain: https://test.m2pool.com
|
||||
# path: /var/www/html/web_test
|
||||
# img: /img
|
||||
|
||||
74
m2pool-modules/m2pool-oapi/src/main/resources/logback.xml
Normal file
74
m2pool-modules/m2pool-oapi/src/main/resources/logback.xml
Normal file
@@ -0,0 +1,74 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/m2pool-oapi" />
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 30天 -->
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 30天 -->
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.m2pool" level="info" />
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn" />
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="console" />
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info" />
|
||||
<appender-ref ref="file_error" />
|
||||
</root>
|
||||
</configuration>
|
||||
@@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="com.m2pool.oapi.mapper.AccountMapper">
|
||||
<select id="getAccountRealHashRateListByCoinAndAccount" resultType="com.m2pool.oapi.dto.HashRateRealDto">
|
||||
select
|
||||
mhs30m mhs,
|
||||
mhs24h
|
||||
from
|
||||
${vo.coin}_mhs_realv2
|
||||
where
|
||||
`user` = '${vo.ma}'
|
||||
</select>
|
||||
|
||||
<select id="getAccountHashRateHistory24hListByCoinAndAccount" resultType="com.m2pool.oapi.dto.HashRateDto">
|
||||
select
|
||||
`date`,
|
||||
mhs
|
||||
from
|
||||
${vo.coin}_users_24h
|
||||
<where>
|
||||
`user` = '${vo.ma}'
|
||||
<if test="vo.start != null and vo.start != ''">
|
||||
and `date` > "${vo.start}"
|
||||
</if>
|
||||
<if test="vo.end != null and vo.end != ''">
|
||||
and `date` <= "${vo.end}"
|
||||
</if>
|
||||
</where>
|
||||
order by date
|
||||
</select>
|
||||
|
||||
<select id="getAccountHashRateHistory30mListByCoinAndAccount" resultType="com.m2pool.oapi.dto.HashRateDto">
|
||||
select
|
||||
`date`,
|
||||
mhs
|
||||
from
|
||||
${vo.coin}_users_30m
|
||||
where
|
||||
`user` = '${vo.ma}'
|
||||
and `date` > "${start}"
|
||||
order by date
|
||||
</select>
|
||||
|
||||
<select id="getMinerListByCoinAndAccount" resultType="com.m2pool.oapi.entity.MinerState">
|
||||
select
|
||||
miner,
|
||||
`state`
|
||||
from
|
||||
${vo.coin}_mhs_realv2
|
||||
where
|
||||
`user` = '${vo.ma}'
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="com.m2pool.oapi.mapper.MinerMapper">
|
||||
|
||||
<select id="getMinerRealHashRateByCoinAndAccountMiner" resultType="com.m2pool.oapi.dto.HashRateRealDto">
|
||||
select
|
||||
mhs30m mhs,
|
||||
mhs24h
|
||||
from
|
||||
${vo.coin}_mhs_realv2
|
||||
where
|
||||
`user` = '${vo.ma}' and miner= '${vo.miner}'
|
||||
order by date desc limit 1
|
||||
</select>
|
||||
|
||||
<select id="getMinerHashRateHistory24hListByCoinAndAccountMiner"
|
||||
resultType="com.m2pool.oapi.dto.HashRateDto">
|
||||
select
|
||||
`date`,
|
||||
mhs
|
||||
from
|
||||
${vo.coin}_mhs24h
|
||||
<where>
|
||||
`user` = '${vo.ma}'
|
||||
and miner = '${vo.miner}'
|
||||
<if test="vo.start != null and vo.start != ''">
|
||||
and `date` > "${vo.start}"
|
||||
</if>
|
||||
<if test="vo.end != null and vo.end != ''">
|
||||
and `date` <= "${vo.end}"
|
||||
</if>
|
||||
</where>
|
||||
order by date
|
||||
</select>
|
||||
|
||||
<select id="getMinerHashRateHistory30mListByCoinAndAccountMiner"
|
||||
resultType="com.m2pool.oapi.dto.HashRateDto">
|
||||
select
|
||||
`date`,
|
||||
mhs
|
||||
from
|
||||
${vo.coin}_mhs30m
|
||||
where
|
||||
`user` = '${vo.ma}'
|
||||
and miner = '${vo.miner}'
|
||||
and `date` > "${start}"
|
||||
order by date
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.m2pool.oapi.mapper.PoolMapper">
|
||||
|
||||
<select id="getPoolRealHashRateListByCoin" resultType="com.m2pool.oapi.dto.HashRateRealDto">
|
||||
select
|
||||
sum(mhs30m) mhs,
|
||||
sum(mhs24h) mhs24h
|
||||
from
|
||||
${vo.coin}_mhs_realv2
|
||||
</select>
|
||||
|
||||
<select id="getPoolHashRateHistory24hListByCoin" resultType="com.m2pool.oapi.dto.HashRateDto">
|
||||
select
|
||||
`date`,
|
||||
mhs
|
||||
from
|
||||
${vo.coin}_pool_24h
|
||||
<where>
|
||||
<if test="vo.start != null and vo.start != ''">
|
||||
and `date` > "${vo.start}"
|
||||
</if>
|
||||
<if test="vo.end != null and vo.end != ''">
|
||||
and `date` <= "${vo.end}"
|
||||
</if>
|
||||
</where>
|
||||
order by date
|
||||
</select>
|
||||
|
||||
<select id="getPoolHashRateHistory30mListByCoin" resultType="com.m2pool.oapi.dto.HashRateDto">
|
||||
select
|
||||
`date`,
|
||||
mhs
|
||||
from
|
||||
${vo.coin}_pool_30m
|
||||
<where>
|
||||
<if test="vo.start != null and vo.start != ''">
|
||||
and `date` > "${vo.start}"
|
||||
</if>
|
||||
<if test="vo.end != null and vo.end != ''">
|
||||
and `date` <= "${vo.end}"
|
||||
</if>
|
||||
</where>
|
||||
order by date
|
||||
</select>
|
||||
|
||||
<select id="getMinerListByCoin" resultType="com.m2pool.oapi.entity.MinerState">
|
||||
select
|
||||
miner,
|
||||
`state`
|
||||
from
|
||||
${vo.coin}_mhs_realv2
|
||||
</select>
|
||||
|
||||
<select id="getPoolWatchByCoin" resultType="com.m2pool.oapi.dto.PoolWatchDto">
|
||||
select
|
||||
sum(mhs24h) mhs,
|
||||
count(case when state='online' then 1 END) as miners,
|
||||
(select height from distribution.${vo.coin}_blkreportprofitv2 order by date desc limit 1) as height
|
||||
from
|
||||
${vo.coin}_mhs_realv2 limit 1
|
||||
</select>
|
||||
|
||||
<select id="getPoolRealHashRateByCoin" resultType="com.m2pool.oapi.dto.HashRateDto">
|
||||
select `date`,sum(mhs24h) mhs from ${vo.coin}_mhs_realv2 group by date order by date desc limit 1
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user