Browse Source

🚀 前后端项目合并,个人独立开发

master
wangxiang 3 years ago
commit
6adca77afd
  1. 57
      .gitignore
  2. 49
      README.md
  3. 31
      doc/kicc-微服务.txt
  4. 0
      doc/nacos/nacos yml文件备份目录
  5. 109
      doc/sql/kicc-seata.sql
  6. 681
      doc/sql/kicc.sql
  7. 1072
      doc/sql/kicc_config.sql
  8. 209
      doc/sql/kicc_job.sql
  9. 101
      docker-cloud/docker-compose.yml
  10. 32
      docker-cloud/gitea/docker-compose.yml
  11. 23
      docker-cloud/jira/docker-compose.yml
  12. 10
      docker-cloud/jira/image/Dockerfile
  13. 5
      docker-cloud/jira/image/lib/README.md
  14. BIN
      docker-cloud/jira/image/lib/atlassian-agent.jar
  15. 32
      docker-cloud/mysql/docker-compose.yml
  16. 24
      docker-cloud/portainer/docker-compose.yml
  17. 24
      docker-cloud/redis/docker-compose.yml
  18. 96
      docker-cloud/rocketmq/brokerconf/broker.conf
  19. 50
      docker-cloud/rocketmq/docker-compose.yml
  20. 15
      docker-cloud/seata/conf/nacos/README.md
  21. 134
      docker-cloud/seata/conf/nacos/config.txt
  22. 120
      docker-cloud/seata/conf/nacos/nacos-config.sh
  23. 134
      docker-cloud/seata/conf/nacos/seataServer.properties
  24. 103
      docker-cloud/seata/conf/registry.conf
  25. 35
      docker-cloud/seata/docker-compose.yml
  26. 8
      docker-cloud/upsource/README.md
  27. 21
      docker-cloud/upsource/docker-compose.yml
  28. 15
      kicc-auth/Dockerfile
  29. 77
      kicc-auth/pom.xml
  30. 26
      kicc-auth/src/main/java/com/cloud/kicc/auth/KiccAuthApplication.java
  31. 140
      kicc-auth/src/main/java/com/cloud/kicc/auth/config/AuthorizationServerConfiguration.java
  32. 121
      kicc-auth/src/main/java/com/cloud/kicc/auth/config/WebSecurityConfiguration.java
  33. 156
      kicc-auth/src/main/java/com/cloud/kicc/auth/endpoint/kiccTokenEndpoint.java
  34. 63
      kicc-auth/src/main/java/com/cloud/kicc/auth/handler/kiccAuthenticationFailureEventHandler.java
  35. 56
      kicc-auth/src/main/java/com/cloud/kicc/auth/handler/kiccAuthenticationSuccessEventHandler.java
  36. 71
      kicc-auth/src/main/java/com/cloud/kicc/auth/handler/kiccLogoutSuccessEventHandler.java
  37. 17
      kicc-auth/src/main/resources/bootstrap.yml
  38. 57
      kicc-auth/src/main/resources/logback-spring.xml
  39. 6
      kicc-auth/src/main/resources/static/css/bootstrap.min.css
  40. 50
      kicc-auth/src/main/resources/static/css/signin.css
  41. 51
      kicc-auth/src/main/resources/templates/ftl/confirm.ftl
  42. 35
      kicc-auth/src/main/resources/templates/ftl/login.ftl
  43. 65
      kicc-common-demo/kicc-common-demo-mq/kicc-message-consumer/pom.xml
  44. 26
      kicc-common-demo/kicc-common-demo-mq/kicc-message-consumer/src/main/java/com/cloud/kicc/mq/MessageConsumerServer.java
  45. 49
      kicc-common-demo/kicc-common-demo-mq/kicc-message-consumer/src/main/java/com/cloud/kicc/mq/service/OrderConsumerService.java
  46. 32
      kicc-common-demo/kicc-common-demo-mq/kicc-message-consumer/src/main/java/com/cloud/kicc/mq/service/SmsConsumerService.java
  47. 14
      kicc-common-demo/kicc-common-demo-mq/kicc-message-consumer/src/main/resources/application.yml
  48. 65
      kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/pom.xml
  49. 26
      kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/java/com/cloud/kicc/mq/MessageProducerServer.java
  50. 29
      kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/java/com/cloud/kicc/mq/controller/SmsController.java
  51. 29
      kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/java/com/cloud/kicc/mq/controller/TransactionOrderController.java
  52. 75
      kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/java/com/cloud/kicc/mq/listener/OrderTransactionListener.java
  53. 19
      kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/java/com/cloud/kicc/mq/service/SmsService.java
  54. 23
      kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/java/com/cloud/kicc/mq/service/TransactionOrderService.java
  55. 27
      kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/java/com/cloud/kicc/mq/service/impl/SmsServiceImpl.java
  56. 80
      kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/java/com/cloud/kicc/mq/service/impl/TransactionOrderServiceImpl.java
  57. 14
      kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/resources/application.yml
  58. 22
      kicc-common-demo/kicc-common-demo-mq/pom.xml
  59. 72
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-order/pom.xml
  60. 21
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-order/src/main/java/com/cloud/kicc/order/SeataOrderServer.java
  61. 31
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-order/src/main/java/com/cloud/kicc/order/controller/OrderController.java
  62. 30
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-order/src/main/java/com/cloud/kicc/order/entity/Order.java
  63. 15
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-order/src/main/java/com/cloud/kicc/order/mapper/OrderMapper.java
  64. 16
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-order/src/main/java/com/cloud/kicc/order/service/OrderService.java
  65. 20
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-order/src/main/java/com/cloud/kicc/order/service/impl/OrderServiceImpl.java
  66. 40
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-order/src/main/resources/bootstrap.yml
  67. 71
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-point/pom.xml
  68. 21
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-point/src/main/java/com/cloud/kicc/point/SeataPointServer.java
  69. 34
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-point/src/main/java/com/cloud/kicc/point/controller/PointController.java
  70. 30
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-point/src/main/java/com/cloud/kicc/point/entity/Point.java
  71. 15
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-point/src/main/java/com/cloud/kicc/point/mapper/PointMapper.java
  72. 15
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-point/src/main/java/com/cloud/kicc/point/service/PointService.java
  73. 19
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-point/src/main/java/com/cloud/kicc/point/service/impl/PointServiceImpl.java
  74. 40
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-point/src/main/resources/bootstrap.yml
  75. 76
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/pom.xml
  76. 23
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/java/com/cloud/kicc/user/SeataUserServer.java
  77. 46
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/java/com/cloud/kicc/user/controller/UserController.java
  78. 30
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/java/com/cloud/kicc/user/entity/User.java
  79. 22
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/java/com/cloud/kicc/user/feign/RemoteOrderService.java
  80. 23
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/java/com/cloud/kicc/user/feign/RemotePointService.java
  81. 15
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/java/com/cloud/kicc/user/mapper/UserMapper.java
  82. 15
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/java/com/cloud/kicc/user/service/UserService.java
  83. 19
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/java/com/cloud/kicc/user/service/impl/UserServiceImpl.java
  84. 71
      kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/resources/bootstrap.yml
  85. 23
      kicc-common-demo/kicc-common-demo-seata/pom.xml
  86. 23
      kicc-common-demo/pom.xml
  87. 215
      kicc-common/kicc-common-bom/pom.xml
  88. 50
      kicc-common/kicc-common-core/pom.xml
  89. 22
      kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/annotation/EnableKiccJacksonAutoConvert.java
  90. 114
      kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/api/R.java
  91. 48
      kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/config/JacksonAutoConfiguration.java
  92. 23
      kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/config/RestTemplateConfiguration.java
  93. 45
      kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/config/WebMvcConfiguration.java
  94. 17
      kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/constant/AppConstants.java
  95. 53
      kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/constant/CacheConstants.java
  96. 58
      kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/constant/CommonConstants.java
  97. 110
      kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/constant/SecurityConstants.java
  98. 34
      kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/constant/ServiceNameConstants.java
  99. 38
      kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/enums/LoginTypeEnum.java
  100. 34
      kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/exception/CheckedException.java
  101. Some files were not shown because too many files have changed in this diff Show More

57
.gitignore vendored

@ -0,0 +1,57 @@ @@ -0,0 +1,57 @@
### gradle ###
.gradle
!gradle/wrapper/gradle-wrapper.jar
### STS ###
.settings/
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
bin/
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
rebel.xml
### NetBeans ###
nbproject/private/
nbbuild/
nbdist/
.nb-gradle/
### maven ###
target/
*.war
*.ear
*.zip
*.tar
*.tar.gz
*.versionsBackup
### vscode ###
.vscode
### logs ###
/logs/
*.log
### temp ignore ###
*.cache
*.diff
*.patch
*.tmp
*.java~
*.properties~
*.xml~
### system ignore ###
.DS_Store
Thumbs.db
Servers
.metadata

49
README.md

@ -0,0 +1,49 @@ @@ -0,0 +1,49 @@
# 🚀`kicc`(康来智慧冷链) 微服务架构平台 © 长沙康来生物有限公司版权所有
## 💡 简介
服务于医疗智慧冷链行业微服务架构平台,目前采用最新微服务技术栈搭建,支持标本箱配送,监控,地图路线规划,
努力做成中国最好的智慧冷链平台。
## 🎡 功能特点
- 主体框架:采用最新的`Spring Cloud 2021.0.1`, `Spring Boot 2.6.4`, `Spring Cloud Alibaba 2021.1`版本进行系统设计;
- 统一注册:支持`Nacos`作为注册中心,实现多配置、分群组、分命名空间、多业务模块的注册和发现功能;
- 统一认证:统一`Oauth2`认证协议,并支持自定义grant_type实现手机号码登录,第三方登录集成JustAuth实现微信、支付宝等多种登录模式;
- 业务监控:利用`Spring Boot Admin`来监控各个独立Service的运行状态。
- 内部调用:集成了`Feign`与自定义内部注解,支持内部调用。
- 业务熔断:采用`Sentinel`实现业务熔断处理,避免服务之间出现雪崩;
- 在线文档:通过接入`Knife4j`,实现在线API文档的查看与调试;
- 业务分离:采用前后端分离的框架设计,前端采用基于 `vben Admin``kicc-ui`
- 多租户功能:集成`Mybatis Plus`,实现SAAS多租户功能
## 🎯 文件结构
```lua
kicc -- 父项目,各模块分离,方便集成和微服务
│ ├─kicc-auth -- 认证授权中心,基于 spring security oAuth2
│ ├─kicc-common -- 公共通用模块,主模块
│ │ ├─kicc-common-bom -- 全局jar BOM标准定义
│ │ ├─kicc-common-core -- 公共工具类核心包
│ │ ├─kicc-common-data -- 数据服务核心包
│ │ ├─kicc-common-datasource -- 动态切换数据源组件
│ │ ├─kicc-common-feign -- feign-sentinel服务降级熔断、限流组件
│ │ ├─kicc-common-job -- 定时任务,基于xxl-job
│ │ ├─kicc-common-log -- 日志服务
│ │ ├─kicc-common-mock -- 单元模拟测试工具类
│ │ ├─kicc-common-rocketmq -- 阿里 rocketmq 消息中间件
│ │ ├─kicc-common-seata -- 阿里巴巴-seata分布式事务解决方案
│ │ ├─kicc-common-security -- 安全工具类
│ │ ├─kicc-common-swagger -- 接口文档
│ │─kicc-common-demo -- 组件使用案列
│ │─kicc-gateway -- 服务网关,基于 spring cloud gateway
│ │─kicc-register -- 注册配置中心
│ │─kicc-system -- 通用系统权限管理聚合模块
│ │─kicc-visual 图形化相关功能
```

