diff --git a/.flattened-pom.xml b/.flattened-pom.xml
index 0cf8d24..9c53190 100644
--- a/.flattened-pom.xml
+++ b/.flattened-pom.xml
@@ -1,119 +1,119 @@
-
-
- 4.0.0
- cn.hangtag
- hangtag
- 2.1.0-jdk8-snapshot
- pom
- ${project.artifactId}
- 嘉晋OMS系统
-
- hangtag-dependencies
- hangtag-framework
- hangtag-server
- hangtag-module-system
- hangtag-module-infra
- hangtag-module-oms
-
-
- 1.18.30
- 1.8
- 3.8.1
- 3.0.0-M5
- ${java.version}
- 1.5.5.Final
- UTF-8
- 1.5.0
- 2.1.0-jdk8-snapshot
- 2.7.18
- ${java.version}
-
-
-
-
- cn.hangtag
- hangtag-dependencies
- 2.1.0-jdk8-snapshot
- pom
- import
-
-
-
-
-
- huaweicloud
- huawei
- https://mirrors.huaweicloud.com/repository/maven/
-
-
- aliyunmaven
- aliyun
- https://maven.aliyun.com/repository/public
-
-
-
-
-
-
- maven-surefire-plugin
- ${maven-surefire-plugin.version}
-
-
- maven-compiler-plugin
- ${maven-compiler-plugin.version}
-
-
-
- org.springframework.boot
- spring-boot-configuration-processor
- ${spring.boot.version}
-
-
- org.projectlombok
- lombok
- ${lombok.version}
-
-
- org.mapstruct
- mapstruct-processor
- ${mapstruct.version}
-
-
-
-
-
- org.codehaus.mojo
- flatten-maven-plugin
-
-
-
-
-
- org.codehaus.mojo
- flatten-maven-plugin
- ${flatten-maven-plugin.version}
-
-
- flatten
- process-resources
-
- flatten
-
-
-
- flatten.clean
- clean
-
- clean
-
-
-
-
- resolveCiFriendliesOnly
- true
-
-
-
-
-
+
+
+ 4.0.0
+ cn.hangtag
+ hangtag
+ 2.1.0-jdk8-snapshot
+ pom
+ ${project.artifactId}
+ 嘉晋OMS系统
+
+ hangtag-dependencies
+ hangtag-framework
+ hangtag-server
+ hangtag-module-system
+ hangtag-module-infra
+ hangtag-module-oms
+
+
+ 1.18.30
+ 1.8
+ 3.8.1
+ 3.0.0-M5
+ ${java.version}
+ 1.5.5.Final
+ UTF-8
+ 1.5.0
+ 2.1.0-jdk8-snapshot
+ 2.7.18
+ ${java.version}
+
+
+
+
+ cn.hangtag
+ hangtag-dependencies
+ 2.1.0-jdk8-snapshot
+ pom
+ import
+
+
+
+
+
+ huaweicloud
+ huawei
+ https://mirrors.huaweicloud.com/repository/maven/
+
+
+ aliyunmaven
+ aliyun
+ https://maven.aliyun.com/repository/public
+
+
+
+
+
+
+ maven-surefire-plugin
+ ${maven-surefire-plugin.version}
+
+
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ ${spring.boot.version}
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
+
+ org.mapstruct
+ mapstruct-processor
+ ${mapstruct.version}
+
+
+
+
+
+ org.codehaus.mojo
+ flatten-maven-plugin
+
+
+
+
+
+ org.codehaus.mojo
+ flatten-maven-plugin
+ ${flatten-maven-plugin.version}
+
+
+ flatten
+ process-resources
+
+ flatten
+
+
+
+ flatten.clean
+ clean
+
+ clean
+
+
+
+
+ resolveCiFriendliesOnly
+ true
+
+
+
+
+
diff --git a/hangtag-dependencies/.flattened-pom.xml b/hangtag-dependencies/.flattened-pom.xml
index 23ddf1b..0dce2b3 100644
--- a/hangtag-dependencies/.flattened-pom.xml
+++ b/hangtag-dependencies/.flattened-pom.xml
@@ -1,547 +1,547 @@
-
-
- 4.0.0
- cn.hangtag
- hangtag-dependencies
- 2.1.0-jdk8-snapshot
- pom
- ${project.artifactId}
- 基础 bom 文件,管理整个项目的依赖版本
- https://github.com/YunaiV/ruoyi-vue-pro
-
- 1.4.10
- 7.2.11.RELEASE
- 2.3
- 2.7.18
- 2.9.1
- 2.2.7
- 3.5.0
- 5.1.0
- 1.18.30
- 2.12.2
- 1.17.2
- 1.2.83
- 3.10.0
- 5.8.25
- 2.14.5
- 6.8.0
- 3.18.0
- 2.2.11
- 4.11.0
- 3.0.6
- 3.5.5
- 1.2.21
- 2.15.1
- 3.3.3
- 1.6.15
- 8.5.7
- 4.11.0
- 1.0.13
- 3.1.880
- 8.1.3.62
- 2.2.3
- 2.7.0
- 0.1.55
- 4.6.0
- 4.6.4
- 1.0.10
- 4.3.0
- 2.5
- 4.3.0
- 2.7.15
- 1.5.5.Final
- 1.6.6
- 2.2.1
- 1.0.8
- 1.0.5
- 33.0.0-jre
- 8.12.0
- 0.33.0
- 3.5.5
- 1.5.0
- 2.1.0-jdk8-snapshot
-
-
-
-
- org.springframework.boot
- spring-boot-dependencies
- ${spring.boot.version}
- pom
- import
-
-
- io.github.mouzt
- bizlog-sdk
- ${bizlog-sdk.version}
-
-
- spring-boot-starter
- org.springframework.boot
-
-
-
-
- cn.hangtag
- hangtag-spring-boot-starter-biz-tenant
- 2.1.0-jdk8-snapshot
-
-
- cn.hangtag
- hangtag-spring-boot-starter-biz-data-permission
- 2.1.0-jdk8-snapshot
-
-
- cn.hangtag
- hangtag-spring-boot-starter-biz-ip
- 2.1.0-jdk8-snapshot
-
-
- org.springframework.boot
- spring-boot-configuration-processor
- ${spring.boot.version}
-
-
- cn.hangtag
- hangtag-spring-boot-starter-web
- 2.1.0-jdk8-snapshot
-
-
- cn.hangtag
- hangtag-spring-boot-starter-security
- 2.1.0-jdk8-snapshot
-
-
- cn.hangtag
- hangtag-spring-boot-starter-websocket
- 2.1.0-jdk8-snapshot
-
-
- com.github.xiaoymin
- knife4j-openapi3-spring-boot-starter
- ${knife4j.version}
-
-
- org.springdoc
- springdoc-openapi-ui
- ${springdoc.version}
-
-
- cn.hangtag
- hangtag-spring-boot-starter-mybatis
- 2.1.0-jdk8-snapshot
-
-
- com.alibaba
- druid-spring-boot-starter
- ${druid.version}
-
-
- com.baomidou
- mybatis-plus-boot-starter
- ${mybatis-plus.version}
-
-
- com.baomidou
- mybatis-plus-generator
- ${mybatis-plus-generator.version}
-
-
- com.baomidou
- dynamic-datasource-spring-boot-starter
- ${dynamic-datasource.version}
-
-
- com.github.yulichang
- mybatis-plus-join-boot-starter
- ${mybatis-plus-join.version}
-
-
- com.fhs-opensource
- easy-trans-spring-boot-starter
- ${easy-trans.version}
-
-
- spring-context
- org.springframework
-
-
- spring-cloud-commons
- org.springframework.cloud
-
-
-
-
- com.fhs-opensource
- easy-trans-mybatis-plus-extend
- ${easy-trans.version}
-
-
- com.fhs-opensource
- easy-trans-anno
- ${easy-trans.version}
-
-
- cn.hangtag
- hangtag-spring-boot-starter-redis
- 2.1.0-jdk8-snapshot
-
-
- org.redisson
- redisson-spring-boot-starter
- ${redisson.version}
-
-
- spring-boot-starter-actuator
- org.springframework.boot
-
-
-
-
- com.dameng
- DmJdbcDriver18
- ${dm8.jdbc.version}
-
-
- cn.hangtag
- hangtag-spring-boot-starter-job
- 2.1.0-jdk8-snapshot
-
-
- cn.hangtag
- hangtag-spring-boot-starter-mq
- 2.1.0-jdk8-snapshot
-
-
- org.apache.rocketmq
- rocketmq-spring-boot-starter
- ${rocketmq-spring.version}
-
-
- cn.hangtag
- hangtag-spring-boot-starter-protection
- 2.1.0-jdk8-snapshot
-
-
- com.baomidou
- lock4j-redisson-spring-boot-starter
- ${lock4j.version}
-
-
- redisson-spring-boot-starter
- org.redisson
-
-
-
-
- cn.hangtag
- hangtag-spring-boot-starter-monitor
- 2.1.0-jdk8-snapshot
-
-
- org.apache.skywalking
- apm-toolkit-trace
- ${skywalking.version}
-
-
- org.apache.skywalking
- apm-toolkit-logback-1.x
- ${skywalking.version}
-
-
- org.apache.skywalking
- apm-toolkit-opentracing
- ${skywalking.version}
-
-
- io.opentracing
- opentracing-api
- ${opentracing.version}
-
-
- io.opentracing
- opentracing-util
- ${opentracing.version}
-
-
- io.opentracing
- opentracing-noop
- ${opentracing.version}
-
-
- de.codecentric
- spring-boot-admin-starter-server
- ${spring-boot-admin.version}
-
-
- spring-boot-admin-server-cloud
- de.codecentric
-
-
-
-
- de.codecentric
- spring-boot-admin-starter-client
- ${spring-boot-admin.version}
-
-
- cn.hangtag
- hangtag-spring-boot-starter-test
- 2.1.0-jdk8-snapshot
- test
-
-
- org.mockito
- mockito-inline
- ${mockito-inline.version}
-
-
- org.springframework.boot
- spring-boot-starter-test
- ${spring.boot.version}
-
-
- asm
- org.ow2.asm
-
-
- mockito-core
- org.mockito
-
-
-
-
- com.github.fppt
- jedis-mock
- ${jedis-mock.version}
-
-
- uk.co.jemos.podam
- podam
- ${podam.version}
-
-
- org.flowable
- flowable-spring-boot-starter-process
- ${flowable.version}
-
-
- org.flowable
- flowable-spring-boot-starter-actuator
- ${flowable.version}
-
-
- cn.hangtag
- hangtag-common
- 2.1.0-jdk8-snapshot
-
-
- cn.hangtag
- hangtag-spring-boot-starter-excel
- 2.1.0-jdk8-snapshot
-
-
- org.projectlombok
- lombok
- ${lombok.version}
-
-
- org.mapstruct
- mapstruct
- ${mapstruct.version}
-
-
- org.mapstruct
- mapstruct-jdk8
- ${mapstruct.version}
-
-
- org.mapstruct
- mapstruct-processor
- ${mapstruct.version}
-
-
- cn.hutool
- hutool-all
- ${hutool.version}
-
-
- com.alibaba
- easyexcel
- ${easyexcel.verion}
-
-
- commons-io
- commons-io
- ${commons-io.version}
-
-
- org.apache.tika
- tika-core
- ${tika-core.version}
-
-
- org.apache.velocity
- velocity-engine-core
- ${velocity.version}
-
-
- com.alibaba
- fastjson
- ${fastjson.version}
-
-
- com.google.guava
- guava
- ${guava.version}
-
-
- com.google.inject
- guice
- ${guice.version}
-
-
- com.alibaba
- transmittable-thread-local
- ${transmittable-thread-local.version}
-
-
- commons-net
- commons-net
- ${commons-net.version}
-
-
- com.jcraft
- jsch
- ${jsch.version}
-
-
- com.xingyuv
- spring-boot-starter-captcha-plus
- ${captcha-plus.version}
-
-
- org.lionsoul
- ip2region
- ${ip2region.version}
-
-
- org.jsoup
- jsoup
- ${jsoup.version}
-
-
- com.squareup.okio
- okio
- ${okio.version}
-
-
- com.squareup.okhttp3
- okhttp
- ${okhttp3.version}
-
-
- io.minio
- minio
- ${minio.version}
-
-
- com.aliyun
- aliyun-java-sdk-core
- ${aliyun-java-sdk-core.version}
-
-
- opentracing-api
- io.opentracing
-
-
- opentracing-util
- io.opentracing
-
-
-
-
- com.aliyun
- aliyun-java-sdk-dysmsapi
- ${aliyun-java-sdk-dysmsapi.version}
-
-
- com.tencentcloudapi
- tencentcloud-sdk-java-sms
- ${tencentcloud-sdk-java.version}
-
-
- com.xingyuv
- spring-boot-starter-justauth
- ${justauth.version}
-
-
- hutool-core
- cn.hutool
-
-
-
-
- com.github.binarywang
- weixin-java-pay
- ${weixin-java.version}
-
-
- com.github.binarywang
- wx-java-mp-spring-boot-starter
- ${weixin-java.version}
-
-
- com.github.binarywang
- wx-java-miniapp-spring-boot-starter
- ${weixin-java.version}
-
-
- org.jeecgframework.jimureport
- jimureport-spring-boot-starter
- ${jimureport.version}
-
-
- druid
- com.alibaba
-
-
-
-
- xerces
- xercesImpl
- ${xercesImpl.version}
-
-
-
-
-
-
- org.codehaus.mojo
- flatten-maven-plugin
- ${flatten-maven-plugin.version}
-
-
- flatten
- process-resources
-
- flatten
-
-
-
- flatten.clean
- clean
-
- clean
-
-
-
-
- resolveCiFriendliesOnly
- true
-
-
-
-
-
+
+
+ 4.0.0
+ cn.hangtag
+ hangtag-dependencies
+ 2.1.0-jdk8-snapshot
+ pom
+ ${project.artifactId}
+ 基础 bom 文件,管理整个项目的依赖版本
+ https://github.com/YunaiV/ruoyi-vue-pro
+
+ 1.4.10
+ 7.2.11.RELEASE
+ 2.3
+ 2.7.18
+ 2.9.1
+ 2.2.7
+ 3.5.0
+ 5.1.0
+ 1.18.30
+ 2.12.2
+ 1.17.2
+ 1.2.83
+ 3.10.0
+ 5.8.25
+ 2.14.5
+ 6.8.0
+ 3.18.0
+ 2.2.11
+ 4.11.0
+ 3.0.6
+ 3.5.5
+ 1.2.21
+ 2.15.1
+ 3.3.3
+ 1.6.15
+ 8.5.7
+ 4.11.0
+ 1.0.13
+ 3.1.880
+ 8.1.3.62
+ 2.2.3
+ 2.7.0
+ 0.1.55
+ 4.6.0
+ 4.6.4
+ 1.0.10
+ 4.3.0
+ 2.5
+ 4.3.0
+ 2.7.15
+ 1.5.5.Final
+ 1.6.6
+ 2.2.1
+ 1.0.8
+ 1.0.5
+ 33.0.0-jre
+ 8.12.0
+ 0.33.0
+ 3.5.5
+ 1.5.0
+ 2.1.0-jdk8-snapshot
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring.boot.version}
+ pom
+ import
+
+
+ io.github.mouzt
+ bizlog-sdk
+ ${bizlog-sdk.version}
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+
+
+ cn.hangtag
+ hangtag-spring-boot-starter-biz-tenant
+ 2.1.0-jdk8-snapshot
+
+
+ cn.hangtag
+ hangtag-spring-boot-starter-biz-data-permission
+ 2.1.0-jdk8-snapshot
+
+
+ cn.hangtag
+ hangtag-spring-boot-starter-biz-ip
+ 2.1.0-jdk8-snapshot
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ ${spring.boot.version}
+
+
+ cn.hangtag
+ hangtag-spring-boot-starter-web
+ 2.1.0-jdk8-snapshot
+
+
+ cn.hangtag
+ hangtag-spring-boot-starter-security
+ 2.1.0-jdk8-snapshot
+
+
+ cn.hangtag
+ hangtag-spring-boot-starter-websocket
+ 2.1.0-jdk8-snapshot
+
+
+ com.github.xiaoymin
+ knife4j-openapi3-spring-boot-starter
+ ${knife4j.version}
+
+
+ org.springdoc
+ springdoc-openapi-ui
+ ${springdoc.version}
+
+
+ cn.hangtag
+ hangtag-spring-boot-starter-mybatis
+ 2.1.0-jdk8-snapshot
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ ${druid.version}
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ ${mybatis-plus.version}
+
+
+ com.baomidou
+ mybatis-plus-generator
+ ${mybatis-plus-generator.version}
+
+
+ com.baomidou
+ dynamic-datasource-spring-boot-starter
+ ${dynamic-datasource.version}
+
+
+ com.github.yulichang
+ mybatis-plus-join-boot-starter
+ ${mybatis-plus-join.version}
+
+
+ com.fhs-opensource
+ easy-trans-spring-boot-starter
+ ${easy-trans.version}
+
+
+ org.springframework
+ spring-context
+
+
+ org.springframework.cloud
+ spring-cloud-commons
+
+
+
+
+ com.fhs-opensource
+ easy-trans-mybatis-plus-extend
+ ${easy-trans.version}
+
+
+ com.fhs-opensource
+ easy-trans-anno
+ ${easy-trans.version}
+
+
+ cn.hangtag
+ hangtag-spring-boot-starter-redis
+ 2.1.0-jdk8-snapshot
+
+
+ org.redisson
+ redisson-spring-boot-starter
+ ${redisson.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+ com.dameng
+ DmJdbcDriver18
+ ${dm8.jdbc.version}
+
+
+ cn.hangtag
+ hangtag-spring-boot-starter-job
+ 2.1.0-jdk8-snapshot
+
+
+ cn.hangtag
+ hangtag-spring-boot-starter-mq
+ 2.1.0-jdk8-snapshot
+
+
+ org.apache.rocketmq
+ rocketmq-spring-boot-starter
+ ${rocketmq-spring.version}
+
+
+ cn.hangtag
+ hangtag-spring-boot-starter-protection
+ 2.1.0-jdk8-snapshot
+
+
+ com.baomidou
+ lock4j-redisson-spring-boot-starter
+ ${lock4j.version}
+
+
+ org.redisson
+ redisson-spring-boot-starter
+
+
+
+
+ cn.hangtag
+ hangtag-spring-boot-starter-monitor
+ 2.1.0-jdk8-snapshot
+
+
+ org.apache.skywalking
+ apm-toolkit-trace
+ ${skywalking.version}
+
+
+ org.apache.skywalking
+ apm-toolkit-logback-1.x
+ ${skywalking.version}
+
+
+ org.apache.skywalking
+ apm-toolkit-opentracing
+ ${skywalking.version}
+
+
+ io.opentracing
+ opentracing-api
+ ${opentracing.version}
+
+
+ io.opentracing
+ opentracing-util
+ ${opentracing.version}
+
+
+ io.opentracing
+ opentracing-noop
+ ${opentracing.version}
+
+
+ de.codecentric
+ spring-boot-admin-starter-server
+ ${spring-boot-admin.version}
+
+
+ de.codecentric
+ spring-boot-admin-server-cloud
+
+
+
+
+ de.codecentric
+ spring-boot-admin-starter-client
+ ${spring-boot-admin.version}
+
+
+ cn.hangtag
+ hangtag-spring-boot-starter-test
+ 2.1.0-jdk8-snapshot
+ test
+
+
+ org.mockito
+ mockito-inline
+ ${mockito-inline.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ ${spring.boot.version}
+
+
+ org.ow2.asm
+ asm
+
+
+ org.mockito
+ mockito-core
+
+
+
+
+ com.github.fppt
+ jedis-mock
+ ${jedis-mock.version}
+
+
+ uk.co.jemos.podam
+ podam
+ ${podam.version}
+
+
+ org.flowable
+ flowable-spring-boot-starter-process
+ ${flowable.version}
+
+
+ org.flowable
+ flowable-spring-boot-starter-actuator
+ ${flowable.version}
+
+
+ cn.hangtag
+ hangtag-common
+ 2.1.0-jdk8-snapshot
+
+
+ cn.hangtag
+ hangtag-spring-boot-starter-excel
+ 2.1.0-jdk8-snapshot
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
+
+ org.mapstruct
+ mapstruct
+ ${mapstruct.version}
+
+
+ org.mapstruct
+ mapstruct-jdk8
+ ${mapstruct.version}
+
+
+ org.mapstruct
+ mapstruct-processor
+ ${mapstruct.version}
+
+
+ cn.hutool
+ hutool-all
+ ${hutool.version}
+
+
+ com.alibaba
+ easyexcel
+ ${easyexcel.verion}
+
+
+ commons-io
+ commons-io
+ ${commons-io.version}
+
+
+ org.apache.tika
+ tika-core
+ ${tika-core.version}
+
+
+ org.apache.velocity
+ velocity-engine-core
+ ${velocity.version}
+
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+ com.google.inject
+ guice
+ ${guice.version}
+
+
+ com.alibaba
+ transmittable-thread-local
+ ${transmittable-thread-local.version}
+
+
+ commons-net
+ commons-net
+ ${commons-net.version}
+
+
+ com.jcraft
+ jsch
+ ${jsch.version}
+
+
+ com.xingyuv
+ spring-boot-starter-captcha-plus
+ ${captcha-plus.version}
+
+
+ org.lionsoul
+ ip2region
+ ${ip2region.version}
+
+
+ org.jsoup
+ jsoup
+ ${jsoup.version}
+
+
+ com.squareup.okio
+ okio
+ ${okio.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ ${okhttp3.version}
+
+
+ io.minio
+ minio
+ ${minio.version}
+
+
+ com.aliyun
+ aliyun-java-sdk-core
+ ${aliyun-java-sdk-core.version}
+
+
+ io.opentracing
+ opentracing-api
+
+
+ io.opentracing
+ opentracing-util
+
+
+
+
+ com.aliyun
+ aliyun-java-sdk-dysmsapi
+ ${aliyun-java-sdk-dysmsapi.version}
+
+
+ com.tencentcloudapi
+ tencentcloud-sdk-java-sms
+ ${tencentcloud-sdk-java.version}
+
+
+ com.xingyuv
+ spring-boot-starter-justauth
+ ${justauth.version}
+
+
+ cn.hutool
+ hutool-core
+
+
+
+
+ com.github.binarywang
+ weixin-java-pay
+ ${weixin-java.version}
+
+
+ com.github.binarywang
+ wx-java-mp-spring-boot-starter
+ ${weixin-java.version}
+
+
+ com.github.binarywang
+ wx-java-miniapp-spring-boot-starter
+ ${weixin-java.version}
+
+
+ org.jeecgframework.jimureport
+ jimureport-spring-boot-starter
+ ${jimureport.version}
+
+
+ com.alibaba
+ druid
+
+
+
+
+ xerces
+ xercesImpl
+ ${xercesImpl.version}
+
+
+
+
+
+
+ org.codehaus.mojo
+ flatten-maven-plugin
+ ${flatten-maven-plugin.version}
+
+
+ flatten
+ process-resources
+
+ flatten
+
+
+
+ flatten.clean
+ clean
+
+ clean
+
+
+
+
+ resolveCiFriendliesOnly
+ true
+
+
+
+
+
diff --git a/hangtag-framework/.flattened-pom.xml b/hangtag-framework/.flattened-pom.xml
index 812e593..0ee0d8a 100644
--- a/hangtag-framework/.flattened-pom.xml
+++ b/hangtag-framework/.flattened-pom.xml
@@ -1,40 +1,40 @@
-
-
- 4.0.0
-
- cn.hangtag
- hangtag
- 2.1.0-jdk8-snapshot
-
- cn.hangtag
- hangtag-framework
- 2.1.0-jdk8-snapshot
- pom
- 该包是技术组件,每个子包,代表一个组件。每个组件包括两部分:
- 1. core 包:是该组件的核心封装
- 2. config 包:是该组件基于 Spring 的配置
-
- 技术组件,也分成两类:
- 1. 框架组件:和我们熟悉的 MyBatis、Redis 等等的拓展
- 2. 业务组件:和业务相关的组件的封装,例如说数据字典、操作日志等等。
- 如果是业务组件,Maven 名字会包含 biz
- https://github.com/YunaiV/ruoyi-vue-pro
-
- hangtag-common
- hangtag-spring-boot-starter-mybatis
- hangtag-spring-boot-starter-redis
- hangtag-spring-boot-starter-web
- hangtag-spring-boot-starter-security
- hangtag-spring-boot-starter-websocket
- hangtag-spring-boot-starter-monitor
- hangtag-spring-boot-starter-protection
- hangtag-spring-boot-starter-job
- hangtag-spring-boot-starter-mq
- hangtag-spring-boot-starter-excel
- hangtag-spring-boot-starter-test
- hangtag-spring-boot-starter-biz-tenant
- hangtag-spring-boot-starter-biz-data-permission
- hangtag-spring-boot-starter-biz-ip
-
-
+
+
+ 4.0.0
+
+ cn.hangtag
+ hangtag
+ 2.1.0-jdk8-snapshot
+
+ cn.hangtag
+ hangtag-framework
+ 2.1.0-jdk8-snapshot
+ pom
+ 该包是技术组件,每个子包,代表一个组件。每个组件包括两部分:
+ 1. core 包:是该组件的核心封装
+ 2. config 包:是该组件基于 Spring 的配置
+
+ 技术组件,也分成两类:
+ 1. 框架组件:和我们熟悉的 MyBatis、Redis 等等的拓展
+ 2. 业务组件:和业务相关的组件的封装,例如说数据字典、操作日志等等。
+ 如果是业务组件,Maven 名字会包含 biz
+ https://github.com/YunaiV/ruoyi-vue-pro
+
+ hangtag-common
+ hangtag-spring-boot-starter-mybatis
+ hangtag-spring-boot-starter-redis
+ hangtag-spring-boot-starter-web
+ hangtag-spring-boot-starter-security
+ hangtag-spring-boot-starter-websocket
+ hangtag-spring-boot-starter-monitor
+ hangtag-spring-boot-starter-protection
+ hangtag-spring-boot-starter-job
+ hangtag-spring-boot-starter-mq
+ hangtag-spring-boot-starter-excel
+ hangtag-spring-boot-starter-test
+ hangtag-spring-boot-starter-biz-tenant
+ hangtag-spring-boot-starter-biz-data-permission
+ hangtag-spring-boot-starter-biz-ip
+
+
diff --git a/hangtag-framework/hangtag-common/.flattened-pom.xml b/hangtag-framework/hangtag-common/.flattened-pom.xml
index 045cb0f..1134d01 100644
--- a/hangtag-framework/hangtag-common/.flattened-pom.xml
+++ b/hangtag-framework/hangtag-common/.flattened-pom.xml
@@ -1,125 +1,125 @@
-
-
- 4.0.0
-
- cn.hangtag
- hangtag-framework
- 2.1.0-jdk8-snapshot
-
- cn.hangtag
- hangtag-common
- 2.1.0-jdk8-snapshot
- ${project.artifactId}
- 定义基础 pojo 类、枚举、工具类等等
- https://github.com/YunaiV/ruoyi-vue-pro
-
-
- org.springframework
- spring-core
- provided
-
-
- org.springframework
- spring-expression
- provided
-
-
- org.springframework
- spring-aop
- provided
-
-
- org.aspectj
- aspectjweaver
- provided
-
-
- org.springframework.boot
- spring-boot-configuration-processor
- true
-
-
- org.springframework
- spring-web
- provided
-
-
- jakarta.servlet
- jakarta.servlet-api
- provided
-
-
- org.springdoc
- springdoc-openapi-ui
- provided
-
-
- org.apache.skywalking
- apm-toolkit-trace
-
-
- org.projectlombok
- lombok
-
-
- org.mapstruct
- mapstruct
-
-
- org.mapstruct
- mapstruct-jdk8
-
-
- org.mapstruct
- mapstruct-processor
-
-
- com.google.guava
- guava
- provided
-
-
- com.fasterxml.jackson.core
- jackson-databind
- provided
-
-
- com.fasterxml.jackson.core
- jackson-core
- provided
-
-
- com.fasterxml.jackson.datatype
- jackson-datatype-jsr310
- provided
-
-
- org.slf4j
- slf4j-api
- provided
-
-
- jakarta.validation
- jakarta.validation-api
- provided
-
-
- cn.hutool
- hutool-all
-
-
- com.alibaba
- transmittable-thread-local
-
-
- com.fhs-opensource
- easy-trans-anno
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
-
+
+
+ 4.0.0
+
+ cn.hangtag
+ hangtag-framework
+ 2.1.0-jdk8-snapshot
+
+ cn.hangtag
+ hangtag-common
+ 2.1.0-jdk8-snapshot
+ ${project.artifactId}
+ 定义基础 pojo 类、枚举、工具类等等
+ https://github.com/YunaiV/ruoyi-vue-pro
+
+
+ org.springframework
+ spring-core
+ provided
+
+
+ org.springframework
+ spring-expression
+ provided
+
+
+ org.springframework
+ spring-aop
+ provided
+
+
+ org.aspectj
+ aspectjweaver
+ provided
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+ org.springframework
+ spring-web
+ provided
+
+
+ jakarta.servlet
+ jakarta.servlet-api
+ provided
+
+
+ org.springdoc
+ springdoc-openapi-ui
+ provided
+
+
+ org.apache.skywalking
+ apm-toolkit-trace
+
+
+ org.projectlombok
+ lombok
+
+
+ org.mapstruct
+ mapstruct
+
+
+ org.mapstruct
+ mapstruct-jdk8
+
+
+ org.mapstruct
+ mapstruct-processor
+
+
+ com.google.guava
+ guava
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ provided
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+ provided
+
+
+ org.slf4j
+ slf4j-api
+ provided
+
+
+ jakarta.validation
+ jakarta.validation-api
+ provided
+
+
+ cn.hutool
+ hutool-all
+
+
+ com.alibaba
+ transmittable-thread-local
+
+
+ com.fhs-opensource
+ easy-trans-anno
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
diff --git a/hangtag-framework/hangtag-spring-boot-starter-biz-data-permission/src/test/java/cn/hangtag/framework/datapermission/core/aop/DataPermissionAnnotationInterceptorTest.java b/hangtag-framework/hangtag-spring-boot-starter-biz-data-permission/src/test/java/cn/hangtag/framework/datapermission/core/aop/DataPermissionAnnotationInterceptorTest.java
index 240f442..9de018d 100644
--- a/hangtag-framework/hangtag-spring-boot-starter-biz-data-permission/src/test/java/cn/hangtag/framework/datapermission/core/aop/DataPermissionAnnotationInterceptorTest.java
+++ b/hangtag-framework/hangtag-spring-boot-starter-biz-data-permission/src/test/java/cn/hangtag/framework/datapermission/core/aop/DataPermissionAnnotationInterceptorTest.java
@@ -1,108 +1,108 @@
-package cn.hangtag.framework.datapermission.core.aop;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hangtag.framework.datapermission.core.annotation.DataPermission;
-import cn.hangtag.framework.test.core.ut.BaseMockitoUnitTest;
-import org.aopalliance.intercept.MethodInvocation;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-import java.lang.reflect.Method;
-
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.when;
-
-/**
- * {@link DataPermissionAnnotationInterceptor} 的单元测试
- *
- * @author 芋道源码
- */
-public class DataPermissionAnnotationInterceptorTest extends BaseMockitoUnitTest {
-
- @InjectMocks
- private DataPermissionAnnotationInterceptor interceptor;
-
- @Mock
- private MethodInvocation methodInvocation;
-
- @BeforeEach
- public void setUp() {
- interceptor.getDataPermissionCache().clear();
- }
-
- @Test // 无 @DataPermission 注解
- public void testInvoke_none() throws Throwable {
- // 参数
- mockMethodInvocation(TestNone.class);
-
- // 调用
- Object result = interceptor.invoke(methodInvocation);
- // 断言
- assertEquals("none", result);
- assertEquals(1, interceptor.getDataPermissionCache().size());
- assertTrue(CollUtil.getFirst(interceptor.getDataPermissionCache().values()).enable());
- }
-
- @Test // 在 Method 上有 @DataPermission 注解
- public void testInvoke_method() throws Throwable {
- // 参数
- mockMethodInvocation(TestMethod.class);
-
- // 调用
- Object result = interceptor.invoke(methodInvocation);
- // 断言
- assertEquals("method", result);
- assertEquals(1, interceptor.getDataPermissionCache().size());
- assertFalse(CollUtil.getFirst(interceptor.getDataPermissionCache().values()).enable());
- }
-
- @Test // 在 Class 上有 @DataPermission 注解
- public void testInvoke_class() throws Throwable {
- // 参数
- mockMethodInvocation(TestClass.class);
-
- // 调用
- Object result = interceptor.invoke(methodInvocation);
- // 断言
- assertEquals("class", result);
- assertEquals(1, interceptor.getDataPermissionCache().size());
- assertFalse(CollUtil.getFirst(interceptor.getDataPermissionCache().values()).enable());
- }
-
- private void mockMethodInvocation(Class> clazz) throws Throwable {
- Object targetObject = clazz.newInstance();
- Method method = targetObject.getClass().getMethod("echo");
- when(methodInvocation.getThis()).thenReturn(targetObject);
- when(methodInvocation.getMethod()).thenReturn(method);
- when(methodInvocation.proceed()).then(invocationOnMock -> method.invoke(targetObject));
- }
-
- static class TestMethod {
-
- @DataPermission(enable = false)
- public String echo() {
- return "method";
- }
-
- }
-
- @DataPermission(enable = false)
- static class TestClass {
-
- public String echo() {
- return "class";
- }
-
- }
-
- static class TestNone {
-
- public String echo() {
- return "none";
- }
-
- }
-
-}
+//package cn.hangtag.framework.datapermission.core.aop;
+//
+//import cn.hutool.core.collection.CollUtil;
+//import cn.hangtag.framework.datapermission.core.annotation.DataPermission;
+//import cn.hangtag.framework.test.core.ut.BaseMockitoUnitTest;
+//import org.aopalliance.intercept.MethodInvocation;
+//import org.junit.jupiter.api.BeforeEach;
+//import org.junit.jupiter.api.Test;
+//import org.mockito.InjectMocks;
+//import org.mockito.Mock;
+//
+//import java.lang.reflect.Method;
+//
+//import static org.junit.jupiter.api.Assertions.*;
+//import static org.mockito.Mockito.when;
+//
+///**
+// * {@link DataPermissionAnnotationInterceptor} 的单元测试
+// *
+// * @author 芋道源码
+// */
+//public class DataPermissionAnnotationInterceptorTest extends BaseMockitoUnitTest {
+//
+// @InjectMocks
+// private DataPermissionAnnotationInterceptor interceptor;
+//
+// @Mock
+// private MethodInvocation methodInvocation;
+//
+// @BeforeEach
+// public void setUp() {
+// interceptor.getDataPermissionCache().clear();
+// }
+//
+// @Test // 无 @DataPermission 注解
+// public void testInvoke_none() throws Throwable {
+// // 参数
+// mockMethodInvocation(TestNone.class);
+//
+// // 调用
+// Object result = interceptor.invoke(methodInvocation);
+// // 断言
+// assertEquals("none", result);
+// assertEquals(1, interceptor.getDataPermissionCache().size());
+// assertTrue(CollUtil.getFirst(interceptor.getDataPermissionCache().values()).enable());
+// }
+//
+// @Test // 在 Method 上有 @DataPermission 注解
+// public void testInvoke_method() throws Throwable {
+// // 参数
+// mockMethodInvocation(TestMethod.class);
+//
+// // 调用
+// Object result = interceptor.invoke(methodInvocation);
+// // 断言
+// assertEquals("method", result);
+// assertEquals(1, interceptor.getDataPermissionCache().size());
+// assertFalse(CollUtil.getFirst(interceptor.getDataPermissionCache().values()).enable());
+// }
+//
+// @Test // 在 Class 上有 @DataPermission 注解
+// public void testInvoke_class() throws Throwable {
+// // 参数
+// mockMethodInvocation(TestClass.class);
+//
+// // 调用
+// Object result = interceptor.invoke(methodInvocation);
+// // 断言
+// assertEquals("class", result);
+// assertEquals(1, interceptor.getDataPermissionCache().size());
+// assertFalse(CollUtil.getFirst(interceptor.getDataPermissionCache().values()).enable());
+// }
+//
+// private void mockMethodInvocation(Class> clazz) throws Throwable {
+// Object targetObject = clazz.newInstance();
+// Method method = targetObject.getClass().getMethod("echo");
+// when(methodInvocation.getThis()).thenReturn(targetObject);
+// when(methodInvocation.getMethod()).thenReturn(method);
+// when(methodInvocation.proceed()).then(invocationOnMock -> method.invoke(targetObject));
+// }
+//
+// static class TestMethod {
+//
+// @DataPermission(enable = false)
+// public String echo() {
+// return "method";
+// }
+//
+// }
+//
+// @DataPermission(enable = false)
+// static class TestClass {
+//
+// public String echo() {
+// return "class";
+// }
+//
+// }
+//
+// static class TestNone {
+//
+// public String echo() {
+// return "none";
+// }
+//
+// }
+//
+//}
diff --git a/hangtag-framework/hangtag-spring-boot-starter-biz-data-permission/src/test/java/cn/hangtag/framework/datapermission/core/db/DataPermissionDatabaseInterceptorTest.java b/hangtag-framework/hangtag-spring-boot-starter-biz-data-permission/src/test/java/cn/hangtag/framework/datapermission/core/db/DataPermissionDatabaseInterceptorTest.java
index 39fec80..cb7dfb7 100644
--- a/hangtag-framework/hangtag-spring-boot-starter-biz-data-permission/src/test/java/cn/hangtag/framework/datapermission/core/db/DataPermissionDatabaseInterceptorTest.java
+++ b/hangtag-framework/hangtag-spring-boot-starter-biz-data-permission/src/test/java/cn/hangtag/framework/datapermission/core/db/DataPermissionDatabaseInterceptorTest.java
@@ -1,190 +1,190 @@
-package cn.hangtag.framework.datapermission.core.db;
-
-import cn.hangtag.framework.common.util.collection.SetUtils;
-import cn.hangtag.framework.datapermission.core.rule.DataPermissionRule;
-import cn.hangtag.framework.datapermission.core.rule.DataPermissionRuleFactory;
-import cn.hangtag.framework.mybatis.core.util.MyBatisUtils;
-import cn.hangtag.framework.test.core.ut.BaseMockitoUnitTest;
-import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
-import net.sf.jsqlparser.expression.Alias;
-import net.sf.jsqlparser.expression.Expression;
-import net.sf.jsqlparser.expression.LongValue;
-import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
-import net.sf.jsqlparser.schema.Column;
-import org.apache.ibatis.executor.Executor;
-import org.apache.ibatis.executor.statement.StatementHandler;
-import org.apache.ibatis.mapping.BoundSql;
-import org.apache.ibatis.mapping.MappedStatement;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.MockedStatic;
-
-import java.sql.Connection;
-import java.util.*;
-
-import static java.util.Collections.singletonList;
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-/**
- * {@link DataPermissionDatabaseInterceptor} 的单元测试
- * 主要测试 {@link DataPermissionDatabaseInterceptor#beforePrepare(StatementHandler, Connection, Integer)}
- * 和 {@link DataPermissionDatabaseInterceptor#beforeUpdate(Executor, MappedStatement, Object)}
- * 以及在这个过程中,ContextHolder 和 MappedStatementCache
- *
- * @author 芋道源码
- */
-public class DataPermissionDatabaseInterceptorTest extends BaseMockitoUnitTest {
-
- @InjectMocks
- private DataPermissionDatabaseInterceptor interceptor;
-
- @Mock
- private DataPermissionRuleFactory ruleFactory;
-
- @BeforeEach
- public void setUp() {
- // 清理上下文
- DataPermissionDatabaseInterceptor.ContextHolder.clear();
- // 清空缓存
- interceptor.getMappedStatementCache().clear();
- }
-
- @Test // 不存在规则,且不匹配
- public void testBeforeQuery_withoutRule() {
- try (MockedStatic pluginUtilsMock = mockStatic(PluginUtils.class)) {
- // 准备参数
- MappedStatement mappedStatement = mock(MappedStatement.class);
- BoundSql boundSql = mock(BoundSql.class);
-
- // 调用
- interceptor.beforeQuery(null, mappedStatement, null, null, null, boundSql);
- // 断言
- pluginUtilsMock.verify(() -> PluginUtils.mpBoundSql(boundSql), never());
- }
- }
-
- @Test // 存在规则,且不匹配
- public void testBeforeQuery_withMatchRule() {
- try (MockedStatic pluginUtilsMock = mockStatic(PluginUtils.class)) {
- // 准备参数
- MappedStatement mappedStatement = mock(MappedStatement.class);
- BoundSql boundSql = mock(BoundSql.class);
- // mock 方法(数据权限)
- when(ruleFactory.getDataPermissionRule(same(mappedStatement.getId())))
- .thenReturn(singletonList(new DeptDataPermissionRule()));
- // mock 方法(MPBoundSql)
- PluginUtils.MPBoundSql mpBs = mock(PluginUtils.MPBoundSql.class);
- pluginUtilsMock.when(() -> PluginUtils.mpBoundSql(same(boundSql))).thenReturn(mpBs);
- // mock 方法(SQL)
- String sql = "select * from t_user where id = 1";
- when(mpBs.sql()).thenReturn(sql);
- // 针对 ContextHolder 和 MappedStatementCache 暂时不 mock,主要想校验过程中,数据是否正确
-
- // 调用
- interceptor.beforeQuery(null, mappedStatement, null, null, null, boundSql);
- // 断言
- verify(mpBs, times(1)).sql(
- eq("SELECT * FROM t_user WHERE id = 1 AND t_user.dept_id = 100"));
- // 断言缓存
- assertTrue(interceptor.getMappedStatementCache().getNoRewritableMappedStatements().isEmpty());
- }
- }
-
- @Test // 存在规则,但不匹配
- public void testBeforeQuery_withoutMatchRule() {
- try (MockedStatic pluginUtilsMock = mockStatic(PluginUtils.class)) {
- // 准备参数
- MappedStatement mappedStatement = mock(MappedStatement.class);
- BoundSql boundSql = mock(BoundSql.class);
- // mock 方法(数据权限)
- when(ruleFactory.getDataPermissionRule(same(mappedStatement.getId())))
- .thenReturn(singletonList(new DeptDataPermissionRule()));
- // mock 方法(MPBoundSql)
- PluginUtils.MPBoundSql mpBs = mock(PluginUtils.MPBoundSql.class);
- pluginUtilsMock.when(() -> PluginUtils.mpBoundSql(same(boundSql))).thenReturn(mpBs);
- // mock 方法(SQL)
- String sql = "select * from t_role where id = 1";
- when(mpBs.sql()).thenReturn(sql);
- // 针对 ContextHolder 和 MappedStatementCache 暂时不 mock,主要想校验过程中,数据是否正确
-
- // 调用
- interceptor.beforeQuery(null, mappedStatement, null, null, null, boundSql);
- // 断言
- verify(mpBs, times(1)).sql(
- eq("SELECT * FROM t_role WHERE id = 1"));
- // 断言缓存
- assertFalse(interceptor.getMappedStatementCache().getNoRewritableMappedStatements().isEmpty());
- }
- }
-
- @Test
- public void testAddNoRewritable() {
- // 准备参数
- MappedStatement ms = mock(MappedStatement.class);
- List rules = singletonList(new DeptDataPermissionRule());
- // mock 方法
- when(ms.getId()).thenReturn("selectById");
-
- // 调用
- interceptor.getMappedStatementCache().addNoRewritable(ms, rules);
- // 断言
- Map, Set> noRewritableMappedStatements =
- interceptor.getMappedStatementCache().getNoRewritableMappedStatements();
- assertEquals(1, noRewritableMappedStatements.size());
- assertEquals(SetUtils.asSet("selectById"), noRewritableMappedStatements.get(DeptDataPermissionRule.class));
- }
-
- @Test
- public void testNoRewritable() {
- // 准备参数
- MappedStatement ms = mock(MappedStatement.class);
- // mock 方法
- when(ms.getId()).thenReturn("selectById");
- // mock 数据
- List rules = singletonList(new DeptDataPermissionRule());
- interceptor.getMappedStatementCache().addNoRewritable(ms, rules);
-
- // 场景一,rules 为空
- assertTrue(interceptor.getMappedStatementCache().noRewritable(ms, null));
- // 场景二,rules 非空,可重写
- assertFalse(interceptor.getMappedStatementCache().noRewritable(ms, singletonList(new EmptyDataPermissionRule())));
- // 场景三,rule 非空,不可重写
- assertTrue(interceptor.getMappedStatementCache().noRewritable(ms, rules));
- }
-
- private static class DeptDataPermissionRule implements DataPermissionRule {
-
- private static final String COLUMN = "dept_id";
-
- @Override
- public Set getTableNames() {
- return SetUtils.asSet("t_user");
- }
-
- @Override
- public Expression getExpression(String tableName, Alias tableAlias) {
- Column column = MyBatisUtils.buildColumn(tableName, tableAlias, COLUMN);
- LongValue value = new LongValue(100L);
- return new EqualsTo(column, value);
- }
-
- }
-
- private static class EmptyDataPermissionRule implements DataPermissionRule {
-
- @Override
- public Set getTableNames() {
- return Collections.emptySet();
- }
-
- @Override
- public Expression getExpression(String tableName, Alias tableAlias) {
- return null;
- }
-
- }
-
-}
+//package cn.hangtag.framework.datapermission.core.db;
+//
+//import cn.hangtag.framework.common.util.collection.SetUtils;
+//import cn.hangtag.framework.datapermission.core.rule.DataPermissionRule;
+//import cn.hangtag.framework.datapermission.core.rule.DataPermissionRuleFactory;
+//import cn.hangtag.framework.mybatis.core.util.MyBatisUtils;
+//import cn.hangtag.framework.test.core.ut.BaseMockitoUnitTest;
+//import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
+//import net.sf.jsqlparser.expression.Alias;
+//import net.sf.jsqlparser.expression.Expression;
+//import net.sf.jsqlparser.expression.LongValue;
+//import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
+//import net.sf.jsqlparser.schema.Column;
+//import org.apache.ibatis.executor.Executor;
+//import org.apache.ibatis.executor.statement.StatementHandler;
+//import org.apache.ibatis.mapping.BoundSql;
+//import org.apache.ibatis.mapping.MappedStatement;
+//import org.junit.jupiter.api.BeforeEach;
+//import org.junit.jupiter.api.Test;
+//import org.mockito.InjectMocks;
+//import org.mockito.Mock;
+//import org.mockito.MockedStatic;
+//
+//import java.sql.Connection;
+//import java.util.*;
+//
+//import static java.util.Collections.singletonList;
+//import static org.junit.jupiter.api.Assertions.*;
+//import static org.mockito.Mockito.*;
+//
+///**
+// * {@link DataPermissionDatabaseInterceptor} 的单元测试
+// * 主要测试 {@link DataPermissionDatabaseInterceptor#beforePrepare(StatementHandler, Connection, Integer)}
+// * 和 {@link DataPermissionDatabaseInterceptor#beforeUpdate(Executor, MappedStatement, Object)}
+// * 以及在这个过程中,ContextHolder 和 MappedStatementCache
+// *
+// * @author 芋道源码
+// */
+//public class DataPermissionDatabaseInterceptorTest extends BaseMockitoUnitTest {
+//
+// @InjectMocks
+// private DataPermissionDatabaseInterceptor interceptor;
+//
+// @Mock
+// private DataPermissionRuleFactory ruleFactory;
+//
+// @BeforeEach
+// public void setUp() {
+// // 清理上下文
+// DataPermissionDatabaseInterceptor.ContextHolder.clear();
+// // 清空缓存
+// interceptor.getMappedStatementCache().clear();
+// }
+//
+// @Test // 不存在规则,且不匹配
+// public void testBeforeQuery_withoutRule() {
+// try (MockedStatic pluginUtilsMock = mockStatic(PluginUtils.class)) {
+// // 准备参数
+// MappedStatement mappedStatement = mock(MappedStatement.class);
+// BoundSql boundSql = mock(BoundSql.class);
+//
+// // 调用
+// interceptor.beforeQuery(null, mappedStatement, null, null, null, boundSql);
+// // 断言
+// pluginUtilsMock.verify(() -> PluginUtils.mpBoundSql(boundSql), never());
+// }
+// }
+//
+// @Test // 存在规则,且不匹配
+// public void testBeforeQuery_withMatchRule() {
+// try (MockedStatic pluginUtilsMock = mockStatic(PluginUtils.class)) {
+// // 准备参数
+// MappedStatement mappedStatement = mock(MappedStatement.class);
+// BoundSql boundSql = mock(BoundSql.class);
+// // mock 方法(数据权限)
+// when(ruleFactory.getDataPermissionRule(same(mappedStatement.getId())))
+// .thenReturn(singletonList(new DeptDataPermissionRule()));
+// // mock 方法(MPBoundSql)
+// PluginUtils.MPBoundSql mpBs = mock(PluginUtils.MPBoundSql.class);
+// pluginUtilsMock.when(() -> PluginUtils.mpBoundSql(same(boundSql))).thenReturn(mpBs);
+// // mock 方法(SQL)
+// String sql = "select * from t_user where id = 1";
+// when(mpBs.sql()).thenReturn(sql);
+// // 针对 ContextHolder 和 MappedStatementCache 暂时不 mock,主要想校验过程中,数据是否正确
+//
+// // 调用
+// interceptor.beforeQuery(null, mappedStatement, null, null, null, boundSql);
+// // 断言
+// verify(mpBs, times(1)).sql(
+// eq("SELECT * FROM t_user WHERE id = 1 AND t_user.dept_id = 100"));
+// // 断言缓存
+// assertTrue(interceptor.getMappedStatementCache().getNoRewritableMappedStatements().isEmpty());
+// }
+// }
+//
+// @Test // 存在规则,但不匹配
+// public void testBeforeQuery_withoutMatchRule() {
+// try (MockedStatic pluginUtilsMock = mockStatic(PluginUtils.class)) {
+// // 准备参数
+// MappedStatement mappedStatement = mock(MappedStatement.class);
+// BoundSql boundSql = mock(BoundSql.class);
+// // mock 方法(数据权限)
+// when(ruleFactory.getDataPermissionRule(same(mappedStatement.getId())))
+// .thenReturn(singletonList(new DeptDataPermissionRule()));
+// // mock 方法(MPBoundSql)
+// PluginUtils.MPBoundSql mpBs = mock(PluginUtils.MPBoundSql.class);
+// pluginUtilsMock.when(() -> PluginUtils.mpBoundSql(same(boundSql))).thenReturn(mpBs);
+// // mock 方法(SQL)
+// String sql = "select * from t_role where id = 1";
+// when(mpBs.sql()).thenReturn(sql);
+// // 针对 ContextHolder 和 MappedStatementCache 暂时不 mock,主要想校验过程中,数据是否正确
+//
+// // 调用
+// interceptor.beforeQuery(null, mappedStatement, null, null, null, boundSql);
+// // 断言
+// verify(mpBs, times(1)).sql(
+// eq("SELECT * FROM t_role WHERE id = 1"));
+// // 断言缓存
+// assertFalse(interceptor.getMappedStatementCache().getNoRewritableMappedStatements().isEmpty());
+// }
+// }
+//
+// @Test
+// public void testAddNoRewritable() {
+// // 准备参数
+// MappedStatement ms = mock(MappedStatement.class);
+// List rules = singletonList(new DeptDataPermissionRule());
+// // mock 方法
+// when(ms.getId()).thenReturn("selectById");
+//
+// // 调用
+// interceptor.getMappedStatementCache().addNoRewritable(ms, rules);
+// // 断言
+// Map, Set> noRewritableMappedStatements =
+// interceptor.getMappedStatementCache().getNoRewritableMappedStatements();
+// assertEquals(1, noRewritableMappedStatements.size());
+// assertEquals(SetUtils.asSet("selectById"), noRewritableMappedStatements.get(DeptDataPermissionRule.class));
+// }
+//
+// @Test
+// public void testNoRewritable() {
+// // 准备参数
+// MappedStatement ms = mock(MappedStatement.class);
+// // mock 方法
+// when(ms.getId()).thenReturn("selectById");
+// // mock 数据
+// List rules = singletonList(new DeptDataPermissionRule());
+// interceptor.getMappedStatementCache().addNoRewritable(ms, rules);
+//
+// // 场景一,rules 为空
+// assertTrue(interceptor.getMappedStatementCache().noRewritable(ms, null));
+// // 场景二,rules 非空,可重写
+// assertFalse(interceptor.getMappedStatementCache().noRewritable(ms, singletonList(new EmptyDataPermissionRule())));
+// // 场景三,rule 非空,不可重写
+// assertTrue(interceptor.getMappedStatementCache().noRewritable(ms, rules));
+// }
+//
+// private static class DeptDataPermissionRule implements DataPermissionRule {
+//
+// private static final String COLUMN = "dept_id";
+//
+// @Override
+// public Set getTableNames() {
+// return SetUtils.asSet("t_user");
+// }
+//
+// @Override
+// public Expression getExpression(String tableName, Alias tableAlias) {
+// Column column = MyBatisUtils.buildColumn(tableName, tableAlias, COLUMN);
+// LongValue value = new LongValue(100L);
+// return new EqualsTo(column, value);
+// }
+//
+// }
+//
+// private static class EmptyDataPermissionRule implements DataPermissionRule {
+//
+// @Override
+// public Set getTableNames() {
+// return Collections.emptySet();
+// }
+//
+// @Override
+// public Expression getExpression(String tableName, Alias tableAlias) {
+// return null;
+// }
+//
+// }
+//
+//}
diff --git a/hangtag-framework/hangtag-spring-boot-starter-excel/src/test/java/cn/hangtag/framework/dict/core/util/DictFrameworkUtilsTest.java b/hangtag-framework/hangtag-spring-boot-starter-excel/src/test/java/cn/hangtag/framework/dict/core/util/DictFrameworkUtilsTest.java
index 94244c9..b223331 100644
--- a/hangtag-framework/hangtag-spring-boot-starter-excel/src/test/java/cn/hangtag/framework/dict/core/util/DictFrameworkUtilsTest.java
+++ b/hangtag-framework/hangtag-spring-boot-starter-excel/src/test/java/cn/hangtag/framework/dict/core/util/DictFrameworkUtilsTest.java
@@ -1,51 +1,50 @@
-package cn.hangtag.framework.dict.core.util;
-
-import cn.hangtag.framework.common.enums.CommonStatusEnum;
-import cn.hangtag.framework.dict.core.DictFrameworkUtils;
-import cn.hangtag.framework.test.core.ut.BaseMockitoUnitTest;
-import cn.hangtag.module.system.api.dict.DictDataApi;
-import cn.hangtag.module.system.api.dict.dto.DictDataRespDTO;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mock;
-
-import static cn.hangtag.framework.test.core.util.RandomUtils.randomPojo;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.mockito.Mockito.when;
-
-/**
- * {@link DictFrameworkUtils} 的单元测试
- */
-public class DictFrameworkUtilsTest extends BaseMockitoUnitTest {
-
- @Mock
- private DictDataApi dictDataApi;
-
- @BeforeEach
- public void setUp() {
- DictFrameworkUtils.init(dictDataApi);
- }
-
- @Test
- public void testGetDictDataLabel() {
- // mock 数据
- DictDataRespDTO dataRespDTO = randomPojo(DictDataRespDTO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()));
- // mock 方法
- when(dictDataApi.getDictData(dataRespDTO.getDictType(), dataRespDTO.getValue())).thenReturn(dataRespDTO);
-
- // 断言返回值
- assertEquals(dataRespDTO.getLabel(), DictFrameworkUtils.getDictDataLabel(dataRespDTO.getDictType(), dataRespDTO.getValue()));
- }
-
- @Test
- public void testParseDictDataValue() {
- // mock 数据
- DictDataRespDTO resp = randomPojo(DictDataRespDTO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()));
- // mock 方法
- when(dictDataApi.parseDictData(resp.getDictType(), resp.getLabel())).thenReturn(resp);
-
- // 断言返回值
- assertEquals(resp.getValue(), DictFrameworkUtils.parseDictDataValue(resp.getDictType(), resp.getLabel()));
- }
-
-}
+//package cn.hangtag.framework.dict.core.util;
+//
+//import cn.hangtag.framework.common.enums.CommonStatusEnum;
+//import cn.hangtag.framework.dict.core.DictFrameworkUtils;
+//import cn.hangtag.module.system.api.dict.DictDataApi;
+//import cn.hangtag.module.system.api.dict.dto.DictDataRespDTO;
+//import org.junit.jupiter.api.BeforeEach;
+//import org.junit.jupiter.api.Test;
+//import org.mockito.Mock;
+//
+//import static cn.hangtag.framework.test.core.util.RandomUtils.randomPojo;
+//import static org.junit.jupiter.api.Assertions.assertEquals;
+//import static org.mockito.Mockito.when;
+//
+///**
+// * {@link DictFrameworkUtils} 的单元测试
+// */
+//public class DictFrameworkUtilsTest extends BaseMockitoUnitTest {
+//
+// @Mock
+// private DictDataApi dictDataApi;
+//
+// @BeforeEach
+// public void setUp() {
+// DictFrameworkUtils.init(dictDataApi);
+// }
+//
+// @Test
+// public void testGetDictDataLabel() {
+// // mock 数据
+// DictDataRespDTO dataRespDTO = randomPojo(DictDataRespDTO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()));
+// // mock 方法
+// when(dictDataApi.getDictData(dataRespDTO.getDictType(), dataRespDTO.getValue())).thenReturn(dataRespDTO);
+//
+// // 断言返回值
+// assertEquals(dataRespDTO.getLabel(), DictFrameworkUtils.getDictDataLabel(dataRespDTO.getDictType(), dataRespDTO.getValue()));
+// }
+//
+// @Test
+// public void testParseDictDataValue() {
+// // mock 数据
+// DictDataRespDTO resp = randomPojo(DictDataRespDTO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()));
+// // mock 方法
+// when(dictDataApi.parseDictData(resp.getDictType(), resp.getLabel())).thenReturn(resp);
+//
+// // 断言返回值
+// assertEquals(resp.getValue(), DictFrameworkUtils.parseDictDataValue(resp.getDictType(), resp.getLabel()));
+// }
+//
+//}
diff --git a/hangtag-framework/hangtag-spring-boot-starter-mybatis/.flattened-pom.xml b/hangtag-framework/hangtag-spring-boot-starter-mybatis/.flattened-pom.xml
index 2dbfe45..70e8a08 100644
--- a/hangtag-framework/hangtag-spring-boot-starter-mybatis/.flattened-pom.xml
+++ b/hangtag-framework/hangtag-spring-boot-starter-mybatis/.flattened-pom.xml
@@ -1,75 +1,75 @@
-
-
- 4.0.0
-
- cn.hangtag
- hangtag-framework
- 2.1.0-jdk8-snapshot
-
- cn.hangtag
- hangtag-spring-boot-starter-mybatis
- 2.1.0-jdk8-snapshot
- ${project.artifactId}
- 数据库连接池、多数据源、事务、MyBatis 拓展
- https://github.com/YunaiV/ruoyi-vue-pro
-
-
- cn.hangtag
- hangtag-common
-
-
- cn.hangtag
- hangtag-spring-boot-starter-web
- provided
-
-
- com.mysql
- mysql-connector-j
-
-
- com.oracle.database.jdbc
- ojdbc8
- true
-
-
- org.postgresql
- postgresql
- true
-
-
- com.microsoft.sqlserver
- mssql-jdbc
- true
-
-
- com.dameng
- DmJdbcDriver18
- true
-
-
- com.alibaba
- druid-spring-boot-starter
-
-
- com.baomidou
- mybatis-plus-boot-starter
-
-
- com.baomidou
- dynamic-datasource-spring-boot-starter
-
-
- com.github.yulichang
- mybatis-plus-join-boot-starter
-
-
- com.fhs-opensource
- easy-trans-spring-boot-starter
-
-
- com.fhs-opensource
- easy-trans-mybatis-plus-extend
-
-
-
+
+
+ 4.0.0
+
+ cn.hangtag
+ hangtag-framework
+ 2.1.0-jdk8-snapshot
+
+ cn.hangtag
+ hangtag-spring-boot-starter-mybatis
+ 2.1.0-jdk8-snapshot
+ ${project.artifactId}
+ 数据库连接池、多数据源、事务、MyBatis 拓展
+ https://github.com/YunaiV/ruoyi-vue-pro
+
+
+ cn.hangtag
+ hangtag-common
+
+
+ cn.hangtag
+ hangtag-spring-boot-starter-web
+ provided
+
+
+ com.mysql
+ mysql-connector-j
+
+
+ com.oracle.database.jdbc
+ ojdbc8
+ true
+
+
+ org.postgresql
+ postgresql
+ true
+
+
+ com.microsoft.sqlserver
+ mssql-jdbc
+ true
+
+
+ com.dameng
+ DmJdbcDriver18
+ true
+
+
+ com.alibaba
+ druid-spring-boot-starter
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+
+
+ com.baomidou
+ dynamic-datasource-spring-boot-starter
+
+
+ com.github.yulichang
+ mybatis-plus-join-boot-starter
+
+
+ com.fhs-opensource
+ easy-trans-spring-boot-starter
+
+
+ com.fhs-opensource
+ easy-trans-mybatis-plus-extend
+
+
+
diff --git a/hangtag-framework/hangtag-spring-boot-starter-redis/.flattened-pom.xml b/hangtag-framework/hangtag-spring-boot-starter-redis/.flattened-pom.xml
index 88432cb..4c15b0a 100644
--- a/hangtag-framework/hangtag-spring-boot-starter-redis/.flattened-pom.xml
+++ b/hangtag-framework/hangtag-spring-boot-starter-redis/.flattened-pom.xml
@@ -1,34 +1,34 @@
-
-
- 4.0.0
-
- cn.hangtag
- hangtag-framework
- 2.1.0-jdk8-snapshot
-
- cn.hangtag
- hangtag-spring-boot-starter-redis
- 2.1.0-jdk8-snapshot
- ${project.artifactId}
- Redis 封装拓展
- https://github.com/YunaiV/ruoyi-vue-pro
-
-
- cn.hangtag
- hangtag-common
-
-
- org.redisson
- redisson-spring-boot-starter
-
-
- org.springframework.boot
- spring-boot-starter-cache
-
-
- com.fasterxml.jackson.datatype
- jackson-datatype-jsr310
-
-
-
+
+
+ 4.0.0
+
+ cn.hangtag
+ hangtag-framework
+ 2.1.0-jdk8-snapshot
+
+ cn.hangtag
+ hangtag-spring-boot-starter-redis
+ 2.1.0-jdk8-snapshot
+ ${project.artifactId}
+ Redis 封装拓展
+ https://github.com/YunaiV/ruoyi-vue-pro
+
+
+ cn.hangtag
+ hangtag-common
+
+
+ org.redisson
+ redisson-spring-boot-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-cache
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+
+
+
diff --git a/hangtag-framework/hangtag-spring-boot-starter-security/.flattened-pom.xml b/hangtag-framework/hangtag-spring-boot-starter-security/.flattened-pom.xml
index 376e654..8a017d4 100644
--- a/hangtag-framework/hangtag-spring-boot-starter-security/.flattened-pom.xml
+++ b/hangtag-framework/hangtag-spring-boot-starter-security/.flattened-pom.xml
@@ -1,53 +1,53 @@
-
-
- 4.0.0
-
- cn.hangtag
- hangtag-framework
- 2.1.0-jdk8-snapshot
-
- cn.hangtag
- hangtag-spring-boot-starter-security
- 2.1.0-jdk8-snapshot
- ${project.artifactId}
- 1. security:用户的认证、权限的校验,实现「谁」可以做「什么事」
- 2. operatelog:操作日志,实现「谁」在「什么时间」对「什么」做了「什么事」
- https://github.com/YunaiV/ruoyi-vue-pro
-
-
- cn.hangtag
- hangtag-common
-
-
- org.springframework.boot
- spring-boot-starter-aop
-
-
- cn.hangtag
- hangtag-spring-boot-starter-web
-
-
- org.springframework.boot
- spring-boot-configuration-processor
- true
-
-
- org.springframework.boot
- spring-boot-starter-security
-
-
- com.google.guava
- guava
-
-
- io.github.mouzt
- bizlog-sdk
-
-
- cn.hangtag
- hangtag-module-system-api
- ${revision}
-
-
-
+
+
+ 4.0.0
+
+ cn.hangtag
+ hangtag-framework
+ 2.1.0-jdk8-snapshot
+
+ cn.hangtag
+ hangtag-spring-boot-starter-security
+ 2.1.0-jdk8-snapshot
+ ${project.artifactId}
+ 1. security:用户的认证、权限的校验,实现「谁」可以做「什么事」
+ 2. operatelog:操作日志,实现「谁」在「什么时间」对「什么」做了「什么事」
+ https://github.com/YunaiV/ruoyi-vue-pro
+
+
+ cn.hangtag
+ hangtag-common
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+ cn.hangtag
+ hangtag-spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ com.google.guava
+ guava
+
+
+ io.github.mouzt
+ bizlog-sdk
+
+
+ cn.hangtag
+ hangtag-module-system-api
+ ${revision}
+
+
+
diff --git a/hangtag-framework/hangtag-spring-boot-starter-web/.flattened-pom.xml b/hangtag-framework/hangtag-spring-boot-starter-web/.flattened-pom.xml
index b9082bc..db34a29 100644
--- a/hangtag-framework/hangtag-spring-boot-starter-web/.flattened-pom.xml
+++ b/hangtag-framework/hangtag-spring-boot-starter-web/.flattened-pom.xml
@@ -1,68 +1,68 @@
-
-
- 4.0.0
-
- cn.hangtag
- hangtag-framework
- 2.1.0-jdk8-snapshot
-
- cn.hangtag
- hangtag-spring-boot-starter-web
- 2.1.0-jdk8-snapshot
- ${project.artifactId}
- Web 框架,全局异常、API 日志、脱敏、错误码等
- https://github.com/YunaiV/ruoyi-vue-pro
-
-
- cn.hangtag
- hangtag-common
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- org.springframework.boot
- spring-boot-configuration-processor
- true
-
-
- com.github.xiaoymin
- knife4j-openapi3-spring-boot-starter
-
-
- org.springdoc
- springdoc-openapi-ui
-
-
- org.springframework.security
- spring-security-core
- provided
-
-
- cn.hangtag
- hangtag-module-infra-api
- ${revision}
-
-
- cn.hangtag
- hangtag-module-system-api
- ${revision}
-
-
- org.jsoup
- jsoup
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
- org.mockito
- mockito-inline
- test
-
-
-
+
+
+ 4.0.0
+
+ cn.hangtag
+ hangtag-framework
+ 2.1.0-jdk8-snapshot
+
+ cn.hangtag
+ hangtag-spring-boot-starter-web
+ 2.1.0-jdk8-snapshot
+ ${project.artifactId}
+ Web 框架,全局异常、API 日志、脱敏、错误码等
+ https://github.com/YunaiV/ruoyi-vue-pro
+
+
+ cn.hangtag
+ hangtag-common
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+ com.github.xiaoymin
+ knife4j-openapi3-spring-boot-starter
+
+
+ org.springdoc
+ springdoc-openapi-ui
+
+
+ org.springframework.security
+ spring-security-core
+ provided
+
+
+ cn.hangtag
+ hangtag-module-infra-api
+ ${revision}
+
+
+ cn.hangtag
+ hangtag-module-system-api
+ ${revision}
+
+
+ org.jsoup
+ jsoup
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.mockito
+ mockito-inline
+ test
+
+
+
diff --git a/hangtag-module-infra/.flattened-pom.xml b/hangtag-module-infra/.flattened-pom.xml
index d56de3b..59b5806 100644
--- a/hangtag-module-infra/.flattened-pom.xml
+++ b/hangtag-module-infra/.flattened-pom.xml
@@ -1,22 +1,22 @@
-
-
- 4.0.0
-
- cn.hangtag
- hangtag
- 2.1.0-jdk8-snapshot
-
- cn.hangtag
- hangtag-module-infra
- 2.1.0-jdk8-snapshot
- pom
- ${project.artifactId}
- infra 模块,主要提供两块能力:
- 1. 我们放基础设施的运维与管理,支撑上层的通用与核心业务。 例如说:定时任务的管理、服务器的信息等等
- 2. 研发工具,提升研发效率与质量。 例如说:代码生成器、接口文档等等
-
- hangtag-module-infra-api
- hangtag-module-infra-biz
-
-
+
+
+ 4.0.0
+
+ cn.hangtag
+ hangtag
+ 2.1.0-jdk8-snapshot
+
+ cn.hangtag
+ hangtag-module-infra
+ 2.1.0-jdk8-snapshot
+ pom
+ ${project.artifactId}
+ infra 模块,主要提供两块能力:
+ 1. 我们放基础设施的运维与管理,支撑上层的通用与核心业务。 例如说:定时任务的管理、服务器的信息等等
+ 2. 研发工具,提升研发效率与质量。 例如说:代码生成器、接口文档等等
+
+ hangtag-module-infra-api
+ hangtag-module-infra-biz
+
+
diff --git a/hangtag-module-infra/hangtag-module-infra-api/.flattened-pom.xml b/hangtag-module-infra/hangtag-module-infra-api/.flattened-pom.xml
index aea6350..87703c9 100644
--- a/hangtag-module-infra/hangtag-module-infra-api/.flattened-pom.xml
+++ b/hangtag-module-infra/hangtag-module-infra-api/.flattened-pom.xml
@@ -1,26 +1,26 @@
-
-
- 4.0.0
-
- cn.hangtag
- hangtag-module-infra
- 2.1.0-jdk8-snapshot
-
- cn.hangtag
- hangtag-module-infra-api
- 2.1.0-jdk8-snapshot
- ${project.artifactId}
- infra 模块 API,暴露给其它模块调用
-
-
- cn.hangtag
- hangtag-common
-
-
- org.springframework.boot
- spring-boot-starter-validation
- true
-
-
-
+
+
+ 4.0.0
+
+ cn.hangtag
+ hangtag-module-infra
+ 2.1.0-jdk8-snapshot
+
+ cn.hangtag
+ hangtag-module-infra-api
+ 2.1.0-jdk8-snapshot
+ ${project.artifactId}
+ infra 模块 API,暴露给其它模块调用
+
+
+ cn.hangtag
+ hangtag-common
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+ true
+
+
+
diff --git a/hangtag-module-system/.flattened-pom.xml b/hangtag-module-system/.flattened-pom.xml
index 140afb4..8c54891 100644
--- a/hangtag-module-system/.flattened-pom.xml
+++ b/hangtag-module-system/.flattened-pom.xml
@@ -1,21 +1,21 @@
-
-
- 4.0.0
-
- cn.hangtag
- hangtag
- 2.1.0-jdk8-snapshot
-
- cn.hangtag
- hangtag-module-system
- 2.1.0-jdk8-snapshot
- pom
- ${project.artifactId}
- system 模块下,我们放通用业务,支撑上层的核心业务。
- 例如说:用户、部门、权限、数据字典等等
-
- hangtag-module-system-api
- hangtag-module-system-biz
-
-
+
+
+ 4.0.0
+
+ cn.hangtag
+ hangtag
+ 2.1.0-jdk8-snapshot
+
+ cn.hangtag
+ hangtag-module-system
+ 2.1.0-jdk8-snapshot
+ pom
+ ${project.artifactId}
+ system 模块下,我们放通用业务,支撑上层的核心业务。
+ 例如说:用户、部门、权限、数据字典等等
+
+ hangtag-module-system-api
+ hangtag-module-system-biz
+
+
diff --git a/hangtag-module-system/hangtag-module-system-api/.flattened-pom.xml b/hangtag-module-system/hangtag-module-system-api/.flattened-pom.xml
index 5bc7302..3577b43 100644
--- a/hangtag-module-system/hangtag-module-system-api/.flattened-pom.xml
+++ b/hangtag-module-system/hangtag-module-system-api/.flattened-pom.xml
@@ -1,26 +1,26 @@
-
-
- 4.0.0
-
- cn.hangtag
- hangtag-module-system
- 2.1.0-jdk8-snapshot
-
- cn.hangtag
- hangtag-module-system-api
- 2.1.0-jdk8-snapshot
- ${project.artifactId}
- system 模块 API,暴露给其它模块调用
-
-
- cn.hangtag
- hangtag-common
-
-
- org.springframework.boot
- spring-boot-starter-validation
- true
-
-
-
+
+
+ 4.0.0
+
+ cn.hangtag
+ hangtag-module-system
+ 2.1.0-jdk8-snapshot
+
+ cn.hangtag
+ hangtag-module-system-api
+ 2.1.0-jdk8-snapshot
+ ${project.artifactId}
+ system 模块 API,暴露给其它模块调用
+
+
+ cn.hangtag
+ hangtag-common
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+ true
+
+
+
diff --git a/hangtag-ui/hangtag-ui-admin/src/views/oms/produceorder/ProduceOrderForm.vue b/hangtag-ui/hangtag-ui-admin/src/views/oms/produceorder/ProduceOrderForm.vue
index f45b09a..e0cb5e7 100644
--- a/hangtag-ui/hangtag-ui-admin/src/views/oms/produceorder/ProduceOrderForm.vue
+++ b/hangtag-ui/hangtag-ui-admin/src/views/oms/produceorder/ProduceOrderForm.vue
@@ -159,7 +159,7 @@
-
+