# 2.7.0 (2020-11-05 23:30)
- fix: 修复任务启动后，更新任务触发时间，不生效  fix:29
- fix: redis持久化策略不影响全局配置
- feat: 合并ContextHandlerInterceptor、TenantContextHandlerInterceptor、MdcHandlerInterceptor 为 HeaderThreadLocalInterceptor， 专门用于处理请求头中的参数封装到ThreadLocal
- feat: TokenContextFilter支持单独配置忽略tenant、忽略token
- feat: IgnoreTokenProperties 重命名为 IgnoreProperties，并将原来的配置`ignore.token.url`改成`zuihou.ignore.xxx`
- feat: 废弃无用的单元测试
- feat: apache的StringUtils替换为hutool的StrUtil
- feat: xss-starter相关功能支持通过配置文件配置
- feat: SysLog注解支持获取当前线程上下文中的参数.  用法 #threadLocal.name
- feat: 数据注入代码结构、注释优化
- feat: 数据注入支持忽略注入指定字段
    ```
    injectionCore.injection(user, "org", "nation");
    ```
- feat: 代码注释完善若干、代码逻辑优化若干、修复bug若干


# 2.6.0  (2020年10月22日 20:40:00)
- 新增工作流Activiti服务 及 相关例子 （暂不支持DATASOURCE模式）
- 新增符合redis原生命令方法名的操作类：RedisOps
- 重构 zuihou-cache-starter 模块， 为3.x版本全面替换缓存方案做准备。
    - 新增缓存统一操作类： CacheOps、CachePlusOps 。 目前有基于Redis和Caffeine的2种实现方式
    - 统一缓存Key工具类： CacheKey，内部封装了key的前缀（固定值）、后缀（动态参数）、有效期
    - 支持缓存空对象
- 修复租户初始化链接时方法的无本地事务问题
- 修复参数管理可以新增相同key的参数的bug
- 修复字典管理可以新增相同类型的字典和相同编码字典项的bug
- 数据注入支持注入逗号分割的多个字典（数据库存: code1,code2  注入后，返回： name1,name2)
- 修复缓存的key没有拼接租户编码，导致角色配置权限后清理缓存失效的bug
- mysql 的 dockerfile 新增密码永不过期的配置
- 优化模糊查询类型转换器，相关方法抽取出来
- URI权限控制，新增判断角色和权限的方法
- SuperCacheController 类新增重置缓存和清理缓存的方法
- 岗位管理支持时间区间查询
- 分页参数对象PageParams，新增偏移量方法
- 认证服务众多Controller合并
- 优化代码若干、修复bug若干、编写bug若干
- COLUMN模式新建租户时，增加菜单项
- 菜单图标换成： e-icon-picker 
- 修复登录页面记住密码输入框背景色很黑的bug

# 2.5.2 升级日志  (2020年09月27日19:35:30)
- 依赖升级
    knife4j.version -> 2.0.5
    jjwt.version -> 0.11.2
    hutool.version -> 5.4.2
- 新增UidGenerator，基于Snowflake算法的唯一ID生成器。支持自定义workerId位数和初始化策略,从而适用于docker等虚拟化环境下实例自动重启、漂移等场景。
- 修复定时任务服务启动bug
- 修复升级 mybatis-plus 3.4.0 后， 和数据权限拦截器冲突产生的bug
- 缓存key增加租户编码，防止多租户缓存冲突  fix #23
- 修复COLUMN模式新增租户时，创建的内置的管理员无法登录的bug
- 修复DATASOURCE模式影响的网关启动时报错的bug
- BeanPlusUtil 移动到 zuihou-boot ，并支持IPage
- 修复租户禁用后，还能登录zuihou-ui的bug 
- zuihou-ui 菜单管理页面支持配置svg图标
- zuihou-ui 修复多级路由的显示、样式等问题
- zuihou-ui 左侧菜单支持显示svg图标
- zuihou-ui 优化404页面
- 完善源码中的注释、文档、错误打印的日志、删除无用代码等若干项
- zuihou-admin-boot项目 的启动端口调整成 8760， 方便前端调用
- zuihou-admin-boot项目 的租户库调整成 zuihou_boot ，方便与 cloud 区分开。


# 2.5.1 升级日志 (2020年09月05日19:35:30)
- 升级依赖
    mybatisplus.version -> 3.4.0
    mybatis.version -> 3.5.5
    mybatis-spring.version -> 2.0.5
    p6spy.version -> 3.9.1