31
doc/kicc-微服务.txt

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
注意所以打包部署全部写了docker-compose一键部署,需要了解更多信息,请参考kicc项目中docker-cloud文件夹
宿主机文件统一映射路径:/usr/software/dockerDatabase/**
微服务端口:------------------------------------------
8051:prtainer-ce
8052:mysql
8053:redis
9876:rocketmq:namesrv
10909:rocketmq:broker:远程发送消息接口
10911:rocketmq:broker:远程快速发送消息接口
8091:seata-server
8848:kicc-register:连接端口
9848:kicc-register:客户端向服务端发起连接和请求
9849:kicc-register:用于服务间同步等
8058:kicc-rocketmq
8056:kicc-sentinel
8057:kicc-job-admin
8061:kicc-monitor
9999:kicc-gateway
3000:kicc-auth
4000:kicc-system
80:kicc-ui
40003:demo-kicc-message-consumer
40002:demo-kicc-message-producer
60001:demo-kicc-seata-order
60002:demo-kicc-seata-point
60003:demo-kicc-seata-user
8062:docker
8065:gitea ssh端口服务
8066:gitea http端口服务

0
doc/nacos/nacos yml文件备份目录

109
doc/sql/kicc-seata.sql

@ -0,0 +1,109 @@ @@ -0,0 +1,109 @@
/*
Navicat Premium Data Transfer
Source Server :
Source Server Type : MySQL
Source Server Version : 50732
Source Host : localhost:3306
Source Schema : kicc-seata
Target Server Type : MySQL
Target Server Version : 50732
File Encoding : 65001
Date: 21/03/2022 21:49:52
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for branch_table
-- ----------------------------
DROP TABLE IF EXISTS `branch_table`;
CREATE TABLE `branch_table` (
`branch_id` bigint(20) NOT NULL,
`xid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`transaction_id` bigint(20) NULL DEFAULT NULL,
`resource_group_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`resource_id` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`branch_type` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`status` tinyint(4) NULL DEFAULT NULL,
`client_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`application_data` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`gmt_create` datetime(6) NULL DEFAULT NULL,
`gmt_modified` datetime(6) NULL DEFAULT NULL,
PRIMARY KEY (`branch_id`) USING BTREE,
INDEX `idx_xid`(`xid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of branch_table
-- ----------------------------
-- ----------------------------
-- Table structure for distributed_lock
-- ----------------------------
DROP TABLE IF EXISTS `distributed_lock`;
CREATE TABLE `distributed_lock` (
`lock_key` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`lock_value` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`expire` bigint(20) NULL DEFAULT NULL,
PRIMARY KEY (`lock_key`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of distributed_lock
-- ----------------------------
INSERT INTO `distributed_lock` VALUES ('HandleAllSession', ' ', 0);
-- ----------------------------
-- Table structure for global_table
-- ----------------------------
DROP TABLE IF EXISTS `global_table`;
CREATE TABLE `global_table` (
`xid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`transaction_id` bigint(20) NULL DEFAULT NULL,
`status` tinyint(4) NOT NULL,
`application_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`transaction_service_group` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`transaction_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`timeout` int(11) NULL DEFAULT NULL,
`begin_time` bigint(20) NULL DEFAULT NULL,
`application_data` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`gmt_create` datetime NULL DEFAULT NULL,
`gmt_modified` datetime NULL DEFAULT NULL,
PRIMARY KEY (`xid`) USING BTREE,
INDEX `idx_status_gmt_modified`(`status`, `gmt_modified`) USING BTREE,
INDEX `idx_transaction_id`(`transaction_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of global_table
-- ----------------------------
-- ----------------------------
-- Table structure for lock_table
-- ----------------------------
DROP TABLE IF EXISTS `lock_table`;
CREATE TABLE `lock_table` (
`row_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`xid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`transaction_id` bigint(20) NULL DEFAULT NULL,
`branch_id` bigint(20) NOT NULL,
`resource_id` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`table_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`pk` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0:locked ,1:rollbacking',
`gmt_create` datetime NULL DEFAULT NULL,
`gmt_modified` datetime NULL DEFAULT NULL,
PRIMARY KEY (`row_key`) USING BTREE,
INDEX `idx_status`(`status`) USING BTREE,
INDEX `idx_branch_id`(`branch_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of lock_table
-- ----------------------------
SET FOREIGN_KEY_CHECKS = 1;

681
doc/sql/kicc.sql

@ -0,0 +1,681 @@ @@ -0,0 +1,681 @@
/*
Navicat Premium Data Transfer
Source Server :
Source Server Type : MySQL
Source Server Version : 50732
Source Host : localhost:3306
Source Schema : kicc
Target Server Type : MySQL
Target Server Version : 50732
File Encoding : 65001
Date: 21/03/2022 21:50:21
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for demo_seata_order
-- ----------------------------
DROP TABLE IF EXISTS `demo_seata_order`;
CREATE TABLE `demo_seata_order` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键',
`money` int(11) NULL DEFAULT NULL COMMENT '金额',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of demo_seata_order
-- ----------------------------
INSERT INTO `demo_seata_order` VALUES ('1', 100);
-- ----------------------------
-- Table structure for demo_seata_point
-- ----------------------------
DROP TABLE IF EXISTS `demo_seata_point`;
CREATE TABLE `demo_seata_point` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键',
`count` int(11) NULL DEFAULT NULL COMMENT '积分数量',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of demo_seata_point
-- ----------------------------
INSERT INTO `demo_seata_point` VALUES ('2', 10);
-- ----------------------------
-- Table structure for demo_seata_user
-- ----------------------------
DROP TABLE IF EXISTS `demo_seata_user`;
CREATE TABLE `demo_seata_user` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户名称',
`age` int(11) NULL DEFAULT NULL COMMENT '用户年龄',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of demo_seata_user
-- ----------------------------
INSERT INTO `demo_seata_user` VALUES ('2', '测试员', 18);
-- ----------------------------
-- Table structure for sys_config
-- ----------------------------
DROP TABLE IF EXISTS `sys_config`;
CREATE TABLE `sys_config` (
`id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编号',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '参数名称',
`key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '参数键名',
`value` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '参数键值',
`is_sys` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '系统内置 0-是|1-否',
`create_by_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建id',
`create_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新id',
`update_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`remarks` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
`del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_config
-- ----------------------------
INSERT INTO `sys_config` VALUES ('1', '初始密码', 'user.initPassword', '123456', '0', NULL, '', '2020-03-15 21:51:13', NULL, '', NULL, NULL, '0');
-- ----------------------------
-- Table structure for sys_dept
-- ----------------------------
DROP TABLE IF EXISTS `sys_dept`;
CREATE TABLE `sys_dept` (
`dept_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`code` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '机构编码',
`name` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '机构名称',
`parent_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '父级编号',
`ancestors` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '祖级列表',
`sort` int(11) NULL DEFAULT 1 COMMENT '排序',
`contacts` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系人',
`phone` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电话',
`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系地址',
`email` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
`status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '帐号状态(0正常 1停用)',
`create_by_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建id',
`create_by_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新id',
`update_by_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新者',
`update_time` datetime NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`remarks` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注信息',
`del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '删除标记',
PRIMARY KEY (`dept_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_dept
-- ----------------------------
INSERT INTO `sys_dept` VALUES ('1', '100001', '康来生物长沙总公司', '0', '0', 1, '杨总', '15688888888', NULL, NULL, '0', NULL, 'entfrm', '2020-02-13 20:55:57', NULL, 'admin', '2020-03-19 20:49:29', NULL, '0');
INSERT INTO `sys_dept` VALUES ('2', '10000101', '康来生物北京分公司', '1', '0,1', 1, NULL, NULL, NULL, NULL, '0', NULL, NULL, NULL, NULL, 'admin', '2020-03-15 20:22:11', NULL, '0');
INSERT INTO `sys_dept` VALUES ('3', '10000102', '康来生物上海分公司', '1', '0,1', 2, '123', '', NULL, NULL, '0', NULL, NULL, NULL, NULL, 'entfrm', '2020-03-15 20:37:02', NULL, '0');
-- ----------------------------
-- Table structure for sys_dict
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict`;
CREATE TABLE `sys_dict` (
`id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '字典名称',
`type` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '字典类型',
`is_sys` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '0-是|1-否',
`status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
`create_by_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建id',
`create_by_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新id',
`update_by_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人',
`update_time` datetime NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`remarks` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '备注',
`del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '0' COMMENT '0-正常,1-删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_dict
-- ----------------------------
INSERT INTO `sys_dict` VALUES ('1', '用户性别', 'user_sex', '0', '0', NULL, 'admin', '2018-03-16 11:33:00', NULL, 'admin', '2020-03-17 14:19:40', '用户性别列表', '0');
INSERT INTO `sys_dict` VALUES ('10', '快捷方式类型', 'shortcut_type', '0', '0', NULL, 'entfrm', '2020-03-27 09:48:05', NULL, 'entfrm', '2020-03-27 10:14:27', '快捷方式类型列表', '0');
INSERT INTO `sys_dict` VALUES ('11', '模型分类', 'model_category', '0', '0', NULL, 'entfrm', '2020-04-04 22:09:36', '1', 'admin', '2022-03-21 21:23:55', '', '1');
INSERT INTO `sys_dict` VALUES ('12', '请假类型', 'leave_type', '0', '0', NULL, 'entfrm', '2020-04-05 10:08:18', '1', 'admin', '2022-03-21 21:23:55', '', '1');
INSERT INTO `sys_dict` VALUES ('13', '任务状态', 'job_status', '0', '0', NULL, 'entfrm', '2020-04-11 18:54:20', '1', 'admin', '2022-03-21 21:23:55', '', '1');
INSERT INTO `sys_dict` VALUES ('14', 'Activiti流程状态', 'process_status', '0', '0', NULL, 'entfrm', '2020-04-12 14:30:52', NULL, 'entfrm', '2021-05-12 01:37:16', 'Activiti流程状态', '1');
INSERT INTO `sys_dict` VALUES ('15', '应用类型', 'application_type', '0', '0', NULL, 'entfrm', '2020-04-23 18:54:07', '1', 'admin', '2022-03-21 21:23:55', '', '1');
INSERT INTO `sys_dict` VALUES ('16', '消息类型', 'msg_type', '0', '0', NULL, 'entfrm', '2020-05-10 16:02:20', '1', 'admin', '2022-03-21 21:23:55', '', '1');
INSERT INTO `sys_dict` VALUES ('17', '应用状态', 'application_status', '0', '0', NULL, 'entfrm', '2020-05-15 22:56:49', '1', 'admin', '2022-03-21 21:23:55', '应用状态列表', '1');
INSERT INTO `sys_dict` VALUES ('18', '消息通知类型', 'content_type', '0', '0', NULL, 'entfrm', '2020-05-25 15:45:41', '1', 'admin', '2022-03-21 21:23:55', '', '1');
INSERT INTO `sys_dict` VALUES ('19', '数据格式类型', 'data_type', '0', '0', NULL, 'entfrm', '2020-06-13 08:51:07', NULL, NULL, NULL, '', '0');
INSERT INTO `sys_dict` VALUES ('2', '菜单状态', 'menu_status', '0', '0', NULL, 'admin', '2018-03-16 11:33:00', NULL, 'admin', '2020-03-17 14:19:41', '菜单状态列表', '0');
INSERT INTO `sys_dict` VALUES ('20', '表单类型', 'form_type', '0', '0', NULL, 'entfrm', '2021-03-26 23:30:49', '1', 'admin', '2022-03-21 21:24:11', '', '1');
INSERT INTO `sys_dict` VALUES ('21', '流程状态', 'process_status', '1', '0', NULL, 'entfrm', '2021-05-12 01:37:30', '1', 'admin', '2022-03-21 21:24:11', 'Activiti流程状态', '1');
INSERT INTO `sys_dict` VALUES ('3', '是否', 'yes_no', '0', '0', NULL, 'admin', '2018-03-16 11:33:00', NULL, 'admin', '2020-03-17 14:19:42', '是否列表', '0');
INSERT INTO `sys_dict` VALUES ('4', '状态', 'status', '0', '0', NULL, 'admin', '2018-03-16 11:33:00', NULL, 'admin', '2020-03-17 14:19:42', '状态列表', '0');
INSERT INTO `sys_dict` VALUES ('5', '成功失败', 'success_fail', '0', '0', NULL, 'admin', '2019-08-24 10:02:57', NULL, 'admin', '2020-03-17 14:19:43', '成功失败列表', '0');
INSERT INTO `sys_dict` VALUES ('6', '文件类别', 'file_type', '0', '0', NULL, 'entfrm', '2020-03-17 13:57:44', NULL, 'entfrm', '2020-03-20 22:48:19', '文件类别列表', '0');
INSERT INTO `sys_dict` VALUES ('7', '数据库类型', 'datasource_type', '0', '0', NULL, 'entfrm', '2020-03-21 11:33:14', '1', 'admin', '2022-03-21 21:24:15', '数据库类型列表', '1');
INSERT INTO `sys_dict` VALUES ('8', '任务类型', 'job_type', '0', '0', NULL, 'entfrm', '2020-03-21 21:21:46', NULL, NULL, NULL, '任务类型列表', '0');
INSERT INTO `sys_dict` VALUES ('9', '登录类型', 'login_type', '0', '0', NULL, 'entfrm', '2020-03-22 09:55:59', NULL, NULL, NULL, '登录类型列表', '0');
-- ----------------------------
-- Table structure for sys_dict_data
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict_data`;
CREATE TABLE `sys_dict_data` (
`id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编号',
`dict_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '字典编号',
`dict_type` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '类型',
`label` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标签名',
`value` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '数据值',
`sort` int(10) NOT NULL COMMENT '排序(升序)',
`create_by_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建id',
`create_by_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新id',
`update_by_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`remarks` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注信息',
`del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '删除标记',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_dict_data
-- ----------------------------
INSERT INTO `sys_dict_data` VALUES ('1', '1', 'user_sex', '', '0', 1, NULL, NULL, '2019-08-13 18:33:37', NULL, NULL, '2019-08-13 18:33:40', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('10', NULL, 'success_fail', '失败', '1', 20, NULL, 'admin', '2019-08-24 11:48:27', NULL, NULL, '2019-08-24 11:48:26', '', '0');
INSERT INTO `sys_dict_data` VALUES ('11', NULL, 'file_type', '图片', 'image', 1, NULL, 'entfrm', '2020-03-20 22:48:39', NULL, NULL, '2020-03-28 16:27:48', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('12', NULL, 'file_type', '媒体', 'media', 2, NULL, 'entfrm', '2020-03-20 22:48:48', NULL, 'entfrm', '2020-03-28 16:28:32', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('13', NULL, 'file_type', '文档', 'file', 3, NULL, 'entfrm', '2020-03-20 22:49:03', NULL, NULL, '2020-03-28 16:28:21', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('14', NULL, 'datasource_type', 'Mysql', 'com.mysql.cj.jdbc.Driver', 1, NULL, 'entfrm', '2020-03-21 11:33:59', NULL, 'entfrm', '2020-03-21 11:33:59', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('15', NULL, 'datasource_type', 'Sqlserver', 'com.microsoft.sqlserver.jdbc.SQLServerDriver', 2, NULL, 'entfrm', '2020-03-21 11:34:59', NULL, 'entfrm', '2020-03-21 11:34:58', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('16', NULL, 'datasource_type', 'Postgresql', 'org.postgresql.Driver', 3, NULL, 'entfrm', '2020-03-21 11:36:16', NULL, NULL, '2020-03-21 11:36:15', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('17', NULL, 'job_type', 'Java类', '1', 1, NULL, 'entfrm', '2020-03-21 21:22:35', NULL, NULL, '2020-03-21 21:22:35', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('18', NULL, 'job_type', 'Spring bean名称', '2', 2, NULL, 'entfrm', '2020-03-21 21:22:50', NULL, NULL, '2020-03-21 21:22:50', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('19', NULL, 'job_type', 'Rest调用', '3', 3, NULL, 'entfrm', '2020-03-21 21:23:06', NULL, NULL, '2020-03-21 21:23:05', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('2', '1', 'user_sex', '', '1', 2, NULL, NULL, '2019-08-13 18:34:03', NULL, NULL, '2019-08-13 18:34:07', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('20', NULL, 'job_type', 'Jar调用', '4', 4, NULL, 'entfrm', '2020-03-21 21:23:19', NULL, NULL, '2020-03-21 21:23:18', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('21', NULL, 'job_type', '其他', '5', 0, NULL, 'entfrm', '2020-03-21 21:23:24', NULL, NULL, '2020-03-21 21:23:24', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('22', NULL, 'login_type', '登录', '0', 1, NULL, 'entfrm', '2020-03-22 09:56:41', NULL, NULL, '2020-03-22 09:56:40', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('23', NULL, 'login_type', '退出', '1', 2, NULL, 'entfrm', '2020-03-22 09:56:51', NULL, NULL, '2020-03-22 09:56:51', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('24', NULL, 'shortcut_type', '顶部', '1', 1, NULL, 'entfrm', '2020-03-27 09:48:24', NULL, NULL, '2020-03-27 09:48:23', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('25', NULL, 'shortcut_type', '首页', '2', 2, NULL, 'entfrm', '2020-03-27 09:48:38', NULL, NULL, '2020-03-27 09:48:38', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('26', NULL, 'model_category', '办公流程', 'office', 1, NULL, 'entfrm', '2020-04-04 22:10:14', NULL, NULL, '2020-04-04 22:10:13', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('27', NULL, 'model_category', '项目流程', 'project', 2, NULL, 'entfrm', '2020-04-04 22:10:27', NULL, NULL, '2020-04-04 22:10:26', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('28', NULL, 'leave_type', '事假', '1', 1, NULL, 'entfrm', '2020-04-05 10:08:52', NULL, NULL, '2020-04-05 10:08:52', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('29', NULL, 'leave_type', '病假', '2', 2, NULL, 'entfrm', '2020-04-05 10:09:05', NULL, NULL, '2020-04-05 10:09:05', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('3', '2', 'menu_status', '隐藏', '1', 2, NULL, NULL, '2019-08-13 18:33:37', NULL, NULL, '2019-08-19 15:42:29', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('30', NULL, 'leave_type', '产假', '3', 3, NULL, 'entfrm', '2020-04-05 10:09:37', NULL, 'entfrm', '2020-04-05 10:09:37', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('31', NULL, 'job_status', '未发布', '1', 1, NULL, 'entfrm', '2020-04-11 18:54:37', NULL, NULL, '2020-04-11 18:54:37', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('32', NULL, 'job_status', '运行中', '2', 2, NULL, 'entfrm', '2020-04-11 18:54:48', NULL, NULL, '2020-04-11 18:54:47', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('33', NULL, 'job_status', '暂停', '3', 3, NULL, 'entfrm', '2020-04-11 18:54:57', NULL, NULL, '2020-04-11 18:54:57', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('34', NULL, 'leave_status', '未提交', '0', 0, NULL, 'entfrm', '2020-04-12 14:31:12', NULL, NULL, '2020-04-12 14:31:11', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('35', NULL, 'leave_status', '未审批', '1', 1, NULL, 'entfrm', '2020-04-12 14:31:29', NULL, NULL, '2020-04-12 14:31:28', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('36', NULL, 'leave_status', '批准', '2', 2, NULL, 'entfrm', '2020-04-12 14:31:38', NULL, NULL, '2020-04-12 14:31:38', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('37', NULL, 'leave_status', '驳回', '9', 3, NULL, 'entfrm', '2020-04-12 14:31:51', NULL, '小狗', '2020-04-12 14:31:51', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('38', NULL, 'application_type', 'PC', '1', 1, NULL, 'entfrm', '2020-04-23 18:54:36', NULL, NULL, '2020-04-23 18:54:36', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('39', NULL, 'application_type', 'APP', '2', 2, NULL, 'entfrm', '2020-04-23 18:54:44', NULL, NULL, '2020-04-23 18:54:44', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('4', '2', 'menu_status', '显示', '0', 1, NULL, NULL, '2019-08-13 18:33:37', NULL, NULL, '2019-08-19 15:42:28', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('40', NULL, 'application_type', '小程序', '3', 3, NULL, 'entfrm', '2020-04-23 18:54:58', NULL, NULL, '2020-04-23 18:54:57', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('41', NULL, 'msg_type', '短信', '0', 0, NULL, 'entfrm', '2020-05-10 16:02:40', NULL, NULL, '2020-05-10 16:02:40', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('42', NULL, 'msg_type', '邮件', '1', 1, NULL, 'entfrm', '2020-05-10 16:02:50', NULL, NULL, '2020-05-10 16:02:50', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('43', NULL, 'application_status', '未发布', '0', 0, NULL, 'entfrm', '2020-05-15 22:57:27', NULL, NULL, '2020-05-15 22:57:27', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('44', NULL, 'application_status', '已发布', '1', 1, NULL, 'entfrm', '2020-05-15 22:57:36', NULL, NULL, '2020-05-15 22:57:35', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('45', NULL, 'msg_type', 'PC', '2', 2, NULL, 'entfrm', '2020-05-25 15:44:18', NULL, NULL, '2020-05-25 15:44:17', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('46', NULL, 'msg_type', 'APP', '3', 3, NULL, 'entfrm', '2020-05-25 15:44:44', NULL, NULL, '2020-05-25 15:44:43', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('47', NULL, 'msg_type', '微信', '4', 4, NULL, 'entfrm', '2020-05-25 15:44:56', NULL, NULL, '2020-05-25 15:44:56', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('48', NULL, 'content_type', '通知', '0', 0, NULL, 'entfrm', '2020-05-25 15:46:28', NULL, NULL, '2020-05-25 15:46:28', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('49', NULL, 'content_type', '公告', '1', 1, NULL, 'entfrm', '2020-05-25 15:46:38', NULL, NULL, '2020-05-25 15:46:38', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('5', '3', 'yes_no', '', '0', 1, NULL, NULL, '2019-08-13 18:33:37', NULL, 'admin', '2020-03-17 12:05:05', '', '0');
INSERT INTO `sys_dict_data` VALUES ('50', NULL, 'content_type', '其他', '2', 2, NULL, 'entfrm', '2020-05-25 15:46:46', NULL, NULL, '2020-05-25 15:46:45', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('51', NULL, 'data_type', 'json', 'json', 1, NULL, 'entfrm', '2020-06-13 08:51:24', NULL, NULL, '2020-06-13 08:51:24', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('52', NULL, 'form_type', '普通表单', '0', 0, NULL, 'entfrm', '2021-03-26 23:31:12', NULL, NULL, '2021-03-26 23:31:12', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('53', NULL, 'form_type', '工作流表单', '1', 1, NULL, 'entfrm', '2021-03-26 23:31:20', NULL, NULL, '2021-03-26 23:31:19', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('54', NULL, 'leave_status', '作废', '8', 4, NULL, '小狗', '2021-04-15 01:03:15', NULL, NULL, '2021-04-15 01:03:14', '作废流程', '0');
INSERT INTO `sys_dict_data` VALUES ('55', NULL, 'application_type', '已挂起', '0', 0, NULL, 'entfrm', '2021-05-12 01:37:45', NULL, NULL, '2021-05-12 01:37:45', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('56', NULL, 'process_status', '已挂起', '0', 0, NULL, 'entfrm', '2021-05-12 01:38:51', NULL, NULL, '2021-05-12 01:38:50', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('57', NULL, 'process_status', '等待审核', '1', 1, NULL, 'entfrm', '2021-05-12 01:38:59', NULL, 'entfrm', '2021-05-12 01:38:59', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('58', NULL, 'process_status', '审核通过', '2', 2, NULL, 'entfrm', '2021-05-12 01:39:08', NULL, 'entfrm', '2021-05-12 01:39:07', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('59', NULL, 'process_status', '流程撤回', '3', 3, NULL, 'entfrm', '2021-05-12 01:39:14', NULL, 'entfrm', '2021-05-12 01:39:14', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('6', '3', 'yes_no', '', '1', 2, NULL, NULL, '2019-08-13 18:33:37', NULL, 'admin', '2020-03-17 12:05:06', '', '0');
INSERT INTO `sys_dict_data` VALUES ('60', NULL, 'process_status', '审核驳回', '4', 4, NULL, 'entfrm', '2021-05-12 01:39:22', NULL, 'entfrm', '2021-05-12 01:39:21', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('61', NULL, 'process_status', '审核终止', '5', 5, NULL, 'entfrm', '2021-05-12 01:39:32', NULL, 'entfrm', '2021-05-12 01:39:31', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('62', NULL, 'process_status', '流程作废', '6', 6, NULL, 'entfrm', '2021-05-12 01:39:52', NULL, 'entfrm', '2021-05-12 01:39:51', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('7', '4', 'status', '停用', '1', 2, NULL, NULL, '2019-08-13 18:34:03', NULL, 'admin', '2019-08-19 15:43:00', '', '0');
INSERT INTO `sys_dict_data` VALUES ('8', '4', 'status', '正常', '0', 1, NULL, NULL, '2019-08-13 18:33:37', NULL, NULL, '2019-08-19 15:42:59', NULL, '0');
INSERT INTO `sys_dict_data` VALUES ('9', NULL, 'success_fail', '成功', '0', 10, NULL, 'admin', '2019-08-24 11:48:18', NULL, 'entfrm', '2019-08-24 11:48:17', '', '0');
-- ----------------------------
-- Table structure for sys_file
-- ----------------------------
DROP TABLE IF EXISTS `sys_file`;
CREATE TABLE `sys_file` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`file_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`bucket_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`original` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`file_size` bigint(20) NULL DEFAULT NULL COMMENT '文件大小',
`del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '0-正常,1-删除',
`create_by_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建id',
`create_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新id',
`update_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人',
`update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '文件管理表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_file
-- ----------------------------
-- ----------------------------
-- Table structure for sys_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编号',
`name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '菜单名称',
`parent_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '父菜单ID',
`parent_ids` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '父菜单IDS',
`type` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '菜单类型 ',
`path` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '前端URL',
`component` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '#' COMMENT 'VUE页面',
`perms` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '菜单权限标识',
`icon` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图标',
`no_cache` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '路由缓存',
`sort` int(11) NULL DEFAULT 1 COMMENT '排序值',
`status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '菜单状态(0显示 1隐藏)',
`create_by_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建id',
`create_by_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新id',
`update_by_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人',
`update_time` datetime NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注',
`del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '0' COMMENT '删除标识(0-正常,1-删除)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_menu
-- ----------------------------
INSERT INTO `sys_menu` VALUES ('1', '系统管理', '0', NULL, 'M', 'system', '#', '', 'system', '0', 10, '0', NULL, 'admin', '2019-03-16 11:33:00', NULL, 'admin', '2020-03-16 20:45:21', '系统管理模块', '0');
INSERT INTO `sys_menu` VALUES ('10', '机构删除', '4', NULL, 'F', NULL, '#', 'dept_del', NULL, '0', 3, '0', NULL, NULL, '2020-03-12 20:42:57', NULL, NULL, '2020-03-16 20:43:02', NULL, '0');
INSERT INTO `sys_menu` VALUES ('105', '快捷方式新增', '43', NULL, 'F', NULL, '#', 'shortcut_add', NULL, '0', 1, '0', NULL, 'entfrm', '2020-03-27 09:44:13', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('106', '快捷方式修改', '43', NULL, 'F', NULL, '#', 'shortcut_edit', NULL, '0', 2, '0', NULL, 'entfrm', '2020-03-27 09:44:36', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('107', '快捷方式删除', '43', NULL, 'F', NULL, '#', 'shortcut_del', NULL, '0', 3, '0', NULL, 'entfrm', '2020-03-27 09:44:57', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('108', '快捷方式查看', '43', NULL, 'F', NULL, '#', 'shortcut_view', NULL, '0', 4, '0', NULL, 'entfrm', '2020-03-27 09:45:16', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('11', '机构查看', '4', NULL, 'F', NULL, '#', 'dept_view', NULL, '0', 4, '0', NULL, NULL, '2020-03-12 20:43:03', NULL, NULL, '2020-03-16 20:43:06', NULL, '0');
INSERT INTO `sys_menu` VALUES ('13', '角色新增', '5', NULL, 'F', NULL, '#', 'role_add', NULL, '0', 1, '0', NULL, 'entfrm', '2020-03-16 11:50:24', NULL, NULL, '2020-03-16 20:41:51', NULL, '0');
INSERT INTO `sys_menu` VALUES ('139', '应用管理', '1', NULL, 'C', 'application', 'system/application/index', NULL, 'tool', '1', 0, '0', NULL, 'entfrm', '2020-04-23 18:35:21', '1', 'admin', '2022-03-21 20:29:25', NULL, '1');
INSERT INTO `sys_menu` VALUES ('14', '角色修改', '5', NULL, 'F', NULL, '#', 'role_edit', NULL, '0', 2, '0', NULL, 'entfrm', '2020-03-16 11:51:05', NULL, NULL, '2020-03-16 20:41:44', NULL, '0');
INSERT INTO `sys_menu` VALUES ('140', '应用新增', '139', NULL, 'F', NULL, '#', 'application_add', '#', '1', 1, '0', NULL, 'entfrm', '2020-02-02 00:00:00', '1', 'admin', '2022-03-21 20:29:22', NULL, '1');
INSERT INTO `sys_menu` VALUES ('141', '应用修改', '139', NULL, 'F', NULL, '#', 'application_edit', '#', '1', 2, '0', NULL, 'entfrm', '2020-02-02 00:00:00', '1', 'admin', '2022-03-21 20:29:20', NULL, '1');
INSERT INTO `sys_menu` VALUES ('142', '应用删除', '139', NULL, 'F', NULL, '#', 'application_del', '#', '1', 3, '0', NULL, 'entfrm', '2020-02-02 00:00:00', '1', 'admin', '2022-03-21 20:29:18', NULL, '1');
INSERT INTO `sys_menu` VALUES ('143', '应用查询', '139', NULL, 'F', NULL, '#', 'application_view', '#', '1', 4, '0', NULL, 'entfrm', '2020-02-02 00:00:00', '1', 'admin', '2022-03-21 20:29:16', NULL, '1');
INSERT INTO `sys_menu` VALUES ('145', 'redis监控', '2', NULL, 'C', 'redis', 'monitor/redis/index', NULL, 'component', '1', 5, '1', NULL, 'entfrm', '2020-04-24 22:26:31', NULL, 'entfrm', '2020-05-17 16:49:59', NULL, '0');
INSERT INTO `sys_menu` VALUES ('15', '角色删除', '5', NULL, 'F', NULL, '#', 'role_del', NULL, '0', 3, '0', NULL, 'entfrm', '2020-03-16 11:51:21', NULL, NULL, '2020-03-16 20:41:41', NULL, '0');
INSERT INTO `sys_menu` VALUES ('16', '角色查看', '5', NULL, 'F', NULL, '#', 'role_view', NULL, '0', 4, '0', NULL, 'entfrm', '2020-03-16 11:51:40', NULL, NULL, '2020-03-16 20:41:37', NULL, '0');
INSERT INTO `sys_menu` VALUES ('17', '数据权限', '5', NULL, 'F', NULL, '#', 'role_data', NULL, '0', 5, '0', NULL, 'entfrm', '2020-03-16 12:15:50', NULL, NULL, '2020-03-16 20:41:34', NULL, '0');
INSERT INTO `sys_menu` VALUES ('18', '用户添加', '6', NULL, 'F', NULL, '#', 'user_add', NULL, '0', 1, '0', NULL, 'entfrm', '2020-03-16 20:31:15', NULL, NULL, '2020-03-16 20:41:31', NULL, '0');
INSERT INTO `sys_menu` VALUES ('19', '用户修改', '6', NULL, 'F', NULL, '#', 'user_edit', NULL, '0', 2, '0', NULL, 'entfrm', '2020-03-16 20:32:19', NULL, 'entfrm', '2020-03-16 20:41:28', NULL, '0');
INSERT INTO `sys_menu` VALUES ('2', '运维监控', '0', NULL, 'M', 'monitor', '#', '', 'monitor', '0', 20, '0', NULL, 'admin', '2019-03-16 11:33:00', NULL, 'admin', '2020-03-17 19:14:27', '运维监控模块', '0');
INSERT INTO `sys_menu` VALUES ('20', '用户删除', '6', NULL, 'F', NULL, '#', 'user_del', NULL, '0', 3, '0', NULL, 'entfrm', '2020-03-16 20:32:41', NULL, NULL, '2020-03-16 20:41:25', NULL, '0');
INSERT INTO `sys_menu` VALUES ('21', '用户查看', '6', NULL, 'F', NULL, '#', 'user_view', NULL, '0', 4, '0', NULL, 'entfrm', '2020-03-16 20:33:11', NULL, NULL, '2020-03-16 20:41:20', NULL, '0');
INSERT INTO `sys_menu` VALUES ('22', '重置密码', '6', NULL, 'F', NULL, '#', 'user_reset', NULL, '0', 5, '0', NULL, 'entfrm', '2020-03-16 20:34:22', NULL, 'entfrm', '2020-03-16 20:41:17', NULL, '0');
INSERT INTO `sys_menu` VALUES ('236', '令牌管理', '2', NULL, 'C', 'token', 'monitor/token/index', NULL, 'documentation', '1', 10, '0', NULL, 'admin', '2022-02-25 15:28:56', NULL, 'admin', '2022-02-25 15:29:32', NULL, '0');
INSERT INTO `sys_menu` VALUES ('25', '菜单新增', '7', NULL, 'F', NULL, '#', 'menu_add', NULL, '0', 1, '0', NULL, 'entfrm', '2020-03-16 20:38:18', NULL, NULL, '2020-03-16 20:41:10', NULL, '0');
INSERT INTO `sys_menu` VALUES ('26', '菜单修改', '7', NULL, 'F', NULL, '#', 'menu_edit', NULL, '0', 2, '0', NULL, 'entfrm', '2020-03-16 20:38:41', NULL, 'entfrm', '2020-03-16 20:41:07', NULL, '0');
INSERT INTO `sys_menu` VALUES ('27', '菜单删除', '7', NULL, 'F', NULL, '#', 'menu_del', NULL, '0', 3, '0', NULL, 'entfrm', '2020-03-16 20:39:04', NULL, NULL, '2020-03-16 20:41:04', NULL, '0');
INSERT INTO `sys_menu` VALUES ('28', '菜单查看', '7', NULL, 'F', NULL, '#', 'menu_view', NULL, '0', 4, '0', NULL, 'entfrm', '2020-03-16 20:39:39', NULL, NULL, '2020-03-16 20:41:01', NULL, '0');
INSERT INTO `sys_menu` VALUES ('29', '字典管理', '1', '6', 'C', 'dict', 'system/dict/index', '', 'dict', '0', 5, '0', NULL, 'entfrm', '2020-03-16 11:33:00', NULL, '', '2020-03-16 11:33:00', '字典管理菜单', '0');
INSERT INTO `sys_menu` VALUES ('30', '字典新增', '29', NULL, 'F', NULL, '#', 'dict_add', NULL, '0', 1, '0', NULL, 'entfrm', '2020-03-16 20:50:45', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('31', '字典修改', '29', NULL, 'F', NULL, '#', 'dict_edit', NULL, '0', 2, '0', NULL, 'entfrm', '2020-03-16 20:51:01', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('32', '字典删除', '29', NULL, 'F', NULL, '#', 'dict_del', NULL, '0', 3, '0', NULL, 'entfrm', '2020-03-16 20:52:18', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('33', '字典查看', '29', NULL, 'F', NULL, '#', 'dict_view', NULL, '0', 4, '0', NULL, 'entfrm', '2020-03-16 20:52:38', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('34', '数据增加', '29', NULL, 'F', NULL, '#', 'dictData_add', NULL, '0', 5, '0', NULL, 'entfrm', '2020-03-16 21:49:18', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('35', '数据修改', '29', NULL, 'F', NULL, '#', 'dictData_edit', NULL, '0', 6, '0', NULL, 'entfrm', '2020-03-16 21:49:36', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('36', '数据删除', '29', NULL, 'F', NULL, '#', 'dictData_del', NULL, '0', 7, '0', NULL, 'entfrm', '2020-03-16 21:50:00', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('37', '数据查看', '29', NULL, 'F', NULL, '#', 'dictData_view', NULL, '0', 8, '0', NULL, 'entfrm', '2020-03-16 21:50:19', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('38', '参数管理', '1', NULL, 'C', 'config', 'system/config/index', NULL, 'list', '0', 6, '0', NULL, 'entfrm', '2020-03-16 22:06:52', NULL, NULL, '2020-03-16 22:11:13', NULL, '0');
INSERT INTO `sys_menu` VALUES ('39', '参数新增', '38', NULL, 'F', NULL, '#', 'config_add', NULL, '0', 1, '0', NULL, 'entfrm', '2020-03-16 22:07:16', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('4', '机构管理', '1', NULL, 'C', 'dept', 'system/dept/index', '', 'tree', '0', 1, '0', NULL, NULL, '2020-03-13 19:31:20', NULL, NULL, '2020-03-14 20:55:41', NULL, '0');
INSERT INTO `sys_menu` VALUES ('40', '参数修改', '38', NULL, 'F', NULL, '#', 'config_edit', NULL, '0', 2, '0', NULL, 'entfrm', '2020-03-16 22:07:30', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('41', '参数删除', '38', NULL, 'F', NULL, '#', 'config_del', NULL, '0', 3, '0', NULL, 'entfrm', '2020-03-16 22:07:43', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('42', '参数查看', '38', NULL, 'F', NULL, '#', 'config_view', NULL, '0', 4, '0', NULL, 'entfrm', '2020-03-16 22:08:06', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('43', '快捷方式', '1', NULL, 'C', 'shortcut', 'system/shortcut/index', NULL, 'link', '0', 7, '0', NULL, 'entfrm', '2020-03-17 17:53:08', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('49', '数据监控', '2', NULL, 'C', 'druid', 'monitor/druid/index', NULL, 'druid', '0', 3, '1', NULL, 'entfrm', '2020-03-17 18:08:56', NULL, 'admin', '2022-01-23 10:44:10', NULL, '0');
INSERT INTO `sys_menu` VALUES ('5', '角色管理', '1', NULL, 'C', 'role', 'system/role/index', '', 'peoples', '0', 2, '0', NULL, NULL, '2020-03-13 19:32:09', NULL, NULL, '2020-03-16 22:11:57', NULL, '0');
INSERT INTO `sys_menu` VALUES ('52', '日志监控', '2', NULL, 'M', 'log', '#', NULL, 'monitor', '0', 7, '0', NULL, 'entfrm', '2020-03-17 18:12:01', NULL, 'admin', '2020-05-17 16:48:23', NULL, '0');
INSERT INTO `sys_menu` VALUES ('54', '操作日志', '52', NULL, 'C', 'operLog', 'monitor/operLog/index', NULL, 'log', '0', 2, '0', NULL, 'entfrm', '2020-03-17 18:13:52', NULL, 'entfrm', '2020-03-18 22:31:36', NULL, '0');
INSERT INTO `sys_menu` VALUES ('6', '用户管理', '1', NULL, 'C', 'user', 'system/user/index', '', 'user', '0', 3, '0', NULL, NULL, '2020-03-13 19:32:30', NULL, NULL, '2020-03-16 22:11:59', NULL, '0');
INSERT INTO `sys_menu` VALUES ('66', '操作日志删除', '54', NULL, 'F', NULL, '#', 'operLog_del', NULL, '0', 1, '0', NULL, 'entfrm', '2020-03-19 11:52:25', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('67', '操作日志查看', '54', NULL, 'F', NULL, '#', 'operLog_view', NULL, '0', 2, '0', NULL, 'entfrm', '2020-03-19 11:52:45', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('68', '操作日志导出', '54', NULL, 'F', NULL, '#', 'operLog_export', NULL, '0', 3, '0', NULL, 'entfrm', '2020-03-19 11:53:09', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_menu` VALUES ('7', '菜单管理', '1', NULL, 'C', 'menu', 'system/menu/index', '', 'tree-table', '0', 4, '0', NULL, NULL, '2020-03-13 19:33:24', NULL, NULL, '2020-03-16 22:12:01', NULL, '0');
INSERT INTO `sys_menu` VALUES ('8', '机构新增', '4', NULL, 'F', NULL, '#', 'dept_add', NULL, '0', 1, '0', NULL, NULL, '2020-03-12 20:42:47', NULL, NULL, '2020-03-16 20:42:51', NULL, '0');
INSERT INTO `sys_menu` VALUES ('9', '机构修改', '4', NULL, 'F', NULL, '#', 'dept_edit', NULL, '0', 2, '0', NULL, NULL, '2020-03-12 20:42:52', NULL, NULL, '2020-03-16 20:42:56', NULL, '0');
-- ----------------------------
-- Table structure for sys_oauth_client_details
-- ----------------------------
DROP TABLE IF EXISTS `sys_oauth_client_details`;
CREATE TABLE `sys_oauth_client_details` (
`client_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '客户端ID',
`resource_ids` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '资源列表',
`client_secret` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户端密钥',
`scope` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '',
`authorized_grant_types` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '认证类型',
`web_server_redirect_uri` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '重定向地址',
`authorities` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '角色列表',
`access_token_validity` int(11) NULL DEFAULT NULL COMMENT 'token 有效期',
`refresh_token_validity` int(11) NULL DEFAULT NULL COMMENT '刷新令牌有效期',
`additional_information` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '令牌扩展字段JSON',
`autoapprove` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否自动放行',
`create_by_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建id',
`create_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新id',
`update_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`client_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '终端信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_oauth_client_details
-- ----------------------------
INSERT INTO `sys_oauth_client_details` VALUES ('app', NULL, 'app', 'server', 'app,refresh_token', NULL, NULL, NULL, NULL, NULL, 'true', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `sys_oauth_client_details` VALUES ('daemon', NULL, 'daemon', 'server', 'password,refresh_token', NULL, NULL, NULL, NULL, NULL, 'true', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `sys_oauth_client_details` VALUES ('kicc', NULL, 'kicc', 'server', 'password,app,refresh_token,authorization_code,client_credentials', 'https://www.baidu.com/', NULL, NULL, NULL, '{\"appName\":\"康来生物\",\"website\":\"https://www.kanglailab.com\"}', 'false', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `sys_oauth_client_details` VALUES ('test', NULL, 'test', 'server', 'password,app,refresh_token', NULL, NULL, NULL, NULL, NULL, 'true', NULL, NULL, NULL, NULL, NULL, NULL);
-- ----------------------------
-- Table structure for sys_oper_log
-- ----------------------------
DROP TABLE IF EXISTS `sys_oper_log`;
CREATE TABLE `sys_oper_log` (
`id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '日志编号',
`type` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '1' COMMENT '日志类型',
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '日志标题',
`method` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '方法名称',
`service_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '服务ID',
`user_agent` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '用户代理',
`oper_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作人员',
`client_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '终端',
`oper_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求URL',
`oper_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '主机地址',
`oper_addr` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作地点',
`oper_param` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求参数',
`status` int(1) NULL DEFAULT 0 COMMENT '操作状态(0正常 1异常)',
`error_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '错误消息',
`execute_time` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '执行时间',
`oper_time` datetime NULL DEFAULT NULL COMMENT '操作时间',
`create_by_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建id',
`create_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新id',
`update_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_oper_log
-- ----------------------------
INSERT INTO `sys_oper_log` VALUES ('1505896326514978817', '0', '登录成功', 'POST', 'kicc', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36', 'admin', 'kicc', '/oauth/token', '127.0.0.1', '127.0.0.1', 'password=%5B123456%5D&code=%5Ba8bg%5D&grant_type=%5Bpassword%5D&scope=%5Bserver%5D&realKey=%5Bfb45a6b19c6fd3e7a0d75bb59c4bfb98%5D&username=%5Badmin%5D', 0, NULL, '2毫秒', '2022-03-21 21:17:15', '1', 'admin', '2022-03-21 21:17:17', '1', 'admin', NULL);
INSERT INTO `sys_oper_log` VALUES ('1505897993692098561', '0', '字典删除', 'DELETE', 'kicc', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36', 'admin', 'kicc', '/system/dict/remove/11,12,13,15,16,17,18', '127.0.0.1', '127.0.0.1', '', 0, NULL, '25毫秒', '2022-03-21 21:23:54', '1', 'admin', '2022-03-21 21:23:55', '1', 'admin', NULL);
INSERT INTO `sys_oper_log` VALUES ('1505898063552425985', '0', '字典删除', 'DELETE', 'kicc', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36', 'admin', 'kicc', '/system/dict/remove/20,21', '127.0.0.1', '127.0.0.1', '', 0, NULL, '3毫秒', '2022-03-21 21:24:11', '1', 'admin', '2022-03-21 21:24:11', '1', 'admin', NULL);
INSERT INTO `sys_oper_log` VALUES ('1505898080786821121', '0', '字典删除', 'DELETE', 'kicc', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36', 'admin', 'kicc', '/system/dict/remove/7', '127.0.0.1', '127.0.0.1', '', 0, NULL, '3毫秒', '2022-03-21 21:24:15', '1', 'admin', '2022-03-21 21:24:15', '1', 'admin', NULL);
INSERT INTO `sys_oper_log` VALUES ('1505902151899918338', '0', '角色新增', 'POST', 'kicc', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36', 'admin', 'kicc', '/system/role/save', '127.0.0.1', '127.0.0.1', '', 0, NULL, '12毫秒', '2022-03-21 21:40:25', '1', 'admin', '2022-03-21 21:40:26', '1', 'admin', NULL);
INSERT INTO `sys_oper_log` VALUES ('1505902332351459330', '0', '退出成功', 'DELETE', 'kicc', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36', 'admin', 'kicc', '/token/logout', '127.0.0.1', '127.0.0.1', 'Bearer 84424c14-708b-4159-a9ff-886aca9a934b', 0, NULL, '0毫秒', '2022-03-21 21:41:08', '1', 'admin', '2022-03-21 21:41:09', '1', 'admin', NULL);
INSERT INTO `sys_oper_log` VALUES ('1505902357383065602', '0', '登录成功', 'POST', 'kicc', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36', 'admin', 'kicc', '/oauth/token', '127.0.0.1', '127.0.0.1', 'password=%5B123456%5D&code=%5Buaw3%5D&grant_type=%5Bpassword%5D&scope=%5Bserver%5D&realKey=%5Be515f6bf162cb6cc28d48e2c6d831639%5D&username=%5Badmin%5D', 0, NULL, '0毫秒', '2022-03-21 21:41:14', '1', 'admin', '2022-03-21 21:41:15', '1', 'admin', NULL);
-- ----------------------------
-- Table structure for sys_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`name` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '角色名称',
`code` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '角色代码',
`data_scope` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '2' COMMENT '数据权限范围',
`sort` int(11) NULL DEFAULT NULL COMMENT '排序',
`status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态',
`create_by_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建id',
`create_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改id',
`update_by_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人',
`update_time` datetime NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注',
`del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '0' COMMENT '删除标识(0-正常,1-删除)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_role
-- ----------------------------
INSERT INTO `sys_role` VALUES ('1', '管理员', 'admin', '1', 1, '0', NULL, NULL, '2020-03-13 20:54:34', '1', 'entfrm', '2020-08-02 21:44:58', NULL, '0');
INSERT INTO `sys_role` VALUES ('1505902151883141121', '省长角色', 'scjs', '2', 0, '0', '1', 'admin', '2022-03-21 21:40:26', NULL, NULL, NULL, NULL, '0');
INSERT INTO `sys_role` VALUES ('2', '测试角色', 'test', '2', 1, '0', NULL, NULL, '2020-03-14 18:15:51', NULL, 'entfrm', '2020-08-02 21:44:57', NULL, '0');
INSERT INTO `sys_role` VALUES ('3', 'cs', 'cs', '2', 0, '0', NULL, NULL, '2022-03-10 16:53:08', NULL, 'admin', '2022-03-10 16:53:12', NULL, '1');
-- ----------------------------
-- Table structure for sys_role_dept
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_dept`;
CREATE TABLE `sys_role_dept` (
`role_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色ID',
`dept_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '部门ID'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_role_dept
-- ----------------------------
INSERT INTO `sys_role_dept` VALUES ('2', '2');
-- ----------------------------
-- Table structure for sys_role_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_menu`;
CREATE TABLE `sys_role_menu` (
`role_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`menu_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_role_menu
-- ----------------------------
INSERT INTO `sys_role_menu` VALUES ('2', '11');
INSERT INTO `sys_role_menu` VALUES ('2', '16');
INSERT INTO `sys_role_menu` VALUES ('2', '7');
INSERT INTO `sys_role_menu` VALUES ('2', '25');
INSERT INTO `sys_role_menu` VALUES ('2', '26');
INSERT INTO `sys_role_menu` VALUES ('2', '27');
INSERT INTO `sys_role_menu` VALUES ('2', '28');
INSERT INTO `sys_role_menu` VALUES ('2', '33');
INSERT INTO `sys_role_menu` VALUES ('2', '1');
INSERT INTO `sys_role_menu` VALUES ('2', '4');
INSERT INTO `sys_role_menu` VALUES ('2', '5');
INSERT INTO `sys_role_menu` VALUES ('2', '29');
INSERT INTO `sys_role_menu` VALUES ('1', '4');
INSERT INTO `sys_role_menu` VALUES ('1', '8');
INSERT INTO `sys_role_menu` VALUES ('1', '9');
INSERT INTO `sys_role_menu` VALUES ('1', '10');
INSERT INTO `sys_role_menu` VALUES ('1', '11');
INSERT INTO `sys_role_menu` VALUES ('1', '5');
INSERT INTO `sys_role_menu` VALUES ('1', '13');
INSERT INTO `sys_role_menu` VALUES ('1', '14');
INSERT INTO `sys_role_menu` VALUES ('1', '15');
INSERT INTO `sys_role_menu` VALUES ('1', '16');
INSERT INTO `sys_role_menu` VALUES ('1', '17');
INSERT INTO `sys_role_menu` VALUES ('1', '6');
INSERT INTO `sys_role_menu` VALUES ('1', '18');
INSERT INTO `sys_role_menu` VALUES ('1', '19');
INSERT INTO `sys_role_menu` VALUES ('1', '20');
INSERT INTO `sys_role_menu` VALUES ('1', '21');
INSERT INTO `sys_role_menu` VALUES ('1', '22');
INSERT INTO `sys_role_menu` VALUES ('1', '7');
INSERT INTO `sys_role_menu` VALUES ('1', '25');
INSERT INTO `sys_role_menu` VALUES ('1', '26');
INSERT INTO `sys_role_menu` VALUES ('1', '27');
INSERT INTO `sys_role_menu` VALUES ('1', '28');
INSERT INTO `sys_role_menu` VALUES ('1', '29');
INSERT INTO `sys_role_menu` VALUES ('1', '30');
INSERT INTO `sys_role_menu` VALUES ('1', '31');
INSERT INTO `sys_role_menu` VALUES ('1', '32');
INSERT INTO `sys_role_menu` VALUES ('1', '33');
INSERT INTO `sys_role_menu` VALUES ('1', '34');
INSERT INTO `sys_role_menu` VALUES ('1', '35');
INSERT INTO `sys_role_menu` VALUES ('1', '36');
INSERT INTO `sys_role_menu` VALUES ('1', '37');
INSERT INTO `sys_role_menu` VALUES ('1', '38');
INSERT INTO `sys_role_menu` VALUES ('1', '39');
INSERT INTO `sys_role_menu` VALUES ('1', '40');
INSERT INTO `sys_role_menu` VALUES ('1', '41');
INSERT INTO `sys_role_menu` VALUES ('1', '42');
INSERT INTO `sys_role_menu` VALUES ('1', '43');
INSERT INTO `sys_role_menu` VALUES ('1', '105');
INSERT INTO `sys_role_menu` VALUES ('1', '106');
INSERT INTO `sys_role_menu` VALUES ('1', '107');
INSERT INTO `sys_role_menu` VALUES ('1', '108');
INSERT INTO `sys_role_menu` VALUES ('1', '2');
INSERT INTO `sys_role_menu` VALUES ('1', '52');
INSERT INTO `sys_role_menu` VALUES ('1', '54');
INSERT INTO `sys_role_menu` VALUES ('1', '66');
INSERT INTO `sys_role_menu` VALUES ('1', '67');
INSERT INTO `sys_role_menu` VALUES ('1', '68');
INSERT INTO `sys_role_menu` VALUES ('1', '236');
INSERT INTO `sys_role_menu` VALUES ('1', '1');
-- ----------------------------
-- Table structure for sys_shortcut
-- ----------------------------
DROP TABLE IF EXISTS `sys_shortcut`;
CREATE TABLE `sys_shortcut` (
`id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称',
`region` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '区域',
`icon` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图标',
`bg_color` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '#409EFF' COMMENT '背景颜色',
`path` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '路径',
`sort` int(11) NULL DEFAULT NULL COMMENT '顺序',
`create_by_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建id',
`create_by_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新id',
`update_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`remarks` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
`del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '0' COMMENT '0-正常,1-删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_shortcut
-- ----------------------------
INSERT INTO `sys_shortcut` VALUES ('1', '登录日志', '2', 'form', '#2883CD', 'monitor/log/loginLog', 1, NULL, NULL, '2020-03-27 10:09:11', NULL, '', '2020-03-27 10:12:39', '1', '0');
INSERT INTO `sys_shortcut` VALUES ('2', '内容管理', '2', 'edit', '#EB7024', '/cms/article', 2, NULL, NULL, '2020-04-15 22:44:58', NULL, '', '2020-06-02 08:59:06', NULL, '0');
-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`user_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户账号',
`nick_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户昵称',
`type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '00' COMMENT '用户类型(00系统用户)',
`password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '密码',
`dept_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '机构ID',
`dept_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '机构名称',
`email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户邮箱',
`qq` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'QQ',
`phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '手机号码',
`sex` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
`avatar` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '头像地址',
`status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '帐号状态(0正常 1停用)',
`login_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '最后登陆IP',
`login_time` datetime NULL DEFAULT NULL COMMENT '最后登陆时间',
`create_by_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建id',
`create_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新id',
`update_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`remarks` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
`del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES ('1', 'admin', '管理员', '00', '$2a$10$jvVGvS6QOtD.x3UwuZRSgepL.zKul6NRg2kVnRVDUdeN2FErIQgNy', '1', '康来生物长沙总公司', '111@qq.com', NULL, '15611111111', '0', '', '0', '', NULL, NULL, NULL, '2020-03-13 20:56:44', NULL, '', '2022-02-25 15:20:56', '全栈工程师', '0');
INSERT INTO `sys_user` VALUES ('2', 'test', '测试01', '00', '$2a$10$jvVGvS6QOtD.x3UwuZRSgepL.zKul6NRg2kVnRVDUdeN2FErIQgNy', '1', '康来生物长沙总公司', '182@11.com', NULL, '15780454444', '0', '', '0', '', NULL, NULL, NULL, '2020-03-14 18:14:11', NULL, '', '2022-01-15 13:53:59', NULL, '0');
-- ----------------------------
-- Table structure for sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role` (
`user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`role_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_user_role
-- ----------------------------
INSERT INTO `sys_user_role` VALUES ('4', '2');
INSERT INTO `sys_user_role` VALUES ('3', '2');
INSERT INTO `sys_user_role` VALUES ('5', '2');
INSERT INTO `sys_user_role` VALUES ('8', '2');
INSERT INTO `sys_user_role` VALUES ('9', '2');
INSERT INTO `sys_user_role` VALUES ('3', '1');
INSERT INTO `sys_user_role` VALUES ('4', '1');
INSERT INTO `sys_user_role` VALUES ('5', '1');
INSERT INTO `sys_user_role` VALUES ('6', '1');
INSERT INTO `sys_user_role` VALUES ('7', '1');
INSERT INTO `sys_user_role` VALUES ('8', '1');
INSERT INTO `sys_user_role` VALUES ('9', '1');
INSERT INTO `sys_user_role` VALUES ('10', '1');
INSERT INTO `sys_user_role` VALUES ('2', '1');
INSERT INTO `sys_user_role` VALUES ('1', '1');
-- ----------------------------
-- Table structure for undo_log
-- ----------------------------
DROP TABLE IF EXISTS `undo_log`;
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`context` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
`ext` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `ux_undo_log`(`xid`, `branch_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of undo_log
-- ----------------------------
SET FOREIGN_KEY_CHECKS = 1;

1072
doc/sql/kicc_config.sql

File diff suppressed because one or more lines are too long

209
doc/sql/kicc_job.sql

@ -0,0 +1,209 @@ @@ -0,0 +1,209 @@
/*
Navicat Premium Data Transfer
Source Server :
Source Server Type : MySQL
Source Server Version : 50732
Source Host : localhost:3306
Source Schema : kicc_job
Target Server Type : MySQL
Target Server Version : 50732
File Encoding : 65001
Date: 21/03/2022 21:50:01
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for xxl_job_group
-- ----------------------------
DROP TABLE IF EXISTS `xxl_job_group`;
CREATE TABLE `xxl_job_group` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`app_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '执行器AppName',
`title` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '执行器名称',
`address_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '执行器地址类型:0=自动注册、1=手动录入',
`address_list` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '执行器地址列表,多地址逗号分隔',
`update_time` datetime NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of xxl_job_group
-- ----------------------------
INSERT INTO `xxl_job_group` VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL, '2022-03-13 16:10:40');
-- ----------------------------
-- Table structure for xxl_job_info
-- ----------------------------
DROP TABLE IF EXISTS `xxl_job_info`;
CREATE TABLE `xxl_job_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_group` int(11) NOT NULL COMMENT '执行器主键ID',
`job_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`add_time` datetime NULL DEFAULT NULL,
`update_time` datetime NULL DEFAULT NULL,
`author` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '作者',
`alarm_email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '报警邮件',
`schedule_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'NONE' COMMENT '调度类型',
`schedule_conf` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型',
`misfire_strategy` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'DO_NOTHING' COMMENT '调度过期策略',
`executor_route_strategy` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '执行器路由策略',
`executor_handler` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '执行器任务handler',
`executor_param` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '执行器任务参数',
`executor_block_strategy` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '阻塞处理策略',
`executor_timeout` int(11) NOT NULL DEFAULT 0 COMMENT '任务执行超时时间,单位秒',
`executor_fail_retry_count` int(11) NOT NULL DEFAULT 0 COMMENT '失败重试次数',
`glue_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'GLUE类型',
`glue_source` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'GLUE源代码',
`glue_remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'GLUE备注',
`glue_updatetime` datetime NULL DEFAULT NULL COMMENT 'GLUE更新时间',
`child_jobid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '子任务ID,多个逗号分隔',
`trigger_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '调度状态:0-停止,1-运行',
`trigger_last_time` bigint(13) NOT NULL DEFAULT 0 COMMENT '上次调度时间',
`trigger_next_time` bigint(13) NOT NULL DEFAULT 0 COMMENT '下次调度时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of xxl_job_info
-- ----------------------------
INSERT INTO `xxl_job_info` VALUES (1, 1, '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', '', 0, 0, 0);
-- ----------------------------
-- Table structure for xxl_job_lock
-- ----------------------------
DROP TABLE IF EXISTS `xxl_job_lock`;
CREATE TABLE `xxl_job_lock` (
`lock_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '锁名称',
PRIMARY KEY (`lock_name`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of xxl_job_lock
-- ----------------------------
INSERT INTO `xxl_job_lock` VALUES ('schedule_lock');
-- ----------------------------
-- Table structure for xxl_job_log
-- ----------------------------
DROP TABLE IF EXISTS `xxl_job_log`;
CREATE TABLE `xxl_job_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`job_group` int(11) NOT NULL COMMENT '执行器主键ID',
`job_id` int(11) NOT NULL COMMENT '任务,主键ID',
`executor_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
`executor_handler` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '执行器任务handler',
`executor_param` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '执行器任务参数',
`executor_sharding_param` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2',
`executor_fail_retry_count` int(11) NOT NULL DEFAULT 0 COMMENT '失败重试次数',
`trigger_time` datetime NULL DEFAULT NULL COMMENT '调度-时间',
`trigger_code` int(11) NOT NULL COMMENT '调度-结果',
`trigger_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '调度-日志',
`handle_time` datetime NULL DEFAULT NULL COMMENT '执行-时间',
`handle_code` int(11) NOT NULL COMMENT '执行-状态',
`handle_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '执行-日志',
`alarm_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败',
PRIMARY KEY (`id`) USING BTREE,
INDEX `I_trigger_time`(`trigger_time`) USING BTREE,
INDEX `I_handle_code`(`handle_code`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of xxl_job_log
-- ----------------------------
INSERT INTO `xxl_job_log` VALUES (1, 1, 1, NULL, 'demoJobHandler', '', NULL, 0, '2022-02-17 22:43:28', 500, '任务触发类型:手动触发<br>调度机器:192.168.3.126<br>执行器-注册方式:自动注册<br>执行器-地址列表:null<br>路由策略:第一个<br>阻塞处理策略:单机串行<br>任务超时时间:0<br>失败重试次数:0<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>触发调度<<<<<<<<<<< </span><br>调度失败:执行器地址为空<br><br>', NULL, 0, NULL, 1);
INSERT INTO `xxl_job_log` VALUES (2, 1, 1, NULL, 'demoJobHandler', '', NULL, 0, '2022-03-01 22:40:54', 500, '任务触发类型:手动触发<br>调度机器:172.28.0.6<br>执行器-注册方式:自动注册<br>执行器-地址列表:null<br>路由策略:第一个<br>阻塞处理策略:单机串行<br>任务超时时间:0<br>失败重试次数:0<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>触发调度<<<<<<<<<<< </span><br>调度失败:执行器地址为空<br><br>', NULL, 0, NULL, 1);
-- ----------------------------
-- Table structure for xxl_job_log_report
-- ----------------------------
DROP TABLE IF EXISTS `xxl_job_log_report`;
CREATE TABLE `xxl_job_log_report` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`trigger_day` datetime NULL DEFAULT NULL COMMENT '调度-时间',
`running_count` int(11) NOT NULL DEFAULT 0 COMMENT '运行中-日志数量',
`suc_count` int(11) NOT NULL DEFAULT 0 COMMENT '执行成功-日志数量',
`fail_count` int(11) NOT NULL DEFAULT 0 COMMENT '执行失败-日志数量',
`update_time` datetime NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `i_trigger_day`(`trigger_day`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of xxl_job_log_report
-- ----------------------------
INSERT INTO `xxl_job_log_report` VALUES (1, '2022-02-17 00:00:00', 0, 0, 1, NULL);
INSERT INTO `xxl_job_log_report` VALUES (2, '2022-02-16 00:00:00', 0, 0, 0, NULL);
INSERT INTO `xxl_job_log_report` VALUES (3, '2022-02-15 00:00:00', 0, 0, 0, NULL);
INSERT INTO `xxl_job_log_report` VALUES (4, '2022-02-18 00:00:00', 0, 0, 0, NULL);
INSERT INTO `xxl_job_log_report` VALUES (5, '2022-03-01 00:00:00', 0, 0, 1, NULL);
INSERT INTO `xxl_job_log_report` VALUES (6, '2022-02-28 00:00:00', 0, 0, 0, NULL);
INSERT INTO `xxl_job_log_report` VALUES (7, '2022-02-27 00:00:00', 0, 0, 0, NULL);
INSERT INTO `xxl_job_log_report` VALUES (8, '2022-03-02 00:00:00', 0, 0, 0, NULL);
INSERT INTO `xxl_job_log_report` VALUES (9, '2022-03-03 00:00:00', 0, 0, 0, NULL);
INSERT INTO `xxl_job_log_report` VALUES (10, '2022-03-12 00:00:00', 0, 0, 0, NULL);
INSERT INTO `xxl_job_log_report` VALUES (11, '2022-03-11 00:00:00', 0, 0, 0, NULL);
INSERT INTO `xxl_job_log_report` VALUES (12, '2022-03-10 00:00:00', 0, 0, 0, NULL);
INSERT INTO `xxl_job_log_report` VALUES (13, '2022-03-13 00:00:00', 0, 0, 0, NULL);
-- ----------------------------
-- Table structure for xxl_job_logglue
-- ----------------------------
DROP TABLE IF EXISTS `xxl_job_logglue`;
CREATE TABLE `xxl_job_logglue` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_id` int(11) NOT NULL COMMENT '任务,主键ID',
`glue_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'GLUE类型',
`glue_source` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'GLUE源代码',
`glue_remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'GLUE备注',
`add_time` datetime NULL DEFAULT NULL,
`update_time` datetime NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of xxl_job_logglue
-- ----------------------------
-- ----------------------------
-- Table structure for xxl_job_registry
-- ----------------------------
DROP TABLE IF EXISTS `xxl_job_registry`;
CREATE TABLE `xxl_job_registry` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`registry_group` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`registry_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`registry_value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`update_time` datetime NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `i_g_k_v`(`registry_group`, `registry_key`, `registry_value`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of xxl_job_registry
-- ----------------------------
-- ----------------------------
-- Table structure for xxl_job_user
-- ----------------------------
DROP TABLE IF EXISTS `xxl_job_user`;
CREATE TABLE `xxl_job_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '账号',
`password` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',
`role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员',
`permission` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `i_username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of xxl_job_user
-- ----------------------------
INSERT INTO `xxl_job_user` VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL);
SET FOREIGN_KEY_CHECKS = 1;

101
docker-cloud/docker-compose.yml

@ -0,0 +1,101 @@ @@ -0,0 +1,101 @@
# PROJECT: 康来生物有限公司kicc(智慧冷链)分布式架构平台
# VERSION: 1.0.0
# Author: 康来生物科技有限公司-王翔
# https://support.websoft9.com/docs/docker/zh/solution-compose.html#command
version: '3'
services:
# register配置
kicc-register:
build:
context: ../kicc-register
restart: always
container_name: kicc-register
hostname: kicc-register
image: kicc-register
ports:
- 8848:8848
# 服务端口,注意通过阅读官方文档,发现nacos2.x使用docker部署时一定要保持映射端口一致
# 不一样会出现本地服务访问不了服务端nacos: https://nacos.io/zh-cn/docs/2.0.0-compatibility.html
# 经过测试使用docker部署时候,还需要开启对应供应商服务器的防火墙端口,不开第三方外部客户端连不上,会报错
- 9848:9848
- 9849:9849
# rocketmq-dashboard配置
kicc-rocketmq:
build:
context: ../kicc-visual/kicc-rocketmq-dashboard
container_name: kicc-rocketmq
image: kicc-rocketmq-dashboard
hostname: kicc-rocketmq
restart: always
ports:
- 8058:8058
# sentinel-dashboard配置
kicc-sentinel:
build:
context: ../kicc-visual/kicc-sentinel-dashboard
container_name: kicc-sentinel
image: kicc-sentinel-dashboard
hostname: kicc-sentinel
restart: always
ports:
- 8056:8056
# xxl-job-admin配置
kicc-job:
build:
context: ../kicc-visual/kicc-xxl-job-admin
container_name: kicc-job
image: kicc-xxl-job-admin
hostname: kicc-job
restart: always
ports:
- 8057:8057
# spring-admin配置
kicc-monitor:
build:
context: ../kicc-visual/kicc-monitor
container_name: kicc-monitor
restart: always
image: kicc-monitor
hostname: kicc-monitor
ports:
- 8061:8061
# gateway配置
kicc-gateway:
build:
context: ../kicc-gateway
container_name: kicc-gateway
environment:
GATEWAY_HOST: 120.26.168.56
image: kicc-gateway
hostname: kicc-gateway
restart: always
ports:
- 9999:9999
# oauth2.0配置
kicc-auth:
build:
context: ../kicc-auth
container_name: kicc-auth
image: kicc-auth
hostname: kicc-auth
restart: always
ports:
- 3000:3000
# system-biz配置
kicc-system:
build:
context: ../kicc-system/kicc-system-biz
container_name: kicc-system
image: kicc-system-biz
hostname: kicc-system
restart: always
ports:
- 4000:4000

32
docker-cloud/gitea/docker-compose.yml

@ -0,0 +1,32 @@ @@ -0,0 +1,32 @@
# PROJECT: 康来生物有限公司kicc(智慧冷链)分布式架构平台
# VERSION: 1.0.0
# Author: 康来生物科技有限公司-王翔
# 更多信息请参考官网:https://docs.gitea.io/en-us/install-with-docker/
version: "3"
services:
# git私有库,公司代码管理服务器
gitea-server:
image: gitea/gitea:1.16.3
container_name: gitea-server
environment:
- GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=120.26.168.56:8052
- GITEA__database__NAME=gitea
- GITEA__database__USER=root
- GITEA__database__PASSWD=kanglai@2022
hostname: gitea-server
restart: always
volumes:
- gitea:/data
- /usr/software/dockerDatabase/gitea/timezone:/etc/timezone:ro
- /usr/software/dockerDatabase/gitea/localtime:/etc/localtime:ro
ports:
- 8066:3000
- 8065:22
# 配置卷
volumes:
gitea:
driver: local

23
docker-cloud/jira/docker-compose.yml

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
# PROJECT: 康来生物有限公司kicc(智慧冷链)分布式架构平台
# VERSION: 1.0.0
# Author: 康来生物科技有限公司-王翔
# 更多信息请参考官网:https://docs.gitea.io/en-us/install-with-docker/
version: "3"
services:
#团队项目生命周期管理工具
jira:
build:
context: ./image
container_name: jira
image: jira
hostname: jira
restart: always
ports:
- 9300:8080
volumes:
- /usr/software/dockerDatabase/jira/data:/var/atlassian/jira
- /usr/software/dockerDatabase/jira/logs:/opt/atlassian/jira/logs
- /usr/share/zoneinfo/Asia/Shanghai:/usr/share/zoneinfo/Asia/Shanghai
- /etc/localtime:/etc/localtime

10
docker-cloud/jira/image/Dockerfile

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
FROM cptactionhank/atlassian-jira-software:latest
USER root
# 将代理破解包加入容器
COPY "./lib/atlassian-agent.jar" /opt/atlassian/jira/
# 设置启动加载代理包
RUN echo 'export CATALINA_OPTS="-javaagent:/opt/atlassian/jira/atlassian-agent.jar ${CATALINA_OPTS}"' >> /opt/atlassian/jira/bin/setenv.sh

5
docker-cloud/jira/image/lib/README.md

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
```bash
# atlassian-agent.jar证书生成命令
java -jar atlassian-agent.jar -p jira -m 1827945911@qq.com -n wangxiang -o wangxiang -s 更换自己的服务器ID
```

BIN
docker-cloud/jira/image/lib/atlassian-agent.jar

Binary file not shown.

32
docker-cloud/mysql/docker-compose.yml

@ -0,0 +1,32 @@ @@ -0,0 +1,32 @@
# PROJECT: 康来生物有限公司kicc(智慧冷链)分布式架构平台
# VERSION: 1.0.0
# Author: 康来生物科技有限公司-王翔
# https://support.websoft9.com/docs/docker/zh/solution-compose.html#command
version: '3'
services:
# mysql 服务器
mysql:
image: mysql:5.7.32
container_name: mysql
hostname: mysql
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: kanglai@2022
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M
volumes:
- mysql:/var/lib/mysql
- /usr/software/dockerDatabase/mysql/my.cnf:/etc/my.cnf
restart: always
ports:
- 8052:3306
# 配置卷
volumes:
mysql:
driver: local

24
docker-cloud/portainer/docker-compose.yml

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
# PROJECT: 康来生物有限公司kicc(智慧冷链)分布式架构平台
# VERSION: 1.0.0
# Author: 康来生物科技有限公司-王翔
# https://support.websoft9.com/docs/docker/zh/solution-compose.html#command
version: '3'
services:
# docker管理面板,已经中文汉化
portainer:
image: 6053537/portainer-ce
container_name: portainer
hostname: portainer
volumes:
- portainer_data:/data
- /usr/software/dockerDatabase/portainer/docker.sock:/var/run/docker.sock
restart: always
ports:
- 8051:9000
# 配置卷
volumes:
portainer_data:
driver: local

24
docker-cloud/redis/docker-compose.yml

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
# PROJECT: 康来生物有限公司kicc(智慧冷链)分布式架构平台
# VERSION: 1.0.0
# Author: 康来生物科技有限公司-王翔
# https://support.websoft9.com/docs/docker/zh/solution-compose.html#command
version: '3'
services:
# redis服务器
redis:
image: redis:6.2.6
container_name: redis
hostname: redis
restart: always
ports:
- 6379:6379
volumes:
- redis:/data
- /usr/software/dockerDatabase/redis/redis.conf:/usr/local/etc/redis/redis.conf
# 配置卷
volumes:
redis:
driver: local

96
docker-cloud/rocketmq/brokerconf/broker.conf

@ -0,0 +1,96 @@ @@ -0,0 +1,96 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# 所属集群名字
brokerClusterName=DefaultCluster
# broker 名字,注意此处不同的配置文件填写的不一样,如果在 broker-a.properties 使用: broker-a,
# 在 broker-b.properties 使用: broker-b
brokerName=broker-a
# 0 表示 Master,> 0 表示 Slave
brokerId=0
# nameServer地址,分号分割
# namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
# 启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.0.120:10909> failed
# 解决方式1 加上一句 producer.setVipChannelEnabled(false);,解决方式2 brokerIP1 设置宿主机IP,不要使用docker 内部IP
brokerIP1=120.26.168.56
# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
# 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 false,false,false
autoCreateTopicEnable=true
# 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# Broker 对外服务的监听端口
listenPort=10911
# 删除文件时间点,默认凌晨4点
deleteWhen=04
# 文件保留时间,默认48小时
fileReservedTime=120
# commitLog 每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
# ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
# destroyMapedFileIntervalForcibly=120000
# redeleteHangedFileInterval=120000
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 存储路径
# storePathRootDir=/home/ztztdata/rocketmq-all-4.1.0-incubating/store
# commitLog 存储路径
# storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog
# 消费队列存储
# storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue
# 消息索引存储路径
# storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index
# checkpoint 文件存储路径
# storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint
# abort 文件存储路径
# abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort
# 限制的消息大小
maxMessageSize=65536
# flushCommitLogLeastPages=4
# flushConsumeQueueLeastPages=2
# flushCommitLogThoroughInterval=10000
# flushConsumeQueueThoroughInterval=60000
# Broker 的角色
# - ASYNC_MASTER 异步复制Master
# - SYNC_MASTER 同步双写Master
# - SLAVE
brokerRole=ASYNC_MASTER
# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
# 发消息线程池数量
# sendMessageThreadPoolNums=128
# 拉消息线程池数量
# pullMessageThreadPoolNums=128

50
docker-cloud/rocketmq/docker-compose.yml

@ -0,0 +1,50 @@ @@ -0,0 +1,50 @@
# PROJECT: 康来生物有限公司kicc(智慧冷链)分布式架构平台
# VERSION: 1.0.0
# Author: 康来生物科技有限公司-王翔
# https://support.websoft9.com/docs/docker/zh/solution-compose.html#command
version: '3'
services:
# rocketmq代理发现注册服务
rmqnamesrv:
image: foxiswho/rocketmq:server
container_name: rmqnamesrv
restart: always
ports:
- 9876:9876
volumes:
- /usr/software/dockerDatabase/rocketmq/namesrv/logs:/opt/logs
- /usr/software/dockerDatabase/rocketmq/namesrv/store:/opt/store
networks:
rmq:
aliases:
- rmqnamesrv
# rocketmq核心消息发送存储代理
rmqbroker:
image: foxiswho/rocketmq:broker
container_name: rmqbroker
restart: always
ports:
- 10909:10909
- 10911:10911
volumes:
- /usr/software/dockerDatabase/rocketmq/namesrv/logs:/opt/logs
- /usr/software/dockerDatabase/rocketmq/namesrv/store:/opt/store
- /usr/software/dockerDatabase/rocketmq/broker/brokerconf/broker.conf:/etc/rocketmq/broker.conf
environment:
NAMESRV_ADDR: "rmqnamesrv:9876"
JAVA_OPTS: "-Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m"
command: mqbroker -c /etc/rocketmq/broker.conf
depends_on:
- rmqnamesrv
networks:
rmq:
aliases:
- rmqbroker
# 局域网网关配置
networks:
rmq:
driver: bridge

15
docker-cloud/seata/conf/nacos/README.md

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
##nacos-config.sh
| 命令 | 描述 | 默认 |
|------|-----------|-------------|
|-h | nacos主机地址 | 127.0.0.1 |
|-p | nacos主机端口 | 8848 |
|-g | nacos分组名称 | public |
|-t | nacos命名空间 | DEFAULT_GROUP |
|-u | nacos账户 | 无 |
|-w | nacos密码 | 无 |
```bash
# nacos导入命令,把config.txt与nacos-config.sh传到服务器注意需要保持同级目录,然后运行下方命令
./nacos-config.sh -h 101.42.231.100 -g SEATA_GROUP -t kicc-seata
```

134
docker-cloud/seata/conf/nacos/config.txt

@ -0,0 +1,134 @@ @@ -0,0 +1,134 @@
# PROJECT: 康来生物有限公司kicc(智慧冷链)分布式架构平台
# VERSION: 1.0.0
# Author: 康来生物科技有限公司-王翔
# 有关配置项的详细信息,请参考:https://seata.io/zh-cn/docs/user/configurations.html
# 客户端与服务端传输方式
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableTmClientBatchSendRequest=false
transport.enableRmClientBatchSendRequest=true
transport.enableTcServerBatchSendResponse=false
transport.rpcRmRequestTimeout=30000
transport.rpcTmRequestTimeout=30000
transport.rpcTcRequestTimeout=30000
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
transport.serialization=seata
transport.compressor=none
# 事务路由规则配置,仅针对客户端
# seata事务组编号,用于TC集群名,很重要,与项目配置文件的tx-service-group对应
service.vgroupMapping.default_tx_group=default
# 默认的群组集群list,仅注册中心为file时使用,使用nacos注册中心不需要写了:https://github.com/seata/seata/issues/3473
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false
# 事务规则配置,仅针对客户端
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=false
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.rm.sagaJsonParser=fastjson
client.rm.tccActionInterceptorOrder=-2147482648
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000
client.tm.interceptorOrder=-2147482648
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
# 针对于TCC交易模式
tcc.fence.logTableName=tcc_fence_log
tcc.fence.cleanPeriod=1h
# 日志规则配置,用于客户端和服务器
log.exceptionRate=100
# 事务存储配置,file,db,redis为可选配置,推荐db模式
store.mode=db
store.lock.mode=file
store.session.mode=file
# 用于密码加密
# store.publicKey=
# 如果store.mode,store.lock.mode,store.session.mode不等于file可以移除配置块
store.file.dir=file_store/data
store.file.maxBranchSessionSize=16384
store.file.maxGlobalSessionSize=512
store.file.fileWriteBufferCacheSize=16384
store.file.flushDiskMode=async
store.file.sessionReloadReadSize=100
# 如果store.mode为db则需要这些配置,如果store.mode,store.lock.mode,store.session.mode不等于db可以移除配置块
store.db.datasource=druid
# 如果为DB模式需要配置数据库,数据库默认数据库为mysql
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://120.26.168.56:8052/kicc_seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=kanglai@2022
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.distributedLockTable=distributed_lock
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
# 如果store.mode为redis则需要这些配置,如果store.mode,store.lock.mode,store.session.mode不等于redis可以移除配置块
store.redis.mode=single
store.redis.single.host=127.0.0.1
store.redis.single.port=6379
# store.redis.sentinel.masterName=
# store.redis.sentinel.sentinelHosts=
store.redis.maxConn=10
store.redis.minConn=1
store.redis.maxTotal=100
store.redis.database=0
# store.redis.password=
store.redis.queryLimit=100
# 交易规则配置,只针对服务端
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
server.distributedLockExpireTime=10000
server.session.branchAsyncQueueSize=5000
server.session.enableBranchAsyncRemove=true
# 关闭metrics统计信息功能,提高性能:https://developer.aliyun.com/article/710333
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

120
docker-cloud/seata/conf/nacos/nacos-config.sh

@ -0,0 +1,120 @@ @@ -0,0 +1,120 @@
#!/bin/sh
# Copyright 1999-2019 Seata.io Group.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at、
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
while getopts ":h:p:g:t:u:w:" opt
do
case $opt in
h)
host=$OPTARG
;;
p)
port=$OPTARG
;;
g)
group=$OPTARG
;;
t)
tenant=$OPTARG
;;
u)
username=$OPTARG
;;
w)
password=$OPTARG
;;
?)
echo " USAGE OPTION: $0 [-h host] [-p port] [-g group] [-t tenant] [-u username] [-w password] "
exit 1
;;
esac
done
if [ -z ${host} ]; then
host=localhost
fi
if [ -z ${port} ]; then
port=8848
fi
if [ -z ${group} ]; then
group="SEATA_GROUP"
fi
if [ -z ${tenant} ]; then
tenant=""
fi
if [ -z ${username} ]; then
username=""
fi
if [ -z ${password} ]; then
password=""
fi
nacosAddr=$host:$port
contentType="content-type:application/json;charset=UTF-8"
echo "set nacosAddr=$nacosAddr"
echo "set group=$group"
urlencode() {
length="${#1}"
i=0
while [ $length -gt $i ]; do
char="${1:$i:1}"
case $char in
[a-zA-Z0-9.~_-]) printf $char ;;
*) printf '%%%02X' "'$char" ;;
esac
i=`expr $i + 1`
done
}
failCount=0
tempLog=$(mktemp -u)
function addConfig() {
dataId=`urlencode $1`
content=`urlencode $2`
curl -X POST -H "${contentType}" "http://$nacosAddr/nacos/v1/cs/configs?dataId=$dataId&group=$group&content=$content&tenant=$tenant&username=$username&password=$password" >"${tempLog}" 2>/dev/null
if [ -z $(cat "${tempLog}") ]; then
echo " Please check the cluster status. "
exit 1
fi
if [ "$(cat "${tempLog}")" == "true" ]; then
echo "Set $1=$2 successfully "
else
echo "Set $1=$2 failure "
failCount=`expr $failCount + 1`
fi
}
count=0
COMMENT_START="#"
for line in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); do
if [[ "$line" =~ ^"${COMMENT_START}".* ]]; then
continue
fi
count=`expr $count + 1`
key=${line%%=*}
value=${line#*=}
addConfig "${key}" "${value}"
done
echo "========================================================================="
echo " Complete initialization parameters, total-count:$count , failure-count:$failCount "
echo "========================================================================="
if [ ${failCount} -eq 0 ]; then
echo " Init nacos config finished, please start seata-server. "
else
echo " init nacos config fail. "
fi

134
docker-cloud/seata/conf/nacos/seataServer.properties

@ -0,0 +1,134 @@ @@ -0,0 +1,134 @@
# PROJECT: 康来生物有限公司kicc(智慧冷链)分布式架构平台
# VERSION: 1.0.0
# Author: 康来生物科技有限公司-王翔
# 有关配置项的详细信息,请参考:https://seata.io/zh-cn/docs/user/configurations.html
# 客户端与服务端传输方式
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableTmClientBatchSendRequest=false
transport.enableRmClientBatchSendRequest=true
transport.enableTcServerBatchSendResponse=false
transport.rpcRmRequestTimeout=30000
transport.rpcTmRequestTimeout=30000
transport.rpcTcRequestTimeout=30000
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
transport.serialization=seata
transport.compressor=none
# 事务路由规则配置,仅针对客户端
# seata事务组编号,用于TC集群名,很重要,与项目配置文件的tx-service-group对应
service.vgroupMapping.default_tx_group=default
# 默认的群组集群list,仅注册中心为file时使用,使用nacos注册中心不需要写了:https://github.com/seata/seata/issues/3473
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false
# 事务规则配置,仅针对客户端
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=false
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.rm.sagaJsonParser=fastjson
client.rm.tccActionInterceptorOrder=-2147482648
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000
client.tm.interceptorOrder=-2147482648
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
# 针对于TCC交易模式
tcc.fence.logTableName=tcc_fence_log
tcc.fence.cleanPeriod=1h
# 日志规则配置,用于客户端和服务器
log.exceptionRate=100
# 事务存储配置,file,db,redis为可选配置,推荐db模式
store.mode=db
store.lock.mode=file
store.session.mode=file
# 用于密码加密
# store.publicKey=
# 如果store.mode,store.lock.mode,store.session.mode不等于file可以移除配置块
store.file.dir=file_store/data
store.file.maxBranchSessionSize=16384
store.file.maxGlobalSessionSize=512
store.file.fileWriteBufferCacheSize=16384
store.file.flushDiskMode=async
store.file.sessionReloadReadSize=100
# 如果store.mode为db则需要这些配置,如果store.mode,store.lock.mode,store.session.mode不等于db可以移除配置块
store.db.datasource=druid
# 如果为DB模式需要配置数据库,数据库默认数据库为mysql
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://120.26.168.56:8052/kicc_seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=kanglai@2022
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.distributedLockTable=distributed_lock
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
# 如果store.mode为redis则需要这些配置,如果store.mode,store.lock.mode,store.session.mode不等于redis可以移除配置块
store.redis.mode=single
store.redis.single.host=127.0.0.1
store.redis.single.port=6379
# store.redis.sentinel.masterName=
# store.redis.sentinel.sentinelHosts=
store.redis.maxConn=10
store.redis.minConn=1
store.redis.maxTotal=100
store.redis.database=0
# store.redis.password=
store.redis.queryLimit=100
# 交易规则配置,只针对服务端
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
server.distributedLockExpireTime=10000
server.session.branchAsyncQueueSize=5000
server.session.enableBranchAsyncRemove=true
# 关闭metrics统计信息功能,提高性能:https://developer.aliyun.com/article/710333
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

103
docker-cloud/seata/conf/registry.conf

@ -0,0 +1,103 @@ @@ -0,0 +1,103 @@
registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = "nacos"
loadBalance = "RandomLoadBalance"
loadBalanceVirtualNodes = 10
nacos {
application = "seata-server"
serverAddr = "101.42.231.100:8848"
group = "SEATA_GROUP"
namespace = "kicc-seata"
cluster = "default"
# nacos内网使用没配安全权限,可以不写
username = ""
password = ""
}
eureka {
serviceUrl = "http://localhost:8761/eureka"
application = "default"
weight = "1"
}
redis {
serverAddr = "localhost:6379"
db = 0
password = ""
cluster = "default"
timeout = 0
}
zk {
cluster = "default"
serverAddr = "127.0.0.1:2181"
sessionTimeout = 6000
connectTimeout = 2000
username = ""
password = ""
}
consul {
cluster = "default"
serverAddr = "127.0.0.1:8500"
aclToken = ""
}
etcd3 {
cluster = "default"
serverAddr = "http://localhost:2379"
}
sofa {
serverAddr = "127.0.0.1:9603"
application = "default"
region = "DEFAULT_ZONE"
datacenter = "DefaultDataCenter"
cluster = "default"
group = "SEATA_GROUP"
addressWaitTime = "3000"
}
file {
name = "file.conf"
}
}
config {
# file、nacos 、apollo、zk、consul、etcd3
type = "nacos"
nacos {
serverAddr = "101.42.231.100:8848"
namespace = "kicc-seata"
group = "SEATA_GROUP"
# nacos内网使用没配安全权限,可以不写
username = ""
password = ""
# 目前nacos文件是拆成多个的,也可以整合成一个,将所有配置配置到这个nacos中的properties
# 但是通过查看客户端源码发现内部不支持dataId这种方式,所以这个配置只对服务端起作用
# 所以不能达到统一的一个效果,没什么用,可以注释调,采用nacos多个文件的形式
# dataId = "seataServer.properties"
}
consul {
serverAddr = "127.0.0.1:8500"
aclToken = ""
}
apollo {
appId = "seata-server"
## apolloConfigService will cover apolloMeta
apolloMeta = "http://192.168.1.204:8801"
apolloConfigService = "http://192.168.1.204:8080"
namespace = "application"
apolloAccesskeySecret = ""
cluster = "seata"
}
zk {
serverAddr = "127.0.0.1:2181"
sessionTimeout = 6000
connectTimeout = 2000
username = ""
password = ""
nodePath = "/seata/seata.properties"
}
etcd3 {
serverAddr = "http://localhost:2379"
}
file {
name = "file.conf"
}
}

35
docker-cloud/seata/docker-compose.yml

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
# PROJECT: 康来生物有限公司kicc(智慧冷链)分布式架构平台
# VERSION: 1.0.0
# Author: 康来生物科技有限公司-王翔
# https://support.websoft9.com/docs/docker/zh/solution-compose.html#command
version: "3"
services:
# seata分布式事务服务器
seata-server:
image: seataio/seata-server:1.4.2
container_name: seata-server
hostname: seata-server
restart: always
networks:
- seata-server
ports:
- 8091:8091
environment:
# https://seata.io/zh-cn/docs/ops/deploy-by-docker.html
# 注册到nacos上的ip。客户端将通过该ip访问seata服务。
# 注意公网ip和内网ip的差异。
- SEATA_IP=101.42.231.100
# 指定seata服务启动端口
- SEATA_PORT=8091
# 存储模式
- STORE_MODE=db
volumes:
- /usr/software/dockerDatabase/seata/config/registry.conf:/seata-server/resources/registry.conf
- /usr/software/dockerDatabase/seata/logs:/root/logs/seata
# 局域网网关配置
networks:
seata-server:
driver: bridge

8
docker-cloud/upsource/README.md

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
```bash
# upsource容器中使用的用户和组不是13001:13001,而是其他,也许是码头工人的用户,需要手动授权,或者写个Dockerfile在里面授权
chmod -R 777 /usr/software/dockerDatabase/upsource/data
chmod -R 777 /usr/software/dockerDatabase/upsource/conf
chmod -R 777 /usr/software/dockerDatabase/upsource/logs
chmod -R 777 /usr/software/dockerDatabase/upsource/backups
```

21
docker-cloud/upsource/docker-compose.yml

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
# PROJECT: 康来生物有限公司kicc(智慧冷链)分布式架构平台
# VERSION: 1.0.0
# Author: 康来生物科技有限公司-王翔
# 更多信息请参考官网:https://docs.gitea.io/en-us/install-with-docker/
version: '3'
services:
#idea代码审查工具
#docker安装帮助: https://www.jetbrains.com/help/upsource/docker-installation.html#configure
upsource-server:
image: jetbrains/upsource:2020.1.1992
container_name: upsource
hostname: upsource
restart: always
volumes:
- /usr/software/dockerDatabase/upsource/data:/opt/upsource/data
- /usr/software/dockerDatabase/upsource/conf:/opt/upsource/conf
- /usr/software/dockerDatabase/upsource/logs:/opt/upsource/logs
- /usr/software/dockerDatabase/upsource/backups:/opt/upsource/backups
ports:
- 9301:8080

15
kicc-auth/Dockerfile

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
FROM moxm/java:1.8-full
RUN mkdir -p /kicc-auth
WORKDIR /kicc-auth
ARG JAR_FILE=target/kicc-auth.jar
COPY ${JAR_FILE} app.jar
EXPOSE 3000
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
CMD sleep 60; java -jar app.jar $JAVA_OPTS

77
kicc-auth/pom.xml

@ -0,0 +1,77 @@ @@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.cloud</groupId>
<artifactId>kicc</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>kicc-auth</artifactId>
<packaging>jar</packaging>
<description>kicc 认证授权中心,基于 spring security oAuth2</description>
<dependencies>
<!--注册中心客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--配置中心客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--断路器依赖-->
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-feign</artifactId>
</dependency>
<!--system api模块-->
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-system-api</artifactId>
</dependency>
<!--数据服务核心包-->
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-data</artifactId>
</dependency>
<!--security安全工具类-->
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-security</artifactId>
</dependency>
<!--log-->
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-log</artifactId>
</dependency>
<!--freemarker-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!--undertow容器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

26
kicc-auth/src/main/java/com/cloud/kicc/auth/KiccAuthApplication.java

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
package com.cloud.kicc.auth;
import com.cloud.kicc.common.core.annotation.EnableKiccJacksonAutoConvert;
import com.cloud.kicc.common.feign.annotation.EnableKiccFeignClients;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
*<p>
* 认证授权中心
*</p>
*
* @Author: 开发团队-王翔
* @Date: 2022/2/16
*/
@EnableKiccFeignClients
@SpringBootApplication
@EnableKiccJacksonAutoConvert
public class KiccAuthApplication {
public static void main(String[] args) {
SpringApplication.run(KiccAuthApplication.class, args);
}
}

