diff --git a/common/pom.xml b/common/pom.xml
index 50db59f..50dc225 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -1,11 +1,12 @@
-
4.0.0
cn.bunny
- java-template
+ bunny-template
0.0.1-SNAPSHOT
+
common
pom
common Maven Webapp
@@ -15,7 +16,12 @@
common-utils
spring-security
-
+
+
+
+ io.minio
+ minio
+
diff --git a/common/service-utils/pom.xml b/common/service-utils/pom.xml
index da561e3..6e427c6 100644
--- a/common/service-utils/pom.xml
+++ b/common/service-utils/pom.xml
@@ -9,7 +9,6 @@
service-utils
jar
-
service-utils
https://maven.apache.org
@@ -39,12 +38,6 @@
mysql
mysql-connector-java
-
-
- com.baomidou
- mybatis-plus-boot-starter
- provided
-
com.zaxxer
diff --git a/common/service-utils/src/main/java/cn/bunny/common/service/config/MybatisPlusConfig.java b/common/service-utils/src/main/java/cn/bunny/common/service/config/MybatisPlusConfig.java
index 11a0871..2938898 100644
--- a/common/service-utils/src/main/java/cn/bunny/common/service/config/MybatisPlusConfig.java
+++ b/common/service-utils/src/main/java/cn/bunny/common/service/config/MybatisPlusConfig.java
@@ -6,19 +6,21 @@ import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerIntercep
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import lombok.extern.slf4j.Slf4j;
-import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
+/**
+ * Mybatis-Plus配置类
+ */
@EnableTransactionManagement
-@MapperScan("cn.bunny.service.mapper")
+// @MapperScan("cn.bunny.service.mapper")
@Configuration
@Slf4j
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
- log.info("注入Mybatis-Plus配置...");
+ log.info("MybatisPlusInterceptor===>注入Mybatis-Plus配置...");
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件
diff --git a/common/service-utils/src/main/java/cn/bunny/common/service/config/RedisConfiguration.java b/common/service-utils/src/main/java/cn/bunny/common/service/config/RedisConfiguration.java
new file mode 100644
index 0000000..72cce70
--- /dev/null
+++ b/common/service-utils/src/main/java/cn/bunny/common/service/config/RedisConfiguration.java
@@ -0,0 +1,100 @@
+package cn.bunny.common.service.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cache.CacheManager;
+import org.springframework.context.annotation.Bean;
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
+import org.springframework.data.redis.cache.RedisCacheManager;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.RedisSerializationContext;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+import org.springframework.stereotype.Component;
+
+import java.time.Duration;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * 设置Redis序列化
+ */
+@Component
+@Slf4j
+public class RedisConfiguration {
+ /**
+ * 使用StringRedisSerializer序列化为字符串
+ */
+ @Bean
+ public RedisTemplate redisTemplate(LettuceConnectionFactory connectionFactory) {
+ log.info("RedisConfiguration===>使用StringRedisSerializer序列化为字符串");
+
+ RedisTemplate redisTemplate = new RedisTemplate<>();
+ redisTemplate.setConnectionFactory(connectionFactory);
+ // 设置key序列化为string
+ redisTemplate.setKeySerializer(new StringRedisSerializer());
+ // 设置value序列化为JSON,使用GenericJackson2JsonRedisSerializer替换默认序列化
+ redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
+ redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+ redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
+
+ return redisTemplate;
+ }
+
+ /**
+ * 解决cache(@Cacheable)把数据缓存到redis中的value是乱码问题
+ */
+ @Bean
+ @SuppressWarnings("all")
+ public CacheManager cacheManager(RedisConnectionFactory factory) {
+ log.info("RedisConfiguration===>解决cache(@Cacheable)把数据缓存到redis中的value是乱码问题");
+
+ // 配置序列化
+ RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
+ config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
+ .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jsonRedisSerializer()))
+ .entryTtl(Duration.ofDays(365));
+
+ RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
+ .cacheDefaults(config).build();
+ return cacheManager;
+ }
+
+ /**
+ * 指定的日期模式
+ */
+ public Jackson2JsonRedisSerializer
+
+
+ com.baomidou
+ mybatis-plus-spring-boot3-starter
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+
org.springframework.boot
spring-boot-starter-security
diff --git a/model/src/main/java/cn/bunny/entity/base/BaseEntity.java b/model/src/main/java/cn/bunny/entity/base/BaseEntity.java
new file mode 100644
index 0000000..cafa523
--- /dev/null
+++ b/model/src/main/java/cn/bunny/entity/base/BaseEntity.java
@@ -0,0 +1,32 @@
+package cn.bunny.entity.base;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+@Data
+public class BaseEntity implements Serializable {
+
+ @TableId(type = IdType.AUTO)
+ private Long id;
+
+ @TableField("create_time")
+ private Date createTime;
+
+ @TableField("update_time")
+ private Date updateTime;
+
+ @TableLogic
+ @TableField("is_deleted")
+ private Integer isDeleted;
+
+ @TableField(exist = false)
+ private Map param = new HashMap<>();
+}
diff --git a/model/src/main/java/cn/bunny/entity/system/Login.java b/model/src/main/java/cn/bunny/entity/system/Login.java
new file mode 100644
index 0000000..140f575
--- /dev/null
+++ b/model/src/main/java/cn/bunny/entity/system/Login.java
@@ -0,0 +1,14 @@
+package cn.bunny.entity.system;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class Login {
+ private String token;
+}
diff --git a/model/src/main/java/cn/bunny/entity/system/RoleByUser.java b/model/src/main/java/cn/bunny/entity/system/RoleByUser.java
new file mode 100644
index 0000000..4b1b929
--- /dev/null
+++ b/model/src/main/java/cn/bunny/entity/system/RoleByUser.java
@@ -0,0 +1,17 @@
+package cn.bunny.entity.system;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class RoleByUser {
+ private List assginRoleList;
+ private List allRolesList;
+}
diff --git a/model/src/main/java/cn/bunny/entity/system/SysDept.java b/model/src/main/java/cn/bunny/entity/system/SysDept.java
new file mode 100644
index 0000000..e49bd9e
--- /dev/null
+++ b/model/src/main/java/cn/bunny/entity/system/SysDept.java
@@ -0,0 +1,51 @@
+package cn.bunny.entity.system;
+
+import cn.bunny.entity.base.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel(description = "部门")
+@TableName("sys_dept")
+public class SysDept extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "部门名称")
+ @TableField("name")
+ private String name;
+
+ @ApiModelProperty(value = "上级部门id")
+ @TableField("parent_id")
+ private Long parentId;
+
+ @ApiModelProperty(value = "树结构")
+ @TableField("tree_path")
+ private String treePath;
+
+ @ApiModelProperty(value = "排序")
+ @TableField("sort_value")
+ private Integer sortValue;
+
+ @ApiModelProperty(value = "负责人")
+ @TableField("leader")
+ private String leader;
+
+ @ApiModelProperty(value = "电话")
+ @TableField("phone")
+ private String phone;
+
+ @ApiModelProperty(value = "状态(1正常 0停用)")
+ @TableField("status")
+ private Integer status;
+
+ @ApiModelProperty(value = "下级部门")
+ @TableField(exist = false)
+ private List children;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/cn/bunny/entity/system/SysLoginLog.java b/model/src/main/java/cn/bunny/entity/system/SysLoginLog.java
new file mode 100644
index 0000000..ea2ec20
--- /dev/null
+++ b/model/src/main/java/cn/bunny/entity/system/SysLoginLog.java
@@ -0,0 +1,39 @@
+package cn.bunny.entity.system;
+
+import cn.bunny.entity.base.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel(description = "SysLoginLog")
+@TableName("sys_login_log")
+public class SysLoginLog extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "用户账号")
+ @TableField("username")
+ private String username;
+
+ @ApiModelProperty(value = "登录IP地址")
+ @TableField("ipaddr")
+ private String ipaddr;
+
+ @ApiModelProperty(value = "登录状态(0成功 1失败)")
+ @TableField("status")
+ private Integer status;
+
+ @ApiModelProperty(value = "提示信息")
+ @TableField("msg")
+ private String msg;
+
+ @ApiModelProperty(value = "访问时间")
+ @TableField("access_time")
+ private Date accessTime;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/cn/bunny/entity/system/SysMenu.java b/model/src/main/java/cn/bunny/entity/system/SysMenu.java
new file mode 100644
index 0000000..04017c3
--- /dev/null
+++ b/model/src/main/java/cn/bunny/entity/system/SysMenu.java
@@ -0,0 +1,62 @@
+package cn.bunny.entity.system;
+
+import cn.bunny.entity.base.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel(description = "菜单")
+@TableName("sys_menu")
+public class SysMenu extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "所属上级")
+ @TableField("parent_id")
+ private Long parentId;
+
+ @ApiModelProperty(value = "名称")
+ @TableField("name")
+ private String name;
+
+ @ApiModelProperty(value = "类型(1:菜单,2:按钮)")
+ @TableField("type")
+ private Integer type;
+
+ @ApiModelProperty(value = "路由地址")
+ @TableField("path")
+ private String path;
+
+ @ApiModelProperty(value = "组件路径")
+ @TableField("component")
+ private String component;
+
+ @ApiModelProperty(value = "权限标识")
+ @TableField("perms")
+ private String perms;
+
+ @ApiModelProperty(value = "图标")
+ @TableField("icon")
+ private String icon;
+
+ @ApiModelProperty(value = "排序")
+ @TableField("sort_value")
+ private Integer sortValue;
+
+ @ApiModelProperty(value = "状态(0:禁止,1:正常)")
+ @TableField("status")
+ private Integer status;
+
+ // 下级列表
+ @TableField(exist = false)
+ private List children;
+ // 是否选中
+ @TableField(exist = false)
+ private boolean isSelect;
+}
+
diff --git a/model/src/main/java/cn/bunny/entity/system/SysOperLog.java b/model/src/main/java/cn/bunny/entity/system/SysOperLog.java
new file mode 100644
index 0000000..2926a9e
--- /dev/null
+++ b/model/src/main/java/cn/bunny/entity/system/SysOperLog.java
@@ -0,0 +1,75 @@
+package cn.bunny.entity.system;
+
+import cn.bunny.entity.base.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel(description = "SysOperLog")
+@TableName("sys_oper_log")
+public class SysOperLog extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "模块标题")
+ @TableField("title")
+ private String title;
+
+ @ApiModelProperty(value = "业务类型(0其它 1新增 2修改 3删除)")
+ @TableField("business_type")
+ private String businessType;
+
+ @ApiModelProperty(value = "方法名称")
+ @TableField("method")
+ private String method;
+
+ @ApiModelProperty(value = "请求方式")
+ @TableField("request_method")
+ private String requestMethod;
+
+ @ApiModelProperty(value = "操作类别(0其它 1后台用户 2手机端用户)")
+ @TableField("operator_type")
+ private String operatorType;
+
+ @ApiModelProperty(value = "操作人员")
+ @TableField("oper_name")
+ private String operName;
+
+ @ApiModelProperty(value = "部门名称")
+ @TableField("dept_name")
+ private String deptName;
+
+ @ApiModelProperty(value = "请求URL")
+ @TableField("oper_url")
+ private String operUrl;
+
+ @ApiModelProperty(value = "主机地址")
+ @TableField("oper_ip")
+ private String operIp;
+
+ @ApiModelProperty(value = "请求参数")
+ @TableField("oper_param")
+ private String operParam;
+
+ @ApiModelProperty(value = "返回参数")
+ @TableField("json_result")
+ private String jsonResult;
+
+ @ApiModelProperty(value = "操作状态(0正常 1异常)")
+ @TableField("status")
+ private Integer status;
+
+ @ApiModelProperty(value = "错误消息")
+ @TableField("error_msg")
+ private String errorMsg;
+
+ @ApiModelProperty(value = "操作时间")
+ @TableField("oper_time")
+ private Date operTime;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/cn/bunny/entity/system/SysPost.java b/model/src/main/java/cn/bunny/entity/system/SysPost.java
new file mode 100644
index 0000000..6712995
--- /dev/null
+++ b/model/src/main/java/cn/bunny/entity/system/SysPost.java
@@ -0,0 +1,33 @@
+package cn.bunny.entity.system;
+
+import cn.bunny.entity.base.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(description = "岗位")
+@TableName("sys_post")
+public class SysPost extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "岗位编码")
+ @TableField("post_code")
+ private String postCode;
+
+ @ApiModelProperty(value = "岗位名称")
+ @TableField("name")
+ private String name;
+
+ @ApiModelProperty(value = "显示顺序")
+ @TableField("description")
+ private String description;
+
+ @ApiModelProperty(value = "状态(1正常 0停用)")
+ @TableField("status")
+ private Integer status;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/cn/bunny/entity/system/SysRole.java b/model/src/main/java/cn/bunny/entity/system/SysRole.java
new file mode 100644
index 0000000..54446c4
--- /dev/null
+++ b/model/src/main/java/cn/bunny/entity/system/SysRole.java
@@ -0,0 +1,32 @@
+package cn.bunny.entity.system;
+
+import cn.bunny.entity.base.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+@Data
+@ApiModel(description = "角色")
+@TableName("sys_role")
+public class SysRole extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ //@NotBlank(message = "角色名称不能为空")
+ @ApiModelProperty(value = "角色名称")
+ @TableField("role_name")
+ private String roleName;
+
+ @ApiModelProperty(value = "角色编码")
+ @TableField("role_code")
+ private String roleCode;
+
+ @ApiModelProperty(value = "描述")
+ @TableField("description")
+ private String description;
+
+}
+
diff --git a/model/src/main/java/cn/bunny/entity/system/SysRoleMenu.java b/model/src/main/java/cn/bunny/entity/system/SysRoleMenu.java
new file mode 100644
index 0000000..c0a8ead
--- /dev/null
+++ b/model/src/main/java/cn/bunny/entity/system/SysRoleMenu.java
@@ -0,0 +1,26 @@
+package cn.bunny.entity.system;
+
+import cn.bunny.entity.base.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(description = "角色菜单")
+@TableName("sys_role_menu")
+public class SysRoleMenu extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "角色id")
+ @TableField("role_id")
+ private Long roleId;
+
+ @ApiModelProperty(value = "菜单id")
+ @TableField("menu_id")
+ private Long menuId;
+
+}
+
diff --git a/model/src/main/java/cn/bunny/entity/system/SysUser.java b/model/src/main/java/cn/bunny/entity/system/SysUser.java
new file mode 100644
index 0000000..ef89588
--- /dev/null
+++ b/model/src/main/java/cn/bunny/entity/system/SysUser.java
@@ -0,0 +1,68 @@
+package cn.bunny.entity.system;
+
+import cn.bunny.entity.base.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel(description = "用户")
+@TableName("sys_user")
+public class SysUser extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "用户名")
+ @TableField("username")
+ private String username;
+
+ @ApiModelProperty(value = "密码")
+ @TableField("password")
+ private String password;
+
+ @ApiModelProperty(value = "姓名")
+ @TableField("name")
+ private String name;
+
+ @ApiModelProperty(value = "手机")
+ @TableField("phone")
+ private String phone;
+
+ @ApiModelProperty(value = "头像地址")
+ @TableField("head_url")
+ private String headUrl;
+
+ @ApiModelProperty(value = "部门id")
+ @TableField("dept_id")
+ private Long deptId;
+
+ @ApiModelProperty(value = "岗位id")
+ @TableField("post_id")
+ private Long postId;
+
+ @ApiModelProperty(value = "描述")
+ @TableField("description")
+ private String description;
+
+ @ApiModelProperty(value = "openId")
+ @TableField("open_id")
+ private String openId;
+
+ @ApiModelProperty(value = "状态(1:正常 0:停用)")
+ @TableField("status")
+ private Integer status;
+
+ @TableField(exist = false)
+ private List roleList;
+ // 岗位
+ @TableField(exist = false)
+ private String postName;
+ // 部门
+ @TableField(exist = false)
+ private String deptName;
+}
+
diff --git a/model/src/main/java/cn/bunny/entity/system/SysUserRole.java b/model/src/main/java/cn/bunny/entity/system/SysUserRole.java
new file mode 100644
index 0000000..5b646e7
--- /dev/null
+++ b/model/src/main/java/cn/bunny/entity/system/SysUserRole.java
@@ -0,0 +1,25 @@
+package cn.bunny.entity.system;
+
+import cn.bunny.entity.base.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(description = "用户角色")
+@TableName("sys_user_role")
+public class SysUserRole extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "角色id")
+ @TableField("role_id")
+ private Long roleId;
+
+ @ApiModelProperty(value = "用户id")
+ @TableField("user_id")
+ private Long userId;
+}
+
diff --git a/model/src/main/java/cn/bunny/entity/system/SysUserinfo.java b/model/src/main/java/cn/bunny/entity/system/SysUserinfo.java
new file mode 100644
index 0000000..731524f
--- /dev/null
+++ b/model/src/main/java/cn/bunny/entity/system/SysUserinfo.java
@@ -0,0 +1,22 @@
+package cn.bunny.entity.system;
+
+import cn.bunny.vo.system.RouterVo;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.HashSet;
+import java.util.List;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysUserinfo {
+ private HashSet roles;
+ private String name;
+ private String avatar;
+ private List buttons;
+ private List routers;
+}
diff --git a/model/src/main/java/cn/bunny/enums/ResultCodeEnum.java b/model/src/main/java/cn/bunny/enums/ResultCodeEnum.java
new file mode 100644
index 0000000..5071af7
--- /dev/null
+++ b/model/src/main/java/cn/bunny/enums/ResultCodeEnum.java
@@ -0,0 +1,47 @@
+package cn.bunny.enums;
+
+import lombok.Getter;
+
+/**
+ * 统一返回结果状态信息类
+ */
+@Getter
+public enum ResultCodeEnum {
+
+ SUCCESS(200, "操作成功"),
+ FAIL(201, "失败"),
+ SERVICE_ERROR(2012, "服务异常"),
+ DATA_ERROR(204, "数据异常"),
+ ILLEGAL_REQUEST(205, "非法请求"),
+ REPEAT_SUBMIT(206, "重复提交"),
+
+ LOGIN_AUTH(208, "未登陆"),
+ PERMISSION(209, "没有权限"),
+
+ ORDER_PRICE_ERROR(210, "订单商品价格变化"),
+ ORDER_STOCK_FALL(204, "订单库存锁定失败"),
+ CREATE_ORDER_FAIL(210, "创建订单失败"),
+
+ COUPON_GET(220, "优惠券已经领取"),
+ COUPON_LIMIT_GET(221, "优惠券已发放完毕"),
+
+ URL_ENCODE_ERROR(216, "URL编码失败"),
+ ILLEGAL_CALLBACK_REQUEST_ERROR(217, "非法回调请求"),
+ FETCH_ACCESSTOKEN_FAILD(218, "获取accessToken失败"),
+ FETCH_USERINFO_ERROR(219, "获取用户信息失败"),
+
+
+ SKU_LIMIT_ERROR(230, "购买个数不能大于限购个数"),
+ REGION_OPEN(240, "该区域已开通"),
+ REGION_NO_OPEN(240, "该区域未开通"),
+ ;
+
+ private final Integer code;
+
+ private final String message;
+
+ ResultCodeEnum(Integer code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+}
\ No newline at end of file
diff --git a/model/src/main/java/cn/bunny/vo/process/ApprovalVo.java b/model/src/main/java/cn/bunny/vo/process/ApprovalVo.java
new file mode 100644
index 0000000..3002e3d
--- /dev/null
+++ b/model/src/main/java/cn/bunny/vo/process/ApprovalVo.java
@@ -0,0 +1,18 @@
+package cn.bunny.vo.process;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ApprovalVo {
+
+ private Long processId;
+
+ private String taskId;
+
+ @ApiModelProperty(value = "状态")
+ private Integer status;
+
+ @ApiModelProperty(value = "审批描述")
+ private String description;
+}
diff --git a/model/src/main/java/cn/bunny/vo/process/ProcessFormVo.java b/model/src/main/java/cn/bunny/vo/process/ProcessFormVo.java
new file mode 100644
index 0000000..1d1f2da
--- /dev/null
+++ b/model/src/main/java/cn/bunny/vo/process/ProcessFormVo.java
@@ -0,0 +1,20 @@
+package cn.bunny.vo.process;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(description = "流程表单")
+public class ProcessFormVo {
+
+ @ApiModelProperty(value = "审批模板id")
+ private Long processTemplateId;
+
+ @ApiModelProperty(value = "审批类型id")
+ private Long processTypeId;
+
+ @ApiModelProperty(value = "表单值")
+ private String formValues;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/cn/bunny/vo/process/ProcessQueryVo.java b/model/src/main/java/cn/bunny/vo/process/ProcessQueryVo.java
new file mode 100644
index 0000000..4e4f65f
--- /dev/null
+++ b/model/src/main/java/cn/bunny/vo/process/ProcessQueryVo.java
@@ -0,0 +1,31 @@
+package cn.bunny.vo.process;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(description = "Process")
+public class ProcessQueryVo {
+
+ @ApiModelProperty(value = "关键字")
+ private String keyword;
+
+ @ApiModelProperty(value = "用户id")
+ private Long userId;
+
+ @TableField("process_template_id")
+ private Long processTemplateId;
+
+ @ApiModelProperty(value = "审批类型id")
+ private Long processTypeId;
+
+ private String createTimeBegin;
+ private String createTimeEnd;
+
+ @ApiModelProperty(value = "状态(0:默认 1:审批中 2:审批通过 -1:驳回)")
+ private Integer status;
+
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/cn/bunny/vo/process/ProcessVo.java b/model/src/main/java/cn/bunny/vo/process/ProcessVo.java
new file mode 100644
index 0000000..51d910c
--- /dev/null
+++ b/model/src/main/java/cn/bunny/vo/process/ProcessVo.java
@@ -0,0 +1,59 @@
+package cn.bunny.vo.process;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel(description = "Process")
+public class ProcessVo {
+
+ private Long id;
+
+ private Date createTime;
+
+ @ApiModelProperty(value = "审批code")
+ private String processCode;
+
+ @ApiModelProperty(value = "用户id")
+ private Long userId;
+ private String name;
+
+ @TableField("process_template_id")
+ private Long processTemplateId;
+ private String processTemplateName;
+
+ @ApiModelProperty(value = "审批类型id")
+ private Long processTypeId;
+ private String processTypeName;
+
+ @ApiModelProperty(value = "标题")
+ private String title;
+
+ @ApiModelProperty(value = "描述")
+ private String description;
+
+ @ApiModelProperty(value = "表单属性")
+ private String formProps;
+
+ @ApiModelProperty(value = "表单选项")
+ private String formOptions;
+
+ @ApiModelProperty(value = "表单属性值")
+ private String formValues;
+
+ @ApiModelProperty(value = "流程实例id")
+ private String processInstanceId;
+
+ @ApiModelProperty(value = "当前审批人")
+ private String currentAuditor;
+
+ @ApiModelProperty(value = "状态(0:默认 1:审批中 2:审批通过 -1:驳回)")
+ private Integer status;
+
+ private String taskId;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/cn/bunny/vo/system/AssginMenuVo.java b/model/src/main/java/cn/bunny/vo/system/AssginMenuVo.java
new file mode 100644
index 0000000..8ef1faf
--- /dev/null
+++ b/model/src/main/java/cn/bunny/vo/system/AssginMenuVo.java
@@ -0,0 +1,20 @@
+package cn.bunny.vo.system;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@ApiModel(description = "分配菜单")
+@Data
+public class AssginMenuVo {
+
+ @ApiModelProperty(value = "角色id")
+ private Long roleId;
+
+ @ApiModelProperty(value = "菜单id列表")
+ private List menuIdList;
+
+}
diff --git a/model/src/main/java/cn/bunny/vo/system/AssginRoleVo.java b/model/src/main/java/cn/bunny/vo/system/AssginRoleVo.java
new file mode 100644
index 0000000..de9ca92
--- /dev/null
+++ b/model/src/main/java/cn/bunny/vo/system/AssginRoleVo.java
@@ -0,0 +1,20 @@
+package cn.bunny.vo.system;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@ApiModel(description = "分配菜单")
+@Data
+public class AssginRoleVo {
+
+ @ApiModelProperty(value = "用户id")
+ private Long userId;
+
+ @ApiModelProperty(value = "角色id列表")
+ private List roleIdList;
+
+}
diff --git a/model/src/main/java/cn/bunny/vo/system/LoginVo.java b/model/src/main/java/cn/bunny/vo/system/LoginVo.java
new file mode 100644
index 0000000..6fda19b
--- /dev/null
+++ b/model/src/main/java/cn/bunny/vo/system/LoginVo.java
@@ -0,0 +1,34 @@
+package cn.bunny.vo.system;
+
+
+/**
+ * 登录对象
+ */
+public class LoginVo {
+
+ /**
+ * 手机号
+ */
+ private String username;
+
+ /**
+ * 密码
+ */
+ private String password;
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+}
diff --git a/model/src/main/java/cn/bunny/vo/system/MetaVo.java b/model/src/main/java/cn/bunny/vo/system/MetaVo.java
new file mode 100644
index 0000000..9e9b567
--- /dev/null
+++ b/model/src/main/java/cn/bunny/vo/system/MetaVo.java
@@ -0,0 +1,29 @@
+package cn.bunny.vo.system;
+
+import lombok.Data;
+
+/**
+ * 路由显示信息
+ */
+@Data
+public class MetaVo {
+ /**
+ * 设置该路由在侧边栏和面包屑中展示的名字
+ */
+ private String title;
+
+ /**
+ * 设置该路由的图标,对应路径src/assets/icons/svg
+ */
+ private String icon;
+
+ public MetaVo() {
+ }
+
+ public MetaVo(String title, String icon) {
+ this.title = title;
+ this.icon = icon;
+ }
+
+}
+
diff --git a/model/src/main/java/cn/bunny/vo/system/RouterVo.java b/model/src/main/java/cn/bunny/vo/system/RouterVo.java
new file mode 100644
index 0000000..97f63dc
--- /dev/null
+++ b/model/src/main/java/cn/bunny/vo/system/RouterVo.java
@@ -0,0 +1,48 @@
+package cn.bunny.vo.system;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 路由配置信息
+ */
+@Data
+public class RouterVo {
+ /**
+ * 路由名字
+ */
+ // private String name;
+
+ /**
+ * 路由地址
+ */
+ private String path;
+
+ /**
+ * 是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现
+ */
+ private boolean hidden;
+
+ /**
+ * 组件地址
+ */
+ private String component;
+
+ /**
+ * 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面
+ */
+ private Boolean alwaysShow;
+
+ /**
+ * 其他元素
+ */
+ private MetaVo meta;
+
+ /**
+ * 子路由
+ */
+ private List children;
+
+
+}
diff --git a/model/src/main/java/cn/bunny/vo/system/SysLoginLogQueryVo.java b/model/src/main/java/cn/bunny/vo/system/SysLoginLogQueryVo.java
new file mode 100644
index 0000000..c48523b
--- /dev/null
+++ b/model/src/main/java/cn/bunny/vo/system/SysLoginLogQueryVo.java
@@ -0,0 +1,16 @@
+package cn.bunny.vo.system;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class SysLoginLogQueryVo {
+
+ @ApiModelProperty(value = "用户账号")
+ private String username;
+
+ private String createTimeBegin;
+ private String createTimeEnd;
+
+}
+
diff --git a/model/src/main/java/cn/bunny/vo/system/SysOperLogQueryVo.java b/model/src/main/java/cn/bunny/vo/system/SysOperLogQueryVo.java
new file mode 100644
index 0000000..ee61375
--- /dev/null
+++ b/model/src/main/java/cn/bunny/vo/system/SysOperLogQueryVo.java
@@ -0,0 +1,15 @@
+package cn.bunny.vo.system;
+
+import lombok.Data;
+
+@Data
+public class SysOperLogQueryVo {
+
+ private String title;
+ private String operName;
+
+ private String createTimeBegin;
+ private String createTimeEnd;
+
+}
+
diff --git a/model/src/main/java/cn/bunny/vo/system/SysPostQueryVo.java b/model/src/main/java/cn/bunny/vo/system/SysPostQueryVo.java
new file mode 100644
index 0000000..d57396a
--- /dev/null
+++ b/model/src/main/java/cn/bunny/vo/system/SysPostQueryVo.java
@@ -0,0 +1,19 @@
+package cn.bunny.vo.system;
+
+import lombok.Data;
+
+@Data
+public class SysPostQueryVo {
+
+ //@ApiModelProperty(value = "岗位编码")
+ private String postCode;
+
+ //@ApiModelProperty(value = "岗位名称")
+ private String name;
+
+ //@ApiModelProperty(value = "状态(1正常 0停用)")
+ private Boolean status;
+
+
+}
+
diff --git a/model/src/main/java/cn/bunny/vo/system/SysRoleQueryVo.java b/model/src/main/java/cn/bunny/vo/system/SysRoleQueryVo.java
new file mode 100644
index 0000000..b4362c5
--- /dev/null
+++ b/model/src/main/java/cn/bunny/vo/system/SysRoleQueryVo.java
@@ -0,0 +1,29 @@
+//
+//
+package cn.bunny.vo.system;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 角色查询实体
+ *
+ *
+ * @author qy
+ * @since 2019-11-08
+ */
+public class SysRoleQueryVo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private String roleName;
+
+ public String getRoleName() {
+ return roleName;
+ }
+
+ public void setRoleName(String roleName) {
+ this.roleName = roleName;
+ }
+}
+
diff --git a/model/src/main/java/cn/bunny/vo/system/SysUserQueryVo.java b/model/src/main/java/cn/bunny/vo/system/SysUserQueryVo.java
new file mode 100644
index 0000000..4c7fe8d
--- /dev/null
+++ b/model/src/main/java/cn/bunny/vo/system/SysUserQueryVo.java
@@ -0,0 +1,30 @@
+//
+//
+package cn.bunny.vo.system;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 用户查询实体
+ *
+ */
+@Data
+public class SysUserQueryVo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private String keyword;
+
+ private String createTimeBegin;
+ private String createTimeEnd;
+
+ private Long roleId;
+ private Long postId;
+ private Long deptId;
+
+}
+
diff --git a/model/src/main/java/cn/bunny/vo/wechat/BindPhoneVo.java b/model/src/main/java/cn/bunny/vo/wechat/BindPhoneVo.java
new file mode 100644
index 0000000..a0aec37
--- /dev/null
+++ b/model/src/main/java/cn/bunny/vo/wechat/BindPhoneVo.java
@@ -0,0 +1,14 @@
+package cn.bunny.vo.wechat;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class BindPhoneVo {
+
+ @ApiModelProperty(value = "手机")
+ private String phone;
+
+ @ApiModelProperty(value = "openId")
+ private String openId;
+}
diff --git a/model/src/main/java/cn/bunny/vo/wechat/MenuVo.java b/model/src/main/java/cn/bunny/vo/wechat/MenuVo.java
new file mode 100644
index 0000000..5d352a6
--- /dev/null
+++ b/model/src/main/java/cn/bunny/vo/wechat/MenuVo.java
@@ -0,0 +1,39 @@
+package cn.bunny.vo.wechat;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel(description = "菜单")
+public class MenuVo {
+
+ @ApiModelProperty(value = "id")
+ private Long id;
+
+ @ApiModelProperty(value = "id")
+ private Long parentId;
+
+ @ApiModelProperty(value = "名称")
+ private String name;
+
+ @ApiModelProperty(value = "类型")
+ private String type;
+
+ @ApiModelProperty(value = "url")
+ private String url;
+
+ @ApiModelProperty(value = "菜单key")
+ private String meunKey;
+
+ @ApiModelProperty(value = "排序")
+ private Integer sort;
+
+ @ApiModelProperty(value = "下级")
+ @TableField(exist = false)
+ private List children;
+
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index ed4c03e..5e9318c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,24 +9,27 @@
cn.bunny
- java-template
+ bunny-template
0.0.1-SNAPSHOT
pom
- java-template
- java-template
+ bunny-template
+ bunny-template
common
model
service
+
+ 21
+ 21
21
3.5.6
- 8.0.33
+ 8.0.30
3.0.3
2.0.47
- 8.4.3
+ 8.5.9
1.18.32
3.3.3
2.10.1
@@ -36,7 +39,7 @@
com.baomidou
- mybatis-plus-boot-starter
+ mybatis-plus-spring-boot3-starter
${mybatis-plus.version}
@@ -69,6 +72,12 @@
lombok
${lombok.version}
+
+
+ cn.hutool
+ hutool-all
+ 5.8.25
+
com.alibaba
easyexcel
diff --git a/service/pom.xml b/service/pom.xml
index 793c56c..a369612 100644
--- a/service/pom.xml
+++ b/service/pom.xml
@@ -3,13 +3,12 @@
4.0.0
cn.bunny
- java-template
+ bunny-template
0.0.1-SNAPSHOT
service
jar
-
service
https://maven.apache.org
@@ -18,16 +17,9 @@
192.168.3.98:1100
192.168.3.98:2375
bunny-service
- UTF-8
-
-
- cn.bunny
- model
- 0.0.1-SNAPSHOT
-
cn.bunny
@@ -46,11 +38,6 @@
org.springframework.boot
spring-boot-starter-test
-
-
- com.github.xiaoymin
- knife4j-spring-boot-starter
-
diff --git a/service/src/main/java/cn/bunny/service/ServiceApplication.java b/service/src/main/java/cn/bunny/service/ServiceApplication.java
index 620679a..67d671c 100644
--- a/service/src/main/java/cn/bunny/service/ServiceApplication.java
+++ b/service/src/main/java/cn/bunny/service/ServiceApplication.java
@@ -1,9 +1,13 @@
package cn.bunny.service;
+import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
+@ComponentScan(basePackages = {"cn.bunny"})
+@MapperScan("cn.bunny.service.mapper")
public class ServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceApplication.class, args);
diff --git a/service/src/main/java/cn/bunny/service/controller/IndexController.java b/service/src/main/java/cn/bunny/service/controller/IndexController.java
new file mode 100644
index 0000000..44186d9
--- /dev/null
+++ b/service/src/main/java/cn/bunny/service/controller/IndexController.java
@@ -0,0 +1,47 @@
+package cn.bunny.service.controller;
+
+import cn.bunny.common.service.result.Result;
+import cn.bunny.entity.system.Login;
+import cn.bunny.entity.system.SysUserinfo;
+import cn.bunny.service.service.SysUserService;
+import cn.bunny.vo.system.LoginVo;
+import io.swagger.annotations.Api;
+import io.swagger.v3.oas.annotations.Operation;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+/**
+ *
+ * 后台登录登出
+ *
+ */
+@Api(tags = "后台登录管理")
+@RestController
+@RequestMapping("/admin/system/index")
+public class IndexController {
+ @Autowired
+ private SysUserService sysUserService;
+
+ @Operation(summary = "登录", description = "登录")
+ @PostMapping("login")
+ public Result login(@RequestBody LoginVo loginVo) {
+ Login login = sysUserService.login(loginVo);
+ return Result.success(login);
+ }
+
+ @Operation(summary = "获取用户信息", description = "获取用户信息")
+ @GetMapping("info")
+ public Result info(HttpServletRequest request) {
+ SysUserinfo userinfo = sysUserService.getUserinfo(request);
+ return Result.success(userinfo);
+ }
+
+ @Operation(summary = "退出", description = "退出")
+ @PostMapping("logout")
+ public Result