- 独立租户服务(zuihou-tenant-server)，需要租户模式(zuihou-admin-ui)的就启动租户服务(TenantApplication)。zuihou_none模式和不需要新增租户的无需启动，使得租户功能、权限功能最小化 💥💥💥 
- 新增租户时，DATASOURCE模式支持指定任意数据库作为租户的数据源 🎉🎉🎉
- 支持每个服务的租户库独立数据库 （之前的版本默认都是zuihou_base_xxxx) 🎉🎉🎉
- 将DATASOURCE模式 zuihou-authority-server/src/main/resources/sqls/ 下的初始化租户库脚本，分散到各个服务 🎉🎉🎉
- 将SCHEMA模式 zuihou-authority-server/src/main/resources/sqls/ 下的初始化租户库脚本，调整到租户服务 🎉🎉🎉
- 修复新增数据源时，网关服务无法动态新增数据源的bug
- 修复升级版本后DATASOURCE模式无法使用p6spy打印sql的bug
- 新增TenantP6SpyLogger：用于 p6spy 在输出的sql日志中，打印当前租户、当前用户ID、当前数据源连接url
- 修复p6spy配置文件配置项使用错误的bug
- 修复p6spy批量操作打印SQL日志重复的问题
- 优化mybatis plus升级后提示的过时代码
- SCHEMA、COLUMN模式实现插件调整成 MP 3.4.0 版本最新插件
- 优化 SuperCacheServiceImpl 类几个批量操作方法的逻辑
- 升级docs/dockerfile/ 下的 mysql8 和 nacos脚本，使得 nacos 升级到1.3.1并完全支持mysql8 🎉🎉🎉
- 新增租户时，内置超级管理员(admin)，用于维护、管理整个SaaS平台，拥有一切权利，能登录到任意的租户系统中，查看其数据。 🎉🎉🎉
- 优化登录接口性能（查询租户、应用、用户表走缓存）
- SuperCacheService 新增getByKey方法 
- 修复 AttachmentController#findAttachmentByBiz 接口和父类接口冲突
- 修复地区管理查询数据的bug
- 优化重置用户密码功能
- 用户表新增readonly字段
- org表新增类型字段，用于区分单位或者部门
- 修复限流功能设置了有效期时的bug
- 新增zuihou-public公共模块，将zuihou-common(业务公共包)、zuihou-tenant-datasource(数据源模式插件包)等跟业务相关的工具类、插件、业务公共类等移到该模块下
- 修复shells/linux/start.sh启动脚本参数位置错误的bug
- 修复代码不完全兼容NONE模式的bug
- SCHEMA、DATASOURCE 模式各个服务链接的库和描述
| 后台服务 | 项目名 | 启动时连接的库 | 运行时租户库 | 功能描述 |  
|---|---|---|---|---|
| 认证服务 | zuihou-oauth | zuihou_defaults | zuihou_base_{tenant} | 负责登录、用户必备的数据接口 | 
| 权限服务 | zuihou-authority | zuihou_defaults | zuihou_base_{tenant} | 权限、公共、组织架构等基础功能。 后期考虑更名为 zuihou-base(欢迎提建议) |
| 文件服务 | zuihou-file | zuihou_defaults | zuihou_base_{tenant} | 负责文件上传、下载等功能 |
| 消息服务 | zuihou-msgs | zuihou_defaults | zuihou_base_{tenant} | 负责站内信、消息、短信、邮件等功能 |
| 租户服务 | zuihou-tenant | zuihou_defaults | zuihou_defaults | 负责租户模式管理租户 |
| 网关服务 | zuihou-gate | zuihou_defaults | zuihou_extend_{tenant} | 负责统一路由、认证、限流等 |
| 订单服务 | zuihou-order | zuihou_defaults | zuihou_extend_{tenant} | 演示用 |
| 演示服务 | zuihou-demo | zuihou_defaults | zuihou_extend_{tenant} | 演示用 |
| 定时服务 | zuihou-jobs | zuihou_defaults | zuihou_base_{tenant}、zuihou_extend_{tenant} | 负责定时任务 |


# 2.5.0 升级日志（2020年08月10日20:28:56）
1. 
    ```
    spring-boot-maven-plugin.version -> 2.2.9
    spring-boot-admin.version -> 2.2.4
    dynamic.datasource.version -> 3.2.0
    mysql.version>8.0.21
    easypoi.version>4.2.0
    hutool.version>5.3.10
    caffeine.version>2.8.5
    ```
2. 优化SpringCloud（zuihou-cloud-starter）相关功能
3. 新增限流功能
4. 新增IP黑名单功能
5. 修复zuihou-jobs-server无法显示图标的bug


# 2.4.1 升级日志 （2020年08月03日07:54:43）
1. 用户信息返回给前端时，忽略密码字段
2. 修复zuihou-ui - 用户管理 - 修改用户信息时，会将用户密码多次修改的bug
3. 修复zuihou-ui - 用户管理 - 新增单独的修改密码功能
4. 修复zuihou-admin-ui - 全局用户 切换企业为租户后，修改用户时，无法回显企业的bug
5. 修复zuihou-admin-ui - 全局用户 修改页面无法正常回显企业的bug
5. 优化zuihou-admin-ui - 全局用户 修改页面去除密码修改功能。
6. 新增zuihou-admin-ui - 全局用户 新增独立的修改密码功能
7. 优化批量替换项目名&包名&前缀的Shells脚本（支持Linux&Mac） (位于docs/批量替换项目脚本)
8. 新增基于Java代码实现的批量替换项目名&包名&前缀的方法（支持Window&Linux&Mac）(位于docs/批量替换项目脚本) （感谢 @☜☞E牛仔 贡献）
9. 修复删除租户时，无法删除所有服务的数据库的bug

# 2020年07月13日14:27:27 升级日志

