chore(assets): 参赛提交规范红线修复(ASCII 化 + 相对路径)
按《参赛成果物提交规范·赛道一》§6 红线: - samples/ 目录改名 sample/(git mv,保留历史) - 10 个中日文样本文件 + docs 参赛手册 PDF 重命名为 ASCII (requirements_*/template_*/rules_*/contestant-handbook.pdf) - tests/test_zh_template.py 硬编码绝对路径 D:\00_project\Genesis 改为相对路径 - 全局更新 21 个活动文件引用;历史日志/审查文档不改(追加说明记录) 全量 pytest 431 passed / 99.15%
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.stock</groupId>
|
||||
<artifactId>stock-trade-system</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
<groupId>com.stock</groupId>
|
||||
<artifactId>trade-user</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<name>trade-user</name>
|
||||
<description>trade-user</description>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-dependencies</artifactId>
|
||||
<version>2021.0.8</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
<version>3.5.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.stock</groupId>
|
||||
<artifactId>trade-common</artifactId>
|
||||
<version>1.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.swagger</groupId>
|
||||
<artifactId>swagger-annotations</artifactId>
|
||||
<version>1.6.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.validation</groupId>
|
||||
<artifactId>validation-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springdoc</groupId>
|
||||
<artifactId>springdoc-openapi-ui</artifactId>
|
||||
<version>1.6.14</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
package com.stock.trading.user.controller;
|
||||
|
||||
import com.stock.trading.common.api.CommonResult;
|
||||
import com.stock.trading.user.dto.UmsAdminLoginParam;
|
||||
import com.stock.trading.user.dto.UmsAdminParam;
|
||||
import com.stock.trading.user.model.UmsAdmin;
|
||||
import com.stock.trading.user.service.UmsAdminService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 后台用户管理Controller
|
||||
*/
|
||||
@RestController
|
||||
@Api(tags = "UmsAdminController", description = "后台用户管理")
|
||||
@RequestMapping("/admin")
|
||||
public class UmsAdminController {
|
||||
@Value("${jwt.tokenHeader}")
|
||||
private String tokenHeader;
|
||||
@Value("${jwt.tokenHead}")
|
||||
private String tokenHead;
|
||||
@Autowired
|
||||
private UmsAdminService adminService;
|
||||
|
||||
@ApiOperation(value = "用户注册")
|
||||
@PostMapping("/register")
|
||||
public CommonResult<UmsAdmin> register(@Validated @RequestBody UmsAdminParam umsAdminParam) {
|
||||
UmsAdmin umsAdmin = adminService.register(umsAdminParam);
|
||||
if (umsAdmin == null) {
|
||||
return CommonResult.failed();
|
||||
}
|
||||
return CommonResult.success(umsAdmin);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "登录以后返回token")
|
||||
@PostMapping("/login")
|
||||
public CommonResult<Map<String, String>> login(@Validated @RequestBody UmsAdminLoginParam umsAdminLoginParam) {
|
||||
String token = adminService.login(umsAdminLoginParam.getUsername(), umsAdminLoginParam.getPassword());
|
||||
if (token == null) {
|
||||
return CommonResult.validateFailed("用户名或密码错误");
|
||||
}
|
||||
Map<String, String> tokenMap = new HashMap<>();
|
||||
tokenMap.put("token", token);
|
||||
tokenMap.put("tokenHead", tokenHead);
|
||||
return CommonResult.success(tokenMap);
|
||||
}
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.stock.trading.user.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
|
||||
/**
|
||||
* 用户登录参数
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class UmsAdminLoginParam {
|
||||
@ApiModelProperty(value = "用户名", required = true)
|
||||
@NotEmpty(message = "用户名不能为空")
|
||||
private String username;
|
||||
@ApiModelProperty(value = "密码", required = true)
|
||||
@NotEmpty(message = "密码不能为空")
|
||||
private String password;
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.stock.trading.user.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.Email;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
|
||||
/**
|
||||
* 用户注册参数
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class UmsAdminParam {
|
||||
@ApiModelProperty(value = "用户名", required = true)
|
||||
@NotEmpty(message = "用户名不能为空")
|
||||
private String username;
|
||||
@ApiModelProperty(value = "密码", required = true)
|
||||
@NotEmpty(message = "密码不能为空")
|
||||
private String password;
|
||||
@ApiModelProperty(value = "用户头像")
|
||||
private String icon;
|
||||
@ApiModelProperty(value = "邮箱")
|
||||
@Email(message = "邮箱格式不合法")
|
||||
private String email;
|
||||
@ApiModelProperty(value = "用户昵称")
|
||||
private String nickName;
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String note;
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
package com.stock.trading.user.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.stock.trading.common.entity.BaseEntity;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 后台用户表
|
||||
* Created by macro on 2020/8/21.
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("ums_admin")
|
||||
public class UmsAdmin extends BaseEntity {
|
||||
@ApiModelProperty(value = "用户名")
|
||||
private String username;
|
||||
@ApiModelProperty(value = "密码")
|
||||
private String password;
|
||||
@ApiModelProperty(value = "头像")
|
||||
private String icon;
|
||||
@ApiModelProperty(value = "邮箱")
|
||||
private String email;
|
||||
@ApiModelProperty(value = "昵称")
|
||||
private String nickName;
|
||||
@ApiModelProperty(value = "备注信息")
|
||||
private String note;
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.stock.trading.user.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.stock.trading.user.model.UmsAdmin;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author macro
|
||||
* @since 2020-08-21
|
||||
*/
|
||||
public interface UmsAdminMapper extends BaseMapper<UmsAdmin> {
|
||||
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
package com.stock.trading.user.model;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.stock.trading.common.entity.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户表
|
||||
* </p>
|
||||
*
|
||||
* @author macro
|
||||
* @since 2020-08-21
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("ums_admin")
|
||||
public class UmsAdmin extends BaseEntity implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long id;
|
||||
|
||||
private String username;
|
||||
|
||||
private String password;
|
||||
|
||||
private String icon;
|
||||
|
||||
private String email;
|
||||
|
||||
private String nickName;
|
||||
|
||||
private String note;
|
||||
|
||||
private Integer status;
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package com.stock.trading.user.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.stock.trading.user.dto.UmsAdminParam;
|
||||
import com.stock.trading.user.model.UmsAdmin;
|
||||
|
||||
/**
|
||||
* 后台用户管理Service
|
||||
*/
|
||||
public interface UmsAdminService extends IService<UmsAdmin> {
|
||||
/**
|
||||
* 根据用户名获取后台管理员
|
||||
*/
|
||||
UmsAdmin getAdminByUsername(String username);
|
||||
|
||||
/**
|
||||
* 注册功能
|
||||
*/
|
||||
UmsAdmin register(UmsAdminParam umsAdminParam);
|
||||
|
||||
/**
|
||||
* 登录功能
|
||||
* @param username 用户名
|
||||
* @param password 密码
|
||||
* @return 生成的JWT的token
|
||||
*/
|
||||
String login(String username, String password);
|
||||
}
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
package com.stock.trading.user.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.stock.trading.common.exception.ApiException;
|
||||
import com.stock.trading.common.util.JwtTokenUtil;
|
||||
import com.stock.trading.user.dto.UmsAdminParam;
|
||||
import com.stock.trading.user.mapper.UmsAdminMapper;
|
||||
import com.stock.trading.user.model.UmsAdmin;
|
||||
import com.stock.trading.user.service.UmsAdminService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.authentication.BadCredentialsException;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* UmsAdminService实现类
|
||||
*/
|
||||
@Service
|
||||
public class UmsAdminServiceImpl extends ServiceImpl<UmsAdminMapper, UmsAdmin> implements UmsAdminService {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(UmsAdminServiceImpl.class);
|
||||
@Autowired
|
||||
private UserDetailsService userDetailsService;
|
||||
@Autowired
|
||||
private JwtTokenUtil jwtTokenUtil;
|
||||
@Autowired
|
||||
private PasswordEncoder passwordEncoder;
|
||||
@Autowired
|
||||
private UmsAdminMapper adminMapper;
|
||||
|
||||
@Override
|
||||
public UmsAdmin getAdminByUsername(String username) {
|
||||
QueryWrapper<UmsAdmin> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("username", username);
|
||||
return adminMapper.selectOne(wrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UmsAdmin register(UmsAdminParam umsAdminParam) {
|
||||
UmsAdmin umsAdmin = new UmsAdmin();
|
||||
BeanUtils.copyProperties(umsAdminParam, umsAdmin);
|
||||
umsAdmin.setCreateTime(new Date());
|
||||
umsAdmin.setStatus(1);
|
||||
//查询是否有相同用户名的用户
|
||||
QueryWrapper<UmsAdmin> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("username", umsAdmin.getUsername());
|
||||
if (adminMapper.selectOne(wrapper) != null) {
|
||||
throw new ApiException("该用户已经存在");
|
||||
}
|
||||
//将密码进行加密操作
|
||||
String encodePassword = passwordEncoder.encode(umsAdmin.getPassword());
|
||||
umsAdmin.setPassword(encodePassword);
|
||||
adminMapper.insert(umsAdmin);
|
||||
return umsAdmin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String login(String username, String password) {
|
||||
String token = null;
|
||||
try {
|
||||
UserDetails userDetails = userDetailsService.loadUserByUsername(username);
|
||||
if (!passwordEncoder.matches(password, userDetails.getPassword())) {
|
||||
throw new BadCredentialsException("密码不正确");
|
||||
}
|
||||
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
|
||||
SecurityContextHolder.getContext().setAuthentication(authentication);
|
||||
token = jwtTokenUtil.generateToken(userDetails);
|
||||
} catch (Exception e) {
|
||||
LOGGER.warn("登录异常:{}", e.getMessage());
|
||||
}
|
||||
return token;
|
||||
}
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package com.stock.user.controller;
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 用户控制器
|
||||
*
|
||||
* @author TraeAI
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/user")
|
||||
public class UserController {
|
||||
// TODO: 实现用户相关接口
|
||||
}
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
package com.stock.user.dal.dataobject;
|
||||
|
||||
import com.stock.common.dal.dataobject.BaseDO; // 引入公共BaseDO
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
|
||||
/**
|
||||
* 用户DO
|
||||
*
|
||||
* @author TraeAI
|
||||
*/
|
||||
@TableName("trade_user") // TODO: 确认表名是否正确, 通常用户表名为 sys_user 或 user
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class UserDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
private String username;
|
||||
|
||||
/**
|
||||
* 密码
|
||||
*/
|
||||
private String password; // TODO: 密码字段需要加密存储
|
||||
|
||||
/**
|
||||
* 手机号
|
||||
*/
|
||||
private String mobile;
|
||||
|
||||
/**
|
||||
* 邮箱
|
||||
*/
|
||||
private String email;
|
||||
|
||||
/**
|
||||
* 用户状态(例如:启用,禁用)
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
// TODO: 根据实际需求添加更多字段
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.stock.user.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.stock.user.dal.dataobject.UserDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 用户 Mapper
|
||||
*
|
||||
* @author TraeAI
|
||||
*/
|
||||
@Mapper
|
||||
public interface UserMapper extends BaseMapper<UserDO> {
|
||||
// TODO: 定义用户相关的数据库操作方法
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package com.stock.user.service;
|
||||
|
||||
/**
|
||||
* 用户服务接口
|
||||
*
|
||||
* @author TraeAI
|
||||
*/
|
||||
public interface UserService {
|
||||
// TODO: 定义用户服务相关方法
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package com.stock.user.service.impl;
|
||||
|
||||
import com.stock.user.service.UserService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 用户服务实现类
|
||||
*
|
||||
* @author TraeAI
|
||||
*/
|
||||
@Service
|
||||
public class UserServiceImpl implements UserService {
|
||||
// TODO: 实现用户服务相关方法
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
package com.trade.user;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||
|
||||
/**
|
||||
* 用户服务启动类
|
||||
* @author Trade Team
|
||||
*/
|
||||
@EnableDiscoveryClient
|
||||
@SpringBootApplication(scanBasePackages = "com.trade")
|
||||
public class TradeUserApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(TradeUserApplication.class, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.trade.user;
|
||||
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
|
||||
/**
|
||||
* 用户服务启动类
|
||||
*
|
||||
* @author Trade Team
|
||||
*/
|
||||
@SpringBootApplication
|
||||
@EnableDiscoveryClient
|
||||
@MapperScan("com.trade.user.mapper") // 扫描Mapper接口
|
||||
@ComponentScan(basePackages = {"com.trade.user", "com.trade.common.config"}) // 扫描通用配置,例如全局异常处理
|
||||
public class UserApplication {
|
||||
|
||||
/**
|
||||
* 主函数,启动用户服务应用。
|
||||
*
|
||||
* @param args 命令行参数
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(UserApplication.class, args);
|
||||
System.out.println("(♥◠‿◠)ノ゙ Trade User Service 启动成功 ლ(´ڡ`ლ)゙ \n" +
|
||||
" .-------. ____ __ \n" +
|
||||
" | _ _ | \\\\ \\\\ / / \n" +
|
||||
" | ( ' ) | \\\\ _. / ' \n" +
|
||||
" |(_ o _) / _( )_ .' \n" +
|
||||
" | (_,_).' __ ___(_ o _)' \n" +
|
||||
" | |\\\\\\\\ \\ | || |(_,_)' \n" +
|
||||
" | | \\\\ `' /| `-' / \n" +
|
||||
" | | \\\\ / \\\\ / \n" +
|
||||
" ''-' `'-' `-..-' ");
|
||||
}
|
||||
}
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
package com.trade.user.config;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.DbType;
|
||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
|
||||
/**
|
||||
* MyBatis Plus 配置类
|
||||
* <p>
|
||||
* 用于配置MyBatis Plus的相关特性,如分页插件、Mapper接口扫描等。
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
*/
|
||||
@Configuration
|
||||
@EnableTransactionManagement // 开启声明式事务管理
|
||||
@MapperScan("com.trade.user.mapper") // 扫描Mapper接口,UserApplication中已有,这里可省略或保留以明确
|
||||
public class MyBatisPlusConfig {
|
||||
|
||||
/**
|
||||
* 配置MyBatis Plus拦截器,用于支持分页等功能。
|
||||
* <p>
|
||||
* 新版MyBatis Plus(3.4.0+)推荐使用 {@link MybatisPlusInterceptor}。
|
||||
* 旧版的分页插件是 {@code PaginationInterceptor}。
|
||||
* </p>
|
||||
*
|
||||
* @return MybatisPlusInterceptor 实例
|
||||
*/
|
||||
@Bean
|
||||
public MybatisPlusInterceptor mybatisPlusInterceptor() {
|
||||
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
||||
// 添加分页插件,并指定数据库类型为MySQL
|
||||
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
|
||||
return interceptor;
|
||||
}
|
||||
|
||||
// 如果需要其他MyBatis Plus的配置,例如乐观锁插件、SQL性能规范插件等,可以在这里添加
|
||||
// 例如:
|
||||
// /**
|
||||
// * 乐观锁插件 (如果需要)
|
||||
// */
|
||||
// @Bean
|
||||
// public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() {
|
||||
// return new OptimisticLockerInnerInterceptor();
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * 防止全表更新与删除插件 (如果需要)
|
||||
// */
|
||||
// @Bean
|
||||
// public BlockAttackInnerInterceptor blockAttackInnerInterceptor() {
|
||||
// return new BlockAttackInnerInterceptor();
|
||||
// }
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package com.trade.user.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
||||
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
|
||||
import org.springframework.security.config.http.SessionCreationPolicy;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
|
||||
/**
|
||||
* Spring Security配置
|
||||
* @author Trade Team
|
||||
*/
|
||||
@Configuration
|
||||
@EnableWebSecurity
|
||||
public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
|
||||
@Override
|
||||
protected void configure(HttpSecurity httpSecurity) throws Exception {
|
||||
httpSecurity.csrf()
|
||||
.disable()
|
||||
.sessionManagement()
|
||||
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
|
||||
.and()
|
||||
.authorizeRequests()
|
||||
.antMatchers("/login", "/register", "/swagger-ui/**", "/v3/api-docs/**")
|
||||
.permitAll()
|
||||
.anyRequest()
|
||||
.authenticated();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public PasswordEncoder passwordEncoder() {
|
||||
return new BCryptPasswordEncoder();
|
||||
}
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.trade.user.config;
|
||||
|
||||
import io.swagger.v3.oas.models.OpenAPI;
|
||||
import io.swagger.v3.oas.models.info.Info;
|
||||
import io.swagger.v3.oas.models.info.Contact;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* Swagger配置
|
||||
* @author Trade Team
|
||||
*/
|
||||
@Configuration
|
||||
public class SwaggerConfig {
|
||||
|
||||
@Bean
|
||||
public OpenAPI customOpenAPI() {
|
||||
return new OpenAPI()
|
||||
.info(new Info()
|
||||
.title("用户服务")
|
||||
.version("1.0")
|
||||
.description("用户服务相关接口文档")
|
||||
.contact(new Contact().name("Trade Team")));
|
||||
}
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
/**
|
||||
* 此包存放用户服务模块的配置类,例如 MyBatis Plus 配置、Swagger 配置等。
|
||||
*/
|
||||
package com.trade.user.config;
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
/**
|
||||
* 此包存放用户模块相关的常量定义。
|
||||
*/
|
||||
package com.trade.user.constant;
|
||||
+114
@@ -0,0 +1,114 @@
|
||||
package com.trade.user.controller;
|
||||
|
||||
import com.trade.common.api.CommonResult;
|
||||
import com.trade.user.dto.UmsAdminLoginParam;
|
||||
import com.trade.user.dto.UmsAdminParam;
|
||||
import com.trade.user.dto.UmsAdminUpdatePasswordParam;
|
||||
import com.trade.user.model.UmsAdmin;
|
||||
import com.trade.user.model.UmsPermission;
|
||||
import com.trade.user.service.UmsAdminService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.security.Principal;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 后台用户管理Controller
|
||||
* Created by macro on 2018/4/26.
|
||||
*/
|
||||
@Controller
|
||||
@Api(tags = "UmsAdminController", description = "后台用户管理")
|
||||
@RequestMapping("/admin")
|
||||
public class UmsAdminController {
|
||||
@Value("${jwt.tokenHeader}")
|
||||
private String tokenHeader;
|
||||
@Value("${jwt.tokenHead}")
|
||||
private String tokenHead;
|
||||
@Autowired
|
||||
private UmsAdminService adminService;
|
||||
|
||||
@ApiOperation(value = "用户注册")
|
||||
@RequestMapping(value = "/register", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public CommonResult<UmsAdmin> register(@Validated @RequestBody UmsAdminParam umsAdminParam) {
|
||||
UmsAdmin umsAdmin = adminService.register(umsAdminParam);
|
||||
if (umsAdmin == null) {
|
||||
return CommonResult.failed();
|
||||
}
|
||||
return CommonResult.success(umsAdmin);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "登录以后返回token")
|
||||
@RequestMapping(value = "/login", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public CommonResult login(@Validated @RequestBody UmsAdminLoginParam umsAdminLoginParam) {
|
||||
String token = adminService.login(umsAdminLoginParam.getUsername(), umsAdminLoginParam.getPassword());
|
||||
if (token == null) {
|
||||
return CommonResult.validateFailed("用户名或密码错误");
|
||||
}
|
||||
Map<String, String> tokenMap = new HashMap<>();
|
||||
tokenMap.put("token", token);
|
||||
tokenMap.put("tokenHead", tokenHead);
|
||||
return CommonResult.success(tokenMap);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "刷新token")
|
||||
@RequestMapping(value = "/refreshToken", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public CommonResult refreshToken(HttpServletRequest request) {
|
||||
String token = request.getHeader(tokenHeader);
|
||||
String refreshToken = adminService.refreshToken(token);
|
||||
if (refreshToken == null) {
|
||||
return CommonResult.failed("token已经过期!");
|
||||
}
|
||||
Map<String, String> tokenMap = new HashMap<>();
|
||||
tokenMap.put("token", refreshToken);
|
||||
tokenMap.put("tokenHead", tokenHead);
|
||||
return CommonResult.success(tokenMap);
|
||||
}
|
||||
|
||||
@ApiOperation("获取当前登录用户信息")
|
||||
@RequestMapping(value = "/info", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public CommonResult getAdminInfo(Principal principal) {
|
||||
if(principal==null){
|
||||
return CommonResult.unauthorized(null);
|
||||
}
|
||||
String username = principal.getName();
|
||||
UmsAdmin umsAdmin = adminService.getAdminByUsername(username);
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
data.put("username", umsAdmin.getUsername());
|
||||
data.put("menus", "");
|
||||
data.put("icon", umsAdmin.getIcon());
|
||||
List<UmsPermission> permissionList = adminService.getPermissionList(umsAdmin.getId());
|
||||
data.put("perms", permissionList);
|
||||
return CommonResult.success(data);
|
||||
}
|
||||
|
||||
@ApiOperation("修改指定用户密码")
|
||||
@RequestMapping(value = "/updatePassword", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public CommonResult updatePassword(@Validated @RequestBody UmsAdminUpdatePasswordParam param) {
|
||||
int status = adminService.updatePassword(param);
|
||||
if (status > 0) {
|
||||
return CommonResult.success(status);
|
||||
} else if (status == -1) {
|
||||
return CommonResult.failed("提交参数不合法");
|
||||
} else if (status == -2) {
|
||||
return CommonResult.failed("找不到该用户");
|
||||
} else if (status == -3) {
|
||||
return CommonResult.failed("旧密码错误");
|
||||
} else {
|
||||
return CommonResult.failed();
|
||||
}
|
||||
}
|
||||
}
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
package com.trade.user.controller;
|
||||
|
||||
import com.trade.common.api.CommonResult;
|
||||
import com.trade.user.model.UmsPermission;
|
||||
import com.trade.user.service.UmsPermissionService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 后台用户权限管理
|
||||
* Created by macro on 2018/9/29.
|
||||
*/
|
||||
@Controller
|
||||
@Api(tags = "UmsPermissionController", description = "后台用户权限管理")
|
||||
@RequestMapping("/permission")
|
||||
public class UmsPermissionController {
|
||||
@Autowired
|
||||
private UmsPermissionService permissionService;
|
||||
|
||||
@ApiOperation("添加权限")
|
||||
@RequestMapping(value = "/create", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public CommonResult create(@RequestBody UmsPermission permission) {
|
||||
boolean success = permissionService.save(permission);
|
||||
if (success) {
|
||||
return CommonResult.success(permission);
|
||||
}
|
||||
return CommonResult.failed();
|
||||
}
|
||||
|
||||
@ApiOperation("修改权限")
|
||||
@RequestMapping(value = "/update", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public CommonResult update(@RequestBody UmsPermission permission) {
|
||||
boolean success = permissionService.updateById(permission);
|
||||
if (success) {
|
||||
return CommonResult.success(permission);
|
||||
}
|
||||
return CommonResult.failed();
|
||||
}
|
||||
|
||||
@ApiOperation("根据id删除权限")
|
||||
@RequestMapping(value = "/delete", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public CommonResult delete(@RequestBody List<Long> ids) {
|
||||
boolean success = permissionService.removeByIds(ids);
|
||||
if (success) {
|
||||
return CommonResult.success(null);
|
||||
}
|
||||
return CommonResult.failed();
|
||||
}
|
||||
|
||||
@ApiOperation("获取所有权限列表")
|
||||
@RequestMapping(value = "/list", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public CommonResult<List<UmsPermission>> list() {
|
||||
List<UmsPermission> permissionList = permissionService.list();
|
||||
return CommonResult.success(permissionList);
|
||||
}
|
||||
|
||||
@ApiOperation("以层级结构返回所有权限")
|
||||
@RequestMapping(value = "/treeList", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public CommonResult<List<UmsPermission>> treeList() {
|
||||
List<UmsPermission> permissionList = permissionService.treeList();
|
||||
return CommonResult.success(permissionList);
|
||||
}
|
||||
}
|
||||
+116
@@ -0,0 +1,116 @@
|
||||
package com.trade.user.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.trade.common.api.CommonPage;
|
||||
import com.trade.common.api.CommonResult;
|
||||
import com.trade.user.model.UmsPermission;
|
||||
import com.trade.user.model.UmsRole;
|
||||
import com.trade.user.service.UmsAdminService;
|
||||
import com.trade.user.service.UmsRoleService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 后台用户角色管理
|
||||
* Created by macro on 2018/9/30.
|
||||
*/
|
||||
@Controller
|
||||
@Api(tags = "UmsRoleController", description = "后台用户角色管理")
|
||||
@RequestMapping("/role")
|
||||
public class UmsRoleController {
|
||||
@Autowired
|
||||
private UmsRoleService roleService;
|
||||
@Autowired
|
||||
private UmsAdminService adminService;
|
||||
|
||||
@ApiOperation("添加角色")
|
||||
@RequestMapping(value = "/create", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public CommonResult create(@RequestBody UmsRole role) {
|
||||
boolean success = roleService.save(role);
|
||||
if (success) {
|
||||
return CommonResult.success(null);
|
||||
}
|
||||
return CommonResult.failed();
|
||||
}
|
||||
|
||||
@ApiOperation("修改角色")
|
||||
@RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public CommonResult update(@PathVariable Long id, @RequestBody UmsRole role) {
|
||||
role.setId(id);
|
||||
boolean success = roleService.updateById(role);
|
||||
if (success) {
|
||||
return CommonResult.success(null);
|
||||
}
|
||||
return CommonResult.failed();
|
||||
}
|
||||
|
||||
@ApiOperation("删除角色")
|
||||
@RequestMapping(value = "/delete", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public CommonResult delete(@RequestParam("ids") List<Long> ids) {
|
||||
boolean success = roleService.removeByIds(ids);
|
||||
if (success) {
|
||||
return CommonResult.success(null);
|
||||
}
|
||||
return CommonResult.failed();
|
||||
}
|
||||
|
||||
@ApiOperation("获取所有角色")
|
||||
@RequestMapping(value = "/listAll", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public CommonResult<List<UmsRole>> listAll() {
|
||||
List<UmsRole> roleList = roleService.list();
|
||||
return CommonResult.success(roleList);
|
||||
}
|
||||
|
||||
@ApiOperation("根据角色名称分页获取角色列表")
|
||||
@RequestMapping(value = "/list", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public CommonResult<CommonPage<UmsRole>> list(@RequestParam(value = "keyword", required = false) String keyword,
|
||||
@RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
|
||||
@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
|
||||
Page<UmsRole> page = new Page<>(pageNum, pageSize);
|
||||
LambdaQueryWrapper<UmsRole> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
if (keyword!=null && keyword.length()>0){
|
||||
lambdaQueryWrapper.like(UmsRole::getName, keyword);
|
||||
}
|
||||
Page<UmsRole> rolePage = roleService.page(page, lambdaQueryWrapper);
|
||||
return CommonResult.success(CommonPage.restPage(rolePage));
|
||||
}
|
||||
|
||||
@ApiOperation("获取角色相关权限")
|
||||
@RequestMapping(value = "/listPermission/{roleId}", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public CommonResult<List<UmsPermission>> listPermission(@PathVariable Long roleId) {
|
||||
List<UmsPermission> permissionList = roleService.getPermissionList(roleId);
|
||||
return CommonResult.success(permissionList);
|
||||
}
|
||||
|
||||
@ApiOperation("修改角色相关权限")
|
||||
@RequestMapping(value = "/updatePermission", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public CommonResult updatePermission(@RequestParam Long roleId,
|
||||
@RequestParam List<Long> permissionIds) {
|
||||
int count = roleService.updatePermission(roleId, permissionIds);
|
||||
if(count>0){
|
||||
return CommonResult.success(count);
|
||||
}
|
||||
return CommonResult.failed();
|
||||
}
|
||||
|
||||
@ApiOperation("获取角色列表")
|
||||
@RequestMapping(value = "/listRoleByAdminId/{adminId}", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public CommonResult<List<UmsRole>> listRoleByAdminId(@PathVariable Long adminId) {
|
||||
List<UmsRole> roleList = adminService.getRoleList(adminId);
|
||||
return CommonResult.success(roleList);
|
||||
}
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
/**
|
||||
* 此包存放用户模块的Controller层代码,负责接收前端请求、参数校验、调用Service层处理业务逻辑,并返回响应。
|
||||
*/
|
||||
package com.trade.user.controller;
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package com.trade.user.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
|
||||
/**
|
||||
* 用户登录参数
|
||||
* Created by macro on 2018/4/26.
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class UmsAdminLoginParam {
|
||||
@ApiModelProperty(value = "用户名", required = true)
|
||||
@NotEmpty(message = "用户名不能为空")
|
||||
private String username;
|
||||
@ApiModelProperty(value = "密码", required = true)
|
||||
@NotEmpty(message = "密码不能为空")
|
||||
private String password;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.trade.user.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
|
||||
/**
|
||||
* 用户注册参数
|
||||
* Created by macro on 2018/4/26.
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class UmsAdminParam {
|
||||
@ApiModelProperty(value = "用户名", required = true)
|
||||
@NotEmpty(message = "用户名不能为空")
|
||||
private String username;
|
||||
@ApiModelProperty(value = "密码", required = true)
|
||||
@NotEmpty(message = "密码不能为空")
|
||||
private String password;
|
||||
@ApiModelProperty(value = "用户头像")
|
||||
private String icon;
|
||||
@ApiModelProperty(value = "邮箱")
|
||||
private String email;
|
||||
@ApiModelProperty(value = "用户昵称")
|
||||
private String nickName;
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String note;
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.trade.user.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
|
||||
/**
|
||||
* 修改密码参数
|
||||
* Created by macro on 2019/10/5.
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class UmsAdminUpdatePasswordParam {
|
||||
@ApiModelProperty(value = "用户名", required = true)
|
||||
@NotEmpty(message = "用户名不能为空")
|
||||
private String username;
|
||||
@ApiModelProperty(value = "旧密码", required = true)
|
||||
@NotEmpty(message = "旧密码不能为空")
|
||||
private String oldPassword;
|
||||
@ApiModelProperty(value = "新密码", required = true)
|
||||
@NotEmpty(message = "新密码不能为空")
|
||||
private String newPassword;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
/**
|
||||
* 此包存放用户模块的DTO (Data Transfer Object) 代码。
|
||||
* DTO用于在不同层之间传递数据,例如Controller接收的请求参数、Service返回给Controller的数据等。
|
||||
* 它们有助于解耦各层,并可以根据需要对数据进行裁剪或聚合。
|
||||
*/
|
||||
package com.trade.user.dto;
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
/**
|
||||
* 此包存放用户模块的Entity层代码,即数据库表对应的Java实体类。
|
||||
* 通常会使用Lombok注解简化代码,并可能包含JPA或MyBatis Plus的注解。
|
||||
*/
|
||||
package com.trade.user.entity;
|
||||
@@ -0,0 +1,5 @@
|
||||
/**
|
||||
* 此包存放用户模块相关的枚举类。
|
||||
* 例如:用户状态枚举、性别枚举等。
|
||||
*/
|
||||
package com.trade.user.enums;
|
||||
+1
@@ -0,0 +1 @@
|
||||
package com.trade.user.handler;
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package com.trade.user.mapper;
|
||||
|
||||
import com.trade.user.model.UmsAdmin;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.trade.user.model.UmsPermission;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
public interface UmsAdminMapper extends BaseMapper<UmsAdmin> {
|
||||
|
||||
/**
|
||||
* 获取用户所有权限(包括角色权限和+-权限)
|
||||
*/
|
||||
List<UmsPermission> getPermissionList(@Param("adminId") Long adminId);
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.trade.user.mapper;
|
||||
|
||||
import com.trade.user.model.UmsAdminPermissionRelation;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户和权限关系表(除角色外的额外权限) Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
public interface UmsAdminPermissionRelationMapper extends BaseMapper<UmsAdminPermissionRelation> {
|
||||
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.trade.user.mapper;
|
||||
|
||||
import com.trade.user.model.UmsAdminRoleRelation;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户和角色关系表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
public interface UmsAdminRoleRelationMapper extends BaseMapper<UmsAdminRoleRelation> {
|
||||
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.trade.user.mapper;
|
||||
|
||||
import com.trade.user.model.UmsPermission;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户权限表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
public interface UmsPermissionMapper extends BaseMapper<UmsPermission> {
|
||||
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.trade.user.mapper;
|
||||
|
||||
import com.trade.user.model.UmsRole;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户角色表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
public interface UmsRoleMapper extends BaseMapper<UmsRole> {
|
||||
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.trade.user.mapper;
|
||||
|
||||
import com.trade.user.model.UmsRolePermissionRelation;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户角色和权限关系表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
public interface UmsRolePermissionRelationMapper extends BaseMapper<UmsRolePermissionRelation> {
|
||||
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
/**
|
||||
* 此包存放用户模块的Mapper层代码,定义与数据库表对应的DAO接口,继承自MyBatis Plus的BaseMapper。
|
||||
*/
|
||||
package com.trade.user.mapper;
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.trade.user.model;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户表
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("ums_admin")
|
||||
public class UmsAdmin implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
private String username;
|
||||
|
||||
private String password;
|
||||
|
||||
private String icon;
|
||||
|
||||
private String email;
|
||||
|
||||
private String nickName;
|
||||
|
||||
private String note;
|
||||
|
||||
private Date createTime;
|
||||
|
||||
private Date loginTime;
|
||||
|
||||
private Integer status;
|
||||
|
||||
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
package com.trade.user.model;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户和权限关系表(除角色外的额外权限)
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("ums_admin_permission_relation")
|
||||
public class UmsAdminPermissionRelation implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
private Long adminId;
|
||||
|
||||
private Long permissionId;
|
||||
|
||||
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
package com.trade.user.model;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户和角色关系表
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("ums_admin_role_relation")
|
||||
public class UmsAdminRoleRelation implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
private Long adminId;
|
||||
|
||||
private Long roleId;
|
||||
|
||||
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
package com.trade.user.model;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户权限表
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("ums_permission")
|
||||
public class UmsPermission implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
private Long pid;
|
||||
|
||||
private String name;
|
||||
|
||||
private String value;
|
||||
|
||||
private String icon;
|
||||
|
||||
private Integer type;
|
||||
|
||||
private String uri;
|
||||
|
||||
private Integer status;
|
||||
|
||||
private Date createTime;
|
||||
|
||||
private Integer sort;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.trade.user.model;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户角色表
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("ums_role")
|
||||
public class UmsRole implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
private String name;
|
||||
|
||||
private String description;
|
||||
|
||||
private Integer adminCount;
|
||||
|
||||
private Date createTime;
|
||||
|
||||
private Integer status;
|
||||
|
||||
private Integer sort;
|
||||
|
||||
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
package com.trade.user.model;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户角色和权限关系表
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("ums_role_permission_relation")
|
||||
public class UmsRolePermissionRelation implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
private Long roleId;
|
||||
|
||||
private Long permissionId;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
/**
|
||||
* 此包包含用户服务模块的领域模型 (Domain Model) 或实体类 (Entity)。
|
||||
* <p>
|
||||
* 这些类通常映射到用户相关的数据库表结构,例如用户表、角色表、权限表等。
|
||||
* </p>
|
||||
*/
|
||||
package com.trade.user.model;
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.trade.user.service;
|
||||
|
||||
import com.trade.user.model.UmsAdminPermissionRelation;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户和权限关系表(除角色外的额外权限) 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
public interface UmsAdminPermissionRelationService extends IService<UmsAdminPermissionRelation> {
|
||||
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.trade.user.service;
|
||||
|
||||
import com.trade.user.model.UmsAdminRoleRelation;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户和角色关系表 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
public interface UmsAdminRoleRelationService extends IService<UmsAdminRoleRelation> {
|
||||
|
||||
}
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
package com.trade.user.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.trade.common.domain.UserDto;
|
||||
import com.trade.user.dto.UmsAdminParam;
|
||||
import com.trade.user.dto.UmsAdminUpdatePasswordParam;
|
||||
import com.trade.user.model.UmsAdmin;
|
||||
import com.trade.user.model.UmsPermission;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 后台管理员Service
|
||||
* Created by macro on 2018/4/26.
|
||||
*/
|
||||
public interface UmsAdminService extends IService<UmsAdmin> {
|
||||
/**
|
||||
* 根据用户名获取后台管理员
|
||||
*/
|
||||
UmsAdmin getAdminByUsername(String username);
|
||||
|
||||
/**
|
||||
* 注册功能
|
||||
*/
|
||||
UmsAdmin register(UmsAdminParam umsAdminParam);
|
||||
|
||||
/**
|
||||
* 登录功能
|
||||
* @param username 用户名
|
||||
* @param password 密码
|
||||
* @return 生成的JWT的token
|
||||
*/
|
||||
String login(String username, String password);
|
||||
|
||||
/**
|
||||
* 根据用户id获取用户所有权限(角色权限和+-权限)
|
||||
*/
|
||||
List<UmsPermission> getPermissionList(Long adminId);
|
||||
|
||||
/**
|
||||
* 修改密码
|
||||
*/
|
||||
int updatePassword(UmsAdminUpdatePasswordParam umsAdminUpdatePasswordParam);
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
*/
|
||||
UserDto loadUserByUsername(String username);
|
||||
|
||||
/**
|
||||
* 获取用户对应角色
|
||||
*/
|
||||
List<com.trade.user.model.UmsRole> getRoleList(Long adminId);
|
||||
|
||||
/**
|
||||
* 刷新token的功能
|
||||
* @param oldToken 旧的token
|
||||
*/
|
||||
String refreshToken(String oldToken);
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.trade.user.service;
|
||||
|
||||
import com.trade.user.model.UmsPermission;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户权限表 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
import java.util.List;
|
||||
|
||||
public interface UmsPermissionService extends IService<UmsPermission> {
|
||||
/**
|
||||
* 以层级结构返回所有权限
|
||||
*/
|
||||
List<UmsPermission> treeList();
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.trade.user.service;
|
||||
|
||||
import com.trade.user.model.UmsRolePermissionRelation;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户角色和权限关系表 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
public interface UmsRolePermissionRelationService extends IService<UmsRolePermissionRelation> {
|
||||
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package com.trade.user.service;
|
||||
|
||||
import com.trade.user.model.UmsRole;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户角色表 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
import com.trade.user.model.UmsPermission;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface UmsRoleService extends IService<UmsRole> {
|
||||
/**
|
||||
* 获取角色相关权限
|
||||
*/
|
||||
List<UmsPermission> getPermissionList(Long roleId);
|
||||
|
||||
/**
|
||||
* 修改角色权限
|
||||
*/
|
||||
int updatePermission(Long roleId, List<Long> permissionIds);
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.trade.user.service.impl;
|
||||
|
||||
import com.trade.user.model.UmsAdminPermissionRelation;
|
||||
import com.trade.user.mapper.UmsAdminPermissionRelationMapper;
|
||||
import com.trade.user.service.UmsAdminPermissionRelationService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户和权限关系表(除角色外的额外权限) 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
@Service
|
||||
public class UmsAdminPermissionRelationServiceImpl extends ServiceImpl<UmsAdminPermissionRelationMapper, UmsAdminPermissionRelation> implements UmsAdminPermissionRelationService {
|
||||
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.trade.user.service.impl;
|
||||
|
||||
import com.trade.user.model.UmsAdminRoleRelation;
|
||||
import com.trade.user.mapper.UmsAdminRoleRelationMapper;
|
||||
import com.trade.user.service.UmsAdminRoleRelationService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户和角色关系表 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
@Service
|
||||
public class UmsAdminRoleRelationServiceImpl extends ServiceImpl<UmsAdminRoleRelationMapper, UmsAdminRoleRelation> implements UmsAdminRoleRelationService {
|
||||
|
||||
}
|
||||
+142
@@ -0,0 +1,142 @@
|
||||
package com.trade.user.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.trade.common.domain.UserDto;
|
||||
import com.trade.common.util.JwtTokenUtil;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import com.trade.user.dto.UmsAdminParam;
|
||||
import com.trade.user.dto.UmsAdminUpdatePasswordParam;
|
||||
import com.trade.user.mapper.UmsAdminMapper;
|
||||
import com.trade.user.model.UmsAdmin;
|
||||
import com.trade.user.model.UmsPermission;
|
||||
import com.trade.user.service.UmsAdminService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.authentication.BadCredentialsException;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.AuthenticationException;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* UmsAdminService实现类
|
||||
* Created by macro on 2018/4/26.
|
||||
*/
|
||||
@Service
|
||||
public class UmsAdminServiceImpl extends ServiceImpl<UmsAdminMapper, UmsAdmin> implements UmsAdminService {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(UmsAdminServiceImpl.class);
|
||||
@Autowired
|
||||
private JwtTokenUtil jwtTokenUtil;
|
||||
@Autowired
|
||||
private PasswordEncoder passwordEncoder;
|
||||
@Autowired
|
||||
private UmsAdminMapper adminMapper;
|
||||
|
||||
@Override
|
||||
public UmsAdmin getAdminByUsername(String username) {
|
||||
LambdaQueryWrapper<UmsAdmin> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(UmsAdmin::getUsername, username);
|
||||
UmsAdmin admin = getOne(lambdaQueryWrapper);
|
||||
return admin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UmsAdmin register(UmsAdminParam umsAdminParam) {
|
||||
UmsAdmin umsAdmin = new UmsAdmin();
|
||||
BeanUtils.copyProperties(umsAdminParam, umsAdmin);
|
||||
umsAdmin.setCreateTime(new Date());
|
||||
umsAdmin.setStatus(1);
|
||||
//查询是否有相同用户名的用户
|
||||
LambdaQueryWrapper<UmsAdmin> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(UmsAdmin::getUsername, umsAdmin.getUsername());
|
||||
List<UmsAdmin> umsAdminList = list(lambdaQueryWrapper);
|
||||
if (umsAdminList.size() > 0) {
|
||||
return null;
|
||||
}
|
||||
//将密码进行加密操作
|
||||
String encodePassword = passwordEncoder.encode(umsAdmin.getPassword());
|
||||
umsAdmin.setPassword(encodePassword);
|
||||
baseMapper.insert(umsAdmin);
|
||||
return umsAdmin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String login(String username, String password) {
|
||||
String token = null;
|
||||
try {
|
||||
UserDto userDto = loadUserByUsername(username);
|
||||
if (!passwordEncoder.matches(password, userDto.getPassword())) {
|
||||
throw new BadCredentialsException("密码不正确");
|
||||
}
|
||||
UserDetails userDetails = userDto;
|
||||
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
|
||||
SecurityContextHolder.getContext().setAuthentication(authentication);
|
||||
token = jwtTokenUtil.generateToken(userDetails);
|
||||
} catch (AuthenticationException e) {
|
||||
LOGGER.warn("登录异常:{}", e.getMessage());
|
||||
}
|
||||
return token;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UmsPermission> getPermissionList(Long adminId) {
|
||||
return adminMapper.getPermissionList(adminId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updatePassword(UmsAdminUpdatePasswordParam param) {
|
||||
if(StrUtil.isEmpty(param.getUsername())
|
||||
||StrUtil.isEmpty(param.getOldPassword())
|
||||
||StrUtil.isEmpty(param.getNewPassword())){
|
||||
return -1;
|
||||
}
|
||||
LambdaQueryWrapper<UmsAdmin> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(UmsAdmin::getUsername, param.getUsername());
|
||||
List<UmsAdmin> adminList = list(lambdaQueryWrapper);
|
||||
if(CollUtil.isEmpty(adminList)){
|
||||
return -2;
|
||||
}
|
||||
UmsAdmin umsAdmin = adminList.get(0);
|
||||
if(!passwordEncoder.matches(param.getOldPassword(),umsAdmin.getPassword())){
|
||||
return -3;
|
||||
}
|
||||
umsAdmin.setPassword(passwordEncoder.encode(param.getNewPassword()));
|
||||
baseMapper.updateById(umsAdmin);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserDto loadUserByUsername(String username) {
|
||||
//获取用户信息
|
||||
UmsAdmin admin = getAdminByUsername(username);
|
||||
if (admin != null) {
|
||||
List<UmsPermission> permissionList = getPermissionList(admin.getId());
|
||||
List<String> permissionStrList = null;
|
||||
if (CollUtil.isNotEmpty(permissionList)) {
|
||||
permissionStrList = permissionList.stream().map(UmsPermission::getValue).collect(java.util.stream.Collectors.toList());
|
||||
}
|
||||
return new UserDto(admin.getId(), admin.getUsername(), admin.getPassword(), admin.getStatus(), permissionStrList);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<com.trade.user.model.UmsRole> getRoleList(Long adminId) {
|
||||
return adminMapper.getRoleList(adminId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String refreshToken(String oldToken) {
|
||||
return jwtTokenUtil.refreshHeadToken(oldToken);
|
||||
}
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
package com.trade.user.service.impl;
|
||||
|
||||
import com.trade.user.model.UmsPermission;
|
||||
import com.trade.user.mapper.UmsPermissionMapper;
|
||||
import com.trade.user.service.UmsPermissionService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户权限表 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
@Service
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class UmsPermissionServiceImpl extends ServiceImpl<UmsPermissionMapper, UmsPermission> implements UmsPermissionService {
|
||||
|
||||
@Override
|
||||
public List<UmsPermission> treeList() {
|
||||
List<UmsPermission> permissionList = list();
|
||||
List<UmsPermission> result = permissionList.stream()
|
||||
.filter(permission -> permission.getParentId().equals(0L))
|
||||
.map(permission -> covert(permission, permissionList)).collect(Collectors.toList());
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将权限转换为带有子级的权限对象
|
||||
* 当找不到子级权限的时候map操作不会再递归调用covert
|
||||
*/
|
||||
private UmsPermission covert(UmsPermission permission, List<UmsPermission> permissionList) {
|
||||
permission.setChildren(permissionList.stream()
|
||||
.filter(item -> item.getParentId().equals(permission.getId()))
|
||||
.map(item -> covert(item, permissionList))
|
||||
.collect(Collectors.toList()));
|
||||
return permission;
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.trade.user.service.impl;
|
||||
|
||||
import com.trade.user.model.UmsRolePermissionRelation;
|
||||
import com.trade.user.mapper.UmsRolePermissionRelationMapper;
|
||||
import com.trade.user.service.UmsRolePermissionRelationService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户角色和权限关系表 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
@Service
|
||||
public class UmsRolePermissionRelationServiceImpl extends ServiceImpl<UmsRolePermissionRelationMapper, UmsRolePermissionRelation> implements UmsRolePermissionRelationService {
|
||||
|
||||
}
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
package com.trade.user.service.impl;
|
||||
|
||||
import com.trade.user.model.UmsRole;
|
||||
import com.trade.user.mapper.UmsRoleMapper;
|
||||
import com.trade.user.service.UmsRoleService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 后台用户角色表 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author Trade Team
|
||||
* @since 2024-03-20
|
||||
*/
|
||||
@Service
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.trade.user.mapper.UmsRolePermissionRelationMapper;
|
||||
import com.trade.user.model.UmsPermission;
|
||||
import com.trade.user.model.UmsRolePermissionRelation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class UmsRoleServiceImpl extends ServiceImpl<UmsRoleMapper, UmsRole> implements UmsRoleService {
|
||||
@Autowired
|
||||
private UmsRolePermissionRelationMapper rolePermissionRelationMapper;
|
||||
|
||||
@Override
|
||||
public List<UmsPermission> getPermissionList(Long roleId) {
|
||||
return rolePermissionRelationMapper.getPermissionList(roleId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updatePermission(Long roleId, List<Long> permissionIds) {
|
||||
//删除之前绑定的关系
|
||||
LambdaQueryWrapper<UmsRolePermissionRelation> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(UmsRolePermissionRelation::getRoleId, roleId);
|
||||
rolePermissionRelationMapper.delete(wrapper);
|
||||
//批量插入新的关系
|
||||
List<UmsRolePermissionRelation> relationList = new ArrayList<>();
|
||||
for (Long permissionId : permissionIds) {
|
||||
UmsRolePermissionRelation relation = new UmsRolePermissionRelation();
|
||||
relation.setRoleId(roleId);
|
||||
relation.setPermissionId(permissionId);
|
||||
relationList.add(relation);
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(relationList)) {
|
||||
for (UmsRolePermissionRelation relation : relationList) {
|
||||
rolePermissionRelationMapper.insert(relation);
|
||||
}
|
||||
}
|
||||
return permissionIds.size();
|
||||
}
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
/**
|
||||
* 此包存放用户模块Service层接口的实现类。
|
||||
*/
|
||||
package com.trade.user.service.impl;
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
/**
|
||||
* 此包存放用户模块的Service层代码,定义业务逻辑接口。
|
||||
* 通常会包含接口定义 (e.g., {@code UserService.java}) 和其实现类 (e.g., {@code UserServiceImpl.java} in a sub-package 'impl').
|
||||
*/
|
||||
package com.trade.user.service;
|
||||
@@ -0,0 +1,4 @@
|
||||
/**
|
||||
* 此包存放用户模块相关的工具类。
|
||||
*/
|
||||
package com.trade.user.util;
|
||||
@@ -0,0 +1,4 @@
|
||||
/**
|
||||
* 此包存放用户服务模块的工具类。
|
||||
*/
|
||||
package com.trade.user.utils;
|
||||
@@ -0,0 +1,6 @@
|
||||
/**
|
||||
* 此包存放用户模块的VO (View Object) 代码。
|
||||
* VO是专门用于前端展示的对象,Controller层会将业务处理结果封装成VO返回给客户端。
|
||||
* VO的设计应贴合前端页面的展示需求。
|
||||
*/
|
||||
package com.trade.user.vo;
|
||||
@@ -0,0 +1,55 @@
|
||||
spring:
|
||||
datasource:
|
||||
url: jdbc:mysql://localhost:3306/trade-user?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
|
||||
username: root
|
||||
password: wodiXIAO1988
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
redis:
|
||||
database: 0
|
||||
host: localhost
|
||||
port: 6379
|
||||
password: #
|
||||
mail:
|
||||
host: smtp.qq.com
|
||||
username: null
|
||||
password: null
|
||||
properties:
|
||||
mail.smtp.ssl.enable: true
|
||||
default-encoding: UTF-8
|
||||
thymeleaf:
|
||||
cache: false
|
||||
mode: HTML5
|
||||
encoding: UTF-8
|
||||
servlet.content-type: text/html
|
||||
mybatis-plus:
|
||||
mapper-locations: 'classpath*:mapper/*.xml'
|
||||
global-config:
|
||||
db-config:
|
||||
id-type: auto
|
||||
logic-delete-value: 1
|
||||
logic-not-delete-value: 0
|
||||
table-prefix: ums_
|
||||
field-strategy: not_empty
|
||||
logging:
|
||||
level:
|
||||
com:
|
||||
trade:
|
||||
user: debug
|
||||
file:
|
||||
path: D:/log
|
||||
secure:
|
||||
ignored:
|
||||
urls:
|
||||
- /swagger-resources/**
|
||||
- /webjars/**
|
||||
- /v2/**
|
||||
- /swagger-ui.html
|
||||
- /doc.html
|
||||
- /role/**
|
||||
- /permission/**
|
||||
- /admin/login
|
||||
- /admin/register
|
||||
- /admin/info
|
||||
- /admin/logout
|
||||
- /admin/updatePassword
|
||||
- /admin/refreshToken
|
||||
@@ -0,0 +1,55 @@
|
||||
spring:
|
||||
datasource:
|
||||
url: jdbc:mysql://localhost:3306/trade-user?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
|
||||
username: root
|
||||
password: root
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
redis:
|
||||
database: 0
|
||||
host: localhost
|
||||
port: 6379
|
||||
password: #
|
||||
mail:
|
||||
host: smtp.qq.com
|
||||
username: null
|
||||
password: null
|
||||
properties:
|
||||
mail.smtp.ssl.enable: true
|
||||
default-encoding: UTF-8
|
||||
thymeleaf:
|
||||
cache: false
|
||||
mode: HTML5
|
||||
encoding: UTF-8
|
||||
servlet.content-type: text/html
|
||||
mybatis-plus:
|
||||
mapper-locations: 'classpath*:mapper/*.xml'
|
||||
global-config:
|
||||
db-config:
|
||||
id-type: auto
|
||||
logic-delete-value: 1
|
||||
logic-not-delete-value: 0
|
||||
table-prefix: ums_
|
||||
field-strategy: not_empty
|
||||
logging:
|
||||
level:
|
||||
com:
|
||||
trade:
|
||||
user: info
|
||||
file:
|
||||
path: /var/log/trade-user
|
||||
secure:
|
||||
ignored:
|
||||
urls:
|
||||
- /swagger-resources/**
|
||||
- /webjars/**
|
||||
- /v2/**
|
||||
- /swagger-ui.html
|
||||
- /doc.html
|
||||
- /role/**
|
||||
- /permission/**
|
||||
- /admin/login
|
||||
- /admin/register
|
||||
- /admin/info
|
||||
- /admin/logout
|
||||
- /admin/updatePassword
|
||||
- /admin/refreshToken
|
||||
@@ -0,0 +1,55 @@
|
||||
spring:
|
||||
datasource:
|
||||
url: jdbc:mysql://localhost:3306/trade-user-test?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
|
||||
username: root
|
||||
password: root
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
redis:
|
||||
database: 0
|
||||
host: localhost
|
||||
port: 6379
|
||||
password: #
|
||||
mail:
|
||||
host: smtp.qq.com
|
||||
username: null
|
||||
password: null
|
||||
properties:
|
||||
mail.smtp.ssl.enable: true
|
||||
default-encoding: UTF-8
|
||||
thymeleaf:
|
||||
cache: false
|
||||
mode: HTML5
|
||||
encoding: UTF-8
|
||||
servlet.content-type: text/html
|
||||
mybatis-plus:
|
||||
mapper-locations: 'classpath*:mapper/*.xml'
|
||||
global-config:
|
||||
db-config:
|
||||
id-type: auto
|
||||
logic-delete-value: 1
|
||||
logic-not-delete-value: 0
|
||||
table-prefix: ums_
|
||||
field-strategy: not_empty
|
||||
logging:
|
||||
level:
|
||||
com:
|
||||
trade:
|
||||
user: debug
|
||||
file:
|
||||
path: D:/log
|
||||
secure:
|
||||
ignored:
|
||||
urls:
|
||||
- /swagger-resources/**
|
||||
- /webjars/**
|
||||
- /v2/**
|
||||
- /swagger-ui.html
|
||||
- /doc.html
|
||||
- /role/**
|
||||
- /permission/**
|
||||
- /admin/login
|
||||
- /admin/register
|
||||
- /admin/info
|
||||
- /admin/logout
|
||||
- /admin/updatePassword
|
||||
- /admin/refreshToken
|
||||
@@ -0,0 +1,93 @@
|
||||
server:
|
||||
port: 8081 # 用户服务端口,避免与网关或其他服务冲突
|
||||
|
||||
spring:
|
||||
application:
|
||||
name: trade-user # 应用名称
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
server-addr: 127.0.0.1:8848 # Nacos Server地址
|
||||
namespace: # Nacos命名空间ID,根据实际情况配置
|
||||
group: DEFAULT_GROUP # Nacos分组,根据实际情况配置
|
||||
config:
|
||||
server-addr: ${spring.cloud.nacos.discovery.server-addr} # Nacos配置中心地址
|
||||
namespace: ${spring.cloud.nacos.discovery.namespace}
|
||||
group: ${spring.cloud.nacos.discovery.group}
|
||||
file-extension: yml # 配置文件格式
|
||||
shared-configs: # 共享配置
|
||||
- data-id: application-common.yml # 通用应用配置
|
||||
group: ${spring.cloud.nacos.discovery.group}
|
||||
refresh: true
|
||||
- data-id: datasource-mysql-config.yml # MySQL数据源配置
|
||||
group: ${spring.cloud.nacos.discovery.group}
|
||||
refresh: true
|
||||
# ext-config: # 可选的扩展配置
|
||||
# - data-id: trade-user-ext.yml
|
||||
# group: ${spring.cloud.nacos.discovery.group}
|
||||
# refresh: true
|
||||
|
||||
# Spring Profiles: 用于区分不同环境的配置 (dev, test, prod)
|
||||
profiles:
|
||||
active: dev # 默认激活开发环境配置
|
||||
|
||||
# MyBatis Plus 配置
|
||||
mybatis-plus:
|
||||
mapper-locations: classpath*:/mapper/**/*.xml # Mapper XML文件位置
|
||||
# type-aliases-package: com.trade.user.entity # 实体类别名扫描包 (如果需要)
|
||||
global-config:
|
||||
db-config:
|
||||
id-type: auto # 全局主键策略 (推荐使用AUTO或ASSIGN_ID,具体根据业务调整)
|
||||
# table-prefix: t_ # 全局表前缀 (如果表名有统一前缀)
|
||||
# logic-delete-field: deleted # 全局逻辑删除字段名 (如果使用逻辑删除)
|
||||
# logic-not-delete-value: 0 # 逻辑未删除值
|
||||
# logic-delete-value: 1 # 逻辑已删除值
|
||||
configuration:
|
||||
map-underscore-to-camel-case: true # 开启驼峰命名转换
|
||||
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # MyBatis日志实现 (开发时可开启)
|
||||
|
||||
# 日志配置
|
||||
logging:
|
||||
level:
|
||||
com.trade.user: INFO # 用户模块日志级别
|
||||
com.trade.user.mapper: DEBUG # Mapper接口日志级别 (开发时可设为DEBUG查看SQL)
|
||||
org.springframework.web: INFO
|
||||
org.springframework.security: INFO # 如果集成了Spring Security
|
||||
# file:
|
||||
# name: ./logs/trade-user.log # 日志文件路径和名称
|
||||
|
||||
# Actuator端点配置
|
||||
management:
|
||||
endpoints:
|
||||
web:
|
||||
exposure:
|
||||
include: '*' # 暴露所有端点,生产环境请按需配置
|
||||
endpoint:
|
||||
health:
|
||||
show-details: always # 显示健康检查详情
|
||||
|
||||
# 如果需要集成其他组件,如Redis、RabbitMQ等,在此处添加相应配置
|
||||
# spring:
|
||||
# data:
|
||||
# redis:
|
||||
# host: localhost
|
||||
# port: 6379
|
||||
# # password: yourpassword
|
||||
# rabbitmq:
|
||||
# host: localhost
|
||||
# port: 5672
|
||||
# username: guest
|
||||
# password: guest
|
||||
|
||||
# Swagger/OpenAPI 配置 (如果使用SpringDoc)
|
||||
# springdoc:
|
||||
# api-docs:
|
||||
# path: /v3/api-docs # API文档路径
|
||||
# swagger-ui:
|
||||
# path: /swagger-ui.html # Swagger UI路径
|
||||
# display-request-duration: true
|
||||
# groups-order: DESC
|
||||
# group-configs:
|
||||
# - group: 'User API'
|
||||
# paths-to-match: '/user/**'
|
||||
# packages-to-scan: com.trade.user.controller
|
||||
@@ -0,0 +1,20 @@
|
||||
spring:
|
||||
application:
|
||||
name: trade-user # 应用名称,必须与Nacos中配置的Data ID相关联或作为前缀
|
||||
cloud:
|
||||
nacos:
|
||||
config:
|
||||
server-addr: 127.0.0.1:8848 # Nacos配置中心地址
|
||||
namespace: # Nacos命名空间ID,根据实际情况配置
|
||||
group: DEFAULT_GROUP # Nacos分组,根据实际情况配置
|
||||
file-extension: yml # 拉取配置文件的格式
|
||||
# data-id: trade-user.yml # 如果需要显式指定主配置文件Data ID,通常由shared-configs和ext-config管理
|
||||
# refresh-enabled: true # 是否开启动态刷新,默认为true
|
||||
discovery:
|
||||
server-addr: ${spring.cloud.nacos.config.server-addr} # Nacos服务发现地址,通常与配置中心地址一致
|
||||
namespace: ${spring.cloud.nacos.config.namespace}
|
||||
group: ${spring.cloud.nacos.config.group}
|
||||
|
||||
# 日志配置,也可以放在application.yml中,但bootstrap.yml中配置可以更早生效
|
||||
# logging:
|
||||
# config: classpath:logback-spring.xml # 指定日志配置文件
|
||||
@@ -0,0 +1,15 @@
|
||||
#数据库连接配置
|
||||
spring.datasource.url=jdbc:mysql://localhost:3306/trade-user?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
|
||||
spring.datasource.username=root
|
||||
spring.datasource.password=root
|
||||
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
|
||||
#指定生成代码的模块
|
||||
project.module.name=trade-user
|
||||
#指定生成代码的表名
|
||||
#多个表名用逗号隔开
|
||||
#table.names=ums_admin,ums_role,ums_permission,ums_admin_role_relation,ums_role_permission_relation,ums_admin_permission_relation,ums_resource
|
||||
table.names=ums_resource
|
||||
#指定生成代码的作者
|
||||
author.name=macro
|
||||
#是否覆盖已有文件
|
||||
file.override=true
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
<include resource="org/springframework/boot/logging/logback/base.xml"/>
|
||||
<logger name="com.trade.user" level="DEBUG"/>
|
||||
</configuration>
|
||||
@@ -0,0 +1,59 @@
|
||||
<?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.trade.user.mapper.UmsAdminMapper">
|
||||
|
||||
<resultMap id="BaseResultMap" type="com.trade.user.model.UmsAdmin">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="username" jdbcType="VARCHAR" property="username" />
|
||||
<result column="password" jdbcType="VARCHAR" property="password" />
|
||||
<result column="icon" jdbcType="VARCHAR" property="icon" />
|
||||
<result column="email" jdbcType="VARCHAR" property="email" />
|
||||
<result column="nick_name" jdbcType="VARCHAR" property="nickName" />
|
||||
<result column="note" jdbcType="VARCHAR" property="note" />
|
||||
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
|
||||
<result column="login_time" jdbcType="TIMESTAMP" property="loginTime" />
|
||||
<result column="status" jdbcType="INTEGER" property="status" />
|
||||
</resultMap>
|
||||
|
||||
<select id="getPermissionList" resultMap="com.trade.user.mapper.UmsPermissionMapper.BaseResultMap">
|
||||
SELECT
|
||||
p.*
|
||||
FROM
|
||||
ums_admin_role_relation ar
|
||||
LEFT JOIN ums_role r ON ar.role_id = r.id
|
||||
LEFT JOIN ums_role_permission_relation rp ON r.id = rp.role_id
|
||||
LEFT JOIN ums_permission p ON rp.permission_id = p.id
|
||||
WHERE
|
||||
ar.admin_id = #{adminId}
|
||||
AND p.id IS NOT NULL
|
||||
AND p.id NOT IN (
|
||||
SELECT
|
||||
p.id
|
||||
FROM
|
||||
ums_admin_permission_relation apr
|
||||
LEFT JOIN ums_permission p ON apr.permission_id = p.id
|
||||
WHERE
|
||||
apr.admin_id = #{adminId}
|
||||
AND apr.type = - 1
|
||||
)
|
||||
UNION
|
||||
SELECT
|
||||
p.*
|
||||
FROM
|
||||
ums_admin_permission_relation apr
|
||||
LEFT JOIN ums_permission p ON apr.permission_id = p.id
|
||||
WHERE
|
||||
apr.admin_id = #{adminId}
|
||||
AND apr.type = 1
|
||||
</select>
|
||||
|
||||
<select id="getRoleList" resultMap="com.trade.user.mapper.UmsRoleMapper.BaseResultMap">
|
||||
SELECT
|
||||
r.*
|
||||
FROM
|
||||
ums_admin_role_relation ar
|
||||
LEFT JOIN ums_role r ON ar.role_id = r.id
|
||||
WHERE
|
||||
ar.admin_id = #{adminId}
|
||||
</select>
|
||||
</mapper>
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
<?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.trade.user.mapper.UmsAdminPermissionRelationMapper">
|
||||
|
||||
<resultMap id="BaseResultMap" type="com.trade.user.model.UmsAdminPermissionRelation">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="admin_id" jdbcType="BIGINT" property="adminId" />
|
||||
<result column="permission_id" jdbcType="BIGINT" property="permissionId" />
|
||||
<result column="type" jdbcType="INTEGER" property="type" />
|
||||
</resultMap>
|
||||
|
||||
</mapper>
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
<?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.trade.user.mapper.UmsAdminRoleRelationMapper">
|
||||
|
||||
<resultMap id="BaseResultMap" type="com.trade.user.model.UmsAdminRoleRelation">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="admin_id" jdbcType="BIGINT" property="adminId" />
|
||||
<result column="role_id" jdbcType="BIGINT" property="roleId" />
|
||||
</resultMap>
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,31 @@
|
||||
<?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.trade.user.mapper.UmsPermissionMapper">
|
||||
|
||||
<resultMap id="BaseResultMap" type="com.trade.user.model.UmsPermission">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="pid" jdbcType="BIGINT" property="pid" />
|
||||
<result column="name" jdbc="VARCHAR" property="name" />
|
||||
<result column="value" jdbcType="VARCHAR" property="value" />
|
||||
<result column="icon" jdbcType="VARCHAR" property="icon" />
|
||||
<result column="type" jdbcType="INTEGER" property="type" />
|
||||
<result column="uri" jdbcType="VARCHAR" property="uri" />
|
||||
<result column="status" jdbcType="INTEGER" property="status" />
|
||||
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
|
||||
<result column="sort" jdbcType="INTEGER" property="sort" />
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="treeList" type="com.trade.user.model.UmsPermission" extends="BaseResultMap">
|
||||
<collection property="children" ofType="com.trade.user.model.UmsPermission" select="com.trade.user.mapper.UmsPermissionMapper.treeList" column="id"></collection>
|
||||
</resultMap>
|
||||
|
||||
<select id="treeList" resultMap="treeList">
|
||||
SELECT
|
||||
id,pid,name,value,icon,type,uri,status,create_time,sort
|
||||
FROM
|
||||
ums_permission
|
||||
WHERE
|
||||
pid = #{id}
|
||||
ORDER BY sort DESC
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -0,0 +1,31 @@
|
||||
<?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.trade.user.mapper.UmsResourceMapper">
|
||||
|
||||
<resultMap id="BaseResultMap" type="com.trade.user.model.UmsResource">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
|
||||
<result column="name" jdbcType="VARCHAR" property="name" />
|
||||
<result column="url" jdbcType="VARCHAR" property="url" />
|
||||
<result column="category_id" jdbcType="BIGINT" property="categoryId" />
|
||||
</resultMap>
|
||||
|
||||
<select id="getResourceList" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
ur.id,
|
||||
ur.create_time,
|
||||
ur.name,
|
||||
ur.url,
|
||||
ur.category_id
|
||||
FROM
|
||||
ums_admin_role_relation ar
|
||||
LEFT JOIN ums_role r ON ar.role_id = r.id
|
||||
LEFT JOIN ums_role_resource_relation rrr ON r.id = rrr.role_id
|
||||
LEFT JOIN ums_resource ur ON ur.id = rrr.resource_id
|
||||
WHERE
|
||||
ar.admin_id = #{adminId}
|
||||
AND ur.id IS NOT NULL
|
||||
GROUP BY
|
||||
ur.id
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -0,0 +1,24 @@
|
||||
<?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.trade.user.mapper.UmsRoleMapper">
|
||||
|
||||
<resultMap id="BaseResultMap" type="com.trade.user.model.UmsRole">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="name" jdbcType="VARCHAR" property="name" />
|
||||
<result column="description" jdbcType="VARCHAR" property="description" />
|
||||
<result column="admin_count" jdbcType="INTEGER" property="adminCount" />
|
||||
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
|
||||
<result column="status" jdbcType="INTEGER" property="status" />
|
||||
<result column="sort" jdbcType="INTEGER" property="sort" />
|
||||
</resultMap>
|
||||
|
||||
<select id="getPermissionList" resultMap="com.trade.user.mapper.UmsPermissionMapper.BaseResultMap">
|
||||
SELECT
|
||||
p.*
|
||||
FROM
|
||||
ums_role_permission_relation rp
|
||||
LEFT JOIN ums_permission p ON rp.permission_id = p.id
|
||||
WHERE
|
||||
rp.role_id = #{roleId}
|
||||
</select>
|
||||
</mapper>
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
<?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.trade.user.mapper.UmsRolePermissionRelationMapper">
|
||||
|
||||
<resultMap id="BaseResultMap" type="com.trade.user.model.UmsRolePermissionRelation">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="role_id" jdbcType="BIGINT" property="roleId" />
|
||||
<result column="permission_id" jdbcType="BIGINT" property="permissionId" />
|
||||
</resultMap>
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user