140
kicc-auth/src/main/java/com/cloud/kicc/auth/config/AuthorizationServerConfiguration.java

@ -0,0 +1,140 @@ @@ -0,0 +1,140 @@
package com.cloud.kicc.auth.config;
import com.cloud.kicc.common.core.constant.SecurityConstants;
import com.cloud.kicc.common.data.entity.KiccUser;
import com.cloud.kicc.common.security.grant.app.ResourceOwnerCustomeAppTokenGranter;
import com.cloud.kicc.common.security.override.KiccClientDetailsService;
import com.cloud.kicc.common.security.override.KiccCustomTokenServices;
import com.cloud.kicc.common.security.override.KiccWebResponseExceptionTranslator;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer;
import org.springframework.security.oauth2.provider.ClientDetailsService;
import org.springframework.security.oauth2.provider.CompositeTokenGranter;
import org.springframework.security.oauth2.provider.TokenGranter;
import org.springframework.security.oauth2.provider.token.TokenEnhancer;
import org.springframework.security.oauth2.provider.token.TokenStore;
import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
*<p>
* 认证服务器配置
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/20
*/
@Configuration
@RequiredArgsConstructor
@EnableAuthorizationServer
public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
private final DataSource dataSource;
private final AuthenticationManager authenticationManager;
private final TokenStore redisTokenStore;
@Override
@SneakyThrows
public void configure(ClientDetailsServiceConfigurer clients) {
clients.withClientDetails(kiccClientDetailsService());
}
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) {
oauthServer.allowFormAuthenticationForClients().checkTokenAccess("permitAll()");
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
endpoints.allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST).tokenServices(tokenServices())
.tokenStore(redisTokenStore).tokenEnhancer(tokenEnhancer()).authenticationManager(authenticationManager)
.reuseRefreshTokens(false).pathMapping("/oauth/confirm_access", "/token/confirm_access")
.exceptionTranslator(new KiccWebResponseExceptionTranslator());
setTokenGranter(endpoints);
}
/**
* 自定义 APP 认证类型
* @param endpoints AuthorizationServerEndpointsConfigurer
*/
private void setTokenGranter(AuthorizationServerEndpointsConfigurer endpoints) {
// 获取默认授权类型
TokenGranter tokenGranter = endpoints.getTokenGranter();
ArrayList<TokenGranter> tokenGranters = new ArrayList<>(Arrays.asList(tokenGranter));
ResourceOwnerCustomeAppTokenGranter resourceOwnerCustomeAppTokenGranter = new ResourceOwnerCustomeAppTokenGranter(
authenticationManager, endpoints.getTokenServices(), endpoints.getClientDetailsService(),
endpoints.getOAuth2RequestFactory());
tokenGranters.add(resourceOwnerCustomeAppTokenGranter);
CompositeTokenGranter compositeTokenGranter = new CompositeTokenGranter(tokenGranters);
endpoints.tokenGranter(compositeTokenGranter);
}
/**
* token 生成接口输出增强
* @return TokenEnhancer
*/
@Bean
public TokenEnhancer tokenEnhancer() {
return (accessToken, authentication) -> {
final Map<String, Object> additionalInfo = new HashMap<>(4);
additionalInfo.put(SecurityConstants.DETAILS_LICENSE, SecurityConstants.PROJECT_LICENSE);
String clientId = authentication.getOAuth2Request().getClientId();
additionalInfo.put(SecurityConstants.CLIENT_ID, clientId);
// 客户端模式不返回具体用户信息
if (SecurityConstants.CLIENT_CREDENTIALS.equals(authentication.getOAuth2Request().getGrantType())) {
((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);
return accessToken;
}
KiccUser kiccUser = (KiccUser) authentication.getUserAuthentication().getPrincipal();
additionalInfo.put(SecurityConstants.DETAILS_USER, kiccUser);
((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);
return accessToken;
};
}
/**
* 客户端信息加载处理
* @return ClientDetailsService
*/
@Bean
public ClientDetailsService kiccClientDetailsService() {
KiccClientDetailsService clientDetailsService = new KiccClientDetailsService(dataSource);
clientDetailsService.setSelectClientDetailsSql(SecurityConstants.DEFAULT_SELECT_STATEMENT);
clientDetailsService.setFindClientDetailsSql(SecurityConstants.DEFAULT_FIND_STATEMENT);
return clientDetailsService;
}
/**
* token 核心处理
* @return tokenServices
*/
@Bean
public KiccCustomTokenServices tokenServices() {
KiccCustomTokenServices tokenServices = new KiccCustomTokenServices();
tokenServices.setTokenStore(redisTokenStore);
tokenServices.setSupportRefreshToken(true);
tokenServices.setReuseRefreshToken(false);
tokenServices.setClientDetailsService(kiccClientDetailsService());
tokenServices.setTokenEnhancer(tokenEnhancer());
return tokenServices;
}
}

121
kicc-auth/src/main/java/com/cloud/kicc/auth/config/WebSecurityConfiguration.java

@ -0,0 +1,121 @@ @@ -0,0 +1,121 @@
package com.cloud.kicc.auth.config;
import com.cloud.kicc.common.security.grant.provider.KiccDaoAuthenticationProvider;
import com.cloud.kicc.common.security.grant.provider.CustomAppAuthenticationProvider;
import com.cloud.kicc.common.security.handler.FormAuthenticationFailureHandler;
import com.cloud.kicc.common.security.handler.SsoLogoutSuccessHandler;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.annotation.Order;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
/**
*<p>
* 认证相关配置
* 并且设置为主,以及加载优先级为1,防止被微服务工程覆盖
*</p>
*
* @Author: 开发团队-王翔
* @Date: 2022/2/16
*/
@Primary
@Order(90)
@Configuration
@RequiredArgsConstructor
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
@SneakyThrows
protected void configure(HttpSecurity http) {
http
.formLogin()
.loginPage("/token/login")
.loginProcessingUrl("/token/form")
.failureHandler(authenticationFailureHandler())
.and()
.logout()
.logoutSuccessHandler(logoutSuccessHandler())
.deleteCookies("JSESSIONID")
.invalidateHttpSession(true)
.and()
.authorizeRequests()
.antMatchers("/token/**", "/actuator/**", "/mobile/**")
.permitAll()
.anyRequest()
.authenticated()
.and()
// CRSF禁用,因为不使用session
.csrf().disable();
}
/**
* 自定义 provider 列表注入
* @param auth AuthenticationManagerBuilder
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) {
KiccDaoAuthenticationProvider daoAuthenticationProvider = new KiccDaoAuthenticationProvider();
daoAuthenticationProvider.setPasswordEncoder(passwordEncoder());
// 处理默认的密码模式认证
auth.authenticationProvider(daoAuthenticationProvider);
// 自定义的认证模式
auth.authenticationProvider(new CustomAppAuthenticationProvider());
}
@Bean
@Override
@SneakyThrows
public AuthenticationManager authenticationManagerBean() {
return super.authenticationManagerBean();
}
/**
* 认证中心静态资源处理
* @param web WebSecurity
*/
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/css/**");
}
/**
* sso 表单登录失败处理
* @return FormAuthenticationFailureHandler
*/
@Bean
public AuthenticationFailureHandler authenticationFailureHandler() {
return new FormAuthenticationFailureHandler();
}
/**
* SSO 退出逻辑处理
* @return LogoutSuccessHandler
*/
@Bean
public LogoutSuccessHandler logoutSuccessHandler() {
return new SsoLogoutSuccessHandler();
}
/**
* 密码处理器
* @return 动态密码处理器 {类型}密文
*/
@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
}