1. 新增批量替换项目名&包名&前缀的Shells脚本（支持Linux&Mac）    (会员版才有)
2. 完整的项目讲解视频                                        (会员版才有)
3. 优化代码若干 & 删除无用代码和注释掉的代码若干 & 完善代码注释若干
4. 调整了nacos中的所有配置文件
5. 优化整个项目所有的枚举类型（删除枚举类型上标记的@JsonFormat(shape = JsonFormat.Shape.OBJECT) ）
6. 废弃zuihou-sacn-stater模块
7. 修复通用短信验证码发送的bug
8. 修复zuihou-admin-ui上传租户头像报错和无法修改头像成功的bug
9. 修复zipkin + seata整合时冲突报错
10.废弃SystemApi模块
11.依赖升级
    spring.boot.version -> 2.2.7.RELEASE
    spring.cloud.version -> Hoxton.SR3
    dynamic.datasource.version -> 3.1.0
    mybatis.version -> 3.5.4
    mybatis-spring.version -> 2.0.4
    mybatisplus.version -> 3.3.2
    p6spy.version -> 3.9.0
    fastjson.version -> 1.2.72  (修复安全漏洞）
    druid.version -> 1.1.22   (修复编译时，IDEA的警告）
    knife4j.version -> 2.0.4
    swagger.version -> 1.5.22
    hutool.version -> 5.3.9
    jjwt.version -> 0.11.1


### zuihou-gateway-server
1. 优化gateway网关的熔断配置
2. AccessFilter为TokenContextFilter

### zuihou-injection-starter
1. 修改 InjectionFieldPo 和 InjectionField 类的 feign 字段为 apiClass，使得字段命名更加合理
2. InjectionField注解类新增dictType属性，解决字典类型数据注入bug
3. 修复自动注入器注入字典类型的数据时，无法区分不同字典类型的值

### zuihou-validator-starter
1. 修复表单统一验证模块不支持Restful风格 + BaseController接口的验证规则获取bug
2. com.github.zuihou.validator.config.EnableFormValidator 注解移动到 com.github.zuihou.validator.annotation.EnableFormValidator

### zuihou-databases
1. 优化SCHEMA模式全局拦截器代码功能和可读性
2. 优化非DATASOURCE模式数据源配置
3. 优化分页插件每次查询最大500条的限制
4. PageParams类的 getPage() 方法修改成 buildPage()，并支持多字段排序
5. 删除 MultiTenantInterceptor ，新增 ReplaceSql
6. 新增MasterDatabaseConfiguration， 优化NONE、SCHEMA、COLUMN模式的数据源配置和事务配置
7. 修复NONE、SCHEMA、COLUMN模式事务失效的bug

### zuihou-core
1. 新增JsonUtil工具类（jackson）

### zuihou-boot
1. 优化枚举字段反序列化全局配置类：EnumDeserializer, 提高可读性和性能
2. 新增枚举类型字段的全局序列化配置类：EnumSerializer， 实现了BaseEnum接口的枚举按照规范序列化
3. 优化 BaseConfig 类中全局的 ObjectMapper 配置
3. 优化LocalDateTime类型参数的Jackson反序列化规则
4. 优化LocalDateTime、Date、LocalDate、LocalTime等日期类型表单参数传递时的转换规则
5. 全局统一异常的状态码修改为400
6. 优化PageController类handlerWrapper方法的逻辑
 
### zuihou-cloud-starter
1. 优化服务远程调用时，请求头和线程变量的传递
2. 新增全局的支持负载均衡策略、请求头和LocalThread参数传递的LbRestTemplate
3. 新增全局的熔断回调， @FeignClient 注解无需单独配置 fallback 和 fallbackFactory 即可实现回调

### zuihou-swagger2-starter
1. 使得通过 zuihou.swaggger.enabled 可以全局禁用swagger功能
2. 优化SwaggerProperties类的配置和默认值

### zuihou-log-starter
1. 为了减少zuihou-log-starter模块体积，将ip2region.db移动到oauth服务。
2. 修复操作日志根据参数控制是否记录请求参数的bug

### 定时任务
1. 修复分布式定时执行器运行重置任务时，找不到sql脚本的bug

### 代码生成器
1. 优化代码生成器配置若干
2. 修复代码生成器生成的代码导包不正确和缺少配置的bug
3，修复代码生成器生成配置类和Controller类错误的bug
4，优化代码生成器使得生成代码时，可以使用模糊查询同时生成多张表
5，完善代码生成后的提示信息
6, 支持生成租户数据源动态新增消息队列监听类


# 升级日志 2020年04月26日23:14:24
0. spring.cloud.version -> Hoxton.SR3
1. spring.boot.version -> 2.2.6.RELEASE
2. spring-cloud-alibaba -> 2.2.1.RELEASE
3. seata.version -> 1.2.0
4. fastjson.version -> 1.2.68
5. j2cache.version -> 2.8.2-release
6. jjwt.version -> 0.9.1
7. hutool.version -> 5.3.1
8. 支持 nacos 1.2.1
9. 支持 seata 1.2.0
10. 优化数据权限逻辑
11. 修复删除资源时执行删除SQL的bug
12. 修复查询缓存数据时，查询到为null的数据的会报NPE的bug
13. 同步 nacos 和 seata 的脚本
14. 修复RoleAuthorityServiceImpl类的方法 无事务注解
15. 优化项目配置，使得任意模式完美支持 seata
16. 优化若干代码
17. 调整开发文档兼容当前最新版本代码



# 升级日志 2020年04月19日14:44:46
新增：
1. 网关新增客户端认证校验
2. 新增分布式定时任务执行器（现在同时支持单机定时执行和分布式定时执行）

优化：
1. 优化代码生成器模版文件，减少依赖项
2. 优化 Swagger自动配置项，支持设置认证参数
3. 废弃zuihou-config模块，合并到zuihou-cloud-starter模块中
4. zuihou-admin-ui全局用户查询体验
5. 多数据源模式独立成插件，使用时自由插拔
6. 优化mq、scan等配置
7. 优化tenant模块包名

修复：
1. zuihou-admin-ui无法新增运营后台账号的bug


# 升级日志 2020年04月05日23:33:23
新增：
1. 新增认证服务（zuihou-oauth-server：负责登录、获取用户所有权限、资源、菜单等功能）
2. 参照SpringSecurity原理，调整 认证服务登录、刷新token等 接口相关逻辑
3. 参照SpringSecurity原理，新增 zuihou-security-starter 模块，实现 URI权限配置 和 鉴权
4. 新增 租户模式 支持**多数据源模式**：动态增减数据源，一个租户一个库一个数据源（不开源）
5. 多数据源模式相关代码和配置，调整成一键切换模式（不开源）
6. 新增多数据源模式完美支持**分布式事务** （seata 1.0.0） （不开源）
7. 新增删除租户时，删除租户数据和数据库的接口,并删除该租户的数据源
8. 新增记录在线用户功能 & 主动T人下线功能

优化：
1. 重写token生成规则和方法
2. 优化用户登录逻辑，根据配置决定是否限制用户重复登录、多端登录。
3. 登录日志改成发布事件的方式。
4. 移除 zuihou-shiro-starter 和 zuihou-user-starter 模块
5. 移除 zuihou-zuul-* 模块中没用的几个模块
6. 优化swagger配置，支持接口认证等参数
7. 配置文件调整：zuihou.database.bizDatabase -> zuihou.database.tenantDatabasePrefix
8. 将分散在各个服务的枚举接口(/enums)合并到 Oauth 服务，前端在登录之后，一次性拉取存放在前端缓存中。
9. 日志统一存储路径： logging.file.path 移动到 `src/main/filters/config-dev.properties` 统一配置
10. 将租户模块相关代码独立到权限服务的 `zuihou-tenant-**` 模块中，降低代码耦合度，增强系统的独立性。（有条件的朋友，完全可以将租户模块独立成一个服务）
11. 将非租户模式、字段租户模式、SCHEMA/数据源租户模式的数据库脚本区分开。
12. 简化租户后台系统相关接口逻辑 (zuihou-admin-ui)
13. 废除之前的配置在Controller层的声明式事务配置，采用注解配置事务，调整事务控制到service层，通过注解来控制事务，原因是兼容多数据源模式。
14. SuperCacheServiceImpl 相关方法加上事务注解。
15. SuperCacheServiceImpl 相关操作缓存的方法去除@Cache注解，采用cacheChanel方式，防止子类this调用时，无法使用缓存的bug
16. 拆分上下文拦截器，将租户信息、MDC分离到 拦截器TenantContextHandlerInterceptor(封装租户相关请求头)、MdcHandlerInterceptor(封装日志相关线程变量)
17. 优化操作日志相关配置，实现根据条件实例不同的bean
18. 简化order和demo服务的分布式事务配置 
19. SpringUtils类增加发布事件的静态方法
20. 废弃IgnoreTokenConfig,调整为配置文件方式： IgnoreTokenProperties

修复
1. 修复UserQuery构造方法报NPE的bug
2. 完善租户模块相关功能，并修复一个弱智bug

## 模式介绍
| 租户模式 | 描述 | 优点 | 缺点  | 
|---|---|---|---|
| NONE（非租户模式) | 没有租户 | 简单、适合独立系统 | 缺少租户系统的优点 | 
| COLUMN（字段模式) | 租户共用一个数据库，在业务表中增加字段来区分 | 简单、不复杂、开发无感知 | 数据隔离性差、安全性差、数据备份和恢复困难、 | 
| SCHEMA（独立schema) | 每个租户独立一个 数据库(schema)，执行sql时，动态在表名前增加schema | 简单、开发无感知、数据隔离性好 | 配置文件中必须配置数据库的root账号、不支持复杂sql和 sql嵌套自定义函数 | 
| DATASOURCE(独立数据源) | 每个租户独立一个 数据库(数据源)，执行代码时，动态切换数据源 | 可独立部署数据库，数据隔离性好、扩展性高、故障影响小 | 相对复杂、开发需要注意切换数据源时的事务问题、需要较多的数据库 |

