+
+
+
+ Everyone can develop projects independently, quickly and efficiently!
+
+
+
\ No newline at end of file
diff --git a/jjj_erp/config/src/main/resources/static/verifyCode.html b/jjj_erp/config/src/main/resources/static/verifyCode.html
new file mode 100644
index 0000000..8cd1039
--- /dev/null
+++ b/jjj_erp/config/src/main/resources/static/verifyCode.html
@@ -0,0 +1,48 @@
+
+
+
+
+
验证码
+
+
+
+
+
方式一:获取图片
+

+
verifyToken:查看Responses Headers
+
+
+
+
+
+
方式二:获取base64图片编码
+
![]()
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jjj_erp/config/src/main/resources/static/welcome.html b/jjj_erp/config/src/main/resources/static/welcome.html
new file mode 100644
index 0000000..95cf17a
--- /dev/null
+++ b/jjj_erp/config/src/main/resources/static/welcome.html
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jjj_erp/config/src/main/resources/static/wx_express.xlsx b/jjj_erp/config/src/main/resources/static/wx_express.xlsx
new file mode 100644
index 0000000..49205c3
Binary files /dev/null and b/jjj_erp/config/src/main/resources/static/wx_express.xlsx differ
diff --git a/jjj_erp/config/target/classes/config/application-prod.yml b/jjj_erp/config/target/classes/config/application-prod.yml
new file mode 100644
index 0000000..7217845
--- /dev/null
+++ b/jjj_erp/config/target/classes/config/application-prod.yml
@@ -0,0 +1,41 @@
+server:
+ port: 8892
+
+spring-boot-jjj:
+ # 是否启用ansi控制台输出有颜色的字体,dev环境建议开启,服务器环境设置为false
+ enable-ansi: false
+ # 当前环境服务IP地址/域名
+ server-ip: http://erp3.huadeng.fun
+# server-ip: http://192.168.31.226:8892
+ # 文件上传下载配置
+ upload-path: /www/wwwroot/erp3.huadeng.fun/uploads
+ # AOP配置
+ aop:
+ # Aop日志配置
+ log:
+ # NONE:不打印日志
+ # ORDER:请求和响应日志,按照执行顺序分开打印
+ # LINE:方法执行结束时,连续分开打印请求和响应日志
+ # MERGE:方法执行结束时,合并请求和响应日志,同时打印
+ log-print-type: NONE
+# logback.xml中有详细的日志配置
+spring:
+ datasource:
+ url: jdbc:mysql://127.0.0.1:3306/jjj_erp_git?autoReconnect=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
+ username: root
+ password: cLGfTNk3sBRmRBnw
+
+ # Redis配置
+ redis:
+ database: 0
+ host: localhost
+ password: 123456
+ port: 6379
+
+# 打印SQL语句和结果集,本地开发环境可开启,线上注释掉
+mybatis-plus:
+ configuration:
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+logging:
+ file:
+ path: /www/wwwroot/erp3.huadeng.fun/logs
diff --git a/jjj_erp/config/target/classes/config/application.yml b/jjj_erp/config/target/classes/config/application.yml
new file mode 100644
index 0000000..ec3d622
--- /dev/null
+++ b/jjj_erp/config/target/classes/config/application.yml
@@ -0,0 +1,381 @@
+# spring-boot-jjj Common Config
+
+############################# 访问路径、端口tomcat start #############################
+server:
+ port: 8892
+ servlet:
+ context-path: /api
+ encoding:
+ charset: UTF-8
+ enabled: true
+ force: true
+ tomcat:
+ threads:
+ max: 1000
+ min-spare: 30
+ uri-encoding: UTF-8
+############################# 访问路径、端口tomcat end ###############################
+
+################################ spring config start ###############################
+spring:
+ application:
+ name: spring-boot-jjj
+ jackson:
+ date-format: yyyy-MM-dd HH:mm:ss
+ time-zone: GMT+8
+ banner:
+ charset: UTF-8
+ location: classpath:config/banner.txt
+ servlet:
+ # 文件上传配置
+ multipart:
+ # 指定上传文件的临时目录
+ location: /opt/upload/tmp
+ # 单个文件最大值
+ max-file-size: 10MB
+ # 单个请求文件总计最大值
+ max-request-size: 100MB
+ mvc:
+ async:
+ request-timeout: 20000
+
+# 当前项目maven激活环境,例如:dev/test/uat/prod,对应pom.xml中profile设置值
+---
+spring:
+ profiles:
+ active: prod
+
+# logback.xml中有详细的日志配置
+logging:
+ config: classpath:config/logback.xml
+ # 方便Spring Boot Admin页面上实时查看日志
+ file:
+ name: logs/${spring.application.name}.log
+ path: ./logs
+################################ spring config end #################################
+
+
+############################## spring-boot-jjj start ##############################
+spring-boot-jjj:
+ # 当前版本号
+ project-version: '1.0'
+ # 是否启用ansi控制台输出有颜色的字体
+ enable-ansi: true
+ # 服务器IP地址或域名
+ server-ip: http://127.0.0.1:${server.port}
+ # 是否启用验证码
+ enable-verify-code: false
+ # 实现BaseEnum接口的枚举包
+ enum-packages: net.jjjerp.framework.common.enums
+ # Swagger路径
+ swagger-paths: /swagger-ui.html,/docs,/doc.html,/swagger-resources/**,/webjars/**,/v2/api-docs,/csrf,/v2/api-docs-ext,/null/swagger-resources/**
+ # Filter配置
+ filter:
+ request:
+ enable: true
+ url-patterns: /*
+ order: 1
+ async: true
+ xss:
+ enable: true
+ url-patterns: /*
+ order: 2
+ async: true
+
+ # 拦截器配置
+ interceptor:
+ permission:
+ enable: false
+ include-paths: /**
+ resource:
+ enable: false
+ include-paths: ${spring-boot-jjj.resource-access-patterns}
+ upload:
+ enable: false
+ include-paths: /uploads/**
+ download:
+ enable: false
+ include-paths: /download/**
+
+ # AOP配置
+ aop:
+ # Aop日志配置
+ log:
+ # 是否启用
+ enable: true
+ # 是否启用requestId
+ enable-request-id: true
+ # requestId生成规则: UUID/IDWORK
+ request-id-type: IDWORK
+ # NONE:不打印日志
+ # ORDER:请求和响应日志,按照执行顺序分开打印
+ # LINE:方法执行结束时,连续分开打印请求和响应日志
+ # MERGE:方法执行结束时,合并请求和响应日志,同时打印
+ log-print-type: ORDER
+ # 请求日志在控制台是否格式化输出,local环境建议开启,服务器环境设置为false
+ request-log-format: true
+ # 响应日志在控制台是否格式化输出,local环境建议开启,服务器环境设置为false
+ response-log-format: true
+ # 排除的路径
+ exclude-paths: /,/csrf
+ # 操作日志配置
+ operation-log:
+ # 是否启用
+ enable: true
+ # 排除的路径
+ exclude-paths:
+ # 登录日志配置
+ login-log:
+ # 是否启用
+ enable: true
+ # 登录地址
+ login-path: /admin/passport/login
+ # 登出地址
+ logout-path: /admin/passport/logout
+
+ # 文件上传下载配置
+ # 上传路径配置
+ upload-path: /opt/resource/uploads/
+ # 资源访问路径
+ resource-access-path: /resource/
+ # 资源访问路径匹配:/resource/**
+ resource-access-patterns: ${spring-boot-jjj.resource-access-path}**
+ # 资源访问全路径前缀:http://127.0.0.1:8888/resource/
+ resource-access-url: ${spring-boot-jjj.server-ip}${server.servlet.context-path}${spring-boot-jjj.resource-access-path}
+ # 静态资源访问目录
+ static-access-url: ${spring-boot-jjj.server-ip}${server.servlet.context-path}/static/
+ # 全局允许上传的类型
+ allow-upload-file-extensions: jpg,png,docx,xlsx,pptx,pdf
+ # 全局允许下载的类型
+ allow-download-file-extensions: jpg,png,docx,xlsx,pptx,pdf
+ # 租户忽略表
+ ignore_tables: jjjerp_region,jjjerp_message,jjjerp_message_field,jjjerp_material_property
+
+ ############################ CORS start ############################
+ # CORS跨域配置,默认允许跨域
+ cors:
+ # 是否启用跨域,默认启用
+ enable: true
+ # CORS过滤的路径,默认:/**
+ path: /**
+ # 允许访问的源
+ allowed-origins: '*'
+ # 允许访问的请求头
+ allowed-headers: '*'
+ # 是否允许发送cookie
+ allow-credentials: true
+ # 允许访问的请求方式
+ allowed-methods: OPTION,GET,POST
+ # 允许响应的头
+ exposed-headers: token
+ # 该响应的有效时间默认为30分钟,在有效时间内,浏览器无须为同一请求再次发起预检请求
+ max-age: 1800
+
+ ############################ CORS end ##############################
+
+ ########################## Resource start ##########################
+ # 静态资源访问配置
+ resource-handlers: |
+ /static/**=classpath:/static/
+ swagger-ui.html=classpath:/META-INF/resources/
+ /webjars/**=classpath:/META-INF/resources/webjars/
+ doc.html=classpath:/META-INF/resources/
+ ########################## Resource end ############################
+
+ ######################## Spring Shiro start ########################
+ shiro:
+ # 是否启用
+ enable: true
+ # 权限配置
+ anon:
+ # 排除静态资源
+ - /static/**,/templates/**
+ # 排除Swagger
+ - ${spring-boot-jjj.swagger-paths}
+ # 排除actuator
+ - /actuator/**
+ - # 排除首页
+ - /,/index.html
+ # front模块
+ - /front/**
+ # admin模块
+ - /saas/passport/login
+ # shop模块
+ - /admin/index/base,/admin/passport/login
+ # job模块
+ - /job/**
+ # 多行字符串权限配置
+ filter-chain-definitions: |
+ /resource/**=anon
+ /uploads/**=anon
+ /verificationCode/**=anon
+ /enum=anon
+ /getSysUserInfo=anon
+
+ ######################## Spring Shiro end ##########################
+
+ ############################ JWT start #############################
+ jwt:
+ # token请求头名称
+ token-name: token
+ # jwt密钥
+ secret: 888888
+ # 发行人
+ issuer: ${spring.application.name}
+ # 观众
+ audience: web
+ # 默认过期时间1小时,单位:秒
+ expire-second: 36000
+ # 是否刷新token
+ refresh-token: true
+ # 刷新token的时间间隔,默认10分钟,单位:秒
+ refresh-token-countdown: 600
+ # redis校验jwt token是否存在,可选
+ redis-check: true
+ # true: 同一个账号只能是最后一次登录token有效,false:同一个账号可多次登录
+ single-login: false
+ # 盐值校验,如果不加自定义盐值,则使用secret校验
+ salt-check: true
+ ############################ JWT end ###############################
+
+############################### spring-boot-jjj end ###############################
+
+
+############################### mybatis-plus start #################################
+mybatis-plus:
+ # 启动时是否检查MyBatis XML文件是否存在
+ check-config-location: true
+ # 支持统配符 * 或者 ; 分割
+ typeEnumsPackage: net.jjjerp.*.enums
+ # MyBatis原生配置
+ configuration:
+ # 字段名称下划线转驼峰命名
+ map-underscore-to-camel-case: true
+ global-config:
+ db-config:
+ # 全局默认主键类型
+ id-type: auto
+ # 逻辑已删除值(默认为 1)
+ logic-delete-value: 1
+ # 逻辑未删除值(默认为 0)
+ logic-not-delete-value: 0
+ # 表前缀
+ table-prefix: jjjerp_
+ configuration-properties:
+ # 自定义sql中表名带前缀
+ prefix: jjjerp_
+ # mapper xml映射路径
+ mapper-locations: classpath*:mapper/**/*Mapper.xml
+################################ mybatis-plus end ##################################
+
+
+############################### HikariCP 数据源配置 start ################################
+---
+spring:
+ datasource:
+ driver-class-name: com.mysql.jdbc.Driver
+ type: com.zaxxer.hikari.HikariDataSource
+ cachePrepStmts: true
+ prepStmtCacheSize: 300
+ prepStmtCacheSqlLimit: 2048
+ useServerPrepStmts: true
+ useLocalSessionState: true
+ rewriteBatchedStatements: true
+ cacheResultSetMetadata: true
+ cacheServerConfiguration: true
+ elideSetAutoCommits: true
+ maintainTimeStats: false
+ hikari:
+ minimum-idle: 10
+ maximum-pool-size: 20
+ idle-timeout: 10000
+ max-lifetime: 1800000
+ connection-timeout: 30000
+############################### HikariCP 数据源配置 end ################################
+
+
+############################### Redis 公共配置 start ###############################
+---
+spring:
+ redis:
+ timeout: 10s
+ lettuce:
+ pool:
+ max-active: 200
+ max-idle: 8
+ max-wait: 10s
+ min-idle: 2
+ shutdown-timeout: 3s
+############################### Redis 公共配置 end ##################################
+
+
+#################################### Swagger start #################################
+---
+spring-boot-jjj:
+ swagger:
+ # 是否启用
+ enable: true
+ base:
+ # 扫描的包,多个包使用逗号隔开
+ package: net.jjjerp
+ contact:
+ email: 279517889@qq.com
+ name: jjjerp
+ url: https://www.jjjshop.net
+ description:
+ title: ${spring.application.name} API Documents
+ version: 1.0
+ # 自定义参数配置,可配置N个
+ parameter-config:
+ - name: ${spring-boot-jjj.jwt.token-name}
+ description: Token Request Header
+ # header, cookie, body, query
+ type: header
+ data-type: String
+ required: false
+ # 测试接口时,自动填充token的值
+ default-value:
+
+# knife4j配置
+knife4j:
+ enable: ${spring-boot-jjj.swagger.enable}
+ basic:
+ enable: false
+ username: admin
+ password: admin
+
+#################################### Swagger end ###################################
+
+
+############################## Spring boot admin start ##############################
+
+# 开启和暴露端点
+management:
+ endpoint:
+ health:
+ show-details: ALWAYS
+ logfile:
+ #可在线查看日志
+ enabled: true
+ endpoints:
+ web:
+ exposure:
+ include: '*'
+
+# 自定义项目信息,Spring Boot Admin展示使用
+info:
+ project-groupId: 'net.jjjerp'
+ project-name: ${spring.application.name}
+ project-finalName: 'jjj-erp-1.0'
+ project-author: jjjerp
+ project-description: ${spring.application.name} project
+ project-sourceEncoding: 'UTF-8'
+ project-spring-boot-version: '2.3.12.RELEASE'
+ project-mybatis-plus-version: '3.4.1'
+ project-version: '1.0'
+ project-website: 'https://www.jjjshop.net'
+ project-home: ${spring-boot-jjj.server-ip}${server.servlet.context-path}
+ project-swagger: ${spring-boot-jjj.server-ip}${server.servlet.context-path}/swagger-ui.html
+ project-knife4j: ${spring-boot-jjj.server-ip}${server.servlet.context-path}/doc.html
+############################## Spring boot admin end ###############################
+
diff --git a/jjj_erp/config/target/classes/config/banner.txt b/jjj_erp/config/target/classes/config/banner.txt
new file mode 100644
index 0000000..e8b0bf5
--- /dev/null
+++ b/jjj_erp/config/target/classes/config/banner.txt
@@ -0,0 +1,13 @@
+${AnsiColor.BLUE}
+ _ _ _ _
+ (_) | | | | | |
+ ___ _ __ _ __ _ _ __ __ _ ______| |__ ___ ___ | |_ ______ _ __ | |_ _ ___
+ / __| '_ \| '__| | '_ \ / _` |______| '_ \ / _ \ / _ \| __|______| '_ \| | | | / __|
+ \__ \ |_) | | | | | | | (_| | | |_) | (_) | (_) | |_ | |_) | | |_| \__ \
+ |___/ .__/|_| |_|_| |_|\__, | |_.__/ \___/ \___/ \__| | .__/|_|\__,_|___/
+ | | __/ | | |
+ |_| |___/ |_|
+
+${AnsiColor.YELLOW} :: Spring Boot :: ${AnsiColor.WHITE}(v2.3.12.RELEASE)
+${AnsiColor.YELLOW} :: jjj-erp :: ${AnsiColor.WHITE}(v1.0)
+ https://www.jjjshop.net
diff --git a/jjj_erp/config/target/classes/config/logback.xml b/jjj_erp/config/target/classes/config/logback.xml
new file mode 100644
index 0000000..f02bf61
--- /dev/null
+++ b/jjj_erp/config/target/classes/config/logback.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+ ${CONTEXT_NAME}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${CONSOLE_LOG_PATTERN}
+
+
+
+
+
+
+ ${FILE_LOG_PATTERN}
+
+ ${log.path}/spring-boot-jjj.log
+
+ ${log.path}/spring-boot-jjj-%d{yyyy-MM-dd}.%i.log
+ ${MAX_FILE_SIZE}
+ ${MAX_HISTORY}
+
+
+
+
+
+
+ ${FILE_LOG_PATTERN}
+
+ ${log.path}/spring-boot-jjj-error.log
+
+ ${log.path}/spring-boot-jjj-error-%d{yyyy-MM-dd}.%i.log
+ ${MAX_FILE_SIZE}
+ ${MAX_HISTORY}
+
+
+ ERROR
+ ACCEPT
+ DENY
+
+
+
+
+
+ 0
+ 1024
+
+
+
+ 0
+ 1024
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jjj_erp/config/target/classes/config/mime-type.properties b/jjj_erp/config/target/classes/config/mime-type.properties
new file mode 100644
index 0000000..62e8ca1
--- /dev/null
+++ b/jjj_erp/config/target/classes/config/mime-type.properties
@@ -0,0 +1,4 @@
+#
+# 扩展mime-type
+# 参考:https://svn.apache.org/viewvc/httpd/httpd/trunk/docs/conf/mime.types?revision=1752884&view=co
+md=text/markdown
\ No newline at end of file
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/constant/CacheKey.class b/jjj_erp/config/target/classes/net/jjjerp/config/constant/CacheKey.class
new file mode 100644
index 0000000..8a221aa
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/constant/CacheKey.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/constant/CommonConstant.class b/jjj_erp/config/target/classes/net/jjjerp/config/constant/CommonConstant.class
new file mode 100644
index 0000000..78f29cd
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/constant/CommonConstant.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/constant/CommonRedisKey.class b/jjj_erp/config/target/classes/net/jjjerp/config/constant/CommonRedisKey.class
new file mode 100644
index 0000000..043b667
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/constant/CommonRedisKey.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/constant/DatePattern.class b/jjj_erp/config/target/classes/net/jjjerp/config/constant/DatePattern.class
new file mode 100644
index 0000000..b0861da
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/constant/DatePattern.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/JwtProperties.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/JwtProperties.class
new file mode 100644
index 0000000..db05fda
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/JwtProperties.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/ShiroPermissionProperties.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/ShiroPermissionProperties.class
new file mode 100644
index 0000000..570ddcb
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/ShiroPermissionProperties.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/ShiroProperties.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/ShiroProperties.class
new file mode 100644
index 0000000..cb70e9b
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/ShiroProperties.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$AopConfig.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$AopConfig.class
new file mode 100644
index 0000000..e6cd0b2
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$AopConfig.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$LogAopConfig.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$LogAopConfig.class
new file mode 100644
index 0000000..81b79d7
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$LogAopConfig.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$LogPrintType.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$LogPrintType.class
new file mode 100644
index 0000000..224a88c
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$LogPrintType.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$LoginLogConfig.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$LoginLogConfig.class
new file mode 100644
index 0000000..9ffba56
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$LoginLogConfig.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$OperationLogConfig.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$OperationLogConfig.class
new file mode 100644
index 0000000..aaa0641
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$OperationLogConfig.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$RequestIdType.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$RequestIdType.class
new file mode 100644
index 0000000..5080e60
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties$RequestIdType.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties.class
new file mode 100644
index 0000000..222ea72
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjAopProperties.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjCorsProperties.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjCorsProperties.class
new file mode 100644
index 0000000..44e3130
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjCorsProperties.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjFilterProperties$FilterConfig.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjFilterProperties$FilterConfig.class
new file mode 100644
index 0000000..b43e626
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjFilterProperties$FilterConfig.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjFilterProperties.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjFilterProperties.class
new file mode 100644
index 0000000..ed32558
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjFilterProperties.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjInterceptorProperties$InterceptorConfig.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjInterceptorProperties$InterceptorConfig.class
new file mode 100644
index 0000000..71f60da
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjInterceptorProperties$InterceptorConfig.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjInterceptorProperties.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjInterceptorProperties.class
new file mode 100644
index 0000000..40333f5
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjInterceptorProperties.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjProperties.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjProperties.class
new file mode 100644
index 0000000..fd0193c
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjProperties.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjStaticProperties.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjStaticProperties.class
new file mode 100644
index 0000000..db24d68
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SpringBootJjjStaticProperties.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/SwaggerProperties$ParameterConfig.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SwaggerProperties$ParameterConfig.class
new file mode 100644
index 0000000..08d2340
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SwaggerProperties$ParameterConfig.class differ
diff --git a/jjj_erp/config/target/classes/net/jjjerp/config/properties/SwaggerProperties.class b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SwaggerProperties.class
new file mode 100644
index 0000000..1c79e6e
Binary files /dev/null and b/jjj_erp/config/target/classes/net/jjjerp/config/properties/SwaggerProperties.class differ
diff --git a/jjj_erp/config/target/classes/static/404.html b/jjj_erp/config/target/classes/static/404.html
new file mode 100644
index 0000000..bc817f9
--- /dev/null
+++ b/jjj_erp/config/target/classes/static/404.html
@@ -0,0 +1,10 @@
+
+
+
+
+
404
+
+
+
Not Found
+
+
\ No newline at end of file
diff --git a/jjj_erp/config/target/classes/static/500.html b/jjj_erp/config/target/classes/static/500.html
new file mode 100644
index 0000000..4955871
--- /dev/null
+++ b/jjj_erp/config/target/classes/static/500.html
@@ -0,0 +1,10 @@
+
+
+
+
+
500
+
+
+
500
+
+
\ No newline at end of file
diff --git a/jjj_erp/config/target/classes/static/error.html b/jjj_erp/config/target/classes/static/error.html
new file mode 100644
index 0000000..556c6bc
--- /dev/null
+++ b/jjj_erp/config/target/classes/static/error.html
@@ -0,0 +1,10 @@
+
+
+
+
+
404
+
+
+
Error
+
+
\ No newline at end of file
diff --git a/jjj_erp/config/target/classes/static/express.xlsx b/jjj_erp/config/target/classes/static/express.xlsx
new file mode 100644
index 0000000..929ecae
Binary files /dev/null and b/jjj_erp/config/target/classes/static/express.xlsx differ
diff --git a/jjj_erp/config/target/classes/static/favicon.ico b/jjj_erp/config/target/classes/static/favicon.ico
new file mode 100644
index 0000000..2524a5d
Binary files /dev/null and b/jjj_erp/config/target/classes/static/favicon.ico differ
diff --git a/jjj_erp/config/target/classes/static/image/agent/agent-bg.jpg b/jjj_erp/config/target/classes/static/image/agent/agent-bg.jpg
new file mode 100644
index 0000000..e421175
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/agent/agent-bg.jpg differ
diff --git a/jjj_erp/config/target/classes/static/image/agent/backdrop.jpg b/jjj_erp/config/target/classes/static/image/agent/backdrop.jpg
new file mode 100644
index 0000000..443c926
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/agent/backdrop.jpg differ
diff --git a/jjj_erp/config/target/classes/static/image/center_menu/address.png b/jjj_erp/config/target/classes/static/image/center_menu/address.png
new file mode 100644
index 0000000..c137820
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/center_menu/address.png differ
diff --git a/jjj_erp/config/target/classes/static/image/center_menu/agent.png b/jjj_erp/config/target/classes/static/image/center_menu/agent.png
new file mode 100644
index 0000000..6edd283
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/center_menu/agent.png differ
diff --git a/jjj_erp/config/target/classes/static/image/center_menu/assemble.png b/jjj_erp/config/target/classes/static/image/center_menu/assemble.png
new file mode 100644
index 0000000..5ba2119
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/center_menu/assemble.png differ
diff --git a/jjj_erp/config/target/classes/static/image/center_menu/bargain.png b/jjj_erp/config/target/classes/static/image/center_menu/bargain.png
new file mode 100644
index 0000000..d4fb9de
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/center_menu/bargain.png differ
diff --git a/jjj_erp/config/target/classes/static/image/center_menu/comment.png b/jjj_erp/config/target/classes/static/image/center_menu/comment.png
new file mode 100644
index 0000000..9ef2554
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/center_menu/comment.png differ
diff --git a/jjj_erp/config/target/classes/static/image/center_menu/coupon.png b/jjj_erp/config/target/classes/static/image/center_menu/coupon.png
new file mode 100644
index 0000000..1d759e9
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/center_menu/coupon.png differ
diff --git a/jjj_erp/config/target/classes/static/image/center_menu/gift.png b/jjj_erp/config/target/classes/static/image/center_menu/gift.png
new file mode 100644
index 0000000..28ce3db
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/center_menu/gift.png differ
diff --git a/jjj_erp/config/target/classes/static/image/center_menu/lottery.png b/jjj_erp/config/target/classes/static/image/center_menu/lottery.png
new file mode 100644
index 0000000..7124f64
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/center_menu/lottery.png differ
diff --git a/jjj_erp/config/target/classes/static/image/center_menu/my_card.png b/jjj_erp/config/target/classes/static/image/center_menu/my_card.png
new file mode 100644
index 0000000..73b18b1
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/center_menu/my_card.png differ
diff --git a/jjj_erp/config/target/classes/static/image/center_menu/my_coupon.png b/jjj_erp/config/target/classes/static/image/center_menu/my_coupon.png
new file mode 100644
index 0000000..3e7646b
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/center_menu/my_coupon.png differ
diff --git a/jjj_erp/config/target/classes/static/image/center_menu/my_fav.png b/jjj_erp/config/target/classes/static/image/center_menu/my_fav.png
new file mode 100644
index 0000000..040cdd2
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/center_menu/my_fav.png differ
diff --git a/jjj_erp/config/target/classes/static/image/center_menu/settings.png b/jjj_erp/config/target/classes/static/image/center_menu/settings.png
new file mode 100644
index 0000000..2b87b01
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/center_menu/settings.png differ
diff --git a/jjj_erp/config/target/classes/static/image/center_menu/sign.png b/jjj_erp/config/target/classes/static/image/center_menu/sign.png
new file mode 100644
index 0000000..7ed678e
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/center_menu/sign.png differ
diff --git a/jjj_erp/config/target/classes/static/image/center_menu/task.png b/jjj_erp/config/target/classes/static/image/center_menu/task.png
new file mode 100644
index 0000000..87744fc
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/center_menu/task.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/active/assemble.png b/jjj_erp/config/target/classes/static/image/diy/active/assemble.png
new file mode 100644
index 0000000..5816471
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/active/assemble.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/active/assemble_bgimage.png b/jjj_erp/config/target/classes/static/image/diy/active/assemble_bgimage.png
new file mode 100644
index 0000000..a628a5c
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/active/assemble_bgimage.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/active/bargain.png b/jjj_erp/config/target/classes/static/image/diy/active/bargain.png
new file mode 100644
index 0000000..c1eac18
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/active/bargain.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/active/bargain1.png b/jjj_erp/config/target/classes/static/image/diy/active/bargain1.png
new file mode 100644
index 0000000..6b74aac
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/active/bargain1.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/active/bargain_bgimage.png b/jjj_erp/config/target/classes/static/image/diy/active/bargain_bgimage.png
new file mode 100644
index 0000000..7a362b6
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/active/bargain_bgimage.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/active/coupon.png b/jjj_erp/config/target/classes/static/image/diy/active/coupon.png
new file mode 100644
index 0000000..32631b3
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/active/coupon.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/active/live.png b/jjj_erp/config/target/classes/static/image/diy/active/live.png
new file mode 100644
index 0000000..358b427
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/active/live.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/active/preview.png b/jjj_erp/config/target/classes/static/image/diy/active/preview.png
new file mode 100644
index 0000000..2ca07e8
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/active/preview.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/active/preview_bg.png b/jjj_erp/config/target/classes/static/image/diy/active/preview_bg.png
new file mode 100644
index 0000000..3cbf4c8
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/active/preview_bg.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/active/seckill.png b/jjj_erp/config/target/classes/static/image/diy/active/seckill.png
new file mode 100644
index 0000000..a4a35be
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/active/seckill.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/active/seckill_bgimage.png b/jjj_erp/config/target/classes/static/image/diy/active/seckill_bgimage.png
new file mode 100644
index 0000000..73c1a4a
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/active/seckill_bgimage.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/article/01.png b/jjj_erp/config/target/classes/static/image/diy/article/01.png
new file mode 100644
index 0000000..01ca99a
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/article/01.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/circular.png b/jjj_erp/config/target/classes/static/image/diy/circular.png
new file mode 100644
index 0000000..12f22ef
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/circular.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/logo.png b/jjj_erp/config/target/classes/static/image/diy/logo.png
new file mode 100644
index 0000000..a183735
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/logo.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/logo_top.png b/jjj_erp/config/target/classes/static/image/diy/logo_top.png
new file mode 100644
index 0000000..91bcf27
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/logo_top.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/navbar/01.png b/jjj_erp/config/target/classes/static/image/diy/navbar/01.png
new file mode 100644
index 0000000..7d72938
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/navbar/01.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/navbar/02.png b/jjj_erp/config/target/classes/static/image/diy/navbar/02.png
new file mode 100644
index 0000000..6ed1f86
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/navbar/02.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/navbar/03.png b/jjj_erp/config/target/classes/static/image/diy/navbar/03.png
new file mode 100644
index 0000000..5e1270c
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/navbar/03.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/navbar/04.png b/jjj_erp/config/target/classes/static/image/diy/navbar/04.png
new file mode 100644
index 0000000..0e6edb5
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/navbar/04.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/notice.png b/jjj_erp/config/target/classes/static/image/diy/notice.png
new file mode 100644
index 0000000..35b5c9c
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/notice.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/service.png b/jjj_erp/config/target/classes/static/image/diy/service.png
new file mode 100644
index 0000000..00041cc
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/service.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/shipin_live.png b/jjj_erp/config/target/classes/static/image/diy/shipin_live.png
new file mode 100644
index 0000000..d92f75a
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/shipin_live.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/special.png b/jjj_erp/config/target/classes/static/image/diy/special.png
new file mode 100644
index 0000000..1d0592d
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/special.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/video_poster.png b/jjj_erp/config/target/classes/static/image/diy/video_poster.png
new file mode 100644
index 0000000..d0df38c
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/video_poster.png differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/window/01.jpg b/jjj_erp/config/target/classes/static/image/diy/window/01.jpg
new file mode 100644
index 0000000..fb96fa4
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/window/01.jpg differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/window/02.jpg b/jjj_erp/config/target/classes/static/image/diy/window/02.jpg
new file mode 100644
index 0000000..087480a
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/window/02.jpg differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/window/03.jpg b/jjj_erp/config/target/classes/static/image/diy/window/03.jpg
new file mode 100644
index 0000000..8ee59dd
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/window/03.jpg differ
diff --git a/jjj_erp/config/target/classes/static/image/diy/window/04.jpg b/jjj_erp/config/target/classes/static/image/diy/window/04.jpg
new file mode 100644
index 0000000..702eadc
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/diy/window/04.jpg differ
diff --git a/jjj_erp/config/target/classes/static/image/poster/product_bg.png b/jjj_erp/config/target/classes/static/image/poster/product_bg.png
new file mode 100644
index 0000000..e014910
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/poster/product_bg.png differ
diff --git a/jjj_erp/config/target/classes/static/image/poster/st-heiti-light.ttc b/jjj_erp/config/target/classes/static/image/poster/st-heiti-light.ttc
new file mode 100644
index 0000000..88aeb7f
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/poster/st-heiti-light.ttc differ
diff --git a/jjj_erp/config/target/classes/static/image/tabbar/cart.png b/jjj_erp/config/target/classes/static/image/tabbar/cart.png
new file mode 100644
index 0000000..91e6887
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/tabbar/cart.png differ
diff --git a/jjj_erp/config/target/classes/static/image/tabbar/cart_active.png b/jjj_erp/config/target/classes/static/image/tabbar/cart_active.png
new file mode 100644
index 0000000..15946a5
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/tabbar/cart_active.png differ
diff --git a/jjj_erp/config/target/classes/static/image/tabbar/category.png b/jjj_erp/config/target/classes/static/image/tabbar/category.png
new file mode 100644
index 0000000..590f2bd
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/tabbar/category.png differ
diff --git a/jjj_erp/config/target/classes/static/image/tabbar/category_active.png b/jjj_erp/config/target/classes/static/image/tabbar/category_active.png
new file mode 100644
index 0000000..981b2e9
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/tabbar/category_active.png differ
diff --git a/jjj_erp/config/target/classes/static/image/tabbar/home.png b/jjj_erp/config/target/classes/static/image/tabbar/home.png
new file mode 100644
index 0000000..555c746
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/tabbar/home.png differ
diff --git a/jjj_erp/config/target/classes/static/image/tabbar/home_active.png b/jjj_erp/config/target/classes/static/image/tabbar/home_active.png
new file mode 100644
index 0000000..71c5199
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/tabbar/home_active.png differ
diff --git a/jjj_erp/config/target/classes/static/image/tabbar/user.png b/jjj_erp/config/target/classes/static/image/tabbar/user.png
new file mode 100644
index 0000000..e1beb95
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/tabbar/user.png differ
diff --git a/jjj_erp/config/target/classes/static/image/tabbar/user_active.png b/jjj_erp/config/target/classes/static/image/tabbar/user_active.png
new file mode 100644
index 0000000..e4bc438
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/tabbar/user_active.png differ
diff --git a/jjj_erp/config/target/classes/static/image/task/article.png b/jjj_erp/config/target/classes/static/image/task/article.png
new file mode 100644
index 0000000..31dd0a8
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/task/article.png differ
diff --git a/jjj_erp/config/target/classes/static/image/task/base.png b/jjj_erp/config/target/classes/static/image/task/base.png
new file mode 100644
index 0000000..050ee73
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/task/base.png differ
diff --git a/jjj_erp/config/target/classes/static/image/task/image.png b/jjj_erp/config/target/classes/static/image/task/image.png
new file mode 100644
index 0000000..54cba56
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/task/image.png differ
diff --git a/jjj_erp/config/target/classes/static/image/task/invite.png b/jjj_erp/config/target/classes/static/image/task/invite.png
new file mode 100644
index 0000000..b456f57
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/task/invite.png differ
diff --git a/jjj_erp/config/target/classes/static/image/task/order.png b/jjj_erp/config/target/classes/static/image/task/order.png
new file mode 100644
index 0000000..a1d48bc
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/task/order.png differ
diff --git a/jjj_erp/config/target/classes/static/image/task/product.png b/jjj_erp/config/target/classes/static/image/task/product.png
new file mode 100644
index 0000000..82b4dd4
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/task/product.png differ
diff --git a/jjj_erp/config/target/classes/static/image/task/sign.png b/jjj_erp/config/target/classes/static/image/task/sign.png
new file mode 100644
index 0000000..e3f9aad
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/task/sign.png differ
diff --git a/jjj_erp/config/target/classes/static/image/task/task.png b/jjj_erp/config/target/classes/static/image/task/task.png
new file mode 100644
index 0000000..9bbbec0
Binary files /dev/null and b/jjj_erp/config/target/classes/static/image/task/task.png differ
diff --git a/jjj_erp/config/target/classes/static/index.html b/jjj_erp/config/target/classes/static/index.html
new file mode 100644
index 0000000..64f3a47
--- /dev/null
+++ b/jjj_erp/config/target/classes/static/index.html
@@ -0,0 +1,514 @@
+
+
+
+
+
spring-boot-jjj Home
+
+
+
+
+
+
+ Everyone can develop projects independently, quickly and efficiently!
+
+
+
\ No newline at end of file
diff --git a/jjj_erp/config/target/classes/static/verifyCode.html b/jjj_erp/config/target/classes/static/verifyCode.html
new file mode 100644
index 0000000..8cd1039
--- /dev/null
+++ b/jjj_erp/config/target/classes/static/verifyCode.html
@@ -0,0 +1,48 @@
+
+
+
+
+
验证码
+
+
+
+
+
方式一:获取图片
+