156
kicc-auth/src/main/java/com/cloud/kicc/auth/endpoint/kiccTokenEndpoint.java

@ -0,0 +1,156 @@ @@ -0,0 +1,156 @@
package com.cloud.kicc.auth.endpoint;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cloud.kicc.common.core.constant.CacheConstants;
import com.cloud.kicc.common.core.constant.CommonConstants;
import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.common.core.util.SpringContextHolder;
import com.cloud.kicc.common.security.annotation.Inner;
import com.cloud.kicc.common.security.util.SecurityUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.CacheManager;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.HttpHeaders;
import org.springframework.security.authentication.event.LogoutSuccessEvent;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.common.OAuth2RefreshToken;
import org.springframework.security.oauth2.provider.AuthorizationRequest;
import org.springframework.security.oauth2.provider.ClientDetails;
import org.springframework.security.oauth2.provider.ClientDetailsService;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
*<p>
* token端点管理
*</p>
*
* @Author: 开发团队-王翔
* @Date: 2022/2/16
*/
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/token")
public class kiccTokenEndpoint {
private final ClientDetailsService clientDetailsService;
private final TokenStore tokenStore;
private final RedisTemplate redisTemplate;
private final CacheManager cacheManager;
/**
* 认证页面
* @param modelAndView
* @param error 表单登录失败处理回调的错误信息
* @return ModelAndView
*/
@GetMapping("/login")
public ModelAndView require(ModelAndView modelAndView, @RequestParam(required = false) String error) {
modelAndView.setViewName("ftl/login");
modelAndView.addObject("error", error);
return modelAndView;
}
/**
* 确认授权页面
* @param request
* @param session
* @param modelAndView
* @return
*/
@GetMapping("/confirm_access")
public ModelAndView confirm(HttpServletRequest request, HttpSession session, ModelAndView modelAndView) {
Map<String, Object> scopeList = (Map<String, Object>) request.getAttribute("scopes");
modelAndView.addObject("scopeList", scopeList.keySet());
Object auth = session.getAttribute("authorizationRequest");
if (auth != null) {
AuthorizationRequest authorizationRequest = (AuthorizationRequest) auth;
ClientDetails clientDetails = clientDetailsService.loadClientByClientId(authorizationRequest.getClientId());
modelAndView.addObject("app", clientDetails.getAdditionalInformation());
modelAndView.addObject("user", SecurityUtils.getUser());
}
modelAndView.setViewName("ftl/confirm");
return modelAndView;
}
/**
* 退出并删除token
* @param authHeader Authorization
*/
@DeleteMapping("/logout")
public R<Boolean> logout(@RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String authHeader) {
if (StrUtil.isBlank(authHeader)) {
return R.ok();
}
String tokenValue = authHeader.replace(OAuth2AccessToken.BEARER_TYPE, StrUtil.EMPTY).trim();
return removeToken(tokenValue);
}
/**
* 删除令牌
* @param token token
*/
@Inner
@DeleteMapping("/{token}")
public R<Boolean> removeToken(@PathVariable("token") String token) {
OAuth2AccessToken accessToken = tokenStore.readAccessToken(token);
if (accessToken == null || StrUtil.isBlank(accessToken.getValue())) {
return R.ok();
}
OAuth2Authentication auth2Authentication = tokenStore.readAuthentication(accessToken);
// 清空用户信息
cacheManager.getCache(CacheConstants.USER_DETAILS).evict(auth2Authentication.getName());
// 清空access token
tokenStore.removeAccessToken(accessToken);
// 清空 refresh token
OAuth2RefreshToken refreshToken = accessToken.getRefreshToken();
tokenStore.removeRefreshToken(refreshToken);
// 处理自定义退出事件,保存相关日志
SpringContextHolder.publishEvent(new LogoutSuccessEvent(auth2Authentication));
return R.ok(true);
}
/**
* 查询令牌
* @param params 分页参数
* @return
*/
@Inner
@PostMapping("/list")
public R tokenList(@RequestBody Map<String, Object> params) {
// 根据分页参数获取对应数据
String key = String.format("%sauth_to_access:*", CacheConstants.OAUTH_ACCESS);
int current = MapUtil.getInt(params, CommonConstants.CURRENT);
int size = MapUtil.getInt(params, CommonConstants.SIZE);
Set<String> keys = redisTemplate.keys(key);
List<String> pages = keys.stream().skip((current - 1) * size).limit(size).collect(Collectors.toList());
Page result = new Page(current, size);
result.setRecords(redisTemplate.opsForValue().multiGet(pages));
result.setTotal(keys.size());
return R.ok(result.getRecords(), result.getTotal());
}
}

