m2pool项目提交

Signed-off-by: jxy_duyi <2826961034@qq.com>
This commit is contained in:
jxy_duyi
2025-04-10 18:44:21 +08:00
parent faaeb24007
commit c4f34073c4
508 changed files with 50991 additions and 0 deletions

View File

@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration />
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="common-core" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-openfeign:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-openfeign-core:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.6.7" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.6.7" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.7" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form-spring:3.8.0" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form:3.8.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-commons:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-crypto:5.6.3" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-core:11.8" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-slf4j:11.8" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.36" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-loadbalancer:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-loadbalancer:3.1.1" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.4.17" level="project" />
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor.addons:reactor-extra:3.4.8" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.6.7" level="project" />
<orderEntry type="library" name="Maven: com.stoyanr:evictor:1.0.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.3.19" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.19" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.19" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.19" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.19" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.19" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.19" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.19" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:transmittable-thread-local:2.12.2" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.6.7" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.6.7" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.6.7" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.11" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.11" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.2" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.36" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.29" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.6.7" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.19" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.19" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.2.0" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.7" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.6" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.1" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.6.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.62" level="project" />
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.2.3.Final" level="project" />
<orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.3.Final" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.13.2.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.13.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.13.2" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.80" level="project" />
<orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt:0.9.1" level="project" />
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
<orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.12.0" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.11.0" level="project" />
<orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:4.1.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi:4.1.2" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.15" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-math3:3.6.1" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:SparseBitSet:1.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:4.1.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:3.1.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-compress:1.19" level="project" />
<orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.06" level="project" />
<orderEntry type="library" name="Maven: javax.servlet:javax.servlet-api:4.0.1" level="project" />
<orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-mail:2.6.7" level="project" />
<orderEntry type="library" name="Maven: com.sun.mail:jakarta.mail:1.6.7" level="project" />
<orderEntry type="library" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok-maven-plugin:1.18.6.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.24" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.sonatype.plexus:plexus-build-api:0.0.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.codehaus.plexus:plexus-utils:1.5.8" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-bootstrap:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-context:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.68" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.68" level="project" />
</component>
</module>

View File

