From 981838726c87bbf22ee9d5c253aae8f347a3be12 Mon Sep 17 00:00:00 2001 From: yyb <1416014977@qq.com> Date: Wed, 27 Aug 2025 15:03:11 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E5=90=8E=E5=8F=B0=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=87=BA=E5=85=A5=E8=B4=A6=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/config/AbstractMongoDbConfig.java | 2 +- .../m2pool/manage/config/MongoDbConfig.java | 11 +- .../mapper/ManageWalletOutInMapper.java | 18 ++- .../com/m2pool/manage/task/ManageTask.java | 111 ++++++++++++++++-- .../mapper/manage/ManageBroadcastMapper.xml | 6 +- .../mapper/manage/ManageWalletOutInMapper.xml | 40 +++---- .../java/com/m2pool/pool/task/DataTask.java | 8 +- .../m2pool/pool/task/OffLineNoticeTask.java | 4 +- .../com/m2pool/pool/utils/SocketDemo.java | 12 +- .../mapper/pool/UserAccountMapper.xml | 2 +- 10 files changed, 164 insertions(+), 50 deletions(-) diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/config/AbstractMongoDbConfig.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/config/AbstractMongoDbConfig.java index 4033844..d51351c 100644 --- a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/config/AbstractMongoDbConfig.java +++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/config/AbstractMongoDbConfig.java @@ -22,7 +22,7 @@ public abstract class AbstractMongoDbConfig { return new SimpleMongoClientDatabaseFactory(connectionString); } - public MongoDatabaseFactory mongoDatabaseNoUserFactory() { + public MongoDatabaseFactory mongoDatabaseNoUserFactory(String host, String port, String database) { String connectionString = "mongodb://"+ host+":"+port +"/" + database; return new SimpleMongoClientDatabaseFactory(connectionString); } diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/config/MongoDbConfig.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/config/MongoDbConfig.java index 2d6f39e..adfafab 100644 --- a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/config/MongoDbConfig.java +++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/config/MongoDbConfig.java @@ -1,5 +1,6 @@ package com.m2pool.manage.config; +import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -11,13 +12,21 @@ import org.springframework.data.mongodb.core.MongoTemplate; * @Date 2025/7/23 10:00 * @Author yyb */ +@Data @Configuration @ConfigurationProperties("spring.data.mongodb.documentation") public class MongoDbConfig extends AbstractMongoDbConfig{ + + @Primary @Bean(name = "docMongoTemplate") @Override public MongoTemplate getMongoTemplate() { - return new MongoTemplate(mongoDatabaseNoUserFactory()); + return new MongoTemplate(mongoDatabaseNoUserFactory(host, port, database)); } + + private String database; + private String host; + private String port; + } diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/mapper/ManageWalletOutInMapper.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/mapper/ManageWalletOutInMapper.java index 99fb1f1..a1daadc 100644 --- a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/mapper/ManageWalletOutInMapper.java +++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/mapper/ManageWalletOutInMapper.java @@ -18,9 +18,21 @@ import java.util.List; public interface ManageWalletOutInMapper extends BaseMapper { + /** + * 获取入账信息 + * @param startDate + * @return + */ @DistributionDB - List getWalletInfo( - @Param("startDate") LocalDateTime startDate - ); + List getWalletIn(@Param("startDate") LocalDateTime startDate); + + + /** + * 获取出账信息 + * @param startDate + * @return + */ + @DistributionDB + List getWalletOut(@Param("startDate") LocalDateTime startDate); } diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/task/ManageTask.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/task/ManageTask.java index b519033..6f008f1 100644 --- a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/task/ManageTask.java +++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/task/ManageTask.java @@ -1,6 +1,7 @@ package com.m2pool.manage.task; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.m2pool.common.core.utils.DateUtils; import com.m2pool.manage.entity.ManageWalletOutIn; import com.m2pool.manage.mapper.ManageBroadcastMapper; import com.m2pool.manage.mapper.ManageWalletOutInMapper; @@ -12,9 +13,9 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Date; -import java.util.List; -import java.util.Locale; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @Description 后台管理系统 定时任务 @@ -36,23 +37,113 @@ public class ManageTask { /** * 存储交易记录定时任务 */ - @Scheduled(cron = "22 21 0/1 * * ?") + @Scheduled(cron = "22 17 0/1 * * ?") + //@Scheduled(cron = "0 0/1 * * * ?") public void insertDataToWalletOutInDb(){ - ManageWalletOutIn manageWalletOutIn = manageWalletOutInMapper.selectOne(new LambdaQueryWrapper().orderByDesc( - ManageWalletOutIn::getDate + ManageWalletOutIn manageWalletOutIn = manageWalletOutInMapper.selectOne(new LambdaQueryWrapper() + .orderByDesc(ManageWalletOutIn::getDate ).last("limit 1")); + LocalDateTime startDate = null; + List manageWalletOutIns = new ArrayList<>(); if (manageWalletOutIn != null){ startDate = manageWalletOutIn.getDate(); + //获取startDate 后的数据,用于比对 + manageWalletOutIns = manageWalletOutInMapper.selectList(new LambdaQueryWrapper() + .ge(ManageWalletOutIn::getDate, startDate.toLocalDate().atStartOfDay())); + } + + List walletIn = manageWalletOutInMapper.getWalletIn(startDate); + List walletOut = manageWalletOutInMapper.getWalletOut(startDate); + Map> walletInMap = walletIn.stream() + .collect(Collectors.groupingBy(item -> + item.getUser() + item.getCoin() + item.getDate().toLocalDate().atStartOfDay() + )); + Map> walletOutMap = walletOut.stream() + .collect(Collectors.groupingBy(item -> + item.getUser() + item.getCoin() + item.getDate().toLocalDate().atStartOfDay() + )); + + + List walletInfo = new ArrayList<>(); + //外层为out,内层为in + for (Map.Entry> outEntry : walletOutMap.entrySet()) { + String key = outEntry.getKey(); + List outList = outEntry.getValue(); + + if (walletInMap.containsKey(key)) { + List inList = walletInMap.get(key); + + // 处理 outList 与 inList 匹配的项 + List updatedOutList = outList.stream() + .peek(outItem -> inList.stream() + .filter(inItem -> outItem.getMaxHeight().equals(inItem.getMaxHeight())) + .findFirst() + .ifPresent(inItem -> { + outItem.setShouldOutDate(inItem.getShouldOutDate()); + outItem.setAllocationAmount(inItem.getAllocationAmount()); + })) + .collect(Collectors.toList()); + walletInfo.addAll(updatedOutList); + + // 处理 inList 中未匹配的项 + List updatedInList = inList.stream() + .filter(inItem -> outList.stream() + .noneMatch(outItem -> outItem.getMaxHeight().equals(inItem.getMaxHeight()))) + .collect(Collectors.toList()); + walletInfo.addAll(updatedInList); + + } else { + walletInfo.addAll(outList); + } + } + //外层为in,内层为out -----新增当天只有walletIn,没有walletOut的数据 + for (Map.Entry> inEntry : walletInMap.entrySet()) { + String key = inEntry.getKey(); + if (!walletOutMap.containsKey(key)) { + walletInfo.addAll(inEntry.getValue()); + } + } + List collect = walletInfo.stream().sorted(Comparator.comparing(ManageWalletOutIn::getDate)).collect(Collectors.toList()); + //查询ManageWalletOutIn 数据,比对是否修改 + if (!manageWalletOutIns.isEmpty()){ + List updateList = new ArrayList<>(); + List saveList = new ArrayList<>(); + + for (ManageWalletOutIn item : collect) { + manageWalletOutIns.stream() + .filter(dbItem -> dbItem.getCoin().equals(item.getCoin()) + && dbItem.getUser().equals(item.getUser()) + && dbItem.getMaxHeight().equals(item.getMaxHeight()) + && dbItem.getDate().toLocalDate().atStartOfDay().equals(item.getDate().toLocalDate().atStartOfDay())) + .findFirst() + .ifPresent(dbItem -> { + // 若找到匹配项,设置 id 并添加到 updateList + item.setId(dbItem.getId()); + updateList.add(item); + }); + + if (item.getId() == null){ + saveList.add(item); + } + } + if (!updateList.isEmpty()){ + boolean update = manageWalletOutInService.updateBatchById(updateList); + System.out.println("walletOutIn 修改"+update); + } + if (!saveList.isEmpty()){ + boolean save = manageWalletOutInService.saveBatch(saveList); + System.out.println("walletOutIn 新增"+save); + } + }else{ + boolean b = manageWalletOutInService.saveBatch(collect); + System.out.println("初始化walletOutIn数据"+b); } - List walletInfo = manageWalletOutInMapper.getWalletInfo(startDate); - boolean b = manageWalletOutInService.saveBatch(walletInfo); - System.out.println("walletOutIn 插入结果"+b); } /** - * 删除再离线数据 + * 删除再离线数据(保留一月数据) */ @Scheduled(cron = "5 5 1 * * ?") public void deleteOnlineAndOfflineDataForNexa(){ diff --git a/m2pool-modules/m2pool-manage/src/main/resources/mapper/manage/ManageBroadcastMapper.xml b/m2pool-modules/m2pool-manage/src/main/resources/mapper/manage/ManageBroadcastMapper.xml index d57275f..24e07c9 100644 --- a/m2pool-modules/m2pool-manage/src/main/resources/mapper/manage/ManageBroadcastMapper.xml +++ b/m2pool-modules/m2pool-manage/src/main/resources/mapper/manage/ManageBroadcastMapper.xml @@ -36,7 +36,7 @@ `user`, address, `date`, - should_out_date as shouldOutDate, + DATE(`date`) as shouldOutDate, max_height, allocation_amount as allocationAmount, transfer_amount as transferAmount @@ -46,10 +46,10 @@ coin = #{coin} AND `user` = #{user} - and `should_out_date` >= #{startDate} and `should_out_date` #{endDate} + and DATE(`date`) >= #{startDate} and DATE(`date`) #{endDate} - and `should_out_date` >= DATE_SUB(NOW(), INTERVAL 1 MONTH) + and `date` >= DATE_SUB(DATE(NOW()), INTERVAL 1 MONTH) diff --git a/m2pool-modules/m2pool-manage/src/main/resources/mapper/manage/ManageWalletOutInMapper.xml b/m2pool-modules/m2pool-manage/src/main/resources/mapper/manage/ManageWalletOutInMapper.xml index 48250e9..b54715b 100644 --- a/m2pool-modules/m2pool-manage/src/main/resources/mapper/manage/ManageWalletOutInMapper.xml +++ b/m2pool-modules/m2pool-manage/src/main/resources/mapper/manage/ManageWalletOutInMapper.xml @@ -5,46 +5,40 @@ - SELECT wi.coin, wi.`user`, wi.should_out_date AS shouldOutDate, wi.amount AS allocationAmount, - wo.address, - wo.`date`, - wo.max_height AS maxHeight, - wo.tx_id AS txId, - wo.amount AS transferAmount + wi.`create_date` as `date`, + wi.max_height AS maxHeight FROM wallet_in wi - LEFT JOIN wallet_outv2 wo - ON - DATE(wi.create_date) = DATE(wo.`date`) AND wi.coin = wo.coin AND wi.`user` = wo.`user` - wo.`date` NOW() - - AND wo.`date` > #{startDate} - + + + wi.`create_date` >= DATE(#{startDate}) + + + wi.`create_date` NOW() + + - UNION + +