| 模式\描述  | 表中有无租户字段 | 实体类中有无租户字段 | 分布式事务| 有几个数据库 |  
|---|---|---|---|---|
| NONE | 无 | 无 | 支持 | zuihou_defaults | 
| COLUMN | 有 | 无 | 支持 | zuihou_defaults |
| SCHEMA | 无 | 无 | 暂时不支持 | zuihou_defaults、zuihou_base_{tenant} |
| DATASOURCE | 无 | 无 | 支持 | zuihou_defaults、zuihou_base_{tenant} |

## 升级指南：
1. 更新 zuihou-admin-cloud， 待依赖更新完毕后，根据IDEA提示，删除zuihou-zuul-base、zuihou-zuul-authentication、zuihou-zuul-ratelimit 等模块
2. 若要更新zuihou-commons（该项目已经发布中央仓库，若不想看源码，可以不用管），待依赖更新完毕后，根据IDEA提示，删除zuihou-user-starter、zuihou-shiro-starter等模块
3. 编译项目
4. 重新导入 数据库脚本      (数据库改动较大，请务必重新执行，执行时，看着： docs/sql/脚本说明.md 根据自身情况导入脚本)
5. 重新导入 nacos 配置文件  (配置文件改动很大，删除合并了很多配置)
6. 启动项目


# 升级日志 2020年03月12日16:26:52
## 新增
0.新增 Base、Delete、Poi、Save、Update、Query等6个功能的Controller接口，方便业务方并提供默认实现SuperSimpleController、SuperNoPoiController、SuperController、SuperCacheController。
1.新增 SuperCacheController、SuperCacheService、SuperCacheServiceImpl 一套默认使用缓存的基类
2.新增 SuperController、SuperService、SuperServiceImpl 一套无缓存基类，用于区分上面的3个基类 
3.新增 手动查询当前登录用户、角色、岗位、组织信息。（原来只能用过 @LoginUser SysUser 方式注入）
4.新增 项目功能兼容mysql 8.0.19 （nacos使用 mysql8 需要修改nacos官方源码中驱动的版本号，并自行编译！！！）
5.前端项目：所有的分页查询请求改成POST、分页切换页面时记忆历史选中项目、点击表格一行的任意位置即为勾选、默认创建时间支持排序、所有表格head筛选改成后端筛选。
6.操作日志记录支持DB存储和FILE存储2种选择，并重新定义日志格式，支持应用名、端口号、租户ID、用户ID、日志链路ID等信息
7.多租户模式支持配置成 租户字段模式
8.用户管理页面支持导出、导入校验功能
9.新增new LbqWrapper(entity);方法，当entity中有类型为RemoteData的字段时，key为空也忽略拼接该字段。 

