commit init
This commit is contained in:
		| @@ -0,0 +1,28 @@ | ||||
| package com.cnbm.admin.Expression; | ||||
|  | ||||
| import com.cnbm.admin.entity.LoginUser; | ||||
| import com.cnbm.admin.entity.SysMenuEntity; | ||||
| import org.springframework.security.core.Authentication; | ||||
| import org.springframework.security.core.context.SecurityContextHolder; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/13 8:29 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Component("ex") | ||||
| public class SGExpressionRoot { | ||||
|  | ||||
|     public boolean hasAuthority(String authority){ | ||||
|         //获取当前用户的权限 | ||||
|         Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); | ||||
|         LoginUser loginUser = (LoginUser) authentication.getPrincipal(); | ||||
|         List<String> permissions = loginUser.getPermissions(); | ||||
|         //判断用户权限集合中是否存在authority | ||||
|         return permissions.contains(authority); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,16 @@ | ||||
| package com.cnbm.admin.annotation; | ||||
|  | ||||
| import java.lang.annotation.*; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 9:40 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Target(ElementType.METHOD) | ||||
| @Retention(RetentionPolicy.RUNTIME) | ||||
| @Documented | ||||
| public @interface LogOperation { | ||||
|  | ||||
|     String value() default ""; | ||||
| } | ||||
| @@ -0,0 +1,105 @@ | ||||
| package com.cnbm.admin.aspect; | ||||
|  | ||||
| import com.cnbm.admin.annotation.LogOperation; | ||||
| import com.cnbm.admin.entity.LoginUser; | ||||
| import com.cnbm.admin.entity.SysLogOperationEntity; | ||||
| import com.cnbm.admin.enums.OperationStatusEnum; | ||||
| import com.cnbm.admin.service.SysLogOperationService; | ||||
| import com.cnbm.common.utils.HttpContextUtils; | ||||
| import com.cnbm.common.utils.IpUtils; | ||||
| import com.cnbm.common.utils.JsonUtils; | ||||
| import org.aspectj.lang.ProceedingJoinPoint; | ||||
| import org.aspectj.lang.annotation.Around; | ||||
| import org.aspectj.lang.annotation.Aspect; | ||||
| import org.aspectj.lang.annotation.Pointcut; | ||||
| import org.aspectj.lang.reflect.MethodSignature; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.http.HttpHeaders; | ||||
| import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; | ||||
| import org.springframework.security.core.context.SecurityContextHolder; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import javax.servlet.http.HttpServletRequest; | ||||
| import java.lang.reflect.Method; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 9:41 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Aspect | ||||
| @Component | ||||
| public class LogOperationAspect { | ||||
|  | ||||
|     @Autowired | ||||
|     private SysLogOperationService sysLogOperationService; | ||||
|  | ||||
|     @Pointcut("@annotation(com.cnbm.admin.annotation.LogOperation)") | ||||
|     public void logPointCut() { | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Around("logPointCut()") | ||||
|     public Object around(ProceedingJoinPoint point) throws Throwable { | ||||
|         long beginTime = System.currentTimeMillis(); | ||||
|         try { | ||||
|             //执行方法 | ||||
|             Object result = point.proceed(); | ||||
|  | ||||
|             //执行时长(毫秒) | ||||
|             long time = System.currentTimeMillis() - beginTime; | ||||
|             //保存日志 | ||||
|             saveLog(point, time, OperationStatusEnum.SUCCESS.value()); | ||||
|  | ||||
|             return result; | ||||
|         }catch(Exception e) { | ||||
|             //执行时长(毫秒) | ||||
|             long time = System.currentTimeMillis() - beginTime; | ||||
|             //保存日志 | ||||
|             saveLog(point, time, OperationStatusEnum.FAIL.value()); | ||||
|  | ||||
|             throw e; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void saveLog(ProceedingJoinPoint joinPoint, long time, Integer status) throws Exception { | ||||
|         MethodSignature signature = (MethodSignature) joinPoint.getSignature(); | ||||
|         Method method = joinPoint.getTarget().getClass().getDeclaredMethod(signature.getName(), signature.getParameterTypes()); | ||||
|         LogOperation annotation = method.getAnnotation(LogOperation.class); | ||||
|  | ||||
|         SysLogOperationEntity log = new SysLogOperationEntity(); | ||||
|         if(annotation != null){ | ||||
|             //注解上的描述 | ||||
|             log.setOperation(annotation.value()); | ||||
|         } | ||||
|  | ||||
|         //登录用户信息 | ||||
|         UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); | ||||
|         LoginUser loginUser = (LoginUser) authentication.getPrincipal(); | ||||
|         if(loginUser != null){ | ||||
|             log.setCreatorName(loginUser.getUsername()); | ||||
|         } | ||||
|  | ||||
|         log.setStatus(status); | ||||
|         log.setRequestTime((int)time); | ||||
|  | ||||
|         //请求相关信息 | ||||
|         HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); | ||||
|         log.setIp(IpUtils.getIpAddr(request)); | ||||
|         log.setUserAgent(request.getHeader(HttpHeaders.USER_AGENT)); | ||||
|         log.setRequestUri(request.getRequestURI()); | ||||
|         log.setRequestMethod(request.getMethod()); | ||||
|  | ||||
|         //请求参数 | ||||
|         Object[] args = joinPoint.getArgs(); | ||||
|         try{ | ||||
|             String params = JsonUtils.toJsonString(args[0]); | ||||
|             log.setRequestParams(params); | ||||
|         }catch (Exception e){ | ||||
|  | ||||
|         } | ||||
|  | ||||
|         //保存到DB | ||||
|         sysLogOperationService.save(log); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										30
									
								
								ym-admin/src/main/java/com/cnbm/admin/config/CorsConfig.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								ym-admin/src/main/java/com/cnbm/admin/config/CorsConfig.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| package com.cnbm.admin.config; | ||||
|  | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.web.servlet.config.annotation.CorsRegistry; | ||||
| import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/8 10:47 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Configuration | ||||
| public class CorsConfig implements WebMvcConfigurer { | ||||
|  | ||||
|     @Override | ||||
|     public void addCorsMappings(CorsRegistry registry) { | ||||
|         // 设置允许跨域的路径 | ||||
|         registry.addMapping("/**") | ||||
|                 // 设置允许跨域请求的域名 | ||||
|                 .allowedOriginPatterns("*") | ||||
|                 // 是否允许cookie | ||||
|                 .allowCredentials(true) | ||||
|                 // 设置允许的请求方式 | ||||
|                 .allowedMethods("GET", "POST", "DELETE", "PUT") | ||||
|                 // 设置允许的header属性 | ||||
|                 .allowedHeaders("*") | ||||
|                 // 跨域允许时间 | ||||
|                 .maxAge(3600); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,74 @@ | ||||
| package com.cnbm.admin.config; | ||||
|  | ||||
| import com.cnbm.admin.filter.JwtAuthenticationTokenFilter; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.security.authentication.AuthenticationManager; | ||||
| import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; | ||||
| import org.springframework.security.config.annotation.web.builders.HttpSecurity; | ||||
| 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; | ||||
| import org.springframework.security.web.AuthenticationEntryPoint; | ||||
| import org.springframework.security.web.access.AccessDeniedHandler; | ||||
| import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/8 1:51 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Configuration | ||||
| @EnableGlobalMethodSecurity(prePostEnabled = true) | ||||
| public class SecurityConfig extends WebSecurityConfigurerAdapter { | ||||
|  | ||||
|     //创建BCryptPasswordEncoder注入容器 | ||||
|     @Bean | ||||
|     public PasswordEncoder passwordEncoder(){ | ||||
|         return new BCryptPasswordEncoder(); | ||||
|     } | ||||
|     @Autowired | ||||
|     private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter; | ||||
|  | ||||
|  | ||||
|     @Autowired | ||||
|     private AuthenticationEntryPoint authenticationEntryPoint; | ||||
|  | ||||
|     @Autowired | ||||
|     private AccessDeniedHandler accessDeniedHandler; | ||||
|  | ||||
|     @Override | ||||
|     protected void configure(HttpSecurity http) throws Exception { | ||||
|         http | ||||
|                 //关闭csrf | ||||
|                 .csrf().disable() | ||||
|                 //不通过Session获取SecurityContext | ||||
|                 .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) | ||||
|                 .and() | ||||
|                 .authorizeRequests() | ||||
|                 // 对于登录接口 允许匿名访问 | ||||
|                 .antMatchers("/login").anonymous() | ||||
| //                .antMatchers("/testCors").hasAuthority("system:dept:list222") | ||||
|                 // 除上面外的所有请求全部需要鉴权认证 | ||||
|                 .anyRequest().authenticated(); | ||||
|  | ||||
|         //添加过滤器 | ||||
|         http.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); | ||||
|  | ||||
|         //配置异常处理器 | ||||
|         http.exceptionHandling() | ||||
|                 //配置认证失败处理器 | ||||
|                 .authenticationEntryPoint(authenticationEntryPoint) | ||||
|                 .accessDeniedHandler(accessDeniedHandler); | ||||
|  | ||||
|         //允许跨域 | ||||
|         http.cors(); | ||||
|     } | ||||
|  | ||||
|     @Bean | ||||
|     @Override | ||||
|     public AuthenticationManager authenticationManagerBean() throws Exception { | ||||
|         return super.authenticationManagerBean(); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,43 @@ | ||||
| package com.cnbm.admin.controller; | ||||
|  | ||||
| import com.cnbm.admin.params.LoginParam; | ||||
| import com.cnbm.admin.service.LoginService; | ||||
| import com.cnbm.admin.utils.ResponseResult; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiOperation; | ||||
| import lombok.extern.log4j.Log4j2; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.security.access.prepost.PreAuthorize; | ||||
| import org.springframework.web.bind.annotation.PostMapping; | ||||
| import org.springframework.web.bind.annotation.RequestBody; | ||||
| import org.springframework.web.bind.annotation.RequestMapping; | ||||
| import org.springframework.web.bind.annotation.RestController; | ||||
|  | ||||
| import javax.servlet.http.HttpServletRequest; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/7 3:55 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @RestController | ||||
| @Api(tags="登录管理") | ||||
| @Log4j2 | ||||
| public class LoginController { | ||||
|  | ||||
|     @Autowired | ||||
|     private LoginService loginService; | ||||
|  | ||||
|     @RequestMapping("/hello") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:user:page')") | ||||
|     public String hello(){ | ||||
|         log.info("hello"); | ||||
|         return "hello"; | ||||
|     } | ||||
|  | ||||
|     @PostMapping("/login") | ||||
|     @ApiOperation(value = "登录") | ||||
|     public ResponseResult login(HttpServletRequest request, @RequestBody LoginParam loginParam) { | ||||
|         return loginService.login(request,loginParam); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,90 @@ | ||||
| package com.cnbm.admin.controller; | ||||
|  | ||||
| import com.cnbm.admin.annotation.LogOperation; | ||||
| import com.cnbm.admin.dto.SysDeptDTO; | ||||
| import com.cnbm.admin.service.SysDeptService; | ||||
| import com.cnbm.common.utils.Result; | ||||
| import com.cnbm.common.validator.AssertUtils; | ||||
| import com.cnbm.common.validator.ValidatorUtils; | ||||
| import com.cnbm.common.validator.group.AddGroup; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import com.cnbm.common.validator.group.UpdateGroup; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiOperation; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.security.access.prepost.PreAuthorize; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
|  | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:40 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("/sys/dept") | ||||
| @Api(tags="部门管理") | ||||
| public class SysDeptController { | ||||
|     @Autowired | ||||
|     private SysDeptService sysDeptService; | ||||
|  | ||||
|     @GetMapping("list") | ||||
|     @ApiOperation("列表") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:dept:list')") | ||||
|     public Result<List<SysDeptDTO>> list(){ | ||||
|         List<SysDeptDTO> list = sysDeptService.list(new HashMap<>(1)); | ||||
|  | ||||
|         return new Result<List<SysDeptDTO>>().ok(list); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("{id}") | ||||
|     @ApiOperation("信息") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:dept:info')") | ||||
|     public Result<SysDeptDTO> get(@PathVariable("id") Long id){ | ||||
|         SysDeptDTO data = sysDeptService.get(id); | ||||
|  | ||||
|         return new Result<SysDeptDTO>().ok(data); | ||||
|     } | ||||
|  | ||||
|     @PostMapping | ||||
|     @ApiOperation("保存") | ||||
|     @LogOperation("保存") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:dept:save')") | ||||
|     public Result save(@RequestBody SysDeptDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); | ||||
|  | ||||
|         sysDeptService.save(dto); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @PutMapping | ||||
|     @ApiOperation("修改") | ||||
|     @LogOperation("修改") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:dept:update')") | ||||
|     public Result update(@RequestBody SysDeptDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); | ||||
|  | ||||
|         sysDeptService.update(dto); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @DeleteMapping("{id}") | ||||
|     @ApiOperation("删除") | ||||
|     @LogOperation("删除") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:dept:delete')") | ||||
|     public Result delete(@PathVariable("id") Long id){ | ||||
|         //效验数据 | ||||
|         AssertUtils.isNull(id, "id"); | ||||
|  | ||||
|         sysDeptService.delete(id); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,102 @@ | ||||
| package com.cnbm.admin.controller; | ||||
|  | ||||
| import com.cnbm.admin.annotation.LogOperation; | ||||
| import com.cnbm.admin.dto.SysDictDataDTO; | ||||
| import com.cnbm.admin.service.SysDictDataService; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.utils.Result; | ||||
| import com.cnbm.common.validator.AssertUtils; | ||||
| import com.cnbm.common.validator.ValidatorUtils; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import com.cnbm.common.validator.group.UpdateGroup; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | ||||
| import io.swagger.annotations.ApiImplicitParams; | ||||
| import io.swagger.annotations.ApiOperation; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.security.access.prepost.PreAuthorize; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
| import springfox.documentation.annotations.ApiIgnore; | ||||
|  | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:55 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("sys/dict/data") | ||||
| @Api(tags="字典数据") | ||||
| public class SysDictDataController { | ||||
|     @Autowired | ||||
|     private SysDictDataService sysDictDataService; | ||||
|  | ||||
|     @GetMapping("page") | ||||
|     @ApiOperation("字典数据") | ||||
|     @ApiImplicitParams({ | ||||
|             @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") , | ||||
|             @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") , | ||||
|             @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") , | ||||
|             @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") , | ||||
|             @ApiImplicitParam(name = "dictLabel", value = "字典标签", paramType = "query", dataType="String"), | ||||
|             @ApiImplicitParam(name = "dictValue", value = "字典值", paramType = "query", dataType="String") | ||||
|     }) | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:dept:page')") | ||||
|     public Result<PageData<SysDictDataDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){ | ||||
|         //字典类型 | ||||
|         PageData<SysDictDataDTO> page = sysDictDataService.page(params); | ||||
|  | ||||
|         return new Result<PageData<SysDictDataDTO>>().ok(page); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("{id}") | ||||
|     @ApiOperation("信息") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:dict:info')") | ||||
|     public Result<SysDictDataDTO> get(@PathVariable("id") Long id){ | ||||
|         SysDictDataDTO data = sysDictDataService.get(id); | ||||
|  | ||||
|         return new Result<SysDictDataDTO>().ok(data); | ||||
|     } | ||||
|  | ||||
|     @PostMapping | ||||
|     @ApiOperation("保存") | ||||
|     @LogOperation("保存") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:dict:save')") | ||||
|     public Result save(@RequestBody SysDictDataDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, DefaultGroup.class); | ||||
|  | ||||
|         sysDictDataService.save(dto); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @PutMapping | ||||
|     @ApiOperation("修改") | ||||
|     @LogOperation("修改") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:dict:update')") | ||||
|     public Result update(@RequestBody SysDictDataDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); | ||||
|  | ||||
|         sysDictDataService.update(dto); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @DeleteMapping | ||||
|     @ApiOperation("删除") | ||||
|     @LogOperation("删除") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:dict:delete')") | ||||
|     public Result delete(@RequestBody Long[] ids){ | ||||
|         //效验数据 | ||||
|         AssertUtils.isArrayEmpty(ids, "id"); | ||||
|  | ||||
|         sysDictDataService.delete(ids); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,112 @@ | ||||
| package com.cnbm.admin.controller; | ||||
|  | ||||
| import com.cnbm.admin.annotation.LogOperation; | ||||
| import com.cnbm.admin.dto.SysDictTypeDTO; | ||||
| import com.cnbm.admin.entity.DictType; | ||||
| import com.cnbm.admin.service.SysDictTypeService; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.utils.Result; | ||||
| import com.cnbm.common.validator.AssertUtils; | ||||
| import com.cnbm.common.validator.ValidatorUtils; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import com.cnbm.common.validator.group.UpdateGroup; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | ||||
| import io.swagger.annotations.ApiImplicitParams; | ||||
| import io.swagger.annotations.ApiOperation; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.security.access.prepost.PreAuthorize; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
| import springfox.documentation.annotations.ApiIgnore; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:55 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("sys/dict/type") | ||||
| @Api(tags="字典类型") | ||||
| public class SysDictTypeController { | ||||
|     @Autowired | ||||
|     private SysDictTypeService sysDictTypeService; | ||||
|  | ||||
|     @GetMapping("page") | ||||
|     @ApiOperation("字典类型") | ||||
|     @ApiImplicitParams({ | ||||
|             @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") , | ||||
|             @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") , | ||||
|             @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") , | ||||
|             @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") , | ||||
|             @ApiImplicitParam(name = "dictType", value = "字典类型", paramType = "query", dataType="String"), | ||||
|             @ApiImplicitParam(name = "dictName", value = "字典名称", paramType = "query", dataType="String") | ||||
|     }) | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:dict:page')") | ||||
|     public Result<PageData<SysDictTypeDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){ | ||||
|         //字典类型 | ||||
|         PageData<SysDictTypeDTO> page = sysDictTypeService.page(params); | ||||
|  | ||||
|         return new Result<PageData<SysDictTypeDTO>>().ok(page); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("{id}") | ||||
|     @ApiOperation("信息") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:dict:info')") | ||||
|     public Result<SysDictTypeDTO> get(@PathVariable("id") Long id){ | ||||
|         SysDictTypeDTO data = sysDictTypeService.get(id); | ||||
|  | ||||
|         return new Result<SysDictTypeDTO>().ok(data); | ||||
|     } | ||||
|  | ||||
|     @PostMapping | ||||
|     @ApiOperation("保存") | ||||
|     @LogOperation("保存") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:dict:save')") | ||||
|     public Result save(@RequestBody SysDictTypeDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, DefaultGroup.class); | ||||
|  | ||||
|         sysDictTypeService.save(dto); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @PutMapping | ||||
|     @ApiOperation("修改") | ||||
|     @LogOperation("修改") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:dict:update')") | ||||
|     public Result update(@RequestBody SysDictTypeDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); | ||||
|  | ||||
|         sysDictTypeService.update(dto); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @DeleteMapping | ||||
|     @ApiOperation("删除") | ||||
|     @LogOperation("删除") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:dict:delete')") | ||||
|     public Result delete(@RequestBody Long[] ids){ | ||||
|         //效验数据 | ||||
|         AssertUtils.isArrayEmpty(ids, "id"); | ||||
|  | ||||
|         sysDictTypeService.delete(ids); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("all") | ||||
|     @ApiOperation("所有字典数据") | ||||
|     public Result<List<DictType>> all(){ | ||||
|         List<DictType> list = sysDictTypeService.getAllList(); | ||||
|  | ||||
|         return new Result<List<DictType>>().ok(list); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,61 @@ | ||||
| package com.cnbm.admin.controller; | ||||
|  | ||||
| import com.cnbm.admin.annotation.LogOperation; | ||||
| import com.cnbm.admin.dto.SysLogErrorDTO; | ||||
| import com.cnbm.admin.execl.SysLogErrorExcel; | ||||
| import com.cnbm.admin.service.SysLogErrorService; | ||||
| import com.cnbm.common.utils.ExcelUtils; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.utils.Result; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | ||||
| import io.swagger.annotations.ApiImplicitParams; | ||||
| import io.swagger.annotations.ApiOperation; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.web.bind.annotation.GetMapping; | ||||
| import org.springframework.web.bind.annotation.RequestMapping; | ||||
| import org.springframework.web.bind.annotation.RequestParam; | ||||
| import org.springframework.web.bind.annotation.RestController; | ||||
| import springfox.documentation.annotations.ApiIgnore; | ||||
|  | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:06 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("sys/log/error") | ||||
| @Api(tags="异常日志") | ||||
| public class SysLogErrorController { | ||||
|     @Autowired | ||||
|     private SysLogErrorService sysLogErrorService; | ||||
|  | ||||
|     @GetMapping("page") | ||||
|     @ApiOperation("分页") | ||||
|     @ApiImplicitParams({ | ||||
|             @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") , | ||||
|             @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") , | ||||
|             @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") , | ||||
|             @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") | ||||
|     }) | ||||
|     public Result<PageData<SysLogErrorDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){ | ||||
|         PageData<SysLogErrorDTO> page = sysLogErrorService.page(params); | ||||
|  | ||||
|         return new Result<PageData<SysLogErrorDTO>>().ok(page); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("export") | ||||
|     @ApiOperation("导出") | ||||
|     @LogOperation("导出") | ||||
|     public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { | ||||
|         List<SysLogErrorDTO> list = sysLogErrorService.list(params); | ||||
|  | ||||
|         ExcelUtils.exportExcelToTarget(response, null, list, SysLogErrorExcel.class); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,62 @@ | ||||
| package com.cnbm.admin.controller; | ||||
|  | ||||
| import com.cnbm.admin.annotation.LogOperation; | ||||
| import com.cnbm.admin.dto.SysLogOperationDTO; | ||||
| import com.cnbm.admin.execl.SysLogOperationExcel; | ||||
| import com.cnbm.admin.service.SysLogOperationService; | ||||
| import com.cnbm.common.utils.ExcelUtils; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.utils.Result; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | ||||
| import io.swagger.annotations.ApiImplicitParams; | ||||
| import io.swagger.annotations.ApiOperation; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.web.bind.annotation.GetMapping; | ||||
| import org.springframework.web.bind.annotation.RequestMapping; | ||||
| import org.springframework.web.bind.annotation.RequestParam; | ||||
| import org.springframework.web.bind.annotation.RestController; | ||||
| import springfox.documentation.annotations.ApiIgnore; | ||||
|  | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 9:51 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("sys/log/operation") | ||||
| @Api(tags="操作日志") | ||||
| public class SysLogOperationController { | ||||
|     @Autowired | ||||
|     private SysLogOperationService sysLogOperationService; | ||||
|  | ||||
|     @GetMapping("page") | ||||
|     @ApiOperation("分页") | ||||
|     @ApiImplicitParams({ | ||||
|             @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") , | ||||
|             @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") , | ||||
|             @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") , | ||||
|             @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") , | ||||
|             @ApiImplicitParam(name = "status", value = "状态  0:失败    1:成功", paramType = "query", dataType="int") | ||||
|     }) | ||||
|     public Result<PageData<SysLogOperationDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){ | ||||
|         PageData<SysLogOperationDTO> page = sysLogOperationService.page(params); | ||||
|  | ||||
|         return new Result<PageData<SysLogOperationDTO>>().ok(page); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("export") | ||||
|     @ApiOperation("导出") | ||||
|     @LogOperation("导出") | ||||
|     public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { | ||||
|         List<SysLogOperationDTO> list = sysLogOperationService.list(params); | ||||
|  | ||||
|         ExcelUtils.exportExcelToTarget(response, null, list, SysLogOperationExcel.class); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,136 @@ | ||||
| package com.cnbm.admin.controller; | ||||
|  | ||||
| import com.cnbm.admin.annotation.LogOperation; | ||||
| import com.cnbm.admin.dto.SysMenuDTO; | ||||
| import com.cnbm.admin.entity.LoginUser; | ||||
| import com.cnbm.admin.entity.SysUserEntity; | ||||
| import com.cnbm.admin.enums.MenuTypeEnum; | ||||
| import com.cnbm.admin.service.SysMenuService; | ||||
| import com.cnbm.common.exception.ErrorCode; | ||||
| import com.cnbm.common.utils.Result; | ||||
| import com.cnbm.common.validator.AssertUtils; | ||||
| import com.cnbm.common.validator.ValidatorUtils; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | ||||
| import io.swagger.annotations.ApiOperation; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.security.access.prepost.PreAuthorize; | ||||
| import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; | ||||
| import org.springframework.security.core.context.SecurityContextHolder; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
|  | ||||
| import java.util.HashSet; | ||||
| import java.util.List; | ||||
| import java.util.Set; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:32 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("/sys/menu") | ||||
| @Api(tags="菜单管理") | ||||
| public class SysMenuController { | ||||
|     @Autowired | ||||
|     private SysMenuService sysMenuService; | ||||
|  | ||||
|  | ||||
|     @GetMapping("nav") | ||||
|     @ApiOperation("导航") | ||||
|     public Result<List<SysMenuDTO>> nav(){ | ||||
|         UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); | ||||
|         LoginUser loginUser = (LoginUser) authentication.getPrincipal(); | ||||
|         SysUserEntity user = loginUser.getSysUserEntity(); | ||||
|         List<SysMenuDTO> list = sysMenuService.getUserMenuList(user, MenuTypeEnum.MENU.value()); | ||||
|  | ||||
|         return new Result<List<SysMenuDTO>>().ok(list); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("permissions") | ||||
|     @ApiOperation("权限标识") | ||||
|     public Result<Set<String>> permissions(){ | ||||
|         UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); | ||||
|         LoginUser loginUser = (LoginUser) authentication.getPrincipal(); | ||||
|         SysUserEntity user = loginUser.getSysUserEntity(); | ||||
|         Set<String> set = sysMenuService.getUserPermissions(user); | ||||
|         return new Result<Set<String>>().ok(set); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("list") | ||||
|     @ApiOperation("列表") | ||||
|     @ApiImplicitParam(name = "type", value = "菜单类型 0:菜单 1:按钮  null:全部", paramType = "query", dataType="int") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:menu:list')") | ||||
|     public Result<List<SysMenuDTO>> list(Integer type){ | ||||
|         List<SysMenuDTO> list = sysMenuService.getAllMenuList(type); | ||||
|  | ||||
|         return new Result<List<SysMenuDTO>>().ok(list); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("{id}") | ||||
|     @ApiOperation("信息") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:menu:info')") | ||||
|     public Result<SysMenuDTO> get(@PathVariable("id") Long id){ | ||||
|         SysMenuDTO data = sysMenuService.get(id); | ||||
|  | ||||
|         return new Result<SysMenuDTO>().ok(data); | ||||
|     } | ||||
|  | ||||
|     @PostMapping | ||||
|     @ApiOperation("保存") | ||||
|     @LogOperation("保存") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:menu:save')") | ||||
|     public Result save(@RequestBody SysMenuDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, DefaultGroup.class); | ||||
|  | ||||
|         sysMenuService.save(dto); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @PutMapping | ||||
|     @ApiOperation("修改") | ||||
|     @LogOperation("修改") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:menu:update')") | ||||
|     public Result update(@RequestBody SysMenuDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, DefaultGroup.class); | ||||
|  | ||||
|         sysMenuService.update(dto); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @DeleteMapping("{id}") | ||||
|     @ApiOperation("删除") | ||||
|     @LogOperation("删除") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:menu:delete')") | ||||
|     public Result delete(@PathVariable("id") Long id){ | ||||
|         //效验数据 | ||||
|         AssertUtils.isNull(id, "id"); | ||||
|  | ||||
|         //判断是否有子菜单或按钮 | ||||
|         List<SysMenuDTO> list = sysMenuService.getListPid(id); | ||||
|         if(list.size() > 0){ | ||||
|             return new Result().error(ErrorCode.SUB_MENU_EXIST); | ||||
|         } | ||||
|  | ||||
|         sysMenuService.delete(id); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("select") | ||||
|     @ApiOperation("角色菜单权限") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:menu:select')") | ||||
|     public Result<List<SysMenuDTO>> select(){ | ||||
|         UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); | ||||
|         LoginUser loginUser = (LoginUser) authentication.getPrincipal(); | ||||
|         SysUserEntity user = loginUser.getSysUserEntity(); | ||||
|         List<SysMenuDTO> list = sysMenuService.getUserMenuList(user, null); | ||||
|  | ||||
|         return new Result<List<SysMenuDTO>>().ok(list); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,116 @@ | ||||
| package com.cnbm.admin.controller; | ||||
|  | ||||
| import com.cnbm.admin.annotation.LogOperation; | ||||
| import com.cnbm.admin.dto.SysParamsDTO; | ||||
| import com.cnbm.admin.execl.SysParamsExcel; | ||||
| import com.cnbm.admin.service.SysParamsService; | ||||
| import com.cnbm.common.utils.ExcelUtils; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.utils.Result; | ||||
| import com.cnbm.common.validator.AssertUtils; | ||||
| import com.cnbm.common.validator.ValidatorUtils; | ||||
| import com.cnbm.common.validator.group.AddGroup; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import com.cnbm.common.validator.group.UpdateGroup; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | ||||
| import io.swagger.annotations.ApiImplicitParams; | ||||
| import io.swagger.annotations.ApiOperation; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.security.access.prepost.PreAuthorize; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
| import springfox.documentation.annotations.ApiIgnore; | ||||
|  | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:20 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("sys/params") | ||||
| @Api(tags="参数管理") | ||||
| public class SysParamsController { | ||||
|     @Autowired | ||||
|     private SysParamsService sysParamsService; | ||||
|  | ||||
|     @GetMapping("page") | ||||
|     @ApiOperation("分页") | ||||
|     @ApiImplicitParams({ | ||||
|             @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") , | ||||
|             @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") , | ||||
|             @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") , | ||||
|             @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") , | ||||
|             @ApiImplicitParam(name = "paramCode", value = "参数编码", paramType = "query", dataType="String") | ||||
|     }) | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:params:page')") | ||||
|     public Result<PageData<SysParamsDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){ | ||||
|         PageData<SysParamsDTO> page = sysParamsService.page(params); | ||||
|  | ||||
|         return new Result<PageData<SysParamsDTO>>().ok(page); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("{id}") | ||||
|     @ApiOperation("信息") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:params:info')") | ||||
|     public Result<SysParamsDTO> get(@PathVariable("id") Long id){ | ||||
|         SysParamsDTO data = sysParamsService.get(id); | ||||
|  | ||||
|         return new Result<SysParamsDTO>().ok(data); | ||||
|     } | ||||
|  | ||||
|     @PostMapping | ||||
|     @ApiOperation("保存") | ||||
|     @LogOperation("保存") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:params:save')") | ||||
|     public Result save(@RequestBody SysParamsDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); | ||||
|  | ||||
|         sysParamsService.save(dto); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @PutMapping | ||||
|     @ApiOperation("修改") | ||||
|     @LogOperation("修改") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:params:update')") | ||||
|     public Result update(@RequestBody SysParamsDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); | ||||
|  | ||||
|         sysParamsService.update(dto); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @DeleteMapping | ||||
|     @ApiOperation("删除") | ||||
|     @LogOperation("删除") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:params:delete')") | ||||
|     public Result delete(@RequestBody Long[] ids){ | ||||
|         //效验数据 | ||||
|         AssertUtils.isArrayEmpty(ids, "id"); | ||||
|  | ||||
|         sysParamsService.delete(ids); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("export") | ||||
|     @ApiOperation("导出") | ||||
|     @LogOperation("导出") | ||||
|     @ApiImplicitParam(name = "paramCode", value = "参数编码", paramType = "query", dataType="String") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:params:export')") | ||||
|     public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { | ||||
|         List<SysParamsDTO> list = sysParamsService.list(params); | ||||
|  | ||||
|         ExcelUtils.exportExcelToTarget(response, null, list, SysParamsExcel.class); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,125 @@ | ||||
| package com.cnbm.admin.controller; | ||||
|  | ||||
| import com.cnbm.admin.annotation.LogOperation; | ||||
| import com.cnbm.admin.dto.SysRoleDTO; | ||||
| import com.cnbm.admin.service.SysRoleDataScopeService; | ||||
| import com.cnbm.admin.service.SysRoleMenuService; | ||||
| import com.cnbm.admin.service.SysRoleService; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.utils.Result; | ||||
| import com.cnbm.common.validator.AssertUtils; | ||||
| import com.cnbm.common.validator.ValidatorUtils; | ||||
| import com.cnbm.common.validator.group.AddGroup; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import com.cnbm.common.validator.group.UpdateGroup; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | ||||
| import io.swagger.annotations.ApiImplicitParams; | ||||
| import io.swagger.annotations.ApiOperation; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.security.access.prepost.PreAuthorize; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
| import springfox.documentation.annotations.ApiIgnore; | ||||
|  | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:04 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("/sys/role") | ||||
| @Api(tags="角色管理") | ||||
| public class SysRoleController { | ||||
|     @Autowired | ||||
|     private SysRoleService sysRoleService; | ||||
|     @Autowired | ||||
|     private SysRoleMenuService sysRoleMenuService; | ||||
|     @Autowired | ||||
|     private SysRoleDataScopeService sysRoleDataScopeService; | ||||
|  | ||||
|     @GetMapping("page") | ||||
|     @ApiOperation("分页") | ||||
|     @ApiImplicitParams({ | ||||
|             @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") , | ||||
|             @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") , | ||||
|             @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") , | ||||
|             @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") , | ||||
|             @ApiImplicitParam(name = "name", value = "角色名", paramType = "query", dataType="String") | ||||
|     }) | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:role:page')") | ||||
|     public Result<PageData<SysRoleDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){ | ||||
|         PageData<SysRoleDTO> page = sysRoleService.page(params); | ||||
|  | ||||
|         return new Result<PageData<SysRoleDTO>>().ok(page); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("list") | ||||
|     @ApiOperation("列表") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:role:list')") | ||||
|     public Result<List<SysRoleDTO>> list(){ | ||||
|         List<SysRoleDTO> data = sysRoleService.list(new HashMap<>(1)); | ||||
|  | ||||
|         return new Result<List<SysRoleDTO>>().ok(data); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("{id}") | ||||
|     @ApiOperation("信息") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:role:info')") | ||||
|     public Result<SysRoleDTO> get(@PathVariable("id") Long id){ | ||||
|         SysRoleDTO data = sysRoleService.get(id); | ||||
|  | ||||
|         //查询角色对应的菜单 | ||||
|         List<Long> menuIdList = sysRoleMenuService.getMenuIdList(id); | ||||
|         data.setMenuIdList(menuIdList); | ||||
|  | ||||
|         //查询角色对应的数据权限 | ||||
|         List<Long> deptIdList = sysRoleDataScopeService.getDeptIdList(id); | ||||
|         data.setDeptIdList(deptIdList); | ||||
|  | ||||
|         return new Result<SysRoleDTO>().ok(data); | ||||
|     } | ||||
|  | ||||
|     @PostMapping | ||||
|     @ApiOperation("保存") | ||||
|     @LogOperation("保存") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:role:save')") | ||||
|     public Result save(@RequestBody SysRoleDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); | ||||
|  | ||||
|         sysRoleService.save(dto); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @PutMapping | ||||
|     @ApiOperation("修改") | ||||
|     @LogOperation("修改") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:role:update')") | ||||
|     public Result update(@RequestBody SysRoleDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); | ||||
|  | ||||
|         sysRoleService.update(dto); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @DeleteMapping | ||||
|     @ApiOperation("删除") | ||||
|     @LogOperation("删除") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:role:delete')") | ||||
|     public Result delete(@RequestBody Long[] ids){ | ||||
|         //效验数据 | ||||
|         AssertUtils.isArrayEmpty(ids, "id"); | ||||
|  | ||||
|         sysRoleService.delete(ids); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,163 @@ | ||||
| package com.cnbm.admin.controller; | ||||
|  | ||||
| import com.cnbm.admin.annotation.LogOperation; | ||||
| import com.cnbm.admin.dto.PasswordDTO; | ||||
| import com.cnbm.admin.dto.SysUserDTO; | ||||
| import com.cnbm.admin.entity.LoginUser; | ||||
| import com.cnbm.admin.entity.SysUserEntity; | ||||
| import com.cnbm.admin.execl.SysUserExcel; | ||||
| import com.cnbm.admin.service.SysRoleUserService; | ||||
| import com.cnbm.admin.service.SysUserService; | ||||
| import com.cnbm.common.utils.ExcelUtils; | ||||
| import com.cnbm.admin.utils.PasswordUtils; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.exception.ErrorCode; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.utils.ConvertUtils; | ||||
| import com.cnbm.common.utils.Result; | ||||
| import com.cnbm.common.validator.AssertUtils; | ||||
| import com.cnbm.common.validator.ValidatorUtils; | ||||
| import com.cnbm.common.validator.group.AddGroup; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import com.cnbm.common.validator.group.UpdateGroup; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | ||||
| import io.swagger.annotations.ApiImplicitParams; | ||||
| import io.swagger.annotations.ApiOperation; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.security.access.prepost.PreAuthorize; | ||||
| import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; | ||||
| import org.springframework.security.core.context.SecurityContextHolder; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
| import springfox.documentation.annotations.ApiIgnore; | ||||
|  | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:23 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @RestController | ||||
| @RequestMapping("/sys/user") | ||||
| @Api(tags="用户管理") | ||||
| public class SysUserController { | ||||
|     @Autowired | ||||
|     private SysUserService sysUserService; | ||||
|     @Autowired | ||||
|     private SysRoleUserService sysRoleUserService; | ||||
|  | ||||
|     @GetMapping("page") | ||||
|     @ApiOperation("分页") | ||||
|     @ApiImplicitParams({ | ||||
|             @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") , | ||||
|             @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") , | ||||
|             @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") , | ||||
|             @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") , | ||||
|             @ApiImplicitParam(name = "username", value = "用户名", paramType = "query", dataType="String"), | ||||
|             @ApiImplicitParam(name = "gender", value = "性别", paramType = "query", dataType="String"), | ||||
|             @ApiImplicitParam(name = "deptId", value = "部门ID", paramType = "query", dataType="String") | ||||
|     }) | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:user:page')") | ||||
|     public Result<PageData<SysUserDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){ | ||||
|         PageData<SysUserDTO> page = sysUserService.page(params); | ||||
|  | ||||
|         return new Result<PageData<SysUserDTO>>().ok(page); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("{id}") | ||||
|     @ApiOperation("信息") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:user:info')") | ||||
|     public Result<SysUserDTO> get(@PathVariable("id") Long id){ | ||||
|         SysUserDTO data = sysUserService.get(id); | ||||
|  | ||||
|         //用户角色列表 | ||||
|         List<Long> roleIdList = sysRoleUserService.getRoleIdList(id); | ||||
|         data.setRoleIdList(roleIdList); | ||||
|  | ||||
|         return new Result<SysUserDTO>().ok(data); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("info") | ||||
|     @ApiOperation("登录用户信息") | ||||
|     public Result<SysUserDTO> info(){ | ||||
|         UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); | ||||
|         LoginUser loginUser = (LoginUser) authentication.getPrincipal(); | ||||
|         SysUserDTO data = ConvertUtils.sourceToTarget(loginUser.getSysUserEntity(), SysUserDTO.class); | ||||
|         return new Result<SysUserDTO>().ok(data); | ||||
|     } | ||||
|  | ||||
|     @PutMapping("password") | ||||
|     @ApiOperation("修改密码") | ||||
|     @LogOperation("修改密码") | ||||
|     public Result password(@RequestBody PasswordDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto); | ||||
|  | ||||
|         UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); | ||||
|         LoginUser loginUser = (LoginUser) authentication.getPrincipal(); | ||||
|         SysUserEntity user = loginUser.getSysUserEntity(); | ||||
|  | ||||
|         //原密码不正确 | ||||
|         if(!PasswordUtils.matches(dto.getPassword(), user.getPassword())){ | ||||
|             return new Result().error(ErrorCode.PASSWORD_ERROR); | ||||
|         } | ||||
|  | ||||
|         sysUserService.updatePassword(user.getId(), dto.getNewPassword()); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @PostMapping | ||||
|     @ApiOperation("保存") | ||||
|     @LogOperation("保存") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:user:save')") | ||||
|     public Result save(@RequestBody SysUserDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); | ||||
|  | ||||
|         sysUserService.save(dto); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @PutMapping | ||||
|     @ApiOperation("修改") | ||||
|     @LogOperation("修改") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:user:update')") | ||||
|     public Result update(@RequestBody SysUserDTO dto){ | ||||
|         //效验数据 | ||||
|         ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); | ||||
|  | ||||
|         sysUserService.update(dto); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @DeleteMapping | ||||
|     @ApiOperation("删除") | ||||
|     @LogOperation("删除") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:user:delete')") | ||||
|     public Result delete(@RequestBody Long[] ids){ | ||||
|         //效验数据 | ||||
|         AssertUtils.isArrayEmpty(ids, "id"); | ||||
|  | ||||
|         sysUserService.deleteBatchIds(Arrays.asList(ids)); | ||||
|  | ||||
|         return new Result(); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("export") | ||||
|     @ApiOperation("导出") | ||||
|     @LogOperation("导出") | ||||
|     @ApiImplicitParam(name = "username", value = "用户名", paramType = "query", dataType="String") | ||||
|     @PreAuthorize("@ex.hasAuthority('sys:user:export')") | ||||
|     public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { | ||||
|         List<SysUserDTO> list = sysUserService.list(params); | ||||
|  | ||||
|         ExcelUtils.exportExcelToTarget(response, null, list, SysUserExcel.class); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										14
									
								
								ym-admin/src/main/java/com/cnbm/admin/dao/LoginDao.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								ym-admin/src/main/java/com/cnbm/admin/dao/LoginDao.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| package com.cnbm.admin.dao; | ||||
|  | ||||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||||
| import com.cnbm.admin.entity.SysUserEntity; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/8 9:20 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface LoginDao extends BaseMapper<SysUserEntity> { | ||||
| } | ||||
							
								
								
									
										33
									
								
								ym-admin/src/main/java/com/cnbm/admin/dao/SysDeptDao.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								ym-admin/src/main/java/com/cnbm/admin/dao/SysDeptDao.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| package com.cnbm.admin.dao; | ||||
|  | ||||
| import com.cnbm.admin.entity.SysDeptEntity; | ||||
| import com.cnbm.common.dao.BaseDao; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:40 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface SysDeptDao extends BaseDao<SysDeptEntity> { | ||||
|  | ||||
|     List<SysDeptEntity> getList(Map<String, Object> params); | ||||
|  | ||||
|     SysDeptEntity getById(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 获取所有部门的id、pid列表 | ||||
|      */ | ||||
|     List<SysDeptEntity> getIdAndPidList(); | ||||
|  | ||||
|     /** | ||||
|      * 根据部门ID,获取所有子部门ID列表 | ||||
|      * @param id   部门ID | ||||
|      */ | ||||
|     List<Long> getSubDeptIdList(String id); | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,22 @@ | ||||
| package com.cnbm.admin.dao; | ||||
|  | ||||
| import com.cnbm.admin.entity.DictData; | ||||
| import com.cnbm.admin.entity.SysDictDataEntity; | ||||
| import com.cnbm.common.dao.BaseDao; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:56 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface SysDictDataDao extends BaseDao<SysDictDataEntity> { | ||||
|  | ||||
|     /** | ||||
|      * 字典数据列表 | ||||
|      */ | ||||
|     List<DictData> getDictDataList(); | ||||
| } | ||||
| @@ -0,0 +1,23 @@ | ||||
| package com.cnbm.admin.dao; | ||||
|  | ||||
| import com.cnbm.admin.entity.DictType; | ||||
| import com.cnbm.admin.entity.SysDictTypeEntity; | ||||
| import com.cnbm.common.dao.BaseDao; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:56 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface SysDictTypeDao extends BaseDao<SysDictTypeEntity> { | ||||
|  | ||||
|     /** | ||||
|      * 字典类型列表 | ||||
|      */ | ||||
|     List<DictType> getDictTypeList(); | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,15 @@ | ||||
| package com.cnbm.admin.dao; | ||||
|  | ||||
| import com.cnbm.admin.entity.SysLogErrorEntity; | ||||
| import com.cnbm.common.dao.BaseDao; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:07 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface SysLogErrorDao extends BaseDao<SysLogErrorEntity> { | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,15 @@ | ||||
| package com.cnbm.admin.dao; | ||||
|  | ||||
| import com.cnbm.admin.entity.SysLogOperationEntity; | ||||
| import com.cnbm.common.dao.BaseDao; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 9:54 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface SysLogOperationDao extends BaseDao<SysLogOperationEntity> { | ||||
|  | ||||
| } | ||||
							
								
								
									
										52
									
								
								ym-admin/src/main/java/com/cnbm/admin/dao/SysMenuDao.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								ym-admin/src/main/java/com/cnbm/admin/dao/SysMenuDao.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| package com.cnbm.admin.dao; | ||||
|  | ||||
| import com.cnbm.admin.entity.SysMenuEntity; | ||||
| import com.cnbm.common.dao.BaseDao; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
| import org.apache.ibatis.annotations.Param; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:33 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface SysMenuDao extends BaseDao<SysMenuEntity> { | ||||
|  | ||||
|     SysMenuEntity getById(@Param("id") Long id); | ||||
|  | ||||
|     /** | ||||
|      * 查询所有菜单列表 | ||||
|      * | ||||
|      * @param type 菜单类型 | ||||
|      */ | ||||
|     List<SysMenuEntity> getMenuList(@Param("type") Integer type); | ||||
|  | ||||
|     /** | ||||
|      * 查询用户菜单列表 | ||||
|      * | ||||
|      * @param userId 用户ID | ||||
|      * @param type 菜单类型 | ||||
|      */ | ||||
|     List<SysMenuEntity> getUserMenuList(@Param("userId") Long userId, @Param("type") Integer type); | ||||
|  | ||||
|     /** | ||||
|      * 查询用户权限列表 | ||||
|      * @param userId  用户ID | ||||
|      */ | ||||
|     List<String> getUserPermissionsList(Long userId); | ||||
|  | ||||
|     /** | ||||
|      * 查询所有权限列表 | ||||
|      */ | ||||
|     List<String> getPermissionsList(); | ||||
|  | ||||
|     /** | ||||
|      * 根据父菜单,查询子菜单 | ||||
|      * @param pid  父菜单ID | ||||
|      */ | ||||
|     List<SysMenuEntity> getListPid(Long pid); | ||||
|  | ||||
| } | ||||
							
								
								
									
										37
									
								
								ym-admin/src/main/java/com/cnbm/admin/dao/SysParamsDao.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								ym-admin/src/main/java/com/cnbm/admin/dao/SysParamsDao.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| package com.cnbm.admin.dao; | ||||
|  | ||||
| import com.cnbm.admin.entity.SysParamsEntity; | ||||
| import com.cnbm.common.dao.BaseDao; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
| import org.apache.ibatis.annotations.Param; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:21 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface SysParamsDao extends BaseDao<SysParamsEntity> { | ||||
|     /** | ||||
|      * 根据参数编码,查询value | ||||
|      * @param paramCode 参数编码 | ||||
|      * @return          参数值 | ||||
|      */ | ||||
|     String getValueByCode(String paramCode); | ||||
|  | ||||
|     /** | ||||
|      * 获取参数编码列表 | ||||
|      * @param ids  ids | ||||
|      * @return     返回参数编码列表 | ||||
|      */ | ||||
|     List<String> getParamCodeList(Long[] ids); | ||||
|  | ||||
|     /** | ||||
|      * 根据参数编码,更新value | ||||
|      * @param paramCode  参数编码 | ||||
|      * @param paramValue  参数值 | ||||
|      */ | ||||
|     int updateValueByCode(@Param("paramCode") String paramCode, @Param("paramValue") String paramValue); | ||||
| } | ||||
							
								
								
									
										16
									
								
								ym-admin/src/main/java/com/cnbm/admin/dao/SysRoleDao.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								ym-admin/src/main/java/com/cnbm/admin/dao/SysRoleDao.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| package com.cnbm.admin.dao; | ||||
|  | ||||
| import com.cnbm.admin.entity.SysRoleEntity; | ||||
| import com.cnbm.common.dao.BaseDao; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:05 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface SysRoleDao extends BaseDao<SysRoleEntity> { | ||||
|  | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,32 @@ | ||||
| package com.cnbm.admin.dao; | ||||
|  | ||||
| import com.cnbm.admin.entity.SysRoleDataScopeEntity; | ||||
| import com.cnbm.common.dao.BaseDao; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:15 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface SysRoleDataScopeDao extends BaseDao<SysRoleDataScopeEntity> { | ||||
|  | ||||
|     /** | ||||
|      * 根据角色ID,获取部门ID列表 | ||||
|      */ | ||||
|     List<Long> getDeptIdList(Long roleId); | ||||
|  | ||||
|     /** | ||||
|      * 获取用户的部门数据权限列表 | ||||
|      */ | ||||
|     List<Long> getDataScopeList(Long userId); | ||||
|  | ||||
|     /** | ||||
|      * 根据角色id,删除角色数据权限关系 | ||||
|      * @param roleIds 角色ids | ||||
|      */ | ||||
|     void deleteByRoleIds(Long[] roleIds); | ||||
| } | ||||
| @@ -0,0 +1,34 @@ | ||||
| package com.cnbm.admin.dao; | ||||
|  | ||||
| import com.cnbm.admin.entity.SysRoleMenuEntity; | ||||
| import com.cnbm.common.dao.BaseDao; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:15 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface SysRoleMenuDao extends BaseDao<SysRoleMenuEntity> { | ||||
|  | ||||
|     /** | ||||
|      * 根据角色ID,获取菜单ID列表 | ||||
|      */ | ||||
|     List<Long> getMenuIdList(Long roleId); | ||||
|  | ||||
|     /** | ||||
|      * 根据角色id,删除角色菜单关系 | ||||
|      * @param roleIds 角色ids | ||||
|      */ | ||||
|     void deleteByRoleIds(Long[] roleIds); | ||||
|  | ||||
|     /** | ||||
|      * 根据菜单id,删除角色菜单关系 | ||||
|      * @param menuId 菜单id | ||||
|      */ | ||||
|     void deleteByMenuId(Long menuId); | ||||
| } | ||||
|  | ||||
| @@ -0,0 +1,36 @@ | ||||
| package com.cnbm.admin.dao; | ||||
|  | ||||
| import com.cnbm.admin.entity.SysRoleUserEntity; | ||||
| import com.cnbm.common.dao.BaseDao; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:35 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface SysRoleUserDao extends BaseDao<SysRoleUserEntity> { | ||||
|  | ||||
|     /** | ||||
|      * 根据角色ids,删除角色用户关系 | ||||
|      * @param roleIds 角色ids | ||||
|      */ | ||||
|     void deleteByRoleIds(Long[] roleIds); | ||||
|  | ||||
|     /** | ||||
|      * 根据用户id,删除角色用户关系 | ||||
|      * @param userIds 用户ids | ||||
|      */ | ||||
|     void deleteByUserIds(Long[] userIds); | ||||
|  | ||||
|     /** | ||||
|      * 角色ID列表 | ||||
|      * @param userId  用户ID | ||||
|      * | ||||
|      * @return | ||||
|      */ | ||||
|     List<Long> getRoleIdList(Long userId); | ||||
| } | ||||
							
								
								
									
										36
									
								
								ym-admin/src/main/java/com/cnbm/admin/dao/SysUserDao.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								ym-admin/src/main/java/com/cnbm/admin/dao/SysUserDao.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| package com.cnbm.admin.dao; | ||||
|  | ||||
| import com.cnbm.admin.entity.SysUserEntity; | ||||
| import com.cnbm.common.dao.BaseDao; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
| import org.apache.ibatis.annotations.Param; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:27 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface SysUserDao extends BaseDao<SysUserEntity> { | ||||
|  | ||||
|     List<SysUserEntity> getList(Map<String, Object> params); | ||||
|  | ||||
|     SysUserEntity getById(Long id); | ||||
|  | ||||
|     SysUserEntity getByUsername(String username); | ||||
|  | ||||
|     int updatePassword(@Param("id") Long id, @Param("newPassword") String newPassword); | ||||
|  | ||||
|     /** | ||||
|      * 根据部门ID,查询用户数 | ||||
|      */ | ||||
|     int getCountByDeptId(Long deptId); | ||||
|  | ||||
|     /** | ||||
|      * 根据部门ID,查询用户ID列表 | ||||
|      */ | ||||
|     List<Long> getUserIdListByDeptId(List<Long> deptIdList); | ||||
| } | ||||
							
								
								
									
										14
									
								
								ym-admin/src/main/java/com/cnbm/admin/dao/UserDao.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								ym-admin/src/main/java/com/cnbm/admin/dao/UserDao.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| package com.cnbm.admin.dao; | ||||
|  | ||||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||||
| import com.cnbm.admin.entity.SysUserEntity; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/9 8:57 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface UserDao extends BaseMapper<SysUserEntity> { | ||||
| } | ||||
							
								
								
									
										28
									
								
								ym-admin/src/main/java/com/cnbm/admin/dto/PasswordDTO.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								ym-admin/src/main/java/com/cnbm/admin/dto/PasswordDTO.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| package com.cnbm.admin.dto; | ||||
|  | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
|  | ||||
| import javax.validation.constraints.NotBlank; | ||||
| import java.io.Serializable; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:59 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @ApiModel(value = "修改密码") | ||||
| public class PasswordDTO implements Serializable { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     @ApiModelProperty(value = "原密码") | ||||
|     @NotBlank(message="{sysuser.password.require}") | ||||
|     private String password; | ||||
|  | ||||
|     @ApiModelProperty(value = "新密码") | ||||
|     @NotBlank(message="{sysuser.password.require}") | ||||
|     private String newPassword; | ||||
|  | ||||
| } | ||||
							
								
								
									
										102
									
								
								ym-admin/src/main/java/com/cnbm/admin/dto/SysDeptDTO.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								ym-admin/src/main/java/com/cnbm/admin/dto/SysDeptDTO.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,102 @@ | ||||
| package com.cnbm.admin.dto; | ||||
|  | ||||
| import com.cnbm.common.utils.TreeNode; | ||||
| import com.cnbm.common.validator.group.AddGroup; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import com.cnbm.common.validator.group.UpdateGroup; | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
|  | ||||
| import javax.validation.constraints.Min; | ||||
| import javax.validation.constraints.NotBlank; | ||||
| import javax.validation.constraints.NotNull; | ||||
| import javax.validation.constraints.Null; | ||||
| import java.io.Serializable; | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:39 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @ApiModel(value = "部门管理") | ||||
| public class SysDeptDTO extends TreeNode implements Serializable { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     @ApiModelProperty(value = "id") | ||||
|     @Null(message="{id.null}", groups = AddGroup.class) | ||||
|     @NotNull(message="{id.require}", groups = UpdateGroup.class) | ||||
|     private Long id; | ||||
|  | ||||
|     @ApiModelProperty(value = "上级ID") | ||||
|     @NotNull(message="{sysdept.pid.require}", groups = DefaultGroup.class) | ||||
|     private Long pid; | ||||
|  | ||||
|     @ApiModelProperty(value = "部门名称") | ||||
|     @NotBlank(message="{sysdept.name.require}", groups = DefaultGroup.class) | ||||
|     private String name; | ||||
|  | ||||
|     @ApiModelProperty(value = "排序") | ||||
|     @Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class) | ||||
|     private Integer sort; | ||||
|  | ||||
|     @ApiModelProperty(value = "创建时间") | ||||
|     @JsonProperty(access = JsonProperty.Access.READ_ONLY) | ||||
|     private Date createDate; | ||||
|  | ||||
|     @ApiModelProperty(value = "上级部门名称") | ||||
|     private String parentName; | ||||
|  | ||||
|     @Override | ||||
|     public Long getId() { | ||||
|         return id; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setId(Long id) { | ||||
|         this.id = id; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Long getPid() { | ||||
|         return pid; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setPid(Long pid) { | ||||
|         this.pid = pid; | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
|  | ||||
|     public void setName(String name) { | ||||
|         this.name = name; | ||||
|     } | ||||
|  | ||||
|     public Integer getSort() { | ||||
|         return sort; | ||||
|     } | ||||
|  | ||||
|     public void setSort(Integer sort) { | ||||
|         this.sort = sort; | ||||
|     } | ||||
|  | ||||
|     public Date getCreateDate() { | ||||
|         return createDate; | ||||
|     } | ||||
|  | ||||
|     public void setCreateDate(Date createDate) { | ||||
|         this.createDate = createDate; | ||||
|     } | ||||
|  | ||||
|     public String getParentName() { | ||||
|         return parentName; | ||||
|     } | ||||
|  | ||||
|     public void setParentName(String parentName) { | ||||
|         this.parentName = parentName; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,58 @@ | ||||
| package com.cnbm.admin.dto; | ||||
|  | ||||
| import com.cnbm.common.validator.group.AddGroup; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import com.cnbm.common.validator.group.UpdateGroup; | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
|  | ||||
| import javax.validation.constraints.Min; | ||||
| import javax.validation.constraints.NotBlank; | ||||
| import javax.validation.constraints.NotNull; | ||||
| import javax.validation.constraints.Null; | ||||
| import java.io.Serializable; | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:57 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @ApiModel(value = "字典数据") | ||||
| public class SysDictDataDTO implements Serializable { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     @ApiModelProperty(value = "id") | ||||
|     @Null(message="{id.null}", groups = AddGroup.class) | ||||
|     @NotNull(message="{id.require}", groups = UpdateGroup.class) | ||||
|     private Long id; | ||||
|  | ||||
|     @ApiModelProperty(value = "字典类型ID") | ||||
|     @NotNull(message="{sysdict.type.require}", groups = DefaultGroup.class) | ||||
|     private Long dictTypeId; | ||||
|  | ||||
|     @ApiModelProperty(value = "字典标签") | ||||
|     @NotBlank(message="{sysdict.label.require}", groups = DefaultGroup.class) | ||||
|     private String dictLabel; | ||||
|  | ||||
|     @ApiModelProperty(value = "字典值") | ||||
|     private String dictValue; | ||||
|  | ||||
|     @ApiModelProperty(value = "备注") | ||||
|     private String remark; | ||||
|  | ||||
|     @ApiModelProperty(value = "排序") | ||||
|     @Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class) | ||||
|     private Integer sort; | ||||
|  | ||||
|     @ApiModelProperty(value = "创建时间") | ||||
|     @JsonProperty(access = JsonProperty.Access.READ_ONLY) | ||||
|     private Date createDate; | ||||
|  | ||||
|     @ApiModelProperty(value = "更新时间") | ||||
|     @JsonProperty(access = JsonProperty.Access.READ_ONLY) | ||||
|     private Date updateDate; | ||||
| } | ||||
| @@ -0,0 +1,55 @@ | ||||
| package com.cnbm.admin.dto; | ||||
|  | ||||
| import com.cnbm.common.validator.group.AddGroup; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import com.cnbm.common.validator.group.UpdateGroup; | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
|  | ||||
| import javax.validation.constraints.Min; | ||||
| import javax.validation.constraints.NotBlank; | ||||
| import javax.validation.constraints.NotNull; | ||||
| import javax.validation.constraints.Null; | ||||
| import java.io.Serializable; | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:57 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @ApiModel(value = "字典类型") | ||||
| public class SysDictTypeDTO implements Serializable { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     @ApiModelProperty(value = "id") | ||||
|     @Null(message="{id.null}", groups = AddGroup.class) | ||||
|     @NotNull(message="{id.require}", groups = UpdateGroup.class) | ||||
|     private Long id; | ||||
|  | ||||
|     @ApiModelProperty(value = "字典类型") | ||||
|     @NotBlank(message="{sysdict.type.require}", groups = DefaultGroup.class) | ||||
|     private String dictType; | ||||
|  | ||||
|     @ApiModelProperty(value = "字典名称") | ||||
|     @NotBlank(message="{sysdict.name.require}", groups = DefaultGroup.class) | ||||
|     private String dictName; | ||||
|  | ||||
|     @ApiModelProperty(value = "备注") | ||||
|     private String remark; | ||||
|  | ||||
|     @ApiModelProperty(value = "排序") | ||||
|     @Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class) | ||||
|     private Integer sort; | ||||
|  | ||||
|     @ApiModelProperty(value = "创建时间") | ||||
|     @JsonProperty(access = JsonProperty.Access.READ_ONLY) | ||||
|     private Date createDate; | ||||
|  | ||||
|     @ApiModelProperty(value = "更新时间") | ||||
|     @JsonProperty(access = JsonProperty.Access.READ_ONLY) | ||||
|     private Date updateDate; | ||||
| } | ||||
| @@ -0,0 +1,37 @@ | ||||
| package com.cnbm.admin.dto; | ||||
|  | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.io.Serializable; | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:07 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @ApiModel(value = "异常日志") | ||||
| public class SysLogErrorDTO implements Serializable { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     @ApiModelProperty(value = "id") | ||||
|     private Long id; | ||||
|     @ApiModelProperty(value = "请求URI") | ||||
|     private String requestUri; | ||||
|     @ApiModelProperty(value = "请求方式") | ||||
|     private String requestMethod; | ||||
|     @ApiModelProperty(value = "请求参数") | ||||
|     private String requestParams; | ||||
|     @ApiModelProperty(value = "用户代理") | ||||
|     private String userAgent; | ||||
|     @ApiModelProperty(value = "操作IP") | ||||
|     private String ip; | ||||
|     @ApiModelProperty(value = "异常信息") | ||||
|     private String errorInfo; | ||||
|     @ApiModelProperty(value = "创建时间") | ||||
|     private Date createDate; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,53 @@ | ||||
| package com.cnbm.admin.dto; | ||||
|  | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.io.Serializable; | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 9:53 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @ApiModel(value = "操作日志") | ||||
| public class SysLogOperationDTO implements Serializable { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     @ApiModelProperty(value = "id") | ||||
|     private Long id; | ||||
|  | ||||
|     @ApiModelProperty(value = "用户操作") | ||||
|     private String operation; | ||||
|  | ||||
|     @ApiModelProperty(value = "请求URI") | ||||
|     private String requestUri; | ||||
|  | ||||
|     @ApiModelProperty(value = "请求方式") | ||||
|     private String requestMethod; | ||||
|  | ||||
|     @ApiModelProperty(value = "请求参数") | ||||
|     private String requestParams; | ||||
|  | ||||
|     @ApiModelProperty(value = "请求时长(毫秒)") | ||||
|     private Integer requestTime; | ||||
|  | ||||
|     @ApiModelProperty(value = "用户代理") | ||||
|     private String userAgent; | ||||
|  | ||||
|     @ApiModelProperty(value = "操作IP") | ||||
|     private String ip; | ||||
|  | ||||
|     @ApiModelProperty(value = "状态  0:失败   1:成功") | ||||
|     private Integer status; | ||||
|  | ||||
|     @ApiModelProperty(value = "用户名") | ||||
|     private String creatorName; | ||||
|  | ||||
|     @ApiModelProperty(value = "创建时间") | ||||
|     private Date createDate; | ||||
|  | ||||
| } | ||||
							
								
								
									
										148
									
								
								ym-admin/src/main/java/com/cnbm/admin/dto/SysMenuDTO.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								ym-admin/src/main/java/com/cnbm/admin/dto/SysMenuDTO.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,148 @@ | ||||
| package com.cnbm.admin.dto; | ||||
|  | ||||
| import com.cnbm.common.utils.TreeNode; | ||||
| import com.cnbm.common.validator.group.AddGroup; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import com.cnbm.common.validator.group.UpdateGroup; | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import org.hibernate.validator.constraints.Range; | ||||
|  | ||||
| import javax.validation.constraints.Min; | ||||
| import javax.validation.constraints.NotBlank; | ||||
| import javax.validation.constraints.NotNull; | ||||
| import javax.validation.constraints.Null; | ||||
| import java.io.Serializable; | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:33 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @ApiModel(value = "菜单管理") | ||||
| public class SysMenuDTO extends TreeNode<SysMenuDTO> implements Serializable { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     @ApiModelProperty(value = "id") | ||||
|     @Null(message="{id.null}", groups = AddGroup.class) | ||||
|     @NotNull(message="{id.require}", groups = UpdateGroup.class) | ||||
|     private Long id; | ||||
|  | ||||
|     @ApiModelProperty(value = "上级ID") | ||||
|     @NotNull(message="{sysmenu.pid.require}", groups = DefaultGroup.class) | ||||
|     private Long pid; | ||||
|  | ||||
|     @ApiModelProperty(value = "菜单名称") | ||||
|     @NotBlank(message="{sysmenu.name.require}", groups = DefaultGroup.class) | ||||
|     private String name; | ||||
|  | ||||
|     @ApiModelProperty(value = "菜单URL") | ||||
|     private String url; | ||||
|  | ||||
|     @ApiModelProperty(value = "类型  0:菜单   1:按钮") | ||||
|     @Range(min=0, max=1, message = "{sysmenu.type.range}", groups = DefaultGroup.class) | ||||
|     private Integer type; | ||||
|  | ||||
|     @ApiModelProperty(value = "菜单图标") | ||||
|     private String icon; | ||||
|  | ||||
|     @ApiModelProperty(value = "授权(多个用逗号分隔,如:sys:user:list,sys:user:save)") | ||||
|     private String permissions; | ||||
|  | ||||
|     @ApiModelProperty(value = "排序") | ||||
|     @Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class) | ||||
|     private Integer sort; | ||||
|  | ||||
|     @ApiModelProperty(value = "创建时间") | ||||
|     @JsonProperty(access = JsonProperty.Access.READ_ONLY) | ||||
|     private Date createDate; | ||||
|  | ||||
|     @ApiModelProperty(value = "上级菜单名称") | ||||
|     private String parentName; | ||||
|  | ||||
|     @Override | ||||
|     public Long getId() { | ||||
|         return id; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setId(Long id) { | ||||
|         this.id = id; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Long getPid() { | ||||
|         return pid; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setPid(Long pid) { | ||||
|         this.pid = pid; | ||||
|     } | ||||
|  | ||||
|     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 Integer getType() { | ||||
|         return type; | ||||
|     } | ||||
|  | ||||
|     public void setType(Integer type) { | ||||
|         this.type = type; | ||||
|     } | ||||
|  | ||||
|     public String getIcon() { | ||||
|         return icon; | ||||
|     } | ||||
|  | ||||
|     public void setIcon(String icon) { | ||||
|         this.icon = icon; | ||||
|     } | ||||
|  | ||||
|     public String getPermissions() { | ||||
|         return permissions; | ||||
|     } | ||||
|  | ||||
|     public void setPermissions(String permissions) { | ||||
|         this.permissions = permissions; | ||||
|     } | ||||
|  | ||||
|     public Integer getSort() { | ||||
|         return sort; | ||||
|     } | ||||
|  | ||||
|     public void setSort(Integer sort) { | ||||
|         this.sort = sort; | ||||
|     } | ||||
|  | ||||
|     public Date getCreateDate() { | ||||
|         return createDate; | ||||
|     } | ||||
|  | ||||
|     public void setCreateDate(Date createDate) { | ||||
|         this.createDate = createDate; | ||||
|     } | ||||
|  | ||||
|     public String getParentName() { | ||||
|         return parentName; | ||||
|     } | ||||
|  | ||||
|     public void setParentName(String parentName) { | ||||
|         this.parentName = parentName; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										51
									
								
								ym-admin/src/main/java/com/cnbm/admin/dto/SysParamsDTO.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								ym-admin/src/main/java/com/cnbm/admin/dto/SysParamsDTO.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| package com.cnbm.admin.dto; | ||||
|  | ||||
| import com.cnbm.common.validator.group.AddGroup; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import com.cnbm.common.validator.group.UpdateGroup; | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
|  | ||||
| import javax.validation.constraints.NotBlank; | ||||
| import javax.validation.constraints.NotNull; | ||||
| import javax.validation.constraints.Null; | ||||
| import java.io.Serializable; | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:21 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @ApiModel(value = "参数管理") | ||||
| public class SysParamsDTO implements Serializable { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     @ApiModelProperty(value = "id") | ||||
|     @Null(message="{id.null}", groups = AddGroup.class) | ||||
|     @NotNull(message="{id.require}", groups = UpdateGroup.class) | ||||
|     private Long id; | ||||
|  | ||||
|     @ApiModelProperty(value = "参数编码") | ||||
|     @NotBlank(message="{sysparams.paramcode.require}", groups = DefaultGroup.class) | ||||
|     private String paramCode; | ||||
|  | ||||
|     @ApiModelProperty(value = "参数值") | ||||
|     @NotBlank(message="{sysparams.paramvalue.require}", groups = DefaultGroup.class) | ||||
|     private String paramValue; | ||||
|  | ||||
|     @ApiModelProperty(value = "备注") | ||||
|     private String remark; | ||||
|  | ||||
|     @ApiModelProperty(value = "创建时间") | ||||
|     @JsonProperty(access = JsonProperty.Access.READ_ONLY) | ||||
|     private Date createDate; | ||||
|  | ||||
|     @ApiModelProperty(value = "更新时间") | ||||
|     @JsonProperty(access = JsonProperty.Access.READ_ONLY) | ||||
|     private Date updateDate; | ||||
|  | ||||
| } | ||||
							
								
								
									
										50
									
								
								ym-admin/src/main/java/com/cnbm/admin/dto/SysRoleDTO.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								ym-admin/src/main/java/com/cnbm/admin/dto/SysRoleDTO.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| package com.cnbm.admin.dto; | ||||
|  | ||||
| import com.cnbm.common.validator.group.AddGroup; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import com.cnbm.common.validator.group.UpdateGroup; | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
|  | ||||
| import javax.validation.constraints.NotBlank; | ||||
| import javax.validation.constraints.NotNull; | ||||
| import javax.validation.constraints.Null; | ||||
| import java.io.Serializable; | ||||
| import java.util.Date; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:06 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @ApiModel(value = "角色管理") | ||||
| public class SysRoleDTO implements Serializable { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     @ApiModelProperty(value = "id") | ||||
|     @Null(message="{id.null}", groups = AddGroup.class) | ||||
|     @NotNull(message="{id.require}", groups = UpdateGroup.class) | ||||
|     private Long id; | ||||
|  | ||||
|     @ApiModelProperty(value = "角色名称") | ||||
|     @NotBlank(message="{sysrole.name.require}", groups = DefaultGroup.class) | ||||
|     private String name; | ||||
|  | ||||
|     @ApiModelProperty(value = "备注") | ||||
|     private String remark; | ||||
|  | ||||
|     @ApiModelProperty(value = "创建时间") | ||||
|     @JsonProperty(access = JsonProperty.Access.READ_ONLY) | ||||
|     private Date createDate; | ||||
|  | ||||
|     @ApiModelProperty(value = "菜单ID列表") | ||||
|     private List<Long> menuIdList; | ||||
|  | ||||
|     @ApiModelProperty(value = "部门ID列表") | ||||
|     private List<Long> deptIdList; | ||||
|  | ||||
| } | ||||
							
								
								
									
										84
									
								
								ym-admin/src/main/java/com/cnbm/admin/dto/SysUserDTO.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								ym-admin/src/main/java/com/cnbm/admin/dto/SysUserDTO.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,84 @@ | ||||
| package com.cnbm.admin.dto; | ||||
|  | ||||
| import com.cnbm.common.validator.group.AddGroup; | ||||
| import com.cnbm.common.validator.group.DefaultGroup; | ||||
| import com.cnbm.common.validator.group.UpdateGroup; | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
| import org.hibernate.validator.constraints.Range; | ||||
|  | ||||
| import javax.validation.constraints.Email; | ||||
| import javax.validation.constraints.NotBlank; | ||||
| import javax.validation.constraints.NotNull; | ||||
| import javax.validation.constraints.Null; | ||||
| import java.io.Serializable; | ||||
| import java.util.Date; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:26 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @ApiModel(value = "用户管理") | ||||
| public class SysUserDTO implements Serializable { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     @ApiModelProperty(value = "id") | ||||
|     @Null(message="{id.null}", groups = AddGroup.class) | ||||
|     @NotNull(message="{id.require}", groups = UpdateGroup.class) | ||||
|     private Long id; | ||||
|  | ||||
|     @ApiModelProperty(value = "用户名", required = true) | ||||
|     @NotBlank(message="{sysuser.username.require}", groups = DefaultGroup.class) | ||||
|     private String username; | ||||
|  | ||||
|     @ApiModelProperty(value = "密码") | ||||
|     @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) | ||||
|     @NotBlank(message="{sysuser.password.require}", groups = AddGroup.class) | ||||
|     private String password; | ||||
|  | ||||
|     @ApiModelProperty(value = "姓名", required = true) | ||||
|     @NotBlank(message="{sysuser.realname.require}", groups = DefaultGroup.class) | ||||
|     private String realName; | ||||
|  | ||||
|     @ApiModelProperty(value = "头像") | ||||
|     private String headUrl; | ||||
|  | ||||
|     @ApiModelProperty(value = "性别   0:男   1:女    2:保密", required = true) | ||||
|     @Range(min=0, max=2, message = "{sysuser.gender.range}", groups = DefaultGroup.class) | ||||
|     private Integer gender; | ||||
|  | ||||
|     @ApiModelProperty(value = "邮箱") | ||||
|     @Email(message="{sysuser.email.error}", groups = DefaultGroup.class) | ||||
|     private String email; | ||||
|  | ||||
|     @ApiModelProperty(value = "手机号") | ||||
|     private String mobile; | ||||
|  | ||||
|     @ApiModelProperty(value = "部门ID", required = true) | ||||
|     @NotNull(message="{sysuser.deptId.require}", groups = DefaultGroup.class) | ||||
|     private Long deptId; | ||||
|  | ||||
|     @ApiModelProperty(value = "状态  0:停用    1:正常", required = true) | ||||
|     @Range(min=0, max=1, message = "{sysuser.status.range}", groups = DefaultGroup.class) | ||||
|     private Integer status; | ||||
|  | ||||
|     @ApiModelProperty(value = "创建时间") | ||||
|     @JsonProperty(access = JsonProperty.Access.READ_ONLY) | ||||
|     private Date createDate; | ||||
|  | ||||
|     @ApiModelProperty(value = "超级管理员   0:否   1:是") | ||||
|     @JsonProperty(access = JsonProperty.Access.READ_ONLY) | ||||
|     private Integer superAdmin; | ||||
|  | ||||
|     @ApiModelProperty(value = "角色ID列表") | ||||
|     private List<Long> roleIdList; | ||||
|  | ||||
|     @ApiModelProperty(value = "部门名称") | ||||
|     private String deptName; | ||||
|  | ||||
| } | ||||
							
								
								
									
										17
									
								
								ym-admin/src/main/java/com/cnbm/admin/entity/DictData.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								ym-admin/src/main/java/com/cnbm/admin/entity/DictData.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| package com.cnbm.admin.entity; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonIgnore; | ||||
| import lombok.Data; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 11:01 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| public class DictData { | ||||
|     @JsonIgnore | ||||
|     private Long dictTypeId; | ||||
|     private String dictLabel; | ||||
|     private String dictValue; | ||||
| } | ||||
							
								
								
									
										20
									
								
								ym-admin/src/main/java/com/cnbm/admin/entity/DictType.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								ym-admin/src/main/java/com/cnbm/admin/entity/DictType.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| package com.cnbm.admin.entity; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonIgnore; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 11:00 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| public class DictType { | ||||
|     @JsonIgnore | ||||
|     private Long id; | ||||
|     private String dictType; | ||||
|     private List<DictData> dataList = new ArrayList<>(); | ||||
| } | ||||
							
								
								
									
										83
									
								
								ym-admin/src/main/java/com/cnbm/admin/entity/LoginUser.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								ym-admin/src/main/java/com/cnbm/admin/entity/LoginUser.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,83 @@ | ||||
| package com.cnbm.admin.entity; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonIgnore; | ||||
| import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | ||||
| import lombok.Data; | ||||
| import lombok.NoArgsConstructor; | ||||
| import org.springframework.security.core.GrantedAuthority; | ||||
| import org.springframework.security.core.authority.SimpleGrantedAuthority; | ||||
| import org.springframework.security.core.userdetails.UserDetails; | ||||
|  | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/8 1:56 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @NoArgsConstructor | ||||
| @JsonIgnoreProperties(ignoreUnknown = true) | ||||
| public class LoginUser implements UserDetails { | ||||
|  | ||||
|     private SysUserEntity sysUserEntity; | ||||
|  | ||||
|     private List<String> permissions; | ||||
|  | ||||
|     public LoginUser(SysUserEntity sysUserEntity, List<String> permissions) { | ||||
|         this.sysUserEntity = sysUserEntity; | ||||
|         this.permissions = permissions; | ||||
|     } | ||||
|  | ||||
|     @JsonIgnore | ||||
|     private List<SimpleGrantedAuthority> authorities; | ||||
|     @Override | ||||
|     public Collection<? extends GrantedAuthority> getAuthorities() { | ||||
|         if(authorities!=null){ | ||||
|             return authorities; | ||||
|         } | ||||
|         //把permissions中String类型的权限信息封装成SimpleGrantedAuthority对象 | ||||
| //       authorities = new ArrayList<>(); | ||||
| //        for (String permission : permissions) { | ||||
| //            SimpleGrantedAuthority authority = new SimpleGrantedAuthority(permission); | ||||
| //            authorities.add(authority); | ||||
| //        } | ||||
|         authorities = permissions.stream() | ||||
|                 .map(SimpleGrantedAuthority::new) | ||||
|                 .collect(Collectors.toList()); | ||||
|         return authorities; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String getPassword() { | ||||
|         return sysUserEntity.getPassword(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String getUsername() { | ||||
|         return sysUserEntity.getUsername(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean isAccountNonExpired() { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean isAccountNonLocked() { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean isCredentialsNonExpired() { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean isEnabled() { | ||||
|         return true; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -0,0 +1,55 @@ | ||||
| package com.cnbm.admin.entity; | ||||
|  | ||||
| import com.baomidou.mybatisplus.annotation.FieldFill; | ||||
| import com.baomidou.mybatisplus.annotation.TableField; | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import com.cnbm.common.entity.BaseEntity; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:39 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper=false) | ||||
| @TableName("sys_dept") | ||||
| public class SysDeptEntity extends BaseEntity { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** | ||||
|      * 上级ID | ||||
|      */ | ||||
|     private Long pid; | ||||
|     /** | ||||
|      * 所有上级ID,用逗号分开 | ||||
|      */ | ||||
|     private String pids; | ||||
|     /** | ||||
|      * 部门名称 | ||||
|      */ | ||||
|     private String name; | ||||
|     /** | ||||
|      * 排序 | ||||
|      */ | ||||
|     private Integer sort; | ||||
|     /** | ||||
|      * 更新者 | ||||
|      */ | ||||
|     @TableField(fill = FieldFill.INSERT_UPDATE) | ||||
|     private Long updater; | ||||
|     /** | ||||
|      * 更新时间 | ||||
|      */ | ||||
|     @TableField(fill = FieldFill.INSERT_UPDATE) | ||||
|     private Date updateDate; | ||||
|     /** | ||||
|      * 上级部门名称 | ||||
|      */ | ||||
|     @TableField(exist = false) | ||||
|     private String parentName; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,52 @@ | ||||
| package com.cnbm.admin.entity; | ||||
|  | ||||
| import com.baomidou.mybatisplus.annotation.FieldFill; | ||||
| import com.baomidou.mybatisplus.annotation.TableField; | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import com.cnbm.common.entity.BaseEntity; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:57 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper=false) | ||||
| @TableName("sys_dict_data") | ||||
| public class SysDictDataEntity extends BaseEntity { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|     /** | ||||
|      * 字典类型ID | ||||
|      */ | ||||
|     private Long dictTypeId; | ||||
|     /** | ||||
|      * 字典标签 | ||||
|      */ | ||||
|     private String dictLabel; | ||||
|     /** | ||||
|      * 字典值 | ||||
|      */ | ||||
|     private String dictValue; | ||||
|     /** | ||||
|      * 备注 | ||||
|      */ | ||||
|     private String remark; | ||||
|     /** | ||||
|      * 排序 | ||||
|      */ | ||||
|     private Integer sort; | ||||
|     /** | ||||
|      * 更新者 | ||||
|      */ | ||||
|     @TableField(fill = FieldFill.INSERT_UPDATE) | ||||
|     private Long updater; | ||||
|     /** | ||||
|      * 更新时间 | ||||
|      */ | ||||
|     @TableField(fill = FieldFill.INSERT_UPDATE) | ||||
|     private Date updateDate; | ||||
| } | ||||
| @@ -0,0 +1,48 @@ | ||||
| package com.cnbm.admin.entity; | ||||
|  | ||||
| import com.baomidou.mybatisplus.annotation.FieldFill; | ||||
| import com.baomidou.mybatisplus.annotation.TableField; | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import com.cnbm.common.entity.BaseEntity; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:58 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper=false) | ||||
| @TableName("sys_dict_type") | ||||
| public class SysDictTypeEntity extends BaseEntity { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|     /** | ||||
|      * 字典类型 | ||||
|      */ | ||||
|     private String dictType; | ||||
|     /** | ||||
|      * 字典名称 | ||||
|      */ | ||||
|     private String dictName; | ||||
|     /** | ||||
|      * 备注 | ||||
|      */ | ||||
|     private String remark; | ||||
|     /** | ||||
|      * 排序 | ||||
|      */ | ||||
|     private Integer sort; | ||||
|     /** | ||||
|      * 更新者 | ||||
|      */ | ||||
|     @TableField(fill = FieldFill.INSERT_UPDATE) | ||||
|     private Long updater; | ||||
|     /** | ||||
|      * 更新时间 | ||||
|      */ | ||||
|     @TableField(fill = FieldFill.INSERT_UPDATE) | ||||
|     private Date updateDate; | ||||
| } | ||||
| @@ -0,0 +1,44 @@ | ||||
| package com.cnbm.admin.entity; | ||||
|  | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import com.cnbm.common.entity.BaseEntity; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:08 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper=false) | ||||
| @TableName("sys_log_error") | ||||
| public class SysLogErrorEntity extends BaseEntity { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** | ||||
|      * 请求URI | ||||
|      */ | ||||
|     private String requestUri; | ||||
|     /** | ||||
|      * 请求方式 | ||||
|      */ | ||||
|     private String requestMethod; | ||||
|     /** | ||||
|      * 请求参数 | ||||
|      */ | ||||
|     private String requestParams; | ||||
|     /** | ||||
|      * 用户代理 | ||||
|      */ | ||||
|     private String userAgent; | ||||
|     /** | ||||
|      * 操作IP | ||||
|      */ | ||||
|     private String ip; | ||||
|     /** | ||||
|      * 异常信息 | ||||
|      */ | ||||
|     private String errorInfo; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,55 @@ | ||||
| package com.cnbm.admin.entity; | ||||
|  | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import com.cnbm.common.entity.BaseEntity; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 9:49 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper=false) | ||||
| @TableName("sys_log_operation") | ||||
| public class SysLogOperationEntity extends BaseEntity { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** | ||||
|      * 用户操作 | ||||
|      */ | ||||
|     private String operation; | ||||
|     /** | ||||
|      * 请求URI | ||||
|      */ | ||||
|     private String requestUri; | ||||
|     /** | ||||
|      * 请求方式 | ||||
|      */ | ||||
|     private String requestMethod; | ||||
|     /** | ||||
|      * 请求参数 | ||||
|      */ | ||||
|     private String requestParams; | ||||
|     /** | ||||
|      * 请求时长(毫秒) | ||||
|      */ | ||||
|     private Integer requestTime; | ||||
|     /** | ||||
|      * 用户代理 | ||||
|      */ | ||||
|     private String userAgent; | ||||
|     /** | ||||
|      * 操作IP | ||||
|      */ | ||||
|     private String ip; | ||||
|     /** | ||||
|      * 状态  0:失败   1:成功 | ||||
|      */ | ||||
|     private Integer status; | ||||
|     /** | ||||
|      * 用户名 | ||||
|      */ | ||||
|     private String creatorName; | ||||
| } | ||||
| @@ -0,0 +1,67 @@ | ||||
| package com.cnbm.admin.entity; | ||||
|  | ||||
| import com.baomidou.mybatisplus.annotation.FieldFill; | ||||
| import com.baomidou.mybatisplus.annotation.TableField; | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import com.cnbm.common.entity.BaseEntity; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:28 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper=false) | ||||
| @TableName("sys_menu") | ||||
| public class SysMenuEntity extends BaseEntity { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** | ||||
|      * 父菜单ID,一级菜单为0 | ||||
|      */ | ||||
|     private Long pid; | ||||
|     /** | ||||
|      * 菜单名称 | ||||
|      */ | ||||
|     private String name; | ||||
|     /** | ||||
|      * 菜单URL | ||||
|      */ | ||||
|     private String url; | ||||
|     /** | ||||
|      * 授权(多个用逗号分隔,如:sys:user:list,sys:user:save) | ||||
|      */ | ||||
|     private String permissions; | ||||
|     /** | ||||
|      * 类型   0:菜单   1:按钮 | ||||
|      */ | ||||
|     private Integer type; | ||||
|     /** | ||||
|      * 菜单图标 | ||||
|      */ | ||||
|     private String icon; | ||||
|     /** | ||||
|      * 排序 | ||||
|      */ | ||||
|     private Integer sort; | ||||
|     /** | ||||
|      * 更新者 | ||||
|      */ | ||||
|     @TableField(fill = FieldFill.INSERT_UPDATE) | ||||
|     private Long updater; | ||||
|     /** | ||||
|      * 更新时间 | ||||
|      */ | ||||
|     @TableField(fill = FieldFill.INSERT_UPDATE) | ||||
|     private Date updateDate; | ||||
|     /** | ||||
|      * 上级菜单名称 | ||||
|      */ | ||||
|     @TableField(exist = false) | ||||
|     private String parentName; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,50 @@ | ||||
| package com.cnbm.admin.entity; | ||||
|  | ||||
| import com.baomidou.mybatisplus.annotation.FieldFill; | ||||
| import com.baomidou.mybatisplus.annotation.TableField; | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import com.cnbm.common.entity.BaseEntity; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:22 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper=false) | ||||
| @TableName("sys_params") | ||||
| public class SysParamsEntity extends BaseEntity { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** | ||||
|      * 参数编码 | ||||
|      */ | ||||
|     private String paramCode; | ||||
|     /** | ||||
|      * 参数值 | ||||
|      */ | ||||
|     private String paramValue; | ||||
|     /** | ||||
|      * 类型   0:系统参数   1:非系统参数 | ||||
|      */ | ||||
|     private Integer paramType; | ||||
|     /** | ||||
|      * 备注 | ||||
|      */ | ||||
|     private String remark; | ||||
|     /** | ||||
|      * 更新者 | ||||
|      */ | ||||
|     @TableField(fill = FieldFill.INSERT_UPDATE) | ||||
|     private Long updater; | ||||
|     /** | ||||
|      * 更新时间 | ||||
|      */ | ||||
|     @TableField(fill = FieldFill.INSERT_UPDATE) | ||||
|     private Date updateDate; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,28 @@ | ||||
| package com.cnbm.admin.entity; | ||||
|  | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import com.cnbm.common.entity.BaseEntity; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:14 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper=false) | ||||
| @TableName("sys_role_data_scope") | ||||
| public class SysRoleDataScopeEntity extends BaseEntity { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** | ||||
|      * 角色ID | ||||
|      */ | ||||
|     private Long roleId; | ||||
|     /** | ||||
|      * 部门ID | ||||
|      */ | ||||
|     private Long deptId; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,46 @@ | ||||
| package com.cnbm.admin.entity; | ||||
|  | ||||
| import com.baomidou.mybatisplus.annotation.FieldFill; | ||||
| import com.baomidou.mybatisplus.annotation.TableField; | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import com.cnbm.common.entity.BaseEntity; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:06 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper=false) | ||||
| @TableName("sys_role") | ||||
| public class SysRoleEntity extends BaseEntity { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** | ||||
|      * 角色名称 | ||||
|      */ | ||||
|     private String name; | ||||
|     /** | ||||
|      * 备注 | ||||
|      */ | ||||
|     private String remark; | ||||
|     /** | ||||
|      * 部门ID | ||||
|      */ | ||||
|     @TableField(fill = FieldFill.INSERT) | ||||
|     private Long deptId; | ||||
|     /** | ||||
|      * 更新者 | ||||
|      */ | ||||
|     @TableField(fill = FieldFill.INSERT_UPDATE) | ||||
|     private Long updater; | ||||
|     /** | ||||
|      * 更新时间 | ||||
|      */ | ||||
|     @TableField(fill = FieldFill.INSERT_UPDATE) | ||||
|     private Date updateDate; | ||||
| } | ||||
| @@ -0,0 +1,27 @@ | ||||
| package com.cnbm.admin.entity; | ||||
|  | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import com.cnbm.common.entity.BaseEntity; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:16 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper=false) | ||||
| @TableName("sys_role_menu") | ||||
| public class SysRoleMenuEntity extends BaseEntity { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|     /** | ||||
|      * 角色ID | ||||
|      */ | ||||
|     private Long roleId; | ||||
|     /** | ||||
|      * 菜单ID | ||||
|      */ | ||||
|     private Long menuId; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,29 @@ | ||||
| package com.cnbm.admin.entity; | ||||
|  | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import com.cnbm.common.entity.BaseEntity; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:34 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper=false) | ||||
| @TableName("sys_role_user") | ||||
| public class SysRoleUserEntity extends BaseEntity { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** | ||||
|      * 角色ID | ||||
|      */ | ||||
|     private Long roleId; | ||||
|     /** | ||||
|      * 用户ID | ||||
|      */ | ||||
|     private Long userId; | ||||
|  | ||||
| } | ||||
|  | ||||
| @@ -0,0 +1,80 @@ | ||||
| package com.cnbm.admin.entity; | ||||
|  | ||||
| import com.baomidou.mybatisplus.annotation.FieldFill; | ||||
| import com.baomidou.mybatisplus.annotation.TableField; | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import com.cnbm.common.entity.BaseEntity; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
|  | ||||
| import java.io.Serializable; | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/8 9:19 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper=false) | ||||
| @TableName("sys_user") | ||||
| public class SysUserEntity extends BaseEntity implements Serializable { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** | ||||
|      * 用户名 | ||||
|      */ | ||||
|     private String username; | ||||
|     /** | ||||
|      * 密码 | ||||
|      */ | ||||
|     private String password; | ||||
|     /** | ||||
|      * 姓名 | ||||
|      */ | ||||
|     private String realName; | ||||
|     /** | ||||
|      * 头像 | ||||
|      */ | ||||
|     private String headUrl; | ||||
|     /** | ||||
|      * 性别   0:男   1:女    2:保密 | ||||
|      */ | ||||
|     private Integer gender; | ||||
|     /** | ||||
|      * 邮箱 | ||||
|      */ | ||||
|     private String email; | ||||
|     /** | ||||
|      * 手机号 | ||||
|      */ | ||||
|     private String mobile; | ||||
|     /** | ||||
|      * 部门ID | ||||
|      */ | ||||
|     private Long deptId; | ||||
|     /** | ||||
|      * 超级管理员   0:否   1:是 | ||||
|      */ | ||||
|     private Integer superAdmin; | ||||
|     /** | ||||
|      * 状态  0:停用   1:正常 | ||||
|      */ | ||||
|     private Integer status; | ||||
|     /** | ||||
|      * 更新者 | ||||
|      */ | ||||
|     @TableField(fill = FieldFill.INSERT_UPDATE) | ||||
|     private Long updater; | ||||
|     /** | ||||
|      * 更新时间 | ||||
|      */ | ||||
|     @TableField(fill = FieldFill.INSERT_UPDATE) | ||||
|     private Date updateDate; | ||||
|     /** | ||||
|      * 部门名称 | ||||
|      */ | ||||
|     @TableField(exist=false) | ||||
|     private String deptName; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,27 @@ | ||||
| package com.cnbm.admin.enums; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 3:01 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public enum MenuTypeEnum { | ||||
|     /** | ||||
|      * 菜单 | ||||
|      */ | ||||
|     MENU(0), | ||||
|     /** | ||||
|      * 按钮 | ||||
|      */ | ||||
|     BUTTON(1); | ||||
|  | ||||
|     private int value; | ||||
|  | ||||
|     MenuTypeEnum(int value) { | ||||
|         this.value = value; | ||||
|     } | ||||
|  | ||||
|     public int value() { | ||||
|         return this.value; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,27 @@ | ||||
| package com.cnbm.admin.enums; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 10:10 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public enum OperationStatusEnum { | ||||
|     /** | ||||
|      * 失败 | ||||
|      */ | ||||
|     FAIL(0), | ||||
|     /** | ||||
|      * 成功 | ||||
|      */ | ||||
|     SUCCESS(1); | ||||
|  | ||||
|     private int value; | ||||
|  | ||||
|     OperationStatusEnum(int value) { | ||||
|         this.value = value; | ||||
|     } | ||||
|  | ||||
|     public int value() { | ||||
|         return this.value; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,21 @@ | ||||
| package com.cnbm.admin.enums; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:02 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public enum SuperAdminEnum { | ||||
|     YES(1), | ||||
|     NO(0); | ||||
|  | ||||
|     private int value; | ||||
|  | ||||
|     SuperAdminEnum(int value) { | ||||
|         this.value = value; | ||||
|     } | ||||
|  | ||||
|     public int value() { | ||||
|         return this.value; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,87 @@ | ||||
| package com.cnbm.admin.exception; | ||||
|  | ||||
| import cn.hutool.core.map.MapUtil; | ||||
| import com.cnbm.admin.entity.SysLogErrorEntity; | ||||
| import com.cnbm.admin.service.SysLogErrorService; | ||||
| import com.cnbm.common.exception.ErrorCode; | ||||
| import com.cnbm.common.exception.ExceptionUtils; | ||||
| import com.cnbm.common.exception.RenException; | ||||
| import com.cnbm.common.utils.HttpContextUtils; | ||||
| import com.cnbm.common.utils.IpUtils; | ||||
| import com.cnbm.common.utils.JsonUtils; | ||||
| import com.cnbm.common.utils.Result; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.dao.DuplicateKeyException; | ||||
| import org.springframework.http.HttpHeaders; | ||||
| import org.springframework.web.bind.annotation.ExceptionHandler; | ||||
| import org.springframework.web.bind.annotation.RestControllerAdvice; | ||||
|  | ||||
| import javax.servlet.http.HttpServletRequest; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:05 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| //@RestControllerAdvice | ||||
| //public class RenExceptionHandler { | ||||
| //    private static final Logger logger = LoggerFactory.getLogger(RenExceptionHandler.class); | ||||
| // | ||||
| //    @Autowired | ||||
| //    private SysLogErrorService sysLogErrorService; | ||||
| // | ||||
| //    /** | ||||
| //     * 处理自定义异常 | ||||
| //     */ | ||||
| //    @ExceptionHandler(RenException.class) | ||||
| //    public Result handleRenException(RenException ex){ | ||||
| //        Result result = new Result(); | ||||
| //        result.error(ex.getCode(), ex.getMsg()); | ||||
| // | ||||
| //        return result; | ||||
| //    } | ||||
| // | ||||
| //    @ExceptionHandler(DuplicateKeyException.class) | ||||
| //    public Result handleDuplicateKeyException(DuplicateKeyException ex){ | ||||
| //        Result result = new Result(); | ||||
| //        result.error(ErrorCode.DB_RECORD_EXISTS); | ||||
| // | ||||
| //        return result; | ||||
| //    } | ||||
| // | ||||
| //    @ExceptionHandler(Exception.class) | ||||
| //    public Result handleException(Exception ex){ | ||||
| //        logger.error(ex.getMessage(), ex); | ||||
| // | ||||
| //        saveLog(ex); | ||||
| // | ||||
| //        return new Result().error(); | ||||
| //    } | ||||
| // | ||||
| //    /** | ||||
| //     * 保存异常日志 | ||||
| //     */ | ||||
| //    private void saveLog(Exception ex){ | ||||
| //        SysLogErrorEntity log = new SysLogErrorEntity(); | ||||
| // | ||||
| //        //请求相关信息 | ||||
| //        HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); | ||||
| //        log.setIp(IpUtils.getIpAddr(request)); | ||||
| //        log.setUserAgent(request.getHeader(HttpHeaders.USER_AGENT)); | ||||
| //        log.setRequestUri(request.getRequestURI()); | ||||
| //        log.setRequestMethod(request.getMethod()); | ||||
| //        Map<String, String> params = HttpContextUtils.getParameterMap(request); | ||||
| //        if(MapUtil.isNotEmpty(params)){ | ||||
| //            log.setRequestParams(JsonUtils.toJsonString(params)); | ||||
| //        } | ||||
| // | ||||
| //        //异常信息 | ||||
| //        log.setErrorInfo(ExceptionUtils.getErrorStackTrace(ex)); | ||||
| // | ||||
| //        //保存 | ||||
| //        sysLogErrorService.save(log); | ||||
| //    } | ||||
| //} | ||||
| @@ -0,0 +1,28 @@ | ||||
| package com.cnbm.admin.execl; | ||||
|  | ||||
| import cn.afterturn.easypoi.excel.annotation.Excel; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:14 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| public class SysLogErrorExcel { | ||||
|     @Excel(name = "请求URI") | ||||
|     private String requestUri; | ||||
|     @Excel(name = "请求方式") | ||||
|     private String requestMethod; | ||||
|     @Excel(name = "请求参数") | ||||
|     private String requestParams; | ||||
|     @Excel(name = "User-Agent") | ||||
|     private String userAgent; | ||||
|     @Excel(name = "操作IP") | ||||
|     private String ip; | ||||
|     @Excel(name = "创建时间", format = "yyyy-MM-dd HH:mm:ss") | ||||
|     private Date createDate; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,36 @@ | ||||
| package com.cnbm.admin.execl; | ||||
|  | ||||
| import cn.afterturn.easypoi.excel.annotation.Excel; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 10:06 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| public class SysLogOperationExcel { | ||||
|     @Excel(name = "用户操作") | ||||
|     private String operation; | ||||
|     @Excel(name = "请求URI") | ||||
|     private String requestUri; | ||||
|     @Excel(name = "请求方式") | ||||
|     private String requestMethod; | ||||
|     @Excel(name = "请求参数") | ||||
|     private String requestParams; | ||||
|     @Excel(name = "请求时长(毫秒)") | ||||
|     private Integer requestTime; | ||||
|     @Excel(name = "User-Agent") | ||||
|     private String userAgent; | ||||
|     @Excel(name = "操作IP") | ||||
|     private String ip; | ||||
|     @Excel(name = "状态", replace = {"失败_0", "成功_1"}) | ||||
|     private Integer status; | ||||
|     @Excel(name = "用户名") | ||||
|     private String creatorName; | ||||
|     @Excel(name = "创建时间", format = "yyyy-MM-dd HH:mm:ss") | ||||
|     private Date createDate; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,20 @@ | ||||
| package com.cnbm.admin.execl; | ||||
|  | ||||
| import cn.afterturn.easypoi.excel.annotation.Excel; | ||||
| import lombok.Data; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:26 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| public class SysParamsExcel { | ||||
|     @Excel(name = "参数编码") | ||||
|     private String paramCode; | ||||
|     @Excel(name = "参数值") | ||||
|     private String paramValue; | ||||
|     @Excel(name = "备注") | ||||
|     private String remark; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,34 @@ | ||||
| package com.cnbm.admin.execl; | ||||
|  | ||||
| import cn.afterturn.easypoi.excel.annotation.Excel; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:25 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| public class SysUserExcel { | ||||
|     @Excel(name = "用户名") | ||||
|     private String username; | ||||
|     @Excel(name = "姓名") | ||||
|     private String realName; | ||||
|     @Excel(name = "性别", replace = {"男_0", "女_1", "保密_2"}) | ||||
|     private Integer gender; | ||||
|     @Excel(name = "邮箱") | ||||
|     private String email; | ||||
|     @Excel(name = "手机号") | ||||
|     private String mobile; | ||||
|     @Excel(name = "部门名称") | ||||
|     private String deptName; | ||||
|     @Excel(name = "状态", replace = {"停用_0", "正常_1"}) | ||||
|     private Integer status; | ||||
|     @Excel(name = "备注") | ||||
|     private String remark; | ||||
|     @Excel(name = "创建时间", format = "yyyy-MM-dd HH:mm:ss") | ||||
|     private Date createDate; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,65 @@ | ||||
| package com.cnbm.admin.filter; | ||||
|  | ||||
| import com.cnbm.admin.entity.LoginUser; | ||||
| import com.cnbm.admin.utils.JwtUtil; | ||||
| import io.jsonwebtoken.Claims; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.data.redis.core.RedisTemplate; | ||||
| import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; | ||||
| import org.springframework.security.core.context.SecurityContextHolder; | ||||
| import org.springframework.stereotype.Component; | ||||
| import org.springframework.util.StringUtils; | ||||
| import org.springframework.web.filter.OncePerRequestFilter; | ||||
|  | ||||
| import javax.servlet.FilterChain; | ||||
| import javax.servlet.ServletException; | ||||
| import javax.servlet.http.HttpServletRequest; | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import java.io.IOException; | ||||
| import java.util.Objects; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/8 1:51 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Component | ||||
| public class JwtAuthenticationTokenFilter extends OncePerRequestFilter { | ||||
|  | ||||
|     @Autowired | ||||
|     private RedisTemplate redisTemplate; | ||||
|  | ||||
|     @Override | ||||
|     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { | ||||
|         //获取token | ||||
| //        String token = request.getHeader("Authorization"); | ||||
|         String token = request.getHeader("token"); | ||||
|         if (!StringUtils.hasText(token)) { | ||||
|             //放行 | ||||
|             filterChain.doFilter(request, response); | ||||
|             return; | ||||
|         } | ||||
|         //解析token | ||||
|         String userid; | ||||
|         try { | ||||
|             Claims claims = JwtUtil.parseJWT(token); | ||||
|             userid = claims.getSubject(); | ||||
|         } catch (Exception e) { | ||||
|             e.printStackTrace(); | ||||
|             throw new RuntimeException("token非法"); | ||||
|         } | ||||
|         //从redis中获取用户信息 | ||||
|         String redisKey = "login:" + userid; | ||||
|         LoginUser loginUser = (LoginUser) redisTemplate.opsForValue().get(redisKey); | ||||
|         if(Objects.isNull(loginUser)){ | ||||
|             throw new RuntimeException("用户未登录"); | ||||
|         } | ||||
|         //存入SecurityContextHolder | ||||
|         //TODO 获取权限信息封装到Authentication中 | ||||
|         UsernamePasswordAuthenticationToken authenticationToken = | ||||
|                 new UsernamePasswordAuthenticationToken(loginUser,null,loginUser.getAuthorities()); | ||||
|         SecurityContextHolder.getContext().setAuthentication(authenticationToken); | ||||
|         //放行 | ||||
|         filterChain.doFilter(request, response); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,30 @@ | ||||
| package com.cnbm.admin.handler; | ||||
|  | ||||
| import com.cnbm.admin.utils.ResponseResult; | ||||
| import com.cnbm.admin.utils.WebUtils; | ||||
| import com.cnbm.common.utils.JsonUtils; | ||||
| import org.springframework.http.HttpStatus; | ||||
| import org.springframework.security.access.AccessDeniedException; | ||||
| import org.springframework.security.web.access.AccessDeniedHandler; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import javax.servlet.ServletException; | ||||
| import javax.servlet.http.HttpServletRequest; | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import java.io.IOException; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/9 11:55 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Component | ||||
| public class AccessDeniedHandlerImpl implements AccessDeniedHandler { | ||||
|     @Override | ||||
|     public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException { | ||||
|         ResponseResult result = new ResponseResult(HttpStatus.FORBIDDEN.value(),"您的权限不足"); | ||||
|         String json = JsonUtils.toJsonString(result); | ||||
|         //处理异常 | ||||
|         WebUtils.renderString(response,json); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,30 @@ | ||||
| package com.cnbm.admin.handler; | ||||
|  | ||||
| import com.cnbm.admin.utils.ResponseResult; | ||||
| import com.cnbm.admin.utils.WebUtils; | ||||
| import com.cnbm.common.utils.JsonUtils; | ||||
| import org.springframework.http.HttpStatus; | ||||
| import org.springframework.security.core.AuthenticationException; | ||||
| import org.springframework.security.web.AuthenticationEntryPoint; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import javax.servlet.ServletException; | ||||
| import javax.servlet.http.HttpServletRequest; | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import java.io.IOException; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/9 1:27 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Component | ||||
| public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint { | ||||
|     @Override | ||||
|     public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { | ||||
|         ResponseResult result = new ResponseResult(HttpStatus.UNAUTHORIZED.value(),"用户认证失败请查询登录"); | ||||
|         String json = JsonUtils.toJsonString(result); | ||||
|         //处理异常 | ||||
|         WebUtils.renderString(response,json); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										36
									
								
								ym-admin/src/main/java/com/cnbm/admin/params/LoginParam.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								ym-admin/src/main/java/com/cnbm/admin/params/LoginParam.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| package com.cnbm.admin.params; | ||||
|  | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
|  | ||||
| import javax.validation.constraints.NotBlank; | ||||
| import java.io.Serializable; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/8 9:29 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Data | ||||
| @ApiModel(value = "登录表单") | ||||
| public class LoginParam implements Serializable { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     @ApiModelProperty(value = "用户名", required = true) | ||||
|     @NotBlank(message="用户名不能为空") | ||||
|     private String username; | ||||
|  | ||||
|     @ApiModelProperty(value = "密码" , required = true) | ||||
|     @NotBlank(message="密码不能为空") | ||||
|     private String password; | ||||
|  | ||||
|     @ApiModelProperty(value = "验证码" , required = true) | ||||
|     @NotBlank(message="验证码不能为空") | ||||
|     private String captcha; | ||||
|  | ||||
|     @ApiModelProperty(value = "唯一标识" , required = true) | ||||
|     @NotBlank(message="uuid不能为空") | ||||
|     private String uuid; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,36 @@ | ||||
| package com.cnbm.admin.redis; | ||||
|  | ||||
| import com.cnbm.common.redis.RedisKeys; | ||||
| import com.cnbm.common.redis.RedisUtils; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:48 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Component | ||||
| public class SysParamsRedis { | ||||
|     @Autowired | ||||
|     private RedisUtils redisUtils; | ||||
|  | ||||
|     public void delete(Object[] paramCodes) { | ||||
|         String key = RedisKeys.getSysParamsKey(); | ||||
|         redisUtils.hDel(key, paramCodes); | ||||
|     } | ||||
|  | ||||
|     public void set(String paramCode, String paramValue){ | ||||
|         if(paramValue == null){ | ||||
|             return ; | ||||
|         } | ||||
|         String key = RedisKeys.getSysParamsKey(); | ||||
|         redisUtils.hSet(key, paramCode, paramValue); | ||||
|     } | ||||
|  | ||||
|     public String get(String paramCode){ | ||||
|         String key = RedisKeys.getSysParamsKey(); | ||||
|         return (String)redisUtils.hGet(key, paramCode); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,9 @@ | ||||
| package com.cnbm.admin.service; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/8 8:55 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public interface CaptchaService { | ||||
| } | ||||
| @@ -0,0 +1,16 @@ | ||||
| package com.cnbm.admin.service; | ||||
|  | ||||
| import com.cnbm.admin.params.LoginParam; | ||||
| import com.cnbm.admin.utils.ResponseResult; | ||||
|  | ||||
| import javax.servlet.http.HttpServletRequest; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/8 9:17 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public interface LoginService { | ||||
|  | ||||
|     ResponseResult login(HttpServletRequest request, LoginParam loginParam); | ||||
| } | ||||
| @@ -0,0 +1,32 @@ | ||||
| package com.cnbm.admin.service; | ||||
|  | ||||
| import com.cnbm.admin.dto.SysDeptDTO; | ||||
| import com.cnbm.admin.entity.SysDeptEntity; | ||||
| import com.cnbm.common.service.BaseService; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:38 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public interface SysDeptService extends BaseService<SysDeptEntity> { | ||||
|  | ||||
|     List<SysDeptDTO> list(Map<String, Object> params); | ||||
|  | ||||
|     SysDeptDTO get(Long id); | ||||
|  | ||||
|     void save(SysDeptDTO dto); | ||||
|  | ||||
|     void update(SysDeptDTO dto); | ||||
|  | ||||
|     void delete(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 根据部门ID,获取本部门及子部门ID列表 | ||||
|      * @param id   部门ID | ||||
|      */ | ||||
|     List<Long> getSubDeptIdList(Long id); | ||||
| } | ||||
| @@ -0,0 +1,27 @@ | ||||
| package com.cnbm.admin.service; | ||||
|  | ||||
| import com.cnbm.admin.dto.SysDictDataDTO; | ||||
| import com.cnbm.admin.entity.SysDictDataEntity; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.service.BaseService; | ||||
|  | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:58 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public interface SysDictDataService extends BaseService<SysDictDataEntity> { | ||||
|  | ||||
|     PageData<SysDictDataDTO> page(Map<String, Object> params); | ||||
|  | ||||
|     SysDictDataDTO get(Long id); | ||||
|  | ||||
|     void save(SysDictDataDTO dto); | ||||
|  | ||||
|     void update(SysDictDataDTO dto); | ||||
|  | ||||
|     void delete(Long[] ids); | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,34 @@ | ||||
| package com.cnbm.admin.service; | ||||
|  | ||||
| import com.cnbm.admin.dto.SysDictTypeDTO; | ||||
| import com.cnbm.admin.entity.DictType; | ||||
| import com.cnbm.admin.entity.SysDictTypeEntity; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.service.BaseService; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:58 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public interface SysDictTypeService extends BaseService<SysDictTypeEntity> { | ||||
|  | ||||
|     PageData<SysDictTypeDTO> page(Map<String, Object> params); | ||||
|  | ||||
|     SysDictTypeDTO get(Long id); | ||||
|  | ||||
|     void save(SysDictTypeDTO dto); | ||||
|  | ||||
|     void update(SysDictTypeDTO dto); | ||||
|  | ||||
|     void delete(Long[] ids); | ||||
|  | ||||
|     /** | ||||
|      * 获取所有字典 | ||||
|      */ | ||||
|     List<DictType> getAllList(); | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,24 @@ | ||||
| package com.cnbm.admin.service; | ||||
|  | ||||
| import com.cnbm.admin.dto.SysLogErrorDTO; | ||||
| import com.cnbm.admin.entity.SysLogErrorEntity; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.service.BaseService; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:08 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public interface SysLogErrorService extends BaseService<SysLogErrorEntity> { | ||||
|  | ||||
|     PageData<SysLogErrorDTO> page(Map<String, Object> params); | ||||
|  | ||||
|     List<SysLogErrorDTO> list(Map<String, Object> params); | ||||
|  | ||||
|     void save(SysLogErrorEntity entity); | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,23 @@ | ||||
| package com.cnbm.admin.service; | ||||
|  | ||||
| import com.cnbm.admin.dto.SysLogOperationDTO; | ||||
| import com.cnbm.admin.entity.SysLogOperationEntity; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.service.BaseService; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 9:52 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public interface SysLogOperationService extends BaseService<SysLogOperationEntity> { | ||||
|  | ||||
|     PageData<SysLogOperationDTO> page(Map<String, Object> params); | ||||
|  | ||||
|     List<SysLogOperationDTO> list(Map<String, Object> params); | ||||
|  | ||||
|     void save(SysLogOperationEntity entity); | ||||
| } | ||||
| @@ -0,0 +1,48 @@ | ||||
| package com.cnbm.admin.service; | ||||
|  | ||||
| import com.cnbm.admin.dto.SysMenuDTO; | ||||
| import com.cnbm.admin.entity.SysMenuEntity; | ||||
| import com.cnbm.admin.entity.SysUserEntity; | ||||
| import com.cnbm.common.service.BaseService; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Set; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:34 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public interface SysMenuService extends BaseService<SysMenuEntity> { | ||||
|  | ||||
|     SysMenuDTO get(Long id); | ||||
|  | ||||
|     void save(SysMenuDTO dto); | ||||
|  | ||||
|     void update(SysMenuDTO dto); | ||||
|  | ||||
|     void delete(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 菜单列表 | ||||
|      * | ||||
|      * @param type 菜单类型 | ||||
|      */ | ||||
|     List<SysMenuDTO> getAllMenuList(Integer type); | ||||
|  | ||||
|     /** | ||||
|      * 用户菜单列表 | ||||
|      * | ||||
|      * @param user  用户 | ||||
|      * @param type 菜单类型 | ||||
|      */ | ||||
|     List<SysMenuDTO> getUserMenuList(SysUserEntity user, Integer type); | ||||
|  | ||||
|     /** | ||||
|      * 根据父菜单,查询子菜单 | ||||
|      * @param pid  父菜单ID | ||||
|      */ | ||||
|     List<SysMenuDTO> getListPid(Long pid); | ||||
|  | ||||
|     Set<String> getUserPermissions(SysUserEntity user); | ||||
| } | ||||
| @@ -0,0 +1,50 @@ | ||||
| package com.cnbm.admin.service; | ||||
|  | ||||
| import com.cnbm.admin.dto.SysParamsDTO; | ||||
| import com.cnbm.admin.entity.SysParamsEntity; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.service.BaseService; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:23 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public interface SysParamsService extends BaseService<SysParamsEntity> { | ||||
|  | ||||
|     PageData<SysParamsDTO> page(Map<String, Object> params); | ||||
|  | ||||
|     List<SysParamsDTO> list(Map<String, Object> params); | ||||
|  | ||||
|     SysParamsDTO get(Long id); | ||||
|  | ||||
|     void save(SysParamsDTO dto); | ||||
|  | ||||
|     void update(SysParamsDTO dto); | ||||
|  | ||||
|     void delete(Long[] ids); | ||||
|  | ||||
|     /** | ||||
|      * 根据参数编码,获取参数的value值 | ||||
|      * | ||||
|      * @param paramCode  参数编码 | ||||
|      */ | ||||
|     String getValue(String paramCode); | ||||
|  | ||||
|     /** | ||||
|      * 根据参数编码,获取value的Object对象 | ||||
|      * @param paramCode  参数编码 | ||||
|      * @param clazz  Object对象 | ||||
|      */ | ||||
|     <T> T getValueObject(String paramCode, Class<T> clazz); | ||||
|  | ||||
|     /** | ||||
|      * 根据参数编码,更新value | ||||
|      * @param paramCode  参数编码 | ||||
|      * @param paramValue  参数值 | ||||
|      */ | ||||
|     int updateValueByCode(String paramCode, String paramValue); | ||||
| } | ||||
| @@ -0,0 +1,32 @@ | ||||
| package com.cnbm.admin.service; | ||||
|  | ||||
| import com.cnbm.admin.entity.SysRoleDataScopeEntity; | ||||
| import com.cnbm.common.service.BaseService; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:13 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public interface SysRoleDataScopeService extends BaseService<SysRoleDataScopeEntity> { | ||||
|  | ||||
|     /** | ||||
|      * 根据角色ID,获取部门ID列表 | ||||
|      */ | ||||
|     List<Long> getDeptIdList(Long roleId); | ||||
|  | ||||
|     /** | ||||
|      * 保存或修改 | ||||
|      * @param roleId      角色ID | ||||
|      * @param deptIdList  部门ID列表 | ||||
|      */ | ||||
|     void saveOrUpdate(Long roleId, List<Long> deptIdList); | ||||
|  | ||||
|     /** | ||||
|      * 根据角色id,删除角色数据权限关系 | ||||
|      * @param roleId 角色ids | ||||
|      */ | ||||
|     void deleteByRoleIds(Long[] roleId); | ||||
| } | ||||
| @@ -0,0 +1,38 @@ | ||||
| package com.cnbm.admin.service; | ||||
|  | ||||
| import com.cnbm.admin.entity.SysRoleMenuEntity; | ||||
| import com.cnbm.common.service.BaseService; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 3:02 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public interface SysRoleMenuService extends BaseService<SysRoleMenuEntity> { | ||||
|  | ||||
|     /** | ||||
|      * 根据角色ID,获取菜单ID列表 | ||||
|      */ | ||||
|     List<Long> getMenuIdList(Long roleId); | ||||
|  | ||||
|     /** | ||||
|      * 保存或修改 | ||||
|      * @param roleId      角色ID | ||||
|      * @param menuIdList  菜单ID列表 | ||||
|      */ | ||||
|     void saveOrUpdate(Long roleId, List<Long> menuIdList); | ||||
|  | ||||
|     /** | ||||
|      * 根据角色id,删除角色菜单关系 | ||||
|      * @param roleIds 角色ids | ||||
|      */ | ||||
|     void deleteByRoleIds(Long[] roleIds); | ||||
|  | ||||
|     /** | ||||
|      * 根据菜单id,删除角色菜单关系 | ||||
|      * @param menuId 菜单id | ||||
|      */ | ||||
|     void deleteByMenuId(Long menuId); | ||||
| } | ||||
| @@ -0,0 +1,30 @@ | ||||
| package com.cnbm.admin.service; | ||||
|  | ||||
| import com.cnbm.admin.dto.SysRoleDTO; | ||||
| import com.cnbm.admin.entity.SysRoleEntity; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.service.BaseService; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:07 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public interface SysRoleService extends BaseService<SysRoleEntity> { | ||||
|  | ||||
|     PageData<SysRoleDTO> page(Map<String, Object> params); | ||||
|  | ||||
|     List<SysRoleDTO> list(Map<String, Object> params); | ||||
|  | ||||
|     SysRoleDTO get(Long id); | ||||
|  | ||||
|     void save(SysRoleDTO dto); | ||||
|  | ||||
|     void update(SysRoleDTO dto); | ||||
|  | ||||
|     void delete(Long[] ids); | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,39 @@ | ||||
| package com.cnbm.admin.service; | ||||
|  | ||||
| import com.cnbm.admin.entity.SysRoleUserEntity; | ||||
| import com.cnbm.common.service.BaseService; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:33 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public interface SysRoleUserService extends BaseService<SysRoleUserEntity> { | ||||
|  | ||||
|     /** | ||||
|      * 保存或修改 | ||||
|      * @param userId      用户ID | ||||
|      * @param roleIdList  角色ID列表 | ||||
|      */ | ||||
|     void saveOrUpdate(Long userId, List<Long> roleIdList); | ||||
|  | ||||
|     /** | ||||
|      * 根据角色ids,删除角色用户关系 | ||||
|      * @param roleIds 角色ids | ||||
|      */ | ||||
|     void deleteByRoleIds(Long[] roleIds); | ||||
|  | ||||
|     /** | ||||
|      * 根据用户id,删除角色用户关系 | ||||
|      * @param userIds 用户ids | ||||
|      */ | ||||
|     void deleteByUserIds(Long[] userIds); | ||||
|  | ||||
|     /** | ||||
|      * 角色ID列表 | ||||
|      * @param userId  用户ID | ||||
|      */ | ||||
|     List<Long> getRoleIdList(Long userId); | ||||
| } | ||||
| @@ -0,0 +1,49 @@ | ||||
| package com.cnbm.admin.service; | ||||
|  | ||||
| import com.cnbm.admin.dto.SysUserDTO; | ||||
| import com.cnbm.admin.entity.SysUserEntity; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.service.BaseService; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:24 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public interface SysUserService extends BaseService<SysUserEntity> { | ||||
|  | ||||
|     PageData<SysUserDTO> page(Map<String, Object> params); | ||||
|  | ||||
|     List<SysUserDTO> list(Map<String, Object> params); | ||||
|  | ||||
|     SysUserDTO get(Long id); | ||||
|  | ||||
|     SysUserDTO getByUsername(String username); | ||||
|  | ||||
|     void save(SysUserDTO dto); | ||||
|  | ||||
|     void update(SysUserDTO dto); | ||||
|  | ||||
|     void delete(Long[] ids); | ||||
|  | ||||
|     /** | ||||
|      * 修改密码 | ||||
|      * @param id           用户ID | ||||
|      * @param newPassword  新密码 | ||||
|      */ | ||||
|     void updatePassword(Long id, String newPassword); | ||||
|  | ||||
|     /** | ||||
|      * 根据部门ID,查询用户数 | ||||
|      */ | ||||
|     int getCountByDeptId(Long deptId); | ||||
|  | ||||
|     /** | ||||
|      * 根据部门ID,查询用户Id列表 | ||||
|      */ | ||||
|     List<Long> getUserIdListByDeptId(List<Long> deptIdList); | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,51 @@ | ||||
| package com.cnbm.admin.service.impl; | ||||
|  | ||||
| import com.cnbm.admin.entity.LoginUser; | ||||
| import com.cnbm.admin.params.LoginParam; | ||||
| import com.cnbm.admin.utils.JwtUtil; | ||||
| import com.cnbm.admin.service.LoginService; | ||||
| import com.cnbm.admin.utils.ResponseResult; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.data.redis.core.RedisTemplate; | ||||
| import org.springframework.security.authentication.AuthenticationManager; | ||||
| import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; | ||||
| import org.springframework.security.core.Authentication; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import javax.servlet.http.HttpServletRequest; | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| import java.util.Objects; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/8 9:17 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Service | ||||
| public class LoginServiceImpl implements LoginService { | ||||
|  | ||||
|     @Autowired | ||||
|     private RedisTemplate redisTemplate; | ||||
|  | ||||
|     @Autowired | ||||
|     private AuthenticationManager authenticationManager; | ||||
|  | ||||
|     @Override | ||||
|     public ResponseResult login(HttpServletRequest request, LoginParam loginParam) { | ||||
|         UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginParam.getUsername(),loginParam.getPassword()); | ||||
|         Authentication authenticate = authenticationManager.authenticate(authenticationToken); | ||||
|         if (Objects.isNull(authenticate)) { | ||||
|             throw new RuntimeException("登录失败"); | ||||
|         } | ||||
|         //如果认证通过了,使用userid生成一个jwt jwt存入ResponseResult返回 | ||||
|         LoginUser loginUser = (LoginUser) authenticate.getPrincipal(); | ||||
|         String userid = loginUser.getSysUserEntity().getId().toString(); | ||||
|         String jwt = JwtUtil.createJWT(userid); | ||||
|         Map<String,String> map = new HashMap<>(); | ||||
|         map.put("token",jwt); | ||||
|         //把完整的用户信息存入redis  userid作为key | ||||
|         redisTemplate.opsForValue().set("login:"+userid,loginUser); | ||||
|         return new ResponseResult(200,"登录成功",map); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,165 @@ | ||||
| package com.cnbm.admin.service.impl; | ||||
|  | ||||
| import com.cnbm.admin.dao.SysDeptDao; | ||||
| import com.cnbm.admin.dao.SysUserDao; | ||||
| import com.cnbm.admin.dto.SysDeptDTO; | ||||
| import com.cnbm.admin.entity.LoginUser; | ||||
| import com.cnbm.admin.entity.SysDeptEntity; | ||||
| import com.cnbm.admin.entity.SysUserEntity; | ||||
| import com.cnbm.admin.enums.SuperAdminEnum; | ||||
| import com.cnbm.admin.service.SysDeptService; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.exception.ErrorCode; | ||||
| import com.cnbm.common.exception.RenException; | ||||
| import com.cnbm.common.service.impl.BaseServiceImpl; | ||||
| import com.cnbm.common.utils.ConvertUtils; | ||||
| import com.cnbm.common.utils.TreeUtils; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; | ||||
| import org.springframework.security.core.context.SecurityContextHolder; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:38 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Service | ||||
| public class SysDeptServiceImpl extends BaseServiceImpl<SysDeptDao, SysDeptEntity> implements SysDeptService { | ||||
|     @Autowired | ||||
|     private SysUserDao sysUserDao; | ||||
|  | ||||
|     @Override | ||||
|     public List<SysDeptDTO> list(Map<String, Object> params) { | ||||
|         //普通管理员,只能查询所属部门及子部门的数据 | ||||
|         UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); | ||||
|         LoginUser loginUser = (LoginUser) authentication.getPrincipal(); | ||||
|         SysUserEntity user = loginUser.getSysUserEntity(); | ||||
|         if(user.getSuperAdmin() == SuperAdminEnum.NO.value()) { | ||||
|             params.put("deptIdList", getSubDeptIdList(user.getDeptId())); | ||||
|         } | ||||
|  | ||||
|         //查询部门列表 | ||||
|         List<SysDeptEntity> entityList = baseDao.getList(params); | ||||
|  | ||||
|         List<SysDeptDTO> dtoList = ConvertUtils.sourceToTarget(entityList, SysDeptDTO.class); | ||||
|  | ||||
|         return TreeUtils.build(dtoList); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public SysDeptDTO get(Long id) { | ||||
|         //超级管理员,部门ID为null | ||||
|         if(id == null){ | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         SysDeptEntity entity = baseDao.getById(id); | ||||
|  | ||||
|         return ConvertUtils.sourceToTarget(entity, SysDeptDTO.class); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void save(SysDeptDTO dto) { | ||||
|         SysDeptEntity entity = ConvertUtils.sourceToTarget(dto, SysDeptEntity.class); | ||||
|  | ||||
|         entity.setPids(getPidList(entity.getPid())); | ||||
|         insert(entity); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void update(SysDeptDTO dto) { | ||||
|         SysDeptEntity entity = ConvertUtils.sourceToTarget(dto, SysDeptEntity.class); | ||||
|  | ||||
|         //上级部门不能为自身 | ||||
|         if(entity.getId().equals(entity.getPid())){ | ||||
|             throw new RenException(ErrorCode.SUPERIOR_DEPT_ERROR); | ||||
|         } | ||||
|  | ||||
|         //上级部门不能为下级部门 | ||||
|         List<Long> subDeptList = getSubDeptIdList(entity.getId()); | ||||
|         if(subDeptList.contains(entity.getPid())){ | ||||
|             throw new RenException(ErrorCode.SUPERIOR_DEPT_ERROR); | ||||
|         } | ||||
|  | ||||
|         entity.setPids(getPidList(entity.getPid())); | ||||
|         updateById(entity); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void delete(Long id) { | ||||
|         //判断是否有子部门 | ||||
|         List<Long> subList = getSubDeptIdList(id); | ||||
|         if(subList.size() > 1){ | ||||
|             throw new RenException(ErrorCode.DEPT_SUB_DELETE_ERROR); | ||||
|         } | ||||
|  | ||||
|         //判断部门下面是否有用户 | ||||
|         int count = sysUserDao.getCountByDeptId(id); | ||||
|         if(count > 0){ | ||||
|             throw new RenException(ErrorCode.DEPT_USER_DELETE_ERROR); | ||||
|         } | ||||
|  | ||||
|         //删除 | ||||
|         baseDao.deleteById(id); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<Long> getSubDeptIdList(Long id) { | ||||
|         List<Long> deptIdList = baseDao.getSubDeptIdList("%" + id + "%"); | ||||
|         deptIdList.add(id); | ||||
|  | ||||
|         return deptIdList; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取所有上级部门ID | ||||
|      * @param pid 上级ID | ||||
|      */ | ||||
|     private String getPidList(Long pid){ | ||||
|         //顶级部门,无上级部门 | ||||
|         if(Constant.DEPT_ROOT.equals(pid)){ | ||||
|             return Constant.DEPT_ROOT + ""; | ||||
|         } | ||||
|  | ||||
|         //所有部门的id、pid列表 | ||||
|         List<SysDeptEntity> deptList = baseDao.getIdAndPidList(); | ||||
|  | ||||
|         //list转map | ||||
|         Map<Long, SysDeptEntity> map = new HashMap<>(deptList.size()); | ||||
|         for(SysDeptEntity entity : deptList){ | ||||
|             map.put(entity.getId(), entity); | ||||
|         } | ||||
|  | ||||
|         //递归查询所有上级部门ID列表 | ||||
|         List<Long> pidList = new ArrayList<>(); | ||||
|         getPidTree(pid, map, pidList); | ||||
|  | ||||
|         return StringUtils.join(pidList, ","); | ||||
|     } | ||||
|  | ||||
|     private void getPidTree(Long pid, Map<Long, SysDeptEntity> map, List<Long> pidList) { | ||||
|         //顶级部门,无上级部门 | ||||
|         if(Constant.DEPT_ROOT.equals(pid)){ | ||||
|             return ; | ||||
|         } | ||||
|  | ||||
|         //上级部门存在 | ||||
|         SysDeptEntity parent = map.get(pid); | ||||
|         if(parent != null){ | ||||
|             getPidTree(parent.getPid(), map, pidList); | ||||
|         } | ||||
|  | ||||
|         pidList.add(pid); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,80 @@ | ||||
| package com.cnbm.admin.service.impl; | ||||
|  | ||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
| import com.baomidou.mybatisplus.core.metadata.IPage; | ||||
| import com.cnbm.admin.dao.SysDictDataDao; | ||||
| import com.cnbm.admin.dto.SysDictDataDTO; | ||||
| import com.cnbm.admin.entity.SysDictDataEntity; | ||||
| import com.cnbm.admin.service.SysDictDataService; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.service.impl.BaseServiceImpl; | ||||
| import com.cnbm.common.utils.ConvertUtils; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| import java.util.Arrays; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:59 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Service | ||||
| public class SysDictDataServiceImpl extends BaseServiceImpl<SysDictDataDao, SysDictDataEntity> implements SysDictDataService { | ||||
|  | ||||
|     @Override | ||||
|     public PageData<SysDictDataDTO> page(Map<String, Object> params) { | ||||
|         IPage<SysDictDataEntity> page = baseDao.selectPage( | ||||
|                 getPage(params, "sort", true), | ||||
|                 getWrapper(params) | ||||
|         ); | ||||
|  | ||||
|         return getPageData(page, SysDictDataDTO.class); | ||||
|     } | ||||
|  | ||||
|     private QueryWrapper<SysDictDataEntity> getWrapper(Map<String, Object> params){ | ||||
|         String dictTypeId = (String) params.get("dictTypeId"); | ||||
|         String dictLabel = (String) params.get("dictLabel"); | ||||
|         String dictValue = (String) params.get("dictValue"); | ||||
|  | ||||
|         QueryWrapper<SysDictDataEntity> wrapper = new QueryWrapper<>(); | ||||
|         wrapper.eq("dict_type_id", dictTypeId); | ||||
|         wrapper.like(StringUtils.isNotBlank(dictLabel), "dict_label", dictLabel); | ||||
|         wrapper.like(StringUtils.isNotBlank(dictValue), "dict_value", dictValue); | ||||
|  | ||||
|         return wrapper; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public SysDictDataDTO get(Long id) { | ||||
|         SysDictDataEntity entity = baseDao.selectById(id); | ||||
|  | ||||
|         return ConvertUtils.sourceToTarget(entity, SysDictDataDTO.class); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void save(SysDictDataDTO dto) { | ||||
|         SysDictDataEntity entity = ConvertUtils.sourceToTarget(dto, SysDictDataEntity.class); | ||||
|  | ||||
|         insert(entity); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void update(SysDictDataDTO dto) { | ||||
|         SysDictDataEntity entity = ConvertUtils.sourceToTarget(dto, SysDictDataEntity.class); | ||||
|  | ||||
|         updateById(entity); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void delete(Long[] ids) { | ||||
|         //删除 | ||||
|         deleteBatchIds(Arrays.asList(ids)); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,98 @@ | ||||
| package com.cnbm.admin.service.impl; | ||||
|  | ||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
| import com.baomidou.mybatisplus.core.metadata.IPage; | ||||
| import com.cnbm.admin.dao.SysDictDataDao; | ||||
| import com.cnbm.admin.dao.SysDictTypeDao; | ||||
| import com.cnbm.admin.dto.SysDictTypeDTO; | ||||
| import com.cnbm.admin.entity.DictData; | ||||
| import com.cnbm.admin.entity.DictType; | ||||
| import com.cnbm.admin.entity.SysDictTypeEntity; | ||||
| import com.cnbm.admin.service.SysDictTypeService; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.service.impl.BaseServiceImpl; | ||||
| import com.cnbm.common.utils.ConvertUtils; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:59 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Service | ||||
| public class SysDictTypeServiceImpl extends BaseServiceImpl<SysDictTypeDao, SysDictTypeEntity> implements SysDictTypeService { | ||||
|     @Autowired | ||||
|     private SysDictDataDao sysDictDataDao; | ||||
|     @Override | ||||
|     public PageData<SysDictTypeDTO> page(Map<String, Object> params) { | ||||
|         IPage<SysDictTypeEntity> page = baseDao.selectPage( | ||||
|                 getPage(params, "sort", true), | ||||
|                 getWrapper(params) | ||||
|         ); | ||||
|  | ||||
|         return getPageData(page, SysDictTypeDTO.class); | ||||
|     } | ||||
|  | ||||
|     private QueryWrapper<SysDictTypeEntity> getWrapper(Map<String, Object> params){ | ||||
|         String dictType = (String) params.get("dictType"); | ||||
|         String dictName = (String) params.get("dictName"); | ||||
|  | ||||
|         QueryWrapper<SysDictTypeEntity> wrapper = new QueryWrapper<>(); | ||||
|         wrapper.like(StringUtils.isNotBlank(dictType), "dict_type", dictType); | ||||
|         wrapper.like(StringUtils.isNotBlank(dictName), "dict_name", dictName); | ||||
|  | ||||
|         return wrapper; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public SysDictTypeDTO get(Long id) { | ||||
|         SysDictTypeEntity entity = baseDao.selectById(id); | ||||
|  | ||||
|         return ConvertUtils.sourceToTarget(entity, SysDictTypeDTO.class); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void save(SysDictTypeDTO dto) { | ||||
|         SysDictTypeEntity entity = ConvertUtils.sourceToTarget(dto, SysDictTypeEntity.class); | ||||
|  | ||||
|         insert(entity); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void update(SysDictTypeDTO dto) { | ||||
|         SysDictTypeEntity entity = ConvertUtils.sourceToTarget(dto, SysDictTypeEntity.class); | ||||
|  | ||||
|         updateById(entity); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void delete(Long[] ids) { | ||||
|         //删除 | ||||
|         deleteBatchIds(Arrays.asList(ids)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<DictType> getAllList() { | ||||
|         List<DictType> typeList = baseDao.getDictTypeList(); | ||||
|         List<DictData> dataList = sysDictDataDao.getDictDataList(); | ||||
|         for(DictType type : typeList){ | ||||
|             for(DictData data : dataList){ | ||||
|                 if(type.getId().equals(data.getDictTypeId())){ | ||||
|                     type.getDataList().add(data); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return typeList; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,55 @@ | ||||
| package com.cnbm.admin.service.impl; | ||||
|  | ||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
| import com.baomidou.mybatisplus.core.metadata.IPage; | ||||
| import com.cnbm.admin.dao.SysLogErrorDao; | ||||
| import com.cnbm.admin.dto.SysLogErrorDTO; | ||||
| import com.cnbm.admin.entity.SysLogErrorEntity; | ||||
| import com.cnbm.admin.service.SysLogErrorService; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.service.impl.BaseServiceImpl; | ||||
| import com.cnbm.common.utils.ConvertUtils; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:09 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Service | ||||
| public class SysLogErrorServiceImpl extends BaseServiceImpl<SysLogErrorDao, SysLogErrorEntity> implements SysLogErrorService { | ||||
|  | ||||
|     @Override | ||||
|     public PageData<SysLogErrorDTO> page(Map<String, Object> params) { | ||||
|         IPage<SysLogErrorEntity> page = baseDao.selectPage( | ||||
|                 getPage(params, Constant.CREATE_DATE, false), | ||||
|                 getWrapper(params) | ||||
|         ); | ||||
|  | ||||
|         return getPageData(page, SysLogErrorDTO.class); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<SysLogErrorDTO> list(Map<String, Object> params) { | ||||
|         List<SysLogErrorEntity> entityList = baseDao.selectList(getWrapper(params)); | ||||
|  | ||||
|         return ConvertUtils.sourceToTarget(entityList, SysLogErrorDTO.class); | ||||
|     } | ||||
|  | ||||
|     private QueryWrapper<SysLogErrorEntity> getWrapper(Map<String, Object> params){ | ||||
|         QueryWrapper<SysLogErrorEntity> wrapper = new QueryWrapper<>(); | ||||
|         return wrapper; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void save(SysLogErrorEntity entity) { | ||||
|         insert(entity); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,60 @@ | ||||
| package com.cnbm.admin.service.impl; | ||||
|  | ||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
| import com.baomidou.mybatisplus.core.metadata.IPage; | ||||
| import com.cnbm.admin.dao.SysLogOperationDao; | ||||
| import com.cnbm.admin.dto.SysLogOperationDTO; | ||||
| import com.cnbm.admin.entity.SysLogOperationEntity; | ||||
| import com.cnbm.admin.service.SysLogOperationService; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.service.impl.BaseServiceImpl; | ||||
| import com.cnbm.common.utils.ConvertUtils; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 9:52 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Service | ||||
| public class SysLogOperationServiceImpl extends BaseServiceImpl<SysLogOperationDao, SysLogOperationEntity> implements SysLogOperationService { | ||||
|  | ||||
|     @Override | ||||
|     public PageData<SysLogOperationDTO> page(Map<String, Object> params) { | ||||
|         IPage<SysLogOperationEntity> page = baseDao.selectPage( | ||||
|                 getPage(params, Constant.CREATE_DATE, false), | ||||
|                 getWrapper(params) | ||||
|         ); | ||||
|  | ||||
|         return getPageData(page, SysLogOperationDTO.class); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<SysLogOperationDTO> list(Map<String, Object> params) { | ||||
|         List<SysLogOperationEntity> entityList = baseDao.selectList(getWrapper(params)); | ||||
|  | ||||
|         return ConvertUtils.sourceToTarget(entityList, SysLogOperationDTO.class); | ||||
|     } | ||||
|  | ||||
|     private QueryWrapper<SysLogOperationEntity> getWrapper(Map<String, Object> params){ | ||||
|         String status = (String) params.get("status"); | ||||
|  | ||||
|         QueryWrapper<SysLogOperationEntity> wrapper = new QueryWrapper<>(); | ||||
|         wrapper.eq(StringUtils.isNotBlank(status), "status", status); | ||||
|  | ||||
|         return wrapper; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void save(SysLogOperationEntity entity) { | ||||
|         insert(entity); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,136 @@ | ||||
| package com.cnbm.admin.service.impl; | ||||
|  | ||||
| import com.cnbm.admin.dao.SysMenuDao; | ||||
| import com.cnbm.admin.dto.SysMenuDTO; | ||||
| import com.cnbm.admin.entity.SysMenuEntity; | ||||
| import com.cnbm.admin.entity.SysUserEntity; | ||||
| import com.cnbm.admin.enums.SuperAdminEnum; | ||||
| import com.cnbm.admin.service.SysMenuService; | ||||
| import com.cnbm.admin.service.SysRoleMenuService; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.exception.ErrorCode; | ||||
| import com.cnbm.common.exception.RenException; | ||||
| import com.cnbm.common.service.impl.BaseServiceImpl; | ||||
| import com.cnbm.common.utils.ConvertUtils; | ||||
| import com.cnbm.common.utils.TreeUtils; | ||||
| import lombok.extern.log4j.Log4j2; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| import java.util.*; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 2:35 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Service | ||||
| @Log4j2 | ||||
| public class SysMenuServiceImpl extends BaseServiceImpl<SysMenuDao, SysMenuEntity> implements SysMenuService { | ||||
|     @Autowired | ||||
|     private SysRoleMenuService sysRoleMenuService; | ||||
|  | ||||
|     @Autowired | ||||
|     private SysMenuDao sysMenuDao; | ||||
|  | ||||
|     @Override | ||||
|     public SysMenuDTO get(Long id) { | ||||
|         SysMenuEntity entity = baseDao.getById(id); | ||||
|  | ||||
|         SysMenuDTO dto = ConvertUtils.sourceToTarget(entity, SysMenuDTO.class); | ||||
|  | ||||
|         return dto; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void save(SysMenuDTO dto) { | ||||
|         SysMenuEntity entity = ConvertUtils.sourceToTarget(dto, SysMenuEntity.class); | ||||
|  | ||||
|         //保存菜单 | ||||
|         insert(entity); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void update(SysMenuDTO dto) { | ||||
|         SysMenuEntity entity = ConvertUtils.sourceToTarget(dto, SysMenuEntity.class); | ||||
|  | ||||
|         //上级菜单不能为自身 | ||||
|         if(entity.getId().equals(entity.getPid())){ | ||||
|             throw new RenException(ErrorCode.SUPERIOR_MENU_ERROR); | ||||
|         } | ||||
|  | ||||
|         //更新菜单 | ||||
|         updateById(entity); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void delete(Long id) { | ||||
|         //删除菜单 | ||||
|         deleteById(id); | ||||
|  | ||||
|         //删除角色菜单关系 | ||||
|         sysRoleMenuService.deleteByMenuId(id); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<SysMenuDTO> getAllMenuList(Integer type) { | ||||
|         List<SysMenuEntity> menuList = baseDao.getMenuList(type); | ||||
|  | ||||
|         List<SysMenuDTO> dtoList = ConvertUtils.sourceToTarget(menuList, SysMenuDTO.class); | ||||
|  | ||||
|         return TreeUtils.build(dtoList, Constant.MENU_ROOT); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<SysMenuDTO> getUserMenuList(SysUserEntity user, Integer type) { | ||||
|         List<SysMenuEntity> menuList = new ArrayList<>(); | ||||
|  | ||||
|  | ||||
|  | ||||
|         //系统管理员,拥有最高权限 | ||||
|         if(!Objects.isNull(user.getSuperAdmin()) && user.getSuperAdmin() == SuperAdminEnum.YES.value()){ | ||||
|             menuList = baseDao.getMenuList(type); | ||||
|         }else { | ||||
|             menuList = baseDao.getUserMenuList(user.getId(), type); | ||||
|         } | ||||
|  | ||||
|         List<SysMenuDTO> dtoList = ConvertUtils.sourceToTarget(menuList, SysMenuDTO.class); | ||||
|  | ||||
|         return TreeUtils.build(dtoList); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<SysMenuDTO> getListPid(Long pid) { | ||||
|         List<SysMenuEntity> menuList = baseDao.getListPid(pid); | ||||
|  | ||||
|         return ConvertUtils.sourceToTarget(menuList, SysMenuDTO.class); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Set<String> getUserPermissions(SysUserEntity user) { | ||||
|         //系统管理员,拥有最高权限 | ||||
|         List<String> permissionsList; | ||||
|         if(user.getSuperAdmin() == SuperAdminEnum.YES.value()) { | ||||
|             permissionsList = sysMenuDao.getPermissionsList(); | ||||
|         }else{ | ||||
|             permissionsList = sysMenuDao.getUserPermissionsList(user.getId()); | ||||
|         } | ||||
|  | ||||
|         //用户权限列表 | ||||
|         Set<String> permsSet = new HashSet<>(); | ||||
|         for(String permissions : permissionsList){ | ||||
|             if(StringUtils.isBlank(permissions)){ | ||||
|                 continue; | ||||
|             } | ||||
|             permsSet.addAll(Arrays.asList(permissions.trim().split(","))); | ||||
|         } | ||||
|  | ||||
|         return permsSet; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,133 @@ | ||||
| package com.cnbm.admin.service.impl; | ||||
|  | ||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
| import com.baomidou.mybatisplus.core.metadata.IPage; | ||||
| import com.cnbm.admin.dao.SysParamsDao; | ||||
| import com.cnbm.admin.dto.SysParamsDTO; | ||||
| import com.cnbm.admin.entity.SysParamsEntity; | ||||
| import com.cnbm.admin.redis.SysParamsRedis; | ||||
| import com.cnbm.admin.service.SysParamsService; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.exception.ErrorCode; | ||||
| import com.cnbm.common.exception.RenException; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.service.impl.BaseServiceImpl; | ||||
| import com.cnbm.common.utils.ConvertUtils; | ||||
| import com.cnbm.common.utils.JsonUtils; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:24 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Service | ||||
| public class SysParamsServiceImpl extends BaseServiceImpl<SysParamsDao, SysParamsEntity> implements SysParamsService { | ||||
|     @Autowired | ||||
|     private SysParamsRedis sysParamsRedis; | ||||
|  | ||||
|     @Override | ||||
|     public PageData<SysParamsDTO> page(Map<String, Object> params) { | ||||
|         IPage<SysParamsEntity> page = baseDao.selectPage( | ||||
|                 getPage(params, Constant.CREATE_DATE, false), | ||||
|                 getWrapper(params) | ||||
|         ); | ||||
|  | ||||
|         return getPageData(page, SysParamsDTO.class); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<SysParamsDTO> list(Map<String, Object> params) { | ||||
|         List<SysParamsEntity> entityList = baseDao.selectList(getWrapper(params)); | ||||
|  | ||||
|         return ConvertUtils.sourceToTarget(entityList, SysParamsDTO.class); | ||||
|     } | ||||
|  | ||||
|     private QueryWrapper<SysParamsEntity> getWrapper(Map<String, Object> params){ | ||||
|         String paramCode = (String) params.get("paramCode"); | ||||
|  | ||||
|         QueryWrapper<SysParamsEntity> wrapper = new QueryWrapper<>(); | ||||
|         wrapper.eq("param_type", 1); | ||||
|         wrapper.like(StringUtils.isNotBlank(paramCode), "param_code", paramCode); | ||||
|  | ||||
|         return wrapper; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public SysParamsDTO get(Long id) { | ||||
|         SysParamsEntity entity = baseDao.selectById(id); | ||||
|  | ||||
|         return ConvertUtils.sourceToTarget(entity, SysParamsDTO.class); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void save(SysParamsDTO dto) { | ||||
|         SysParamsEntity entity = ConvertUtils.sourceToTarget(dto, SysParamsEntity.class); | ||||
|         insert(entity); | ||||
|  | ||||
|         sysParamsRedis.set(entity.getParamCode(), entity.getParamValue()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void update(SysParamsDTO dto) { | ||||
|         SysParamsEntity entity = ConvertUtils.sourceToTarget(dto, SysParamsEntity.class); | ||||
|         updateById(entity); | ||||
|  | ||||
|         sysParamsRedis.set(entity.getParamCode(), entity.getParamValue()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void delete(Long[] ids) { | ||||
|         //删除Redis数据 | ||||
|         List<String> paramCodeList = baseDao.getParamCodeList(ids); | ||||
|         String[] paramCodes = paramCodeList.toArray(new String[paramCodeList.size()]); | ||||
|         sysParamsRedis.delete(paramCodes); | ||||
|  | ||||
|         //删除 | ||||
|         deleteBatchIds(Arrays.asList(ids)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String getValue(String paramCode) { | ||||
|         String paramValue = sysParamsRedis.get(paramCode); | ||||
|         if(paramValue == null){ | ||||
|             paramValue = baseDao.getValueByCode(paramCode); | ||||
|  | ||||
|             sysParamsRedis.set(paramCode, paramValue); | ||||
|         } | ||||
|         return paramValue; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public <T> T getValueObject(String paramCode, Class<T> clazz) { | ||||
|         String paramValue = getValue(paramCode); | ||||
|         if(StringUtils.isNotBlank(paramValue)){ | ||||
|             return JsonUtils.parseObject(paramValue, clazz); | ||||
|         } | ||||
|  | ||||
|         try { | ||||
|             return clazz.newInstance(); | ||||
|         } catch (Exception e) { | ||||
|             throw new RenException(ErrorCode.PARAMS_GET_ERROR); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public int updateValueByCode(String paramCode, String paramValue) { | ||||
|         int count = baseDao.updateValueByCode(paramCode, paramValue); | ||||
|         sysParamsRedis.set(paramCode, paramValue); | ||||
|         return count; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,53 @@ | ||||
| package com.cnbm.admin.service.impl; | ||||
|  | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import com.cnbm.admin.dao.SysRoleDataScopeDao; | ||||
| import com.cnbm.admin.entity.SysRoleDataScopeEntity; | ||||
| import com.cnbm.admin.service.SysRoleDataScopeService; | ||||
| import com.cnbm.common.service.impl.BaseServiceImpl; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:13 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Service | ||||
| public class SysRoleDataScopeServiceImpl extends BaseServiceImpl<SysRoleDataScopeDao, SysRoleDataScopeEntity> | ||||
|         implements SysRoleDataScopeService { | ||||
|  | ||||
|     @Override | ||||
|     public List<Long> getDeptIdList(Long roleId) { | ||||
|         return baseDao.getDeptIdList(roleId); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void saveOrUpdate(Long roleId, List<Long> deptIdList) { | ||||
|         //先删除角色数据权限关系 | ||||
|         deleteByRoleIds(new Long[]{roleId}); | ||||
|  | ||||
|         //角色没有一个数据权限的情况 | ||||
|         if(CollUtil.isEmpty(deptIdList)){ | ||||
|             return ; | ||||
|         } | ||||
|  | ||||
|         //保存角色数据权限关系 | ||||
|         for(Long deptId : deptIdList){ | ||||
|             SysRoleDataScopeEntity sysRoleDataScopeEntity = new SysRoleDataScopeEntity(); | ||||
|             sysRoleDataScopeEntity.setDeptId(deptId); | ||||
|             sysRoleDataScopeEntity.setRoleId(roleId); | ||||
|  | ||||
|             //保存 | ||||
|             insert(sysRoleDataScopeEntity); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void deleteByRoleIds(Long[] roleIds) { | ||||
|         baseDao.deleteByRoleIds(roleIds); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,60 @@ | ||||
| package com.cnbm.admin.service.impl; | ||||
|  | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import com.cnbm.admin.dao.SysRoleMenuDao; | ||||
| import com.cnbm.admin.entity.SysRoleMenuEntity; | ||||
| import com.cnbm.admin.service.SysRoleMenuService; | ||||
| import com.cnbm.common.service.impl.BaseServiceImpl; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 3:04 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Service | ||||
| public class SysRoleMenuServiceImpl extends BaseServiceImpl<SysRoleMenuDao, SysRoleMenuEntity> implements SysRoleMenuService { | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void saveOrUpdate(Long roleId, List<Long> menuIdList) { | ||||
|         //先删除角色菜单关系 | ||||
|         deleteByRoleIds(new Long[]{roleId}); | ||||
|  | ||||
|         //角色没有一个菜单权限的情况 | ||||
|         if(CollUtil.isEmpty(menuIdList)){ | ||||
|             return ; | ||||
|         } | ||||
|  | ||||
|         //保存角色菜单关系 | ||||
|         for(Long menuId : menuIdList){ | ||||
|             SysRoleMenuEntity sysRoleMenuEntity = new SysRoleMenuEntity(); | ||||
|             sysRoleMenuEntity.setMenuId(menuId); | ||||
|             sysRoleMenuEntity.setRoleId(roleId); | ||||
|  | ||||
|             //保存 | ||||
|             insert(sysRoleMenuEntity); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<Long> getMenuIdList(Long roleId){ | ||||
|         return baseDao.getMenuIdList(roleId); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void deleteByRoleIds(Long[] roleIds) { | ||||
|         baseDao.deleteByRoleIds(roleIds); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void deleteByMenuId(Long menuId) { | ||||
|         baseDao.deleteByMenuId(menuId); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,132 @@ | ||||
| package com.cnbm.admin.service.impl; | ||||
|  | ||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
| import com.baomidou.mybatisplus.core.metadata.IPage; | ||||
| import com.cnbm.admin.dao.SysRoleDao; | ||||
| import com.cnbm.admin.dto.SysRoleDTO; | ||||
| import com.cnbm.admin.entity.LoginUser; | ||||
| import com.cnbm.admin.entity.SysRoleEntity; | ||||
| import com.cnbm.admin.entity.SysUserEntity; | ||||
| import com.cnbm.admin.enums.SuperAdminEnum; | ||||
| import com.cnbm.admin.service.*; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.service.impl.BaseServiceImpl; | ||||
| import com.cnbm.common.utils.ConvertUtils; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; | ||||
| import org.springframework.security.core.context.SecurityContextHolder; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Objects; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/12 10:08 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Service | ||||
| public class SysRoleServiceImpl extends BaseServiceImpl<SysRoleDao, SysRoleEntity> implements SysRoleService { | ||||
|     @Autowired | ||||
|     private SysRoleMenuService sysRoleMenuService; | ||||
|     @Autowired | ||||
|     private SysRoleDataScopeService sysRoleDataScopeService; | ||||
|     @Autowired | ||||
|     private SysRoleUserService sysRoleUserService; | ||||
|     @Autowired | ||||
|     private SysDeptService sysDeptService; | ||||
|  | ||||
|     @Override | ||||
|     public PageData<SysRoleDTO> page(Map<String, Object> params) { | ||||
|         IPage<SysRoleEntity> page = baseDao.selectPage( | ||||
|                 getPage(params, Constant.CREATE_DATE, false), | ||||
|                 getWrapper(params) | ||||
|         ); | ||||
|  | ||||
|         return getPageData(page, SysRoleDTO.class); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<SysRoleDTO> list(Map<String, Object> params) { | ||||
|         List<SysRoleEntity> entityList = baseDao.selectList(getWrapper(params)); | ||||
|  | ||||
|         return ConvertUtils.sourceToTarget(entityList, SysRoleDTO.class); | ||||
|     } | ||||
|  | ||||
|     private QueryWrapper<SysRoleEntity> getWrapper(Map<String, Object> params){ | ||||
|         String name = (String)params.get("name"); | ||||
|  | ||||
|         QueryWrapper<SysRoleEntity> wrapper = new QueryWrapper<>(); | ||||
|         wrapper.like(StringUtils.isNotBlank(name), "name", name); | ||||
|  | ||||
|         //普通管理员,只能查询所属部门及子部门的数据 | ||||
|         UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); | ||||
|         LoginUser loginUser = (LoginUser) authentication.getPrincipal(); | ||||
|         SysUserEntity user = loginUser.getSysUserEntity(); | ||||
|         if(!Objects.isNull(user.getSuperAdmin()) && user.getSuperAdmin() == SuperAdminEnum.NO.value()) { | ||||
|             List<Long> deptIdList = sysDeptService.getSubDeptIdList(user.getDeptId()); | ||||
|             wrapper.in(deptIdList != null, "dept_id", deptIdList); | ||||
|         } | ||||
|  | ||||
|         return wrapper; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public SysRoleDTO get(Long id) { | ||||
|         SysRoleEntity entity = baseDao.selectById(id); | ||||
|  | ||||
|         return ConvertUtils.sourceToTarget(entity, SysRoleDTO.class); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void save(SysRoleDTO dto) { | ||||
|         SysRoleEntity entity = ConvertUtils.sourceToTarget(dto, SysRoleEntity.class); | ||||
|  | ||||
|         //保存角色 | ||||
|         insert(entity); | ||||
|  | ||||
|         //保存角色菜单关系 | ||||
|         sysRoleMenuService.saveOrUpdate(entity.getId(), dto.getMenuIdList()); | ||||
|  | ||||
|         //保存角色数据权限关系 | ||||
|         sysRoleDataScopeService.saveOrUpdate(entity.getId(), dto.getDeptIdList()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void update(SysRoleDTO dto) { | ||||
|         SysRoleEntity entity = ConvertUtils.sourceToTarget(dto, SysRoleEntity.class); | ||||
|  | ||||
|         //更新角色 | ||||
|         updateById(entity); | ||||
|  | ||||
|         //更新角色菜单关系 | ||||
|         sysRoleMenuService.saveOrUpdate(entity.getId(), dto.getMenuIdList()); | ||||
|  | ||||
|         //更新角色数据权限关系 | ||||
|         sysRoleDataScopeService.saveOrUpdate(entity.getId(), dto.getDeptIdList()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void delete(Long[] ids) { | ||||
|         //删除角色 | ||||
|         baseDao.deleteBatchIds(Arrays.asList(ids)); | ||||
|  | ||||
|         //删除角色用户关系 | ||||
|         sysRoleUserService.deleteByRoleIds(ids); | ||||
|  | ||||
|         //删除角色菜单关系 | ||||
|         sysRoleMenuService.deleteByRoleIds(ids); | ||||
|  | ||||
|         //删除角色数据权限关系 | ||||
|         sysRoleDataScopeService.deleteByRoleIds(ids); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,56 @@ | ||||
| package com.cnbm.admin.service.impl; | ||||
|  | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import com.cnbm.admin.dao.SysRoleUserDao; | ||||
| import com.cnbm.admin.entity.SysRoleUserEntity; | ||||
| import com.cnbm.admin.service.SysRoleUserService; | ||||
| import com.cnbm.common.service.impl.BaseServiceImpl; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:34 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Service | ||||
| public class SysRoleUserServiceImpl extends BaseServiceImpl<SysRoleUserDao, SysRoleUserEntity> implements SysRoleUserService { | ||||
|  | ||||
|     @Override | ||||
|     public void saveOrUpdate(Long userId, List<Long> roleIdList) { | ||||
|         //先删除角色用户关系 | ||||
|         deleteByUserIds(new Long[]{userId}); | ||||
|  | ||||
|         //用户没有一个角色权限的情况 | ||||
|         if(CollUtil.isEmpty(roleIdList)){ | ||||
|             return ; | ||||
|         } | ||||
|  | ||||
|         //保存角色用户关系 | ||||
|         for(Long roleId : roleIdList){ | ||||
|             SysRoleUserEntity sysRoleUserEntity = new SysRoleUserEntity(); | ||||
|             sysRoleUserEntity.setUserId(userId); | ||||
|             sysRoleUserEntity.setRoleId(roleId); | ||||
|  | ||||
|             //保存 | ||||
|             insert(sysRoleUserEntity); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void deleteByRoleIds(Long[] roleIds) { | ||||
|         baseDao.deleteByRoleIds(roleIds); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void deleteByUserIds(Long[] userIds) { | ||||
|         baseDao.deleteByUserIds(userIds); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<Long> getRoleIdList(Long userId) { | ||||
|  | ||||
|         return baseDao.getRoleIdList(userId); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,154 @@ | ||||
| package com.cnbm.admin.service.impl; | ||||
|  | ||||
| import com.baomidou.mybatisplus.core.metadata.IPage; | ||||
| import com.cnbm.admin.dao.SysUserDao; | ||||
| import com.cnbm.admin.dto.SysUserDTO; | ||||
| import com.cnbm.admin.entity.LoginUser; | ||||
| import com.cnbm.admin.entity.SysUserEntity; | ||||
| import com.cnbm.admin.enums.SuperAdminEnum; | ||||
| import com.cnbm.admin.service.SysDeptService; | ||||
| import com.cnbm.admin.service.SysRoleUserService; | ||||
| import com.cnbm.admin.service.SysUserService; | ||||
| import com.cnbm.admin.utils.PasswordUtils; | ||||
| import com.cnbm.common.constant.Constant; | ||||
| import com.cnbm.common.page.PageData; | ||||
| import com.cnbm.common.service.impl.BaseServiceImpl; | ||||
| import com.cnbm.common.utils.ConvertUtils; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; | ||||
| import org.springframework.security.core.context.SecurityContextHolder; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:24 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Service | ||||
| public class SysUserServiceImpl extends BaseServiceImpl<SysUserDao, SysUserEntity> implements SysUserService { | ||||
|     @Autowired | ||||
|     private SysRoleUserService sysRoleUserService; | ||||
|     @Autowired | ||||
|     private SysDeptService sysDeptService; | ||||
|  | ||||
|     @Override | ||||
|     public PageData<SysUserDTO> page(Map<String, Object> params) { | ||||
|         //转换成like | ||||
|         paramsToLike(params, "username"); | ||||
|  | ||||
|         //分页 | ||||
|         IPage<SysUserEntity> page = getPage(params, Constant.CREATE_DATE, false); | ||||
|  | ||||
|         //普通管理员,只能查询所属部门及子部门的数据 | ||||
|         UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); | ||||
|         LoginUser loginUser = (LoginUser) authentication.getPrincipal(); | ||||
|         SysUserEntity user = loginUser.getSysUserEntity(); | ||||
|         if(user.getSuperAdmin() == SuperAdminEnum.NO.value()) { | ||||
|             params.put("deptIdList", sysDeptService.getSubDeptIdList(user.getDeptId())); | ||||
|         } | ||||
|  | ||||
|         //查询 | ||||
|         List<SysUserEntity> list = baseDao.getList(params); | ||||
|  | ||||
|         return getPageData(list, page.getTotal(), SysUserDTO.class); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<SysUserDTO> list(Map<String, Object> params) { | ||||
|         //普通管理员,只能查询所属部门及子部门的数据 | ||||
|         UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); | ||||
|         LoginUser loginUser = (LoginUser) authentication.getPrincipal(); | ||||
|         SysUserEntity user = loginUser.getSysUserEntity(); | ||||
|         if(user.getSuperAdmin() == SuperAdminEnum.NO.value()) { | ||||
|             params.put("deptIdList", sysDeptService.getSubDeptIdList(user.getDeptId())); | ||||
|         } | ||||
|  | ||||
|         List<SysUserEntity> entityList = baseDao.getList(params); | ||||
|  | ||||
|         return ConvertUtils.sourceToTarget(entityList, SysUserDTO.class); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public SysUserDTO get(Long id) { | ||||
|         SysUserEntity entity = baseDao.getById(id); | ||||
|  | ||||
|         return ConvertUtils.sourceToTarget(entity, SysUserDTO.class); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public SysUserDTO getByUsername(String username) { | ||||
|         SysUserEntity entity = baseDao.getByUsername(username); | ||||
|         return ConvertUtils.sourceToTarget(entity, SysUserDTO.class); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void save(SysUserDTO dto) { | ||||
|         SysUserEntity entity = ConvertUtils.sourceToTarget(dto, SysUserEntity.class); | ||||
|  | ||||
|         //密码加密 | ||||
|         String password = PasswordUtils.encode(entity.getPassword()); | ||||
|         entity.setPassword(password); | ||||
|  | ||||
|         //保存用户 | ||||
|         entity.setSuperAdmin(SuperAdminEnum.NO.value()); | ||||
|         insert(entity); | ||||
|  | ||||
|         //保存角色用户关系 | ||||
|         sysRoleUserService.saveOrUpdate(entity.getId(), dto.getRoleIdList()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void update(SysUserDTO dto) { | ||||
|         SysUserEntity entity = ConvertUtils.sourceToTarget(dto, SysUserEntity.class); | ||||
|  | ||||
|         //密码加密 | ||||
|         if(StringUtils.isBlank(dto.getPassword())){ | ||||
|             entity.setPassword(null); | ||||
|         }else{ | ||||
|             String password = PasswordUtils.encode(entity.getPassword()); | ||||
|             entity.setPassword(password); | ||||
|         } | ||||
|  | ||||
|         //更新用户 | ||||
|         updateById(entity); | ||||
|  | ||||
|         //更新角色用户关系 | ||||
|         sysRoleUserService.saveOrUpdate(entity.getId(), dto.getRoleIdList()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void delete(Long[] ids) { | ||||
|         //删除用户 | ||||
|         baseDao.deleteBatchIds(Arrays.asList(ids)); | ||||
|  | ||||
|         //删除角色用户关系 | ||||
|         sysRoleUserService.deleteByUserIds(ids); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void updatePassword(Long id, String newPassword) { | ||||
|         newPassword = PasswordUtils.encode(newPassword); | ||||
|  | ||||
|         baseDao.updatePassword(id, newPassword); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int getCountByDeptId(Long deptId) { | ||||
|         return baseDao.getCountByDeptId(deptId); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<Long> getUserIdListByDeptId(List<Long> deptIdList) { | ||||
|         return baseDao.getUserIdListByDeptId(deptIdList); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,57 @@ | ||||
| package com.cnbm.admin.service.impl; | ||||
|  | ||||
| import com.cnbm.admin.dao.UserDao; | ||||
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||
| import com.cnbm.admin.dto.SysMenuDTO; | ||||
| import com.cnbm.admin.dto.SysUserDTO; | ||||
| import com.cnbm.admin.entity.LoginUser; | ||||
| import com.cnbm.admin.entity.SysMenuEntity; | ||||
| import com.cnbm.admin.entity.SysUserEntity; | ||||
| import com.cnbm.admin.service.SysMenuService; | ||||
| import com.cnbm.common.utils.ConvertUtils; | ||||
| import lombok.extern.log4j.Log4j2; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.security.core.userdetails.UserDetails; | ||||
| import org.springframework.security.core.userdetails.UserDetailsService; | ||||
| import org.springframework.security.core.userdetails.UsernameNotFoundException; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| import java.util.Objects; | ||||
| import java.util.Set; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/8 8:57 AM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @Service | ||||
| @Log4j2 | ||||
| public class UserDetailsServiceImpl implements UserDetailsService { | ||||
|  | ||||
|     @Autowired | ||||
|     private UserDao userDao; | ||||
|  | ||||
|     @Autowired | ||||
|     private SysMenuService sysMenuService; | ||||
|  | ||||
|     @Override | ||||
|     public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { | ||||
|  | ||||
|         LambdaQueryWrapper<SysUserEntity> lambdaQueryWrapper = new LambdaQueryWrapper<>(); | ||||
|         lambdaQueryWrapper.eq(SysUserEntity::getUsername,username); | ||||
|         SysUserEntity sysUserEntity = userDao.selectOne(lambdaQueryWrapper); | ||||
|         if (Objects.isNull(sysUserEntity)) { | ||||
|             throw new UsernameNotFoundException("用户名不存在"); | ||||
|         } | ||||
|         log.info("sysUserEntity的值是"+sysUserEntity.toString()); | ||||
|         log.info("sysUserEntity.getSuperAdmin()=="+sysUserEntity.getSuperAdmin()); | ||||
|         Set<String> userPermissions = sysMenuService.getUserPermissions(sysUserEntity); | ||||
|  | ||||
|         List<String> list = userPermissions.stream().collect(Collectors.toList()); | ||||
|         log.info("list==="+list.toString()); | ||||
|         return new LoginUser(sysUserEntity,list); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										115
									
								
								ym-admin/src/main/java/com/cnbm/admin/utils/JwtUtil.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								ym-admin/src/main/java/com/cnbm/admin/utils/JwtUtil.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,115 @@ | ||||
| package com.cnbm.admin.utils; | ||||
|  | ||||
| import io.jsonwebtoken.Claims; | ||||
| import io.jsonwebtoken.JwtBuilder; | ||||
| import io.jsonwebtoken.Jwts; | ||||
| import io.jsonwebtoken.SignatureAlgorithm; | ||||
|  | ||||
| import javax.crypto.SecretKey; | ||||
| import javax.crypto.spec.SecretKeySpec; | ||||
| import java.util.Base64; | ||||
| import java.util.Date; | ||||
| import java.util.UUID; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/8 1:43 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public class JwtUtil { | ||||
|  | ||||
|     //有效期为 | ||||
|     public static final Long JWT_TTL = 60 * 60 *1000L;// 60 * 60 *1000  一个小时 | ||||
|     //设置秘钥明文 | ||||
|     public static final String JWT_KEY = "why"; | ||||
|  | ||||
|     public static String getUUID(){ | ||||
|         String token = UUID.randomUUID().toString().replaceAll("-", ""); | ||||
|         return token; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 生成jtw | ||||
|      * @param subject token中要存放的数据(json格式) | ||||
|      * @return | ||||
|      */ | ||||
|     public static String createJWT(String subject) { | ||||
|         JwtBuilder builder = getJwtBuilder(subject, null, getUUID());// 设置过期时间 | ||||
|         return builder.compact(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 生成jtw | ||||
|      * @param subject token中要存放的数据(json格式) | ||||
|      * @param ttlMillis token超时时间 | ||||
|      * @return | ||||
|      */ | ||||
|     public static String createJWT(String subject, Long ttlMillis) { | ||||
|         JwtBuilder builder = getJwtBuilder(subject, ttlMillis, getUUID());// 设置过期时间 | ||||
|         return builder.compact(); | ||||
|     } | ||||
|  | ||||
|     private static JwtBuilder getJwtBuilder(String subject, Long ttlMillis, String uuid) { | ||||
|         SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; | ||||
|         SecretKey secretKey = generalKey(); | ||||
|         long nowMillis = System.currentTimeMillis(); | ||||
|         Date now = new Date(nowMillis); | ||||
|         if(ttlMillis==null){ | ||||
|             ttlMillis=JwtUtil.JWT_TTL; | ||||
|         } | ||||
|         long expMillis = nowMillis + ttlMillis; | ||||
|         Date expDate = new Date(expMillis); | ||||
|         return Jwts.builder() | ||||
|                 .setId(uuid)              //唯一的ID | ||||
|                 .setSubject(subject)   // 主题  可以是JSON数据 | ||||
|                 .setIssuer("why")     // 签发者 | ||||
|                 .setIssuedAt(now)      // 签发时间 | ||||
|                 .signWith(signatureAlgorithm, secretKey) //使用HS256对称加密算法签名, 第二个参数为秘钥 | ||||
|                 .setExpiration(expDate); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 创建token | ||||
|      * @param id | ||||
|      * @param subject | ||||
|      * @param ttlMillis | ||||
|      * @return | ||||
|      */ | ||||
|     public static String createJWT(String id, String subject, Long ttlMillis) { | ||||
|         JwtBuilder builder = getJwtBuilder(subject, ttlMillis, id);// 设置过期时间 | ||||
|         return builder.compact(); | ||||
|     } | ||||
|  | ||||
|     public static void main(String[] args) throws Exception { | ||||
| //        String jwt = createJWT("123"); | ||||
|         Claims claims = parseJWT("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI5OWNhNGJhMjg5ZjU0OTVjODE5YTM0N2ExZmNlZjc0YSIsInN1YiI6IjEyMyIsImlzcyI6IndoeSIsImlhdCI6MTY1NDc1OTg5NiwiZXhwIjoxNjU0NzYzNDk2fQ.CTgS6yQjfXSGPJUTu-_rqjkh_KB_F9SzPThFfnvB5yg"); | ||||
|         String subject = claims.getSubject(); | ||||
|         System.out.println(subject); | ||||
| //        System.out.println(claims); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 生成加密后的秘钥 secretKey | ||||
|      * @return | ||||
|      */ | ||||
|     public static SecretKey generalKey() { | ||||
|         byte[] encodedKey = Base64.getDecoder().decode(JwtUtil.JWT_KEY); | ||||
|         SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES"); | ||||
|         return key; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 解析 | ||||
|      * | ||||
|      * @param jwt | ||||
|      * @return | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public static Claims parseJWT(String jwt) throws Exception { | ||||
|         SecretKey secretKey = generalKey(); | ||||
|         return Jwts.parser() | ||||
|                 .setSigningKey(secretKey) | ||||
|                 .parseClaimsJws(jwt) | ||||
|                 .getBody(); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,43 @@ | ||||
| package com.cnbm.admin.utils; | ||||
|  | ||||
| import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | ||||
| import org.springframework.security.crypto.password.PasswordEncoder; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/10 1:57 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public class PasswordUtils { | ||||
|     private static PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); | ||||
|  | ||||
|     /** | ||||
|      * 加密 | ||||
|      * @param str  字符串 | ||||
|      * @return     返回加密字符串 | ||||
|      */ | ||||
|     public static String encode(String str){ | ||||
|         return passwordEncoder.encode(str); | ||||
|     } | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * 比较密码是否相等 | ||||
|      * @param str  明文密码 | ||||
|      * @param  password  加密后密码 | ||||
|      * @return     true:成功    false:失败 | ||||
|      */ | ||||
|     public static boolean matches(String str, String password){ | ||||
|         return passwordEncoder.matches(str, password); | ||||
|     } | ||||
|  | ||||
|  | ||||
|     public static void main(String[] args) { | ||||
|         String str = "admin"; | ||||
|         String password = encode(str); | ||||
|  | ||||
|         System.out.println(password); | ||||
|         System.out.println(matches(str, password)); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,64 @@ | ||||
| package com.cnbm.admin.utils; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonInclude; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/9 1:27 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| @JsonInclude(JsonInclude.Include.NON_NULL) | ||||
| public class ResponseResult<T> { | ||||
|     /** | ||||
|      * 状态码 | ||||
|      */ | ||||
|     private Integer code; | ||||
|     /** | ||||
|      * 提示信息,如果有错误时,前端可以获取该字段进行提示 | ||||
|      */ | ||||
|     private String msg; | ||||
|     /** | ||||
|      * 查询到的结果数据, | ||||
|      */ | ||||
|     private T data; | ||||
|  | ||||
|     public ResponseResult(Integer code, String msg) { | ||||
|         this.code = code; | ||||
|         this.msg = msg; | ||||
|     } | ||||
|  | ||||
|     public ResponseResult(Integer code, T data) { | ||||
|         this.code = code; | ||||
|         this.data = data; | ||||
|     } | ||||
|  | ||||
|     public Integer getCode() { | ||||
|         return code; | ||||
|     } | ||||
|  | ||||
|     public void setCode(Integer code) { | ||||
|         this.code = code; | ||||
|     } | ||||
|  | ||||
|     public String getMsg() { | ||||
|         return msg; | ||||
|     } | ||||
|  | ||||
|     public void setMsg(String msg) { | ||||
|         this.msg = msg; | ||||
|     } | ||||
|  | ||||
|     public T getData() { | ||||
|         return data; | ||||
|     } | ||||
|  | ||||
|     public void setData(T data) { | ||||
|         this.data = data; | ||||
|     } | ||||
|  | ||||
|     public ResponseResult(Integer code, String msg, T data) { | ||||
|         this.code = code; | ||||
|         this.msg = msg; | ||||
|         this.data = data; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										34
									
								
								ym-admin/src/main/java/com/cnbm/admin/utils/WebUtils.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								ym-admin/src/main/java/com/cnbm/admin/utils/WebUtils.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| package com.cnbm.admin.utils; | ||||
|  | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import java.io.IOException; | ||||
|  | ||||
| /** | ||||
|  * @Author weihongyang | ||||
|  * @Date 2022/6/9 1:29 PM | ||||
|  * @Version 1.0 | ||||
|  */ | ||||
| public class WebUtils | ||||
| { | ||||
|     /** | ||||
|      * 将字符串渲染到客户端 | ||||
|      * | ||||
|      * @param response 渲染对象 | ||||
|      * @param string 待渲染的字符串 | ||||
|      * @return null | ||||
|      */ | ||||
|     public static String renderString(HttpServletResponse response, String string) { | ||||
|         try | ||||
|         { | ||||
|             response.setStatus(200); | ||||
|             response.setContentType("application/json"); | ||||
|             response.setCharacterEncoding("utf-8"); | ||||
|             response.getWriter().print(string); | ||||
|         } | ||||
|         catch (IOException e) | ||||
|         { | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user