update v1.1.0 版本接口提交

This commit is contained in:
yyb 2025-05-27 17:51:18 +08:00
parent f65f08d1a6
commit d098702af7
24 changed files with 1209 additions and 0 deletions

View File

@ -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;
}

View File

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

View File

@ -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矿池 管理系统启动成功");
}
}

View File

@ -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<ManageBroadcastDto> getListDataByPage(@RequestBody PageVo pageVo){
return manageBroadcastService.getListDataByPage(pageVo);
}
@PostMapping("/find/data/by/id")
@ApiOperation(value = "业务系统:用于获取m2pool广播数据")
public R<List<ManageBroadcastDto>> findDataById(@RequestBody ManageBaseVo manageBaseVo){
return manageBroadcastService.findDataById(manageBaseVo);
}
@PostMapping("/add")
@ApiOperation(value = "管理系统:新增广播")
@RequiresLogin
public R<String> add(@RequestBody ManageBroadcastVo broadcastVo){
return manageBroadcastService.addBroadcast(broadcastVo);
}
@PostMapping("/delete")
@ApiOperation(value = "管理系统:删除广播")
@RequiresLogin
public R<String> delete(@RequestBody ManageBaseVo manageBaseVo){
return manageBroadcastService.deleteBroadcastById(manageBaseVo.getId());
}
@PostMapping("/update")
@ApiOperation(value = "管理系统:修改广播")
@RequiresLogin
public R<String> update(@RequestBody ManageBroadcastVo broadcastVo){
return manageBroadcastService.updateBroadcast(broadcastVo);
}
}

View File

@ -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<ManageUserDto> 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());
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<ManageBroadcast> {
/**
* 分页查询出用户信息
* @param coin
* @param user
* @param minerUser
* @return
*/
List<ManageUserDto> selectUserListByPage(@Param("coin") String coin,@Param("user")String user,@Param("minerUser") String minerUser);
}

View File

@ -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<ManageBroadcast> {
/**
* 获取所有广播信息分页
* @return 广播列表
*/
TableDataInfo<ManageBroadcastDto> getListDataByPage(PageVo pageVo);
/**
* 根据id查询一批广播数据
* @param manageBaseVo
* @return
*/
R<List<ManageBroadcastDto>> findDataById(ManageBaseVo manageBaseVo);
/**
* 新增广播信息
*
* @param broadcastVo 广播对象
* @return 是否成功
*/
R<String> addBroadcast(ManageBroadcastVo broadcastVo);
/**
* 根据ID删除广播
*
* @param id 主键ID
* @return 是否成功
*/
R<String> deleteBroadcastById(Long id);
/**
* 修改广播信息
*
* @param broadcastVo 广播对象
* @return 是否成功
*/
R<String> updateBroadcast(ManageBroadcastVo broadcastVo);
}

View File

@ -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<ManageUserDto> listInfo(ManageUserVo manageUserVo);
/**
* 发送存文本邮件
* @param to
* @param subject
* @param text
*/
void sendTextMailMessage(String to,String subject,String text);
}

View File

@ -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<ManageBroadcastMapper, ManageBroadcast> implements ManageBroadcastService {
/**
* 获取所有广播信息
*
* @return 广播列表
*/
@Override
public TableDataInfo<ManageBroadcastDto> getListDataByPage(PageVo pageVo) {
PageHelper.startPage(pageVo.getPageNum(), pageVo.getPageSize());
List<ManageBroadcast> list = this.list(new LambdaQueryWrapper<ManageBroadcast>().eq(ManageBroadcast::getDel, false));
List<ManageBroadcastDto> 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<ManageBroadcastDto> getDataTable(List<ManageBroadcastDto> list)
{
TableDataInfo<ManageBroadcastDto> rspData = new TableDataInfo<ManageBroadcastDto>();
rspData.setCode(HttpStatus.SUCCESS);
rspData.setRows(list);
rspData.setMsg("查询成功");
PageInfo<ManageBroadcastDto> pageInfo = new PageInfo<ManageBroadcastDto>(list);
rspData.setTotal(pageInfo.getTotal());
rspData.setTotalPage(pageInfo.getPages());
return rspData;
}
@Override
public R<List<ManageBroadcastDto>> findDataById(ManageBaseVo manageBaseVo) {
LambdaQueryWrapper<ManageBroadcast> eq = new LambdaQueryWrapper<ManageBroadcast>()
.eq(ManageBroadcast::getDel, false);
if(manageBaseVo.getId() != null){
eq.eq(ManageBroadcast::getId, manageBaseVo.getId());
}
eq.orderByDesc(ManageBroadcast::getId).last("limit 20");
List<ManageBroadcast> list = this.list(eq);
List<ManageBroadcastDto> 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<String> 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<String> 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<String> updateBroadcast(ManageBroadcastVo broadcastVo) {
boolean b = this.updateById(ManageBroadcast.builder()
.content(broadcastVo.getContent())
.updateUser(SecurityUtils.getUsername())
.build());
if (b){
return R.success("修改成功");
}
return R.fail("修改失败");
}
}

View File

@ -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<ManageUserDto> listInfo(ManageUserVo manageUserVo) {
PageHelper.startPage(manageUserVo.getPageNum(), manageUserVo.getPageSize());
List<ManageUserDto> manageUserDtos = manageBroadcastMapper.selectUserListByPage(manageUserVo.getCoin(), manageUserVo.getUser(), manageUserVo.getMinerUser());
PageHelper.clearPage();
return getDataTable(manageUserDtos);
}
private TableDataInfo<ManageUserDto> getDataTable(List<ManageUserDto> list)
{
TableDataInfo<ManageUserDto> rspData = new TableDataInfo<>();
rspData.setCode(HttpStatus.SUCCESS);
rspData.setRows(list);
rspData.setMsg("查询成功");
PageInfo<ManageUserDto> 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());
}
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,3 @@
spring:
profiles:
active: test

View 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-manage" />
<!-- 日志输出格式 -->
<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>

View File

@ -0,0 +1,29 @@
<?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.manage.mapper.ManageBroadcastMapper">
<select id="selectUserListByPage" resultType="com.m2pool.manage.dto.ManageUserDto">
SELECT
uma.id,
uma.user as `user`,
uma.miner_user as minerUser,
uma.coin,
uab.balance,
COALESCE(uab.amount,0)
FROM
user_account_balance uab
LEFT JOIN user_miner_account uma ON uab.ma_id = uma.id
<where>
uma.coin = #{coin}
<if test="user != null and user != ''">
AND uma.user like CONCAT('%',#{user},'%')
</if>
<if test="minerUser != null and minerUser != ''">
AND uma.miner_user like CONCAT('%',#{minerUser},'%')
</if>
</where>
</select>
</mapper>

10
v1.1.0.sql Normal file
View File

@ -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='广播表';