## 优化
0.依赖升级：springboot -> 2.2.5、 mysql -> 8.0.18、lombok -> 1.18.12、 fastjson -> 1.2.66、 mybatis-> 3.5.3、guava -> 22.0、 hutool -> 5.2.1、knife4j -> 2.0.2
1.完全独立zuihou-commons包，并优化相关配置，使得完美兼容cloud和boot项目
2.zuihou-commons相关jar发布至正式仓库。
3.优化代码生成器，兼容新增的几个基类（Super*）
4.废弃zuihou-api模块，将 zuihou-*-api 模块移动到 zuihou-* 模块下，方便部署编译
5.废弃原 BaseController 基类，并将原来写的所有代码，继承了全新的基类。
6.谨遵约定大于配置原则，优化zuihou-user-stater、zuihou-scan-stater使得选择Feign、Service、Rabbit模式时，其他模式的实现类完全不初始化
7.原来pom里面的配置移动到src/main/filters/config-ENV.properties
8.记录操作日志优化，支持开关、继承覆盖。
9.原zuihou-config下存放的配置文件移动到third-party/nacos/clientConfig
10.新增清理指定时段内的操作日志和登录日志的方法

## 修复
0.修复MultiTenantInterceptor拦截器类，无法替换部分复杂SQL表名的bug
1.zuihou-admin-ui 刷新页面后，切换菜单时控制台报错。

## zuihou-admin-cloud项目 代码更新升级指引：
0.以下几点只适用于在1.x版本中没有改动代码或者改动较少的情况，若对原来项目的代码该多较大，请重新找一个目录clone项目
1.在IDEA2019.3中，点击 Update Projects ,勾选： Merge the incoming changes into the current branch 后点OK
2.等代码更新完毕后，在文件资源管理器中将`zuihou-commons`、`zuihou-backend`、`zuihou-dependencies`3个文件夹直接删除。

## 配置文件变更（包含但不限于以下配置）：
0.nacos中 commmon.yml 新增：
```
zuihou:
  log:
    enabled: true
    type: DB
```
1.nacos中 zuihou-order-server.yml 和 zuihou-demo-server.yml: 修改
```
zuihou:
  database:
    multiTenantType: NONE       # 修改前：     isMultiTenant: false

```
2.nacos中 mysql.yml: 修改
```
zuihou:
  database:
    multiTenantType: SCHEMA   # 修改前：isMultiTenant: true  
```
3.项目中：zuihou-admin-cloud/zuihou-dependencies/pom.xml 中 profiles 相关的配置移动到了 zuihou-admin-cloud/src/main/filters/config-dev.properties
```
nacos.ip=127.0.0.1
nacos.port=8848
nacos.namespace=b16f7baf-56e7-4f4e-a26c-425ee0668016
seata.namespace=
```
4.原来存放在 zuihou-commons/src/main/resources 中的nacos配置文件，移动到了 third-party/nacos/clientConfig

## 为什么要将zuihou-commons模块独立出来？
    1.工具代码和业务代码存放在一个工程，复制项目时，会增加冗余代码。
    2.zuihou-commons项目下的所有模块均为独立的工具包，她的用途不局限于zuihou-admin-cloud和zuihou-admin-boot2个项目，而是适合任意SpringBoot或者SpringCloud项目

## 为何要将项目拆分成这么多子模块？
    这是高内聚低耦合的最佳体现
    增强代码的可读性、复用性、可维护性和易变更性
    模块内部的代码，相互之间的联系越强，内聚就越高， 模块的独立性就越好。 一个模块应该尽量的独立，去完成独立的功能！
    如果有代码非得引入到独立的模块，建议拆分成多模块！低内聚的代码，不好维护，代码也不够健壮


# 升级日志 2020年02月27日11:31:14
## 新增
1. zuihou-ui 增加公共导出excel组件
2. 代码生成器：支持导入、导出、导出预览、分页查询、翻页勾选、行级勾选等方法
3. 代码生成器: 支持字段生成 枚举、字典 类型的字段
4. SuperController 新增自定义查询列表方法

## 优化
1. 优化代码生成器匹配最新的后端代码: 树形、列表、编辑、导出预览、导入页面
2. 优化 SuperCacheServiceImpl 缓存相关配置

## 修复
1. 修复zuihou-admin-ui 项目密码错误时报错的bug
2. 修复logback日志无法打印debug级别到控制台的bug
3. 修复定时任务重置租户数据时，会误删除内置租户数据的bug


# 升级日志 2020年02月19日23:03:01
## 新增
1. 新增 SuperService、SuperCacheServiceImpl 类，增加缓存的支持
2. 新增 SuperMapper 类，增加 updateAllById 和 insertBatchSomeColumn 方法
3. 新增 QueryWrap 类，对MP提供的 QueryWrapper 类增强， 并优化 LbqWrapper 类 
4. 重写 SpringCache 的 cacheResolver，使得 注解模式 支持子类 重写缓存key 
5. 新增 首页右上角显示我的消息 功能
6. 调整 代码生成器初始化工程的结构和pom依赖， 生成后端代码使用最新的 Super* 父类接口, 并且生成的后端代码支持导入、导出功能