@@ -0,0 +1,36 @@
<?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">
<parent>
<artifactId>m2pool-api</artifactId>
<groupId>com.m2pool</groupId>
<version>3.5.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>api-system</artifactId>
<description>
api-system系统接口模块
</description>
<dependencies>
<!-- m2pool Common Core-->
<dependency>
<groupId>com.m2pool</groupId>
<artifactId>common-core</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,39 @@
package com.m2pool.system.api;
import com.m2pool.common.core.Result.R;
import com.m2pool.common.core.constant.ServiceNameConstants;
import com.m2pool.system.api.entity.SysFile;
import com.m2pool.system.api.factory.RemoteFileFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;
/**
* 文件服务
*
* @author m2pool
*/
@FeignClient(contextId = "remoteFileService", value = ServiceNameConstants.FILE_SERVICE, fallbackFactory = RemoteFileFallbackFactory.class)
public interface RemoteFileService
{
/**
* 上传文件
*
* @param file 文件信息
* @return 结果
*/
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<SysFile> upload(@RequestPart(value = "file") MultipartFile file);
/**
* windMiner上传文件
*
* @param file 文件信息
* @return 结果
*/
@PostMapping(value = "/windMinerUploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<SysFile> windMinerUploadFile(@RequestPart(value = "file") MultipartFile file);
}

View File

@@ -0,0 +1,43 @@
package com.m2pool.system.api;
import com.m2pool.common.core.Result.R;
import com.m2pool.common.core.constant.SecurityConstants;
import com.m2pool.common.core.constant.ServiceNameConstants;
import com.m2pool.system.api.entity.SysLogininfor;
import com.m2pool.system.api.entity.SysOperLog;
import com.m2pool.system.api.factory.RemoteLogFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
/**
* @Description 日志服务
* @Date 2024/6/11 11:46
* @Author dy
*/
@FeignClient(contextId = "remoteLogService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteLogFallbackFactory.class)
public interface RemoteLogService {
/**
* 保存系统日志
*
* @param sysOperLog 日志实体
* @param source 请求来源
* @return 结果
*/
@PostMapping("/operlog")
public R<Boolean> saveLog(@RequestBody SysOperLog sysOperLog, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 保存访问记录
*
* @param sysLogininfor 访问实体
* @param source 请求来源
* @return 结果
*/
@PostMapping("/logininfor")
public R<Boolean> saveLogininfor(@RequestBody SysLogininfor sysLogininfor, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

View File

@@ -0,0 +1,36 @@
package com.m2pool.system.api;
import com.m2pool.common.core.Result.R;
import com.m2pool.common.core.constant.ServiceNameConstants;
import com.m2pool.system.api.entity.EmailEntity;
import com.m2pool.system.api.entity.GetEmailCodeEntity;
import com.m2pool.system.api.factory.RemoteMailFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* 邮件服务
*
* @author m2pool
*/
@FeignClient(contextId = "remoteMailService", value = ServiceNameConstants.AUTH_SERVICE, fallbackFactory = RemoteMailFallbackFactory.class)
public interface RemoteMailService
{
/**
* 发送提现的邮箱验证码
*
* @return 结果
*/
@PostMapping("/addCreditEmailCode")
public R<?> sendAddCreditEmailCode(@RequestBody GetEmailCodeEntity entity);
/**
* 发送文本邮件
*
* @return 结果
*/
@PostMapping("/sendTextMail")
public R<?> sendTextMail(@RequestBody EmailEntity entity);
}

View File

@@ -0,0 +1,95 @@
package com.m2pool.system.api;
import com.m2pool.common.core.Result.R;
import com.m2pool.common.core.constant.SecurityConstants;
import com.m2pool.common.core.constant.ServiceNameConstants;
import com.m2pool.system.api.entity.SysUser;
import com.m2pool.system.api.entity.SysUserLeveDate;
import com.m2pool.system.api.factory.RemoteUserFallbackFactory;
import com.m2pool.system.api.model.LoginUser;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Description 用户服务
* @Date 2024/6/12 15:46
* @Author dy
*/
@FeignClient(contextId = "remoteUserService",value = ServiceNameConstants.SYSTEM_SERVICE,fallbackFactory = RemoteUserFallbackFactory.class)
public interface RemoteUserService {
/**
* 通过用户名/邮箱查询用户信息
*
* @param account 用户名/邮箱
* @param source 请求来源
* @return 结果
*/
@GetMapping("/user/info/{account}")
public R<LoginUser> getUserInfo(@PathVariable("account") String account, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 修改用户最后一次登录的ip和登录次数
*
* @param sysUser 用户信息
* @return 结果
*/
@PostMapping("/user/update")
public R<Boolean> updateUserInfo(@RequestBody SysUser sysUser);
/**
* 注册用户信息
*
*
* @param sysUser 用户信息
* @return 结果
*/
@PostMapping("/user/register")
public R<Boolean> registerUserInfo(@RequestBody SysUser sysUser);
/**
* 重置用户密码
*
* @param sysUser 用户信息
* @return 结果
*/
@PostMapping("/user/profile/resetPwd")
public R<Boolean> resetPwdByEmail(@RequestBody SysUser sysUser);
/**
* 查看会员有效期情况
* @return 结果
*/
@PostMapping("/user/profile/userLevel")
public R<SysUserLeveDate> userLevel(@RequestBody Long userId);
/**
* 升级用户并记录用户会员有效期
*
* @param user 用户信息
* @return 结果
*/
@PostMapping("/user/profile/Levelup")
public R<Boolean> userLevelup(@RequestBody SysUserLeveDate user, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 用户谷歌验证器验证
*
* @param code 用户信息
* @return 结果
*/
@PostMapping("/user/profile/checkGoogleCode")
public R<Boolean> checkGoogleCode(@RequestBody Long code, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 获取客服列表
*
* @return 结果
*/
@PostMapping("/user/getCSList")
public List<SysUser> getCSList();
}

View File

@@ -0,0 +1,28 @@
package com.m2pool.system.api.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @Description 用户登录对象
* @Date 2024/6/11 14:13
* @Author dy
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class EmailCodeEntity implements Serializable {
/** 用户名或邮箱 */
private String userName;
/** 邮箱 */
private String email;
private String emailCode;
private int times;
}

View File

@@ -0,0 +1,25 @@
package com.m2pool.system.api.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @Description 用户登录对象
* @Date 2024/6/12 16:13
* @Author dy
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class EmailEntity implements Serializable {
/** 邮箱 */
private String email;
private String subject;
private String text;
}

View File

@@ -0,0 +1,33 @@
package com.m2pool.system.api.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
/**
* @Description 用户登录对象
* @Date 2024/6/12 16:13
* @Author dy
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GetEmailCodeEntity {
/** 用户名或邮箱 */
private String userName;
/** 邮箱 */
@NotNull(message = "用户邮箱不能为空")
@Email(message = "邮箱格式错误")
private String email;
//@NotNull(message = "用户密码不能为空")
//@Size(min=6, max=15,message="密码长度必须在 5 ~ 15 字符之间!")
////@Pattern(regexp="^[a-zA-Z0-9|_]+$",message="密码必须由字母、数字、下划线组成!")
//private String password;
}

View File

@@ -0,0 +1,85 @@
package com.m2pool.system.api.entity;
import com.m2pool.common.core.web.entity.BaseEntity;
import lombok.Data;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.ArrayList;
import java.util.List;
/**
* @Description 部门表实体
* @Date 2024/6/12 11:19
* @Author dy
*/
@Data
public class SysDept extends BaseEntity {
private static final long serialVersionUID = 1L;
/** 部门ID */
private Long deptId;
/** 父部门ID */
private Long parentId;
/** 祖级列表 */
private String ancestors;
/** 部门名称 */
private String deptName;
/** 显示顺序 */
private Integer orderNum;
/** 负责人 */
private String leader;
/** 联系电话 */
private String phone;
/** 邮箱 */
private String email;
/** 部门状态:0正常,1停用 */
private String status;
/** 删除标志0代表存在 2代表删除 */
private String delFlag;
/** 父部门名称 */
private String parentName;
/** 子部门 */
private List<SysDept> children = new ArrayList<SysDept>();
@NotBlank(message = "部门名称不能为空")
@Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
public String getDeptName()
{
return deptName;
}
@NotNull(message = "显示顺序不能为空")
public Integer getOrderNum()
{
return orderNum;
}
@Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符")
public String getPhone()
{
return phone;
}
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
public String getEmail()
{
return email;
}
}

View File

@@ -0,0 +1,67 @@
package com.m2pool.system.api.entity;
import com.m2pool.common.core.web.entity.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 文件信息
*
* @author dy
*/
public class SysFile extends BaseEntity
{
/**
* 文件表主键
*/
private Long id;
/**
* 文件名称
*/
private String name;
/**
* 文件地址
*/
private String url;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getUrl()
{
return url;
}
public void setUrl(String url)
{
this.url = url;
}
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("name", getName())
.append("id", getId())
.append("url", getUrl())
.toString();
}
}

View File

@@ -0,0 +1,37 @@
package com.m2pool.system.api.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.m2pool.common.core.web.entity.BaseEntity;
import lombok.Data;
import java.util.Date;
/**
* @Description 系统访问记录表实体类
* @Date 2024/6/11 10:40
* @Author dy
*/
@Data
public class SysLogininfor extends BaseEntity {
private static final long serialVersionUID = 3217638467115846123L;
/** ID */
private Long infoId;
/** 用户账号 */
private String userName;
/** 状态 0成功 1失败 */
private String status;
/** 地址 */
private String ipaddr;
/** 描述 */
private String msg;
/** 访问时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date accessTime;
}

View File

@@ -0,0 +1,68 @@
package com.m2pool.system.api.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.m2pool.common.core.web.entity.BaseEntity;
import lombok.Data;
import java.util.Date;
/**
* @Description 操作日志记录表实体类
* @Date 2024/6/11 10:43
* @Author dy
*/
@Data
public class SysOperLog extends BaseEntity {
private static final long serialVersionUID = 7117642119125846123L;
/** 日志主键 */
private Long operId;
/** 操作模块 */
private String title;
/** 业务类型0其它 1新增 2修改 3删除 */
private Integer businessType;
/** 业务类型数组 */
private Integer[] businessTypes;
/** 请求方法 */
private String method;
/** 请求方式 */
private String requestMethod;
/** 操作类别0其它 1后台用户 2手机端用户 */
private Integer operatorType;
/** 操作人员 */
private String operName;
/** 部门名称 */
private String deptName;
/** 请求url */
private String operUrl;
/** 操作地址 */
private String operIp;
/** 请求参数 */
private String operParam;
/** 返回参数 */
private String jsonResult;
/** 操作状态0正常 1异常 */
private Integer status;
/** 错误消息 */
private String errorMsg;
/** 操作时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date operTime;
}

View File

@@ -0,0 +1,87 @@
package com.m2pool.system.api.entity;
import com.m2pool.common.core.web.entity.BaseEntity;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.Date;
/**
* @Description 角色表实体
* @Date 2024/6/12 11:18
* @Author dy
*/
@Data
public class SysRole extends BaseEntity {
private static final long serialVersionUID = 1L;
/** 角色ID */
private Long roleId;
/** 角色名称 */
private String roleName;
/** 角色权限 */
private String roleKey;
/** 角色排序 */
private String roleSort;
/** 数据范围1所有数据权限2自定义数据权限3本部门数据权限4本部门及以下数据权限5仅本人数据权限 */
private String dataScope;
/** 菜单树选择项是否关联显示( 0父子不互相关联显示 1父子互相关联显示 */
private boolean menuCheckStrictly;
/** 部门树选择项是否关联显示0父子不互相关联显示 1父子互相关联显示 */
private boolean deptCheckStrictly;
/** 角色状态0正常 1停用 */
private String status;
/** 删除标志0代表存在 2代表删除 */
private String delFlag;
/** 用户是否存在此角色标识 默认不存在 */
private boolean flag = false;
/** 菜单组 */
private Long[] menuIds;
/** 部门组(数据权限) */
//private Long[] deptIds;
public boolean isAdmin()
{
return isAdmin(this.roleId);
}
public static boolean isAdmin(Long roleId)
{
return roleId != null && 1L == roleId;
}
@NotBlank(message = "角色名称不能为空")
@Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符")
public String getRoleName()
{
return roleName;
}
@NotBlank(message = "权限字符不能为空")
@Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符")
public String getRoleKey()
{
return roleKey;
}
@NotBlank(message = "显示顺序不能为空")
public String getRoleSort()
{
return roleSort;
}
}

View File

@@ -0,0 +1,117 @@
package com.m2pool.system.api.entity;
import com.m2pool.common.core.web.entity.BaseEntity;
import lombok.Data;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
/**
* @Description 用户实体类
* @Date 2024/6/12 10:59
* @Author dy
*/
@Data
public class SysUser extends BaseEntity {
private static final long serialVersionUID = 2417642483325474318L;
/** 用户ID */
private Long userId;
/** 部门ID */
private Long deptId;
/** 用户账号 */
private String userName;
/** 用户昵称 */
private String nickName;
/** 用户邮箱 */
private String email;
/** 手机号码 */
private String phone;
/** 用户性别 */
private String sex;
/** 用户头像 */
private String avatar;
/** 密码 */
private String password;
/** 帐号状态0正常 1停用 */
private String status;
/** 删除标志0代表存在 2代表删除 */
private String delFlag;
/** 最后登录IP */
private String loginIp;
/** 登录次数 */
private Long loginCount;
/** 最后登录时间 */
private Date loginDate;
/** 部门对象 */
private SysDept dept;
/** 角色对象 */
private List<SysRole> roles;
/** 角色组 用户角色更新操作使用*/
private Long[] roleIds;
/** 岗位组 */
private Long[] postIds;
/** 角色ID */
private Long roleId;
public boolean isAdmin()
{
return isAdmin(this.userId);
}
public static boolean isAdmin(Long userId)
{
return userId != null && 1L == userId;
}
// TODO: xss
@Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
public String getNickName()
{
return nickName;
}
// TODO: xss
@NotBlank(message = "用户账号不能为空")
@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
public String getUserName()
{
return userName;
}
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
public String getEmail()
{
return email;
}
@Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
public String getPhone()
{
return phone;
}
}

View File

@@ -0,0 +1,41 @@
package com.m2pool.system.api.entity;
import lombok.Data;
import java.util.Date;
/**
* @Description TODO
* @Date 2024/6/11 15:41
* @Author dy
*/
@Data
public class SysUserLeveDate {
private static final long serialVersionUID = 1L;
/** 用户ID */
private Long userId;
/** 用户账号 */
private String userName;
private String email;
/** 会员开始时间 */
private Date startTime;
/** 会员过期时间 */
private Date expireTime;
private int levelType;
//选择操作 默认0新增 1续费
private int oper = 0;
/** 角色对象 */
private Long roleId;
}

View File

@@ -0,0 +1,40 @@
package com.m2pool.system.api.factory;
import com.m2pool.common.core.Result.R;
import com.m2pool.system.api.RemoteFileService;
import com.m2pool.system.api.entity.SysFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
/**
* 文件服务降级处理
*
* @author dy
*/
@Component
public class RemoteFileFallbackFactory implements FallbackFactory<RemoteFileService>
{
private static final Logger log = LoggerFactory.getLogger(RemoteFileFallbackFactory.class);
@Override
public RemoteFileService create(Throwable throwable)
{
log.error("文件服务调用失败:{}", throwable.getMessage());
return new RemoteFileService()
{
@Override
public R<SysFile> upload(MultipartFile file)
{
return R.fail("远程调用上传文件失败:" + throwable.getMessage());
}
@Override
public R<SysFile> windMinerUploadFile(MultipartFile file) {
return R.fail("windMiner远程调用上传文件失败:" + throwable.getMessage());
}
};
}
}

View File

@@ -0,0 +1,40 @@
package com.m2pool.system.api.factory;
import com.m2pool.common.core.Result.R;
import com.m2pool.system.api.RemoteLogService;
import com.m2pool.system.api.entity.SysLogininfor;
import com.m2pool.system.api.entity.SysOperLog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* @Description 日志服务降级处理
* @Date 2024/6/11 11:58
* @Author dy
*/
@Component
public class RemoteLogFallbackFactory implements FallbackFactory<RemoteLogService> {
private static final Logger log = LoggerFactory.getLogger(RemoteLogFallbackFactory.class);
@Override
public RemoteLogService create(Throwable cause) {
log.error("日志服务调用失败:{}", cause.getMessage());
return new RemoteLogService()
{
@Override
public R<Boolean> saveLog(SysOperLog sysOperLog, String source)
{
return null;
}
@Override
public R<Boolean> saveLogininfor(SysLogininfor sysLogininfor, String source)
{
return null;
}
};
}
}

View File

@@ -0,0 +1,40 @@
package com.m2pool.system.api.factory;
import com.m2pool.common.core.Result.R;
import com.m2pool.system.api.RemoteMailService;
import com.m2pool.system.api.entity.EmailEntity;
import com.m2pool.system.api.entity.GetEmailCodeEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
/**
* 文件服务降级处理
*
* @author dy
*/
@Component
public class RemoteMailFallbackFactory implements FallbackFactory<RemoteMailService>
{
private static final Logger log = LoggerFactory.getLogger(RemoteMailFallbackFactory.class);
@Override
public RemoteMailService create(Throwable cause)
{
return new RemoteMailService() {
@Override
public R<?>
sendAddCreditEmailCode(GetEmailCodeEntity entity) {
return R.fail("提现邮箱验证发送失败:" + cause.getMessage());
}
@Override
public R<?> sendTextMail(@RequestBody EmailEntity entity){
return R.fail("邮箱发送失败:" + cause.getMessage());
}
};
}
}

View File

@@ -0,0 +1,68 @@
package com.m2pool.system.api.factory;
import com.m2pool.common.core.Result.R;
import com.m2pool.system.api.RemoteUserService;
import com.m2pool.system.api.entity.SysUser;
import com.m2pool.system.api.entity.SysUserLeveDate;
import com.m2pool.system.api.model.LoginUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* @Description 用户服务降级处理
* @Date 2024/6/11 15:48
* @Author dy
*/
@Component
public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserService> {
private static final Logger log = LoggerFactory.getLogger(RemoteUserFallbackFactory.class);
@Override
public RemoteUserService create(Throwable cause) {
log.error("用户服务调用失败:{}",cause.getMessage());
return new RemoteUserService(){
@Override
public R<LoginUser> getUserInfo(String username, String source) {
return R.fail("获取用户失败:" + cause.getMessage());
}
@Override
public R<Boolean> updateUserInfo(SysUser sysUser) {
return R.fail("修改用户失败:" + cause.getMessage());
}
@Override
public R<Boolean> registerUserInfo(SysUser sysUser) {
return R.fail("注册用户失败:" + cause.getMessage());
}
@Override
public R<Boolean> resetPwdByEmail(SysUser sysUser) {
return R.fail("重置用户密码失败:" + cause.getMessage());
}
@Override
public R<SysUserLeveDate> userLevel(Long userId) {
return R.fail("获取用户会员信息失败:" + cause.getMessage());
}
@Override
public R<Boolean> userLevelup(SysUserLeveDate user, String source) {
return R.fail("用户升级失败:" + cause.getMessage());
}
@Override
public R<Boolean> checkGoogleCode(Long code, String source) {
return R.fail("谷歌验证器校验失败:" + cause.getMessage());
}
};
}
}

View File

@@ -0,0 +1,46 @@
package com.m2pool.system.api.model;
import com.m2pool.system.api.entity.SysUser;
import lombok.Data;
import java.io.Serializable;
import java.util.Set;
/**
* @Description 登陆的用户信息
* @Date 2024/6/12 15:13
* @Author dy
*/
@Data
public class LoginUser implements Serializable {
private static final long serialVersionUID = 1L;
/** 用户唯一标识 */
private String token;
/** 用户名id */
private Long userid;
/** 用户名 */
private String username;
/** 登录时间 */
private Long loginTime;
/** 过期时间 */
private Long expireTime;
/** 登录IP地址 */
private String ipaddr;
/** 权限列表 */
private Set<String> permissions;
/** 角色列表 */
private Set<String> roles;
/** 用户信息 */
private SysUser sysUser;
}

View File

@@ -0,0 +1,40 @@
package com.m2pool.system.api.model;
import com.m2pool.system.api.entity.SysUser;
import lombok.Data;
import java.io.Serializable;
import java.util.Set;
/**
* @Description 登陆的用户信息
* @Date 2024/6/12 15:13
* @Author dy
*/
@Data
public class OpenApiKeyInfo implements Serializable {
private static final long serialVersionUID = 1L;
/** 用户唯一标识 */
private String key;
/** 用户邮箱 */
private String user;
/** 登录时间 */
private Long loginTime;
/** 过期时间 */
private Long expireTime;
/** apiKey绑定的ip */
private String apiIp;
/** 登录IP地址 */
private String ipaddr;
private Set<String> permissions;
}

View File

@@ -0,0 +1,5 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.m2pool.system.api.factory.RemoteUserFallbackFactory,\
com.m2pool.system.api.factory.RemoteFileFallbackFactory,\
com.m2pool.system.api.factory.RemoteMailFallbackFactory,\
com.m2pool.system.api.factory.RemoteLogFallbackFactory

38
m2pool-api/m2pool-api.iml Normal file
View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-bootstrap:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.6.7" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.6.7" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.19" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.19" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.19" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.19" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.6.7" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.6.7" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.11" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.11" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.36" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.2" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.36" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.19" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.19" level="project" />
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.29" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-context:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-crypto:5.6.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-commons:3.1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.68" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.68" level="project" />
</component>
</module>

23
m2pool-api/pom.xml Normal file
View File

@@ -0,0 +1,23 @@
<?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">
<parent>
<artifactId>m2pool</artifactId>
<groupId>com.m2pool</groupId>
<version>3.5.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>m2pool-api</artifactId>
<packaging>pom</packaging>
<modules>
<module>api-system</module>
</modules>
<description>
m2pool-api系统接口
</description>
</project>