63
kicc-auth/src/main/java/com/cloud/kicc/auth/handler/kiccAuthenticationFailureEventHandler.java

@ -0,0 +1,63 @@ @@ -0,0 +1,63 @@
package com.cloud.kicc.auth.handler;
import com.cloud.kicc.admin.api.entity.OperLog;
import com.cloud.kicc.common.core.util.SpringContextHolder;
import com.cloud.kicc.common.data.entity.KiccUser;
import com.cloud.kicc.common.log.event.SysLogEvent;
import com.cloud.kicc.common.log.util.LogTypeEnum;
import com.cloud.kicc.common.log.util.SysLogUtils;
import com.cloud.kicc.common.security.handler.AbstractAuthenticationFailureEventHandler;
import com.cloud.kicc.common.security.util.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import java.util.Optional;
/**
*<p>
* 登录失败处理
*</p>
*
* @Author: 开发团队-王翔
* @Date: 2022/2/16
*/
@Slf4j
@Component
public class kiccAuthenticationFailureEventHandler extends AbstractAuthenticationFailureEventHandler {
/**
* 处理登录失败方法
* <p>
* @param authenticationException 登录的authentication 对象
* @param authentication 登录的authenticationException 对象
*/
@Override
public void handle(AuthenticationException authenticationException, Authentication authentication) {
log.info("用户:{} 登录失败,异常:{}", authentication.getPrincipal(), authenticationException.getLocalizedMessage());
SecurityContextHolder.getContext().setAuthentication(authentication);
KiccUser kiccUser = SecurityUtils.getUser(authentication);
OperLog operLog = SysLogUtils.getSysLog();
operLog.setTitle("登录失败");
operLog.setType(LogTypeEnum.ERROR.getType());
operLog.setErrorMsg(authenticationException.getMessage());
operLog.setOperName(kiccUser.getUsername());
// 发送异步日志事件
Long startTime = System.currentTimeMillis();
Long endTime = System.currentTimeMillis();
operLog.setExecuteTime((endTime - startTime) + "毫秒");
if (Optional.ofNullable(kiccUser).isPresent()) {
operLog.setCreateById(kiccUser.getId());
operLog.setCreateByName(kiccUser.getUsername());
operLog.setUpdateById(kiccUser.getId());
operLog.setUpdateByName(kiccUser.getUsername());
}
SpringContextHolder.publishEvent(new SysLogEvent(operLog));
}
}

