Commit 2a90038080f32e1c8e544109a27dcdd2a58b4ffb
Committed by
Gitee
!61 工作流的动态表单、流程模型、流程定义的提交
Merge pull request !61 from 芋道源码/feature/activiti
Showing
368 changed files
with
19244 additions
and
3313 deletions
Too many changes.
To preserve performance only 100 of 368 files are displayed.
sql/ruoyi-vue-pro.sql
| @@ -11,13 +11,67 @@ | @@ -11,13 +11,67 @@ | ||
| 11 | Target Server Version : 80026 | 11 | Target Server Version : 80026 |
| 12 | File Encoding : 65001 | 12 | File Encoding : 65001 |
| 13 | 13 | ||
| 14 | - Date: 15/12/2021 13:07:09 | 14 | + Date: 02/01/2022 19:25:42 |
| 15 | */ | 15 | */ |
| 16 | 16 | ||
| 17 | SET NAMES utf8mb4; | 17 | SET NAMES utf8mb4; |
| 18 | SET FOREIGN_KEY_CHECKS = 0; | 18 | SET FOREIGN_KEY_CHECKS = 0; |
| 19 | 19 | ||
| 20 | -- ---------------------------- | 20 | -- ---------------------------- |
| 21 | +-- Table structure for bpm_form | ||
| 22 | +-- ---------------------------- | ||
| 23 | +DROP TABLE IF EXISTS `bpm_form`; | ||
| 24 | +CREATE TABLE `bpm_form` ( | ||
| 25 | + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼–å·', | ||
| 26 | + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '表å•å', | ||
| 27 | + `status` tinyint NOT NULL COMMENT 'å¼€å¯çжæ€', | ||
| 28 | + `fields` varchar(5000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '表å•项的数组', | ||
| 29 | + `conf` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '表å•çš„é…ç½®', | ||
| 30 | + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', | ||
| 31 | + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', | ||
| 32 | + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | ||
| 33 | + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', | ||
| 34 | + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | ||
| 35 | + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | ||
| 36 | + PRIMARY KEY (`id`) USING BTREE | ||
| 37 | +) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='工作æµçš„表å•定义\n'; | ||
| 38 | + | ||
| 39 | +-- ---------------------------- | ||
| 40 | +-- Records of bpm_form | ||
| 41 | +-- ---------------------------- | ||
| 42 | +BEGIN; | ||
| 43 | +INSERT INTO `bpm_form` VALUES (7, '啊1', 1, '[\"{\\\"label\\\":\\\"密ç \\\",\\\"tag\\\":\\\"el-input\\\",\\\"tagIcon\\\":\\\"password\\\",\\\"placeholder\\\":\\\"请输入密ç \\\",\\\"span\\\":24,\\\"show-password\\\":true,\\\"labelWidth\\\":null,\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"clearable\\\":true,\\\"prepend\\\":\\\"\\\",\\\"append\\\":\\\"\\\",\\\"prefix-icon\\\":\\\"\\\",\\\"suffix-icon\\\":\\\"\\\",\\\"maxlength\\\":null,\\\"show-word-limit\\\":false,\\\"readonly\\\":false,\\\"disabled\\\":false,\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/input\\\",\\\"formId\\\":102,\\\"renderKey\\\":1640930414772,\\\"layout\\\":\\\"colFormItem\\\",\\\"vModel\\\":\\\"field102\\\",\\\"defaultValue\\\":\\\"admin123\\\"}\",\"{\\\"label\\\":\\\"级è”选择\\\",\\\"tag\\\":\\\"el-cascader\\\",\\\"tagIcon\\\":\\\"cascader\\\",\\\"placeholder\\\":\\\"请选择级è”选择级è”选择级è”选择\\\",\\\"defaultValue\\\":[],\\\"span\\\":24,\\\"labelWidth\\\":null,\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"props\\\":{\\\"props\\\":{\\\"multiple\\\":false}},\\\"show-all-levels\\\":true,\\\"disabled\\\":false,\\\"clearable\\\":true,\\\"filterable\\\":false,\\\"required\\\":true,\\\"options\\\":[{\\\"id\\\":1,\\\"value\\\":1,\\\"label\\\":\\\"选项1\\\",\\\"children\\\":[{\\\"id\\\":2,\\\"value\\\":2,\\\"label\\\":\\\"选项1-1\\\"}]}],\\\"dataType\\\":\\\"dynamic\\\",\\\"labelKey\\\":\\\"label\\\",\\\"valueKey\\\":\\\"value\\\",\\\"childrenKey\\\":\\\"children\\\",\\\"separator\\\":\\\"/\\\",\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/cascader\\\",\\\"formId\\\":101,\\\"renderKey\\\":1640960350991,\\\"layout\\\":\\\"colFormItem\\\",\\\"vModel\\\":\\\"field101\\\"}\",\"{\\\"label\\\":\\\"生活\\\",\\\"tag\\\":\\\"el-input\\\",\\\"tagIcon\\\":\\\"input\\\",\\\"placeholder\\\":\\\"请输入生活生活生活\\\",\\\"span\\\":24,\\\"labelWidth\\\":null,\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"clearable\\\":true,\\\"prepend\\\":\\\"\\\",\\\"append\\\":\\\"\\\",\\\"prefix-icon\\\":\\\"\\\",\\\"suffix-icon\\\":\\\"\\\",\\\"maxlength\\\":null,\\\"show-word-limit\\\":false,\\\"readonly\\\":false,\\\"disabled\\\":false,\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/input\\\",\\\"formId\\\":101,\\\"renderKey\\\":1640930388977,\\\"layout\\\":\\\"colFormItem\\\",\\\"vModel\\\":\\\"field101\\\",\\\"defaultValue\\\":\\\"admin\\\"}\"]', '{\"formRef\":\"elForm\",\"formModel\":\"formData\",\"size\":\"medium\",\"labelPosition\":\"right\",\"labelWidth\":100,\"formRules\":\"rules\",\"gutter\":15,\"disabled\":false,\"span\":24,\"formBtns\":true}', '哈哈哈哈biu', '1', '2021-12-31 10:10:13', '1', '2021-12-31 14:27:22', b'1'); | ||
| 44 | +INSERT INTO `bpm_form` VALUES (8, '啊哈哈', 0, '[]', '{\"formRef\":\"elForm\",\"formModel\":\"formData\",\"size\":\"medium\",\"labelPosition\":\"right\",\"labelWidth\":100,\"formRules\":\"rules\",\"gutter\":15,\"disabled\":false,\"span\":24,\"formBtns\":true}', '哈哈哈哈', '1', '2021-12-31 10:17:26', '1', '2021-12-31 14:27:20', b'1'); | ||
| 45 | +INSERT INTO `bpm_form` VALUES (9, '新增', 0, '[\"{\\\"label\\\":\\\"å•行文本\\\",\\\"tag\\\":\\\"el-input\\\",\\\"tagIcon\\\":\\\"input\\\",\\\"placeholder\\\":\\\"请输入å•行文本\\\",\\\"span\\\":24,\\\"labelWidth\\\":null,\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"clearable\\\":true,\\\"prepend\\\":\\\"\\\",\\\"append\\\":\\\"\\\",\\\"prefix-icon\\\":\\\"\\\",\\\"suffix-icon\\\":\\\"\\\",\\\"maxlength\\\":null,\\\"show-word-limit\\\":false,\\\"readonly\\\":false,\\\"disabled\\\":false,\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/input\\\",\\\"formId\\\":101,\\\"renderKey\\\":1640959561705,\\\"layout\\\":\\\"colFormItem\\\",\\\"vModel\\\":\\\"field101\\\"}\",\"{\\\"label\\\":\\\"å•选框组\\\",\\\"tag\\\":\\\"el-radio-group\\\",\\\"tagIcon\\\":\\\"radio\\\",\\\"span\\\":24,\\\"labelWidth\\\":null,\\\"style\\\":{},\\\"optionType\\\":\\\"default\\\",\\\"border\\\":false,\\\"size\\\":\\\"medium\\\",\\\"disabled\\\":false,\\\"required\\\":true,\\\"options\\\":[{\\\"label\\\":\\\"选项一\\\",\\\"value\\\":1},{\\\"label\\\":\\\"选项二\\\",\\\"value\\\":2}],\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/radio\\\",\\\"formId\\\":102,\\\"renderKey\\\":1640959563240,\\\"layout\\\":\\\"colFormItem\\\",\\\"vModel\\\":\\\"field102\\\"}\"]', '{\"formRef\":\"elForm\",\"formModel\":\"formData\",\"size\":\"medium\",\"labelPosition\":\"right\",\"labelWidth\":100,\"formRules\":\"rules\",\"gutter\":15,\"disabled\":false,\"span\":24,\"formBtns\":true}', '哈哈哈', '1', '2021-12-31 22:06:11', '1', '2021-12-31 14:27:19', b'1'); | ||
| 46 | +INSERT INTO `bpm_form` VALUES (10, '11333', 1, '[\"{\\\"label\\\":\\\"多行文本\\\",\\\"tag\\\":\\\"el-input\\\",\\\"tagIcon\\\":\\\"textarea\\\",\\\"type\\\":\\\"textarea\\\",\\\"placeholder\\\":\\\"请输入多行文本多行文本多行文本\\\",\\\"span\\\":24,\\\"labelWidth\\\":null,\\\"autosize\\\":{\\\"minRows\\\":4,\\\"maxRows\\\":4},\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"maxlength\\\":null,\\\"show-word-limit\\\":false,\\\"readonly\\\":false,\\\"disabled\\\":false,\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/input\\\",\\\"formId\\\":101,\\\"renderKey\\\":1640959720587,\\\"layout\\\":\\\"colFormItem\\\",\\\"vModel\\\":\\\"field101\\\",\\\"defaultValue\\\":\\\"1111\\\"}\",\"{\\\"label\\\":\\\"滑å—\\\",\\\"tag\\\":\\\"el-slider\\\",\\\"tagIcon\\\":\\\"slider\\\",\\\"defaultValue\\\":0,\\\"span\\\":24,\\\"labelWidth\\\":null,\\\"disabled\\\":false,\\\"required\\\":true,\\\"min\\\":0,\\\"max\\\":100,\\\"step\\\":1,\\\"show-stops\\\":false,\\\"range\\\":false,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/slider\\\",\\\"formId\\\":101,\\\"renderKey\\\":1640959732257,\\\"layout\\\":\\\"colFormItem\\\",\\\"vModel\\\":\\\"field101\\\"}\"]', '{\"formRef\":\"elForm\",\"formModel\":\"formData\",\"size\":\"medium\",\"labelPosition\":\"left\",\"labelWidth\":100,\"formRules\":\"rules\",\"gutter\":15,\"disabled\":false,\"span\":24,\"formBtns\":true}', '222211', '1', '2021-12-31 22:08:45', '1', '2021-12-31 14:27:17', b'1'); | ||
| 47 | +INSERT INTO `bpm_form` VALUES (11, 'biubiu', 0, '[\"{\\\"__config__\\\":{\\\"label\\\":\\\"级è”选择\\\",\\\"url\\\":\\\"https://www.fastmock.site/mock/f8d7a54fb1e60561e2f720d5a810009d/fg/cascaderList\\\",\\\"method\\\":\\\"get\\\",\\\"dataPath\\\":\\\"list\\\",\\\"dataConsumer\\\":\\\"options\\\",\\\"showLabel\\\":true,\\\"labelWidth\\\":null,\\\"tag\\\":\\\"el-cascader\\\",\\\"tagIcon\\\":\\\"cascader\\\",\\\"layout\\\":\\\"colFormItem\\\",\\\"defaultValue\\\":[1,2],\\\"dataType\\\":\\\"dynamic\\\",\\\"span\\\":24,\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/cascader\\\",\\\"formId\\\":121,\\\"renderKey\\\":\\\"1211641097528784\\\"},\\\"options\\\":[{\\\"id\\\":1,\\\"value\\\":1,\\\"label\\\":\\\"动æ€é€‰é¡¹1\\\",\\\"children\\\":[{\\\"id\\\":2,\\\"value\\\":2,\\\"label\\\":\\\"动æ€é€‰é¡¹1-1\\\"}]}],\\\"placeholder\\\":\\\"请选择级è”选择\\\",\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"props\\\":{\\\"props\\\":{\\\"multiple\\\":false,\\\"label\\\":\\\"label\\\",\\\"value\\\":\\\"value\\\",\\\"children\\\":\\\"children\\\"}},\\\"show-all-levels\\\":true,\\\"disabled\\\":false,\\\"clearable\\\":true,\\\"filterable\\\":false,\\\"separator\\\":\\\"/\\\",\\\"__vModel__\\\":\\\"field121\\\"}\",\"{\\\"__config__\\\":{\\\"label\\\":\\\"多选框组\\\",\\\"tag\\\":\\\"el-checkbox-group\\\",\\\"tagIcon\\\":\\\"checkbox\\\",\\\"defaultValue\\\":[],\\\"span\\\":24,\\\"showLabel\\\":true,\\\"labelWidth\\\":null,\\\"layout\\\":\\\"colFormItem\\\",\\\"optionType\\\":\\\"default\\\",\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"border\\\":false,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/checkbox\\\",\\\"formId\\\":122,\\\"renderKey\\\":\\\"1221641097529857\\\"},\\\"__slot__\\\":{\\\"options\\\":[{\\\"label\\\":\\\"选项一\\\",\\\"value\\\":1},{\\\"label\\\":\\\"选项二\\\",\\\"value\\\":2}]},\\\"style\\\":{},\\\"size\\\":\\\"medium\\\",\\\"disabled\\\":false,\\\"__vModel__\\\":\\\"field122\\\"}\"]', '{\"formRef\":\"elForm\",\"formModel\":\"formData\",\"size\":\"medium\",\"labelPosition\":\"right\",\"labelWidth\":100,\"formRules\":\"rules\",\"gutter\":15,\"disabled\":false,\"span\":24,\"formBtns\":true}', '嘿嘿', '1', '2022-01-02 12:25:55', '1', '2022-01-02 04:46:41', b'0'); | ||
| 48 | +COMMIT; | ||
| 49 | + | ||
| 50 | +-- ---------------------------- | ||
| 51 | +-- Table structure for bpm_process_definition | ||
| 52 | +-- ---------------------------- | ||
| 53 | +DROP TABLE IF EXISTS `bpm_process_definition`; | ||
| 54 | +CREATE TABLE `bpm_process_definition` ( | ||
| 55 | + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼–å·', | ||
| 56 | + `process_definition_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'æµç¨‹å®šä¹‰çš„ç¼–å·', | ||
| 57 | + `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'æè¿°', | ||
| 58 | + `form_id` bigint DEFAULT NULL COMMENT '表å•ç¼–å·', | ||
| 59 | + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', | ||
| 60 | + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | ||
| 61 | + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', | ||
| 62 | + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | ||
| 63 | + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | ||
| 64 | + PRIMARY KEY (`id`) USING BTREE | ||
| 65 | +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Bpm æµç¨‹å®šä¹‰çš„æ‹“展表\n'; | ||
| 66 | + | ||
| 67 | +-- ---------------------------- | ||
| 68 | +-- Records of bpm_process_definition | ||
| 69 | +-- ---------------------------- | ||
| 70 | +BEGIN; | ||
| 71 | +INSERT INTO `bpm_process_definition` VALUES (12, 'process1641042089407:5:6d9a655c-6b0b-11ec-bfb7-cacd34981f8e', '', 11, '1', '2022-01-01 22:02:17', '1', '2022-01-01 22:02:17', b'0'); | ||
| 72 | +COMMIT; | ||
| 73 | + | ||
| 74 | +-- ---------------------------- | ||
| 21 | -- Table structure for inf_api_access_log | 75 | -- Table structure for inf_api_access_log |
| 22 | -- ---------------------------- | 76 | -- ---------------------------- |
| 23 | DROP TABLE IF EXISTS `inf_api_access_log`; | 77 | DROP TABLE IF EXISTS `inf_api_access_log`; |
| @@ -44,7 +98,7 @@ CREATE TABLE `inf_api_access_log` ( | @@ -44,7 +98,7 @@ CREATE TABLE `inf_api_access_log` ( | ||
| 44 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 98 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 45 | `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', | 99 | `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', |
| 46 | PRIMARY KEY (`id`) USING BTREE | 100 | PRIMARY KEY (`id`) USING BTREE |
| 47 | -) ENGINE=InnoDB AUTO_INCREMENT=3282 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='API 访问日志表'; | 101 | +) ENGINE=InnoDB AUTO_INCREMENT=7244 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='API 访问日志表'; |
| 48 | 102 | ||
| 49 | -- ---------------------------- | 103 | -- ---------------------------- |
| 50 | -- Records of inf_api_access_log | 104 | -- Records of inf_api_access_log |
| @@ -86,7 +140,7 @@ CREATE TABLE `inf_api_error_log` ( | @@ -86,7 +140,7 @@ CREATE TABLE `inf_api_error_log` ( | ||
| 86 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 140 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 87 | `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', | 141 | `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', |
| 88 | PRIMARY KEY (`id`) USING BTREE | 142 | PRIMARY KEY (`id`) USING BTREE |
| 89 | -) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统异常日志'; | 143 | +) ENGINE=InnoDB AUTO_INCREMENT=111 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统异常日志'; |
| 90 | 144 | ||
| 91 | -- ---------------------------- | 145 | -- ---------------------------- |
| 92 | -- Records of inf_api_error_log | 146 | -- Records of inf_api_error_log |
| @@ -119,7 +173,7 @@ CREATE TABLE `inf_config` ( | @@ -119,7 +173,7 @@ CREATE TABLE `inf_config` ( | ||
| 119 | -- Records of inf_config | 173 | -- Records of inf_config |
| 120 | -- ---------------------------- | 174 | -- ---------------------------- |
| 121 | BEGIN; | 175 | BEGIN; |
| 122 | -INSERT INTO `inf_config` VALUES (1, 'ui', 1, '主框架页-é»˜è®¤çš®è‚¤æ ·å¼åç§°', 'sys.index.skinName', 'skin-blue', b'0', 'è“色 skin-blueã€ç»¿è‰² skin-greenã€ç´«è‰² skin-purpleã€çº¢è‰² skin-redã€é»„色 skin-yellow', 'admin', '2021-01-05 17:03:48', '', '2021-01-05 17:03:48', b'0'); | 176 | +INSERT INTO `inf_config` VALUES (1, 'ui', 1, '主框架页-é»˜è®¤çš®è‚¤æ ·å¼åç§°', 'sys.index.skinName', 'skin-blue', b'0', 'è“色 skin-blueã€ç»¿è‰² skin-greenã€ç´«è‰² skin-purpleã€çº¢è‰² skin-redã€é»„色 skin-yellow', 'admin', '2021-01-05 17:03:48', '1', '2021-12-16 07:42:36', b'0'); |
| 123 | INSERT INTO `inf_config` VALUES (2, 'biz', 1, '用户管ç†-è´¦å·åˆå§‹å¯†ç ', 'sys.user.init-password', '123456', b'0', 'åˆå§‹åŒ–密ç 123456', 'admin', '2021-01-05 17:03:48', '', '2021-04-13 03:48:02', b'0'); | 177 | INSERT INTO `inf_config` VALUES (2, 'biz', 1, '用户管ç†-è´¦å·åˆå§‹å¯†ç ', 'sys.user.init-password', '123456', b'0', 'åˆå§‹åŒ–密ç 123456', 'admin', '2021-01-05 17:03:48', '', '2021-04-13 03:48:02', b'0'); |
| 124 | INSERT INTO `inf_config` VALUES (3, 'ui', 1, '主框架页-ä¾§è¾¹æ 主题', 'sys.index.sideTheme', 'theme-dark', b'0', '深色主题theme-dark,浅色主题theme-light', 'admin', '2021-01-05 17:03:48', '', '2021-01-19 03:05:21', b'0'); | 178 | INSERT INTO `inf_config` VALUES (3, 'ui', 1, '主框架页-ä¾§è¾¹æ 主题', 'sys.index.sideTheme', 'theme-dark', b'0', '深色主题theme-dark,浅色主题theme-light', 'admin', '2021-01-05 17:03:48', '', '2021-01-19 03:05:21', b'0'); |
| 125 | INSERT INTO `inf_config` VALUES (4, '1', 2, 'xxx', 'demo.test', '10', b'0', '5', '', '2021-01-19 03:10:26', '', '2021-01-20 09:25:55', b'0'); | 179 | INSERT INTO `inf_config` VALUES (4, '1', 2, 'xxx', 'demo.test', '10', b'0', '5', '', '2021-01-19 03:10:26', '', '2021-01-20 09:25:55', b'0'); |
| @@ -715,6 +769,51 @@ INSERT INTO `pay_order_extension` VALUES (100, '20211027132205235959', 121, 9, ' | @@ -715,6 +769,51 @@ INSERT INTO `pay_order_extension` VALUES (100, '20211027132205235959', 121, 9, ' | ||
| 715 | COMMIT; | 769 | COMMIT; |
| 716 | 770 | ||
| 717 | -- ---------------------------- | 771 | -- ---------------------------- |
| 772 | +-- Table structure for pay_refund | ||
| 773 | +-- ---------------------------- | ||
| 774 | +DROP TABLE IF EXISTS `pay_refund`; | ||
| 775 | +CREATE TABLE `pay_refund` ( | ||
| 776 | + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '支付退款编å·', | ||
| 777 | + `req_no` varchar(64) NOT NULL COMMENT '退款å•请求å·', | ||
| 778 | + `merchant_id` bigint NOT NULL COMMENT '商户编å·', | ||
| 779 | + `app_id` bigint NOT NULL COMMENT '应用编å·', | ||
| 780 | + `channel_id` bigint NOT NULL COMMENT 'æ¸ é“ç¼–å·', | ||
| 781 | + `channel_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'æ¸ é“ç¼–ç ', | ||
| 782 | + `order_id` bigint NOT NULL COMMENT '支付订å•ç¼–å· pay_order 表id', | ||
| 783 | + `trade_no` varchar(64) NOT NULL COMMENT '交易订å•å· pay_extension 表no å—æ®µ', | ||
| 784 | + `merchant_order_id` varchar(64) NOT NULL COMMENT '商户订å•ç¼–å·ï¼ˆå•†æˆ·ç³»ç»Ÿç”Ÿæˆï¼‰', | ||
| 785 | + `merchant_refund_no` varchar(64) NOT NULL COMMENT '商户退款订å•å·ï¼ˆå•†æˆ·ç³»ç»Ÿç”Ÿæˆï¼‰', | ||
| 786 | + `notify_url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '异æ¥é€šçŸ¥å•†æˆ·åœ°å€', | ||
| 787 | + `notify_status` tinyint NOT NULL COMMENT '通知商户退款结果的回调状æ€', | ||
| 788 | + `status` tinyint NOT NULL COMMENT '退款状æ€', | ||
| 789 | + `type` tinyint NOT NULL COMMENT '退款类型(部分退款,全部退款)', | ||
| 790 | + `pay_amount` bigint NOT NULL COMMENT '支付金é¢,å•ä½åˆ†', | ||
| 791 | + `refund_amount` bigint NOT NULL COMMENT '退款金é¢,å•ä½åˆ†', | ||
| 792 | + `reason` varchar(256) NOT NULL COMMENT 'é€€æ¬¾åŽŸå› ', | ||
| 793 | + `user_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '用户 IP', | ||
| 794 | + `channel_order_no` varchar(64) NOT NULL COMMENT 'æ¸ é“订å•å·ï¼Œpay_order ä¸çš„channel_order_no 对应', | ||
| 795 | + `channel_refund_no` varchar(64) DEFAULT NULL COMMENT 'æ¸ é“退款å•å·ï¼Œæ¸ é“返回', | ||
| 796 | + `channel_error_code` varchar(128) DEFAULT NULL COMMENT 'æ¸ é“调用报错时,错误ç ', | ||
| 797 | + `channel_error_msg` varchar(256) DEFAULT NULL COMMENT 'æ¸ é“调用报错时,错误信æ¯', | ||
| 798 | + `channel_extras` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'æ”¯ä»˜æ¸ é“çš„é¢å¤–傿•°', | ||
| 799 | + `expire_time` datetime DEFAULT NULL COMMENT '退款失效时间', | ||
| 800 | + `success_time` datetime DEFAULT NULL COMMENT '退款æˆåŠŸæ—¶é—´', | ||
| 801 | + `notify_time` datetime DEFAULT NULL COMMENT '退款通知时间', | ||
| 802 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', | ||
| 803 | + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | ||
| 804 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', | ||
| 805 | + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | ||
| 806 | + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | ||
| 807 | + PRIMARY KEY (`id`) USING BTREE | ||
| 808 | +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='退款订å•'; | ||
| 809 | + | ||
| 810 | +-- ---------------------------- | ||
| 811 | +-- Records of pay_refund | ||
| 812 | +-- ---------------------------- | ||
| 813 | +BEGIN; | ||
| 814 | +COMMIT; | ||
| 815 | + | ||
| 816 | +-- ---------------------------- | ||
| 718 | -- Table structure for sys_dept | 817 | -- Table structure for sys_dept |
| 719 | -- ---------------------------- | 818 | -- ---------------------------- |
| 720 | DROP TABLE IF EXISTS `sys_dept`; | 819 | DROP TABLE IF EXISTS `sys_dept`; |
| @@ -770,7 +869,7 @@ CREATE TABLE `sys_dict_data` ( | @@ -770,7 +869,7 @@ CREATE TABLE `sys_dict_data` ( | ||
| 770 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 869 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 771 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 870 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 772 | PRIMARY KEY (`id`) USING BTREE | 871 | PRIMARY KEY (`id`) USING BTREE |
| 773 | -) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='å—典数æ®è¡¨'; | 872 | +) ENGINE=InnoDB AUTO_INCREMENT=1127 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='å—典数æ®è¡¨'; |
| 774 | 873 | ||
| 775 | -- ---------------------------- | 874 | -- ---------------------------- |
| 776 | -- Records of sys_dict_data | 875 | -- Records of sys_dict_data |
| @@ -857,14 +956,39 @@ INSERT INTO `sys_dict_data` VALUES (88, 2, '婚å‡', '3', 'oa_leave_type', 0, NU | @@ -857,14 +956,39 @@ INSERT INTO `sys_dict_data` VALUES (88, 2, '婚å‡', '3', 'oa_leave_type', 0, NU | ||
| 857 | INSERT INTO `sys_dict_data` VALUES (89, 0, '处ç†ä¸', '1', 'oa_leave_status', 0, NULL, '1', '2021-09-21 22:46:46', '1', '2021-10-12 22:12:20', b'0'); | 956 | INSERT INTO `sys_dict_data` VALUES (89, 0, '处ç†ä¸', '1', 'oa_leave_status', 0, NULL, '1', '2021-09-21 22:46:46', '1', '2021-10-12 22:12:20', b'0'); |
| 858 | INSERT INTO `sys_dict_data` VALUES (90, 1, 'æµç¨‹ç»“æŸ', '2', 'oa_leave_status', 0, NULL, '1', '2021-09-21 22:47:03', '1', '2021-10-12 22:12:58', b'0'); | 957 | INSERT INTO `sys_dict_data` VALUES (90, 1, 'æµç¨‹ç»“æŸ', '2', 'oa_leave_status', 0, NULL, '1', '2021-09-21 22:47:03', '1', '2021-10-12 22:12:58', b'0'); |
| 859 | INSERT INTO `sys_dict_data` VALUES (91, 2, '完æˆ', '3', 'oa_leave_status', 0, NULL, '1', '2021-09-21 22:47:25', '1', '2021-10-12 14:13:06', b'1'); | 958 | INSERT INTO `sys_dict_data` VALUES (91, 2, '完æˆ', '3', 'oa_leave_status', 0, NULL, '1', '2021-09-21 22:47:25', '1', '2021-10-12 14:13:06', b'1'); |
| 860 | -INSERT INTO `sys_dict_data` VALUES (92, 1, 'å¯ç”¨', '0', 'pay_merchant_status', 0, '商户å¯ç”¨', '1', '2021-11-03 11:30:52', '1', '2021-11-03 11:31:15', b'0'); | ||
| 861 | -INSERT INTO `sys_dict_data` VALUES (93, 2, 'åœç”¨', '1', 'pay_merchant_status', 0, '商户åœç”¨', '1', '2021-11-03 11:31:05', '1', '2021-11-03 11:31:05', b'0'); | ||
| 862 | -INSERT INTO `sys_dict_data` VALUES (94, 1, 'å¼€å¯', '0', 'pay_app_status', 0, NULL, '1', '2021-11-06 19:42:10', '1', '2021-11-06 19:42:10', b'0'); | ||
| 863 | -INSERT INTO `sys_dict_data` VALUES (95, 2, 'å…³é—', '1', 'pay_app_status', 0, NULL, '1', '2021-11-06 19:42:17', '1', '2021-11-06 19:42:17', b'0'); | ||
| 864 | -INSERT INTO `sys_dict_data` VALUES (96, 1, 'å¼€å¯', '0', 'pay_channel_status', 0, 'å¼€å¯', '1', '2021-11-08 16:47:45', '1', '2021-11-08 16:47:45', b'0'); | ||
| 865 | -INSERT INTO `sys_dict_data` VALUES (97, 2, 'å…³é—', '1', 'pay_channel_status', 0, 'å…³é—', '1', '2021-11-08 16:47:52', '1', '2021-11-08 16:47:52', b'0'); | ||
| 866 | INSERT INTO `sys_dict_data` VALUES (98, 1, 'v2', 'v2', 'pay_channel_wechat_version', 0, 'v2版本', '1', '2021-11-08 17:00:58', '1', '2021-11-08 17:00:58', b'0'); | 959 | INSERT INTO `sys_dict_data` VALUES (98, 1, 'v2', 'v2', 'pay_channel_wechat_version', 0, 'v2版本', '1', '2021-11-08 17:00:58', '1', '2021-11-08 17:00:58', b'0'); |
| 867 | INSERT INTO `sys_dict_data` VALUES (99, 2, 'v3', 'v3', 'pay_channel_wechat_version', 0, 'v3版本', '1', '2021-11-08 17:01:07', '1', '2021-11-08 17:01:07', b'0'); | 960 | INSERT INTO `sys_dict_data` VALUES (99, 2, 'v3', 'v3', 'pay_channel_wechat_version', 0, 'v3版本', '1', '2021-11-08 17:01:07', '1', '2021-11-08 17:01:07', b'0'); |
| 961 | +INSERT INTO `sys_dict_data` VALUES (108, 1, 'RSA2', 'RSA2', 'pay_channel_alipay_sign_type', 0, 'RSA2', '1', '2021-11-18 15:39:29', '1', '2021-11-18 15:39:29', b'0'); | ||
| 962 | +INSERT INTO `sys_dict_data` VALUES (109, 1, '公钥模å¼', '1', 'pay_channel_alipay_mode', 0, '公钥模å¼ï¼šprivateKey + alipayPublicKey', '1', '2021-11-18 15:45:23', '1', '2021-11-18 15:45:23', b'0'); | ||
| 963 | +INSERT INTO `sys_dict_data` VALUES (110, 2, 'è¯ä¹¦æ¨¡å¼', '2', 'pay_channel_alipay_mode', 0, 'è¯ä¹¦æ¨¡å¼ï¼šappCertContent + alipayPublicCertContent + rootCertContent', '1', '2021-11-18 15:45:40', '1', '2021-11-18 15:45:40', b'0'); | ||
| 964 | +INSERT INTO `sys_dict_data` VALUES (111, 1, '线上', 'https://openapi.alipay.com/gateway.do', 'pay_channel_alipay_server_type', 0, 'ç½‘å…³åœ°å€ - 线上', '1', '2021-11-18 16:59:32', '1', '2021-11-21 17:37:29', b'0'); | ||
| 965 | +INSERT INTO `sys_dict_data` VALUES (112, 2, '沙箱', 'https://openapi.alipaydev.com/gateway.do', 'pay_channel_alipay_server_type', 0, 'ç½‘å…³åœ°å€ - 沙箱', '1', '2021-11-18 16:59:48', '1', '2021-11-21 17:37:39', b'0'); | ||
| 966 | +INSERT INTO `sys_dict_data` VALUES (113, 1, '微信 JSAPI 支付', 'wx_pub', 'pay_channel_code_type', 0, '微信 JSAPI(公众å·ï¼‰ 支付', '1', '2021-12-03 10:40:24', '1', '2021-12-04 16:41:00', b'0'); | ||
| 967 | +INSERT INTO `sys_dict_data` VALUES (114, 2, '微信å°ç¨‹åºæ”¯ä»˜', 'wx_lite', 'pay_channel_code_type', 0, '微信å°ç¨‹åºæ”¯ä»˜', '1', '2021-12-03 10:41:06', '1', '2021-12-03 10:41:06', b'0'); | ||
| 968 | +INSERT INTO `sys_dict_data` VALUES (115, 3, '微信 App 支付', 'wx_app', 'pay_channel_code_type', 0, '微信 App 支付', '1', '2021-12-03 10:41:20', '1', '2021-12-03 10:41:20', b'0'); | ||
| 969 | +INSERT INTO `sys_dict_data` VALUES (116, 4, 'æ”¯ä»˜å® PC 网站支付', 'alipay_pc', 'pay_channel_code_type', 0, 'æ”¯ä»˜å® PC 网站支付', '1', '2021-12-03 10:42:09', '1', '2021-12-03 10:42:09', b'0'); | ||
| 970 | +INSERT INTO `sys_dict_data` VALUES (117, 5, 'æ”¯ä»˜å® Wap 网站支付', 'alipay_wap', 'pay_channel_code_type', 0, 'æ”¯ä»˜å® Wap 网站支付', '1', '2021-12-03 10:42:26', '1', '2021-12-03 10:42:26', b'0'); | ||
| 971 | +INSERT INTO `sys_dict_data` VALUES (118, 6, '支付å®App 支付', 'alipay_app', 'pay_channel_code_type', 0, '支付å®App 支付', '1', '2021-12-03 10:42:55', '1', '2021-12-03 10:42:55', b'0'); | ||
| 972 | +INSERT INTO `sys_dict_data` VALUES (119, 7, 'æ”¯ä»˜å®æ‰«ç 支付', 'alipay_qr', 'pay_channel_code_type', 0, 'æ”¯ä»˜å®æ‰«ç 支付', '1', '2021-12-03 10:43:10', '1', '2021-12-03 10:43:10', b'0'); | ||
| 973 | +INSERT INTO `sys_dict_data` VALUES (120, 1, '通知æˆåŠŸ', '10', 'pay_order_notify_status', 0, '通知æˆåŠŸ', '1', '2021-12-03 11:02:41', '1', '2021-12-03 11:02:41', b'0'); | ||
| 974 | +INSERT INTO `sys_dict_data` VALUES (121, 2, '通知失败', '20', 'pay_order_notify_status', 0, '通知失败', '1', '2021-12-03 11:02:59', '1', '2021-12-03 11:02:59', b'0'); | ||
| 975 | +INSERT INTO `sys_dict_data` VALUES (122, 3, '未通知', '0', 'pay_order_notify_status', 0, '未通知', '1', '2021-12-03 11:03:10', '1', '2021-12-03 11:03:10', b'0'); | ||
| 976 | +INSERT INTO `sys_dict_data` VALUES (123, 1, '支付æˆåŠŸ', '10', 'pay_order_status', 0, '支付æˆåŠŸ', '1', '2021-12-03 11:18:29', '1', '2021-12-03 11:28:32', b'0'); | ||
| 977 | +INSERT INTO `sys_dict_data` VALUES (124, 2, '支付关é—', '20', 'pay_order_status', 0, '支付关é—', '1', '2021-12-03 11:18:42', '1', '2021-12-03 11:28:34', b'0'); | ||
| 978 | +INSERT INTO `sys_dict_data` VALUES (125, 3, '未支付', '0', 'pay_order_status', 0, '未支付', '1', '2021-12-03 11:18:18', '1', '2021-12-03 11:28:36', b'0'); | ||
| 979 | +INSERT INTO `sys_dict_data` VALUES (126, 1, '未退款', '0', 'pay_order_refund_status', 0, '未退款', '1', '2021-12-03 11:30:35', '1', '2021-12-03 11:34:05', b'0'); | ||
| 980 | +INSERT INTO `sys_dict_data` VALUES (127, 2, '部分退款', '10', 'pay_order_refund_status', 0, '部分退款', '1', '2021-12-03 11:30:44', '1', '2021-12-03 11:34:10', b'0'); | ||
| 981 | +INSERT INTO `sys_dict_data` VALUES (128, 3, '全部退款', '20', 'pay_order_refund_status', 0, '全部退款', '1', '2021-12-03 11:30:52', '1', '2021-12-03 11:34:14', b'0'); | ||
| 982 | +INSERT INTO `sys_dict_data` VALUES (1117, 1, '退款订å•生æˆ', '0', 'pay_refund_order_status', 0, '退款订å•生æˆ', '1', '2021-12-10 16:44:44', '1', '2021-12-10 16:44:44', b'0'); | ||
| 983 | +INSERT INTO `sys_dict_data` VALUES (1118, 2, '退款æˆåŠŸ', '1', 'pay_refund_order_status', 0, '退款æˆåŠŸ', '1', '2021-12-10 16:44:59', '1', '2021-12-10 16:44:59', b'0'); | ||
| 984 | +INSERT INTO `sys_dict_data` VALUES (1119, 3, '退款失败', '2', 'pay_refund_order_status', 0, '退款失败', '1', '2021-12-10 16:45:10', '1', '2021-12-10 16:45:10', b'0'); | ||
| 985 | +INSERT INTO `sys_dict_data` VALUES (1120, 4, '退款ä¸, æ¸ é“通知结果', '3', 'pay_refund_order_status', 0, '退款ä¸, æ¸ é“通知结果', '1', '2021-12-10 16:45:32', '1', '2021-12-10 16:45:32', b'0'); | ||
| 986 | +INSERT INTO `sys_dict_data` VALUES (1121, 5, '退款ä¸, 系统查询结果', '4', 'pay_refund_order_status', 0, '退款ä¸, 系统查询结果', '1', '2021-12-10 16:45:48', '1', '2021-12-10 16:45:48', b'0'); | ||
| 987 | +INSERT INTO `sys_dict_data` VALUES (1122, 6, 'çŠ¶æ€æœªçŸ¥ï¼Œéœ€è¦é‡è¯•', '5', 'pay_refund_order_status', 0, 'çŠ¶æ€æœªçŸ¥ï¼Œéœ€è¦é‡è¯•', '1', '2021-12-10 16:46:03', '1', '2021-12-10 16:46:03', b'0'); | ||
| 988 | +INSERT INTO `sys_dict_data` VALUES (1123, 7, 'çŠ¶æ€æœªçŸ¥ï¼Œç³»ç»ŸæŸ¥è¯¢ç»“æžœ', '6', 'pay_refund_order_status', 0, 'çŠ¶æ€æœªçŸ¥ï¼Œç³»ç»ŸæŸ¥è¯¢ç»“æžœ', '1', '2021-12-10 16:46:13', '1', '2021-12-10 16:46:13', b'0'); | ||
| 989 | +INSERT INTO `sys_dict_data` VALUES (1124, 8, '退款关é—', '99', 'pay_refund_order_status', 0, '退款关é—', '1', '2021-12-10 16:46:26', '1', '2021-12-10 16:46:26', b'0'); | ||
| 990 | +INSERT INTO `sys_dict_data` VALUES (1125, 0, '默认', '1', 'bpm_model_category', 0, 'æµç¨‹åˆ†ç±» - 默认', '1', '2022-01-02 08:41:11', '1', '2022-01-02 08:41:11', b'0'); | ||
| 991 | +INSERT INTO `sys_dict_data` VALUES (1126, 0, 'OA', '2', 'bpm_model_category', 0, 'æµç¨‹åˆ†ç±» - OA', '1', '2022-01-02 08:41:22', '1', '2022-01-02 08:41:22', b'0'); | ||
| 868 | COMMIT; | 992 | COMMIT; |
| 869 | 993 | ||
| 870 | -- ---------------------------- | 994 | -- ---------------------------- |
| @@ -884,7 +1008,7 @@ CREATE TABLE `sys_dict_type` ( | @@ -884,7 +1008,7 @@ CREATE TABLE `sys_dict_type` ( | ||
| 884 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 1008 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 885 | PRIMARY KEY (`id`) USING BTREE, | 1009 | PRIMARY KEY (`id`) USING BTREE, |
| 886 | UNIQUE KEY `dict_type` (`type`) | 1010 | UNIQUE KEY `dict_type` (`type`) |
| 887 | -) ENGINE=InnoDB AUTO_INCREMENT=123 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='å—典类型表'; | 1011 | +) ENGINE=InnoDB AUTO_INCREMENT=139 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='å—典类型表'; |
| 888 | 1012 | ||
| 889 | -- ---------------------------- | 1013 | -- ---------------------------- |
| 890 | -- Records of sys_dict_type | 1014 | -- Records of sys_dict_type |
| @@ -915,10 +1039,18 @@ INSERT INTO `sys_dict_type` VALUES (115, '错误ç 的类型', 'sys_error_code_t | @@ -915,10 +1039,18 @@ INSERT INTO `sys_dict_type` VALUES (115, '错误ç 的类型', 'sys_error_code_t | ||
| 915 | INSERT INTO `sys_dict_type` VALUES (116, '登陆日志的类型', 'sys_login_type', 0, '登陆日志的类型', '1', '2021-10-06 00:50:46', '1', '2021-10-06 00:50:46', b'0'); | 1039 | INSERT INTO `sys_dict_type` VALUES (116, '登陆日志的类型', 'sys_login_type', 0, '登陆日志的类型', '1', '2021-10-06 00:50:46', '1', '2021-10-06 00:50:46', b'0'); |
| 916 | INSERT INTO `sys_dict_type` VALUES (117, '请å‡ç±»åž‹', 'oa_leave_type', 0, NULL, '1', '2021-09-21 22:34:33', '1', '2021-09-21 15:00:38', b'0'); | 1040 | INSERT INTO `sys_dict_type` VALUES (117, '请å‡ç±»åž‹', 'oa_leave_type', 0, NULL, '1', '2021-09-21 22:34:33', '1', '2021-09-21 15:00:38', b'0'); |
| 917 | INSERT INTO `sys_dict_type` VALUES (118, 'è¯·å‡æµç¨‹çжæ€', 'oa_leave_status', 0, NULL, '1', '2021-09-21 22:46:04', '1', '2021-09-21 15:00:38', b'0'); | 1041 | INSERT INTO `sys_dict_type` VALUES (118, 'è¯·å‡æµç¨‹çжæ€', 'oa_leave_status', 0, NULL, '1', '2021-09-21 22:46:04', '1', '2021-09-21 15:00:38', b'0'); |
| 918 | -INSERT INTO `sys_dict_type` VALUES (119, '商户状æ€', 'pay_merchant_status', 0, '商户的å¯ç”¨äºŽåœç”¨çжæ€', '1', '2021-11-03 11:29:04', '1', '2021-11-03 11:29:04', b'0'); | ||
| 919 | -INSERT INTO `sys_dict_type` VALUES (120, '支付应用状æ€', 'pay_app_status', 0, '支付应用的å¯åœçжæ€', '1', '2021-11-06 19:41:50', '1', '2021-11-06 19:41:50', b'0'); | ||
| 920 | -INSERT INTO `sys_dict_type` VALUES (121, 'æ”¯ä»˜æ¸ é“状æ€', 'pay_channel_status', 0, 'æ”¯ä»˜æ¸ é“çš„å¯åœçжæ€', '1', '2021-11-08 16:47:21', '1', '2021-11-08 16:47:21', b'0'); | ||
| 921 | INSERT INTO `sys_dict_type` VALUES (122, 'æ”¯ä»˜æ¸ é“微信版本', 'pay_channel_wechat_version', 0, 'æ”¯ä»˜æ¸ é“微信版本', '1', '2021-11-08 17:00:26', '1', '2021-11-08 17:00:26', b'0'); | 1042 | INSERT INTO `sys_dict_type` VALUES (122, 'æ”¯ä»˜æ¸ é“微信版本', 'pay_channel_wechat_version', 0, 'æ”¯ä»˜æ¸ é“微信版本', '1', '2021-11-08 17:00:26', '1', '2021-11-08 17:00:26', b'0'); |
| 1043 | +INSERT INTO `sys_dict_type` VALUES (127, 'æ”¯ä»˜æ¸ é“æ”¯ä»˜å®ç®—法类型', 'pay_channel_alipay_sign_type', 0, 'æ”¯ä»˜æ¸ é“æ”¯ä»˜å®ç®—法类型', '1', '2021-11-18 15:39:09', '1', '2021-11-18 15:39:09', b'0'); | ||
| 1044 | +INSERT INTO `sys_dict_type` VALUES (128, 'æ”¯ä»˜æ¸ é“æ”¯ä»˜å®å…¬é’¥ç±»åž‹', 'pay_channel_alipay_mode', 0, 'æ”¯ä»˜æ¸ é“æ”¯ä»˜å®å…¬é’¥ç±»åž‹', '1', '2021-11-18 15:44:28', '1', '2021-11-18 15:44:28', b'0'); | ||
| 1045 | +INSERT INTO `sys_dict_type` VALUES (129, '支付å®ç½‘关地å€', 'pay_channel_alipay_server_type', 0, '支付å®ç½‘关地å€', '1', '2021-11-18 16:58:55', '1', '2021-11-18 17:01:34', b'0'); | ||
| 1046 | +INSERT INTO `sys_dict_type` VALUES (130, 'æ”¯ä»˜æ¸ é“ç¼–ç 类型', 'pay_channel_code_type', 0, 'æ”¯ä»˜æ¸ é“的编ç ', '1', '2021-12-03 10:35:08', '1', '2021-12-03 10:35:08', b'0'); | ||
| 1047 | +INSERT INTO `sys_dict_type` VALUES (131, '支付订å•回调状æ€', 'pay_order_notify_status', 0, '支付订å•回调状æ€', '1', '2021-12-03 10:53:29', '1', '2021-12-03 10:53:29', b'0'); | ||
| 1048 | +INSERT INTO `sys_dict_type` VALUES (132, '支付订å•状æ€', 'pay_order_status', 0, '支付订å•状æ€', '1', '2021-12-03 11:17:50', '1', '2021-12-03 11:17:50', b'0'); | ||
| 1049 | +INSERT INTO `sys_dict_type` VALUES (133, '支付订å•退款状æ€', 'pay_order_refund_status', 0, '支付订å•退款状æ€', '1', '2021-12-03 11:27:31', '1', '2021-12-03 11:27:31', b'0'); | ||
| 1050 | +INSERT INTO `sys_dict_type` VALUES (134, '退款订å•状æ€', 'pay_refund_order_status', 0, '退款订å•状æ€', '1', '2021-12-10 16:42:50', '1', '2021-12-10 16:42:50', b'0'); | ||
| 1051 | +INSERT INTO `sys_dict_type` VALUES (135, '退款订å•类别', 'pay_refund_order_type', 0, '退款订å•类别', '1', '2021-12-10 17:14:53', '1', '2021-12-10 17:14:53', b'0'); | ||
| 1052 | +INSERT INTO `sys_dict_type` VALUES (137, 'æµç¨‹åˆ†ç±»', 'æµç¨‹åˆ†ç±»', 0, 'æµç¨‹åˆ†ç±»', '1', '2022-01-02 08:40:17', '1', '2022-01-02 00:40:34', b'1'); | ||
| 1053 | +INSERT INTO `sys_dict_type` VALUES (138, 'æµç¨‹åˆ†ç±»', 'bpm_model_category', 0, 'æµç¨‹åˆ†ç±»', '1', '2022-01-02 08:40:45', '1', '2022-01-02 08:40:45', b'0'); | ||
| 922 | COMMIT; | 1054 | COMMIT; |
| 923 | 1055 | ||
| 924 | -- ---------------------------- | 1056 | -- ---------------------------- |
| @@ -938,93 +1070,12 @@ CREATE TABLE `sys_error_code` ( | @@ -938,93 +1070,12 @@ CREATE TABLE `sys_error_code` ( | ||
| 938 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 1070 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 939 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 1071 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 940 | PRIMARY KEY (`id`) USING BTREE | 1072 | PRIMARY KEY (`id`) USING BTREE |
| 941 | -) ENGINE=InnoDB AUTO_INCREMENT=4020 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='错误ç 表'; | 1073 | +) ENGINE=InnoDB AUTO_INCREMENT=4049 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='错误ç 表'; |
| 942 | 1074 | ||
| 943 | -- ---------------------------- | 1075 | -- ---------------------------- |
| 944 | -- Records of sys_error_code | 1076 | -- Records of sys_error_code |
| 945 | -- ---------------------------- | 1077 | -- ---------------------------- |
| 946 | BEGIN; | 1078 | BEGIN; |
| 947 | -INSERT INTO `sys_error_code` VALUES (3939, 2, 'dashboard', 1001000001, '傿•°é…ç½®ä¸å˜åœ¨', 'ceshi', NULL, '2021-04-20 23:52:56', '1', '2021-04-21 23:44:15', b'0'); | ||
| 948 | -INSERT INTO `sys_error_code` VALUES (3940, 1, 'dashboard', 1001000002, '傿•°é…ç½® key é‡å¤', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); | ||
| 949 | -INSERT INTO `sys_error_code` VALUES (3941, 1, 'dashboard', 1001000003, 'ä¸èƒ½åˆ é™¤ç±»åž‹ä¸ºç³»ç»Ÿå†…ç½®çš„å‚æ•°é…ç½®', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); | ||
| 950 | -INSERT INTO `sys_error_code` VALUES (3942, 1, 'dashboard', 1001000004, 'ä¸å…è®¸èŽ·å–æ•感é…置到å‰ç«¯', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); | ||
| 951 | -INSERT INTO `sys_error_code` VALUES (3943, 1, 'dashboard', 1001001000, '定时任务ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); | ||
| 952 | -INSERT INTO `sys_error_code` VALUES (3944, 1, 'dashboard', 1001001001, '定时任务的处ç†å™¨å·²ç»å˜åœ¨', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); | ||
| 953 | -INSERT INTO `sys_error_code` VALUES (3945, 1, 'dashboard', 1001001002, 'åªå…è®¸ä¿®æ”¹ä¸ºå¼€å¯æˆ–者关é—状æ€', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); | ||
| 954 | -INSERT INTO `sys_error_code` VALUES (3946, 1, 'dashboard', 1001001003, '定时任务已ç»å¤„于该状æ€ï¼Œæ— 需修改', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); | ||
| 955 | -INSERT INTO `sys_error_code` VALUES (3947, 1, 'dashboard', 1001001004, 'åªæœ‰å¼€å¯çжæ€çš„任务,æ‰å¯ä»¥ä¿®æ”¹', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 956 | -INSERT INTO `sys_error_code` VALUES (3948, 1, 'dashboard', 1001001005, 'CRON 表达å¼ä¸æ£ç¡®', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 957 | -INSERT INTO `sys_error_code` VALUES (3949, 2, 'dashboard', 1001002000, 'API 错误日志ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', '1', '2021-04-13 21:55:55', b'1'); | ||
| 958 | -INSERT INTO `sys_error_code` VALUES (3950, 1, 'dashboard', 1001002001, 'API 错误日志已处ç†', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 959 | -INSERT INTO `sys_error_code` VALUES (3951, 1, 'dashboard', 1001003000, '文件ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 960 | -INSERT INTO `sys_error_code` VALUES (3952, 1, 'dashboard', 1002000000, '登录失败,账å·å¯†ç 䏿£ç¡®', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 961 | -INSERT INTO `sys_error_code` VALUES (3953, 1, 'dashboard', 1002000001, '登录失败,账å·è¢«ç¦ç”¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 962 | -INSERT INTO `sys_error_code` VALUES (3954, 1, 'dashboard', 1002000002, '登录失败', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 963 | -INSERT INTO `sys_error_code` VALUES (3955, 1, 'dashboard', 1002000003, '验è¯ç ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 964 | -INSERT INTO `sys_error_code` VALUES (3956, 1, 'dashboard', 1002000004, '验è¯ç 䏿£ç¡®', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 965 | -INSERT INTO `sys_error_code` VALUES (3957, 1, 'dashboard', 1002001000, 'Token å·²ç»è¿‡æœŸ', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 966 | -INSERT INTO `sys_error_code` VALUES (3958, 1, 'dashboard', 1002001001, 'Token è§£æžå¤±è´¥', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 967 | -INSERT INTO `sys_error_code` VALUES (3959, 1, 'dashboard', 1002002000, 'å·²ç»å˜åœ¨è¯¥åå—çš„èœå•', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 968 | -INSERT INTO `sys_error_code` VALUES (3960, 1, 'dashboard', 1002002001, '父èœå•ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 969 | -INSERT INTO `sys_error_code` VALUES (3961, 1, 'dashboard', 1002002002, 'ä¸èƒ½è®¾ç½®è‡ªå·±ä¸ºçˆ¶èœå•', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 970 | -INSERT INTO `sys_error_code` VALUES (3962, 1, 'dashboard', 1002002003, 'èœå•ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 971 | -INSERT INTO `sys_error_code` VALUES (3963, 1, 'dashboard', 1002002004, 'å˜åœ¨åèœå•ï¼Œæ— æ³•åˆ é™¤', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 972 | -INSERT INTO `sys_error_code` VALUES (3964, 1, 'dashboard', 1002002005, '父èœå•的类型必须是目录或者èœå•', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 973 | -INSERT INTO `sys_error_code` VALUES (3965, 1, 'dashboard', 1002003000, '角色ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 974 | -INSERT INTO `sys_error_code` VALUES (3966, 1, 'dashboard', 1002003001, 'å·²ç»å˜åœ¨å为ã€{}】的角色', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 975 | -INSERT INTO `sys_error_code` VALUES (3967, 1, 'dashboard', 1002003002, 'å·²ç»å˜åœ¨ç¼–ç 为ã€{}】的角色', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 976 | -INSERT INTO `sys_error_code` VALUES (3968, 1, 'dashboard', 1002003004, 'ä¸èƒ½æ“作类型为系统内置的角色', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 977 | -INSERT INTO `sys_error_code` VALUES (3969, 1, 'dashboard', 1002004000, '用户账å·å·²ç»å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 978 | -INSERT INTO `sys_error_code` VALUES (3970, 1, 'dashboard', 1002004001, 'å·²ç»å˜åœ¨è¯¥åå—的部门', '', NULL, '2021-04-20 23:52:57', NULL, '2021-05-02 23:18:32', b'0'); | ||
| 979 | -INSERT INTO `sys_error_code` VALUES (3971, 1, 'dashboard', 1002004002, '父级部门ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-05-02 23:18:32', b'0'); | ||
| 980 | -INSERT INTO `sys_error_code` VALUES (3972, 1, 'dashboard', 1002004003, '用户ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-05-02 23:18:32', b'0'); | ||
| 981 | -INSERT INTO `sys_error_code` VALUES (3973, 1, 'dashboard', 1002004004, 'å˜åœ¨åéƒ¨é—¨ï¼Œæ— æ³•åˆ é™¤', '', NULL, '2021-04-20 23:52:57', NULL, '2021-05-02 23:18:32', b'0'); | ||
| 982 | -INSERT INTO `sys_error_code` VALUES (3974, 1, 'dashboard', 1002004005, 'ä¸èƒ½è®¾ç½®è‡ªå·±ä¸ºçˆ¶éƒ¨é—¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-05-02 23:18:32', b'0'); | ||
| 983 | -INSERT INTO `sys_error_code` VALUES (3975, 1, 'dashboard', 1002004001, 'å·²ç»å˜åœ¨è¯¥åå—的部门', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 984 | -INSERT INTO `sys_error_code` VALUES (3976, 1, 'dashboard', 1002004002, '父级部门ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 985 | -INSERT INTO `sys_error_code` VALUES (3977, 1, 'dashboard', 1002004003, '当å‰éƒ¨é—¨ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 986 | -INSERT INTO `sys_error_code` VALUES (3978, 1, 'dashboard', 1002004004, 'å˜åœ¨åéƒ¨é—¨ï¼Œæ— æ³•åˆ é™¤', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 987 | -INSERT INTO `sys_error_code` VALUES (3979, 1, 'dashboard', 1002004005, 'ä¸èƒ½è®¾ç½®è‡ªå·±ä¸ºçˆ¶éƒ¨é—¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 988 | -INSERT INTO `sys_error_code` VALUES (3980, 1, 'dashboard', 1002004006, '部门ä¸å˜åœ¨å‘˜å·¥ï¼Œæ— æ³•åˆ é™¤', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 989 | -INSERT INTO `sys_error_code` VALUES (3981, 1, 'dashboard', 1002004007, '部门ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 990 | -INSERT INTO `sys_error_code` VALUES (3982, 1, 'dashboard', 1002004008, 'ä¸èƒ½è®¾ç½®è‡ªå·±çš„å部门为父部门', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 991 | -INSERT INTO `sys_error_code` VALUES (3983, 1, 'dashboard', 1002005001, 'å·²ç»å˜åœ¨è¯¥æ ‡è¯†çš„å²—ä½', '', NULL, '2021-04-20 23:52:57', NULL, '2021-05-02 23:18:32', b'0'); | ||
| 992 | -INSERT INTO `sys_error_code` VALUES (3984, 1, 'dashboard', 1002005002, 'å²—ä½({}) ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 993 | -INSERT INTO `sys_error_code` VALUES (3985, 1, 'dashboard', 1002005001, 'å·²ç»å˜åœ¨è¯¥åå—的岗ä½', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 994 | -INSERT INTO `sys_error_code` VALUES (3986, 1, 'dashboard', 1002005001, 'å·²ç»å˜åœ¨è¯¥æ ‡è¯†çš„å²—ä½', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 995 | -INSERT INTO `sys_error_code` VALUES (3987, 1, 'dashboard', 1002006001, '当å‰å—典类型ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 996 | -INSERT INTO `sys_error_code` VALUES (3988, 1, 'dashboard', 1002006002, 'å—典类型ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 997 | -INSERT INTO `sys_error_code` VALUES (3989, 1, 'dashboard', 1002006003, 'å·²ç»å˜åœ¨è¯¥åå—çš„å—典类型', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 998 | -INSERT INTO `sys_error_code` VALUES (3990, 1, 'dashboard', 1002006004, 'æ— æ³•åˆ é™¤ï¼Œè¯¥å—典类型还有å—典数æ®', '', NULL, '2021-04-20 23:52:57', NULL, '2021-05-02 23:18:32', b'0'); | ||
| 999 | -INSERT INTO `sys_error_code` VALUES (3991, 1, 'dashboard', 1002006004, 'æ— æ³•åˆ é™¤ï¼Œè¯¥å—典类型还有å—典数æ®', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 1000 | -INSERT INTO `sys_error_code` VALUES (3992, 1, 'dashboard', 1002007001, '当å‰å—典数æ®ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 1001 | -INSERT INTO `sys_error_code` VALUES (3993, 1, 'dashboard', 1002007002, 'å—典数æ®ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 1002 | -INSERT INTO `sys_error_code` VALUES (3994, 1, 'dashboard', 1002007003, 'å·²ç»å˜åœ¨è¯¥å€¼çš„å—典数æ®', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 1003 | -INSERT INTO `sys_error_code` VALUES (3995, 1, 'dashboard', 1002008001, '当å‰é€šçŸ¥å…¬å‘Šä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 1004 | -INSERT INTO `sys_error_code` VALUES (3996, 1, 'dashboard', 1002009001, '文件路径已ç»å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-21 00:03:20', b'0'); | ||
| 1005 | -INSERT INTO `sys_error_code` VALUES (3997, 1, 'dashboard', 1002009002, 'æ–‡ä»¶ä¸Šä¼ å¤±è´¥', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 1006 | -INSERT INTO `sys_error_code` VALUES (3998, 1, 'dashboard', 1002009003, '文件为空', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 1007 | -INSERT INTO `sys_error_code` VALUES (3999, 1, 'dashboard', 1002011000, 'çŸä¿¡æ¨¡æ¿ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-05-02 23:18:32', b'0'); | ||
| 1008 | -INSERT INTO `sys_error_code` VALUES (4000, 1, 'dashboard', 1002011001, 'å·²ç»å˜åœ¨ç¼–ç 为ã€{}】的çŸä¿¡æ¨¡æ¿', '', NULL, '2021-04-20 23:52:57', NULL, '2021-05-02 23:18:32', b'0'); | ||
| 1009 | -INSERT INTO `sys_error_code` VALUES (4001, 2, 'dashboard', 1002011002, 'æ— æ³•åˆ é™¤ï¼Œè¯¥çŸä¿¡æ¸ é“还有çŸä¿¡æ¨¡æ¿', '', NULL, '2021-04-20 23:52:57', '1', '2021-04-22 00:06:52', b'0'); | ||
| 1010 | -INSERT INTO `sys_error_code` VALUES (4002, 1, 'dashboard', 1002011000, 'çŸä¿¡æ¨¡æ¿ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 1011 | -INSERT INTO `sys_error_code` VALUES (4003, 1, 'dashboard', 1002011001, 'å·²ç»å˜åœ¨ç¼–ç 为ã€{}】的çŸä¿¡æ¨¡æ¿', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 1012 | -INSERT INTO `sys_error_code` VALUES (4004, 1, 'dashboard', 1002012000, '手机å·ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 1013 | -INSERT INTO `sys_error_code` VALUES (4005, 1, 'dashboard', 1002012001, '模æ¿å‚æ•°({})缺失', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 1014 | -INSERT INTO `sys_error_code` VALUES (4006, 1, 'dashboard', 1002009000, '错误ç ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 1015 | -INSERT INTO `sys_error_code` VALUES (4007, 1, 'dashboard', 1002009001, 'å·²ç»å˜åœ¨ç¼–ç 为ã€{}}】的错误ç ', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 1016 | -INSERT INTO `sys_error_code` VALUES (4008, 1, 'dashboard', 1002004003, 'ä¸èƒ½ä¿®æ”¹ç±»åž‹ä¸ºç³»ç»Ÿå†…置的错误ç ', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 1017 | -INSERT INTO `sys_error_code` VALUES (4009, 1, 'dashboard', 1001004000, '错误ç ä¸å˜åœ¨', '', NULL, '2021-04-21 00:38:01', NULL, '2021-04-21 00:38:01', b'0'); | ||
| 1018 | -INSERT INTO `sys_error_code` VALUES (4010, 1, 'dashboard', 1001004001, 'å·²ç»å˜åœ¨ç¼–ç 为ã€{}】的错误ç ', '', NULL, '2021-04-21 00:38:01', NULL, '2021-04-21 23:48:44', b'0'); | ||
| 1019 | -INSERT INTO `sys_error_code` VALUES (4011, 1, 'dashboard', 1001004002, 'ä¸èƒ½ä¿®æ”¹ç±»åž‹ä¸ºç³»ç»Ÿå†…置的错误ç ', '', NULL, '2021-04-21 00:38:01', NULL, '2021-04-21 00:38:01', b'0'); | ||
| 1020 | -INSERT INTO `sys_error_code` VALUES (4012, 2, 'dashboard', 1201002000, '啦啦啦啦', 'biubiub', '1', '2021-04-21 23:46:02', '1', '2021-04-21 23:46:02', b'0'); | ||
| 1021 | -INSERT INTO `sys_error_code` VALUES (4013, 1, 'dashboard', 1001002000, 'API 错误日志ä¸å˜åœ¨', '', NULL, '2021-04-21 23:48:44', NULL, '2021-04-21 23:48:44', b'0'); | ||
| 1022 | -INSERT INTO `sys_error_code` VALUES (4014, 1, 'dashboard', 1002013000, '错误ç ä¸å˜åœ¨', '', NULL, '2021-04-22 00:04:06', NULL, '2021-04-22 00:04:06', b'0'); | ||
| 1023 | -INSERT INTO `sys_error_code` VALUES (4015, 1, 'dashboard', 1002013001, 'å·²ç»å˜åœ¨ç¼–ç 为ã€{}】的错误ç ', '', NULL, '2021-04-22 00:04:06', NULL, '2021-04-22 00:04:06', b'0'); | ||
| 1024 | -INSERT INTO `sys_error_code` VALUES (4016, 1, 'yudao-admin-server', 1002000005, '未绑定账å·ï¼Œéœ€è¦è¿›è¡Œç»‘定', '', NULL, '2021-10-02 22:14:57', NULL, '2021-10-02 22:14:57', b'0'); | ||
| 1025 | -INSERT INTO `sys_error_code` VALUES (4017, 1, 'yudao-admin-server', 1002000006, 'Token å·²ç»è¿‡æœŸ', '', NULL, '2021-10-02 22:14:57', NULL, '2021-10-10 22:47:27', b'0'); | ||
| 1026 | -INSERT INTO `sys_error_code` VALUES (4018, 1, 'yudao-admin-server', 1002014000, '社交授æƒå¤±è´¥ï¼ŒåŽŸå› æ˜¯ï¼š{}', '', NULL, '2021-10-05 23:23:10', NULL, '2021-10-05 23:23:10', b'0'); | ||
| 1027 | -INSERT INTO `sys_error_code` VALUES (4019, 1, 'yudao-admin-server', 1002014001, '社交解绑失败,éžå½“å‰ç”¨æˆ·ç»‘定', '', NULL, '2021-10-06 09:31:54', NULL, '2021-10-06 09:31:54', b'0'); | ||
| 1028 | COMMIT; | 1079 | COMMIT; |
| 1029 | 1080 | ||
| 1030 | -- ---------------------------- | 1081 | -- ---------------------------- |
| @@ -1048,7 +1099,7 @@ CREATE TABLE `sys_login_log` ( | @@ -1048,7 +1099,7 @@ CREATE TABLE `sys_login_log` ( | ||
| 1048 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 1099 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 1049 | `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', | 1100 | `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', |
| 1050 | PRIMARY KEY (`id`) USING BTREE | 1101 | PRIMARY KEY (`id`) USING BTREE |
| 1051 | -) ENGINE=InnoDB AUTO_INCREMENT=474 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统访问记录'; | 1102 | +) ENGINE=InnoDB AUTO_INCREMENT=513 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统访问记录'; |
| 1052 | 1103 | ||
| 1053 | -- ---------------------------- | 1104 | -- ---------------------------- |
| 1054 | -- Records of sys_login_log | 1105 | -- Records of sys_login_log |
| @@ -1078,17 +1129,17 @@ CREATE TABLE `sys_menu` ( | @@ -1078,17 +1129,17 @@ CREATE TABLE `sys_menu` ( | ||
| 1078 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 1129 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 1079 | `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', | 1130 | `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', |
| 1080 | PRIMARY KEY (`id`) USING BTREE | 1131 | PRIMARY KEY (`id`) USING BTREE |
| 1081 | -) ENGINE=InnoDB AUTO_INCREMENT=1144 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='èœå•æƒé™è¡¨'; | 1132 | +) ENGINE=InnoDB AUTO_INCREMENT=1194 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='èœå•æƒé™è¡¨'; |
| 1082 | 1133 | ||
| 1083 | -- ---------------------------- | 1134 | -- ---------------------------- |
| 1084 | -- Records of sys_menu | 1135 | -- Records of sys_menu |
| 1085 | -- ---------------------------- | 1136 | -- ---------------------------- |
| 1086 | BEGIN; | 1137 | BEGIN; |
| 1087 | -INSERT INTO `sys_menu` VALUES (1, '系统管ç†', '', 1, 1, 0, '/system', 'system', NULL, 0, 'admin', '2021-01-05 17:03:48', '1', '2021-12-05 22:51:03', b'0', 0); | ||
| 1088 | -INSERT INTO `sys_menu` VALUES (2, '基础设施', '', 1, 2, 0, '/infra', 'monitor', NULL, 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 14:18:35', b'0', 0); | ||
| 1089 | -INSERT INTO `sys_menu` VALUES (3, 'ç ”å‘工具', '', 1, 3, 0, '/tool', 'tool', NULL, 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 12:44:42', b'0', 0); | 1138 | +INSERT INTO `sys_menu` VALUES (1, '系统管ç†', '', 1, 10, 0, '/system', 'system', NULL, 0, 'admin', '2021-01-05 17:03:48', '1', '2021-12-25 16:43:08', b'0', 0); |
| 1139 | +INSERT INTO `sys_menu` VALUES (2, '基础设施', '', 1, 20, 0, '/infra', 'monitor', NULL, 0, 'admin', '2021-01-05 17:03:48', '1', '2021-12-25 16:43:18', b'0', 0); | ||
| 1140 | +INSERT INTO `sys_menu` VALUES (3, 'ç ”å‘工具', '', 1, 30, 0, '/tool', 'tool', NULL, 0, 'admin', '2021-01-05 17:03:48', '1', '2021-12-25 16:43:13', b'0', 0); | ||
| 1090 | INSERT INTO `sys_menu` VALUES (4, 'è‹¥ä¾å®˜ç½‘', '', 1, 4, 0, 'http://ruoyi.vip', 'guide', NULL, 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 21:54:28', b'1', 0); | 1141 | INSERT INTO `sys_menu` VALUES (4, 'è‹¥ä¾å®˜ç½‘', '', 1, 4, 0, 'http://ruoyi.vip', 'guide', NULL, 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 21:54:28', b'1', 0); |
| 1091 | -INSERT INTO `sys_menu` VALUES (5, 'OA 办公', '', 1, 4, 0, '/oa', 'people', NULL, 0, 'admin', '2021-09-20 16:26:19', '1', '2021-09-20 13:55:54', b'0', 0); | 1142 | +INSERT INTO `sys_menu` VALUES (5, 'OA 办公', '', 1, 40, 0, '/oa', 'people', NULL, 0, 'admin', '2021-09-20 16:26:19', '1', '2021-12-25 16:43:22', b'0', 0); |
| 1092 | INSERT INTO `sys_menu` VALUES (100, '用户管ç†', 'system:user:list', 2, 1, 1, 'user', 'user', 'system/user/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0', 0); | 1143 | INSERT INTO `sys_menu` VALUES (100, '用户管ç†', 'system:user:list', 2, 1, 1, 'user', 'user', 'system/user/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0', 0); |
| 1093 | INSERT INTO `sys_menu` VALUES (101, '角色管ç†', '', 2, 2, 1, 'role', 'peoples', 'system/role/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:04:49', b'0', 0); | 1144 | INSERT INTO `sys_menu` VALUES (101, '角色管ç†', '', 2, 2, 1, 'role', 'peoples', 'system/role/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:04:49', b'0', 0); |
| 1094 | INSERT INTO `sys_menu` VALUES (102, 'èœå•管ç†', '', 2, 3, 1, 'menu', 'tree-table', 'system/menu/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:04:28', b'0', 0); | 1145 | INSERT INTO `sys_menu` VALUES (102, 'èœå•管ç†', '', 2, 3, 1, 'menu', 'tree-table', 'system/menu/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 22:04:28', b'0', 0); |
| @@ -1217,6 +1268,7 @@ INSERT INTO `sys_menu` VALUES (1113, 'é”™è¯¯ç æ›´æ–°', 'system:error-code:updat | @@ -1217,6 +1268,7 @@ INSERT INTO `sys_menu` VALUES (1113, 'é”™è¯¯ç æ›´æ–°', 'system:error-code:updat | ||
| 1217 | INSERT INTO `sys_menu` VALUES (1114, '错误ç åˆ é™¤', 'system:error-code:delete', 3, 4, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:51', b'0', 0); | 1268 | INSERT INTO `sys_menu` VALUES (1114, '错误ç åˆ é™¤', 'system:error-code:delete', 3, 4, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:51', b'0', 0); |
| 1218 | INSERT INTO `sys_menu` VALUES (1115, '错误ç 导出', 'system:error-code:export', 3, 5, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:55', b'0', 0); | 1269 | INSERT INTO `sys_menu` VALUES (1115, '错误ç 导出', 'system:error-code:export', 3, 5, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:55', b'0', 0); |
| 1219 | INSERT INTO `sys_menu` VALUES (1116, '日志ä¸å¿ƒ', '', 2, 8, 2, 'log-center', 'log', 'infra/skywalking/log', 0, '1', '2021-04-26 22:35:45', '1', '2021-04-26 22:37:25', b'0', 0); | 1270 | INSERT INTO `sys_menu` VALUES (1116, '日志ä¸å¿ƒ', '', 2, 8, 2, 'log-center', 'log', 'infra/skywalking/log', 0, '1', '2021-04-26 22:35:45', '1', '2021-04-26 22:37:25', b'0', 0); |
| 1271 | +INSERT INTO `sys_menu` VALUES (1117, '支付管ç†', '', 1, 11, 0, '/pay', 'money', NULL, 0, '1', '2021-12-25 16:43:41', '1', '2021-12-25 16:46:40', b'0', 0); | ||
| 1220 | INSERT INTO `sys_menu` VALUES (1118, 'è¯·å‡æŸ¥è¯¢', '', 2, 0, 5, 'oa/leave', 'user', 'oa/leave/index', 0, '', '2021-09-20 08:51:03', '1', '2021-10-12 22:19:02', b'0', 0); | 1272 | INSERT INTO `sys_menu` VALUES (1118, 'è¯·å‡æŸ¥è¯¢', '', 2, 0, 5, 'oa/leave', 'user', 'oa/leave/index', 0, '', '2021-09-20 08:51:03', '1', '2021-10-12 22:19:02', b'0', 0); |
| 1221 | INSERT INTO `sys_menu` VALUES (1119, '请å‡ç”³è¯·æŸ¥è¯¢', 'oa:leave:query', 3, 1, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '', '2021-09-20 08:51:03', b'0', 0); | 1273 | INSERT INTO `sys_menu` VALUES (1119, '请å‡ç”³è¯·æŸ¥è¯¢', 'oa:leave:query', 3, 1, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '', '2021-09-20 08:51:03', b'0', 0); |
| 1222 | INSERT INTO `sys_menu` VALUES (1120, '请å‡ç”³è¯·åˆ›å»º', 'oa:leave:create', 3, 2, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '', '2021-09-20 08:51:03', b'0', 0); | 1274 | INSERT INTO `sys_menu` VALUES (1120, '请å‡ç”³è¯·åˆ›å»º', 'oa:leave:create', 3, 2, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '', '2021-09-20 08:51:03', b'0', 0); |
| @@ -1225,7 +1277,7 @@ INSERT INTO `sys_menu` VALUES (1122, '请å‡ç”³è¯·åˆ 除', 'oa:leave:delete', 3, | @@ -1225,7 +1277,7 @@ INSERT INTO `sys_menu` VALUES (1122, '请å‡ç”³è¯·åˆ 除', 'oa:leave:delete', 3, | ||
| 1225 | INSERT INTO `sys_menu` VALUES (1123, '请å‡ç”³è¯·å¯¼å‡º', 'oa:leave:export', 3, 5, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '', '2021-09-20 08:51:03', b'0', 0); | 1277 | INSERT INTO `sys_menu` VALUES (1123, '请å‡ç”³è¯·å¯¼å‡º', 'oa:leave:export', 3, 5, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '', '2021-09-20 08:51:03', b'0', 0); |
| 1226 | INSERT INTO `sys_menu` VALUES (1124, '待办任务', '', 2, 2, 5, 'todo', 'edit', 'oa/todo/index', 0, '1', '2021-09-20 22:10:09', '1', '2021-09-21 23:17:12', b'0', 0); | 1278 | INSERT INTO `sys_menu` VALUES (1124, '待办任务', '', 2, 2, 5, 'todo', 'edit', 'oa/todo/index', 0, '1', '2021-09-20 22:10:09', '1', '2021-09-21 23:17:12', b'0', 0); |
| 1227 | INSERT INTO `sys_menu` VALUES (1125, 'æµç¨‹ç”³è¯·', '', 2, 3, 5, 'flow', 'form', 'oa/flow/index', 0, '1', '2021-10-23 22:10:09', '1', '2021-10-23 23:17:12', b'0', 0); | 1279 | INSERT INTO `sys_menu` VALUES (1125, 'æµç¨‹ç”³è¯·', '', 2, 3, 5, 'flow', 'form', 'oa/flow/index', 0, '1', '2021-10-23 22:10:09', '1', '2021-10-23 23:17:12', b'0', 0); |
| 1228 | -INSERT INTO `sys_menu` VALUES (1126, '支付应用信æ¯ç®¡ç†', '', 2, 0, 1117, 'app', '', 'pay/app/index', 0, '', '2021-11-10 01:13:30', '', '2021-11-10 01:13:30', b'0', 0); | 1280 | +INSERT INTO `sys_menu` VALUES (1126, '应用信æ¯', '', 2, 1, 1117, 'app', 'table', 'pay/app/index', 0, '', '2021-11-10 01:13:30', '1', '2021-12-25 16:56:41', b'0', 0); |
| 1229 | INSERT INTO `sys_menu` VALUES (1127, 'æ”¯ä»˜åº”ç”¨ä¿¡æ¯æŸ¥è¯¢', 'pay:app:query', 3, 1, 1126, '', '', '', 0, '', '2021-11-10 01:13:31', '', '2021-11-10 01:13:31', b'0', 0); | 1281 | INSERT INTO `sys_menu` VALUES (1127, 'æ”¯ä»˜åº”ç”¨ä¿¡æ¯æŸ¥è¯¢', 'pay:app:query', 3, 1, 1126, '', '', '', 0, '', '2021-11-10 01:13:31', '', '2021-11-10 01:13:31', b'0', 0); |
| 1230 | INSERT INTO `sys_menu` VALUES (1128, '支付应用信æ¯åˆ›å»º', 'pay:app:create', 3, 2, 1126, '', '', '', 0, '', '2021-11-10 01:13:31', '', '2021-11-10 01:13:31', b'0', 0); | 1282 | INSERT INTO `sys_menu` VALUES (1128, '支付应用信æ¯åˆ›å»º', 'pay:app:create', 3, 2, 1126, '', '', '', 0, '', '2021-11-10 01:13:31', '', '2021-11-10 01:13:31', b'0', 0); |
| 1231 | INSERT INTO `sys_menu` VALUES (1129, 'æ”¯ä»˜åº”ç”¨ä¿¡æ¯æ›´æ–°', 'pay:app:update', 3, 3, 1126, '', '', '', 0, '', '2021-11-10 01:13:31', '', '2021-11-10 01:13:31', b'0', 0); | 1283 | INSERT INTO `sys_menu` VALUES (1129, 'æ”¯ä»˜åº”ç”¨ä¿¡æ¯æ›´æ–°', 'pay:app:update', 3, 3, 1126, '', '', '', 0, '', '2021-11-10 01:13:31', '', '2021-11-10 01:13:31', b'0', 0); |
| @@ -1243,6 +1295,45 @@ INSERT INTO `sys_menu` VALUES (1140, '租户创建', 'system:tenant:create', 3, | @@ -1243,6 +1295,45 @@ INSERT INTO `sys_menu` VALUES (1140, '租户创建', 'system:tenant:create', 3, | ||
| 1243 | INSERT INTO `sys_menu` VALUES (1141, '租户更新', 'system:tenant:update', 3, 3, 1138, '', '', '', 0, '', '2021-12-14 12:31:44', '', '2021-12-14 12:31:44', b'0', 0); | 1295 | INSERT INTO `sys_menu` VALUES (1141, '租户更新', 'system:tenant:update', 3, 3, 1138, '', '', '', 0, '', '2021-12-14 12:31:44', '', '2021-12-14 12:31:44', b'0', 0); |
| 1244 | INSERT INTO `sys_menu` VALUES (1142, 'ç§Ÿæˆ·åˆ é™¤', 'system:tenant:delete', 3, 4, 1138, '', '', '', 0, '', '2021-12-14 12:31:44', '', '2021-12-14 12:31:44', b'0', 0); | 1296 | INSERT INTO `sys_menu` VALUES (1142, 'ç§Ÿæˆ·åˆ é™¤', 'system:tenant:delete', 3, 4, 1138, '', '', '', 0, '', '2021-12-14 12:31:44', '', '2021-12-14 12:31:44', b'0', 0); |
| 1245 | INSERT INTO `sys_menu` VALUES (1143, '租户导出', 'system:tenant:export', 3, 5, 1138, '', '', '', 0, '', '2021-12-14 12:31:44', '', '2021-12-14 12:31:44', b'0', 0); | 1297 | INSERT INTO `sys_menu` VALUES (1143, '租户导出', 'system:tenant:export', 3, 5, 1138, '', '', '', 0, '', '2021-12-14 12:31:44', '', '2021-12-14 12:31:44', b'0', 0); |
| 1298 | +INSERT INTO `sys_menu` VALUES (1144, '支付应用信æ¯ç®¡ç†', '', 2, 0, 1117, 'app', '', 'pay/app/index', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:48:05', b'1', 0); | ||
| 1299 | +INSERT INTO `sys_menu` VALUES (1145, 'æ”¯ä»˜åº”ç”¨ä¿¡æ¯æŸ¥è¯¢', 'pay:app:query', 3, 1, 1144, '', '', '', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:47:53', b'1', 0); | ||
| 1300 | +INSERT INTO `sys_menu` VALUES (1146, '支付应用信æ¯åˆ›å»º', 'pay:app:create', 3, 2, 1144, '', '', '', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:47:51', b'1', 0); | ||
| 1301 | +INSERT INTO `sys_menu` VALUES (1147, 'æ”¯ä»˜åº”ç”¨ä¿¡æ¯æ›´æ–°', 'pay:app:update', 3, 3, 1144, '', '', '', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:47:48', b'1', 0); | ||
| 1302 | +INSERT INTO `sys_menu` VALUES (1148, '支付应用信æ¯åˆ 除', 'pay:app:delete', 3, 4, 1144, '', '', '', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:47:46', b'1', 0); | ||
| 1303 | +INSERT INTO `sys_menu` VALUES (1149, '支付应用信æ¯å¯¼å‡º', 'pay:app:export', 3, 5, 1144, '', '', '', 0, '', '2021-12-25 08:26:31', '', '2021-12-25 08:47:43', b'1', 0); | ||
| 1304 | +INSERT INTO `sys_menu` VALUES (1150, '秘钥解æž', 'pay:channel:parsing', 3, 6, 1129, '', '', '', 0, '1', '2021-11-08 15:15:47', '1', '2021-11-08 15:15:47', b'0', 0); | ||
| 1305 | +INSERT INTO `sys_menu` VALUES (1156, 'æ”¯ä»˜è®¢å•æŸ¥è¯¢', 'pay:order:query', 3, 1, 1155, '', '', '', 0, '', '2021-12-25 08:29:01', '', '2021-12-25 08:29:01', b'0', 0); | ||
| 1306 | +INSERT INTO `sys_menu` VALUES (1157, '支付订å•创建', 'pay:order:create', 3, 2, 1155, '', '', '', 0, '', '2021-12-25 08:29:01', '', '2021-12-25 08:29:01', b'0', 0); | ||
| 1307 | +INSERT INTO `sys_menu` VALUES (1158, 'æ”¯ä»˜è®¢å•æ›´æ–°', 'pay:order:update', 3, 3, 1155, '', '', '', 0, '', '2021-12-25 08:29:01', '', '2021-12-25 08:29:01', b'0', 0); | ||
| 1308 | +INSERT INTO `sys_menu` VALUES (1159, '支付订å•åˆ é™¤', 'pay:order:delete', 3, 4, 1155, '', '', '', 0, '', '2021-12-25 08:29:01', '', '2021-12-25 08:29:01', b'0', 0); | ||
| 1309 | +INSERT INTO `sys_menu` VALUES (1160, '支付订å•导出', 'pay:order:export', 3, 5, 1155, '', '', '', 0, '', '2021-12-25 08:29:01', '', '2021-12-25 08:29:01', b'0', 0); | ||
| 1310 | +INSERT INTO `sys_menu` VALUES (1161, '退款订å•', '', 2, 3, 1117, 'refund', 'order', 'pay/refund/index', 0, '', '2021-12-25 08:29:07', '1', '2021-12-25 19:30:22', b'0', 0); | ||
| 1311 | +INSERT INTO `sys_menu` VALUES (1162, 'é€€æ¬¾è®¢å•æŸ¥è¯¢', 'pay:refund:query', 3, 1, 1161, '', '', '', 0, '', '2021-12-25 08:29:07', '', '2021-12-25 08:29:07', b'0', 0); | ||
| 1312 | +INSERT INTO `sys_menu` VALUES (1163, '退款订å•创建', 'pay:refund:create', 3, 2, 1161, '', '', '', 0, '', '2021-12-25 08:29:07', '', '2021-12-25 08:29:07', b'0', 0); | ||
| 1313 | +INSERT INTO `sys_menu` VALUES (1164, 'é€€æ¬¾è®¢å•æ›´æ–°', 'pay:refund:update', 3, 3, 1161, '', '', '', 0, '', '2021-12-25 08:29:07', '', '2021-12-25 08:29:07', b'0', 0); | ||
| 1314 | +INSERT INTO `sys_menu` VALUES (1165, '退款订å•åˆ é™¤', 'pay:refund:delete', 3, 4, 1161, '', '', '', 0, '', '2021-12-25 08:29:07', '', '2021-12-25 08:29:07', b'0', 0); | ||
| 1315 | +INSERT INTO `sys_menu` VALUES (1166, '退款订å•导出', 'pay:refund:export', 3, 5, 1161, '', '', '', 0, '', '2021-12-25 08:29:07', '', '2021-12-25 08:29:07', b'0', 0); | ||
| 1316 | +INSERT INTO `sys_menu` VALUES (1173, '支付订å•', '', 2, 2, 1117, 'order', 'pay', 'pay/order/index', 0, '', '2021-12-25 08:49:43', '1', '2021-12-25 19:29:54', b'0', 0); | ||
| 1317 | +INSERT INTO `sys_menu` VALUES (1174, 'æ”¯ä»˜è®¢å•æŸ¥è¯¢', 'pay:order:query', 3, 1, 1173, '', '', '', 0, '', '2021-12-25 08:49:43', '', '2021-12-25 08:49:43', b'0', 0); | ||
| 1318 | +INSERT INTO `sys_menu` VALUES (1175, '支付订å•创建', 'pay:order:create', 3, 2, 1173, '', '', '', 0, '', '2021-12-25 08:49:43', '', '2021-12-25 08:49:43', b'0', 0); | ||
| 1319 | +INSERT INTO `sys_menu` VALUES (1176, 'æ”¯ä»˜è®¢å•æ›´æ–°', 'pay:order:update', 3, 3, 1173, '', '', '', 0, '', '2021-12-25 08:49:43', '', '2021-12-25 08:49:43', b'0', 0); | ||
| 1320 | +INSERT INTO `sys_menu` VALUES (1177, '支付订å•åˆ é™¤', 'pay:order:delete', 3, 4, 1173, '', '', '', 0, '', '2021-12-25 08:49:43', '', '2021-12-25 08:49:43', b'0', 0); | ||
| 1321 | +INSERT INTO `sys_menu` VALUES (1178, '支付订å•导出', 'pay:order:export', 3, 5, 1173, '', '', '', 0, '', '2021-12-25 08:49:43', '', '2021-12-25 08:49:43', b'0', 0); | ||
| 1322 | +INSERT INTO `sys_menu` VALUES (1179, '商户信æ¯', '', 2, 0, 1117, 'merchant', 'merchant', 'pay/merchant/index', 0, '', '2021-12-25 09:01:44', '1', '2021-12-25 17:02:13', b'0', 0); | ||
| 1323 | +INSERT INTO `sys_menu` VALUES (1180, 'æ”¯ä»˜å•†æˆ·ä¿¡æ¯æŸ¥è¯¢', 'pay:merchant:query', 3, 1, 1179, '', '', '', 0, '', '2021-12-25 09:01:44', '', '2021-12-25 09:01:44', b'0', 0); | ||
| 1324 | +INSERT INTO `sys_menu` VALUES (1181, '支付商户信æ¯åˆ›å»º', 'pay:merchant:create', 3, 2, 1179, '', '', '', 0, '', '2021-12-25 09:01:44', '', '2021-12-25 09:01:44', b'0', 0); | ||
| 1325 | +INSERT INTO `sys_menu` VALUES (1182, 'æ”¯ä»˜å•†æˆ·ä¿¡æ¯æ›´æ–°', 'pay:merchant:update', 3, 3, 1179, '', '', '', 0, '', '2021-12-25 09:01:44', '', '2021-12-25 09:01:44', b'0', 0); | ||
| 1326 | +INSERT INTO `sys_menu` VALUES (1183, '支付商户信æ¯åˆ 除', 'pay:merchant:delete', 3, 4, 1179, '', '', '', 0, '', '2021-12-25 09:01:44', '', '2021-12-25 09:01:44', b'0', 0); | ||
| 1327 | +INSERT INTO `sys_menu` VALUES (1184, '支付商户信æ¯å¯¼å‡º', 'pay:merchant:export', 3, 5, 1179, '', '', '', 0, '', '2021-12-25 09:01:44', '', '2021-12-25 09:01:44', b'0', 0); | ||
| 1328 | +INSERT INTO `sys_menu` VALUES (1185, '工作æµ', '', 1, 50, 0, '/bpm', 'tool', NULL, 0, '1', '2021-12-30 20:26:36', '1', '2021-12-30 20:26:36', b'0', 0); | ||
| 1329 | +INSERT INTO `sys_menu` VALUES (1186, 'æµç¨‹ç®¡ç†', '', 1, 10, 1185, 'manager', 'nested', NULL, 0, '1', '2021-12-30 20:28:30', '1', '2021-12-30 20:28:57', b'0', 0); | ||
| 1330 | +INSERT INTO `sys_menu` VALUES (1187, 'æµç¨‹è¡¨å•', '', 2, 0, 1186, 'form', 'form', 'bpm/form/index', 0, '', '2021-12-30 12:38:22', '1', '2021-12-31 23:20:38', b'0', 0); | ||
| 1331 | +INSERT INTO `sys_menu` VALUES (1188, 'æµç¨‹è¡¨å•的查询', 'bpm:form:query', 3, 1, 1187, '', '', '', 0, '', '2021-12-30 12:38:22', '1', '2021-12-30 20:38:56', b'0', 0); | ||
| 1332 | +INSERT INTO `sys_menu` VALUES (1189, 'æµç¨‹è¡¨å•的创建', 'bpm:form:create', 3, 2, 1187, '', '', '', 0, '', '2021-12-30 12:38:22', '1', '2021-12-30 20:39:00', b'0', 0); | ||
| 1333 | +INSERT INTO `sys_menu` VALUES (1190, 'æµç¨‹è¡¨å•的更新', 'bpm:form:update', 3, 3, 1187, '', '', '', 0, '', '2021-12-30 12:38:22', '1', '2021-12-30 20:39:04', b'0', 0); | ||
| 1334 | +INSERT INTO `sys_menu` VALUES (1191, 'æµç¨‹è¡¨å•çš„åˆ é™¤', 'bpm:form:delete', 3, 4, 1187, '', '', '', 0, '', '2021-12-30 12:38:22', '1', '2021-12-30 20:39:08', b'0', 0); | ||
| 1335 | +INSERT INTO `sys_menu` VALUES (1192, 'æµç¨‹è¡¨å•的导出', 'bpm:form:export', 3, 5, 1187, '', '', '', 0, '', '2021-12-30 12:38:22', '1', '2021-12-30 20:39:13', b'0', 0); | ||
| 1336 | +INSERT INTO `sys_menu` VALUES (1193, 'æµç¨‹å®šä¹‰', '', 2, 1, 1186, 'model', 'guide', 'bpm/model/index', 0, '1', '2021-12-31 23:24:58', '1', '2021-12-31 23:24:58', b'0', 0); | ||
| 1246 | COMMIT; | 1337 | COMMIT; |
| 1247 | 1338 | ||
| 1248 | -- ---------------------------- | 1339 | -- ---------------------------- |
| @@ -1304,7 +1395,7 @@ CREATE TABLE `sys_operate_log` ( | @@ -1304,7 +1395,7 @@ CREATE TABLE `sys_operate_log` ( | ||
| 1304 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 1395 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 1305 | `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', | 1396 | `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编å·', |
| 1306 | PRIMARY KEY (`id`) USING BTREE | 1397 | PRIMARY KEY (`id`) USING BTREE |
| 1307 | -) ENGINE=InnoDB AUTO_INCREMENT=85 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='æ“作日志记录'; | 1398 | +) ENGINE=InnoDB AUTO_INCREMENT=245 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='æ“作日志记录'; |
| 1308 | 1399 | ||
| 1309 | -- ---------------------------- | 1400 | -- ---------------------------- |
| 1310 | -- Records of sys_operate_log | 1401 | -- Records of sys_operate_log |
| @@ -1371,7 +1462,7 @@ CREATE TABLE `sys_role` ( | @@ -1371,7 +1462,7 @@ CREATE TABLE `sys_role` ( | ||
| 1371 | BEGIN; | 1462 | BEGIN; |
| 1372 | INSERT INTO `sys_role` VALUES (1, '超级管ç†å‘˜', 'admin', 1, 1, '', 0, 1, '超级管ç†å‘˜', 'admin', '2021-01-05 17:03:48', '', '2021-12-15 04:52:44', b'0'); | 1463 | INSERT INTO `sys_role` VALUES (1, '超级管ç†å‘˜', 'admin', 1, 1, '', 0, 1, '超级管ç†å‘˜', 'admin', '2021-01-05 17:03:48', '', '2021-12-15 04:52:44', b'0'); |
| 1373 | INSERT INTO `sys_role` VALUES (2, '普通角色', 'common', 2, 2, '', 0, 1, '普通角色', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 11:46:58', b'0'); | 1464 | INSERT INTO `sys_role` VALUES (2, '普通角色', 'common', 2, 2, '', 0, 1, '普通角色', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 11:46:58', b'0'); |
| 1374 | -INSERT INTO `sys_role` VALUES (101, '测试账å·', 'test', 0, 2, '[104]', 0, 2, '132', '', '2021-01-06 13:49:35', '1', '2021-03-14 22:17:20', b'0'); | 1465 | +INSERT INTO `sys_role` VALUES (101, '测试账å·', 'test', 0, 2, '[102,108,109]', 0, 2, '132', '', '2021-01-06 13:49:35', '1', '2021-12-16 09:27:01', b'0'); |
| 1375 | COMMIT; | 1466 | COMMIT; |
| 1376 | 1467 | ||
| 1377 | -- ---------------------------- | 1468 | -- ---------------------------- |
| @@ -1388,7 +1479,7 @@ CREATE TABLE `sys_role_menu` ( | @@ -1388,7 +1479,7 @@ CREATE TABLE `sys_role_menu` ( | ||
| 1388 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 1479 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 1389 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 1480 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 1390 | PRIMARY KEY (`id`) USING BTREE | 1481 | PRIMARY KEY (`id`) USING BTREE |
| 1391 | -) ENGINE=InnoDB AUTO_INCREMENT=239 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='角色和èœå•å…³è”表'; | 1482 | +) ENGINE=InnoDB AUTO_INCREMENT=253 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='角色和èœå•å…³è”表'; |
| 1392 | 1483 | ||
| 1393 | -- ---------------------------- | 1484 | -- ---------------------------- |
| 1394 | -- Records of sys_role_menu | 1485 | -- Records of sys_role_menu |
| @@ -1548,6 +1639,20 @@ INSERT INTO `sys_role_menu` VALUES (235, 101, 101, '', '2021-01-21 03:23:27', '' | @@ -1548,6 +1639,20 @@ INSERT INTO `sys_role_menu` VALUES (235, 101, 101, '', '2021-01-21 03:23:27', '' | ||
| 1548 | INSERT INTO `sys_role_menu` VALUES (236, 101, 1063, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); | 1639 | INSERT INTO `sys_role_menu` VALUES (236, 101, 1063, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); |
| 1549 | INSERT INTO `sys_role_menu` VALUES (237, 101, 1064, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); | 1640 | INSERT INTO `sys_role_menu` VALUES (237, 101, 1064, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); |
| 1550 | INSERT INTO `sys_role_menu` VALUES (238, 101, 1065, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); | 1641 | INSERT INTO `sys_role_menu` VALUES (238, 101, 1065, '', '2021-01-21 03:23:27', '', '2021-01-21 03:23:27', b'0'); |
| 1642 | +INSERT INTO `sys_role_menu` VALUES (239, 101, 100, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); | ||
| 1643 | +INSERT INTO `sys_role_menu` VALUES (240, 101, 1001, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); | ||
| 1644 | +INSERT INTO `sys_role_menu` VALUES (241, 101, 1002, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); | ||
| 1645 | +INSERT INTO `sys_role_menu` VALUES (242, 101, 1003, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); | ||
| 1646 | +INSERT INTO `sys_role_menu` VALUES (243, 101, 1004, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); | ||
| 1647 | +INSERT INTO `sys_role_menu` VALUES (244, 101, 1005, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); | ||
| 1648 | +INSERT INTO `sys_role_menu` VALUES (245, 101, 1006, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); | ||
| 1649 | +INSERT INTO `sys_role_menu` VALUES (246, 101, 1007, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); | ||
| 1650 | +INSERT INTO `sys_role_menu` VALUES (247, 101, 1138, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); | ||
| 1651 | +INSERT INTO `sys_role_menu` VALUES (248, 101, 1139, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); | ||
| 1652 | +INSERT INTO `sys_role_menu` VALUES (249, 101, 1140, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); | ||
| 1653 | +INSERT INTO `sys_role_menu` VALUES (250, 101, 1141, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); | ||
| 1654 | +INSERT INTO `sys_role_menu` VALUES (251, 101, 1142, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); | ||
| 1655 | +INSERT INTO `sys_role_menu` VALUES (252, 101, 1143, '1', '2021-12-15 22:47:51', '1', '2021-12-15 22:47:51', b'0'); | ||
| 1551 | COMMIT; | 1656 | COMMIT; |
| 1552 | 1657 | ||
| 1553 | -- ---------------------------- | 1658 | -- ---------------------------- |
| @@ -1798,13 +1903,13 @@ CREATE TABLE `sys_user` ( | @@ -1798,13 +1903,13 @@ CREATE TABLE `sys_user` ( | ||
| 1798 | -- Records of sys_user | 1903 | -- Records of sys_user |
| 1799 | -- ---------------------------- | 1904 | -- ---------------------------- |
| 1800 | BEGIN; | 1905 | BEGIN; |
| 1801 | -INSERT INTO `sys_user` VALUES (1, 'admin', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', 'èŠ‹é“æºç ', '管ç†å‘˜', 103, '[1]', 'aoteman@126.com', '15612345678', 1, 'http://127.0.0.1:48080/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', 0, '127.0.0.1', '2021-12-15 12:33:21', 'admin', '2021-01-05 17:03:47', NULL, '2021-12-15 12:33:21', b'0', 1); | 1906 | +INSERT INTO `sys_user` VALUES (1, 'admin', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', 'èŠ‹é“æºç ', '管ç†å‘˜', 103, '[1]', 'aoteman@126.com', '15612345678', 1, 'http://127.0.0.1:48080/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', 0, '127.0.0.1', '2022-01-02 17:02:50', 'admin', '2021-01-05 17:03:47', NULL, '2022-01-02 17:02:50', b'0', 1); |
| 1802 | INSERT INTO `sys_user` VALUES (2, 'ry', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', 'è‹¥ä¾', '测试员', 103, '[2]', 'ry@qq.com', '15666666666', 1, '', 0, '127.0.0.1', '2021-01-05 17:03:47', 'admin', '2021-01-05 17:03:47', '', '2021-12-13 01:26:34', b'1', 1); | 1907 | INSERT INTO `sys_user` VALUES (2, 'ry', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', 'è‹¥ä¾', '测试员', 103, '[2]', 'ry@qq.com', '15666666666', 1, '', 0, '127.0.0.1', '2021-01-05 17:03:47', 'admin', '2021-01-05 17:03:47', '', '2021-12-13 01:26:34', b'1', 1); |
| 1803 | -INSERT INTO `sys_user` VALUES (100, 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋é“', 'ä¸è¦å“我', 103, '[1]', 'yudao@iocoder.cn', '15601691300', 1, '', 1, '', NULL, '', '2021-01-07 09:07:17', '1', '2021-12-13 01:26:55', b'0', 1); | ||
| 1804 | -INSERT INTO `sys_user` VALUES (103, 'yuanma', '', 'æºç ', NULL, 100, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '', NULL, '', '2021-01-13 23:50:35', '', '2021-12-05 02:22:01', b'0', 1); | ||
| 1805 | -INSERT INTO `sys_user` VALUES (104, 'test', '$2a$10$.TOFpaIiI3PzEwkGrNq0Eu6Cc3rOqJMxTb1DqeSEM8StxaGPBRKoi', '测试å·', NULL, 100, '[]', '', '15601691200', 1, '', 0, '127.0.0.1', '2021-12-13 07:41:55', '', '2021-01-21 02:13:53', NULL, '2021-12-13 07:41:55', b'0', 1); | ||
| 1806 | -INSERT INTO `sys_user` VALUES (105, 'hradmin', '$2a$10$JEhJOL25X1eMnFfR3PILo.MoAljf29YukpL2w6H9GvVGjmqOCuh.O', 'hr-mgr', 'hr 管ç†å‘˜', 100, '[3]', '', '', 1, '', 0, '127.0.0.1', '2021-10-30 21:19:36', '1', '2021-09-25 16:50:41', NULL, '2021-12-05 02:22:03', b'0', 1); | ||
| 1807 | -INSERT INTO `sys_user` VALUES (106, 'zhijiantianya', '$2a$10$Y0hSfV2udA8quqMeWukhTuHEoKpQ5tDhclG8WUWSOH7o/MGw185Ti', 'èŠ‹é“æºç ', '', NULL, NULL, '', '', 3, 'https://portrait.gitee.com/uploads/avatars/user/0/176_zhijiantianya_1578913741.png', 0, '', NULL, NULL, '2021-09-28 09:40:59', NULL, '2021-12-05 02:22:04', b'0', 1); | 1908 | +INSERT INTO `sys_user` VALUES (100, 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋é“', 'ä¸è¦å“我', 104, '[1]', 'yudao@iocoder.cn', '15601691300', 1, '', 1, '', NULL, '', '2021-01-07 09:07:17', '104', '2021-12-16 09:26:10', b'0', 1); |
| 1909 | +INSERT INTO `sys_user` VALUES (103, 'yuanma', '', 'æºç ', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '', NULL, '', '2021-01-13 23:50:35', '104', '2021-12-16 09:26:05', b'0', 1); | ||
| 1910 | +INSERT INTO `sys_user` VALUES (104, 'test', '$2a$10$CkyM2xvzUhSWsh.JqGcSju.KjlPsaX1A76wO8O/mYtkpQvcp2jWTW', '测试å·', NULL, 107, '[]', '', '15601691200', 1, '', 0, '127.0.0.1', '2021-12-16 09:27:08', '', '2021-01-21 02:13:53', NULL, '2021-12-16 09:27:08', b'0', 1); | ||
| 1911 | +INSERT INTO `sys_user` VALUES (105, 'hradmin', '$2a$10$JEhJOL25X1eMnFfR3PILo.MoAljf29YukpL2w6H9GvVGjmqOCuh.O', 'hr-mgr', 'hr 管ç†å‘˜', 109, '[3]', '', '18818260000', 1, '', 0, '127.0.0.1', '2021-10-30 21:19:36', '1', '2021-09-25 16:50:41', '1', '2021-12-16 09:26:41', b'0', 1); | ||
| 1912 | +INSERT INTO `sys_user` VALUES (106, 'zhijiantianya', '$2a$10$Y0hSfV2udA8quqMeWukhTuHEoKpQ5tDhclG8WUWSOH7o/MGw185Ti', 'èŠ‹é“æºç ', '', NULL, NULL, '', '', 3, 'https://portrait.gitee.com/uploads/avatars/user/0/176_zhijiantianya_1578913741.png', 0, '', NULL, NULL, '2021-09-28 09:40:59', NULL, '2021-12-15 14:44:47', b'1', 1); | ||
| 1808 | COMMIT; | 1913 | COMMIT; |
| 1809 | 1914 | ||
| 1810 | -- ---------------------------- | 1915 | -- ---------------------------- |
| @@ -1835,7 +1940,7 @@ INSERT INTO `sys_user_role` VALUES (4, 100, 101, '', NULL, '', NULL, b'0', 0); | @@ -1835,7 +1940,7 @@ INSERT INTO `sys_user_role` VALUES (4, 100, 101, '', NULL, '', NULL, b'0', 0); | ||
| 1835 | INSERT INTO `sys_user_role` VALUES (5, 100, 1, '', NULL, '', NULL, b'0', 0); | 1940 | INSERT INTO `sys_user_role` VALUES (5, 100, 1, '', NULL, '', NULL, b'0', 0); |
| 1836 | INSERT INTO `sys_user_role` VALUES (6, 100, 2, '', NULL, '', NULL, b'0', 0); | 1941 | INSERT INTO `sys_user_role` VALUES (6, 100, 2, '', NULL, '', NULL, b'0', 0); |
| 1837 | INSERT INTO `sys_user_role` VALUES (7, 104, 101, '', NULL, '', NULL, b'0', 0); | 1942 | INSERT INTO `sys_user_role` VALUES (7, 104, 101, '', NULL, '', NULL, b'0', 0); |
| 1838 | -INSERT INTO `sys_user_role` VALUES (8, 106, 1, NULL, '2021-09-28 09:40:59', NULL, '2021-09-28 09:40:59', b'0', 0); | 1943 | +INSERT INTO `sys_user_role` VALUES (8, 106, 1, NULL, '2021-09-28 09:40:59', NULL, '2021-09-28 09:40:59', b'1', 0); |
| 1839 | INSERT INTO `sys_user_role` VALUES (9, 105, 1, '1', '2021-10-30 13:40:48', '1', '2021-10-30 13:40:48', b'0', 0); | 1944 | INSERT INTO `sys_user_role` VALUES (9, 105, 1, '1', '2021-10-30 13:40:48', '1', '2021-10-30 13:40:48', b'0', 0); |
| 1840 | COMMIT; | 1945 | COMMIT; |
| 1841 | 1946 | ||
| @@ -1864,6 +1969,39 @@ CREATE TABLE `sys_user_session` ( | @@ -1864,6 +1969,39 @@ CREATE TABLE `sys_user_session` ( | ||
| 1864 | -- Records of sys_user_session | 1969 | -- Records of sys_user_session |
| 1865 | -- ---------------------------- | 1970 | -- ---------------------------- |
| 1866 | BEGIN; | 1971 | BEGIN; |
| 1972 | +INSERT INTO `sys_user_session` VALUES ('0180929bb4b244b891253885e86ad9d1', 1, 2, '2021-12-16 09:37:48', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 09:07:48', NULL, '2021-12-16 09:07:48', b'0', 1); | ||
| 1973 | +INSERT INTO `sys_user_session` VALUES ('01b7469337864db7a9b65747f38fa928', 1, 2, '2021-12-31 14:29:42', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-31 13:49:05', NULL, '2021-12-31 13:59:42', b'0', 1); | ||
| 1974 | +INSERT INTO `sys_user_session` VALUES ('09c26e452a6c44129a2d495478b40d27', 1, 2, '2022-01-02 13:25:15', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 12:06:51', NULL, '2022-01-02 12:55:15', b'0', 1); | ||
| 1975 | +INSERT INTO `sys_user_session` VALUES ('0b8545465544481da4d162a3a74a552e', 1, 2, '2021-12-15 23:48:37', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-15 22:44:07', NULL, '2021-12-15 23:18:37', b'0', 1); | ||
| 1976 | +INSERT INTO `sys_user_session` VALUES ('1995595036aa4652bb887c43cfd35ba8', 1, 2, '2022-01-01 00:18:24', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-31 22:57:57', NULL, '2021-12-31 23:48:24', b'0', 1); | ||
| 1977 | +INSERT INTO `sys_user_session` VALUES ('1b6154299e1a470ebf80d2eaef72b0e2', 1, 2, '2022-01-02 11:59:52', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 09:30:29', NULL, '2022-01-02 11:29:52', b'0', 1); | ||
| 1978 | +INSERT INTO `sys_user_session` VALUES ('1b848d99cde6448097dcedc83fda4c0a', 1, 2, '2021-12-31 10:45:09', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-31 08:35:36', NULL, '2021-12-31 10:15:09', b'0', 1); | ||
| 1979 | +INSERT INTO `sys_user_session` VALUES ('1bc6ad0827fe48099bcbdb9a206818ac', 104, 2, '2021-12-15 23:48:59', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-15 23:18:59', NULL, '2021-12-15 23:18:59', b'0', 1); | ||
| 1980 | +INSERT INTO `sys_user_session` VALUES ('28d90f7da308407296fface4ca68d732', 1, 2, '2022-01-01 21:54:30', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 21:01:18', NULL, '2022-01-01 21:24:30', b'0', 1); | ||
| 1981 | +INSERT INTO `sys_user_session` VALUES ('2d920ad234a442cd98f5f517d50d6b60', 1, 2, '2022-01-02 16:47:41', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 14:34:30', NULL, '2022-01-02 16:17:41', b'0', 1); | ||
| 1982 | +INSERT INTO `sys_user_session` VALUES ('2ec1ca2d0053415599fa18e6bddf710e', 104, 2, '2021-12-16 10:08:04', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 09:27:08', NULL, '2021-12-16 09:38:04', b'0', 1); | ||
| 1983 | +INSERT INTO `sys_user_session` VALUES ('345ad9af8d0c46c8ad285b57cabfd060', 1, 2, '2021-12-25 19:57:51', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-25 19:15:06', NULL, '2021-12-25 19:27:51', b'0', 1); | ||
| 1984 | +INSERT INTO `sys_user_session` VALUES ('47949a90a88d4c49823d70995d980ee9', 1, 2, '2021-12-16 10:04:30', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 09:20:41', NULL, '2021-12-16 09:34:30', b'0', 1); | ||
| 1985 | +INSERT INTO `sys_user_session` VALUES ('495da339c78846609991d9bc66e17dcf', 1, 2, '2021-12-31 22:54:24', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-31 21:47:55', NULL, '2021-12-31 22:24:24', b'0', 1); | ||
| 1986 | +INSERT INTO `sys_user_session` VALUES ('4e00d142b22e4826938de31c221b6b32', 104, 2, '2021-12-16 09:54:24', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 09:24:24', NULL, '2021-12-16 01:27:04', b'1', 1); | ||
| 1987 | +INSERT INTO `sys_user_session` VALUES ('5921e2838860430b80d02c2dc5bc9b14', 1, 2, '2022-01-01 18:38:17', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 17:19:06', NULL, '2022-01-01 18:08:17', b'0', 1); | ||
| 1988 | +INSERT INTO `sys_user_session` VALUES ('64f51e60527349d6b4a0a74f3d8eca97', 104, 2, '2021-12-16 07:37:54', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 07:07:54', NULL, '2021-12-16 07:07:54', b'0', 1); | ||
| 1989 | +INSERT INTO `sys_user_session` VALUES ('79924bcc8d594452a8ee8406d312b2c2', 1, 2, '2022-01-01 23:37:34', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 22:02:06', NULL, '2022-01-01 23:07:34', b'0', 1); | ||
| 1990 | +INSERT INTO `sys_user_session` VALUES ('9122b55409a94388a7b277ad808a127c', 1, 2, '2022-01-01 17:18:53', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 16:20:04', NULL, '2022-01-01 16:48:53', b'0', 1); | ||
| 1991 | +INSERT INTO `sys_user_session` VALUES ('91b94971b7f044c8b68420e6ef7377af', 1, 2, '2022-01-02 17:32:50', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 17:02:50', NULL, '2022-01-02 17:02:50', b'0', 1); | ||
| 1992 | +INSERT INTO `sys_user_session` VALUES ('945e4bb19f4d4c28ba7135218ee3abe3', 1, 2, '2021-12-16 08:28:54', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 07:42:25', NULL, '2021-12-16 07:58:54', b'0', 1); | ||
| 1993 | +INSERT INTO `sys_user_session` VALUES ('9526809b303f489b8aab0c05e6b483dd', 1, 2, '2022-01-01 00:51:19', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 00:21:19', NULL, '2022-01-01 00:21:19', b'0', 1); | ||
| 1994 | +INSERT INTO `sys_user_session` VALUES ('9ee1349d7d3043759cb742a0fa5a3163', 1, 2, '2021-12-25 19:08:33', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-25 18:38:33', NULL, '2021-12-25 18:38:33', b'0', 1); | ||
| 1995 | +INSERT INTO `sys_user_session` VALUES ('a155e6dfe4b74fbaa69fcca239facc40', 1, 2, '2021-12-16 07:37:39', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-16 07:07:39', NULL, '2021-12-16 07:07:39', b'0', 1); | ||
| 1996 | +INSERT INTO `sys_user_session` VALUES ('a55b31ff9e6a41fcb931d2244b4240a8', 1, 2, '2021-12-30 22:32:56', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-30 20:04:02', NULL, '2021-12-30 22:02:56', b'0', 1); | ||
| 1997 | +INSERT INTO `sys_user_session` VALUES ('ab449ce8f2ea456591d23515c188c242', 1, 2, '2021-12-25 17:55:45', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-25 16:42:42', NULL, '2021-12-25 17:25:45', b'0', 1); | ||
| 1998 | +INSERT INTO `sys_user_session` VALUES ('b12325b8930245c09b75aa100dc1124d', 1, 2, '2022-01-01 09:12:53', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 08:09:05', NULL, '2022-01-01 08:42:53', b'0', 1); | ||
| 1999 | +INSERT INTO `sys_user_session` VALUES ('bd655254904748f79c0ad47dfb49d457', 1, 2, '2022-01-01 08:05:32', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 07:35:32', NULL, '2022-01-01 07:35:32', b'0', 1); | ||
| 2000 | +INSERT INTO `sys_user_session` VALUES ('c09baa895d79468db63417f60c65573c', 1, 2, '2022-01-01 11:33:44', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 10:13:48', NULL, '2022-01-01 11:03:44', b'0', 1); | ||
| 2001 | +INSERT INTO `sys_user_session` VALUES ('da04f99dc14a4f28a8a77178861cb3ed', 104, 2, '2021-12-15 23:37:58', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-15 22:47:31', NULL, '2021-12-15 15:11:55', b'1', 1); | ||
| 2002 | +INSERT INTO `sys_user_session` VALUES ('e290aebda5f34c379d0cf3e013cbcc8b', 1, 2, '2022-01-02 09:27:23', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-02 08:32:23', NULL, '2022-01-02 08:57:23', b'0', 1); | ||
| 2003 | +INSERT INTO `sys_user_session` VALUES ('fe82f6ecb17449b595c7d6bd4bc1d371', 1, 2, '2021-12-15 23:16:49', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2021-12-15 22:46:49', NULL, '2021-12-15 14:46:53', b'1', 1); | ||
| 2004 | +INSERT INTO `sys_user_session` VALUES ('ffeae9ee4b8649b6b9ececaa502a934d', 1, 2, '2022-01-01 19:56:49', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', NULL, '2022-01-01 18:47:31', NULL, '2022-01-01 19:26:49', b'0', 1); | ||
| 1867 | COMMIT; | 2005 | COMMIT; |
| 1868 | 2006 | ||
| 1869 | -- ---------------------------- | 2007 | -- ---------------------------- |
| @@ -1896,25 +2034,25 @@ CREATE TABLE `tool_codegen_column` ( | @@ -1896,25 +2034,25 @@ CREATE TABLE `tool_codegen_column` ( | ||
| 1896 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 2034 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 1897 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 2035 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 1898 | PRIMARY KEY (`id`) USING BTREE | 2036 | PRIMARY KEY (`id`) USING BTREE |
| 1899 | -) ENGINE=InnoDB AUTO_INCREMENT=479 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='代ç 生æˆè¡¨å—段定义'; | 2037 | +) ENGINE=InnoDB AUTO_INCREMENT=489 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='代ç 生æˆè¡¨å—段定义'; |
| 1900 | 2038 | ||
| 1901 | -- ---------------------------- | 2039 | -- ---------------------------- |
| 1902 | -- Records of tool_codegen_column | 2040 | -- Records of tool_codegen_column |
| 1903 | -- ---------------------------- | 2041 | -- ---------------------------- |
| 1904 | BEGIN; | 2042 | BEGIN; |
| 1905 | -INSERT INTO `tool_codegen_column` VALUES (243, 21, 'id', 'int(5)', '傿•°ä¸»é”®', b'0', b'1', '1', 1, 'Integer', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); | ||
| 1906 | -INSERT INTO `tool_codegen_column` VALUES (244, 21, 'group', 'varchar(50)', '傿•°åˆ†ç»„', b'0', b'0', '0', 2, 'String', 'group', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 19:51:35', '', '2021-03-06 02:20:02', b'0'); | ||
| 1907 | -INSERT INTO `tool_codegen_column` VALUES (245, 21, 'type', 'tinyint(4)', '傿•°ç±»åž‹', b'0', b'0', '0', 3, 'Integer', 'type', '', NULL, b'1', b'1', b'1', '=', b'1', 'select', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); | ||
| 1908 | -INSERT INTO `tool_codegen_column` VALUES (246, 21, 'name', 'varchar(100)', '傿•°åç§°', b'0', b'0', '0', 4, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); | ||
| 1909 | -INSERT INTO `tool_codegen_column` VALUES (247, 21, 'key', 'varchar(100)', '傿•°é”®å', b'0', b'0', '0', 5, 'String', 'key', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); | ||
| 1910 | -INSERT INTO `tool_codegen_column` VALUES (248, 21, 'value', 'varchar(500)', '傿•°é”®å€¼', b'0', b'0', '0', 6, 'String', 'value', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 19:51:35', '', '2021-03-06 02:20:02', b'0'); | ||
| 1911 | -INSERT INTO `tool_codegen_column` VALUES (249, 21, 'sensitive', 'bit(1)', 'æ˜¯å¦æ•感', b'0', b'0', '0', 7, 'Boolean', 'sensitive', '', NULL, b'1', b'1', b'0', '=', b'1', 'radio', '', '2021-02-06 19:51:35', '', '2021-03-06 02:20:02', b'0'); | ||
| 1912 | -INSERT INTO `tool_codegen_column` VALUES (250, 21, 'remark', 'varchar(500)', '备注', b'1', b'0', '0', 8, 'String', 'remark', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 19:51:35', '', '2021-03-06 02:20:02', b'0'); | ||
| 1913 | -INSERT INTO `tool_codegen_column` VALUES (251, 21, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 9, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); | ||
| 1914 | -INSERT INTO `tool_codegen_column` VALUES (252, 21, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 10, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); | ||
| 1915 | -INSERT INTO `tool_codegen_column` VALUES (253, 21, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 11, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); | ||
| 1916 | -INSERT INTO `tool_codegen_column` VALUES (254, 21, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 12, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); | ||
| 1917 | -INSERT INTO `tool_codegen_column` VALUES (255, 21, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 13, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); | 2043 | +INSERT INTO `tool_codegen_column` VALUES (243, 21, 'id', 'int(5)', '傿•°ä¸»é”®', b'0', b'1', '1', 1, 'Integer', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 19:51:35', '1', '2021-12-31 22:06:46', b'0'); |
| 2044 | +INSERT INTO `tool_codegen_column` VALUES (244, 21, 'group', 'varchar(50)', '傿•°åˆ†ç»„', b'0', b'0', '0', 2, 'String', 'group', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 19:51:35', '1', '2021-12-31 22:06:46', b'0'); | ||
| 2045 | +INSERT INTO `tool_codegen_column` VALUES (245, 21, 'type', 'tinyint(4)', '傿•°ç±»åž‹', b'0', b'0', '0', 3, 'Integer', 'type', '', NULL, b'1', b'1', b'1', '=', b'1', 'select', '', '2021-02-06 19:51:35', '1', '2021-12-31 22:06:46', b'0'); | ||
| 2046 | +INSERT INTO `tool_codegen_column` VALUES (246, 21, 'name', 'varchar(100)', '傿•°åç§°', b'0', b'0', '0', 4, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '', '2021-02-06 19:51:35', '1', '2021-12-31 22:06:46', b'0'); | ||
| 2047 | +INSERT INTO `tool_codegen_column` VALUES (247, 21, 'key', 'varchar(100)', '傿•°é”®å', b'0', b'0', '0', 5, 'String', 'key', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-06 19:51:35', '1', '2021-12-31 22:06:46', b'0'); | ||
| 2048 | +INSERT INTO `tool_codegen_column` VALUES (248, 21, 'value', 'varchar(500)', '傿•°é”®å€¼', b'0', b'0', '0', 6, 'String', 'value', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 19:51:35', '1', '2021-12-31 22:06:46', b'0'); | ||
| 2049 | +INSERT INTO `tool_codegen_column` VALUES (249, 21, 'sensitive', 'bit(1)', 'æ˜¯å¦æ•感', b'0', b'0', '0', 7, 'Boolean', 'sensitive', '', NULL, b'1', b'1', b'0', '=', b'1', 'radio', '', '2021-02-06 19:51:35', '1', '2021-12-31 22:06:46', b'0'); | ||
| 2050 | +INSERT INTO `tool_codegen_column` VALUES (250, 21, 'remark', 'varchar(500)', '备注', b'1', b'0', '0', 8, 'String', 'remark', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 19:51:35', '1', '2021-12-31 22:06:46', b'0'); | ||
| 2051 | +INSERT INTO `tool_codegen_column` VALUES (251, 21, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 9, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 19:51:35', '1', '2021-12-31 22:06:46', b'0'); | ||
| 2052 | +INSERT INTO `tool_codegen_column` VALUES (252, 21, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 10, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '', '2021-02-06 19:51:35', '1', '2021-12-31 22:06:46', b'0'); | ||
| 2053 | +INSERT INTO `tool_codegen_column` VALUES (253, 21, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 11, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 19:51:35', '1', '2021-12-31 22:06:46', b'0'); | ||
| 2054 | +INSERT INTO `tool_codegen_column` VALUES (254, 21, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 12, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-06 19:51:35', '1', '2021-12-31 22:06:46', b'0'); | ||
| 2055 | +INSERT INTO `tool_codegen_column` VALUES (255, 21, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 13, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-02-06 19:51:35', '1', '2021-12-31 22:06:46', b'0'); | ||
| 1918 | INSERT INTO `tool_codegen_column` VALUES (269, 24, 'id', 'bigint(20)', '任务编å·', b'0', b'1', '1', 1, 'Long', 'id', '', '1024', b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0'); | 2056 | INSERT INTO `tool_codegen_column` VALUES (269, 24, 'id', 'bigint(20)', '任务编å·', b'0', b'1', '1', 1, 'Long', 'id', '', '1024', b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0'); |
| 1919 | INSERT INTO `tool_codegen_column` VALUES (270, 24, 'name', 'varchar(32)', '任务åç§°', b'0', b'0', '0', 2, 'String', 'name', '', '测试任务', b'1', b'1', b'1', 'LIKE', b'1', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0'); | 2057 | INSERT INTO `tool_codegen_column` VALUES (270, 24, 'name', 'varchar(32)', '任务åç§°', b'0', b'0', '0', 2, 'String', 'name', '', '测试任务', b'1', b'1', b'1', 'LIKE', b'1', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0'); |
| 1920 | INSERT INTO `tool_codegen_column` VALUES (271, 24, 'status', 'tinyint(4)', '任务状æ€', b'0', b'0', '0', 3, 'Integer', 'status', 'inf_job_status', '1', b'0', b'0', b'1', '=', b'1', 'radio', '', '2021-02-07 06:39:34', '', '2021-02-07 07:55:17', b'0'); | 2058 | INSERT INTO `tool_codegen_column` VALUES (271, 24, 'status', 'tinyint(4)', '任务状æ€', b'0', b'0', '0', 3, 'Integer', 'status', 'inf_job_status', '1', b'0', b'0', b'1', '=', b'1', 'radio', '', '2021-02-07 06:39:34', '', '2021-02-07 07:55:17', b'0'); |
| @@ -2114,6 +2252,16 @@ INSERT INTO `tool_codegen_column` VALUES (475, 39, 'create_time', 'datetime', 'å | @@ -2114,6 +2252,16 @@ INSERT INTO `tool_codegen_column` VALUES (475, 39, 'create_time', 'datetime', 'å | ||
| 2114 | INSERT INTO `tool_codegen_column` VALUES (476, 39, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 8, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2021-12-14 09:51:12', '1', '2021-12-14 10:02:12', b'0'); | 2252 | INSERT INTO `tool_codegen_column` VALUES (476, 39, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 8, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2021-12-14 09:51:12', '1', '2021-12-14 10:02:12', b'0'); |
| 2115 | INSERT INTO `tool_codegen_column` VALUES (477, 39, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 9, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2021-12-14 09:51:12', '1', '2021-12-14 10:02:12', b'0'); | 2253 | INSERT INTO `tool_codegen_column` VALUES (477, 39, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 9, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2021-12-14 09:51:12', '1', '2021-12-14 10:02:12', b'0'); |
| 2116 | INSERT INTO `tool_codegen_column` VALUES (478, 39, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 10, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2021-12-14 09:51:12', '1', '2021-12-14 10:02:12', b'0'); | 2254 | INSERT INTO `tool_codegen_column` VALUES (478, 39, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 10, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2021-12-14 09:51:12', '1', '2021-12-14 10:02:12', b'0'); |
| 2255 | +INSERT INTO `tool_codegen_column` VALUES (479, 40, 'id', 'bigint', 'ç¼–å·', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2021-12-30 20:33:27', '1', '2021-12-30 20:37:58', b'0'); | ||
| 2256 | +INSERT INTO `tool_codegen_column` VALUES (480, 40, 'name', 'varchar(64)', '表å•å', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2021-12-30 20:33:27', '1', '2021-12-30 20:37:58', b'0'); | ||
| 2257 | +INSERT INTO `tool_codegen_column` VALUES (481, 40, 'status', 'tinyint', 'å¼€å¯çжæ€', b'0', b'0', '0', 3, 'Integer', 'status', 'sys_common_status', NULL, b'1', b'1', b'0', '=', b'1', 'radio', '1', '2021-12-30 20:33:27', '1', '2021-12-30 20:37:58', b'0'); | ||
| 2258 | +INSERT INTO `tool_codegen_column` VALUES (482, 40, 'fields', 'varchar(1024)', '表å•é…ç½®', b'0', b'0', '0', 4, 'String', 'fields', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '1', '2021-12-30 20:33:27', '1', '2021-12-30 20:37:58', b'0'); | ||
| 2259 | +INSERT INTO `tool_codegen_column` VALUES (483, 40, 'remark', 'varchar(255)', '备注', b'1', b'0', '0', 5, 'String', 'remark', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '1', '2021-12-30 20:33:27', '1', '2021-12-30 20:37:58', b'0'); | ||
| 2260 | +INSERT INTO `tool_codegen_column` VALUES (484, 40, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 6, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2021-12-30 20:33:27', '1', '2021-12-30 20:37:58', b'0'); | ||
| 2261 | +INSERT INTO `tool_codegen_column` VALUES (485, 40, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 7, 'Date', 'createTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '1', '2021-12-30 20:33:27', '1', '2021-12-30 20:37:58', b'0'); | ||
| 2262 | +INSERT INTO `tool_codegen_column` VALUES (486, 40, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 8, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2021-12-30 20:33:27', '1', '2021-12-30 20:37:58', b'0'); | ||
| 2263 | +INSERT INTO `tool_codegen_column` VALUES (487, 40, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 9, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2021-12-30 20:33:27', '1', '2021-12-30 20:37:58', b'0'); | ||
| 2264 | +INSERT INTO `tool_codegen_column` VALUES (488, 40, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 10, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2021-12-30 20:33:27', '1', '2021-12-30 20:37:58', b'0'); | ||
| 2117 | COMMIT; | 2265 | COMMIT; |
| 2118 | 2266 | ||
| 2119 | -- ---------------------------- | 2267 | -- ---------------------------- |
| @@ -2139,13 +2287,13 @@ CREATE TABLE `tool_codegen_table` ( | @@ -2139,13 +2287,13 @@ CREATE TABLE `tool_codegen_table` ( | ||
| 2139 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 2287 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 2140 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 2288 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 2141 | PRIMARY KEY (`id`) USING BTREE | 2289 | PRIMARY KEY (`id`) USING BTREE |
| 2142 | -) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='代ç 生æˆè¡¨å®šä¹‰'; | 2290 | +) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='代ç 生æˆè¡¨å®šä¹‰'; |
| 2143 | 2291 | ||
| 2144 | -- ---------------------------- | 2292 | -- ---------------------------- |
| 2145 | -- Records of tool_codegen_table | 2293 | -- Records of tool_codegen_table |
| 2146 | -- ---------------------------- | 2294 | -- ---------------------------- |
| 2147 | BEGIN; | 2295 | BEGIN; |
| 2148 | -INSERT INTO `tool_codegen_table` VALUES (21, 1, 'inf_config', '傿•°é…置表', NULL, 'infra', 'config', 'InfConfig', '傿•°é…ç½®', '芋艿', 1, NULL, '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); | 2296 | +INSERT INTO `tool_codegen_table` VALUES (21, 1, 'inf_config', '傿•°é…置表', NULL, 'infra', 'config', 'InfConfig', '傿•°é…ç½®', '芋艿', 1, NULL, '', '2021-02-06 19:51:35', '1', '2021-12-31 22:06:46', b'0'); |
| 2149 | INSERT INTO `tool_codegen_table` VALUES (22, 2, 'sys_file', '文件表\n', NULL, 'system', 'file', 'SysFile', '文件', '芋艿', 1, NULL, '', '2021-02-06 20:28:34', '', '2021-02-06 20:28:34', b'0'); | 2297 | INSERT INTO `tool_codegen_table` VALUES (22, 2, 'sys_file', '文件表\n', NULL, 'system', 'file', 'SysFile', '文件', '芋艿', 1, NULL, '', '2021-02-06 20:28:34', '', '2021-02-06 20:28:34', b'0'); |
| 2150 | INSERT INTO `tool_codegen_table` VALUES (24, 1, 'inf_job', '定时任务表', NULL, 'infra', 'job', 'InfJob', '定时任务', 'èŠ‹é“æºç ', 1, NULL, '', '2021-02-07 06:39:34', '', '2021-02-07 06:46:56', b'0'); | 2298 | INSERT INTO `tool_codegen_table` VALUES (24, 1, 'inf_job', '定时任务表', NULL, 'infra', 'job', 'InfJob', '定时任务', 'èŠ‹é“æºç ', 1, NULL, '', '2021-02-07 06:39:34', '', '2021-02-07 06:46:56', b'0'); |
| 2151 | INSERT INTO `tool_codegen_table` VALUES (25, 1, 'inf_job_log', '定时任务日志表', NULL, 'infra', 'jobLog', 'InfJobLog', '定时任务', '芋艿', 1, NULL, '', '2021-02-08 04:58:41', '', '2021-02-08 10:09:52', b'0'); | 2299 | INSERT INTO `tool_codegen_table` VALUES (25, 1, 'inf_job_log', '定时任务日志表', NULL, 'infra', 'jobLog', 'InfJobLog', '定时任务', '芋艿', 1, NULL, '', '2021-02-08 04:58:41', '', '2021-02-08 10:09:52', b'0'); |
| @@ -2160,6 +2308,7 @@ INSERT INTO `tool_codegen_table` VALUES (36, 1, 'sys_sms_log', 'çŸä¿¡æ—¥å¿—', N | @@ -2160,6 +2308,7 @@ INSERT INTO `tool_codegen_table` VALUES (36, 1, 'sys_sms_log', 'çŸä¿¡æ—¥å¿—', N | ||
| 2160 | INSERT INTO `tool_codegen_table` VALUES (37, 1, 'inf_error_code', '错误ç 表', NULL, 'infra', 'errorcode', 'InfErrorCode', '错误ç ', 'èŠ‹é“æºç ', 1, 2, '1', '2021-04-20 15:27:45', '1', '2021-04-21 00:55:37', b'0'); | 2308 | INSERT INTO `tool_codegen_table` VALUES (37, 1, 'inf_error_code', '错误ç 表', NULL, 'infra', 'errorcode', 'InfErrorCode', '错误ç ', 'èŠ‹é“æºç ', 1, 2, '1', '2021-04-20 15:27:45', '1', '2021-04-21 00:55:37', b'0'); |
| 2161 | INSERT INTO `tool_codegen_table` VALUES (38, 1, 'tool_test_demo', 'å—典类型表', NULL, 'tool', 'test', 'ToolTestDemo', 'å—典类型', '芋艿', 1, NULL, '1', '2021-04-26 12:25:51', '1', '2021-05-03 00:45:45', b'0'); | 2309 | INSERT INTO `tool_codegen_table` VALUES (38, 1, 'tool_test_demo', 'å—典类型表', NULL, 'tool', 'test', 'ToolTestDemo', 'å—典类型', '芋艿', 1, NULL, '1', '2021-04-26 12:25:51', '1', '2021-05-03 00:45:45', b'0'); |
| 2162 | INSERT INTO `tool_codegen_table` VALUES (39, 1, 'sys_tenant', '租户表', NULL, 'system', 'tenant', 'SysTenant', '租户', 'èŠ‹é“æºç ', 1, 1, '1', '2021-12-05 01:04:21', '1', '2021-12-14 10:02:12', b'0'); | 2310 | INSERT INTO `tool_codegen_table` VALUES (39, 1, 'sys_tenant', '租户表', NULL, 'system', 'tenant', 'SysTenant', '租户', 'èŠ‹é“æºç ', 1, 1, '1', '2021-12-05 01:04:21', '1', '2021-12-14 10:02:12', b'0'); |
| 2311 | +INSERT INTO `tool_codegen_table` VALUES (40, 1, 'bpm_form', '工作æµçš„表å•定义', NULL, 'bpm', 'form', 'BpmForm', '工作æµçš„', 'èŠ‹é“æºç ', 1, 1186, '1', '2021-12-30 12:32:54', '1', '2021-12-30 20:37:58', b'0'); | ||
| 2163 | COMMIT; | 2312 | COMMIT; |
| 2164 | 2313 | ||
| 2165 | -- ---------------------------- | 2314 | -- ---------------------------- |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/form/vo/WfFormExcelVO.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo; | ||
| 2 | - | ||
| 3 | -import lombok.*; | ||
| 4 | -import java.util.*; | ||
| 5 | - | ||
| 6 | -import com.alibaba.excel.annotation.ExcelProperty; | ||
| 7 | - | ||
| 8 | -/** | ||
| 9 | - * 动态表单 Excel VO | ||
| 10 | - * | ||
| 11 | - * @author 芋艿 | ||
| 12 | - */ | ||
| 13 | -@Data | ||
| 14 | -public class WfFormExcelVO { | ||
| 15 | - | ||
| 16 | - @ExcelProperty("表单编号") | ||
| 17 | - private Long id; | ||
| 18 | - | ||
| 19 | - @ExcelProperty("表单名称") | ||
| 20 | - private String name; | ||
| 21 | - | ||
| 22 | - @ExcelProperty("商户状态") | ||
| 23 | - private Integer status; | ||
| 24 | - | ||
| 25 | - @ExcelProperty("表单JSON") | ||
| 26 | - private String formJson; | ||
| 27 | - | ||
| 28 | - @ExcelProperty("备注") | ||
| 29 | - private String remark; | ||
| 30 | - | ||
| 31 | - @ExcelProperty("创建时间") | ||
| 32 | - private Date createTime; | ||
| 33 | - | ||
| 34 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/form/vo/WfFormExportReqVO.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo; | ||
| 2 | - | ||
| 3 | -import lombok.*; | ||
| 4 | -import java.util.*; | ||
| 5 | -import io.swagger.annotations.*; | ||
| 6 | -import org.springframework.format.annotation.DateTimeFormat; | ||
| 7 | -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 8 | - | ||
| 9 | -@ApiModel(value = "动态表单 Excel 导出 Request VO", description = "参数和 OsFormPageReqVO 是一致的") | ||
| 10 | -@Data | ||
| 11 | -public class WfFormExportReqVO { | ||
| 12 | - | ||
| 13 | - @ApiModelProperty(value = "表单名称") | ||
| 14 | - private String name; | ||
| 15 | - | ||
| 16 | - @ApiModelProperty(value = "商户状态") | ||
| 17 | - private Integer status; | ||
| 18 | - | ||
| 19 | - @ApiModelProperty(value = "表单JSON") | ||
| 20 | - private String formJson; | ||
| 21 | - | ||
| 22 | - @ApiModelProperty(value = "备注") | ||
| 23 | - private String remark; | ||
| 24 | - | ||
| 25 | - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 26 | - @ApiModelProperty(value = "开始创建时间") | ||
| 27 | - private Date beginCreateTime; | ||
| 28 | - | ||
| 29 | - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 30 | - @ApiModelProperty(value = "结束创建时间") | ||
| 31 | - private Date endCreateTime; | ||
| 32 | - | ||
| 33 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/form/vo/WfFormPageReqVO.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo; | ||
| 2 | - | ||
| 3 | -import lombok.*; | ||
| 4 | -import java.util.*; | ||
| 5 | -import io.swagger.annotations.*; | ||
| 6 | -import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 7 | -import org.springframework.format.annotation.DateTimeFormat; | ||
| 8 | -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 9 | - | ||
| 10 | -@ApiModel("动态表单分页 Request VO") | ||
| 11 | -@Data | ||
| 12 | -@EqualsAndHashCode(callSuper = true) | ||
| 13 | -@ToString(callSuper = true) | ||
| 14 | -public class WfFormPageReqVO extends PageParam { | ||
| 15 | - | ||
| 16 | - @ApiModelProperty(value = "表单名称") | ||
| 17 | - private String name; | ||
| 18 | - | ||
| 19 | - @ApiModelProperty(value = "商户状态") | ||
| 20 | - private Integer status; | ||
| 21 | - | ||
| 22 | - @ApiModelProperty(value = "表单JSON") | ||
| 23 | - private String formJson; | ||
| 24 | - | ||
| 25 | - @ApiModelProperty(value = "备注") | ||
| 26 | - private String remark; | ||
| 27 | - | ||
| 28 | - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 29 | - @ApiModelProperty(value = "开始创建时间") | ||
| 30 | - private Date beginCreateTime; | ||
| 31 | - | ||
| 32 | - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 33 | - @ApiModelProperty(value = "结束创建时间") | ||
| 34 | - private Date endCreateTime; | ||
| 35 | - | ||
| 36 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/form/vo/WfFormRespVO.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo; | ||
| 2 | - | ||
| 3 | -import lombok.*; | ||
| 4 | -import java.util.*; | ||
| 5 | -import io.swagger.annotations.*; | ||
| 6 | - | ||
| 7 | -@ApiModel("动态表单 Response VO") | ||
| 8 | -@Data | ||
| 9 | -@EqualsAndHashCode(callSuper = true) | ||
| 10 | -@ToString(callSuper = true) | ||
| 11 | -public class WfFormRespVO extends WfFormBaseVO { | ||
| 12 | - | ||
| 13 | - @ApiModelProperty(value = "表单编号", required = true) | ||
| 14 | - private Long id; | ||
| 15 | - | ||
| 16 | - @ApiModelProperty(value = "创建时间", required = true) | ||
| 17 | - private Date createTime; | ||
| 18 | - | ||
| 19 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/workflow/ProcessDefinitionController.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.workflow; | ||
| 2 | - | ||
| 3 | -import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 4 | -import org.activiti.api.process.runtime.ProcessRuntime; | ||
| 5 | -import org.activiti.engine.RepositoryService; | ||
| 6 | -import org.springframework.web.bind.annotation.GetMapping; | ||
| 7 | -import org.springframework.web.bind.annotation.RequestMapping; | ||
| 8 | -import org.springframework.web.bind.annotation.RequestParam; | ||
| 9 | -import org.springframework.web.bind.annotation.RestController; | ||
| 10 | - | ||
| 11 | -import javax.annotation.Resource; | ||
| 12 | - | ||
| 13 | -// TODO @json:swagger 和 validation 的注解,后续要补全下哈。可以等 workflow 基本写的差不多之后 | ||
| 14 | -@RestController | ||
| 15 | -@RequestMapping("/workflow/process/definition") | ||
| 16 | -public class ProcessDefinitionController { | ||
| 17 | - | ||
| 18 | - @Resource | ||
| 19 | - private RepositoryService repositoryService; | ||
| 20 | - | ||
| 21 | - @Resource | ||
| 22 | - private ProcessRuntime processRuntime; | ||
| 23 | - | ||
| 24 | - | ||
| 25 | - @GetMapping(value = "/getStartForm") | ||
| 26 | - public CommonResult<String> getStartForm(@RequestParam("processKey") String processKey){ | ||
| 27 | - //这样查似乎有问题??, 暂时写死 | ||
| 28 | -// final ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery(). | ||
| 29 | -// processDefinitionKey(processKey).latestVersion().singleResult(); | ||
| 30 | -// processRuntime.processDefinition(processDefinition.getId()).getFormKey(); | ||
| 31 | - return CommonResult.success("/flow/leave/apply"); | ||
| 32 | - } | ||
| 33 | - | ||
| 34 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/convert/form/WfFormConvert.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.convert.form; | ||
| 2 | - | ||
| 3 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo.WfFormCreateReqVO; | ||
| 4 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo.WfFormExcelVO; | ||
| 5 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo.WfFormRespVO; | ||
| 6 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo.WfFormUpdateReqVO; | ||
| 7 | -import cn.iocoder.yudao.adminserver.modules.activiti.dal.dataobject.form.WfForm; | ||
| 8 | -import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 9 | -import org.mapstruct.Mapper; | ||
| 10 | -import org.mapstruct.factory.Mappers; | ||
| 11 | - | ||
| 12 | -import java.util.List; | ||
| 13 | - | ||
| 14 | -/** | ||
| 15 | - * 动态表单 Convert | ||
| 16 | - * | ||
| 17 | - * @author 芋艿 | ||
| 18 | - */ | ||
| 19 | -@Mapper | ||
| 20 | -public interface WfFormConvert { | ||
| 21 | - | ||
| 22 | - WfFormConvert INSTANCE = Mappers.getMapper(WfFormConvert.class); | ||
| 23 | - | ||
| 24 | - WfForm convert(WfFormCreateReqVO bean); | ||
| 25 | - | ||
| 26 | - WfForm convert(WfFormUpdateReqVO bean); | ||
| 27 | - | ||
| 28 | - WfFormRespVO convert(WfForm bean); | ||
| 29 | - | ||
| 30 | - List<WfFormRespVO> convertList(List<WfForm> list); | ||
| 31 | - | ||
| 32 | - PageResult<WfFormRespVO> convertPage(PageResult<WfForm> page); | ||
| 33 | - | ||
| 34 | - List<WfFormExcelVO> convertList02(List<WfForm> list); | ||
| 35 | - | ||
| 36 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/convert/oa/OaLeaveConvert.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.convert.oa; | ||
| 2 | - | ||
| 3 | -import java.util.*; | ||
| 4 | - | ||
| 5 | -import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 6 | - | ||
| 7 | -import org.mapstruct.Mapper; | ||
| 8 | -import org.mapstruct.factory.Mappers; | ||
| 9 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo.*; | ||
| 10 | -import cn.iocoder.yudao.adminserver.modules.activiti.dal.dataobject.oa.OaLeaveDO; | ||
| 11 | - | ||
| 12 | -/** | ||
| 13 | - * 请假申请 Convert | ||
| 14 | - * | ||
| 15 | - * @author 芋艿 | ||
| 16 | - */ | ||
| 17 | -@Mapper | ||
| 18 | -public interface OaLeaveConvert { | ||
| 19 | - | ||
| 20 | - OaLeaveConvert INSTANCE = Mappers.getMapper(OaLeaveConvert.class); | ||
| 21 | - | ||
| 22 | - OaLeaveDO convert(OaLeaveCreateReqVO bean); | ||
| 23 | - | ||
| 24 | - OaLeaveDO convert(OaLeaveUpdateReqVO bean); | ||
| 25 | - | ||
| 26 | - OaLeaveRespVO convert(OaLeaveDO bean); | ||
| 27 | - | ||
| 28 | - List<OaLeaveRespVO> convertList(List<OaLeaveDO> list); | ||
| 29 | - | ||
| 30 | - PageResult<OaLeaveRespVO> convertPage(PageResult<OaLeaveDO> page); | ||
| 31 | - | ||
| 32 | - List<OaLeaveExcelVO> convertList02(List<OaLeaveDO> list); | ||
| 33 | - | ||
| 34 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/convert/workflow/TodoTaskConvert.java deleted
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/dal/dataobject/process/ProcessDefinitionDO.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.dal.dataobject.process; | ||
| 2 | - | ||
| 3 | -/** | ||
| 4 | - * 流程模型实体类 映射 activiti ProcessDefinition接口 | ||
| 5 | - * | ||
| 6 | - * @author ZJQ | ||
| 7 | - * @date 2021/9/7 23:23 | ||
| 8 | - */ | ||
| 9 | -public class ProcessDefinitionDO { | ||
| 10 | - | ||
| 11 | - private String id; | ||
| 12 | - | ||
| 13 | - private String category; | ||
| 14 | - | ||
| 15 | - private String key; | ||
| 16 | - | ||
| 17 | - private String name; | ||
| 18 | - | ||
| 19 | - private String version; | ||
| 20 | - | ||
| 21 | - private String resourceName; | ||
| 22 | - | ||
| 23 | - private String deploymentId; | ||
| 24 | - | ||
| 25 | - private String diagramResourceName; | ||
| 26 | - | ||
| 27 | - private boolean suspended; | ||
| 28 | - | ||
| 29 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/dal/mysql/form/WfFormMapper.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.dal.mysql.form; | ||
| 2 | - | ||
| 3 | - | ||
| 4 | - | ||
| 5 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo.WfFormExportReqVO; | ||
| 6 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo.WfFormPageReqVO; | ||
| 7 | -import cn.iocoder.yudao.adminserver.modules.activiti.dal.dataobject.form.WfForm; | ||
| 8 | -import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 9 | -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||
| 10 | -import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; | ||
| 11 | -import org.apache.ibatis.annotations.Mapper; | ||
| 12 | - | ||
| 13 | -import java.util.List; | ||
| 14 | - | ||
| 15 | -/** | ||
| 16 | - * 动态表单 Mapper | ||
| 17 | - * | ||
| 18 | - * @author 风里雾里 | ||
| 19 | - */ | ||
| 20 | -@Mapper | ||
| 21 | -public interface WfFormMapper extends BaseMapperX<WfForm> { | ||
| 22 | - | ||
| 23 | - default PageResult<WfForm> selectPage(WfFormPageReqVO reqVO) { | ||
| 24 | - return selectPage(reqVO, new QueryWrapperX<WfForm>() | ||
| 25 | - .likeIfPresent("name", reqVO.getName()) | ||
| 26 | - .eqIfPresent("status", reqVO.getStatus()) | ||
| 27 | - .eqIfPresent("form_json", reqVO.getFormJson()) | ||
| 28 | - .eqIfPresent("remark", reqVO.getRemark()) | ||
| 29 | - .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) | ||
| 30 | - .orderByDesc("id") ); | ||
| 31 | - } | ||
| 32 | - | ||
| 33 | - default List<WfForm> selectList(WfFormExportReqVO reqVO) { | ||
| 34 | - return selectList(new QueryWrapperX<WfForm>() | ||
| 35 | - .likeIfPresent("name", reqVO.getName()) | ||
| 36 | - .eqIfPresent("status", reqVO.getStatus()) | ||
| 37 | - .eqIfPresent("form_json", reqVO.getFormJson()) | ||
| 38 | - .eqIfPresent("remark", reqVO.getRemark()) | ||
| 39 | - .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) | ||
| 40 | - .orderByDesc("id") ); | ||
| 41 | - } | ||
| 42 | - | ||
| 43 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/enums/OaErrorCodeConstants.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.enums; | ||
| 2 | - | ||
| 3 | -import cn.iocoder.yudao.framework.common.exception.ErrorCode; | ||
| 4 | -/** | ||
| 5 | - * activiti 系统 错误码枚举类 | ||
| 6 | - * | ||
| 7 | - * 003 activiti | ||
| 8 | - * 001 oa | ||
| 9 | - * activiti 系统,使用 1-003-000-000 段 | ||
| 10 | - */ | ||
| 11 | -public interface OaErrorCodeConstants { | ||
| 12 | - ErrorCode LEAVE_NOT_EXISTS = new ErrorCode(1003001001, "请假申请不存在"); | ||
| 13 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/enums/form/WfFormErrorCodeConstants.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.enums.form; | ||
| 2 | - | ||
| 3 | -import cn.iocoder.yudao.framework.common.exception.ErrorCode; | ||
| 4 | - | ||
| 5 | -/** | ||
| 6 | - * activiti 系统 错误码枚举类 | ||
| 7 | - * | ||
| 8 | - * 003 activiti | ||
| 9 | - * 001 oa | ||
| 10 | - * activiti 系统,使用 1-003-000-000 段 | ||
| 11 | - */ | ||
| 12 | -public interface WfFormErrorCodeConstants { | ||
| 13 | - ErrorCode FORM_NOT_EXISTS = new ErrorCode(1003001002, "动态表单不存在"); | ||
| 14 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/package-info.java deleted
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/service/oa/ReportBackEndProcessor.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.service.oa; | ||
| 2 | - | ||
| 3 | -import cn.iocoder.yudao.adminserver.modules.activiti.dal.dataobject.oa.OaLeaveDO; | ||
| 4 | -import cn.iocoder.yudao.adminserver.modules.activiti.dal.mysql.oa.OaLeaveMapper; | ||
| 5 | -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; | ||
| 6 | -import org.activiti.engine.delegate.DelegateExecution; | ||
| 7 | -import org.activiti.engine.delegate.ExecutionListener; | ||
| 8 | -import org.springframework.stereotype.Component; | ||
| 9 | -import org.springframework.transaction.annotation.Transactional; | ||
| 10 | - | ||
| 11 | -import javax.annotation.Resource; | ||
| 12 | - | ||
| 13 | -@Component | ||
| 14 | -public class ReportBackEndProcessor implements ExecutionListener { | ||
| 15 | - | ||
| 16 | - @Resource | ||
| 17 | - private OaLeaveMapper leaveMapper; | ||
| 18 | - | ||
| 19 | - | ||
| 20 | -// @Override | ||
| 21 | -// @Transactional(rollbackFor = Exception.class) | ||
| 22 | -// public void notify(DelegateTask delegateTask) { | ||
| 23 | -// final String businessKey = delegateTask.getExecution().getProcessInstanceBusinessKey(); | ||
| 24 | -// UpdateWrapper<OaLeaveDO> updateWrapper = new UpdateWrapper<>(); | ||
| 25 | -// updateWrapper.eq("id", Long.valueOf(businessKey)); | ||
| 26 | -// OaLeaveDO updateDo = new OaLeaveDO(); | ||
| 27 | -// updateDo.setStatus(2); | ||
| 28 | -// leaveMapper.update(updateDo, updateWrapper); | ||
| 29 | -// } | ||
| 30 | - | ||
| 31 | - @Override | ||
| 32 | - @Transactional(rollbackFor = Exception.class) | ||
| 33 | - public void notify(DelegateExecution delegateExecution) { | ||
| 34 | - final String businessKey = delegateExecution.getProcessInstanceBusinessKey(); | ||
| 35 | - // TODO @json:service 不要出现 dao 的元素,例如说 UpdateWrapper。这里,我们可以调用 updateById 方法 | ||
| 36 | - UpdateWrapper<OaLeaveDO> updateWrapper = new UpdateWrapper<>(); | ||
| 37 | - updateWrapper.eq("id", Long.valueOf(businessKey)); | ||
| 38 | - OaLeaveDO updateDo = new OaLeaveDO(); | ||
| 39 | - updateDo.setStatus(2); // TODO @json:status 要枚举起来,不要出现 magic number | ||
| 40 | - leaveMapper.update(updateDo, updateWrapper); | ||
| 41 | - } | ||
| 42 | - | ||
| 43 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/service/process/ProcessService.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.service.process; | ||
| 2 | - | ||
| 3 | -import org.springframework.web.multipart.MultipartFile; | ||
| 4 | - | ||
| 5 | -/** | ||
| 6 | - * 流程基础管理 | ||
| 7 | - * | ||
| 8 | - * @author ZJQ | ||
| 9 | - * @date 2021/9/5 21:00 | ||
| 10 | - */ | ||
| 11 | -public interface ProcessService { | ||
| 12 | - | ||
| 13 | - /** | ||
| 14 | - * 上传流程文件,进行流程模型部署 | ||
| 15 | - * @param multipartFile 上传文件 | ||
| 16 | - */ | ||
| 17 | - void deployProcess(MultipartFile multipartFile); | ||
| 18 | - | ||
| 19 | - | ||
| 20 | - /** | ||
| 21 | - * 激活或者挂起流程模型实体 | ||
| 22 | - * @param processDefinitionId 流程模型实体id | ||
| 23 | - * @param type 类型 | ||
| 24 | - * @return 状态 | ||
| 25 | - */ | ||
| 26 | - String setActivOrHang(String processDefinitionId,String type); | ||
| 27 | - | ||
| 28 | - | ||
| 29 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/service/process/impl/ProcessServiceImpl.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.service.process.impl; | ||
| 2 | - | ||
| 3 | -import cn.iocoder.yudao.adminserver.modules.activiti.service.process.ProcessService; | ||
| 4 | -import lombok.extern.slf4j.Slf4j; | ||
| 5 | -import org.activiti.engine.RepositoryService; | ||
| 6 | -import org.activiti.engine.repository.Deployment; | ||
| 7 | -import org.activiti.engine.repository.ProcessDefinition; | ||
| 8 | -import org.apache.commons.io.FilenameUtils; | ||
| 9 | -import org.springframework.stereotype.Service; | ||
| 10 | -import org.springframework.web.multipart.MultipartFile; | ||
| 11 | - | ||
| 12 | -import javax.annotation.Resource; | ||
| 13 | -import java.io.IOException; | ||
| 14 | -import java.io.InputStream; | ||
| 15 | -import java.util.List; | ||
| 16 | -import java.util.zip.ZipInputStream; | ||
| 17 | -import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.FILE_UPLOAD_FAILED; | ||
| 18 | -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||
| 19 | - | ||
| 20 | -/** | ||
| 21 | - * 流程基础管理 | ||
| 22 | - * | ||
| 23 | - * @author ZJQ | ||
| 24 | - * @date 2021/9/5 21:04 | ||
| 25 | - */ | ||
| 26 | -@Service | ||
| 27 | -@Slf4j | ||
| 28 | -public class ProcessServiceImpl implements ProcessService { | ||
| 29 | - | ||
| 30 | - private static final String BPMN20_XML = "bpmn20.xml"; | ||
| 31 | - | ||
| 32 | - @Resource | ||
| 33 | - private RepositoryService repositoryService; | ||
| 34 | - | ||
| 35 | - /** | ||
| 36 | - * 上传流程文件,进行流程部署 | ||
| 37 | - * @param multipartFile 上传文件 | ||
| 38 | - */ | ||
| 39 | - @Override | ||
| 40 | - public void deployProcess(MultipartFile multipartFile) { | ||
| 41 | - String fileName = multipartFile.getOriginalFilename(); | ||
| 42 | - try (InputStream inputStream = multipartFile.getInputStream()){ | ||
| 43 | - Deployment deployment = getDeplymentByType(inputStream,fileName); | ||
| 44 | - //获取部署成功的流程模型 | ||
| 45 | - List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).list(); | ||
| 46 | - processDefinitions.forEach((processDefinition)->{ | ||
| 47 | - //设置线上部署流程模型名字 | ||
| 48 | - String proDefId = processDefinition.getId(); | ||
| 49 | - repositoryService.setProcessDefinitionCategory(proDefId,fileName); | ||
| 50 | - log.info("流程文件部署成功,流程ID="+proDefId); | ||
| 51 | - }); | ||
| 52 | - } catch (IOException e) { | ||
| 53 | - log.error("流程部署出现异常"+e); | ||
| 54 | - } | ||
| 55 | - } | ||
| 56 | - | ||
| 57 | - /** | ||
| 58 | - * 激活或者挂起流程模型实体 | ||
| 59 | - * @param processDefinitionId 流程模型实体id | ||
| 60 | - * @param type 类型 | ||
| 61 | - * @return 提示 | ||
| 62 | - */ | ||
| 63 | - @Override | ||
| 64 | - public String setActivOrHang(String processDefinitionId, String type) { | ||
| 65 | - String result = "无操作"; | ||
| 66 | - switch (type){ | ||
| 67 | - case "active": | ||
| 68 | - repositoryService.activateProcessDefinitionById(processDefinitionId,true,null); | ||
| 69 | - result = "已激活ID为【"+processDefinitionId+"】的流程模型实例"; | ||
| 70 | - break; | ||
| 71 | - case "suspend": | ||
| 72 | - repositoryService.suspendProcessDefinitionById(processDefinitionId,true,null); | ||
| 73 | - result = "已挂起ID为【"+processDefinitionId+"】的流程模型实例"; | ||
| 74 | - break; | ||
| 75 | - default: | ||
| 76 | - break; | ||
| 77 | - } | ||
| 78 | - return result; | ||
| 79 | - } | ||
| 80 | - | ||
| 81 | - | ||
| 82 | - /** | ||
| 83 | - * 根据上传文件类型对应实现不同方式的流程部署 | ||
| 84 | - * @param inputStream 文件输入流 | ||
| 85 | - * @param fileName 文件名 | ||
| 86 | - * @return 文件部署流程 | ||
| 87 | - */ | ||
| 88 | - public Deployment getDeplymentByType(InputStream inputStream,String fileName){ | ||
| 89 | - Deployment deployment; | ||
| 90 | - String type = FilenameUtils.getExtension(fileName); | ||
| 91 | - switch (type){ | ||
| 92 | - case "bpmn": | ||
| 93 | - String baseName = FilenameUtils.getBaseName(fileName); | ||
| 94 | - deployment = repositoryService.createDeployment().addInputStream(baseName+"."+BPMN20_XML,inputStream).deploy(); | ||
| 95 | - break; | ||
| 96 | - case "png": | ||
| 97 | - deployment = repositoryService.createDeployment().addInputStream(fileName,inputStream).deploy(); | ||
| 98 | - break; | ||
| 99 | - case "zip": | ||
| 100 | - case "bar": | ||
| 101 | - ZipInputStream zipInputStream = new ZipInputStream(inputStream); | ||
| 102 | - deployment = repositoryService.createDeployment().addZipInputStream(zipInputStream).deploy(); | ||
| 103 | - break; | ||
| 104 | - default: | ||
| 105 | - throw exception(FILE_UPLOAD_FAILED); | ||
| 106 | - } | ||
| 107 | - return deployment; | ||
| 108 | - } | ||
| 109 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/service/workflow/TaskService.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.service.workflow; | ||
| 2 | - | ||
| 3 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.workflow.vo.*; | ||
| 4 | -import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 5 | - | ||
| 6 | -import java.util.List; | ||
| 7 | - | ||
| 8 | -// TODO @芋艿:前缀,注释 | ||
| 9 | -public interface TaskService { | ||
| 10 | - | ||
| 11 | - PageResult<TodoTaskRespVO> getTodoTaskPage(TodoTaskPageReqVO pageReqVO); | ||
| 12 | - | ||
| 13 | - void claimTask(String taskId); | ||
| 14 | - | ||
| 15 | - void getTaskHistory(String taskId); | ||
| 16 | - | ||
| 17 | - void completeTask(TaskReqVO taskReq); | ||
| 18 | - | ||
| 19 | -// void flowImage(String taskId, HttpServletResponse response); | ||
| 20 | - TaskHandleVO getTaskSteps(TaskQueryReqVO taskQuery); | ||
| 21 | - | ||
| 22 | - List<TaskStepVO> getHistorySteps(String processInstanceId); | ||
| 23 | - | ||
| 24 | - TodoTaskRespVO getTaskFormKey(TaskQueryReqVO taskQuery); | ||
| 25 | - | ||
| 26 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/service/workflow/impl/TaskServiceImpl.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.service.workflow.impl; | ||
| 2 | - | ||
| 3 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.workflow.vo.*; | ||
| 4 | -import cn.iocoder.yudao.adminserver.modules.activiti.dal.mysql.oa.OaLeaveMapper; | ||
| 5 | -import cn.iocoder.yudao.adminserver.modules.activiti.service.workflow.TaskService; | ||
| 6 | -import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 7 | -import cn.iocoder.yudao.framework.security.core.LoginUser; | ||
| 8 | -import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | ||
| 9 | -import com.google.common.collect.ImmutableMap; | ||
| 10 | -import org.activiti.api.runtime.shared.query.Page; | ||
| 11 | -import org.activiti.api.runtime.shared.query.Pageable; | ||
| 12 | -import org.activiti.api.task.model.Task; | ||
| 13 | -import org.activiti.api.task.model.builders.ClaimTaskPayloadBuilder; | ||
| 14 | -import org.activiti.api.task.model.builders.TaskPayloadBuilder; | ||
| 15 | -import org.activiti.api.task.runtime.TaskRuntime; | ||
| 16 | -import org.activiti.engine.HistoryService; | ||
| 17 | -import org.activiti.engine.RepositoryService; | ||
| 18 | -import org.activiti.engine.history.HistoricActivityInstance; | ||
| 19 | -import org.activiti.engine.history.HistoricProcessInstance; | ||
| 20 | -import org.activiti.engine.repository.ProcessDefinition; | ||
| 21 | -import org.activiti.engine.task.Comment; | ||
| 22 | -import org.springframework.stereotype.Service; | ||
| 23 | -import org.springframework.transaction.annotation.Transactional; | ||
| 24 | - | ||
| 25 | -import javax.annotation.Resource; | ||
| 26 | -import java.util.ArrayList; | ||
| 27 | -import java.util.List; | ||
| 28 | -import java.util.Map; | ||
| 29 | -import java.util.Optional; | ||
| 30 | -import java.util.stream.Collectors; | ||
| 31 | - | ||
| 32 | -@Service | ||
| 33 | -public class TaskServiceImpl implements TaskService { | ||
| 34 | - | ||
| 35 | - @Resource | ||
| 36 | - private TaskRuntime taskRuntime; | ||
| 37 | - | ||
| 38 | - @Resource | ||
| 39 | - private org.activiti.engine.TaskService activitiTaskService; | ||
| 40 | - | ||
| 41 | - @Resource | ||
| 42 | - private HistoryService historyService; | ||
| 43 | - | ||
| 44 | - @Resource | ||
| 45 | - private RepositoryService repositoryService; | ||
| 46 | - | ||
| 47 | - @Resource | ||
| 48 | - private OaLeaveMapper leaveMapper; | ||
| 49 | - | ||
| 50 | - private static Map<String,String> taskVariable = ImmutableMap.<String,String>builder() | ||
| 51 | - .put("deptLeaderVerify","deptLeaderApproved") | ||
| 52 | - .put("hrVerify","hrApproved") | ||
| 53 | - .build(); | ||
| 54 | - | ||
| 55 | - public TaskServiceImpl() { | ||
| 56 | - | ||
| 57 | - } | ||
| 58 | - | ||
| 59 | - @Override | ||
| 60 | - public PageResult<TodoTaskRespVO> getTodoTaskPage(TodoTaskPageReqVO pageReqVO) { | ||
| 61 | - final LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); | ||
| 62 | - // TODO @jason:封装一个方法,用于转换成 activiti 的分页对象 | ||
| 63 | - final Pageable pageable = Pageable.of((pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize(), pageReqVO.getPageSize()); | ||
| 64 | - Page<Task> pageTasks = taskRuntime.tasks(pageable); | ||
| 65 | - // TODO @jason:convert 里转换 | ||
| 66 | - List<Task> tasks = pageTasks.getContent(); | ||
| 67 | - int totalItems = pageTasks.getTotalItems(); | ||
| 68 | - final List<TodoTaskRespVO> respVOList = tasks.stream().map(task -> { | ||
| 69 | - TodoTaskRespVO respVO = new TodoTaskRespVO(); | ||
| 70 | - respVO.setId(task.getId()); | ||
| 71 | - final ProcessDefinition definition = repositoryService.getProcessDefinition(task.getProcessDefinitionId()); | ||
| 72 | - respVO.setProcessName(definition.getName()); | ||
| 73 | - respVO.setProcessKey(definition.getKey()); | ||
| 74 | - respVO.setBusinessKey(task.getBusinessKey()); | ||
| 75 | - respVO.setStatus(task.getAssignee() == null ? 1 : 2); | ||
| 76 | - return respVO; | ||
| 77 | - }).collect(Collectors.toList()); | ||
| 78 | - // TODO @jason:要注意泛型哈。 | ||
| 79 | - return new PageResult(respVOList, Long.valueOf(totalItems)); // TODO @jason:(long) 转换即可 | ||
| 80 | - } | ||
| 81 | - | ||
| 82 | - | ||
| 83 | - @Override | ||
| 84 | - public void claimTask(String taskId) { | ||
| 85 | - taskRuntime.claim(new ClaimTaskPayloadBuilder() | ||
| 86 | - .withTaskId(taskId) | ||
| 87 | - .withAssignee(SecurityFrameworkUtils.getLoginUser().getUsername()) | ||
| 88 | - .build()); | ||
| 89 | - } | ||
| 90 | - | ||
| 91 | - @Override | ||
| 92 | - public void getTaskHistory(String taskId) { | ||
| 93 | - final List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery(). | ||
| 94 | - processInstanceId("8e2801fc-1a38-11ec-98ce-74867a13730f").list(); | ||
| 95 | - } | ||
| 96 | - | ||
| 97 | - // TODO @jason:一个方法里,会有多个方法的调用,最好写下对应的注释。这样容易理解 | ||
| 98 | - @Override | ||
| 99 | - @Transactional | ||
| 100 | - public void completeTask(TaskReqVO taskReq) { | ||
| 101 | - final Task task = taskRuntime.task(taskReq.getTaskId()); | ||
| 102 | - | ||
| 103 | - final Map<String, Object> variables = taskReq.getVariables(); | ||
| 104 | - | ||
| 105 | - activitiTaskService.addComment(taskReq.getTaskId(), task.getProcessInstanceId(), taskReq.getComment()); | ||
| 106 | - | ||
| 107 | - taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(taskReq.getTaskId()) | ||
| 108 | - .withVariables(taskReq.getVariables()) | ||
| 109 | - .build()); | ||
| 110 | - | ||
| 111 | -// if(variables.containsValue(Boolean.FALSE)){ | ||
| 112 | -// final String businessKey = task.getBusinessKey(); | ||
| 113 | -// UpdateWrapper<OaLeaveDO> updateWrapper = new UpdateWrapper<>(); | ||
| 114 | -// updateWrapper.eq("id", Long.valueOf(businessKey)); | ||
| 115 | -// OaLeaveDO updateDo = new OaLeaveDO(); | ||
| 116 | -// updateDo.setStatus(2); | ||
| 117 | -// leaveMapper.update(updateDo, updateWrapper); | ||
| 118 | -// } | ||
| 119 | - | ||
| 120 | - } | ||
| 121 | - | ||
| 122 | -// @Override | ||
| 123 | -// public void flowImage(String taskId, HttpServletResponse response) { | ||
| 124 | -// | ||
| 125 | -// final Task task = taskRuntime.task(taskId); | ||
| 126 | -// BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId()); | ||
| 127 | -// final Process process = bpmnModel.getMainProcess(); | ||
| 128 | -// ProcessDefinitionEntity processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult(); | ||
| 129 | -// List<String> activeActivityIds = runtimeService.getActiveActivityIds(executionId); | ||
| 130 | -// List<String> highLightedFlows = getHighLightedFlows(processDefinition, processInstance.getId()); | ||
| 131 | -// ProcessDiagramGenerator diagramGenerator = processEngineConfiguration.getProcessDiagramGenerator(); | ||
| 132 | -// InputStream imageStream =diagramGenerator.generateDiagram(bpmnModel, "png", activeActivityIds, highLightedFlows); | ||
| 133 | -// | ||
| 134 | -// // 输出资源内容到相应对象 | ||
| 135 | -// byte[] b = new byte[1024]; | ||
| 136 | -// int len; | ||
| 137 | -// while ((len = imageStream.read(b, 0, 1024)) != -1) { | ||
| 138 | -// response.getOutputStream().write(b, 0, len); | ||
| 139 | -// } | ||
| 140 | -// } | ||
| 141 | - | ||
| 142 | - @Override | ||
| 143 | - public TaskHandleVO getTaskSteps(TaskQueryReqVO taskQuery) { | ||
| 144 | - TaskHandleVO handleVO = new TaskHandleVO(); | ||
| 145 | - | ||
| 146 | -// String processKey = taskQuery.getProcessKey(); | ||
| 147 | -// if ("leave".equals(processKey)) { | ||
| 148 | -// String businessKey = taskQuery.getBusinessKey(); | ||
| 149 | -// final OaLeaveDO leave = leaveMapper.selectById(Long.valueOf(businessKey)); | ||
| 150 | -// handleVO.setFormObject( OaLeaveConvert.INSTANCE.convert(leave)); | ||
| 151 | -// } | ||
| 152 | - | ||
| 153 | -// | ||
| 154 | -// final String taskDefKey = task.getTaskDefinitionKey(); | ||
| 155 | -// final String variableName = Optional.ofNullable(taskVariable.get(taskDefKey)).orElse(""); | ||
| 156 | -// handleVO.setTaskVariable(variableName); | ||
| 157 | - final Task task = taskRuntime.task(taskQuery.getTaskId()); | ||
| 158 | - | ||
| 159 | - List<TaskStepVO> steps = getTaskSteps(task.getProcessInstanceId()); | ||
| 160 | - | ||
| 161 | - handleVO.setHistoryTask(steps); | ||
| 162 | - return handleVO; | ||
| 163 | - } | ||
| 164 | - | ||
| 165 | - | ||
| 166 | - private List<TaskStepVO> getTaskSteps(String processInstanceId) { | ||
| 167 | - // 获得已完成的活动 | ||
| 168 | - List<HistoricActivityInstance> finished = historyService.createHistoricActivityInstanceQuery() | ||
| 169 | - .processInstanceId(processInstanceId) | ||
| 170 | - .activityType("userTask") | ||
| 171 | - .finished() | ||
| 172 | - .orderByHistoricActivityInstanceStartTime().asc().list(); | ||
| 173 | - // 获得对应的步骤 | ||
| 174 | - List<TaskStepVO> steps = new ArrayList<>(); | ||
| 175 | - finished.forEach(instance -> { | ||
| 176 | - // TODO @jason:放到 convert 里 | ||
| 177 | - TaskStepVO step = new TaskStepVO(); | ||
| 178 | - step.setStepName(instance.getActivityName()); | ||
| 179 | - step.setStartTime(instance.getStartTime()); | ||
| 180 | - step.setEndTime(instance.getEndTime()); | ||
| 181 | - step.setAssignee(instance.getAssignee()); | ||
| 182 | - step.setStatus(1); | ||
| 183 | - // TODO @jason:一般判数组为空,使用 CollUtil.isEmpty 会好点哈。另外,null 时候,不用填写 "" 的哈 | ||
| 184 | - List<Comment> comments = activitiTaskService.getTaskComments(instance.getTaskId()); | ||
| 185 | - if (comments.size() > 0) { | ||
| 186 | - step.setComment(comments.get(0).getFullMessage()); | ||
| 187 | - } else { | ||
| 188 | - step.setComment(""); | ||
| 189 | - } | ||
| 190 | - steps.add(step); | ||
| 191 | - }); | ||
| 192 | - | ||
| 193 | - // 获得未完成的活动 | ||
| 194 | - List<HistoricActivityInstance> unfinished = historyService | ||
| 195 | - .createHistoricActivityInstanceQuery() | ||
| 196 | - .processInstanceId(processInstanceId) | ||
| 197 | - .activityType("userTask") | ||
| 198 | - .unfinished().list(); | ||
| 199 | - // 获得对应的步骤 | ||
| 200 | - // TODO @json:其实已完成和未完成,它们的 convert 的逻辑,是一致的 | ||
| 201 | - for (HistoricActivityInstance instance : unfinished) { | ||
| 202 | - TaskStepVO step = new TaskStepVO(); | ||
| 203 | - step.setStepName(instance.getActivityName()); | ||
| 204 | - step.setStartTime(instance.getStartTime()); | ||
| 205 | - step.setEndTime(instance.getEndTime()); | ||
| 206 | - step.setAssignee(Optional.ofNullable(instance.getAssignee()).orElse("")); | ||
| 207 | - step.setComment(""); | ||
| 208 | - step.setStatus(0); | ||
| 209 | - steps.add(step); | ||
| 210 | - } | ||
| 211 | - return steps; | ||
| 212 | - } | ||
| 213 | - | ||
| 214 | - | ||
| 215 | - @Override | ||
| 216 | - public List<TaskStepVO> getHistorySteps(String processInstanceId) { | ||
| 217 | - return getTaskSteps(processInstanceId); | ||
| 218 | - } | ||
| 219 | - | ||
| 220 | - @Override | ||
| 221 | - public TodoTaskRespVO getTaskFormKey(TaskQueryReqVO taskQuery) { | ||
| 222 | - final Task task = taskRuntime.task(taskQuery.getTaskId()); | ||
| 223 | - // 转换结果 | ||
| 224 | - TodoTaskRespVO respVO = new TodoTaskRespVO(); | ||
| 225 | - respVO.setFormKey(task.getFormKey()); | ||
| 226 | - respVO.setBusinessKey(task.getBusinessKey()); | ||
| 227 | - respVO.setId(task.getId()); | ||
| 228 | - return respVO; | ||
| 229 | - } | ||
| 230 | - | ||
| 231 | -// private List<String> getHighLightedFlows(ProcessDefinitionEntity processDefinition, String processInstanceId) { | ||
| 232 | -// | ||
| 233 | -// List<String> highLightedFlows = new ArrayList<String>(); | ||
| 234 | -// List<HistoricActivityInstance> historicActivityInstances = historyService | ||
| 235 | -// .createHistoricActivityInstanceQuery() | ||
| 236 | -// .processInstanceId(processInstanceId) | ||
| 237 | -// .orderByHistoricActivityInstanceStartTime().asc().list(); | ||
| 238 | -// | ||
| 239 | -// List<String> historicActivityInstanceList = new ArrayList<String>(); | ||
| 240 | -// for (HistoricActivityInstance hai : historicActivityInstances) { | ||
| 241 | -// historicActivityInstanceList.add(hai.getActivityId()); | ||
| 242 | -// } | ||
| 243 | - | ||
| 244 | -// // add current activities to list | ||
| 245 | -// List<String> highLightedActivities = runtimeService.getActiveActivityIds(processInstanceId); | ||
| 246 | -// historicActivityInstanceList.addAll(highLightedActivities); | ||
| 247 | - | ||
| 248 | - // activities and their sequence-flows | ||
| 249 | -// for (ActivityImpl activity : processDefinition.getActivities()) { | ||
| 250 | -// int index = historicActivityInstanceList.indexOf(activity.getId()); | ||
| 251 | -// | ||
| 252 | -// if (index >= 0 && index + 1 < historicActivityInstanceList.size()) { | ||
| 253 | -// List<PvmTransition> pvmTransitionList = activity | ||
| 254 | -// .getOutgoingTransitions(); | ||
| 255 | -// for (PvmTransition pvmTransition : pvmTransitionList) { | ||
| 256 | -// String destinationFlowId = pvmTransition.getDestination().getId(); | ||
| 257 | -// if (destinationFlowId.equals(historicActivityInstanceList.get(index + 1))) { | ||
| 258 | -// highLightedFlows.add(pvmTransition.getId()); | ||
| 259 | -// } | ||
| 260 | -// } | ||
| 261 | -// } | ||
| 262 | -// } | ||
| 263 | -// return highLightedFlows; | ||
| 264 | -// } | ||
| 265 | - | ||
| 266 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmProcessDefinitionController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageItemRespVO; | ||
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageReqVO; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; | ||
| 6 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 7 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 8 | +import io.swagger.annotations.Api; | ||
| 9 | +import io.swagger.annotations.ApiImplicitParam; | ||
| 10 | +import io.swagger.annotations.ApiOperation; | ||
| 11 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 12 | +import org.springframework.validation.annotation.Validated; | ||
| 13 | +import org.springframework.web.bind.annotation.GetMapping; | ||
| 14 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
| 15 | +import org.springframework.web.bind.annotation.RequestParam; | ||
| 16 | +import org.springframework.web.bind.annotation.RestController; | ||
| 17 | + | ||
| 18 | +import javax.annotation.Resource; | ||
| 19 | + | ||
| 20 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||
| 21 | + | ||
| 22 | +@Api(tags = "流程定义") | ||
| 23 | +@RestController | ||
| 24 | +@RequestMapping("/bpm/process-definition") | ||
| 25 | +@Validated | ||
| 26 | +public class BpmProcessDefinitionController { | ||
| 27 | + | ||
| 28 | + @Resource | ||
| 29 | + private BpmProcessDefinitionService bpmDefinitionService; | ||
| 30 | + | ||
| 31 | + @GetMapping ("/page") | ||
| 32 | + @ApiOperation(value = "获得流程定义分页") | ||
| 33 | + @PreAuthorize("@ss.hasPermission('bpm:model:query')") // 暂时使用 model 的权限标识 | ||
| 34 | + public CommonResult<PageResult<BpmProcessDefinitionPageItemRespVO>> getProcessDefinitionPage( | ||
| 35 | + BpmProcessDefinitionPageReqVO pageReqVO) { | ||
| 36 | + return success(bpmDefinitionService.getProcessDefinitionPage(pageReqVO)); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + // TODO 芋艿:需要重写该方法 | ||
| 40 | + @GetMapping(value = "/getStartForm") | ||
| 41 | + public CommonResult<String> getStartForm(@RequestParam("processKey") String processKey){ | ||
| 42 | +// final ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery(). | ||
| 43 | +// processDefinitionKey(processKey).latestVersion().singleResult(); | ||
| 44 | +// processRuntime.processDefinition(processDefinition.getId()).getFormKey(); | ||
| 45 | + // TODO 这样查似乎有问题??, 暂时写死 | ||
| 46 | + return success("/flow/leave/apply"); | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + @GetMapping ("/get-bpmn-xml") | ||
| 50 | + @ApiOperation(value = "获得流程定义的 BPMN XML") | ||
| 51 | + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = String.class) | ||
| 52 | + @PreAuthorize("@ss.hasPermission('bpm:model:query')") // 暂时使用 model 的权限标识 | ||
| 53 | + public CommonResult<String> getProcessDefinitionBpmnXML(@RequestParam("id") String id) { | ||
| 54 | + String bpmnXML = bpmDefinitionService.getProcessDefinitionBpmnXML(id); | ||
| 55 | + return success(bpmnXML); | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/BpmProcessDefinitionPageItemRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +import java.util.Date; | ||
| 10 | + | ||
| 11 | +@ApiModel("流程定义的分页的每一项 Response VO") | ||
| 12 | +@Data | ||
| 13 | +@EqualsAndHashCode(callSuper = true) | ||
| 14 | +@ToString(callSuper = true) | ||
| 15 | +public class BpmProcessDefinitionPageItemRespVO extends BpmProcessDefinitionRespVO { | ||
| 16 | + | ||
| 17 | + @ApiModelProperty(value = "表单名字", example = "请假表单") | ||
| 18 | + private String formName; | ||
| 19 | + | ||
| 20 | + @ApiModelProperty(value = "部署时间", required = true) | ||
| 21 | + private Date deploymentTime; | ||
| 22 | + | ||
| 23 | + | ||
| 24 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/BpmProcessDefinitionPageReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 4 | +import io.swagger.annotations.ApiModel; | ||
| 5 | +import io.swagger.annotations.ApiModelProperty; | ||
| 6 | +import lombok.Data; | ||
| 7 | +import lombok.EqualsAndHashCode; | ||
| 8 | +import lombok.ToString; | ||
| 9 | + | ||
| 10 | +@Data | ||
| 11 | +@ToString(callSuper = true) | ||
| 12 | +@EqualsAndHashCode(callSuper = true) | ||
| 13 | +@ApiModel("流程定义分页 Request VO") | ||
| 14 | +public class BpmProcessDefinitionPageReqVO extends PageParam { | ||
| 15 | + | ||
| 16 | + @ApiModelProperty(value = "标识", example = "process1641042089407", notes = "精准匹配") | ||
| 17 | + private String key; | ||
| 18 | + | ||
| 19 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/BpmProcessDefinitionRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | + | ||
| 7 | +import javax.validation.constraints.NotEmpty; | ||
| 8 | + | ||
| 9 | +@ApiModel("流程定义 Response VO") | ||
| 10 | +@Data | ||
| 11 | +public class BpmProcessDefinitionRespVO { | ||
| 12 | + | ||
| 13 | + @ApiModelProperty(value = "编号", required = true, example = "1024") | ||
| 14 | + private String id; | ||
| 15 | + | ||
| 16 | + @ApiModelProperty(value = "版本", required = true, example = "1") | ||
| 17 | + private Integer version; | ||
| 18 | + | ||
| 19 | + @ApiModelProperty(value = "流程名称", required = true, example = "芋道") | ||
| 20 | + @NotEmpty(message = "流程名称不能为空") | ||
| 21 | + private String name; | ||
| 22 | + | ||
| 23 | + @ApiModelProperty(value = "流程描述", example = "我是描述") | ||
| 24 | + private String description; | ||
| 25 | + | ||
| 26 | + @ApiModelProperty(value = "流程分类", notes = "参见 bpm_model_category 数据字典", example = "1") | ||
| 27 | + @NotEmpty(message = "流程分类不能为空") | ||
| 28 | + private String category; | ||
| 29 | + | ||
| 30 | + @ApiModelProperty(value = "表单编号", example = "1024") | ||
| 31 | + private Long formId; | ||
| 32 | + | ||
| 33 | + @ApiModelProperty(value = "中断状态", required = true, example = "1", notes = "参见 SuspensionState 枚举") | ||
| 34 | + private Integer suspensionState; | ||
| 35 | + | ||
| 36 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/form/WlFormController.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/form/BpmFormController.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.form; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.form; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo.*; | ||
| 4 | -import cn.iocoder.yudao.adminserver.modules.activiti.convert.form.WfFormConvert; | ||
| 5 | -import cn.iocoder.yudao.adminserver.modules.activiti.dal.dataobject.form.WfForm; | ||
| 6 | -import cn.iocoder.yudao.adminserver.modules.activiti.service.form.WfFormService; | 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo.*; |
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.convert.form.BpmFormConvert; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; | ||
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.form.BpmFormService; | ||
| 7 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 7 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 8 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 8 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 9 | -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; | ||
| 10 | -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | ||
| 11 | import io.swagger.annotations.Api; | 9 | import io.swagger.annotations.Api; |
| 12 | import io.swagger.annotations.ApiImplicitParam; | 10 | import io.swagger.annotations.ApiImplicitParam; |
| 13 | import io.swagger.annotations.ApiOperation; | 11 | import io.swagger.annotations.ApiOperation; |
| @@ -16,36 +14,31 @@ import org.springframework.validation.annotation.Validated; | @@ -16,36 +14,31 @@ import org.springframework.validation.annotation.Validated; | ||
| 16 | import org.springframework.web.bind.annotation.*; | 14 | import org.springframework.web.bind.annotation.*; |
| 17 | 15 | ||
| 18 | import javax.annotation.Resource; | 16 | import javax.annotation.Resource; |
| 19 | -import javax.servlet.http.HttpServletResponse; | ||
| 20 | import javax.validation.Valid; | 17 | import javax.validation.Valid; |
| 21 | -import java.io.IOException; | ||
| 22 | -import java.util.Collection; | ||
| 23 | import java.util.List; | 18 | import java.util.List; |
| 24 | 19 | ||
| 25 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 20 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 26 | -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; | ||
| 27 | 21 | ||
| 28 | -// TODO @风里雾里: Os=》Wf,/os 改成 /wl 开头。目前这个模块,咱先定位成给工作流用的 | ||
| 29 | @Api(tags = "动态表单") | 22 | @Api(tags = "动态表单") |
| 30 | @RestController | 23 | @RestController |
| 31 | -@RequestMapping("/wl/form") | 24 | +@RequestMapping("/bpm/form") |
| 32 | @Validated | 25 | @Validated |
| 33 | -public class WlFormController { | 26 | +public class BpmFormController { |
| 34 | 27 | ||
| 35 | @Resource | 28 | @Resource |
| 36 | - private WfFormService formService; | 29 | + private BpmFormService formService; |
| 37 | 30 | ||
| 38 | @PostMapping("/create") | 31 | @PostMapping("/create") |
| 39 | @ApiOperation("创建动态表单") | 32 | @ApiOperation("创建动态表单") |
| 40 | - @PreAuthorize("@ss.hasPermission('os:form:create')") | ||
| 41 | - public CommonResult<Long> createForm(@Valid @RequestBody WfFormCreateReqVO createReqVO) { | 33 | + @PreAuthorize("@ss.hasPermission('bpm:form:create')") |
| 34 | + public CommonResult<Long> createForm(@Valid @RequestBody BpmFormCreateReqVO createReqVO) { | ||
| 42 | return success(formService.createForm(createReqVO)); | 35 | return success(formService.createForm(createReqVO)); |
| 43 | } | 36 | } |
| 44 | 37 | ||
| 45 | @PutMapping("/update") | 38 | @PutMapping("/update") |
| 46 | @ApiOperation("更新动态表单") | 39 | @ApiOperation("更新动态表单") |
| 47 | - @PreAuthorize("@ss.hasPermission('os:form:update')") | ||
| 48 | - public CommonResult<Boolean> updateForm(@Valid @RequestBody WfFormUpdateReqVO updateReqVO) { | 40 | + @PreAuthorize("@ss.hasPermission('bpm:form:update')") |
| 41 | + public CommonResult<Boolean> updateForm(@Valid @RequestBody BpmFormUpdateReqVO updateReqVO) { | ||
| 49 | formService.updateForm(updateReqVO); | 42 | formService.updateForm(updateReqVO); |
| 50 | return success(true); | 43 | return success(true); |
| 51 | } | 44 | } |
| @@ -53,7 +46,7 @@ public class WlFormController { | @@ -53,7 +46,7 @@ public class WlFormController { | ||
| 53 | @DeleteMapping("/delete") | 46 | @DeleteMapping("/delete") |
| 54 | @ApiOperation("删除动态表单") | 47 | @ApiOperation("删除动态表单") |
| 55 | @ApiImplicitParam(name = "id", value = "编号", required = true) | 48 | @ApiImplicitParam(name = "id", value = "编号", required = true) |
| 56 | - @PreAuthorize("@ss.hasPermission('os:form:delete')") | 49 | + @PreAuthorize("@ss.hasPermission('bpm:form:delete')") |
| 57 | public CommonResult<Boolean> deleteForm(@RequestParam("id") Long id) { | 50 | public CommonResult<Boolean> deleteForm(@RequestParam("id") Long id) { |
| 58 | formService.deleteForm(id); | 51 | formService.deleteForm(id); |
| 59 | return success(true); | 52 | return success(true); |
| @@ -62,39 +55,25 @@ public class WlFormController { | @@ -62,39 +55,25 @@ public class WlFormController { | ||
| 62 | @GetMapping("/get") | 55 | @GetMapping("/get") |
| 63 | @ApiOperation("获得动态表单") | 56 | @ApiOperation("获得动态表单") |
| 64 | @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) | 57 | @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) |
| 65 | - @PreAuthorize("@ss.hasPermission('os:form:query')") | ||
| 66 | - public CommonResult<WfFormRespVO> getForm(@RequestParam("id") Long id) { | ||
| 67 | - WfForm form = formService.getForm(id); | ||
| 68 | - return success(WfFormConvert.INSTANCE.convert(form)); | 58 | + @PreAuthorize("@ss.hasPermission('bpm:form:query')") |
| 59 | + public CommonResult<BpmFormRespVO> getForm(@RequestParam("id") Long id) { | ||
| 60 | + BpmFormDO form = formService.getForm(id); | ||
| 61 | + return success(BpmFormConvert.INSTANCE.convert(form)); | ||
| 69 | } | 62 | } |
| 70 | 63 | ||
| 71 | - @GetMapping("/list") | ||
| 72 | - @ApiOperation("获得动态表单列表") | ||
| 73 | - @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) | ||
| 74 | - @PreAuthorize("@ss.hasPermission('os:form:query')") | ||
| 75 | - public CommonResult<List<WfFormRespVO>> getFormList(@RequestParam("ids") Collection<Long> ids) { | ||
| 76 | - List<WfForm> list = formService.getFormList(ids); | ||
| 77 | - return success(WfFormConvert.INSTANCE.convertList(list)); | 64 | + @GetMapping("/list-all-simple") |
| 65 | + @ApiOperation(value = "获得动态表单的精简列表", notes = "用于表单下拉框") | ||
| 66 | + public CommonResult<List<BpmFormSimpleRespVO>> getSimpleForms() { | ||
| 67 | + List<BpmFormDO> list = formService.getFormList(); | ||
| 68 | + return success(BpmFormConvert.INSTANCE.convertList2(list)); | ||
| 78 | } | 69 | } |
| 79 | 70 | ||
| 80 | @GetMapping("/page") | 71 | @GetMapping("/page") |
| 81 | @ApiOperation("获得动态表单分页") | 72 | @ApiOperation("获得动态表单分页") |
| 82 | - @PreAuthorize("@ss.hasPermission('os:form:query')") | ||
| 83 | - public CommonResult<PageResult<WfFormRespVO>> getFormPage(@Valid WfFormPageReqVO pageVO) { | ||
| 84 | - PageResult<WfForm> pageResult = formService.getFormPage(pageVO); | ||
| 85 | - return success(WfFormConvert.INSTANCE.convertPage(pageResult)); | ||
| 86 | - } | ||
| 87 | - | ||
| 88 | - @GetMapping("/export-excel") | ||
| 89 | - @ApiOperation("导出动态表单 Excel") | ||
| 90 | - @PreAuthorize("@ss.hasPermission('os:form:export')") | ||
| 91 | - @OperateLog(type = EXPORT) | ||
| 92 | - public void exportFormExcel(@Valid WfFormExportReqVO exportReqVO, | ||
| 93 | - HttpServletResponse response) throws IOException { | ||
| 94 | - List<WfForm> list = formService.getFormList(exportReqVO); | ||
| 95 | - // 导出 Excel | ||
| 96 | - List<WfFormExcelVO> datas = WfFormConvert.INSTANCE.convertList02(list); | ||
| 97 | - ExcelUtils.write(response, "动态表单.xls", "数据", WfFormExcelVO.class, datas); | 73 | + @PreAuthorize("@ss.hasPermission('bpm:form:query')") |
| 74 | + public CommonResult<PageResult<BpmFormRespVO>> getFormPage(@Valid BpmFormPageReqVO pageVO) { | ||
| 75 | + PageResult<BpmFormDO> pageResult = formService.getFormPage(pageVO); | ||
| 76 | + return success(BpmFormConvert.INSTANCE.convertPage(pageResult)); | ||
| 98 | } | 77 | } |
| 99 | 78 | ||
| 100 | } | 79 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/form/vo/WfFormBaseVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/form/vo/BpmFormBaseVO.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo; |
| 2 | 2 | ||
| 3 | import lombok.*; | 3 | import lombok.*; |
| 4 | import io.swagger.annotations.*; | 4 | import io.swagger.annotations.*; |
| @@ -9,20 +9,17 @@ import javax.validation.constraints.*; | @@ -9,20 +9,17 @@ import javax.validation.constraints.*; | ||
| 9 | * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | 9 | * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 |
| 10 | */ | 10 | */ |
| 11 | @Data | 11 | @Data |
| 12 | -public class WfFormBaseVO { | 12 | +public class BpmFormBaseVO { |
| 13 | 13 | ||
| 14 | - @ApiModelProperty(value = "表单名称", required = true) | 14 | + @ApiModelProperty(value = "表单名称", required = true, example = "芋道") |
| 15 | @NotNull(message = "表单名称不能为空") | 15 | @NotNull(message = "表单名称不能为空") |
| 16 | private String name; | 16 | private String name; |
| 17 | 17 | ||
| 18 | - @ApiModelProperty(value = "商户状态", required = true) | ||
| 19 | - @NotNull(message = "商户状态不能为空") | 18 | + @ApiModelProperty(value = "表单状态", required = true, notes = "参见 CommonStatusEnum 枚举", example = "1") |
| 19 | + @NotNull(message = "表单状态不能为空") | ||
| 20 | private Integer status; | 20 | private Integer status; |
| 21 | 21 | ||
| 22 | - @ApiModelProperty(value = "表单JSON") | ||
| 23 | - private String formJson; | ||
| 24 | - | ||
| 25 | - @ApiModelProperty(value = "备注") | 22 | + @ApiModelProperty(value = "备注", example = "我是备注") |
| 26 | private String remark; | 23 | private String remark; |
| 27 | 24 | ||
| 28 | } | 25 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/form/vo/WfFormCreateReqVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/form/vo/BpmFormCreateReqVO.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo; |
| 2 | 2 | ||
| 3 | import lombok.*; | 3 | import lombok.*; |
| 4 | import io.swagger.annotations.*; | 4 | import io.swagger.annotations.*; |
| 5 | 5 | ||
| 6 | +import javax.validation.constraints.NotNull; | ||
| 7 | +import java.util.List; | ||
| 8 | + | ||
| 6 | @ApiModel("动态表单创建 Request VO") | 9 | @ApiModel("动态表单创建 Request VO") |
| 7 | @Data | 10 | @Data |
| 8 | @EqualsAndHashCode(callSuper = true) | 11 | @EqualsAndHashCode(callSuper = true) |
| 9 | @ToString(callSuper = true) | 12 | @ToString(callSuper = true) |
| 10 | -public class WfFormCreateReqVO extends WfFormBaseVO { | 13 | +public class BpmFormCreateReqVO extends BpmFormBaseVO { |
| 14 | + | ||
| 15 | + @ApiModelProperty(value = "表单的配置", required = true, notes = "JSON 字符串") | ||
| 16 | + @NotNull(message = "表单的配置不能为空") | ||
| 17 | + private String conf; | ||
| 18 | + | ||
| 19 | + @ApiModelProperty(value = "表单项的数组", required = true, notes = "JSON 字符串的数组") | ||
| 20 | + @NotNull(message = "表单项的数组不能为空") | ||
| 21 | + private List<String> fields; | ||
| 11 | 22 | ||
| 12 | } | 23 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/form/vo/BpmFormPageReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 4 | +import io.swagger.annotations.ApiModel; | ||
| 5 | +import io.swagger.annotations.ApiModelProperty; | ||
| 6 | +import lombok.Data; | ||
| 7 | +import lombok.EqualsAndHashCode; | ||
| 8 | +import lombok.ToString; | ||
| 9 | + | ||
| 10 | +@ApiModel("动态表单分页 Request VO") | ||
| 11 | +@Data | ||
| 12 | +@EqualsAndHashCode(callSuper = true) | ||
| 13 | +@ToString(callSuper = true) | ||
| 14 | +public class BpmFormPageReqVO extends PageParam { | ||
| 15 | + | ||
| 16 | + @ApiModelProperty(value = "表单名称", example = "芋道") | ||
| 17 | + private String name; | ||
| 18 | + | ||
| 19 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/form/vo/BpmFormRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +import javax.validation.constraints.NotNull; | ||
| 10 | +import java.util.Date; | ||
| 11 | +import java.util.List; | ||
| 12 | + | ||
| 13 | +@ApiModel("动态表单 Response VO") | ||
| 14 | +@Data | ||
| 15 | +@EqualsAndHashCode(callSuper = true) | ||
| 16 | +@ToString(callSuper = true) | ||
| 17 | +public class BpmFormRespVO extends BpmFormBaseVO { | ||
| 18 | + | ||
| 19 | + @ApiModelProperty(value = "表单编号", required = true, example = "1024") | ||
| 20 | + private Long id; | ||
| 21 | + @ApiModelProperty(value = "表单的配置", required = true, notes = "JSON 字符串") | ||
| 22 | + @NotNull(message = "表单的配置不能为空") | ||
| 23 | + private String conf; | ||
| 24 | + | ||
| 25 | + @ApiModelProperty(value = "表单项的数组", required = true, notes = "JSON 字符串的数组") | ||
| 26 | + @NotNull(message = "表单项的数组不能为空") | ||
| 27 | + private List<String> fields; | ||
| 28 | + | ||
| 29 | + @ApiModelProperty(value = "创建时间", required = true) | ||
| 30 | + private Date createTime; | ||
| 31 | + | ||
| 32 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/form/vo/BpmFormSimpleRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | + | ||
| 7 | +@ApiModel("流程表单精简 Response VO") | ||
| 8 | +@Data | ||
| 9 | +public class BpmFormSimpleRespVO { | ||
| 10 | + | ||
| 11 | + @ApiModelProperty(value = "表单编号", required = true, example = "1024") | ||
| 12 | + private Long id; | ||
| 13 | + | ||
| 14 | + @ApiModelProperty(value = "表单名称", required = true, example = "芋道") | ||
| 15 | + private String name; | ||
| 16 | + | ||
| 17 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/form/vo/WfFormUpdateReqVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/form/vo/BpmFormUpdateReqVO.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo; |
| 2 | 2 | ||
| 3 | import lombok.*; | 3 | import lombok.*; |
| 4 | import io.swagger.annotations.*; | 4 | import io.swagger.annotations.*; |
| 5 | import javax.validation.constraints.*; | 5 | import javax.validation.constraints.*; |
| 6 | +import java.util.List; | ||
| 6 | 7 | ||
| 7 | @ApiModel("动态表单更新 Request VO") | 8 | @ApiModel("动态表单更新 Request VO") |
| 8 | @Data | 9 | @Data |
| 9 | @EqualsAndHashCode(callSuper = true) | 10 | @EqualsAndHashCode(callSuper = true) |
| 10 | @ToString(callSuper = true) | 11 | @ToString(callSuper = true) |
| 11 | -public class WfFormUpdateReqVO extends WfFormBaseVO { | 12 | +public class BpmFormUpdateReqVO extends BpmFormBaseVO { |
| 12 | 13 | ||
| 13 | - @ApiModelProperty(value = "表单编号", required = true) | 14 | + @ApiModelProperty(value = "表单编号", required = true, example = "1024") |
| 14 | @NotNull(message = "表单编号不能为空") | 15 | @NotNull(message = "表单编号不能为空") |
| 15 | private Long id; | 16 | private Long id; |
| 16 | 17 | ||
| 18 | + @ApiModelProperty(value = "表单的配置", required = true, notes = "JSON 字符串") | ||
| 19 | + @NotNull(message = "表单的配置不能为空") | ||
| 20 | + private String conf; | ||
| 21 | + | ||
| 22 | + @ApiModelProperty(value = "表单项的数组", required = true, notes = "JSON 字符串的数组") | ||
| 23 | + @NotNull(message = "表单项的数组不能为空") | ||
| 24 | + private List<String> fields; | ||
| 25 | + | ||
| 17 | } | 26 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/BpmModelController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.model; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo.*; | ||
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.convert.model.BpmModelConvert; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.model.BpmModelService; | ||
| 6 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 7 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 8 | +import cn.iocoder.yudao.framework.common.util.io.IoUtils; | ||
| 9 | +import io.swagger.annotations.Api; | ||
| 10 | +import io.swagger.annotations.ApiImplicitParam; | ||
| 11 | +import io.swagger.annotations.ApiOperation; | ||
| 12 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 13 | +import org.springframework.validation.annotation.Validated; | ||
| 14 | +import org.springframework.web.bind.annotation.*; | ||
| 15 | + | ||
| 16 | +import javax.annotation.Resource; | ||
| 17 | +import javax.validation.Valid; | ||
| 18 | +import java.io.IOException; | ||
| 19 | + | ||
| 20 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||
| 21 | + | ||
| 22 | +@Api(tags = "流程模型") | ||
| 23 | +@RestController | ||
| 24 | +@RequestMapping("/bpm/model") | ||
| 25 | +@Validated | ||
| 26 | +public class BpmModelController { | ||
| 27 | + | ||
| 28 | + @Resource | ||
| 29 | + private BpmModelService bpmModelService; | ||
| 30 | + | ||
| 31 | + @GetMapping("/page") | ||
| 32 | + @ApiOperation(value = "获得模型分页") | ||
| 33 | + public CommonResult<PageResult<BpmModelPageItemRespVO>> getModelPage(ModelPageReqVO pageVO) { | ||
| 34 | + return success(bpmModelService.getModelPage(pageVO)); | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + @GetMapping("/get") | ||
| 38 | + @ApiOperation("获得模型") | ||
| 39 | + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = String.class) | ||
| 40 | + @PreAuthorize("@ss.hasPermission('bpm:model:query')") | ||
| 41 | + public CommonResult<BpmModelRespVO> getModel(@RequestParam("id") String id) { | ||
| 42 | + BpmModelRespVO model = bpmModelService.getModel(id); | ||
| 43 | + return success(model); | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + @PostMapping("/create") | ||
| 47 | + @ApiOperation(value = "新建模型") | ||
| 48 | + @PreAuthorize("@ss.hasPermission('bpm:model:create')") | ||
| 49 | + public CommonResult<String> createModel(@Valid @RequestBody BpmModelCreateReqVO createRetVO) { | ||
| 50 | + return success(bpmModelService.createModel(createRetVO)); | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + @PostMapping("/import") | ||
| 54 | + @ApiOperation(value = "导入模型") | ||
| 55 | + @PreAuthorize("@ss.hasPermission('bpm:model:import')") | ||
| 56 | + public CommonResult<String> importModel(@Valid BpmModeImportReqVO importReqVO) throws IOException { | ||
| 57 | + BpmModelCreateReqVO createReqVO = BpmModelConvert.INSTANCE.convert(importReqVO); | ||
| 58 | + // 读取文件 | ||
| 59 | + createReqVO.setBpmnXml(IoUtils.readUtf8(importReqVO.getBpmnFile().getInputStream(), false)); | ||
| 60 | + return success(bpmModelService.createModel(createReqVO)); | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + @PutMapping("/update") | ||
| 64 | + @ApiOperation(value = "修改模型") | ||
| 65 | + @PreAuthorize("@ss.hasPermission('bpm:model:update')") | ||
| 66 | + public CommonResult<Boolean> updateModel(@Valid @RequestBody BpmModelUpdateReqVO modelVO) { | ||
| 67 | + bpmModelService.updateModel(modelVO); | ||
| 68 | + return success(true); | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + @DeleteMapping("/delete") | ||
| 72 | + @ApiOperation("删除模型") | ||
| 73 | + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = String.class) | ||
| 74 | + @PreAuthorize("@ss.hasPermission('bpm:model:delete')") | ||
| 75 | + public CommonResult<Boolean> deleteModel(@RequestParam("id") String id) { | ||
| 76 | + bpmModelService.deleteModel(id); | ||
| 77 | + return success(true); | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + @PostMapping("/deploy") | ||
| 81 | + @ApiOperation(value = "部署模型") | ||
| 82 | + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = String.class) | ||
| 83 | + @PreAuthorize("@ss.hasPermission('bpm:model:deploy')") | ||
| 84 | + public CommonResult<Boolean> deployModel(@RequestParam("id") String id) { | ||
| 85 | + bpmModelService.deployModel(id); | ||
| 86 | + return success(true); | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + @PutMapping("/update-state") | ||
| 90 | + @ApiOperation(value = "修改模型的状态", notes = "实际更新的部署的流程定义的状态") | ||
| 91 | + @PreAuthorize("@ss.hasPermission('bpm:model:update')") | ||
| 92 | + public CommonResult<Boolean> updateModelState(@Valid @RequestBody BpmModelUpdateStateReqVO reqVO) { | ||
| 93 | + bpmModelService.updateModelState(reqVO.getId(), reqVO.getState()); | ||
| 94 | + return success(true); | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/BpmModeImportReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | +import org.springframework.web.multipart.MultipartFile; | ||
| 9 | + | ||
| 10 | +import javax.validation.constraints.NotNull; | ||
| 11 | + | ||
| 12 | +@ApiModel("流程模型的导入 Request VO") | ||
| 13 | +@Data | ||
| 14 | +@EqualsAndHashCode(callSuper = true) | ||
| 15 | +@ToString(callSuper = true) | ||
| 16 | +public class BpmModeImportReqVO extends BpmModelBaseVO { | ||
| 17 | + | ||
| 18 | + @ApiModelProperty(value = "BPMN 文件", required = true) | ||
| 19 | + @NotNull(message = "BPMN 文件不能为空") | ||
| 20 | + private MultipartFile bpmnFile; | ||
| 21 | + | ||
| 22 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/BpmModelBaseVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModelProperty; | ||
| 4 | +import lombok.Data; | ||
| 5 | + | ||
| 6 | +import javax.validation.constraints.NotEmpty; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | +* 流程模型 Base VO,提供给添加、修改、详细的子 VO 使用 | ||
| 10 | +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | ||
| 11 | +*/ | ||
| 12 | +@Data | ||
| 13 | +public class BpmModelBaseVO { | ||
| 14 | + | ||
| 15 | + @ApiModelProperty(value = "流程标识", required = true, example = "process_yudao") | ||
| 16 | + @NotEmpty(message = "流程标识不能为空") | ||
| 17 | + private String key; | ||
| 18 | + | ||
| 19 | + @ApiModelProperty(value = "流程名称", required = true, example = "芋道") | ||
| 20 | + @NotEmpty(message = "流程名称不能为空") | ||
| 21 | + private String name; | ||
| 22 | + | ||
| 23 | + @ApiModelProperty(value = "流程描述", example = "我是描述") | ||
| 24 | + private String description; | ||
| 25 | + | ||
| 26 | + @ApiModelProperty(value = "流程分类", notes = "参见 bpm_model_category 数据字典", example = "1") | ||
| 27 | + @NotEmpty(message = "流程分类不能为空") | ||
| 28 | + private String category; | ||
| 29 | + | ||
| 30 | + @ApiModelProperty(value = "表单编号", example = "1024") | ||
| 31 | + private Long formId; | ||
| 32 | + | ||
| 33 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/BpmModelCreateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +import javax.validation.constraints.NotEmpty; | ||
| 10 | + | ||
| 11 | +@ApiModel("流程模型的创建 Request VO") | ||
| 12 | +@Data | ||
| 13 | +@EqualsAndHashCode(callSuper = true) | ||
| 14 | +@ToString(callSuper = true) | ||
| 15 | +public class BpmModelCreateReqVO extends BpmModelBaseVO { | ||
| 16 | + | ||
| 17 | + @ApiModelProperty(value = "BPMN XML", required = true) | ||
| 18 | + @NotEmpty(message = "BPMN XML 不能为空") | ||
| 19 | + private String bpmnXml; | ||
| 20 | + | ||
| 21 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/BpmModelPageItemRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +import java.util.Date; | ||
| 10 | + | ||
| 11 | +@ApiModel("流程模型的分页的每一项 Response VO") | ||
| 12 | +@Data | ||
| 13 | +@EqualsAndHashCode(callSuper = true) | ||
| 14 | +@ToString(callSuper = true) | ||
| 15 | +public class BpmModelPageItemRespVO extends BpmModelBaseVO { | ||
| 16 | + | ||
| 17 | + @ApiModelProperty(value = "编号", required = true, example = "1024") | ||
| 18 | + private String id; | ||
| 19 | + | ||
| 20 | + @ApiModelProperty(value = "表单名字", example = "请假表单") | ||
| 21 | + private String formName; | ||
| 22 | + | ||
| 23 | + @ApiModelProperty(value = "创建时间", required = true) | ||
| 24 | + private Date createTime; | ||
| 25 | + | ||
| 26 | + /** | ||
| 27 | + * 最新部署的流程定义 | ||
| 28 | + */ | ||
| 29 | + private ProcessDefinition processDefinition; | ||
| 30 | + | ||
| 31 | + @ApiModel("流程定义") | ||
| 32 | + @Data | ||
| 33 | + public static class ProcessDefinition { | ||
| 34 | + | ||
| 35 | + @ApiModelProperty(value = "编号", required = true, example = "1024") | ||
| 36 | + private String id; | ||
| 37 | + | ||
| 38 | + @ApiModelProperty(value = "版本", required = true, example = "1") | ||
| 39 | + private Integer version; | ||
| 40 | + | ||
| 41 | + @ApiModelProperty(value = "部署时间", required = true) | ||
| 42 | + private Date deploymentTime; | ||
| 43 | + | ||
| 44 | + @ApiModelProperty(value = "中断状态", required = true, example = "1", notes = "参见 SuspensionState 枚举") | ||
| 45 | + private Integer suspensionState; | ||
| 46 | + | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/BpmModelRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +import java.util.Date; | ||
| 10 | + | ||
| 11 | +@ApiModel("流程模型的创建 Request VO") | ||
| 12 | +@Data | ||
| 13 | +@EqualsAndHashCode(callSuper = true) | ||
| 14 | +@ToString(callSuper = true) | ||
| 15 | +public class BpmModelRespVO extends BpmModelBaseVO { | ||
| 16 | + | ||
| 17 | + @ApiModelProperty(value = "编号", required = true, example = "1024") | ||
| 18 | + private String id; | ||
| 19 | + | ||
| 20 | + @ApiModelProperty(value = "BPMN XML", required = true) | ||
| 21 | + private String bpmnXml; | ||
| 22 | + | ||
| 23 | + @ApiModelProperty(value = "创建时间", required = true) | ||
| 24 | + private Date createTime; | ||
| 25 | + | ||
| 26 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/BpmModelUpdateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +import javax.validation.constraints.NotEmpty; | ||
| 10 | + | ||
| 11 | +@ApiModel("流程模型的更新 Request VO") | ||
| 12 | +@Data | ||
| 13 | +@EqualsAndHashCode(callSuper = true) | ||
| 14 | +@ToString(callSuper = true) | ||
| 15 | +public class BpmModelUpdateReqVO extends BpmModelBaseVO { | ||
| 16 | + | ||
| 17 | + @ApiModelProperty(value = "编号", required = true, example = "1024") | ||
| 18 | + @NotEmpty(message = "编号不能为空") | ||
| 19 | + private String id; | ||
| 20 | + | ||
| 21 | + @ApiModelProperty(value = "BPMN XML", required = true) | ||
| 22 | + @NotEmpty(message = "BPMN XML 不能为空") | ||
| 23 | + private String bpmnXml; | ||
| 24 | + | ||
| 25 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/BpmModelUpdateStateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | + | ||
| 7 | +import javax.validation.constraints.NotNull; | ||
| 8 | + | ||
| 9 | +@ApiModel("流程模型更新状态 Request VO") | ||
| 10 | +@Data | ||
| 11 | +public class BpmModelUpdateStateReqVO { | ||
| 12 | + | ||
| 13 | + @ApiModelProperty(value = "编号", required = true, example = "1024") | ||
| 14 | + @NotNull(message = "编号不能为空") | ||
| 15 | + private String id; | ||
| 16 | + | ||
| 17 | + @ApiModelProperty(value = "状态", required = true, example = "1", notes = "见 SuspensionState 枚举") | ||
| 18 | + @NotNull(message = "状态不能为空") | ||
| 19 | + private Integer state; | ||
| 20 | + | ||
| 21 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/model/vo/ModelPageReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 4 | +import io.swagger.annotations.ApiModel; | ||
| 5 | +import io.swagger.annotations.ApiModelProperty; | ||
| 6 | +import lombok.Data; | ||
| 7 | +import lombok.EqualsAndHashCode; | ||
| 8 | +import lombok.ToString; | ||
| 9 | + | ||
| 10 | + | ||
| 11 | +@ApiModel("流程模型分页 Request VO") | ||
| 12 | +@Data | ||
| 13 | +@EqualsAndHashCode(callSuper = true) | ||
| 14 | +@ToString(callSuper = true) | ||
| 15 | +public class ModelPageReqVO extends PageParam { | ||
| 16 | + | ||
| 17 | + @ApiModelProperty(value = "标识", example = "process1641042089407", notes = "精准匹配") | ||
| 18 | + private String key; | ||
| 19 | + | ||
| 20 | + @ApiModelProperty(value = "名字", example = "芋道", notes = "模糊匹配") | ||
| 21 | + private String name; | ||
| 22 | + | ||
| 23 | + @ApiModelProperty(value = "流程分类", notes = "参见 bpm_model_category 数据字典", example = "1") | ||
| 24 | + private String category; | ||
| 25 | + | ||
| 26 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/oa/OaLeaveController.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/OALeaveController.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.oa; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo.*; | ||
| 4 | -import cn.iocoder.yudao.adminserver.modules.activiti.convert.oa.OaLeaveConvert; | ||
| 5 | -import cn.iocoder.yudao.adminserver.modules.activiti.dal.dataobject.oa.OaLeaveDO; | ||
| 6 | -import cn.iocoder.yudao.adminserver.modules.activiti.service.oa.OaLeaveService; | 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.convert.oa.OALeaveConvert; |
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.OALeaveDO; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.OALeaveService; | ||
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.*; | ||
| 7 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 7 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 8 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 8 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 9 | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; | 9 | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| @@ -26,37 +26,35 @@ import java.util.List; | @@ -26,37 +26,35 @@ import java.util.List; | ||
| 26 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 26 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 27 | import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; | 27 | import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; |
| 28 | 28 | ||
| 29 | -// TODO @jason:Oa=》OA 会不会好点,名词缩写哈 | 29 | + |
| 30 | @Api(tags = "请假申请") | 30 | @Api(tags = "请假申请") |
| 31 | @RestController | 31 | @RestController |
| 32 | @RequestMapping("/oa/leave") | 32 | @RequestMapping("/oa/leave") |
| 33 | @Validated | 33 | @Validated |
| 34 | -public class OaLeaveController { | 34 | +public class OALeaveController { |
| 35 | 35 | ||
| 36 | @Resource | 36 | @Resource |
| 37 | - private OaLeaveService leaveService; | ||
| 38 | - | ||
| 39 | - @PostMapping("/create") | ||
| 40 | - @ApiOperation("创建请假申请") | ||
| 41 | - @PreAuthorize("@ss.hasPermission('oa:leave:create')") | ||
| 42 | - public CommonResult<Long> createLeave(@Valid @RequestBody OaLeaveCreateReqVO createReqVO) { | ||
| 43 | - // TODO @芋艿:processKey 自己去理解下。不过得把 leave 变成枚举 | ||
| 44 | - createReqVO.setProcessKey("leave"); | ||
| 45 | - return success(leaveService.createLeave(createReqVO)); | ||
| 46 | - } | 37 | + private OALeaveService leaveService; |
| 38 | + | ||
| 39 | + | ||
| 47 | 40 | ||
| 48 | @PostMapping("/form-key/create") | 41 | @PostMapping("/form-key/create") |
| 49 | @ApiOperation("创建外置请假申请") | 42 | @ApiOperation("创建外置请假申请") |
| 50 | - public CommonResult<Long> createFormKeyLeave(@Valid @RequestBody OaLeaveCreateReqVO createReqVO) { | ||
| 51 | - // TODO @芋艿:processKey 自己去理解下。不过得把 formkey 变成枚举 | ||
| 52 | - createReqVO.setProcessKey("leave-formkey"); | 43 | + public CommonResult<Long> createFormKeyLeave(@Valid @RequestBody OALeaveCreateReqVO createReqVO) { |
| 44 | + // processKey 前台传入 | ||
| 53 | return success(leaveService.createLeave(createReqVO)); | 45 | return success(leaveService.createLeave(createReqVO)); |
| 54 | } | 46 | } |
| 55 | 47 | ||
| 48 | + @GetMapping("/getLeaveApplyMembers") | ||
| 49 | + @ApiOperation("获取本人请假申请流程中审批人员,可先检查这些人员是否存在") | ||
| 50 | + public CommonResult<OALeaveApplyMembersVO> getLeaveApplyMembers() { | ||
| 51 | + return success(leaveService.getLeaveApplyMembers()); | ||
| 52 | + } | ||
| 53 | + | ||
| 56 | @PutMapping("/update") | 54 | @PutMapping("/update") |
| 57 | @ApiOperation("更新请假申请") | 55 | @ApiOperation("更新请假申请") |
| 58 | @PreAuthorize("@ss.hasPermission('oa:leave:update')") | 56 | @PreAuthorize("@ss.hasPermission('oa:leave:update')") |
| 59 | - public CommonResult<Boolean> updateLeave(@Valid @RequestBody OaLeaveUpdateReqVO updateReqVO) { | 57 | + public CommonResult<Boolean> updateLeave(@Valid @RequestBody OALeaveUpdateReqVO updateReqVO) { |
| 60 | leaveService.updateLeave(updateReqVO); | 58 | leaveService.updateLeave(updateReqVO); |
| 61 | return success(true); | 59 | return success(true); |
| 62 | } | 60 | } |
| @@ -74,41 +72,41 @@ public class OaLeaveController { | @@ -74,41 +72,41 @@ public class OaLeaveController { | ||
| 74 | @ApiOperation("获得请假申请") | 72 | @ApiOperation("获得请假申请") |
| 75 | @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) | 73 | @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) |
| 76 | @PreAuthorize("@ss.hasPermission('oa:leave:query')") | 74 | @PreAuthorize("@ss.hasPermission('oa:leave:query')") |
| 77 | - public CommonResult<OaLeaveRespVO> getLeave(@RequestParam("id") Long id) { | ||
| 78 | - OaLeaveDO leave = leaveService.getLeave(id); | ||
| 79 | - return success(OaLeaveConvert.INSTANCE.convert(leave)); | 75 | + public CommonResult<OALeaveRespVO> getLeave(@RequestParam("id") Long id) { |
| 76 | + OALeaveDO leave = leaveService.getLeave(id); | ||
| 77 | + return success(OALeaveConvert.INSTANCE.convert(leave)); | ||
| 80 | } | 78 | } |
| 81 | 79 | ||
| 82 | @GetMapping("/list") | 80 | @GetMapping("/list") |
| 83 | @ApiOperation("获得请假申请列表") | 81 | @ApiOperation("获得请假申请列表") |
| 84 | @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) | 82 | @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) |
| 85 | @PreAuthorize("@ss.hasPermission('oa:leave:query')") | 83 | @PreAuthorize("@ss.hasPermission('oa:leave:query')") |
| 86 | - public CommonResult<List<OaLeaveRespVO>> getLeaveList(@RequestParam("ids") Collection<Long> ids) { | ||
| 87 | - List<OaLeaveDO> list = leaveService.getLeaveList(ids); | ||
| 88 | - return success(OaLeaveConvert.INSTANCE.convertList(list)); | 84 | + public CommonResult<List<OALeaveRespVO>> getLeaveList(@RequestParam("ids") Collection<Long> ids) { |
| 85 | + List<OALeaveDO> list = leaveService.getLeaveList(ids); | ||
| 86 | + return success(OALeaveConvert.INSTANCE.convertList(list)); | ||
| 89 | } | 87 | } |
| 90 | 88 | ||
| 91 | @GetMapping("/page") | 89 | @GetMapping("/page") |
| 92 | @ApiOperation("获得请假申请分页") | 90 | @ApiOperation("获得请假申请分页") |
| 93 | @PreAuthorize("@ss.hasPermission('oa:leave:query')") | 91 | @PreAuthorize("@ss.hasPermission('oa:leave:query')") |
| 94 | - public CommonResult<PageResult<OaLeaveRespVO>> getLeavePage(@Valid OaLeavePageReqVO pageVO) { | 92 | + public CommonResult<PageResult<OALeaveRespVO>> getLeavePage(@Valid OALeavePageReqVO pageVO) { |
| 95 | //值查询自己申请请假 | 93 | //值查询自己申请请假 |
| 96 | // TODO @芋艿:这里的传值,到底前端搞,还是后端搞。 | 94 | // TODO @芋艿:这里的传值,到底前端搞,还是后端搞。 |
| 97 | pageVO.setUserId(SecurityFrameworkUtils.getLoginUser().getUsername()); | 95 | pageVO.setUserId(SecurityFrameworkUtils.getLoginUser().getUsername()); |
| 98 | - PageResult<OaLeaveDO> pageResult = leaveService.getLeavePage(pageVO); | ||
| 99 | - return success(OaLeaveConvert.INSTANCE.convertPage(pageResult)); | 96 | + PageResult<OALeaveDO> pageResult = leaveService.getLeavePage(pageVO); |
| 97 | + return success(OALeaveConvert.INSTANCE.convertPage(pageResult)); | ||
| 100 | } | 98 | } |
| 101 | 99 | ||
| 102 | @GetMapping("/export-excel") | 100 | @GetMapping("/export-excel") |
| 103 | @ApiOperation("导出请假申请 Excel") | 101 | @ApiOperation("导出请假申请 Excel") |
| 104 | @PreAuthorize("@ss.hasPermission('oa:leave:export')") | 102 | @PreAuthorize("@ss.hasPermission('oa:leave:export')") |
| 105 | @OperateLog(type = EXPORT) | 103 | @OperateLog(type = EXPORT) |
| 106 | - public void exportLeaveExcel(@Valid OaLeaveExportReqVO exportReqVO, | 104 | + public void exportLeaveExcel(@Valid OALeaveExportReqVO exportReqVO, |
| 107 | HttpServletResponse response) throws IOException { | 105 | HttpServletResponse response) throws IOException { |
| 108 | - List<OaLeaveDO> list = leaveService.getLeaveList(exportReqVO); | 106 | + List<OALeaveDO> list = leaveService.getLeaveList(exportReqVO); |
| 109 | // 导出 Excel | 107 | // 导出 Excel |
| 110 | - List<OaLeaveExcelVO> datas = OaLeaveConvert.INSTANCE.convertList02(list); | ||
| 111 | - ExcelUtils.write(response, "请假申请.xls", "数据", OaLeaveExcelVO.class, datas); | 108 | + List<OALeaveExcelVO> datas = OALeaveConvert.INSTANCE.convertList02(list); |
| 109 | + ExcelUtils.write(response, "请假申请.xls", "数据", OALeaveExcelVO.class, datas); | ||
| 112 | } | 110 | } |
| 113 | 111 | ||
| 114 | } | 112 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/OALeaveApplyMembersVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Builder; | ||
| 6 | +import lombok.Data; | ||
| 7 | +import lombok.EqualsAndHashCode; | ||
| 8 | +import lombok.ToString; | ||
| 9 | + | ||
| 10 | +@ApiModel("请假申请审批人员 Response VO") | ||
| 11 | +@Data | ||
| 12 | +@Builder | ||
| 13 | +@EqualsAndHashCode | ||
| 14 | +@ToString | ||
| 15 | +public class OALeaveApplyMembersVO { | ||
| 16 | + | ||
| 17 | + @ApiModelProperty(value = "部门的hr") | ||
| 18 | + private String hr; | ||
| 19 | + | ||
| 20 | + @ApiModelProperty(value = "部门的项目经理") | ||
| 21 | + private String pm; | ||
| 22 | + | ||
| 23 | + @ApiModelProperty(value = "部门的部门经理") | ||
| 24 | + private String bm; | ||
| 25 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/oa/vo/OaLeaveBaseVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/OALeaveBaseVO.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo; |
| 2 | 2 | ||
| 3 | import lombok.*; | 3 | import lombok.*; |
| 4 | import java.util.*; | 4 | import java.util.*; |
| @@ -13,7 +13,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ | @@ -13,7 +13,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ | ||
| 13 | * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | 13 | * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 |
| 14 | */ | 14 | */ |
| 15 | @Data | 15 | @Data |
| 16 | -public class OaLeaveBaseVO { | 16 | +public class OALeaveBaseVO { |
| 17 | 17 | ||
| 18 | @ApiModelProperty(value = "流程id") | 18 | @ApiModelProperty(value = "流程id") |
| 19 | private String processInstanceId; | 19 | private String processInstanceId; |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/oa/vo/OaLeaveCreateReqVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/OALeaveCreateReqVO.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo; |
| 2 | 2 | ||
| 3 | import lombok.*; | 3 | import lombok.*; |
| 4 | -import java.util.*; | ||
| 5 | import io.swagger.annotations.*; | 4 | import io.swagger.annotations.*; |
| 6 | -import javax.validation.constraints.*; | 5 | + |
| 6 | +import java.util.Map; | ||
| 7 | 7 | ||
| 8 | @ApiModel("请假申请创建 Request VO") | 8 | @ApiModel("请假申请创建 Request VO") |
| 9 | @Data | 9 | @Data |
| 10 | @EqualsAndHashCode(callSuper = true) | 10 | @EqualsAndHashCode(callSuper = true) |
| 11 | @ToString(callSuper = true) | 11 | @ToString(callSuper = true) |
| 12 | -public class OaLeaveCreateReqVO extends OaLeaveBaseVO { | 12 | +public class OALeaveCreateReqVO extends OALeaveBaseVO { |
| 13 | 13 | ||
| 14 | + /** | ||
| 15 | + * 对应 bpmn 文件 <process> 的 id | ||
| 16 | + */ | ||
| 17 | + @ApiModelProperty(value = "流程key") | ||
| 14 | private String processKey; | 18 | private String processKey; |
| 19 | + | ||
| 20 | + | ||
| 21 | + @ApiModelProperty(value = "流程用户任务的变量") | ||
| 22 | + private Map<String,Object> taskVariables; | ||
| 15 | } | 23 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/oa/vo/OaLeaveExcelVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/OALeaveExcelVO.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo; |
| 2 | 2 | ||
| 3 | import lombok.*; | 3 | import lombok.*; |
| 4 | import java.util.*; | 4 | import java.util.*; |
| @@ -12,7 +12,7 @@ import com.alibaba.excel.annotation.ExcelProperty; | @@ -12,7 +12,7 @@ import com.alibaba.excel.annotation.ExcelProperty; | ||
| 12 | * @author 芋艿 | 12 | * @author 芋艿 |
| 13 | */ | 13 | */ |
| 14 | @Data | 14 | @Data |
| 15 | -public class OaLeaveExcelVO { | 15 | +public class OALeaveExcelVO { |
| 16 | 16 | ||
| 17 | @ExcelProperty("请假表单主键") | 17 | @ExcelProperty("请假表单主键") |
| 18 | private Long id; | 18 | private Long id; |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/oa/vo/OaLeaveExportReqVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/OALeaveExportReqVO.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo; |
| 2 | 2 | ||
| 3 | import lombok.*; | 3 | import lombok.*; |
| 4 | import java.util.*; | 4 | import java.util.*; |
| @@ -10,7 +10,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ | @@ -10,7 +10,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ | ||
| 10 | 10 | ||
| 11 | @ApiModel(value = "请假申请 Excel 导出 Request VO", description = "参数和 OaLeavePageReqVO 是一致的") | 11 | @ApiModel(value = "请假申请 Excel 导出 Request VO", description = "参数和 OaLeavePageReqVO 是一致的") |
| 12 | @Data | 12 | @Data |
| 13 | -public class OaLeaveExportReqVO { | 13 | +public class OALeaveExportReqVO { |
| 14 | 14 | ||
| 15 | @ApiModelProperty(value = "流程id") | 15 | @ApiModelProperty(value = "流程id") |
| 16 | private String processInstanceId; | 16 | private String processInstanceId; |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/oa/vo/OaLeavePageReqVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/OALeavePageReqVO.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo; |
| 2 | 2 | ||
| 3 | import lombok.*; | 3 | import lombok.*; |
| 4 | import java.util.*; | 4 | import java.util.*; |
| @@ -12,7 +12,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ | @@ -12,7 +12,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ | ||
| 12 | @Data | 12 | @Data |
| 13 | @EqualsAndHashCode(callSuper = true) | 13 | @EqualsAndHashCode(callSuper = true) |
| 14 | @ToString(callSuper = true) | 14 | @ToString(callSuper = true) |
| 15 | -public class OaLeavePageReqVO extends PageParam { | 15 | +public class OALeavePageReqVO extends PageParam { |
| 16 | 16 | ||
| 17 | @ApiModelProperty(value = "流程id") | 17 | @ApiModelProperty(value = "流程id") |
| 18 | private String processInstanceId; | 18 | private String processInstanceId; |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/oa/vo/OaLeaveRespVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/OALeaveRespVO.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo; |
| 2 | 2 | ||
| 3 | import lombok.*; | 3 | import lombok.*; |
| 4 | -import java.util.*; | ||
| 5 | import io.swagger.annotations.*; | 4 | import io.swagger.annotations.*; |
| 6 | 5 | ||
| 7 | @ApiModel("请假申请 Response VO") | 6 | @ApiModel("请假申请 Response VO") |
| 8 | @Data | 7 | @Data |
| 9 | @EqualsAndHashCode(callSuper = true) | 8 | @EqualsAndHashCode(callSuper = true) |
| 10 | @ToString(callSuper = true) | 9 | @ToString(callSuper = true) |
| 11 | -public class OaLeaveRespVO extends OaLeaveBaseVO { | 10 | +public class OALeaveRespVO extends OALeaveBaseVO { |
| 12 | 11 | ||
| 13 | @ApiModelProperty(value = "请假表单主键", required = true) | 12 | @ApiModelProperty(value = "请假表单主键", required = true) |
| 14 | private Long id; | 13 | private Long id; |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/oa/vo/OaLeaveUpdateReqVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/OALeaveUpdateReqVO.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo; |
| 2 | 2 | ||
| 3 | import io.swagger.annotations.ApiModel; | 3 | import io.swagger.annotations.ApiModel; |
| 4 | import io.swagger.annotations.ApiModelProperty; | 4 | import io.swagger.annotations.ApiModelProperty; |
| @@ -13,7 +13,7 @@ import java.util.Map; | @@ -13,7 +13,7 @@ import java.util.Map; | ||
| 13 | @Data | 13 | @Data |
| 14 | @EqualsAndHashCode(callSuper = true) | 14 | @EqualsAndHashCode(callSuper = true) |
| 15 | @ToString(callSuper = true) | 15 | @ToString(callSuper = true) |
| 16 | -public class OaLeaveUpdateReqVO extends OaLeaveBaseVO { | 16 | +public class OALeaveUpdateReqVO extends OALeaveBaseVO { |
| 17 | 17 | ||
| 18 | @ApiModelProperty(value = "请假表单主键", required = true) | 18 | @ApiModelProperty(value = "请假表单主键", required = true) |
| 19 | @NotNull(message = "请假表单主键不能为空") | 19 | @NotNull(message = "请假表单主键不能为空") |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.http
0 → 100644
| 1 | +### 请求 /login 接口 => 成功 | ||
| 2 | +POST {{baseUrl}}/bpm/process-instance/create | ||
| 3 | +Content-Type: application/json | ||
| 4 | +tenant-id: 1 | ||
| 5 | +Authorization: Bearer {{token}} | ||
| 6 | + | ||
| 7 | +{ | ||
| 8 | + "processDefinitionId": "leave:7:20ada39c-6c95-11ec-88b1-cacd34981f8e", | ||
| 9 | + "variables": { | ||
| 10 | + "a": 1, | ||
| 11 | + "b": "2" | ||
| 12 | + } | ||
| 13 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.task; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCreateReqVO; | ||
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; | ||
| 5 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 6 | +import io.swagger.annotations.Api; | ||
| 7 | +import io.swagger.annotations.ApiOperation; | ||
| 8 | +import org.springframework.validation.annotation.Validated; | ||
| 9 | +import org.springframework.web.bind.annotation.PostMapping; | ||
| 10 | +import org.springframework.web.bind.annotation.RequestBody; | ||
| 11 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
| 12 | +import org.springframework.web.bind.annotation.RestController; | ||
| 13 | + | ||
| 14 | +import javax.annotation.Resource; | ||
| 15 | +import javax.validation.Valid; | ||
| 16 | + | ||
| 17 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||
| 18 | +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | ||
| 19 | + | ||
| 20 | +@Api(tags = "流程实例") // 流程实例,通过流程定义创建的一次“申请” | ||
| 21 | +@RestController | ||
| 22 | +@RequestMapping("/bpm/process-instance") | ||
| 23 | +@Validated | ||
| 24 | +public class BpmProcessInstanceController { | ||
| 25 | + | ||
| 26 | + @Resource | ||
| 27 | + private BpmProcessInstanceService processInstanceService; | ||
| 28 | + | ||
| 29 | + @PostMapping("/create") | ||
| 30 | + @ApiOperation("新建流程实例") | ||
| 31 | + public CommonResult<String> createProcessInstance(@Valid @RequestBody BpmProcessInstanceCreateReqVO createReqVO) { | ||
| 32 | + return success(processInstanceService.createProcessInstance(getLoginUserId(), createReqVO)); | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceCreateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | + | ||
| 7 | +import javax.validation.constraints.NotEmpty; | ||
| 8 | +import java.util.Map; | ||
| 9 | + | ||
| 10 | +@ApiModel("流程实例的创建 Request VO") | ||
| 11 | +@Data | ||
| 12 | +//@EqualsAndHashCode(callSuper = true) | ||
| 13 | +//@ToString(callSuper = true) | ||
| 14 | +public class BpmProcessInstanceCreateReqVO { | ||
| 15 | + | ||
| 16 | + @ApiModelProperty(value = "流程定义的编号", required = true, example = "1024") | ||
| 17 | + @NotEmpty(message = "流程定义编号不能为空") | ||
| 18 | + private String processDefinitionId; | ||
| 19 | + | ||
| 20 | + @ApiModelProperty(value = "变量实例") | ||
| 21 | + private Map<String, Object> variables; | ||
| 22 | + | ||
| 23 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstanceMyPageReqVO.java
0 → 100644
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/workflow/TaskController.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/TaskController.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.workflow; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.workflow.vo.*; | ||
| 4 | -import cn.iocoder.yudao.adminserver.modules.activiti.service.workflow.TaskService; | 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.*; |
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; | ||
| 5 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 7 | +import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; | ||
| 7 | import io.swagger.annotations.Api; | 8 | import io.swagger.annotations.Api; |
| 8 | import io.swagger.annotations.ApiOperation; | 9 | import io.swagger.annotations.ApiOperation; |
| 9 | import org.springframework.web.bind.annotation.*; | 10 | import org.springframework.web.bind.annotation.*; |
| 10 | 11 | ||
| 11 | import javax.annotation.Resource; | 12 | import javax.annotation.Resource; |
| 13 | +import javax.servlet.http.HttpServletResponse; | ||
| 12 | import javax.validation.Valid; | 14 | import javax.validation.Valid; |
| 15 | +import java.io.IOException; | ||
| 13 | import java.util.List; | 16 | import java.util.List; |
| 14 | 17 | ||
| 15 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 18 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| @@ -21,40 +24,50 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | @@ -21,40 +24,50 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||
| 21 | public class TaskController { | 24 | public class TaskController { |
| 22 | 25 | ||
| 23 | @Resource | 26 | @Resource |
| 24 | - private TaskService taskService; | 27 | + private BpmTaskService bpmTaskService; |
| 25 | 28 | ||
| 26 | @GetMapping("/todo/page") | 29 | @GetMapping("/todo/page") |
| 27 | @ApiOperation("获取待办任务分页") | 30 | @ApiOperation("获取待办任务分页") |
| 28 | public CommonResult<PageResult<TodoTaskRespVO>> getTodoTaskPage(@Valid TodoTaskPageReqVO pageVO) { | 31 | public CommonResult<PageResult<TodoTaskRespVO>> getTodoTaskPage(@Valid TodoTaskPageReqVO pageVO) { |
| 29 | - return success(taskService.getTodoTaskPage(pageVO)); | 32 | + return success(bpmTaskService.getTodoTaskPage(pageVO)); |
| 30 | } | 33 | } |
| 31 | 34 | ||
| 32 | @GetMapping("/claim") | 35 | @GetMapping("/claim") |
| 33 | @ApiOperation("签收任务") | 36 | @ApiOperation("签收任务") |
| 34 | public CommonResult<Boolean> claimTask(@RequestParam("id") String taskId) { | 37 | public CommonResult<Boolean> claimTask(@RequestParam("id") String taskId) { |
| 35 | - taskService.claimTask(taskId); | 38 | + bpmTaskService.claimTask(taskId); |
| 36 | return success(true); | 39 | return success(true); |
| 37 | } | 40 | } |
| 38 | 41 | ||
| 39 | @PostMapping("/task-steps") | 42 | @PostMapping("/task-steps") |
| 40 | public CommonResult<TaskHandleVO> getTaskSteps(@RequestBody TaskQueryReqVO taskQuery) { | 43 | public CommonResult<TaskHandleVO> getTaskSteps(@RequestBody TaskQueryReqVO taskQuery) { |
| 41 | - return success(taskService.getTaskSteps(taskQuery)); | 44 | + return success(bpmTaskService.getTaskSteps(taskQuery)); |
| 42 | } | 45 | } |
| 43 | 46 | ||
| 44 | @PostMapping("/formKey") | 47 | @PostMapping("/formKey") |
| 45 | public CommonResult<TodoTaskRespVO> getTaskFormKey(@RequestBody TaskQueryReqVO taskQuery) { | 48 | public CommonResult<TodoTaskRespVO> getTaskFormKey(@RequestBody TaskQueryReqVO taskQuery) { |
| 46 | - return success(taskService.getTaskFormKey(taskQuery)); | 49 | + return success(bpmTaskService.getTaskFormKey(taskQuery)); |
| 47 | } | 50 | } |
| 48 | 51 | ||
| 49 | @PostMapping("/complete") | 52 | @PostMapping("/complete") |
| 50 | public CommonResult<Boolean> complete(@RequestBody TaskReqVO taskReq) { | 53 | public CommonResult<Boolean> complete(@RequestBody TaskReqVO taskReq) { |
| 51 | - taskService.completeTask(taskReq); | 54 | + bpmTaskService.completeTask(taskReq); |
| 52 | return success(true); | 55 | return success(true); |
| 53 | } | 56 | } |
| 54 | 57 | ||
| 55 | @GetMapping("/process/history-steps") | 58 | @GetMapping("/process/history-steps") |
| 56 | public CommonResult<List<TaskStepVO>> getHistorySteps(@RequestParam("id") String processInstanceId) { | 59 | public CommonResult<List<TaskStepVO>> getHistorySteps(@RequestParam("id") String processInstanceId) { |
| 57 | - return success(taskService.getHistorySteps(processInstanceId)); | 60 | + return success(bpmTaskService.getHistorySteps(processInstanceId)); |
| 61 | + } | ||
| 62 | + | ||
| 63 | + /** | ||
| 64 | + * 返回高亮的流转图SVG | ||
| 65 | + * @param processInstanceId 流程Id | ||
| 66 | + */ | ||
| 67 | + @GetMapping("/process/highlight-img") | ||
| 68 | + public void getHighlightImg(@RequestParam String processInstanceId, HttpServletResponse response) throws IOException { | ||
| 69 | + FileResp fileResp = bpmTaskService.getHighlightImg(processInstanceId); | ||
| 70 | + ServletUtils.writeAttachment(response, fileResp.getFileName(), fileResp.getFileByte()); | ||
| 58 | } | 71 | } |
| 59 | 72 | ||
| 60 | } | 73 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/FileResp.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo; | ||
| 2 | + | ||
| 3 | +import lombok.Data; | ||
| 4 | + | ||
| 5 | +// TODO @Li:1)改成 HighlightImgRespVO 吧。2)swagger 注解要补充;3)fileByte => fileContent | ||
| 6 | +/** | ||
| 7 | + * 文件输出类 | ||
| 8 | + * | ||
| 9 | + * @author yunlongn | ||
| 10 | + */ | ||
| 11 | +@Data | ||
| 12 | +public class FileResp { | ||
| 13 | + | ||
| 14 | + /** | ||
| 15 | + * 文件名字 | ||
| 16 | + */ | ||
| 17 | + private String fileName; | ||
| 18 | + | ||
| 19 | + /** | ||
| 20 | + * 文件输出流 | ||
| 21 | + */ | ||
| 22 | + private byte[] fileByte; | ||
| 23 | + | ||
| 24 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/workflow/vo/TaskHandleVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/TaskHandleVO.java
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/workflow/vo/TaskQueryReqVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/TaskQueryReqVO.java
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/workflow/vo/TaskReqVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/TaskReqVO.java
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/workflow/vo/TaskStepVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/TaskStepVO.java
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/workflow/vo/TodoTaskPageReqVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/TodoTaskPageReqVO.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.workflow.vo; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 4 | import io.swagger.annotations.ApiModel; | 4 | import io.swagger.annotations.ApiModel; |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/controller/workflow/vo/TodoTaskRespVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/TodoTaskRespVO.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.controller.workflow.vo; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo; |
| 2 | 2 | ||
| 3 | import io.swagger.annotations.ApiModel; | 3 | import io.swagger.annotations.ApiModel; |
| 4 | import lombok.Data; | 4 | import lombok.Data; |
| 5 | -import lombok.EqualsAndHashCode; | ||
| 6 | import lombok.ToString; | 5 | import lombok.ToString; |
| 7 | 6 | ||
| 8 | @ApiModel("待办任务 Response VO") | 7 | @ApiModel("待办任务 Response VO") |
| @@ -10,8 +9,13 @@ import lombok.ToString; | @@ -10,8 +9,13 @@ import lombok.ToString; | ||
| 10 | @ToString | 9 | @ToString |
| 11 | public class TodoTaskRespVO { | 10 | public class TodoTaskRespVO { |
| 12 | 11 | ||
| 12 | + // TODO @jason:swagger 注解。这样接口文档才完整哈 | ||
| 13 | + | ||
| 13 | private String id; | 14 | private String id; |
| 14 | 15 | ||
| 16 | + | ||
| 17 | + private String processInstanceId; | ||
| 18 | + | ||
| 15 | /** | 19 | /** |
| 16 | * 1:未签收 | 20 | * 1:未签收 |
| 17 | * 2:已签收 | 21 | * 2:已签收 |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmDefinitionConvert.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageItemRespVO; | ||
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionDO; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; | ||
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefinitionCreateReqDTO; | ||
| 7 | +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | ||
| 8 | +import org.activiti.engine.impl.persistence.entity.SuspensionState; | ||
| 9 | +import org.activiti.engine.repository.Deployment; | ||
| 10 | +import org.activiti.engine.repository.ProcessDefinition; | ||
| 11 | +import org.mapstruct.Mapper; | ||
| 12 | +import org.mapstruct.factory.Mappers; | ||
| 13 | + | ||
| 14 | +import java.util.List; | ||
| 15 | +import java.util.Map; | ||
| 16 | + | ||
| 17 | +/** | ||
| 18 | + * Bpm 流程定义的 Convert | ||
| 19 | + * | ||
| 20 | + * @author yunlong.li | ||
| 21 | + */ | ||
| 22 | +@Mapper | ||
| 23 | +public interface BpmDefinitionConvert { | ||
| 24 | + | ||
| 25 | + BpmDefinitionConvert INSTANCE = Mappers.getMapper(BpmDefinitionConvert.class); | ||
| 26 | + | ||
| 27 | + default List<BpmProcessDefinitionPageItemRespVO> convertList(List<ProcessDefinition> list, Map<String, Deployment> deploymentMap, | ||
| 28 | + Map<String, BpmProcessDefinitionDO> processDefinitionDOMap, Map<Long, BpmFormDO> formMap) { | ||
| 29 | + return CollectionUtils.convertList(list, definition -> { | ||
| 30 | + Deployment deployment = definition.getDeploymentId() != null ? deploymentMap.get(definition.getDeploymentId()) : null; | ||
| 31 | + BpmProcessDefinitionDO definitionDO = processDefinitionDOMap.get(definition.getId()); | ||
| 32 | + BpmFormDO form = definitionDO != null ? formMap.get(definitionDO.getFormId()) : null; | ||
| 33 | + return convert(definition, deployment, definitionDO, form); | ||
| 34 | + }); | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + default BpmProcessDefinitionPageItemRespVO convert(ProcessDefinition bean, Deployment deployment, | ||
| 38 | + BpmProcessDefinitionDO processDefinitionDO, BpmFormDO form) { | ||
| 39 | + BpmProcessDefinitionPageItemRespVO respVO = convert(bean); | ||
| 40 | + respVO.setSuspensionState(bean.isSuspended() ? SuspensionState.SUSPENDED.getStateCode() : SuspensionState.ACTIVE.getStateCode()); | ||
| 41 | + if (deployment != null) { | ||
| 42 | + respVO.setDeploymentTime(deployment.getDeploymentTime()); | ||
| 43 | + } | ||
| 44 | + if (form != null) { | ||
| 45 | + respVO.setFormId(form.getId()); | ||
| 46 | + respVO.setFormName(form.getName()); | ||
| 47 | + } | ||
| 48 | + if (processDefinitionDO != null) { | ||
| 49 | + respVO.setDescription(processDefinitionDO.getDescription()); | ||
| 50 | + } | ||
| 51 | + return respVO; | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + BpmProcessDefinitionPageItemRespVO convert(ProcessDefinition bean); | ||
| 55 | + | ||
| 56 | + BpmProcessDefinitionDO convert2(BpmDefinitionCreateReqDTO bean); | ||
| 57 | + | ||
| 58 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/form/BpmFormConvert.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.convert.form; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo.BpmFormCreateReqVO; | ||
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo.BpmFormRespVO; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo.BpmFormSimpleRespVO; | ||
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo.BpmFormUpdateReqVO; | ||
| 7 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; | ||
| 8 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 9 | +import org.mapstruct.Mapper; | ||
| 10 | +import org.mapstruct.factory.Mappers; | ||
| 11 | + | ||
| 12 | +import java.util.List; | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * 动态表单 Convert | ||
| 16 | + * | ||
| 17 | + * @author 芋艿 | ||
| 18 | + */ | ||
| 19 | +@Mapper | ||
| 20 | +public interface BpmFormConvert { | ||
| 21 | + | ||
| 22 | + BpmFormConvert INSTANCE = Mappers.getMapper(BpmFormConvert.class); | ||
| 23 | + | ||
| 24 | + BpmFormDO convert(BpmFormCreateReqVO bean); | ||
| 25 | + | ||
| 26 | + BpmFormDO convert(BpmFormUpdateReqVO bean); | ||
| 27 | + | ||
| 28 | + BpmFormRespVO convert(BpmFormDO bean); | ||
| 29 | + | ||
| 30 | + List<BpmFormSimpleRespVO> convertList2(List<BpmFormDO> list); | ||
| 31 | + | ||
| 32 | + PageResult<BpmFormRespVO> convertPage(PageResult<BpmFormDO> page); | ||
| 33 | + | ||
| 34 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/model/BpmModelConvert.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.convert.model; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo.*; | ||
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefinitionCreateReqDTO; | ||
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.model.dto.BpmModelMetaInfoRespDTO; | ||
| 7 | +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | ||
| 8 | +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | ||
| 9 | +import org.activiti.engine.impl.persistence.entity.SuspensionState; | ||
| 10 | +import org.activiti.engine.repository.Deployment; | ||
| 11 | +import org.activiti.engine.repository.Model; | ||
| 12 | +import org.activiti.engine.repository.ProcessDefinition; | ||
| 13 | +import org.mapstruct.Mapper; | ||
| 14 | +import org.mapstruct.factory.Mappers; | ||
| 15 | + | ||
| 16 | +import java.util.List; | ||
| 17 | +import java.util.Map; | ||
| 18 | + | ||
| 19 | + | ||
| 20 | +/** | ||
| 21 | + * 流程定义 Convert | ||
| 22 | + * | ||
| 23 | + * @author yunlongn | ||
| 24 | + */ | ||
| 25 | +@Mapper | ||
| 26 | +public interface BpmModelConvert { | ||
| 27 | + | ||
| 28 | + BpmModelConvert INSTANCE = Mappers.getMapper(BpmModelConvert.class); | ||
| 29 | + | ||
| 30 | + default List<BpmModelPageItemRespVO> convertList(List<Model> list, Map<Long, BpmFormDO> formMap, | ||
| 31 | + Map<String, Deployment> deploymentMap, | ||
| 32 | + Map<String, ProcessDefinition> processDefinitionMap) { | ||
| 33 | + return CollectionUtils.convertList(list, model -> { | ||
| 34 | + BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); | ||
| 35 | + BpmFormDO form = metaInfo != null ? formMap.get(metaInfo.getFormId()) : null; | ||
| 36 | + Deployment deployment = model.getDeploymentId() != null ? deploymentMap.get(model.getDeploymentId()) : null; | ||
| 37 | + ProcessDefinition processDefinition = model.getDeploymentId() != null ? processDefinitionMap.get(model.getDeploymentId()) : null; | ||
| 38 | + return convert(model, form, deployment, processDefinition); | ||
| 39 | + }); | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + default BpmModelPageItemRespVO convert(Model model, BpmFormDO form, Deployment deployment, ProcessDefinition processDefinition) { | ||
| 43 | + BpmModelPageItemRespVO modelRespVO = new BpmModelPageItemRespVO(); | ||
| 44 | + modelRespVO.setId(model.getId()); | ||
| 45 | + modelRespVO.setName(model.getName()); | ||
| 46 | + modelRespVO.setKey(model.getKey()); | ||
| 47 | + modelRespVO.setCategory(model.getCategory()); | ||
| 48 | + modelRespVO.setCreateTime(model.getCreateTime()); | ||
| 49 | + BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); | ||
| 50 | + if (metaInfo != null) { | ||
| 51 | + modelRespVO.setDescription(metaInfo.getDescription()); | ||
| 52 | + } | ||
| 53 | + if (form != null) { | ||
| 54 | + modelRespVO.setFormId(form.getId()); | ||
| 55 | + modelRespVO.setFormName(form.getName()); | ||
| 56 | + } | ||
| 57 | + modelRespVO.setProcessDefinition(this.convert(processDefinition)); | ||
| 58 | + if (modelRespVO.getProcessDefinition() != null) { | ||
| 59 | + modelRespVO.getProcessDefinition().setSuspensionState(processDefinition.isSuspended() ? | ||
| 60 | + SuspensionState.SUSPENDED.getStateCode() : SuspensionState.ACTIVE.getStateCode()); | ||
| 61 | + modelRespVO.getProcessDefinition().setDeploymentTime(deployment.getDeploymentTime()); | ||
| 62 | + } | ||
| 63 | + return modelRespVO; | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + default BpmModelRespVO convert(Model model) { | ||
| 67 | + BpmModelRespVO modelRespVO = new BpmModelRespVO(); | ||
| 68 | + modelRespVO.setId(model.getId()); | ||
| 69 | + modelRespVO.setName(model.getName()); | ||
| 70 | + modelRespVO.setKey(model.getKey()); | ||
| 71 | + modelRespVO.setCategory(model.getCategory()); | ||
| 72 | + modelRespVO.setCreateTime(model.getCreateTime()); | ||
| 73 | + BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); | ||
| 74 | + if (metaInfo != null) { | ||
| 75 | + modelRespVO.setFormId(metaInfo.getFormId()); | ||
| 76 | + modelRespVO.setDescription(metaInfo.getDescription()); | ||
| 77 | + } | ||
| 78 | + return modelRespVO; | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + default BpmDefinitionCreateReqDTO convert2(Model model) { | ||
| 82 | + BpmDefinitionCreateReqDTO createReqDTO = new BpmDefinitionCreateReqDTO(); | ||
| 83 | + createReqDTO.setName(model.getName()); | ||
| 84 | + createReqDTO.setKey(model.getKey()); | ||
| 85 | + createReqDTO.setCategory(model.getCategory()); | ||
| 86 | + BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); | ||
| 87 | + if (metaInfo != null) { | ||
| 88 | + createReqDTO.setDescription(metaInfo.getDescription()); | ||
| 89 | + createReqDTO.setFormId(metaInfo.getFormId()); | ||
| 90 | + } | ||
| 91 | + return createReqDTO; | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + default void copy(Model model, BpmModelCreateReqVO bean) { | ||
| 95 | + model.setName(bean.getName()); | ||
| 96 | + model.setKey(bean.getKey()); | ||
| 97 | + model.setCategory(bean.getCategory()); | ||
| 98 | + model.setMetaInfo(JsonUtils.toJsonString(this.buildMetaInfo(bean.getDescription(), bean.getFormId()))); | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + default void copy(Model model, BpmModelUpdateReqVO bean) { | ||
| 102 | + model.setName(bean.getName()); | ||
| 103 | + model.setCategory(bean.getCategory()); | ||
| 104 | + model.setMetaInfo(JsonUtils.toJsonString(this.buildMetaInfo(bean.getDescription(), bean.getFormId()))); | ||
| 105 | + } | ||
| 106 | + | ||
| 107 | + default BpmModelMetaInfoRespDTO buildMetaInfo(String description, Long formId) { | ||
| 108 | + BpmModelMetaInfoRespDTO metaInfo = new BpmModelMetaInfoRespDTO(); | ||
| 109 | + metaInfo.setDescription(description); | ||
| 110 | + metaInfo.setFormId(formId); | ||
| 111 | + return metaInfo; | ||
| 112 | + } | ||
| 113 | + | ||
| 114 | + BpmModelPageItemRespVO.ProcessDefinition convert(ProcessDefinition bean); | ||
| 115 | + | ||
| 116 | + BpmModelCreateReqVO convert(BpmModeImportReqVO bean); | ||
| 117 | + | ||
| 118 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/oa/OALeaveConvert.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.convert.oa; | ||
| 2 | + | ||
| 3 | +import java.util.*; | ||
| 4 | + | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.OALeaveDO; | ||
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.OALeaveCreateReqVO; | ||
| 7 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.OALeaveExcelVO; | ||
| 8 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.OALeaveRespVO; | ||
| 9 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.OALeaveUpdateReqVO; | ||
| 10 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 11 | + | ||
| 12 | +import org.mapstruct.Mapper; | ||
| 13 | +import org.mapstruct.factory.Mappers; | ||
| 14 | + | ||
| 15 | +/** | ||
| 16 | + * 请假申请 Convert | ||
| 17 | + * | ||
| 18 | + * @author 芋艿 | ||
| 19 | + */ | ||
| 20 | +@Mapper | ||
| 21 | +public interface OALeaveConvert { | ||
| 22 | + | ||
| 23 | + OALeaveConvert INSTANCE = Mappers.getMapper(OALeaveConvert.class); | ||
| 24 | + | ||
| 25 | + OALeaveDO convert(OALeaveCreateReqVO bean); | ||
| 26 | + | ||
| 27 | + OALeaveDO convert(OALeaveUpdateReqVO bean); | ||
| 28 | + | ||
| 29 | + OALeaveRespVO convert(OALeaveDO bean); | ||
| 30 | + | ||
| 31 | + List<OALeaveRespVO> convertList(List<OALeaveDO> list); | ||
| 32 | + | ||
| 33 | + PageResult<OALeaveRespVO> convertPage(PageResult<OALeaveDO> page); | ||
| 34 | + | ||
| 35 | + List<OALeaveExcelVO> convertList02(List<OALeaveDO> list); | ||
| 36 | + | ||
| 37 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/package-info.java
0 → 100644
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/workflow/TaskConvert.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.convert.workflow; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.TaskStepVO; | ||
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.TodoTaskRespVO; | ||
| 5 | +import org.activiti.api.task.model.Task; | ||
| 6 | +import org.activiti.engine.history.HistoricActivityInstance; | ||
| 7 | +import org.activiti.engine.repository.ProcessDefinition; | ||
| 8 | +import org.mapstruct.Mapper; | ||
| 9 | +import org.mapstruct.Mapping; | ||
| 10 | +import org.mapstruct.Mappings; | ||
| 11 | +import org.mapstruct.Named; | ||
| 12 | +import org.mapstruct.factory.Mappers; | ||
| 13 | + | ||
| 14 | +@Mapper | ||
| 15 | +public interface TaskConvert { | ||
| 16 | + TaskConvert INSTANCE = Mappers.getMapper(TaskConvert.class); | ||
| 17 | + | ||
| 18 | + @Mappings(value = { | ||
| 19 | + @Mapping(source = "task.id", target = "id"), | ||
| 20 | + @Mapping(source = "task.businessKey", target = "businessKey"), | ||
| 21 | + @Mapping(source = "task.assignee", target = "status",qualifiedByName = "convertAssigneeToStatus"), | ||
| 22 | + @Mapping(source = "definition.name", target = "processName"), | ||
| 23 | + @Mapping(source = "definition.key", target = "processKey"), | ||
| 24 | + @Mapping(source = "definition.id", target = "processInstanceId") | ||
| 25 | + }) | ||
| 26 | + TodoTaskRespVO convert(Task task, ProcessDefinition definition); | ||
| 27 | + | ||
| 28 | + @Mappings(value = { | ||
| 29 | + @Mapping(source = "assignee", target = "status",qualifiedByName = "convertAssigneeToStatus") | ||
| 30 | + }) | ||
| 31 | + TodoTaskRespVO convert(Task task); | ||
| 32 | + | ||
| 33 | + @Named("convertAssigneeToStatus") | ||
| 34 | + default Integer convertAssigneeToStatus(String assignee) { | ||
| 35 | + //TODO 不应该通过 assignee 定义状态 需要定义更多的状态 | ||
| 36 | + return assignee == null ? 1 : 2; | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + @Mappings(value = { | ||
| 40 | + @Mapping(source = "activityName", target = "stepName"), | ||
| 41 | + @Mapping(source = "assignee", target = "assignee") | ||
| 42 | + }) | ||
| 43 | + TaskStepVO convert(HistoricActivityInstance instance); | ||
| 44 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md
0 → 100644
| 1 | +<http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao> |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; | ||
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||
| 5 | +import com.baomidou.mybatisplus.annotation.TableId; | ||
| 6 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
| 7 | +import lombok.*; | ||
| 8 | +import org.activiti.engine.repository.ProcessDefinition; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * Bpm 流程定义的拓展表 | ||
| 12 | + * 主要解决 主要进行 Activiti {@link ProcessDefinition} 不支持拓展字段,所以新建拓展表 | ||
| 13 | + * | ||
| 14 | + * @author 芋道源码 | ||
| 15 | + */ | ||
| 16 | +@TableName(value = "bpm_process_definition", autoResultMap = true) | ||
| 17 | +@Data | ||
| 18 | +@EqualsAndHashCode(callSuper = true) | ||
| 19 | +@ToString(callSuper = true) | ||
| 20 | +@Builder | ||
| 21 | +@NoArgsConstructor | ||
| 22 | +@AllArgsConstructor | ||
| 23 | +public class BpmProcessDefinitionDO extends BaseDO { | ||
| 24 | + | ||
| 25 | + /** | ||
| 26 | + * 编号 | ||
| 27 | + */ | ||
| 28 | + @TableId | ||
| 29 | + private Long id; | ||
| 30 | + /** | ||
| 31 | + * 流程定义的编号 | ||
| 32 | + * | ||
| 33 | + * 关联 {@link ProcessDefinition#getId()} | ||
| 34 | + */ | ||
| 35 | + private String processDefinitionId; | ||
| 36 | + /** | ||
| 37 | + * 描述 | ||
| 38 | + */ | ||
| 39 | + private String description; | ||
| 40 | + /** | ||
| 41 | + * 表单编号 | ||
| 42 | + * | ||
| 43 | + * 关联 {@link BpmFormDO#getId()} | ||
| 44 | + */ | ||
| 45 | + private Long formId; | ||
| 46 | + | ||
| 47 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/dal/dataobject/form/WfForm.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/form/BpmFormDO.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.dal.dataobject.form; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | import com.baomidou.mybatisplus.annotation.TableField; | 4 | import com.baomidou.mybatisplus.annotation.TableField; |
| @@ -15,14 +15,14 @@ import java.util.List; | @@ -15,14 +15,14 @@ import java.util.List; | ||
| 15 | * | 15 | * |
| 16 | * @author 芋道源码 | 16 | * @author 芋道源码 |
| 17 | */ | 17 | */ |
| 18 | -@TableName(value = "wf_form", autoResultMap = true) | 18 | +@TableName(value = "bpm_form", autoResultMap = true) |
| 19 | @Data | 19 | @Data |
| 20 | @EqualsAndHashCode(callSuper = true) | 20 | @EqualsAndHashCode(callSuper = true) |
| 21 | @ToString(callSuper = true) | 21 | @ToString(callSuper = true) |
| 22 | @Builder | 22 | @Builder |
| 23 | @NoArgsConstructor | 23 | @NoArgsConstructor |
| 24 | @AllArgsConstructor | 24 | @AllArgsConstructor |
| 25 | -public class WfForm extends BaseDO { | 25 | +public class BpmFormDO extends BaseDO { |
| 26 | 26 | ||
| 27 | /** | 27 | /** |
| 28 | * 编号 | 28 | * 编号 |
| @@ -38,11 +38,11 @@ public class WfForm extends BaseDO { | @@ -38,11 +38,11 @@ public class WfForm extends BaseDO { | ||
| 38 | */ | 38 | */ |
| 39 | private Integer status; | 39 | private Integer status; |
| 40 | /** | 40 | /** |
| 41 | - * 表单JSON | 41 | + * 表单的配置 |
| 42 | */ | 42 | */ |
| 43 | - private String formJson; | 43 | + private String conf; |
| 44 | /** | 44 | /** |
| 45 | - * 表单配置 | 45 | + * 表单项的数组 |
| 46 | * | 46 | * |
| 47 | * 目前直接将 https://github.com/JakHuang/form-generator 生成的 JSON 串,直接保存 | 47 | * 目前直接将 https://github.com/JakHuang/form-generator 生成的 JSON 串,直接保存 |
| 48 | * 定义:https://github.com/JakHuang/form-generator/issues/46 | 48 | * 定义:https://github.com/JakHuang/form-generator/issues/46 |
| @@ -54,4 +54,4 @@ public class WfForm extends BaseDO { | @@ -54,4 +54,4 @@ public class WfForm extends BaseDO { | ||
| 54 | */ | 54 | */ |
| 55 | private String remark; | 55 | private String remark; |
| 56 | 56 | ||
| 57 | -} | ||
| 58 | \ No newline at end of file | 57 | \ No newline at end of file |
| 58 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/dal/dataobject/form/WfFormData.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/form/BpmFormDataDO.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.dal.dataobject.form; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | import com.baomidou.mybatisplus.annotation.TableField; | 4 | import com.baomidou.mybatisplus.annotation.TableField; |
| @@ -15,14 +15,14 @@ import java.util.Map; | @@ -15,14 +15,14 @@ import java.util.Map; | ||
| 15 | * | 15 | * |
| 16 | * @author 芋道源码 | 16 | * @author 芋道源码 |
| 17 | */ | 17 | */ |
| 18 | -@TableName(value = "wf_form", autoResultMap = true) | 18 | +@TableName(value = "bpm_form_data", autoResultMap = true) |
| 19 | @Data | 19 | @Data |
| 20 | @EqualsAndHashCode(callSuper = true) | 20 | @EqualsAndHashCode(callSuper = true) |
| 21 | @ToString(callSuper = true) | 21 | @ToString(callSuper = true) |
| 22 | @Builder | 22 | @Builder |
| 23 | @NoArgsConstructor | 23 | @NoArgsConstructor |
| 24 | @AllArgsConstructor | 24 | @AllArgsConstructor |
| 25 | -public class WfFormData extends BaseDO { | 25 | +public class BpmFormDataDO extends BaseDO { |
| 26 | 26 | ||
| 27 | /** | 27 | /** |
| 28 | * 编号 | 28 | * 编号 |
| @@ -31,7 +31,7 @@ public class WfFormData extends BaseDO { | @@ -31,7 +31,7 @@ public class WfFormData extends BaseDO { | ||
| 31 | /** | 31 | /** |
| 32 | * 表单编号 | 32 | * 表单编号 |
| 33 | * | 33 | * |
| 34 | - * 关联 {@link WfForm#getId()} | 34 | + * 关联 {@link BpmFormDO#getId()} |
| 35 | */ | 35 | */ |
| 36 | private Long formId; | 36 | private Long formId; |
| 37 | /** | 37 | /** |
| @@ -41,7 +41,7 @@ public class WfFormData extends BaseDO { | @@ -41,7 +41,7 @@ public class WfFormData extends BaseDO { | ||
| 41 | /** | 41 | /** |
| 42 | * 表单配置 | 42 | * 表单配置 |
| 43 | * | 43 | * |
| 44 | - * 冗余 {@link WfForm#getFields()} | 44 | + * 冗余 {@link BpmFormDO#getFields()} |
| 45 | * 主要考虑,表单是可以修改的 | 45 | * 主要考虑,表单是可以修改的 |
| 46 | */ | 46 | */ |
| 47 | @TableField(typeHandler = JacksonTypeHandler.class) | 47 | @TableField(typeHandler = JacksonTypeHandler.class) |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/dal/dataobject/oa/OaLeaveDO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/OALeaveDO.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.dal.dataobject.oa; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave; |
| 2 | 2 | ||
| 3 | import lombok.*; | 3 | import lombok.*; |
| 4 | import java.util.*; | 4 | import java.util.*; |
| @@ -17,7 +17,7 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | @@ -17,7 +17,7 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||
| 17 | @Builder | 17 | @Builder |
| 18 | @NoArgsConstructor | 18 | @NoArgsConstructor |
| 19 | @AllArgsConstructor | 19 | @AllArgsConstructor |
| 20 | -public class OaLeaveDO extends BaseDO { | 20 | +public class OALeaveDO extends BaseDO { |
| 21 | 21 | ||
| 22 | /** | 22 | /** |
| 23 | * 请假表单主键 | 23 | * 请假表单主键 |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/leave/package-info.java
0 → 100644
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/package-info.java
0 → 100644
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionDO; | ||
| 4 | +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||
| 5 | +import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||
| 6 | +import org.apache.ibatis.annotations.Mapper; | ||
| 7 | + | ||
| 8 | +import java.util.Collection; | ||
| 9 | +import java.util.List; | ||
| 10 | + | ||
| 11 | +@Mapper | ||
| 12 | +public interface BpmProcessDefinitionMapper extends BaseMapper<BpmProcessDefinitionDO> { | ||
| 13 | + | ||
| 14 | + default List<BpmProcessDefinitionDO> selectListByProcessDefinitionIds(Collection<String> processDefinitionIds) { | ||
| 15 | + return selectList(new QueryWrapper<BpmProcessDefinitionDO>().in("process_definition_id", processDefinitionIds)); | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/form/BpmFormMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.form; | ||
| 2 | + | ||
| 3 | + | ||
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo.BpmFormPageReqVO; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; | ||
| 6 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 7 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||
| 8 | +import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; | ||
| 9 | +import org.apache.ibatis.annotations.Mapper; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * 动态表单 Mapper | ||
| 13 | + * | ||
| 14 | + * @author 风里雾里 | ||
| 15 | + */ | ||
| 16 | +@Mapper | ||
| 17 | +public interface BpmFormMapper extends BaseMapperX<BpmFormDO> { | ||
| 18 | + | ||
| 19 | + default PageResult<BpmFormDO> selectPage(BpmFormPageReqVO reqVO) { | ||
| 20 | + return selectPage(reqVO, new QueryWrapperX<BpmFormDO>() | ||
| 21 | + .likeIfPresent("name", reqVO.getName()) | ||
| 22 | + .orderByDesc("id")); | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/dal/mysql/oa/OaLeaveMapper.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/oa/OALeaveMapper.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.dal.mysql.oa; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.oa; |
| 2 | 2 | ||
| 3 | import java.util.*; | 3 | import java.util.*; |
| 4 | 4 | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.OALeaveDO; | ||
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.OALeaveExportReqVO; | ||
| 7 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.OALeavePageReqVO; | ||
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 8 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; | 9 | import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; |
| 7 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 10 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 8 | -import cn.iocoder.yudao.adminserver.modules.activiti.dal.dataobject.oa.OaLeaveDO; | ||
| 9 | import org.apache.ibatis.annotations.Mapper; | 11 | import org.apache.ibatis.annotations.Mapper; |
| 10 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo.*; | ||
| 11 | 12 | ||
| 12 | /** | 13 | /** |
| 13 | * 请假申请 Mapper | 14 | * 请假申请 Mapper |
| @@ -15,10 +16,10 @@ import cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo.*; | @@ -15,10 +16,10 @@ import cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo.*; | ||
| 15 | * @author 芋艿 | 16 | * @author 芋艿 |
| 16 | */ | 17 | */ |
| 17 | @Mapper | 18 | @Mapper |
| 18 | -public interface OaLeaveMapper extends BaseMapperX<OaLeaveDO> { | 19 | +public interface OALeaveMapper extends BaseMapperX<OALeaveDO> { |
| 19 | 20 | ||
| 20 | - default PageResult<OaLeaveDO> selectPage(OaLeavePageReqVO reqVO) { | ||
| 21 | - return selectPage(reqVO, new QueryWrapperX<OaLeaveDO>() | 21 | + default PageResult<OALeaveDO> selectPage(OALeavePageReqVO reqVO) { |
| 22 | + return selectPage(reqVO, new QueryWrapperX<OALeaveDO>() | ||
| 22 | .eqIfPresent("process_instance_id", reqVO.getProcessInstanceId()) | 23 | .eqIfPresent("process_instance_id", reqVO.getProcessInstanceId()) |
| 23 | .eqIfPresent("status", reqVO.getStatus()) | 24 | .eqIfPresent("status", reqVO.getStatus()) |
| 24 | .eqIfPresent("user_id", reqVO.getUserId()) | 25 | .eqIfPresent("user_id", reqVO.getUserId()) |
| @@ -30,8 +31,8 @@ public interface OaLeaveMapper extends BaseMapperX<OaLeaveDO> { | @@ -30,8 +31,8 @@ public interface OaLeaveMapper extends BaseMapperX<OaLeaveDO> { | ||
| 30 | .orderByDesc("id") ); | 31 | .orderByDesc("id") ); |
| 31 | } | 32 | } |
| 32 | 33 | ||
| 33 | - default List<OaLeaveDO> selectList(OaLeaveExportReqVO reqVO) { | ||
| 34 | - return selectList(new QueryWrapperX<OaLeaveDO>() | 34 | + default List<OALeaveDO> selectList(OALeaveExportReqVO reqVO) { |
| 35 | + return selectList(new QueryWrapperX<OALeaveDO>() | ||
| 35 | .eqIfPresent("process_instance_id", reqVO.getProcessInstanceId()) | 36 | .eqIfPresent("process_instance_id", reqVO.getProcessInstanceId()) |
| 36 | .eqIfPresent("status", reqVO.getStatus()) | 37 | .eqIfPresent("status", reqVO.getStatus()) |
| 37 | .eqIfPresent("user_id", reqVO.getUserId()) | 38 | .eqIfPresent("user_id", reqVO.getUserId()) |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.enums; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.exception.ErrorCode; | ||
| 4 | + | ||
| 5 | +/** | ||
| 6 | + * 工作流 错误码枚举类 | ||
| 7 | + * | ||
| 8 | + * 工作流系统,使用 1-009-000-000 段 | ||
| 9 | + */ | ||
| 10 | +public interface BpmErrorCodeConstants { | ||
| 11 | + | ||
| 12 | + // ========== 通用流程处理 模块 1-009-000-000 ========== | ||
| 13 | + ErrorCode PROCESS_INSTANCE_NOT_EXISTS = new ErrorCode(1009000001, "流程实例不存在"); | ||
| 14 | + ErrorCode HIGHLIGHT_IMG_ERROR = new ErrorCode(1009000002, "获取高亮流程图异常"); | ||
| 15 | + | ||
| 16 | + // ========== OA 流程模块 1-009-001-000 ========== | ||
| 17 | + ErrorCode OA_LEAVE_NOT_EXISTS = new ErrorCode(1009001001, "请假申请不存在"); | ||
| 18 | + ErrorCode OA_PM_POST_NOT_EXISTS = new ErrorCode(1009001002, "项目经理岗位未设置"); | ||
| 19 | + ErrorCode OA_DEPART_PM_POST_NOT_EXISTS = new ErrorCode(1009001009, "部门的项目经理不存在"); | ||
| 20 | + ErrorCode OA_BM_POST_NOT_EXISTS = new ErrorCode(1009001004, "部门经理岗位未设置"); | ||
| 21 | + ErrorCode OA_DEPART_BM_POST_NOT_EXISTS = new ErrorCode(1009001005, "部门的部门经理不存在"); | ||
| 22 | + ErrorCode OA_HR_POST_NOT_EXISTS = new ErrorCode(1009001006, "HR岗位未设置"); | ||
| 23 | + ErrorCode OA_DAY_LEAVE_ERROR = new ErrorCode(1009001007, "请假天数必须>=1"); | ||
| 24 | + | ||
| 25 | + // ========== 流程模型 1-009-002-000 ========== | ||
| 26 | + ErrorCode MODEL_KEY_EXISTS = new ErrorCode(1009002000, "已经存在流程标识为【{}】的流程"); | ||
| 27 | + ErrorCode MODEL_NOT_EXISTS = new ErrorCode(1009002001, "流程模型不存在"); | ||
| 28 | + ErrorCode MODEL_KEY_VALID = new ErrorCode(1009002002, "流程标识格式不正确,需要以字母或下划线开头,后接任意字母、数字、中划线、下划线、句点!"); | ||
| 29 | + | ||
| 30 | + // ========== 流程定义 1-009-003-000 ========== | ||
| 31 | + ErrorCode PROCESS_DEFINITION_KEY_NOT_MATCH = new ErrorCode(1009003000, "流程定义的标识期望是({}),当前是({}),请修改 BPMN 流程图"); | ||
| 32 | + ErrorCode PROCESS_DEFINITION_NAME_NOT_MATCH = new ErrorCode(1009003001, "流程定义的名字期望是({}),当前是({}),请修改 BPMN 流程图"); | ||
| 33 | + ErrorCode PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1009003002, "流程定义不存在"); | ||
| 34 | + ErrorCode PROCESS_DEFINITION_IS_SUSPENDED = new ErrorCode(1009003002, "流程定义处于挂起状态"); | ||
| 35 | + | ||
| 36 | + // ========== 流程实例 1-009-004-000 ========== | ||
| 37 | + | ||
| 38 | + | ||
| 39 | + // ========== 动态表单模块 1-009-010-000 ========== | ||
| 40 | + ErrorCode FORM_NOT_EXISTS = new ErrorCode(1009010000, "动态表单不存在"); | ||
| 41 | + ErrorCode FORM_FIELD_REPEAT = new ErrorCode(1009010000, "表单项({}) 和 ({}) 使用了相同的字段名({})"); | ||
| 42 | + | ||
| 43 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/FlowStatusEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.enums; | ||
| 2 | + | ||
| 3 | +import lombok.AllArgsConstructor; | ||
| 4 | +import lombok.Getter; | ||
| 5 | + | ||
| 6 | +/** | ||
| 7 | + * 流程状态 | ||
| 8 | + */ | ||
| 9 | +@Getter | ||
| 10 | +@AllArgsConstructor | ||
| 11 | +public enum FlowStatusEnum { | ||
| 12 | + | ||
| 13 | + HANDLE(1, "处理中"), | ||
| 14 | + | ||
| 15 | + PASS(2, "审批通过"), | ||
| 16 | + | ||
| 17 | + REJECTED(3, "审批不通过"); | ||
| 18 | + | ||
| 19 | + /** | ||
| 20 | + * 状态 | ||
| 21 | + */ | ||
| 22 | + private final Integer status; | ||
| 23 | + | ||
| 24 | + | ||
| 25 | + /** | ||
| 26 | + * 描述 | ||
| 27 | + */ | ||
| 28 | + private final String desc; | ||
| 29 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/package-info.java
0 → 100644
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/service/config/UserGroupManagerService.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/config/UserGroupManagerService.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.service.config; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.config; |
| 2 | 2 | ||
| 3 | 3 | ||
| 4 | import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; | 4 | import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/service/config/UserGroupsProvider.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/config/UserGroupsProvider.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.service.config; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.config; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.security.core.LoginUser; | 3 | import cn.iocoder.yudao.framework.security.core.LoginUser; |
| 4 | import org.activiti.api.runtime.shared.security.PrincipalGroupsProvider; | 4 | import org.activiti.api.runtime.shared.security.PrincipalGroupsProvider; |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageItemRespVO; | ||
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageReqVO; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefinitionCreateReqDTO; | ||
| 6 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 7 | +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | ||
| 8 | +import org.activiti.bpmn.model.BpmnModel; | ||
| 9 | +import org.activiti.engine.repository.Deployment; | ||
| 10 | +import org.activiti.engine.repository.ProcessDefinition; | ||
| 11 | + | ||
| 12 | +import javax.validation.Valid; | ||
| 13 | +import java.util.List; | ||
| 14 | +import java.util.Map; | ||
| 15 | +import java.util.Set; | ||
| 16 | + | ||
| 17 | +/** | ||
| 18 | + * 流程定义接口 | ||
| 19 | + * | ||
| 20 | + * @author yunlong.li | ||
| 21 | + * @author ZJQ | ||
| 22 | + */ | ||
| 23 | +public interface BpmProcessDefinitionService { | ||
| 24 | + | ||
| 25 | + /** | ||
| 26 | + * 获得流程定义分页 | ||
| 27 | + * | ||
| 28 | + * @param pageReqVO 分页入参 | ||
| 29 | + * @return 流程定义 Page | ||
| 30 | + */ | ||
| 31 | + PageResult<BpmProcessDefinitionPageItemRespVO> getProcessDefinitionPage(BpmProcessDefinitionPageReqVO pageReqVO); | ||
| 32 | + | ||
| 33 | + /** | ||
| 34 | + * 获得流程定义对应的 BPMN XML | ||
| 35 | + * | ||
| 36 | + * @param id 流程定义编号 | ||
| 37 | + * @return BPMN XML | ||
| 38 | + */ | ||
| 39 | + String getProcessDefinitionBpmnXML(String id); | ||
| 40 | + | ||
| 41 | + /** | ||
| 42 | + * 获得 Bpmn 模型 | ||
| 43 | + * | ||
| 44 | + * @param processDefinitionId 流程定义的编号 | ||
| 45 | + * @return Bpmn 模型 | ||
| 46 | + */ | ||
| 47 | + BpmnModel getBpmnModel(String processDefinitionId); | ||
| 48 | + | ||
| 49 | + /** | ||
| 50 | + * 获得编号对应的 ProcessDefinition | ||
| 51 | + * | ||
| 52 | + * @param id 编号 | ||
| 53 | + * @return 流程定义 | ||
| 54 | + */ | ||
| 55 | + ProcessDefinition getProcessDefinition(String id); | ||
| 56 | + | ||
| 57 | + /** | ||
| 58 | + * 获得 id 对应的 Deployment | ||
| 59 | + * | ||
| 60 | + * @param id 部署编号 | ||
| 61 | + * @return 流程部署 | ||
| 62 | + */ | ||
| 63 | + Deployment getDeployment(String id); | ||
| 64 | + | ||
| 65 | + /** | ||
| 66 | + * 获得 ids 对应的 Deployment 数组 | ||
| 67 | + * | ||
| 68 | + * @param ids 部署编号的数组 | ||
| 69 | + * @return 流程部署的数组 | ||
| 70 | + */ | ||
| 71 | + List<Deployment> getDeployments(Set<String> ids); | ||
| 72 | + | ||
| 73 | + /** | ||
| 74 | + * 获得 ids 对应的 Deployment Map | ||
| 75 | + * | ||
| 76 | + * @param ids 部署编号的数组 | ||
| 77 | + * @return 流程部署 Map | ||
| 78 | + */ | ||
| 79 | + default Map<String, Deployment> getDeploymentMap(Set<String> ids) { | ||
| 80 | + return CollectionUtils.convertMap(getDeployments(ids), Deployment::getId); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + /** | ||
| 84 | + * 获得 deploymentId 对应的 ProcessDefinition | ||
| 85 | + * | ||
| 86 | + * @param deploymentId 部署编号 | ||
| 87 | + * @return 流程定义 | ||
| 88 | + */ | ||
| 89 | + ProcessDefinition getProcessDefinitionByDeploymentId(String deploymentId); | ||
| 90 | + | ||
| 91 | + /** | ||
| 92 | + * 获得 deploymentIds 对应的 ProcessDefinition 数组 | ||
| 93 | + * | ||
| 94 | + * @param deploymentIds 部署编号的数组 | ||
| 95 | + * @return 流程定义的数组 | ||
| 96 | + */ | ||
| 97 | + List<ProcessDefinition> getProcessDefinitionListByDeploymentIds(Set<String> deploymentIds); | ||
| 98 | + | ||
| 99 | + /** | ||
| 100 | + * 创建流程定义 | ||
| 101 | + * | ||
| 102 | + * @param createReqDTO 创建信息 | ||
| 103 | + * @return 流程编号 | ||
| 104 | + */ | ||
| 105 | + String createProcessDefinition(@Valid BpmDefinitionCreateReqDTO createReqDTO); | ||
| 106 | + | ||
| 107 | + /** | ||
| 108 | + * 更新流程定义的挂起状态 | ||
| 109 | + * | ||
| 110 | + * @param id 流程定义的编号 | ||
| 111 | + * @param state 挂起状态 {@link org.activiti.engine.impl.persistence.entity.SuspensionState} | ||
| 112 | + */ | ||
| 113 | + void updateProcessDefinitionState(String id, Integer state); | ||
| 114 | + | ||
| 115 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmDefinitionCreateReqDTO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto; | ||
| 2 | + | ||
| 3 | +import lombok.Data; | ||
| 4 | + | ||
| 5 | +import javax.validation.constraints.NotEmpty; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * 流程定义创建 Request DTO | ||
| 9 | + */ | ||
| 10 | +@Data | ||
| 11 | +public class BpmDefinitionCreateReqDTO { | ||
| 12 | + | ||
| 13 | + /** | ||
| 14 | + * 流程标识 | ||
| 15 | + */ | ||
| 16 | + @NotEmpty(message = "流程标识不能为空") | ||
| 17 | + private String key; | ||
| 18 | + /** | ||
| 19 | + * 流程名称 | ||
| 20 | + */ | ||
| 21 | + @NotEmpty(message = "流程名称不能为空") | ||
| 22 | + private String name; | ||
| 23 | + /** | ||
| 24 | + * 流程描述 | ||
| 25 | + */ | ||
| 26 | + private String description; | ||
| 27 | + /** | ||
| 28 | + * 流程分类 | ||
| 29 | + * 参见 bpm_model_category 数据字典 | ||
| 30 | + */ | ||
| 31 | + @NotEmpty(message = "流程分类不能为空") | ||
| 32 | + private String category; | ||
| 33 | + /** | ||
| 34 | + * BPMN XML | ||
| 35 | + */ | ||
| 36 | + @NotEmpty(message = "BPMN XML 不能为空") | ||
| 37 | + private String bpmnXml; | ||
| 38 | + /** | ||
| 39 | + * 动态表单编号,允许空 | ||
| 40 | + */ | ||
| 41 | + private Long formId; | ||
| 42 | + | ||
| 43 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 4 | +import cn.hutool.core.util.StrUtil; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageItemRespVO; | ||
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageReqVO; | ||
| 7 | +import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmDefinitionConvert; | ||
| 8 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionDO; | ||
| 9 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; | ||
| 10 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmProcessDefinitionMapper; | ||
| 11 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; | ||
| 12 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefinitionCreateReqDTO; | ||
| 13 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.form.BpmFormService; | ||
| 14 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 15 | +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | ||
| 16 | +import cn.iocoder.yudao.framework.common.util.object.PageUtils; | ||
| 17 | +import lombok.extern.slf4j.Slf4j; | ||
| 18 | +import org.activiti.bpmn.converter.BpmnXMLConverter; | ||
| 19 | +import org.activiti.bpmn.model.BpmnModel; | ||
| 20 | +import org.activiti.engine.RepositoryService; | ||
| 21 | +import org.activiti.engine.impl.persistence.entity.SuspensionState; | ||
| 22 | +import org.activiti.engine.repository.Deployment; | ||
| 23 | +import org.activiti.engine.repository.ProcessDefinition; | ||
| 24 | +import org.activiti.engine.repository.ProcessDefinitionQuery; | ||
| 25 | +import org.springframework.stereotype.Service; | ||
| 26 | +import org.springframework.transaction.annotation.Transactional; | ||
| 27 | +import org.springframework.validation.annotation.Validated; | ||
| 28 | + | ||
| 29 | +import javax.annotation.Resource; | ||
| 30 | +import java.util.*; | ||
| 31 | + | ||
| 32 | +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_DEFINITION_KEY_NOT_MATCH; | ||
| 33 | +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_DEFINITION_NAME_NOT_MATCH; | ||
| 34 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||
| 35 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; | ||
| 36 | + | ||
| 37 | +/** | ||
| 38 | + * 流程定义实现 | ||
| 39 | + * 主要进行 Activiti {@link ProcessDefinition} 和 {@link Deployment} 的维护 | ||
| 40 | + * | ||
| 41 | + * @author yunlongn | ||
| 42 | + * @author ZJQ | ||
| 43 | + */ | ||
| 44 | +@Service | ||
| 45 | +@Validated | ||
| 46 | +@Slf4j | ||
| 47 | +public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionService { | ||
| 48 | + | ||
| 49 | + private static final String BPMN_FILE_SUFFIX = ".bpmn"; | ||
| 50 | + | ||
| 51 | + private static final BpmnXMLConverter BPMN_XML_CONVERTER = new BpmnXMLConverter(); | ||
| 52 | + | ||
| 53 | + @Resource | ||
| 54 | + private RepositoryService repositoryService; | ||
| 55 | + @Resource | ||
| 56 | + private BpmFormService bpmFormService; | ||
| 57 | + | ||
| 58 | + @Resource | ||
| 59 | + private BpmProcessDefinitionMapper processDefinitionMapper; | ||
| 60 | + | ||
| 61 | + @Override | ||
| 62 | + public PageResult<BpmProcessDefinitionPageItemRespVO> getProcessDefinitionPage(BpmProcessDefinitionPageReqVO pageVO) { | ||
| 63 | + ProcessDefinitionQuery definitionQuery = repositoryService.createProcessDefinitionQuery(); | ||
| 64 | + if (StrUtil.isNotBlank(pageVO.getKey())) { | ||
| 65 | + definitionQuery.processDefinitionKey(pageVO.getKey()); | ||
| 66 | + } | ||
| 67 | + // 执行查询 | ||
| 68 | + List<ProcessDefinition> processDefinitions = definitionQuery.orderByProcessDefinitionId().desc() | ||
| 69 | + .listPage(PageUtils.getStart(pageVO), pageVO.getPageSize()); | ||
| 70 | + if (CollUtil.isEmpty(processDefinitions)) { | ||
| 71 | + return new PageResult<>(Collections.emptyList(), definitionQuery.count()); | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + // 获得 Deployment Map | ||
| 75 | + Set<String> deploymentIds = new HashSet<>(); | ||
| 76 | + processDefinitions.forEach(definition -> CollectionUtils.addIfNotNull(deploymentIds, definition.getDeploymentId())); | ||
| 77 | + Map<String, Deployment> deploymentMap = getDeploymentMap(deploymentIds); | ||
| 78 | + | ||
| 79 | + // 获得 BpmProcessDefinitionDO Map | ||
| 80 | + List<BpmProcessDefinitionDO> processDefinitionDOs = Collections.emptyList(); | ||
| 81 | + processDefinitionDOs = processDefinitionMapper.selectListByProcessDefinitionIds( | ||
| 82 | + convertList(processDefinitions, ProcessDefinition::getId)); | ||
| 83 | + Map<String, BpmProcessDefinitionDO> processDefinitionDOMap = CollectionUtils.convertMap(processDefinitionDOs, | ||
| 84 | + BpmProcessDefinitionDO::getProcessDefinitionId); | ||
| 85 | + | ||
| 86 | + // 获得 Form Map | ||
| 87 | + Set<Long> formIds = CollectionUtils.convertSet(processDefinitionDOs, BpmProcessDefinitionDO::getFormId); | ||
| 88 | + Map<Long, BpmFormDO> formMap = bpmFormService.getFormMap(formIds); | ||
| 89 | + | ||
| 90 | + // 拼接结果 | ||
| 91 | + long definitionCount = definitionQuery.count(); | ||
| 92 | + return new PageResult<>(BpmDefinitionConvert.INSTANCE.convertList(processDefinitions, deploymentMap, | ||
| 93 | + processDefinitionDOMap, formMap), definitionCount); | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + @Override | ||
| 97 | + public String getProcessDefinitionBpmnXML(String id) { | ||
| 98 | + BpmnModel bpmnModel = repositoryService.getBpmnModel(id); | ||
| 99 | + if (bpmnModel == null) { | ||
| 100 | + return null; | ||
| 101 | + } | ||
| 102 | + byte[] bpmnBytes = BPMN_XML_CONVERTER.convertToXML(bpmnModel); | ||
| 103 | + return StrUtil.utf8Str(bpmnBytes); | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + @Override | ||
| 107 | + public BpmnModel getBpmnModel(String processDefinitionId) { | ||
| 108 | + return repositoryService.getBpmnModel(processDefinitionId); | ||
| 109 | + } | ||
| 110 | + | ||
| 111 | + @Override | ||
| 112 | + public ProcessDefinition getProcessDefinition(String id) { | ||
| 113 | + return repositoryService.getProcessDefinition(id); | ||
| 114 | + } | ||
| 115 | + | ||
| 116 | + @Override | ||
| 117 | + public Deployment getDeployment(String id) { | ||
| 118 | + if (StrUtil.isEmpty(id)) { | ||
| 119 | + return null; | ||
| 120 | + } | ||
| 121 | + return repositoryService.createDeploymentQuery().deploymentId(id).singleResult(); | ||
| 122 | + } | ||
| 123 | + | ||
| 124 | + @Override | ||
| 125 | + public List<Deployment> getDeployments(Set<String> ids) { | ||
| 126 | + if (CollUtil.isEmpty(ids)) { | ||
| 127 | + return Collections.emptyList(); | ||
| 128 | + } | ||
| 129 | + List<Deployment> list = new ArrayList<>(ids.size()); | ||
| 130 | + for (String id : ids) { | ||
| 131 | + CollectionUtils.addIfNotNull(list, getDeployment(id)); | ||
| 132 | + } | ||
| 133 | + return list; | ||
| 134 | + } | ||
| 135 | + | ||
| 136 | + @Override | ||
| 137 | + public ProcessDefinition getProcessDefinitionByDeploymentId(String deploymentId) { | ||
| 138 | + return repositoryService.createProcessDefinitionQuery().deploymentId(deploymentId).singleResult(); | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + @Override | ||
| 142 | + public List<ProcessDefinition> getProcessDefinitionListByDeploymentIds(Set<String> deploymentIds) { | ||
| 143 | + if (CollUtil.isEmpty(deploymentIds)) { | ||
| 144 | + return Collections.emptyList(); | ||
| 145 | + } | ||
| 146 | + return repositoryService.createProcessDefinitionQuery().deploymentIds(deploymentIds).list(); | ||
| 147 | + } | ||
| 148 | + | ||
| 149 | + @Override | ||
| 150 | + @Transactional(rollbackFor = Exception.class) // 因为进行多个 activiti 操作,所以开启事务 | ||
| 151 | + public String createProcessDefinition(BpmDefinitionCreateReqDTO createReqDTO) { | ||
| 152 | + // 创建 Deployment 部署 | ||
| 153 | + Deployment deploy = repositoryService.createDeployment() | ||
| 154 | + .key(createReqDTO.getKey()).name(createReqDTO.getName()).category(createReqDTO.getCategory()) | ||
| 155 | + .addString(createReqDTO.getName() + BPMN_FILE_SUFFIX, createReqDTO.getBpmnXml()) | ||
| 156 | + .deploy(); | ||
| 157 | + | ||
| 158 | + // 设置 ProcessDefinition 的 category 分类 | ||
| 159 | + ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult(); | ||
| 160 | + repositoryService.setProcessDefinitionCategory(definition.getId(), createReqDTO.getCategory()); | ||
| 161 | + // 注意 1,ProcessDefinition 的 key 和 name 是通过 BPMN 中的 <bpmn2:process /> 的 id 和 name 决定 | ||
| 162 | + // 注意 2,目前该项目的设计上,需要保证 Model、Deployment、ProcessDefinition 使用相同的 key,保证关联性。 | ||
| 163 | + // 否则,会导致 ProcessDefinition 的分页无法查询到。 | ||
| 164 | + if (!Objects.equals(definition.getKey(), createReqDTO.getKey())) { | ||
| 165 | + throw exception(PROCESS_DEFINITION_KEY_NOT_MATCH, createReqDTO.getKey(), definition.getKey()); | ||
| 166 | + } | ||
| 167 | + if (!Objects.equals(definition.getName(), createReqDTO.getName())) { | ||
| 168 | + throw exception(PROCESS_DEFINITION_NAME_NOT_MATCH, createReqDTO.getName(), definition.getName()); | ||
| 169 | + } | ||
| 170 | + | ||
| 171 | + // 插入拓展表 | ||
| 172 | + BpmProcessDefinitionDO definitionDO = BpmDefinitionConvert.INSTANCE.convert2(createReqDTO) | ||
| 173 | + .setProcessDefinitionId(definition.getId()); | ||
| 174 | + processDefinitionMapper.insert(definitionDO); | ||
| 175 | + return definition.getId(); | ||
| 176 | + } | ||
| 177 | + | ||
| 178 | + @Override | ||
| 179 | + public void updateProcessDefinitionState(String id, Integer state) { | ||
| 180 | + // 激活 | ||
| 181 | + if (Objects.equals(SuspensionState.ACTIVE.getStateCode(), state)) { | ||
| 182 | + repositoryService.activateProcessDefinitionById(id, true, null); | ||
| 183 | + return; | ||
| 184 | + } | ||
| 185 | + // 挂起 | ||
| 186 | + if (Objects.equals(SuspensionState.SUSPENDED.getStateCode(), state)) { | ||
| 187 | + repositoryService.suspendProcessDefinitionById(id, true, null); | ||
| 188 | + return; | ||
| 189 | + } | ||
| 190 | + log.error("[updateProcessDefinitionState][流程定义({}) 修改未知状态({})]", id, state); | ||
| 191 | + } | ||
| 192 | + | ||
| 193 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/service/form/WfFormService.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/form/BpmFormService.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.service.form; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.form; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo.WfFormCreateReqVO; | ||
| 4 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo.WfFormExportReqVO; | ||
| 5 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo.WfFormPageReqVO; | ||
| 6 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo.WfFormUpdateReqVO; | ||
| 7 | -import cn.iocoder.yudao.adminserver.modules.activiti.dal.dataobject.form.WfForm; | 3 | +import cn.hutool.core.collection.CollUtil; |
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo.BpmFormCreateReqVO; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo.BpmFormPageReqVO; | ||
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo.BpmFormUpdateReqVO; | ||
| 7 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; | ||
| 8 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 8 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 9 | +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | ||
| 10 | +import org.activiti.engine.repository.Model; | ||
| 9 | 11 | ||
| 10 | -import java.util.*; | ||
| 11 | -import javax.validation.*; | 12 | +import javax.validation.Valid; |
| 13 | +import java.util.Collection; | ||
| 14 | +import java.util.Collections; | ||
| 15 | +import java.util.List; | ||
| 16 | +import java.util.Map; | ||
| 12 | 17 | ||
| 13 | 18 | ||
| 14 | /** | 19 | /** |
| 15 | * 动态表单 Service 接口 | 20 | * 动态表单 Service 接口 |
| 16 | * | 21 | * |
| 17 | - * TODO @风里雾里 | 22 | + * @author @风里雾里 |
| 18 | */ | 23 | */ |
| 19 | -public interface WfFormService { | 24 | +public interface BpmFormService { |
| 20 | 25 | ||
| 21 | /** | 26 | /** |
| 22 | * 创建动态表单 | 27 | * 创建动态表单 |
| @@ -24,14 +29,14 @@ public interface WfFormService { | @@ -24,14 +29,14 @@ public interface WfFormService { | ||
| 24 | * @param createReqVO 创建信息 | 29 | * @param createReqVO 创建信息 |
| 25 | * @return 编号 | 30 | * @return 编号 |
| 26 | */ | 31 | */ |
| 27 | - Long createForm(@Valid WfFormCreateReqVO createReqVO); | 32 | + Long createForm(@Valid BpmFormCreateReqVO createReqVO); |
| 28 | 33 | ||
| 29 | /** | 34 | /** |
| 30 | * 更新动态表单 | 35 | * 更新动态表单 |
| 31 | * | 36 | * |
| 32 | * @param updateReqVO 更新信息 | 37 | * @param updateReqVO 更新信息 |
| 33 | */ | 38 | */ |
| 34 | - void updateForm(@Valid WfFormUpdateReqVO updateReqVO); | 39 | + void updateForm(@Valid BpmFormUpdateReqVO updateReqVO); |
| 35 | 40 | ||
| 36 | /** | 41 | /** |
| 37 | * 删除动态表单 | 42 | * 删除动态表单 |
| @@ -46,7 +51,14 @@ public interface WfFormService { | @@ -46,7 +51,14 @@ public interface WfFormService { | ||
| 46 | * @param id 编号 | 51 | * @param id 编号 |
| 47 | * @return 动态表单 | 52 | * @return 动态表单 |
| 48 | */ | 53 | */ |
| 49 | - WfForm getForm(Long id); | 54 | + BpmFormDO getForm(Long id); |
| 55 | + | ||
| 56 | + /** | ||
| 57 | + * 获得动态表单列表 | ||
| 58 | + * | ||
| 59 | + * @return 动态表单列表 | ||
| 60 | + */ | ||
| 61 | + List<BpmFormDO> getFormList(); | ||
| 50 | 62 | ||
| 51 | /** | 63 | /** |
| 52 | * 获得动态表单列表 | 64 | * 获得动态表单列表 |
| @@ -54,22 +66,27 @@ public interface WfFormService { | @@ -54,22 +66,27 @@ public interface WfFormService { | ||
| 54 | * @param ids 编号 | 66 | * @param ids 编号 |
| 55 | * @return 动态表单列表 | 67 | * @return 动态表单列表 |
| 56 | */ | 68 | */ |
| 57 | - List<WfForm> getFormList(Collection<Long> ids); | 69 | + List<BpmFormDO> getFormList(Collection<Long> ids); |
| 58 | 70 | ||
| 59 | /** | 71 | /** |
| 60 | - * 获得动态表单分页 | 72 | + * 获得动态表单 Map |
| 61 | * | 73 | * |
| 62 | - * @param pageReqVO 分页查询 | ||
| 63 | - * @return 动态表单分页 | 74 | + * @param ids 编号 |
| 75 | + * @return 动态表单 Map | ||
| 64 | */ | 76 | */ |
| 65 | - PageResult<WfForm> getFormPage(WfFormPageReqVO pageReqVO); | 77 | + default Map<Long, BpmFormDO> getFormMap(Collection<Long> ids) { |
| 78 | + if (CollUtil.isEmpty(ids)) { | ||
| 79 | + return Collections.emptyMap(); | ||
| 80 | + } | ||
| 81 | + return CollectionUtils.convertMap(this.getFormList(ids), BpmFormDO::getId); | ||
| 82 | + } | ||
| 66 | 83 | ||
| 67 | /** | 84 | /** |
| 68 | - * 获得动态表单列表, 用于 Excel 导出 | 85 | + * 获得动态表单分页 |
| 69 | * | 86 | * |
| 70 | - * @param exportReqVO 查询条件 | ||
| 71 | - * @return 动态表单列表 | 87 | + * @param pageReqVO 分页查询 |
| 88 | + * @return 动态表单分页 | ||
| 72 | */ | 89 | */ |
| 73 | - List<WfForm> getFormList(WfFormExportReqVO exportReqVO); | 90 | + PageResult<BpmFormDO> getFormPage(BpmFormPageReqVO pageReqVO); |
| 74 | 91 | ||
| 75 | } | 92 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/form/dto/BpmFormFieldRespDTO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.form.dto; | ||
| 2 | + | ||
| 3 | +import com.fasterxml.jackson.annotation.JsonProperty; | ||
| 4 | +import lombok.Data; | ||
| 5 | + | ||
| 6 | +/** | ||
| 7 | + * Bpm 表单的 Field 表单项 Response DTO | ||
| 8 | + * 字段的定义,可见 https://github.com/JakHuang/form-generator/issues/46 文档 | ||
| 9 | + * | ||
| 10 | + * @author 芋道源码 | ||
| 11 | + */ | ||
| 12 | +@Data | ||
| 13 | +public class BpmFormFieldRespDTO { | ||
| 14 | + | ||
| 15 | + /** | ||
| 16 | + * 表单标题 | ||
| 17 | + */ | ||
| 18 | + private String label; | ||
| 19 | + /** | ||
| 20 | + * 表单字段的属性名,可自定义 | ||
| 21 | + */ | ||
| 22 | + @JsonProperty(value = "vModel") | ||
| 23 | + private String vModel; | ||
| 24 | + | ||
| 25 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/service/form/impl/WfFormServiceImpl.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/form/impl/BpmFormServiceImpl.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.service.form.impl; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.form.impl; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo.WfFormCreateReqVO; | ||
| 4 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo.WfFormExportReqVO; | ||
| 5 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo.WfFormPageReqVO; | ||
| 6 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.form.vo.WfFormUpdateReqVO; | ||
| 7 | -import cn.iocoder.yudao.adminserver.modules.activiti.convert.form.WfFormConvert; | ||
| 8 | -import cn.iocoder.yudao.adminserver.modules.activiti.dal.dataobject.form.WfForm; | ||
| 9 | -import cn.iocoder.yudao.adminserver.modules.activiti.dal.mysql.form.WfFormMapper; | ||
| 10 | -import cn.iocoder.yudao.adminserver.modules.activiti.service.form.WfFormService; | 3 | +import cn.hutool.core.lang.Assert; |
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo.BpmFormCreateReqVO; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo.BpmFormPageReqVO; | ||
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.form.vo.BpmFormUpdateReqVO; | ||
| 7 | +import cn.iocoder.yudao.adminserver.modules.bpm.convert.form.BpmFormConvert; | ||
| 8 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; | ||
| 9 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.form.BpmFormMapper; | ||
| 10 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.form.BpmFormService; | ||
| 11 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.form.dto.BpmFormFieldRespDTO; | ||
| 11 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 12 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 13 | +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | ||
| 12 | import org.springframework.stereotype.Service; | 14 | import org.springframework.stereotype.Service; |
| 13 | import org.springframework.validation.annotation.Validated; | 15 | import org.springframework.validation.annotation.Validated; |
| 14 | 16 | ||
| 15 | import javax.annotation.Resource; | 17 | import javax.annotation.Resource; |
| 16 | import java.util.Collection; | 18 | import java.util.Collection; |
| 19 | +import java.util.HashMap; | ||
| 17 | import java.util.List; | 20 | import java.util.List; |
| 21 | +import java.util.Map; | ||
| 18 | 22 | ||
| 19 | -import static cn.iocoder.yudao.adminserver.modules.activiti.enums.form.WfFormErrorCodeConstants.FORM_NOT_EXISTS; | 23 | +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.FORM_FIELD_REPEAT; |
| 24 | +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.FORM_NOT_EXISTS; | ||
| 20 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 25 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 21 | 26 | ||
| 22 | /** | 27 | /** |
| 23 | * 动态表单 Service 实现类 | 28 | * 动态表单 Service 实现类 |
| 24 | * | 29 | * |
| 25 | - * TODO @风里雾里 | 30 | + * @author 风里雾里 |
| 26 | */ | 31 | */ |
| 27 | @Service | 32 | @Service |
| 28 | @Validated | 33 | @Validated |
| 29 | -public class WfFormServiceImpl implements WfFormService { | 34 | +public class BpmFormServiceImpl implements BpmFormService { |
| 30 | 35 | ||
| 31 | @Resource | 36 | @Resource |
| 32 | - private WfFormMapper formMapper; | 37 | + private BpmFormMapper formMapper; |
| 33 | 38 | ||
| 34 | @Override | 39 | @Override |
| 35 | - public Long createForm(WfFormCreateReqVO createReqVO) { | 40 | + public Long createForm(BpmFormCreateReqVO createReqVO) { |
| 41 | + this.checkFields(createReqVO.getFields()); | ||
| 36 | // 插入 | 42 | // 插入 |
| 37 | - WfForm form = WfFormConvert.INSTANCE.convert(createReqVO); | 43 | + BpmFormDO form = BpmFormConvert.INSTANCE.convert(createReqVO); |
| 38 | formMapper.insert(form); | 44 | formMapper.insert(form); |
| 39 | // 返回 | 45 | // 返回 |
| 40 | return form.getId(); | 46 | return form.getId(); |
| 41 | } | 47 | } |
| 42 | 48 | ||
| 43 | @Override | 49 | @Override |
| 44 | - public void updateForm(WfFormUpdateReqVO updateReqVO) { | 50 | + public void updateForm(BpmFormUpdateReqVO updateReqVO) { |
| 51 | + this.checkFields(updateReqVO.getFields()); | ||
| 45 | // 校验存在 | 52 | // 校验存在 |
| 46 | this.validateFormExists(updateReqVO.getId()); | 53 | this.validateFormExists(updateReqVO.getId()); |
| 47 | // 更新 | 54 | // 更新 |
| 48 | - WfForm updateObj = WfFormConvert.INSTANCE.convert(updateReqVO); | 55 | + BpmFormDO updateObj = BpmFormConvert.INSTANCE.convert(updateReqVO); |
| 49 | formMapper.updateById(updateObj); | 56 | formMapper.updateById(updateObj); |
| 50 | } | 57 | } |
| 51 | 58 | ||
| @@ -64,23 +71,43 @@ public class WfFormServiceImpl implements WfFormService { | @@ -64,23 +71,43 @@ public class WfFormServiceImpl implements WfFormService { | ||
| 64 | } | 71 | } |
| 65 | 72 | ||
| 66 | @Override | 73 | @Override |
| 67 | - public WfForm getForm(Long id) { | 74 | + public BpmFormDO getForm(Long id) { |
| 68 | return formMapper.selectById(id); | 75 | return formMapper.selectById(id); |
| 69 | } | 76 | } |
| 70 | 77 | ||
| 71 | @Override | 78 | @Override |
| 72 | - public List<WfForm> getFormList(Collection<Long> ids) { | 79 | + public List<BpmFormDO> getFormList() { |
| 80 | + return formMapper.selectList(); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + @Override | ||
| 84 | + public List<BpmFormDO> getFormList(Collection<Long> ids) { | ||
| 73 | return formMapper.selectBatchIds(ids); | 85 | return formMapper.selectBatchIds(ids); |
| 74 | } | 86 | } |
| 75 | 87 | ||
| 76 | @Override | 88 | @Override |
| 77 | - public PageResult<WfForm> getFormPage(WfFormPageReqVO pageReqVO) { | 89 | + public PageResult<BpmFormDO> getFormPage(BpmFormPageReqVO pageReqVO) { |
| 78 | return formMapper.selectPage(pageReqVO); | 90 | return formMapper.selectPage(pageReqVO); |
| 79 | } | 91 | } |
| 80 | 92 | ||
| 81 | - @Override | ||
| 82 | - public List<WfForm> getFormList(WfFormExportReqVO exportReqVO) { | ||
| 83 | - return formMapper.selectList(exportReqVO); | 93 | + /** |
| 94 | + * 校验 Field,避免 field 重复 | ||
| 95 | + * | ||
| 96 | + * @param fields field 数组 | ||
| 97 | + */ | ||
| 98 | + private void checkFields(List<String> fields) { | ||
| 99 | + Map<String, String> fieldMap = new HashMap<>(); // key 是 vModel,value 是 label | ||
| 100 | + for (String field : fields) { | ||
| 101 | + BpmFormFieldRespDTO fieldDTO = JsonUtils.parseObject(field, BpmFormFieldRespDTO.class); | ||
| 102 | + Assert.notNull(fieldDTO); | ||
| 103 | + String oldLabel = fieldMap.put(fieldDTO.getVModel(), fieldDTO.getLabel()); | ||
| 104 | + // 如果不存在,则直接返回 | ||
| 105 | + if (oldLabel == null) { | ||
| 106 | + continue; | ||
| 107 | + } | ||
| 108 | + // 如果存在,则报错 | ||
| 109 | + throw exception(FORM_FIELD_REPEAT, oldLabel, fieldDTO.getLabel(), fieldDTO.getVModel()); | ||
| 110 | + } | ||
| 84 | } | 111 | } |
| 85 | 112 | ||
| 86 | } | 113 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/BpmModelService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.model; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo.*; | ||
| 4 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 5 | + | ||
| 6 | +import javax.validation.Valid; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * 流程模型接口 | ||
| 10 | + * | ||
| 11 | + * @author yunlongn | ||
| 12 | + */ | ||
| 13 | +public interface BpmModelService { | ||
| 14 | + | ||
| 15 | + /** | ||
| 16 | + * 获得流程模型分页 | ||
| 17 | + * | ||
| 18 | + * @param pageVO 分页查询 | ||
| 19 | + * @return 流程模型分页 | ||
| 20 | + */ | ||
| 21 | + PageResult<BpmModelPageItemRespVO> getModelPage(ModelPageReqVO pageVO); | ||
| 22 | + | ||
| 23 | + /** | ||
| 24 | + * 获得流程模块 | ||
| 25 | + * | ||
| 26 | + * @param id 编号 | ||
| 27 | + * @return 流程模型 | ||
| 28 | + */ | ||
| 29 | + BpmModelRespVO getModel(String id); | ||
| 30 | + | ||
| 31 | + /** | ||
| 32 | + * 创建流程模型 | ||
| 33 | + * | ||
| 34 | + * @param modelVO 创建信息 | ||
| 35 | + * @return 创建的流程模型的编号 | ||
| 36 | + */ | ||
| 37 | + String createModel(@Valid BpmModelCreateReqVO modelVO); | ||
| 38 | + | ||
| 39 | + /** | ||
| 40 | + * 修改流程模型 | ||
| 41 | + * | ||
| 42 | + * @param updateReqVO 更新信息 | ||
| 43 | + */ | ||
| 44 | + void updateModel(@Valid BpmModelUpdateReqVO updateReqVO); | ||
| 45 | + | ||
| 46 | + /** | ||
| 47 | + * 将流程模型,部署成一个流程定义 | ||
| 48 | + * | ||
| 49 | + * @param id 编号 | ||
| 50 | + */ | ||
| 51 | + void deployModel(String id); | ||
| 52 | + | ||
| 53 | + /** | ||
| 54 | + * 删除模型 | ||
| 55 | + * | ||
| 56 | + * @param id 编号 | ||
| 57 | + */ | ||
| 58 | + void deleteModel(String id); | ||
| 59 | + | ||
| 60 | + /** | ||
| 61 | + * 修改模型的状态,实际更新的部署的流程定义的状态 | ||
| 62 | + * | ||
| 63 | + * @param id 编号 | ||
| 64 | + * @param state 状态 {@link org.activiti.engine.impl.persistence.entity.SuspensionState} | ||
| 65 | + */ | ||
| 66 | + void updateModelState(String id, Integer state); | ||
| 67 | + | ||
| 68 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/dto/BpmModelMetaInfoRespDTO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.model.dto; | ||
| 2 | + | ||
| 3 | +import lombok.Data; | ||
| 4 | + | ||
| 5 | +/** | ||
| 6 | + * BPM 流程 MetaInfo Response DTO | ||
| 7 | + * 主要用于 {@link org.activiti.engine.repository.Model#setMetaInfo(String)} 的存储 | ||
| 8 | + * | ||
| 9 | + * @author 芋道源码 | ||
| 10 | + */ | ||
| 11 | +@Data | ||
| 12 | +public class BpmModelMetaInfoRespDTO { | ||
| 13 | + | ||
| 14 | + /** | ||
| 15 | + * 流程描述 | ||
| 16 | + */ | ||
| 17 | + private String description; | ||
| 18 | + /** | ||
| 19 | + * 表单编号 | ||
| 20 | + */ | ||
| 21 | + private Long formId; | ||
| 22 | + | ||
| 23 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/impl/BpmModelServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.model.impl; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.util.StrUtil; | ||
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.model.vo.*; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.convert.model.BpmModelConvert; | ||
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; | ||
| 7 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; | ||
| 8 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefinitionCreateReqDTO; | ||
| 9 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.form.BpmFormService; | ||
| 10 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.model.BpmModelService; | ||
| 11 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.model.dto.BpmModelMetaInfoRespDTO; | ||
| 12 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 13 | +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | ||
| 14 | +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | ||
| 15 | +import cn.iocoder.yudao.framework.common.util.object.PageUtils; | ||
| 16 | +import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; | ||
| 17 | +import lombok.extern.slf4j.Slf4j; | ||
| 18 | +import org.activiti.engine.RepositoryService; | ||
| 19 | +import org.activiti.engine.impl.persistence.entity.SuspensionState; | ||
| 20 | +import org.activiti.engine.repository.Deployment; | ||
| 21 | +import org.activiti.engine.repository.Model; | ||
| 22 | +import org.activiti.engine.repository.ModelQuery; | ||
| 23 | +import org.activiti.engine.repository.ProcessDefinition; | ||
| 24 | +import org.springframework.stereotype.Service; | ||
| 25 | +import org.springframework.transaction.annotation.Transactional; | ||
| 26 | +import org.springframework.util.ObjectUtils; | ||
| 27 | +import org.springframework.validation.annotation.Validated; | ||
| 28 | + | ||
| 29 | +import javax.annotation.Resource; | ||
| 30 | +import java.util.HashSet; | ||
| 31 | +import java.util.List; | ||
| 32 | +import java.util.Map; | ||
| 33 | +import java.util.Set; | ||
| 34 | + | ||
| 35 | +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; | ||
| 36 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||
| 37 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; | ||
| 38 | + | ||
| 39 | +/** | ||
| 40 | + * 流程定义实现 | ||
| 41 | + * 主要进行 Activiti {@link Model} 的维护 | ||
| 42 | + * | ||
| 43 | + * @author yunlongn | ||
| 44 | + */ | ||
| 45 | +@Service | ||
| 46 | +@Validated | ||
| 47 | +@Slf4j | ||
| 48 | +public class BpmModelServiceImpl implements BpmModelService { | ||
| 49 | + | ||
| 50 | + @Resource | ||
| 51 | + private RepositoryService repositoryService; | ||
| 52 | + @Resource | ||
| 53 | + private BpmFormService bpmFormService; | ||
| 54 | + @Resource | ||
| 55 | + private BpmProcessDefinitionService bpmProcessDefinitionService; | ||
| 56 | + | ||
| 57 | + @Override | ||
| 58 | + public PageResult<BpmModelPageItemRespVO> getModelPage(ModelPageReqVO pageVO) { | ||
| 59 | + ModelQuery modelQuery = repositoryService.createModelQuery(); | ||
| 60 | + if (StrUtil.isNotBlank(pageVO.getKey())) { | ||
| 61 | + modelQuery.modelKey(pageVO.getKey()); | ||
| 62 | + } | ||
| 63 | + if (StrUtil.isNotBlank(pageVO.getName())) { | ||
| 64 | + modelQuery.modelNameLike("%" + pageVO.getName() + "%"); // 模糊匹配 | ||
| 65 | + } | ||
| 66 | + if (StrUtil.isNotBlank(pageVO.getCategory())) { | ||
| 67 | + modelQuery.modelCategory(pageVO.getCategory()); | ||
| 68 | + } | ||
| 69 | + // 执行查询 | ||
| 70 | + List<Model> models = modelQuery.orderByCreateTime().desc() | ||
| 71 | + .listPage(PageUtils.getStart(pageVO), pageVO.getPageSize()); | ||
| 72 | + | ||
| 73 | + // 获得 Form Map | ||
| 74 | + Set<Long> formIds = CollectionUtils.convertSet(models, model -> { | ||
| 75 | + BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); | ||
| 76 | + return metaInfo != null ? metaInfo.getFormId() : null; | ||
| 77 | + }); | ||
| 78 | + Map<Long, BpmFormDO> formMap = bpmFormService.getFormMap(formIds); | ||
| 79 | + | ||
| 80 | + // 获得 Deployment Map | ||
| 81 | + Set<String> deploymentIds = new HashSet<>(); | ||
| 82 | + models.forEach(model -> CollectionUtils.addIfNotNull(deploymentIds, model.getDeploymentId())); | ||
| 83 | + Map<String, Deployment> deploymentMap = bpmProcessDefinitionService.getDeploymentMap(deploymentIds); | ||
| 84 | + // 获得 ProcessDefinition Map | ||
| 85 | + List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionListByDeploymentIds(deploymentIds); | ||
| 86 | + Map<String, ProcessDefinition> processDefinitionMap = convertMap(processDefinitions, ProcessDefinition::getDeploymentId); | ||
| 87 | + | ||
| 88 | + // 拼接结果 | ||
| 89 | + long modelCount = modelQuery.count(); | ||
| 90 | + return new PageResult<>(BpmModelConvert.INSTANCE.convertList(models, formMap, deploymentMap, processDefinitionMap), modelCount); | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + @Override | ||
| 94 | + public BpmModelRespVO getModel(String id) { | ||
| 95 | + Model model = repositoryService.getModel(id); | ||
| 96 | + if (model == null) { | ||
| 97 | + return null; | ||
| 98 | + } | ||
| 99 | + BpmModelRespVO modelRespVO = BpmModelConvert.INSTANCE.convert(model); | ||
| 100 | + // 拼接 bpmn XML | ||
| 101 | + byte[] bpmnBytes = repositoryService.getModelEditorSource(id); | ||
| 102 | + modelRespVO.setBpmnXml(StrUtil.utf8Str(bpmnBytes)); | ||
| 103 | + return modelRespVO; | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + @Override | ||
| 107 | + @Transactional(rollbackFor = Exception.class) // 因为进行多个 activiti 操作,所以开启事务 | ||
| 108 | + public String createModel(BpmModelCreateReqVO createReqVO) { | ||
| 109 | + checkKeyNCName(createReqVO.getKey()); | ||
| 110 | + // 校验流程标识已经存在 | ||
| 111 | + Model keyModel = this.getModelByKey(createReqVO.getKey()); | ||
| 112 | + if (keyModel != null) { | ||
| 113 | + throw exception(MODEL_KEY_EXISTS, createReqVO.getKey()); | ||
| 114 | + } | ||
| 115 | + | ||
| 116 | + // 创建流程定义 | ||
| 117 | + Model model = repositoryService.newModel(); | ||
| 118 | + BpmModelConvert.INSTANCE.copy(model, createReqVO); | ||
| 119 | + // 保存流程定义 | ||
| 120 | + repositoryService.saveModel(model); | ||
| 121 | + // 添加 BPMN XML | ||
| 122 | + repositoryService.addModelEditorSource(model.getId(), StrUtil.utf8Bytes(createReqVO.getBpmnXml())); | ||
| 123 | + return model.getId(); | ||
| 124 | + } | ||
| 125 | + | ||
| 126 | + @Override | ||
| 127 | + @Transactional(rollbackFor = Exception.class) // 因为进行多个 activiti 操作,所以开启事务 | ||
| 128 | + public void updateModel(BpmModelUpdateReqVO updateReqVO) { | ||
| 129 | + checkKeyNCName(updateReqVO.getKey()); | ||
| 130 | + // 校验流程模型存在 | ||
| 131 | + Model model = repositoryService.getModel(updateReqVO.getId()); | ||
| 132 | + if (model == null) { | ||
| 133 | + throw exception(MODEL_NOT_EXISTS); | ||
| 134 | + } | ||
| 135 | + | ||
| 136 | + // 修改流程定义 | ||
| 137 | + BpmModelConvert.INSTANCE.copy(model, updateReqVO); | ||
| 138 | + // 更新模型 | ||
| 139 | + repositoryService.saveModel(model); | ||
| 140 | + // 更新 BPMN XML | ||
| 141 | + repositoryService.addModelEditorSource(model.getId(), StrUtil.utf8Bytes(updateReqVO.getBpmnXml())); | ||
| 142 | + } | ||
| 143 | + | ||
| 144 | + @Override | ||
| 145 | + @Transactional(rollbackFor = Exception.class) // 因为进行多个 activiti 操作,所以开启事务 | ||
| 146 | + public void deployModel(String id) { | ||
| 147 | + // 校验流程模型存在 | ||
| 148 | + Model model = repositoryService.getModel(id); | ||
| 149 | + if (ObjectUtils.isEmpty(model)) { | ||
| 150 | + throw exception(MODEL_NOT_EXISTS); | ||
| 151 | + } | ||
| 152 | + byte[] bpmnBytes = repositoryService.getModelEditorSource(model.getId()); | ||
| 153 | + if (bpmnBytes == null) { | ||
| 154 | + throw exception(MODEL_NOT_EXISTS); | ||
| 155 | + } | ||
| 156 | + | ||
| 157 | + // 创建流程定义 | ||
| 158 | + BpmDefinitionCreateReqDTO definitionCreateReqDTO = BpmModelConvert.INSTANCE.convert2(model) | ||
| 159 | + .setBpmnXml(StrUtil.utf8Str(bpmnBytes)); | ||
| 160 | + String definitionId = bpmProcessDefinitionService.createProcessDefinition(definitionCreateReqDTO); | ||
| 161 | + | ||
| 162 | + // 将老的流程定义进行挂起。也就是说,只有最新部署的流程定义,才可以发起任务。 | ||
| 163 | + if (StrUtil.isNotEmpty(model.getDeploymentId())) { | ||
| 164 | + ProcessDefinition oldDefinition = bpmProcessDefinitionService.getProcessDefinitionByDeploymentId(model.getDeploymentId()); | ||
| 165 | + if (oldDefinition != null) { | ||
| 166 | + bpmProcessDefinitionService.updateProcessDefinitionState(oldDefinition.getId(), SuspensionState.SUSPENDED.getStateCode()); | ||
| 167 | + } | ||
| 168 | + } | ||
| 169 | + | ||
| 170 | + // 更新 model 的 deploymentId,进行关联 | ||
| 171 | + ProcessDefinition definition = bpmProcessDefinitionService.getProcessDefinition(definitionId); | ||
| 172 | + model.setDeploymentId(definition.getDeploymentId()); | ||
| 173 | + repositoryService.saveModel(model); | ||
| 174 | + } | ||
| 175 | + | ||
| 176 | + @Override | ||
| 177 | + public void deleteModel(String id) { | ||
| 178 | + // 校验流程模型存在 | ||
| 179 | + Model model = repositoryService.getModel(id); | ||
| 180 | + if (model == null) { | ||
| 181 | + throw exception(MODEL_NOT_EXISTS); | ||
| 182 | + } | ||
| 183 | + // 执行删除 | ||
| 184 | + repositoryService.deleteModel(id); | ||
| 185 | + } | ||
| 186 | + | ||
| 187 | + @Override | ||
| 188 | + public void updateModelState(String id, Integer state) { | ||
| 189 | + // 校验流程模型存在 | ||
| 190 | + Model model = repositoryService.getModel(id); | ||
| 191 | + if (model == null) { | ||
| 192 | + throw exception(MODEL_NOT_EXISTS); | ||
| 193 | + } | ||
| 194 | + // 校验流程定义存在 | ||
| 195 | + ProcessDefinition definition = bpmProcessDefinitionService.getProcessDefinitionByDeploymentId(model.getDeploymentId()); | ||
| 196 | + if (definition == null) { | ||
| 197 | + throw exception(PROCESS_DEFINITION_NOT_EXISTS); | ||
| 198 | + } | ||
| 199 | + | ||
| 200 | + // 更新状态 | ||
| 201 | + bpmProcessDefinitionService.updateProcessDefinitionState(definition.getId(), state); | ||
| 202 | + } | ||
| 203 | + | ||
| 204 | + private Model getModelByKey(String key) { | ||
| 205 | + return repositoryService.createModelQuery().modelKey(key).singleResult(); | ||
| 206 | + } | ||
| 207 | + | ||
| 208 | + private void checkKeyNCName(String key) { | ||
| 209 | + if (!ValidationUtils.isXmlNCName(key)) { | ||
| 210 | + throw exception(MODEL_KEY_VALID); | ||
| 211 | + } | ||
| 212 | + } | ||
| 213 | + | ||
| 214 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/LeaveApplyEndProcessor.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.oa; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.OALeaveDO; | ||
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.oa.OALeaveMapper; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.enums.FlowStatusEnum; | ||
| 6 | +import org.activiti.engine.delegate.DelegateExecution; | ||
| 7 | +import org.activiti.engine.delegate.ExecutionListener; | ||
| 8 | +import org.springframework.stereotype.Component; | ||
| 9 | +import org.springframework.transaction.annotation.Transactional; | ||
| 10 | + | ||
| 11 | +import javax.annotation.Resource; | ||
| 12 | +import java.util.Objects; | ||
| 13 | + | ||
| 14 | + | ||
| 15 | +/** | ||
| 16 | + * 请假流程结束流程监听处理服务, 根据请假申请审批通过,还是未通过, 更新请假表单 | ||
| 17 | + */ | ||
| 18 | +@Component | ||
| 19 | +public class LeaveApplyEndProcessor implements ExecutionListener { | ||
| 20 | + | ||
| 21 | + @Resource | ||
| 22 | + private OALeaveMapper leaveMapper; | ||
| 23 | + | ||
| 24 | + @Override | ||
| 25 | + @Transactional(rollbackFor = Exception.class) | ||
| 26 | + public void notify(DelegateExecution delegateExecution) { | ||
| 27 | + final String businessKey = delegateExecution.getProcessInstanceBusinessKey(); | ||
| 28 | + final Object approved = delegateExecution.getVariable("approved"); | ||
| 29 | + OALeaveDO updateDo = new OALeaveDO(); | ||
| 30 | + updateDo.setId(Long.valueOf(businessKey)); | ||
| 31 | + if (Objects.equals(approved, true)) { | ||
| 32 | + updateDo.setStatus(FlowStatusEnum.PASS.getStatus()); | ||
| 33 | + } else { | ||
| 34 | + updateDo.setStatus(FlowStatusEnum.REJECTED.getStatus()); | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + leaveMapper.updateById(updateDo); | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/service/oa/OaLeaveService.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/OALeaveService.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.service.oa; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.oa; |
| 2 | 2 | ||
| 3 | 3 | ||
| 4 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo.OaLeaveCreateReqVO; | ||
| 5 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo.OaLeaveExportReqVO; | ||
| 6 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo.OaLeavePageReqVO; | ||
| 7 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo.OaLeaveUpdateReqVO; | ||
| 8 | -import cn.iocoder.yudao.adminserver.modules.activiti.dal.dataobject.oa.OaLeaveDO; | 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.*; |
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.OALeaveDO; | ||
| 9 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 10 | 7 | ||
| 11 | import javax.validation.Valid; | 8 | import javax.validation.Valid; |
| @@ -17,7 +14,7 @@ import java.util.List; | @@ -17,7 +14,7 @@ import java.util.List; | ||
| 17 | * | 14 | * |
| 18 | * @author 芋艿 | 15 | * @author 芋艿 |
| 19 | */ | 16 | */ |
| 20 | -public interface OaLeaveService { | 17 | +public interface OALeaveService { |
| 21 | 18 | ||
| 22 | /** | 19 | /** |
| 23 | * 创建请假申请 | 20 | * 创建请假申请 |
| @@ -25,14 +22,14 @@ public interface OaLeaveService { | @@ -25,14 +22,14 @@ public interface OaLeaveService { | ||
| 25 | * @param createReqVO 创建信息 | 22 | * @param createReqVO 创建信息 |
| 26 | * @return 编号 | 23 | * @return 编号 |
| 27 | */ | 24 | */ |
| 28 | - Long createLeave(@Valid OaLeaveCreateReqVO createReqVO); | 25 | + Long createLeave(@Valid OALeaveCreateReqVO createReqVO); |
| 29 | 26 | ||
| 30 | /** | 27 | /** |
| 31 | * 更新请假申请 | 28 | * 更新请假申请 |
| 32 | * | 29 | * |
| 33 | * @param updateReqVO 更新信息 | 30 | * @param updateReqVO 更新信息 |
| 34 | */ | 31 | */ |
| 35 | - void updateLeave(@Valid OaLeaveUpdateReqVO updateReqVO); | 32 | + void updateLeave(@Valid OALeaveUpdateReqVO updateReqVO); |
| 36 | 33 | ||
| 37 | /** | 34 | /** |
| 38 | * 删除请假申请 | 35 | * 删除请假申请 |
| @@ -47,7 +44,7 @@ public interface OaLeaveService { | @@ -47,7 +44,7 @@ public interface OaLeaveService { | ||
| 47 | * @param id 编号 | 44 | * @param id 编号 |
| 48 | * @return 请假申请 | 45 | * @return 请假申请 |
| 49 | */ | 46 | */ |
| 50 | - OaLeaveDO getLeave(Long id); | 47 | + OALeaveDO getLeave(Long id); |
| 51 | 48 | ||
| 52 | /** | 49 | /** |
| 53 | * 获得请假申请列表 | 50 | * 获得请假申请列表 |
| @@ -55,7 +52,7 @@ public interface OaLeaveService { | @@ -55,7 +52,7 @@ public interface OaLeaveService { | ||
| 55 | * @param ids 编号 | 52 | * @param ids 编号 |
| 56 | * @return 请假申请列表 | 53 | * @return 请假申请列表 |
| 57 | */ | 54 | */ |
| 58 | - List<OaLeaveDO> getLeaveList(Collection<Long> ids); | 55 | + List<OALeaveDO> getLeaveList(Collection<Long> ids); |
| 59 | 56 | ||
| 60 | /** | 57 | /** |
| 61 | * 获得请假申请分页 | 58 | * 获得请假申请分页 |
| @@ -63,7 +60,7 @@ public interface OaLeaveService { | @@ -63,7 +60,7 @@ public interface OaLeaveService { | ||
| 63 | * @param pageReqVO 分页查询 | 60 | * @param pageReqVO 分页查询 |
| 64 | * @return 请假申请分页 | 61 | * @return 请假申请分页 |
| 65 | */ | 62 | */ |
| 66 | - PageResult<OaLeaveDO> getLeavePage(OaLeavePageReqVO pageReqVO); | 63 | + PageResult<OALeaveDO> getLeavePage(OALeavePageReqVO pageReqVO); |
| 67 | 64 | ||
| 68 | /** | 65 | /** |
| 69 | * 获得请假申请列表, 用于 Excel 导出 | 66 | * 获得请假申请列表, 用于 Excel 导出 |
| @@ -71,6 +68,13 @@ public interface OaLeaveService { | @@ -71,6 +68,13 @@ public interface OaLeaveService { | ||
| 71 | * @param exportReqVO 查询条件 | 68 | * @param exportReqVO 查询条件 |
| 72 | * @return 请假申请列表 | 69 | * @return 请假申请列表 |
| 73 | */ | 70 | */ |
| 74 | - List<OaLeaveDO> getLeaveList(OaLeaveExportReqVO exportReqVO); | 71 | + List<OALeaveDO> getLeaveList(OALeaveExportReqVO exportReqVO); |
| 75 | 72 | ||
| 73 | + | ||
| 74 | + | ||
| 75 | + /** | ||
| 76 | + * 获取本人请假申请流程中审批人员 | ||
| 77 | + * @return 包括,本人部门的项目经理, 部门经理, HR | ||
| 78 | + */ | ||
| 79 | + OALeaveApplyMembersVO getLeaveApplyMembers(); | ||
| 76 | } | 80 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/activiti/service/oa/impl/OaLeaveServiceImpl.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/OALeaveServiceImpl.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.activiti.service.oa.impl; | ||
| 2 | - | ||
| 3 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo.OaLeaveCreateReqVO; | ||
| 4 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo.OaLeaveExportReqVO; | ||
| 5 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo.OaLeavePageReqVO; | ||
| 6 | -import cn.iocoder.yudao.adminserver.modules.activiti.controller.oa.vo.OaLeaveUpdateReqVO; | ||
| 7 | -import cn.iocoder.yudao.adminserver.modules.activiti.convert.oa.OaLeaveConvert; | ||
| 8 | -import cn.iocoder.yudao.adminserver.modules.activiti.dal.dataobject.oa.OaLeaveDO; | ||
| 9 | -import cn.iocoder.yudao.adminserver.modules.activiti.dal.mysql.oa.OaLeaveMapper; | ||
| 10 | -import cn.iocoder.yudao.adminserver.modules.activiti.service.oa.OaLeaveService; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.oa.impl; |
| 2 | + | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 4 | +import cn.hutool.core.date.DateUtil; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.*; | ||
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.convert.oa.OALeaveConvert; | ||
| 7 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.OALeaveDO; | ||
| 8 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.oa.OALeaveMapper; | ||
| 9 | +import cn.iocoder.yudao.adminserver.modules.bpm.enums.FlowStatusEnum; | ||
| 10 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.OALeaveService; | ||
| 11 | +import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO; | ||
| 12 | +import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dept.SysPostMapper; | ||
| 13 | +import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.user.SysUserMapper; | ||
| 14 | +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; | ||
| 15 | +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; | ||
| 11 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 16 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 12 | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | 17 | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| 13 | -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; | ||
| 14 | import org.activiti.api.task.model.Task; | 18 | import org.activiti.api.task.model.Task; |
| 15 | import org.activiti.api.task.model.builders.TaskPayloadBuilder; | 19 | import org.activiti.api.task.model.builders.TaskPayloadBuilder; |
| 16 | import org.activiti.api.task.runtime.TaskRuntime; | 20 | import org.activiti.api.task.runtime.TaskRuntime; |
| @@ -21,12 +25,9 @@ import org.springframework.transaction.annotation.Transactional; | @@ -21,12 +25,9 @@ import org.springframework.transaction.annotation.Transactional; | ||
| 21 | import org.springframework.validation.annotation.Validated; | 25 | import org.springframework.validation.annotation.Validated; |
| 22 | 26 | ||
| 23 | import javax.annotation.Resource; | 27 | import javax.annotation.Resource; |
| 24 | -import java.util.Collection; | ||
| 25 | -import java.util.HashMap; | ||
| 26 | -import java.util.List; | ||
| 27 | -import java.util.Map; | 28 | +import java.util.*; |
| 28 | 29 | ||
| 29 | -import static cn.iocoder.yudao.adminserver.modules.activiti.enums.OaErrorCodeConstants.LEAVE_NOT_EXISTS; | 30 | +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; |
| 30 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 31 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 31 | 32 | ||
| 32 | /** | 33 | /** |
| @@ -36,10 +37,10 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU | @@ -36,10 +37,10 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU | ||
| 36 | */ | 37 | */ |
| 37 | @Service | 38 | @Service |
| 38 | @Validated | 39 | @Validated |
| 39 | -public class OaLeaveServiceImpl implements OaLeaveService { | 40 | +public class OALeaveServiceImpl implements OALeaveService { |
| 40 | 41 | ||
| 41 | @Resource | 42 | @Resource |
| 42 | - private OaLeaveMapper leaveMapper; | 43 | + private OALeaveMapper leaveMapper; |
| 43 | 44 | ||
| 44 | @Resource | 45 | @Resource |
| 45 | private RuntimeService runtimeService; | 46 | private RuntimeService runtimeService; |
| @@ -50,37 +51,46 @@ public class OaLeaveServiceImpl implements OaLeaveService { | @@ -50,37 +51,46 @@ public class OaLeaveServiceImpl implements OaLeaveService { | ||
| 50 | @Resource | 51 | @Resource |
| 51 | private TaskRuntime taskRuntime; | 52 | private TaskRuntime taskRuntime; |
| 52 | 53 | ||
| 54 | + @Resource | ||
| 55 | + private SysPostMapper sysPostMapper; | ||
| 56 | + | ||
| 57 | + @Resource | ||
| 58 | + private SysUserMapper sysUserMapper; | ||
| 59 | + | ||
| 53 | @Override | 60 | @Override |
| 54 | @Transactional(rollbackFor = Exception.class) | 61 | @Transactional(rollbackFor = Exception.class) |
| 55 | - public Long createLeave(OaLeaveCreateReqVO createReqVO) { | 62 | + public Long createLeave(OALeaveCreateReqVO createReqVO) { |
| 56 | // 插入 OA 请假单 | 63 | // 插入 OA 请假单 |
| 57 | - OaLeaveDO leave = OaLeaveConvert.INSTANCE.convert(createReqVO); | ||
| 58 | - leave.setStatus(1); | 64 | + OALeaveDO leave = OALeaveConvert.INSTANCE.convert(createReqVO); |
| 65 | + leave.setStatus(FlowStatusEnum.HANDLE.getStatus()); | ||
| 66 | + // TODO @jason:应该是存储 userId?? | ||
| 59 | leave.setUserId(SecurityFrameworkUtils.getLoginUser().getUsername()); | 67 | leave.setUserId(SecurityFrameworkUtils.getLoginUser().getUsername()); |
| 60 | leaveMapper.insert(leave); | 68 | leaveMapper.insert(leave); |
| 61 | - | 69 | + Date startTime = createReqVO.getStartTime(); |
| 70 | + Date endTime = createReqVO.getEndTime(); | ||
| 71 | + long day = DateUtil.betweenDay(startTime, endTime, false); | ||
| 72 | + if (day <= 0) { | ||
| 73 | + throw ServiceExceptionUtil.exception(OA_DAY_LEAVE_ERROR); | ||
| 74 | + } | ||
| 75 | + Map<String, Object> taskVariables = createReqVO.getTaskVariables(); | ||
| 76 | + taskVariables.put("day", day); | ||
| 62 | // 创建工作流 | 77 | // 创建工作流 |
| 63 | - Map<String, Object> variables = new HashMap<>(); | ||
| 64 | - // 如何得到部门领导人,暂时写死 | ||
| 65 | - variables.put("deptLeader", "admin"); // TODO @芋艿:需要部门的负责人 | ||
| 66 | Long id = leave.getId(); | 78 | Long id = leave.getId(); |
| 67 | String businessKey = String.valueOf(id); | 79 | String businessKey = String.valueOf(id); |
| 68 | - ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(createReqVO.getProcessKey(), businessKey, variables); | 80 | + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(createReqVO.getProcessKey(), businessKey, taskVariables); |
| 69 | String processInstanceId = processInstance.getProcessInstanceId(); | 81 | String processInstanceId = processInstance.getProcessInstanceId(); |
| 70 | 82 | ||
| 71 | - // TODO @json:service 不要出现 dao 的元素,例如说 UpdateWrapper。这里,我们可以调用 updateById 方法 | ||
| 72 | // 将工作流的编号,更新到 OA 请假单中 | 83 | // 将工作流的编号,更新到 OA 请假单中 |
| 73 | - UpdateWrapper<OaLeaveDO> updateWrapper = new UpdateWrapper<>(); | ||
| 74 | - updateWrapper.eq("id", id); | ||
| 75 | - OaLeaveDO updateDo = new OaLeaveDO(); | 84 | + OALeaveDO updateDo = new OALeaveDO(); |
| 76 | updateDo.setProcessInstanceId(processInstanceId); | 85 | updateDo.setProcessInstanceId(processInstanceId); |
| 77 | - leaveMapper.update(updateDo, updateWrapper); | 86 | + updateDo.setId(id); |
| 87 | + leaveMapper.updateById(updateDo); | ||
| 78 | return id; | 88 | return id; |
| 79 | } | 89 | } |
| 80 | 90 | ||
| 81 | @Override | 91 | @Override |
| 82 | @Transactional(rollbackFor = Exception.class) | 92 | @Transactional(rollbackFor = Exception.class) |
| 83 | - public void updateLeave(OaLeaveUpdateReqVO updateReqVO) { | 93 | + public void updateLeave(OALeaveUpdateReqVO updateReqVO) { |
| 84 | // 校验存在 | 94 | // 校验存在 |
| 85 | this.validateLeaveExists(updateReqVO.getId()); | 95 | this.validateLeaveExists(updateReqVO.getId()); |
| 86 | 96 | ||
| @@ -93,49 +103,93 @@ public class OaLeaveServiceImpl implements OaLeaveService { | @@ -93,49 +103,93 @@ public class OaLeaveServiceImpl implements OaLeaveService { | ||
| 93 | taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(task.getId()) | 103 | taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(task.getId()) |
| 94 | .withVariables(variables) | 104 | .withVariables(variables) |
| 95 | .build()); | 105 | .build()); |
| 96 | - // TODO @jason:不需要加 final 哈。虽然是不变,但是代码比较少这么去写 | ||
| 97 | - final Object reApply = variables.get("reApply"); | ||
| 98 | - // TODO @jason:直接使用 Objects.equals(reApply, true) 就可以 | ||
| 99 | - if((reApply instanceof Boolean) && (Boolean)reApply){ | 106 | + |
| 107 | + // TOTO @芋道源码 貌似 IDEA 会自动加上final(不需要加 final 哈。虽然是不变,但是代码比较少这么去写) | ||
| 108 | + Object reApply = variables.get("reApply"); | ||
| 109 | + if(Objects.equals(reApply, true)){ | ||
| 100 | // 更新 表单 | 110 | // 更新 表单 |
| 101 | - OaLeaveDO updateObj = OaLeaveConvert.INSTANCE.convert(updateReqVO); | 111 | + OALeaveDO updateObj = OALeaveConvert.INSTANCE.convert(updateReqVO); |
| 102 | leaveMapper.updateById(updateObj); | 112 | leaveMapper.updateById(updateObj); |
| 103 | } | 113 | } |
| 104 | } | 114 | } |
| 105 | 115 | ||
| 116 | + // TODO @jason:要不,请假不支持删除,只支持取消? | ||
| 106 | @Override | 117 | @Override |
| 107 | public void deleteLeave(Long id) { | 118 | public void deleteLeave(Long id) { |
| 108 | // 校验存在 | 119 | // 校验存在 |
| 109 | this.validateLeaveExists(id); | 120 | this.validateLeaveExists(id); |
| 110 | // 删除 | 121 | // 删除 |
| 111 | leaveMapper.deleteById(id); | 122 | leaveMapper.deleteById(id); |
| 112 | - // TODO @jason:需要调用 runtimeService 的 delete 方法,删除??? | ||
| 113 | } | 123 | } |
| 114 | 124 | ||
| 115 | private void validateLeaveExists(Long id) { | 125 | private void validateLeaveExists(Long id) { |
| 116 | if (leaveMapper.selectById(id) == null) { | 126 | if (leaveMapper.selectById(id) == null) { |
| 117 | - throw exception(LEAVE_NOT_EXISTS); | 127 | + throw exception(OA_LEAVE_NOT_EXISTS); |
| 118 | } | 128 | } |
| 119 | } | 129 | } |
| 120 | 130 | ||
| 121 | @Override | 131 | @Override |
| 122 | - public OaLeaveDO getLeave(Long id) { | 132 | + public OALeaveDO getLeave(Long id) { |
| 123 | return leaveMapper.selectById(id); | 133 | return leaveMapper.selectById(id); |
| 124 | } | 134 | } |
| 125 | 135 | ||
| 126 | @Override | 136 | @Override |
| 127 | - public List<OaLeaveDO> getLeaveList(Collection<Long> ids) { | 137 | + public List<OALeaveDO> getLeaveList(Collection<Long> ids) { |
| 128 | return leaveMapper.selectBatchIds(ids); | 138 | return leaveMapper.selectBatchIds(ids); |
| 129 | } | 139 | } |
| 130 | 140 | ||
| 131 | @Override | 141 | @Override |
| 132 | - public PageResult<OaLeaveDO> getLeavePage(OaLeavePageReqVO pageReqVO) { | 142 | + public PageResult<OALeaveDO> getLeavePage(OALeavePageReqVO pageReqVO) { |
| 133 | return leaveMapper.selectPage(pageReqVO); | 143 | return leaveMapper.selectPage(pageReqVO); |
| 134 | } | 144 | } |
| 135 | 145 | ||
| 136 | @Override | 146 | @Override |
| 137 | - public List<OaLeaveDO> getLeaveList(OaLeaveExportReqVO exportReqVO) { | 147 | + public List<OALeaveDO> getLeaveList(OALeaveExportReqVO exportReqVO) { |
| 138 | return leaveMapper.selectList(exportReqVO); | 148 | return leaveMapper.selectList(exportReqVO); |
| 139 | } | 149 | } |
| 140 | 150 | ||
| 151 | + | ||
| 152 | + /** | ||
| 153 | + * 获取本人请假申请流程中审批人员 | ||
| 154 | + * @return 包括,本人部门的项目经理, 部门经理, hr | ||
| 155 | + */ | ||
| 156 | + @Override | ||
| 157 | + public OALeaveApplyMembersVO getLeaveApplyMembers() { | ||
| 158 | + final Long id = SecurityFrameworkUtils.getLoginUser().getId(); | ||
| 159 | + //项目经理 | ||
| 160 | + //TODO jason 定义enum | ||
| 161 | + SysPostDO pmPostDO = sysPostMapper.selectByCode("pm"); | ||
| 162 | + if (Objects.isNull(pmPostDO)) { | ||
| 163 | + throw ServiceExceptionUtil.exception(OA_PM_POST_NOT_EXISTS); | ||
| 164 | + } | ||
| 165 | + SysUserDO userDO = sysUserMapper.selectById(id); | ||
| 166 | + final List<SysUserDO> pmUsers = sysUserMapper.selectListByDepartIdAndPostId(userDO.getDeptId(), pmPostDO.getId()); | ||
| 167 | + if (CollUtil.isEmpty(pmUsers)) { | ||
| 168 | + throw ServiceExceptionUtil.exception(OA_DEPART_PM_POST_NOT_EXISTS); | ||
| 169 | + } | ||
| 170 | + | ||
| 171 | + //部门经理 | ||
| 172 | + SysPostDO bmPostDO = sysPostMapper.selectByCode("bm"); | ||
| 173 | + if (Objects.isNull(bmPostDO)) { | ||
| 174 | + throw ServiceExceptionUtil.exception(OA_BM_POST_NOT_EXISTS); | ||
| 175 | + } | ||
| 176 | + | ||
| 177 | + final List<SysUserDO> bmUsers = sysUserMapper.selectListByDepartIdAndPostId(userDO.getDeptId(), bmPostDO.getId()); | ||
| 178 | + if (CollUtil.isEmpty(bmUsers)) { | ||
| 179 | + throw ServiceExceptionUtil.exception(OA_DEPART_BM_POST_NOT_EXISTS); | ||
| 180 | + } | ||
| 181 | + //人事 | ||
| 182 | + SysPostDO hrPostDO = sysPostMapper.selectByCode("hr"); | ||
| 183 | + if (Objects.isNull(hrPostDO)) { | ||
| 184 | + throw ServiceExceptionUtil.exception(OA_HR_POST_NOT_EXISTS); | ||
| 185 | + } | ||
| 186 | + final List<SysUserDO> hrUsers = sysUserMapper.selectListByDepartIdAndPostId(userDO.getDeptId(), hrPostDO.getId()); | ||
| 187 | + if (CollUtil.isEmpty(hrUsers)) { | ||
| 188 | + throw ServiceExceptionUtil.exception(OA_DEPART_BM_POST_NOT_EXISTS); | ||
| 189 | + } | ||
| 190 | + return OALeaveApplyMembersVO.builder().pm(pmUsers.get(0).getUsername()) | ||
| 191 | + .bm(bmUsers.get(0).getUsername()) | ||
| 192 | + .hr(hrUsers.get(0).getUsername()).build(); | ||
| 193 | + } | ||
| 194 | + | ||
| 141 | } | 195 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.task; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCreateReqVO; | ||
| 4 | + | ||
| 5 | +import javax.validation.Valid; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * 流程实例 Service 接口 | ||
| 9 | + * | ||
| 10 | + * @author 芋道源码 | ||
| 11 | + */ | ||
| 12 | +public interface BpmProcessInstanceService { | ||
| 13 | + | ||
| 14 | + /** | ||
| 15 | + * 创建流程实例 | ||
| 16 | + * | ||
| 17 | + * @param userId 用户编号 | ||
| 18 | + * @param createReqVO 创建信息 | ||
| 19 | + * @return 实例的编号 | ||
| 20 | + */ | ||
| 21 | + String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqVO createReqVO); | ||
| 22 | + | ||
| 23 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.task; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.*; | ||
| 4 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 5 | + | ||
| 6 | +import java.util.List; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * 工作流用户任务服务接口 | ||
| 10 | + */ | ||
| 11 | +public interface BpmTaskService { | ||
| 12 | + | ||
| 13 | + | ||
| 14 | + /** | ||
| 15 | + * 获取当前用户的待办任务, 分页 | ||
| 16 | + */ | ||
| 17 | + PageResult<TodoTaskRespVO> getTodoTaskPage(TodoTaskPageReqVO pageReqVO); | ||
| 18 | + | ||
| 19 | + /** | ||
| 20 | + * 签收任务 | ||
| 21 | + * @param taskId 用户任务id | ||
| 22 | + */ | ||
| 23 | + void claimTask(String taskId); | ||
| 24 | + | ||
| 25 | + /** | ||
| 26 | + * 工作流,完成 userTask, 完成用户任务 一般传入参数 1。是否同意(variables). 2. 评论(comment) | ||
| 27 | + * variables 变量名 和 评论 由前台传入 | ||
| 28 | + * @param taskReq 任务参数 | ||
| 29 | + */ | ||
| 30 | + void completeTask(TaskReqVO taskReq); | ||
| 31 | + | ||
| 32 | + /** | ||
| 33 | + * 根据任务id, 查询已经完成的用户任务,未完成的用户任务 | ||
| 34 | + * @param taskQuery 查询参数 一般 taskId | ||
| 35 | + */ | ||
| 36 | + TaskHandleVO getTaskSteps(TaskQueryReqVO taskQuery); | ||
| 37 | + | ||
| 38 | + /** | ||
| 39 | + * 根据流程实例id, 查询历史用户任务,包括已完成,未完成 | ||
| 40 | + * @param processInstanceId 流程实例id | ||
| 41 | + */ | ||
| 42 | + List<TaskStepVO> getHistorySteps(String processInstanceId); | ||
| 43 | + | ||
| 44 | + /** | ||
| 45 | + * 获取用户任务的 formKey, 对应外置表单, 需要根据formKey 对应业务表单 | ||
| 46 | + * @param taskQuery 查询参数 ,一般taskId | ||
| 47 | + */ | ||
| 48 | + TodoTaskRespVO getTaskFormKey(TaskQueryReqVO taskQuery); | ||
| 49 | + | ||
| 50 | + | ||
| 51 | + /** | ||
| 52 | + * 返回高亮的流转进程 | ||
| 53 | + * @param processInstanceId 实例Id | ||
| 54 | + * @return {@link FileResp} 返回文件 | ||
| 55 | + */ | ||
| 56 | + FileResp getHighlightImg(String processInstanceId); | ||
| 57 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.lang.Assert; | ||
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCreateReqVO; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; | ||
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; | ||
| 7 | +import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; | ||
| 8 | +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; | ||
| 9 | +import lombok.extern.slf4j.Slf4j; | ||
| 10 | +import org.activiti.engine.HistoryService; | ||
| 11 | +import org.activiti.engine.RepositoryService; | ||
| 12 | +import org.activiti.engine.RuntimeService; | ||
| 13 | +import org.activiti.engine.TaskService; | ||
| 14 | +import org.activiti.engine.history.HistoricProcessInstanceQuery; | ||
| 15 | +import org.activiti.engine.impl.identity.Authentication; | ||
| 16 | +import org.activiti.engine.repository.ProcessDefinition; | ||
| 17 | +import org.activiti.engine.runtime.ProcessInstance; | ||
| 18 | +import org.activiti.engine.task.Task; | ||
| 19 | +import org.springframework.stereotype.Service; | ||
| 20 | +import org.springframework.validation.annotation.Validated; | ||
| 21 | + | ||
| 22 | +import javax.annotation.Resource; | ||
| 23 | +import java.util.Map; | ||
| 24 | + | ||
| 25 | +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_DEFINITION_IS_SUSPENDED; | ||
| 26 | +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_DEFINITION_NOT_EXISTS; | ||
| 27 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||
| 28 | + | ||
| 29 | +/** | ||
| 30 | + * 流程实例 Service 实现类 | ||
| 31 | + * | ||
| 32 | + * ProcessDefinition & ProcessInstance & Execution & Task 的关系: | ||
| 33 | + * 1. https://blog.csdn.net/bobozai86/article/details/105210414 | ||
| 34 | + * | ||
| 35 | + * HistoricProcessInstance & ProcessInstance 的关系: | ||
| 36 | + * 1.https://my.oschina.net/843294669/blog/719024 | ||
| 37 | + * 简单来说,前者 = 历史 + 运行中的流程实例,后者仅是运行中的流程实例 | ||
| 38 | + * | ||
| 39 | + * @author 芋道源码 | ||
| 40 | + */ | ||
| 41 | +@Service | ||
| 42 | +@Validated | ||
| 43 | +@Slf4j | ||
| 44 | +public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService { | ||
| 45 | + | ||
| 46 | + @Resource | ||
| 47 | + private RepositoryService repositoryService; | ||
| 48 | + @Resource | ||
| 49 | + private RuntimeService runtimeService; | ||
| 50 | + @Resource | ||
| 51 | + private TaskService taskService; | ||
| 52 | + @Resource | ||
| 53 | + private HistoryService historyService; | ||
| 54 | + | ||
| 55 | + @Resource | ||
| 56 | + private SysUserService userService; | ||
| 57 | + @Resource | ||
| 58 | + private BpmProcessDefinitionService processDefinitionService; | ||
| 59 | + | ||
| 60 | + @Override | ||
| 61 | + public String createProcessInstance(Long userId, BpmProcessInstanceCreateReqVO createReqVO) { | ||
| 62 | + // 校验流程定义 | ||
| 63 | + ProcessDefinition definition = processDefinitionService.getProcessDefinition(createReqVO.getProcessDefinitionId()); | ||
| 64 | + if (definition == null) { | ||
| 65 | + throw exception(PROCESS_DEFINITION_NOT_EXISTS); | ||
| 66 | + } | ||
| 67 | + if (definition.isSuspended()) { | ||
| 68 | + throw exception(PROCESS_DEFINITION_IS_SUSPENDED); | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + // 设置流程发起人 | ||
| 72 | + Authentication.setAuthenticatedUserId(String.valueOf(userId)); | ||
| 73 | + | ||
| 74 | + // 创建流程实例 | ||
| 75 | + Map<String, Object> variables = createReqVO.getVariables(); | ||
| 76 | + variables.put("INITIATOR", userId); // TODO 芋艿:初始化人员 | ||
| 77 | + ProcessInstance instance = runtimeService.startProcessInstanceById(createReqVO.getProcessDefinitionId(), variables); | ||
| 78 | + | ||
| 79 | + // 添加初始的评论 TODO 芋艿:在思考下 | ||
| 80 | + Task task = taskService.createTaskQuery().processInstanceId(instance.getId()).singleResult(); | ||
| 81 | + if (task != null) { | ||
| 82 | + SysUserDO user = userService.getUser(userId); | ||
| 83 | + Assert.notNull(user, "用户({})不存在", userId); | ||
| 84 | + String type = "normal"; | ||
| 85 | + taskService.addComment(task.getId(), instance.getProcessInstanceId(), type, | ||
| 86 | + String.format("%s 发起流程申请", user.getNickname())); | ||
| 87 | + // TODO 芋艿:应该不用下面两个步骤 | ||
| 88 | +// taskService.setAssignee(task.getId(), String.valueOf(userId)); | ||
| 89 | +// taskService.complete(task.getId(), variables); | ||
| 90 | + } | ||
| 91 | + return instance.getId(); | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + public void getMyProcessInstancePage(Long userId) { | ||
| 95 | + HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery() | ||
| 96 | + .startedBy(String.valueOf(userId)) // 发起人是自己 | ||
| 97 | + .orderByProcessInstanceStartTime().desc(); // 按照发起时间倒序 | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 4 | +import cn.hutool.core.io.IoUtil; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.*; | ||
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.convert.workflow.TaskConvert; | ||
| 7 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; | ||
| 8 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 9 | +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | ||
| 10 | +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | ||
| 11 | +import lombok.extern.slf4j.Slf4j; | ||
| 12 | +import org.activiti.api.runtime.shared.query.Page; | ||
| 13 | +import org.activiti.api.runtime.shared.query.Pageable; | ||
| 14 | +import org.activiti.api.task.model.Task; | ||
| 15 | +import org.activiti.api.task.model.builders.ClaimTaskPayloadBuilder; | ||
| 16 | +import org.activiti.api.task.model.builders.TaskPayloadBuilder; | ||
| 17 | +import org.activiti.api.task.runtime.TaskRuntime; | ||
| 18 | +import org.activiti.bpmn.constants.BpmnXMLConstants; | ||
| 19 | +import org.activiti.bpmn.model.BpmnModel; | ||
| 20 | +import org.activiti.bpmn.model.FlowNode; | ||
| 21 | +import org.activiti.bpmn.model.SequenceFlow; | ||
| 22 | +import org.activiti.engine.HistoryService; | ||
| 23 | +import org.activiti.engine.RepositoryService; | ||
| 24 | +import org.activiti.engine.RuntimeService; | ||
| 25 | +import org.activiti.engine.history.HistoricActivityInstance; | ||
| 26 | +import org.activiti.engine.history.HistoricProcessInstance; | ||
| 27 | +import org.activiti.engine.repository.ProcessDefinition; | ||
| 28 | +import org.activiti.engine.runtime.ProcessInstance; | ||
| 29 | +import org.activiti.engine.task.Comment; | ||
| 30 | +import org.activiti.image.ProcessDiagramGenerator; | ||
| 31 | +import org.springframework.stereotype.Service; | ||
| 32 | +import org.springframework.transaction.annotation.Transactional; | ||
| 33 | +import org.springframework.util.ObjectUtils; | ||
| 34 | + | ||
| 35 | +import javax.annotation.Resource; | ||
| 36 | +import java.io.IOException; | ||
| 37 | +import java.io.InputStream; | ||
| 38 | +import java.util.ArrayList; | ||
| 39 | +import java.util.List; | ||
| 40 | +import java.util.Map; | ||
| 41 | +import java.util.Optional; | ||
| 42 | +import java.util.stream.Collectors; | ||
| 43 | + | ||
| 44 | +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.HIGHLIGHT_IMG_ERROR; | ||
| 45 | +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_INSTANCE_NOT_EXISTS; | ||
| 46 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||
| 47 | + | ||
| 48 | +@Slf4j | ||
| 49 | +@Service | ||
| 50 | +public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 51 | + | ||
| 52 | + @Resource | ||
| 53 | + private TaskRuntime taskRuntime; | ||
| 54 | + | ||
| 55 | + @Resource | ||
| 56 | + private org.activiti.engine.TaskService activitiTaskService; | ||
| 57 | + | ||
| 58 | + @Resource | ||
| 59 | + private HistoryService historyService; | ||
| 60 | + | ||
| 61 | + @Resource | ||
| 62 | + private RepositoryService repositoryService; | ||
| 63 | + | ||
| 64 | + @Resource | ||
| 65 | + private RuntimeService runtimeService; | ||
| 66 | + | ||
| 67 | + @Resource | ||
| 68 | + private ProcessDiagramGenerator processDiagramGenerator; | ||
| 69 | + | ||
| 70 | + @Override | ||
| 71 | + public PageResult<TodoTaskRespVO> getTodoTaskPage(TodoTaskPageReqVO pageReqVO) { | ||
| 72 | + // TODO @jason:封装一个方法,用于转换成 activiti 的分页对象 | ||
| 73 | + final Pageable pageable = Pageable.of((pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize(), pageReqVO.getPageSize()); | ||
| 74 | + Page<Task> pageTasks = taskRuntime.tasks(pageable); | ||
| 75 | + int totalItems = pageTasks.getTotalItems(); | ||
| 76 | + List<Task> tasks = pageTasks.getContent(); | ||
| 77 | + final List<TodoTaskRespVO> respVOList = tasks.stream().map(task -> { | ||
| 78 | + ProcessDefinition definition = repositoryService.getProcessDefinition(task.getProcessDefinitionId()); | ||
| 79 | + return TaskConvert.INSTANCE.convert(task, definition); | ||
| 80 | + }).collect(Collectors.toList()); | ||
| 81 | + return new PageResult<>(respVOList, (long)totalItems); | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + | ||
| 85 | + @Override | ||
| 86 | + public void claimTask(String taskId) { | ||
| 87 | + taskRuntime.claim(new ClaimTaskPayloadBuilder() | ||
| 88 | + .withTaskId(taskId) | ||
| 89 | + .withAssignee(SecurityFrameworkUtils.getLoginUser().getUsername()) | ||
| 90 | + .build()); | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + | ||
| 94 | + | ||
| 95 | + @Override | ||
| 96 | + @Transactional | ||
| 97 | + public void completeTask(TaskReqVO taskReq) { | ||
| 98 | + final Task task = taskRuntime.task(taskReq.getTaskId()); | ||
| 99 | + | ||
| 100 | + activitiTaskService.addComment(taskReq.getTaskId(), task.getProcessInstanceId(), taskReq.getComment()); | ||
| 101 | + | ||
| 102 | + taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(taskReq.getTaskId()) | ||
| 103 | + .withVariables(taskReq.getVariables()) | ||
| 104 | + .build()); | ||
| 105 | + } | ||
| 106 | + | ||
| 107 | + | ||
| 108 | + | ||
| 109 | + @Override | ||
| 110 | + public TaskHandleVO getTaskSteps(TaskQueryReqVO taskQuery) { | ||
| 111 | + TaskHandleVO handleVO = new TaskHandleVO(); | ||
| 112 | + final Task task = taskRuntime.task(taskQuery.getTaskId()); | ||
| 113 | + List<TaskStepVO> steps = getTaskSteps(task.getProcessInstanceId()); | ||
| 114 | + handleVO.setHistoryTask(steps); | ||
| 115 | + return handleVO; | ||
| 116 | + } | ||
| 117 | + | ||
| 118 | + | ||
| 119 | + private List<TaskStepVO> getTaskSteps(String processInstanceId) { | ||
| 120 | + // 获得已完成的活动 | ||
| 121 | + List<HistoricActivityInstance> finished = historyService.createHistoricActivityInstanceQuery() | ||
| 122 | + .processInstanceId(processInstanceId) | ||
| 123 | + .activityType("userTask") | ||
| 124 | + .finished() | ||
| 125 | + .orderByHistoricActivityInstanceStartTime().asc().list(); | ||
| 126 | + // 获得对应的步骤 | ||
| 127 | + List<TaskStepVO> steps = new ArrayList<>(); | ||
| 128 | + finished.forEach(instance -> { | ||
| 129 | + TaskStepVO stepVO = TaskConvert.INSTANCE.convert(instance); | ||
| 130 | + stepVO.setStatus(1); // TODO @jason:1 这个 magic number 要枚举起来。 | ||
| 131 | + // TODO @jason:可以考虑把 comments 读取后,在统一调用 convert 拼接。另外 Comment 是废弃的类,有没其它可以使用的哈? | ||
| 132 | + List<Comment> comments = activitiTaskService.getTaskComments(instance.getTaskId()); | ||
| 133 | + if (!CollUtil.isEmpty(comments)) { | ||
| 134 | + stepVO.setComment(Optional.ofNullable(comments.get(0)).map(Comment::getFullMessage).orElse("")); | ||
| 135 | + } | ||
| 136 | + steps.add(stepVO); | ||
| 137 | + }); | ||
| 138 | + | ||
| 139 | + // 获得未完成的活动 | ||
| 140 | + List<HistoricActivityInstance> unfinished = historyService | ||
| 141 | + .createHistoricActivityInstanceQuery() | ||
| 142 | + .processInstanceId(processInstanceId) | ||
| 143 | + .activityType("userTask") | ||
| 144 | + .unfinished().list(); | ||
| 145 | + // 获得对应的步骤 | ||
| 146 | + for (HistoricActivityInstance instance : unfinished) { | ||
| 147 | + TaskStepVO stepVO = TaskConvert.INSTANCE.convert(instance); | ||
| 148 | + stepVO.setComment(""); | ||
| 149 | + stepVO.setStatus(0); | ||
| 150 | + steps.add(stepVO); | ||
| 151 | + } | ||
| 152 | + return steps; | ||
| 153 | + } | ||
| 154 | + | ||
| 155 | + | ||
| 156 | + @Override | ||
| 157 | + public List<TaskStepVO> getHistorySteps(String processInstanceId) { | ||
| 158 | + return getTaskSteps(processInstanceId); | ||
| 159 | + } | ||
| 160 | + | ||
| 161 | + @Override | ||
| 162 | + public TodoTaskRespVO getTaskFormKey(TaskQueryReqVO taskQuery) { | ||
| 163 | + final Task task = taskRuntime.task(taskQuery.getTaskId()); | ||
| 164 | + return TaskConvert.INSTANCE.convert(task); | ||
| 165 | + } | ||
| 166 | + | ||
| 167 | + @Override | ||
| 168 | + public FileResp getHighlightImg(String processInstanceId) { | ||
| 169 | + // 查询历史 | ||
| 170 | + //TODO 云扬四海 貌似流程结束后,点击审批进度会报错 | ||
| 171 | + // TODO @Li:一些 historyService 的查询,貌似比较通用,是不是抽一些小方法出来 | ||
| 172 | + HistoricProcessInstance hpi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); | ||
| 173 | + // 如果不存在实例。 说明数据异常 | ||
| 174 | + if (hpi == null) { | ||
| 175 | + throw exception(PROCESS_INSTANCE_NOT_EXISTS); | ||
| 176 | + } | ||
| 177 | + // 如果有结束时间 返回model的流程图 | ||
| 178 | + if (!ObjectUtils.isEmpty(hpi.getEndTime())) { | ||
| 179 | + ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionId(hpi.getProcessDefinitionId()).singleResult(); | ||
| 180 | + String resourceName = Optional.ofNullable(pd.getDiagramResourceName()).orElse(pd.getResourceName()); | ||
| 181 | + BpmnModel bpmnModel = repositoryService.getBpmnModel(pd.getId()); | ||
| 182 | + InputStream inputStream = processDiagramGenerator.generateDiagram(bpmnModel, new ArrayList<>(1), new ArrayList<>(1), | ||
| 183 | + "宋体", "宋体", "宋体"); | ||
| 184 | + FileResp fileResp = new FileResp(); | ||
| 185 | + fileResp.setFileName( resourceName + ".svg"); | ||
| 186 | + fileResp.setFileByte(IoUtil.readBytes(inputStream)); | ||
| 187 | + return fileResp; | ||
| 188 | + } | ||
| 189 | + // 没有结束时间。说明流程在执行过程中 | ||
| 190 | + // TODO @Li:一些 runtimeService 的查询,貌似比较通用,是不是抽一些小方法出来 | ||
| 191 | + ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); | ||
| 192 | + | ||
| 193 | + List<String> highLightedActivities = new ArrayList<>(); | ||
| 194 | + // 获取所有活动节点 | ||
| 195 | + List<HistoricActivityInstance> finishedInstances = historyService.createHistoricActivityInstanceQuery() | ||
| 196 | + .processInstanceId(processInstanceId).finished().list(); | ||
| 197 | + finishedInstances.stream().map(HistoricActivityInstance::getActivityId) | ||
| 198 | + .forEach(highLightedActivities::add); | ||
| 199 | + // 已完成的节点+当前节点 | ||
| 200 | + highLightedActivities.addAll(runtimeService.getActiveActivityIds(processInstanceId)); | ||
| 201 | + | ||
| 202 | + BpmnModel bpmnModel = repositoryService.getBpmnModel(pi.getProcessDefinitionId()); | ||
| 203 | + // 经过的流 | ||
| 204 | + List<String> highLightedFlowIds = getHighLightedFlows(bpmnModel, processInstanceId); | ||
| 205 | + | ||
| 206 | + //设置"宋体" | ||
| 207 | + try (InputStream inputStream = processDiagramGenerator.generateDiagram(bpmnModel, highLightedActivities, highLightedFlowIds, | ||
| 208 | + "宋体", "宋体", "宋体")){ | ||
| 209 | + FileResp fileResp = new FileResp(); | ||
| 210 | + fileResp.setFileName( hpi.getProcessDefinitionName() + ".svg"); | ||
| 211 | + fileResp.setFileByte(IoUtil.readBytes(inputStream)); | ||
| 212 | + return fileResp; | ||
| 213 | + } catch (IOException e) { | ||
| 214 | + log.error("[getHighlightImg][流程({}) 生成图表失败]", processInstanceId, e); | ||
| 215 | + throw exception(HIGHLIGHT_IMG_ERROR); | ||
| 216 | + } | ||
| 217 | + } | ||
| 218 | + | ||
| 219 | + // TODO @Li:这个方法的可读性还有一定的优化空间,可以思考下哈。 | ||
| 220 | + /** | ||
| 221 | + * 获取指定 processInstanceId 已经高亮的Flows | ||
| 222 | + * 获取已经流转的线 参考: https://blog.csdn.net/qiuxinfa123/article/details/119579863 | ||
| 223 | + * @param bpmnModel model | ||
| 224 | + * @param processInstanceId 流程实例Id | ||
| 225 | + * @return 获取已经流转的列表 | ||
| 226 | + */ | ||
| 227 | + private List<String> getHighLightedFlows(BpmnModel bpmnModel, String processInstanceId) { | ||
| 228 | + // 获取所有的线条 | ||
| 229 | + List<HistoricActivityInstance> historicActivityInstances = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId) | ||
| 230 | + .orderByHistoricActivityInstanceId().asc().list(); | ||
| 231 | + // 高亮流程已发生流转的线id集合 | ||
| 232 | + List<String> highLightedFlowIds = new ArrayList<>(); | ||
| 233 | + // 全部活动节点 | ||
| 234 | + List<FlowNode> historicActivityNodes = new ArrayList<>(); | ||
| 235 | + // 已完成的历史活动节点 | ||
| 236 | + List<HistoricActivityInstance> finishedActivityInstances = new ArrayList<>(); | ||
| 237 | + | ||
| 238 | + for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { | ||
| 239 | + FlowNode flowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(historicActivityInstance.getActivityId(), true); | ||
| 240 | + historicActivityNodes.add(flowNode); | ||
| 241 | + // 结束时间不为空,则是已完成节点 | ||
| 242 | + if (historicActivityInstance.getEndTime() != null) { | ||
| 243 | + finishedActivityInstances.add(historicActivityInstance); | ||
| 244 | + } | ||
| 245 | + } | ||
| 246 | + // 提取活动id 是唯一的。塞入Map | ||
| 247 | + Map<String, HistoricActivityInstance> historicActivityInstanceMap = CollectionUtils.convertMap(historicActivityInstances, HistoricActivityInstance::getActivityId); | ||
| 248 | + // 遍历已完成的活动实例,从每个实例的outgoingFlows中找到已执行的 | ||
| 249 | + for (HistoricActivityInstance currentActivityInstance : finishedActivityInstances) { | ||
| 250 | + // 获得当前活动对应的节点信息及outgoingFlows信息 | ||
| 251 | + FlowNode currentFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(currentActivityInstance.getActivityId(), true); | ||
| 252 | + List<SequenceFlow> sequenceFlows = currentFlowNode.getOutgoingFlows(); | ||
| 253 | + | ||
| 254 | + // 遍历outgoingFlows并找到已流转的 满足如下条件认为已已流转: | ||
| 255 | + // 1.当前节点是并行网关或兼容网关,则通过outgoingFlows能够在历史活动中找到的全部节点均为已流转 | ||
| 256 | + // 2.当前节点是以上两种类型之外的,通过outgoingFlows查找到的时间最早的流转节点视为有效流转 | ||
| 257 | + if (BpmnXMLConstants.ELEMENT_GATEWAY_PARALLEL.equals(currentActivityInstance.getActivityType()) | ||
| 258 | + || BpmnXMLConstants.ELEMENT_GATEWAY_INCLUSIVE.equals(currentActivityInstance.getActivityType())) { | ||
| 259 | + // 遍历历史活动节点,找到匹配流程目标节点的 | ||
| 260 | + for (SequenceFlow sequenceFlow : sequenceFlows) { | ||
| 261 | + FlowNode targetFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(sequenceFlow.getTargetRef(), true); | ||
| 262 | + if (historicActivityNodes.contains(targetFlowNode)) { | ||
| 263 | + highLightedFlowIds.add(targetFlowNode.getId()); | ||
| 264 | + } | ||
| 265 | + } | ||
| 266 | + } else { | ||
| 267 | + long earliestStamp = 0L; | ||
| 268 | + String highLightedFlowId = null; | ||
| 269 | + // 循环流出的流 | ||
| 270 | + for (SequenceFlow sequenceFlow : sequenceFlows) { | ||
| 271 | + HistoricActivityInstance historicActivityInstance = historicActivityInstanceMap.get(sequenceFlow.getTargetRef()); | ||
| 272 | + if (historicActivityInstance == null) { | ||
| 273 | + continue; | ||
| 274 | + } | ||
| 275 | + final long startTime = historicActivityInstance.getStartTime().getTime(); | ||
| 276 | + // 遍历匹配的集合,取得开始时间最早的一个 | ||
| 277 | + if (earliestStamp == 0 || earliestStamp >= startTime) { | ||
| 278 | + highLightedFlowId = sequenceFlow.getId(); | ||
| 279 | + earliestStamp = startTime; | ||
| 280 | + } | ||
| 281 | + } | ||
| 282 | + highLightedFlowIds.add(highLightedFlowId); | ||
| 283 | + } | ||
| 284 | + | ||
| 285 | + } | ||
| 286 | + return highLightedFlowIds; | ||
| 287 | + } | ||
| 288 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/user/SysUserMapper.java
| 1 | package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.user; | 1 | package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.user; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.util.StrUtil; | ||
| 4 | +import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserExportReqVO; | ||
| 5 | +import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserPageReqVO; | ||
| 3 | import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; | 6 | import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; |
| 7 | +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||
| 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 8 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 9 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 6 | import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; | 10 | import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; |
| 7 | -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserExportReqVO; | ||
| 8 | -import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.SysUserPageReqVO; | ||
| 9 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 11 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| 10 | import org.apache.ibatis.annotations.Mapper; | 12 | import org.apache.ibatis.annotations.Mapper; |
| 11 | 13 | ||
| 12 | import java.util.Collection; | 14 | import java.util.Collection; |
| 13 | import java.util.List; | 15 | import java.util.List; |
| 16 | +import java.util.Optional; | ||
| 14 | 17 | ||
| 15 | @Mapper | 18 | @Mapper |
| 16 | public interface SysUserMapper extends BaseMapperX<SysUserDO> { | 19 | public interface SysUserMapper extends BaseMapperX<SysUserDO> { |
| @@ -52,5 +55,14 @@ public interface SysUserMapper extends BaseMapperX<SysUserDO> { | @@ -52,5 +55,14 @@ public interface SysUserMapper extends BaseMapperX<SysUserDO> { | ||
| 52 | return selectList(new QueryWrapperX<SysUserDO>().like("username", username)); | 55 | return selectList(new QueryWrapperX<SysUserDO>().like("username", username)); |
| 53 | } | 56 | } |
| 54 | 57 | ||
| 58 | + | ||
| 59 | + default List<SysUserDO> selectListByDepartIdAndPostId(Long departId, Long postId) { | ||
| 60 | + return selectList(new QueryWrapperX<SysUserDO>() | ||
| 61 | + .eq("status", CommonStatusEnum.ENABLE.getStatus()) | ||
| 62 | + .eq("dept_id", departId) | ||
| 63 | + // TODO @jason: 封装一个 StringUtils .toString 。如果空的时候,设置为 null。会更简洁 | ||
| 64 | + .likeIfPresent("post_ids", Optional.ofNullable(postId).map(t -> String.valueOf(postId)).orElse(""))); | ||
| 65 | + } | ||
| 66 | + | ||
| 55 | } | 67 | } |
| 56 | 68 |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserService.java
| @@ -108,6 +108,14 @@ public interface SysUserService { | @@ -108,6 +108,14 @@ public interface SysUserService { | ||
| 108 | PageResult<SysUserDO> getUserPage(SysUserPageReqVO reqVO); | 108 | PageResult<SysUserDO> getUserPage(SysUserPageReqVO reqVO); |
| 109 | 109 | ||
| 110 | /** | 110 | /** |
| 111 | + * 获得用户 | ||
| 112 | + * | ||
| 113 | + * @param id 用户编号 | ||
| 114 | + * @return 用户 | ||
| 115 | + */ | ||
| 116 | + SysUserDO getUser(Long id); | ||
| 117 | + | ||
| 118 | + /** | ||
| 111 | * 获得用户列表 | 119 | * 获得用户列表 |
| 112 | * | 120 | * |
| 113 | * @param reqVO 列表请求 | 121 | * @param reqVO 列表请求 |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java
| @@ -165,6 +165,11 @@ public class SysUserServiceImpl implements SysUserService { | @@ -165,6 +165,11 @@ public class SysUserServiceImpl implements SysUserService { | ||
| 165 | } | 165 | } |
| 166 | 166 | ||
| 167 | @Override | 167 | @Override |
| 168 | + public SysUserDO getUser(Long id) { | ||
| 169 | + return userMapper.selectById(id); | ||
| 170 | + } | ||
| 171 | + | ||
| 172 | + @Override | ||
| 168 | public List<SysUserDO> getUsers(SysUserExportReqVO reqVO) { | 173 | public List<SysUserDO> getUsers(SysUserExportReqVO reqVO) { |
| 169 | return userMapper.selectList(reqVO, this.getDeptCondition(reqVO.getDeptId())); | 174 | return userMapper.selectList(reqVO, this.getDeptCondition(reqVO.getDeptId())); |
| 170 | } | 175 | } |