## 优化
1. 优化 操作日志，使得能够记录 SuperController 类的日志，并支持子类 重写操作日志描述
2. 优化 父类 BaseController2 重命名为 SupperController， 完善方法：CRUD、导入、导出、Excel预览、分页（支持排序、日期区间查询），完善操作日志(@SysLog)的支持
3. 调整用户（c_auth_user)相关类 继承新增的 Super* 接口，并联合前端调整接口后，测试通过
4. 优化 WriteInterceptor 写入权限拦截器，使之能根据nacos中参数，动态启用禁用，便于管理员在演示环境临时修改数据。

## 修复
1. 修复 zuihou-ui 消息发送 页面的bug
2. zuihou-ui 附件列表页面 鼠标移到文件名列时正确显示手形鼠标 


# 升级日志 2020年02月13日18:28:30
1. 升级 Alibaba Cloud 2.2.0.RELEASE
2. 修复 数据自动注入器 注入远程调用的数据类型擦除的bug
3. 新增 ribbon自定义负载均衡规则 实现简单的灰度发布
4. 完善父类控制器：BaseController2，新增模板方法：CRUD、导入、导出、预览、分页（排序） 
5. 分页接口由原来的GET请求修改成POST请求，并用PageParams对象包裹，方便传参 
6. 调整 zuihou-commons 下各组主键的依赖关系和代码位置。 
7. 模块 zuihou-common 移动到 zuihou-backend 包下，用于存放业务相关公共代码。 
8. 新增 zuihou-boot 模块用于存放 SpringBoot 相关配置，并将 zuihou-core 模块中 base 包下的代码移动到 zuihou-boot。
9. zuihou-openfeign-starter 重命名为 zuihou-cloud-stater 用于存放 SpringCloud 相关配置。
10. 修复 LbqWrapper#nested 方法参数为空时的一个bug
11. 完善各个模块之间依赖关系、将Pom依赖调整为最小依赖。
12. 调整登录接口的返回值
13. Order和Demo 服务中 seata 相关配置移动到 zuihou-order/demo-server.yml 配置文件中， 并通过参数控制是否启用 

# 升级日志 2020年02月12日15:54:39
1. 修复数据权限拦截器执行顺序不对导致的 数据bug <a href="https://gitee.com/zuihou111/zuihou-admin-cloud/issues/I197PH"> # fix I197PH </a>
2. 用户表增加 民族、学历、职位状态等 数据字典类型的字段， 并对接前后端页面
3. 修复定时发送短信接口报错的bug
4. 将业务代码中一些过时的方法替换成 hutool的相关方法
5. 委婉修复Jobs服务，首次启动报错的问题 （其实这个报错不算bug，但为了让大家减少疑惑，就调整了一下）
6. 优化代码生成器生成代码的可读性
7. 修改系统前后端交互时，拉取枚举和字典字段的方式为实时拉取。（原来是登录时拉取后缓存在前端，有数据不一致的bug）
8. 操作日志记录支持 SpEL 表达式 
9. 代码生成器支持识别 注解上用 feign 模式
10. 优化部分过时、无用、bug代码
11. 系统中涉及树形结构的相关接口优化

# 升级日志 2020年02月03日15:59:19
1. 唯一Id生成器换成 hutool 的 IdUtil
2. 关联字段数据注入工具（zuihou-injection-starter） 增加guava本地缓存，加快注入速度， 完善注释。
3. 使用MP提供的自定义枚举类型转换器，修复 数据库中枚举字段的值不存在时，报错的bug
4. 使用hutool工具类优化操作日志记录的异常消息
5. 标记core下的一些工具类为过时，拥抱Hutool
6，新增 参数管理 相关功能，用于配置系统全局参数或租户个性化参数。
7，修复 关联字段数据注入工具 缓存查询的一个bug
8. 代码生成器相关bug修复，并新增 前端页面生成 功能。

#升级日志 2020年01月28日17:42:42
1. 修复 bug    <a href="https://github.com/zuihou/zuihou-ui/issues/3"># fix 3</a> 
2. 升级SpringBoot 版本至 2.2.4
3. 升级MybatisPlus 版本至 3.3.1
4. 升级spring  版本至 5.2.3
5. 代码生成器支持 生成父类为 TreeEntity 类的结构
6. 代码生成器支持 解析数据库注释中的 @InjectionField 类型
7. 关联字段数据注入工具（原名zuihou-remote-data-starer） 重命名为： zuihou-injection-starter。 用于优雅解决跨服务、垮库、跨表的关联字段 数据回显问题。
8. 修复dozer-starter的配置读取无法使用通配符的bug。 并考虑项目中废弃 dozer ，采用hutool 的BeanUtil 作为JavaBean 的转换工具。
9. 岗位/用户 管理页面组织字段采用 数据注入工具 回显数据
10. 修复短信管理删除时，不会级联删除的bug
11. gateway 新增重定向接口兼容zuul 的swagger地址
12. gateway swagger文档地址返回调优
13. 修复 前端页面访问错误路径时，无法跳转到404 的bug
14. 增加自定义表单校验规则，使得能正常检验 RemoteData 类型的字段的 @NotEmpty @NotNull @Length 等检验注解


# 升级日志 2020年01月21日
0，定时任务 增加重置演示环境数据功能
1，完善地区相关接口，并优化地区表结构
2，对接 地区 相关前端页面
3，新增 数据字典相关方法
4，新增 爬虫，用于从国家统计局爬取全国的省市区数据
5，新增 数据聚合工具（zuihou-injection-starter), 用于解决跨库、跨表、跨服务的 关联数据 回显之痛。支持对静态数据属性(数据字典)、动态主键数据等进行自动注入和转化。
6，新增 树形基础实体TreeEntity， 使得实体支持树状结构
7，新增 Mybatis自定义类型处理器，使得Mybatis 能够将数据库中的字段解析成Java中的自定义类型