56
kicc-auth/src/main/java/com/cloud/kicc/auth/handler/kiccAuthenticationSuccessEventHandler.java

@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
package com.cloud.kicc.auth.handler;
import com.cloud.kicc.admin.api.entity.OperLog;
import com.cloud.kicc.common.core.util.SpringContextHolder;
import com.cloud.kicc.common.data.entity.KiccUser;
import com.cloud.kicc.common.log.event.SysLogEvent;
import com.cloud.kicc.common.log.util.SysLogUtils;
import com.cloud.kicc.common.security.handler.AbstractAuthenticationSuccessEventHandler;
import com.cloud.kicc.common.security.util.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import java.util.Optional;
/**
*<p>
* 登录成功处理
*</p>
*
* @Author: 开发团队-王翔
* @Date: 2022/2/16
*/
@Slf4j
@Component
public class kiccAuthenticationSuccessEventHandler extends AbstractAuthenticationSuccessEventHandler {
/**
* 处理登录成功方法
* <p>
* 获取到登录的authentication 对象
* @param authentication 登录对象
*/
@Override
public void handle(Authentication authentication) {
log.info("用户:{} 登录成功", authentication.getPrincipal());
SecurityContextHolder.getContext().setAuthentication(authentication);
OperLog operLog = SysLogUtils.getSysLog();
operLog.setTitle("登录成功");
// 发送异步日志事件
Long startTime = System.currentTimeMillis();
KiccUser kiccUser = SecurityUtils.getUser(authentication);
if (Optional.ofNullable(kiccUser).isPresent()) {
operLog.setCreateById(kiccUser.getId());
operLog.setCreateByName(kiccUser.getUsername());
operLog.setUpdateById(kiccUser.getId());
operLog.setUpdateByName(kiccUser.getUsername());
}
Long endTime = System.currentTimeMillis();
operLog.setExecuteTime((endTime - startTime) + "毫秒");
SpringContextHolder.publishEvent(new SysLogEvent(operLog));
}
}

71
kicc-auth/src/main/java/com/cloud/kicc/auth/handler/kiccLogoutSuccessEventHandler.java

@ -0,0 +1,71 @@ @@ -0,0 +1,71 @@
package com.cloud.kicc.auth.handler;
import com.cloud.kicc.admin.api.entity.OperLog;
import com.cloud.kicc.common.core.util.SpringContextHolder;
import com.cloud.kicc.common.core.util.WebUtils;
import com.cloud.kicc.common.data.entity.KiccUser;
import com.cloud.kicc.common.log.event.SysLogEvent;
import com.cloud.kicc.common.log.util.SysLogUtils;
import com.cloud.kicc.common.security.handler.AbstractLogoutSuccessEventHandler;
import com.cloud.kicc.common.security.util.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.stereotype.Component;
import java.util.Optional;
/**
*<p>
* 注销成功处理
*</p>
*
* @Author: 开发团队-王翔
* @Date: 2022/2/16
*/
@Slf4j
@Component
public class kiccLogoutSuccessEventHandler extends AbstractLogoutSuccessEventHandler {
/**
* 处理退出成功方法
* <p>
* 获取到登录的authentication 对象
* @param authentication 登录对象
*/
@Override
public void handle(Authentication authentication) {
log.info("用户:{} 退出成功", authentication.getPrincipal());
SecurityContextHolder.getContext().setAuthentication(authentication);
KiccUser kiccUser = SecurityUtils.getUser(authentication);
OperLog operLog = SysLogUtils.getSysLog();
operLog.setTitle("退出成功");
// 发送异步日志事件
Long startTime = System.currentTimeMillis();
Long endTime = System.currentTimeMillis();
operLog.setExecuteTime((endTime - startTime) + "毫秒");
// 设置对应的token
WebUtils.getRequest().ifPresent(request -> operLog.setOperParam(request.getHeader(HttpHeaders.AUTHORIZATION)));
// 这边设置ServiceId
if (authentication instanceof OAuth2Authentication) {
OAuth2Authentication auth2Authentication = (OAuth2Authentication) authentication;
operLog.setServiceId(auth2Authentication.getOAuth2Request().getClientId());
}
if (Optional.ofNullable(kiccUser).isPresent()) {
operLog.setCreateById(kiccUser.getId());
operLog.setCreateByName(kiccUser.getUsername());
operLog.setUpdateById(kiccUser.getId());
operLog.setUpdateByName(kiccUser.getUsername());
}
SpringContextHolder.publishEvent(new SysLogEvent(operLog));
}
}

17
kicc-auth/src/main/resources/bootstrap.yml

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
server:
port: 3000
spring:
application:
name: @artifactId@
cloud:
nacos:
discovery:
server-addr: ${NACOS_HOST:kicc-register}:${NACOS_PORT:8848}
namespace: @profiles.namespace@
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
file-extension: yml
namespace: @profiles.namespace@
shared-configs:
- application.${spring.cloud.nacos.config.file-extension}

57
kicc-auth/src/main/resources/logback-spring.xml

@ -0,0 +1,57 @@ @@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--基础日志配置,工程继承可以进行替换-->
<configuration debug="false" scan="false">
<springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/>
<property name="log.path" value="logs/${spring.application.name}"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 控制台日志输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 日志文件调试输出 -->
<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
</encoder>
</appender>
<!-- 日志文件错误输出 -->
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 -->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="debug"/>
<appender-ref ref="error"/>
</root>
</configuration>

6
kicc-auth/src/main/resources/static/css/bootstrap.min.css vendored

File diff suppressed because one or more lines are too long

50
kicc-auth/src/main/resources/static/css/signin.css

