mirror of
https://gitee.com/likeadmin/likeadmin_java.git
synced 2026-05-22 22:49:19 +08:00
init
This commit is contained in:
55
like-admin/pom.xml
Normal file
55
like-admin/pom.xml
Normal file
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<!-- 父工程 -->
|
||||
<parent>
|
||||
<artifactId>like-framework</artifactId>
|
||||
<groupId>org.hxkj</groupId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<!-- 模块信息 -->
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>like-admin</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<!-- 特性信息 -->
|
||||
<properties>
|
||||
<like-common>1.0-SNAPSHOT</like-common>
|
||||
</properties>
|
||||
|
||||
<!-- 项目管理 -->
|
||||
<dependencies>
|
||||
<!-- 公共依赖 -->
|
||||
<dependency>
|
||||
<groupId>org.hxkj</groupId>
|
||||
<artifactId>like-common</artifactId>
|
||||
<version>${like-common}</version>
|
||||
</dependency>
|
||||
<!-- Shiro鉴权依赖 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.shiro</groupId>
|
||||
<artifactId>shiro-spring</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<!-- 插件管理 -->
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>repackage</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.hxkj.admin;
|
||||
|
||||
import com.github.yulichang.injector.MPJSqlInjector;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
@ComponentScan(basePackages = {"com.hxkj"})
|
||||
@MapperScan(basePackages = {"com.hxkj.*.mapper"})
|
||||
@SpringBootApplication(exclude = {MPJSqlInjector.class})
|
||||
public class LikeAdminApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(LikeAdminApplication.class, args);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.hxkj.admin.config;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
public class MybatisPlusConfig {
|
||||
|
||||
/**
|
||||
* 分页插件集成
|
||||
*/
|
||||
@Bean
|
||||
public MybatisPlusInterceptor mybatisPlusInterceptor() {
|
||||
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
||||
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
|
||||
return interceptor;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.hxkj.admin.config;
|
||||
|
||||
import org.apache.catalina.User;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.apache.shiro.authc.*;
|
||||
import org.apache.shiro.authz.AuthorizationInfo;
|
||||
import org.apache.shiro.authz.SimpleAuthorizationInfo;
|
||||
import org.apache.shiro.realm.AuthorizingRealm;
|
||||
import org.apache.shiro.subject.PrincipalCollection;
|
||||
import org.apache.shiro.subject.Subject;
|
||||
|
||||
public class RealmConfig extends AuthorizingRealm {
|
||||
|
||||
/**
|
||||
* 授权
|
||||
* @param principals 主要
|
||||
* @return AuthorizationInfo
|
||||
*/
|
||||
@Override
|
||||
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
|
||||
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
|
||||
info.addStringPermission("user:add");
|
||||
|
||||
// 拿到当前登录对象
|
||||
Subject subject = SecurityUtils.getSubject();
|
||||
User currentUser = (User) subject.getPrincipal();
|
||||
//info.addStringPermission(currentUser.getPerms());
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 认证
|
||||
* @param token 令牌
|
||||
* @return AuthenticationInfo
|
||||
*/
|
||||
@Override
|
||||
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
|
||||
String name = "root";
|
||||
String password = "123456";
|
||||
|
||||
UsernamePasswordToken userToken = (UsernamePasswordToken) token;
|
||||
if (!userToken.getUsername().equals(name)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 密码认证
|
||||
return new SimpleAuthenticationInfo("", password, "");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.hxkj.admin.config;
|
||||
|
||||
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
|
||||
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
//@Configuration
|
||||
public class ShiroConfig {
|
||||
|
||||
/**
|
||||
* 拦截过滤器配置
|
||||
* @return ShiroFilterFactoryBean
|
||||
*/
|
||||
@Bean
|
||||
public ShiroFilterFactoryBean getShiroFactoryFilterBean(DefaultWebSecurityManager defaultWebSecurityManager) {
|
||||
// 设置安全管理器
|
||||
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
|
||||
bean.setSecurityManager(defaultWebSecurityManager);
|
||||
|
||||
/*
|
||||
* 设置内置过滤器
|
||||
* anon: 无需认证就可以访问
|
||||
* authc: 必须认证了才能访问
|
||||
* perms: 拥有某个资源权限才能访问
|
||||
* role: 拥有某个角色权限才能访问
|
||||
*/
|
||||
// Map<String, String> filterMap = new LinkedHashMap<>();
|
||||
// filterMap.put("/user/add", "authc");
|
||||
// filterMap.put("/user/update", "authc");
|
||||
// bean.setFilterChainDefinitionMap(filterMap);
|
||||
|
||||
// 未登录
|
||||
// bean.setLoginUrl("/toLogin");
|
||||
|
||||
// 未授权
|
||||
// bean.setUnauthorizedUrl("/auth");
|
||||
|
||||
return bean;
|
||||
}
|
||||
|
||||
// 安全管理器
|
||||
@Bean
|
||||
public DefaultWebSecurityManager getDefaultWebSecurityManager(RealmConfig realmConfig) {
|
||||
DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
|
||||
defaultWebSecurityManager.setRealm(realmConfig);
|
||||
return defaultWebSecurityManager;
|
||||
}
|
||||
|
||||
// 自定realm
|
||||
@Bean
|
||||
public RealmConfig userRealm() {
|
||||
return new RealmConfig();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.hxkj.admin.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
|
||||
import com.hxkj.common.entity.system.SysAdmin;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.apache.shiro.authc.IncorrectCredentialsException;
|
||||
import org.apache.shiro.authc.UnknownAccountException;
|
||||
import org.apache.shiro.authc.UsernamePasswordToken;
|
||||
import org.apache.shiro.subject.Subject;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
public class IndexController {
|
||||
|
||||
|
||||
@GetMapping("/user/add")
|
||||
public void index() {
|
||||
QueryWrapper<SysAdmin> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.apply("id = 1");
|
||||
|
||||
|
||||
}
|
||||
|
||||
@GetMapping("/user/update")
|
||||
public void ee() {
|
||||
System.out.println("小红");
|
||||
}
|
||||
|
||||
@RequestMapping("/login")
|
||||
public String login(String username, String password) {
|
||||
System.out.println(username);
|
||||
// 获取当前用户
|
||||
Subject subject = SecurityUtils.getSubject();
|
||||
|
||||
// 用户登录数据
|
||||
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
|
||||
|
||||
// 执行登录方法
|
||||
try {
|
||||
subject.login(token);
|
||||
return "登录成功";
|
||||
} catch (UnknownAccountException e) {
|
||||
return "用户名错误";
|
||||
} catch (IncorrectCredentialsException e) {
|
||||
return "密码错误";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
package com.hxkj.admin.controller.system;
|
||||
|
||||
import com.hxkj.admin.service.ISysAdminService;
|
||||
import com.hxkj.admin.validate.PageParam;
|
||||
import com.hxkj.admin.validate.SysAdminParam;
|
||||
import com.hxkj.admin.vo.system.SysAdminListVo;
|
||||
import com.hxkj.common.core.AjaxResult;
|
||||
import com.hxkj.common.core.PageResult;
|
||||
import com.hxkj.common.entity.system.SysAdmin;
|
||||
import com.hxkj.common.validator.annotation.IDMust;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/system/admin")
|
||||
public class SysAdminController {
|
||||
|
||||
@Resource
|
||||
ISysAdminService iSysAdminService;
|
||||
|
||||
/**
|
||||
* 管理员列表
|
||||
*
|
||||
* @author fzr
|
||||
* @return Object
|
||||
*/
|
||||
@GetMapping("/lists")
|
||||
public Object lists(@Validated PageParam pageParam) {
|
||||
PageResult<SysAdminListVo> list = iSysAdminService.lists(pageParam);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 管理员详情
|
||||
*
|
||||
* @param id 主键ID
|
||||
* @return Object
|
||||
*/
|
||||
@GetMapping("/detail")
|
||||
public Object detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
SysAdmin sysAdmin = iSysAdminService.detail(id);
|
||||
return AjaxResult.success(sysAdmin);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增管理员
|
||||
*
|
||||
* @author fzr
|
||||
* @param sysAdminParam 参数
|
||||
* @return Object
|
||||
*/
|
||||
@PostMapping("/add")
|
||||
public Object add(@Validated(value = SysAdminParam.create.class) @RequestBody SysAdminParam sysAdminParam) {
|
||||
iSysAdminService.add(sysAdminParam);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑管理员
|
||||
*
|
||||
* @author fzr
|
||||
* @param sysAdminParam 参数
|
||||
* @return Object
|
||||
*/
|
||||
@PostMapping("/edit")
|
||||
public Object edit(@Validated(value = SysAdminParam.update.class) @RequestBody SysAdminParam sysAdminParam) {
|
||||
iSysAdminService.edit(sysAdminParam);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除管理员
|
||||
*
|
||||
* @author fzr
|
||||
* @return Object
|
||||
*/
|
||||
@PostMapping("/del")
|
||||
public Object del(@Validated(value = SysAdminParam.delete.class) @RequestBody SysAdminParam sysAdminParam) {
|
||||
iSysAdminService.del(sysAdminParam.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
package com.hxkj.admin.controller.system;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.hxkj.admin.service.ISysMenuService;
|
||||
import com.hxkj.admin.validate.SysMenuParam;
|
||||
import com.hxkj.common.core.AjaxResult;
|
||||
import com.hxkj.common.entity.system.SysMenu;
|
||||
import com.hxkj.common.validator.annotation.IDMust;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/system/menu")
|
||||
public class SysMenuController {
|
||||
|
||||
@Resource
|
||||
ISysMenuService iSysMenuService;
|
||||
|
||||
/**
|
||||
* 获取菜单列表
|
||||
*
|
||||
* @author fzr
|
||||
* @return Object
|
||||
*/
|
||||
@GetMapping("/lists")
|
||||
public Object lists() {
|
||||
JSONArray lists = iSysMenuService.lists();
|
||||
return AjaxResult.success(lists);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取菜单详情
|
||||
*
|
||||
* @author fzr
|
||||
* @return Object
|
||||
*/
|
||||
@GetMapping("/detail")
|
||||
public Object detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
SysMenu sysMenu = iSysMenuService.detail(id);
|
||||
return AjaxResult.success(sysMenu);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增菜单
|
||||
*
|
||||
* @author fzr
|
||||
* @return Object
|
||||
*/
|
||||
@PostMapping("/add")
|
||||
public Object add(@Validated(value = SysMenuParam.create.class) @RequestBody SysMenuParam sysMenuParam) {
|
||||
iSysMenuService.add(sysMenuParam);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新菜单
|
||||
*
|
||||
* @author fzr
|
||||
* @return Object
|
||||
*/
|
||||
@PostMapping("/edit")
|
||||
public Object edit(@Validated(value = SysMenuParam.update.class) @RequestBody SysMenuParam sysMenuParam) {
|
||||
iSysMenuService.edit(sysMenuParam);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除菜单
|
||||
*
|
||||
* @author fzr
|
||||
* @return Object
|
||||
*/
|
||||
@PostMapping("/del")
|
||||
public Object del(@Validated(value = SysMenuParam.delete.class) @RequestBody SysMenuParam sysMenuParam) {
|
||||
iSysMenuService.del(sysMenuParam.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.hxkj.admin.controller.system;
|
||||
|
||||
import com.hxkj.admin.service.ISysRoleService;
|
||||
import com.hxkj.admin.validate.PageParam;
|
||||
import com.hxkj.admin.validate.SysAdminParam;
|
||||
import com.hxkj.admin.validate.SysRoleParam;
|
||||
import com.hxkj.admin.vo.system.SysRoleListVo;
|
||||
import com.hxkj.common.core.AjaxResult;
|
||||
import com.hxkj.common.core.PageResult;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/system/role")
|
||||
public class SysRoleController {
|
||||
|
||||
@Resource
|
||||
ISysRoleService iSysRoleService;
|
||||
|
||||
@GetMapping("/lists")
|
||||
public Object lists(@Validated PageParam pageParam) {
|
||||
PageResult<SysRoleListVo> lists = iSysRoleService.lists(pageParam);
|
||||
return AjaxResult.success(lists);
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
public Object detail() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@PostMapping("/add")
|
||||
public Object add(@Validated(value = SysRoleParam.create.class) @RequestBody SysRoleParam sysRoleParam) {
|
||||
iSysRoleService.add(sysRoleParam);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/edit")
|
||||
public Object edit(@Validated(value = SysRoleParam.create.class) @RequestBody SysRoleParam sysRoleParam) {
|
||||
iSysRoleService.edit(sysRoleParam);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/del")
|
||||
public Object del(@Validated(value = SysRoleParam.create.class) @RequestBody SysRoleParam sysRoleParam) {
|
||||
iSysRoleService.del(sysRoleParam.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.hxkj.admin.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.hxkj.admin.validate.PageParam;
|
||||
import com.hxkj.admin.validate.SysAdminParam;
|
||||
import com.hxkj.admin.vo.system.SysAdminListVo;
|
||||
import com.hxkj.common.core.PageResult;
|
||||
import com.hxkj.common.entity.system.SysAdmin;
|
||||
|
||||
public interface ISysAdminService extends IService<SysAdmin> {
|
||||
|
||||
/**
|
||||
* 获取管理员列表
|
||||
*
|
||||
* @author fzr
|
||||
* @param pageParam 分页参数
|
||||
* @return PageResult<SysAdminListVo>
|
||||
*/
|
||||
PageResult<SysAdminListVo> lists(PageParam pageParam);
|
||||
|
||||
/**
|
||||
* 获取管理员详情
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键参数
|
||||
* @return SysAdmin
|
||||
*/
|
||||
SysAdmin detail(Integer id);
|
||||
|
||||
/**
|
||||
* 新增管理员
|
||||
*
|
||||
* @author fzr
|
||||
* @param sysAdminParam 参数
|
||||
*/
|
||||
void add(SysAdminParam sysAdminParam);
|
||||
|
||||
/**
|
||||
* 编辑管理员
|
||||
*
|
||||
* @author fzr
|
||||
* @param sysAdminParam 参数
|
||||
*/
|
||||
void edit(SysAdminParam sysAdminParam);
|
||||
|
||||
/**
|
||||
* 删除管理员
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键参数
|
||||
*/
|
||||
void del(Integer id);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.hxkj.admin.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.hxkj.admin.validate.SysMenuParam;
|
||||
import com.hxkj.common.entity.system.SysMenu;
|
||||
|
||||
public interface ISysMenuService extends IService<SysMenu> {
|
||||
|
||||
JSONArray lists();
|
||||
|
||||
SysMenu detail(Integer id);
|
||||
|
||||
void add(SysMenuParam sysMenuParam);
|
||||
|
||||
void edit(SysMenuParam sysMenuParam);
|
||||
|
||||
void del(Integer id);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.hxkj.admin.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.hxkj.admin.validate.PageParam;
|
||||
import com.hxkj.admin.validate.SysRoleParam;
|
||||
import com.hxkj.admin.vo.system.SysRoleListVo;
|
||||
import com.hxkj.common.core.PageResult;
|
||||
import com.hxkj.common.entity.system.SysRole;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
public interface ISysRoleService extends IService<SysRole> {
|
||||
|
||||
/**
|
||||
* 根据id获取角色名称
|
||||
* @param id 角色ID
|
||||
* @return String
|
||||
*/
|
||||
String getRoleNameById(Integer id);
|
||||
|
||||
/**
|
||||
* 角色列表
|
||||
*
|
||||
* @author fzr
|
||||
* @param pageParam 参数
|
||||
* @return PageResult<SysRoleListVo>
|
||||
*/
|
||||
PageResult<SysRoleListVo> lists(@Validated PageParam pageParam);
|
||||
|
||||
/**
|
||||
* 角色详情
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键参数
|
||||
* @return SysRole
|
||||
*/
|
||||
SysRole detail(Integer id);
|
||||
|
||||
/**
|
||||
* 新增角色
|
||||
*
|
||||
* @author fzr
|
||||
* @param sysRoleParam 参数
|
||||
*/
|
||||
void add(SysRoleParam sysRoleParam);
|
||||
|
||||
/**
|
||||
* 更新角色
|
||||
*
|
||||
* @author fzr
|
||||
* @param sysRoleParam 参数
|
||||
*/
|
||||
void edit(SysRoleParam sysRoleParam);
|
||||
|
||||
/**
|
||||
* 删除角色
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键参数
|
||||
*/
|
||||
void del(Integer id);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,195 @@
|
||||
package com.hxkj.admin.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Assert;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.github.yulichang.base.MPJBaseServiceImpl;
|
||||
import com.hxkj.admin.service.ISysAdminService;
|
||||
import com.hxkj.admin.service.ISysRoleService;
|
||||
import com.hxkj.admin.validate.PageParam;
|
||||
import com.hxkj.admin.validate.SysAdminParam;
|
||||
import com.hxkj.admin.vo.system.SysAdminListVo;
|
||||
import com.hxkj.common.core.PageResult;
|
||||
import com.hxkj.common.entity.system.SysAdmin;
|
||||
import com.hxkj.common.mapper.system.SysAdminMapper;
|
||||
import com.hxkj.common.utils.TimeUtil;
|
||||
import com.hxkj.common.utils.ToolsUtil;
|
||||
import com.hxkj.common.utils.UrlUtil;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
|
||||
@Service
|
||||
public class ISysAdminServiceImpl extends MPJBaseServiceImpl<SysAdminMapper, SysAdmin> implements ISysAdminService {
|
||||
|
||||
@Resource
|
||||
ISysRoleService iSysRoleService;
|
||||
|
||||
/**
|
||||
* 获取管理员列表
|
||||
*
|
||||
* @author fzr
|
||||
* @param pageParam 分页参数
|
||||
* @return PageResult<SysAdminListVo>
|
||||
*/
|
||||
@Override
|
||||
public PageResult<SysAdminListVo> lists(PageParam pageParam) {
|
||||
Integer page = pageParam.getPageNo();
|
||||
Integer limit = pageParam.getPageSize();
|
||||
|
||||
QueryWrapper<SysAdmin> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.select(SysAdmin.class, info->
|
||||
!info.getColumn().equals("salt") &&
|
||||
!info.getColumn().equals("password") &&
|
||||
!info.getColumn().equals("is_delete") &&
|
||||
!info.getColumn().equals("delete_time"))
|
||||
.eq("is_delete", 0)
|
||||
.orderByDesc("sort");
|
||||
|
||||
IPage<SysAdmin> iPage = this.page(new Page<>(page, limit), queryWrapper);
|
||||
|
||||
List<SysAdminListVo> adminVoArrayList = new ArrayList<>();
|
||||
for (SysAdmin sysAdmin : iPage.getRecords()) {
|
||||
SysAdminListVo vo = new SysAdminListVo();
|
||||
BeanUtils.copyProperties(sysAdmin, vo);
|
||||
|
||||
vo.setRole(iSysRoleService.getRoleNameById(sysAdmin.getRole()));
|
||||
vo.setCreateTime(TimeUtil.timeToDate(sysAdmin.getCreateTime()));
|
||||
vo.setUpdateTime(TimeUtil.timeToDate(sysAdmin.getUpdateTime()));
|
||||
vo.setLastLoginTime(TimeUtil.timeToDate(sysAdmin.getLastLoginTime()));
|
||||
adminVoArrayList.add(vo);
|
||||
}
|
||||
|
||||
return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), adminVoArrayList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取管理员详细
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键
|
||||
* @return SysAdmin
|
||||
*/
|
||||
@Override
|
||||
public SysAdmin detail(Integer id) {
|
||||
SysAdmin sysAdmin = this.getOne(new QueryWrapper<SysAdmin>()
|
||||
.select(SysAdmin.class, info->
|
||||
!info.getColumn().equals("salt") &&
|
||||
!info.getColumn().equals("password") &&
|
||||
!info.getColumn().equals("is_delete") &&
|
||||
!info.getColumn().equals("delete_time"))
|
||||
.eq("id", id)
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1"));
|
||||
|
||||
Assert.notNull(sysAdmin, "账号已不存在!");
|
||||
|
||||
return sysAdmin;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增管理员
|
||||
*
|
||||
* @author fzr
|
||||
* @param sysAdminParam 参数
|
||||
*/
|
||||
@Override
|
||||
public void add(SysAdminParam sysAdminParam) {
|
||||
String[] field = {"id", "username", "nickname"};
|
||||
Assert.isNull(this.getOne(new QueryWrapper<SysAdmin>()
|
||||
.select(field)
|
||||
.eq("is_delete", 0)
|
||||
.eq("username", sysAdminParam.getUsername())
|
||||
.last("limit 1")), "账号已存在换一个吧!");
|
||||
|
||||
Assert.isNull(this.getOne(new QueryWrapper<SysAdmin>()
|
||||
.select(field)
|
||||
.eq("is_delete", 0)
|
||||
.eq("nickname", sysAdminParam.getNickname())
|
||||
.last("limit 1")), "昵称已存在换一个吧!");
|
||||
|
||||
String salt = ToolsUtil.randomString(5);
|
||||
String pwd = ToolsUtil.makeMd5(sysAdminParam.getPassword().trim() + salt);
|
||||
String avatar = UrlUtil.toRelativeUrl(sysAdminParam.getAvatar());
|
||||
|
||||
SysAdmin model = new SysAdmin();
|
||||
model.setUsername(sysAdminParam.getUsername());
|
||||
model.setNickname(sysAdminParam.getNickname());
|
||||
model.setRole(sysAdminParam.getRole());
|
||||
model.setAvatar(avatar);
|
||||
model.setPassword(pwd);
|
||||
model.setSalt(salt);
|
||||
model.setSort(sysAdminParam.getSort());
|
||||
model.setIsDisable(sysAdminParam.getIsDisable());
|
||||
model.setCreateTime(System.currentTimeMillis() / 1000);
|
||||
model.setUpdateTime(System.currentTimeMillis() / 1000);
|
||||
this.save(model);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新管理员
|
||||
*
|
||||
* @author fzr
|
||||
* @param sysAdminParam 参数
|
||||
*/
|
||||
@Override
|
||||
public void edit(SysAdminParam sysAdminParam) {
|
||||
String[] field = {"id", "username", "nickname"};
|
||||
Assert.isNull(this.getOne(new QueryWrapper<SysAdmin>()
|
||||
.select(field)
|
||||
.eq("is_delete", 0)
|
||||
.eq("username", sysAdminParam.getUsername())
|
||||
.ne("id", sysAdminParam.getId())
|
||||
.last("limit 1")), "账号已存在换一个吧!");
|
||||
|
||||
Assert.isNull(this.getOne(new QueryWrapper<SysAdmin>()
|
||||
.select(field)
|
||||
.eq("is_delete", 0)
|
||||
.eq("nickname", sysAdminParam.getNickname())
|
||||
.ne("id", sysAdminParam.getId())
|
||||
.last("limit 1")), "昵称已存在换一个吧!");
|
||||
|
||||
String avatar = UrlUtil.toRelativeUrl(sysAdminParam.getAvatar());
|
||||
String salt = ToolsUtil.randomString(5);
|
||||
String pwd = ToolsUtil.makeMd5(sysAdminParam.getPassword().trim() + salt);
|
||||
|
||||
SysAdmin model = new SysAdmin();
|
||||
model.setId(sysAdminParam.getId());
|
||||
model.setNickname(sysAdminParam.getNickname());
|
||||
model.setUsername(sysAdminParam.getUsername());
|
||||
model.setRole(sysAdminParam.getRole());
|
||||
model.setAvatar(avatar);
|
||||
model.setPassword(pwd);
|
||||
model.setSalt(salt);
|
||||
model.setSort(sysAdminParam.getSort());
|
||||
model.setIsDisable(sysAdminParam.getIsDisable());
|
||||
model.setUpdateTime(System.currentTimeMillis() / 1000);
|
||||
this.updateById(model);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除管理员
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键
|
||||
*/
|
||||
@Override
|
||||
public void del(Integer id) {
|
||||
String[] field = {"id", "username", "nickname"};
|
||||
Assert.notNull(this.getOne(new QueryWrapper<SysAdmin>()
|
||||
.select(field)
|
||||
.eq("id", id)
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1")), "账号已不存在!");
|
||||
|
||||
SysAdmin model = new SysAdmin();
|
||||
model.setId(id);
|
||||
model.setIsDelete(true);
|
||||
model.setDeleteTime(System.currentTimeMillis() / 1000);
|
||||
this.updateById(model);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
package com.hxkj.admin.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Assert;
|
||||
import com.github.yulichang.base.MPJBaseServiceImpl;
|
||||
import com.hxkj.admin.service.ISysMenuService;
|
||||
import com.hxkj.admin.validate.SysMenuParam;
|
||||
import com.hxkj.admin.vo.system.SysMenuListVo;
|
||||
import com.hxkj.common.entity.system.SysMenu;
|
||||
import com.hxkj.common.mapper.system.SysMenuMapper;
|
||||
import com.hxkj.common.utils.ArrayUtil;
|
||||
import com.hxkj.common.utils.TimeUtil;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class ISysMenuServiceImpl extends MPJBaseServiceImpl<SysMenuMapper, SysMenu> implements ISysMenuService {
|
||||
|
||||
/**
|
||||
* 菜单列表
|
||||
*
|
||||
* @author fzr
|
||||
* @return JSONArray
|
||||
*/
|
||||
@Override
|
||||
public JSONArray lists() {
|
||||
QueryWrapper<SysMenu> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.select(SysMenu.class, info->
|
||||
!info.getColumn().equals("salt") &&
|
||||
!info.getColumn().equals("is_delete") &&
|
||||
!info.getColumn().equals("delete_time"))
|
||||
.eq("is_delete", 0)
|
||||
.orderByDesc(Arrays.asList("menu_sort", "id"));
|
||||
|
||||
List<SysMenu> sysMenus = this.list( queryWrapper);
|
||||
|
||||
List<SysMenuListVo> lists = new ArrayList<>();
|
||||
for (SysMenu sysMenu : sysMenus) {
|
||||
SysMenuListVo vo = new SysMenuListVo();
|
||||
BeanUtils.copyProperties(sysMenu, vo);
|
||||
|
||||
vo.setCreateTime(TimeUtil.timeToDate(sysMenu.getCreateTime()));
|
||||
vo.setUpdateTime(TimeUtil.timeToDate(sysMenu.getUpdateTime()));
|
||||
lists.add(vo);
|
||||
}
|
||||
|
||||
JSONArray jsonArray = JSONArray.parseArray(JSONArray.toJSONString(lists));
|
||||
return ArrayUtil.listToTree(jsonArray, "id", "pid", "children");
|
||||
}
|
||||
|
||||
/**
|
||||
* 菜单详情
|
||||
*
|
||||
* @param id 主键参数
|
||||
* @return SysMenu
|
||||
*/
|
||||
@Override
|
||||
public SysMenu detail(Integer id) {
|
||||
SysMenu model = this.getOne(new QueryWrapper<SysMenu>()
|
||||
.eq("id", id)
|
||||
.eq("is_delete", 0));
|
||||
|
||||
Assert.notNull(model, "菜单已不存在!");
|
||||
|
||||
return model;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增菜单
|
||||
*
|
||||
* @author fzr
|
||||
* @param sysMenuParam 参数
|
||||
*/
|
||||
@Override
|
||||
public void add(SysMenuParam sysMenuParam) {
|
||||
SysMenu model = new SysMenu();
|
||||
model.setPid(sysMenuParam.getPid());
|
||||
model.setMenuType(sysMenuParam.getMenuType());
|
||||
model.setMenuName(sysMenuParam.getMenuName());
|
||||
model.setMenuIcon(sysMenuParam.getMenuIcon());
|
||||
model.setMenuSort(sysMenuParam.getMenuSort());
|
||||
model.setPerms(sysMenuParam.getPerms());
|
||||
model.setIsDisable(sysMenuParam.getIsDisable());
|
||||
model.setCreateTime(System.currentTimeMillis() / 1000);
|
||||
model.setUpdateTime(System.currentTimeMillis() / 1000);
|
||||
this.save(model);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑菜单
|
||||
*
|
||||
* @author fzr
|
||||
* @param sysMenuParam 菜单
|
||||
*/
|
||||
@Override
|
||||
public void edit(SysMenuParam sysMenuParam) {
|
||||
SysMenu model = this.getOne(new QueryWrapper<SysMenu>()
|
||||
.eq("id", sysMenuParam.getId())
|
||||
.eq("is_delete", 0));
|
||||
|
||||
Assert.notNull(model, "菜单已不存在!");
|
||||
|
||||
model.setMenuType(sysMenuParam.getMenuType());
|
||||
model.setMenuName(sysMenuParam.getMenuName());
|
||||
model.setMenuIcon(sysMenuParam.getMenuIcon());
|
||||
model.setMenuSort(sysMenuParam.getMenuSort());
|
||||
model.setPerms(sysMenuParam.getPerms());
|
||||
model.setPid(sysMenuParam.getPid());
|
||||
model.setIsDisable(sysMenuParam.getIsDisable());
|
||||
model.setUpdateTime(System.currentTimeMillis() / 1000);
|
||||
this.updateById(model);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除菜单
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键参数
|
||||
*/
|
||||
@Override
|
||||
public void del(Integer id) {
|
||||
SysMenu model = this.getOne(new QueryWrapper<SysMenu>()
|
||||
.eq("id", id)
|
||||
.eq("is_delete", 0));
|
||||
|
||||
Assert.notNull(model, "菜单已不存在!");
|
||||
|
||||
model.setId(id);
|
||||
model.setIsDelete(true);
|
||||
model.setDeleteTime(System.currentTimeMillis() / 1000);
|
||||
this.updateById(model);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,179 @@
|
||||
package com.hxkj.admin.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Assert;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.github.yulichang.base.MPJBaseServiceImpl;
|
||||
import com.hxkj.admin.service.ISysRoleService;
|
||||
import com.hxkj.admin.validate.PageParam;
|
||||
import com.hxkj.admin.validate.SysRoleParam;
|
||||
import com.hxkj.admin.vo.system.SysRoleListVo;
|
||||
import com.hxkj.common.core.PageResult;
|
||||
import com.hxkj.common.entity.system.SysRole;
|
||||
import com.hxkj.common.mapper.system.SysRoleMapper;
|
||||
import com.hxkj.common.utils.TimeUtil;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class ISysRoleServiceImpl extends MPJBaseServiceImpl<SysRoleMapper, SysRole> implements ISysRoleService {
|
||||
|
||||
/**
|
||||
* 根据ID获取角色名称
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 角色ID
|
||||
* @return String
|
||||
*/
|
||||
@Override
|
||||
public String getRoleNameById(Integer id) {
|
||||
QueryWrapper<SysRole> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.select("id", "name");
|
||||
queryWrapper.eq("id", id);
|
||||
queryWrapper.eq("is_delete", 0);
|
||||
queryWrapper.last("limit 1");
|
||||
|
||||
SysRole sysRole = this.getOne(queryWrapper, false);
|
||||
if (sysRole == null) {
|
||||
return "";
|
||||
}
|
||||
return sysRole.getName();
|
||||
}
|
||||
|
||||
/**
|
||||
* 角色列表
|
||||
*
|
||||
* @author fzr
|
||||
* @param pageParam 参数
|
||||
* @return PageResult<SysRoleListVo>
|
||||
*/
|
||||
@Override
|
||||
public PageResult<SysRoleListVo> lists(@Validated PageParam pageParam) {
|
||||
Integer page = pageParam.getPageNo();
|
||||
Integer limit = pageParam.getPageSize();
|
||||
|
||||
QueryWrapper<SysRole> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.select(SysRole.class, info->
|
||||
!info.getColumn().equals("is_delete") &&
|
||||
!info.getColumn().equals("delete_time"))
|
||||
.eq("is_delete", 0)
|
||||
.orderByDesc(Arrays.asList("sort", "id"));
|
||||
|
||||
IPage<SysRole> iPage = this.page(new Page<>(page, limit), queryWrapper);
|
||||
|
||||
List<SysRoleListVo> roleVoArrayList = new ArrayList<>();
|
||||
for (SysRole sysRole : iPage.getRecords()) {
|
||||
SysRoleListVo vo = new SysRoleListVo();
|
||||
BeanUtils.copyProperties(sysRole, vo);
|
||||
|
||||
vo.setCreateTime(TimeUtil.timeToDate(sysRole.getCreateTime()));
|
||||
vo.setUpdateTime(TimeUtil.timeToDate(sysRole.getUpdateTime()));
|
||||
roleVoArrayList.add(vo);
|
||||
}
|
||||
|
||||
return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), roleVoArrayList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 角色详情
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键参数
|
||||
* @return SysRole
|
||||
*/
|
||||
@Override
|
||||
public SysRole detail(Integer id) {
|
||||
SysRole sysRole = this.getOne(new QueryWrapper<SysRole>()
|
||||
.eq("id", id)
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1"));
|
||||
|
||||
Assert.notNull(sysRole, "角色已不存在!");
|
||||
|
||||
return sysRole;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增角色
|
||||
*
|
||||
* @author fzr
|
||||
* @param sysRoleParam 参数
|
||||
*/
|
||||
@Override
|
||||
public void add(SysRoleParam sysRoleParam) {
|
||||
Assert.isNull(this.getOne(new QueryWrapper<SysRole>()
|
||||
.select("id,name")
|
||||
.eq("name", sysRoleParam.getName().trim())
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1")), "角色名称已存在!");
|
||||
|
||||
SysRole model = new SysRole();
|
||||
model.setName(sysRoleParam.getName().trim());
|
||||
model.setRemark(sysRoleParam.getRemark());
|
||||
model.setMenuIds(sysRoleParam.getMenuIds());
|
||||
model.setIsDisable(sysRoleParam.getIsDisable());
|
||||
model.setCreateTime(System.currentTimeMillis() / 1000);
|
||||
model.setUpdateTime(System.currentTimeMillis() / 1000);
|
||||
this.save(model);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑角色
|
||||
*
|
||||
* @author fzr
|
||||
* @param sysRoleParam 参数
|
||||
*/
|
||||
@Override
|
||||
public void edit(SysRoleParam sysRoleParam) {
|
||||
Assert.notNull(this.getOne(new QueryWrapper<SysRole>()
|
||||
.select("id,name")
|
||||
.eq("id", sysRoleParam.getId())
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1")), "角色已不存在!");
|
||||
|
||||
Assert.isNull(this.getOne(new QueryWrapper<SysRole>()
|
||||
.select("id,name")
|
||||
.ne("id", sysRoleParam.getId())
|
||||
.eq("name", sysRoleParam.getName().trim())
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1")), "角色名称已存在!");
|
||||
|
||||
SysRole model = new SysRole();
|
||||
model.setId(sysRoleParam.getId());
|
||||
model.setName(sysRoleParam.getName().trim());
|
||||
model.setRemark(sysRoleParam.getRemark());
|
||||
model.setMenuIds(sysRoleParam.getMenuIds());
|
||||
model.setIsDisable(sysRoleParam.getIsDisable());
|
||||
model.setUpdateTime(System.currentTimeMillis() / 1000);
|
||||
this.updateById(model);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除角色
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键参数
|
||||
*/
|
||||
@Override
|
||||
public void del(Integer id) {
|
||||
SysRole sysRole = this.getOne(new QueryWrapper<SysRole>()
|
||||
.select("id,name")
|
||||
.eq("id", id)
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1"));
|
||||
|
||||
Assert.notNull(sysRole, "角色已不存在!");
|
||||
|
||||
sysRole.setId(id);
|
||||
sysRole.setIsDelete(true);
|
||||
sysRole.setDeleteTime(System.currentTimeMillis() / 1000);
|
||||
this.updateById(sysRole);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.hxkj.admin.validate;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.DecimalMax;
|
||||
import javax.validation.constraints.DecimalMin;
|
||||
|
||||
/**
|
||||
* 分页参数
|
||||
*/
|
||||
@Data
|
||||
public class PageParam {
|
||||
|
||||
// 当前分页
|
||||
@DecimalMin(value = "1", message = "pageNo参数必须大于0的数字")
|
||||
public Integer pageNo = 1;
|
||||
|
||||
// 每页条数
|
||||
@DecimalMin(value = "1", message = "pageSize参数必须是大于0的数字")
|
||||
@DecimalMax(value = "60", message = "pageSize参数必须是小于60的数字")
|
||||
private Integer pageSize = 20;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.hxkj.admin.validate;
|
||||
|
||||
import com.hxkj.common.validator.annotation.IDMust;
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
|
||||
import lombok.Data;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
/**
|
||||
* 系统管理员参数
|
||||
*/
|
||||
@Data
|
||||
public class SysAdminParam {
|
||||
|
||||
public interface create{}
|
||||
public interface update{}
|
||||
public interface delete{}
|
||||
|
||||
@IDMust(message = "id参数必传且需大于0", groups = {update.class, delete.class})
|
||||
private Integer id;
|
||||
|
||||
@NotNull(message = "请选择角色", groups = {create.class, update.class})
|
||||
@Min(value = 1, message = "role参数异常", groups = {create.class, update.class})
|
||||
private Integer role;
|
||||
|
||||
@NotEmpty(message = "账号不能为空", groups = {create.class, update.class})
|
||||
@Length(min = 2, max = 20, message = "账号必须在2~20个字符内", groups = {create.class, update.class})
|
||||
private String username;
|
||||
|
||||
@NotEmpty(message = "昵称不能为空", groups = {create.class, update.class})
|
||||
@Length(min = 2, max = 30, message = "昵称必须在2~30个字符内", groups = {create.class, update.class})
|
||||
private String nickname;
|
||||
|
||||
@NotEmpty(message = "密码不能为空", groups = {create.class, update.class})
|
||||
@Length(min = 6, max = 18, message = "密码必须在6~18个字符内", groups = {create.class, update.class})
|
||||
private String password;
|
||||
|
||||
@NotNull(message = "请选择状态", groups = {create.class, update.class})
|
||||
private Boolean isDisable;
|
||||
|
||||
@NotNull(message = "排序号不能为空", groups = {create.class, update.class})
|
||||
@DecimalMin(value = "0", message = "排序号值不能少于0", groups = {create.class, update.class})
|
||||
private Integer sort;
|
||||
|
||||
private String avatar = "";
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.hxkj.admin.validate;
|
||||
|
||||
import com.hxkj.common.validator.annotation.IDMust;
|
||||
import com.hxkj.common.validator.annotation.StringContains;
|
||||
import lombok.Data;
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
|
||||
import javax.validation.constraints.DecimalMin;
|
||||
import javax.validation.constraints.Max;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 系统菜单参数
|
||||
*/
|
||||
@Data
|
||||
public class SysMenuParam {
|
||||
|
||||
public interface create{}
|
||||
public interface update{}
|
||||
public interface delete{}
|
||||
|
||||
@IDMust(message = "id参数必传且需大于0", groups = {update.class, delete.class})
|
||||
private Integer id;
|
||||
|
||||
@NotNull(message = "上级菜单不能为空", groups = {create.class, update.class})
|
||||
@DecimalMin(value = "0", message = "上级菜单值不能少于0", groups = {create.class, update.class})
|
||||
private Integer pid;
|
||||
|
||||
@NotNull(message = "缺少参数menuType", groups = {create.class, update.class})
|
||||
@StringContains(values = {"M", "C", "A"}, message = "菜单类型不是合法值(M,C,A)", groups = {create.class, update.class})
|
||||
private String menuType;
|
||||
|
||||
@NotNull(message = "缺少参数menuName", groups = {create.class, update.class})
|
||||
@Length(min = 1, max = 30, message = "菜单名称必须在1~30个字符内", groups = {create.class, update.class})
|
||||
private String menuName;
|
||||
|
||||
@Length(max = 100, message = "图标名称不能超过100个字符", groups = {create.class, update.class})
|
||||
private String menuIcon;
|
||||
|
||||
@NotNull(message = "排序号不能为空", groups = {create.class, update.class})
|
||||
@DecimalMin(value = "0", message = "排序号值不能少于0", groups = {create.class, update.class})
|
||||
private Integer menuSort;
|
||||
|
||||
@Length(max = 100, message = "权限字符不能超过100个字符", groups = {create.class, update.class})
|
||||
private String perms;
|
||||
|
||||
@NotNull(message = "请选择状态", groups = {create.class, update.class})
|
||||
private Boolean isDisable;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.hxkj.admin.validate;
|
||||
|
||||
import com.hxkj.common.validator.annotation.IDMust;
|
||||
import lombok.Data;
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
|
||||
import javax.validation.constraints.DecimalMin;
|
||||
import javax.validation.constraints.Max;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Data
|
||||
public class SysRoleParam {
|
||||
|
||||
public interface create{}
|
||||
public interface update{}
|
||||
public interface delete{}
|
||||
|
||||
@IDMust(message = "id参数必传且需大于0", groups = {update.class, delete.class})
|
||||
private Integer id;
|
||||
|
||||
@NotNull(message = "缺少参数name", groups = {create.class, update.class})
|
||||
@Length(min = 1, max = 30, message = "角色名称必须在1~30个字符内", groups = {create.class, update.class})
|
||||
private String name;
|
||||
|
||||
@Max(value = 200, message = "备注信息不能超过200个字符")
|
||||
private String remark = "";
|
||||
|
||||
@NotNull(message = "排序号不能为空", groups = {create.class, update.class})
|
||||
@DecimalMin(value = "0", message = "排序号值不能少于0", groups = {create.class, update.class})
|
||||
private Integer sort;
|
||||
|
||||
@NotNull(message = "请选择状态", groups = {create.class, update.class})
|
||||
private Boolean isDisable;
|
||||
|
||||
private String menuIds = "";
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.hxkj.admin.vo.system;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class SysAdminListVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Integer id;
|
||||
private String username;
|
||||
private String nickname;
|
||||
private String avatar;
|
||||
private String role;
|
||||
private Boolean isDisable;
|
||||
private String lastLoginIp;
|
||||
private String lastLoginTime;
|
||||
private String createTime;
|
||||
private String updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.hxkj.admin.vo.system;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class SysMenuListVo {
|
||||
|
||||
private Integer id;
|
||||
private Integer pid;
|
||||
private String menuType;
|
||||
private String menuName;
|
||||
private String menuIcon;
|
||||
private Integer menuSort;
|
||||
private String perms;
|
||||
private Boolean isDisable;
|
||||
private String createTime;
|
||||
private String updateTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.hxkj.admin.vo.system;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class SysRoleListVo {
|
||||
|
||||
private Integer id;
|
||||
|
||||
private String name;
|
||||
|
||||
private String remark;
|
||||
|
||||
private Integer sort;
|
||||
|
||||
private Boolean isDisable;
|
||||
|
||||
private String createTime;
|
||||
|
||||
private String updateTime;
|
||||
|
||||
}
|
||||
41
like-admin/src/main/resources/application.yml
Normal file
41
like-admin/src/main/resources/application.yml
Normal file
@@ -0,0 +1,41 @@
|
||||
# 服务配置
|
||||
server:
|
||||
port: 8082
|
||||
|
||||
# 框架配置
|
||||
spring:
|
||||
profiles:
|
||||
active: test
|
||||
# 数据源配置
|
||||
datasource:
|
||||
url: jdbc:mysql://localhost:3306/local_frame?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
|
||||
type: com.zaxxer.hikari.HikariDataSource # 数据源类型
|
||||
driver-class-name: com.mysql.jdbc.Driver # MySql的驱动
|
||||
username: root # 数据库账号
|
||||
password: root # 数据库密码
|
||||
hikari:
|
||||
connection-timeout: 30000 # 等待连接分配连接的最大时长(毫秒),超出时长还没可用连接则发送SQLException,默认30秒
|
||||
minimum-idle: 5 # 最小连接数
|
||||
maximum-pool-size: 20 # 最大连接数
|
||||
auto-commit: true # 自动提交
|
||||
idle-timeout: 600000 # 连接超时的最大时长(毫秒),超时则被释放(retired),默认10分钟
|
||||
pool-name: DateSourceHikariCP # 连接池名称
|
||||
max-lifetime: 1800000 # 连接的生命时长(毫秒),超时而且没被使用则被释放,默认30分钟(1800000ms)
|
||||
connection-init-sql: SELECT 1 # 连接时发起SQL测试脚本
|
||||
# 限制配置
|
||||
servlet:
|
||||
multipart:
|
||||
max-file-size: 100MB # 文件上传大小限制
|
||||
max-request-size: 100MB # 文件最大请求限制
|
||||
enabled: true
|
||||
|
||||
# Mybatis-plus配置
|
||||
mybatis-plus:
|
||||
mapper-locations: classpath*:/mapper/**Mapper.xml # 映射文件路径
|
||||
typeAliasesPackage: com.hxkj.**.mapper
|
||||
configuration:
|
||||
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
||||
global-config:
|
||||
banner: false
|
||||
db-config:
|
||||
table-prefix: ls_ # 设置表前缀
|
||||
72
like-common/pom.xml
Normal file
72
like-common/pom.xml
Normal file
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<!-- 父工程 -->
|
||||
<parent>
|
||||
<groupId>org.hxkj</groupId>
|
||||
<artifactId>like-framework</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<!-- 模块信息 -->
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>like-common</artifactId>
|
||||
<name>like-common</name>
|
||||
|
||||
<!-- 依赖管理 -->
|
||||
<dependencies>
|
||||
<!-- Config依赖 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-autoconfigure</artifactId>
|
||||
</dependency>
|
||||
<!-- Web依赖 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<!-- Aop依赖 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-aop</artifactId>
|
||||
</dependency>
|
||||
<!-- Validation依赖 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-validation</artifactId>
|
||||
</dependency>
|
||||
<!-- Mysql连接依赖 -->
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
</dependency>
|
||||
<!-- MyBatisPlus依赖 -->
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
</dependency>
|
||||
<!-- MyBatisPlusJoin依赖 -->
|
||||
<dependency>
|
||||
<groupId>com.github.yulichang</groupId>
|
||||
<artifactId>mybatis-plus-join</artifactId>
|
||||
</dependency>
|
||||
<!-- MyBatis分页依赖 -->
|
||||
<dependency>
|
||||
<groupId>com.github.pagehelper</groupId>
|
||||
<artifactId>pagehelper-spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
<!-- Lombok依赖 -->
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
</dependency>
|
||||
<!-- fastjson -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>fastjson</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
165
like-common/src/main/java/com/hxkj/common/core/AjaxResult.java
Normal file
165
like-common/src/main/java/com/hxkj/common/core/AjaxResult.java
Normal file
@@ -0,0 +1,165 @@
|
||||
package com.hxkj.common.core;
|
||||
|
||||
import com.hxkj.common.enums.HttpEnum;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@Data
|
||||
public class AjaxResult {
|
||||
|
||||
/** 状态码 **/
|
||||
private Integer code;
|
||||
|
||||
/** 提示信息 **/
|
||||
private String msg;
|
||||
|
||||
/** 响应数据 **/
|
||||
private Object data;
|
||||
|
||||
/**
|
||||
* 无参构造
|
||||
*/
|
||||
public AjaxResult() {}
|
||||
|
||||
/**
|
||||
* 带参构造
|
||||
*
|
||||
* @author fzr
|
||||
* @param code 状态码
|
||||
* @param msg 提示信息
|
||||
* @param data 响应数据
|
||||
*/
|
||||
public AjaxResult(Integer code, String msg, Object data) {
|
||||
this.code = code;
|
||||
this.msg = msg;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 成功返回结果
|
||||
*
|
||||
* @author fzr
|
||||
* @return AjaxResult
|
||||
*/
|
||||
public static AjaxResult success() {
|
||||
return new AjaxResult(HttpEnum.SUCCESS.getCode(), HttpEnum.SUCCESS.getMsg(), new ArrayList<>());
|
||||
}
|
||||
|
||||
/**
|
||||
* 成功返回结果
|
||||
*
|
||||
* @author fzr
|
||||
* @param code 状态码
|
||||
* @return AjaxResult
|
||||
*/
|
||||
public static AjaxResult success(Integer code) {
|
||||
return new AjaxResult(code, HttpEnum.FAILED.getMsg(), new ArrayList<>());
|
||||
}
|
||||
|
||||
/**
|
||||
* 成功返回结果
|
||||
*
|
||||
* @author fzr
|
||||
* @param msg 提示信息
|
||||
* @return AjaxResult
|
||||
*/
|
||||
public static AjaxResult success(String msg) {
|
||||
return new AjaxResult(HttpEnum.SUCCESS.getCode(), msg, new ArrayList<>());
|
||||
}
|
||||
|
||||
/**
|
||||
* 成功返回结果
|
||||
*
|
||||
* @author fzr
|
||||
* @param data 响应数据
|
||||
* @return AjaxResult
|
||||
*/
|
||||
public static AjaxResult success(Object data) {
|
||||
return new AjaxResult(HttpEnum.SUCCESS.getCode(), HttpEnum.SUCCESS.getMsg(), data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 成功返回结果
|
||||
*
|
||||
* @author fzr
|
||||
* @param code 状态码
|
||||
* @param msg 提示信息
|
||||
* @return AjaxResult
|
||||
*/
|
||||
public static AjaxResult success(Integer code, String msg) {
|
||||
return new AjaxResult(code, msg, new ArrayList<>());
|
||||
}
|
||||
|
||||
/**
|
||||
* 成功返回结果
|
||||
*
|
||||
* @author fzr
|
||||
* @param code 状态码
|
||||
* @param msg 提示信息
|
||||
* @param data 响应数据
|
||||
* @return AjaxResult
|
||||
*/
|
||||
public static AjaxResult success(Integer code, String msg, Object data) {
|
||||
return new AjaxResult(code, msg, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 响应失败结果
|
||||
*
|
||||
* @author fzr
|
||||
* @param code 状态码
|
||||
* @return AjaxResult
|
||||
*/
|
||||
public static AjaxResult failed(Integer code) {
|
||||
return new AjaxResult(code, HttpEnum.FAILED.getMsg(), new ArrayList<>());
|
||||
}
|
||||
|
||||
/**
|
||||
* 响应失败结果
|
||||
*
|
||||
* @author fzr
|
||||
* @param msg 提示信息
|
||||
* @return AjaxResult
|
||||
*/
|
||||
public static AjaxResult failed(String msg) {
|
||||
return new AjaxResult(HttpEnum.FAILED.getCode(), msg, new ArrayList<>());
|
||||
}
|
||||
|
||||
/**
|
||||
* 响应失败结果
|
||||
*
|
||||
* @author fzr
|
||||
* @param data 响应数据
|
||||
* @return AjaxResult
|
||||
*/
|
||||
public static AjaxResult failed(Object data) {
|
||||
return new AjaxResult(HttpEnum.FAILED.getCode(), HttpEnum.FAILED.getMsg(), data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 响应失败结果
|
||||
*
|
||||
* @author fzr
|
||||
* @param code 状态码
|
||||
* @param msg 提示信息
|
||||
* @return AjaxResult
|
||||
*/
|
||||
public static AjaxResult failed(Integer code, String msg) {
|
||||
return new AjaxResult(code, msg, new ArrayList<>());
|
||||
}
|
||||
|
||||
/**
|
||||
* 响应失败结果
|
||||
*
|
||||
* @author fzr
|
||||
* @param code 状态码
|
||||
* @param msg 提示信息
|
||||
* @param data 响应数据
|
||||
* @return AjaxResult
|
||||
*/
|
||||
public static AjaxResult failed(Integer code, String msg, Object data) {
|
||||
return new AjaxResult(code, msg, data);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package com.hxkj.common.core;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class PageResult<T> {
|
||||
|
||||
private Long count; //总记录数
|
||||
private Integer pageNo; //当前页码
|
||||
private Integer pageSize; //每页条数
|
||||
private List<T> lists; //数据列表
|
||||
|
||||
/**
|
||||
* PageHelper分页
|
||||
*
|
||||
* @author fzr
|
||||
* @param list 分页数据集
|
||||
* @param <T> 实体类型
|
||||
* @return PageList
|
||||
*/
|
||||
public static <T> PageResult<T> pageHelper(List<T> list) {
|
||||
PageResult<T> pageResult = new PageResult<T>();
|
||||
PageInfo<T> pageInfo = new PageInfo<>(list);
|
||||
pageResult.setCount(pageInfo.getTotal());
|
||||
pageResult.setPageNo(pageInfo.getPageNum());
|
||||
pageResult.setPageSize(pageInfo.getPageSize());
|
||||
pageResult.setLists(pageInfo.getList());
|
||||
return pageResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* MyBatisPlus分页
|
||||
*
|
||||
* @author fzr
|
||||
* @param <T> 实体类型
|
||||
* @return PageList
|
||||
*/
|
||||
public static <T> PageResult<T> iPageHandle(IPage<T> iPage) {
|
||||
PageResult<T> pageResult = new PageResult<T>();
|
||||
pageResult.setCount(iPage.getTotal());
|
||||
pageResult.setPageNo((int) iPage.getCurrent());
|
||||
pageResult.setPageSize((int) iPage.getSize());
|
||||
pageResult.setLists(iPage.getRecords());
|
||||
return pageResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* MyBatisPlus分页
|
||||
*
|
||||
* @author fzr
|
||||
* @param <T> 实体类型
|
||||
* @return PageList
|
||||
*/
|
||||
public static <T> PageResult<T> iPageHandle(Long total, Long pageNo, Long size, List<T> lists) {
|
||||
PageResult<T> pageResult = new PageResult<T>();
|
||||
pageResult.setCount(total);
|
||||
pageResult.setPageNo(Math.toIntExact(pageNo));
|
||||
pageResult.setPageSize(Math.toIntExact(size));
|
||||
pageResult.setLists(lists);
|
||||
|
||||
return pageResult;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.hxkj.common.entity.system;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 系统管理员实体
|
||||
*/
|
||||
@Data
|
||||
public class SysAdmin implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value="id", type=IdType.AUTO)
|
||||
private Integer id;
|
||||
private String nickname;
|
||||
private String username;
|
||||
private String password;
|
||||
private String avatar;
|
||||
private String salt;
|
||||
private Integer role;
|
||||
private Integer sort;
|
||||
private Boolean isDisable;
|
||||
private Boolean isDelete;
|
||||
private String lastLoginIp;
|
||||
private Long lastLoginTime;
|
||||
private Long createTime;
|
||||
private Long updateTime;
|
||||
private Long deleteTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.hxkj.common.entity.system;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 系统菜单实体
|
||||
*/
|
||||
@Data
|
||||
public class SysMenu implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value="id", type= IdType.AUTO)
|
||||
private Integer id;
|
||||
private Integer pid;
|
||||
private String menuType;
|
||||
private String menuName;
|
||||
private String menuIcon;
|
||||
private Integer menuSort;
|
||||
private String perms;
|
||||
private Boolean isDisable;
|
||||
private Boolean isDelete;
|
||||
private Long createTime;
|
||||
private Long updateTime;
|
||||
private Long deleteTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.hxkj.common.entity.system;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 系统角色实体
|
||||
*/
|
||||
@Data
|
||||
public class SysRole implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value="id", type= IdType.AUTO)
|
||||
private Integer id;
|
||||
private String name;
|
||||
private String remark;
|
||||
private Integer sort;
|
||||
private String menuIds;
|
||||
private Boolean isDisable;
|
||||
private Boolean isDelete;
|
||||
private Long createTime;
|
||||
private Long updateTime;
|
||||
private Long deleteTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.hxkj.common.entity.system;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 系统角色菜单实体
|
||||
*/
|
||||
@Data
|
||||
public class SysRoleMenu implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value="id", type= IdType.AUTO)
|
||||
private Integer id;
|
||||
private Integer roleId;
|
||||
private Integer menuId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.hxkj.common.enums;
|
||||
|
||||
public enum HttpEnum {
|
||||
|
||||
SUCCESS(200, "成功"),
|
||||
FAILED(300, "失败"),
|
||||
PARAMS_VALID_ERROR(310, "参数校验错误"),
|
||||
PARAMS_TYPE_ERROR(320, "参数类型错误"),
|
||||
REQUEST_METHOD_ERROR(330, "请求方法错误"),
|
||||
ASSERT_ARGUMENT_ERROR(340, "断言参数错误"),
|
||||
ASSERT_MYBATIS_ERROR(350, "断言Mybatis错误"),
|
||||
NO_TOKEN(401, "token参数为空"),
|
||||
NO_LOGIN(402, "token参数无效"),
|
||||
NO_PERMISSION(403, "无相关权限"),
|
||||
NOT_DATA(404, "无相关数据"),
|
||||
SYSTEM_ERROR(500, "系统错误");
|
||||
|
||||
/**
|
||||
* 构造方法
|
||||
*/
|
||||
private final int code;
|
||||
private final String msg;
|
||||
HttpEnum(int code, String msg) {
|
||||
this.code = code;
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取状态码
|
||||
*
|
||||
* @author fzr
|
||||
* @return Long
|
||||
*/
|
||||
public int getCode() {
|
||||
return this.code;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取提示
|
||||
*
|
||||
* @author fzr
|
||||
* @return String
|
||||
*/
|
||||
public String getMsg() {
|
||||
return this.msg;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
package com.hxkj.common.exception;
|
||||
|
||||
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
|
||||
import com.hxkj.common.core.AjaxResult;
|
||||
import com.hxkj.common.enums.HttpEnum;
|
||||
import com.hxkj.common.utils.ThrowableUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.converter.HttpMessageNotReadableException;
|
||||
import org.springframework.validation.BindException;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.web.HttpMediaTypeNotSupportedException;
|
||||
import org.springframework.web.HttpRequestMethodNotSupportedException;
|
||||
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||
import org.springframework.web.bind.MissingServletRequestParameterException;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 全局异常处理
|
||||
*/
|
||||
@Slf4j
|
||||
@ControllerAdvice
|
||||
public class GlobalException {
|
||||
|
||||
// /**
|
||||
// * 处理所有不可知异常
|
||||
// *
|
||||
// * @param e 异常
|
||||
// * @return AjaxResult
|
||||
// */
|
||||
// @ResponseStatus(HttpStatus.OK)
|
||||
// @ExceptionHandler(Throwable.class)
|
||||
// public AjaxResult handleException(Throwable e) {
|
||||
// log.error(ThrowableUtil.getStackTrace(e));
|
||||
// return AjaxResult.failed(HttpEnum.SYSTEM_ERROR.getCode(), HttpEnum.SUCCESS.getMsg());
|
||||
// }
|
||||
|
||||
/**
|
||||
* 拦截表单参数校验FROM
|
||||
*/
|
||||
@ResponseStatus(HttpStatus.OK)
|
||||
@ExceptionHandler(BindException.class)
|
||||
@ResponseBody
|
||||
public AjaxResult handleBindException(BindException e) {
|
||||
BindingResult bindingResult = e.getBindingResult();
|
||||
Integer code = HttpEnum.PARAMS_VALID_ERROR.getCode();
|
||||
String msg = Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage();
|
||||
return AjaxResult.failed(code, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* 拦截路径参数校验PATH
|
||||
*/
|
||||
@ResponseStatus(HttpStatus.OK)
|
||||
@ExceptionHandler(MissingServletRequestParameterException.class)
|
||||
@ResponseBody
|
||||
public AjaxResult handlePathException(MissingServletRequestParameterException e) {
|
||||
Integer code = HttpEnum.PARAMS_VALID_ERROR.getCode();
|
||||
String msg = Objects.requireNonNull(e.getMessage());
|
||||
return AjaxResult.failed(code, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* 拦截JSON参数校验
|
||||
*/
|
||||
@ResponseStatus(HttpStatus.OK)
|
||||
@ExceptionHandler(MethodArgumentNotValidException.class)
|
||||
@ResponseBody
|
||||
public AjaxResult handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
|
||||
BindingResult bindingResult = e.getBindingResult();
|
||||
Integer code = HttpEnum.PARAMS_VALID_ERROR.getCode();
|
||||
String msg = Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage();
|
||||
return AjaxResult.failed(code, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* 拦截参数类型不正确
|
||||
*/
|
||||
@ResponseStatus(HttpStatus.OK)
|
||||
@ExceptionHandler(HttpMessageNotReadableException.class)
|
||||
@ResponseBody
|
||||
public AjaxResult handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
|
||||
Integer code = HttpEnum.PARAMS_TYPE_ERROR.getCode();
|
||||
String msg = Objects.requireNonNull(e.getMessage());
|
||||
return AjaxResult.failed(code, msg.split(";")[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 拦截请求方法
|
||||
*/
|
||||
@ResponseStatus(HttpStatus.OK)
|
||||
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
|
||||
@ResponseBody
|
||||
public AjaxResult handleRequestMethodException(HttpRequestMethodNotSupportedException e) {
|
||||
Integer code = HttpEnum.REQUEST_METHOD_ERROR.getCode();
|
||||
String msg = Objects.requireNonNull(e.getMessage());
|
||||
return AjaxResult.failed(code, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* 拦截断言异常
|
||||
*/
|
||||
@ResponseStatus(HttpStatus.OK)
|
||||
@ExceptionHandler(IllegalArgumentException.class)
|
||||
public AjaxResult handleIllegalArgumentException(IllegalArgumentException e) {
|
||||
Integer code = HttpEnum.ASSERT_ARGUMENT_ERROR.getCode();
|
||||
String msg = Objects.requireNonNull(e.getMessage());
|
||||
return AjaxResult.failed(code, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* 拦截MybatisPlus异常
|
||||
*/
|
||||
@ResponseStatus(HttpStatus.OK)
|
||||
@ExceptionHandler(MybatisPlusException.class)
|
||||
@ResponseBody
|
||||
public AjaxResult handleMybatisPlusException(MybatisPlusException e) {
|
||||
Integer code = HttpEnum.ASSERT_MYBATIS_ERROR.getCode();
|
||||
String msg = Objects.requireNonNull(e.getMessage());
|
||||
return AjaxResult.failed(code, msg);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.hxkj.common.mapper.system;
|
||||
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.hxkj.common.entity.system.SysAdmin;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 系统管理员
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysAdminMapper extends MPJBaseMapper<SysAdmin> {
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.hxkj.common.mapper.system;
|
||||
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.hxkj.common.entity.system.SysMenu;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 系统菜单
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysMenuMapper extends MPJBaseMapper<SysMenu> {
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.hxkj.common.mapper.system;
|
||||
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.hxkj.common.entity.system.SysRole;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 系统角色
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysRoleMapper extends MPJBaseMapper<SysRole> {
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.hxkj.common.utils;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
public class ArrayUtil {
|
||||
|
||||
/**
|
||||
* JSONArray转树形结构
|
||||
*
|
||||
* @author fzr
|
||||
* @param arr JSON数组
|
||||
* @param id 主键字段名
|
||||
* @param pid 上级字段名
|
||||
* @param child 子级字段名
|
||||
* @return JSONArray
|
||||
*/
|
||||
public static JSONArray listToTree(JSONArray arr, String id, String pid, String child) {
|
||||
JSONArray r = new JSONArray();
|
||||
JSONObject hash = new JSONObject();
|
||||
//将数组转为Object的形式,key为数组中的id
|
||||
for (Object o : arr) {
|
||||
JSONObject json = (JSONObject) o;
|
||||
hash.put(json.getString(id), json);
|
||||
}
|
||||
//遍历结果集
|
||||
for (Object o : arr) {
|
||||
//单条记录
|
||||
JSONObject aVal = (JSONObject) o;
|
||||
|
||||
//在hash中取出key为单条记录中pid的值
|
||||
JSONObject hashVP = (JSONObject) hash.get(aVal.get(pid).toString());
|
||||
//如果记录的pid存在,则说明它有父节点,将她添加到孩子节点的集合中
|
||||
if (hashVP != null) {
|
||||
//检查是否有child属性
|
||||
if (hashVP.get(child) != null) {
|
||||
JSONArray ch = (JSONArray) hashVP.get(child);
|
||||
ch.add(aVal);
|
||||
hashVP.put(child, ch);
|
||||
} else {
|
||||
JSONArray ch = new JSONArray();
|
||||
ch.add(aVal);
|
||||
hashVP.put(child, ch);
|
||||
}
|
||||
} else {
|
||||
r.add(aVal);
|
||||
}
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package com.hxkj.common.utils;
|
||||
|
||||
public class ConfigUtil {
|
||||
}
|
||||
115
like-common/src/main/java/com/hxkj/common/utils/HttpUtil.java
Normal file
115
like-common/src/main/java/com/hxkj/common/utils/HttpUtil.java
Normal file
@@ -0,0 +1,115 @@
|
||||
package com.hxkj.common.utils;
|
||||
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 请求工具类
|
||||
*/
|
||||
public class HttpUtil {
|
||||
|
||||
/**
|
||||
* 获取请求对象
|
||||
*
|
||||
* @author fzr
|
||||
* @return HttpServletRequest
|
||||
*/
|
||||
public static HttpServletRequest obj() {
|
||||
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||||
if (servletRequestAttributes != null) {
|
||||
return servletRequestAttributes.getRequest();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取不带参请求URl
|
||||
*
|
||||
* @author fzr
|
||||
* @return String
|
||||
*/
|
||||
public static String url() {
|
||||
HttpServletRequest request = HttpUtil.obj();
|
||||
if (request != null) {
|
||||
return request.getRequestURL().toString();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取请求域名
|
||||
*
|
||||
* @author fzr
|
||||
* @return String
|
||||
*/
|
||||
public static String domain() {
|
||||
HttpServletRequest request = HttpUtil.obj();
|
||||
if (request != null) {
|
||||
String requestUrl = request.getRequestURL().toString();
|
||||
List<String> urls = Arrays.asList(requestUrl.split("/"));
|
||||
|
||||
String agree = "http:";
|
||||
if (request.getServerPort() == 443) {
|
||||
agree = "https:";
|
||||
}
|
||||
|
||||
return agree + "//" + urls.get(2).split(":")[0];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 请求客户端IP
|
||||
*
|
||||
* @author fzr
|
||||
* @return String
|
||||
*/
|
||||
public static String ip() {
|
||||
HttpServletRequest request = HttpUtil.obj();
|
||||
if (request != null) {
|
||||
String ipAddress;
|
||||
try {
|
||||
ipAddress = request.getHeader("x-forwarded-for");
|
||||
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
|
||||
ipAddress = request.getHeader("Proxy-Client-IP");
|
||||
}
|
||||
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
|
||||
ipAddress = request.getHeader("WL-Proxy-Client-IP");
|
||||
}
|
||||
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
|
||||
ipAddress = request.getRemoteAddr();
|
||||
if (ipAddress.equals("127.0.0.1")) {
|
||||
// 根据网卡取本机配置的IP
|
||||
InetAddress inet = null;
|
||||
try {
|
||||
inet = InetAddress.getLocalHost();
|
||||
} catch (UnknownHostException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
assert inet != null;
|
||||
ipAddress = inet.getHostAddress();
|
||||
}
|
||||
}
|
||||
// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
|
||||
// "***.***.***.***".length()
|
||||
if (ipAddress != null && ipAddress.length() > 15) {
|
||||
// = 15
|
||||
if (ipAddress.indexOf(",") > 0) {
|
||||
ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
ipAddress="";
|
||||
}
|
||||
return ipAddress == null ? "" : ipAddress;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package com.hxkj.common.utils;
|
||||
|
||||
public class RedisUtil {
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package com.hxkj.common.utils;
|
||||
|
||||
public class SpringUtil {
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.hxkj.common.utils;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
|
||||
/**
|
||||
* 异常工具类
|
||||
*/
|
||||
public class ThrowableUtil {
|
||||
|
||||
/**
|
||||
* 获取堆栈信息
|
||||
*
|
||||
* @author fzr
|
||||
* @param throwable 异常
|
||||
* @return String
|
||||
*/
|
||||
public static String getStackTrace(Throwable throwable) {
|
||||
StringWriter sw = new StringWriter();
|
||||
try (PrintWriter pw = new PrintWriter(sw)) {
|
||||
throwable.printStackTrace(pw);
|
||||
return sw.toString();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
412
like-common/src/main/java/com/hxkj/common/utils/TimeUtil.java
Normal file
412
like-common/src/main/java/com/hxkj/common/utils/TimeUtil.java
Normal file
@@ -0,0 +1,412 @@
|
||||
package com.hxkj.common.utils;
|
||||
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParsePosition;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class TimeUtil {
|
||||
|
||||
/**
|
||||
* 时间戳转日期(默认格式)
|
||||
* @author fzr
|
||||
* @return String
|
||||
*/
|
||||
public static String timeToDate(long time) {
|
||||
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(time * 1000));
|
||||
}
|
||||
|
||||
/**
|
||||
* 时间戳转日期(默认格式)
|
||||
* @author fzr
|
||||
* @return String
|
||||
*/
|
||||
public static String timeToDate(String time) {
|
||||
if (time == null) {
|
||||
time = "0";
|
||||
}
|
||||
long longTime = Long.parseLong(time);
|
||||
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(longTime * 1000));
|
||||
}
|
||||
|
||||
/**
|
||||
* 时间戳转日期(指定格式)
|
||||
* @author fzr
|
||||
* @return String
|
||||
*/
|
||||
public static String timeToDate(long time, String format) {
|
||||
return new SimpleDateFormat(format).format(new Date(time * 1000));
|
||||
}
|
||||
|
||||
/**
|
||||
* 时间戳转日期(指定格式)
|
||||
* @author fzr
|
||||
* @return String
|
||||
*/
|
||||
public static String timeToDate(String time, String format) {
|
||||
long longTime = Long.parseLong(time);
|
||||
return new SimpleDateFormat(format).format(new Date(longTime * 1000));
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期转时间戳
|
||||
* @author fzr
|
||||
* @param date 日期
|
||||
* @return Long
|
||||
*/
|
||||
public static Long dateToTime(String date) {
|
||||
String dateTime = TimeUtil.formatDate(date);
|
||||
return (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse(dateTime, new ParsePosition(0)).getTime() / 1000;
|
||||
}
|
||||
|
||||
/**
|
||||
* 毫秒转日期时间
|
||||
* @param time 毫秒
|
||||
* @return String
|
||||
*/
|
||||
public static String millisecondToDate(Long time) {
|
||||
Date date = new Date();
|
||||
date.setTime(time);
|
||||
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
|
||||
}
|
||||
|
||||
/**
|
||||
* 毫秒转日期时间
|
||||
* @param time 毫秒
|
||||
* @return String
|
||||
*/
|
||||
public static String millisecondToDate(String time) {
|
||||
Date date = new Date();
|
||||
date.setTime(Long.parseLong(time));
|
||||
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
|
||||
}
|
||||
|
||||
/**
|
||||
* 毫秒转日期时间
|
||||
* @param time 毫秒
|
||||
* @return String
|
||||
*/
|
||||
public static String millisecondToDate(Long time, String format) {
|
||||
Date date = new Date();
|
||||
date.setTime(time);
|
||||
return new SimpleDateFormat(format).format(date);
|
||||
}
|
||||
|
||||
/**
|
||||
* 毫秒转日期时间
|
||||
* @param time 毫秒
|
||||
* @return String
|
||||
*/
|
||||
public static String millisecondToDate(String time, String format) {
|
||||
Date date = new Date();
|
||||
date.setTime(Long.parseLong(time));
|
||||
return new SimpleDateFormat(format).format(date);
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期转固定格式 yyyy-MM-dd HH:mm:ss
|
||||
* @author fzr
|
||||
* @param dateStr 日期时间
|
||||
* @return String
|
||||
*/
|
||||
public static String formatDate(String dateStr){
|
||||
dateStr = dateStr.trim();
|
||||
HashMap<String, String> dateRegFormat = new HashMap<>();
|
||||
dateRegFormat.put("^\\d{4}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D*$", "yyyy-MM-dd-HH-mm-ss");//2014年3月12日 13时5分34秒,2014-03-12 12:05:34,2014/3/12 12:5:34
|
||||
dateRegFormat.put("^\\d{4}\\D+\\d{2}\\D+\\d{2}\\D+\\d{2}\\D+\\d{2}$", "yyyy-MM-dd-HH-mm");//2014-03-12 12:05
|
||||
dateRegFormat.put("^\\d{4}\\D+\\d{2}\\D+\\d{2}\\D+\\d{2}$", "yyyy-MM-dd-HH");//2014-03-12 12
|
||||
dateRegFormat.put("^\\d{4}\\D+\\d{2}\\D+\\d{2}$", "yyyy-MM-dd");//2014-03-12
|
||||
dateRegFormat.put("^\\d{4}\\D+\\d{2}$", "yyyy-MM");//2014-03
|
||||
dateRegFormat.put("^\\d{4}$", "yyyy");//2014
|
||||
dateRegFormat.put("^\\d{14}$", "yyyyMMddHHmmss");//20140312120534
|
||||
dateRegFormat.put("^\\d{12}$", "yyyyMMddHHmm");//201403121205
|
||||
dateRegFormat.put("^\\d{10}$", "yyyyMMddHH");//2014031212
|
||||
dateRegFormat.put("^\\d{8}$", "yyyyMMdd");//20140312
|
||||
dateRegFormat.put("^\\d{6}$", "yyyyMM");//201403
|
||||
dateRegFormat.put("^\\d{2}\\s*:\\s*\\d{2}\\s*:\\s*\\d{2}$", "yyyy-MM-dd-HH-mm-ss");//13:05:34 拼接当前日期
|
||||
dateRegFormat.put("^\\d{2}\\s*:\\s*\\d{2}$", "yyyy-MM-dd-HH-mm");//13:05 拼接当前日期
|
||||
dateRegFormat.put("^\\d{2}\\D+\\d{1,2}\\D+\\d{1,2}$", "yy-MM-dd");//14.10.18(年.月.日)
|
||||
dateRegFormat.put("^\\d{1,2}\\D+\\d{1,2}$", "yyyy-dd-MM");//30.12(日.月) 拼接当前年份
|
||||
dateRegFormat.put("^\\d{1,2}\\D+\\d{1,2}\\D+\\d{4}$", "dd-MM-yyyy");//12.21.2013(日.月.年)
|
||||
|
||||
String curDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
|
||||
DateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
DateFormat formatter2;
|
||||
String dateReplace;
|
||||
String strSuccess = "";
|
||||
try {
|
||||
for (String key : dateRegFormat.keySet()) {
|
||||
if (Pattern.compile(key).matcher(dateStr).matches()) {
|
||||
formatter2 = new SimpleDateFormat(dateRegFormat.get(key));
|
||||
if (key.equals("^\\d{2}\\s*:\\s*\\d{2}\\s*:\\s*\\d{2}$") || key.equals("^\\d{2}\\s*:\\s*\\d{2}$")) {
|
||||
// 13:05:34 或 13:05 拼接当前日期
|
||||
dateStr = curDate + "-" + dateStr;
|
||||
} else if (key.equals("^\\d{1,2}\\D+\\d{1,2}$")) {
|
||||
//21.1 (日.月) 拼接当前年份
|
||||
dateStr = curDate.substring(0, 4) + "-" + dateStr;
|
||||
}
|
||||
dateReplace = dateStr.replaceAll("\\D+", "-");
|
||||
strSuccess = formatter1.format(formatter2.parse(dateReplace));
|
||||
break;
|
||||
}
|
||||
}
|
||||
return strSuccess;
|
||||
} catch (Exception ignored) { }
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回当前时间戳
|
||||
* @author fzr
|
||||
* @return Long
|
||||
*/
|
||||
public static Long time() {
|
||||
return System.currentTimeMillis() / 1000;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回今日开始和结束的时间戳
|
||||
* @author fzr
|
||||
* @return List
|
||||
*/
|
||||
public static List<Long> today() {
|
||||
List<Long> list = new ArrayList<>();
|
||||
// 开始时间
|
||||
Calendar todayStart = Calendar.getInstance();
|
||||
todayStart.set(Calendar.HOUR, 0);
|
||||
todayStart.set(Calendar.MINUTE, 0);
|
||||
todayStart.set(Calendar.SECOND, 0);
|
||||
todayStart.set(Calendar.MILLISECOND, 0);
|
||||
list.add(todayStart.getTime().getTime() / 1000 - 43200);
|
||||
|
||||
// 结束时间
|
||||
Calendar todayEnd = Calendar.getInstance();
|
||||
todayEnd.set(Calendar.HOUR_OF_DAY, 23);
|
||||
todayEnd.set(Calendar.MINUTE, 59);
|
||||
todayEnd.set(Calendar.SECOND, 59);
|
||||
todayEnd.set(Calendar.MILLISECOND, 999);
|
||||
list.add(todayEnd.getTime().getTime() / 1000);
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回昨日开始和结束的时间戳
|
||||
* @author fzr
|
||||
* @return List
|
||||
*/
|
||||
public static List<Long> yesterday() {
|
||||
List<Long> today = TimeUtil.today();
|
||||
List<Long> list = new ArrayList<>();
|
||||
list.add(today.get(0) - 86400);
|
||||
list.add(today.get(1) - 86400);
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回本周开始和结束的时间戳
|
||||
* @author fzr
|
||||
* @return List
|
||||
*/
|
||||
public static List<Long> week() {
|
||||
List<Long> list = new ArrayList<>();
|
||||
// 开始时间
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0,0);
|
||||
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
|
||||
list.add(cal.getTimeInMillis() / 1000);
|
||||
// 结束时间
|
||||
list.add(list.get(0) + ((7 * 24 * 60 * 60 * 1000) / 1000)-1);
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回上周开始和结束的时间戳
|
||||
* @author fzr
|
||||
* @return List
|
||||
*/
|
||||
public static List<Long> lastWeek() {
|
||||
List<Long> week = TimeUtil.week();
|
||||
List<Long> list = new ArrayList<>();
|
||||
list.add(week.get(0) - 604800);
|
||||
list.add(week.get(1) - 604800);
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回今天是周几
|
||||
* @author fzr
|
||||
* @return Long
|
||||
*/
|
||||
public static Long dayOfWeek() {
|
||||
Date date = new Date();
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(date);
|
||||
boolean isFirstSunday = (cal.getFirstDayOfWeek() == Calendar.SUNDAY);
|
||||
long week = cal.get(Calendar.DAY_OF_WEEK);
|
||||
if(isFirstSunday){
|
||||
week = (week -1) == 0? 7:(week - 1);
|
||||
}
|
||||
return week;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回本月开始和结束的时间戳
|
||||
* @author fzr
|
||||
* @return List
|
||||
*/
|
||||
public static List<Long> month() {
|
||||
List<Long> list = new ArrayList<>();
|
||||
// 开始时间
|
||||
Calendar calStart = Calendar.getInstance();
|
||||
calStart.set(calStart.get(Calendar.YEAR),calStart.get(Calendar.MONTH), calStart.get(Calendar.DAY_OF_MONTH), 0, 0,0);
|
||||
calStart.set(Calendar.DAY_OF_MONTH,calStart.getActualMinimum(Calendar.DAY_OF_MONTH));
|
||||
list.add(calStart.getTimeInMillis() / 1000);
|
||||
|
||||
// 结束时间
|
||||
Calendar calEnd = Calendar.getInstance();
|
||||
calEnd.set(calEnd.get(Calendar.YEAR),calEnd.get(Calendar.MONTH), calEnd.get(Calendar.DAY_OF_MONTH), 0, 0,0);
|
||||
calEnd.set(Calendar.DAY_OF_MONTH, calEnd.getActualMaximum(Calendar.DAY_OF_MONTH));
|
||||
calEnd.set(Calendar.HOUR_OF_DAY, 24);
|
||||
list.add(calEnd.getTimeInMillis() / 1000 - 1);
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回上个月开始和结束的时间戳
|
||||
* @author fzr
|
||||
* @return List
|
||||
*/
|
||||
public static List<Long> lastMonth() {
|
||||
List<Long> list = new ArrayList<>();
|
||||
// 开始时间
|
||||
Calendar calStart = Calendar.getInstance();
|
||||
calStart.add(Calendar.MONTH, -1);
|
||||
calStart.set(Calendar.DAY_OF_MONTH,1);
|
||||
calStart.set(Calendar.HOUR, 0);
|
||||
calStart.set(Calendar.MINUTE, 0);
|
||||
calStart.set(Calendar.SECOND, 0);
|
||||
calStart.set(Calendar.MILLISECOND, 0);
|
||||
list.add((calStart.getTimeInMillis() / 1000) - 43200);
|
||||
|
||||
// 结束时间
|
||||
Calendar calEnd = Calendar.getInstance();
|
||||
calEnd.set(calEnd.get(Calendar.YEAR),calEnd.get(Calendar.MONTH), calEnd.get(Calendar.DAY_OF_MONTH), 0, 0,0);
|
||||
calEnd.set(Calendar.DAY_OF_MONTH,calEnd.getActualMinimum(Calendar.DAY_OF_MONTH));
|
||||
list.add((calEnd.getTimeInMillis() / 1000)-1);
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回今年开始和结束的时间戳
|
||||
* @author fzr
|
||||
* @return List
|
||||
*/
|
||||
public static List<Long> year() {
|
||||
List<Long> list = new ArrayList<>();
|
||||
// 开始时间
|
||||
Calendar calStart = Calendar.getInstance();
|
||||
calStart.add(Calendar.YEAR, 0);
|
||||
calStart.add(Calendar.DATE, 0);
|
||||
calStart.add(Calendar.MONTH, 0);
|
||||
calStart.set(Calendar.DAY_OF_YEAR, 1);
|
||||
calStart.set(Calendar.HOUR_OF_DAY, 0);
|
||||
calStart.set(Calendar.MINUTE, 0);
|
||||
calStart.set(Calendar.SECOND, 0);
|
||||
calStart.set(Calendar.MILLISECOND, 0);
|
||||
list.add(calStart.getTimeInMillis() / 1000);
|
||||
|
||||
// 结束时间
|
||||
Calendar calEnd = Calendar.getInstance();
|
||||
int year = calEnd.get(Calendar.YEAR);
|
||||
calEnd.clear();
|
||||
calEnd.set(Calendar.YEAR, year);
|
||||
calEnd.set(Calendar.HOUR_OF_DAY, 23);
|
||||
calEnd.set(Calendar.MINUTE, 59);
|
||||
calEnd.set(Calendar.SECOND, 59);
|
||||
calEnd.set(Calendar.MILLISECOND, 999);
|
||||
calEnd.roll(Calendar.DAY_OF_YEAR, -1);
|
||||
list.add(calEnd.getTimeInMillis() / 1000);
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回去年开始和结束的时间戳
|
||||
* @author fzr
|
||||
* @return List
|
||||
*/
|
||||
public static List<Long> lastYear() {
|
||||
List<Long> list = new ArrayList<>();
|
||||
// 开始时间
|
||||
Calendar calStart = Calendar.getInstance();
|
||||
calStart.add(Calendar.YEAR, -1);
|
||||
calStart.set(Calendar.HOUR_OF_DAY, 0);
|
||||
calStart.set(Calendar.DAY_OF_YEAR, 1);
|
||||
calStart.set(Calendar.MINUTE, 0);
|
||||
calStart.set(Calendar.SECOND, 0);
|
||||
calStart.set(Calendar.MILLISECOND, 0);
|
||||
list.add(calStart.getTimeInMillis() / 1000);
|
||||
|
||||
// 结束时间
|
||||
Calendar calEnd = Calendar.getInstance();
|
||||
calEnd.add(Calendar.YEAR, -1);
|
||||
calEnd.set(Calendar.MONTH, calEnd.getActualMaximum(Calendar.MONTH));
|
||||
calEnd.set(Calendar.DAY_OF_MONTH, calEnd.getActualMaximum(Calendar.DAY_OF_MONTH));
|
||||
calEnd.set(Calendar.HOUR_OF_DAY, 23);
|
||||
calEnd.set(Calendar.MINUTE, 59);
|
||||
calEnd.set(Calendar.SECOND, 59);
|
||||
calEnd.set(Calendar.MILLISECOND, 999);
|
||||
list.add(calEnd.getTimeInMillis() / 1000);
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取几天前零点到现在/昨日结束的时间戳
|
||||
* @author fzr
|
||||
* @return List
|
||||
*/
|
||||
public static List<Long> dayToNow(int day) {
|
||||
List<Long> today = TimeUtil.today();
|
||||
List<Long> list = new ArrayList<>();
|
||||
list.add(today.get(0) - day * 86400L);
|
||||
list.add(today.get(0) -1);
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回几天前的时间戳
|
||||
* @author fzr
|
||||
* @param day (天)
|
||||
* @return Long
|
||||
*/
|
||||
public Long daysAgo(long day) {
|
||||
long currTime = System.currentTimeMillis() / 1000;
|
||||
return currTime - (day * 86400);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回几天后的时间戳
|
||||
* @author fzr
|
||||
* @param day (天)
|
||||
* @return Long
|
||||
*/
|
||||
public Long daysAfter(long day) {
|
||||
long currTime = System.currentTimeMillis() / 1000;
|
||||
return currTime + (day * 86400);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回月份第几天
|
||||
* @author fzr
|
||||
* @return int
|
||||
*/
|
||||
public static long monthDay(){
|
||||
Date date = new Date();
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(date);
|
||||
return cal.get(Calendar.DAY_OF_MONTH);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
package com.hxkj.common.utils;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.MessageDigest;
|
||||
import java.util.Random;
|
||||
import java.util.UUID;
|
||||
|
||||
public class ToolsUtil {
|
||||
|
||||
/**
|
||||
* 制作UUID
|
||||
*
|
||||
* @author fzr
|
||||
* @return String
|
||||
*/
|
||||
public static String makeUUID(){
|
||||
return UUID.randomUUID().toString().replaceAll("-","").substring(0,32);
|
||||
}
|
||||
|
||||
/**
|
||||
* 制作MD5
|
||||
*
|
||||
* @author fzr
|
||||
* @param data 需加密的数据
|
||||
* @return String
|
||||
*/
|
||||
public static String makeMd5(String data){
|
||||
try {
|
||||
MessageDigest md5 = MessageDigest.getInstance("MD5");
|
||||
byte [] array = md5.digest(data.getBytes(StandardCharsets.UTF_8));
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (byte item : array) {
|
||||
sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
|
||||
}
|
||||
return sb.toString();
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回随机字符串
|
||||
*
|
||||
* @author fzr
|
||||
* @param length 要生成的长度
|
||||
* @return String
|
||||
*/
|
||||
public static String randomString(int length) {
|
||||
Random random = new Random();
|
||||
StringBuilder stringBuffer = new StringBuilder();
|
||||
String str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
int strLength = str.length();
|
||||
for (int i = 0; i < length; i++) {
|
||||
int index = random.nextInt(strLength);
|
||||
stringBuffer.append(str.charAt(index));
|
||||
}
|
||||
return stringBuffer.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回随机数字字符串
|
||||
*
|
||||
* @author fzr
|
||||
* @param length 要生成的长度
|
||||
* @return String
|
||||
*/
|
||||
public static String randomInt(int length) {
|
||||
Random random = new Random();
|
||||
StringBuilder stringBuffer = new StringBuilder();
|
||||
String str = "0123456789";
|
||||
for (int i = 0; i < length; i++) {
|
||||
int index = random.nextInt(10);
|
||||
stringBuffer.append(str.charAt(index));
|
||||
}
|
||||
return stringBuffer.toString();
|
||||
}
|
||||
|
||||
}
|
||||
39
like-common/src/main/java/com/hxkj/common/utils/UrlUtil.java
Normal file
39
like-common/src/main/java/com/hxkj/common/utils/UrlUtil.java
Normal file
@@ -0,0 +1,39 @@
|
||||
package com.hxkj.common.utils;
|
||||
|
||||
public class UrlUtil {
|
||||
|
||||
/**
|
||||
* 访问前缀
|
||||
*/
|
||||
private static final String uploadPrefix = "upload";
|
||||
|
||||
/**
|
||||
* 转绝对路径
|
||||
*
|
||||
* @author fzr
|
||||
* @param url 相对路径
|
||||
* @return String
|
||||
*/
|
||||
public static String toAbsoluteUrl(String url) {
|
||||
if(url.indexOf("/")!=0) {
|
||||
url = "/" + url;
|
||||
}
|
||||
|
||||
return HttpUtil.domain() + "/" + uploadPrefix + url;
|
||||
}
|
||||
|
||||
/**
|
||||
* 转相对路径
|
||||
*
|
||||
* @param url 绝对路径
|
||||
* @return String
|
||||
*/
|
||||
public static String toRelativeUrl(String url) {
|
||||
if (url == null || url.equals("")) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return url.replace(HttpUtil.domain() + "/" + uploadPrefix + "/", "");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.hxkj.common.validator;
|
||||
|
||||
import com.hxkj.common.validator.annotation.IDMust;
|
||||
|
||||
import javax.validation.ConstraintValidator;
|
||||
import javax.validation.ConstraintValidatorContext;
|
||||
|
||||
/**
|
||||
* 验证主键ID参数
|
||||
*/
|
||||
public class IDMustValidator implements ConstraintValidator<IDMust, Integer> {
|
||||
|
||||
@Override
|
||||
public void initialize(IDMust constraintAnnotation) {
|
||||
ConstraintValidator.super.initialize(constraintAnnotation);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid(Integer value, ConstraintValidatorContext constraintValidatorContext) {
|
||||
return value != null && value > 0;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.hxkj.common.validator;
|
||||
|
||||
import com.hxkj.common.validator.annotation.IntegerContains;
|
||||
|
||||
import javax.validation.ConstraintValidator;
|
||||
import javax.validation.ConstraintValidatorContext;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 验证数字是否在数组中
|
||||
*/
|
||||
public class IntegerContainsValidator implements ConstraintValidator<IntegerContains, Integer> {
|
||||
|
||||
private Set<Integer> limitValues;
|
||||
|
||||
@Override
|
||||
public void initialize (IntegerContains integerContains) {
|
||||
HashSet<Integer> set = new HashSet<>();
|
||||
for (int i : integerContains.values()) {
|
||||
set.add(i);
|
||||
}
|
||||
limitValues = set;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid(Integer value, ConstraintValidatorContext context) {
|
||||
if (value == null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return limitValues.contains(value);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.hxkj.common.validator;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||
import com.hxkj.common.validator.annotation.StringContains;
|
||||
|
||||
import javax.validation.ConstraintValidator;
|
||||
import javax.validation.ConstraintValidatorContext;
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 验证字符串是否在数组中
|
||||
*/
|
||||
public class StringContainsValidator implements ConstraintValidator<StringContains, String> {
|
||||
|
||||
private Set<String> limitValues;
|
||||
|
||||
@Override
|
||||
public void initialize (StringContains stringContains) {
|
||||
limitValues = Arrays.stream(stringContains.values()).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid(String value, ConstraintValidatorContext context) {
|
||||
if (StringUtils.isBlank(value)) {
|
||||
return true;
|
||||
}
|
||||
return limitValues.contains(value.trim());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.hxkj.common.validator.annotation;
|
||||
|
||||
import com.hxkj.common.validator.IDMustValidator;
|
||||
|
||||
import javax.validation.Constraint;
|
||||
import javax.validation.Payload;
|
||||
import java.lang.annotation.*;
|
||||
|
||||
@Documented
|
||||
@Constraint(validatedBy = IDMustValidator.class)
|
||||
@Target({ ElementType.PARAMETER,ElementType.FIELD })
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface IDMust {
|
||||
|
||||
String message() default "id参数必须存在且大于0";
|
||||
|
||||
Class<?>[] groups() default {};
|
||||
|
||||
Class<? extends Payload>[] payload() default { };
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.hxkj.common.validator.annotation;
|
||||
|
||||
import com.hxkj.common.validator.IntegerContainsValidator;
|
||||
|
||||
import javax.validation.Constraint;
|
||||
import javax.validation.Payload;
|
||||
import java.lang.annotation.*;
|
||||
|
||||
@Documented
|
||||
@Constraint(validatedBy = IntegerContainsValidator.class)
|
||||
@Target({ ElementType.PARAMETER,ElementType.FIELD })
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface IntegerContains {
|
||||
|
||||
String message() default "数值不符合规则";
|
||||
|
||||
int[] values() default {};
|
||||
|
||||
Class<?>[] groups() default {};
|
||||
|
||||
Class<? extends Payload>[] payload() default { };
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.hxkj.common.validator.annotation;
|
||||
|
||||
import com.hxkj.common.validator.StringContainsValidator;
|
||||
|
||||
import javax.validation.Constraint;
|
||||
import javax.validation.Payload;
|
||||
import java.lang.annotation.*;
|
||||
|
||||
@Documented
|
||||
@Constraint(validatedBy = StringContainsValidator.class)
|
||||
@Target({ ElementType.PARAMETER,ElementType.FIELD })
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface StringContains {
|
||||
|
||||
String message() default "字符串不符合规则";
|
||||
|
||||
String[] values() default {};
|
||||
|
||||
Class<?>[] groups() default {};
|
||||
|
||||
Class<? extends Payload>[] payload() default { };
|
||||
|
||||
}
|
||||
19
like-front/pom.xml
Normal file
19
like-front/pom.xml
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>like-framework</artifactId>
|
||||
<groupId>org.hxkj</groupId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>like-front</artifactId>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
111
pom.xml
Normal file
111
pom.xml
Normal file
@@ -0,0 +1,111 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<!-- 模块信息 -->
|
||||
<groupId>org.hxkj</groupId>
|
||||
<artifactId>like-framework</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<modules>
|
||||
<module>like-admin</module>
|
||||
<module>like-front</module>
|
||||
<module>like-common</module>
|
||||
</modules>
|
||||
|
||||
<!-- 特性信息 -->
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
<java.version>17</java.version>
|
||||
<mysql-connector.version>5.1.49</mysql-connector.version>
|
||||
<mybatis-plus.version>3.4.3.1</mybatis-plus.version>
|
||||
<mybatis-plus-join.version>1.2.2</mybatis-plus-join.version>
|
||||
<pagehelper.version>1.4.0</pagehelper.version>
|
||||
<shiro-spring.version>1.8.0</shiro-spring.version>
|
||||
<lombok.version>1.18.22</lombok.version>
|
||||
<fastJson.version>1.2.78</fastJson.version>
|
||||
</properties>
|
||||
|
||||
<!-- 依赖声明 -->
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<!-- SpringBoot依赖配置-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-dependencies</artifactId>
|
||||
<version>2.5.10</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
<!-- Mysql连接依赖 -->
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<version>${mysql-connector.version}</version>
|
||||
</dependency>
|
||||
<!-- MyBatisPlus依赖 -->
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
<version>${mybatis-plus.version}</version>
|
||||
</dependency>
|
||||
<!-- MyBatisPlusJoin依赖 -->
|
||||
<dependency>
|
||||
<groupId>com.github.yulichang</groupId>
|
||||
<artifactId>mybatis-plus-join</artifactId>
|
||||
<version>${mybatis-plus-join.version}</version>
|
||||
</dependency>
|
||||
<!-- MyBatis分页依赖 -->
|
||||
<dependency>
|
||||
<groupId>com.github.pagehelper</groupId>
|
||||
<artifactId>pagehelper-spring-boot-starter</artifactId>
|
||||
<version>${pagehelper.version}</version>
|
||||
</dependency>
|
||||
<!-- Shiro鉴权依赖 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.shiro</groupId>
|
||||
<artifactId>shiro-spring</artifactId>
|
||||
<version>${shiro-spring.version}</version>
|
||||
</dependency>
|
||||
<!-- Lombok依赖 -->
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>${lombok.version}</version>
|
||||
</dependency>
|
||||
<!-- fastjson -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>fastjson</artifactId>
|
||||
<version>${fastJson.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<!-- 插件管理 -->
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<version>2.6.4</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.10.0</version>
|
||||
<configuration>
|
||||
<source>${java.version}</source>
|
||||
<target>${java.version}</target>
|
||||
<encoding>${project.build.sourceEncoding}</encoding>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
Reference in New Issue
Block a user