+
verifyToken:查看Responses Headers
+
+
+
+
+
+
方式二:获取base64图片编码
+
![]()
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jjj_erp/config/target/classes/static/welcome.html b/jjj_erp/config/target/classes/static/welcome.html
new file mode 100644
index 0000000..95cf17a
--- /dev/null
+++ b/jjj_erp/config/target/classes/static/welcome.html
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jjj_erp/config/target/classes/static/wx_express.xlsx b/jjj_erp/config/target/classes/static/wx_express.xlsx
new file mode 100644
index 0000000..3038cd4
Binary files /dev/null and b/jjj_erp/config/target/classes/static/wx_express.xlsx differ
diff --git a/jjj_erp/config/target/jjj-erp-1.0.jar b/jjj_erp/config/target/jjj-erp-1.0.jar
new file mode 100644
index 0000000..9d93b02
Binary files /dev/null and b/jjj_erp/config/target/jjj-erp-1.0.jar differ
diff --git a/jjj_erp/config/target/maven-archiver/pom.properties b/jjj_erp/config/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..e61af3f
--- /dev/null
+++ b/jjj_erp/config/target/maven-archiver/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Sat Jun 29 14:54:45 CST 2024
+version=1.0
+groupId=net.jjjerp
+artifactId=config
diff --git a/jjj_erp/config/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/jjj_erp/config/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..4e6e4a3
--- /dev/null
+++ b/jjj_erp/config/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,23 @@
+net\jjjerp\config\properties\SpringBootJjjAopProperties$AopConfig.class
+net\jjjerp\config\constant\CommonConstant.class
+net\jjjerp\config\properties\SpringBootJjjAopProperties.class
+net\jjjerp\config\properties\SpringBootJjjAopProperties$LoginLogConfig.class
+net\jjjerp\config\properties\SpringBootJjjAopProperties$OperationLogConfig.class
+net\jjjerp\config\properties\SpringBootJjjFilterProperties.class
+net\jjjerp\config\properties\SpringBootJjjInterceptorProperties.class
+net\jjjerp\config\constant\DatePattern.class
+net\jjjerp\config\properties\ShiroProperties.class
+net\jjjerp\config\constant\CommonRedisKey.class
+net\jjjerp\config\properties\SpringBootJjjAopProperties$RequestIdType.class
+net\jjjerp\config\properties\SwaggerProperties$ParameterConfig.class
+net\jjjerp\config\properties\SpringBootJjjCorsProperties.class
+net\jjjerp\config\properties\SpringBootJjjAopProperties$LogAopConfig.class
+net\jjjerp\config\properties\SpringBootJjjStaticProperties.class
+net\jjjerp\config\properties\SpringBootJjjInterceptorProperties$InterceptorConfig.class
+net\jjjerp\config\constant\CacheKey.class
+net\jjjerp\config\properties\SpringBootJjjProperties.class
+net\jjjerp\config\properties\SpringBootJjjFilterProperties$FilterConfig.class
+net\jjjerp\config\properties\JwtProperties.class
+net\jjjerp\config\properties\SwaggerProperties.class
+net\jjjerp\config\properties\SpringBootJjjAopProperties$LogPrintType.class
+net\jjjerp\config\properties\ShiroPermissionProperties.class
diff --git a/jjj_erp/config/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/jjj_erp/config/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..bf0645f
--- /dev/null
+++ b/jjj_erp/config/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,14 @@
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\config\src\main\java\net\jjjerp\config\constant\CommonConstant.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\config\src\main\java\net\jjjerp\config\properties\JwtProperties.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\config\src\main\java\net\jjjerp\config\properties\SpringBootJjjInterceptorProperties.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\config\src\main\java\net\jjjerp\config\constant\CommonRedisKey.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\config\src\main\java\net\jjjerp\config\properties\ShiroProperties.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\config\src\main\java\net\jjjerp\config\properties\SpringBootJjjFilterProperties.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\config\src\main\java\net\jjjerp\config\properties\SpringBootJjjStaticProperties.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\config\src\main\java\net\jjjerp\config\properties\ShiroPermissionProperties.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\config\src\main\java\net\jjjerp\config\properties\SpringBootJjjAopProperties.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\config\src\main\java\net\jjjerp\config\properties\SwaggerProperties.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\config\src\main\java\net\jjjerp\config\properties\SpringBootJjjProperties.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\config\src\main\java\net\jjjerp\config\constant\DatePattern.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\config\src\main\java\net\jjjerp\config\constant\CacheKey.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\config\src\main\java\net\jjjerp\config\properties\SpringBootJjjCorsProperties.java
diff --git a/jjj_erp/generator/README.md b/jjj_erp/generator/README.md
new file mode 100644
index 0000000..ebdac6f
--- /dev/null
+++ b/jjj_erp/generator/README.md
@@ -0,0 +1 @@
+# generator 项目代码生成模块
\ No newline at end of file
diff --git a/jjj_erp/generator/pom.xml b/jjj_erp/generator/pom.xml
new file mode 100644
index 0000000..dc7ee26
--- /dev/null
+++ b/jjj_erp/generator/pom.xml
@@ -0,0 +1,40 @@
+
+
+
+ 4.0.0
+
+
+ net.jjjerp
+ parent
+ 1.0
+
+
+ generator
+ generator
+ 代码生成器模块
+
+
+
+ net.jjjerp
+ jjj-common
+
+
+ org.apache.velocity
+ velocity-engine-core
+ ${velocity.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ com.baomidou
+ mybatis-plus-generator
+ ${mybatis-plus-boot-starter.version}
+
+
+
+
diff --git a/jjj_erp/generator/src/main/java/net/jjjerp/generator/CodeGenerator.java b/jjj_erp/generator/src/main/java/net/jjjerp/generator/CodeGenerator.java
new file mode 100644
index 0000000..a4bb6b8
--- /dev/null
+++ b/jjj_erp/generator/src/main/java/net/jjjerp/generator/CodeGenerator.java
@@ -0,0 +1,435 @@
+
+
+package net.jjjerp.generator;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.generator.AutoGenerator;
+import com.baomidou.mybatisplus.generator.InjectionConfig;
+import com.baomidou.mybatisplus.generator.config.*;
+import com.baomidou.mybatisplus.generator.config.po.TableInfo;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+import net.jjjerp.generator.config.*;
+import net.jjjerp.generator.config.query.SpringBootJjjMySqlQuery;
+import net.jjjerp.generator.config.query.SpringBootJjjSqlServerQuery;
+import net.jjjerp.generator.constant.GeneratorConstant;
+import net.jjjerp.generator.exception.GeneratorException;
+import net.jjjerp.generator.properties.GeneratorProperties;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+
+/**
+ * spring-boot-jjj代码生成器
+ */
+@Slf4j
+@Data
+@Component
+@Accessors(chain = true)
+public class CodeGenerator {
+
+ public void generator(GeneratorProperties generatorProperties) {
+ if (generatorProperties == null) {
+ throw new GeneratorException("generatorProperties不能为空");
+ }
+ List
tableConfig = generatorProperties.getTableConfig();
+ if (CollectionUtils.isEmpty(tableConfig)) {
+ throw new GeneratorException("tableConfig不能为空");
+ }
+
+ // 循环生成
+ for (TableConfig generatorTable : tableConfig) {
+ String tableName = generatorTable.getTableName();
+ String pkIdName = generatorTable.getPkIdName();
+ // 生成代码
+ generator(tableName, pkIdName, generatorProperties);
+ }
+ }
+
+ /**
+ * 初始化变量
+ */
+ public void init(String tableName, GeneratorProperties generatorProperties) {
+ String parentPackage = generatorProperties.getParentPackage();
+ if (StringUtils.isBlank(parentPackage)) {
+ throw new GeneratorException("项目父包不能为空");
+ }
+ // 如果包路径为空,转换包名称路径
+ if (StringUtils.isNotBlank(parentPackage)) {
+ generatorProperties.setParentPackagePath(parentPackage.replaceAll("\\.", Matcher.quoteReplacement(File.separator)));
+ }
+
+ String mavenModuleName = generatorProperties.getMavenModuleName();
+ if (StringUtils.isBlank(mavenModuleName)) {
+ throw new GeneratorException("mavenModuleName不能为空");
+ }
+ if (StringUtils.isBlank(tableName)) {
+ throw new GeneratorException("tableName不能为空");
+ }
+
+ // 如果是单表操作,不生成QueryVo
+ GeneratorConfig generatorConfig = generatorProperties.getGeneratorConfig();
+ if (GeneratorStrategy.SINGLE == generatorConfig.generatorStrategy) {
+ generatorProperties.getGeneratorConfig().setGeneratorQueryVo(false);
+ }
+
+ }
+
+
+ /**
+ * 生成代码
+ */
+ public void generator(String tableName, String pkIdName, GeneratorProperties generatorProperties) {
+ // 初始化变量
+ init(tableName, generatorProperties);
+
+ // 代码生成器
+ AutoGenerator autoGenerator = new AutoGenerator();
+
+ MybatisPlusGeneratorConfig mybatisPlusGeneratorConfig = generatorProperties.getMybatisPlusGeneratorConfig();
+ if (mybatisPlusGeneratorConfig == null) {
+ throw new GeneratorException("mybatisPlusGeneratorConfig不能为空");
+ }
+
+ // 全局配置
+ GlobalConfig globalConfig = mybatisPlusGeneratorConfig.getGlobalConfig();
+ if (globalConfig == null) {
+ throw new GeneratorException("globalConfig不能为空");
+ }
+
+ String mavenModuleName = generatorProperties.getMavenModuleName();
+ String moduleName = generatorProperties.getModuleName();
+ String outputDir = generatorProperties.getOutputDir();
+ String javaOutputDir = null;
+ String resourcesOutputDir = null;
+ String mapperXmlOutputDir = null;
+
+ if (StringUtils.isBlank(outputDir)) {
+ String rootProjectFile = System.getProperty(GeneratorConstant.USER_DIR);
+ outputDir = rootProjectFile + File.separator + mavenModuleName;
+ }
+ log.info("outputDir: {}", outputDir);
+ javaOutputDir = outputDir + GeneratorConstant.JAVA_DIR;
+ resourcesOutputDir = outputDir + GeneratorConstant.RESOURCES_DIR;
+ mapperXmlOutputDir = outputDir + GeneratorConstant.MAPPER_DIR;
+
+ // 设置java代码输出目录绝对路径
+ globalConfig.setOutputDir(javaOutputDir);
+
+ // 是否覆盖文件
+ globalConfig.setFileOverride(generatorProperties.isFileOverride());
+
+ // 设置作者
+ globalConfig.setAuthor(generatorProperties.getAuthor());
+
+ if (StringUtils.isBlank(globalConfig.getServiceName())) {
+ // %sService 生成 UserService,%s 为占位符
+ globalConfig.setServiceName(GeneratorConstant.SERVICE_NAME);
+ }
+
+ // 设置全局配置
+ autoGenerator.setGlobalConfig(globalConfig);
+
+ // 数据源配置
+ DataSourceConfig dataSourceConfig = generatorProperties.getDataSourceConfig();
+ if (dataSourceConfig == null) {
+ throw new GeneratorException("dataSourceConfig不能为空");
+ }
+
+ // 设置元数据自定义查询
+ DbType dbType = dataSourceConfig.getDbType();
+ if (DbType.MYSQL == dbType) {
+ // 设置MySQL元数据自定义查询
+ dataSourceConfig.setDbQuery(new SpringBootJjjMySqlQuery());
+ } else if (DbType.SQL_SERVER2005 == dbType || DbType.SQL_SERVER == dbType) {
+ // 设置SQLServer元数据自定义查询
+ dataSourceConfig.setDbQuery(new SpringBootJjjSqlServerQuery());
+ }
+
+ // 设置数据源
+ autoGenerator.setDataSource(dataSourceConfig);
+
+ // 包配置
+ PackageConfig packageConfig = mybatisPlusGeneratorConfig.getPackageConfig();
+ packageConfig.setModuleName(moduleName);
+ packageConfig.setParent(generatorProperties.getParentPackage());
+
+ // 设置包信息
+ autoGenerator.setPackageInfo(packageConfig);
+
+ // 策略配置
+ StrategyConfig strategyConfig = mybatisPlusGeneratorConfig.getStrategyConfig();
+ if (strategyConfig == null) {
+ throw new GeneratorException("strategyConfig不能为空");
+ }
+ // 设置生成的表
+ strategyConfig.setInclude(tableName);
+ // 表前缀
+ List tablePrefixList = generatorProperties.getTablePrefix();
+ if (CollectionUtils.isNotEmpty(tablePrefixList)) {
+ strategyConfig.setTablePrefix(tablePrefixList.toArray(new String[]{}));
+ }
+
+
+ if (StringUtils.isBlank(strategyConfig.getSuperEntityClass())) {
+ // 自定义继承的Entity类全称,带包名
+ // strategyConfig.setSuperEntityClass(GeneratorConstant.SUPER_ENTITY_CLASS);
+ }
+ if (StringUtils.isBlank(strategyConfig.getSuperControllerClass())) {
+ // 自定义继承的Controller类全称,带包名
+ strategyConfig.setSuperControllerClass(GeneratorConstant.SUPER_CONTROLLER_CLASS);
+ }
+ // 自定义继承的Service类全称,带包名
+ strategyConfig.setSuperServiceClass(GeneratorConstant.SUPER_SERVICE_CLASS);
+ // 自定义继承的ServiceImpl类全称,带包名
+ strategyConfig.setSuperServiceImplClass(GeneratorConstant.SUPER_SERVICE_IMPL_CLASS);
+
+ // 设置策略
+ autoGenerator.setStrategy(strategyConfig);
+
+ // 自定义配置
+ InjectionConfig injectionConfig = new InjectionConfig() {
+ @Override
+ public void initMap() {
+ List tableInfos = this.getConfig().getTableInfoList();
+ if (CollectionUtils.isEmpty(tableInfos)) {
+ throw new GeneratorException(tableName + "表不存在");
+ }
+
+ String finalModuleName = "";
+ if (StringUtils.isNotBlank(moduleName)) {
+ finalModuleName = StringPool.DOT + moduleName;
+ }
+ TableInfo tableInfo = this.getConfig().getTableInfoList().get(0);
+ String entityName = tableInfo.getEntityName();
+ String entityObjectName = toCamel(entityName);
+ String colonTableName = underlineToColon(tableName);
+
+ String parentPackage = generatorProperties.getParentPackage();
+ ProjectConfig projectConfig = generatorProperties.getProjectConfig();
+
+ String superPageParamClass = projectConfig.getSuperPageParamClass();
+ String idParamClass = projectConfig.getIdParamClass();
+ String pagingClass = projectConfig.getPagingClass();
+ String pageInfoClass = projectConfig.getPageInfoClass();
+ String apiResultClass = projectConfig.getApiResultClass();
+ String superPageOrderParamClass = projectConfig.getSuperPageOrderParamClass();
+
+ GeneratorConfig generatorConfig = generatorProperties.getGeneratorConfig();
+
+ GeneratorStrategy generatorStrategy = generatorConfig.getGeneratorStrategy();
+ String generatorStrategyName = generatorStrategy.name();
+ boolean paramValidation = generatorConfig.isParamValidation();
+ boolean requiresPermissions = generatorConfig.isRequiresPermissions();
+
+ Map map = new HashMap<>();
+ // 查询参数包路径
+ String pageParamPackage = parentPackage + finalModuleName + StringPool.DOT + GeneratorConstant.PARAM;
+ map.put("pageParamPackage", pageParamPackage);
+ // 查询参数类路径
+ map.put("pageParamClass", pageParamPackage + StringPool.DOT + entityName + GeneratorConstant.PAGE_PARAM);
+ // 查询参数共公包路径
+ map.put("superPageParamClass", superPageParamClass);
+ map.put("superPageOrderParamClass", superPageOrderParamClass);
+ // 查询参数共公包路径
+ map.put("idParamClass", idParamClass);
+ // 响应结果包路径
+ String queryVoPackage = parentPackage + finalModuleName + StringPool.DOT + GeneratorConstant.VO;
+ map.put("queryVoPackage", queryVoPackage);
+ // 响应结果类路径
+ map.put("queryVoClass", queryVoPackage + StringPool.DOT + entityName + GeneratorConstant.QUERY_VO);
+ // 实体对象名称
+ map.put("entityObjectName", entityObjectName);
+ // service对象名称
+ map.put("serviceObjectName", entityObjectName + GeneratorConstant.SERVICE);
+ // mapper对象名称
+ map.put("mapperObjectName", entityObjectName + GeneratorConstant.MAPPER);
+ // 主键ID列名
+ map.put("pkIdName", pkIdName);
+ // 主键ID驼峰名称
+ map.put("pkIdCamelName", underlineToCamel(pkIdName));
+ // 导入分页类
+ map.put("pagingClass", pagingClass);
+ map.put("pageInfoClass", pageInfoClass);
+ // ApiResult
+ map.put("apiResultClass", apiResultClass);
+ // 代码生成策略
+ map.put("generatorStrategy", generatorStrategyName);
+ // 代码Validation校验
+ map.put("paramValidation", paramValidation);
+ // 冒号连接的表名称
+ map.put("colonTableName", colonTableName);
+ // 是否生成Shiro RequiresPermissions注解
+ map.put("requiresPermissions", requiresPermissions);
+ // 设置常量值
+ map.put("pageParam", GeneratorConstant.PAGE_PARAM);
+ map.put("validatorAddPackage", GeneratorConstant.VALIDATOR_ADD_PACKAGE);
+ map.put("validatorUpdatePackage", GeneratorConstant.VALIDATOR_UPDATE_PACKAGE);
+ // 如果是但表模式,queryVO值为null
+ if (GeneratorStrategy.SINGLE == generatorStrategy) {
+ map.put("queryVo", "");
+ } else {
+ map.put("queryVo", GeneratorConstant.QUERY_VO);
+ }
+ map.put("generatorQueryVo", generatorConfig.isGeneratorQueryVo());
+ map.put("generatorPageParam", generatorConfig.isGeneratorPageParam());
+ map.put("pageListOrder", generatorConfig.isPageListOrder());
+ map.put("swaggerTags", generatorConfig.isSwaggerTags());
+ map.put("operationLog", generatorConfig.isOperationLog());
+ map.put("module", moduleName);
+ this.setMap(map);
+ }
+ };
+ List focList = new ArrayList<>();
+
+
+ GeneratorConfig generatorConfig = generatorProperties.getGeneratorConfig();
+
+ String parentPackagePath = generatorProperties.getParentPackagePath();
+ String finalJavaOutputDir = javaOutputDir;
+ String finalMapperXmlOutputDir = mapperXmlOutputDir;
+
+ String modulePath = "";
+ if (StringUtils.isNotBlank(moduleName)) {
+ modulePath = File.separator + moduleName;
+ }
+ final String finalModulePath = modulePath;
+
+ // 生成Mapper XML
+ if (generatorConfig.isGeneratorMapperXml()) {
+ focList.add(new FileOutConfig(GeneratorConstant.MAPPER_XML_TEMPLATE_PATH) {
+ @Override
+ public String outputFile(TableInfo tableInfo) {
+ // 指定Mapper XML文件路径
+ return finalMapperXmlOutputDir + finalModulePath + File.separator
+ + tableInfo.getEntityName() + GeneratorConstant.MAPPER + StringPool.DOT_XML;
+ }
+ });
+ }
+
+ // 自定义pageParam模板
+ if (generatorConfig.isGeneratorPageParam()) {
+ focList.add(new FileOutConfig(GeneratorConstant.PAGE_PARAM_TEMPLATE_PATH) {
+ @Override
+ public String outputFile(TableInfo tableInfo) {
+ return finalJavaOutputDir + File.separator + parentPackagePath + finalModulePath + File.separator + GeneratorConstant.PARAM +
+ File.separator + tableInfo.getEntityName() + GeneratorConstant.PAGE_PARAM + StringPool.DOT_JAVA;
+ }
+ });
+ }
+
+ // 自定义queryVo模板
+ if (generatorConfig.isGeneratorQueryVo()) {
+ focList.add(new FileOutConfig(GeneratorConstant.QUERY_VO_TEMPLATE_PATH) {
+ @Override
+ public String outputFile(TableInfo tableInfo) {
+ return finalJavaOutputDir + File.separator + parentPackagePath + finalModulePath + File.separator + GeneratorConstant.VO +
+ File.separator + tableInfo.getEntityName() + GeneratorConstant.QUERY_VO + StringPool.DOT_JAVA;
+ }
+ });
+ }
+
+ injectionConfig.setFileOutConfigList(focList);
+
+ // 设置自定义配置
+ autoGenerator.setCfg(injectionConfig);
+
+ // 模版生成配置,设置为空,表示不生成
+ TemplateConfig templateConfig = new TemplateConfig();
+ // xml使用自定义输出
+ templateConfig.setXml(null);
+ // 是否生成entity
+ if (!generatorConfig.isGeneratorEntity()) {
+ templateConfig.setEntity(null);
+ }
+ // 是否生成controller
+ if (!generatorConfig.isGeneratorController()) {
+ templateConfig.setController(null);
+ }
+ // 是否生成service
+ if (!generatorConfig.isGeneratorService()) {
+ templateConfig.setService(null);
+ }
+ // 是否生成serviceImpl
+ if (!generatorConfig.isGeneratorServiceImpl()) {
+ templateConfig.setServiceImpl(null);
+ }
+ // 是否生成mapper
+ if (!generatorConfig.isGeneratorMapper()) {
+ templateConfig.setMapper(null);
+ }
+
+ // 设置模板引擎
+ autoGenerator.setTemplate(templateConfig);
+
+ // 执行代码生成
+ autoGenerator.execute();
+ }
+
+ /**
+ * 下划线专程驼峰命名
+ * sys_user --> sysUser
+ *
+ * @param underline
+ * @return
+ */
+ public static String underlineToCamel(String underline) {
+ if (StringUtils.isNotBlank(underline)) {
+ return NamingStrategy.underlineToCamel(underline);
+ }
+ return null;
+ }
+
+ /**
+ * 下划线转换成帕斯卡命名
+ * sys_user --> SysUser
+ *
+ * @param underline
+ * @return
+ */
+ public static String underlineToPascal(String underline) {
+ if (StringUtils.isNotBlank(underline)) {
+ return NamingStrategy.capitalFirst(NamingStrategy.underlineToCamel(underline));
+ }
+ return null;
+ }
+
+ /**
+ * 下划线转换成冒号连接命名
+ * sys_user --> sys:user
+ *
+ * @param underline
+ * @return
+ */
+ public static String underlineToColon(String underline) {
+ if (StringUtils.isBlank(underline)) {
+ return null;
+ }
+ String string = underline.toLowerCase();
+ return string.replaceAll("_", ":");
+ }
+
+ /**
+ * 首字母小写
+ *
+ * @param name
+ * @return
+ */
+ public static String toCamel(String name) {
+ if (StringUtils.isBlank(name)) {
+ return null;
+ }
+ return name.substring(0, 1).toLowerCase() + name.substring(1);
+ }
+
+}
diff --git a/jjj_erp/generator/src/main/java/net/jjjerp/generator/SpringBootJjjGenerator.java b/jjj_erp/generator/src/main/java/net/jjjerp/generator/SpringBootJjjGenerator.java
new file mode 100644
index 0000000..ff428c6
--- /dev/null
+++ b/jjj_erp/generator/src/main/java/net/jjjerp/generator/SpringBootJjjGenerator.java
@@ -0,0 +1,91 @@
+
+
+package net.jjjerp.generator;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.generator.config.rules.DateType;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+import net.jjjerp.generator.config.GeneratorStrategy;
+import net.jjjerp.generator.constant.GeneratorConstant;
+import net.jjjerp.generator.properties.GeneratorProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+
+/**
+ * spring-boot-jjj代码生成器入口类
+ **/
+@Component
+public class SpringBootJjjGenerator {
+
+ /**
+ * 生成代码
+ * @param args
+ */
+ public static void main(String[] args) {
+ GeneratorProperties generatorProperties = new GeneratorProperties();
+
+ // 设置基本信息
+ generatorProperties
+ .setMavenModuleName("jjj-common")
+ .setParentPackage("net.jjjerp.common")
+ //.setModuleName("version")
+ .setAuthor("jjjerp")
+ .setFileOverride(true);
+
+ // 设置表信息
+ generatorProperties.addTable("jjjerp_app_wx_file","id");
+ // 设置表前缀
+ generatorProperties.setTablePrefix(Arrays.asList("jjjerp_"));
+
+ // 数据源配置
+ generatorProperties.getDataSourceConfig()
+ .setDbType(DbType.MYSQL)
+ .setUsername("root")
+ .setPassword("root")
+ .setDriverName("com.mysql.jdbc.Driver")
+ .setUrl("jdbc:mysql://192.168.151.129:3306/jjj_erp?useUnicode=true&characterEncoding=UTF-8&useSSL=false");
+
+ // 生成配置
+ generatorProperties.getGeneratorConfig()
+ .setGeneratorStrategy(GeneratorStrategy.SIMPLE)
+ .setGeneratorEntity(true)
+ .setGeneratorController(false)
+ .setGeneratorService(true)
+ .setGeneratorServiceImpl(true)
+ .setGeneratorMapper(true)
+ .setGeneratorMapperXml(true)
+ .setGeneratorPageParam(false)
+ .setGeneratorQueryVo(false)
+ .setRequiresPermissions(false)
+ .setPageListOrder(false)
+ .setParamValidation(false)
+ .setSwaggerTags(true)
+ .setOperationLog(true);
+
+ // 全局配置
+ generatorProperties.getMybatisPlusGeneratorConfig().getGlobalConfig()
+ .setOpen(true)
+ .setSwagger2(true)
+ .setIdType(IdType.AUTO)
+ .setDateType(DateType.ONLY_DATE);
+
+ // 策略配置
+ generatorProperties.getMybatisPlusGeneratorConfig().getStrategyConfig()
+ .setNaming(NamingStrategy.underline_to_camel)
+ .setColumnNaming(NamingStrategy.underline_to_camel)
+ .setEntityLombokModel(true)
+ .setRestControllerStyle(true)
+ .setControllerMappingHyphenStyle(true)
+ .setVersionFieldName(GeneratorConstant.VERSION)
+ .setLogicDeleteFieldName(GeneratorConstant.DELETED);
+
+ // 生成代码
+ CodeGenerator codeGenerator = new CodeGenerator();
+ codeGenerator.generator(generatorProperties);
+
+ }
+
+
+}
diff --git a/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/GeneratorConfig.java b/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/GeneratorConfig.java
new file mode 100644
index 0000000..b8b67aa
--- /dev/null
+++ b/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/GeneratorConfig.java
@@ -0,0 +1,76 @@
+
+
+package net.jjjerp.generator.config;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.springframework.boot.context.properties.NestedConfigurationProperty;
+
+/**
+ * 生成配置
+ **/
+@Data
+@Accessors(chain = true)
+public class GeneratorConfig {
+ /**
+ * 代码生成策略
+ */
+ @NestedConfigurationProperty
+ public GeneratorStrategy generatorStrategy = GeneratorStrategy.ALL;
+ /**
+ * 是否生成实体类
+ */
+ private boolean generatorEntity = true;
+ /**
+ * 是否生成控制器
+ */
+ private boolean generatorController = true;
+ /**
+ * 是否生成service接口
+ */
+ private boolean generatorService = true;
+ /**
+ * 是否生成service实现类
+ */
+ private boolean generatorServiceImpl = true;
+ /**
+ * 是否生成Mapper
+ */
+ private boolean generatorMapper = true;
+ /**
+ * 是否生成Mapper XML
+ */
+ private boolean generatorMapperXml = true;
+ /**
+ * 是否生成查询参数
+ */
+ private boolean generatorPageParam = true;
+ /**
+ * 是否生成查询VO
+ */
+ private boolean generatorQueryVo = true;
+ /**
+ * 是否生成Shiro RequiresPermissions 注解
+ */
+ private boolean requiresPermissions = true;
+ /**
+ * 分页列表查询是否排序 true:有排序参数/false:无
+ */
+ private boolean pageListOrder = true;
+ /**
+ * 是否生成validation校验,true:生成/false:不生成
+ */
+ private boolean paramValidation = true;
+ /**
+ * 是否生成Swagger tags
+ * true: @Api(value = "系统用户API",tags = {"系统用户"})
+ * false: @Api("系统用户API")
+ */
+ private boolean swaggerTags = true;
+
+ /**
+ * 是否生成系统操作日志注解:@OperationLog
+ */
+ private boolean operationLog = true;
+
+}
diff --git a/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/GeneratorStrategy.java b/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/GeneratorStrategy.java
new file mode 100644
index 0000000..3cf8f37
--- /dev/null
+++ b/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/GeneratorStrategy.java
@@ -0,0 +1,13 @@
+
+
+package net.jjjerp.generator.config;
+
+/**
+ * 生成策略
+ * SIMPLE 生成最基本的代码
+ * SINGLE 生成单表操作代码
+ * ALL 生成所有的代码
+ **/
+public enum GeneratorStrategy {
+ SIMPLE, SINGLE, ALL
+}
diff --git a/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/MybatisPlusGeneratorConfig.java b/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/MybatisPlusGeneratorConfig.java
new file mode 100644
index 0000000..768085c
--- /dev/null
+++ b/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/MybatisPlusGeneratorConfig.java
@@ -0,0 +1,35 @@
+
+
+package net.jjjerp.generator.config;
+
+import com.baomidou.mybatisplus.generator.config.GlobalConfig;
+import com.baomidou.mybatisplus.generator.config.PackageConfig;
+import com.baomidou.mybatisplus.generator.config.StrategyConfig;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.springframework.boot.context.properties.NestedConfigurationProperty;
+
+/**
+ * mybatisplus相关配置
+ **/
+@Data
+@Accessors(chain = true)
+public class MybatisPlusGeneratorConfig {
+ /**
+ * 全局配置
+ */
+ @NestedConfigurationProperty
+ private GlobalConfig globalConfig = new GlobalConfig();
+
+ /**
+ * 包配置
+ */
+ @NestedConfigurationProperty
+ private PackageConfig packageConfig = new PackageConfig();
+
+ /**
+ * 策略配置
+ */
+ private StrategyConfig strategyConfig = new StrategyConfig();
+
+}
diff --git a/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/ProjectConfig.java b/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/ProjectConfig.java
new file mode 100644
index 0000000..ecc8733
--- /dev/null
+++ b/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/ProjectConfig.java
@@ -0,0 +1,48 @@
+
+
+package net.jjjerp.generator.config;
+
+import net.jjjerp.generator.constant.GeneratorConstant;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * 项目信息配置
+ **/
+@Data
+@Accessors(chain = true)
+public class ProjectConfig {
+
+ /**
+ * 分页参数后缀
+ */
+ private String pageParamSuffix = GeneratorConstant.PAGE_PARAM;
+ /**
+ * QueryVo后缀
+ */
+ private String queryVoSuffix = GeneratorConstant.QUERY_VO;
+ /**
+ * 分页参数父类全称,带包名
+ */
+ private String superPageParamClass = GeneratorConstant.SUPER_PAGE_PARAM_CLASS;
+ /**
+ * 分页对象类全称,带包名
+ */
+ private String pagingClass = GeneratorConstant.PAGING_CLASS;
+ /**
+ * 分页信息类全称,带包名
+ */
+ private String pageInfoClass = GeneratorConstant.PAGE_INFO_CLASS;
+ /**
+ * 分页排序参数父类全称,带包名
+ */
+ private String superPageOrderParamClass = GeneratorConstant.SUPER_PAGE_ORDER_PARAM_CLASS;
+ /**
+ * 公共id参数类全称,带包名
+ */
+ private String idParamClass = GeneratorConstant.ID_PARAM_CLASS;
+ /**
+ * 公共结果类全称,带包名
+ */
+ private String apiResultClass = GeneratorConstant.API_RESULT_CLASS;
+}
diff --git a/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/TableConfig.java b/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/TableConfig.java
new file mode 100644
index 0000000..be4fa15
--- /dev/null
+++ b/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/TableConfig.java
@@ -0,0 +1,25 @@
+
+
+package net.jjjerp.generator.config;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * 生成的表信息配置
+ **/
+@Data
+@Accessors(chain = true)
+public class TableConfig {
+
+ /**
+ * 生成的表名称
+ */
+ private String tableName;
+
+ /**
+ * 主键数据库列名称
+ */
+ private String pkIdName = "id";
+
+}
diff --git a/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/query/SpringBootJjjMySqlQuery.java b/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/query/SpringBootJjjMySqlQuery.java
new file mode 100644
index 0000000..06af0bf
--- /dev/null
+++ b/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/query/SpringBootJjjMySqlQuery.java
@@ -0,0 +1,17 @@
+
+
+package net.jjjerp.generator.config.query;
+
+import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
+
+/**
+ * MySQL代码生成查询是否为空的列
+ **/
+public class SpringBootJjjMySqlQuery extends MySqlQuery {
+
+ @Override
+ public String[] fieldCustom() {
+ return new String[]{"null", "default"};
+ }
+
+}
diff --git a/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/query/SpringBootJjjSqlServerQuery.java b/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/query/SpringBootJjjSqlServerQuery.java
new file mode 100644
index 0000000..bed0a22
--- /dev/null
+++ b/jjj_erp/generator/src/main/java/net/jjjerp/generator/config/query/SpringBootJjjSqlServerQuery.java
@@ -0,0 +1,27 @@
+
+
+package net.jjjerp.generator.config.query;
+
+import com.baomidou.mybatisplus.generator.config.querys.SqlServerQuery;
+
+/**
+ * SQLServer自定义生成器查询SQL
+ **/
+public class SpringBootJjjSqlServerQuery extends SqlServerQuery {
+
+ /**
+ * fix mybatisplus3.3.1 SQLServer SQL过滤表,TABLE_NAME报错问题
+ * @return
+ */
+ @Override
+ public String tablesSql() {
+ return "select TABLE_NAME,COMMENTS from (" +
+ " select cast(so.name as varchar(500)) as TABLE_NAME, " +
+ " cast(sep.value as varchar(500)) as COMMENTS from sysobjects so " +
+ " left JOIN sys.extended_properties sep on sep.major_id=so.id and sep.minor_id=0 " +
+ " where (xtype='U' or xtype='v')" +
+ ") tb " +
+ "where 1 = 1 ";
+
+ }
+}
diff --git a/jjj_erp/generator/src/main/java/net/jjjerp/generator/constant/GeneratorConstant.java b/jjj_erp/generator/src/main/java/net/jjjerp/generator/constant/GeneratorConstant.java
new file mode 100644
index 0000000..5fdf257
--- /dev/null
+++ b/jjj_erp/generator/src/main/java/net/jjjerp/generator/constant/GeneratorConstant.java
@@ -0,0 +1,124 @@
+
+
+package net.jjjerp.generator.constant;
+
+import java.io.File;
+
+/**
+ * 生成器常量
+ **/
+public interface GeneratorConstant {
+
+ /**
+ * 用户目录
+ */
+ String USER_DIR = "user.dir";
+ /**
+ * java目录 src/main/java
+ */
+ String JAVA_DIR = File.separator + "src" + File.separator + "main" + File.separator + "java";
+ /**
+ * resources目录 src/main/resources
+ */
+ String RESOURCES_DIR = File.separator + "src" + File.separator + "main" + File.separator + "resources";
+ /**
+ * mapper目录 src/main/resources/mapper
+ */
+ String MAPPER_DIR = RESOURCES_DIR + File.separator + "mapper";
+ /**
+ * 参数
+ */
+ String PARAM = "param";
+ /**
+ * 分页参数
+ */
+ String PAGE_PARAM = "PageParam";
+ /**
+ * VO
+ */
+ String VO = "vo";
+ /**
+ * 查询VO
+ */
+ String QUERY_VO = "QueryVo";
+ /**
+ * Service
+ */
+ String SERVICE = "Service";
+ /**
+ * Mapper
+ */
+ String MAPPER = "Mapper";
+ /**
+ * Mapper XML template路径
+ */
+ String MAPPER_XML_TEMPLATE_PATH = File.separator + "templates" + File.separator + "mapper.xml.vm";
+ /**
+ * 分页参数 template路径
+ */
+ String PAGE_PARAM_TEMPLATE_PATH = File.separator + "templates" + File.separator + "pageParam.java.vm";
+ /**
+ * 查询VO template路径
+ */
+ String QUERY_VO_TEMPLATE_PATH = File.separator + "templates" + File.separator + "queryVo.java.vm";
+ /**
+ * 乐观锁属性名称
+ */
+ String VERSION = "version";
+ /**
+ * 逻辑删除属性名称
+ */
+ String DELETED = "deleted";
+ /**
+ * Service名称
+ */
+ String SERVICE_NAME = "%sService";
+ /**
+ * 自定义继承的Entity类全称,带包名
+ */
+ String SUPER_ENTITY_CLASS = "net.jjjerp.framework.common.entity.BaseEntity";
+ /**
+ * 自定义继承的Controller类全称,带包名
+ */
+ String SUPER_CONTROLLER_CLASS = "net.jjjerp.framework.common.controller.BaseController";
+ /**
+ * 自定义继承的Service类全称,带包名
+ */
+ String SUPER_SERVICE_CLASS = "net.jjjerp.framework.common.service.BaseService";
+ /**
+ * 自定义继承的ServiceImpl类全称,带包名
+ */
+ String SUPER_SERVICE_IMPL_CLASS = "net.jjjerp.framework.common.service.impl.BaseServiceImpl";
+ /**
+ * 分页参数父类全称,带包名
+ */
+ String SUPER_PAGE_PARAM_CLASS = "net.jjjerp.framework.core.pagination.BasePageParam";
+ /**
+ * 分页排序参数父类全称,带包名
+ */
+ String SUPER_PAGE_ORDER_PARAM_CLASS = "net.jjjerp.framework.core.pagination.BasePageOrderParam";
+ /**
+ * 公共id参数类全称,带包名
+ */
+ String ID_PARAM_CLASS = "net.jjjerp.framework.common.param.IdParam";
+ /**
+ * 分页对象类全称,带包名
+ */
+ String PAGING_CLASS = "net.jjjerp.framework.core.pagination.Paging";
+ /**
+ * 分页信息类全称,带包名
+ */
+ String PAGE_INFO_CLASS = "net.jjjerp.framework.core.pagination.PageInfo";
+ /**
+ * 公共结果类全称,带包名
+ */
+ String API_RESULT_CLASS = "net.jjjerp.framework.common.api.ApiResult";
+ /**
+ * 分组验证Add.class类路径
+ */
+ String VALIDATOR_ADD_PACKAGE = "net.jjjerp.framework.core.validator.groups.Add";
+ /**
+ * 分组验证Update.class类路径
+ */
+ String VALIDATOR_UPDATE_PACKAGE = "net.jjjerp.framework.core.validator.groups.Update";
+}
diff --git a/jjj_erp/generator/src/main/java/net/jjjerp/generator/exception/GeneratorException.java b/jjj_erp/generator/src/main/java/net/jjjerp/generator/exception/GeneratorException.java
new file mode 100644
index 0000000..0d87957
--- /dev/null
+++ b/jjj_erp/generator/src/main/java/net/jjjerp/generator/exception/GeneratorException.java
@@ -0,0 +1,25 @@
+
+
+package net.jjjerp.generator.exception;
+
+import net.jjjerp.framework.common.api.ApiCode;
+import net.jjjerp.framework.common.exception.SpringBootJjjException;
+
+/**
+ * 代码生成异常
+ */
+public class GeneratorException extends SpringBootJjjException {
+ private static final long serialVersionUID = 2556853577480934761L;
+
+ public GeneratorException(String message) {
+ super(message);
+ }
+
+ public GeneratorException(Integer errorCode, String message) {
+ super(errorCode, message);
+ }
+
+ public GeneratorException(ApiCode apiCode) {
+ super(apiCode);
+ }
+}
diff --git a/jjj_erp/generator/src/main/java/net/jjjerp/generator/properties/GeneratorProperties.java b/jjj_erp/generator/src/main/java/net/jjjerp/generator/properties/GeneratorProperties.java
new file mode 100644
index 0000000..78c2240
--- /dev/null
+++ b/jjj_erp/generator/src/main/java/net/jjjerp/generator/properties/GeneratorProperties.java
@@ -0,0 +1,118 @@
+
+
+package net.jjjerp.generator.properties;
+
+import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
+import net.jjjerp.generator.config.GeneratorConfig;
+import net.jjjerp.generator.config.MybatisPlusGeneratorConfig;
+import net.jjjerp.generator.config.ProjectConfig;
+import net.jjjerp.generator.config.TableConfig;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.NestedConfigurationProperty;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * spring-boot-jjj代码生成配置属性
+ **/
+@Data
+@Accessors(chain = true)
+@Component
+@ConfigurationProperties(prefix = "spring-boot-jjj.generator")
+public class GeneratorProperties {
+
+ /**
+ * Maven模块名称
+ */
+ private String mavenModuleName;
+
+ /**
+ * 业务模块名称
+ */
+ private String moduleName;
+
+ /**
+ * 生成的父包全路径名称
+ */
+ private String parentPackage;
+
+ /**
+ * 生成的类文件路径
+ */
+ private String parentPackagePath;
+
+ /**
+ * 开发人员名称
+ */
+ private String author;
+
+ /**
+ * 生成文件的输出目录,root: 表示当前项目根目录
+ */
+ private String outputDir;
+
+ /**
+ * 是否覆盖已有文件
+ */
+ private boolean fileOverride = false;
+
+ /**
+ * 表前缀
+ */
+ private List tablePrefix;
+
+ /**
+ * 表信息配置
+ */
+ @NestedConfigurationProperty
+ private List tableConfig = new ArrayList<>();
+
+ /**
+ * 数据库连接信息配置
+ */
+ @NestedConfigurationProperty
+ public DataSourceConfig dataSourceConfig = new DataSourceConfig();
+
+ /**
+ * 代码生成配置
+ */
+ @NestedConfigurationProperty
+ private GeneratorConfig generatorConfig = new GeneratorConfig();
+
+ /**
+ * mybatisplus相关配置
+ */
+ @NestedConfigurationProperty
+ private MybatisPlusGeneratorConfig mybatisPlusGeneratorConfig = new MybatisPlusGeneratorConfig();
+
+ /**
+ * 项目信息配置
+ */
+ @NestedConfigurationProperty
+ private ProjectConfig projectConfig = new ProjectConfig();
+
+
+ public GeneratorProperties addTable(String tableName) {
+ this.addTable(tableName, null);
+ return this;
+ }
+
+ public GeneratorProperties addTable(String tableName, String pkIdName) {
+ this.getTableConfig().add(new TableConfig().setTableName(tableName).setPkIdName(pkIdName));
+ return this;
+ }
+
+ public GeneratorProperties setTables(String... tableNames) {
+ if (tableNames == null) {
+ return this;
+ }
+ for (String tableName : tableNames) {
+ this.addTable(tableName);
+ }
+ return this;
+ }
+}
diff --git a/jjj_erp/generator/src/main/resources/application.yml b/jjj_erp/generator/src/main/resources/application.yml
new file mode 100644
index 0000000..b428b47
--- /dev/null
+++ b/jjj_erp/generator/src/main/resources/application.yml
@@ -0,0 +1,90 @@
+spring-boot-jjj:
+ generator:
+ # Maven模块名称
+ maven-module-name: example
+ # 生成的父包全路径名称
+ parent-package: com.example
+ # 业务模块名称
+ module-name: foorbar
+ # 表前缀
+ table-prefix:
+ # 生成的表名称,可配置多张表
+ table-config:
+ # 表名称
+ - table-name: foo_bar
+ # 主键列名称
+ pk-id-name: id
+ # 开发人员名称
+ author: jjjerp
+ # 是否覆盖已有文件
+ file-override: true
+ # 生成文件的输出目录,如果为空: 表示当前项目根目录
+ output-dir:
+ # 数据源配置
+ data-source-config:
+ # 数据库类型
+ db-type: MYSQL
+ # 数据库连接用户名
+ username: root
+ # 数据库连接密码
+ password: root
+ # 驱动URL
+ driver-name: com.mysql.jdbc.Driver
+ # 驱动URL
+ url: jdbc:mysql://localhost:3306/jjjerp?useUnicode=true&characterEncoding=UTF-8&useSSL=false
+ # 代码生成配置
+ generator-config:
+ # 代码生成策略 SIMPLE:生成最基本的代码,NORMAL:生成普通代码, ALL:生成所有的代码
+ generator-strategy: ALL
+ # 是否生成实体类
+ generator-entity: true
+ # 是否生成控制器
+ generator-controller: true
+ # 是否生成service接口
+ generator-service: true
+ # 是否生成service实现类
+ generator-service-impl: true
+ # 是否生成Mapper
+ generator-mapper: true
+ # 是否生成Mapper XML
+ generator-mapper-xml: true
+ # 是否生成查询参数
+ generator-page-param: true
+ # 是否生成查询VO
+ generator-query-vo: true
+ # 是否生成Shiro RequiresPermissions 注解
+ requires-permissions: true
+ # 分页列表查询是否排序 true:有排序参数/false:无
+ page-list-order: true
+ # 是否生成validation校验,true:生成/false:不生成
+ param-validation: true
+ # mybatisplus配置
+ mybatis-plus-generator-config:
+ global-config:
+ # 是否打开输出目录
+ open: false
+ # 开启 swagger2 模式
+ swagger2: true
+ # 指定生成的主键的ID类型
+ id-type: AUTO
+ # 时间类型对应策略
+ date-type: ONLY_DATE
+ strategy-config:
+ # 数据库表映射到实体的命名策略
+ naming: underline_to_camel
+ # 数据库表字段映射到实体的命名策略
+ column-naming: underline_to_camel
+ # 实体】是否为lombok模型
+ entity-lombok-model: true
+ # RestController
+ rest-controller-style: true
+ # 自定义基础的Entity类,公共字段
+ super-entity-columns:
+ # 表填充字段
+ table-fill-list:
+ # 驼峰转连字符
+ controller-mapping-hyphenstyle: true
+ # 乐观锁属性名称
+ version-field-name: version
+ # 逻辑删除属性名称
+ logic-delete-field-name: deleted
\ No newline at end of file
diff --git a/jjj_erp/generator/src/main/resources/templates/controller.java.vm b/jjj_erp/generator/src/main/resources/templates/controller.java.vm
new file mode 100644
index 0000000..c61b2dd
--- /dev/null
+++ b/jjj_erp/generator/src/main/resources/templates/controller.java.vm
@@ -0,0 +1,162 @@
+package ${package.Controller};
+
+import ${package.Entity}.${entity};
+import ${package.Service}.${table.serviceName};
+import lombok.extern.slf4j.Slf4j;
+#if(${cfg.generatorStrategy} != 'SIMPLE')
+#if(${cfg.generatorPageParam})
+import ${cfg.pageParamClass};
+#end
+#if(${superControllerClassPackage})
+import ${superControllerClassPackage};
+#end
+#if(${cfg.generatorQueryVo})
+import ${cfg.queryVoClass};
+#end
+import ${cfg.apiResultClass};
+import ${cfg.pagingClass};
+import ${cfg.idParamClass};
+#if(${cfg.operationLog})
+import net.jjjerp.framework.log.annotation.Module;
+import net.jjjerp.framework.log.annotation.OperationLog;
+import net.jjjerp.framework.log.enums.OperationLogType;
+#end
+#if(${cfg.paramValidation})
+import ${cfg.validatorAddPackage};
+import ${cfg.validatorUpdatePackage};
+import org.springframework.validation.annotation.Validated;
+#end
+#if(${cfg.requiresPermissions})
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+#end
+#end
+#if(${swagger2})
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+#end
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * $!{table.comment} 控制器
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+@Slf4j
+#if(${restControllerStyle})
+@RestController
+#else
+@Controller
+#end
+@RequestMapping("/${cfg.entityObjectName}")
+#if(${cfg.operationLog})
+@Module("${cfg.module}")
+#end
+#if(${cfg.swaggerTags})
+@Api(value = "$!{table.comment}API", tags = {"$!{table.comment}"})
+#else
+@Api("$!{table.comment}API")
+#end
+#if(${kotlin})
+class ${table.controllerName}#if(${superControllerClass}) : ${superControllerClass}()#end
+
+#else
+#if(${superControllerClass})
+public class ${table.controllerName} extends ${superControllerClass} {
+#else
+public class ${table.controllerName} {
+#end
+
+ @Autowired
+ private ${table.serviceName} ${cfg.serviceObjectName};
+
+#if(${cfg.generatorStrategy} != 'SIMPLE')
+ /**
+ * 添加$!{table.comment}
+ */
+ @PostMapping("/add")
+#if(${cfg.requiresPermissions})
+ //@RequiresPermissions("$!{cfg.colonTableName}:add")
+#end
+#if(${cfg.operationLog})
+ @OperationLog(name = "添加$!{table.comment}", type = OperationLogType.ADD)
+#end
+ @ApiOperation(value = "添加$!{table.comment}", response = ApiResult.class)
+ public ApiResult add${entity}(#if(${cfg.paramValidation})@Validated(Add.class) #end@RequestBody ${entity} ${cfg.entityObjectName}) throws Exception {
+ boolean flag = ${cfg.serviceObjectName}.save${entity}(${cfg.entityObjectName});
+ return ApiResult.result(flag);
+ }
+
+ /**
+ * 修改$!{table.comment}
+ */
+ @PostMapping("/update")
+#if(${cfg.requiresPermissions})
+ //@RequiresPermissions("$!{cfg.colonTableName}:update")
+#end
+#if(${cfg.operationLog})
+ @OperationLog(name = "修改$!{table.comment}", type = OperationLogType.UPDATE)
+#end
+ @ApiOperation(value = "修改$!{table.comment}", response = ApiResult.class)
+ public ApiResult update${entity}(#if(${cfg.paramValidation})@Validated(Update.class) #end@RequestBody ${entity} ${cfg.entityObjectName}) throws Exception {
+ boolean flag = ${cfg.serviceObjectName}.update${entity}(${cfg.entityObjectName});
+ return ApiResult.result(flag);
+ }
+
+ /**
+ * 删除$!{table.comment}
+ */
+ @PostMapping("/delete/{id}")
+#if(${cfg.requiresPermissions})
+ //@RequiresPermissions("$!{cfg.colonTableName}:delete")
+#end
+#if(${cfg.operationLog})
+ @OperationLog(name = "删除$!{table.comment}", type = OperationLogType.DELETE)
+#end
+ @ApiOperation(value = "删除$!{table.comment}", response = ApiResult.class)
+ public ApiResult delete${entity}(@PathVariable("id") Long id) throws Exception {
+ boolean flag = ${cfg.serviceObjectName}.delete${entity}(id);
+ return ApiResult.result(flag);
+ }
+
+ /**
+ * 获取$!{table.comment}详情
+ */
+ @GetMapping("/info/{id}")
+#if(${cfg.requiresPermissions})
+ //@RequiresPermissions("$!{cfg.colonTableName}:info")
+#end
+#if(${cfg.operationLog})
+ @OperationLog(name = "$!{table.comment}详情", type = OperationLogType.INFO)
+#end
+ @ApiOperation(value = "$!{table.comment}详情", response = ${entity}${cfg.queryVo}.class)
+ public ApiResult<${entity}${cfg.queryVo}> get${entity}(@PathVariable("id") Long id) throws Exception {
+#if(${cfg.generatorStrategy} == 'SINGLE')
+ ${entity}${cfg.queryVo} ${cfg.entityObjectName}${cfg.queryVo} = ${cfg.serviceObjectName}.getById(id);
+#else
+ ${entity}${cfg.queryVo} ${cfg.entityObjectName}${cfg.queryVo} = ${cfg.serviceObjectName}.get${entity}ById(id);
+#end
+ return ApiResult.ok(${cfg.entityObjectName}${cfg.queryVo});
+ }
+
+ /**
+ * $!{table.comment}分页列表
+ */
+ @PostMapping("/getPageList")
+#if(${cfg.requiresPermissions})
+ //@RequiresPermissions("$!{cfg.colonTableName}:page")
+#end
+#if(${cfg.operationLog})
+ @OperationLog(name = "$!{table.comment}分页列表", type = OperationLogType.PAGE)
+#end
+ @ApiOperation(value = "$!{table.comment}分页列表", response = ${entity}${cfg.queryVo}.class)
+ public ApiResult> get${entity}PageList(#if(${cfg.paramValidation})@Validated #end@RequestBody ${entity}${cfg.pageParam} ${cfg.entityObjectName}${cfg.pageParam}) throws Exception {
+ Paging<${entity}${cfg.queryVo}> paging = ${cfg.entityObjectName}Service.get${entity}PageList(${cfg.entityObjectName}${cfg.pageParam});
+ return ApiResult.ok(paging);
+ }
+#end
+
+}
+
+#end
\ No newline at end of file
diff --git a/jjj_erp/generator/src/main/resources/templates/entity.java.vm b/jjj_erp/generator/src/main/resources/templates/entity.java.vm
new file mode 100644
index 0000000..abb94e2
--- /dev/null
+++ b/jjj_erp/generator/src/main/resources/templates/entity.java.vm
@@ -0,0 +1,95 @@
+package ${package.Entity};
+
+#foreach($pkg in ${table.importPackages})
+import ${pkg};
+#end
+#if(${swagger2})
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+#end
+#if(${entityLombokModel})
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+#end
+#if(${cfg.paramValidation})
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import ${cfg.validatorUpdatePackage};
+#end
+import java.io.Serializable;
+
+/**
+ * $!{table.comment}
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+#if(${entityLombokModel})
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+#end
+#if(${table.convert})
+@TableName("${table.name}")
+#end
+#if(${swagger2})
+@ApiModel(value = "${entity}对象")
+#end
+public class ${entity} implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+## ---------- BEGIN 字段循环遍历 ----------
+#foreach($field in ${table.fields})
+## 如果没有默认值,且不为空,则设置非空校验
+#if(${cfg.paramValidation} && ${field.customMap.null} == 'NO' && !${field.customMap.default})
+ #if(${field.keyIdentityFlag})
+ @NotNull(message = "${field.propertyName}不能为空", groups = {Update.class})
+ #elseif(${field.propertyType} == 'String')
+ @NotBlank(message = "${field.comment}不能为空")
+ #else
+ @NotNull(message = "${field.comment}不能为空")
+ #end
+#end
+#if("$!field.comment" != "")
+ #if(${swagger2})
+ @ApiModelProperty("${field.comment}")
+ #else
+/**
+ * ${field.comment}
+ */
+ #end
+#end
+#if(${field.keyFlag})
+## 主键
+#if(${field.keyIdentityFlag})
+ @TableId(value = "${field.name}", type = IdType.AUTO)
+#elseif(!$null.isNull(${idType}) && "$!idType" != "")
+## 设置主键注解
+ @TableId(value = "${field.name}", type = IdType.${idType})
+#elseif(${field.convert})
+ @TableId("${field.name}")
+#end
+## 普通字段
+#elseif(${field.fill})
+## ----- 存在字段填充设置 -----
+#if(${field.convert})
+ @TableField(value = "${field.name}", fill = FieldFill.${field.fill})
+#else
+ @TableField(fill = FieldFill.${field.fill})
+#end
+#elseif(${field.convert})
+ @TableField("${field.name}")
+#end
+## 乐观锁注解
+#if(${versionFieldName}==${field.name})
+ @Version
+#end
+## 逻辑删除注解
+#if(${logicDeleteFieldName}==${field.name})
+ @TableLogic
+#end
+ private ${field.propertyType} ${field.propertyName};
+
+#end
+}
diff --git a/jjj_erp/generator/src/main/resources/templates/mapper.java.vm b/jjj_erp/generator/src/main/resources/templates/mapper.java.vm
new file mode 100644
index 0000000..3131cbe
--- /dev/null
+++ b/jjj_erp/generator/src/main/resources/templates/mapper.java.vm
@@ -0,0 +1,53 @@
+package ${package.Mapper};
+
+import ${superMapperClassPackage};
+import ${package.Entity}.${entity};
+#if(${cfg.generatorPageParam})
+import ${cfg.pageParamClass};
+#end
+#if(${cfg.generatorQueryVo})
+import ${cfg.queryVoClass};
+#end
+
+import org.springframework.stereotype.Repository;
+
+#if(${cfg.generatorStrategy} != 'SIMPLE')
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+import java.io.Serializable;
+#end
+
+/**
+ * $!{table.comment} Mapper 接口
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+#if(${kotlin})
+interface ${table.mapperName} : ${superMapperClass}<${entity}>
+#else
+@Repository
+public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {
+
+#if(${cfg.generatorStrategy} == 'ALL')
+ /**
+ * 根据ID获取查询对象
+ *
+ * @param id
+ * @return
+ */
+ ${entity}${cfg.queryVo} get${entity}ById(Serializable id);
+
+ /**
+ * 获取分页对象
+ *
+ * @param page
+ * @param ${cfg.entityObjectName}QueryParam
+ * @return
+ */
+ IPage<${entity}${cfg.queryVo}> get${entity}PageList(@Param("page") Page page, @Param("param") ${entity}${cfg.pageParam} ${cfg.entityObjectName}${cfg.pageParam});
+#end
+
+}
+#end
diff --git a/jjj_erp/generator/src/main/resources/templates/mapper.xml.vm b/jjj_erp/generator/src/main/resources/templates/mapper.xml.vm
new file mode 100644
index 0000000..b46f3ed
--- /dev/null
+++ b/jjj_erp/generator/src/main/resources/templates/mapper.xml.vm
@@ -0,0 +1,51 @@
+
+
+
+
+#if(${enableCache})
+
+
+
+#end
+#if(${baseResultMap})
+
+
+#foreach($field in ${table.fields})
+#if(${field.keyFlag})##生成主键排在第一位
+
+#end
+#end
+#foreach($field in ${table.commonFields})##生成公共字段
+
+#end
+#foreach($field in ${table.fields})
+#if(!${field.keyFlag})##生成普通字段
+
+#end
+#end
+
+
+#end
+#if(${cfg.generatorStrategy} == 'ALL')
+
+
+#foreach($field in ${table.commonFields})
+ ${field.name},
+#end
+ ${table.fieldNames}
+
+
+
+
+
+
+#end
+
diff --git a/jjj_erp/generator/src/main/resources/templates/pageParam.java.vm b/jjj_erp/generator/src/main/resources/templates/pageParam.java.vm
new file mode 100644
index 0000000..7574529
--- /dev/null
+++ b/jjj_erp/generator/src/main/resources/templates/pageParam.java.vm
@@ -0,0 +1,31 @@
+package ${cfg.pageParamPackage};
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+#if(${cfg.pageListOrder})
+import ${cfg.superPageOrderParamClass};
+#else
+import ${cfg.superPageParamClass};
+#end
+
+/**
+ *
+ * $!{table.comment} 分页参数对象
+ *
+ *
+ * @author ${author}
+ * @date ${date}
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "$!{table.comment}分页参数")
+#if(${cfg.pageListOrder})
+public class ${entity}${cfg.pageParam} extends BasePageOrderParam {
+#else
+public class ${entity}${cfg.pageParam} extends BasePageParam {
+#end
+ private static final long serialVersionUID = 1L;
+}
diff --git a/jjj_erp/generator/src/main/resources/templates/queryVo.java.vm b/jjj_erp/generator/src/main/resources/templates/queryVo.java.vm
new file mode 100644
index 0000000..027d7fa
--- /dev/null
+++ b/jjj_erp/generator/src/main/resources/templates/queryVo.java.vm
@@ -0,0 +1,46 @@
+package ${cfg.queryVoPackage};
+
+#if(${swagger2})
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+#end
+#if(${entityLombokModel})
+import lombok.Data;
+import lombok.experimental.Accessors;
+#end
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *
+ * $!{table.comment} 查询结果对象
+ *
+ *
+ * @author ${author}
+ * @date ${date}
+ */
+#if(${entityLombokModel})
+@Data
+@Accessors(chain = true)
+#end
+@ApiModel(value = "${entity}${cfg.queryVo}对象")
+public class ${entity}${cfg.queryVo} implements Serializable {
+ private static final long serialVersionUID = 1L;
+## ---------- BEGIN 字段循环遍历 ----------
+#foreach($field in ${table.fields})
+
+#if(${field.keyFlag})
+#set($keyPropertyName=${field.propertyName})
+#end
+#if("$!field.comment" != "")
+ #if(${swagger2})
+ @ApiModelProperty("${field.comment}")
+ #else
+/**
+ * ${field.comment}
+ */
+ #end
+#end
+ private ${field.propertyType} ${field.propertyName};
+#end
+}
\ No newline at end of file
diff --git a/jjj_erp/generator/src/main/resources/templates/service.java.vm b/jjj_erp/generator/src/main/resources/templates/service.java.vm
new file mode 100644
index 0000000..fc04575
--- /dev/null
+++ b/jjj_erp/generator/src/main/resources/templates/service.java.vm
@@ -0,0 +1,23 @@
+package ${package.Service};
+
+import ${package.Entity}.${entity};
+#if(${cfg.generatorPageParam})
+import ${cfg.pageParamClass};
+#end
+import ${superServiceClassPackage};
+#if(${cfg.generatorQueryVo})
+import ${cfg.queryVoClass};
+#end
+#if(${cfg.generatorStrategy} != 'SIMPLE')
+import ${cfg.pagingClass};
+#end
+
+/**
+ * $!{table.comment} 服务类
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {
+
+}
diff --git a/jjj_erp/generator/src/main/resources/templates/serviceImpl.java.vm b/jjj_erp/generator/src/main/resources/templates/serviceImpl.java.vm
new file mode 100644
index 0000000..be9e073
--- /dev/null
+++ b/jjj_erp/generator/src/main/resources/templates/serviceImpl.java.vm
@@ -0,0 +1,41 @@
+package ${package.ServiceImpl};
+
+import ${package.Entity}.${entity};
+import ${package.Mapper}.${table.mapperName};
+import ${package.Service}.${table.serviceName};
+#if(${cfg.generatorPageParam})
+import ${cfg.pageParamClass};
+#end
+#if(${cfg.generatorQueryVo})
+import ${cfg.queryVoClass};
+#end
+#if(${cfg.generatorStrategy} == 'SINGLE')
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+#end
+import ${superServiceImplClassPackage};
+#if(${cfg.generatorStrategy} != 'SIMPLE')
+import ${cfg.pagingClass};
+import ${cfg.pageInfoClass};
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.transaction.annotation.Transactional;
+#end
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * $!{table.comment} 服务实现类
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+@Slf4j
+@Service
+public class ${table.serviceImplName} extends BaseServiceImpl<${table.mapperName}, ${entity}> implements ${entity}Service {
+
+ @Autowired
+ private ${table.mapperName} ${cfg.mapperObjectName};
+
+}
diff --git a/jjj_erp/generator/src/test/java/net/jjjerp/generator/test/GeneratorPropertiesTest.java b/jjj_erp/generator/src/test/java/net/jjjerp/generator/test/GeneratorPropertiesTest.java
new file mode 100644
index 0000000..ca728eb
--- /dev/null
+++ b/jjj_erp/generator/src/test/java/net/jjjerp/generator/test/GeneratorPropertiesTest.java
@@ -0,0 +1,31 @@
+
+
+package net.jjjerp.generator.test;
+
+import net.jjjerp.generator.CodeGenerator;
+import net.jjjerp.generator.properties.GeneratorProperties;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * 生成代码配置文件读取测试
+ **/
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = GeneratorTestApplication.class)
+public class GeneratorPropertiesTest {
+
+ @Autowired
+ private GeneratorProperties generatorProperties;
+
+ @Autowired
+ private CodeGenerator codeGenerator;
+
+ @Test
+ public void test(){
+// codeGenerator.generator(generatorProperties);
+ }
+
+}
diff --git a/jjj_erp/generator/src/test/java/net/jjjerp/generator/test/GeneratorTestApplication.java b/jjj_erp/generator/src/test/java/net/jjjerp/generator/test/GeneratorTestApplication.java
new file mode 100644
index 0000000..cd55096
--- /dev/null
+++ b/jjj_erp/generator/src/test/java/net/jjjerp/generator/test/GeneratorTestApplication.java
@@ -0,0 +1,9 @@
+
+
+package net.jjjerp.generator.test;
+
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication(scanBasePackages = "net.jjjerp.generator")
+public class GeneratorTestApplication {
+}
diff --git a/jjj_erp/generator/target/classes/application.yml b/jjj_erp/generator/target/classes/application.yml
new file mode 100644
index 0000000..b428b47
--- /dev/null
+++ b/jjj_erp/generator/target/classes/application.yml
@@ -0,0 +1,90 @@
+spring-boot-jjj:
+ generator:
+ # Maven模块名称
+ maven-module-name: example
+ # 生成的父包全路径名称
+ parent-package: com.example
+ # 业务模块名称
+ module-name: foorbar
+ # 表前缀
+ table-prefix:
+ # 生成的表名称,可配置多张表
+ table-config:
+ # 表名称
+ - table-name: foo_bar
+ # 主键列名称
+ pk-id-name: id
+ # 开发人员名称
+ author: jjjerp
+ # 是否覆盖已有文件
+ file-override: true
+ # 生成文件的输出目录,如果为空: 表示当前项目根目录
+ output-dir:
+ # 数据源配置
+ data-source-config:
+ # 数据库类型
+ db-type: MYSQL
+ # 数据库连接用户名
+ username: root
+ # 数据库连接密码
+ password: root
+ # 驱动URL
+ driver-name: com.mysql.jdbc.Driver
+ # 驱动URL
+ url: jdbc:mysql://localhost:3306/jjjerp?useUnicode=true&characterEncoding=UTF-8&useSSL=false
+ # 代码生成配置
+ generator-config:
+ # 代码生成策略 SIMPLE:生成最基本的代码,NORMAL:生成普通代码, ALL:生成所有的代码
+ generator-strategy: ALL
+ # 是否生成实体类
+ generator-entity: true
+ # 是否生成控制器
+ generator-controller: true
+ # 是否生成service接口
+ generator-service: true
+ # 是否生成service实现类
+ generator-service-impl: true
+ # 是否生成Mapper
+ generator-mapper: true
+ # 是否生成Mapper XML
+ generator-mapper-xml: true
+ # 是否生成查询参数
+ generator-page-param: true
+ # 是否生成查询VO
+ generator-query-vo: true
+ # 是否生成Shiro RequiresPermissions 注解
+ requires-permissions: true
+ # 分页列表查询是否排序 true:有排序参数/false:无
+ page-list-order: true
+ # 是否生成validation校验,true:生成/false:不生成
+ param-validation: true
+ # mybatisplus配置
+ mybatis-plus-generator-config:
+ global-config:
+ # 是否打开输出目录
+ open: false
+ # 开启 swagger2 模式
+ swagger2: true
+ # 指定生成的主键的ID类型
+ id-type: AUTO
+ # 时间类型对应策略
+ date-type: ONLY_DATE
+ strategy-config:
+ # 数据库表映射到实体的命名策略
+ naming: underline_to_camel
+ # 数据库表字段映射到实体的命名策略
+ column-naming: underline_to_camel
+ # 实体】是否为lombok模型
+ entity-lombok-model: true
+ # RestController
+ rest-controller-style: true
+ # 自定义基础的Entity类,公共字段
+ super-entity-columns:
+ # 表填充字段
+ table-fill-list:
+ # 驼峰转连字符
+ controller-mapping-hyphenstyle: true
+ # 乐观锁属性名称
+ version-field-name: version
+ # 逻辑删除属性名称
+ logic-delete-field-name: deleted
\ No newline at end of file
diff --git a/jjj_erp/generator/target/classes/net/jjjerp/generator/CodeGenerator$1.class b/jjj_erp/generator/target/classes/net/jjjerp/generator/CodeGenerator$1.class
new file mode 100644
index 0000000..2704826
Binary files /dev/null and b/jjj_erp/generator/target/classes/net/jjjerp/generator/CodeGenerator$1.class differ
diff --git a/jjj_erp/generator/target/classes/net/jjjerp/generator/CodeGenerator$2.class b/jjj_erp/generator/target/classes/net/jjjerp/generator/CodeGenerator$2.class
new file mode 100644
index 0000000..b392c3c
Binary files /dev/null and b/jjj_erp/generator/target/classes/net/jjjerp/generator/CodeGenerator$2.class differ
diff --git a/jjj_erp/generator/target/classes/net/jjjerp/generator/CodeGenerator$3.class b/jjj_erp/generator/target/classes/net/jjjerp/generator/CodeGenerator$3.class
new file mode 100644
index 0000000..7016f6a
Binary files /dev/null and b/jjj_erp/generator/target/classes/net/jjjerp/generator/CodeGenerator$3.class differ
diff --git a/jjj_erp/generator/target/classes/net/jjjerp/generator/CodeGenerator$4.class b/jjj_erp/generator/target/classes/net/jjjerp/generator/CodeGenerator$4.class
new file mode 100644
index 0000000..bb5e2c2
Binary files /dev/null and b/jjj_erp/generator/target/classes/net/jjjerp/generator/CodeGenerator$4.class differ
diff --git a/jjj_erp/generator/target/classes/net/jjjerp/generator/CodeGenerator.class b/jjj_erp/generator/target/classes/net/jjjerp/generator/CodeGenerator.class
new file mode 100644
index 0000000..6af4f21b
Binary files /dev/null and b/jjj_erp/generator/target/classes/net/jjjerp/generator/CodeGenerator.class differ
diff --git a/jjj_erp/generator/target/classes/net/jjjerp/generator/SpringBootJjjGenerator.class b/jjj_erp/generator/target/classes/net/jjjerp/generator/SpringBootJjjGenerator.class
new file mode 100644
index 0000000..58e62d9
Binary files /dev/null and b/jjj_erp/generator/target/classes/net/jjjerp/generator/SpringBootJjjGenerator.class differ
diff --git a/jjj_erp/generator/target/classes/net/jjjerp/generator/config/GeneratorConfig.class b/jjj_erp/generator/target/classes/net/jjjerp/generator/config/GeneratorConfig.class
new file mode 100644
index 0000000..d3644ca
Binary files /dev/null and b/jjj_erp/generator/target/classes/net/jjjerp/generator/config/GeneratorConfig.class differ
diff --git a/jjj_erp/generator/target/classes/net/jjjerp/generator/config/GeneratorStrategy.class b/jjj_erp/generator/target/classes/net/jjjerp/generator/config/GeneratorStrategy.class
new file mode 100644
index 0000000..7f88fe3
Binary files /dev/null and b/jjj_erp/generator/target/classes/net/jjjerp/generator/config/GeneratorStrategy.class differ
diff --git a/jjj_erp/generator/target/classes/net/jjjerp/generator/config/MybatisPlusGeneratorConfig.class b/jjj_erp/generator/target/classes/net/jjjerp/generator/config/MybatisPlusGeneratorConfig.class
new file mode 100644
index 0000000..d66eaf7
Binary files /dev/null and b/jjj_erp/generator/target/classes/net/jjjerp/generator/config/MybatisPlusGeneratorConfig.class differ
diff --git a/jjj_erp/generator/target/classes/net/jjjerp/generator/config/ProjectConfig.class b/jjj_erp/generator/target/classes/net/jjjerp/generator/config/ProjectConfig.class
new file mode 100644
index 0000000..ebe0b8b
Binary files /dev/null and b/jjj_erp/generator/target/classes/net/jjjerp/generator/config/ProjectConfig.class differ
diff --git a/jjj_erp/generator/target/classes/net/jjjerp/generator/config/TableConfig.class b/jjj_erp/generator/target/classes/net/jjjerp/generator/config/TableConfig.class
new file mode 100644
index 0000000..6953e5b
Binary files /dev/null and b/jjj_erp/generator/target/classes/net/jjjerp/generator/config/TableConfig.class differ
diff --git a/jjj_erp/generator/target/classes/net/jjjerp/generator/config/query/SpringBootJjjMySqlQuery.class b/jjj_erp/generator/target/classes/net/jjjerp/generator/config/query/SpringBootJjjMySqlQuery.class
new file mode 100644
index 0000000..3465dae
Binary files /dev/null and b/jjj_erp/generator/target/classes/net/jjjerp/generator/config/query/SpringBootJjjMySqlQuery.class differ
diff --git a/jjj_erp/generator/target/classes/net/jjjerp/generator/config/query/SpringBootJjjSqlServerQuery.class b/jjj_erp/generator/target/classes/net/jjjerp/generator/config/query/SpringBootJjjSqlServerQuery.class
new file mode 100644
index 0000000..22e4928
Binary files /dev/null and b/jjj_erp/generator/target/classes/net/jjjerp/generator/config/query/SpringBootJjjSqlServerQuery.class differ
diff --git a/jjj_erp/generator/target/classes/net/jjjerp/generator/constant/GeneratorConstant.class b/jjj_erp/generator/target/classes/net/jjjerp/generator/constant/GeneratorConstant.class
new file mode 100644
index 0000000..1507bbf
Binary files /dev/null and b/jjj_erp/generator/target/classes/net/jjjerp/generator/constant/GeneratorConstant.class differ
diff --git a/jjj_erp/generator/target/classes/net/jjjerp/generator/exception/GeneratorException.class b/jjj_erp/generator/target/classes/net/jjjerp/generator/exception/GeneratorException.class
new file mode 100644
index 0000000..fa278d2
Binary files /dev/null and b/jjj_erp/generator/target/classes/net/jjjerp/generator/exception/GeneratorException.class differ
diff --git a/jjj_erp/generator/target/classes/net/jjjerp/generator/properties/GeneratorProperties.class b/jjj_erp/generator/target/classes/net/jjjerp/generator/properties/GeneratorProperties.class
new file mode 100644
index 0000000..2cefdb8
Binary files /dev/null and b/jjj_erp/generator/target/classes/net/jjjerp/generator/properties/GeneratorProperties.class differ
diff --git a/jjj_erp/generator/target/classes/templates/controller.java.vm b/jjj_erp/generator/target/classes/templates/controller.java.vm
new file mode 100644
index 0000000..c61b2dd
--- /dev/null
+++ b/jjj_erp/generator/target/classes/templates/controller.java.vm
@@ -0,0 +1,162 @@
+package ${package.Controller};
+
+import ${package.Entity}.${entity};
+import ${package.Service}.${table.serviceName};
+import lombok.extern.slf4j.Slf4j;
+#if(${cfg.generatorStrategy} != 'SIMPLE')
+#if(${cfg.generatorPageParam})
+import ${cfg.pageParamClass};
+#end
+#if(${superControllerClassPackage})
+import ${superControllerClassPackage};
+#end
+#if(${cfg.generatorQueryVo})
+import ${cfg.queryVoClass};
+#end
+import ${cfg.apiResultClass};
+import ${cfg.pagingClass};
+import ${cfg.idParamClass};
+#if(${cfg.operationLog})
+import net.jjjerp.framework.log.annotation.Module;
+import net.jjjerp.framework.log.annotation.OperationLog;
+import net.jjjerp.framework.log.enums.OperationLogType;
+#end
+#if(${cfg.paramValidation})
+import ${cfg.validatorAddPackage};
+import ${cfg.validatorUpdatePackage};
+import org.springframework.validation.annotation.Validated;
+#end
+#if(${cfg.requiresPermissions})
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+#end
+#end
+#if(${swagger2})
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+#end
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * $!{table.comment} 控制器
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+@Slf4j
+#if(${restControllerStyle})
+@RestController
+#else
+@Controller
+#end
+@RequestMapping("/${cfg.entityObjectName}")
+#if(${cfg.operationLog})
+@Module("${cfg.module}")
+#end
+#if(${cfg.swaggerTags})
+@Api(value = "$!{table.comment}API", tags = {"$!{table.comment}"})
+#else
+@Api("$!{table.comment}API")
+#end
+#if(${kotlin})
+class ${table.controllerName}#if(${superControllerClass}) : ${superControllerClass}()#end
+
+#else
+#if(${superControllerClass})
+public class ${table.controllerName} extends ${superControllerClass} {
+#else
+public class ${table.controllerName} {
+#end
+
+ @Autowired
+ private ${table.serviceName} ${cfg.serviceObjectName};
+
+#if(${cfg.generatorStrategy} != 'SIMPLE')
+ /**
+ * 添加$!{table.comment}
+ */
+ @PostMapping("/add")
+#if(${cfg.requiresPermissions})
+ //@RequiresPermissions("$!{cfg.colonTableName}:add")
+#end
+#if(${cfg.operationLog})
+ @OperationLog(name = "添加$!{table.comment}", type = OperationLogType.ADD)
+#end
+ @ApiOperation(value = "添加$!{table.comment}", response = ApiResult.class)
+ public ApiResult add${entity}(#if(${cfg.paramValidation})@Validated(Add.class) #end@RequestBody ${entity} ${cfg.entityObjectName}) throws Exception {
+ boolean flag = ${cfg.serviceObjectName}.save${entity}(${cfg.entityObjectName});
+ return ApiResult.result(flag);
+ }
+
+ /**
+ * 修改$!{table.comment}
+ */
+ @PostMapping("/update")
+#if(${cfg.requiresPermissions})
+ //@RequiresPermissions("$!{cfg.colonTableName}:update")
+#end
+#if(${cfg.operationLog})
+ @OperationLog(name = "修改$!{table.comment}", type = OperationLogType.UPDATE)
+#end
+ @ApiOperation(value = "修改$!{table.comment}", response = ApiResult.class)
+ public ApiResult update${entity}(#if(${cfg.paramValidation})@Validated(Update.class) #end@RequestBody ${entity} ${cfg.entityObjectName}) throws Exception {
+ boolean flag = ${cfg.serviceObjectName}.update${entity}(${cfg.entityObjectName});
+ return ApiResult.result(flag);
+ }
+
+ /**
+ * 删除$!{table.comment}
+ */
+ @PostMapping("/delete/{id}")
+#if(${cfg.requiresPermissions})
+ //@RequiresPermissions("$!{cfg.colonTableName}:delete")
+#end
+#if(${cfg.operationLog})
+ @OperationLog(name = "删除$!{table.comment}", type = OperationLogType.DELETE)
+#end
+ @ApiOperation(value = "删除$!{table.comment}", response = ApiResult.class)
+ public ApiResult delete${entity}(@PathVariable("id") Long id) throws Exception {
+ boolean flag = ${cfg.serviceObjectName}.delete${entity}(id);
+ return ApiResult.result(flag);
+ }
+
+ /**
+ * 获取$!{table.comment}详情
+ */
+ @GetMapping("/info/{id}")
+#if(${cfg.requiresPermissions})
+ //@RequiresPermissions("$!{cfg.colonTableName}:info")
+#end
+#if(${cfg.operationLog})
+ @OperationLog(name = "$!{table.comment}详情", type = OperationLogType.INFO)
+#end
+ @ApiOperation(value = "$!{table.comment}详情", response = ${entity}${cfg.queryVo}.class)
+ public ApiResult<${entity}${cfg.queryVo}> get${entity}(@PathVariable("id") Long id) throws Exception {
+#if(${cfg.generatorStrategy} == 'SINGLE')
+ ${entity}${cfg.queryVo} ${cfg.entityObjectName}${cfg.queryVo} = ${cfg.serviceObjectName}.getById(id);
+#else
+ ${entity}${cfg.queryVo} ${cfg.entityObjectName}${cfg.queryVo} = ${cfg.serviceObjectName}.get${entity}ById(id);
+#end
+ return ApiResult.ok(${cfg.entityObjectName}${cfg.queryVo});
+ }
+
+ /**
+ * $!{table.comment}分页列表
+ */
+ @PostMapping("/getPageList")
+#if(${cfg.requiresPermissions})
+ //@RequiresPermissions("$!{cfg.colonTableName}:page")
+#end
+#if(${cfg.operationLog})
+ @OperationLog(name = "$!{table.comment}分页列表", type = OperationLogType.PAGE)
+#end
+ @ApiOperation(value = "$!{table.comment}分页列表", response = ${entity}${cfg.queryVo}.class)
+ public ApiResult> get${entity}PageList(#if(${cfg.paramValidation})@Validated #end@RequestBody ${entity}${cfg.pageParam} ${cfg.entityObjectName}${cfg.pageParam}) throws Exception {
+ Paging<${entity}${cfg.queryVo}> paging = ${cfg.entityObjectName}Service.get${entity}PageList(${cfg.entityObjectName}${cfg.pageParam});
+ return ApiResult.ok(paging);
+ }
+#end
+
+}
+
+#end
\ No newline at end of file
diff --git a/jjj_erp/generator/target/classes/templates/entity.java.vm b/jjj_erp/generator/target/classes/templates/entity.java.vm
new file mode 100644
index 0000000..abb94e2
--- /dev/null
+++ b/jjj_erp/generator/target/classes/templates/entity.java.vm
@@ -0,0 +1,95 @@
+package ${package.Entity};
+
+#foreach($pkg in ${table.importPackages})
+import ${pkg};
+#end
+#if(${swagger2})
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+#end
+#if(${entityLombokModel})
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+#end
+#if(${cfg.paramValidation})
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import ${cfg.validatorUpdatePackage};
+#end
+import java.io.Serializable;
+
+/**
+ * $!{table.comment}
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+#if(${entityLombokModel})
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+#end
+#if(${table.convert})
+@TableName("${table.name}")
+#end
+#if(${swagger2})
+@ApiModel(value = "${entity}对象")
+#end
+public class ${entity} implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+## ---------- BEGIN 字段循环遍历 ----------
+#foreach($field in ${table.fields})
+## 如果没有默认值,且不为空,则设置非空校验
+#if(${cfg.paramValidation} && ${field.customMap.null} == 'NO' && !${field.customMap.default})
+ #if(${field.keyIdentityFlag})
+ @NotNull(message = "${field.propertyName}不能为空", groups = {Update.class})
+ #elseif(${field.propertyType} == 'String')
+ @NotBlank(message = "${field.comment}不能为空")
+ #else
+ @NotNull(message = "${field.comment}不能为空")
+ #end
+#end
+#if("$!field.comment" != "")
+ #if(${swagger2})
+ @ApiModelProperty("${field.comment}")
+ #else
+/**
+ * ${field.comment}
+ */
+ #end
+#end
+#if(${field.keyFlag})
+## 主键
+#if(${field.keyIdentityFlag})
+ @TableId(value = "${field.name}", type = IdType.AUTO)
+#elseif(!$null.isNull(${idType}) && "$!idType" != "")
+## 设置主键注解
+ @TableId(value = "${field.name}", type = IdType.${idType})
+#elseif(${field.convert})
+ @TableId("${field.name}")
+#end
+## 普通字段
+#elseif(${field.fill})
+## ----- 存在字段填充设置 -----
+#if(${field.convert})
+ @TableField(value = "${field.name}", fill = FieldFill.${field.fill})
+#else
+ @TableField(fill = FieldFill.${field.fill})
+#end
+#elseif(${field.convert})
+ @TableField("${field.name}")
+#end
+## 乐观锁注解
+#if(${versionFieldName}==${field.name})
+ @Version
+#end
+## 逻辑删除注解
+#if(${logicDeleteFieldName}==${field.name})
+ @TableLogic
+#end
+ private ${field.propertyType} ${field.propertyName};
+
+#end
+}
diff --git a/jjj_erp/generator/target/classes/templates/mapper.java.vm b/jjj_erp/generator/target/classes/templates/mapper.java.vm
new file mode 100644
index 0000000..3131cbe
--- /dev/null
+++ b/jjj_erp/generator/target/classes/templates/mapper.java.vm
@@ -0,0 +1,53 @@
+package ${package.Mapper};
+
+import ${superMapperClassPackage};
+import ${package.Entity}.${entity};
+#if(${cfg.generatorPageParam})
+import ${cfg.pageParamClass};
+#end
+#if(${cfg.generatorQueryVo})
+import ${cfg.queryVoClass};
+#end
+
+import org.springframework.stereotype.Repository;
+
+#if(${cfg.generatorStrategy} != 'SIMPLE')
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+import java.io.Serializable;
+#end
+
+/**
+ * $!{table.comment} Mapper 接口
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+#if(${kotlin})
+interface ${table.mapperName} : ${superMapperClass}<${entity}>
+#else
+@Repository
+public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {
+
+#if(${cfg.generatorStrategy} == 'ALL')
+ /**
+ * 根据ID获取查询对象
+ *
+ * @param id
+ * @return
+ */
+ ${entity}${cfg.queryVo} get${entity}ById(Serializable id);
+
+ /**
+ * 获取分页对象
+ *
+ * @param page
+ * @param ${cfg.entityObjectName}QueryParam
+ * @return
+ */
+ IPage<${entity}${cfg.queryVo}> get${entity}PageList(@Param("page") Page page, @Param("param") ${entity}${cfg.pageParam} ${cfg.entityObjectName}${cfg.pageParam});
+#end
+
+}
+#end
diff --git a/jjj_erp/generator/target/classes/templates/mapper.xml.vm b/jjj_erp/generator/target/classes/templates/mapper.xml.vm
new file mode 100644
index 0000000..b46f3ed
--- /dev/null
+++ b/jjj_erp/generator/target/classes/templates/mapper.xml.vm
@@ -0,0 +1,51 @@
+
+
+
+
+#if(${enableCache})
+
+
+
+#end
+#if(${baseResultMap})
+
+
+#foreach($field in ${table.fields})
+#if(${field.keyFlag})##生成主键排在第一位
+
+#end
+#end
+#foreach($field in ${table.commonFields})##生成公共字段
+
+#end
+#foreach($field in ${table.fields})
+#if(!${field.keyFlag})##生成普通字段
+
+#end
+#end
+
+
+#end
+#if(${cfg.generatorStrategy} == 'ALL')
+
+
+#foreach($field in ${table.commonFields})
+ ${field.name},
+#end
+ ${table.fieldNames}
+
+
+
+
+
+
+#end
+
diff --git a/jjj_erp/generator/target/classes/templates/pageParam.java.vm b/jjj_erp/generator/target/classes/templates/pageParam.java.vm
new file mode 100644
index 0000000..7574529
--- /dev/null
+++ b/jjj_erp/generator/target/classes/templates/pageParam.java.vm
@@ -0,0 +1,31 @@
+package ${cfg.pageParamPackage};
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+#if(${cfg.pageListOrder})
+import ${cfg.superPageOrderParamClass};
+#else
+import ${cfg.superPageParamClass};
+#end
+
+/**
+ *
+ * $!{table.comment} 分页参数对象
+ *
+ *
+ * @author ${author}
+ * @date ${date}
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "$!{table.comment}分页参数")
+#if(${cfg.pageListOrder})
+public class ${entity}${cfg.pageParam} extends BasePageOrderParam {
+#else
+public class ${entity}${cfg.pageParam} extends BasePageParam {
+#end
+ private static final long serialVersionUID = 1L;
+}
diff --git a/jjj_erp/generator/target/classes/templates/queryVo.java.vm b/jjj_erp/generator/target/classes/templates/queryVo.java.vm
new file mode 100644
index 0000000..027d7fa
--- /dev/null
+++ b/jjj_erp/generator/target/classes/templates/queryVo.java.vm
@@ -0,0 +1,46 @@
+package ${cfg.queryVoPackage};
+
+#if(${swagger2})
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+#end
+#if(${entityLombokModel})
+import lombok.Data;
+import lombok.experimental.Accessors;
+#end
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *
+ * $!{table.comment} 查询结果对象
+ *
+ *
+ * @author ${author}
+ * @date ${date}
+ */
+#if(${entityLombokModel})
+@Data
+@Accessors(chain = true)
+#end
+@ApiModel(value = "${entity}${cfg.queryVo}对象")
+public class ${entity}${cfg.queryVo} implements Serializable {
+ private static final long serialVersionUID = 1L;
+## ---------- BEGIN 字段循环遍历 ----------
+#foreach($field in ${table.fields})
+
+#if(${field.keyFlag})
+#set($keyPropertyName=${field.propertyName})
+#end
+#if("$!field.comment" != "")
+ #if(${swagger2})
+ @ApiModelProperty("${field.comment}")
+ #else
+/**
+ * ${field.comment}
+ */
+ #end
+#end
+ private ${field.propertyType} ${field.propertyName};
+#end
+}
\ No newline at end of file
diff --git a/jjj_erp/generator/target/classes/templates/service.java.vm b/jjj_erp/generator/target/classes/templates/service.java.vm
new file mode 100644
index 0000000..fc04575
--- /dev/null
+++ b/jjj_erp/generator/target/classes/templates/service.java.vm
@@ -0,0 +1,23 @@
+package ${package.Service};
+
+import ${package.Entity}.${entity};
+#if(${cfg.generatorPageParam})
+import ${cfg.pageParamClass};
+#end
+import ${superServiceClassPackage};
+#if(${cfg.generatorQueryVo})
+import ${cfg.queryVoClass};
+#end
+#if(${cfg.generatorStrategy} != 'SIMPLE')
+import ${cfg.pagingClass};
+#end
+
+/**
+ * $!{table.comment} 服务类
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {
+
+}
diff --git a/jjj_erp/generator/target/classes/templates/serviceImpl.java.vm b/jjj_erp/generator/target/classes/templates/serviceImpl.java.vm
new file mode 100644
index 0000000..be9e073
--- /dev/null
+++ b/jjj_erp/generator/target/classes/templates/serviceImpl.java.vm
@@ -0,0 +1,41 @@
+package ${package.ServiceImpl};
+
+import ${package.Entity}.${entity};
+import ${package.Mapper}.${table.mapperName};
+import ${package.Service}.${table.serviceName};
+#if(${cfg.generatorPageParam})
+import ${cfg.pageParamClass};
+#end
+#if(${cfg.generatorQueryVo})
+import ${cfg.queryVoClass};
+#end
+#if(${cfg.generatorStrategy} == 'SINGLE')
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+#end
+import ${superServiceImplClassPackage};
+#if(${cfg.generatorStrategy} != 'SIMPLE')
+import ${cfg.pagingClass};
+import ${cfg.pageInfoClass};
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.transaction.annotation.Transactional;
+#end
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * $!{table.comment} 服务实现类
+ *
+ * @author ${author}
+ * @since ${date}
+ */
+@Slf4j
+@Service
+public class ${table.serviceImplName} extends BaseServiceImpl<${table.mapperName}, ${entity}> implements ${entity}Service {
+
+ @Autowired
+ private ${table.mapperName} ${cfg.mapperObjectName};
+
+}
diff --git a/jjj_erp/generator/target/jjj-erp-1.0.jar b/jjj_erp/generator/target/jjj-erp-1.0.jar
new file mode 100644
index 0000000..dc7271c
Binary files /dev/null and b/jjj_erp/generator/target/jjj-erp-1.0.jar differ
diff --git a/jjj_erp/generator/target/maven-archiver/pom.properties b/jjj_erp/generator/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..d2b188d
--- /dev/null
+++ b/jjj_erp/generator/target/maven-archiver/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Sat Jun 29 14:55:13 CST 2024
+version=1.0
+groupId=net.jjjerp
+artifactId=generator
diff --git a/jjj_erp/generator/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/jjj_erp/generator/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..5cd0ae6
--- /dev/null
+++ b/jjj_erp/generator/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,16 @@
+net\jjjerp\generator\CodeGenerator$1.class
+net\jjjerp\generator\properties\GeneratorProperties.class
+net\jjjerp\generator\CodeGenerator$3.class
+net\jjjerp\generator\CodeGenerator.class
+net\jjjerp\generator\SpringBootJjjGenerator.class
+net\jjjerp\generator\config\TableConfig.class
+net\jjjerp\generator\constant\GeneratorConstant.class
+net\jjjerp\generator\CodeGenerator$4.class
+net\jjjerp\generator\config\GeneratorStrategy.class
+net\jjjerp\generator\config\query\SpringBootJjjMySqlQuery.class
+net\jjjerp\generator\config\GeneratorConfig.class
+net\jjjerp\generator\CodeGenerator$2.class
+net\jjjerp\generator\config\MybatisPlusGeneratorConfig.class
+net\jjjerp\generator\exception\GeneratorException.class
+net\jjjerp\generator\config\query\SpringBootJjjSqlServerQuery.class
+net\jjjerp\generator\config\ProjectConfig.class
diff --git a/jjj_erp/generator/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/jjj_erp/generator/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..506d31c
--- /dev/null
+++ b/jjj_erp/generator/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,12 @@
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\generator\src\main\java\net\jjjerp\generator\config\GeneratorConfig.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\generator\src\main\java\net\jjjerp\generator\config\TableConfig.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\generator\src\main\java\net\jjjerp\generator\exception\GeneratorException.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\generator\src\main\java\net\jjjerp\generator\config\ProjectConfig.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\generator\src\main\java\net\jjjerp\generator\config\query\SpringBootJjjMySqlQuery.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\generator\src\main\java\net\jjjerp\generator\config\query\SpringBootJjjSqlServerQuery.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\generator\src\main\java\net\jjjerp\generator\properties\GeneratorProperties.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\generator\src\main\java\net\jjjerp\generator\constant\GeneratorConstant.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\generator\src\main\java\net\jjjerp\generator\SpringBootJjjGenerator.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\generator\src\main\java\net\jjjerp\generator\CodeGenerator.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\generator\src\main\java\net\jjjerp\generator\config\GeneratorStrategy.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\generator\src\main\java\net\jjjerp\generator\config\MybatisPlusGeneratorConfig.java
diff --git a/jjj_erp/generator/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/jjj_erp/generator/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
new file mode 100644
index 0000000..2eb6236
--- /dev/null
+++ b/jjj_erp/generator/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
@@ -0,0 +1,2 @@
+net\jjjerp\generator\test\GeneratorTestApplication.class
+net\jjjerp\generator\test\GeneratorPropertiesTest.class
diff --git a/jjj_erp/generator/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/jjj_erp/generator/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
new file mode 100644
index 0000000..c299182
--- /dev/null
+++ b/jjj_erp/generator/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
@@ -0,0 +1,2 @@
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\generator\src\test\java\net\jjjerp\generator\test\GeneratorPropertiesTest.java
+D:\IdeaProjects\jiujiujia\svn\jjj_erp_java\jjj_erp\generator\src\test\java\net\jjjerp\generator\test\GeneratorTestApplication.java
diff --git a/jjj_erp/generator/target/test-classes/net/jjjerp/generator/test/GeneratorPropertiesTest.class b/jjj_erp/generator/target/test-classes/net/jjjerp/generator/test/GeneratorPropertiesTest.class
new file mode 100644
index 0000000..b4375d4
Binary files /dev/null and b/jjj_erp/generator/target/test-classes/net/jjjerp/generator/test/GeneratorPropertiesTest.class differ
diff --git a/jjj_erp/generator/target/test-classes/net/jjjerp/generator/test/GeneratorTestApplication.class b/jjj_erp/generator/target/test-classes/net/jjjerp/generator/test/GeneratorTestApplication.class
new file mode 100644
index 0000000..b5e59c8
Binary files /dev/null and b/jjj_erp/generator/target/test-classes/net/jjjerp/generator/test/GeneratorTestApplication.class differ
diff --git a/jjj_erp/jjj-admin/README.md b/jjj_erp/jjj-admin/README.md
new file mode 100644
index 0000000..795f758
--- /dev/null
+++ b/jjj_erp/jjj-admin/README.md
@@ -0,0 +1 @@
+# system 项目系统模块
\ No newline at end of file
diff --git a/jjj_erp/jjj-admin/pom.xml b/jjj_erp/jjj-admin/pom.xml
new file mode 100644
index 0000000..d9a8903
--- /dev/null
+++ b/jjj_erp/jjj-admin/pom.xml
@@ -0,0 +1,25 @@
+
+
+
+ 4.0.0
+
+
+ net.jjjerp
+ parent
+ 1.0
+
+
+ jjj-admin
+ jjj-admin
+ 系统模块
+
+
+
+ net.jjjerp
+ jjj-common
+
+
+
+
diff --git a/jjj_erp/jjj-admin/src/main/java/net/jjjerp/admin/controller/IndexController.java b/jjj_erp/jjj-admin/src/main/java/net/jjjerp/admin/controller/IndexController.java
new file mode 100644
index 0000000..3fe614e
--- /dev/null
+++ b/jjj_erp/jjj-admin/src/main/java/net/jjjerp/admin/controller/IndexController.java
@@ -0,0 +1,69 @@
+
+
+package net.jjjerp.admin.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import net.jjjerp.admin.service.bill.BillHeadService;
+import net.jjjerp.common.enums.SettingEnum;
+import net.jjjerp.common.param.CommonPageParam;
+import net.jjjerp.common.util.SettingUtils;
+import net.jjjerp.framework.common.api.ApiResult;
+import net.jjjerp.framework.log.annotation.OperationLog;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Slf4j
+@Api(value = "index", tags = {"首页"})
+@RestController
+@RequestMapping("/admin/index")
+public class IndexController {
+ @Autowired
+ private SettingUtils settingUtils;
+ @Autowired
+ private BillHeadService billHeadService;
+
+ @RequestMapping(value = "/base", method = RequestMethod.POST)
+ @OperationLog(name = "base")
+ @ApiOperation(value = "base", response = String.class)
+ public ApiResult