@ -0,0 +1,50 @@ @@ -0,0 +1,50 @@
.sign_body {
padding-top: 40px;
padding-bottom: 40px;
background-color: #eee;
}
.form-signin {
max-width: 330px;
padding: 15px;
margin: 0 auto;
}
.form-margin-top {
margin-top: 50px;
}
.form-signin .form-signin-heading,
.form-signin .checkbox {
margin-bottom: 10px;
}
.form-signin .checkbox {
font-weight: normal;
}
.form-signin .form-control {
position: relative;
height: auto;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: 10px;
font-size: 16px;
}
.form-signin .form-control:focus {
z-index: 2;
}
.form-signin input[type="email"] {
margin-bottom: -1px;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.form-signin input[type="password"] {
margin-bottom: 10px;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
footer{
text-align: center;
position:absolute;
bottom:0;
width:100%;
height:100px;
}

51
kicc-auth/src/main/resources/templates/ftl/confirm.ftl

@ -0,0 +1,51 @@ @@ -0,0 +1,51 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name="viewport"
content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"/>
<title>长沙康来生物有限公司 第三方授权</title>
<!--使用/oauth/authorize获取返回页面-->
<link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css"/>
<link rel="stylesheet" type="text/css" href="/css/signin.css"/>
</head>
<body>
<nav class="navbar navbar-default container-fluid">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="#">长沙康来生物有限公司微服务架构开放平台</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-5">
<p class="navbar-text navbar-right">
<a href="javascript:void(0)">技术支持</a>
</p>
<p class="navbar-text navbar-right">
当前用户:${user.username}
</p>
</div>
</div>
</nav>
<div style="padding-top: 80px;width: 300px; color: #555; margin:0px auto;">
<form id='confirmationForm' name='confirmationForm' action="/oauth/authorize" method='post'>
<input name='user_oauth_approval' value='true' type='hidden'/>
<p>
<a href="${app.website!''}" target="_blank">${app.appName!'未定义应用名称'}</a> 将获得以下权限:</p>
<ul class="list-group">
<li class="list-group-item"> <span>
<#list scopeList as scope>
<input type="hidden" name="${scope}" value="true"/>
<input type="checkbox" checked="checked"/><label>${scope}</label>
</#list>
</ul>
<p class="help-block">授权后表明你已同意 <a href="javascript:void(0)">服务协议</a></p>
<button class="btn btn-success pull-right" type="submit" id="write-email-btn">授权</button>
</p>
</form>
</div>
<footer>
<p>关于: 长沙康来生物有限公司</p>
<p>邮箱: <a href="mailto:1827945911@qq.com">联系我们</a>.</p>
</footer>
</body>
</html>

35
kicc-auth/src/main/resources/templates/ftl/login.ftl

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<!--拦截后返回的页面-->
<title>长沙康来生物有限公司 统一认证</title>
<link href="/css/bootstrap.min.css" rel="stylesheet">
<link href="/css/signin.css" rel="stylesheet">
</head>
<body class="sign_body">
<div class="container form-margin-top">
<form class="form-signin" action="/token/form" method="post">
<h2 class="form-signin-heading" align="center">康来生物统一认证系统</h2>
<input type="hidden" name="clientId" class="form-control" value="kicc" placeholder="所属客户端" >
<input type="text" name="username" class="form-control form-margin-top" placeholder="账号" required autofocus>
<input type="password" name="password" class="form-control" placeholder="密码" required>
<button class="btn btn-lg btn-primary btn-block" type="submit">sign in</button>
<#if error??>
<span style="color: red; ">${error}</span>
</#if>
</form>
</div>
<footer>
<p>关于: 长沙康来生物有限公司</p>
<p>邮箱: <a href="mailto:1827945911@qq.com">联系我们</a>.</p>
</footer>
</body>
</html>

65
kicc-common-demo/kicc-common-demo-mq/kicc-message-consumer/pom.xml

@ -0,0 +1,65 @@ @@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-demo-mq</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>kicc-message-consumer</artifactId>
<packaging>jar</packaging>
<description>mq消息消费者</description>
<dependencies>
<!--undertow容器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-rocketmq</artifactId>
</dependency>
<!--数据服务核心包-->
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-data</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.xlsx</exclude>
<exclude>**/*.xls</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.xlsx</include>
<include>**/*.xls</include>
</includes>
</resource>
</resources>
</build>
</project>

26
kicc-common-demo/kicc-common-demo-mq/kicc-message-consumer/src/main/java/com/cloud/kicc/mq/MessageConsumerServer.java

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
package com.cloud.kicc.mq;
import com.cloud.kicc.common.rocketmq.channel.KiccSink;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.cloud.stream.annotation.EnableBinding;
/**
*<p>
* 消息中心消费者启动类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/9
*/
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@EnableBinding({KiccSink.class})
public class MessageConsumerServer {
public static void main(String[] args) {
SpringApplication.run(MessageConsumerServer.class, args);
}
}

49
kicc-common-demo/kicc-common-demo-mq/kicc-message-consumer/src/main/java/com/cloud/kicc/mq/service/OrderConsumerService.java

@ -0,0 +1,49 @@ @@ -0,0 +1,49 @@
package com.cloud.kicc.mq.service;
import com.cloud.kicc.common.rocketmq.constant.MessageConstant;
import com.cloud.kicc.common.rocketmq.entity.Order;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.messaging.Message;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.messaging.support.ErrorMessage;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
*<p>
* 消息订单消息
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/9
*/
@Slf4j
@Service
public class OrderConsumerService {
/**
* 消费分布式事务消息
* 注意,下游服务不能回滚事务,只要上游服务提交了事务,下游服务必须成功,如果下游服务失败了,就只能进行人工补偿
* 如果想要保证下游服务事务失败后可以回滚上游服务事务,这边也提供了解决方案,请参考Seata分布式事务实例
* @param order  Order对象
*/
@StreamListener(MessageConstant.ORDER_MESSAGE_INPUT)
@Transactional(rollbackFor = Exception.class)
public void orderHandle(@Payload Order order) {
log.error("接收到的订单消息为:{}", order);
}
/**
* 自定义全局异常处理
*
* @param message 消息体
*/
@StreamListener("errorChannel")
public void error(Message<?> message) {
ErrorMessage errorMessage = (ErrorMessage) message;
log.error("Handling ERROR, errorMessage = {} ", errorMessage);
}
}

32
kicc-common-demo/kicc-common-demo-mq/kicc-message-consumer/src/main/java/com/cloud/kicc/mq/service/SmsConsumerService.java

@ -0,0 +1,32 @@ @@ -0,0 +1,32 @@
package com.cloud.kicc.mq.service;
import com.cloud.kicc.common.rocketmq.constant.MessageConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Service;
/**
*<p>
* 短信消费者业务
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/9
*/
@Slf4j
@Service
public class SmsConsumerService {
/**
* 监控听短信input
* @param message 消费文本内容
*/
@StreamListener(MessageConstant.SMS_MESSAGE_INPUT)
public void handler(@Payload String message) {
log.error("接收到的消息为:{}", message);
}
}

14
kicc-common-demo/kicc-common-demo-mq/kicc-message-consumer/src/main/resources/application.yml

@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
server:
port: 40003
spring:
application:
name: @artifactId@
cloud:
stream:
rocketmq:
# rocketmq-binder配置项,对应RocketMQBinderConfigurationProperties类
binder:
name-server: 127.0.0.1:9876
# 也可以配置密码,可以设置开启acl,目前只是在内网使用没开,后期有这方面需求在开启
# access-key:
# secret-key:

65
kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/pom.xml

@ -0,0 +1,65 @@ @@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-demo-mq</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>kicc-message-producer</artifactId>
<packaging>jar</packaging>
<description>mq消息提供者</description>
<dependencies>
<!--undertow容器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-rocketmq</artifactId>
</dependency>
<!--数据服务核心包-->
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-data</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.xlsx</exclude>
<exclude>**/*.xls</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.xlsx</include>
<include>**/*.xls</include>
</includes>
</resource>
</resources>
</build>
</project>

26
kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/java/com/cloud/kicc/mq/MessageProducerServer.java

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
package com.cloud.kicc.mq;
import com.cloud.kicc.common.rocketmq.channel.KiccSource;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.cloud.stream.annotation.EnableBinding;
/**
*<p>
* 消息中心生产者启动类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/9
*/
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@EnableBinding({KiccSource.class})
public class MessageProducerServer {
public static void main(String[] args) {
SpringApplication.run(MessageProducerServer.class, args);
}
}

29
kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/java/com/cloud/kicc/mq/controller/SmsController.java

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
package com.cloud.kicc.mq.controller;
import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.mq.service.SmsService;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
*<p>
* 发送短信控制器
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/9
*/
@RestController
@AllArgsConstructor
public class SmsController {
private final SmsService smsService;
@GetMapping("/send/sms")
public R sendSms(String message) {
smsService.sendSms(message);
return R.ok("操作成功");
}
}

29
kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/java/com/cloud/kicc/mq/controller/TransactionOrderController.java

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
package com.cloud.kicc.mq.controller;
import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.mq.service.TransactionOrderService;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
*<p>
* 测试订单事务控制器
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/10
*/
@RestController
@AllArgsConstructor
public class TransactionOrderController {
private final TransactionOrderService transactionOrderService;
@GetMapping("/send/order")
public R sendOrder() {
transactionOrderService.testStreamTransaction();
return R.ok("操作成功");
}
}

75
kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/java/com/cloud/kicc/mq/listener/OrderTransactionListener.java

@ -0,0 +1,75 @@ @@ -0,0 +1,75 @@
package com.cloud.kicc.mq.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cloud.kicc.common.rocketmq.constant.MessageConstant;
import com.cloud.kicc.common.rocketmq.entity.Order;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQTransactionListener;
import org.apache.rocketmq.spring.core.RocketMQLocalTransactionListener;
import org.apache.rocketmq.spring.core.RocketMQLocalTransactionState;
import org.apache.rocketmq.spring.support.RocketMQHeaders;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHeaders;
import java.util.ArrayList;
import java.util.List;
/**
* 发送之后用于控制原子性的类
* 在消息发送之后收到rocketmq的发送结果通知后才提交的本地事务
*
* @author entfrm开发团队-王翔
* @link https://blog.csdn.net/guzhangyu12345/article/details/107989633
*/
@Slf4j
@RocketMQTransactionListener(txProducerGroup = MessageConstant.ORDER_BINDER_GROUP)
public class OrderTransactionListener implements RocketMQLocalTransactionListener {
/**
* rocketmq 消息发送成功之后提交本地事务
*
* @param message 消息
* @param o  args
* @return RocketMQLocalTransactionState
*/
@Override
public RocketMQLocalTransactionState executeLocalTransaction(Message message, Object o) {
MessageHeaders headers = message.getHeaders();
String transactionId = String.valueOf(headers.get(RocketMQHeaders.TRANSACTION_ID));
Long shareId = Long.valueOf(String.valueOf(headers.get("share_id")));
Order order = null;
try {
order = JSONObject.parseObject(new String((byte[]) message.getPayload()), Order.class);
} catch (Exception e) {
e.printStackTrace();
}
Long args = (Long) o;
log.info(String.format("half message\npayload:%s, arg:%s, transactionId:%s", order, args, message.getHeaders().get(RocketMQHeaders.TRANSACTION_ID)));
return RocketMQLocalTransactionState.COMMIT;
}
/**
* rocketmq 回查,判断提交还是回滚
*
* @param message Message
* @return RocketMQLocalTransactionState
*/
@Override
public RocketMQLocalTransactionState checkLocalTransaction(Message message) {
Order order = JSON.parseObject(new String((byte[]) message.getPayload()), Order.class);
// 业务查询本地事务是否执行成功
List<Order> orders = new ArrayList<>();
orders.add(order);
// 根据message去查询本地事务是否执行成功,如果成功,则commit
if (orders.size() > 0) {
return RocketMQLocalTransactionState.COMMIT;
} else {
return RocketMQLocalTransactionState.ROLLBACK;
}
}
}

19
kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/java/com/cloud/kicc/mq/service/SmsService.java

@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
package com.cloud.kicc.mq.service;
/**
*<p>
* 发送短消息业务类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/9
*/
public interface SmsService {
/**
* 发送短消息
*
* @param message  短消息
*/
void sendSms(String message);
}

23
kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/java/com/cloud/kicc/mq/service/TransactionOrderService.java

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
package com.cloud.kicc.mq.service;
/**
*<p>
* 订单事务消息
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/9
*/
public interface TransactionOrderService {
/**
* 测试事务消息,使用rocketMQ模板rocketMQTemplate发生
*/
void testTransaction();
/**
* 通过spring-cloud-stream方式发送消息
* 注意配置spring.cloud.stream.rocketmq.bindings.order-output.producer.transactional=true
*/
void testStreamTransaction();
}

27
kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/java/com/cloud/kicc/mq/service/impl/SmsServiceImpl.java

@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
package com.cloud.kicc.mq.service.impl;
import com.cloud.kicc.common.rocketmq.channel.KiccSource;
import com.cloud.kicc.mq.service.SmsService;
import lombok.AllArgsConstructor;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Service;
/**
*<p>
* 发送短信实现类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/9
*/
@Service
@AllArgsConstructor
public class SmsServiceImpl implements SmsService {
private final KiccSource source;
@Override
public void sendSms(String message) {
source.smsOutput().send(MessageBuilder.withPayload(message).build());
}
}

80
kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/java/com/cloud/kicc/mq/service/impl/TransactionOrderServiceImpl.java

@ -0,0 +1,80 @@ @@ -0,0 +1,80 @@
package com.cloud.kicc.mq.service.impl;
import com.cloud.kicc.common.rocketmq.channel.KiccSource;
import com.cloud.kicc.common.rocketmq.constant.MessageConstant;
import com.cloud.kicc.common.rocketmq.entity.Order;
import com.cloud.kicc.mq.service.TransactionOrderService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.apache.rocketmq.spring.support.RocketMQHeaders;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.UUID;
/**
*<p>
* 订单事务消息实现
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/9
*/
@Slf4j
@Service
@AllArgsConstructor
public class TransactionOrderServiceImpl implements TransactionOrderService {
private final RocketMQTemplate rocketMQTemplate;
private final KiccSource kiccSource;
/**
* 这里消息发送只是half发送
* 后面消息队列中half成功后在TestTransactionListener中的executeLocalTransaction的方法中决定是否要提交本地事务
*/
@Override
public void testTransaction() {
Order order = new Order().setId(1L)
.setGoodsId(100L)
.setGoodsPrice(BigDecimal.valueOf(100.00))
.setTradeId(100L)
.setNumber(2)
.setCreateTime(LocalDateTime.now());
// 事务id
String transactionId = UUID.randomUUID().toString();
rocketMQTemplate.sendMessageInTransaction(MessageConstant.ORDER_BINDER_GROUP,
MessageConstant.ORDER_MESSAGE_OUTPUT,
MessageBuilder.withPayload(order)
.setHeader(RocketMQHeaders.TRANSACTION_ID, transactionId)
.setHeader("share_id", 3).build(),
4L);
log.info("half消息发送成功");
}
@Override
public void testStreamTransaction() {
Order order = new Order().setId(1L)
.setGoodsId(100L)
.setGoodsPrice(BigDecimal.valueOf(100.00))
.setTradeId(100L)
.setNumber(2)
.setCreateTime(LocalDateTime.now());
// 事务id
String transactionId = UUID.randomUUID().toString();
kiccSource.orderOutput().send(
MessageBuilder.withPayload(order)
.setHeader(RocketMQHeaders.TRANSACTION_ID, transactionId)
.setHeader("share_id", 3).build()
);
log.info("half消息发送成功");
}
}

14
kicc-common-demo/kicc-common-demo-mq/kicc-message-producer/src/main/resources/application.yml

@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
server:
port: 40002
spring:
application:
name: @artifactId@
cloud:
stream:
rocketmq:
# rocketmq-binder配置项,对应RocketMQBinderConfigurationProperties类
binder:
name-server: 127.0.0.1:9876
# 也可以配置密码,可以设置开启acl,目前只是在内网使用没开,后期有这方面需求在开启
# access-key:
# secret-key:

22
kicc-common-demo/kicc-common-demo-mq/pom.xml

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-demo</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>kicc-common-demo-mq</artifactId>
<description>kicc 统一消息中心 演示</description>
<packaging>pom</packaging>
<modules>
<module>kicc-message-consumer</module>
<module>kicc-message-producer</module>
</modules>
</project>

72
kicc-common-demo/kicc-common-demo-seata/kicc-seata-order/pom.xml

@ -0,0 +1,72 @@ @@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-demo-seata</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>kicc-seata-order</artifactId>
<packaging>jar</packaging>
<description>分布式解决方案演示-订单服务</description>
<dependencies>
<!--undertow容器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!--seata分布式事务解决方案-->
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-seata</artifactId>
</dependency>
<!--数据服务核心包-->
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-data</artifactId>
</dependency>
<!--注册中心客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.xlsx</exclude>
<exclude>**/*.xls</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.xlsx</include>
<include>**/*.xls</include>
</includes>
</resource>
</resources>
</build>
</project>

21
kicc-common-demo/kicc-common-demo-seata/kicc-seata-order/src/main/java/com/cloud/kicc/order/SeataOrderServer.java

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
package com.cloud.kicc.order;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
*<p>
* Seata订单启动类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
@SpringBootApplication
public class SeataOrderServer {
public static void main(String[] args) {
SpringApplication.run(SeataOrderServer.class, args);
}
}

31
kicc-common-demo/kicc-common-demo-seata/kicc-seata-order/src/main/java/com/cloud/kicc/order/controller/OrderController.java

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
package com.cloud.kicc.order.controller;
import com.cloud.kicc.order.entity.Order;
import com.cloud.kicc.order.service.OrderService;
import lombok.RequiredArgsConstructor;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
/**
*<p>
* 订单控制器类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
@RestController
@RequiredArgsConstructor
public class OrderController {
private final OrderService orderService;
@Transactional(rollbackFor = Exception.class)
@PostMapping("/order")
public void createOrder() {
Order order = new Order();
int a = 1 / 0;
order.setMoney(100);
orderService.save(order);
}
}

30
kicc-common-demo/kicc-common-demo-seata/kicc-seata-order/src/main/java/com/cloud/kicc/order/entity/Order.java

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
package com.cloud.kicc.order.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
*<p>
* 订单实体类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("demo_seata_order")
public class Order {
private static final long serialVersionUID = 1L;
@TableId
private String id;
private Integer money;
}

15
kicc-common-demo/kicc-common-demo-seata/kicc-seata-order/src/main/java/com/cloud/kicc/order/mapper/OrderMapper.java

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
package com.cloud.kicc.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cloud.kicc.order.entity.Order;
/**
*<p>
* 订单mapper
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
public interface OrderMapper extends BaseMapper<Order> {
}

16
kicc-common-demo/kicc-common-demo-seata/kicc-seata-order/src/main/java/com/cloud/kicc/order/service/OrderService.java

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
package com.cloud.kicc.order.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cloud.kicc.order.entity.Order;
/**
*<p>
* 订单业务接口类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
public interface OrderService extends IService<Order> {
}

20
kicc-common-demo/kicc-common-demo-seata/kicc-seata-order/src/main/java/com/cloud/kicc/order/service/impl/OrderServiceImpl.java

@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
package com.cloud.kicc.order.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cloud.kicc.order.entity.Order;
import com.cloud.kicc.order.mapper.OrderMapper;
import com.cloud.kicc.order.service.OrderService;
import org.springframework.stereotype.Service;
/**
*<p>
* 订单业务实现类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
}

40
kicc-common-demo/kicc-common-demo-seata/kicc-seata-order/src/main/resources/bootstrap.yml

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
server:
port: 60001
spring:
application:
name: @artifactId@
cloud:
nacos:
discovery:
server-addr: ${NACOS_HOST:101.42.231.100}:${NACOS_PORT:8848}
namespace: ${seata.registry.nacos.namespace}
group: ${seata.registry.nacos.group}
datasource:
# 数据源采用spring-boot自带kari,轻量化
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
username: ${MYSQL_USER:root}
password: ${MYSQL_PWD:root}
url: jdbc:mysql://${MYSQL_HOST:127.0.0.1}:${MYSQL_PORT:3306}/${MYSQL_DB:kicc}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
# mybatis-plus配置
mybatis-plus:
mapper-locations:
- classpath:mapper/**/*.xml
typeAliasesPackage: com.cloud.kicc.**.entity
global-config:
# 不显示banner
banner: false
# 数据库相关配置
db-config:
#主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
id-type: assign_id
configuration:
call-setters-on-nulls: true
# 日志配置
logging:
level:
com.cloud.kicc: debug
org.springframework: WARN
org.spring.springboot.dao: debug

71
kicc-common-demo/kicc-common-demo-seata/kicc-seata-point/pom.xml

@ -0,0 +1,71 @@ @@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-demo-seata</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>kicc-seata-point</artifactId>
<packaging>jar</packaging>
<description>分布式解决方案演示-积分服务</description>
<dependencies>
<!--undertow容器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!--seata分布式事务解决方案-->
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-seata</artifactId>
</dependency>
<!--数据服务核心包-->
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-data</artifactId>
</dependency>
<!--注册中心客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.xlsx</exclude>
<exclude>**/*.xls</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.xlsx</include>
<include>**/*.xls</include>
</includes>
</resource>
</resources>
</build>
</project>

21
kicc-common-demo/kicc-common-demo-seata/kicc-seata-point/src/main/java/com/cloud/kicc/point/SeataPointServer.java

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
package com.cloud.kicc.point;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
*<p>
* Seata积分启动类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
@SpringBootApplication
public class SeataPointServer {
public static void main(String[] args) {
SpringApplication.run(SeataPointServer.class, args);
}
}

34
kicc-common-demo/kicc-common-demo-seata/kicc-seata-point/src/main/java/com/cloud/kicc/point/controller/PointController.java

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
package com.cloud.kicc.point.controller;
import com.cloud.kicc.point.entity.Point;
import com.cloud.kicc.point.service.PointService;
import lombok.RequiredArgsConstructor;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
/**
*<p>
* 积分控制器类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
@RestController
@RequiredArgsConstructor
public class PointController {
private final PointService pointService;
/**
* 创建积分
*/
@Transactional(rollbackFor = Exception.class)
@PostMapping("/point")
public void setPoint() {
Point point = new Point();
point.setCount(10);
pointService.saveOrUpdate(point);
}
}

30
kicc-common-demo/kicc-common-demo-seata/kicc-seata-point/src/main/java/com/cloud/kicc/point/entity/Point.java

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
package com.cloud.kicc.point.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
*<p>
* 积分实体类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("demo_seata_point")
public class Point {
private static final long serialVersionUID = 1L;
@TableId
private String id;
private Integer count;
}

15
kicc-common-demo/kicc-common-demo-seata/kicc-seata-point/src/main/java/com/cloud/kicc/point/mapper/PointMapper.java

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
package com.cloud.kicc.point.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cloud.kicc.point.entity.Point;
/**
*<p>
* 积分mapper类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
public interface PointMapper extends BaseMapper<Point> {
}

15
kicc-common-demo/kicc-common-demo-seata/kicc-seata-point/src/main/java/com/cloud/kicc/point/service/PointService.java

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
package com.cloud.kicc.point.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cloud.kicc.point.entity.Point;
/**
*<p>
* 积分业务接口类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
public interface PointService extends IService<Point> {
}

19
kicc-common-demo/kicc-common-demo-seata/kicc-seata-point/src/main/java/com/cloud/kicc/point/service/impl/PointServiceImpl.java

@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
package com.cloud.kicc.point.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cloud.kicc.point.entity.Point;
import com.cloud.kicc.point.mapper.PointMapper;
import com.cloud.kicc.point.service.PointService;
import org.springframework.stereotype.Service;
/**
*<p>
* 积分业务实现类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
@Service
public class PointServiceImpl extends ServiceImpl<PointMapper, Point> implements PointService {
}

40
kicc-common-demo/kicc-common-demo-seata/kicc-seata-point/src/main/resources/bootstrap.yml

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
server:
port: 60002
spring:
application:
name: @artifactId@
cloud:
nacos:
discovery:
server-addr: ${NACOS_HOST:101.42.231.100}:${NACOS_PORT:8848}
namespace: ${seata.registry.nacos.namespace}
group: ${seata.registry.nacos.group}
datasource:
# 数据源采用spring-boot自带kari,轻量化
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
username: ${MYSQL_USER:root}
password: ${MYSQL_PWD:root}
url: jdbc:mysql://${MYSQL_HOST:127.0.0.1}:${MYSQL_PORT:3306}/${MYSQL_DB:kicc}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
# mybatis-plus配置
mybatis-plus:
mapper-locations:
- classpath:mapper/**/*.xml
typeAliasesPackage: com.cloud.kicc.**.entity
global-config:
# 不显示banner
banner: false
# 数据库相关配置
db-config:
#主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
id-type: assign_id
configuration:
call-setters-on-nulls: true
# 日志配置
logging:
level:
com.cloud.kicc: debug
org.springframework: WARN
org.spring.springboot.dao: debug

76
kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/pom.xml

@ -0,0 +1,76 @@ @@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-demo-seata</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>kicc-seata-user</artifactId>
<packaging>jar</packaging>
<description>分布式解决方案演示-用户服务</description>
<dependencies>
<!--undertow容器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!--seata分布式事务解决方案-->
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-seata</artifactId>
</dependency>
<!--feign远程调用-->
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-feign</artifactId>
</dependency>
<!--数据服务核心包-->
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-data</artifactId>
</dependency>
<!--注册中心客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.xlsx</exclude>
<exclude>**/*.xls</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.xlsx</include>
<include>**/*.xls</include>
</includes>
</resource>
</resources>
</build>
</project>

23
kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/java/com/cloud/kicc/user/SeataUserServer.java

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
package com.cloud.kicc.user;
import com.cloud.kicc.common.feign.annotation.EnableKiccFeignClients;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
*<p>
* Seata用户启动类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
@SpringBootApplication
@EnableKiccFeignClients
public class SeataUserServer {
public static void main(String[] args) {
SpringApplication.run(SeataUserServer.class, args);
}
}

46
kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/java/com/cloud/kicc/user/controller/UserController.java

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
package com.cloud.kicc.user.controller;
import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.user.entity.User;
import com.cloud.kicc.user.feign.RemoteOrderService;
import com.cloud.kicc.user.feign.RemotePointService;
import com.cloud.kicc.user.service.UserService;
import io.seata.spring.annotation.GlobalTransactional;
import io.seata.spring.boot.autoconfigure.properties.client.ServiceProperties;
import io.seata.spring.boot.autoconfigure.properties.registry.RegistryProperties;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
/**
*<p>
* 用户控制器
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
@RestController
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
private final RemoteOrderService remoteOrderService;
private final RemotePointService remotePointService;
private final RegistryProperties registryProperties;
private final ServiceProperties serviceProperties;
@GlobalTransactional(rollbackFor = Exception.class)
@PostMapping("/user")
public R createUser(@RequestBody User user) {
System.out.println(registryProperties);
System.out.println(serviceProperties);
userService.saveOrUpdate(user);
remotePointService.createPoint();
remoteOrderService.createOrder();
return R.ok();
}
}

30
kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/java/com/cloud/kicc/user/entity/User.java

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
package com.cloud.kicc.user.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
*<p>
* 用户表
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("demo_seata_user")
public class User {
@TableId
private String id;
private String name;
private Integer age;
}

22
kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/java/com/cloud/kicc/user/feign/RemoteOrderService.java

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
package com.cloud.kicc.user.feign;
import com.cloud.kicc.common.core.constant.ServiceNameConstants;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
/**
*<p>
* 远程调用订单接口
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
@FeignClient(contextId = "remoteOrderService" , value = ServiceNameConstants.SEATA_ORDER_SERVICE)
public interface RemoteOrderService {
/** 创建订单 */
@PostMapping("/order")
void createOrder();
}

