diff --git a/m2pool-auth/src/main/java/com/m2pool/auth/entity/LoginManageBody.java b/m2pool-auth/src/main/java/com/m2pool/auth/entity/LoginManageBody.java
new file mode 100644
index 0000000..e93d2ef
--- /dev/null
+++ b/m2pool-auth/src/main/java/com/m2pool/auth/entity/LoginManageBody.java
@@ -0,0 +1,30 @@
+package com.m2pool.auth.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Email;
+
+/**
+ * @Description 管理系统用户登录请求对象
+ * @Date 2025/5/22 16:13
+ * @Author yyb
+ */
+@Data
+@ApiModel(description = "")
+public class LoginManageBody {
+
+ /** 邮箱 */
+ @Email
+ @ApiModelProperty(value = "邮箱", required = true, example = "")
+ private String userName;
+
+ /** 密码 */
+ @ApiModelProperty(value = "密码", required = true, example = "")
+ private String password;
+
+ private String uuid;
+
+ //private boolean flag = false;
+}
diff --git a/m2pool-modules/m2pool-manage/pom.xml b/m2pool-modules/m2pool-manage/pom.xml
new file mode 100644
index 0000000..8e0d8bd
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/pom.xml
@@ -0,0 +1,212 @@
+
+
+ 4.0.0
+
+ com.m2pool
+ m2pool-modules
+ 3.5.0
+
+
+ m2pool-manage
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.fox.version}
+
+
+
+
+ mysql
+ mysql-connector-java
+
+
+
+
+ org.projectlombok
+ lombok-maven-plugin
+ provided
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.m2pool
+ common-datasource
+
+
+
+
+ com.m2pool
+ common-security
+
+
+
+
+ com.m2pool
+ common-log
+
+
+
+ com.m2pool
+ common-swagger
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
+
+
+ org.java-websocket
+ Java-WebSocket
+ 1.3.5
+
+
+
+ cn.hutool
+ hutool-all
+ 5.6.2
+
+
+
+ org.mybatis
+ mybatis
+ 3.5.7
+ compile
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.5.3
+
+
+
+
+ de.taimos
+ totp
+ 1.0
+
+
+
+ commons-codec
+ commons-codec
+ 1.10
+
+
+
+ com.google.zxing
+ javase
+ 3.3.0
+
+
+
+
+
+
+
+
+ dev
+
+ dev
+ 127.0.0.1:8808
+
+
+
+ true
+
+
+
+
+ test
+
+ test
+ 127.0.0.1:8808
+
+
+ false
+
+
+
+
+ prod
+
+ prod
+ 127.0.0.1:8808
+
+
+ false
+
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.5.6
+
+
+
+ repackage
+
+
+
+
+
+
+
+
+
diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/M2ManageApplication.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/M2ManageApplication.java
new file mode 100644
index 0000000..2e5d524
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/M2ManageApplication.java
@@ -0,0 +1,33 @@
+package com.m2pool.manage;
+
+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 启动器类
+ * @Date 2025/5/22 14:25
+ * @Author yyb
+ */
+@EnableCustomConfig
+@EnableCustomSwagger2
+@EnableM2PoolFeignClients
+@SpringBootApplication
+@MapperScan({"com.m2pool.manage.mapper"})
+public class M2ManageApplication {
+ @Bean
+ public RestTemplate restTemplate(){
+ return new RestTemplate();
+ }
+
+ public static void main(String[] args) {
+ SpringApplication.run(M2ManageApplication.class,args);
+ System.out.println("m2pool矿池 管理系统启动成功");
+ }
+
+}
diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/controller/ManageBroadcastController.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/controller/ManageBroadcastController.java
new file mode 100644
index 0000000..93864a2
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/controller/ManageBroadcastController.java
@@ -0,0 +1,70 @@
+package com.m2pool.manage.controller;
+
+import com.m2pool.common.core.Result.R;
+import com.m2pool.common.core.utils.PageUtils;
+import com.m2pool.common.core.web.page.TableDataInfo;
+import com.m2pool.common.security.annotation.RequiresLogin;
+import com.m2pool.manage.dto.ManageBroadcastDto;
+import com.m2pool.manage.service.ManageBroadcastService;
+import com.m2pool.manage.vo.ManageBaseVo;
+import com.m2pool.manage.vo.ManageBroadcastVo;
+import com.m2pool.manage.vo.PageVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Description 广播信息控制器类
+ * @Date 2025/5/22 14:22
+ * @Author yyb
+ */
+@RestController
+@RequestMapping("/broadcast")
+@Api(tags = "广播信息控制器类")
+public class ManageBroadcastController {
+
+ @Resource
+ private ManageBroadcastService manageBroadcastService;
+
+ @PostMapping("/get/list/by/page")
+ @ApiOperation(value = "管理系统:分页查询所有广播信息")
+ @RequiresLogin
+ public TableDataInfo getListDataByPage(@RequestBody PageVo pageVo){
+ return manageBroadcastService.getListDataByPage(pageVo);
+ }
+
+ @PostMapping("/find/data/by/id")
+ @ApiOperation(value = "业务系统:用于获取m2pool广播数据")
+ public R> findDataById(@RequestBody ManageBaseVo manageBaseVo){
+ return manageBroadcastService.findDataById(manageBaseVo);
+ }
+
+ @PostMapping("/add")
+ @ApiOperation(value = "管理系统:新增广播")
+ @RequiresLogin
+ public R add(@RequestBody ManageBroadcastVo broadcastVo){
+ return manageBroadcastService.addBroadcast(broadcastVo);
+ }
+
+ @PostMapping("/delete")
+ @ApiOperation(value = "管理系统:删除广播")
+ @RequiresLogin
+ public R delete(@RequestBody ManageBaseVo manageBaseVo){
+ return manageBroadcastService.deleteBroadcastById(manageBaseVo.getId());
+ }
+
+ @PostMapping("/update")
+ @ApiOperation(value = "管理系统:修改广播")
+ @RequiresLogin
+ public R update(@RequestBody ManageBroadcastVo broadcastVo){
+ return manageBroadcastService.updateBroadcast(broadcastVo);
+ }
+
+
+}
diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/controller/ManageUserController.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/controller/ManageUserController.java
new file mode 100644
index 0000000..167b53e
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/controller/ManageUserController.java
@@ -0,0 +1,50 @@
+package com.m2pool.manage.controller;
+
+import com.m2pool.common.core.Result.R;
+import com.m2pool.common.core.web.page.TableDataInfo;
+import com.m2pool.common.security.annotation.RequiresLogin;
+import com.m2pool.manage.dto.ManageBroadcastDto;
+import com.m2pool.manage.dto.ManageUserDto;
+import com.m2pool.manage.service.ManageUserService;
+import com.m2pool.manage.vo.EmailVo;
+import com.m2pool.manage.vo.ManageBaseVo;
+import com.m2pool.manage.vo.ManageUserVo;
+import com.m2pool.manage.vo.PageVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.annotation.Resource;
+
+/**
+ * @Description 管理系统用户信息控制器类
+ * @Date 2025/5/22 14:33
+ * @Author yyb
+ */
+@RestController
+@RequestMapping("/user")
+@Api(tags = "用户信息控制器类")
+public class ManageUserController {
+
+ @Resource
+ private ManageUserService manageUserService;
+
+ @PostMapping("/list/info")
+ @ApiOperation(value = "管理系统:查询注册用户信息列表")
+ @RequiresLogin
+ public TableDataInfo listInfo(@RequestBody ManageUserVo manageUserVo){
+ return manageUserService.listInfo(manageUserVo);
+ }
+
+
+ @PostMapping("/send/text/mail/message")
+ @ApiOperation(value = "管理系统:发送邮件给某些用户")
+ @RequiresLogin
+ public void sendTextMailMessage(@RequestBody EmailVo emailVo){
+ manageUserService.sendTextMailMessage(emailVo.getTo(),emailVo.getSubject(),emailVo.getText());
+ }
+
+}
diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/dto/ManageBroadcastDto.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/dto/ManageBroadcastDto.java
new file mode 100644
index 0000000..5dfa1a1
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/dto/ManageBroadcastDto.java
@@ -0,0 +1,36 @@
+package com.m2pool.manage.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @Description 广播返回对象
+ * @Date 2025/5/22 17:18
+ * @Author yyb
+ */
+@Builder
+@Data
+@ApiModel(value = "ManageBroadcastDto", description = "广播返回对象")
+public class ManageBroadcastDto {
+ @ApiModelProperty(value = "id",example = "1")
+ private Long id;
+
+ @ApiModelProperty(value = "内容",example = "广播内容")
+ private String content;
+
+ @ApiModelProperty(value = "创建人",example = "广播创建者")
+ private String createUser;
+
+ @ApiModelProperty(value = "最后一次修改,修改人",example = "146555@qq.com")
+ private String updateUser;
+
+ @ApiModelProperty(value = "修改时间",example = "2025-05-22 14:22:13")
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty(value = "创建时间",example = "2025-05-22 14:22:13")
+ private LocalDateTime createTime;
+}
diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/dto/ManageUserDto.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/dto/ManageUserDto.java
new file mode 100644
index 0000000..d512dcf
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/dto/ManageUserDto.java
@@ -0,0 +1,37 @@
+package com.m2pool.manage.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @Description 注册用户信息返回对象
+ * @Date 2025/5/22 17:18
+ * @Author yyb
+ */
+@Builder
+@Data
+@ApiModel(value = "ManageUserDto", description = "注册用户信息返回对象")
+public class ManageUserDto {
+
+ @ApiModelProperty(value = "id",example = "1")
+ private Long id;
+
+ @ApiModelProperty(value = "用户邮箱",example = "146555@qq.com")
+ private String user;
+
+ @ApiModelProperty(value = "用户对应的挖矿账号(一个用户可以对应多个)",example = "ceshi1")
+ private String minerUser;
+
+ @ApiModelProperty(value = "币种",example = "nexa")
+ private String coin;
+
+ @ApiModelProperty(value = "支付地址",example = "ceshi1")
+ private String balance;
+
+ @ApiModelProperty(value = "最小起付金额",example = "100.0")
+ private String amount;
+}
diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/entity/ManageBroadcast.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/entity/ManageBroadcast.java
new file mode 100644
index 0000000..047af6b
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/entity/ManageBroadcast.java
@@ -0,0 +1,37 @@
+package com.m2pool.manage.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.m2pool.common.core.web.Result.PageResult;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * @Description 广播信息实体类
+ * @Date 2025/5/22 14:13
+ * @Author yyb
+ */
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ManageBroadcast {
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ private String content;
+
+ private String createUser;
+
+ private String updateUser;
+
+ private LocalDateTime createTime;
+
+ private LocalDateTime updateTime;
+
+ private Boolean del;
+}
diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/mapper/ManageBroadcastMapper.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/mapper/ManageBroadcastMapper.java
new file mode 100644
index 0000000..d2761cf
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/mapper/ManageBroadcastMapper.java
@@ -0,0 +1,24 @@
+package com.m2pool.manage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.m2pool.manage.dto.ManageUserDto;
+import com.m2pool.manage.entity.ManageBroadcast;
+import com.m2pool.manage.vo.ManageBaseVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface ManageBroadcastMapper extends BaseMapper {
+
+ /**
+ * 分页查询出用户信息
+ * @param coin
+ * @param user
+ * @param minerUser
+ * @return
+ */
+ List selectUserListByPage(@Param("coin") String coin,@Param("user")String user,@Param("minerUser") String minerUser);
+
+}
diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/ManageBroadcastService.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/ManageBroadcastService.java
new file mode 100644
index 0000000..d485ffc
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/ManageBroadcastService.java
@@ -0,0 +1,59 @@
+package com.m2pool.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.m2pool.common.core.Result.R;
+import com.m2pool.common.core.web.page.TableDataInfo;
+import com.m2pool.manage.dto.ManageBroadcastDto;
+import com.m2pool.manage.entity.ManageBroadcast;
+import com.m2pool.manage.vo.ManageBaseVo;
+import com.m2pool.manage.vo.ManageBroadcastVo;
+import com.m2pool.manage.vo.PageVo;
+
+import java.util.List;
+
+
+/**
+ * @Description 广播信息 服务接口
+ */
+public interface ManageBroadcastService extends IService {
+ /**
+ * 获取所有广播信息分页
+ * @return 广播列表
+ */
+ TableDataInfo getListDataByPage(PageVo pageVo);
+
+
+ /**
+ * 根据id查询一批广播数据
+ * @param manageBaseVo
+ * @return
+ */
+ R> findDataById(ManageBaseVo manageBaseVo);
+
+
+ /**
+ * 新增广播信息
+ *
+ * @param broadcastVo 广播对象
+ * @return 是否成功
+ */
+ R addBroadcast(ManageBroadcastVo broadcastVo);
+
+ /**
+ * 根据ID删除广播
+ *
+ * @param id 主键ID
+ * @return 是否成功
+ */
+ R deleteBroadcastById(Long id);
+
+ /**
+ * 修改广播信息
+ *
+ * @param broadcastVo 广播对象
+ * @return 是否成功
+ */
+ R updateBroadcast(ManageBroadcastVo broadcastVo);
+
+
+}
diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/ManageUserService.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/ManageUserService.java
new file mode 100644
index 0000000..10ac28e
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/ManageUserService.java
@@ -0,0 +1,31 @@
+package com.m2pool.manage.service;
+
+import com.m2pool.common.core.Result.R;
+import com.m2pool.common.core.web.page.TableDataInfo;
+import com.m2pool.manage.dto.ManageUserDto;
+import com.m2pool.manage.vo.ManageBaseVo;
+import com.m2pool.manage.vo.ManageUserVo;
+import com.m2pool.manage.vo.PageVo;
+
+
+
+/**
+ * @Description 广播信息 服务接口
+ */
+public interface ManageUserService{
+
+ /**
+ * 分页查询所有用户信息
+ * @param manageUserVo
+ * @return
+ */
+ TableDataInfo listInfo(ManageUserVo manageUserVo);
+
+ /**
+ * 发送存文本邮件
+ * @param to
+ * @param subject
+ * @param text
+ */
+ void sendTextMailMessage(String to,String subject,String text);
+}
diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/impl/ManageBroadcastServiceImpl.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/impl/ManageBroadcastServiceImpl.java
new file mode 100644
index 0000000..8f9ff1d
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/impl/ManageBroadcastServiceImpl.java
@@ -0,0 +1,137 @@
+package com.m2pool.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.m2pool.common.core.Result.R;
+import com.m2pool.common.core.constant.HttpStatus;
+import com.m2pool.common.core.web.page.TableDataInfo;
+import com.m2pool.common.security.utils.SecurityUtils;
+import com.m2pool.manage.dto.ManageBroadcastDto;
+import com.m2pool.manage.entity.ManageBroadcast;
+import com.m2pool.manage.mapper.ManageBroadcastMapper;
+import com.m2pool.manage.service.ManageBroadcastService;
+import com.m2pool.manage.vo.ManageBaseVo;
+import com.m2pool.manage.vo.ManageBroadcastVo;
+import com.m2pool.manage.vo.PageVo;
+import org.springframework.stereotype.Service;
+
+import java.beans.Transient;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Description 广播信息 服务实现类
+ */
+@Service
+public class ManageBroadcastServiceImpl extends ServiceImpl implements ManageBroadcastService {
+
+
+
+ /**
+ * 获取所有广播信息
+ *
+ * @return 广播列表
+ */
+ @Override
+ public TableDataInfo getListDataByPage(PageVo pageVo) {
+ PageHelper.startPage(pageVo.getPageNum(), pageVo.getPageSize());
+ List list = this.list(new LambdaQueryWrapper().eq(ManageBroadcast::getDel, false));
+ List collect = list.stream().map(broadcast -> ManageBroadcastDto.builder()
+ .content(broadcast.getContent())
+ .id(broadcast.getId())
+ .createUser(broadcast.getCreateUser())
+ .updateUser(broadcast.getUpdateUser())
+ .updateTime(broadcast.getUpdateTime())
+ .createTime(broadcast.getCreateTime())
+ .build()).collect(Collectors.toList());
+ PageHelper.clearPage();
+ return getDataTable(collect);
+ }
+
+ private TableDataInfo getDataTable(List list)
+ {
+ TableDataInfo rspData = new TableDataInfo();
+ rspData.setCode(HttpStatus.SUCCESS);
+ rspData.setRows(list);
+ rspData.setMsg("查询成功");
+ PageInfo pageInfo = new PageInfo(list);
+ rspData.setTotal(pageInfo.getTotal());
+ rspData.setTotalPage(pageInfo.getPages());
+ return rspData;
+ }
+
+
+ @Override
+ public R> findDataById(ManageBaseVo manageBaseVo) {
+ LambdaQueryWrapper eq = new LambdaQueryWrapper()
+ .eq(ManageBroadcast::getDel, false);
+ if(manageBaseVo.getId() != null){
+ eq.eq(ManageBroadcast::getId, manageBaseVo.getId());
+ }
+ eq.orderByDesc(ManageBroadcast::getId).last("limit 20");
+
+ List list = this.list(eq);
+ List collect = list.stream()
+ .map(broadcast -> ManageBroadcastDto.builder()
+ .content(broadcast.getContent())
+ .id(broadcast.getId())
+ .createUser(broadcast.getCreateUser())
+ .updateUser(broadcast.getUpdateUser())
+ .updateTime(broadcast.getUpdateTime())
+ .createTime(broadcast.getCreateTime())
+ .build()
+ ).collect(Collectors.toList());
+
+ return R.success(collect);
+ }
+
+ /**
+ * 新增广播信息
+ *
+ * @param broadcastVo 广播对象
+ * @return 是否成功
+ */
+ @Override
+ public R addBroadcast(ManageBroadcastVo broadcastVo) {
+ ManageBroadcast broadcast = ManageBroadcast.builder()
+ .content(broadcastVo.getContent())
+ .createUser(SecurityUtils.getUsername())
+ .updateTime(LocalDateTime.now())
+ .build();
+ if(this.save(broadcast)){
+ return R.success("添加成功");
+ }
+ return R.fail("添加失败");
+ }
+
+ /**
+ * 根据ID删除广播(逻辑删除)
+ *
+ * @param id 主键ID
+ * @return 是否成功
+ */
+ @Override
+ public R deleteBroadcastById(Long id) {
+ boolean b = this.updateById(ManageBroadcast.builder().id(id).del(true).build());
+ if (b){
+ return R.success("删除成功");
+ }
+ return R.fail("删除失败");
+ }
+
+ @Override
+ public R updateBroadcast(ManageBroadcastVo broadcastVo) {
+ boolean b = this.updateById(ManageBroadcast.builder()
+ .content(broadcastVo.getContent())
+ .updateUser(SecurityUtils.getUsername())
+ .build());
+ if (b){
+ return R.success("修改成功");
+ }
+ return R.fail("修改失败");
+ }
+}
diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/impl/ManageUserServiceImpl.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/impl/ManageUserServiceImpl.java
new file mode 100644
index 0000000..a0f1875
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/impl/ManageUserServiceImpl.java
@@ -0,0 +1,86 @@
+package com.m2pool.manage.service.impl;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.m2pool.common.core.Result.R;
+import com.m2pool.common.core.constant.HttpStatus;
+import com.m2pool.common.core.web.page.TableDataInfo;
+import com.m2pool.manage.dto.ManageBroadcastDto;
+import com.m2pool.manage.dto.ManageUserDto;
+import com.m2pool.manage.mapper.ManageBroadcastMapper;
+import com.m2pool.manage.service.ManageUserService;
+import com.m2pool.manage.vo.ManageBaseVo;
+import com.m2pool.manage.vo.ManageUserVo;
+import com.m2pool.manage.vo.PageVo;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.mail.javamail.JavaMailSenderImpl;
+import org.springframework.mail.javamail.MimeMessageHelper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * @Description 广播信息 服务实现类
+ */
+@Service
+public class ManageUserServiceImpl implements ManageUserService {
+
+ @Resource
+ private ManageBroadcastMapper manageBroadcastMapper;
+
+ @Resource
+ private JavaMailSenderImpl javaMailSender;
+
+ @Value("${spring.mail.username}")
+ private String sendMailer;
+ @Override
+ public TableDataInfo listInfo(ManageUserVo manageUserVo) {
+ PageHelper.startPage(manageUserVo.getPageNum(), manageUserVo.getPageSize());
+ List manageUserDtos = manageBroadcastMapper.selectUserListByPage(manageUserVo.getCoin(), manageUserVo.getUser(), manageUserVo.getMinerUser());
+ PageHelper.clearPage();
+ return getDataTable(manageUserDtos);
+ }
+
+ private TableDataInfo getDataTable(List list)
+ {
+ TableDataInfo rspData = new TableDataInfo<>();
+ rspData.setCode(HttpStatus.SUCCESS);
+ rspData.setRows(list);
+ rspData.setMsg("查询成功");
+ PageInfo pageInfo = new PageInfo<>(list);
+ rspData.setTotal(pageInfo.getTotal());
+ rspData.setTotalPage(pageInfo.getPages());
+ return rspData;
+ }
+
+
+ @Override
+ public void sendTextMailMessage(String to,String subject,String text){
+
+ try {
+ //true 代表支持复杂的类型
+ MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(javaMailSender.createMimeMessage(),true);
+ //邮件发信人
+ mimeMessageHelper.setFrom(sendMailer);
+ //邮件收信人 1或多个
+ mimeMessageHelper.setTo(to.split(","));
+ //邮件主题
+ mimeMessageHelper.setSubject(subject);
+ //邮件内容
+ mimeMessageHelper.setText(text);
+ //邮件发送时间
+ mimeMessageHelper.setSentDate(new Date());
+
+ //发送邮件
+ javaMailSender.send(mimeMessageHelper.getMimeMessage());
+ //System.out.println("发送邮件成功:"+sendMailer+"->"+to);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ //System.out.println("发送邮件失败:"+e.getMessage());
+ }
+ }
+}
diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/vo/EmailVo.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/vo/EmailVo.java
new file mode 100644
index 0000000..83652f6
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/vo/EmailVo.java
@@ -0,0 +1,29 @@
+package com.m2pool.manage.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @Description 发送的邮箱信息
+ * @Date 2025/5/22 17:18
+ * @Author yyb
+ */
+@Builder
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel(value = "发送的邮箱信息")
+public class EmailVo{
+ @ApiModelProperty(value = "接受者邮箱,多个以逗号隔开",example = "1416014977@qq.com,1328642438@qq.com")
+ private String to;
+
+ @ApiModelProperty(value = "邮件主题",example = "测试")
+ private String subject;
+
+ @ApiModelProperty(value = "邮件内容",example = "测试")
+ private String text;
+}
diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/vo/ManageBaseVo.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/vo/ManageBaseVo.java
new file mode 100644
index 0000000..7dd2dbb
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/vo/ManageBaseVo.java
@@ -0,0 +1,25 @@
+package com.m2pool.manage.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * @Description 基础请求对象
+ * @Date 2025/5/22 17:18
+ * @Author yyb
+ */
+@Builder
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel(value = "基础请求对象")
+public class ManageBaseVo {
+ @ApiModelProperty(value = "id",example = "1")
+ private Long id;
+}
diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/vo/ManageBroadcastVo.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/vo/ManageBroadcastVo.java
new file mode 100644
index 0000000..911f35f
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/vo/ManageBroadcastVo.java
@@ -0,0 +1,28 @@
+package com.m2pool.manage.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * @Description 广播请求对象
+ * @Date 2025/5/22 17:18
+ * @Author yyb
+ */
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+@ApiModel(value = "广播请求对象")
+public class ManageBroadcastVo{
+ @ApiModelProperty(value = "id",example = "1")
+ private Long id;
+
+ @ApiModelProperty(value = "内容",example = "广播内容")
+ private String content;
+}
diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/vo/ManageUserVo.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/vo/ManageUserVo.java
new file mode 100644
index 0000000..7381d6b
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/vo/ManageUserVo.java
@@ -0,0 +1,31 @@
+package com.m2pool.manage.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * @Description 用户请求对象
+ * @Date 2025/5/22 17:18
+ * @Author yyb
+ */
+@Builder
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel(value = "用户请求对象")
+public class ManageUserVo extends PageVo{
+ @ApiModelProperty(value = "查询条件:币种,进入页面默认只显示出nexa,用户可选择",example = "nexa",required = true)
+ private String coin;
+
+ @ApiModelProperty(value = "模糊查询条件:用户名(邮箱)",example = "1328642438@qq.com",required = false)
+ private String user;
+
+ @ApiModelProperty(value = "模糊查询条件:用户对应的挖矿账号(一个用户可以对应多个)",example = "ceshi",required = false)
+ private String minerUser;
+}
diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/vo/PageVo.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/vo/PageVo.java
new file mode 100644
index 0000000..8534844
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/vo/PageVo.java
@@ -0,0 +1,20 @@
+package com.m2pool.manage.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Description 分页请求对象
+ * @Date 2025/5/23 09:52
+ * @Author yyb
+ */
+@Data
+@ApiModel(value = "分页请求对象")
+public class PageVo {
+ @ApiModelProperty(value = "当前页码",example = "1")
+ private Integer pageNum;
+
+ @ApiModelProperty(value = "每页条数",example = "20")
+ private Integer pageSize;
+}
diff --git a/m2pool-modules/m2pool-manage/src/main/resources/bootstrap-prod.yml b/m2pool-modules/m2pool-manage/src/main/resources/bootstrap-prod.yml
new file mode 100644
index 0000000..8b69197
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/resources/bootstrap-prod.yml
@@ -0,0 +1,41 @@
+#测试环境
+server:
+ port: 9208
+ compression:
+ enabled: true
+ mime-types: application/json
+
+spring:
+ mvc:
+ pathmatch:
+ matching-strategy: ant-path-matcher
+ application:
+ # 应用名称
+ name: m2pool-manage
+ # profiles:
+ # # 环境配置
+ # active: test
+ cloud:
+ nacos:
+ discovery:
+ # 服务注册地址
+ server-addr: 127.0.0.1:8808
+ namespace: m2_test
+ 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
+
diff --git a/m2pool-modules/m2pool-manage/src/main/resources/bootstrap-test.yml b/m2pool-modules/m2pool-manage/src/main/resources/bootstrap-test.yml
new file mode 100644
index 0000000..b5f4d9b
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/resources/bootstrap-test.yml
@@ -0,0 +1,77 @@
+#测试环境
+server:
+ port: 9508
+ 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: do.not.reply@m2pool.com
+ #配置密码,注意不是真正的密码,而是刚刚申请到的授权码
+ # password:
+ # password: M2202401!
+ # password: axvm-zfgx-cgcg-qhhu
+ password: M2202401!
+
+ #端口号
+ port: 587
+ # port: 465
+ #默认的邮件编码为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
+ mvc:
+ pathmatch:
+ matching-strategy: ant-path-matcher
+ application:
+ # 应用名称
+ name: m2pool-manage
+ # 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
+
diff --git a/m2pool-modules/m2pool-manage/src/main/resources/bootstrap.yml b/m2pool-modules/m2pool-manage/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..03c30d3
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/resources/bootstrap.yml
@@ -0,0 +1,3 @@
+spring:
+ profiles:
+ active: test
diff --git a/m2pool-modules/m2pool-manage/src/main/resources/logback.xml b/m2pool-modules/m2pool-manage/src/main/resources/logback.xml
new file mode 100644
index 0000000..b348b16
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/resources/logback.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+ ${log.pattern}
+
+
+
+
+
+ ${log.path}/info.log
+
+
+
+ ${log.path}/info.%d{yyyy-MM-dd}.log
+
+ 30
+
+
+ ${log.pattern}
+
+
+
+ INFO
+
+ ACCEPT
+
+ DENY
+
+
+
+
+ ${log.path}/error.log
+
+
+
+ ${log.path}/error.%d{yyyy-MM-dd}.log
+
+ 30
+
+
+ ${log.pattern}
+
+
+
+ ERROR
+
+ ACCEPT
+
+ DENY
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
new file mode 100644
index 0000000..16ea244
--- /dev/null
+++ b/m2pool-modules/m2pool-manage/src/main/resources/mapper/manage/ManageBroadcastMapper.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
diff --git a/v1.1.0.sql b/v1.1.0.sql
new file mode 100644
index 0000000..06739ca
--- /dev/null
+++ b/v1.1.0.sql
@@ -0,0 +1,10 @@
+
+-- 广播信息表
+CREATE TABLE `manage_broadcast` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
+ `content` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '消息内容',
+ `create_user` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '创建人',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 COLLATE=utf8mb4_bin COMMENT='广播表';