diff --git a/.editorconfig b/.editorconfig index 9bc93587c..2f2262bb1 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,3 +1,4 @@ +# 开发组IDE 编辑器标准 V2.1.0 root = true [*.{adoc, bat, groovy, html, java, js, jsp, kt, kts, md, properties, py, rb, sh, sql, svg, txt, xml, xsd}] diff --git a/.gitignore b/.gitignore index 942584dd7..290129e4d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +# 忽略匹配下列规则的Git 提交 V2.1.0 ### gradle ### .gradle /build/ diff --git a/LICENSE b/LICENSE index 7275ec2d0..a3640ace6 100644 --- a/LICENSE +++ b/LICENSE @@ -14,4 +14,8 @@ pigX并非一个开源软件,作者保留全部的权利。 将本项目的部分或全部代码和资源进行任何形式的再发行(尤其上传GitHub、Gitee ) 利用本项目的部分或全部代码和资源进行任何商业行为 +免责声明 + +PigX 未对任何组织、团队,书面授权商业使用。如若出现任何商业后果、纠纷和本人无关,特此声明 + Author: lengleng (wangiegie@gmail.com) diff --git a/README.md b/README.md index c25f71dd9..52863a401 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ -## pigx 2.0 -[pigx 2.0 部署文档](doc/md/deploy.md) -[pigx 2.0 新特性说明 ](https://www.bilibili.com/video/av37786337) -[pigx 2.0 从检出到启动](https://www.bilibili.com/video/av37695530) +## 当前版本 +V2.1.0 +## pigx pro +[pigx pro 部署文档](doc/md/deploy.md) +[pigx pro 新特性说明 ](https://www.bilibili.com/video/av37786337) +[pigx pro 从检出到启动](https://www.bilibili.com/video/av37695530) [pigx pro新建微服务模块(一)](https://www.bilibili.com/video/av37737139) [pigx pro新建微服务模块(二)](https://www.bilibili.com/video/av37740030) [pigx pro新建微服务模块(三)](https://www.bilibili.com/video/av37743341) @@ -10,20 +12,23 @@ ## 协议和授权 -pigX并非一个开源软件,作者保留全部的权利。 - +pigX并非一个开源软件,作者保留全部的权利。 擅自窃用,即属严重侵权行为,与盗窃无异。产生的一切任何后果责任由侵权者自负。 ### 🌹权益 -个人使用学习、毕设 +1. 个人使用 +2. 允许用于学习、毕设等。 ### 🚫禁止 1. 将本项目的部分或全部代码和资源进行任何形式的再发行(尤其上传GitHub、Gitee ) - 2. 利用本项目的部分或全部代码和资源进行`任何商业行为` +### 免责声明 + +PigX 未对任何组织、团队,书面授权商业使用。如若出现任何商业后果、纠纷和本人无关,特此声明 + ## 贡献代码 pigX并非一个开源项目,也不是社区共同创造,其全部功能由作者独立完成。 diff --git a/doc/db/2pigxx.sql b/doc/db/2pigxx.sql index a40c8cf4a..5dbac2092 100644 --- a/doc/db/2pigxx.sql +++ b/doc/db/2pigxx.sql @@ -11,7 +11,7 @@ Target Server Version : 50723 File Encoding : utf-8 - Date: 12/10/2018 21:57:20 PM + Date: 01/09/2019 11:08:30 AM */ USE pigxx; @@ -37,13 +37,6 @@ CREATE TABLE `job_execution_log` ( PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='任务日志表'; --- ---------------------------- --- Records of `job_execution_log` --- ---------------------------- -BEGIN; -INSERT INTO `job_execution_log` VALUES ('071eab5d-cf95-4d4e-9346-5570e5a9303b', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'), ('0ac3bde4-f47e-4632-a03a-2c40e99ddb93', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('0ce99951-d056-4224-8f73-73cdcc93faf2', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('171a4207-afac-43be-ba81-7a584c906caa', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('18d59cb5-e897-4aca-bea1-6b7e108446d3', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'), ('1b1c5846-1552-4a8e-91bd-e6d3de5d94c1', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('1b1fcad5-4c7f-41d3-b1f8-1d3860f026b4', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('266ab0de-1874-479a-885c-e9781abd9b9e', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('2a27c1a5-d3ad-44ed-a2ab-148819373e85', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('3faf189f-5314-4e0e-8d6a-c928aebcb38b', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('438f7c31-8259-4958-8c90-100aed490b49', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('504febd1-b31a-4d38-a170-efd3db6bea2f', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('51fe65cf-0737-4e48-9eb2-44ea13e32ed0', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('53109268-cd42-4907-a8c5-19fa09f37415', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('55619ab3-c175-4715-9b04-d113b36fe22c', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('57178f63-87ca-40eb-9c20-aa8354e38c9d', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('596d2c37-a0a3-4b41-9116-47698ae0db4a', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('59d0d17f-7123-442b-97ce-f204efbcaf0a', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('5c142495-165e-44f9-b474-62a073ffc2e4', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('5c354343-2ec4-4a6e-8b2b-e155a9579ebf', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('60c7c895-530f-4b11-9951-ceb62420d9a0', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('691621ca-ad2b-4488-9c05-467c06b488d4', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('69bc4ba5-edeb-4a06-ae25-b1bca551fa44', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('6b574430-c288-41eb-ab47-e761742e31ff', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('6cce85aa-9692-4cc8-ae36-bf5e716582fe', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('72840364-617f-4311-a48f-977fe199ad66', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'), ('72f5b255-6253-491f-bfef-bb738244f448', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('7327be6f-8601-4f4b-adc0-ae656a243a8e', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('7630f8d1-6d7e-470b-9b86-21d74bee4392', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('790c91ac-ff55-4f42-b13e-a987e89feb40', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('7d2f9cbb-2bb4-4277-9f2d-ef9ab4e77a9c', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('7e904a07-6f2b-40e5-a5ee-6b3c32b14497', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('7f8c2fda-81ef-4fcc-b996-a5b8090ace9f', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('7faf9f13-f0b1-4042-a725-8896ff74da2b', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'), ('809b4c76-0ff8-4dc6-b10b-c437bea1decc', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('82554f27-d1d9-484e-b207-36bafbfe894b', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('86b33862-7086-4790-869f-238cf228e36e', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('86c1800b-657c-4d47-9ce8-befe5da31935', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'), ('885de21d-7a38-47ad-91da-b61fcd75e7ba', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('8af99ddb-1ec3-444a-b9ba-da5989310385', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('8bcaf102-f0ec-4730-8646-5f13b35134ad', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('923058d6-f53e-46b8-92cb-893249f88a08', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('9299b690-5022-4f17-b9d8-d6d4995554e7', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('9928945a-d584-44a9-b133-02e5829d8f5c', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('9b63ec53-8d9f-4f62-8a23-87e328910065', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'), ('9d83ee87-0745-44ee-b660-579bb769b8d0', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('a8ec9925-0b4a-4f03-8d29-76714094ebc6', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('a968ac8b-9aa0-4500-b6fc-5929965cde41', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('ab0da059-a96a-4e99-9387-d07b76cc1300', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('ac80cdab-cbe4-4683-aa09-dc07590b5ace', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('ae342af0-fd6d-4929-904a-60eee112736a', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('b0665ad9-a420-47ba-a852-ab134bec2a74', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('b99a0133-5cba-4996-ac08-787739134e1e', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('baa7adf6-0bdb-42f8-b680-e94aa6882aa5', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('bac7d872-cb8d-4d99-a976-2275e732d0bb', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('bb183cd3-c57c-4dd6-9247-5f811db63b37', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('bca778bc-09cf-4fcb-a6c4-707e4186ad20', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('bd0b97cb-1966-476f-9ebe-13ddb723af31', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('c4bf2626-c548-489b-b64f-ed4ebd8c10b2', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('c8268aed-ca12-4d8f-8f97-93c49425e291', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('d0c11201-5712-48c3-bd1b-2e1fd815c51f', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('d5bb2743-1e22-42f4-9c93-c1915c4f3aa6', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'), ('d8cad708-e95a-49e5-b7ed-65169e6b9175', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('dda0f80c-21d9-467e-83cd-49471f43baeb', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('e8a59495-8237-44c2-8a42-57c34794e4ee', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('e8f23a9b-6679-4df8-a776-c8b0feab2613', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('ecb02f59-ec25-40ed-8900-fd6e609335b2', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('ededf2f8-9c55-4578-947c-d45fd9e23fc1', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('ee078952-505c-4071-9894-4dd512725a7e', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'), ('f178ef4e-1e3f-41a5-9b4a-1accab86856e', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('ff720b81-a956-4e7a-9aaa-4c7cf3cb2f4a', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('ffd0eef2-a967-405c-aaa4-2018886665ec', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'); -COMMIT; - -- ---------------------------- -- Table structure for `job_status_trace_log` -- ---------------------------- @@ -60,17 +53,9 @@ CREATE TABLE `job_status_trace_log` ( `state` varchar(20) NOT NULL, `message` varchar(4000) DEFAULT NULL, `creation_time` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE, - KEY `TASK_ID_STATE_INDEX` (`task_id`,`state`) USING BTREE + PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='任务轨迹表'; --- ---------------------------- --- Records of `job_status_trace_log` --- ---------------------------- -BEGIN; -INSERT INTO `job_status_trace_log` VALUES ('04212978-c410-45ed-8c4f-e68387d0fd05', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job2\' execute begin.', '2018-11-30 13:00:00'), ('06429f8d-84d0-4a44-83a0-d058a2925ac7', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job\' execute begin.', '2018-11-30 15:00:00'), ('09c1eda3-3384-4fc5-af62-33e39cc9df48', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 15:00:00'), ('0aedb2f8-3b7d-47ad-b76b-1065d71daca6', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 13:00:00'), ('0c0c9168-29c8-4b51-b78a-c97066fdf3ea', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 14:00:00'), ('130f458d-a6e9-41f7-9415-b5d051924ef6', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 14:00:00'), ('1b6fdc3a-819c-4dc2-970d-8aa01a4b879c', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-dataflow-job\' execute begin.', '2018-12-03 15:00:00'), ('20f69404-609a-47ed-b1af-d0dae2e24594', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 13:00:00'), ('21705123-1fd9-4e4a-b7d3-63b7c16bf5ff', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-dataflow-job\' execute begin.', '2018-11-30 15:00:00'), ('24dde237-c186-44c2-b93a-81edd6a9c1b8', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 12:00:01'), ('2f5fd775-0c73-439e-ad1a-14853890a210', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 17:00:01'), ('3066d315-36a3-4ae4-9e78-b8ea683bbd3a', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 14:00:00'), ('31efd4c7-c6f1-406b-a07c-ab39b128b3f2', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 12:00:01'), ('35f60634-3beb-466e-b236-7348984b96a8', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 16:00:00'), ('402b0c76-e256-44cb-b554-358a1f0dd68b', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 14:00:00'), ('4d951975-e4e2-46ba-b59f-719989ece5a1', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 15:00:00'), ('4d95fa7d-c47d-48d4-b910-744469ce2e01', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 15:00:00'), ('4dc571c7-7785-4631-b5ab-e5b9d78f5a7e', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job\' execute begin.', '2018-11-30 14:00:00'), ('4f6a9f13-4cd6-431f-959c-7c117fea3702', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 12:00:01'), ('59d0b4c8-f58f-4f4a-91be-5602dd202631', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-dataflow-job\' execute begin.', '2018-11-30 13:00:00'), ('5db6982f-146e-400b-b8bd-ab9c7dee4b24', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 15:00:00'), ('5e46b4fb-8166-41dc-94a4-0d65323deb24', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job\' execute begin.', '2018-12-03 16:00:00'), ('5f00c386-520e-4ba9-816d-e6e01009c9e5', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 16:00:00'), ('6035f623-afa8-4a5b-9ed2-de2824cf631d', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 15:00:00'), ('6a4e7703-c1cf-4c5d-b7f2-d4529714ec5e', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 13:00:00'), ('6c393f32-31a9-44c5-8164-ea0f6bb9b79a', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job2\' execute begin.', '2018-12-03 14:00:00'), ('716b674c-cdd7-4176-ba25-9e1d55230714', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 17:00:01'), ('71c36e5f-c554-427b-ac8c-2aa04b725a9a', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job\' execute begin.', '2018-11-30 12:00:00'), ('73d6934a-8ac4-4e3b-ad2e-c69e37496206', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 16:00:00'), ('7516172b-b4fd-41a5-96c8-386cc9391a6d', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 17:00:01'), ('7780a559-2596-4673-9301-b45313a58ae0', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 16:00:00'), ('7a411e61-2e8d-4037-a699-84492cde28a6', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 15:00:00'), ('7b9d9b0f-03dc-4425-84a5-28c24a66c754', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 16:00:00'), ('809c5aef-72f9-4955-bdc9-4dbe497e2477', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-dataflow-job\' execute begin.', '2018-11-30 14:00:00'), ('821d5639-9a0c-41d9-9a42-9239adee34c3', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 12:00:01'), ('86e8d5e8-9c00-4529-a38a-6f518b8ab305', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 15:00:00'), ('8d0fb85c-f9f8-4ccd-9223-51aeeb4e5a7f', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 14:00:00'), ('8f1411fc-6fe4-49f8-abab-5f0184b951d5', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 14:00:00'), ('939ede1c-6be1-4e54-95bc-0799de9a1d1a', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-dataflow-job\' execute begin.', '2018-11-30 12:00:00'), ('9a509a91-6f07-45db-bbf6-402e1c471ee1', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 12:00:01'), ('a4a76ea3-2742-4036-bce9-f27b0980fca3', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job2\' execute begin.', '2018-11-30 14:00:00'), ('b46d9c6f-358e-40c0-8f1f-b215ab455a9b', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 15:00:00'), ('b82ee56d-4d46-486b-b26a-f50fb2c8fc6f', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 15:00:00'), ('b931a6fe-85ae-4b18-a857-f7ecdd933d35', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 12:00:01'), ('bbed07d3-b5cb-4b63-be6e-28a642562e7c', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 15:00:00'), ('bd407b0c-0a73-4b86-b194-5f33ba03a14a', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job2\' execute begin.', '2018-12-03 16:00:00'), ('c22be05b-efa2-44d6-938c-3deb7ab0edba', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 14:00:00'), ('c38949bc-40fb-4af0-824e-2e85be00462e', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 17:00:01'), ('c45024e9-a34c-4894-963f-ced333440153', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job\' execute begin.', '2018-11-30 13:00:00'), ('c51477ac-c37d-48fb-807d-4aafb1800f6f', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 17:00:01'), ('c7aa10d3-9823-490f-aa24-92ce68037836', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 17:00:00'), ('c94c32a7-df68-4c96-809f-fcbcd7f212de', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job\' execute begin.', '2018-12-03 14:00:00'), ('cc4534e9-33d9-4353-9f34-67ff36e25d4b', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job2\' execute begin.', '2018-12-03 15:00:00'), ('cf0b6d50-63f2-4a7d-8582-9bc69138ac92', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job2\' execute begin.', '2018-11-30 12:00:00'), ('d00a44a8-4f35-476a-9b9b-998ac1808a21', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job\' execute begin.', '2018-12-03 17:00:00'), ('d88bf0d6-f101-4f88-a686-bff101777d78', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 16:00:00'), ('d8ccabdb-39fc-4fec-8369-be846c9d3e03', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 13:00:00'), ('d9566403-8757-454e-97dd-f67f42c4aed0', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-dataflow-job\' execute begin.', '2018-12-03 17:00:00'), ('d9963ad2-c071-48ec-a869-d0eb4e2e0451', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-dataflow-job\' execute begin.', '2018-12-03 14:00:00'), ('dd452030-55b1-4eb1-b25d-6cd434d15e47', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 14:00:00'), ('de8b7872-d35b-4054-8794-fcd03989c8f7', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job2\' execute begin.', '2018-11-30 15:00:00'), ('df184862-58e5-4158-a390-6bcbf25dbef6', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-dataflow-job\' execute begin.', '2018-12-03 16:00:00'), ('e6014183-c712-4887-afe5-7e653388e6f8', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 14:00:00'), ('ec5f1bdb-5a2c-4977-a275-ec87db535114', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job2\' execute begin.', '2018-12-03 17:00:00'), ('ed1f5448-b266-403e-93e6-28100919ccac', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job\' execute begin.', '2018-12-03 15:00:00'), ('eef1f5e9-95ad-4eff-a2e5-e431015afc6b', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 14:00:00'), ('f460fd48-451e-4a9a-8cb4-19c9a4af5daa', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 13:00:00'), ('f9cd13ef-2f33-4e08-b91c-e7c193ea12b2', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 13:00:00'), ('fa1a6947-e005-4ffd-98bc-c9de5f4ce7e2', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 15:00:00'), ('fa6c3023-7379-470e-9064-d4b9b0ae06de', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 15:00:00'), ('fde44f13-c1b9-466c-9899-c2606ba0a721', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 14:00:00'), ('fef44c10-9d86-4410-b723-a92464c5e4ad', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 14:00:00'); -COMMIT; - -- ---------------------------- -- Table structure for `sys_dept` -- ---------------------------- @@ -91,7 +76,7 @@ CREATE TABLE `sys_dept` ( -- Records of `sys_dept` -- ---------------------------- BEGIN; -INSERT INTO `sys_dept` VALUES ('1', '山东农信', null, '2018-01-22 19:00:23', '2018-09-13 01:46:29', '0', '0', '1'), ('2', '沙县国际', null, '2018-01-22 19:00:38', '2018-09-13 01:46:30', '0', '0', '1'), ('3', '潍坊农信', null, '2018-01-22 19:00:44', '2018-09-13 01:46:31', '0', '1', '1'), ('4', '高新农信', null, '2018-01-22 19:00:52', '2018-10-06 10:41:52', '0', '3', '1'), ('5', '院校农信', null, '2018-01-22 19:00:57', '2018-10-06 10:42:51', '0', '4', '1'), ('6', '潍坊学院农信', null, '2018-01-22 19:01:06', '2018-09-13 03:29:10', '1', '5', '1'), ('7', '山东沙县', null, '2018-01-22 19:01:57', '2018-09-13 01:46:42', '0', '2', '1'), ('8', '潍坊沙县', null, '2018-01-22 19:02:03', '2018-09-13 01:46:43', '0', '7', '1'), ('9', '高新沙县', null, '2018-01-22 19:02:14', '2018-09-13 01:46:44', '1', '8', '1'), ('10', '租户2', null, '2018-11-18 13:27:11', '2018-11-18 13:42:19', '0', '0', '2'), ('11', '院校沙县', null, '2018-12-10 21:19:26', null, '0', '8', '1'); +INSERT INTO `sys_dept` VALUES ('1', '山东农信', null, '2018-01-22 19:00:23', '2018-09-13 01:46:29', '0', '0', '1'), ('2', '沙县国际', null, '2018-01-22 19:00:38', '2018-09-13 01:46:30', '0', '0', '1'), ('3', '潍坊农信', null, '2018-01-22 19:00:44', '2018-09-13 01:46:31', '0', '1', '1'), ('4', '高新农信', null, '2018-01-22 19:00:52', '2018-10-06 10:41:52', '0', '3', '1'), ('5', '院校农信', null, '2018-01-22 19:00:57', '2018-10-06 10:42:51', '0', '4', '1'), ('6', '潍院农信', null, '2018-01-22 19:01:06', '2019-01-09 10:58:18', '1', '5', '1'), ('7', '山东沙县', null, '2018-01-22 19:01:57', '2018-09-13 01:46:42', '0', '2', '1'), ('8', '潍坊沙县', null, '2018-01-22 19:02:03', '2018-09-13 01:46:43', '0', '7', '1'), ('9', '高新沙县', null, '2018-01-22 19:02:14', '2018-09-13 01:46:44', '1', '8', '1'), ('10', '租户2', null, '2018-11-18 13:27:11', '2018-11-18 13:42:19', '0', '0', '2'), ('11', '院校沙县', null, '2018-12-10 21:19:26', null, '0', '8', '1'); COMMIT; -- ---------------------------- @@ -196,7 +181,7 @@ CREATE TABLE `sys_menu` ( -- Records of `sys_menu` -- ---------------------------- BEGIN; -INSERT INTO `sys_menu` VALUES ('1000', '权限管理', null, '/upms', '-1', 'icon-quanxianguanli', 'Layout', '0', '0', '0', '2018-09-28 08:29:53', '2018-09-28 08:53:01', '0', '1'), ('1100', '用户管理', null, 'user', '1000', 'icon-yonghuguanli', 'views/admin/user/index', '1', '0', '0', '2017-11-02 22:24:37', '2018-09-28 09:00:41', '0', '1'), ('1101', '用户新增', 'sys_user_add', null, '1100', null, null, null, '0', '1', '2017-11-08 09:52:09', '2018-09-28 09:06:34', '0', '1'), ('1102', '用户修改', 'sys_user_edit', null, '1100', null, null, null, '0', '1', '2017-11-08 09:52:48', '2018-09-28 09:06:37', '0', '1'), ('1103', '用户删除', 'sys_user_del', null, '1100', null, null, null, '0', '1', '2017-11-08 09:54:01', '2018-09-28 09:06:42', '0', '1'), ('1200', '菜单管理', null, 'menu', '1000', 'icon-caidanguanli', 'views/admin/menu/index', '2', '0', '0', '2017-11-08 09:57:27', '2018-09-28 09:00:45', '0', '1'), ('1201', '菜单新增', 'sys_menu_add', null, '1200', null, null, null, '0', '1', '2017-11-08 10:15:53', '2018-09-28 09:07:16', '0', '1'), ('1202', '菜单修改', 'sys_menu_edit', null, '1200', null, null, null, '0', '1', '2017-11-08 10:16:23', '2018-09-28 09:07:18', '0', '1'), ('1203', '菜单删除', 'sys_menu_del', null, '1200', null, null, null, '0', '1', '2017-11-08 10:16:43', '2018-09-28 09:07:22', '0', '1'), ('1300', '角色管理', null, 'role', '1000', 'icon-jiaoseguanli', 'views/admin/role/index', '3', '0', '0', '2017-11-08 10:13:37', '2018-09-28 09:00:48', '0', '1'), ('1301', '角色新增', 'sys_role_add', null, '1300', null, null, null, '0', '1', '2017-11-08 10:14:18', '2018-09-28 09:07:46', '0', '1'), ('1302', '角色修改', 'sys_role_edit', null, '1300', null, null, null, '0', '1', '2017-11-08 10:14:41', '2018-09-28 09:07:49', '0', '1'), ('1303', '角色删除', 'sys_role_del', null, '1300', null, null, null, '0', '1', '2017-11-08 10:14:59', '2018-09-28 09:07:53', '0', '1'), ('1304', '分配权限', 'sys_role_perm', null, '1300', null, null, null, '0', '1', '2018-04-20 07:22:55', '2018-09-28 09:13:23', '0', '1'), ('1400', '部门管理', null, 'dept', '1000', 'icon-web-icon-', 'views/admin/dept/index', '4', '0', '0', '2018-01-20 13:17:19', '2018-12-09 16:35:12', '0', '1'), ('1401', '部门新增', 'sys_dept_add', null, '1400', null, null, null, '0', '1', '2018-01-20 14:56:16', '2018-09-28 09:08:13', '0', '1'), ('1402', '部门修改', 'sys_dept_edit', null, '1400', null, null, null, '0', '1', '2018-01-20 14:56:59', '2018-09-28 09:08:16', '0', '1'), ('1403', '部门删除', 'sys_dept_del', null, '1400', null, null, null, '0', '1', '2018-01-20 14:57:28', '2018-09-28 09:08:18', '0', '1'), ('2000', '系统管理', null, '/admin', '-1', 'icon-xitongguanli', 'Layout', '1', '0', '0', '2017-11-07 20:56:00', '2018-09-28 08:53:18', '0', '1'), ('2100', '日志管理', null, 'log', '2000', 'icon-rizhiguanli', 'views/admin/log/index', '5', '0', '0', '2017-11-20 14:06:22', '2018-09-28 09:01:52', '0', '1'), ('2101', '日志删除', 'sys_log_del', null, '2100', null, null, null, '0', '1', '2017-11-20 20:37:37', '2018-09-28 09:08:44', '0', '1'), ('2200', '字典管理', null, 'dict', '2000', 'icon-navicon-zdgl', 'views/admin/dict/index', '6', '0', '0', '2017-11-29 11:30:52', '2018-09-28 09:01:47', '0', '1'), ('2201', '字典删除', 'sys_dict_del', null, '2200', null, null, null, '0', '1', '2017-11-29 11:30:11', '2018-09-28 09:09:10', '0', '1'), ('2202', '字典新增', 'sys_dict_add', null, '2200', null, null, null, '0', '1', '2018-05-11 22:34:55', '2018-09-28 09:09:12', '0', '1'), ('2203', '字典修改', 'sys_dict_edit', null, '2200', null, null, null, '0', '1', '2018-05-11 22:36:03', '2018-09-28 09:09:16', '0', '1'), ('2300', '代码生成', '', 'gen', '2000', 'icon-weibiaoti46', 'views/gen/index', '8', '0', '0', '2018-01-20 13:17:19', '2018-11-24 05:21:01', '0', '1'), ('2400', '终端管理', '', 'client', '2000', 'icon-shouji', 'views/admin/client/index', '9', '0', '0', '2018-01-20 13:17:19', '2018-09-28 09:01:43', '0', '1'), ('2401', '客户端新增', 'sys_client_add', null, '2400', '1', null, null, '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:10:25', '0', '1'), ('2402', '客户端修改', 'sys_client_edit', null, '2400', null, null, null, '0', '1', '2018-05-15 21:37:06', '2018-09-28 09:10:27', '0', '1'), ('2403', '客户端删除', 'sys_client_del', null, '2400', null, null, null, '0', '1', '2018-05-15 21:39:16', '2018-09-28 09:10:30', '0', '1'), ('2500', '密钥管理', '', 'social', '2000', 'icon-miyue', 'views/admin/social/index', '10', '0', '0', '2018-01-20 13:17:19', '2018-09-28 09:01:41', '0', '1'), ('2501', '密钥新增', 'generator_syssocialdetails_add', null, '2500', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:11:02', '0', '1'), ('2502', '密钥修改', 'generator_syssocialdetails_edit', null, '2500', '1', null, '1', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:11:04', '0', '1'), ('2503', '密钥删除', 'generator_syssocialdetails_del', null, '2500', '1', null, '2', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:11:06', '0', '1'), ('2600', '令牌管理', null, 'token', '2000', 'icon-denglvlingpai', 'views/admin/token/index', '11', '0', '0', '2018-09-04 05:58:41', '2018-09-28 09:01:38', '0', '1'), ('2601', '令牌删除', 'sys_token_del', null, '2600', null, null, '1', '0', '1', '2018-09-04 05:59:50', '2018-09-28 09:11:24', '0', '1'), ('2700', '动态路由', null, 'route', '2000', 'icon-luyou', 'views/admin/route/index', '12', '0', '0', '2018-09-04 05:58:41', '2018-09-28 09:01:38', '0', '1'), ('3000', '系统监控', null, '/daemon', '-1', 'icon-msnui-supervise', 'Layout', '2', '0', '0', '2018-07-27 01:13:21', '2018-09-28 08:53:24', '0', '1'), ('3100', '服务监控', null, 'http://127.0.0.1:5001', '3000', 'icon-server', null, '0', '0', '0', '2018-06-26 10:50:32', '2018-09-28 09:03:40', '0', '1'), ('3200', '接口文档', null, 'http://139.224.200.249:19999/swagger-ui.html', '3000', 'icon-wendang', null, '1', '0', '0', '2018-06-26 10:50:32', '2018-09-28 09:05:16', '0', '1'), ('3300', '事务监控', null, 'tx', '3000', 'icon-gtsquanjushiwufuwuGTS', 'views/tx/index', '5', '0', '0', '2018-08-19 11:02:39', '2018-11-23 14:25:08', '0', '1'), ('3400', '在线事务', null, 'model', '3000', 'icon-online', 'views/tx/model', '6', '0', '0', '2018-08-19 11:32:04', '2018-11-23 14:25:14', '0', '1'), ('3500', '任务监控', null, 'http://139.224.200.249:8899', '3000', 'icon-msnui-supervise', null, '7', '0', '0', '2018-06-26 10:50:32', '2018-09-28 09:03:33', '0', '1'), ('3600', '任务轨迹', '', 'status-trace-log', '3000', 'icon-guiji', 'views/daemon/status-trace-log/index', '8', '0', '0', '2018-01-20 13:17:19', '2018-11-24 06:34:52', '0', '1'), ('3601', '删除任务轨迹', 'daemon_status_trace_log_del', null, '3600', '1', null, '2', '0', '1', '2018-05-15 21:35:18', '2018-11-24 06:37:31', '0', '1'), ('3700', '调用拓扑', null, 'http://139.224.200.249:8081', '3000', 'icon-line', null, '10', '0', '0', '2018-01-25 11:08:52', '2018-09-28 09:04:29', '0', '1'), ('3800', '缓存状态', null, 'http://139.224.200.249:8585', '3000', 'icon-qingchuhuancun', null, '12', '0', '0', '2018-01-23 10:56:11', '2018-09-28 09:13:56', '0', '1'), ('3900', '任务日志', '', 'execution-log', '3000', 'icon-guiji', 'views/daemon/execution-log/index', '8', '0', '0', '2018-01-20 13:17:19', '2018-11-24 06:34:52', '0', '1'), ('3901', '删除日志', 'daemon_execution_log_del', null, '3900', '1', null, '2', '0', '1', '2018-05-15 21:35:18', '2018-11-24 06:39:03', '0', '1'), ('4000', '协同管理', null, '/activti', '-1', 'icon-kuaisugongzuoliu_o', 'Layout', '3', '0', '0', '2018-09-26 01:38:13', '2018-09-28 08:58:24', '0', '1'), ('4100', '模型管理', null, 'activiti', '4000', 'icon-weibiaoti13', 'views/activiti/index', '1', '0', '0', '2018-09-26 01:39:07', '2018-12-09 16:35:16', '0', '1'), ('4101', '模型管理', 'act_model_manage', null, '4100', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0', '1'), ('4200', '流程管理', null, 'process', '4000', 'icon-liucheng', 'views/activiti/process', '2', '0', '0', '2018-09-26 06:41:05', '2018-11-23 14:25:33', '0', '1'), ('4201', '流程管理', 'act_process_manage', null, '4200', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0', '1'), ('4300', '请假管理', '', 'leavebill', '4000', 'icon-qingjia', 'views/activiti/leave', '3', '0', '0', '2018-01-20 13:17:19', '2018-12-09 16:35:20', '0', '1'), ('4301', '请假新增', 'act_leavebill_add', null, '4300', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0', '1'), ('4302', '请假修改', 'act_leavebill_edit', null, '4300', '1', null, '1', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:09', '0', '1'), ('4303', '请假删除', 'act_leavebill_del', null, '4300', '1', null, '2', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:14', '0', '1'), ('4400', '待办任务', null, 'task', '4000', 'icon-renwu', 'views/activiti/task', '4', '0', '0', '2018-09-27 09:52:31', '2018-12-09 16:35:26', '0', '1'), ('4401', '流程管理', 'act_task_manage', null, '4400', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0', '1'), ('5000', '多级菜单', null, '/crud', '-1', 'icon-caidanguanli', '', '4', '0', '0', '2018-08-28 01:50:22', '2018-09-28 08:58:20', '0', '1'), ('5001', '一级菜单', null, 'index', '5000', 'icon-caidanguanli', 'views/crud/index', '1', '0', '0', '2018-08-28 01:50:48', '2018-11-21 17:48:19', '1', '1'), ('5002', '二级菜单', null, 'crud', '5001', 'icon-caidanguanli', 'views/crud/index', '1', '0', '0', '2018-08-28 01:51:23', '2018-11-21 17:47:40', '1', '1'), ('5003', '一级菜单', null, '', '5000', 'icon-caidanguanli', '', '1', '0', '0', '2018-11-21 17:49:18', '2018-11-21 17:53:25', '0', null), ('5004', '二级菜单', null, 'index', '5003', 'icon-caidanguanli', 'views/crud/index', '1', '0', '0', '2018-11-21 17:53:51', '2018-11-21 17:54:04', '0', null), ('6000', '系统官网', null, 'https://pig4cloud.com#', '-1', 'icon-guanwang', '', '5', '0', '0', '2018-09-27 02:26:36', '2018-11-17 16:18:50', '1', '1'); +INSERT INTO `sys_menu` VALUES ('1000', '权限管理', null, '/upms', '-1', 'icon-quanxianguanli', 'Layout', '0', '0', '0', '2018-09-28 08:29:53', '2018-09-28 08:53:01', '0', '1'), ('1100', '用户管理', null, 'user', '1000', 'icon-yonghuguanli', 'views/admin/user/index', '1', '0', '0', '2017-11-02 22:24:37', '2018-09-28 09:00:41', '0', '1'), ('1101', '用户新增', 'sys_user_add', null, '1100', null, null, null, '0', '1', '2017-11-08 09:52:09', '2018-09-28 09:06:34', '0', '1'), ('1102', '用户修改', 'sys_user_edit', null, '1100', null, null, null, '0', '1', '2017-11-08 09:52:48', '2018-09-28 09:06:37', '0', '1'), ('1103', '用户删除', 'sys_user_del', null, '1100', null, null, null, '0', '1', '2017-11-08 09:54:01', '2018-09-28 09:06:42', '0', '1'), ('1200', '菜单管理', null, 'menu', '1000', 'icon-caidanguanli', 'views/admin/menu/index', '2', '0', '0', '2017-11-08 09:57:27', '2018-09-28 09:00:45', '0', '1'), ('1201', '菜单新增', 'sys_menu_add', null, '1200', null, null, null, '0', '1', '2017-11-08 10:15:53', '2018-09-28 09:07:16', '0', '1'), ('1202', '菜单修改', 'sys_menu_edit', null, '1200', null, null, null, '0', '1', '2017-11-08 10:16:23', '2018-09-28 09:07:18', '0', '1'), ('1203', '菜单删除', 'sys_menu_del', null, '1200', null, null, null, '0', '1', '2017-11-08 10:16:43', '2018-09-28 09:07:22', '0', '1'), ('1300', '角色管理', null, 'role', '1000', 'icon-jiaoseguanli', 'views/admin/role/index', '3', '0', '0', '2017-11-08 10:13:37', '2018-09-28 09:00:48', '0', '1'), ('1301', '角色新增', 'sys_role_add', null, '1300', null, null, null, '0', '1', '2017-11-08 10:14:18', '2018-09-28 09:07:46', '0', '1'), ('1302', '角色修改', 'sys_role_edit', null, '1300', null, null, null, '0', '1', '2017-11-08 10:14:41', '2018-09-28 09:07:49', '0', '1'), ('1303', '角色删除', 'sys_role_del', null, '1300', null, null, null, '0', '1', '2017-11-08 10:14:59', '2018-09-28 09:07:53', '0', '1'), ('1304', '分配权限', 'sys_role_perm', null, '1300', null, null, null, '0', '1', '2018-04-20 07:22:55', '2018-09-28 09:13:23', '0', '1'), ('1400', '部门管理', null, 'dept', '1000', 'icon-web-icon-', 'views/admin/dept/index', '4', '0', '0', '2018-01-20 13:17:19', '2018-12-09 16:35:12', '0', '1'), ('1401', '部门新增', 'sys_dept_add', null, '1400', null, null, null, '0', '1', '2018-01-20 14:56:16', '2018-09-28 09:08:13', '0', '1'), ('1402', '部门修改', 'sys_dept_edit', null, '1400', null, null, null, '0', '1', '2018-01-20 14:56:59', '2018-09-28 09:08:16', '0', '1'), ('1403', '部门删除', 'sys_dept_del', null, '1400', null, null, null, '0', '1', '2018-01-20 14:57:28', '2018-09-28 09:08:18', '0', '1'), ('2000', '系统管理', null, '/admin', '-1', 'icon-xitongguanli', 'Layout', '1', '0', '0', '2017-11-07 20:56:00', '2018-09-28 08:53:18', '0', '1'), ('2100', '日志管理', null, 'log', '2000', 'icon-rizhiguanli', 'views/admin/log/index', '5', '0', '0', '2017-11-20 14:06:22', '2018-09-28 09:01:52', '0', '1'), ('2101', '日志删除', 'sys_log_del', null, '2100', null, null, null, '0', '1', '2017-11-20 20:37:37', '2018-09-28 09:08:44', '0', '1'), ('2200', '字典管理', null, 'dict', '2000', 'icon-navicon-zdgl', 'views/admin/dict/index', '6', '0', '0', '2017-11-29 11:30:52', '2018-09-28 09:01:47', '0', '1'), ('2201', '字典删除', 'sys_dict_del', null, '2200', null, null, null, '0', '1', '2017-11-29 11:30:11', '2018-09-28 09:09:10', '0', '1'), ('2202', '字典新增', 'sys_dict_add', null, '2200', null, null, null, '0', '1', '2018-05-11 22:34:55', '2018-09-28 09:09:12', '0', '1'), ('2203', '字典修改', 'sys_dict_edit', null, '2200', null, null, null, '0', '1', '2018-05-11 22:36:03', '2018-09-28 09:09:16', '0', '1'), ('2300', '代码生成', '', 'gen', '2000', 'icon-weibiaoti46', 'views/gen/index', '8', '0', '0', '2018-01-20 13:17:19', '2018-11-24 05:21:01', '0', '1'), ('2400', '终端管理', '', 'client', '2000', 'icon-shouji', 'views/admin/client/index', '9', '0', '0', '2018-01-20 13:17:19', '2018-09-28 09:01:43', '0', '1'), ('2401', '客户端新增', 'sys_client_add', null, '2400', '1', null, null, '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:10:25', '0', '1'), ('2402', '客户端修改', 'sys_client_edit', null, '2400', null, null, null, '0', '1', '2018-05-15 21:37:06', '2018-09-28 09:10:27', '0', '1'), ('2403', '客户端删除', 'sys_client_del', null, '2400', null, null, null, '0', '1', '2018-05-15 21:39:16', '2018-09-28 09:10:30', '0', '1'), ('2500', '密钥管理', '', 'social', '2000', 'icon-miyue', 'views/admin/social/index', '10', '0', '0', '2018-01-20 13:17:19', '2018-09-28 09:01:41', '0', '1'), ('2501', '密钥新增', 'generator_syssocialdetails_add', null, '2500', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:11:02', '0', '1'), ('2502', '密钥修改', 'generator_syssocialdetails_edit', null, '2500', '1', null, '1', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:11:04', '0', '1'), ('2503', '密钥删除', 'generator_syssocialdetails_del', null, '2500', '1', null, '2', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:11:06', '0', '1'), ('2600', '令牌管理', null, 'token', '2000', 'icon-denglvlingpai', 'views/admin/token/index', '11', '0', '0', '2018-09-04 05:58:41', '2018-09-28 09:01:38', '0', '1'), ('2601', '令牌删除', 'sys_token_del', null, '2600', null, null, '1', '0', '1', '2018-09-04 05:59:50', '2018-09-28 09:11:24', '0', '1'), ('2700', '动态路由', null, 'route', '2000', 'icon-luyou', 'views/admin/route/index', '12', '0', '0', '2018-09-04 05:58:41', '2018-09-28 09:01:38', '0', '1'), ('3000', '系统监控', null, '/daemon', '-1', 'icon-msnui-supervise', 'Layout', '2', '0', '0', '2018-07-27 01:13:21', '2018-09-28 08:53:24', '0', '1'), ('3100', '服务监控', null, 'http://139.224.200.249:15001', '3000', 'icon-server', null, '0', '0', '0', '2018-06-26 10:50:32', '2018-12-11 17:17:07', '0', '1'), ('3200', '接口文档', null, 'http://139.224.200.249:19999/swagger-ui.html', '3000', 'icon-wendang', null, '1', '0', '0', '2018-06-26 10:50:32', '2018-09-28 09:05:16', '0', '1'), ('3300', '事务监控', null, 'tx', '3000', 'icon-gtsquanjushiwufuwuGTS', 'views/tx/index', '5', '0', '0', '2018-08-19 11:02:39', '2018-11-23 14:25:08', '0', '1'), ('3400', '在线事务', null, 'model', '3000', 'icon-online', 'views/tx/model', '6', '0', '0', '2018-08-19 11:32:04', '2018-11-23 14:25:14', '0', '1'), ('3500', '任务监控', null, 'http://139.224.200.249:8899', '3000', 'icon-msnui-supervise', null, '7', '0', '0', '2018-06-26 10:50:32', '2018-09-28 09:03:33', '0', '1'), ('3600', '任务轨迹', '', 'status-trace-log', '3000', 'icon-guiji', 'views/daemon/status-trace-log/index', '8', '0', '0', '2018-01-20 13:17:19', '2018-11-24 06:34:52', '0', '1'), ('3601', '删除任务轨迹', 'daemon_status_trace_log_del', null, '3600', '1', null, '2', '0', '1', '2018-05-15 21:35:18', '2018-11-24 06:37:31', '0', '1'), ('3700', '调用拓扑', null, 'http://139.224.200.249:8081', '3000', 'icon-line', null, '10', '0', '0', '2018-01-25 11:08:52', '2018-09-28 09:04:29', '0', '1'), ('3800', '缓存状态', null, 'http://139.224.200.249:8585', '3000', 'icon-qingchuhuancun', null, '12', '0', '0', '2018-01-23 10:56:11', '2018-09-28 09:13:56', '0', '1'), ('3900', '任务日志', '', 'execution-log', '3000', 'icon-guiji', 'views/daemon/execution-log/index', '8', '0', '0', '2018-01-20 13:17:19', '2018-11-24 06:34:52', '0', '1'), ('3901', '删除日志', 'daemon_execution_log_del', null, '3900', '1', null, '2', '0', '1', '2018-05-15 21:35:18', '2018-11-24 06:39:03', '0', '1'), ('4000', '协同管理', null, '/activti', '-1', 'icon-kuaisugongzuoliu_o', 'Layout', '3', '0', '0', '2018-09-26 01:38:13', '2018-09-28 08:58:24', '0', '1'), ('4100', '模型管理', null, 'activiti', '4000', 'icon-weibiaoti13', 'views/activiti/index', '1', '0', '0', '2018-09-26 01:39:07', '2018-12-09 16:35:16', '0', '1'), ('4101', '模型管理', 'act_model_manage', null, '4100', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0', '1'), ('4200', '流程管理', null, 'process', '4000', 'icon-liucheng', 'views/activiti/process', '2', '0', '0', '2018-09-26 06:41:05', '2018-11-23 14:25:33', '0', '1'), ('4201', '流程管理', 'act_process_manage', null, '4200', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0', '1'), ('4300', '请假管理', '', 'leavebill', '4000', 'icon-qingjia', 'views/activiti/leave', '3', '0', '0', '2018-01-20 13:17:19', '2018-12-09 16:35:20', '0', '1'), ('4301', '请假新增', 'act_leavebill_add', null, '4300', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0', '1'), ('4302', '请假修改', 'act_leavebill_edit', null, '4300', '1', null, '1', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:09', '0', '1'), ('4303', '请假删除', 'act_leavebill_del', null, '4300', '1', null, '2', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:14', '0', '1'), ('4400', '待办任务', null, 'task', '4000', 'icon-renwu', 'views/activiti/task', '4', '0', '0', '2018-09-27 09:52:31', '2018-12-09 16:35:26', '0', '1'), ('4401', '流程管理', 'act_task_manage', null, '4400', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0', '1'), ('5000', '多级菜单', null, '/crud', '-1', 'icon-caidanguanli', '', '4', '0', '0', '2018-08-28 01:50:22', '2018-09-28 08:58:20', '0', '1'), ('5001', '一级菜单', null, 'index', '5000', 'icon-caidanguanli', 'views/crud/index', '1', '0', '0', '2018-08-28 01:50:48', '2018-11-21 17:48:19', '1', '1'), ('5002', '二级菜单', null, 'crud', '5001', 'icon-caidanguanli', 'views/crud/index', '1', '0', '0', '2018-08-28 01:51:23', '2018-11-21 17:47:40', '1', '1'), ('5003', '一级菜单', null, '', '5000', 'icon-caidanguanli', '', '1', '0', '0', '2018-11-21 17:49:18', '2018-11-21 17:53:25', '0', null), ('5004', '二级菜单', null, 'index', '5003', 'icon-caidanguanli', 'views/crud/index', '1', '0', '0', '2018-11-21 17:53:51', '2018-12-20 14:26:53', '1', null), ('6000', '系统官网', null, 'https://pig4cloud.com#', '-1', 'icon-guanwang', '', '5', '0', '0', '2018-09-27 02:26:36', '2018-11-17 16:18:50', '1', '1'); COMMIT; -- ---------------------------- @@ -235,19 +220,21 @@ CREATE TABLE `sys_role` ( `role_name` varchar(64) COLLATE utf8mb4_bin NOT NULL, `role_code` varchar(64) COLLATE utf8mb4_bin NOT NULL, `role_desc` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `ds_type` char(1) COLLATE utf8mb4_bin NOT NULL DEFAULT '2' COMMENT '数据权限类型', + `ds_scope` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '数据权限范围', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, `del_flag` char(1) COLLATE utf8mb4_bin DEFAULT '0' COMMENT '删除标识(0-正常,1-删除)', `tenant_id` int(11) DEFAULT NULL, PRIMARY KEY (`role_id`) USING BTREE, UNIQUE KEY `role_idx1_role_code` (`role_code`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='系统角色表'; +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='系统角色表'; -- ---------------------------- -- Records of `sys_role` -- ---------------------------- BEGIN; -INSERT INTO `sys_role` VALUES ('1', 'admin', 'ROLE_ADMIN', '超级管理员', '2017-10-29 15:45:51', '2018-09-13 01:46:01', '0', '1'), ('2', 'ROLE_CQQ', 'ROLE_CQQ', 'ROLE_CQQ', '2018-11-11 19:42:26', '2018-11-11 20:26:01', '0', '2'); +INSERT INTO `sys_role` VALUES ('1', '管理员', 'ROLE_ADMIN', '管理员', '2', '2', '2017-10-29 15:45:51', '2018-12-26 14:09:11', '0', '1'), ('2', 'ROLE_CQQ', 'ROLE_CQQ', 'ROLE_CQQ', '2', null, '2018-11-11 19:42:26', '2018-12-26 14:09:07', '0', '2'); COMMIT; -- ---------------------------- @@ -264,7 +251,7 @@ CREATE TABLE `sys_role_menu` ( -- Records of `sys_role_menu` -- ---------------------------- BEGIN; -INSERT INTO `sys_role_menu` VALUES ('1', '1000'), ('1', '1100'), ('1', '1101'), ('1', '1102'), ('1', '1103'), ('1', '1200'), ('1', '1201'), ('1', '1202'), ('1', '1203'), ('1', '1300'), ('1', '1301'), ('1', '1302'), ('1', '1303'), ('1', '1304'), ('1', '1400'), ('1', '1401'), ('1', '1402'), ('1', '1403'), ('1', '2000'), ('1', '2100'), ('1', '2101'), ('1', '2200'), ('1', '2201'), ('1', '2202'), ('1', '2203'), ('1', '2300'), ('1', '2400'), ('1', '2401'), ('1', '2402'), ('1', '2403'), ('1', '2500'), ('1', '2501'), ('1', '2502'), ('1', '2503'), ('1', '2600'), ('1', '2601'), ('1', '2700'), ('1', '3000'), ('1', '3100'), ('1', '3200'), ('1', '3300'), ('1', '3400'), ('1', '3500'), ('1', '3600'), ('1', '3601'), ('1', '3700'), ('1', '3800'), ('1', '3900'), ('1', '3901'), ('1', '4000'), ('1', '4100'), ('1', '4101'), ('1', '4200'), ('1', '4201'), ('1', '4300'), ('1', '4301'), ('1', '4302'), ('1', '4303'), ('1', '4400'), ('1', '4401'), ('2', '1000'), ('2', '1100'), ('2', '1101'), ('2', '1102'), ('2', '1103'), ('2', '1200'), ('2', '1201'), ('2', '1202'), ('2', '1203'), ('2', '1300'), ('2', '1301'), ('2', '1302'), ('2', '1303'), ('2', '1304'), ('2', '1400'), ('2', '1401'), ('2', '1402'), ('2', '1403'); +INSERT INTO `sys_role_menu` VALUES ('1', '1000'), ('1', '1100'), ('1', '1101'), ('1', '1102'), ('1', '1103'), ('1', '1200'), ('1', '1201'), ('1', '1202'), ('1', '1203'), ('1', '1300'), ('1', '1301'), ('1', '1302'), ('1', '1303'), ('1', '1304'), ('1', '1400'), ('1', '1401'), ('1', '1402'), ('1', '1403'), ('1', '2000'), ('1', '2100'), ('1', '2101'), ('1', '2200'), ('1', '2201'), ('1', '2202'), ('1', '2203'), ('1', '2300'), ('1', '2400'), ('1', '2401'), ('1', '2402'), ('1', '2403'), ('1', '2500'), ('1', '2501'), ('1', '2502'), ('1', '2503'), ('1', '2600'), ('1', '2601'), ('1', '2700'), ('1', '3000'), ('1', '3100'), ('1', '3200'), ('1', '3300'), ('1', '3400'), ('1', '3500'), ('1', '3600'), ('1', '3601'), ('1', '3700'), ('1', '3800'), ('1', '4000'), ('1', '4100'), ('1', '4101'), ('1', '4200'), ('1', '4201'), ('1', '4300'), ('1', '4301'), ('1', '4302'), ('1', '4303'), ('1', '4400'), ('1', '4401'), ('2', '1000'), ('2', '1100'), ('2', '1101'), ('2', '1102'), ('2', '1103'), ('2', '1200'), ('2', '1201'), ('2', '1202'), ('2', '1203'), ('2', '1300'), ('2', '1301'), ('2', '1302'), ('2', '1303'), ('2', '1304'), ('2', '1400'), ('2', '1401'), ('2', '1402'), ('2', '1403'); COMMIT; -- ---------------------------- @@ -340,13 +327,13 @@ CREATE TABLE `sys_user` ( KEY `user_wx_openid` (`wx_openid`) USING BTREE, KEY `user_qq_openid` (`qq_openid`) USING BTREE, KEY `user_idx1_username` (`username`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='用户表'; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='用户表'; -- ---------------------------- -- Records of `sys_user` -- ---------------------------- BEGIN; -INSERT INTO `sys_user` VALUES ('1', 'admin', '$2a$10$RpFJjxYiXdEsAGnWp/8fsOetMuOON96Ntk/Ym2M/RKRyU0GZseaDC', null, '17034642888', null, '1', '2018-04-20 07:15:18', '2018-11-16 23:31:30', '0', '0', 'o_0FT0uyg_H1vVy2H0JpSwlVGhWQ', null, '1'), ('2', 'admin', '$2a$10$RpFJjxYiXdEsAGnWp/8fsOetMuOON96Ntk/Ym2M/RKRyU0GZseaDC', null, '17034642888', null, '10', '2018-04-20 07:15:18', '2018-11-18 13:43:03', '0', '0', 'o_0FT0uyg_H1vVy2H0JpSwlVGhWQ', null, '2'); +INSERT INTO `sys_user` VALUES ('1', 'admin', '$2a$10$QOfWxxFyAMmEEmnuw9UI/..1s4B4eF/u9PzE2ZaGO.ij9YfmcUy.u', null, '17034642888', 'lengleng-oxjkuoy361p6x5snlogo.png', '1', '2018-04-20 07:15:18', '2019-01-05 17:11:20', '0', '0', 'o_0FT0uyg_H1vVy2H0JpSwlVGhWQ', null, '1'), ('2', 'admin', '$2a$10$RpFJjxYiXdEsAGnWp/8fsOetMuOON96Ntk/Ym2M/RKRyU0GZseaDC', null, '17034642887', null, '10', '2018-04-20 07:15:18', '2019-01-09 11:06:24', '0', '0', 'o_0FT0uyg_H1vVy2H0JpSwlVGhWQ', null, '2'); COMMIT; -- ---------------------------- diff --git a/doc/db/3pigxx_ac.sql b/doc/db/3pigxx_ac.sql index 7c708afda..31aa36dca 100644 --- a/doc/db/3pigxx_ac.sql +++ b/doc/db/3pigxx_ac.sql @@ -11,7 +11,7 @@ Target Server Version : 50723 File Encoding : utf-8 - Date: 12/11/2018 21:39:50 PM + Date: 01/09/2019 11:09:48 AM */ USE pigxx_ac; @@ -58,8 +58,7 @@ CREATE TABLE `ACT_GE_BYTEARRAY` ( -- Records of `ACT_GE_BYTEARRAY` -- ---------------------------- BEGIN; -INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('12510', '1', '请教流程.bpmn20.xml', '12509', 0x3c3f786d6c2076657273696f6e3d27312e302720656e636f64696e673d275554462d38273f3e0a3c646566696e6974696f6e7320786d6c6e733d22687474703a2f2f7777772e6f6d672e6f72672f737065632f42504d4e2f32303130303532342f4d4f44454c2220786d6c6e733a7873693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612d696e7374616e63652220786d6c6e733a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220786d6c6e733a61637469766974693d22687474703a2f2f61637469766974692e6f72672f62706d6e2220786d6c6e733a62706d6e64693d22687474703a2f2f7777772e6f6d672e6f72672f737065632f42504d4e2f32303130303532342f44492220786d6c6e733a6f6d6764633d22687474703a2f2f7777772e6f6d672e6f72672f737065632f44442f32303130303532342f44432220786d6c6e733a6f6d6764693d22687474703a2f2f7777772e6f6d672e6f72672f737065632f44442f32303130303532342f44492220747970654c616e67756167653d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d61222065787072657373696f6e4c616e67756167653d22687474703a2f2f7777772e77332e6f72672f313939392f585061746822207461726765744e616d6573706163653d22687474703a2f2f7777772e61637469766974692e6f72672f70726f63657373646566223e0a20203c70726f636573732069643d224c6561766542696c6c22206e616d653d224c6561766542696c6c2220697345786563757461626c653d2274727565223e0a202020203c73746172744576656e742069643d227369642d33414335453536332d453645332d343737372d423434362d30343736443838344331314422206e616d653d22e68f90e4baa4222f3e0a202020203c757365725461736b2069643d227369642d38433845373242432d353330322d343041372d413031372d30344542394641393136444122206e616d653d22e794a8e688b7e68f90e4baa4223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c757365725461736b2069643d227369642d33354144463030362d353743302d343745302d394235422d41463432344530413745344522206e616d653d22e7bb84e995bfe5aea1e689b9223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c656e644576656e742069643d227369642d30353539313044422d314445362d344243342d423532372d32334641373139444532363522206e616d653d22e7bb93e69d9f222f3e0a202020203c73657175656e6365466c6f772069643d227369642d32424346433631362d374438412d343134312d414633462d3841433138454131303044462220736f757263655265663d227369642d33414335453536332d453645332d343737372d423434362d30343736443838344331314422207461726765745265663d227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441222f3e0a202020203c73657175656e6365466c6f772069643d227369642d45464334383546312d414543392d343536392d423430312d44313644453538463637333722206e616d653d22e5aea1e689b92220736f757263655265663d227369642d38433845373242432d353330322d343041372d413031372d30344542394641393136444122207461726765745265663d227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445222f3e0a202020203c73657175656e6365466c6f772069643d227369642d38344242323430352d384530322d344442392d384632392d45394242423033324330443922206e616d653d22e9a9b3e59b9e2220736f757263655265663d227369642d33354144463030362d353743302d343745302d394235422d41463432344530413745344522207461726765745265663d227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b666c61672e657175616c732827e9a9b3e59b9e27297d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d36393830363236352d423636302d344239322d423744392d38444532413535433530373922206e616d653d22e5aea1e689b92220736f757263655265663d227369642d33354144463030362d353743302d343745302d394235422d41463432344530413745344522207461726765745265663d227369642d30353539313044422d314445362d344243342d423532372d323346413731394445323635222f3e0a20203c2f70726f636573733e0a20203c62706d6e64693a42504d4e4469616772616d2069643d2242504d4e4469616772616d5f4c6561766542696c6c223e0a202020203c62706d6e64693a42504d4e506c616e652062706d6e456c656d656e743d224c6561766542696c6c222069643d2242504d4e506c616e655f4c6561766542696c6c223e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d33414335453536332d453645332d343737372d423434362d303437364438383443313144222069643d2242504d4e53686170655f7369642d33414335453536332d453645332d343737372d423434362d303437364438383443313144223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2233302e30222077696474683d2233302e302220783d223134322e352220793d223134322e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441222069643d2242504d4e53686170655f7369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e30222077696474683d223130302e302220783d223231372e352220793d223131372e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445222069643d2242504d4e53686170655f7369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e30222077696474683d223130302e302220783d223336322e352220793d223131362e3939393939393939393939393937222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d30353539313044422d314445362d344243342d423532372d323346413731394445323635222069643d2242504d4e53686170655f7369642d30353539313044422d314445362d344243342d423532372d323346413731394445323635223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2232382e30222077696474683d2232382e302220783d223533332e383931363934363530313935372220793d223134322e3939393939393939393939393937222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d36393830363236352d423636302d344239322d423744392d384445324135354335303739222069643d2242504d4e456467655f7369642d36393830363236352d423636302d344239322d423744392d384445324135354335303739223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223436322e352220793d223135362e3939393939393939393939393937222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223533332e383931363934363530313935372220793d223135362e3939393939393939393939393937222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446222069643d2242504d4e456467655f7369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137322e352220793d223135372e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223231372e352220793d223135372e30222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337222069643d2242504d4e456467655f7369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223331372e352220793d223135372e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223336322e352220793d223135372e30222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439222069643d2242504d4e456467655f7369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223431322e352220793d223139362e3939393939393939393939393937222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223431322e352220793d223234382e3532343239303531313436323134222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223236372e352220793d223234382e3532343239303531313436323134222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223236372e352220793d223139372e30222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a202020203c2f62706d6e64693a42504d4e506c616e653e0a20203c2f62706d6e64693a42504d4e4469616772616d3e0a3c2f646566696e6974696f6e733e, '0'), ('12511', '1', '请教流程.LeaveBill.png', '12509', 0x89504e470d0a1a0a0000000d494844520000023b000001020806000000184b16a3000015b44944415478daeddd0b90d565dd07f02e567677ba5a59515ad94d9bd272eaadacb7d2511b995e9945965814850c184161527c515e8c8a904ca4042f195a8a59ed241a88dc84b80c9a9262a8d08a5c5a6e020aba80c0f3fe7fffd9b31d161616d8cb39ebe733f38ce7ec397b16cff9edfebee7799effffbcea55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af6029a5236a6a6aee5eb060c1aee9d3a7a7071e78c068e3316ddab4347bf6ec0dd9e8ae2201342a8daa8545fdcc993327ad5bb72e6ddfbedd68a7b17efdfaf4e0830f3e9fd5d339feb20168541a550b8aa0ac7e4aa68eb667017a89bf6c001a9546d5826246d0eb573a23aba197fd6503d0a834aa16144b715ebb92aaa1e42f1b8046a551b5430d6ddd5c9b6a1eba353d316d783ee2727ccdebae8600342a8daaec6b68cba6d569f1fd43d33fee1bbcc788afc56d5e7b610740a3d2a8caba86563e71cf5ef55318ab9e98e4b5177600342a8daabc6b68c9cc914dd650dce6b5177600342a8daaac6b68f103c39aaca1b8cd6b2fec0068541a951a32841d008d4aa32ad51a8a4ded4dd550dce6b5177600342a8daaac6b68e9dcb14dd650dce6b5177600342a8daaac6be8b9d58fa5c553afda7b6630fb5adce6b5177600342a8daaac6b28c6330fdfb6570dc5d7bcee6a0840a3d2a8cabf86b66d4b4be7ddb0f7cc60f6b5b8cd6b2fec0068541a55d9d6509c78f2e9b9d737b9141ab73939a5b003a0516954e557435910ae5d3a233d3e654893f55318719fb8aff02cec0068541a5559d4d08142b2f0ac8600342a8daaac6ba83921797fe1592d083b001a954655d23574a8f553186a41d801d0a834aa92ae21430d01685486b063a821008d4aa3524386b003a05169546ac8107600342a8d4a0da921e01569ead4a9ff3d6edcb8eaabafbebab67ffffe3baaaaaa7677edda357dfffbdf4f7dfbf67d79f8f0e1ebc68e1d7bdf8c19334e13760c8d4a0da9a18eafb2b2f2988a8a8a7e592fb83b1b4bb3b125fa4236eab2f14c765b75f6df41713fcf16256df4e8d183860e1dba69c0800169fcf8f169c1820569f5ead5a9aeae2e85f8efba75ebd2dffffef73461c28414f7bbe28a2b5e183972e47061c7d0a8d4901aea78ce3df7dcced978a03ed4a4668e99d9f774f7ec5152468d1a75c2e5975fbe7ad0a041bb23c8ecdcb93335d7a2458bd290214352f6bdebafb9e69a93851d43a352436aa8fc6581a55336261f44c0d9d798d3a54b97e33c9b9442d0b9aa4f9f3ebb264d9a745021a7b12953a6a4789c2cf08c10760c8d4a0da9a1f255515191e594aeeb8b834b656565fae94f7f9a66cc989156ac58915e78e185fc6fff8b2fbe98af00cc9d3b375d7bedb5f97687e2efebd6addb8b66796857e3c68dfbdf7efdfaed7efae9a7534b58be7c798ac71b3d7af41861c71076d4901a2acba0735616525e2e0e39bffbddeff22d0ccdb169d3a6fcfef17dc5a1270b3c177876697343870ebd240b26bb9a5bc0cd158f178f3b6cd8b0cb841d43d8f1daa9a1b29bd169083a975c72493e8b7328e2fb060f1edc38f098e1a1edf4eeddfbd80b2fbc70474bcde8ec6b86271e3ffb453951d831841d430d95befa3d3a0d4b57575d7555c352d5a18a25ae112346345ed23adeb34d9b183060c0d3b147a735c51e9efefdfb2f17760c61c75043a5affe88ab86199dc30d3ac581a7d10ccf1ccf36ad2e0b2095975e7ae9ce1d3b76a4d69615f8ceece75d24ec18c28ea1864a3ae8742edea373a84b57fb5bd22adec363398b569725f6657178795b78ecb1c7d2c5175fbc42d831841d430d95c7ac4e6c2e6e0d77de79a7d91dda469cd9f2a28b2eda7e3887981fac380373ac0597da2f7636fe4ba3d2a8d4901a7a250499fdd56af485c2a6e4987d79eeb9e75aa517c4515a8d0e4befa42bd32afaf6ed3be4a69b6eda95da50bc4bc802d6ff95d2f3503495fa404545c5291a9546a586d4504775a05aadff0888fc3e3ffff9cf5bb51fc479788ac2ce205d995671f1c517cf8f8f80684bb164d6bf7fff874bf197bf684c6efcce47a3d2a8d4901aea4861a7a95aadffacabfcb659b366b56a3f88130f16fd3b26e9cab48af3cf3f7f6d6d6d6d9b869d38ef4e5555d5c612ffe56f78e753f823a05169546a480d75d0b0b347add67fa867feb596de98dc589c69b9e8dfb05257a65574efde7d7be1433ddb4afcbc6eddbabd5c0ebffcc5ef7c342a8daa5c6b28de60b4e6e34743bcfffefb9bbc7dcd9a35e9d1471fcd2f6fd8b0213f84b9f0efdaba75ab1a2abd5add59b8dc52879befef30f4a29f5ba72bd36a45df1e0ef383e4da659453d88906326ddab4266f8f8613d3c7dbb66d3ba8c75dbb766dfe3c6cd9b2a524c28e1a3af078e9a597d2fbdffffe74ebadb7e6d7cf3aebac74d24927358cef7ce73b7bdc7fe4c891e984134ed8e36b2b57ae4c7dfbf64d1b376eccaf3ff5d453e917bff845bedf22c6b7bffded74e49147a6d1a347377c2d6e7ff2c927f3fbc751371ffef087f3cb9ffbdce7d2af7ffdebfcf2bbdffdeef4d7bffe550d95f068eb7ea02bd35a333bdbda6966674799bcd379283e17e6d4534f3da23d1ad515575c913efde94fa7cf7ce633fb1cc71f7f7c43032a1e4f3cf1447ae31bdf98eebdf7de7d3eeeecd9b3d311471c915f1e346850fad8c73e963efef18f378c2e5dbae4b7c55118cf3efb6c8aa5ce187162c8ece94a4b972e6df85abcab8ffb99d929cd1a9a3061423ae69863d2e6cd9bf3eb9ffce427f313c4dd75d75de9ca2baf4c9d3a75dae3fe11543ef5a94f35bcfef1418f6f7ffbdbd329a79c921e7ffcf1fceb53a74e4daf7ffdeb63d9231fd9ff5f1ea2ea9742f2f18637bc214d9e3c39d5d4d4e42128fe0d8b172fce1fe7c61b6fcc1f2742d8f4e9d3f3101deff0cdec9446ad66ffdd6266870ee5bcf3ceab6d8f3d3b3d7af4d850e2bffc0d0daa709ff668543ffce10fd3d7bef6b574c71d77e42302ca8f7ffce3fc723490081ecf3fff7c438039f3cc33d377bffbdd7c1c7df4d1f93bf7b81c5f1f3f7e7c7ebf082a71399a557c4f9f3e7dd257bef295bcf1c588fb7eeb5bdfcaef7bf3cd37e73fe340a3f0d8c24e69d5502c1f4598b9edb6dbe2f3e9f290124166cc9831293e1a26befe918f7c64afb013013b66fe8e3aeaa8f4894f7c22fdfef7bfdfe33e71beac5ebd7aa565cb96a57ffdeb5ff91256d4411c7c10d7e3eb175e78615ab468511ed8dff296b7a4d7bce635e9ab5ffd6a1e76a25ea28946d889e7246a2e4295b0531ab56acf0e1d4e5555d5a4f9f3e7ef6ccbb0137f10b39f3bb5447ff9e7c799438b1b547b869d1ffce007e9b4d34e4b0f3ef8603e5ef7bad7e58d222edf7efbed7b849d98c58930148dacf138eeb8e3f2a613f7bbeebaebf277d9af7ef5abd3b1c71e9b879d68403ffad18ff2113faf1076623620c269bcf3ce026a1e8ee2dd7e7575751a3060407e396e2fcc1a083ba55543975e7a69fe3ac76cdd9bdffce6f4cf7ffe330f3b117463e62f665f0a6127c247bccb2eccecc41267fc7b63192c2ec788db0b4b98f1d8f118ef7bdffbf2e5a8a8c508d8713d96b4e2f6c2bfe30f7ff843fae8473f9a5f8e5a8bfb9e7cf2c979d8899f154b5bebd7af17764aa4561d8d458713e753183b76ec736d19767ef39bdf6c2ab5f329eceb5d7829849d78771c4b081156624493f8e0073f985ffed0873eb447d88925a6685efb7a9c981d2a849d18f107a670dff3cf3f3f6f5af12e3e4634c5ec79d863cf47dce7031ff8405ab56a55feb5689aef7ad7bbe27c49edb67fa704c34ec9d550ecadc97edff2d7fab7bffd6dfeb5081713274e6c588e2a849d98316cce2cde4f7ef293fcfe975f7e791e8c1f7ef8e1f4e73fff39bfed6f7ffb5b7e3dc272dc5ef877c49e9d77bef39df9cc61849d98958c7d401176befce52fe7cba16aa8746ad57976e870e24c99bd7af5dad4966750ce1af873e578a6ccf6083b7176d198dd295c8f77e4f3e6cdcb2fc7fe89e2b0f3a73ffd29bffd97bffce55e2366708ac3ce7df7dd972f2bc4bbeb6840c3870fdf63c4a71bc7ec512c477cf18b5fcc1b626c508d65adf8fe5b6eb9253ef6230f5db1dfa770a48d46555a35f4c8238fe4b33a9ffdec67f33a8afd3b11767af6ec996f208eb05a083b31431761f6eaabafce97aee2f2cc9933f33af9cb5ffe925f8f258d98e52b849d0830115e4e3cf1c486d99ab81e5f2f849d085131e3184b59b1497a5f7b761c8d557a7dc11994e970ba77ef3e73e1c285cfb745d059b468d196ece72d28c7e7a93dc24ee7ce9df33051d8f4198d27de4dc7e5d8e7501c76e21d7c3494f89ec6236661860c19d270b44d7cdf6b5ffbda7ccf46ec0b8a4dcab16f279a5c5c1e387060de08e28f515c8e0677c30d37a4b7bef5adf9d7a399c5725a6c8e8e77faed31bb23ec1c78c4f2511c0515b512af7f84d2083b319b129bd0bffef5af37b967a7703dfb7dcdaf375e668a30f38d6f7c233fea2f668da2a62244c7f578dc42d8899f193552bc8cd538ecc4f735b5995e0db50f9f8d45472ceace7dfaf4a96d8bd99dacb1ae2ad74fb76d8fb0f3f9cf7f3e3fca25a692634440e9dfbf7f7e39424971d88977d01158f6f538d148e6cf9f9f5f8e8da993264d6a58c68a23692ebbecb2346cd8b07c1620666c6216a0f161e971fd8c33cec8f7809c7df6d9ceb35326355458cefad5af7e95eebefbee2697b1f61576962c5992cf20c6517f5ffad297d2f2e5cb1bee3778f0e0f4def7be375fb28aba8b5a8cf013d7dff39ef7e4b737b567273623df73cf3d0d6167c48811f992ad1a2aadbee053cfe988853d2bfb03b8bc35834e7575f5caece7ccdddf9e068d6acf73dac45e9a680acd59c68a7d3611549af3d8853d3bf1bd6f7bdbdbd2f7bef7bd7c99eb0b5ff8421a3b766cbec4511c7662df4e34c1d83f14330531c3130dab70723861a7346b28424d61f3702c65c5ace03bdef18efcdc3a1168e348bd78fd63d6aef03d1164638630c2496c888fa5acd85f134b5571dfc20cccc2850bf30deb71390e298f9f113381713d9640e3f6b81c4ba1b1541a4ba911b8629631427bfcfcd80716212796bf22c0aba1d29285909985303270e0c05d2d75187a6c748f305c3cab53ae7d81f22bea4e59ca5effe4934f6e698da0f3cc33cfbc188f9f859de3cbf5396aeb4615cb4d11768a376f46f38946124d236662622f449c4030f65444038943820ff4b8b1b938de4947d889c387e31d7b34bf37bde94df95131f1d87104579c23254e0a17872cc75136d134633abb70487a34cd687ee79c734ebe3155a32abd1a8aa011cb9b1156e2faf5d75f9fcf0846a3298cb81ef7297c4fecd78a0012e7e1295eba8a3a1b356a5443a069bc37289636fffdef7fef75db1ffff8c73c38c5cfb9e69a6bf2cdc971eea6b82d827504aedebd7be787c9aba1d2eb0bd9585f08255968dd7db88127824efcfd290a3a5bcab92f50862a2a2aba565555ad59bb76edb6960c3af178d9e3ae2df769cab66e54112022d014aec7c91863092b9624621f450494c29131f10e3b4e14d79cc78d2367626fce79e79d974f23c7b950e2b163ffce05175c90cff29c7efae979b38b9f15fb3b627f4ee32617fb7562af46fc3be29dbd4655bacb5886b073387da1b059b97e8667f7a12e69c5f7359ad1b17c45bb25f99e3d7af4a85db264c98696083a3535351be2f1b25f98cbcafdb9d1a8342a35a4865ea97da138f074ebd66d77ccf2c61ba0e61e75159b918bf7e8c4e8087d81324ff259dade3061c284470f67d3f2c48913ff91fd52ac8d5f948ef0bc68541a951a5243afe4be908d4dc56125c24becb58a130fc6ac4d61892b96aae2ccc8b1373096c4e354078dced8bca5a3f405ca3fc9778a430fabaaaa96cd9b376ff1c1849c850b173ed5ab57afc5b1e9ac23adc56a541a951a5243fac27f0e493fc431c71e1d4ab1b8cf89e2eedebdfbea61c386cd9b3973e623ab327575755beb3fd4736b6d6dedca2c10fde3673ffbd99c1e3d7aac88628ed4ded176d76b541a951a5243fca72f142f6d3527e474c4be40071367d4cc8a7b40fd67a63c139f4e5bf894daf8f0b6f84c9338d577473e03a646a551a9213584be001d9a46a551a921350420ec181a951a524300c28e21ec186a0840a332841d430d0168541a951a32841d008d4aa3524386b003a05169546a480d01083b1a9546a586d41080b06368546a480d01083b86b063a821008dca10760c3504a05169546ac8107600342a8d4a0d19c20e8046a551a921350420ec68541a951a524300c28ea151a921350420ec18c28ea18600342a43d831d4108046a551a92143d801d0a8342a3564083b001a9546d5faa64f9feeb52b9d5197d5d0cbfeb20168541a550b9a3d7b76edba75ebbc7e253056af5e3d31aba125feb20168541a550b9a3163c6d9b366cddabc76edda97bc8eed1794a37ea64d9bf66c36cef1970d40a3d2a85a58f6ef3e2b0b6a0fc5cc542cc595e3a8aeae4ee5fa6faf7fde97083a001db451dd79e79da96bd7ae1a15872c0bfbff3366cc98a8a34e9e0d004a4ed6a02645d839f5d4538ff06c70b0524a476edcb8715326f5eeddfb5ecf080025a5a2a2e2942ce8bc1c61e7dc73cf3ddd33c2c15ab972e5eda9debc79f3566775d4d9b3024029859dea083af5e321cf080763ebd6ad27eedab56b772a3262c488953d7bf63ccab30340bbcbc2cd4985599dc2c8c2cf599e199a6bcd9a3535a991cd9b37afa9acacbcceb3034029849d49c541a730bb63ef0ecdb162c58aa1a909d5d5d56b224c7b960068cfa0b3d7ac4e61d873c1816479e6e86ddbb6ed682aececdebd7bfbc081031f139c0168cfb033795f41a77eccf70cb13fab56ad9a9f0ea0a6a66665169c0778b600688fa0d3e4ac8ebd3b34c7dcb9730f9475525d5dddaca8a59e3d7b1ee91903a0adc3cea4fd051d47667120575e7965dffd2d6345d6193264c85d66760028a500943c0b1c8c8913273ed554d259b66cd9b8580eb56707006187b2d5a54b97e3b25053b78fcdc98b2b2b2b173b1a0b006187b2376ad4a8ebb370b3ab38ecdc7cf3cdb75454545cebd90140d8a1ecc532d5942953d6159d50f08eac96963a833200c20e1d46bf7efdbeb969d3a66df51f043acd799a001076e870c68f1f3f79cc983171ca826acf0600c20e1d4e2c5b450dc5a665cf0600c20e6a0800342ad410006854a82100d0a8504300a051a18600d0a8400d01a051a1860040a3420d018046851a02008d0a3504001a156a0800342ad410001a15a82100342ad410006854a82100d0a8504300a051a1860040a3420d01a0516954a82100342a5043006854a82100d0a8504300a051a1860040a3420d018046851a0240a3d2a85043006854a08600d0a8504300a051a1860040a3420d018046851a02008d0a35048046a551a18600d0a8400d0150b68dca300e77f84d0200000000000000000000000000000000000000a0d9fe1fde31e90f44aa0a800000000049454e44ae426082, '1'), ('2', '10', 'source', null, 0x7b227265736f757263654964223a2231222c2270726f70657274696573223a7b2270726f636573735f6964223a224c6561766542696c6c222c226e616d65223a224c6561766542696c6c222c22646f63756d656e746174696f6e223a22222c2270726f636573735f617574686f72223a226d6164652062792070696778222c2270726f636573735f76657273696f6e223a22222c2270726f636573735f6e616d657370616365223a22687474703a2f2f7777772e61637469766974692e6f72672f70726f63657373646566222c22657865637574696f6e6c697374656e657273223a22222c226576656e746c697374656e657273223a22222c227369676e616c646566696e6974696f6e73223a22222c226d657373616765646566696e6974696f6e73223a22227d2c227374656e63696c223a7b226964223a2242504d4e4469616772616d227d2c226368696c64536861706573223a5b7b227265736f757263654964223a227369642d33414335453536332d453645332d343737372d423434362d303437364438383443313144222c2270726f70657274696573223a7b226f766572726964656964223a227374617274222c226e616d65223a22e5bc80e5a78b222c22646f63756d656e746174696f6e223a22222c22657865637574696f6e6c697374656e657273223a22222c22696e69746961746f72223a22222c22666f726d6b6579646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22227d2c227374656e63696c223a7b226964223a2253746172744e6f6e654576656e74227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a37352c2279223a3131352e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a34352c2279223a38352e30303030303030303030303030337d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441222c2270726f70657274696573223a7b226f766572726964656964223a2275736572222c226e616d65223a22e794a8e688b7e68f90e4baa4222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c22657865637574696f6e6c697374656e657273223a6e756c6c2c226d756c7469696e7374616e63655f74797065223a224e6f6e65222c226d756c7469696e7374616e63655f63617264696e616c697479223a22222c226d756c7469696e7374616e63655f636f6c6c656374696f6e223a22222c226d756c7469696e7374616e63655f7661726961626c65223a22222c226d756c7469696e7374616e63655f636f6e646974696f6e223a22222c226973666f72636f6d70656e736174696f6e223a2266616c7365222c22757365727461736b61737369676e6d656e74223a22222c22666f726d6b6579646566696e6974696f6e223a22222c2264756564617465646566696e6974696f6e223a22222c227072696f72697479646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22222c227461736b6c697374656e657273223a7b227461736b4c697374656e657273223a5b7b226576656e74223a22637265617465222c22696d706c656d656e746174696f6e223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c22636c6173734e616d65223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c2265787072657373696f6e223a22222c2264656c656761746545787072657373696f6e223a22227d5d7d7d2c227374656e63696c223a7b226964223a22557365725461736b227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3232302c2279223a3134302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3132302c2279223a36302e30303030303030303030303030337d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445222c2270726f70657274696573223a7b226f766572726964656964223a22706d222c226e616d65223a22e7bb84e995bfe5aea1e689b9222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c22657865637574696f6e6c697374656e657273223a6e756c6c2c226d756c7469696e7374616e63655f74797065223a224e6f6e65222c226d756c7469696e7374616e63655f63617264696e616c697479223a22222c226d756c7469696e7374616e63655f636f6c6c656374696f6e223a22222c226d756c7469696e7374616e63655f7661726961626c65223a22222c226d756c7469696e7374616e63655f636f6e646974696f6e223a22222c226973666f72636f6d70656e736174696f6e223a2266616c7365222c22757365727461736b61737369676e6d656e74223a22222c22666f726d6b6579646566696e6974696f6e223a22222c2264756564617465646566696e6974696f6e223a22222c227072696f72697479646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22222c227461736b6c697374656e657273223a7b227461736b4c697374656e657273223a5b7b226576656e74223a22637265617465222c22696d706c656d656e746174696f6e223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c22636c6173734e616d65223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c2265787072657373696f6e223a22222c2264656c656761746545787072657373696f6e223a22227d5d7d7d2c227374656e63696c223a7b226964223a22557365725461736b227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439227d2c7b227265736f757263654964223a227369642d35344233354332332d303138422d344642412d393643322d374546343544303134444444227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3336352c2279223a3134302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3236352c2279223a36307d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22222c22657865637574696f6e6c697374656e657273223a6e756c6c2c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3131392e31353632352c2279223a3130302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a37352e3630393337352c2279223a3130302e30303030303030303030303030337d7d2c22646f636b657273223a5b7b2278223a31352c2279223a31357d2c7b2278223a35302c2279223a34307d5d2c22746172676574223a7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d7d2c7b227265736f757263654964223a227369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22222c22657865637574696f6e6c697374656e657273223a6e756c6c2c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3236342e31353632352c2279223a3130302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3232302e38343337352c2279223a3130302e30303030303030303030303030337d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34307d2c7b2278223a35302c2279223a34302e3030303030303030303030303031347d5d2c22746172676574223a7b227265736f757263654964223a227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445227d7d2c7b227265736f757263654964223a227369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e9a9b3e59b9e222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b666c61672e657175616c732827e9a9b3e59b9e27297d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365222c2273686f776469616d6f6e646d61726b6572223a66616c73657d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3331352c2279223a3139312e35323432393035313134363231377d2c2275707065724c656674223a7b2278223a3137302c2279223a3134302e333236383433353739313433397d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34302e3030303030303030303030303031347d2c7b2278223a3331352c2279223a3139312e35323432393035313134363231377d2c7b2278223a3137302c2279223a3139312e35323432393035313134363231377d2c7b2278223a35302c2279223a37397d5d2c22746172676574223a7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d7d2c7b227265736f757263654964223a227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c2273657175656e6365666c6f776f72646572223a22227d2c227374656e63696c223a7b226964223a224578636c757369766547617465776179227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d42304144324538452d363634312d343437322d394431332d463838324441334146394435227d2c7b227265736f757263654964223a227369642d41443932373633302d373545442d344437372d383743462d454430333330373345414336227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3435302c2279223a3132302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3431302c2279223a38302e30303030303030303030303030337d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e7bb8fe79086e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c22657865637574696f6e6c697374656e657273223a22222c226d756c7469696e7374616e63655f74797065223a224e6f6e65222c226d756c7469696e7374616e63655f63617264696e616c697479223a22222c226d756c7469696e7374616e63655f636f6c6c656374696f6e223a22222c226d756c7469696e7374616e63655f7661726961626c65223a22222c226d756c7469696e7374616e63655f636f6e646974696f6e223a22222c226973666f72636f6d70656e736174696f6e223a2266616c7365222c22757365727461736b61737369676e6d656e74223a22222c22666f726d6b6579646566696e6974696f6e223a22222c2264756564617465646566696e6974696f6e223a22222c227072696f72697479646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22222c227461736b6c697374656e657273223a7b227461736b4c697374656e657273223a5b7b226576656e74223a22637265617465222c22696d706c656d656e746174696f6e223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c22636c6173734e616d65223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c2265787072657373696f6e223a22222c2264656c656761746545787072657373696f6e223a22227d5d7d7d2c227374656e63696c223a7b226964223a22557365725461736b227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d30334436303037342d303738332d344333422d384345302d373342343345464335313830227d2c7b227265736f757263654964223a227369642d36314637383245322d304132452d343144322d383042372d383136304139324441433939227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3539352c2279223a3134302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3439352c2279223a36307d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e4babae58a9be68aa5e5a487222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c22657865637574696f6e6c697374656e657273223a22222c226d756c7469696e7374616e63655f74797065223a224e6f6e65222c226d756c7469696e7374616e63655f63617264696e616c697479223a22222c226d756c7469696e7374616e63655f636f6c6c656374696f6e223a22222c226d756c7469696e7374616e63655f7661726961626c65223a22222c226d756c7469696e7374616e63655f636f6e646974696f6e223a22222c226973666f72636f6d70656e736174696f6e223a2266616c7365222c22757365727461736b61737369676e6d656e74223a22222c22666f726d6b6579646566696e6974696f6e223a22222c2264756564617465646566696e6974696f6e223a22222c227072696f72697479646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22222c227461736b6c697374656e657273223a7b227461736b4c697374656e657273223a5b7b226576656e74223a22637265617465222c22696d706c656d656e746174696f6e223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c22636c6173734e616d65223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c2265787072657373696f6e223a22222c2264656c656761746545787072657373696f6e223a22227d5d7d7d2c227374656e63696c223a7b226964223a22557365725461736b227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d42303041324138322d334131352d343934352d423430312d384445344444383732413838227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3734302c2279223a3134302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3634302c2279223a36307d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c22657865637574696f6e6c697374656e657273223a22227d2c227374656e63696c223a7b226964223a22456e644e6f6e654576656e74227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3831332c2279223a3131342e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3738352c2279223a38367d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d35344233354332332d303138422d344642412d393643322d374546343544303134444444222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3430392e36343834343638373030303735352c2279223a3130302e34303937333335333632333338337d2c2275707065724c656674223a7b2278223a3336352e36323838393638373939393234352c2279223a3130302e32313931373237313337363632337d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34302e3030303030303030303030303031347d2c7b2278223a32302e352c2279223a32302e357d5d2c22746172676574223a7b227265736f757263654964223a227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030227d7d2c7b227265736f757263654964223a227369642d30334436303037342d303738332d344333422d384345302d373342343345464335313830222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3633392e31353632352c2279223a3130302e30303030303030303030303030317d2c2275707065724c656674223a7b2278223a3539352e38343337352c2279223a3130302e30303030303030303030303030317d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34302e3030303030303030303030303031347d2c7b2278223a35302c2279223a34302e3030303030303030303030303031347d5d2c22746172676574223a7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442227d7d2c7b227265736f757263654964223a227369642d42303041324138322d334131352d343934352d423430312d384445344444383732413838222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3738342e3337352c2279223a3130302e30303030303030303030303030317d2c2275707065724c656674223a7b2278223a3734302e3339303632352c2279223a3130302e30303030303030303030303030317d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34302e3030303030303030303030303031347d2c7b2278223a31342c2279223a31342e3030303030303030303030303031367d5d2c22746172676574223a7b227265736f757263654964223a227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246227d7d2c7b227265736f757263654964223a227369642d41443932373633302d373545442d344437372d383743462d454430333330373345414336222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b646179733c3d31307d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365222c2273686f776469616d6f6e646d61726b6572223a66616c73657d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3639302c2279223a3139322e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3433302e352c2279223a3132302e30383539333735303030303030337d7d2c22646f636b657273223a5b7b2278223a32302e352c2279223a32302e357d2c7b2278223a3433302e352c2279223a3139322e30303030303030303030303030337d2c7b2278223a3639302c2279223a3139322e30303030303030303030303030337d2c7b2278223a35302c2279223a37392e30303030303030303030303030367d5d2c22746172676574223a7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442227d7d2c7b227265736f757263654964223a227369642d42304144324538452d363634312d343437322d394431332d463838324441334146394435222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b646179733e31307d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3439342e38303037393037383433383831342c2279223a3130302e34313336303139373934303738347d2c2275707065724c656674223a7b2278223a3435302e32383531343637313536313138362c2279223a3130302e32313932313035323035393232317d7d2c22646f636b657273223a5b7b2278223a32302e352c2279223a32302e357d2c7b2278223a35302c2279223a34302e3030303030303030303030303031347d5d2c22746172676574223a7b227265736f757263654964223a227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743227d7d2c7b227265736f757263654964223a227369642d36314637383245322d304132452d343144322d383042372d383136304139324441433939222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e9a9b3e59b9e222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b666c61672e657175616c732827e9a9b3e59b9e27297d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365222c2273686f776469616d6f6e646d61726b6572223a66616c73657d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3534352c2279223a36302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3137302c2279223a32397d7d2c22646f636b657273223a5b7b2278223a35302c2279223a317d2c7b2278223a3534352c2279223a32397d2c7b2278223a3137302c2279223a32397d2c7b2278223a35302c2279223a317d5d2c22746172676574223a7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d7d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a313030302c2279223a313035307d2c2275707065724c656674223a7b2278223a302c2279223a307d7d2c227374656e63696c736574223a7b2275726c223a227374656e63696c736574732f62706d6e322e302f62706d6e322e302e6a736f6e222c226e616d657370616365223a22687474703a2f2f62336d6e2e6f72672f7374656e63696c7365742f62706d6e322e3023227d2c227373657874656e73696f6e73223a5b5d7d, null), ('25002', '1', '请假流程.bpmn20.xml', '25001', 0x3c3f786d6c2076657273696f6e3d27312e302720656e636f64696e673d275554462d38273f3e0a3c646566696e6974696f6e7320786d6c6e733d22687474703a2f2f7777772e6f6d672e6f72672f737065632f42504d4e2f32303130303532342f4d4f44454c2220786d6c6e733a7873693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612d696e7374616e63652220786d6c6e733a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220786d6c6e733a61637469766974693d22687474703a2f2f61637469766974692e6f72672f62706d6e2220786d6c6e733a62706d6e64693d22687474703a2f2f7777772e6f6d672e6f72672f737065632f42504d4e2f32303130303532342f44492220786d6c6e733a6f6d6764633d22687474703a2f2f7777772e6f6d672e6f72672f737065632f44442f32303130303532342f44432220786d6c6e733a6f6d6764693d22687474703a2f2f7777772e6f6d672e6f72672f737065632f44442f32303130303532342f44492220747970654c616e67756167653d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d61222065787072657373696f6e4c616e67756167653d22687474703a2f2f7777772e77332e6f72672f313939392f585061746822207461726765744e616d6573706163653d22687474703a2f2f7777772e61637469766974692e6f72672f70726f63657373646566223e0a20203c70726f636573732069643d224c6561766542696c6c22206e616d653d224c6561766542696c6c2220697345786563757461626c653d2274727565223e0a202020203c73746172744576656e742069643d22737461727422206e616d653d22e5bc80e5a78b222f3e0a202020203c757365725461736b2069643d227573657222206e616d653d22e794a8e688b7e68f90e4baa4223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c757365725461736b2069643d22706d22206e616d653d22e7bb84e995bfe5aea1e689b9223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c73657175656e6365466c6f772069643d227369642d32424346433631362d374438412d343134312d414633462d3841433138454131303044462220736f757263655265663d22737461727422207461726765745265663d2275736572222f3e0a202020203c73657175656e6365466c6f772069643d227369642d45464334383546312d414543392d343536392d423430312d44313644453538463637333722206e616d653d22e5aea1e689b92220736f757263655265663d227573657222207461726765745265663d22706d222f3e0a202020203c73657175656e6365466c6f772069643d227369642d38344242323430352d384530322d344442392d384632392d45394242423033324330443922206e616d653d22e9a9b3e59b9e2220736f757263655265663d22706d22207461726765745265663d2275736572223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b666c61672e657175616c732827e9a9b3e59b9e27297d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c6578636c7573697665476174657761792069643d227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030222f3e0a202020203c757365725461736b2069643d227369642d44313931444237442d313042382d344145372d383238342d45303933313238373233374322206e616d653d22e7bb8fe79086e5aea1e689b9223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c757365725461736b2069643d227369642d41313341394141382d434338462d344233332d383136362d45463737353746364142444222206e616d653d22e4babae58a9be68aa5e5a487223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c656e644576656e742069643d227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246222f3e0a202020203c73657175656e6365466c6f772069643d227369642d35344233354332332d303138422d344642412d393643322d37454634354430313444444422206e616d653d22e5aea1e689b92220736f757263655265663d22706d22207461726765745265663d227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030222f3e0a202020203c73657175656e6365466c6f772069643d227369642d30334436303037342d303738332d344333422d384345302d37334234334546433531383022206e616d653d22e5aea1e689b92220736f757263655265663d227369642d44313931444237442d313042382d344145372d383238342d45303933313238373233374322207461726765745265663d227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442222f3e0a202020203c73657175656e6365466c6f772069643d227369642d42303041324138322d334131352d343934352d423430312d38444534444438373241383822206e616d653d22e5aea1e689b92220736f757263655265663d227369642d41313341394141382d434338462d344233332d383136362d45463737353746364142444222207461726765745265663d227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246222f3e0a202020203c73657175656e6365466c6f772069643d227369642d41443932373633302d373545442d344437372d383743462d4544303333303733454143362220736f757263655265663d227369642d37443342413043432d304531342d343031412d393937422d45354235373739384436303022207461726765745265663d227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b646179733c3d31307d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d42304144324538452d363634312d343437322d394431332d4638383244413341463944352220736f757263655265663d227369642d37443342413043432d304531342d343031412d393937422d45354235373739384436303022207461726765745265663d227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b646179733e31307d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d36314637383245322d304132452d343144322d383042372d38313630413932444143393922206e616d653d22e9a9b3e59b9e2220736f757263655265663d227369642d44313931444237442d313042382d344145372d383238342d45303933313238373233374322207461726765745265663d2275736572223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b666c61672e657175616c732827e9a9b3e59b9e27297d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a20203c2f70726f636573733e0a20203c62706d6e64693a42504d4e4469616772616d2069643d2242504d4e4469616772616d5f4c6561766542696c6c223e0a202020203c62706d6e64693a42504d4e506c616e652062706d6e456c656d656e743d224c6561766542696c6c222069643d2242504d4e506c616e655f4c6561766542696c6c223e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227374617274222069643d2242504d4e53686170655f7374617274223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2233302e30222077696474683d2233302e302220783d2234352e302220793d2238352e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d2275736572222069643d2242504d4e53686170655f75736572223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e30222077696474683d223130302e302220783d223132302e302220793d2236302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d22706d222069643d2242504d4e53686170655f706d223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e3030303030303030303030303033222077696474683d223130302e302220783d223236352e302220793d2236302e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030222069643d2242504d4e53686170655f7369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2234302e30222077696474683d2234302e302220783d223431302e302220793d2238302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743222069643d2242504d4e53686170655f7369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e3030303030303030303030303033222077696474683d223130302e302220783d223439352e302220793d2236302e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442222069643d2242504d4e53686170655f7369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e3030303030303030303030303033222077696474683d223130302e302220783d223634302e302220793d2236302e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246222069643d2242504d4e53686170655f7369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2232382e3030303030303030303030303033222077696474683d2232382e302220783d223738352e302220793d2238362e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d42303041324138322d334131352d343934352d423430312d384445344444383732413838222069643d2242504d4e456467655f7369642d42303041324138322d334131352d343934352d423430312d384445344444383732413838223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223734302e302220793d223130302e3030303030303030303030303031222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223738352e302220793d223130302e3030303030303030303030303031222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446222069643d2242504d4e456467655f7369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446223e0a20202020202020203c6f6d6764693a776179706f696e7420783d2237352e302220793d223130302e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223132302e302220793d223130302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d35344233354332332d303138422d344642412d393643322d374546343544303134444444222069643d2242504d4e456467655f7369642d35344233354332332d303138422d344642412d393643322d374546343544303134444444223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223336352e302220793d223130302e3231363435303231363435303233222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223431302e343133303433343738323630392220793d223130302e34313330343334373832363039222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337222069643d2242504d4e456467655f7369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223232302e302220793d223130302e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223236352e302220793d223130302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439222069643d2242504d4e456467655f7369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223331352e302220793d223134302e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223331352e302220793d223139312e3532343239303531313436323137222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137302e302220793d223139312e3532343239303531313436323137222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137302e302220793d223134302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d42304144324538452d363634312d343437322d394431332d463838324441334146394435222069643d2242504d4e456467655f7369642d42304144324538452d363634312d343437322d394431332d463838324441334146394435223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223434392e353833333333333333333333332220793d223130302e3431363636363636363636363639222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223439352e302220793d223130302e3231383334303631313335333734222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d30334436303037342d303738332d344333422d384345302d373342343345464335313830222069643d2242504d4e456467655f7369642d30334436303037342d303738332d344333422d384345302d373342343345464335313830223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223539352e302220793d223130302e3030303030303030303030303031222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223634302e302220793d223130302e3030303030303030303030303031222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d41443932373633302d373545442d344437372d383743462d454430333330373345414336222069643d2242504d4e456467655f7369642d41443932373633302d373545442d344437372d383743462d454430333330373345414336223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223433302e352220793d223131392e3530303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223433302e352220793d223139322e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223639302e302220793d223139322e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223639302e302220793d223134302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d36314637383245322d304132452d343144322d383042372d383136304139324441433939222069643d2242504d4e456467655f7369642d36314637383245322d304132452d343144322d383042372d383136304139324441433939223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223534352e302220793d2236302e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223534352e302220793d2232392e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137302e302220793d2232392e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137302e302220793d2236302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a202020203c2f62706d6e64693a42504d4e506c616e653e0a20203c2f62706d6e64693a42504d4e4469616772616d3e0a3c2f646566696e6974696f6e733e, '0'), ('25003', '1', '请假流程.LeaveBill.png', '25001', 0x89504e470d0a1a0a0000000d4948445200000337000000ca08060000009835be800000222c4944415478daeddd09985575fdc7712a2bdb7dda172b2b2bdb372bdbeddf46656525210ce984066ea9a43e997b2aa99151d86669659b96191a9a28b82b9a962969e6122e8022966818602ae77f3ee7e1f05c8619988161e6de3baff7f37c1fcebdf7cc9de19ccfeff3fb7d7fdb19360c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da85edb7dfbe104208d17ea18603000cc9e4c6550000de0e00800a1000c0db010050010200783b00002a4000006f070040050800bc1d000015200080b70300a0020400f076000054800000de0e00800a1000783b00002a4000006f070040050800e0ed0000a8000100bc1d0000152000f076000054800000de0e00800a10003078dc7df7dd9f9d32654a51fafb66ae06004072030068498aa2d8f8de7bef5d54528c1b37ee4c57040020b90100b42473e7cefd45b18259b366cd1f356ad4b6ae0a004072030068291e78e081373cf2c823cb8b06264e9c38b7b3b3731357070020b90100b40c0b162c985374e1befbee5bd0d1d1f11d57070020b90100b40477dc71c7c1450f4c9d3a7541e9f55bba4a0080764b64a62599594b5ce54a0140eb50e62fcf5db66cd9ff7a4a6e962f5ffee0840913666fbdf5d61bb95a0080764a6eb62ce3a135253723478edcc6950280d661debc7997176b61ce9c3973478d1ab5b7ab050068b704e7ec35243797ebd90380d6e2b2cb2e5b5b6e532c5dbaf4c2f87c6767e7c6ae1800a09d929b2d7b4a6e6c190a00adc721871cb2fb9aa6a525b739e080037e63e40600d0ae094e776b6fae326a0300adc929a79c72634f99cd2db7dcf24323f30080764e6e565b7b63ad0d00b42e23468cd8bc4c629676b399c0751d1d1dd7d92d0d00d0d694c9cc54a33600d03e4c9a34e9b8329979a431b939e184134e2cfd7eb2ab030068f7e466ab86b536c35d1100686dd249357dfaf4850d0ff0fc75e9f1377776766ee2ea0000da9e7aed8d511b00680ff6d8638fff5bb468d1b2328a71e3c6cdb4510c0060282537d5ce69ae0400b40fc71f7ffcd953a64cc95acaa9ae0600a0571445b1d19c39734ebde28a2b1e39efbcf38a193366b46424b969d5bf7de6cc99c5c5175ffcaf32c6d090188a1a8272d95d9c75d65995b79f76da69ca250df17600bd23c675c92597140b172e2c1e7cf041314871cf3df714175d74d1fda5916d474362a86908ca654f317ffe7ce59286783b6f077a4f7a641857d318d8833366ccb88186c450d310944be59286046f07fa850c35338ee689d2bc1ea22131d43404e552b9a421c1db817e21733a9946539957414362a86908caa572494382b703036a5e0fdc775731e7aa9f16d7cf3cbc8a1ce73d86c3bc688886a05c0ade4e433404b48c792d5e34bfb8ee9c838b6bcfda6f95c87bf98ce9a800698886a05c0ade4e433404b48479cdbdfe0fab19571df3ae9fc6745480344443502e056fa7211a025ac3bc6eb8e0981ecd2b9f311d15200dd110944bc1db698886809630afeb661cd6a379e533a6a302a4211a827229783b0dd110c0bc840a90865480502e954b1a12bc1d1828f3caee273d99573e633a2a401aa221289782b7d3100d012d615e375ff6dd1ecd2b9f311d15200dd110944bc1db698886809630af7fcf9f5d5c77eea1ab0f3997efe533a6a302a4211a827229783b0dd110d012e695b8f5cf3f5fcdbcf21ec3615e344443502e056fa7211a025ac7bc962d2b6e9ef583d5879ccbf7f219d35101d2100d41b914bc9d866808687af3ca13866fbaecb81ee7d4e6334f215601d2100d41b914bc9d866808685ef35ab6acb8ebe6f38bbf4d3fa047e3aa23e7e45cbd342a401aa221289782b7d3100d014d655e6beb8dd14bc3bc688886a05c0ade4e433404b48479f5a637664dbd344c480548433434c86cc2db954be592866808500156b1aec65507135201d2100d0d22c3cb2856fccbdb954be59286680818ea15a0605e3444432dca07cb5854c6e415ff6ec3db857249433404a80005f3a2211a6ad5c4669b86119c7b866a82a35c2a9734444380e446302f1aa2a1f6486cd6f63e6f17ca250dd110a00214cc8b8668a8e918be9604a6fe7c386f17ca250dd110da96a228369e3d7bf6f8934e3ae9a2a38f3efafe3df7dcf3a1cecece62fbedb72fc68c19b37cd75d777df0c0030f9c73cc31c7fcb28c57aa0005f3a2211a6adac4666d89cb901bc1512e954b1aa2a156a0a3a363d3912347ee51b6bf4f2de3e63216a72d5ec6d2326e2d3f9b5afebb6fce93bdac21a939edb4d37e7ec411473cb4f7de7b17c71f7f7c71c5155714f3e7cf2f962e5d5a84fcbb70e1c2e22f7ff94b51263fc55e7bedb57cc28409b78d1b376e6715a0605e3444434dc107fb3822d3d7f379bbe0edee1d0d6d20468d1ab56d1933ca78704532d39bb8a03c7f8c6ca6813289197be491472edb6fbffdaac4e5e1871f2e7acb35d75c53ecbffffe0f8f1f3ffe861123466cae0214cc8b866868d0139b6dd6e1e7160f850447b9542e6988869a913241d9ac4c50a6f721a1e92e2e69a7b6f8ba8ed66c74c619679cbfcb2ebb14d3a64deb5352d395e9d3a71763c78e5dd22ea338cc8b79d1100d0d91c4a6bf7e5eb914bc5dd0d03a3072e4c8ed478f1e7d6f63a2d2d1d1511c75d451c5f9e79f5fdc71c71dc57ffef39faabdfddffffeb79a5575d965971593274f2e3efff9cf774d70160fd9519c2436175e78e1955ffad2978a9b6ebaa9e80f6ebbedb6a24c9496ecbcf3cebbab00850a90866868c058dbe60103fd3dcaa5e0ed82867a97d86c5326230f372635bffce52fab6520bd61d1a245d5f9f9b9c624a7fcce9d870d35326293c4a6b717afb7e4fbc68d1bd7f25923f3625e3444432d96d8f4d794b2b61ec1512e954b1aa2a1661ab1694c6cbefce52f57a334eb427e2ecb4bba2438436704276b6c3215adbf466cba1bc1d961871d169517750b15a050010a1ada6074dd0ce05165ecb8e2dfbed0f5e7da769301e552b9a4211a6a06b2c6a6712adaa1871eba72ead9ba92296b13274eec3a456d8b61ed4e76453bfcf0c31fcc1a9b0dc959679db5a4a3a3e37215a050010a1adaa089cd360d09ca89b1f915fff636c1e9e9e7da32c1512e954b1aa2a166a04c6c66368ed8ac6f62d398e07419c1b9a4ed939ba953a7fe2affe9fffdef7fc58666b7dd765bd0aa4362cc8b79d1100db55062336cc5c84bd110bd49701a139b3a7668f8bcedd6e02897ca250dd1d06093ed9e1bd7d8aceb54b4354d516b5c83d3d6d3d3326a93e7d864bbe781e0da6baf7db055476f9817f3a2211a6a527a4a38ba4b54d694e07477fe09dd9cdf566b70944be5928668a809929b1975e291cd003604279f7cf2d018bd993d7bf6f86c22b03e5b3ef795b163c72ec8bcc266125419ef665ecc8b8668a8d935b486c466781f1296ee129cde26365d139ce1cddc58502e954b1aa2a166d7504747c7a6f52602195df9f7bfffbd41dadfd945adcb36d19b0d6b474e3ae9a48b4e38e1846220993c79f235e505ddb759ae41c310dd8c9123476ec5bc98170dd150b36a681d138cb525387d4d6c1a7fff3dcd3a82a35c2a97344443ada0a1f2fd3deaf3bef18d6f6ce836786372b3efb076e4e8a38fbeff8a2bae18d0e466d6ac59b79517745ab309af21ceee2ecb665ecc8b866868b035b41e53c37a4a701ebd8e89cddaa6c4299782b70b1aea8586caf74ead3fbff0c20b37681b3c0ffa6cf85ba60d6b47f6dc73cf87eebaebae014d6e162c58b0b0bca0739b58782bb3ec4601322fe645433434d81a5ac7c4664d09ce8deb91d8acefdfa35c0ade2e86bc86cad737d7eff7f746025d993f7f7ee3df3177583bd2d9d9592c5dba7440939bfcbef2822e6d76e13566d9194a645ecc8b866868b035d40f2325dd2538eb93d8f4758a9c722978bba0a1060d95b1a47edd5fdb3faf695be886dfdd346df17ebfe883412f6e76d3452b99d7030f3c50cc9c39b3c7cffff5af7f554393cb962debd3f7de7df7ddd57558bc78f1a0ff1f69a8f7b170e1c20dfafde9693ae79c737afc7cc18205c55ffffad795da8b79d77f57b44a43bd8bcf7ce633751232793dadffd1dd8cd8dcb8e2fdf561b272d9fbc8a261e592b7f7579d9ffb9d86ebdacefdf39fff5c454f9fe73ba64f9fde277d66a1fa2f7ef18b2233819aa10dd48a1aaa63a0dbe06d99dcecb8e38ecb077ae466c992250b5a64e4e6aa9123476eb3f5d65b6f3458c3ce071e7860f19ad7bca678ed6b5fdb6d6cb1c516c5bdf7debbdacf5d7ffdf5c5139ef084e2cc33cfecf67b2fbef8e262a38d36aa8ef7dd77dfe2e52f7f79f18a57bc62658c18316265e57bfbedb757869588e1a52174f3cd37af7c2f86baa12be916ee9919740d95e5ad78fef39f5ffcf4a73fad5e6fb3cd36c5965b6eb9323efce10faf72fe31c71c53bcfef5af5fe5bdb973e716bbefbefb4aaddd78e38dc5b7bef5ad6a6162e2431ffa50b1f1c61b17c71e7beccaf7f2f93ffef18feafc6c3ff9e217bfb83a7ee31bdf587cfffbdfaf8e9ff5ac67157ffce31ff5eef54143c3d6be3bdafa8cdcf4e5419fad3c7233e8e532f5eea69b6e5a9c74d249d5eb5d76d9659524f6b7bffd6df5fe77bffbdd62f8f0e1c5c73ef6b1e2031ff840b5d351cae71bdef08695913a226552b91c5a1a6a8c4b2fbdb42ac3d1c0dacefde4273f597cf6b39fedf1f324b9f9aebffffdefc5d7bef6b5d5f4f6a94f7d6a95f3efbbefbee2e31fff78d5a6d875d75d8bbdf7debbc82ebc679f7d360df55243e5f1622337fd4829c007077acdcd9d77de796393afb9e9da9818b439b5bbedb65bf1def7beb7f8f5af7f5d45cce3c8238fac8e5361c580eebffffe95094b0ce6139ff84415cf7dee73abc66b8ef3fef1c71f5f9d97c424c78f7bdce3aa9f193f7e7cf1ae77bdab38e49043aac8b91ffce007ab73b3935e0f8da055a2fe6ee6d57c1a4ae3298da8544079fdaa57bdaa7af2f16f7ef39bea7e6fb6d966ab9c9f06d0ab5ffdea95c9ed51471d553ced694f2bb6da6aabe26f7ffb5bf5feb9e79e5be967d4a8515594ffd72a695a318fb88ac73ffef155e53667ce9c4aabf91baebbeebaea7b7ef4a31f55df93a4ebbcf3ceab46047bd3e34843ab24128b37d09a9b7549705a65cd4dd394cbdffffef7c5d39ffef46ac424af274d9a541c76d861c557bef295aa6ca58198f72fb9e49262cf3df72c9ef39ce754e526debccf3efb147bedb5575596ce3aebaceabedd74d34dcae510d35063fce10f7fa874507b7463648646ee77ee6746e5a2896823c789bc5f8fb824f19d366d5af55da9ff93742749ce4c90c417bff8c5e2fdef7fffcaef4e129c4ed6473ffad155d2f3939ffca4183d7a74d556c9b35a2437bdd3903537fdccc1071f7cf340ef9676ce39e7fcb149774bbb3c4f88eda1313128e61563f9c8473e525c74d145553cf6b18fad12891c6708b831b9c9284d0c65ca9429abc5e69b6f5e8d02e5bcef7ce73b5585f6a8473daa78d9cb5e562537a9d852a926f2fbeae4260de2dafc76d861872a194a8377ead4a955e59be37c5e379c9957736928d34e92bcfcfce73f2ff6d8638faaf193c4259a486328efbfe4252f592db9494f70a62d6eb2c926c52b5ff9cae257bffad52ae7cc9e3dbbd869a79d8a5b6eb9a5f8e73fff594d7d8916f330e0bccefba904afb9e69a4a774f7ef293abcaef3def794fa5b56838bd536944e59a24a14e1245436bd7d07a8c94f4b4dd7377bba5f525c16985ddd29aaa5c46fb6f7ef39b8baf7ffdeb95c727d1a94759d3f04cf9aba788254e3ffdf46a743dc76968befded6f2fdefad6b756e5e7739ffb5c75cf52e694cba1d53ee8eadbb9d7dd4d43cc88fbda3a28dff18e7754e7fee0073f285ef8c21756ef25a1ce2c8e3163c6543338d231f694a73ca5d87ffffdab736fbdf5d6aa0d91df9d76e4f39ef7bcaa33f699cf7ce61aa743d2d0ea1ab25b5a3f3369d2a41306fa3937871e7ae8594df69c9b35f5900eaa79a5224aaf799293440c27c693e317bde845ab24379932965eb9eebe27865327378988bb3e77ecd8b1d514b63464134f7ad2938af25aac32ad29e7bce0052f28e6cd9b57bd97e1ea185886a0076bfd4d939957536a283dbc496233d530f735f72dc94d7a7773cfa3813ab949a326bdb4f5c84d7afbf2f7e6fee73891cfebfb9defce77a442cb34966831a385799da930f9bcfe3b32c5e6a52f7d69759c4654cead1b67f95d991273cf3df7d0502f34b48e23266b7b8e4d6f1ff4d9952d8735f7736e9ab25c66aa59ae717abce3efe96d4f3d9ca426befec4273eb1f8f4a73f5d252519b9c988cb339ef18ce2b8e38eab929b8cda649ae8dbdef6b6aaa3a94e6e94cba1d53e688c745ee5fe65da61775320a3b13ae9cd3d4f7b20c78968e97def7bdf2aeb77f25d19c599306142a5b9f3cf3fbff8def7be57fcf8c73f2eaebaeaaa95ebb432c2f7cd6f7eb378f7bbdf5d25cbdb6ebb6da5df4c9b4f12f4bbdffdae1a89a0a1356bc8736efa99830e3ae86565a178e4e1871f1eb0cdd2468f1efdcf567c2aea609857e657a767af7e9d46e9ac59b3aae39855637273da69a7559f7ffbdbdf5e2dd2bbd298dc642a437aec5291656ad2e1871fbe4a940968353a14334c059a06700c3015707efec4134fac2ad82459e951ac17a50e55f36a560d65fe75a6092489f9d9cf7e56bd9746cb29a79cb2727a599ddc64ba636fa620a6b739e77ff5ab5fad46f9b230353dcff92cf3bef33a237ff9bcfe3b32b73f8db3682d8da84c87c93a9e34a2def9ce770eda22d456d4d03a8c9cf4f6019d7d4d70eaa971dbb6fa051ce872995ef0f49027d9886fa7d328bde2291fe964488333094d1a93175c704195e8640a5b1a9159779391964c254e47d78e3beeb8725a9a7239b4da078dc9cbeb5ef7ba2a9254ace9dcccb2c80c8fc6355599a6fcd18f7e749511ffe826d3cf3272138da4932c754712f0cc20a93710489b23494dce8b96930425a149c339c97512edbc4f436ba6a3a363d3f29a3d94eb561e57b3623604b96f63c68c59de90dc6c36ac5d29857d4b7a8806684ada2fcb8b79890ab077915e90240ff57ce92424a9b8729c29038dc94d1ab175cf49d7c828cb01071cb072c1787eee318f794c352d29eb7ab2a9402acb4c41ca717a6bf2ff4d41c871a6a5a532ce9074de8fd9650a4386bbd3d81d8cd11b15e0dae3eaabafae466d52e92549cefa9b5450d9023e3d7c1979ab939b4c2f4c23eb88238ea87490e334aca2b933ce38a37a9d1eb868a16e4445076914659169ddeb9bd779bf6e4425694a651a6d665383eee6f69bbab0def43482d3dbc4a6af094efdfbb66d878b37189d0e29636f7ad39baa4ea72421f1f424317564d177fcb7ebb4b42424e979cd74b43434d37995b29c06a9723934939b6c0491fa3c232a4926e2d73d9d9b8424e734eea0997aa0de60205ac8774537197949fb20d3d232329329ed897a9427a3fa575e7965756e3db531c7498cf33ac799ae4643bd23cfbda9938eac57da10c43f1a129b4b86b5333bedb4d3887df6d9e7a10118bd59347af4e8abcb1b384605d8bbc8bcecccc1ce306522a6935d48729c24a431b949659504a5bbefc97a9ccb2fbfbc3a4e0f5f160cd6d3d2b2b0302696c5ac69086744260de1aedb44e77576ec490f4ed7dd529857736a28d34eb21b5212e124b719614b7293ca273d6da9a47a5a7353bf4ec596d75da7a7a491949ebd2c32cda850b49811c1bccef7d68da8fcce24c08dd35fba36a2f2733dedec47437d1ac1e93a456cc7617d7f8e4d7709ce0e7d1829e2ed6b89787192958ca48c1b37ae9a7a9651f189132756d7fb873ffc613575adee344a7293a965e9618fef27f9496294f7721c3fae1b91cae5d04a6ed2d9941192ccf2a87758cdfdcb7a98aee7a6832ad3cbb37eb6f1fdedb6dbae5aab556f1f9e246958c3b4b4d401497aa2958c0c656a5afdb3d75e7b6d756e667ca41d91e3830e3aa8ea244b5b211d6cda07bd4e6eb6ad138f8cdef4f7c602f9beb20dbebce121a26386b53be3c78f9f9d06ef8624eb7b9229f6714ef99035af98567a58b20b4a6fa6a5659d4c1293de7c77bde6263ffbd4a73eb5da7a34a6f896b7bca5aa54d313d898dca487268ddecc0f4f633923385968dab8e89579356f05989ee24c7139f5d4537b9c96d65d7273c30d37543acbda802c62beedb6db569eb7df7efb550b4ed3404b525d4f63c8eb673ffbd9d5e73dcded8f76a2ebba1195465dd697d150bf24388d9b0c34262a7d7940674f3fd774db3db772b94c0334a336f533c9d298cc35cf34a3fa9c4cf1c9da974c614b2f7aeae98cb87fe10b5fa8decf719298ba31ab5c0e1d0da58d90fb960d82eebcf3ce956b2733953c53d1b3c6b23e37bba4a6532bf5777d6e1d49949390f4b4e626c94d4611934465ed663d7adf98dca4fd9073731c8de5fb24377da76c235f50271fe9cce8af6da1b35e769f7df679b871d4a655dbe27dbda09b8d1d3b76497af53704b367cf3ea3fc1d779599e2162ac0de45a68f25b9699cf79cb9ae590b93866a465a32ad20469461e88cea64b79cb57d6f0c2f9556929bf4d6a4d19a679d6411602acb7c7776d3ca76a131b72c544c0f618caddeda31bd8c99039ec428bd3e99d3cdbc9a4f434962ea45c5999a96298db96fb9df199dcb36e1b987997258ff4c7a813355258d9ee82d53d3320f3f535c726edd939be908d93d2fc7d94a36bfa39e46138de6f31c67dd56e6f4a7b28db63245325acdef4f2f621a4f993693d1481aea17ba4e517bd48a9197be6eefdcf5e7d6f7f93aca65c334a2242b29334924b29e31233219c5c97b39cec2ff8cd8c473e3d7d9be359bc66447cbf490e7d93759f398e3bc97e946cae5d0d1507e5f3689c8bdca7d6efc2c5a4907553a23a3a1e826f57bee759d6ca4cd901dd292f4462375276ada07a9fff35ed67e2561c994b47c5f92a0cc0248dd907aa11e01ccb99961928d07721c6de6758ed7f4b0501aeabe2d5ec63d751292f5cfeb9be024b1293da4719dcde2566e8bf799323bef183f7efc7f3317b33f99376fdea5a3478fbebdd587c006dabc92302481695c34982969e9854f4f4a1aa8f5e2ee5466c9f27bfb7c85ccf74ecf5f863eb32d68be3b3d803befbc73358a1373ca7350f2bbd2db93f5357505d9b8bd647a0cf377743557e6d51c1a4a03266bb1929ce475765b4ac3293d6b75e475cea97f26669a864dee7fe354b424d1791647571dd46b7b329fbf6b8f60ddf39cca30bf270ba2b368390baaeb5da39260a55157af19a0a10d92e0f4c78850d3ee8ad66ae532be9ac6655d2efff4a73f55cfb2c9f6fa756414bede22ba8e8cdae4fdc6f3ea73b3c98b723974349491baacd3ea6927b2d4cfa9cf33da9ec6717cbdf181df99a276f0c107574974e3f368529727e9c92322ea698e796e4df4593ff728a332f5287ed66b2769caae7d5d23c9779d4cd350ef193972e4f6f5e602f508ceba4e51cbcf7519b1191ad3d1ba523676c79686b6b8bf4670326293c4a6bc59fbab00850a908668a8e5129ca67c40a772a95cd29068576f2f9390cec604271dd14942d3b9d8db5dd1b27940e31a9b443bb4c5d72b6b1c3366ccfda79f7efa03ebb1c9c0a2638f3df6a7998a969ba40214cc8b866868c059dfa9646d3b154db9542e6988869abd2d5ec6a2c6e424494ea68ae6419f1995a9a7ac65442dd311b39e3ad30a77dc71c7471a7f2e53d1daa52dbebe59e36665c677def8f1e3175c7df5d54bfaf21c9b73cf3df7e43239ba2a0b96da695e1ff3625e3444432d9ce0f475e4a52d370f502e954b1aa2a1566a8b376e11bd8e71c9905a63d3cb0bbb5d929ccecece85471f7df4f5975e7ae9ed65767857d66884254b962cb8f3ce3b6f9c3973e699871d76d8d96556392717321962bbedc4c0bc98170dd1508bd2d7a9656d3f154db9542e6988865aa92dbe22c979a82f494d3bb6c5fb953c3db5bcb07b9717ead4326e2d63e98a8b977fe79631ad8c7ddbf969a7cc8b79d1100d0d810467cb32160f6b9307742a97ca250dd190b638c0bc98170dd1507b327c45e2327c0d9fdf3394121be552b9a4211a0224378279d1100db5df08ce909a8aa65c2a9734444380e48679312f1aa2a1f64c70866c62a35c2a9734444380e446302f1aa2a1f64970260fe5c446b9542e69888600c98d605e344443edc1f02c461d3604b67b562e954b1aa22100cc8b79d1100db5392b921bdeae3c2897344443800a50302f1aa221c90d6f17bc9d86680850010a15a0a021c98d722978bba02180790915a050014a6e944be59286046f079817f3a221a10294dc2897ca250dd110a002641acc8b86684872c3db857249433404a800850a9086684872a35c0ade2e6808605e420528684872a35c2a973424783bc0bc98170d0915a0e446b9542e69888600302fe645433424b9e1ed42b9a4211a0254808279d1100d496e944bc1db050d01cc4ba800050d496e944be59286046f079817f3a221a10294dc2897ca250dd11000e6c5bc6888862437bc5d2897344443800a50302f1aa221c98d722978bba02180790915a0a021c98d72a95cd290e0edc00070de79e7318de689a5a5793d444362a8694872a35c2a973424783bd02f5c7cf1c5772d5cb890713441cc9f3fff94d2bc6ea02131d43424b9512e954b1a12bc1de817ce3ffffc4f5d78e185f7dd7df7dd4b18c8e0f5c8c4b866ce9c797b19dbd1d0a0551e3424b9e1ed42b9a4211a025a9db2c06c3363c68cab32e499399dad16279f7c7291c64c2bfeed2b22d7fd865636ae56d7d095575e594c9932a5983a752a0d496e78bb502e698886000c6a43665a1a335b6fbdf546ae06fa4a51141bdf7befbd8b4a8a71e3c69de98a486e00681f00c0a03072e4c8ad4ae37a28e6356ad4a8e1ae08facadcb9737f51ac60d6ac59f34b1d6debaa486e00681f00c06098d7d418d78ab8ca15415f78e08107def0c8238f2c2f1a983871e2dccecece4d5c1dc90d00ed030018c806cc9675af4c1da5996de3caa0b72c58b0604ed185fbeebb6f414747c7775c1dc90d00ed03001848f39ad6685c75ef8cb9b5e80d77dc71c7c1450f4c9d3a75412a475749720340fb000006c2b856eb95a9c39a09ac8d327f79eeb265cbfed75372b37cf9f207274c98305b4528b901a07d000003615e6777675c2be27257086b62debc7997176b61ce9c3973cb8a706f574b720340fb000036a471f5d82b636e2d7ac365975db6b6dca658ba74e985d1526767e7c6ae98e40680f601006c28f39ab626e3b2330ad6c621871cb2fb9aa6a525b739e080037e63e446720340fb00003466d0f49c72ca2937f694d9dc72cb2d3fccf4056b6ef801007e0000cc0b4dcf881123362f9398a5dd6c26705d4747c775764be30700f80100302fb40c93264d3aae4c661e694c6e4e38e18413478e1c39d9d5e10700f80100302fb40c9976367dfaf4850d0ff0fc75a9a59b3b3b3b377175f801007e0000cc0b2dc51e7becf17f8b162d5a5646316edcb8999e83c00f00f00300605e68598e3ffef8b3a74c99922d42a7ba1afc00003f0000e6859625d3d0a2a16c32e06af00300fc000098176808ee25007e0000cc0b3404f712003f0000e6051a827b09801f00605e000db99700f80100302fd010dc4b00fc000098176808ee25007e0000cc0b3404f712003f00c0bc001a722f01f00300605ea021b89700f80100302fd010dc4b00fc000098176808ee25007e0080790134e45e02e00700c0bc4043702f01f00300605ea021b89700f80100302fd010dc4b00fc0000f30268c8bd04007e0080798186e05e02e00700c0bc4043702f01f00300605ea021b89700f80100e6c5bc4043702f01f00300cc0ba021f712003f0000e6051a827b09801f0000f3020dc1bd04c00f0080798186e05e02e0070098174043ee25007e0000cc0b3404f712003f0000e6051a827b09801f0000f3020dc1bd04c00f00302f8086dc4b00fc000098176808ee25007e0000cc0b3404f712003f0000e6051a827b09801f00605e000db99700f80100302fd010dc4b00fc000006c9bc8458df5092346600f0030000009d1d42081d570000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d8fc3f33aa47abeca30e3c0000000049454e44ae426082, '1'); -INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('3', '1', 'source-extra', null, '', null); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('12510', '1', '请教流程.bpmn20.xml', '12509', 0x3c3f786d6c2076657273696f6e3d27312e302720656e636f64696e673d275554462d38273f3e0a3c646566696e6974696f6e7320786d6c6e733d22687474703a2f2f7777772e6f6d672e6f72672f737065632f42504d4e2f32303130303532342f4d4f44454c2220786d6c6e733a7873693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612d696e7374616e63652220786d6c6e733a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220786d6c6e733a61637469766974693d22687474703a2f2f61637469766974692e6f72672f62706d6e2220786d6c6e733a62706d6e64693d22687474703a2f2f7777772e6f6d672e6f72672f737065632f42504d4e2f32303130303532342f44492220786d6c6e733a6f6d6764633d22687474703a2f2f7777772e6f6d672e6f72672f737065632f44442f32303130303532342f44432220786d6c6e733a6f6d6764693d22687474703a2f2f7777772e6f6d672e6f72672f737065632f44442f32303130303532342f44492220747970654c616e67756167653d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d61222065787072657373696f6e4c616e67756167653d22687474703a2f2f7777772e77332e6f72672f313939392f585061746822207461726765744e616d6573706163653d22687474703a2f2f7777772e61637469766974692e6f72672f70726f63657373646566223e0a20203c70726f636573732069643d224c6561766542696c6c22206e616d653d224c6561766542696c6c2220697345786563757461626c653d2274727565223e0a202020203c73746172744576656e742069643d227369642d33414335453536332d453645332d343737372d423434362d30343736443838344331314422206e616d653d22e68f90e4baa4222f3e0a202020203c757365725461736b2069643d227369642d38433845373242432d353330322d343041372d413031372d30344542394641393136444122206e616d653d22e794a8e688b7e68f90e4baa4223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c757365725461736b2069643d227369642d33354144463030362d353743302d343745302d394235422d41463432344530413745344522206e616d653d22e7bb84e995bfe5aea1e689b9223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c656e644576656e742069643d227369642d30353539313044422d314445362d344243342d423532372d32334641373139444532363522206e616d653d22e7bb93e69d9f222f3e0a202020203c73657175656e6365466c6f772069643d227369642d32424346433631362d374438412d343134312d414633462d3841433138454131303044462220736f757263655265663d227369642d33414335453536332d453645332d343737372d423434362d30343736443838344331314422207461726765745265663d227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441222f3e0a202020203c73657175656e6365466c6f772069643d227369642d45464334383546312d414543392d343536392d423430312d44313644453538463637333722206e616d653d22e5aea1e689b92220736f757263655265663d227369642d38433845373242432d353330322d343041372d413031372d30344542394641393136444122207461726765745265663d227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445222f3e0a202020203c73657175656e6365466c6f772069643d227369642d38344242323430352d384530322d344442392d384632392d45394242423033324330443922206e616d653d22e9a9b3e59b9e2220736f757263655265663d227369642d33354144463030362d353743302d343745302d394235422d41463432344530413745344522207461726765745265663d227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b666c61672e657175616c732827e9a9b3e59b9e27297d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d36393830363236352d423636302d344239322d423744392d38444532413535433530373922206e616d653d22e5aea1e689b92220736f757263655265663d227369642d33354144463030362d353743302d343745302d394235422d41463432344530413745344522207461726765745265663d227369642d30353539313044422d314445362d344243342d423532372d323346413731394445323635222f3e0a20203c2f70726f636573733e0a20203c62706d6e64693a42504d4e4469616772616d2069643d2242504d4e4469616772616d5f4c6561766542696c6c223e0a202020203c62706d6e64693a42504d4e506c616e652062706d6e456c656d656e743d224c6561766542696c6c222069643d2242504d4e506c616e655f4c6561766542696c6c223e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d33414335453536332d453645332d343737372d423434362d303437364438383443313144222069643d2242504d4e53686170655f7369642d33414335453536332d453645332d343737372d423434362d303437364438383443313144223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2233302e30222077696474683d2233302e302220783d223134322e352220793d223134322e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441222069643d2242504d4e53686170655f7369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e30222077696474683d223130302e302220783d223231372e352220793d223131372e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445222069643d2242504d4e53686170655f7369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e30222077696474683d223130302e302220783d223336322e352220793d223131362e3939393939393939393939393937222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d30353539313044422d314445362d344243342d423532372d323346413731394445323635222069643d2242504d4e53686170655f7369642d30353539313044422d314445362d344243342d423532372d323346413731394445323635223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2232382e30222077696474683d2232382e302220783d223533332e383931363934363530313935372220793d223134322e3939393939393939393939393937222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d36393830363236352d423636302d344239322d423744392d384445324135354335303739222069643d2242504d4e456467655f7369642d36393830363236352d423636302d344239322d423744392d384445324135354335303739223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223436322e352220793d223135362e3939393939393939393939393937222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223533332e383931363934363530313935372220793d223135362e3939393939393939393939393937222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446222069643d2242504d4e456467655f7369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137322e352220793d223135372e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223231372e352220793d223135372e30222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337222069643d2242504d4e456467655f7369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223331372e352220793d223135372e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223336322e352220793d223135372e30222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439222069643d2242504d4e456467655f7369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223431322e352220793d223139362e3939393939393939393939393937222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223431322e352220793d223234382e3532343239303531313436323134222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223236372e352220793d223234382e3532343239303531313436323134222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223236372e352220793d223139372e30222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a202020203c2f62706d6e64693a42504d4e506c616e653e0a20203c2f62706d6e64693a42504d4e4469616772616d3e0a3c2f646566696e6974696f6e733e, '0'), ('12511', '1', '请教流程.LeaveBill.png', '12509', 0x89504e470d0a1a0a0000000d494844520000023b000001020806000000184b16a3000015b44944415478daeddd0b90d565dd07f02e567677ba5a59515ad94d9bd272eaadacb7d2511b995e9945965814850c184161527c515e8c8a904ca4042f195a8a59ed241a88dc84b80c9a9262a8d08a5c5a6e020aba80c0f3fe7fffd9b31d161616d8cb39ebe733f38ce7ec397b16cff9edfebee7799effffbcea55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af6029a5236a6a6aee5eb060c1aee9d3a7a7071e78c068e3316ddab4347bf6ec0dd9e8ae2201342a8daa8545fdcc993327ad5bb72e6ddfbedd68a7b17efdfaf4e0830f3e9fd5d339feb20168541a550b8aa0ac7e4aa68eb667017a89bf6c001a9546d5826246d0eb573a23aba197fd6503d0a834aa16144b715ebb92aaa1e42f1b8046a551b5430d6ddd5c9b6a1eba353d316d783ee2727ccdebae8600342a8daaec6b68cba6d569f1fd43d33fee1bbcc788afc56d5e7b610740a3d2a8caba86563e71cf5ef55318ab9e98e4b5177600342a8daabc6b68c9cc914dd650dce6b5177600342a8daaac6b68f103c39aaca1b8cd6b2fec0068541a951a32841d008d4aa32ad51a8a4ded4dd550dce6b5177600342a8daaac6b68e9dcb14dd650dce6b5177600342a8daaac6be8b9d58fa5c553afda7b6630fb5adce6b5177600342a8daaac6b28c6330fdfb6570dc5d7bcee6a0840a3d2a8cabf86b66d4b4be7ddb0f7cc60f6b5b8cd6b2fec0068541a55d9d6509c78f2e9b9d737b9141ab73939a5b003a0516954e557435910ae5d3a233d3e654893f55318719fb8aff02cec0068541a5559d4d08142b2f0ac8600342a8daaac6ba83921797fe1592d083b001a954655d23574a8f553186a41d801d0a834aa92ae21430d01685486b063a821008d4aa3524386b003a05169546ac8107600342a8d4a0da921e01569ead4a9ff3d6edcb8eaabafbebab67ffffe3baaaaaa7677edda357dfffbdf4f7dfbf67d79f8f0e1ebc68e1d7bdf8c19334e13760c8d4a0da9a18eafb2b2f2988a8a8a7e592fb83b1b4bb3b125fa4236eab2f14c765b75f6df41713fcf16256df4e8d183860e1dba69c0800169fcf8f169c1820569f5ead5a9aeae2e85f8efba75ebd2dffffef73461c28414f7bbe28a2b5e183972e47061c7d0a8d4901aea78ce3df7dcced978a03ed4a4668e99d9f774f7ec5152468d1a75c2e5975fbe7ad0a041bb23c8ecdcb93335d7a2458bd290214352f6bdebafb9e69a93851d43a352436aa8fc6581a55336261f44c0d9d798d3a54b97e33c9b9442d0b9aa4f9f3ebb264d9a745021a7b12953a6a4789c2cf08c10760c8d4a0da9a1f255515191e594aeeb8b834b656565fae94f7f9a66cc989156ac58915e78e185fc6fff8b2fbe98af00cc9d3b375d7bedb5f97687e2efebd6addb8b66796857e3c68dfbdf7efdfaed7efae9a7534b58be7c798ac71b3d7af41861c71076d4901a2acba0735616525e2e0e39bffbddeff22d0ccdb169d3a6fcfef17dc5a1270b3c177876697343870ebd240b26bb9a5bc0cd158f178f3b6cd8b0cb841d43d8f1daa9a1b29bd169083a975c72493e8b7328e2fb060f1edc38f098e1a1edf4eeddfbd80b2fbc70474bcde8ec6b86271e3ffb453951d831841d430d95befa3d3a0d4b57575d7555c352d5a18a25ae112346345ed23adeb34d9b183060c0d3b147a735c51e9efefdfb2f17760c61c75043a5affe88ab86199dc30d3ac581a7d10ccf1ccf36ad2e0b2095975e7ae9ce1d3b76a4d69615f8ceece75d24ec18c28ea1864a3ae8742edea373a84b57fb5bd22adec363398b569725f6657178795b78ecb1c7d2c5175fbc42d831841d430d95c7ac4e6c2e6e0d77de79a7d91dda469cd9f2a28b2eda7e3887981fac380373ac0597da2f7636fe4ba3d2a8d4901a7a250499fdd56af485c2a6e4987d79eeb9e75aa517c4515a8d0e4befa42bd32afaf6ed3be4a69b6eda95da50bc4bc802d6ff95d2f3503495fa404545c5291a9546a586d4504775a05aadff0888fc3e3ffff9cf5bb51fc479788ac2ce205d995671f1c517cf8f8f80684bb164d6bf7fff874bf197bf684c6efcce47a3d2a8d4901aea4861a7a95aadffacabfcb659b366b56a3f88130f16fd3b26e9cab48af3cf3f7f6d6d6d6d9b869d38ef4e5555d5c612ffe56f78e753f823a05169546a480d75d0b0b347add67fa867feb596de98dc589c69b9e8dfb05257a65574efde7d7be1433ddb4afcbc6eddbabd5c0ebffcc5ef7c342a8daa5c6b28de60b4e6e34743bcfffefb9bbc7dcd9a35e9d1471fcd2f6fd8b0213f84b9f0efdaba75ab1a2abd5add59b8dc52879befef30f4a29f5ba72bd36a45df1e0ef383e4da659453d88906326ddab4266f8f8613d3c7dbb66d3ba8c75dbb766dfe3c6cd9b2a524c28e1a3af078e9a597d2fbdffffe74ebadb7e6d7cf3aebac74d24927358cef7ce73b7bdc7fe4c891e984134ed8e36b2b57ae4c7dfbf64d1b376eccaf3ff5d453e917bff845bedf22c6b7bffded74e49147a6d1a347377c2d6e7ff2c927f3fbc751371ffef087f3cb9ffbdce7d2af7ffdebfcf2bbdffdeef4d7bffe550d95f068eb7ea02bd35a333bdbda6966674799bcd379283e17e6d4534f3da23d1ad515575c913efde94fa7cf7ce633fb1cc71f7f7c43032a1e4f3cf1447ae31bdf98eebdf7de7d3eeeecd9b3d311471c915f1e346850fad8c73e963efef18f378c2e5dbae4b7c55118cf3efb6c8aa5ce187162c8ece94a4b972e6df85abcab8ffb99d929cd1a9a3061423ae69863d2e6cd9bf3eb9ffce427f313c4dd75d75de9ca2baf4c9d3a75dae3fe11543ef5a94f35bcfef1418f6f7ffbdbd329a79c921e7ffcf1fceb53a74e4daf7ffdeb63d9231fd9ff5f1ea2ea9742f2f18637bc214d9e3c39d5d4d4e42128fe0d8b172fce1fe7c61b6fcc1f2742d8f4e9d3f3101deff0cdec9446ad66ffdd6266870ee5bcf3ceab6d8f3d3b3d7af4d850e2bffc0d0daa709ff668543ffce10fd3d7bef6b574c71d77e42302ca8f7ffce3fc723490081ecf3fff7c438039f3cc33d377bffbdd7c1c7df4d1f93bf7b81c5f1f3f7e7c7ebf082a71399a557c4f9f3e7dd257bef295bcf1c588fb7eeb5bdfcaef7bf3cd37e73fe340a3f0d8c24e69d5502c1f4598b9edb6dbe2f3e9f290124166cc9831293e1a26befe918f7c64afb013013b66fe8e3aeaa8f4894f7c22fdfef7bfdfe33e71beac5ebd7aa565cb96a57ffdeb5ff91256d4411c7c10d7e3eb175e78615ab468511ed8dff296b7a4d7bce635e9ab5ffd6a1e76a25ea28946d889e7246a2e4295b0531ab56acf0e1d4e5555d5a4f9f3e7ef6ccbb0137f10b39f3bb5447ff9e7c799438b1b547b869d1ffce007e9b4d34e4b0f3ef8603e5ef7bad7e58d222edf7efbed7b849d98c58930148dacf138eeb8e3f2a613f7bbeebaebf277d9af7ef5abd3b1c71e9b879d68403ffad18ff2113faf1076623620c269bcf3ce026a1e8ee2dd7e7575751a3060407e396e2fcc1a083ba55543975e7a69fe3ac76cdd9bdffce6f4cf7ffe330f3b117463e62f665f0a6127c247bccb2eccecc41267fc7b63192c2ec788db0b4b98f1d8f118ef7bdffbf2e5a8a8c508d8713d96b4e2f6c2bfe30f7ff843fae8473f9a5f8e5a8bfb9e7cf2c979d8899f154b5bebd7af17764aa4561d8d458713e753183b76ec736d19767ef39bdf6c2ab5f329eceb5d7829849d78771c4b081156624493f8e0073f985ffed0873eb447d88925a6685efb7a9c981d2a849d18f107a670dff3cf3f3f6f5af12e3e4634c5ec79d863cf47dce7031ff8405ab56a55feb5689aef7ad7bbe27c49edb67fa704c34ec9d550ecadc97edff2d7fab7bffd6dfeb5081713274e6c588e2a849d98316cce2cde4f7ef293fcfe975f7e791e8c1f7ef8e1f4e73fff39bfed6f7ffb5b7e3dc272dc5ef877c49e9d77bef39df9cc61849d98958c7d401176befce52fe7cba16aa8746ad57976e870e24c99bd7af5dad4966750ce1af873e578a6ccf6083b7176d198dd295c8f77e4f3e6cdcb2fc7fe89e2b0f3a73ffd29bffd97bffce55e2366708ac3ce7df7dd972f2bc4bbeb6840c3870fdf63c4a71bc7ec512c477cf18b5fcc1b626c508d65adf8fe5b6eb9253ef6230f5db1dfa770a48d46555a35f4c8238fe4b33a9ffdec67f33a8afd3b11767af6ec996f208eb05a083b31431761f6eaabafce97aee2f2cc9933f33af9cb5ffe925f8f258d98e52b849d0830115e4e3cf1c486d99ab81e5f2f849d085131e3184b59b1497a5f7b761c8d557a7dc11994e970ba77ef3e73e1c285cfb745d059b468d196ece72d28c7e7a93dc24ee7ce9df33051d8f4198d27de4dc7e5d8e7501c76e21d7c3494f89ec6236661860c19d270b44d7cdf6b5ffbda7ccf46ec0b8a4dcab16f279a5c5c1e387060de08e28f515c8e0677c30d37a4b7bef5adf9d7a399c5725a6c8e8e77faed31bb23ec1c78c4f2511c0515b512af7f84d2083b319b129bd0bffef5af37b967a7703dfb7dcdaf375e668a30f38d6f7c233fea2f668da2a62244c7f578dc42d8899f193552bc8cd538ecc4f735b5995e0db50f9f8d45472ceace7dfaf4a96d8bd99dacb1ae2ad74fb76d8fb0f3f9cf7f3e3fca25a692634440e9dfbf7f7e39424971d88977d01158f6f538d148e6cf9f9f5f8e8da993264d6a58c68a23692ebbecb2346cd8b07c1620666c6216a0f161e971fd8c33cec8f7809c7df6d9ceb35326355458cefad5af7e95eebefbee2697b1f61576962c5992cf20c6517f5ffad297d2f2e5cb1bee3778f0e0f4def7be375fb28aba8b5a8cf013d7dff39ef7e4b737b567273623df73cf3d0d6167c48811f992ad1a2aadbee053cfe988853d2bfb03b8bc35834e7575f5caece7ccdddf9e068d6acf73dac45e9a680acd59c68a7d3611549af3d8853d3bf1bd6f7bdbdbd2f7bef7bd7c99eb0b5ff8421a3b766cbec4511c7662df4e34c1d83f14330531c3130dab70723861a7346b28424d61f3702c65c5ace03bdef18efcdc3a1168e348bd78fd63d6aef03d1164638630c2496c888fa5acd85f134b5571dfc20cccc2850bf30deb71390e298f9f113381713d9640e3f6b81c4ba1b1541a4ba911b8629631427bfcfcd80716212796bf22c0aba1d29285909985303270e0c05d2d75187a6c748f305c3cab53ae7d81f22bea4e59ca5effe4934f6e698da0f3cc33cfbc188f9f859de3cbf5396aeb4615cb4d11768a376f46f38946124d236662622f449c4030f65444038943820ff4b8b1b938de4947d889c387e31d7b34bf37bde94df95131f1d87104579c23254e0a17872cc75136d134633abb70487a34cd687ee79c734ebe3155a32abd1a8aa011cb9b1156e2faf5d75f9fcf0846a3298cb81ef7297c4fecd78a0012e7e1295eba8a3a1b356a5443a069bc37289636fffdef7fef75db1ffff8c73c38c5cfb9e69a6bf2cdc971eea6b82d827504aedebd7be787c9aba1d2eb0bd9585f08255968dd7db88127824efcfd290a3a5bcab92f50862a2a2aba565555ad59bb76edb6960c3af178d9e3ae2df769cab66e54112022d014aec7c91863092b9624621f450494c29131f10e3b4e14d79cc78d2367626fce79e79d974f23c7b950e2b163ffce05175c90cff29c7efae979b38b9f15fb3b627f4ee32617fb7562af46fc3be29dbd4655bacb5886b073387da1b059b97e8667f7a12e69c5f7359ad1b17c45bb25f99e3d7af4a85db264c98696083a3535351be2f1b25f98cbcafdb9d1a8342a35a4865ea97da138f074ebd66d77ccf2c61ba0e61e75159b918bf7e8c4e8087d81324ff259dade3061c284470f67d3f2c48913ff91fd52ac8d5f948ef0bc68541a951a5243afe4be908d4dc56125c24becb58a130fc6ac4d61892b96aae2ccc8b1373096c4e354078dced8bca5a3f405ca3fc9778a430fabaaaa96cd9b376ff1c1849c850b173ed5ab57afc5b1e9ac23adc56a541a951a5243fac27f0e493fc431c71e1d4ab1b8cf89e2eedebdfbea61c386cd9b3973e623ab327575755beb3fd4736b6d6dedca2c10fde3673ffbd99c1e3d7aac88628ed4ded176d76b541a951a5243fca72f142f6d3527e474c4be40071367d4cc8a7b40fd67a63c139f4e5bf894daf8f0b6f84c9338d577473e03a646a551a9213584be001d9a46a551a921350420ec181a951a524300c28e21ec186a0840a332841d430d0168541a951a32841d008d4aa3524386b003a05169546a480d01083b1a9546a586d41080b06368546a480d01083b86b063a821008dca10760c3504a05169546ac8107600342a8d4a0d19c20e8046a551a921350420ec68541a951a524300c28ea151a921350420ec18c28ea18600342a43d831d4108046a551a92143d801d0a8342a3564083b001a9546d5faa64f9feeb52b9d5197d5d0cbfeb20168541a550b9a3d7b76edba75ebbc7e253056af5e3d31aba125feb20168541a550b9a3163c6d9b366cddabc76edda97bc8eed1794a37ea64d9bf66c36cef1970d40a3d2a85a58f6ef3e2b0b6a0fc5cc542cc595e3a8aeae4ee5fa6faf7fde97083a001db451dd79e79da96bd7ae1a15872c0bfbff3366cc98a8a34e9e0d004a4ed6a02645d839f5d4538ff06c70b0524a476edcb8715326f5eeddfb5ecf080025a5a2a2e2942ce8bc1c61e7dc73cf3ddd33c2c15ab972e5eda9debc79f3566775d4d9b3024029859dea083af5e321cf080763ebd6ad27eedab56b772a3262c488953d7bf63ccab30340bbcbc2cd4985599dc2c8c2cf599e199a6bcd9a3535a991cd9b37afa9acacbcceb3034029849d49c541a730bb63ef0ecdb162c58aa1a909d5d5d56b224c7b960068cfa0b3d7ac4e61d873c1816479e6e86ddbb6ed682aececdebd7bfbc081031f139c0168cfb033795f41a77eccf70cb13fab56ad9a9f0ea0a6a66665169c0778b600688fa0d3e4ac8ebd3b34c7dcb9730f9475525d5dddaca8a59e3d7b1ee91903a0adc3cea4fd051d47667120575e7965dffd2d6345d6193264c85d66760028a500943c0b1c8c8913273ed554d259b66cd9b8580eb56707006187b2d5a54b97e3b25053b78fcdc98b2b2b2b173b1a0b006187b2376ad4a8ebb370b3ab38ecdc7cf3cdb75454545cebd90140d8a1ecc532d5942953d6159d50f08eac96963a833200c20e1d46bf7efdbeb969d3a66df51f043acd799a001076e870c68f1f3f79cc983171ca826acf0600c20e1d4e2c5b450dc5a665cf0600c20e6a0800342ad410006854a82100d0a8504300a051a18600d0a8400d01a051a1860040a3420d018046851a02008d0a3504001a156a0800342ad410001a15a82100342ad410006854a82100d0a8504300a051a1860040a3420d01a0516954a82100342a5043006854a82100d0a8504300a051a1860040a3420d018046851a0240a3d2a85043006854a08600d0a8504300a051a1860040a3420d018046851a02008d0a35048046a551a18600d0a8400d0150b68dca300e77f84d0200000000000000000000000000000000000000a0d9fe1fde31e90f44aa0a800000000049454e44ae426082, '1'), ('2', '11', 'source', null, 0x7b227265736f757263654964223a2231222c2270726f70657274696573223a7b2270726f636573735f6964223a224c6561766542696c6c222c226e616d65223a224c6561766542696c6c222c22646f63756d656e746174696f6e223a22222c2270726f636573735f617574686f72223a226d6164652062792070696778222c2270726f636573735f76657273696f6e223a22222c2270726f636573735f6e616d657370616365223a22687474703a2f2f7777772e61637469766974692e6f72672f70726f63657373646566222c22657865637574696f6e6c697374656e657273223a22222c226576656e746c697374656e657273223a22222c227369676e616c646566696e6974696f6e73223a22222c226d657373616765646566696e6974696f6e73223a22227d2c227374656e63696c223a7b226964223a2242504d4e4469616772616d227d2c226368696c64536861706573223a5b7b227265736f757263654964223a227369642d33414335453536332d453645332d343737372d423434362d303437364438383443313144222c2270726f70657274696573223a7b226f766572726964656964223a227374617274222c226e616d65223a22e5bc80e5a78b222c22646f63756d656e746174696f6e223a22222c22657865637574696f6e6c697374656e657273223a22222c22696e69746961746f72223a22222c22666f726d6b6579646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22227d2c227374656e63696c223a7b226964223a2253746172744e6f6e654576656e74227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a37352c2279223a3131352e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a34352c2279223a38352e30303030303030303030303030337d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441222c2270726f70657274696573223a7b226f766572726964656964223a2275736572222c226e616d65223a22e794a8e688b7e68f90e4baa4222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c22657865637574696f6e6c697374656e657273223a6e756c6c2c226d756c7469696e7374616e63655f74797065223a224e6f6e65222c226d756c7469696e7374616e63655f63617264696e616c697479223a22222c226d756c7469696e7374616e63655f636f6c6c656374696f6e223a22222c226d756c7469696e7374616e63655f7661726961626c65223a22222c226d756c7469696e7374616e63655f636f6e646974696f6e223a22222c226973666f72636f6d70656e736174696f6e223a2266616c7365222c22757365727461736b61737369676e6d656e74223a22222c22666f726d6b6579646566696e6974696f6e223a22222c2264756564617465646566696e6974696f6e223a22222c227072696f72697479646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22222c227461736b6c697374656e657273223a7b227461736b4c697374656e657273223a5b7b226576656e74223a22637265617465222c22696d706c656d656e746174696f6e223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c22636c6173734e616d65223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c2265787072657373696f6e223a22222c2264656c656761746545787072657373696f6e223a22227d5d7d7d2c227374656e63696c223a7b226964223a22557365725461736b227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3232302c2279223a3134302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3132302c2279223a36302e30303030303030303030303030337d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445222c2270726f70657274696573223a7b226f766572726964656964223a22706d222c226e616d65223a22e7bb84e995bfe5aea1e689b9222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c22657865637574696f6e6c697374656e657273223a6e756c6c2c226d756c7469696e7374616e63655f74797065223a224e6f6e65222c226d756c7469696e7374616e63655f63617264696e616c697479223a22222c226d756c7469696e7374616e63655f636f6c6c656374696f6e223a22222c226d756c7469696e7374616e63655f7661726961626c65223a22222c226d756c7469696e7374616e63655f636f6e646974696f6e223a22222c226973666f72636f6d70656e736174696f6e223a2266616c7365222c22757365727461736b61737369676e6d656e74223a22222c22666f726d6b6579646566696e6974696f6e223a22222c2264756564617465646566696e6974696f6e223a22222c227072696f72697479646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22222c227461736b6c697374656e657273223a7b227461736b4c697374656e657273223a5b7b226576656e74223a22637265617465222c22696d706c656d656e746174696f6e223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c22636c6173734e616d65223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c2265787072657373696f6e223a22222c2264656c656761746545787072657373696f6e223a22227d5d7d7d2c227374656e63696c223a7b226964223a22557365725461736b227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439227d2c7b227265736f757263654964223a227369642d35344233354332332d303138422d344642412d393643322d374546343544303134444444227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3336352c2279223a3134302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3236352c2279223a36307d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22222c22657865637574696f6e6c697374656e657273223a6e756c6c2c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3131392e31353632352c2279223a3130302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a37352e3630393337352c2279223a3130302e30303030303030303030303030337d7d2c22646f636b657273223a5b7b2278223a31352c2279223a31357d2c7b2278223a35302c2279223a34307d5d2c22746172676574223a7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d7d2c7b227265736f757263654964223a227369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22222c22657865637574696f6e6c697374656e657273223a6e756c6c2c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3236342e31353632352c2279223a3130302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3232302e38343337352c2279223a3130302e30303030303030303030303030337d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34307d2c7b2278223a35302c2279223a34302e3030303030303030303030303031347d5d2c22746172676574223a7b227265736f757263654964223a227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445227d7d2c7b227265736f757263654964223a227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c2273657175656e6365666c6f776f72646572223a22227d2c227374656e63696c223a7b226964223a224578636c757369766547617465776179227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d42304144324538452d363634312d343437322d394431332d463838324441334146394435227d2c7b227265736f757263654964223a227369642d41443932373633302d373545442d344437372d383743462d454430333330373345414336227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3435302c2279223a3132302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3431302c2279223a38302e30303030303030303030303030337d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e7bb8fe79086e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c22657865637574696f6e6c697374656e657273223a22222c226d756c7469696e7374616e63655f74797065223a224e6f6e65222c226d756c7469696e7374616e63655f63617264696e616c697479223a22222c226d756c7469696e7374616e63655f636f6c6c656374696f6e223a22222c226d756c7469696e7374616e63655f7661726961626c65223a22222c226d756c7469696e7374616e63655f636f6e646974696f6e223a22222c226973666f72636f6d70656e736174696f6e223a2266616c7365222c22757365727461736b61737369676e6d656e74223a22222c22666f726d6b6579646566696e6974696f6e223a22222c2264756564617465646566696e6974696f6e223a22222c227072696f72697479646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22222c227461736b6c697374656e657273223a7b227461736b4c697374656e657273223a5b7b226576656e74223a22637265617465222c22696d706c656d656e746174696f6e223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c22636c6173734e616d65223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c2265787072657373696f6e223a22222c2264656c656761746545787072657373696f6e223a22227d5d7d7d2c227374656e63696c223a7b226964223a22557365725461736b227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d30334436303037342d303738332d344333422d384345302d373342343345464335313830227d2c7b227265736f757263654964223a227369642d36314637383245322d304132452d343144322d383042372d383136304139324441433939227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3539352c2279223a3134302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3439352c2279223a36307d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e4babae58a9be68aa5e5a487222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c22657865637574696f6e6c697374656e657273223a22222c226d756c7469696e7374616e63655f74797065223a224e6f6e65222c226d756c7469696e7374616e63655f63617264696e616c697479223a22222c226d756c7469696e7374616e63655f636f6c6c656374696f6e223a22222c226d756c7469696e7374616e63655f7661726961626c65223a22222c226d756c7469696e7374616e63655f636f6e646974696f6e223a22222c226973666f72636f6d70656e736174696f6e223a2266616c7365222c22757365727461736b61737369676e6d656e74223a22222c22666f726d6b6579646566696e6974696f6e223a22222c2264756564617465646566696e6974696f6e223a22222c227072696f72697479646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22222c227461736b6c697374656e657273223a7b227461736b4c697374656e657273223a5b7b226576656e74223a22637265617465222c22696d706c656d656e746174696f6e223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c22636c6173734e616d65223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c2265787072657373696f6e223a22222c2264656c656761746545787072657373696f6e223a22227d5d7d7d2c227374656e63696c223a7b226964223a22557365725461736b227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d42303041324138322d334131352d343934352d423430312d384445344444383732413838227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3734302c2279223a3134302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3634302c2279223a36307d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c22657865637574696f6e6c697374656e657273223a22227d2c227374656e63696c223a7b226964223a22456e644e6f6e654576656e74227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3831332c2279223a3131347d2c2275707065724c656674223a7b2278223a3738352c2279223a38367d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d42303041324138322d334131352d343934352d423430312d384445344444383732413838222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3738342e3337352c2279223a3130307d2c2275707065724c656674223a7b2278223a3734302e3339303632352c2279223a3130307d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34302e3030303030303030303030303031347d2c7b2278223a31342c2279223a31342e3030303030303030303030303030327d5d2c22746172676574223a7b227265736f757263654964223a227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246227d7d2c7b227265736f757263654964223a227369642d41443932373633302d373545442d344437372d383743462d454430333330373345414336222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b646179733c3d31307d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365222c2273686f776469616d6f6e646d61726b6572223a66616c73657d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3639302c2279223a3139322e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3433302e352c2279223a3132302e30383539333735303030303030337d7d2c22646f636b657273223a5b7b2278223a32302e352c2279223a32302e357d2c7b2278223a3433302e352c2279223a3139322e30303030303030303030303030337d2c7b2278223a3639302c2279223a3139322e30303030303030303030303030337d2c7b2278223a35302c2279223a37392e30303030303030303030303030367d5d2c22746172676574223a7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442227d7d2c7b227265736f757263654964223a227369642d42304144324538452d363634312d343437322d394431332d463838324441334146394435222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b646179733e31307d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3439342e38303037393037383433383831342c2279223a3130302e34313336303139373934303738347d2c2275707065724c656674223a7b2278223a3435302e32383531343637313536313138362c2279223a3130302e32313932313035323035393232317d7d2c22646f636b657273223a5b7b2278223a32302e352c2279223a32302e357d2c7b2278223a35302c2279223a34302e3030303030303030303030303031347d5d2c22746172676574223a7b227265736f757263654964223a227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743227d7d2c7b227265736f757263654964223a227369642d36314637383245322d304132452d343144322d383042372d383136304139324441433939222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e9a9b3e59b9e222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b666c61672e657175616c732827e9a9b3e59b9e27297d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365222c2273686f776469616d6f6e646d61726b6572223a66616c73657d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3534352c2279223a36302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3137302c2279223a32397d7d2c22646f636b657273223a5b7b2278223a35302c2279223a317d2c7b2278223a3534352c2279223a32397d2c7b2278223a3137302c2279223a32397d2c7b2278223a35302c2279223a317d5d2c22746172676574223a7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d7d2c7b227265736f757263654964223a227369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e9a9b3e59b9e222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b666c61672e657175616c732827e9a9b3e59b9e27297d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365222c2273686f776469616d6f6e646d61726b6572223a66616c73657d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3331352c2279223a3139312e35323432393035313134363231377d2c2275707065724c656674223a7b2278223a3137302c2279223a3134302e333236383433353739313433397d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34302e3030303030303030303030303031347d2c7b2278223a3331352c2279223a3139312e35323432393035313134363231377d2c7b2278223a3137302c2279223a3139312e35323432393035313134363231377d2c7b2278223a35302c2279223a37397d5d2c22746172676574223a7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d7d2c7b227265736f757263654964223a227369642d35344233354332332d303138422d344642412d393643322d374546343544303134444444222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b666c61672e657175616c732827e5aea1e689b927297d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3430392e36343834343638373030303735352c2279223a3130302e34303937333335333632333338337d2c2275707065724c656674223a7b2278223a3336352e36323838393638373939393234352c2279223a3130302e32313931373237313337363632337d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34302e3030303030303030303030303031347d2c7b2278223a32302e352c2279223a32302e357d5d2c22746172676574223a7b227265736f757263654964223a227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030227d7d2c7b227265736f757263654964223a227369642d30334436303037342d303738332d344333422d384345302d373342343345464335313830222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b666c61672e657175616c732827e5aea1e689b927297d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3633392e31353632352c2279223a3130302e30303030303030303030303030317d2c2275707065724c656674223a7b2278223a3539352e38343337352c2279223a3130302e30303030303030303030303030317d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34302e3030303030303030303030303031347d2c7b2278223a35302c2279223a34302e3030303030303030303030303031347d5d2c22746172676574223a7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442227d7d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a313230302c2279223a313035307d2c2275707065724c656674223a7b2278223a302c2279223a307d7d2c227374656e63696c736574223a7b2275726c223a227374656e63696c736574732f62706d6e322e302f62706d6e322e302e6a736f6e222c226e616d657370616365223a22687474703a2f2f62336d6e2e6f72672f7374656e63696c7365742f62706d6e322e3023227d2c227373657874656e73696f6e73223a5b5d7d, null), ('3', '1', 'source-extra', null, '', null), ('30102', '1', '请假流程.bpmn20.xml', '30101', 0x3c3f786d6c2076657273696f6e3d27312e302720656e636f64696e673d275554462d38273f3e0a3c646566696e6974696f6e7320786d6c6e733d22687474703a2f2f7777772e6f6d672e6f72672f737065632f42504d4e2f32303130303532342f4d4f44454c2220786d6c6e733a7873693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612d696e7374616e63652220786d6c6e733a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220786d6c6e733a61637469766974693d22687474703a2f2f61637469766974692e6f72672f62706d6e2220786d6c6e733a62706d6e64693d22687474703a2f2f7777772e6f6d672e6f72672f737065632f42504d4e2f32303130303532342f44492220786d6c6e733a6f6d6764633d22687474703a2f2f7777772e6f6d672e6f72672f737065632f44442f32303130303532342f44432220786d6c6e733a6f6d6764693d22687474703a2f2f7777772e6f6d672e6f72672f737065632f44442f32303130303532342f44492220747970654c616e67756167653d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d61222065787072657373696f6e4c616e67756167653d22687474703a2f2f7777772e77332e6f72672f313939392f585061746822207461726765744e616d6573706163653d22687474703a2f2f7777772e61637469766974692e6f72672f70726f63657373646566223e0a20203c70726f636573732069643d224c6561766542696c6c22206e616d653d224c6561766542696c6c2220697345786563757461626c653d2274727565223e0a202020203c73746172744576656e742069643d22737461727422206e616d653d22e5bc80e5a78b222f3e0a202020203c757365725461736b2069643d227573657222206e616d653d22e794a8e688b7e68f90e4baa4223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c757365725461736b2069643d22706d22206e616d653d22e7bb84e995bfe5aea1e689b9223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c73657175656e6365466c6f772069643d227369642d32424346433631362d374438412d343134312d414633462d3841433138454131303044462220736f757263655265663d22737461727422207461726765745265663d2275736572222f3e0a202020203c73657175656e6365466c6f772069643d227369642d45464334383546312d414543392d343536392d423430312d44313644453538463637333722206e616d653d22e5aea1e689b92220736f757263655265663d227573657222207461726765745265663d22706d222f3e0a202020203c6578636c7573697665476174657761792069643d227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030222f3e0a202020203c757365725461736b2069643d227369642d44313931444237442d313042382d344145372d383238342d45303933313238373233374322206e616d653d22e7bb8fe79086e5aea1e689b9223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c757365725461736b2069643d227369642d41313341394141382d434338462d344233332d383136362d45463737353746364142444222206e616d653d22e4babae58a9be68aa5e5a487223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c656e644576656e742069643d227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246222f3e0a202020203c73657175656e6365466c6f772069643d227369642d42303041324138322d334131352d343934352d423430312d38444534444438373241383822206e616d653d22e5aea1e689b92220736f757263655265663d227369642d41313341394141382d434338462d344233332d383136362d45463737353746364142444222207461726765745265663d227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246222f3e0a202020203c73657175656e6365466c6f772069643d227369642d41443932373633302d373545442d344437372d383743462d4544303333303733454143362220736f757263655265663d227369642d37443342413043432d304531342d343031412d393937422d45354235373739384436303022207461726765745265663d227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b646179733c3d31307d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d42304144324538452d363634312d343437322d394431332d4638383244413341463944352220736f757263655265663d227369642d37443342413043432d304531342d343031412d393937422d45354235373739384436303022207461726765745265663d227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b646179733e31307d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d36314637383245322d304132452d343144322d383042372d38313630413932444143393922206e616d653d22e9a9b3e59b9e2220736f757263655265663d227369642d44313931444237442d313042382d344145372d383238342d45303933313238373233374322207461726765745265663d2275736572223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b666c61672e657175616c732827e9a9b3e59b9e27297d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d38344242323430352d384530322d344442392d384632392d45394242423033324330443922206e616d653d22e9a9b3e59b9e2220736f757263655265663d22706d22207461726765745265663d2275736572223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b666c61672e657175616c732827e9a9b3e59b9e27297d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d35344233354332332d303138422d344642412d393643322d37454634354430313444444422206e616d653d22e5aea1e689b92220736f757263655265663d22706d22207461726765745265663d227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b666c61672e657175616c732827e5aea1e689b927297d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d30334436303037342d303738332d344333422d384345302d37334234334546433531383022206e616d653d22e5aea1e689b92220736f757263655265663d227369642d44313931444237442d313042382d344145372d383238342d45303933313238373233374322207461726765745265663d227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b666c61672e657175616c732827e5aea1e689b927297d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a20203c2f70726f636573733e0a20203c62706d6e64693a42504d4e4469616772616d2069643d2242504d4e4469616772616d5f4c6561766542696c6c223e0a202020203c62706d6e64693a42504d4e506c616e652062706d6e456c656d656e743d224c6561766542696c6c222069643d2242504d4e506c616e655f4c6561766542696c6c223e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227374617274222069643d2242504d4e53686170655f7374617274223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2233302e30222077696474683d2233302e302220783d2234352e302220793d2238352e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d2275736572222069643d2242504d4e53686170655f75736572223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e30222077696474683d223130302e302220783d223132302e302220793d2236302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d22706d222069643d2242504d4e53686170655f706d223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e3030303030303030303030303033222077696474683d223130302e302220783d223236352e302220793d2236302e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030222069643d2242504d4e53686170655f7369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2234302e30222077696474683d2234302e302220783d223431302e302220793d2238302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743222069643d2242504d4e53686170655f7369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e3030303030303030303030303033222077696474683d223130302e302220783d223439352e302220793d2236302e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442222069643d2242504d4e53686170655f7369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e3030303030303030303030303033222077696474683d223130302e302220783d223634302e302220793d2236302e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246222069643d2242504d4e53686170655f7369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2232382e30222077696474683d2232382e302220783d223738352e302220793d2238362e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d42303041324138322d334131352d343934352d423430312d384445344444383732413838222069643d2242504d4e456467655f7369642d42303041324138322d334131352d343934352d423430312d384445344444383732413838223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223734302e302220793d223130302e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223738352e302220793d223130302e30222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446222069643d2242504d4e456467655f7369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446223e0a20202020202020203c6f6d6764693a776179706f696e7420783d2237352e302220793d223130302e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223132302e302220793d223130302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d35344233354332332d303138422d344642412d393643322d374546343544303134444444222069643d2242504d4e456467655f7369642d35344233354332332d303138422d344642412d393643322d374546343544303134444444223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223336352e302220793d223130302e3231363435303231363435303233222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223431302e343133303433343738323630392220793d223130302e34313330343334373832363039222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337222069643d2242504d4e456467655f7369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223232302e302220793d223130302e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223236352e302220793d223130302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d42304144324538452d363634312d343437322d394431332d463838324441334146394435222069643d2242504d4e456467655f7369642d42304144324538452d363634312d343437322d394431332d463838324441334146394435223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223434392e353833333333333333333333332220793d223130302e3431363636363636363636363639222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223439352e302220793d223130302e3231383334303631313335333734222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439222069643d2242504d4e456467655f7369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223331352e302220793d223134302e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223331352e302220793d223139312e3532343239303531313436323137222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137302e302220793d223139312e3532343239303531313436323137222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137302e302220793d223134302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d41443932373633302d373545442d344437372d383743462d454430333330373345414336222069643d2242504d4e456467655f7369642d41443932373633302d373545442d344437372d383743462d454430333330373345414336223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223433302e352220793d223131392e3530303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223433302e352220793d223139322e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223639302e302220793d223139322e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223639302e302220793d223134302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d36314637383245322d304132452d343144322d383042372d383136304139324441433939222069643d2242504d4e456467655f7369642d36314637383245322d304132452d343144322d383042372d383136304139324441433939223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223534352e302220793d2236302e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223534352e302220793d2232392e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137302e302220793d2232392e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137302e302220793d2236302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d30334436303037342d303738332d344333422d384345302d373342343345464335313830222069643d2242504d4e456467655f7369642d30334436303037342d303738332d344333422d384345302d373342343345464335313830223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223539352e302220793d223130302e3030303030303030303030303031222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223634302e302220793d223130302e3030303030303030303030303031222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a202020203c2f62706d6e64693a42504d4e506c616e653e0a20203c2f62706d6e64693a42504d4e4469616772616d3e0a3c2f646566696e6974696f6e733e, '0'), ('30103', '1', '请假流程.LeaveBill.png', '30101', 0x89504e470d0a1a0a0000000d4948445200000337000000ca08060000009835be80000023604944415478daeddd09985575fdc7712a2bdb7ddaf7acac6cdf6cdfecdf4645650b210ce944069a6692fa64e49666695614564a69659652466468a2e0ae685aa6a49962682c8a58824980299cfff99c87c3731967608665e6de3baff7f37c1fcebdf7cc9de19ccfeff3fb7d7fdb19320400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da855d77ddb5104208d17ea18603000ccae4c6550000de0e00800a1000c0db010050010200783b00002a4000006f070040050800bc1d000015200080b70300a0020400f076000054800000de0e00800a1000783b00002a4000006f070040050800e0ed0000a8000100bc1d0000152000f076000054800000de0e00800a10003070dc71c71d1f9f34695251fafbf6ae06004072030068498aa2d8f6aebbee5a5a528c1d3bf64c57040020b90100b4240b162c38a558cbecd9b3178d1c39721757050020b90100b414cb972f7fe5ead5abd7140d1c75d4510b3a3b3bb773750000921b0040cbb078f1e2794517962d5bb6b8a3a3e37bae0e00407203006809e6cf9f7f48d103d3a64d5b5c7afd4eae1200a0dd1299e94966361257b95200d03a94f9cb5357ad5af5bf9e929b356bd6dc3b7efcf8393befbcf336ae1600a09d929b9dcab86f43c9cd88112386b95200d03a2c5cb8f0f26223cc9b376fc1c89123f773b50000ed96e09cbd81e4e6723d7b00d05a5c76d9651bcb6d8a952b575e189fefececdcd6150300b45372b3534fc98d2d4301a0f538f4d043f7ded0b4b4e43613264cf895911b0040bb2638ddadbdb9caa80d00b42653a64cb9b1a7cce6e69b6f3ec1c83c00a09d939b07acbdb1d606005a97e1c387ef5026312bbbd94ce0ba8e8e8eebec960600686bca64669a511b00681f8e3df6d8e3ca646675637273e289279e54fafd44570700d0eec9cd1b1bd6da0c754500a0b54927d58c193396343cc0f3d4d2e3e77676766ee7ea0000da9e7aed8d511b00680ff6d9679fff5bba74e9aa328ab163c7ceb2510c0060302537d5ce69ae0400b40f93274f3e7bd2a449594b39cdd50000f48aa228b699376fdee9575c71c5eaf3ce3baf983973664b46929b56fddb67cd9a555c7cf1c5ff2a63340d89c1a8212897ddc559679d5579fbd4a953954b1ae2ed007a478ceb924b2e29962c5952dc7befbd6280e2ce3bef2c2ebae8a2bb4b23fb040d89c1a62128973dc5a2458b944b1ae2edbc1de83de991615c4d6360f7ce9c39f3061a12834d43502e954b1a12bc1dd82264a89971344f94e6751f0d89c1a6212897ca250d09de0e6c1132a79369349579153424069b86a05c2a973424783bd0afe6b57cd9edc5bcab7e5a5c3feb882a729cf7180ef3a2211a827229783b0dd110d032e675cfd245c575e71c525c7bd681eb45decb674c470548433404e552f0761aa221a025cc6bc1f5bf7f8071d5b1f0fae94c470548433404e552f0761aa221a035cceb860b8ee9d1bcf219d35101d2100d41b914bc9d8668086809f3ba6ee6e13d9a573e633a2a401aa221289782b7d3100d01cc4ba80069480508e552b9a421c1db81fe32afec7ed29379e533a6a302a4211a827229783b0dd110d012e635f7b2eff7685ef98ce9a800698886a05c0ade4e433404b48479fd7bd19ce2ba730f7be09073f95e3e633a2a401aa221289782b7d3100d012d615e895bfef4f3079857de6338cc8b866808caa5e0ed34444340eb98d7aa55c5dcd9c73f70c8b97c2f9f311d15200dd110944bc1db69888680a637af3c61f8a6cb8eeb714e6d3ef3146215200dd110944bc1db69888680e635af55ab8adbe79e5ffc75c6841e8dab8e9c9373f5d2a800698886a05c0ade4e4334043495796dac37462f0df3a2211a827229783b0dd110d012e6d59bde980df5d2302115200dd1d000b31d6f572e954b1aa221400558c5a61a571d4c480548433434800c2da358fb2f6f572e954b1aa22160b057808279d1100db528ef2e63691913d7fe3b8cb70be59286680850010ae6454334d4aa89cdb086119c3b076b82a35c2a9734444380e446302f1aa2a1f6486c36f63e6f17ca250dd110a00214cc8b8668a8e918ba9104a6fe7c286f17ca250dd110da96a228b69d3367ceb8934f3ef9a2a38f3efaee7df7ddf7bececece62d75d772d468f1ebd66afbdf6baf72b5ff9cabc638e39e61765bc48052898170dd150d326361b4b5c06dd088e72a95cd2100db5021d1d1dcf1c3162c43e65fbfbf432e696714fdae265ac2ce396f2b369e5bf07e43cd9cb06929aa953a7fefcc8238fbc6fbffdf62b264f9e5c5c71c515c5a2458b8a952b571621ff2e59b2a4f8f39fff5c94c94ff1852f7c61cdf8f1e36f1d3b76ec1e2a40c1bc6888869a8277f77144a6afe7f376c1dbdd3b1ada4a8c1c39729732669671efda64a637714179fe68d94c03651233e66b5ffbdaaa030f3cb04a5ceebffffea2b75c73cd35c541071d74ffb871e36e183e7cf80e2a40c1bc688886063cb119b6093f77cf604870944be5928668a819291394edcb0465461f129aeee292766a8b6fea68cd36679c71c6f97beeb967317dfaf43e25355d993163463166cc9815ed328ac3bc98170dd1d020496cb6d4cf2b9782b70b1ada04468c18b1eba851a3ee6a4c543a3a3a8a6f7ce31bc5f9e79f5fcc9f3fbff8cf7ffe53b5b7fffbdfff56b3aa2ebbecb262e2c489c5a73ef5a9ae09ce3d8376142789cd85175e78e5e73ffff9e2a69b6e2ab604b7de7a6b51264a2bf6d8638fbd55804205484334d46f6c6cf380fefe1ee552f0764143bd4b6c8695c9c8fd8d49cd2f7ef18b6a19486f58ba7469757e7eae31c929bf738f21838d8cd824b1e9edc5eb2df9beb163c7b67cd6c8bc98170dd1508b25365b6a4a595b8fe02897ca250dd150338dd83426365ffce217ab519a4d213f97e5255d129cc13382933536998ab6a5466cba1bc1d96db7dd969617754715a050010a1ada6a74dd0ce04165ecbef6dfbed0f5e7da769301e552b9a4211a6a06b2c6a6712ada61871db66eead9a692296b471d7554d7296a3b0e6977b22bda11471c716fd6d86c4dce3aebac151d1d1d97ab00850a50d0d0564d6c8635242827c5e6d7fedbdb04a7a79f6bcb0447b9542e6988869a8132b199d53862b3b9894d6382d36504e792b64f6ea64d9bf6cbfca7fff7bfff155b9bcf7dee738b5b75488c79312f1aa2a1164a6c86ac1d79291aa237094e636253c76e0d9fb7dd1a1ce552b9a4211a1a68b2dd73e31a9b4d9d8ab6a1296a8d6b70da7a7a5a466df21c9b6cf7dc1f5c7bedb5f7b6eae80df3625e3434b834b4f3ce3b6fd322d2ea29e1e82e51d95082d3ddf92776737e5badc1512e954b1ad23e6882e466669d78643380adc169a79d3638466fe6cc99332e9b086cce96cf7d65cc98318b33afb0990455c65b9917f3a2211a5adbe9f3d4850b175e9e6d350f3ef8e0fdfba331d55b0d6d20b119da8784a5bb04a7b789cd905699a2a65c2a97344443ade0431d1d1dcfac3711c8e8cabffffdefadd2fece2e6a5db689de7e483b72f2c9275f74e2892716fdc9c48913af292fe801cd720d1a86e8668e1831e28dcc8b79d1d0e0d5d0fcf9f30f59b972e57db55fad5ab5ea7f53a64c99bbf7de7bbfb41934b48909c6c6129cbe26368dbfffce661dc1512e954b1aa2a156f0a1f2fd7deaf3bef9cd6f6eed3678637273c09076e4e8a38fbefb8a2baee8d7e466f6ecd9b79617747ab309af21ceee2ecb665ecc8b86da5743cb972f7fe51d77dc716b4fbe75cb2db7ac2cfdf284cecece6d0752439b3135aca704e7c19b98d86c6c4a9c7229064db9a421ed83cdd150f9dee9f5e7175e78e1566d8367e4b3e16f993ea41dd977df7defbbfdf6dbfb35b959bc78f192f2822e6862e1adcbb21b05c8bc98170db59f86b2ee70c18205a7ac5ebd7acdc6bc6bcd9a35ab67cc98f1aff1e3c77f68a034b48989cd86129c1b3723b1d9dcbf47b9146d512e6948fb60733454be9e5bbfbfa53712e8caa2458b1aff8e0543da91cecece62e5ca95fd9adce4f795177465b30baf31cbce5022f3625e34d45e71e5955716cb962dbb7b13e62daf3afef8e3cf2b2ba627f6b786b6c048497709cee624367d9d22a75c8ab62b9734a47db0391a2a6345fd7a4b6dffbca16da11b7ef7cab64c6ef29f1b087a71b39b2e5ac9bc962f5f5ecc9a35abc7cffff5af7f554393ab56adead3f7de71c71dd575b8e79e7b06fcff4843bd8f254b966cd5ef4f4fd339e79cd3e3e78b172f2efef297bfacd35eccbbfebba2d581b826e9bd9a346952b5c072531665e667fb5b3f1ffbd8c7ea2464e2665aff83bb19b1b971edfb9bc344e5b2f79145c3ca65eb97cb66681fe47ee57ea7e1bab173fff4a73f55d1d3e7f98e193366f4499fb9f6a79c724a919940cdd0066a451faaa3bfdbe06d99dcecbefbee6bfa7be466c58a158b5b64e4e6aa1123460cab77641908f3faca57be52bcf4a52f2d5ef6b297751b3beeb86371d75d773de0e7aebffefae2118f784471e6996776fbbd175f7c71b1cd36db54c7071c7040f18217bca078e10b5fb82e860f1fbeaef2fde73fff59195622869786d0dcb973d7bd1743ddda95740bf7cc0cb886caf2563cfde94f2f7efad39f56af870d1b56ecb4d34eebe2bdef7def7ae71f73cc31c52b5ef18af5de5bb06041b1f7de7bafd3da8d37de587ce73bdfa9162626def39ef714db6ebb6df1ed6f7f7bdd7bf9fcef7fff7b757eb69f7cce739e531dbfea55af2a7ef8c31f56c74f7ad2938a3ffce10f035601feee77bf2bc68e1d7be6ecd9b36f5fb3664dafb68c5cb66cd9a9e3c68dbba0bcafd3b6e44e33bdd5d0908def8eb63923377d79d0672b8fdc0c78b94cbdfbcc673eb338f9e493abd77beeb9e77a49ecaf7ffdebeafdef7ffffbc5d0a1438b0f7ce003c5bbdef5ae6aa7a394cf57bef295eb227544caa4723970e572a0939b4b2fbdb42ac3d1c0c6cefdf0873f5c7cfce31feff1f324b9f9aebffded6fc557bffad507e8ed231ff9c87ae797d7bef8e0073f58b529f6da6baf62bffdf62bb20befd9679f6de4a6971a2a8fef3172b3052905786f7fafb9b9edb6db6e6cf235375d1b130336a7f6739ffb5cf1f6b7bfbd38f5d453ab88797ced6b5fab8e5361c580eebefbee75094b0ce6431ffa50154f7dea53abc66b8ef3fee4c993abf39298e4f8610f7b58f533658550bce52d6f290e3df4d02a72eebbdffdeeeadceca4d7432368bda8bf9b79359f86d2784a232a15505ebff8c52fae9e7cfcab5ffdaabadfdb6fbffd7ae7a701f49297bc645d72fb8d6f7ca378dce31e57bcf18d6f2cfefad7bf56ef9f7beeb9957e468e1c5945f97fad92a6b5f388ab78f8c31f5e556ef3e6cdabb49abfe1baebaeabbee7473ffa51f53d49bace3befbc6a44b0373d8e5b4b4379785a59892f58ba74e9920dccebbfaed4f98f33373ae70f94861a12897bb6d29a9b4d49705a65cd4dd394cbdffef6b7c5e31ffff86ac424af8f3df6d8e2f0c30f2fbef4a52f55652b0dc4bc7fc9259714fbeebb6ff194a73ca52a37f1e6fdf7dfbff8c217be5095a5b3ce3aabba6f37dd7493723980e572a0939bdffffef7950e6a8f6e8cccd0c8fdcefdcca85c34116de43891f7eb119724bed3a74fafbe2bf57f92ee24c9990992f8ec673f5bbcf39def5cf7dd4982d3c9fae0073fb84a7a7ef2939f14a3468daada2a79568be4a6771ab2e6660b73c82187ccedefddd2ce39e79c3f34e96e6997c71c7bda3b7f20cc2bc6f2bef7bdafb8e8a28baa78e8431f5a251239ce1070637293519a184a86e5bbc60e3bec508d02e5bcef7def7b5585f6a0073da878fef39f5f2537a9d852a926f2fbeae4260de2dafc76db6db72a194a8377dab46955e59be37c5e379c9957736928d34e92bcfcfce73f2ff6d9679faaf193c4259a486328ef3ff7b9cf7d4072939ee04c5bdc6ebbed8a17bde845c52f7ff9cbf5ce9933674ef199cf7ca6b8f9e69b8b7ffce31fd5d49768310f03ceebbc9f4af09a6baea974f7e8473fbaaafcdef6b6b7555a8b86d33b954654ae4912ea245103a9a1e1c3873fbaa3a3e37b53a74e5db27af5ea158dcb04cbffcf09e567d79515d2c4cececeed0652439b3152d2d376cfdded96d69704a715764b6baa7219edbfe635af29befef5af571e9f44a71e654dc333e5af9e22568f6464743dc76968bee10d6f285ef7bad755e5e7939ffc6475cf52e694cbc1d53ee8eadbb9d7dd4d43cc88fbc63a28dff4a63755e71e7ffcf1c5b39ef5aceabd24d499c5317af4e86a06473ac61ef398c714071d745075ee2db7dc52b521f2bbd38e7cdad39e5675c63ef1894fdce07448ed83076ac86e695b98638f3df6c4fe7ececd61871d7656933de766433da4036a5ea988d26b9ee42411c389f1e4f8d9cf7ef67ac94da68ca557aebbef89e1d4c94d22e2aecf1d33664c35852d0dd9c4a31ef5a8a2bc16eb4d6bca39cf78c6338a850b1756ef65b83a069621e8815a7fd364e6d5941a4a0f6f92d84c35cc7dcd7d4b7293dedddcf368a04e6ed2a8492f6d3d7293debefcbdb9ff394ee4f3fa7ee7bbf31da9d0328d255acc68615e672a4c3eafff8e4cb179def39e571da7119573ebc6597e57a6c4dc79e79d4da1a1f25eee347efcf839f3e6cd5b54fedf2f9a3061c2af5229e5fd66d0d0268e986cec3936bd7dd06757724d9af939374d592e33d52cd7383ddef1f7f4b6a71e4e52135f7fe4231f597cf4a31fad92928cdc64c4e5094f784271dc71c755c94d466d324df4f5af7f7dd5d1542737cae5e06a1f34463aaf72ff32edb0bb2990d1589df4e69ea73d90e344b4f48e77bc63bdf53bf9ae8ce294d7bcd2dcf9e79f5ffce0073f287efce31f17575d75d5ba755a19e1fbd6b7be55bcf5ad6fad92e55d76d9a5d26fa6cd2709facd6f7e538d44681f6c58439e73b38539f8e0839f5f168ad5f7df7f7f7fe5362b478d1af58f567c2aea409857e657a767af7e9d46e9ecd9b3abe3985563723375ead4eaf3ef7ef7bb0f88f4ae34263799ca901ebb5464999a74c41147ac1765025a8d0ec50c5381a6011c034c059c9f3fe9a493aa0a3649567a14eb45a983d5bc9a5543997f9d690249627ef6b39f55efa5d13265ca9475d3cbeae426d31d7b330531bdcd39ffcb5ffe7235ca9785a9e979ce6799f79dd719f9cbe7f5df91b9fd699c456b6944653a4cd6f1a411f5e637bf79c016a1f6a4a15442658372bfb5d379f6eb8f27a16f061b1b39e9ed033afb9ae0d453e37669f57ab0bfcb657ac1d3439e6423be9d4ea3f48aa77ca493210dce2434694c5e70c10555a293296c694466dd4d465a3295381d5dbbefbefbba6969cae5e06a1f34262f2f7ff9cbab4852b1a17333cb22333c1ad754659af2fbdffffef546fca39b4c3fcbc84d34924eb2d41d49c03383a4de40206d8e2435392f5a4e12948426f728c97512edbcaf7db0613a3a3a9e595eb3fb72ddcae36a56ccd620f76df4e8d16b1a929bed87b42ba5b06f4e0f513f4d49fb4579312f5101f62ed20b92e4a19e2f9d842415578e3365a031b94923b6ee39e91a1965993061c2ba05e3f9b9873ce421d5b4a4acebc9a602a92c330529c7e9adc9ff370521c7999696ca3843d2793f6697290c19ee4e637720466f24371b8fabafbeba1ab549a5972439eb6f5241650bf8f4f065e4ad4e6e32bd308dac238f3cb2d2418ed3b08ae6ce38e38cea757ae0a285ba11151da4519445a675af6f5ee7fdba1195a4299569b4994d0dba9bdbdfac53179a3ca9e9cd084e6f139bbe2638f5efdba51deac081e87448197bf5ab5f5d753a250989a72789a9238bbee3bf5da7a5252149cf6ba6a3a5a199ceab94e5344895cbc199dc642388d4e71951493211bfeee9dc242439a77107cdd403f50603d142be2bbac9c84bda0799969691994c694fd4a33c19d5cfb6dd39b79eda98e324c6799de34c571bec333b7a4b9e7b53271d59afb435887f342436970c69673ef399cf0cdf7ffffdefeb87d19ba5a3468dbababc81a35580bd8bcccbce1cec0c5326623ad98524c749421a939b54564950bafb9eacc7b9fcf2cbabe3f4f065c1603d2d2d0b0b636259cc9a86704664d210eeba4d745e67c79ef4e074dd2d857935a78632ed24bb2125114e729b11b62437a97cd2d3964aaaa73537f5eb546c79dd757a4a1a49e9d9cb22d38c0a458b1911cceb7c6fdd88caef4c02dc38fda56b232a3fd7d3ce7e34d4a7119cae53c4761fd2f7e7d87497e0ecd6879122debe9188172759c948cad8b163aba96719153feaa8a3aaeb7dc209275453d7ea4ea32437995a961ef6f87e929f2446792fc7f1e3ba11a95c0eaee4269d4d1921c92c8f7a87d5dcbfac87e97a6e3aa832bd3ceb671bdfffc4273e51add5aab70f4f92d4382d2d7540929e68252343999a56ffecb5d75e5b9d9b191f6947e4f8e0830fae3ac9d25648079bf641af939b5deac423a3375b7a63817c5fd9065fd3f010d1d143da9d71e3c6cd4983776b92f53dc9145ba8377440cd2ba6951e96ec82d29b6969592793c4a437df5dafb9c9cf3ef6b18fadb61e8d29bef6b5afad2ad5f404362637e9a149a337f3c3d358ce084e169a362e7a655ecd5b01a6a738535c4e3ffdf41ea7a57597dcdc70c30d95ceb236208b986fbdf5d675e71d78e081d582d334d09254d7d318f2fac94f7e72f5794f73fba39de8ba6e44a55197f56534b445129cc64d061a1395be3ca0b3a79f6bbaed9e5bb95ca6019a519bfa9964694ce69a679a517d4ea6f864ed4ba6b0a5173df57446dc3ffde94f57efe738494cdd98552e078f86d246c87dcb0641b7dd76dbbab593994a9ea9e85963599f9b5d52d3a995fabb3eb78e24ca49487a5a7393e426a38849a2b276b31ebd6f4c6ed27ec8b9398ec6f27d929bbe53b6912fa8938f74666ca96da1b35e76fffdf7bfbf71d4a655dbe27dbda0db8f193366457af5b70673e6cc39a3fc1db79799e28e2ac0de45a68f25b9699cf79cb9ae590b93866a465a32ad20469461e88cea64b79c8d7d6f0c2f9556929bf4d6a4d19a679d6411602acb7c7776d3ca76a131b72c544c0f618caddeda31bd8c99039ec428bd3e99d3cdbc9a4f434962ea45c5999a96298db96fb9df199dcb36e1b987997258ff4c7a813355258d9ee82d53d3320f3f535c726edd939be908d93d2fc7d94a36bfa39e46138de6f31c67dd56e6f4a7b28db63245325acdef4f2f621a4f993693d1481ada22749da2f6a0b5232f7ddddeb9ebcf6deef37594cb866944495652669248643d634664328a93f7729c85ff19b189e7c6afb37d6b368dc98e96e921cfb36fb2e631c7792fd38d94cbc1a3a1fcbe6c12917b95fbdcf541a8e9a04a67643414dda47ecfbdae938db419b2435a92de68a4ee444dfb20f57fdecbdaaf242c999296ef4b12945900a91b522fd423803937334cb2f1408ea3cdbccef1861e164a43ddb7c5cbb8b34e42b2fe7973139c2436a58734aeb3b9a795dbe27da6ccce3bc68d1bf7dfccc5dc922c5cb8f0d251a346fdb3d587c0fadbbc92302481695c34982969e9854f4f4a1aa8f5e2ee5466c9f27bfb7c85ccf74ecf5f863eb32d68be3b3d807becb147358a1373ca7350f2bbd2db93f5357505d9b8bd647a0cf377743557e6d51c1a4a03266bb1929ce475765b4ac3293d6b75e475cea97f26669a864dee7fe354b424d1791647571dd46b7b329fbf6b8f60ddf39cca30bf270ba2b368390baaeb5da39260a55157af19a0a1ad92e06c8911a1a6dd15add5ca657c358dcbba5cfef18f7fac9e6593edf5ebc8287cbd45741d19b5c9fb8de7d5e7669317e572f06828237559a7d5d34e64a99f539f67b43d8de3f87ae303bf3345ed90430ea992e8c6e7d1a42e4fd2934744d4d31cf3dc9ae8b37eee514665ea51fcacd74ed2945dfbba4692ef3a99a6a1de3362c4885debcd05ea119c4d9da2969feb32623338a6a375a56cec8e290ded9e2d358293119b2436e5cd3a48052854803444432d97e034e5033a954be5928644bb7a7b998474362638e9884e129acec5deee8a96cd031ad7d824daa12dbe5959e3e8d1a3effeddef7eb77c33361958faed6f7ffba7998a969ba40214cc8b8668a8dfd9dca9646d3b154db9542e6988869abd2d5ec6d2c6e424494ea68ae6419f1995a9a7ac65442dd311b39e3ad30a77df7df7d58d3f97a968edd216dfdcac71fb32e33b6fdcb8718bafbefaea157d798ecdb9e79e7b5a991c5d95054bed34af8f79312f1aa2a1164e70fa3af2d2969b072897ca250dd1502bb5c51bb788dec4b86450adb1e9e585fd44929ccecece25471f7df4f5975e7ae93fcbecf0f6acd1082b56ac587cdb6db7dd386bd6ac330f3ffcf0b3cbac725e2e6432c476db898179312f1aa2a116a5af53cbda7e2a9a72a95cd2100db5525b7c6d92735f5f929a766c8b6f51f2f4d4b54f063ebd8c5bca58b9f6e2e5df05654c2fe380767eda29f3625e3444438320c1d9a98c7b86b4c9033a954be5928668485b1c605ecc8b8668a83d19ba367119ba81cfef1c4c898d72a95cd2100d01921bc1bc688886da6f0467504d45532e954b1aa2214072c3bc98170dd1507b26388336b1512e954b1aa22140722398170dd150fb243813077362a35c2a9734444380e446302f1aa2a1f6606816a30e1904db3d2b97ca250dd11000e6c5bc688886da9cb5c90d6f571e944b1aa22140052898170dd190e486b70bde4e433404a800850a50d090e446b914bc5dd010c0bc840a50a8002537caa572494382b703cc8b79d19050014a6e944be5928668085001320de645433424b9e1ed42b9a4211a025480420548433424b9512e056f173404302fa102143424b9512e954b1a12bc1d605ecc8b86840a5072a35c2a97344443009817f3a2211a92dcf076a15cd2100d012a40c1bc6888862437caa5e0ed828600e625548082862437caa572494382b703cc8b79d19050014a6e944be59286680800f3625e344443921bde2e944b1aa22140052898170dd190e446b914bc5dd010c0bc840a50d090e446b9542e6948f076a01f38efbcf39846f3c4cad2bceea32131d83424b9512e954b1a12bc1dd8225c7cf1c5b72f59b2847134412c5ab4684a695e37d090186c1a92dc2897ca250d09de0e6c11ce3ffffc8f5c78e185cbeeb8e38e150c64e07a64625cb366cdfa67199fa0a101ab3c684872c3db857249433404b43a6581193673e6ccab32e499399dad16a79d765a91c64c2bfeed6b23d7fd865636ae56d7d095575e594c9a34a998366d1a0d496e78bb502e698886000c6843667a1a333befbcf336ae06fa4a5114dbde75d75d4b4b8ab163c79ee98a486e00681f00c0803062c4883796c6755fcc6be4c891435d11f495050b169c52ac65f6ecd98b4a1dede2aa486e00681f00c04098d7b418d7dab8ca15415f58be7cf92b57af5ebda668e0a8a38e5ad0d9d9b99dab23b901a07d0000fdd980d9a9ee95a9a334b361ae0c7acbe2c58be7155d58b66cd9e28e8e8eefb93a921b00da0700d09fe635bdd1b8eade19736bd11be6cf9f7f48d103d3a64d5b9ccad15592dc00d03e0080fe30ae07f4cad461cd04364699bf3c75d5aa55ffeb29b959b366cdbde3c78f9fa32294dc00d03e0080fe30afb3bb33aeb571b92b840db170e1c2cb8b8d306fdebc056545b89fab25b901a07d00005bd3b87aec9531b716bde1b2cb2edb586e53ac5cb9f2c268a9b3b3735b574c720340fb0000b696794ddf9071d919051be3d0430fdd7b43d3d292db4c9830e157466e243700b40f004063064dcf9429536eec29b3b9f9e69b4fc8f4056b6ef801007e0000cc0b4dcff0e1c37728939895dd6c26705d4747c775764be30700f80100302fb40cc71e7bec716532b3ba31b939f1c4134f1a3162c44457871f00e00700c0bcd03264dad98c193396343cc0f3d4524b733b3b3bb77375f801007e0000cc0b2dc53efbecf37f4b972e5d55463176ecd8599e83c00f00f00300605e6859264f9e7cf6a44993b245e83457831f00e00700c0bcd0b2641a5a34944d065c0d7e00801f0000f3020dc1bd04c00f0080798186e05e02e00700c0bc4043702f01f00300cc0ba021f712003f0000e6051a827b09801f0000f3020dc1bd04c00f0080798186e05e02e0070098174043ee25007e0000cc0b3404f712003f0000e6051a827b09801f0000f3020dc1bd04c00f00302f8086dc4b00fc000098176808ee25007e0000cc0b3404f712003f0000e6051a827b09801f00605e000db99700c00f00302fd010dc4b00fc000098176808ee25007e0000cc0b3404f712003f00c0bc98176808ee25007e0080790134e45e02e00700c0bc4043702f01f00300605ea021b89700f80100302fd010dc4b00fc0000f30268c8bd04c00f0080798186e05e02e00700c0bc4043702f01f00300605ea021b89700f80100e605d0907b09801f0000f3020dc1bd04c00f0080798186e05e02e00700c0bc4043702f01f00300cc0ba021f712003f0000e6051a827b09801f00c0009997109b1b4a92c60c007e000000a0b34308a1e30a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000069aff077668140861e716f60000000049454e44ae426082, '1'); COMMIT; -- ---------------------------- @@ -77,7 +76,7 @@ CREATE TABLE `ACT_GE_PROPERTY` ( -- Records of `ACT_GE_PROPERTY` -- ---------------------------- BEGIN; -INSERT INTO `ACT_GE_PROPERTY` VALUES ('next.dbid', '30001', '13'), ('schema.history', 'create(5.22.0.0)', '1'), ('schema.version', '5.22.0.0', '1'); +INSERT INTO `ACT_GE_PROPERTY` VALUES ('next.dbid', '32501', '14'), ('schema.history', 'create(5.22.0.0)', '1'), ('schema.version', '5.22.0.0', '1'); COMMIT; -- ---------------------------- @@ -110,7 +109,7 @@ CREATE TABLE `ACT_HI_ACTINST` ( -- Records of `ACT_HI_ACTINST` -- ---------------------------- BEGIN; -INSERT INTO `ACT_HI_ACTINST` VALUES ('25006', 'LeaveBill:1:25004', '25005', '25005', 'start', null, null, '开始', 'startEvent', null, '2018-12-03 23:52:38.725', '2018-12-03 23:52:38.746', '21', '1'), ('25007', 'LeaveBill:1:25004', '25005', '25005', 'user', '25008', null, '用户提交', 'userTask', null, '2018-12-03 23:52:38.748', '2018-12-03 23:53:40.532', '61784', '1'), ('25014', 'LeaveBill:1:25004', '25005', '25005', 'pm', '25015', null, '组长审批', 'userTask', null, '2018-12-03 23:53:40.532', '2018-12-03 23:54:09.373', '28841', '1'), ('25018', 'LeaveBill:1:25004', '25005', '25005', 'sid-7D3BA0CC-0E14-401A-997B-E5B57798D600', null, null, null, 'exclusiveGateway', null, '2018-12-03 23:54:09.373', '2018-12-03 23:54:09.384', '11', '1'), ('25019', 'LeaveBill:1:25004', '25005', '25005', 'sid-A13A9AA8-CC8F-4B33-8166-EF7757F6ABDB', '25020', null, '人力报备', 'userTask', null, '2018-12-03 23:54:09.384', null, null, '1'), ('25023', 'LeaveBill:1:25004', '25022', '25022', 'start', null, null, '开始', 'startEvent', null, '2018-12-03 23:57:55.883', '2018-12-03 23:57:55.885', '2', '1'), ('25024', 'LeaveBill:1:25004', '25022', '25022', 'user', '25025', null, '用户提交', 'userTask', null, '2018-12-03 23:57:55.885', '2018-12-03 23:58:06.820', '10935', '1'), ('25031', 'LeaveBill:1:25004', '25022', '25022', 'pm', '25032', null, '组长审批', 'userTask', null, '2018-12-03 23:58:06.820', '2018-12-03 23:58:14.514', '7694', '1'), ('25035', 'LeaveBill:1:25004', '25022', '25022', 'sid-7D3BA0CC-0E14-401A-997B-E5B57798D600', null, null, null, 'exclusiveGateway', null, '2018-12-03 23:58:14.514', '2018-12-03 23:58:14.515', '1', '1'), ('25036', 'LeaveBill:1:25004', '25022', '25022', 'sid-D191DB7D-10B8-4AE7-8284-E0931287237C', '25037', null, '经理审批', 'userTask', null, '2018-12-03 23:58:14.515', null, null, '1'), ('27502', 'LeaveBill:1:25004', '27501', '27501', 'start', null, null, '开始', 'startEvent', null, '2018-12-11 13:44:16.165', '2018-12-11 13:44:16.228', '63', '1'), ('27503', 'LeaveBill:1:25004', '27501', '27501', 'user', '27504', null, '用户提交', 'userTask', null, '2018-12-11 13:44:16.230', '2018-12-11 13:45:15.552', '59322', '1'), ('27510', 'LeaveBill:1:25004', '27501', '27501', 'pm', '27511', null, '组长审批', 'userTask', null, '2018-12-11 13:45:15.552', '2018-12-11 13:45:25.721', '10169', '1'), ('27514', 'LeaveBill:1:25004', '27501', '27501', 'sid-7D3BA0CC-0E14-401A-997B-E5B57798D600', null, null, null, 'exclusiveGateway', null, '2018-12-11 13:45:25.721', '2018-12-11 13:45:25.730', '9', '1'), ('27515', 'LeaveBill:1:25004', '27501', '27501', 'sid-A13A9AA8-CC8F-4B33-8166-EF7757F6ABDB', '27516', null, '人力报备', 'userTask', null, '2018-12-11 13:45:25.730', '2018-12-11 13:46:08.285', '42555', '1'), ('27519', 'LeaveBill:1:25004', '27501', '27501', 'sid-BA76EC1F-B75E-4F28-B898-FE0666B681BF', null, null, null, 'endEvent', null, '2018-12-11 13:46:08.285', '2018-12-11 13:46:08.285', '0', '1'); +INSERT INTO `ACT_HI_ACTINST` VALUES ('30106', 'LeaveBill:1:30104', '30105', '30105', 'start', null, null, '开始', 'startEvent', null, '2018-12-18 22:51:52.599', '2018-12-18 22:51:52.600', '1', '1'), ('30107', 'LeaveBill:1:30104', '30105', '30105', 'user', '30108', null, '用户提交', 'userTask', null, '2018-12-18 22:51:52.600', '2018-12-18 22:52:05.817', '13217', '1'), ('30114', 'LeaveBill:1:30104', '30105', '30105', 'pm', '30115', null, '组长审批', 'userTask', null, '2018-12-18 22:52:05.817', '2018-12-18 22:52:11.607', '5790', '1'), ('30118', 'LeaveBill:1:30104', '30105', '30105', 'user', '30119', null, '用户提交', 'userTask', null, '2018-12-18 22:52:11.607', null, null, '1'); COMMIT; -- ---------------------------- @@ -153,7 +152,7 @@ CREATE TABLE `ACT_HI_COMMENT` ( -- Records of `ACT_HI_COMMENT` -- ---------------------------- BEGIN; -INSERT INTO `ACT_HI_COMMENT` VALUES ('25011', 'comment', '2018-12-03 23:53:40.481', 'admin', '25008', '25005', 'AddComment', '组长同意', 0xe7bb84e995bfe5908ce6848f), ('25017', 'comment', '2018-12-03 23:54:09.341', 'admin', '25015', '25005', 'AddComment', '组长审批通过', 0xe7bb84e995bfe5aea1e689b9e9809ae8bf87), ('25028', 'comment', '2018-12-03 23:58:06.803', 'admin', '25025', '25022', 'AddComment', '审批', 0xe5aea1e689b9), ('25034', 'comment', '2018-12-03 23:58:14.496', 'admin', '25032', '25022', 'AddComment', '组长同意', 0xe7bb84e995bfe5908ce6848f), ('27507', 'comment', '2018-12-11 13:45:15.210', 'admin', '27504', '27501', 'AddComment', '11111', 0x3131313131), ('27513', 'comment', '2018-12-11 13:45:25.284', 'admin', '27511', '27501', 'AddComment', '2222', 0x32323232), ('27518', 'comment', '2018-12-11 13:46:02.740', 'admin', '27516', '27501', 'AddComment', '3333', 0x33333333); +INSERT INTO `ACT_HI_COMMENT` VALUES ('30111', 'comment', '2018-12-18 22:52:05.805', 'admin', '30108', '30105', 'AddComment', '1', 0x31), ('30117', 'comment', '2018-12-18 22:52:11.589', 'admin', '30115', '30105', 'AddComment', '2', 0x32); COMMIT; -- ---------------------------- @@ -205,7 +204,7 @@ CREATE TABLE `ACT_HI_IDENTITYLINK` ( -- Records of `ACT_HI_IDENTITYLINK` -- ---------------------------- BEGIN; -INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('25009', null, 'candidate', 'admin', '25008', null), ('25010', null, 'participant', 'admin', null, '25005'), ('25016', null, 'candidate', 'admin', '25015', null), ('25021', null, 'candidate', 'admin', '25020', null), ('25026', null, 'candidate', 'admin', '25025', null), ('25027', null, 'participant', 'admin', null, '25022'), ('25033', null, 'candidate', 'admin', '25032', null), ('25038', null, 'candidate', 'admin', '25037', null), ('27505', null, 'candidate', 'admin', '27504', null), ('27506', null, 'participant', 'admin', null, '27501'), ('27512', null, 'candidate', 'admin', '27511', null), ('27517', null, 'candidate', 'admin', '27516', null); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('30109', null, 'candidate', 'admin', '30108', null), ('30110', null, 'participant', 'admin', null, '30105'), ('30116', null, 'candidate', 'admin', '30115', null), ('30120', null, 'candidate', 'admin', '30119', null); COMMIT; -- ---------------------------- @@ -237,7 +236,7 @@ CREATE TABLE `ACT_HI_PROCINST` ( -- Records of `ACT_HI_PROCINST` -- ---------------------------- BEGIN; -INSERT INTO `ACT_HI_PROCINST` VALUES ('25005', '25005', 'LeaveBill_17', 'LeaveBill:1:25004', '2018-12-03 23:52:38.725', null, null, null, 'start', null, null, null, '1', null), ('25022', '25022', 'LeaveBill_18', 'LeaveBill:1:25004', '2018-12-03 23:57:55.883', null, null, null, 'start', null, null, null, '1', null), ('27501', '27501', 'LeaveBill_1', 'LeaveBill:1:25004', '2018-12-11 13:44:16.163', '2018-12-11 13:46:08.311', '112148', null, 'start', 'sid-BA76EC1F-B75E-4F28-B898-FE0666B681BF', null, null, '1', null); +INSERT INTO `ACT_HI_PROCINST` VALUES ('30105', '30105', 'LeaveBill_6', 'LeaveBill:1:30104', '2018-12-18 22:51:52.599', null, null, null, 'start', null, null, null, '1', null); COMMIT; -- ---------------------------- @@ -273,7 +272,7 @@ CREATE TABLE `ACT_HI_TASKINST` ( -- Records of `ACT_HI_TASKINST` -- ---------------------------- BEGIN; -INSERT INTO `ACT_HI_TASKINST` VALUES ('25008', 'LeaveBill:1:25004', 'user', '25005', '25005', '用户提交', null, null, null, null, '2018-12-03 23:52:38.756', null, '2018-12-03 23:53:40.525', '61769', 'completed', '50', null, null, null, '1'), ('25015', 'LeaveBill:1:25004', 'pm', '25005', '25005', '组长审批', null, null, null, null, '2018-12-03 23:53:40.532', null, '2018-12-03 23:54:09.356', '28824', 'completed', '50', null, null, null, '1'), ('25020', 'LeaveBill:1:25004', 'sid-A13A9AA8-CC8F-4B33-8166-EF7757F6ABDB', '25005', '25005', '人力报备', null, null, null, null, '2018-12-03 23:54:09.384', null, null, null, null, '50', null, null, null, '1'), ('25025', 'LeaveBill:1:25004', 'user', '25022', '25022', '用户提交', null, null, null, null, '2018-12-03 23:57:55.886', null, '2018-12-03 23:58:06.818', '10932', 'completed', '50', null, null, null, '1'), ('25032', 'LeaveBill:1:25004', 'pm', '25022', '25022', '组长审批', null, null, null, null, '2018-12-03 23:58:06.820', null, '2018-12-03 23:58:14.507', '7687', 'completed', '50', null, null, null, '1'), ('25037', 'LeaveBill:1:25004', 'sid-D191DB7D-10B8-4AE7-8284-E0931287237C', '25022', '25022', '经理审批', null, null, null, null, '2018-12-03 23:58:14.515', null, null, null, null, '50', null, null, null, '1'), ('27504', 'LeaveBill:1:25004', 'user', '27501', '27501', '用户提交', null, null, null, null, '2018-12-11 13:44:16.257', null, '2018-12-11 13:45:15.530', '59273', 'completed', '50', null, null, null, '1'), ('27511', 'LeaveBill:1:25004', 'pm', '27501', '27501', '组长审批', null, null, null, null, '2018-12-11 13:45:15.552', null, '2018-12-11 13:45:25.685', '10133', 'completed', '50', null, null, null, '1'), ('27516', 'LeaveBill:1:25004', 'sid-A13A9AA8-CC8F-4B33-8166-EF7757F6ABDB', '27501', '27501', '人力报备', null, null, null, null, '2018-12-11 13:45:25.730', null, '2018-12-11 13:46:08.268', '42538', 'completed', '50', null, null, null, '1'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('30108', 'LeaveBill:1:30104', 'user', '30105', '30105', '用户提交', null, null, null, null, '2018-12-18 22:51:52.601', null, '2018-12-18 22:52:05.815', '13214', 'completed', '50', null, null, null, '1'), ('30115', 'LeaveBill:1:30104', 'pm', '30105', '30105', '组长审批', null, null, null, null, '2018-12-18 22:52:05.817', null, '2018-12-18 22:52:11.603', '5786', 'completed', '50', null, null, null, '1'), ('30119', 'LeaveBill:1:30104', 'user', '30105', '30105', '用户提交', null, null, null, null, '2018-12-18 22:52:11.607', null, null, null, null, '50', null, null, null, '1'); COMMIT; -- ---------------------------- @@ -305,7 +304,7 @@ CREATE TABLE `ACT_HI_VARINST` ( -- Records of `ACT_HI_VARINST` -- ---------------------------- BEGIN; -INSERT INTO `ACT_HI_VARINST` VALUES ('25012', '25005', '25005', null, 'days', 'integer', '1', null, null, '3', '3', null, '2018-12-03 23:53:40.516', '2018-12-03 23:54:09.351'), ('25013', '25005', '25005', null, 'flag', 'string', '1', null, null, null, '审批', null, '2018-12-03 23:53:40.517', '2018-12-03 23:54:09.352'), ('25029', '25022', '25022', null, 'days', 'integer', '1', null, null, '15', '15', null, '2018-12-03 23:58:06.813', '2018-12-03 23:58:14.504'), ('25030', '25022', '25022', null, 'flag', 'string', '1', null, null, null, '审批', null, '2018-12-03 23:58:06.813', '2018-12-03 23:58:14.505'), ('27508', '27501', '27501', null, 'days', 'integer', '2', null, null, '7', '7', null, '2018-12-11 13:45:15.411', '2018-12-11 13:46:08.313'), ('27509', '27501', '27501', null, 'flag', 'string', '2', null, null, null, '审批', null, '2018-12-11 13:45:15.412', '2018-12-11 13:46:08.311'); +INSERT INTO `ACT_HI_VARINST` VALUES ('30112', '30105', '30105', null, 'days', 'integer', '1', null, null, '11', '11', null, '2018-12-18 22:52:05.813', '2018-12-18 22:52:11.598'), ('30113', '30105', '30105', null, 'flag', 'string', '1', null, null, null, '驳回', null, '2018-12-18 22:52:05.813', '2018-12-18 22:52:11.600'); COMMIT; -- ---------------------------- @@ -398,7 +397,7 @@ CREATE TABLE `ACT_RE_DEPLOYMENT` ( -- Records of `ACT_RE_DEPLOYMENT` -- ---------------------------- BEGIN; -INSERT INTO `ACT_RE_DEPLOYMENT` VALUES ('12509', '请教流程', null, '1', '2018-11-11 01:47:50.296'), ('25001', '请假流程', null, '1', '2018-12-03 23:51:57.877'); +INSERT INTO `ACT_RE_DEPLOYMENT` VALUES ('12509', '请教流程', null, '1', '2018-11-11 01:47:50.296'), ('30101', '请假流程', null, '1', '2018-12-18 22:50:23.963'); COMMIT; -- ---------------------------- @@ -432,7 +431,7 @@ CREATE TABLE `ACT_RE_MODEL` ( -- Records of `ACT_RE_MODEL` -- ---------------------------- BEGIN; -INSERT INTO `ACT_RE_MODEL` VALUES ('1', '11', '请假流程', 'LeaveBill', 'LeaveBill', '2018-11-10 22:52:35.569', '2018-12-03 23:45:57.654', '1', '{\"name\":\"请假流程\",\"revision\":1,\"description\":\"内置请假流程。\"}', null, '2', '3', '1'); +INSERT INTO `ACT_RE_MODEL` VALUES ('1', '13', '请假流程', 'LeaveBill', 'LeaveBill', '2018-11-10 22:52:35.569', '2018-12-18 22:47:07.638', '1', '{\"name\":\"请假流程\",\"revision\":1,\"description\":\"内置请假流程。\"}', null, '2', '3', '1'); COMMIT; -- ---------------------------- @@ -462,7 +461,7 @@ CREATE TABLE `ACT_RE_PROCDEF` ( -- Records of `ACT_RE_PROCDEF` -- ---------------------------- BEGIN; -INSERT INTO `ACT_RE_PROCDEF` VALUES ('LeaveBill:1:25004', '2', 'LeaveBill', 'LeaveBill', 'LeaveBill', '1', '25001', '请假流程.bpmn20.xml', '请假流程.LeaveBill.png', null, '0', '1', '1', '1'); +INSERT INTO `ACT_RE_PROCDEF` VALUES ('LeaveBill:1:30104', '2', 'LeaveBill', 'LeaveBill', 'LeaveBill', '1', '30101', '请假流程.bpmn20.xml', '请假流程.LeaveBill.png', null, '0', '1', '1', '1'); COMMIT; -- ---------------------------- @@ -525,7 +524,7 @@ CREATE TABLE `ACT_RU_EXECUTION` ( -- Records of `ACT_RU_EXECUTION` -- ---------------------------- BEGIN; -INSERT INTO `ACT_RU_EXECUTION` VALUES ('25005', '3', '25005', 'LeaveBill_17', null, 'LeaveBill:1:25004', null, 'sid-A13A9AA8-CC8F-4B33-8166-EF7757F6ABDB', '1', '0', '1', '0', '1', '2', '1', null, null), ('25022', '3', '25022', 'LeaveBill_18', null, 'LeaveBill:1:25004', null, 'sid-D191DB7D-10B8-4AE7-8284-E0931287237C', '1', '0', '1', '0', '1', '2', '1', null, null); +INSERT INTO `ACT_RU_EXECUTION` VALUES ('30105', '3', '30105', 'LeaveBill_6', null, 'LeaveBill:1:30104', null, 'user', '1', '0', '1', '0', '1', '2', '1', null, null); COMMIT; -- ---------------------------- @@ -552,6 +551,13 @@ CREATE TABLE `ACT_RU_IDENTITYLINK` ( CONSTRAINT `ACT_FK_TSKASS_TASK` FOREIGN KEY (`TASK_ID_`) REFERENCES `ACT_RU_TASK` (`ID_`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +-- ---------------------------- +-- Records of `ACT_RU_IDENTITYLINK` +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_RU_IDENTITYLINK` VALUES ('30110', '1', null, 'participant', 'admin', null, '30105', null), ('30120', '1', null, 'candidate', 'admin', '30119', null, null); +COMMIT; + -- ---------------------------- -- Table structure for `ACT_RU_JOB` -- ---------------------------- @@ -613,6 +619,13 @@ CREATE TABLE `ACT_RU_TASK` ( CONSTRAINT `ACT_FK_TASK_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +-- ---------------------------- +-- Records of `ACT_RU_TASK` +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_RU_TASK` VALUES ('30119', '1', '30105', '30105', 'LeaveBill:1:30104', '用户提交', null, null, 'user', null, null, null, '50', '2018-12-18 22:52:11.607', null, null, '1', '1', null); +COMMIT; + -- ---------------------------- -- Table structure for `ACT_RU_VARIABLE` -- ---------------------------- @@ -644,7 +657,7 @@ CREATE TABLE `ACT_RU_VARIABLE` ( -- Records of `ACT_RU_VARIABLE` -- ---------------------------- BEGIN; -INSERT INTO `ACT_RU_VARIABLE` VALUES ('25012', '1', 'integer', 'days', '25005', '25005', null, null, null, '3', '3', null), ('25013', '1', 'string', 'flag', '25005', '25005', null, null, null, null, '审批', null), ('25029', '1', 'integer', 'days', '25022', '25022', null, null, null, '15', '15', null), ('25030', '1', 'string', 'flag', '25022', '25022', null, null, null, null, '审批', null); +INSERT INTO `ACT_RU_VARIABLE` VALUES ('30112', '1', 'integer', 'days', '30105', '30105', null, null, null, '11', '11', null), ('30113', '2', 'string', 'flag', '30105', '30105', null, null, null, null, '驳回', null); COMMIT; -- ---------------------------- @@ -663,6 +676,13 @@ CREATE TABLE `oa_leave_bill` ( `del_flag` char(50) DEFAULT '0' COMMENT '删除标识', `tenant_id` int(11) NOT NULL COMMENT '所属租户', PRIMARY KEY (`leave_id`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4; + +-- ---------------------------- +-- Records of `oa_leave_bill` +-- ---------------------------- +BEGIN; +INSERT INTO `oa_leave_bill` VALUES ('2', 'admin', '16', '2018-12-19 12:00', '1', '2018-12-19 12:00:00', '2018-12-18 22:35:45', '2018-12-18 22:37:13', '0', '1'), ('3', 'admin', '20', '2018-12-22 12:00', '1', '2018-12-22 12:00:00', '2018-12-18 22:41:11', '2018-12-18 22:41:27', '0', '1'), ('4', 'admin', '22', '111', '1', '2018-12-03 12:00:00', '2018-12-18 22:42:45', '2018-12-18 22:42:50', '0', '1'), ('5', 'admin', '20', '11111', '1', '2018-12-12 12:00:00', '2018-12-18 22:45:30', '2018-12-18 22:45:34', '0', '1'), ('6', 'admin', '11', '12', '1', '2018-12-04 12:00:00', '2018-12-18 22:51:19', '2018-12-18 22:51:52', '0', '1'); +COMMIT; SET FOREIGN_KEY_CHECKS = 1; diff --git a/doc/md/codegen.md b/doc/md/codegen.md index e62851813..cd6fe0def 100644 --- a/doc/md/codegen.md +++ b/doc/md/codegen.md @@ -40,19 +40,19 @@ v 1.4.0 提供了代码图形化生成功能。 1. 代码生成模块 -![](http://obq1lvsd9.bkt.clouddn.com/20180803083802.png) +![](http://a.pigx.top/20180803083802.png) 2. 选择要生成的表 > 以下为空则从**pigx-codegen/generator.properties** 获取 - ![](http://obq1lvsd9.bkt.clouddn.com/20180803084058.png) + ![](http://a.pigx.top/20180803084058.png) 3. 解压下载的**pigx_code_gen.zip** > 生成代码结构,安装前后端 maven 、vue-cli 目录生成,可以覆盖到指定业务模块 - ![](http://obq1lvsd9.bkt.clouddn.com/20180803084524.png) + ![](http://a.pigx.top/20180803084524.png) 4. **重点讲解生成的SQL使用** @@ -72,7 +72,7 @@ v 1.4.0 提供了代码图形化生成功能。 ├── 14 ``` -![](http://obq1lvsd9.bkt.clouddn.com/20180803084905.png) +![](http://a.pigx.top/20180803084905.png) 5. **配置路由** 前端 index.js diff --git a/doc/md/modules.md b/doc/md/modules.md index f6383a648..f54e5dd25 100644 --- a/doc/md/modules.md +++ b/doc/md/modules.md @@ -5,9 +5,10 @@ pigx ├── pigx-auth -- 授权服务提供[3000] ├── pigx-common -- 系统公共模块 ├ ├── pigx-common-core -- 公共工具类核心包 -├ ├── pigx-common-cache -- 缓存 +├ ├── pigx-common-data -- 数据相关 ├ ├── pigx-common-job -- 定时任务 ├ ├── pigx-common-log -- 日志服务 +├ ├── pigx-common-minio -- 文件系统 ├ └── pigx-common-security -- 安全工具类 ├ └── pigx-common-swagger -- Swagger Api文档生成 ├ └── pigx-common-transaction -- 分布式事务工具包 diff --git a/doc/md/social.md b/doc/md/social.md index 5451768d5..f0faff6ea 100644 --- a/doc/md/social.md +++ b/doc/md/social.md @@ -12,7 +12,7 @@ 1. 修改为80 -![](http://obq1lvsd9.bkt.clouddn.com/20180818115000.png) +![](http://a.pigx.top/20180818115000.png) 2. 使用mac 的同学,nginx 代理一下 @@ -30,11 +30,11 @@ http://daoweicloud.com 1. 首先使用账号密码登录系统绑定微信 -![](http://obq1lvsd9.bkt.clouddn.com/20180818120253.png) +![](http://a.pigx.top/20180818120253.png) -![](http://obq1lvsd9.bkt.clouddn.com/20180818120339.png) +![](http://a.pigx.top/20180818120339.png) 2. 绑定后使用退出,使用社交等 选择微信登录即可。 @@ -46,8 +46,8 @@ http://daoweicloud.com 1. 选择社交登录 提示回调地址错误。 请使用 http://daoweicloud.com 访问 - ![](http://obq1lvsd9.bkt.clouddn.com/20180818120543.png) + ![](http://a.pigx.top/20180818120543.png) 1. 选择微信登录提示: 未绑定账户,请使用密码登录后绑定,需要先登录后绑定微信,才可以使用微信 -![](http://obq1lvsd9.bkt.clouddn.com/20180818120045.png) +![](http://a.pigx.top/20180818120045.png) diff --git a/doc/md/swagger.md b/doc/md/swagger.md index 7c2b82af0..e0b49613b 100644 --- a/doc/md/swagger.md +++ b/doc/md/swagger.md @@ -114,7 +114,7 @@ swagger: - 通过界面的形式 - ![](http://obq1lvsd9.bkt.clouddn.com/20180725132807.png) + ![](http://a.pigx.top/20180725132807.png) - 直接操作**sys_oauth_client_details**表 @@ -159,9 +159,50 @@ ignore: - test ``` +#### 访问swagger-ui页面 + +从```1.6.3```版本开始,要求通过```hosts```进行访问,在pigx的默认配置下,可以访问```http://pigx-gateway:9999/swagger-ui.html```打开swagger页面。 + #### 填写客户端信息 -![](http://obq1lvsd9.bkt.clouddn.com/20180725133119.png) +![](http://a.pigx.top/20180725133119.png) -![](http://obq1lvsd9.bkt.clouddn.com/20180725133206.png) +![](http://a.pigx.top/20180725133206.png) +### Swagger FAQ + +- 为何要进行认证的操作? + +认证后Spring Security的上下文对象中才会有值,很多操作如获取当前用户信息都依赖于Spring Security上下文。 + +- 刷新页面后认证失效? + +官方UI比较蠢萌,虽然提供了Oauth2.0的认证功能,但是没有存储的措施,所以刷新页面后相关参数就会丢失。解决办法暴力一点的措施是修改官方UI添加存储措施,但是这个我肯定不会了。目前比较可行的就是修改代码进行swagger全局参数配置。 + +- 切换swagger分组文档页面报错 + +![20181121214548](http://oss1.pig4cloud.com/20181121214548.png) + +出现这个问题要么是你对应的服务没有启动,要么是你访问的服务还没有启动完毕,如果还没启动完毕的话,不妨等个十几二十秒再进行访问,最新的master-mp3分支支持在```pigx-gateway-dev.yml```中配置ignore.swagger-providers属性来屏蔽掉不希望生成swaager文档的微服务。 + +- 认证过程中出现```Auth ErrorError: Upgrade Required```? + +这个不用怀疑,原因一般不外乎三个。 + +一、用户名或密码错误 + +可以打开谷歌开发者工具,观察request详情和response详情以及返回的状态码,如果是426的话,就证明获取用户信息的时候失败了,可以判断是作为缓存中间件的redis并没有启动,那么只要启动redis,另一个原因是redis中有脏数据,这个时候清空redis即可。清空的具体步骤如下: + +windows平台下可以打开redis-cli.exe,然后执行```flushdb```或者```flushall```命令即可。 + +二、使用了需要验证码的客户端 + +除了上面的原因,还有可能返回428的状态码,而会出现这个问题就是使用了需要验证码的客户端。 + +三、跨域 + +排除所有不可能,剩下的那个不管多不可思议,都是事实真相。除开这两个原因,还有可能会出问题的,只有一种情况,那就是出现了跨域问题。 + +如果本地启动出现了问题,可以观察请求头里是否存在跨域,如果是OPTIONS请求基本就是跨域了。 + +在目前的项目机制下,开发时解决跨域的最简单的一个方案就是不要通过```http://localhost:9999/swagger-ui.html```或者```http://127.0.0.1:9999/swagger-ui.html```去访问网关上的swagger,而是直接通过```http://pigx-gateway:9999/swagger-ui.html```去访问,这样就能避免跨域的问题。 diff --git a/docker-compose.yml b/docker-compose.yml index f3c536a0a..c51477111 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,3 +1,8 @@ +# 使用说明 V2.1.0 +# 1. 使用docker-compose 宿主机不需要配置host来发现 +# 2. 无需修改源码,根目录 docker-compose up 即可 +# 3. 静静等待服务启动 + version: '2' services: pigx-mysql: diff --git a/pigx-auth/pom.xml b/pigx-auth/pom.xml index b2051fd14..8a5bfef19 100644 --- a/pigx-auth/pom.xml +++ b/pigx-auth/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx - 2.0.0 + 2.1.0 pigx-auth @@ -42,13 +42,25 @@ com.pig4cloud pigx-upms-api - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-security - 2.0.0 + 2.1.0 + + + + mysql + mysql-connector-java + ${mysql.connector.version} + + + + com.pig4cloud + pigx-common-data + 2.1.0 @@ -60,12 +72,6 @@ org.springframework.boot spring-boot-starter-freemarker - - - com.pig4cloud - pigx-common-cache - 2.0.0 - org.springframework.cloud @@ -83,12 +89,6 @@ spring-security-oauth2 ${security.oauth.version} - - - mysql - mysql-connector-java - ${mysql.connector.version} - org.springframework.boot diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java index a068928c0..993d5fb93 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java @@ -20,8 +20,10 @@ package com.pig4cloud.pigx.auth.config; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; +import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import com.pig4cloud.pigx.common.security.component.PigxWebResponseExceptionTranslator; import com.pig4cloud.pigx.common.security.service.PigxClientDetailsService; +import com.pig4cloud.pigx.common.security.service.PigxUser; import com.pig4cloud.pigx.common.security.service.PigxUserDetailsService; import lombok.AllArgsConstructor; import org.springframework.context.annotation.Bean; @@ -35,6 +37,8 @@ import org.springframework.security.oauth2.config.annotation.web.configuration.A import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer; import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer; import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer; +import org.springframework.security.oauth2.provider.OAuth2Authentication; +import org.springframework.security.oauth2.provider.token.DefaultAuthenticationKeyGenerator; import org.springframework.security.oauth2.provider.token.TokenEnhancer; import org.springframework.security.oauth2.provider.token.TokenStore; import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore; @@ -68,20 +72,20 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap @Override public void configure(AuthorizationServerSecurityConfigurer oauthServer) { oauthServer - .allowFormAuthenticationForClients() - .checkTokenAccess("isAuthenticated()"); + .allowFormAuthenticationForClients() + .checkTokenAccess("isAuthenticated()"); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) { endpoints - .allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST) - .tokenStore(tokenStore()) - .tokenEnhancer(tokenEnhancer()) - .userDetailsService(pigxUserDetailsService) - .authenticationManager(authenticationManager) - .reuseRefreshTokens(false) - .exceptionTranslator(new PigxWebResponseExceptionTranslator()); + .allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST) + .tokenStore(tokenStore()) + .tokenEnhancer(tokenEnhancer()) + .userDetailsService(pigxUserDetailsService) + .authenticationManager(authenticationManager) + .reuseRefreshTokens(false) + .exceptionTranslator(new PigxWebResponseExceptionTranslator()); } @@ -89,13 +93,24 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap public TokenStore tokenStore() { RedisTokenStore tokenStore = new RedisTokenStore(redisConnectionFactory); tokenStore.setPrefix(SecurityConstants.PIGX_PREFIX + SecurityConstants.OAUTH_PREFIX); + tokenStore.setAuthenticationKeyGenerator(new DefaultAuthenticationKeyGenerator() { + @Override + public String extractKey(OAuth2Authentication authentication) { + return super.extractKey(authentication) + ":" + TenantContextHolder.getTenantId(); + } + }); return tokenStore; } @Bean public TokenEnhancer tokenEnhancer() { return (accessToken, authentication) -> { - final Map additionalInfo = new HashMap<>(1); + final Map additionalInfo = new HashMap<>(8); + PigxUser pigxUser = (PigxUser) authentication.getUserAuthentication().getPrincipal(); + additionalInfo.put("user_id", pigxUser.getId()); + additionalInfo.put("username", pigxUser.getUsername()); + additionalInfo.put("dept_id", pigxUser.getDeptId()); + additionalInfo.put("tenant_id", pigxUser.getTenantId()); additionalInfo.put("license", SecurityConstants.PIGX_LICENSE); ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo); return accessToken; diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java index cc5d03f71..96e57982d 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java @@ -22,30 +22,29 @@ package com.pig4cloud.pigx.auth.endpoint; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.constant.PaginationConstants; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.util.R; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; -import com.pig4cloud.pigx.common.security.service.PigxUser; +import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; +import com.pig4cloud.pigx.common.security.annotation.Inner; import lombok.AllArgsConstructor; import org.springframework.cache.CacheManager; import org.springframework.data.redis.core.ConvertingCursor; import org.springframework.data.redis.core.Cursor; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ScanOptions; +import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.http.HttpHeaders; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; import org.springframework.security.oauth2.common.OAuth2AccessToken; import org.springframework.security.oauth2.provider.OAuth2Authentication; import org.springframework.security.oauth2.provider.token.TokenStore; -import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -58,7 +57,8 @@ import java.util.Map; @AllArgsConstructor @RequestMapping("/token") public class PigxTokenEndpoint { - private static final String PIGX_OAUTH_ACCESS = SecurityConstants.PIGX_PREFIX + SecurityConstants.OAUTH_PREFIX + "access:"; + private static final String PIGX_OAUTH_ACCESS = SecurityConstants.PIGX_PREFIX + SecurityConstants.OAUTH_PREFIX + "auth_to_access:"; + private static final String PIGX__ACCESS = SecurityConstants.PIGX_PREFIX + SecurityConstants.OAUTH_PREFIX + "access:"; private final TokenStore tokenStore; private final RedisTemplate redisTemplate; private final CacheManager cacheManager; @@ -79,20 +79,26 @@ public class PigxTokenEndpoint { * @param authHeader Authorization */ @DeleteMapping("/logout") - public R logout(@RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String authHeader) { + public R logout(@RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String authHeader) { if (StrUtil.isBlank(authHeader)) { - return new R<>(false, "退出失败,token 为空"); + return R.builder() + .code(CommonConstants.FAIL) + .data(Boolean.FALSE) + .msg("退出失败,token 为空").build(); } String tokenValue = authHeader.replace("Bearer", "").trim(); OAuth2AccessToken accessToken = tokenStore.readAccessToken(tokenValue); if (accessToken == null || StrUtil.isBlank(accessToken.getValue())) { - return new R<>(false, "退出失败,token 无效"); + return R.builder() + .code(CommonConstants.FAIL) + .data(Boolean.FALSE) + .msg("退出失败,token 无效").build(); } OAuth2Authentication auth2Authentication = tokenStore.readAuthentication(accessToken); cacheManager.getCache("user_details") - .evict(auth2Authentication.getName()); + .evict(auth2Authentication.getName()); tokenStore.removeAccessToken(accessToken); return new R<>(Boolean.TRUE); } @@ -101,15 +107,14 @@ public class PigxTokenEndpoint { * 令牌管理调用 * * @param token token - * @param from 内部调用标志 * @return */ + @Inner @DeleteMapping("/{token}") - public R delToken(@PathVariable("token") String token, @RequestHeader(required = false) String from) { - if (StrUtil.isBlank(from)) { - return null; - } - return new R<>(redisTemplate.delete(PIGX_OAUTH_ACCESS + token)); + public R delToken(@PathVariable("token") String token) { + OAuth2AccessToken oAuth2AccessToken = tokenStore.readAccessToken(token); + tokenStore.removeAccessToken(oAuth2AccessToken); + return new R<>(); } @@ -117,68 +122,24 @@ public class PigxTokenEndpoint { * 查询token * * @param params 分页参数 - * @param from 标志 * @return */ + @Inner @PostMapping("/page") - public R tokenList(@RequestBody Map params, @RequestHeader(required = false) String from) { - if (StrUtil.isBlank(from)) { - return null; - } - - List> list = new ArrayList<>(); + public R tokenList(@RequestBody Map params) { //根据分页参数获取对应数据 - List pages = findKeysForPage(PIGX_OAUTH_ACCESS + "*", MapUtil.getInt(params, PaginationConstants.CURRENT), MapUtil.getInt(params, PaginationConstants.SIZE)); - - for (String page : pages) { - String accessToken = StrUtil.subAfter(page, PIGX_OAUTH_ACCESS, true); - OAuth2AccessToken token = tokenStore.readAccessToken(accessToken); - Map map = new HashMap<>(8); - - - map.put("token_type", token.getTokenType()); - map.put("token_value", token.getValue()); - map.put("expires_in", token.getExpiresIn() + ""); - - - OAuth2Authentication oAuth2Auth = tokenStore.readAuthentication(token); - Authentication authentication = oAuth2Auth.getUserAuthentication(); - - map.put("client_id", oAuth2Auth.getOAuth2Request().getClientId()); - map.put("grant_type", oAuth2Auth.getOAuth2Request().getGrantType()); - - if (authentication instanceof UsernamePasswordAuthenticationToken) { - UsernamePasswordAuthenticationToken authenticationToken = (UsernamePasswordAuthenticationToken) authentication; - if (extractToken(map, authenticationToken.getPrincipal())) { - continue; - } - } else if (authentication instanceof PreAuthenticatedAuthenticationToken) { - //刷新token方式 - PreAuthenticatedAuthenticationToken authenticationToken = (PreAuthenticatedAuthenticationToken) authentication; - if (extractToken(map, authenticationToken.getPrincipal())) { - continue; - } - } - list.add(map); - } + String key = String.format("%s*:%s", PIGX_OAUTH_ACCESS, TenantContextHolder.getTenantId()); + List pages = findKeysForPage(key, MapUtil.getInt(params, PaginationConstants.CURRENT) + , MapUtil.getInt(params, PaginationConstants.SIZE)); + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); Page result = new Page(MapUtil.getInt(params, PaginationConstants.CURRENT), MapUtil.getInt(params, PaginationConstants.SIZE)); - result.setRecords(list); - result.setTotal(Long.valueOf(redisTemplate.keys(PIGX_OAUTH_ACCESS + "*").size())); + result.setRecords(redisTemplate.opsForValue().multiGet(pages)); + result.setTotal(Long.valueOf(redisTemplate.keys(key).size())); return new R<>(result); } - private boolean extractToken(Map map, Object principal) { - if (principal instanceof PigxUser) { - PigxUser user = (PigxUser) principal; - if (!user.getTenantId().equals(TenantContextHolder.getTenantId())) { - return true; - } - map.put("user_id", user.getId() + ""); - map.put("user_name", user.getUsername() + ""); - } - return false; - } private List findKeysForPage(String patternKey, int pageNum, int pageSize) { ScanOptions options = ScanOptions.scanOptions().match(patternKey).build(); diff --git a/pigx-common/pigx-common-cache/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-cache/src/main/resources/META-INF/spring.factories deleted file mode 100644 index c34166bd2..000000000 --- a/pigx-common/pigx-common-cache/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,5 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - com.pig4cloud.pigx.common.cache.RedisTemplateConfig,\ - com.pig4cloud.pigx.common.cache.RedisCacheManagerConfig,\ - com.pig4cloud.pigx.common.cache.RedisCacheAutoConfiguration - diff --git a/pigx-common/pigx-common-core/pom.xml b/pigx-common/pigx-common-core/pom.xml index 5f6caa7e6..24cb1f78b 100644 --- a/pigx-common/pigx-common-core/pom.xml +++ b/pigx-common/pigx-common-core/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 pigx-common-core @@ -50,12 +50,6 @@ javax.servlet javax.servlet-api - - - com.baomidou - mybatis-plus-extension - ${mybatis-plus.version} - io.github.openfeign diff --git a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/CommonConstants.java b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/CommonConstants.java index a13489b24..b08e7da6d 100644 --- a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/CommonConstants.java +++ b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/CommonConstants.java @@ -80,9 +80,14 @@ public interface CommonConstants { /** * 成功标记 */ - Integer SUCCESS=0; + Integer SUCCESS = 0; /** * 失败标记 */ - Integer FAIL=1; + Integer FAIL = 1; + + /** + * 默认存储bucket + */ + String BUCKET_NAME = "lengleng"; } diff --git a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/SecurityConstants.java b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/SecurityConstants.java index 3453bb8a8..22935a874 100644 --- a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/SecurityConstants.java +++ b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/SecurityConstants.java @@ -24,6 +24,10 @@ package com.pig4cloud.pigx.common.core.constant; * @date 2017-12-18 */ public interface SecurityConstants { + /** + * 刷新 + */ + String REFRESH_TOKEN = "refresh_token"; /** * 验证码有效期 */ @@ -82,7 +86,7 @@ public interface SecurityConstants { * 微信获取OPENID */ String WX_AUTHORIZATION_CODE_URL = "https://api.weixin.qq.com/sns/oauth2/access_token" + - "?appid=%s&secret=%s&code=%s&grant_type=authorization_code"; + "?appid=%s&secret=%s&code=%s&grant_type=authorization_code"; /** * {bcrypt} 加密的特征码 @@ -92,14 +96,14 @@ public interface SecurityConstants { * sys_oauth_client_details 表的字段,不包括client_id、client_secret */ String CLIENT_FIELDS = "client_id, CONCAT('{noop}',client_secret) as client_secret, resource_ids, scope, " - + "authorized_grant_types, web_server_redirect_uri, authorities, access_token_validity, " - + "refresh_token_validity, additional_information, autoapprove"; + + "authorized_grant_types, web_server_redirect_uri, authorities, access_token_validity, " + + "refresh_token_validity, additional_information, autoapprove"; /** * JdbcClientDetailsService 查询语句 */ String BASE_FIND_STATEMENT = "select " + CLIENT_FIELDS - + " from sys_oauth_client_details"; + + " from sys_oauth_client_details"; /** * 默认的查询语句 diff --git a/pigx-common/pigx-common-cache/pom.xml b/pigx-common/pigx-common-data/pom.xml similarity index 72% rename from pigx-common/pigx-common-cache/pom.xml rename to pigx-common/pigx-common-data/pom.xml index 24051163b..b95218ec1 100644 --- a/pigx-common/pigx-common-cache/pom.xml +++ b/pigx-common/pigx-common-data/pom.xml @@ -24,21 +24,33 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 - pigx-common-cache + pigx-common-data jar - pigx 缓存工具类 + pigx 数据操作相关 - + com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 + + + + com.baomidou + mybatis-plus-extension + ${mybatis-plus.version} + + + + com.pig4cloud + pigx-common-security + 2.1.0 diff --git a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/DefaultRedisCacheWriter.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/DefaultRedisCacheWriter.java similarity index 99% rename from pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/DefaultRedisCacheWriter.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/DefaultRedisCacheWriter.java index b8be1f8b6..44b62faa9 100644 --- a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/DefaultRedisCacheWriter.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/DefaultRedisCacheWriter.java @@ -15,7 +15,7 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.cache; +package com.pig4cloud.pigx.common.data.cache; import org.springframework.dao.PessimisticLockingFailureException; import org.springframework.data.redis.cache.RedisCacheWriter; diff --git a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisAutoCacheManager.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisAutoCacheManager.java similarity index 86% rename from pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisAutoCacheManager.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisAutoCacheManager.java index 3d0b02bac..3c679c95d 100644 --- a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisAutoCacheManager.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisAutoCacheManager.java @@ -15,10 +15,10 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.cache; +package com.pig4cloud.pigx.common.data.cache; import cn.hutool.core.util.StrUtil; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; +import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.Cache; import org.springframework.data.redis.cache.RedisCache; @@ -53,20 +53,21 @@ public class RedisAutoCacheManager extends RedisCacheManager { if (StrUtil.isBlank(name) || !name.contains(SPLIT_FLAG)) { return super.createRedisCache(name, cacheConfig); } + String[] cacheArray = name.split(SPLIT_FLAG); if (cacheArray.length < CACHE_LENGTH) { return super.createRedisCache(name, cacheConfig); } - String cacheName = cacheArray[0] + ":" + TenantContextHolder.getTenantId(); + if (cacheConfig != null) { - long cacheAge = Long.getLong(cacheArray[1], -1); + long cacheAge = Long.parseLong(cacheArray[1]); cacheConfig = cacheConfig.entryTtl(Duration.ofSeconds(cacheAge)); } - return super.createRedisCache(cacheName, cacheConfig); + return super.createRedisCache(name, cacheConfig); } @Override public Cache getCache(String name) { - return super.getCache(name + ":" + TenantContextHolder.getTenantId()); + return super.getCache(name + SPLIT_FLAG + TenantContextHolder.getTenantId()); } } diff --git a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisCacheAutoConfiguration.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisCacheAutoConfiguration.java similarity index 95% rename from pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisCacheAutoConfiguration.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisCacheAutoConfiguration.java index 4de9ec321..6858ebcc2 100644 --- a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisCacheAutoConfiguration.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisCacheAutoConfiguration.java @@ -15,7 +15,7 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.cache; +package com.pig4cloud.pigx.common.data.cache; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfigureAfter; @@ -75,11 +75,9 @@ public class RedisCacheAutoConfiguration { cacheNames.forEach(it -> cacheConfigMap.put(it, cacheConfiguration)); initialCaches.putAll(cacheConfigMap); } - boolean allowInFlightCacheCreation = true; - boolean enableTransactions = false; RedisAutoCacheManager cacheManager = new RedisAutoCacheManager(redisCacheWriter, cacheConfiguration, - initialCaches, allowInFlightCacheCreation); - cacheManager.setTransactionAware(enableTransactions); + initialCaches, true); + cacheManager.setTransactionAware(false); return this.customizerInvoker.customize(cacheManager); } diff --git a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisCacheManagerConfig.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisCacheManagerConfig.java similarity index 97% rename from pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisCacheManagerConfig.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisCacheManagerConfig.java index 8a020cbd7..bf92ed86b 100644 --- a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisCacheManagerConfig.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisCacheManagerConfig.java @@ -15,7 +15,7 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.cache; +package com.pig4cloud.pigx.common.data.cache; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.cache.CacheManagerCustomizer; diff --git a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisTemplateConfig.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisTemplateConfig.java similarity index 97% rename from pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisTemplateConfig.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisTemplateConfig.java index 554edb082..cf78ebb3b 100644 --- a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisTemplateConfig.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisTemplateConfig.java @@ -15,7 +15,7 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.cache; +package com.pig4cloud.pigx.common.data.cache; import lombok.AllArgsConstructor; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; diff --git a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/datascope/DataScope.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScope.java similarity index 90% rename from pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/datascope/DataScope.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScope.java index f5a5461a6..4fa3c9c63 100644 --- a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/datascope/DataScope.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScope.java @@ -15,11 +15,12 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.core.datascope; +package com.pig4cloud.pigx.common.data.datascope; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -39,7 +40,7 @@ public class DataScope extends HashMap { /** * 具体的数据范围 */ - private List deptIds; + private List deptIds = new ArrayList<>(); /** * 是否只查询本部门 diff --git a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/datascope/DataScopeInterceptor.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeInterceptor.java similarity index 55% rename from pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/datascope/DataScopeInterceptor.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeInterceptor.java index 4862e1bdf..fd96d9f59 100644 --- a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/datascope/DataScopeInterceptor.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeInterceptor.java @@ -15,12 +15,20 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.core.datascope; +package com.pig4cloud.pigx.common.data.datascope; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.util.StrUtil; +import cn.hutool.db.Db; +import cn.hutool.db.Entity; import com.baomidou.mybatisplus.core.toolkit.PluginUtils; import com.baomidou.mybatisplus.extension.handlers.AbstractSqlParserHandler; +import com.pig4cloud.pigx.common.core.constant.SecurityConstants; +import com.pig4cloud.pigx.common.core.exception.CheckedException; +import com.pig4cloud.pigx.common.data.enums.DataScopeTypeEnum; +import com.pig4cloud.pigx.common.security.service.PigxUser; +import com.pig4cloud.pigx.common.security.util.SecurityUtils; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.mapping.BoundSql; @@ -29,26 +37,29 @@ import org.apache.ibatis.mapping.SqlCommandType; import org.apache.ibatis.plugin.*; import org.apache.ibatis.reflection.MetaObject; import org.apache.ibatis.reflection.SystemMetaObject; +import org.springframework.security.core.GrantedAuthority; +import javax.sql.DataSource; import java.sql.Connection; -import java.util.List; -import java.util.Map; -import java.util.Properties; +import java.util.*; +import java.util.stream.Collectors; /** * @author lengleng - * @date 2018/8/30 + * @date 2018/12/26 *

* mybatis 数据权限拦截器 */ @Slf4j +@AllArgsConstructor @Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})}) public class DataScopeInterceptor extends AbstractSqlParserHandler implements Interceptor { + private final DataSource dataSource; @Override public Object intercept(Invocation invocation) throws Throwable { - StatementHandler statementHandler = (StatementHandler) PluginUtils.realTarget(invocation.getTarget()); + StatementHandler statementHandler = PluginUtils.realTarget(invocation.getTarget()); MetaObject metaObject = SystemMetaObject.forObject(statementHandler); this.sqlParser(metaObject); // 先判断是不是SELECT操作 @@ -63,19 +74,57 @@ public class DataScopeInterceptor extends AbstractSqlParserHandler implements In //查找参数中包含DataScope类型的参数 DataScope dataScope = findDataScopeObject(parameterObject); - if (dataScope == null) { return invocation.proceed(); - } else { - String scopeName = dataScope.getScopeName(); - List deptIds = dataScope.getDeptIds(); - if (StrUtil.isNotBlank(scopeName) && CollectionUtil.isNotEmpty(deptIds)) { - String join = CollectionUtil.join(deptIds, ","); - originalSql = "select * from (" + originalSql + ") temp_data_scope where temp_data_scope." + scopeName + " in (" + join + ")"; - metaObject.setValue("delegate.boundSql.sql", originalSql); - } - return invocation.proceed(); } + + String scopeName = dataScope.getScopeName(); + List deptIds = dataScope.getDeptIds(); + // 优先获取赋值数据 + if (CollUtil.isEmpty(deptIds)) { + PigxUser user = SecurityUtils.getUser(); + if (user == null) { + throw new CheckedException("auto datascope, set up security details true"); + } + + List roleIdList = user.getAuthorities() + .stream().map(GrantedAuthority::getAuthority) + .filter(authority -> authority.startsWith(SecurityConstants.ROLE)) + .map(authority -> authority.split("_")[1]) + .collect(Collectors.toList()); + + Entity query = Db.use(dataSource) + .query("SELECT * FROM sys_role where role_id IN (" + CollUtil.join(roleIdList, ",") + ")") + .stream().min(Comparator.comparingInt(o -> o.getInt("ds_type"))).get(); + + Integer dsType = query.getInt("ds_type"); + // 查询全部 + if (DataScopeTypeEnum.ALL.getType() == dsType) { + return invocation.proceed(); + } + // 自定义 + if (DataScopeTypeEnum.CUSTOM.getType() == dsType) { + String dsScope = query.getStr("ds_scope"); + deptIds.addAll(Arrays.stream(dsScope.split(",")) + .map(Integer::parseInt).collect(Collectors.toList())); + } + // 查询本级及其下级 + if (DataScopeTypeEnum.OWN_CHILD_LEVEL.getType() == dsType) { + List deptIdList = Db.use(dataSource) + .findBy("sys_dept_relation", "ancestor", user.getDeptId()) + .stream().map(entity -> entity.getInt("descendant")) + .collect(Collectors.toList()); + deptIds.addAll(deptIdList); + } + // 只查询本级 + if (DataScopeTypeEnum.OWN_LEVEL.getType() == dsType) { + deptIds.add(user.getDeptId()); + } + } + String join = CollectionUtil.join(deptIds, ","); + originalSql = "select * from (" + originalSql + ") temp_data_scope where temp_data_scope." + scopeName + " in (" + join + ")"; + metaObject.setValue("delegate.boundSql.sql", originalSql); + return invocation.proceed(); } /** diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/enums/DataScopeTypeEnum.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/enums/DataScopeTypeEnum.java new file mode 100644 index 000000000..9e243af25 --- /dev/null +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/enums/DataScopeTypeEnum.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.pigx.common.data.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author lengleng + * @date 2018/12/26 + *

+ * 数据权限类型 + */ +@Getter +@AllArgsConstructor +public enum DataScopeTypeEnum { + /** + * 查询全部数据 + */ + ALL(0, "全部"), + + /** + * 自定义 + */ + CUSTOM(1, "自定义"), + + /** + * 本级及子级 + */ + OWN_CHILD_LEVEL(2, "本级及子级"), + + /** + * 本级 + */ + OWN_LEVEL(3, "本级"); + + /** + * 类型 + */ + private final int type; + /** + * 描述 + */ + private final String description; +} diff --git a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/config/MybatisPlusConfigurer.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusConfig.java similarity index 69% rename from pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/config/MybatisPlusConfigurer.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusConfig.java index 9b7c69e48..9c52e5681 100644 --- a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/config/MybatisPlusConfigurer.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusConfig.java @@ -15,73 +15,68 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.act.config; +package com.pig4cloud.pigx.common.data.mybatis; import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.baomidou.mybatisplus.core.parser.ISqlParser; import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; -import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler; import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; -import lombok.extern.slf4j.Slf4j; -import net.sf.jsqlparser.expression.Expression; -import net.sf.jsqlparser.expression.LongValue; +import com.pig4cloud.pigx.common.data.datascope.DataScopeInterceptor; +import com.pig4cloud.pigx.common.data.tenant.PigxTenantHandler; import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import javax.sql.DataSource; import java.util.ArrayList; import java.util.List; /** * @author lengleng - * @date 2018/9/27 - * mybatis-plus 配置 + * @date 2017/10/29 */ -@Slf4j @Configuration -@MapperScan("com.pig4cloud.pigx.act.mapper") -public class MybatisPlusConfigurer { +@MapperScan("com.pig4cloud.pigx.*.mapper") +public class MybatisPlusConfig { + /** * 分页插件 * * @return PaginationInterceptor */ @Bean + @ConditionalOnMissingBean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); List sqlParserList = new ArrayList<>(); TenantSqlParser tenantSqlParser = new TenantSqlParser(); - tenantSqlParser.setTenantHandler(new TenantHandler() { - @Override - public Expression getTenantId() { - Integer tenantId = TenantContextHolder.getTenantId(); - log.debug("当前租户为 >> {}", tenantId); - return new LongValue(tenantId); - } - - @Override - public String getTenantIdColumn() { - return "tenant_id"; - } - - @Override - public boolean doTableFilter(String tableName) { - return false; - } - }); + tenantSqlParser.setTenantHandler(new PigxTenantHandler()); sqlParserList.add(tenantSqlParser); paginationInterceptor.setSqlParserList(sqlParserList); return paginationInterceptor; } + /** + * 数据权限插件 + * + * @param dataSource 数据源 + * @return DataScopeInterceptor + */ + @Bean + @ConditionalOnMissingBean + public DataScopeInterceptor dataScopeInterceptor(DataSource dataSource) { + return new DataScopeInterceptor(dataSource); + } + /** * 逻辑删除插件 * * @return LogicSqlInjector */ @Bean + @ConditionalOnMissingBean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); } diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignTenantConfiguration.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxFeignTenantConfiguration.java similarity index 96% rename from pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignTenantConfiguration.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxFeignTenantConfiguration.java index 62592da3b..d5d6dbde8 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignTenantConfiguration.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxFeignTenantConfiguration.java @@ -15,7 +15,7 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.security.feign; +package com.pig4cloud.pigx.common.data.tenant; import feign.RequestInterceptor; import org.springframework.context.annotation.Bean; diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignTenantInterceptor.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxFeignTenantInterceptor.java similarity index 92% rename from pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignTenantInterceptor.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxFeignTenantInterceptor.java index 4e0d90c70..fda44d470 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignTenantInterceptor.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxFeignTenantInterceptor.java @@ -15,10 +15,9 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.security.feign; +package com.pig4cloud.pigx.common.data.tenant; import com.pig4cloud.pigx.common.core.constant.CommonConstants; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; import feign.RequestInterceptor; import feign.RequestTemplate; import lombok.extern.slf4j.Slf4j; diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java new file mode 100644 index 000000000..82f1d88a8 --- /dev/null +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.pigx.common.data.tenant; + +import cn.hutool.core.util.ArrayUtil; +import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler; +import lombok.extern.slf4j.Slf4j; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.LongValue; + +/** + * @author lengleng + * @date 2018-12-26 + *

+ * 租户维护处理器 + */ +@Slf4j +public class PigxTenantHandler implements TenantHandler { + private static final String[] TENANT_TABLES = new String[]{"sys_user", "sys_role", "sys_dept", + "sys_log", "sys_social_details", "sys_dict", "sys_log", "oa_leave_bill"}; + + /** + * 获取租户值 + * + * @return 租户值 + */ + @Override + public Expression getTenantId() { + Integer tenantId = TenantContextHolder.getTenantId(); + log.debug("当前租户为 >> {}", tenantId); + return new LongValue(tenantId); + } + + /** + * 获取租户字段名 + * + * @return 租户字段名 + */ + @Override + public String getTenantIdColumn() { + return "tenant_id"; + } + + /** + * 根据表名判断是否进行过滤 + * + * @param tableName 表名 + * @return 是否进行过滤 + */ + @Override + public boolean doTableFilter(String tableName) { + return !ArrayUtil.contains(TENANT_TABLES, tableName); + } +} diff --git a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/util/TenantContextHolder.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolder.java similarity index 96% rename from pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/util/TenantContextHolder.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolder.java index 0679f76ef..785ea86c5 100644 --- a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/util/TenantContextHolder.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolder.java @@ -15,7 +15,7 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.core.util; +package com.pig4cloud.pigx.common.data.tenant; import com.alibaba.ttl.TransmittableThreadLocal; import lombok.experimental.UtilityClass; diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/filter/TenantContextHolderFilter.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolderFilter.java similarity index 95% rename from pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/filter/TenantContextHolderFilter.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolderFilter.java index b72cfd21d..6d2ab51e8 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/filter/TenantContextHolderFilter.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolderFilter.java @@ -15,11 +15,10 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.security.filter; +package com.pig4cloud.pigx.common.data.tenant; import cn.hutool.core.util.StrUtil; import com.pig4cloud.pigx.common.core.constant.CommonConstants; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; import lombok.extern.slf4j.Slf4j; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; diff --git a/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories new file mode 100644 index 000000000..5de28f3dc --- /dev/null +++ b/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories @@ -0,0 +1,7 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.pig4cloud.pigx.common.data.cache.RedisTemplateConfig,\ + com.pig4cloud.pigx.common.data.cache.RedisCacheManagerConfig,\ + com.pig4cloud.pigx.common.data.cache.RedisCacheAutoConfiguration,\ + com.pig4cloud.pigx.common.data.tenant.TenantContextHolderFilter,\ + com.pig4cloud.pigx.common.data.tenant.PigxFeignTenantConfiguration,\ + com.pig4cloud.pigx.common.data.mybatis.MybatisPlusConfig \ No newline at end of file diff --git a/pigx-common/pigx-common-gateway/pom.xml b/pigx-common/pigx-common-gateway/pom.xml index 0068db85e..5e5320340 100644 --- a/pigx-common/pigx-common-gateway/pom.xml +++ b/pigx-common/pigx-common-gateway/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 pigx-common-gateway @@ -36,7 +36,7 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 org.springframework.cloud diff --git a/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/support/RedisRouteDefinitionWriter.java b/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/support/RedisRouteDefinitionWriter.java index e2ee5be47..f2a5f4d1f 100644 --- a/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/support/RedisRouteDefinitionWriter.java +++ b/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/support/RedisRouteDefinitionWriter.java @@ -26,6 +26,7 @@ import org.springframework.cloud.gateway.route.RouteDefinition; import org.springframework.cloud.gateway.route.RouteDefinitionRepository; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.stereotype.Component; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -51,6 +52,7 @@ public class RedisRouteDefinitionWriter implements RouteDefinitionRepository { RouteDefinitionVo vo = new RouteDefinitionVo(); BeanUtils.copyProperties(r, vo); log.info("保存路由信息{}", vo); + redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.opsForHash().put(CommonConstants.ROUTE_KEY, r.getId(), vo); return Mono.empty(); }); @@ -60,6 +62,7 @@ public class RedisRouteDefinitionWriter implements RouteDefinitionRepository { public Mono delete(Mono routeId) { routeId.subscribe(id -> { log.info("删除路由信息{}", id); + redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.opsForHash().delete(CommonConstants.ROUTE_KEY, id); }); return Mono.empty(); @@ -73,6 +76,7 @@ public class RedisRouteDefinitionWriter implements RouteDefinitionRepository { */ @Override public Flux getRouteDefinitions() { + redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(RouteDefinitionVo.class)); List values = redisTemplate.opsForHash().values(CommonConstants.ROUTE_KEY); List definitionList = new ArrayList<>(); diff --git a/pigx-common/pigx-common-job/pom.xml b/pigx-common/pigx-common-job/pom.xml index b3a7b2a4a..6277445f8 100644 --- a/pigx-common/pigx-common-job/pom.xml +++ b/pigx-common/pigx-common-job/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 pigx-common-job diff --git a/pigx-common/pigx-common-log/pom.xml b/pigx-common/pigx-common-log/pom.xml index 52cd3863b..3ed585fcf 100644 --- a/pigx-common/pigx-common-log/pom.xml +++ b/pigx-common/pigx-common-log/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 pigx-common-log @@ -38,13 +38,13 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 com.pig4cloud pigx-upms-api - 2.0.0 + 2.1.0 diff --git a/pigx-common/pigx-common-minio/pom.xml b/pigx-common/pigx-common-minio/pom.xml new file mode 100755 index 000000000..c503c8149 --- /dev/null +++ b/pigx-common/pigx-common-minio/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + com.pig4cloud + pigx-common + 2.1.0 + + + pigx-common-minio + jar + + pigx 文件系统依赖 + + + + io.minio + minio + ${minio.version} + + + \ No newline at end of file diff --git a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/MybatisPlusConfigurer.java b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/MinioAutoConfiguration.java old mode 100644 new mode 100755 similarity index 53% rename from pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/MybatisPlusConfigurer.java rename to pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/MinioAutoConfiguration.java index 23b314c3b..2ba6233b4 --- a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/MybatisPlusConfigurer.java +++ b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/MinioAutoConfiguration.java @@ -15,39 +15,34 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.codegen.config; +package com.pig4cloud.common.minio; -import com.baomidou.mybatisplus.core.injector.ISqlInjector; -import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector; -import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; -import org.mybatis.spring.annotation.MapperScan; +import com.pig4cloud.common.minio.service.MinioTemplate; +import lombok.AllArgsConstructor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; /** + * minio 自动配置类 + * * @author lengleng - * @date 2017/10/29 */ -@Configuration -@MapperScan("com.pig4cloud.pigx.codegen.mapper") -public class MybatisPlusConfigurer { - /** - * 分页插件 - * - * @return PaginationInterceptor - */ +@AllArgsConstructor +@EnableConfigurationProperties({MinioProperties.class}) +public class MinioAutoConfiguration { + private final MinioProperties properties; + @Bean - public PaginationInterceptor paginationInterceptor() { - return new PaginationInterceptor(); + @ConditionalOnMissingBean(MinioTemplate.class) + @ConditionalOnProperty(name = "minio.url") + MinioTemplate template() { + return new MinioTemplate( + properties.getUrl(), + properties.getAccessKey(), + properties.getSecretKey() + ); } - /** - * 逻辑删除插件 - * - * @return LogicSqlInjector - */ - @Bean - public ISqlInjector sqlInjector() { - return new LogicSqlInjector(); - } } diff --git a/pigx-visual/pigx-daemon/src/main/java/com/pig4cloud/pigx/daemon/config/MybatisPlusConfigurer.java b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/MinioProperties.java old mode 100644 new mode 100755 similarity index 55% rename from pigx-visual/pigx-daemon/src/main/java/com/pig4cloud/pigx/daemon/config/MybatisPlusConfigurer.java rename to pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/MinioProperties.java index d74149358..664cd813c --- a/pigx-visual/pigx-daemon/src/main/java/com/pig4cloud/pigx/daemon/config/MybatisPlusConfigurer.java +++ b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/MinioProperties.java @@ -15,39 +15,34 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.daemon.config; +package com.pig4cloud.common.minio; -import com.baomidou.mybatisplus.core.injector.ISqlInjector; -import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector; -import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.context.annotation.Bean; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; /** + * minio 配置信息 + * * @author lengleng - * @date 2017/10/29 */ +@Data @Configuration -@MapperScan("com.pig4cloud.pigx.daemon.mapper") -public class MybatisPlusConfigurer { +@ConfigurationProperties(prefix = "minio") +public class MinioProperties { /** - * 分页插件 - * - * @return PaginationInterceptor + * minio 服务地址 http://ip:port */ - @Bean - public PaginationInterceptor paginationInterceptor() { - return new PaginationInterceptor(); - } + private String url; /** - * 逻辑删除插件 - * - * @return LogicSqlInjector + * 用户名 */ - @Bean - public ISqlInjector sqlInjector() { - return new LogicSqlInjector(); - } + private String accessKey; + + /** + * 密码 + */ + private String secretKey; + } diff --git a/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/http/MinioEndpoint.java b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/http/MinioEndpoint.java new file mode 100755 index 000000000..1952d6bfd --- /dev/null +++ b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/http/MinioEndpoint.java @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.common.minio.http; + +import com.pig4cloud.common.minio.service.MinioTemplate; +import com.pig4cloud.common.minio.vo.MinioItem; +import com.pig4cloud.common.minio.vo.MinioObject; +import io.minio.messages.Bucket; +import lombok.AllArgsConstructor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * minio 对外提供服务端点 + * + * @author lengleng + *

+ * minio.endpoint.enable + */ +@ConditionalOnProperty(name = "minio.endpoint.enable", havingValue = "true") +@RestController +@AllArgsConstructor +@RequestMapping("${minio.endpoint.name:/minio}") +public class MinioEndpoint { + private final MinioTemplate template; + + /** + * Bucket Endpoints + */ + @PostMapping("/bucket/{bucketName}") + public Bucket createBucker(@PathVariable String bucketName) throws Exception { + + template.createBucket(bucketName); + return template.getBucket(bucketName).get(); + + } + + @GetMapping("/bucket") + public List getBuckets() throws Exception { + return template.getAllBuckets(); + } + + @GetMapping("/bucket/{bucketName}") + public Bucket getBucket(@PathVariable String bucketName) throws Exception { + return template.getBucket(bucketName).orElseThrow(() -> new IllegalArgumentException("Bucket Name not found!")); + } + + @DeleteMapping("/bucket/{bucketName}") + @ResponseStatus(HttpStatus.ACCEPTED) + public void deleteBucket(@PathVariable String bucketName) throws Exception { + + template.removeBucket(bucketName); + } + + /** + * Object Endpoints + */ + + @PostMapping("/object/{bucketName}") + public MinioObject createObject(@RequestBody MultipartFile object, @PathVariable String bucketName) throws Exception { + String name = object.getOriginalFilename(); + template.putObject(bucketName, name, object.getInputStream(), object.getSize(), object.getContentType()); + return new MinioObject(template.getObjectInfo(bucketName, name)); + + } + + @PostMapping("/object/{bucketName}/{objectName}") + public MinioObject createObject(@RequestBody MultipartFile object, @PathVariable String bucketName, @PathVariable String objectName) throws Exception { + template.putObject(bucketName, objectName, object.getInputStream(), object.getSize(), object.getContentType()); + return new MinioObject(template.getObjectInfo(bucketName, objectName)); + + } + + + @GetMapping("/object/{bucketName}/{objectName}") + public List filterObject(@PathVariable String bucketName, @PathVariable String objectName) throws Exception { + + return template.getAllObjectsByPrefix(bucketName, objectName, true); + + } + + @GetMapping("/object/{bucketName}/{objectName}/{expires}") + public Map getObject(@PathVariable String bucketName, @PathVariable String objectName, @PathVariable Integer expires) throws Exception { + Map responseBody = new HashMap<>(8); + // Put Object info + responseBody.put("bucket", bucketName); + responseBody.put("object", objectName); + responseBody.put("url", template.getObjectURL(bucketName, objectName, expires)); + responseBody.put("expires", expires); + return responseBody; + } + + @DeleteMapping("/object/{bucketName}/{objectName}/") + @ResponseStatus(HttpStatus.ACCEPTED) + public void deleteObject(@PathVariable String bucketName, @PathVariable String objectName) throws Exception { + + template.removeObject(bucketName, objectName); + } + + +} diff --git a/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/service/MinioTemplate.java b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/service/MinioTemplate.java new file mode 100755 index 000000000..396b82f90 --- /dev/null +++ b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/service/MinioTemplate.java @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.common.minio.service; + +import com.pig4cloud.common.minio.vo.MinioItem; +import io.minio.MinioClient; +import io.minio.ObjectStat; +import io.minio.Result; +import io.minio.messages.Bucket; +import io.minio.messages.Item; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +/** + * minio 交互类 + * + * @author lengleng + */ +@NoArgsConstructor +@AllArgsConstructor +public class MinioTemplate { + + private String endpoint; + private String accessKey; + private String secretKey; + + + /** + * 创建bucket + * + * @param bucketName bucket名称 + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#makeBucket + */ + public void createBucket(String bucketName) throws Exception { + MinioClient client = getMinioClient(); + if (!client.bucketExists(bucketName)) { + client.makeBucket(bucketName); + } + } + + /** + * 获取全部bucket + *

+ * https://docs.minio.io/cn/java-client-api-reference.html#listBuckets + */ + public List getAllBuckets() throws Exception { + return getMinioClient().listBuckets(); + } + + /** + * @param bucketName bucket名称 + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#listBuckets + */ + public Optional getBucket(String bucketName) throws Exception { + return getMinioClient().listBuckets().stream().filter(b -> b.name().equals(bucketName)).findFirst(); + } + + /** + * @param bucketName bucket名称 + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#removeBucket + */ + public void removeBucket(String bucketName) throws Exception { + getMinioClient().removeBucket(bucketName); + } + + /** + * 根据文件前置查询文件 + * + * @param bucketName bucket名称 + * @param prefix 前缀 + * @param recursive 是否递归查询 + * @return + * @throws Exception + */ + public List getAllObjectsByPrefix(String bucketName, String prefix, boolean recursive) throws Exception { + List objectList = new ArrayList(); + Iterable> objectsIterator = getMinioClient() + .listObjects(bucketName, prefix, recursive); + + while (objectsIterator.iterator().hasNext()) { + objectList.add(objectsIterator.iterator().next().get()); + } + return objectList; + } + + /** + * 获取文件外链 + * + * @param bucketName bucket名称 + * @param objectName 文件名称 + * @param expires 过期时间 <=7 + * @return url + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#getObject + */ + public String getObjectURL(String bucketName, String objectName, Integer expires) throws Exception { + return getMinioClient().presignedGetObject(bucketName, objectName, expires); + } + + /** + * 获取文件 + * + * @param bucketName bucket名称 + * @param objectName 文件名称 + * @return 二进制流 + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#getObject + */ + public InputStream getObject(String bucketName, String objectName) throws Exception { + return getMinioClient().getObject(bucketName, objectName); + } + + /** + * 上传文件 + * + * @param bucketName bucket名称 + * @param objectName 文件名称 + * @param stream 文件流 + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#putObject + */ + public void putObject(String bucketName, String objectName, InputStream stream) throws Exception { + getMinioClient().putObject(bucketName, objectName, stream, stream.available(), "application/octet-stream"); + } + + /** + * 上传文件 + * + * @param bucketName bucket名称 + * @param objectName 文件名称 + * @param stream 文件流 + * @param size 大小 + * @param contextType 类型 + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#putObject + */ + public void putObject(String bucketName, String objectName, InputStream stream, long size, String contextType) throws Exception { + getMinioClient().putObject(bucketName, objectName, stream, size, contextType); + } + + /** + * 获取文件信息 + * + * @param bucketName bucket名称 + * @param objectName 文件名称 + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#statObject + */ + public ObjectStat getObjectInfo(String bucketName, String objectName) throws Exception { + return getMinioClient().statObject(bucketName, objectName); + } + + /** + * 删除文件 + * + * @param bucketName bucket名称 + * @param objectName 文件名称 + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#removeObject + */ + public void removeObject(String bucketName, String objectName) throws Exception { + getMinioClient().removeObject(bucketName, objectName); + } + + + /** + * 获取minio 原生客户端 + * + * @return + * @throws Exception + */ + public MinioClient getMinioClient() throws Exception { + return new MinioClient(endpoint, accessKey, secretKey); + } +} diff --git a/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/vo/MinioItem.java b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/vo/MinioItem.java new file mode 100755 index 000000000..fcb9b0644 --- /dev/null +++ b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/vo/MinioItem.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.common.minio.vo; + +import io.minio.messages.Item; +import io.minio.messages.Owner; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.Date; + +/** + * minio 桶中的对象信息 + * + * @author lengleng + */ +@Data +@AllArgsConstructor +public class MinioItem { + + private String objectName; + private Date lastModified; + private String etag; + private Long size; + private String storageClass; + private Owner owner; + private String type; + + public MinioItem(Item item) { + this.objectName = item.objectName(); + this.lastModified = item.lastModified(); + this.etag = item.etag(); + this.size = (long) item.size(); + this.storageClass = item.storageClass(); + this.owner = item.owner(); + this.type = item.isDir() ? "directory" : "file"; + } +} diff --git a/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/vo/MinioObject.java b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/vo/MinioObject.java new file mode 100755 index 000000000..c4fd4f85c --- /dev/null +++ b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/vo/MinioObject.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.common.minio.vo; + +import io.minio.ObjectStat; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.Date; + + +/** + * 存储对象的元数据 + * + * @author lengleng + */ +@Data +@AllArgsConstructor +public class MinioObject { + private String bucketName; + private String name; + private Date createdTime; + private Long length; + private String etag; + private String contentType; + private String matDesc; + + public MinioObject(ObjectStat os) { + this.bucketName = os.bucketName(); + this.name = os.name(); + this.createdTime = os.createdTime(); + this.length = os.length(); + this.etag = os.etag(); + this.contentType = os.contentType(); + this.matDesc = os.matDesc(); + } + +} diff --git a/pigx-common/pigx-common-minio/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-minio/src/main/resources/META-INF/spring.factories new file mode 100755 index 000000000..b67a03493 --- /dev/null +++ b/pigx-common/pigx-common-minio/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.pig4cloud.common.minio.MinioAutoConfiguration \ No newline at end of file diff --git a/pigx-common/pigx-common-security/pom.xml b/pigx-common/pigx-common-security/pom.xml index 9f43c2c22..73b3d31b4 100644 --- a/pigx-common/pigx-common-security/pom.xml +++ b/pigx-common/pigx-common-security/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 pigx-common-security @@ -38,7 +38,7 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 @@ -49,7 +49,7 @@ com.pig4cloud pigx-upms-api - 2.0.0 + 2.1.0 diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxPreAuthenticationChecks.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxPreAuthenticationChecks.java new file mode 100644 index 000000000..f46e7c4ea --- /dev/null +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxPreAuthenticationChecks.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.pigx.common.security.component; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.support.MessageSourceAccessor; +import org.springframework.security.authentication.AccountExpiredException; +import org.springframework.security.authentication.DisabledException; +import org.springframework.security.authentication.LockedException; +import org.springframework.security.core.SpringSecurityMessageSource; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsChecker; + +/** + * @author lengleng + * @date 2019-01-02 + */ +@Slf4j +public class PigxPreAuthenticationChecks implements UserDetailsChecker { + private MessageSourceAccessor messages = SpringSecurityMessageSource.getAccessor(); + + @Override + public void check(UserDetails user) { + if (!user.isAccountNonLocked()) { + log.debug("User account is locked"); + + throw new LockedException(messages.getMessage( + "AbstractUserDetailsAuthenticationProvider.locked", + "User account is locked")); + } + + if (!user.isEnabled()) { + log.debug("User account is disabled"); + + throw new DisabledException(messages.getMessage( + "AbstractUserDetailsAuthenticationProvider.disabled", + "User is disabled")); + } + + if (!user.isAccountNonExpired()) { + log.debug("User account is expired"); + + throw new AccountExpiredException(messages.getMessage( + "AbstractUserDetailsAuthenticationProvider.expired", + "User account has expired")); + } + } +} diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/ResourceAuthExceptionEntryPoint.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/ResourceAuthExceptionEntryPoint.java index 69f5b54c2..0bc6dde08 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/ResourceAuthExceptionEntryPoint.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/ResourceAuthExceptionEntryPoint.java @@ -51,9 +51,9 @@ public class ResourceAuthExceptionEntryPoint implements AuthenticationEntryPoint response.setCharacterEncoding(CommonConstants.UTF8); response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE); R result = new R<>(); - result.setCode(HttpStatus.HTTP_UNAUTHORIZED); + result.setCode(CommonConstants.FAIL); if (authException != null) { - result.setMsg("error"); + result.setMsg(authException.getMessage()); result.setData(authException.getMessage()); } response.setStatus(HttpStatus.HTTP_UNAUTHORIZED); diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationFilter.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationFilter.java index 2b0230ac1..db6d75a0d 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationFilter.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationFilter.java @@ -86,7 +86,6 @@ public class MobileAuthenticationFilter extends AbstractAuthenticationProcessing authResult = this.getAuthenticationManager().authenticate(mobileAuthenticationToken); logger.debug("Authentication success: " + authResult); - eventPublisher.publishAuthenticationSuccess(authResult); SecurityContextHolder.getContext().setAuthentication(authResult); } catch (Exception failed) { diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationProvider.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationProvider.java index 4a855deca..4896835af 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationProvider.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationProvider.java @@ -17,6 +17,7 @@ package com.pig4cloud.pigx.common.security.mobile; +import com.pig4cloud.pigx.common.security.component.PigxPreAuthenticationChecks; import com.pig4cloud.pigx.common.security.service.PigxUserDetailsService; import lombok.Getter; import lombok.Setter; @@ -28,6 +29,7 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.SpringSecurityMessageSource; import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsChecker; /** * @author lengleng @@ -38,6 +40,8 @@ import org.springframework.security.core.userdetails.UserDetails; @Slf4j public class MobileAuthenticationProvider implements AuthenticationProvider { private MessageSourceAccessor messages = SpringSecurityMessageSource.getAccessor(); + private UserDetailsChecker detailsChecker = new PigxPreAuthenticationChecks(); + @Getter @Setter private PigxUserDetailsService userDetailsService; @@ -52,11 +56,13 @@ public class MobileAuthenticationProvider implements AuthenticationProvider { log.debug("Authentication failed: no credentials provided"); throw new BadCredentialsException(messages.getMessage( - "AbstractUserDetailsAuthenticationProvider.noopBindAccount", - "Noop Bind Account")); - + "AbstractUserDetailsAuthenticationProvider.noopBindAccount", + "Noop Bind Account")); } + // 检查账号状态 + detailsChecker.check(userDetails); + MobileAuthenticationToken authenticationToken = new MobileAuthenticationToken(userDetails, userDetails.getAuthorities()); authenticationToken.setDetails(mobileAuthenticationToken.getDetails()); return authenticationToken; diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java index c7410ef58..15d00bffc 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java @@ -27,6 +27,8 @@ import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.util.R; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.userdetails.UserDetails; @@ -48,6 +50,7 @@ import java.util.Set; @AllArgsConstructor public class PigxUserDetailsServiceImpl implements PigxUserDetailsService { private final RemoteUserService remoteUserService; + private final CacheManager cacheManager; /** * 用户密码登录 @@ -58,8 +61,15 @@ public class PigxUserDetailsServiceImpl implements PigxUserDetailsService { */ @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + Cache cache = cacheManager.getCache("user_details"); + if (cache != null && cache.get(username) != null) { + return (PigxUser) cache.get(username).get(); + } + R result = remoteUserService.info(username, SecurityConstants.FROM_IN); - return getUserDetails(result); + UserDetails userDetails = getUserDetails(result); + cache.put(username, userDetails); + return userDetails; } @@ -96,12 +106,12 @@ public class PigxUserDetailsServiceImpl implements PigxUserDetailsService { } Collection authorities - = AuthorityUtils.createAuthorityList(dbAuthsSet.toArray(new String[0])); + = AuthorityUtils.createAuthorityList(dbAuthsSet.toArray(new String[0])); SysUser user = info.getSysUser(); - boolean enabled = StrUtil.equals(user.getDelFlag(), CommonConstants.STATUS_NORMAL); + boolean enabled = StrUtil.equals(user.getLockFlag(), CommonConstants.STATUS_NORMAL); // 构造security用户 return new PigxUser(user.getUserId(), user.getDeptId(), user.getTenantId(), user.getUsername(), SecurityConstants.BCRYPT + user.getPassword(), enabled, - true, true, !CommonConstants.STATUS_LOCK.equals(user.getLockFlag()), authorities); + true, true, !CommonConstants.STATUS_LOCK.equals(user.getLockFlag()), authorities); } } diff --git a/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories index 72cd2a9cd..b13fe1565 100644 --- a/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories +++ b/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories @@ -1,5 +1,3 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - com.pig4cloud.pigx.common.security.filter.TenantContextHolderFilter,\ com.pig4cloud.pigx.common.security.feign.PigxFeignClientConfiguration,\ - com.pig4cloud.pigx.common.security.feign.PigxFeignTenantConfiguration,\ com.pig4cloud.pigx.common.security.service.PigxUserDetailsServiceImpl diff --git a/pigx-common/pigx-common-swagger/pom.xml b/pigx-common/pigx-common-swagger/pom.xml index 725acf8d6..f2a3502ae 100644 --- a/pigx-common/pigx-common-swagger/pom.xml +++ b/pigx-common/pigx-common-swagger/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 pigx-common-swagger diff --git a/pigx-common/pigx-common-transaction/pom.xml b/pigx-common/pigx-common-transaction/pom.xml index 9e67e8703..18b484a25 100644 --- a/pigx-common/pigx-common-transaction/pom.xml +++ b/pigx-common/pigx-common-transaction/pom.xml @@ -5,7 +5,7 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 pigx-common-transaction @@ -17,7 +17,7 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 diff --git a/pigx-common/pom.xml b/pigx-common/pom.xml index de4b26fa7..bbe24ac1d 100644 --- a/pigx-common/pom.xml +++ b/pigx-common/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx - 2.0.0 + 2.1.0 pigx-common @@ -33,11 +33,12 @@ pigx 公共聚合模块 - pigx-common-cache pigx-common-core + pigx-common-data pigx-common-gateway pigx-common-job pigx-common-log + pigx-common-minio pigx-common-security pigx-common-swagger pigx-common-transaction diff --git a/pigx-config/pom.xml b/pigx-config/pom.xml index bd07d985b..ec3912059 100644 --- a/pigx-config/pom.xml +++ b/pigx-config/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx - 2.0.0 + 2.1.0 pigx-config diff --git a/pigx-config/src/main/resources/config/pigx-auth-dev.yml b/pigx-config/src/main/resources/config/pigx-auth-dev.yml index e1f78069c..c00ab0548 100644 --- a/pigx-config/src/main/resources/config/pigx-auth-dev.yml +++ b/pigx-config/src/main/resources/config/pigx-auth-dev.yml @@ -5,7 +5,7 @@ spring: driver-class-name: com.mysql.cj.jdbc.Driver username: root password: root - url: jdbc:mysql://pigx-mysql:3306/pigxx?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false + url: jdbc:mysql://pigx-mysql:3306/pigxx?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8 freemarker: allow-request-override: false allow-session-override: false diff --git a/pigx-config/src/main/resources/config/pigx-upms-biz-dev.yml b/pigx-config/src/main/resources/config/pigx-upms-biz-dev.yml index 27883ad06..c944f8ee2 100644 --- a/pigx-config/src/main/resources/config/pigx-upms-biz-dev.yml +++ b/pigx-config/src/main/resources/config/pigx-upms-biz-dev.yml @@ -33,6 +33,13 @@ swagger: description: 'read all' - scope: 'write' description: 'access all' + +# 文件系统 +minio: + url: http://139.224.200.249:9090 + access-key: lengleng + secret-key: lengleng + # Logger Config logging: level: diff --git a/pigx-eureka/pom.xml b/pigx-eureka/pom.xml index 64622473f..2307b3d86 100644 --- a/pigx-eureka/pom.xml +++ b/pigx-eureka/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx - 2.0.0 + 2.1.0 pigx-eureka diff --git a/pigx-gateway/pom.xml b/pigx-gateway/pom.xml index 0b52802d8..327f8cbfe 100644 --- a/pigx-gateway/pom.xml +++ b/pigx-gateway/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx - 2.0.0 + 2.1.0 pigx-gateway @@ -46,7 +46,7 @@ com.pig4cloud pigx-common-gateway - 2.0.0 + 2.1.0 @@ -63,13 +63,12 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 - com.pig4cloud - pigx-common-cache - 2.0.0 + org.springframework.boot + spring-boot-starter-data-redis diff --git a/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/ValidateCodeGatewayFilter.java b/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/ValidateCodeGatewayFilter.java index 63a8a0e2c..7c7f4ee6d 100644 --- a/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/ValidateCodeGatewayFilter.java +++ b/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/ValidateCodeGatewayFilter.java @@ -61,13 +61,13 @@ public class ValidateCodeGatewayFilter extends AbstractGatewayFilterFactory { return chain.filter(exchange); } - // 终端设置不校验, 直接向下执行(1. 从请求参数中获取 2.从header取) - String clientId = request.getQueryParams().getFirst("client_id"); - if (StrUtil.isNotBlank(clientId) - && filterIgnorePropertiesConfig.getClients().contains(clientId)) { + // 刷新token,直接向下执行 + String grantType = request.getQueryParams().getFirst("grant_type"); + if (StrUtil.equals(SecurityConstants.REFRESH_TOKEN, grantType)) { return chain.filter(exchange); } + // 终端设置不校验, 直接向下执行 try { String[] clientInfos = WebUtils.getClientId(request); if (filterIgnorePropertiesConfig.getClients().contains(clientInfos[0])) { @@ -83,7 +83,7 @@ public class ValidateCodeGatewayFilter extends AbstractGatewayFilterFactory { return response.writeWith(Mono.just(response.bufferFactory() .wrap(objectMapper.writeValueAsBytes( R.builder().msg(e.getMessage()) - .code(CommonConstant.FAIL).build())))); + .code(CommonConstants.FAIL).build())))); } catch (JsonProcessingException e1) { log.error("对象输出异常", e1); } diff --git a/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/handler/HystrixFallbackHandler.java b/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/handler/HystrixFallbackHandler.java index e5ad57d4e..f8aae5b1f 100644 --- a/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/handler/HystrixFallbackHandler.java +++ b/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/handler/HystrixFallbackHandler.java @@ -17,7 +17,7 @@ package com.pig4cloud.pigx.gateway.handler; -import com.pig4cloud.pigx.common.core.constant.CommonConstant; +import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.util.R; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; @@ -51,7 +51,7 @@ public class HystrixFallbackHandler implements HandlerFunction { .contentType(MediaType.APPLICATION_JSON_UTF8) .body(BodyInserters.fromObject(R.builder() .msg("服务异常") - .code(CommonConstant.FAIL) + .code(CommonConstants.FAIL) .build())); } } diff --git a/pigx-upms/pigx-upms-api/pom.xml b/pigx-upms/pigx-upms-api/pom.xml index dbf07ac5a..465107410 100644 --- a/pigx-upms/pigx-upms-api/pom.xml +++ b/pigx-upms/pigx-upms-api/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-upms - 2.0.0 + 2.1.0 pigx-upms-api @@ -38,7 +38,13 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 + + + + com.baomidou + mybatis-plus-extension + ${mybatis-plus.version} diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/UserInfo.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/UserInfo.java index f7a7e6072..c0f0df0e6 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/UserInfo.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/UserInfo.java @@ -21,7 +21,6 @@ package com.pig4cloud.pigx.admin.api.dto; import com.pig4cloud.pigx.admin.api.entity.SysUser; import lombok.Data; -import lombok.ToString; import java.io.Serializable; diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRole.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRole.java index d5314ba0f..9cf07859b 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRole.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRole.java @@ -28,6 +28,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.io.Serializable; import java.time.LocalDateTime; @@ -58,6 +59,11 @@ public class SysRole extends Model { @NotBlank(message = "角色描述 不能为空") private String roleDesc; + @NotNull(message = "数据权限类型 不能为空") + private Integer dsType; + + private String dsScope; + private LocalDateTime createTime; private LocalDateTime updateTime; /** diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java index 3351cd8bf..9b2689e41 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java @@ -37,19 +37,17 @@ public interface RemoteTokenService { * 分页查询token 信息 * * @param params 分页参数 - * @param from 内部调用标志 * @return page */ @PostMapping("/token/page") - R getTokenPage(@RequestBody Map params, @RequestHeader(SecurityConstants.FROM) String from); + R getTokenPage(@RequestBody Map params,@RequestHeader(SecurityConstants.FROM) String from); /** * 删除token * * @param token token - * @param from 调用标志 * @return */ @DeleteMapping("/token/{token}") - R removeTokenById(@PathVariable("token") String token, @RequestHeader(SecurityConstants.FROM) String from); + R removeTokenById(@PathVariable("token") String token,@RequestHeader(SecurityConstants.FROM) String from); } diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/fallback/RemoteTokenServiceFallbackImpl.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/fallback/RemoteTokenServiceFallbackImpl.java index 1704621e6..a57ad391b 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/fallback/RemoteTokenServiceFallbackImpl.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/fallback/RemoteTokenServiceFallbackImpl.java @@ -54,7 +54,7 @@ public class RemoteTokenServiceFallbackImpl implements RemoteTokenService { * 删除token * * @param token - * @param from + * @param from 内部调用标志 * @return */ @Override diff --git a/pigx-upms/pigx-upms-biz/pom.xml b/pigx-upms/pigx-upms-biz/pom.xml index 93f60513c..932a53c26 100644 --- a/pigx-upms/pigx-upms-biz/pom.xml +++ b/pigx-upms/pigx-upms-biz/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-upms - 2.0.0 + 2.1.0 pigx-upms-biz @@ -37,25 +37,36 @@ com.pig4cloud pigx-upms-api - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-log - 2.0.0 + 2.1.0 + + + + mysql + mysql-connector-java + ${mysql.connector.version} - com.pig4cloud - pigx-common-cache - 2.0.0 + pigx-common-data + 2.1.0 com.pig4cloud pigx-common-swagger - 2.0.0 + 2.1.0 + + + + com.pig4cloud + pigx-common-minio + 2.1.0 @@ -71,13 +82,13 @@ com.pig4cloud pigx-common-security - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-gateway - 2.0.0 + 2.1.0 diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/MybatisPlusConfigurer.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/MybatisPlusConfigurer.java deleted file mode 100644 index 04ddf2708..000000000 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/MybatisPlusConfigurer.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * - * Copyright (c) 2018-2025, lengleng All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * Neither the name of the pig4cloud.com developer nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * Author: lengleng (wangiegie@gmail.com) - * - */ - -package com.pig4cloud.pigx.admin.config; - -import cn.hutool.core.util.ArrayUtil; -import com.baomidou.mybatisplus.core.injector.ISqlInjector; -import com.baomidou.mybatisplus.core.parser.ISqlParser; -import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector; -import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; -import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler; -import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser; -import com.pig4cloud.pigx.common.core.datascope.DataScopeInterceptor; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; -import lombok.extern.slf4j.Slf4j; -import net.sf.jsqlparser.expression.Expression; -import net.sf.jsqlparser.expression.LongValue; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author lengleng - * @date 2017/10/29 - */ -@Slf4j -@Configuration -@MapperScan("com.pig4cloud.pigx.admin.mapper") -public class MybatisPlusConfigurer { - private static final String[] IGNORETABLES = new String[]{"sys_dept_relation", "sys_role_dept", "sys_role_menu", "sys_user_role", "sys_route_conf", "sys_menu"}; - - /** - * 分页插件 - * - * @return PaginationInterceptor - */ - @Bean - public PaginationInterceptor paginationInterceptor() { - PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); - List sqlParserList = new ArrayList<>(); - TenantSqlParser tenantSqlParser = new TenantSqlParser(); - tenantSqlParser.setTenantHandler(new TenantHandler() { - @Override - public Expression getTenantId() { - Integer tenantId = TenantContextHolder.getTenantId(); - log.debug("当前租户为 >> {}", tenantId); - return new LongValue(tenantId); - } - - @Override - public String getTenantIdColumn() { - return "tenant_id"; - } - - @Override - public boolean doTableFilter(String tableName) { - return ArrayUtil.contains(IGNORETABLES, tableName); - } - }); - sqlParserList.add(tenantSqlParser); - paginationInterceptor.setSqlParserList(sqlParserList); - return paginationInterceptor; - } - - /** - * 数据权限插件 - * - * @return DataScopeInterceptor - */ - @Bean - public DataScopeInterceptor dataScopeInterceptor() { - return new DataScopeInterceptor(); - } - - /** - * 逻辑删除插件 - * - * @return LogicSqlInjector - */ - @Bean - public ISqlInjector sqlInjector() { - return new LogicSqlInjector(); - } -} diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java new file mode 100644 index 000000000..d70702119 --- /dev/null +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.pigx.admin.controller; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.pig4cloud.common.minio.service.MinioTemplate; +import com.pig4cloud.pigx.common.core.constant.CommonConstants; +import com.pig4cloud.pigx.common.core.util.R; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +/** + * @author lengleng + * @date 2018-12-30 + *

+ * 文件管理 + */ +@Slf4j +@RestController +@AllArgsConstructor +@RequestMapping("/file") +public class FileController { + private final MinioTemplate minioTemplate; + + /** + * 上传文件 + * 文件名采用uuid,避免原始文件名中带"-"符号导致下载的时候解析出现异常 + * @param file 资源 + * @return R(bucketName, filename) + */ + @PostMapping("/upload") + public R upload(@RequestParam("file") MultipartFile file) { + String fileName = IdUtil.simpleUUID()+StrUtil.DOT+ FileUtil.extName(file.getOriginalFilename()); + Map resultMap = new HashMap<>(4); + resultMap.put("bucketName", CommonConstants.BUCKET_NAME); + resultMap.put("fileName", fileName); + + try { + minioTemplate.putObject(CommonConstants.BUCKET_NAME, fileName, file.getInputStream()); + } catch (Exception e) { + log.error("上传失败", e); + return R.builder().code(CommonConstants.FAIL) + .msg(e.getLocalizedMessage()).build(); + } + return R.builder().data(resultMap).build(); + } + + /** + * 获取文件 + * + * @param fileName 文件空间/名称 + * @param response + * @return + */ + @GetMapping("/{fileName}") + public void file(@PathVariable String fileName, HttpServletResponse response) { + String[] nameArray = StrUtil.split(fileName, StrUtil.DASHED); + + try (InputStream inputStream = minioTemplate.getObject(nameArray[0], nameArray[1])) { + response.setContentType("application/octet-stream; charset=UTF-8"); + IoUtil.copy(inputStream, response.getOutputStream()); + } catch (Exception e) { + log.error("文件读取异常", e); + } + } +} diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/MenuController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/MenuController.java index 029f2978b..c2bca98e1 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/MenuController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/MenuController.java @@ -62,12 +62,12 @@ public class MenuController { // 获取符合条件的菜单 Set all = new HashSet<>(); SecurityUtils.getRoles() - .forEach(roleId -> all.addAll(sysMenuService.findMenuByRoleId(roleId))); + .forEach(roleId -> all.addAll(sysMenuService.findMenuByRoleId(roleId))); List menuTreeList = all.stream() - .filter(menuVo -> CommonConstants.MENU.equals(menuVo.getType())) - .map(MenuTree::new) - .sorted(Comparator.comparingInt(MenuTree::getSort)) - .collect(Collectors.toList()); + .filter(menuVo -> CommonConstants.MENU.equals(menuVo.getType())) + .map(MenuTree::new) + .sorted(Comparator.comparingInt(MenuTree::getSort)) + .collect(Collectors.toList()); return new R<>(TreeUtil.bulid(menuTreeList, -1)); } @@ -90,9 +90,9 @@ public class MenuController { @GetMapping("/tree/{roleId}") public List getRoleTree(@PathVariable Integer roleId) { return sysMenuService.findMenuByRoleId(roleId) - .stream() - .map(MenuVO::getMenuId) - .collect(Collectors.toList()); + .stream() + .map(MenuVO::getMenuId) + .collect(Collectors.toList()); } /** @@ -129,7 +129,7 @@ public class MenuController { @DeleteMapping("/{id}") @PreAuthorize("@pms.hasPermission('sys_menu_del')") public R removeById(@PathVariable Integer id) { - return new R<>(sysMenuService.removeMenuById(id)); + return sysMenuService.removeMenuById(id); } /** diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/RoleController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/RoleController.java index cf42d5438..a477b90df 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/RoleController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/RoleController.java @@ -31,6 +31,8 @@ import lombok.AllArgsConstructor; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + /** * @author lengleng * @date 2017/11/5 @@ -63,7 +65,7 @@ public class RoleController { @SysLog("添加角色") @PostMapping @PreAuthorize("@pms.hasPermission('sys_role_add')") - public R save(@RequestBody SysRole sysRole) { + public R save(@Valid @RequestBody SysRole sysRole) { return new R<>(sysRoleService.save(sysRole)); } @@ -76,7 +78,7 @@ public class RoleController { @SysLog("修改角色") @PutMapping @PreAuthorize("@pms.hasPermission('sys_role_edit')") - public R update(@RequestBody SysRole sysRole) { + public R update(@Valid @RequestBody SysRole sysRole) { return new R<>(sysRoleService.updateById(sysRole)); } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/UserController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/UserController.java index bf832570e..df1395bfa 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/UserController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/UserController.java @@ -40,7 +40,7 @@ import javax.validation.Valid; /** * @author lengleng - * @date 2017/10/28 + * @date 2018/12/16 */ @RestController @AllArgsConstructor @@ -57,12 +57,12 @@ public class UserController { @GetMapping(value = {"/info"}) public R info() { String username = SecurityUtils.getUser().getUsername(); - SysUser sysUser = userService.getOne(Wrappers.query() - .lambda().eq(SysUser::getUsername, username)); - if (sysUser == null) { + SysUser user = userService.getOne(Wrappers.query() + .lambda().eq(SysUser::getUsername, username)); + if (user == null) { return new R<>(Boolean.FALSE, "获取当前用户信息失败"); } - return new R<>(userService.findUserInfo(sysUser)); + return new R<>(userService.findUserInfo(user)); } /** @@ -74,7 +74,7 @@ public class UserController { @GetMapping("/info/{username}") public R info(@PathVariable String username) { SysUser user = userService.getOne(Wrappers.query() - .lambda().eq(SysUser::getUsername, username)); + .lambda().eq(SysUser::getUsername, username)); if (user == null) { return new R<>(Boolean.FALSE, String.format("用户信息为空 %s", username)); } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/SmsLoginHandler.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/SmsLoginHandler.java index d8ce7c842..62b3616e0 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/SmsLoginHandler.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/SmsLoginHandler.java @@ -55,14 +55,14 @@ public class SmsLoginHandler extends AbstractLoginHandler { */ @Override public UserInfo info(String identify) { - SysUser sysUser = sysUserService - .getOne(Wrappers.query() - .lambda().eq(SysUser::getPhone, identify)); + SysUser user = sysUserService + .getOne(Wrappers.query() + .lambda().eq(SysUser::getPhone, identify)); - if (sysUser == null) { + if (user == null) { log.info("手机号未注册:{}", identify); return null; } - return sysUserService.findUserInfo(sysUser); + return sysUserService.findUserInfo(user); } } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/WeChatLoginHandler.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/WeChatLoginHandler.java index 831e80242..02e7d11a2 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/WeChatLoginHandler.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/WeChatLoginHandler.java @@ -75,14 +75,14 @@ public class WeChatLoginHandler extends AbstractLoginHandler { */ @Override public UserInfo info(String openId) { - SysUser sysUser = sysUserService + SysUser user = sysUserService .getOne(Wrappers.query() .lambda().eq(SysUser::getWxOpenid, openId)); - if (sysUser == null) { + if (user == null) { log.info("微信未绑定:{}", openId); return null; } - return sysUserService.findUserInfo(sysUser); + return sysUserService.findUserInfo(user); } } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/mapper/SysUserMapper.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/mapper/SysUserMapper.java index bb02e618b..16cd4ad83 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/mapper/SysUserMapper.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/mapper/SysUserMapper.java @@ -25,7 +25,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pig4cloud.pigx.admin.api.dto.UserDTO; import com.pig4cloud.pigx.admin.api.entity.SysUser; import com.pig4cloud.pigx.admin.api.vo.UserVO; -import com.pig4cloud.pigx.common.core.datascope.DataScope; +import com.pig4cloud.pigx.common.data.datascope.DataScope; import org.apache.ibatis.annotations.Param; import java.util.List; diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysMenuService.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysMenuService.java index 22f2930bb..747049dca 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysMenuService.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysMenuService.java @@ -23,6 +23,7 @@ package com.pig4cloud.pigx.admin.service; import com.baomidou.mybatisplus.extension.service.IService; import com.pig4cloud.pigx.admin.api.entity.SysMenu; import com.pig4cloud.pigx.admin.api.vo.MenuVO; +import com.pig4cloud.pigx.common.core.util.R; import java.util.List; @@ -49,7 +50,7 @@ public interface SysMenuService extends IService { * @param id 菜单ID * @return 成功、失败 */ - Boolean removeMenuById(Integer id); + R removeMenuById(Integer id); /** * 更新菜单信息 diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMenuServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMenuServiceImpl.java index 0db5a86f8..fb4ec98c3 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMenuServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMenuServiceImpl.java @@ -19,6 +19,7 @@ package com.pig4cloud.pigx.admin.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.pig4cloud.pigx.admin.api.entity.SysMenu; @@ -27,6 +28,8 @@ import com.pig4cloud.pigx.admin.api.vo.MenuVO; import com.pig4cloud.pigx.admin.mapper.SysMenuMapper; import com.pig4cloud.pigx.admin.mapper.SysRoleMenuMapper; import com.pig4cloud.pigx.admin.service.SysMenuService; +import com.pig4cloud.pigx.common.core.constant.CommonConstants; +import com.pig4cloud.pigx.common.core.util.R; import lombok.AllArgsConstructor; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -34,7 +37,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; -import java.util.stream.Collectors; /** *

@@ -58,20 +60,22 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Override @Transactional(rollbackFor = Exception.class) @CacheEvict(value = "menu_details", allEntries = true) - public Boolean removeMenuById(Integer id) { + public R removeMenuById(Integer id) { // 查询父节点为当前节点的节点 - List menuIdList = this.list(Wrappers.query() - .lambda().eq(SysMenu::getParentId, id)) - .stream().map(SysMenu::getMenuId) - .collect(Collectors.toList()); + List menuList = this.list(Wrappers.query() + .lambda().eq(SysMenu::getParentId, id)); + if (CollUtil.isNotEmpty(menuList)) { + return R.builder() + .code(CommonConstants.FAIL) + .msg("菜单含有下级不能删除").build(); + } + + sysRoleMenuMapper + .delete(Wrappers.query() + .lambda().eq(SysRoleMenu::getMenuId, id)); - //删除关联ROLE_MENU 数据 - menuIdList.add(id); - menuIdList.forEach(menu -> sysRoleMenuMapper - .delete(Wrappers.query() - .lambda().eq(SysRoleMenu::getMenuId, menu))); //删除当前菜单及其子菜单 - return this.removeByIds(menuIdList); + return new R(this.removeById(id)); } @Override diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java index 10360c9e3..555cfba0a 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java @@ -33,15 +33,14 @@ import com.pig4cloud.pigx.admin.api.vo.UserVO; import com.pig4cloud.pigx.admin.mapper.SysUserMapper; import com.pig4cloud.pigx.admin.service.*; import com.pig4cloud.pigx.common.core.constant.CommonConstants; -import com.pig4cloud.pigx.common.core.datascope.DataScope; import com.pig4cloud.pigx.common.core.util.R; +import com.pig4cloud.pigx.common.data.datascope.DataScope; import com.pig4cloud.pigx.common.security.util.SecurityUtils; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @@ -83,12 +82,12 @@ public class SysUserServiceImpl extends ServiceImpl impl sysUser.setPassword(ENCODER.encode(userDto.getPassword())); baseMapper.insert(sysUser); List userRoleList = userDto.getRole() - .stream().map(roleId -> { - SysUserRole userRole = new SysUserRole(); - userRole.setUserId(sysUser.getUserId()); - userRole.setRoleId(roleId); - return userRole; - }).collect(Collectors.toList()); + .stream().map(roleId -> { + SysUserRole userRole = new SysUserRole(); + userRole.setUserId(sysUser.getUserId()); + userRole.setRoleId(roleId); + return userRole; + }).collect(Collectors.toList()); return sysUserRoleService.saveBatch(userRoleList); } @@ -99,29 +98,24 @@ public class SysUserServiceImpl extends ServiceImpl impl * @return */ @Override - @Cacheable(value = "user_details", key = "#sysUser.username", unless = "#result == null") public UserInfo findUserInfo(SysUser sysUser) { - if (sysUser == null) { - return null; - } - UserInfo userInfo = new UserInfo(); userInfo.setSysUser(sysUser); //设置角色列表 (ID) List roleIds = sysRoleService.findRolesByUserId(sysUser.getUserId()) - .stream() - .map(SysRole::getRoleId) - .collect(Collectors.toList()); + .stream() + .map(SysRole::getRoleId) + .collect(Collectors.toList()); userInfo.setRoles(ArrayUtil.toArray(roleIds, Integer.class)); //设置权限列表(menu.permission) Set permissions = new HashSet<>(); roleIds.forEach(roleId -> { List permissionList = sysMenuService.findMenuByRoleId(roleId) - .stream() - .filter(menuVo -> StringUtils.isNotEmpty(menuVo.getPermission())) - .map(MenuVO::getPermission) - .collect(Collectors.toList()); + .stream() + .filter(menuVo -> StringUtils.isNotEmpty(menuVo.getPermission())) + .map(MenuVO::getPermission) + .collect(Collectors.toList()); permissions.addAll(permissionList); }); userInfo.setPermissions(ArrayUtil.toArray(permissions, String.class)); @@ -137,11 +131,7 @@ public class SysUserServiceImpl extends ServiceImpl impl */ @Override public IPage getUsersWithRolePage(Page page, UserDTO userDTO) { - DataScope dataScope = new DataScope(); - dataScope.setScopeName("deptId"); - dataScope.setIsOnly(true); - dataScope.setDeptIds(getChildDepts()); - return baseMapper.getUserVosPage(page, userDTO, dataScope); + return baseMapper.getUserVosPage(page, userDTO, new DataScope()); } /** @@ -175,7 +165,7 @@ public class SysUserServiceImpl extends ServiceImpl impl UserVO userVO = baseMapper.getUserVoByUsername(userDto.getUsername()); SysUser sysUser = new SysUser(); if (StrUtil.isNotBlank(userDto.getPassword()) - && StrUtil.isNotBlank(userDto.getNewpassword1())) { + && StrUtil.isNotBlank(userDto.getNewpassword1())) { if (ENCODER.matches(userDto.getPassword(), userVO.getPassword())) { sysUser.setPassword(ENCODER.encode(userDto.getNewpassword1())); } else { @@ -202,7 +192,7 @@ public class SysUserServiceImpl extends ServiceImpl impl this.updateById(sysUser); sysUserRoleService.remove(Wrappers.update().lambda() - .eq(SysUserRole::getUserId, userDto.getUserId())); + .eq(SysUserRole::getUserId, userDto.getUserId())); userDto.getRole().forEach(roleId -> { SysUserRole userRole = new SysUserRole(); userRole.setUserId(sysUser.getUserId()); @@ -221,7 +211,7 @@ public class SysUserServiceImpl extends ServiceImpl impl @Override public List listAncestorUsers(String username) { SysUser sysUser = this.getOne(Wrappers.query().lambda() - .eq(SysUser::getUsername, username)); + .eq(SysUser::getUsername, username)); SysDept sysDept = sysDeptService.getById(sysUser.getDeptId()); if (sysDept == null) { @@ -230,7 +220,7 @@ public class SysUserServiceImpl extends ServiceImpl impl Integer parentId = sysDept.getParentId(); return this.list(Wrappers.query().lambda() - .eq(SysUser::getDeptId, parentId)); + .eq(SysUser::getDeptId, parentId)); } /** @@ -242,11 +232,11 @@ public class SysUserServiceImpl extends ServiceImpl impl Integer deptId = SecurityUtils.getUser().getDeptId(); //获取当前部门的子部门 return sysDeptRelationService - .list(Wrappers.query().lambda() - .eq(SysDeptRelation::getAncestor, deptId)) - .stream() - .map(SysDeptRelation::getDescendant) - .collect(Collectors.toList()); + .list(Wrappers.query().lambda() + .eq(SysDeptRelation::getAncestor, deptId)) + .stream() + .map(SysDeptRelation::getDescendant) + .collect(Collectors.toList()); } } diff --git a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysMenuMapper.xml b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysMenuMapper.xml index 596e8518f..a89d0707f 100644 --- a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysMenuMapper.xml +++ b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysMenuMapper.xml @@ -32,7 +32,7 @@ - + @@ -47,7 +47,7 @@ - + diff --git a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysRoleMapper.xml b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysRoleMapper.xml index 020f05257..b48488340 100644 --- a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysRoleMapper.xml +++ b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysRoleMapper.xml @@ -27,6 +27,8 @@ + + diff --git a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysRouteConfMapper.xml b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysRouteConfMapper.xml index 75af495eb..2542b4faa 100755 --- a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysRouteConfMapper.xml +++ b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysRouteConfMapper.xml @@ -18,7 +18,7 @@ - + diff --git a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysUserMapper.xml b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysUserMapper.xml index a3fddcffd..de0cb70cf 100644 --- a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysUserMapper.xml +++ b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysUserMapper.xml @@ -21,21 +21,25 @@ - + + - - - - - - + + + + + + + + @@ -135,22 +139,34 @@ `user`.user_id = #{id} - SELECT - + `user`.user_id, + `user`.username, + `user`.`password`, + `user`.salt, + `user`.phone, + `user`.avatar, + `user`.wx_openid, + `user`.qq_openid, + `user`.dept_id, + `user`.create_time AS ucreate_time, + `user`.update_time AS uupdate_time, + `user`.del_flag AS udel_flag, + `user`.lock_flag AS lock_flag, + `user`.dept_id AS deptId, + `user`.tenant_id AS tenantId FROM sys_user AS `user` - LEFT JOIN sys_user_role AS ur ON ur.user_id = `user`.user_id - LEFT JOIN sys_role AS r ON r.role_id = ur.role_id LEFT JOIN sys_dept AS d ON d.dept_id = `user`.dept_id - WHERE - r.del_flag = 0 - - and `user`.username LIKE CONCAT('%',#{query.username},'%') - - - and `user`.dept_id = #{query.deptId} - + + + and `user`.username LIKE CONCAT('%',#{query.username},'%') + + + and `user`.dept_id = #{query.deptId} + + ORDER BY `user`.create_time DESC diff --git a/pigx-upms/pom.xml b/pigx-upms/pom.xml index 388a9859e..7f78826fb 100644 --- a/pigx-upms/pom.xml +++ b/pigx-upms/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx - 2.0.0 + 2.1.0 pigx-upms diff --git a/pigx-visual/pigx-activiti/pom.xml b/pigx-visual/pigx-activiti/pom.xml index 7394d89ef..4f3a274b1 100644 --- a/pigx-visual/pigx-activiti/pom.xml +++ b/pigx-visual/pigx-activiti/pom.xml @@ -23,7 +23,7 @@ com.pig4cloud pigx-visual - 2.0.0 + 2.1.0 pigx-activiti @@ -41,22 +41,18 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 + + + + com.pig4cloud + pigx-common-data + 2.1.0 com.pig4cloud pigx-upms-api - 2.0.0 - - - com.pig4cloud - pigx-common-swagger - 2.0.0 - - - mysql - mysql-connector-java - ${mysql.connector.version} + 2.1.0 @@ -64,13 +60,28 @@ mybatis-plus-boot-starter ${mybatis-plus.version} + + com.pig4cloud + pigx-common-swagger + 2.1.0 + org.activiti activiti-spring-boot-starter-basic ${activiti.version} + + + org.mybatis + mybatis + + + + + mysql + mysql-connector-java + ${mysql.connector.version} - org.activiti activiti-modeler @@ -117,12 +128,12 @@ com.pig4cloud pigx-common-swagger - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-security - 2.0.0 + 2.1.0 diff --git a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ActTaskServiceImpl.java b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ActTaskServiceImpl.java index 8c820df98..4ec7215f6 100644 --- a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ActTaskServiceImpl.java +++ b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ActTaskServiceImpl.java @@ -29,7 +29,7 @@ import com.pig4cloud.pigx.act.mapper.LeaveBillMapper; import com.pig4cloud.pigx.act.service.ActTaskService; import com.pig4cloud.pigx.common.core.constant.PaginationConstants; import com.pig4cloud.pigx.common.core.constant.enums.TaskStatusEnum; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; +import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import com.pig4cloud.pigx.common.security.util.SecurityUtils; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/EditorServiceImpl.java b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/EditorServiceImpl.java index 4dc5481b1..771f92f92 100644 --- a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/EditorServiceImpl.java +++ b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/EditorServiceImpl.java @@ -21,7 +21,7 @@ import cn.hutool.core.util.CharsetUtil; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.pig4cloud.pigx.act.service.EditorService; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; +import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.activiti.engine.ActivitiException; diff --git a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ModelServiceImpl.java b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ModelServiceImpl.java index 4b621e95f..f358ebca8 100644 --- a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ModelServiceImpl.java +++ b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ModelServiceImpl.java @@ -26,7 +26,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.pig4cloud.pigx.act.service.ModelService; import com.pig4cloud.pigx.common.core.constant.PaginationConstants; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; +import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.activiti.bpmn.model.BpmnModel; @@ -82,8 +82,8 @@ public class ModelServiceImpl implements ModelService { model.setName(name); model.setCategory(category); model.setVersion(Integer.parseInt( - String.valueOf(repositoryService.createModelQuery() - .modelKey(model.getKey()).count() + 1))); + String.valueOf(repositoryService.createModelQuery() + .modelKey(model.getKey()).count() + 1))); ObjectNode modelObjectNode = objectMapper.createObjectNode(); modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, name); @@ -110,8 +110,8 @@ public class ModelServiceImpl implements ModelService { @Override public IPage getModelPage(Map params) { ModelQuery modelQuery = repositoryService.createModelQuery() - .modelTenantId(String.valueOf(TenantContextHolder.getTenantId())) - .latestVersion().orderByLastUpdateTime().desc(); + .modelTenantId(String.valueOf(TenantContextHolder.getTenantId())) + .latestVersion().orderByLastUpdateTime().desc(); String category = (String) params.get("category"); if (StrUtil.isNotBlank(category)) { modelQuery.modelCategory(category); @@ -158,18 +158,18 @@ public class ModelServiceImpl implements ModelService { } // 部署流程 Deployment deployment = repositoryService - .createDeployment().name(model.getName()) - .addBpmnModel(processName, bpmnModel) - .tenantId(String.valueOf(TenantContextHolder.getTenantId())) - .deploy(); + .createDeployment().name(model.getName()) + .addBpmnModel(processName, bpmnModel) + .tenantId(String.valueOf(TenantContextHolder.getTenantId())) + .deploy(); // 设置流程分类 List list = repositoryService.createProcessDefinitionQuery() - .deploymentId(deployment.getId()) - .list(); + .deploymentId(deployment.getId()) + .list(); list.stream().forEach(processDefinition -> - repositoryService.setProcessDefinitionCategory(processDefinition.getId(), model.getCategory())); + repositoryService.setProcessDefinitionCategory(processDefinition.getId(), model.getCategory())); } catch (Exception e) { log.error("部署失败,异常", e); } diff --git a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ProcessServiceImpl.java b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ProcessServiceImpl.java index 215e37446..1a0ab5010 100644 --- a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ProcessServiceImpl.java +++ b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ProcessServiceImpl.java @@ -29,7 +29,7 @@ import com.pig4cloud.pigx.common.core.constant.PaginationConstants; import com.pig4cloud.pigx.common.core.constant.enums.ProcessStatusEnum; import com.pig4cloud.pigx.common.core.constant.enums.ResourceTypeEnum; import com.pig4cloud.pigx.common.core.constant.enums.TaskStatusEnum; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; +import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import lombok.AllArgsConstructor; import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; diff --git a/pigx-visual/pigx-codegen/pom.xml b/pigx-visual/pigx-codegen/pom.xml index ff7537063..4ea65ece1 100755 --- a/pigx-visual/pigx-codegen/pom.xml +++ b/pigx-visual/pigx-codegen/pom.xml @@ -6,7 +6,7 @@ com.pig4cloud pigx-visual - 2.0.0 + 2.1.0 pigx-codegen @@ -20,6 +20,12 @@ org.springframework.cloud spring-cloud-starter-config + + + com.pig4cloud + pigx-common-data + 2.1.0 + com.baomidou @@ -35,19 +41,19 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-swagger - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-security - 2.0.0 + 2.1.0 diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/Controller.java.vm b/pigx-visual/pigx-codegen/src/main/resources/template/Controller.java.vm index 958d72980..9bd08062c 100755 --- a/pigx-visual/pigx-codegen/src/main/resources/template/Controller.java.vm +++ b/pigx-visual/pigx-codegen/src/main/resources/template/Controller.java.vm @@ -16,8 +16,7 @@ */ package ${package}.${moduleName}.controller; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pig4cloud.pigx.common.core.util.R; import com.pig4cloud.pigx.common.log.annotation.SysLog; @@ -26,8 +25,6 @@ import ${package}.${moduleName}.service.${className}Service; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.Map; - /** * ${comments} diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/Entity.java.vm b/pigx-visual/pigx-codegen/src/main/resources/template/Entity.java.vm index 0b2d23611..dfcc4a293 100755 --- a/pigx-visual/pigx-codegen/src/main/resources/template/Entity.java.vm +++ b/pigx-visual/pigx-codegen/src/main/resources/template/Entity.java.vm @@ -34,8 +34,8 @@ import java.time.LocalDateTime; * @date ${datetime} */ @Data -@EqualsAndHashCode(callSuper = true) @TableName("${tableName}") +@EqualsAndHashCode(callSuper = true) public class ${className} extends Model<${className}> { private static final long serialVersionUID = 1L; diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/Mapper.java.vm b/pigx-visual/pigx-codegen/src/main/resources/template/Mapper.java.vm index 5ef3ca60e..ed44ab231 100755 --- a/pigx-visual/pigx-codegen/src/main/resources/template/Mapper.java.vm +++ b/pigx-visual/pigx-codegen/src/main/resources/template/Mapper.java.vm @@ -17,10 +17,7 @@ package ${package}.${moduleName}.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import ${package}.${moduleName}.entity.${className}; -import org.apache.ibatis.annotations.Param; /** * ${comments} diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/Service.java.vm b/pigx-visual/pigx-codegen/src/main/resources/template/Service.java.vm index d1ca0db44..b5c347de6 100755 --- a/pigx-visual/pigx-codegen/src/main/resources/template/Service.java.vm +++ b/pigx-visual/pigx-codegen/src/main/resources/template/Service.java.vm @@ -16,8 +16,6 @@ */ package ${package}.${moduleName}.service; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import ${package}.${moduleName}.entity.${className}; diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/ServiceImpl.java.vm b/pigx-visual/pigx-codegen/src/main/resources/template/ServiceImpl.java.vm index e0f7181fe..bce38eeea 100755 --- a/pigx-visual/pigx-codegen/src/main/resources/template/ServiceImpl.java.vm +++ b/pigx-visual/pigx-codegen/src/main/resources/template/ServiceImpl.java.vm @@ -16,10 +16,9 @@ */ package ${package}.${moduleName}.service.impl; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import ${package}.${moduleName}.entity.${className}; +import ${package}.${moduleName}.mapper.${className}Mapper; import ${package}.${moduleName}.service.${className}Service; import org.springframework.stereotype.Service; @@ -29,7 +28,7 @@ import org.springframework.stereotype.Service; * @author ${author} * @date ${datetime} */ -@Service("${classname}Service") +@Service public class ${className}ServiceImpl extends ServiceImpl<${className}Mapper, ${className}> implements ${className}Service { } diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/crud.js.vm b/pigx-visual/pigx-codegen/src/main/resources/template/crud.js.vm index 16394d48b..c9e692c4b 100644 --- a/pigx-visual/pigx-codegen/src/main/resources/template/crud.js.vm +++ b/pigx-visual/pigx-codegen/src/main/resources/template/crud.js.vm @@ -25,7 +25,6 @@ export const tableOption = { editBtn: false, delBtn: false, addBtn: false, - dic: [], column: [ #foreach ($column in $columns) { diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/menu.sql.vm b/pigx-visual/pigx-codegen/src/main/resources/template/menu.sql.vm index bb76c5b6f..44ac11a3d 100644 --- a/pigx-visual/pigx-codegen/src/main/resources/template/menu.sql.vm +++ b/pigx-visual/pigx-codegen/src/main/resources/template/menu.sql.vm @@ -1,13 +1,13 @@ -- 该脚本不要执行,请完善 ID 对应关系,注意层级关系 !!!! -- 菜单SQL -insert into `pigx`.`sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`) +insert into `sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`) values ( '父菜单ID', 'views/${moduleName}/${pathName}/index', '', '0', '${pathName}', 'icon-bangzhushouji', '菜单ID', '0', '2018-01-20 13:17:19', '8', '2018-07-29 13:38:19', '${comments}管理'); -- 菜单对应按钮SQL -insert into `pigx`.`sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`) +insert into `sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`) values ( '菜单ID', null, '${moduleName}_${pathName}_add', '1', null, '1', '子按钮ID1', '0', '2018-05-15 21:35:18', '0', '2018-07-29 13:38:59', '${comments}新增'); -insert into `pigx`.`sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`) +insert into `sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`) values ( '菜单ID', null, '${moduleName}_${pathName}_edit', '1', null, '1', '子按钮ID2', '0', '2018-05-15 21:35:18', '1', '2018-07-29 13:38:59', '${comments}修改'); -insert into `pigx`.`sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`) +insert into `sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`) values ( '菜单ID', null, '${moduleName}_${pathName}_del', '1', null, '1', '子按钮ID3', '0', '2018-05-15 21:35:18', '2', '2018-07-29 13:38:59', '${comments}删除'); diff --git a/pigx-visual/pigx-daemon/pom.xml b/pigx-visual/pigx-daemon/pom.xml index 8a2644420..18745ba11 100644 --- a/pigx-visual/pigx-daemon/pom.xml +++ b/pigx-visual/pigx-daemon/pom.xml @@ -23,7 +23,7 @@ com.pig4cloud pigx-visual - 2.0.0 + 2.1.0 pigx-daemon @@ -41,12 +41,18 @@ com.pig4cloud pigx-common-job - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-swagger - 2.0.0 + 2.1.0 + + + + com.pig4cloud + pigx-common-data + 2.1.0 @@ -74,13 +80,13 @@ com.pig4cloud pigx-common-swagger - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-security - 2.0.0 + 2.1.0 diff --git a/pigx-visual/pigx-monitor/pom.xml b/pigx-visual/pigx-monitor/pom.xml index b8c63db0e..bf786adcd 100644 --- a/pigx-visual/pigx-monitor/pom.xml +++ b/pigx-visual/pigx-monitor/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-visual - 2.0.0 + 2.1.0 pigx-monitor @@ -36,12 +36,11 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 - com.pig4cloud - pigx-common-cache - 2.0.0 + org.springframework.boot + spring-boot-starter-data-redis diff --git a/pigx-visual/pigx-monitor/src/main/java/com/pig4cloud/pigx/monitor/support/RedisEventStore.java b/pigx-visual/pigx-monitor/src/main/java/com/pig4cloud/pigx/monitor/support/RedisEventStore.java index 20ad272ed..7edd3f960 100644 --- a/pigx-visual/pigx-monitor/src/main/java/com/pig4cloud/pigx/monitor/support/RedisEventStore.java +++ b/pigx-visual/pigx-monitor/src/main/java/com/pig4cloud/pigx/monitor/support/RedisEventStore.java @@ -25,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; import reactor.core.publisher.Mono; import java.util.List; @@ -47,6 +48,7 @@ public class RedisEventStore extends InMemoryEventStore { events.forEach(event -> { String key = event.getInstance().getValue() + "_" + event.getTimestamp().toString(); log.info("保存实例事件的KEY:{},EVENT: {}", key, event.getType()); + redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(InstanceEvent.class)); redisTemplate.opsForHash().put(CommonConstants.EVENT_KEY, key, event); }); diff --git a/pigx-visual/pigx-sso-client-demo/pom.xml b/pigx-visual/pigx-sso-client-demo/pom.xml index 3fbe8212d..263fcfe3d 100644 --- a/pigx-visual/pigx-sso-client-demo/pom.xml +++ b/pigx-visual/pigx-sso-client-demo/pom.xml @@ -29,7 +29,7 @@ com.pig4cloud pigx-visual - 2.0.0 + 2.1.0 diff --git a/pigx-visual/pigx-tx-manager/pom.xml b/pigx-visual/pigx-tx-manager/pom.xml index 0f8755dcc..e743f0eff 100644 --- a/pigx-visual/pigx-tx-manager/pom.xml +++ b/pigx-visual/pigx-tx-manager/pom.xml @@ -5,7 +5,7 @@ com.pig4cloud pigx-visual - 2.0.0 + 2.1.0 pigx-tx-manager @@ -63,7 +63,7 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 diff --git a/pigx-visual/pom.xml b/pigx-visual/pom.xml index 42d9634b4..0260ed23c 100644 --- a/pigx-visual/pom.xml +++ b/pigx-visual/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx - 2.0.0 + 2.1.0 pigx-visual diff --git a/pom.xml b/pom.xml index 1bf361b1b..872020a61 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx - 2.0.0 + 2.1.0 ${project.artifactId} pom @@ -49,7 +49,7 @@ 1.8 1.8 2.0.4 - 4.3.0 + 4.3.2 3.0.6 0.0.9 2.9.2 @@ -58,6 +58,7 @@ 4.1.0 2.1.0 2.10.1 + 3.0.12 2.1.5 8.0.13 2.3.3.RELEASE