update 在离线和验证码邮件发送改为html
This commit is contained in:
@@ -50,6 +50,7 @@ public class ManageTask {
|
||||
LocalDateTime maxDateData = manageWalletOutInMapper.getMaxDateIn();
|
||||
List<ManageWalletOutIn> manageWalletOutIns = new ArrayList<>();
|
||||
if (maxDateData != null){
|
||||
maxDateData = maxDateData.toLocalDate().atStartOfDay().minusDays(10);
|
||||
//获取startDate 后的数据,用于比对
|
||||
manageWalletOutIns = manageWalletOutInMapper.selectList(new LambdaQueryWrapper<ManageWalletOutIn>()
|
||||
.ge(ManageWalletOutIn::getShouldOutDate, maxDateData.toLocalDate().atStartOfDay())
|
||||
|
||||
@@ -5017,4 +5017,183 @@ public class DataTask {
|
||||
dto.getLuck3d(),dto.getLuck7d(),dto.getLuck30d(),dto.getLuck90d());
|
||||
}
|
||||
|
||||
|
||||
@Scheduled(cron = "20 1,3,10,31,33,40 * * * ?")
|
||||
public void Sha3x30mDataToDB(){
|
||||
//String nowStr = DateUtils.dateTimeNow("yyyy-MM-dd HH:mm:00");
|
||||
if(!enable){
|
||||
return;
|
||||
}
|
||||
Date now = new Date();
|
||||
int minute = (now.getMinutes() / 30) * 30;
|
||||
now.setMinutes( minute);
|
||||
now.setSeconds(0);
|
||||
String nowStr = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, now);
|
||||
|
||||
System.out.println("SHA3X 30分钟定时任务执行时间:"+now);
|
||||
System.out.println("格式化后的时间:"+nowStr);
|
||||
|
||||
//检查二级表是否有当前时间数据
|
||||
int count = poolMapper.getLastDataTime(Pools.SHA3X.getMhs() + "30m", nowStr);
|
||||
|
||||
if(count == 0) {
|
||||
List<MinerDataDto> list = poolMapper.getHourMinerDataList(Pools.SHA3X.getMhs()+"_realv2",nowStr);
|
||||
if(list.size() > 0){
|
||||
List<MinerDataDto> offlineList = new ArrayList<>();
|
||||
list.stream().forEach(e -> {
|
||||
if(StringUtils.isNotNull(e.getMhs())){
|
||||
e.setMhs(e.getMhs() * Pools.SHA3X.getFac());
|
||||
}
|
||||
if("offline".equals(e.getState())){
|
||||
offlineList.add(e);
|
||||
}
|
||||
});
|
||||
list = filterList(list,now);
|
||||
|
||||
boolean result = poolMapper.batchInsertMhsDataToDB(Pools.SHA3X.getMhs() + "30m", getToHourDBListByMinerDataList(list));
|
||||
|
||||
Map<Date, List<MinerDataDto>> map = list.stream().collect(Collectors.groupingBy(MinerDataDto::getDate));
|
||||
map.forEach((date,dList) -> {
|
||||
PoolPower poolPower = new PoolPower();
|
||||
//poolPower.setDate(date);
|
||||
poolPower.setDateStr(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,date));
|
||||
Map<String, Long> stateCount = dList.stream().collect(Collectors.groupingBy(MinerDataDto::getState, Collectors.counting()));
|
||||
poolPower.setMhs(dList.stream().map(e -> BigDecimal.valueOf(e.getMhs())).reduce(BigDecimal::add).get().stripTrailingZeros());
|
||||
poolPower.setMiners(dList.size());
|
||||
poolPower.setOnline(Convert.toInt(stateCount.get("online"),0));
|
||||
poolPower.setOffline(Convert.toInt(stateCount.get("offline"),0));
|
||||
|
||||
boolean poolResult = poolMapper.insertPoolPower(Pools.SHA3X.getPoolTable() + "_30m", poolPower);
|
||||
int time =0;
|
||||
while (!poolResult){
|
||||
poolResult = poolMapper.insertPoolPower(Pools.SHA3X.getPoolTable() + "_30m", poolPower);
|
||||
if (time > 5) {
|
||||
break;
|
||||
}
|
||||
time ++;
|
||||
}
|
||||
|
||||
System.out.println("构造写入user算力表数据");
|
||||
Map<String, List<MinerDataDto>> userMap = dList.stream().collect(Collectors.groupingBy(MinerDataDto::getUser));
|
||||
List<MinerDataInsertDBDto> userList = new ArrayList<>();
|
||||
userMap.forEach((user,uList)->{
|
||||
MinerDataInsertDBDto uDto = new MinerDataInsertDBDto();
|
||||
uDto.setDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,date));
|
||||
uDto.setUser(user);
|
||||
uDto.setMhs(uList.stream().map(e->BigDecimal.valueOf(e.getMhs())).reduce(BigDecimal::add).get().doubleValue());
|
||||
userList.add(uDto);
|
||||
} );
|
||||
System.out.println("user算力表入库数据条数:"+userList.size());
|
||||
boolean userResult = poolMapper.batchInsertUserMhsDateToDB(Pools.SHA3X.getName() + "_users_30m", userList);
|
||||
int uTime =0;
|
||||
while (!userResult){
|
||||
userResult = poolMapper.batchInsertUserMhsDateToDB(Pools.SHA3X.getName() + "_users_30m", userList);
|
||||
if (uTime > 5) {
|
||||
break;
|
||||
}
|
||||
uTime ++;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
Map<String, List<MinerDataDto>> userMap = list.stream().collect(Collectors.groupingBy(MinerDataDto::getMiner));
|
||||
if (result) {
|
||||
System.out.println(DateUtils.dateTimeNow() + "SHA3X 小时数据存入数据成功");
|
||||
} else {
|
||||
System.out.println(DateUtils.dateTimeNow() + "SHA3X 小时数据存入数据失败");
|
||||
}
|
||||
|
||||
if(offlineList.size() >0){
|
||||
CompletableFuture.runAsync(()->{
|
||||
|
||||
//根据挖矿账户分组、统计离线矿机名单、离线矿机数
|
||||
|
||||
//对比redis中该挖矿账户上一次离线矿机数
|
||||
//有redis数据 需要判断 上一次离线矿机数<本次矿机离线数 才执行通知 否则跳过
|
||||
//无redis数据 说明是第一次 执行通知
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else{
|
||||
//重来一次!
|
||||
CompletableFuture.runAsync(()->{
|
||||
System.out.println("SHA3X 30分钟定时任务执行失败 延时一分钟时间重新查询");
|
||||
System.out.println("延迟后使用的查询时间:"+now);
|
||||
System.out.println("延迟后 格式化后的时间:"+nowStr);
|
||||
|
||||
//检查二级表是否有当前时间数据
|
||||
int newCount = poolMapper.getLastDataTime(Pools.SHA3X.getMhs() + "30m", nowStr);
|
||||
if(newCount == 0){
|
||||
List<MinerDataDto> newList = poolMapper.getHourMinerDataList(Pools.SHA3X.getMhs()+"_realv2",nowStr);
|
||||
if(newList.size() > 0){
|
||||
|
||||
newList.stream().forEach(e -> {
|
||||
if(StringUtils.isNotNull(e.getMhs())){
|
||||
e.setMhs(e.getMhs() * Pools.SHA3X.getFac());
|
||||
}
|
||||
});
|
||||
newList = filterList(newList,now);
|
||||
|
||||
boolean newResult = poolMapper.batchInsertMhsDataToDB(Pools.SHA3X.getMhs() + "30m", getToHourDBListByMinerDataList(newList));
|
||||
|
||||
Map<Date, List<MinerDataDto>> map2 = newList.stream().collect(Collectors.groupingBy(MinerDataDto::getDate));
|
||||
map2.forEach((date,dList) -> {
|
||||
PoolPower poolPower = new PoolPower();
|
||||
//poolPower.setDate(date);
|
||||
poolPower.setDateStr(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,date));
|
||||
Map<String, Long> stateCount = dList.stream().collect(Collectors.groupingBy(MinerDataDto::getState, Collectors.counting()));
|
||||
poolPower.setMhs(dList.stream().map(e -> BigDecimal.valueOf(e.getMhs())).reduce(BigDecimal::add).get().stripTrailingZeros());
|
||||
poolPower.setMiners(dList.size());
|
||||
poolPower.setOnline(Convert.toInt(stateCount.get("online"),0));
|
||||
poolPower.setOffline(Convert.toInt(stateCount.get("offline"),0));
|
||||
|
||||
boolean poolResult2 = poolMapper.insertPoolPower(Pools.SHA3X.getPoolTable() + "_30m", poolPower);
|
||||
int time =0;
|
||||
while (!poolResult2){
|
||||
poolResult2 = poolMapper.insertPoolPower(Pools.SHA3X.getPoolTable() + "_30m", poolPower);
|
||||
if (time > 5) {
|
||||
break;
|
||||
}
|
||||
time ++;
|
||||
}
|
||||
|
||||
System.out.println("延迟任务 构造写入user算力表数据");
|
||||
Map<String, List<MinerDataDto>> userMap = dList.stream().collect(Collectors.groupingBy(MinerDataDto::getUser));
|
||||
List<MinerDataInsertDBDto> userList = new ArrayList<>();
|
||||
userMap.forEach((user,uList)->{
|
||||
MinerDataInsertDBDto uDto = new MinerDataInsertDBDto();
|
||||
uDto.setDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,date));
|
||||
uDto.setUser(user);
|
||||
uDto.setMhs(uList.stream().map(e->BigDecimal.valueOf(e.getMhs())).reduce(BigDecimal::add).get().doubleValue());
|
||||
userList.add(uDto);
|
||||
} );
|
||||
System.out.println("延迟任务 user算力表入库数据条数:"+userList.size());
|
||||
boolean userResult = poolMapper.batchInsertUserMhsDateToDB(Pools.SHA3X.getName() + "_users_30m", userList);
|
||||
int uTime =0;
|
||||
while (!userResult){
|
||||
userResult = poolMapper.batchInsertUserMhsDateToDB(Pools.SHA3X.getName() + "_users_30m", userList);
|
||||
if (uTime > 5) {
|
||||
break;
|
||||
}
|
||||
uTime ++;
|
||||
}
|
||||
});
|
||||
if (newResult) {
|
||||
System.out.println(DateUtils.dateTimeNow() + "SHA3X 30m数据 延迟存入数据成功");
|
||||
} else {
|
||||
System.out.println(DateUtils.dateTimeNow() + "SHA3X 30m数据 延迟存入数据失败");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.m2pool.pool.mapper.NoticeMapper;
|
||||
import com.m2pool.pool.mapper.PoolMapper;
|
||||
import com.m2pool.system.api.RemoteMailService;
|
||||
import com.m2pool.system.api.entity.EmailEntity;
|
||||
import com.m2pool.system.api.entity.EmailTemplateEntity;
|
||||
import lombok.Data;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
@@ -40,11 +41,33 @@ public class OffLineNoticeTask {
|
||||
@Autowired
|
||||
private RemoteMailService mailService;
|
||||
|
||||
|
||||
@Autowired
|
||||
private RedisService redisService;
|
||||
|
||||
|
||||
//@Scheduled(cron = "0 0/2 * * * ?")
|
||||
//public void test(){
|
||||
// Map<String, Object> map = new HashMap<>();
|
||||
// map.put("user","yyb");
|
||||
// map.put("coin","sha3x");
|
||||
// map.put("offOnlineNumbers",24);
|
||||
// EmailTemplateEntity test = new EmailTemplateEntity("1416014977@qq.com", "测试邮件", "emailoffline-en", map);
|
||||
// mailService.sendHtmlMailMessage(test);
|
||||
//
|
||||
// Map<String, Object> a = new HashMap<>();
|
||||
// a.put("user","yyb");
|
||||
// a.put("coin","sha3x");
|
||||
// a.put("offOnlineNumbers",24);
|
||||
// EmailTemplateEntity b = new EmailTemplateEntity("yaoyoubo89@gmail.com", "测试邮件", "emailoffline-en", a);
|
||||
// mailService.sendHtmlMailMessage(b);
|
||||
//
|
||||
// //Map<String, Object> code = new HashMap<>();
|
||||
// //code.put("code","123456");
|
||||
// //code.put("type","Login");
|
||||
// //EmailTemplateEntity test1 = new EmailTemplateEntity("1416014977@qq.com", "登录", "emailCode-en", code);
|
||||
// //mailService.sendHtmlMailMessage(test1);
|
||||
//}
|
||||
|
||||
@Scheduled(cron = "20 15,45 * * * ?")
|
||||
public void NEXA30mDataToDB(){
|
||||
//String nowStr = DateUtils.dateTimeNow("yyyy-MM-dd HH:mm:00");
|
||||
@@ -272,7 +295,7 @@ public class OffLineNoticeTask {
|
||||
list.stream().forEach(e -> {
|
||||
long lastOff = 0;
|
||||
if(StringUtils.isNotNull(map)){
|
||||
lastOff =map.getOrDefault(e.getUser(),0L);
|
||||
lastOff = map.getOrDefault(e.getUser(),0L);
|
||||
}
|
||||
if(e.getOffline() > lastOff){
|
||||
//对比redis中该挖矿账户上一次离线矿机数 上一次不存在则设上一次离线数为0来进行比较
|
||||
|
||||
@@ -220,20 +220,52 @@ public class NodeRpc{
|
||||
|
||||
}
|
||||
|
||||
public static boolean checkAddress(String coin,String address) {
|
||||
//不同币种要单独设置验证方法
|
||||
String[] params = {address};
|
||||
if (coin.equals("monero")){
|
||||
int length = address.length();
|
||||
/**
|
||||
* 校验monero 钱包是否合法
|
||||
* @param address
|
||||
* @return
|
||||
*/
|
||||
public static boolean checkMonero(String address){
|
||||
int length = address.length();
|
||||
|
||||
if(StringUtils.isNotEmpty(address) && (length == 95 || length == 106) ){
|
||||
if (address.startsWith("4") || address.startsWith("8")){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
if(StringUtils.isNotEmpty(address) && (length == 95 || length == 106) ){
|
||||
if (address.startsWith("4") || address.startsWith("8")){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验sha3x 钱包是否合法
|
||||
* @param address
|
||||
* @return
|
||||
*/
|
||||
public static boolean checkSha3x(String address){
|
||||
int length = address.length();
|
||||
|
||||
if(StringUtils.isNotEmpty(address) && (length == 95 || length == 106) ){
|
||||
if (address.startsWith("4") || address.startsWith("8")){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean checkAddress(String coin,String address) {
|
||||
//不同币种要单独设置验证方法
|
||||
String[] params = {address};
|
||||
|
||||
//下面新增的币种暂时不通过节点校验
|
||||
if (coin.equals("monero")){
|
||||
return checkMonero(address);
|
||||
}
|
||||
if (coin.equals("sha3x")){
|
||||
return true;
|
||||
}
|
||||
|
||||
String result = getResultTest(coin, "validateaddress", params);
|
||||
//处理result
|
||||
if(StringUtils.isBlank(result)){
|
||||
|
||||
Reference in New Issue
Block a user