# 升级日志 2020年01月16日11:35:48
1. 升级 zipkin-server 到 2.19.2 ，并修改项目配置，使得兼容新版本，并完善使用文档
2. 代码生成器 增加 创建新服务 的功能
3. 代码生成器 支持实体中id字段名称任意命名，且不强制继承父类实体 
4. MetaObjectHandler 支持任意名称的Id字段自动注入， 并优化其代码可读性
5. 同步 zuihou-admin-boot 和 zuihou-admin-cloud 项目之间的代码，并部署到新的测试线
6. 优化 jobs项目的配置
7. 新增rabbitmq起步依赖便于项目 动态控制 是否启用rabbitmq
8. 修复 bug # fix 8 
9. 优化&完善文档：  在线文档
10. 修改 zuihou-ui 和 zuihou-admin-ui 配置，使得开发环境无需 nginx 也能自由切换 zuihou-admin-boot / zuihou-admin-cloud

# 升级日志 2020年01月09日
1. 完善数据字典相关接口对接
2. 重构数据源配置 BaseDbConfiguration
3. 让项目的租户模式变成可配置模式（包括 zuihou-ui 支持配置）。  
4. 解决 p6spy 打印 为 null 的sql语句
5. 将配置文件中过时的配置(logging.path等)升级为 最新版本的配置 
6. 用于测试 分布式事务(seata) 的2个服务取消多租户配置，并将分布式事务调试通过
7. 修复 zuihou-admin-ui 运行报错 ： `Cannot read property 'range' of null`
    解决方案： "babel-eslint": 降级为 "8.0.1" 
8. 统一 zuihou-admin-ui 的接口调用返回值
9. 记录更加详细的登录日志（登录失败原因等） 

# 升级日志 2020年01月02日22:15:50
1. 完善系统API&应用模块表结构、前后端对接等
2. 操作日志中模块描述记录得更加人性化
3. 优化&修复 前后端项目bug、代码功能不健全、命名不规范等若干
4. 消息中心接口完善&前后端对接
5. 删除附件统计相关无用接口
6. seata-all 相关版本升级到 1.0.0. 完善demo&test服务对seata-server的支持 (对本项目中采用的SaaS方案. 还存在一些问题）
7. 升级 SpringCloud 版本为 Hoxton.SR1
8. 升级 SpringBoot 版本为 2.2.2.RELEASE
9. 升级 mybatis-plus 版本为 3.3.0 （升级后发现官方分页查询的bug. 又回滚到3.2.0）
10. 升级 Alibaba Cloud 版本为 2.1.1.RELEASE
11. 升级Alibaba Cloud 版本为 2.1.1.RELEASE后.  zuihou-j2cache-starter 存在无法读取nacos中配置的bug. 已修复
12. 升级 knife4j 版本为 2.0.1   
13. 升级 hutool 版本为 5.1.0
14. 升级大部分依赖jar的版本为最新稳定

# 升级日志 2019年12月18日09:42:07
1. 删除 服务表以及相关代码
2. 新增 系统api接口表 以及相关接口
3. 修改 应用表相关字段. 并重新生成代码
4. 新增 应用-系统api 关联表. 用于外部应用的api授权。
5. 新增 zuihou-scan-starter 起步依赖. 实现自动扫描服务的所有api接口.  并提供2种实现方式（feign or rabbitmq）
6. 升级 swagger-bootstrap-ui 1.9.6 为 knife4j 2.0.0 

# 升级日志 2019年12月03日11:59:38-2019年12月04日18:22:12
1. 优化根据ip查询地区的方法
2. 增加swagger全局参数
3. 完善gateway相关核心功能. 目前使用gateway能正常登陆和解析token等
4. 调整Mybatis拦截器. 控制演示环境的写入权限控制。防止数据被 乱删乱改。 想要在演示环境测试增删改功能的.  请新增租户和账号后测试
5. zuihou-admin-cloud的兄弟项目：zuihou-admin-boot 初次提交. 是在本项目基础上去除微服务部分。 目的：简化开发、部署、方便小型项目快速建站
地址： https://github.com/zuihou/zuihou-admin-boot


# 升级日志 2019年12月02日
1. 完善用户中心（修改头像、登录时间、账号信息、修改密码等）相关接口对接
2. 完善用户管理的用户信息修改相关接口
3. 修复jobs服务启动报错
4. 统一jobs服务的logback日志配置
5. 完善启动文档&脚本
6. 修复文件服务在window系统下返回路径错误的bug
7. 发布启动教学视频

# 2019年11月26日00:11:56 升级日志
1. 同步最新的sql脚本、nacos脚本到源码相应文件中
2. 租户运营后台升级：
    - 租户运营后台新增租户时. 对租户编码进行校验
    - 格式化租户运营后台代码中不规范的代码
3. 租户后台升级：
    - 对接短信中心的前端页面 
    - 优化短信中心后台表结构与相关程序 （还差定时发送和查看详情）
    - 对接附件列表前端页面
    - 部署第三方文件预览接口. 并与本系统完成对接
    - 解决异步下载文件时. 后端发生异常时前端能正确提示. 以及下载正常时. 实现异步下载
    - 单独增大 文件服务 的ribbon超时时间. 与业务系统的超时时间区分开（附件上传比较耗时. 故可以根据自己服务器网络情况适当调整. 演示服务器网络差. 故调的比较大）
 


# 2019年10月20日23:46:29
1. 新增全新UI： https://github.com/zuihou/zuihou-ui
2. 对接新UI的验证码 + 登录 + 动态获取路由
3. 新增登录日志表
4. 修改权限库多张表的结构（zuihou_authority_new.sql)  
5. 修改了nacos中的配置文件 common.yml 、zuihou-authority-server-dev.yml
6. 完善代码生成器
7. 修复 zuihou-jobs-server 启动失败的bug
8. 项目文档程序员节5折(10月24日)： https://www.kancloud.cn/zuihou/zuihou-admin-cloud 
 