23
kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/java/com/cloud/kicc/user/feign/RemotePointService.java

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
package com.cloud.kicc.user.feign;
import com.cloud.kicc.common.core.constant.ServiceNameConstants;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
/**
*<p>
* 远程调用积分接口
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
@FeignClient(contextId = "remotePointService" , value = ServiceNameConstants.SEATA_POINT_SERVICE)
public interface RemotePointService {
/** 创建积分 */
@PostMapping("/point")
void createPoint();
}

15
kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/java/com/cloud/kicc/user/mapper/UserMapper.java

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
package com.cloud.kicc.user.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cloud.kicc.user.entity.User;
/**
*<p>
* 用户mapper类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
public interface UserMapper extends BaseMapper<User> {
}

15
kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/java/com/cloud/kicc/user/service/UserService.java

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
package com.cloud.kicc.user.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cloud.kicc.user.entity.User;
/**
*<p>
* 用户业务类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
public interface UserService extends IService<User> {
}

19
kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/java/com/cloud/kicc/user/service/impl/UserServiceImpl.java

@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
package com.cloud.kicc.user.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cloud.kicc.user.entity.User;
import com.cloud.kicc.user.mapper.UserMapper;
import com.cloud.kicc.user.service.UserService;
import org.springframework.stereotype.Service;
/**
*<p>
* 用户业务实现类
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/3/11
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

71
kicc-common-demo/kicc-common-demo-seata/kicc-seata-user/src/main/resources/bootstrap.yml

@ -0,0 +1,71 @@ @@ -0,0 +1,71 @@
server:
port: 60003
spring:
application:
name: @artifactId@
cloud:
nacos:
discovery:
server-addr: ${NACOS_HOST:101.42.231.100}:${NACOS_PORT:8848}
namespace: ${seata.registry.nacos.namespace}
group: ${seata.registry.nacos.group}
sentinel:
filter:
# 关闭内部拦截,与spring cloud 2021有不兼容的问题
enabled: false
datasource:
# 数据源采用spring-boot自带kari,轻量化
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
username: ${MYSQL_USER:root}
password: ${MYSQL_PWD:root}
url: jdbc:mysql://${MYSQL_HOST:127.0.0.1}:${MYSQL_PORT:3306}/${MYSQL_DB:kicc}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
# feign配置
feign:
# 开启对sentinel的支持能提供接口调用自动熔断降级的功能
sentinel:
enabled: true
# 开启okhttp
okhttp:
enabled: true
# 关闭feign默认使用的jdk中的HttpURLConnection请求性能太低,集成别的组件来替换掉
httpclient:
enabled: false
client:
config:
default:
# 连接超时时间
connectTimeout: 10000
# 读超时时间
readTimeout: 10000
compression:
# 开启请求 GZIP 压缩,加快传输速度
request:
enabled: true
# 开启响应 GZIP 压缩,加快传输速度
response:
enabled: true
# mybatis-plus配置
mybatis-plus:
mapper-locations:
- classpath:mapper/**/*.xml
typeAliasesPackage: com.cloud.kicc.**.entity
global-config:
# 不显示banner
banner: false
# 数据库相关配置
db-config:
#主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
id-type: assign_id
configuration:
call-setters-on-nulls: true
# 日志配置
logging:
level:
com.cloud.kicc: debug
org.springframework: WARN
org.spring.springboot.dao: debug

23
kicc-common-demo/kicc-common-demo-seata/pom.xml

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-demo</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>kicc-common-demo-seata</artifactId>
<description>kicc 阿里巴巴分布式事务解决方案 演示</description>
<packaging>pom</packaging>
<modules>
<module>kicc-seata-order</module>
<module>kicc-seata-point</module>
<module>kicc-seata-user</module>
</modules>
</project>

23
kicc-common-demo/pom.xml

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.cloud</groupId>
<artifactId>kicc</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>kicc-common-demo</artifactId>
<description>kicc-组件使用案列</description>
<packaging>pom</packaging>
<modules>
<module>kicc-common-demo-mq</module>
<module>kicc-common-demo-seata</module>
</modules>
</project>

215
kicc-common/kicc-common-bom/pom.xml

@ -0,0 +1,215 @@ @@ -0,0 +1,215 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-bom</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<name>kicc-common-bom</name>
<description>全局jar BOM标准定义(可以设置工程内部的jar的标准,也可以设置第三方依赖jar的标准)</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<kicc.common.version>${project.version}</kicc.common.version>
<spring-boot.version>2.6.3</spring-boot.version>
<security.oauth.version>2.1.8.RELEASE</security.oauth.version>
<cloud.stream.version>3.0.13.RELEASE</cloud.stream.version>
<alibaba-seata.version>2021.0.1.0</alibaba-seata.version>
<log4j2.version>2.17.1</log4j2.version>
<fastjson.version>1.2.78</fastjson.version>
<swagger.core.version>1.5.24</swagger.core.version>
<mybatis-plus.version>3.5.1</mybatis-plus.version>
<nacos.version>2.0.3</nacos.version>
<sms.version>1.2.0</sms.version>
<git.commit.plugin>4.9.9</git.commit.plugin>
<spring.checkstyle.plugin>0.0.29</spring.checkstyle.plugin>
<captcha.version>2.2.1</captcha.version>
<oss.version>1.0.3</oss.version>
<excel.version>1.1.1</excel.version>
</properties>
<!-- 定义全局jar版本,模块使用需要再次引入但不用写版本号-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-core</artifactId>
<version>${kicc.common.version}</version>
</dependency>
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-data</artifactId>
<version>${kicc.common.version}</version>
</dependency>
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-datasource</artifactId>
<version>${kicc.common.version}</version>
</dependency>
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-feign</artifactId>
<version>${kicc.common.version}</version>
</dependency>
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-rocketmq</artifactId>
<version>${kicc.common.version}</version>
</dependency>
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-seata</artifactId>
<version>${kicc.common.version}</version>
</dependency>
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-job</artifactId>
<version>${kicc.common.version}</version>
</dependency>
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-log</artifactId>
<version>${kicc.common.version}</version>
</dependency>
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-mock</artifactId>
<version>${kicc.common.version}</version>
</dependency>
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-security</artifactId>
<version>${kicc.common.version}</version>
</dependency>
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-common-swagger</artifactId>
<version>${kicc.common.version}</version>
</dependency>
<dependency>
<groupId>com.cloud</groupId>
<artifactId>kicc-system-api</artifactId>
<version>${kicc.common.version}</version>
</dependency>
<!--最新版本2021.1 com.alibaba.cloud.seata.rest.SeataRestTemplateAutoConfiguration有自调Bean问题
与当前 spring cloud 2021 不兼容,更换2021.0.1.0兼容版本-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<version>${alibaba-seata.version}</version>
</dependency>
<!--稳定版本,目前最新版采用函数编程经过测试rocketMQ消费者接受消息收不到,
目前最新版适配还存在一定的问题,替代spring-cloud-starter-stream-rocketmq2021.1 bom内置-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream</artifactId>
<version>${cloud.stream.version}</version>
</dependency>
<!--稳定版本,替代spring security2.6.3 bom内置-->
<dependency>
<groupId>org.springframework.security.oauth.boot</groupId>
<artifactId>spring-security-oauth2-autoconfigure</artifactId>
<version>${security.oauth.version}</version>
</dependency>
<!--swagger 最新依赖内置版本-->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>${swagger.core.version}</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>${swagger.core.version}</version>
</dependency>
<!--fastjson 版本-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos.version}</version>
</dependency>
<!--阿里云短信服务-->
<dependency>
<groupId>cn.javaer.aliyun</groupId>
<artifactId>aliyun-spring-boot-starter-sms</artifactId>
<version>${sms.version}</version>
</dependency>
<!--orm mybatis-plus相关-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!--web 模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
<exclusions>
<!--排除tomcat依赖,使用undertow容器-->
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!--指定 log4j 版本-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-bom</artifactId>
<version>${log4j2.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--oss文件管理,采用S3协议封装,兼容阿里云OSS,腾讯云COS,七牛云,京东云,minio 等不需要引入对应厂商的SDK就可以使用厂商的OSS服务
代码开源地址: https://github.com/pig-mesh/oss-spring-boot-starter -->
<dependency>
<groupId>com.pig4cloud.plugin</groupId>
<artifactId>oss-spring-boot-starter</artifactId>
<version>${oss.version}</version>
</dependency>
<!-- 验证码处理支持很多种验证码风格基于google的aviator计算引擎实现,性能比较高效
代码开源地址: https://github.com/pig-mesh/easy-captcha -->
<dependency>
<groupId>com.pig4cloud.plugin</groupId>
<artifactId>captcha-spring-boot-starter</artifactId>
<version>${captcha.version}</version>
</dependency>
<!-- excel 导入导出处理,基于alibaba的EasyExcel实现,读取大文件不怎么吃内存,性能比较高效
代码开源地址: https://github.com/pig-mesh/excel-spring-boot-starter -->
<dependency>
<groupId>com.pig4cloud.excel</groupId>
<artifactId>excel-spring-boot-starter</artifactId>
<version>${excel.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<!--maven打包插件(打jar包会在classes生成git.properties文件包含了目前git相关信息方便查看git环境错误)-->
<plugin>
<groupId>io.github.git-commit-id</groupId>
<artifactId>git-commit-id-maven-plugin</artifactId>
<version>${git.commit.plugin}</version>
</plugin>
<!--代码格式插件,默认使用spring 规则,跟前端EsLine一样保证代码规范-->
<plugin>
<groupId>io.spring.javaformat</groupId>
<artifactId>spring-javaformat-maven-plugin</artifactId>
<version>${spring.checkstyle.plugin}</version>
</plugin>
</plugins>
</build>
</project>

50
kicc-common/kicc-common-core/pom.xml

@ -0,0 +1,50 @@ @@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.cloud</groupId>
<artifactId>kicc-common</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>kicc-common-core</artifactId>
<packaging>jar</packaging>
<description>kicc 公共工具类核心包</description>
<!--考虑这个作为一个单模块使用,后续引入依赖需要注意低耦合-->
<dependencies>
<!--hutool-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<!--server-api-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<!--hibernate-validator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!--json模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<scope>provided</scope>
</dependency>
<!--swagger 依赖支持注解-->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
</dependency>
</dependencies>
</project>

22
kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/annotation/EnableKiccJacksonAutoConvert.java

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
package com.cloud.kicc.common.core.annotation;
import com.cloud.kicc.common.core.config.JacksonAutoConfiguration;
import org.springframework.context.annotation.Import;
import java.lang.annotation.*;
/**
*<p>
* 激活 Jackson 自动转换配置
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/19
*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import({ JacksonAutoConfiguration.class })
public @interface EnableKiccJacksonAutoConvert {
}

114
kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/api/R.java

@ -0,0 +1,114 @@ @@ -0,0 +1,114 @@
package com.cloud.kicc.common.core.api;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.Map;
/**
*<p>
* 响应信息主体
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/18
*/
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class R<T> implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 成功标记
*/
private static Integer SUCCESS = 200;
/**
* 失败标记
*/
private static Integer FAIL = 500;
/**
* 未认证
*/
private static Integer UNAUTH = 401;
@Getter
@Setter
@ApiModelProperty("状态编码")
private int code;
@Getter
@Setter
@ApiModelProperty("提示消息")
private String msg;
@Getter
@Setter
@ApiModelProperty("结果集数量统计")
private long total;
@Getter
@Setter
@ApiModelProperty("结果集")
private T data;
public static <T> R<T> ok() {
return restResult(null, SUCCESS, "成功");
}
public static <T> R<T> ok(T data) {
return restResult(data, SUCCESS, "成功");
}
public static <T> R<T> ok(T data, String msg) {
return restResult(data, SUCCESS, msg);
}
public static <T> R<T> ok(T data, long total) {
return restData(data, SUCCESS, null, total);
}
public static <T> R<T> error() {
return restResult(null, FAIL, "失败");
}
public static <T> R<T> error(String msg) {
return restResult(null, FAIL, msg);
}
public static <T> R<T> error(T data) {
return restResult(data, FAIL, null);
}
public static <T> R<T> error(T data, String msg) {
return restResult(data, FAIL, msg);
}
public static <T> R<T> unAuth(String msg) {
return restResult(null, UNAUTH, msg);
}
private static <T> R<T> restResult(T data, int code, String msg) {
R<T> apiResult = new R<>();
apiResult.setCode(code);
apiResult.setData(data);
apiResult.setMsg(msg);
return apiResult;
}
private static <T> R<T> restData(T data, int code, String msg, long total) {
R<T> apiData = new R<>();
apiData.setCode(code);
apiData.setMsg(msg);
apiData.setTotal(total);
apiData.setData(data);
return apiData;
}
}

48
kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/config/JacksonAutoConfiguration.java

@ -0,0 +1,48 @@ @@ -0,0 +1,48 @@
package com.cloud.kicc.common.core.config;
import cn.hutool.core.date.DatePattern;
import com.cloud.kicc.common.core.jackson.KiccJavaTimeModule;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.ZoneId;
import java.util.Locale;
import java.util.TimeZone;
/**
*<p>
* 配置全局JacksonConfig,影响mvc层的对象传输日期格式
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/18
*/
@EnableAutoConfiguration
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(ObjectMapper.class)
@AutoConfigureBefore(org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration.class)
public class JacksonAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public Jackson2ObjectMapperBuilderCustomizer customizer() {
return builder -> {
builder.locale(Locale.CHINA);
builder.timeZone(TimeZone.getTimeZone(ZoneId.systemDefault()));
// 针对于Date类型,文本格式化,已经实现前端返回时间戳
builder.simpleDateFormat(DatePattern.NORM_DATETIME_PATTERN);
// 解决返回给前端的Long类型数据失去精度,将Long转换为String
builder.serializerByType(Long.class, ToStringSerializer.instance);
// 针对于JDK新时间类,序列化时带有T的问题,自定义格式化字符串
builder.modules(new KiccJavaTimeModule());
};
}
}

23
kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/config/RestTemplateConfiguration.java

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
package com.cloud.kicc.common.core.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
*<p>
* Rest 配置
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/18
*/
@Configuration(proxyBeanMethods = false)
public class RestTemplateConfiguration {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}

45
kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/config/WebMvcConfiguration.java

@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
package com.cloud.kicc.common.core.config;
import cn.hutool.core.date.DatePattern;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.format.datetime.standard.DateTimeFormatterRegistrar;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.time.format.DateTimeFormatter;
import static org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type.SERVLET;
/**
*<p>
* 全局DateTimeFormat
* 针对GET请求传入参数转换
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/18
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = SERVLET)
public class WebMvcConfiguration implements WebMvcConfigurer {
/**
* 增加GET请求参数中时间类型转换 {@link com.cloud.kicc.common.core.jackson.KiccJavaTimeModule}
* <ul>
* <li>HH:mm:ss -> LocalTime</li>
* <li>yyyy-MM-dd -> LocalDate</li>
* <li>yyyy-MM-dd HH:mm:ss -> LocalDateTime</li>
* </ul>
* @param registry
*/
@Override
public void addFormatters(FormatterRegistry registry) {
DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
registrar.setTimeFormatter(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN));
registrar.setDateFormatter(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN));
registrar.setDateTimeFormatter(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN));
registrar.registerFormatters(registry);
}
}

17
kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/constant/AppConstants.java

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
package com.cloud.kicc.common.core.constant;
/**
*<p>
* 应用前缀
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/24
*/
public interface AppConstants {
String APP_SYSTEM = "/system";
String APP_MONITOR = "/monitor";
}

53
kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/constant/CacheConstants.java

@ -0,0 +1,53 @@ @@ -0,0 +1,53 @@
package com.cloud.kicc.common.core.constant;
/**
*<p>
* 缓存的key 常量
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/18
*/
public interface CacheConstants {
/**
* oauth 缓存前缀
*/
String OAUTH_ACCESS = ServiceNameConstants.AUTH_SERVICE + ":access:";
/**
* oauth 缓存令牌前缀
*/
String OAUTH_TOKEN = ServiceNameConstants.AUTH_SERVICE + ":token:";
/**
* 验证码前缀
*/
String VERIFICATION_CODE = ServiceNameConstants.SYSTEM_SERVICE + ":verification_code:";
/**
* oauth 客户端信息缓存
*/
String OAUTH_CLIENT_DETAILS = ServiceNameConstants.AUTH_SERVICE + ":client_details";
/**
* 菜单信息缓存
*/
String MENU_DETAILS = ServiceNameConstants.AUTH_SERVICE + ":menu_details";
/**
* 用户信息缓存
*/
String USER_DETAILS = ServiceNameConstants.AUTH_SERVICE + ":user_details";
/**
* 字典信息缓存
*/
String DICT_DETAILS = ServiceNameConstants.AUTH_SERVICE + ":dict_details";
/**
* 全局配置缓存
*/
String CONFIG_PARAM = ServiceNameConstants.AUTH_SERVICE + ":config_param";
}

58
kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/constant/CommonConstants.java

@ -0,0 +1,58 @@ @@ -0,0 +1,58 @@
package com.cloud.kicc.common.core.constant;
/**
*<p>
* 通用常量
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/18
*/
public interface CommonConstants {
/**
* 正常
*/
String STATUS_NORMAL = "0";
/**
* 锁定
*/
String STATUS_LOCK = "9";
/**
* 编码
*/
String UTF8 = "UTF-8";
/**
* JSON 资源
*/
String CONTENT_TYPE = "application/json; charset=utf-8";
/**
* 前端工程名
*/
String FRONT_END_PROJECT = "kicc-ui";
/**
* 后端工程名
*/
String BACK_END_PROJECT = "kicc";
/**
* 失败标记
*/
Integer FAIL = 1;
/**
* 当前页
*/
String CURRENT = "current";
/**
* size
*/
String SIZE = "size";
}

110
kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/constant/SecurityConstants.java

@ -0,0 +1,110 @@ @@ -0,0 +1,110 @@
package com.cloud.kicc.common.core.constant;
/**
*<p>
* 安全常量
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/18
*/
public interface SecurityConstants {
/**
* 角色前缀
*/
String ROLE = "ROLE_";
/**
* 项目的license
*/
String PROJECT_LICENSE = "长沙康来生物有限公司";
/**
* 内部接口调用密钥
*/
String FROM_IN = "kG8qA6qG1aP5aR3g";
/**
* 内部接口调用Key标志
*/
String FROM = "from";
/**
* 默认登录URL
*/
String OAUTH_TOKEN_URL = "/oauth/token";
/**
* grant_type
*/
String REFRESH_TOKEN = "refresh_token";
/**
* 手机号登录
*/
String APP = "app";
/**
* {bcrypt} 加密的特征码
*/
String BCRYPT = "{bcrypt}";
/**
* sys_oauth_client_details 表的字段不包括client_idclient_secret
*/
String CLIENT_FIELDS = "client_id, CONCAT('{noop}',client_secret) as client_secret, resource_ids, scope, "
+ "authorized_grant_types, web_server_redirect_uri, authorities, access_token_validity, "
+ "refresh_token_validity, additional_information, autoapprove";
/**
* JdbcClientDetailsService 查询语句
*/
String BASE_FIND_STATEMENT = "select " + CLIENT_FIELDS + " from sys_oauth_client_details";
/**
* 默认的查询语句
*/
String DEFAULT_FIND_STATEMENT = BASE_FIND_STATEMENT + " order by client_id";
/**
* 按条件client_id 查询
*/
String DEFAULT_SELECT_STATEMENT = BASE_FIND_STATEMENT + " where client_id = ?";
/***
* 资源服务器默认bean名称
*/
String RESOURCE_SERVER_CONFIGURER = "resourceServerConfigurerAdapter";
/**
* 用户信息
*/
String DETAILS_USER = "user_info";
/**
* 协议字段
*/
String DETAILS_LICENSE = "license";
/**
* 验证码有效期,默认 60秒
*/
long CODE_TIME = 60;
/**
* 手机验证码长度
*/
String PHONE_CODE_SIZE = "6";
/**
* 客户端模式
*/
String CLIENT_CREDENTIALS = "client_credentials";
/**
* 客户端ID
*/
String CLIENT_ID = "clientId";
}

34
kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/constant/ServiceNameConstants.java

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
package com.cloud.kicc.common.core.constant;
/**
*<p>
* 服务名称
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/18
*/
public interface ServiceNameConstants {
/**
* 认证服务的SERVICE_ID
*/
String AUTH_SERVICE = "kicc-auth";
/**
* SYSTEM模块
*/
String SYSTEM_SERVICE = "kicc-system-biz";
/**
* seata分布式事务演示-订单模块
*/
String SEATA_ORDER_SERVICE = "kicc-seata-order";
/**
* seata分布式事务演示-积分模块
*/
String SEATA_POINT_SERVICE = "kicc-seata-point";
}

38
kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/enums/LoginTypeEnum.java

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
package com.cloud.kicc.common.core.enums;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
*<p>
* 社交登录类型
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/18
*/
@Getter
@RequiredArgsConstructor
public enum LoginTypeEnum {
/**
* 账号密码登录
*/
PWD("PWD", "账号密码登录"),
/**
* 验证码登录
*/
SMS("SMS", "验证码登录");
/**
* 类型
*/
private final String type;
/**
* 描述
*/
private final String description;
}

34
kicc-common/kicc-common-core/src/main/java/com/cloud/kicc/common/core/exception/CheckedException.java

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
package com.cloud.kicc.common.core.exception;
import lombok.NoArgsConstructor;
/**
*<p>
* 检查异常
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/18
*/
@NoArgsConstructor
public class CheckedException extends RuntimeException {
private static final long serialVersionUID = 1L;
public CheckedException(String message) {
super(message);
}
public CheckedException(Throwable cause) {
super(cause);
}
public CheckedException(String message, Throwable cause) {
super(message, cause);
}
public CheckedException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save