# 2019年10月18日11:04:22
1. 删除zuihou-redis-starter
2. 新增zuihou-j2cache-starter（封装2级缓存：j2cache.  并修复了官方的starter中. 无法从nacos中读取配置文件的 bug）
3. 如何配置2级redis缓存的开关？ 请参考： `zuihou-j2cache-starter/README.md`
4. 修改了nacos中 redis.yml 的配置. 详情请看  `zuihou-config/src/main/resources/redis.yml`  或者 `third-party/nacos/nacos_config_export_2019-10-18 11_02_43.zip`
5. 权限服务(zuihou-authority-server)中 资源. 菜单 已经加入j2cache 
6. 合并北城的PR. 修复了 zuihou-admin-ui 切换 nav 会退出的bug。

待完善：
1. j2cache 默认提供的序列化策略. 对本项目来说都不太友好. 暂时先用fst.  后面考虑自定义序列化策略!
2. fst 缺点：增删改字段后. 反序列化报错
3. json 缺点：不支持LocalDateTime


# 2019年09月20日14:31:08
1. 新增链路监控模块 zuihou-zipkin . 用mysql作为存储.  rabbitmq作为采集方式 
2. 封装了一个可插拔起步依赖： zuihou-zipkin-client-starter 给各个需要采集调用信息的服务使用（可通过配置文件控制是否采集）
3. 将 zuihou-monitor 服务和 zuihou-zipkin 服务的配置统一抽离到naocs
4. third-party/nacos/nacos_config_export_x.zip 目录下的nacos的配置. 将原来的 数据库名 nacos_test 修改成 zuihou_nacos
4. third-party/seata/nacos_config_export_x.zip 目录下的seata的配置. 将原来的 数据库名 seata 修改成 zuihou_seata

# 2019年09月06日23:56:20
1. mybatis plus 升级为3.2.0.  并将insert update select时. 字段策略分别修改
2. 响应 MP 要求. 在开发环境增加 p6spy . 用于打印 sql语句
3. 抽取整个项目的logback配置文件的公共部分. 到zuihou-log-starter模块. 并针对开发环境和其他环境配置不同的日志格式和等级。 
4. 开发环境增加控制台高亮日志、控制台SQL语句、控制台SQL执行分析；正式环境等增加异步日志输入. 以提高TPS
5. 修复spring-boot-admin项目无法正确读取各个项目的远程日志的bug


# 2019年08月15日16:04:13
1. 在zuihou-order-server、zuihou-demo-server集成 阿里开源的分布式事务中间件seata-server 0.7.1  （官方指出当前版本不适用于生产. 故在此作为演示学习使用）
2. Eureka 注册中心废除.  用Nacos替换
3. 项目中的配置文件.  统一到Nacos配置中心
4. 调试zuihou-gateway-server启动成功


# 2019年08月08日22:35:17
1. 新增 断点续传/分片上传/秒传功能 前后端代码


# 2019年07月23日11:28:31
1.  在zuihou-databases模块中增加 数据权限 拦截器`DataScopeInterceptor`
    ```
    使用方法（参考AuthorityAutoConfiguration、FileAutoConfiguration）：
    1) 继承BaseDbConfiguration类
    2）覆盖getDataScopeInterceptor()方法. 返回以下其中一种
        new DataScopeInterceptor((userId) -> SpringUtil.getBean(UserApi.class).getDataScopeById(userId)); 
        new DataScopeInterceptor((userId) -> SpringUtil.getBean(UserService.class).getDataScopeById(userId)); 
    3）自定义查询方法上加上参数 new DataScope()   (参考AttachmentMapper.page 、 StationMapper.findStationPage)
    ```
2.  对官方的Wrappers.lambdaQuery(entity) 进行扩展 .  参考：Wraps.lbQ(entity)
    ```
        1) 字符串类型默认like查询
        2) 字符串类型字段不想用like 查询的的. 调用 ignore(Entity::set字段) 方法排除. 然后在调用eq等自己想要的方法 
        3）对参数中有 % _ 的特殊符号的参数进行 转义。
        4）参考：TestResource.testWrapper
        5）Resource build = Resource.builder().code("123%456").name("nide %z").build();
           LbqWrapper<Resource> ignore = Wraps.lbQ(build).ignore(Resource::setCode).eq(Resource::getCode.  build.getCode());
    ```  
    
# 2019年07月08日23:12:04
1. 重构项目依赖结构
2. 新增zuihou-dependencies项目. 用于管理所有项目的pom版本
3. 依赖结构为：
   ```        
    zuihou-dependencies <- zuihou-commons <- zuihou-backend <- zuihou-support <- zuihou-frontend(后期废除)
   ```
4. docker 启动命令    
    ```
    docker run -idt -p  8768:8768 -p 8767:8767 --name zuihou-jobs-server --restart=always \
        -e EUREKA_IP=172.17.229.167 \
            -e MYSQL_IP=172.17.229.167 \
            -e NGINX_IP=127.0.0.1 \
        -m 384m --memory-swap=512m \
        -v /data/docker-data/projects/:/projects \
        zuihou-jobs-server:201907120926   
    ```

