Compare commits
246
Commits
master
...
SecondStage
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
884527f55b | ||
|
|
189c4e4ed8 | ||
|
|
88bd382fec | ||
|
|
4c1e4466dd | ||
|
|
9c20c91b8f | ||
|
|
90d5ddcf12 | ||
|
|
e92f264edd | ||
|
|
ff5f034818 | ||
|
|
2d2500ed7e | ||
|
|
1ad70febd5 | ||
|
|
8679dfa3b7 | ||
|
|
9d73779e64 | ||
|
|
ff117e1f5f | ||
|
|
ad64e1ebb5 | ||
|
|
2edadf4361 | ||
|
|
992365a4e8 | ||
|
|
5f7fdf0667 | ||
|
|
6425a30388 | ||
|
|
b05d16db20 | ||
|
|
bc74493135 | ||
|
|
6ab7f09320 | ||
|
|
90e803fae6 | ||
|
|
15cfc5e3ca | ||
|
|
86dca29a44 | ||
|
|
ee58781ef2 | ||
|
|
165ada1a24 | ||
|
|
1d255901d2 | ||
|
|
380aad3fae | ||
|
|
af16e32228 | ||
|
|
3bf0b349c9 | ||
|
|
515c490d06 | ||
|
|
b943309642 | ||
|
|
b6a32a3da4 | ||
|
|
2d65f23679 | ||
|
|
f90925250e | ||
|
|
fdb9a748d4 | ||
|
|
8a7c62a932 | ||
|
|
710fa7ca23 | ||
|
|
433e03723a | ||
|
|
d9bbc140d9 | ||
|
|
a641540e4d | ||
|
|
bd30ab964d | ||
|
|
111db69735 | ||
|
|
1d74832ae0 | ||
|
|
7a06e8d99e | ||
|
|
3766cfe8ab | ||
|
|
0dac72f35c | ||
|
|
dbc80ed443 | ||
|
|
8b31296940 | ||
|
|
9207930efd | ||
|
|
1ba4b22318 | ||
|
|
53d4cf6fa3 | ||
|
|
56404b3610 | ||
|
|
e679eb07de | ||
|
|
76fca0b7fe | ||
|
|
66d7e385e6 | ||
|
|
d1c75efb17 | ||
|
|
32f9f50e3f | ||
|
|
e31591c4c6 | ||
|
|
e73a23cfb7 | ||
|
|
865a3b9cc0 | ||
|
|
b061776fb9 | ||
|
|
68bf81895b | ||
|
|
9e26f7a727 | ||
|
|
ddc6f04bd1 | ||
|
|
3f0ba155ac | ||
|
|
540340b2fa | ||
|
|
c58fb3ae44 | ||
|
|
40c829600d | ||
|
|
24e4a37699 | ||
|
|
43e34a9991 | ||
|
|
b5225ae796 | ||
|
|
7169129168 | ||
|
|
ae0a635edc | ||
|
|
2f742b6a5a | ||
|
|
c0085d7a83 | ||
|
|
6991d75ba5 | ||
|
|
a54c74218e | ||
|
|
42ff75b3ea | ||
|
|
05b4cce7c6 | ||
|
|
209b93a0f3 | ||
|
|
63829e2bc9 | ||
|
|
9f87893556 | ||
|
|
718af5bfe7 | ||
|
|
f2c9e15023 | ||
|
|
726815123e | ||
|
|
ee647da320 | ||
|
|
2225925ed8 | ||
|
|
bc42bfbbe1 | ||
|
|
cd39e13752 | ||
|
|
e01672d80d | ||
|
|
bd49556fcb | ||
|
|
0bcc348998 | ||
|
|
19ff0e7493 | ||
|
|
5792b75fe2 | ||
|
|
e1112bd3e5 | ||
|
|
9ebe71d162 | ||
|
|
947b075ae0 | ||
|
|
2d3e0e46a8 | ||
|
|
87c049f1bc | ||
|
|
b38c242af7 | ||
|
|
184adcdcbc | ||
|
|
10bcaeafad | ||
|
|
75436cf57b | ||
|
|
6e92938904 | ||
|
|
481579bbb1 | ||
|
|
dd13201ce3 | ||
|
|
d5804ef698 | ||
|
|
0147632684 | ||
|
|
8653321788 | ||
|
|
50c6f600fb | ||
|
|
14003fdb5b | ||
|
|
6b30ad461c | ||
|
|
384645ae57 | ||
|
|
16d80d927e | ||
|
|
3efe9f4bb7 | ||
|
|
bf9be359d4 | ||
|
|
203aff8f53 | ||
|
|
c9ef94a1a1 | ||
|
|
80fa1b61f0 | ||
|
|
9e6431824a | ||
|
|
c820aa73d9 | ||
|
|
b2f1f61b88 | ||
|
|
2808c5e97a | ||
|
|
f7e187832d | ||
|
|
5009c6ec2d | ||
|
|
10713b9a16 | ||
|
|
90872761d8 | ||
|
|
4049bfea09 | ||
|
|
5d3a7fda8a | ||
|
|
821aa7baa9 | ||
|
|
cfcc6584f7 | ||
|
|
959d938ae0 | ||
|
|
ca05394a9e | ||
|
|
d9694f1e72 | ||
|
|
63c2d71ce5 | ||
|
|
99d28de428 | ||
|
|
fc8aa97318 | ||
|
|
d4c0f18c38 | ||
|
|
411cc512cd | ||
|
|
9388f41187 | ||
|
|
89100425bb | ||
|
|
7cf884f6de | ||
|
|
d588f3d193 | ||
|
|
2a29683266 | ||
|
|
eef5b81d3c | ||
|
|
4e3345eea5 | ||
|
|
b7d9f98b4a | ||
|
|
a70e1b28fb | ||
|
|
d4a64978b7 | ||
|
|
4dd8e46ec6 | ||
|
|
9fa7d5d7af | ||
|
|
3cb464d714 | ||
|
|
b71646c8a1 | ||
|
|
b76031bb1a | ||
|
|
7ac917122e | ||
|
|
2e0d2a1892 | ||
|
|
a360b6a37a | ||
|
|
59949d4d6a | ||
|
|
58c0e4f4aa | ||
|
|
0888b7faec | ||
|
|
a75be11588 | ||
|
|
22df26da16 | ||
|
|
b40eabe610 | ||
|
|
baa03931fb | ||
|
|
0374e7c890 | ||
|
|
af0b232a25 | ||
|
|
5893182257 | ||
|
|
25aec2d125 | ||
|
|
b11235d06a | ||
|
|
f5e5d88fc2 | ||
|
|
4948bb491b | ||
|
|
0f760583af | ||
|
|
452bbf6778 | ||
|
|
bcf4e8f935 | ||
|
|
cb8e93361a | ||
|
|
552205b37d | ||
|
|
c1f43075f0 | ||
|
|
fb3559aadb | ||
|
|
7c116ee80f | ||
|
|
2e6c7d9627 | ||
|
|
0575126734 | ||
|
|
5dd2159c9e | ||
|
|
ee8ec76b20 | ||
|
|
91bea54fe9 | ||
|
|
adf47c2494 | ||
|
|
3046d65bf6 | ||
|
|
cc6628faf2 | ||
|
|
d8c8f85581 | ||
|
|
4df7f65417 | ||
|
|
5cb38987d5 | ||
|
|
b1b4670aaa | ||
|
|
29baf0811a | ||
|
|
ae1d6ab3ff | ||
|
|
ac8c178349 | ||
|
|
da71f32611 | ||
|
|
e09bdb82e9 | ||
|
|
89b9d15549 | ||
|
|
c1101e098e | ||
|
|
f07004ae35 | ||
|
|
8b2365ebbc | ||
|
|
ec9bdc4942 | ||
|
|
54dce5847a | ||
|
|
8ff06e4c27 | ||
|
|
4600d0f1f9 | ||
|
|
d6945b2825 | ||
|
|
8068617f77 | ||
|
|
b3d37f0dfc | ||
|
|
e4d0e6b601 | ||
|
|
a7516d5b95 | ||
|
|
2446a51741 | ||
|
|
0bd92a76eb | ||
|
|
0427e9fa22 | ||
|
|
e43f3546d1 | ||
|
|
80b1cbcf85 | ||
|
|
239b126fc1 | ||
|
|
c7e3825e97 | ||
|
|
e3b222a6e3 | ||
|
|
d960f2d482 | ||
|
|
63b077a99a | ||
|
|
4e24874fd3 | ||
|
|
1a658915f5 | ||
|
|
ea54febf1b | ||
|
|
07e059d34c | ||
|
|
ad65960303 | ||
|
|
eca5251c66 | ||
|
|
e70bf5ce52 | ||
|
|
3c8bbf3725 | ||
|
|
1114e00ac3 | ||
|
|
112258f333 | ||
|
|
029806d50f | ||
|
|
7f2db3b7a7 | ||
|
|
14818f4854 | ||
|
|
1c8005c218 | ||
|
|
9947fc2299 | ||
|
|
a8bf4a69b3 | ||
|
|
787534b5c7 | ||
|
|
15adf50290 | ||
|
|
30d183558e | ||
|
|
6a7a2a84a6 | ||
|
|
d03b4d165e | ||
|
|
3d7284736c | ||
|
|
76ba22d25d | ||
|
|
81a1ddf772 | ||
|
|
aace29fd2f | ||
|
|
ba9a30638f |
@@ -130,3 +130,31 @@ QueryWrapper<?> queryWrapper = QueryGenerator.initQueryWrapper(?, req.getParamet
|
||||
- 模板位置: src/main/resources/jero/code-template
|
||||
- 文件配置路径: jero-boot/jero-boot-single-startup/src/main/resources/jero/jero_config.properties
|
||||
|
||||
|
||||
#### 四、特殊注意事项
|
||||
##### 1、树形组织架构导入校验问题
|
||||
> 树形组织架构导入校验与Id转换可使用ImportUtil.class下的指定方法
|
||||
|
||||
```java
|
||||
// 准备部门校验的数据
|
||||
List<SysDepart> departList = sysDepartService.list();
|
||||
Map<String, List<SysDepart>> sysDeaprtMap = departList.stream()
|
||||
.collect(Collectors.groupingBy(SysDepart::getDepartName));
|
||||
Map<String, String> sysDepartPathMap = SysDepart.buildPaths(departList);
|
||||
|
||||
// 相关校验转换逻辑
|
||||
/**
|
||||
* cellValue为需要校验的单元格中的内容
|
||||
*/
|
||||
if (!this.multiOrgValid(cellValue, sysDepartMap, sysDepartPathMap)) {
|
||||
// TODO 校验失败,执行报错提示逻辑
|
||||
} else {
|
||||
// 校验成功 将部门名称转换为id
|
||||
cellValue = this.convertMultiOrgId(cellValue, sysDepartMap, sysDepartPathMap);
|
||||
}
|
||||
```
|
||||
|
||||
- 为避免每次校验都重复准备部门相关数据,可将准备数据逻辑放入循环外,只执行一次
|
||||
- 校验逻辑:如果部门名称唯一,则不需要填写全路径也可成功转换,如果出现重名,则必须填写全路径才能转换
|
||||
|
||||
|
||||
|
||||
@@ -532,6 +532,10 @@ CREATE INDEX pnl_idx_user_id ON process_node_link(`user_id`);
|
||||
|
||||
ALTER TABLE laws_document_split ADD PRIMARY KEY (id);
|
||||
|
||||
-- 2024-09-20 责任人改为多选弹窗
|
||||
INSERT INTO `sys_dict_item` (`id`, `dict_id`, `parent_id`, `item_text`, `en_name`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `is_tag_dict`, `is_read_only`, `attribute_type`, `del_flag`, `stat_node`, `en_base`) VALUES ('1694639979913162755', '1493098515761917954', '0', '多选用户弹框', 'Multiple selection a user', '19', '', 1, 1, 'admin', '2023-08-24 17:17:11', 'admin', '2023-08-24 17:41:25', NULL, 0, NULL, '0', NULL, NULL);
|
||||
update laws_tag set field_show_type = '19' where db_field_txt = '责任人'
|
||||
|
||||
-- 2024-09-24 外来标准库增加 关联部门 字段长度
|
||||
ALTER TABLE `laws_domestic_standard`
|
||||
MODIFY COLUMN `associate_dept` text NULL COMMENT '关联部门';
|
||||
@@ -585,3 +589,16 @@ INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `com
|
||||
'897f89d79014d7fe019014d7fe2e0000', '修改清单版本', NULL, NULL, NULL, NULL, 2, 'marketStandard:editVersion', '1',
|
||||
9.00, 0, NULL, 1, 1, 0, 0, NULL, 'ldq', '2024-10-10 11:57:57', 'ldq', '2024-10-10 11:58:06', 0, 0, '1', 0,
|
||||
'Modify list version', NULL, NULL);
|
||||
|
||||
-- 20241014 修改驾驶位置修改成左/右舵
|
||||
UPDATE `sys_dict` SET `dict_name` = '左/右舵' WHERE `id` = '1806891070589480961';
|
||||
|
||||
-- 20241014 法规符合性排查流程增加专业模块字段
|
||||
ALTER TABLE `process_standard_compliance_check`
|
||||
ADD COLUMN `specialized_module` varchar(36) NULL DEFAULT NULL COMMENT '专业模块';
|
||||
|
||||
ALTER TABLE `laws_evaluation_not_met_library`
|
||||
ADD COLUMN `specialized_module` varchar(36) NULL DEFAULT NULL COMMENT '专业模块';
|
||||
|
||||
ALTER TABLE `laws_conformity_assessment_library_detail`
|
||||
ADD COLUMN `specialized_module` varchar(36) NULL DEFAULT NULL COMMENT '专业模块';
|
||||
+323
@@ -0,0 +1,323 @@
|
||||
create table laws_enterprise_standard_plan
|
||||
(
|
||||
id varchar(36) not null comment '主键id',
|
||||
revision_type varchar(50) comment '制修订类别',
|
||||
project_type varchar(50) comment '项目类型',
|
||||
standard_id varchar(50) comment '标准id',
|
||||
standard_number varchar(200) comment '标准编号',
|
||||
standard_name varchar(200) comment '标准名称',
|
||||
main_drafting_user varchar(50) comment '起草人',
|
||||
depart_id varchar(50) comment '所在部门id',
|
||||
professional_module varchar(30) comment '专业模块',
|
||||
draft_complete_date datetime comment '初稿完成日期',
|
||||
draft_complete_flag tinyint default 0 comment '初稿完成标识',
|
||||
plan_archiving_date datetime comment '计划归档日期',
|
||||
plan_archiving_flag tinyint default 0 comment '计划归档标识',
|
||||
have_english_version varchar(50) comment '是否有英文版',
|
||||
committee varchar(500) comment '所属技术委员会',
|
||||
actual_archiving_date datetime comment '实际归档日期',
|
||||
project_status varchar(50) default 1 comment '项目状态',
|
||||
plan_status varchar(50) default 1 comment '计划状态',
|
||||
create_by varchar(36) comment '创建人',
|
||||
create_time datetime comment '创建时间',
|
||||
update_by varchar(36) comment '更新人',
|
||||
update_time datetime comment '更新时间',
|
||||
org_code varchar(64) comment '所属部门',
|
||||
del_flag tinyint comment '删除状态(0-正常,1-删除)',
|
||||
primary key (id)
|
||||
);
|
||||
|
||||
alter table laws_enterprise_standard_plan
|
||||
comment '企标计划';
|
||||
|
||||
create table laws_standard_solicit_opinions
|
||||
(
|
||||
id varchar(36) not null comment '主键id',
|
||||
standard_id varchar(36) not null comment '标准id',
|
||||
standard_number varchar(200) comment '标准编号',
|
||||
standard_name varchar(200) comment '标准名称',
|
||||
applicable_market varchar(4) comment '适用市场',
|
||||
start_time datetime comment '开始日期',
|
||||
end_time datetime comment '截止日期',
|
||||
number varchar(500) comment '征求意见反馈单编号',
|
||||
file varchar(500) comment '意见反馈表',
|
||||
process_complete_time datetime comment '流程完成日期',
|
||||
create_by varchar(36) comment '创建人id',
|
||||
create_time datetime comment '创建时间',
|
||||
update_by varchar(36) comment '修改人id',
|
||||
update_time datetime comment '修改时间',
|
||||
org_code varchar(30) comment '部门code',
|
||||
del_flag varchar(4) comment '删除状态(0-正常,1-删除)',
|
||||
primary key (id)
|
||||
);
|
||||
|
||||
alter table laws_standard_solicit_opinions
|
||||
comment '标准征求意见';
|
||||
|
||||
create table laws_standard_solicit_opinions_term
|
||||
(
|
||||
id varchar(36) not null comment '主键id',
|
||||
solicit_opinions_id varchar(36) comment '征求意见id',
|
||||
proposer_id varchar(36) comment '法规工程师',
|
||||
professional_module varchar(30) comment '专业模块',
|
||||
term_id varchar(36) comment '条款id',
|
||||
term_num varchar(200) comment '标准编号/条款号',
|
||||
term_name varchar(200) comment '标准名称/条款内容',
|
||||
translation varchar(200) comment '译文',
|
||||
before_modify varchar(500) comment '修改前',
|
||||
after_modify varchar(500) comment '修改后',
|
||||
reason varchar(500) comment '修改理由',
|
||||
feedback_person_id varchar(500) comment '反馈人id',
|
||||
feedback_person varchar(500) comment '反馈人',
|
||||
feedback_opinion varchar(10) comment '反馈意见',
|
||||
create_by varchar(36) comment '创建人id',
|
||||
create_time datetime comment '创建时间',
|
||||
update_by varchar(36) comment '修改人id',
|
||||
update_time datetime comment '修改时间',
|
||||
org_code varchar(30) comment '部门code',
|
||||
primary key (id, solicit_opinions_id)
|
||||
);
|
||||
|
||||
alter table laws_standard_solicit_opinions_term
|
||||
comment '标准征求意见条款关联表';
|
||||
|
||||
create table process_annual_init
|
||||
(
|
||||
id varchar(36) not null comment '主键id',
|
||||
depart_manager varchar(500) comment '部门经理',
|
||||
standard_depart_handler varchar(36) comment '法规部门处理人id',
|
||||
standard_depart_manager varchar(36) comment '法规部门经理id',
|
||||
senior_manager varchar(500) comment '高级经理',
|
||||
chief_inspector varchar(500) comment '总监',
|
||||
authorized_person varchar(500) comment '授权人id',
|
||||
file varchar(500) comment '附件',
|
||||
create_by varchar(36) comment '创建人',
|
||||
create_time datetime comment '创建时间',
|
||||
update_by varchar(36) comment '更新人',
|
||||
update_time datetime comment '更新时间',
|
||||
org_code varchar(64) comment '所属部门',
|
||||
del_flag varchar(4) comment '删除状态(0-正常,1-删除)',
|
||||
primary key (id)
|
||||
);
|
||||
|
||||
alter table process_annual_init
|
||||
comment '年度制修订计划流程';
|
||||
|
||||
create table process_annual_init_link
|
||||
(
|
||||
id varchar(36) not null comment '主键id',
|
||||
process_id varchar(36) comment '流程主表id',
|
||||
revision_type varchar(50) comment '制修订类别',
|
||||
standard_id varchar(50) comment '标准id',
|
||||
standard_number varchar(200) comment '标准编号',
|
||||
standard_name varchar(200) comment '标准名称',
|
||||
main_drafting_user varchar(50) comment '起草人',
|
||||
depart_id varchar(50) comment '所在部门id',
|
||||
professional_module varchar(30) comment '专业模块',
|
||||
draft_complete_date datetime comment '初稿完成日期',
|
||||
plan_archiving_date datetime comment '计划归档日期',
|
||||
have_english_version varchar(50) comment '是否有英文版',
|
||||
committee varchar(500) comment '所属技术委员会',
|
||||
create_by varchar(36) comment '创建人',
|
||||
create_time datetime comment '创建时间',
|
||||
update_by varchar(36) comment '更新人',
|
||||
update_time datetime comment '更新时间',
|
||||
org_code varchar(64) comment '所属部门',
|
||||
del_flag tinyint comment '删除状态(0-正常,1-删除)',
|
||||
primary key (id)
|
||||
);
|
||||
|
||||
alter table process_annual_init_link
|
||||
comment '年度制修订计划流程关联标准';
|
||||
|
||||
create table process_plan_change
|
||||
(
|
||||
id varchar(36) not null comment '主键id',
|
||||
change_type varchar(1) comment '变更类型',
|
||||
depart_manager varchar(500) comment '部门经理',
|
||||
standard_depart_handler varchar(36) comment '法规部门处理人id',
|
||||
standard_depart_manager varchar(36) comment '法规部门经理id',
|
||||
senior_manager varchar(500) comment '高级经理',
|
||||
chief_inspector varchar(500) comment '总监',
|
||||
authorized_person varchar(500) comment '授权人',
|
||||
file varchar(500) comment '附件',
|
||||
create_by varchar(36) comment '创建人',
|
||||
create_time datetime comment '创建时间',
|
||||
update_by varchar(36) comment '更新人',
|
||||
update_time datetime comment '更新时间',
|
||||
org_code varchar(64) comment '所属部门',
|
||||
del_flag varchar(4) comment '删除状态(0-正常,1-删除)',
|
||||
primary key (id)
|
||||
);
|
||||
|
||||
alter table process_plan_change
|
||||
comment '企标计划变更流程';
|
||||
|
||||
create table process_plan_change_link
|
||||
(
|
||||
id varchar(36) not null comment '主键id'
|
||||
primary key,
|
||||
process_id varchar(36) null comment '流程主表id',
|
||||
revision_type varchar(50) null comment '制修订类别',
|
||||
plan_id varchar(36) null comment '企标计划id',
|
||||
standard_id varchar(50) null comment '标准id',
|
||||
standard_number varchar(200) null comment '标准编号',
|
||||
standard_name varchar(200) null comment '标准名称',
|
||||
main_drafting_user varchar(50) null comment '起草人',
|
||||
drafting_user_new varchar(50) null comment '新起草人',
|
||||
depart_id varchar(50) null comment '所在部门id',
|
||||
depart_id_new varchar(50) null comment '新所在部门id',
|
||||
professional_module varchar(30) null comment '专业模块',
|
||||
draft_complete_date datetime null comment '初稿完成日期',
|
||||
plan_archiving_date datetime null comment '计划归档日期',
|
||||
draft_complete_date_change datetime null comment '初稿完成日期变更后',
|
||||
plan_archiving_date_change datetime null comment '计划归档日期变更后',
|
||||
have_english_version varchar(50) null comment '是否有英文版',
|
||||
committee varchar(500) null comment '所属技术委员会',
|
||||
change_reason varchar(500) null comment '变更原因',
|
||||
create_by varchar(36) null comment '创建人',
|
||||
create_time datetime null comment '创建时间',
|
||||
update_by varchar(36) null comment '更新人',
|
||||
update_time datetime null comment '更新时间',
|
||||
org_code varchar(64) null comment '所属部门',
|
||||
del_flag tinyint null comment '删除状态(0-正常,1-删除)'
|
||||
);
|
||||
|
||||
alter table process_plan_change_link
|
||||
comment '企标计划变更流程关联标准';
|
||||
|
||||
create table process_standard_solicit_opinions
|
||||
(
|
||||
id varchar(36) not null comment '主键id',
|
||||
standard_id varchar(50) comment '标准id',
|
||||
standard_number varchar(200) comment '标准编号',
|
||||
standard_name varchar(200) comment '标准名称',
|
||||
standard_text varchar(50) comment '标准文本',
|
||||
applicable_market varchar(4) comment '适用市场',
|
||||
end_time datetime comment '截止日期',
|
||||
create_by varchar(36) comment '创建人',
|
||||
create_time datetime comment '创建时间',
|
||||
update_by varchar(36) comment '更新人',
|
||||
update_time datetime comment '更新时间',
|
||||
org_code varchar(64) comment '所属部门',
|
||||
del_flag varchar(4) comment '删除状态(0-正常,1-删除)',
|
||||
primary key (id)
|
||||
);
|
||||
|
||||
alter table process_standard_solicit_opinions
|
||||
comment '标准征求意见流程';
|
||||
|
||||
create table process_standard_solicit_opinions_term
|
||||
(
|
||||
id varchar(36) not null comment '主键id',
|
||||
process_id varchar(36) comment '流程主表id',
|
||||
professional_module varchar(30) comment '专业模块',
|
||||
term_id varchar(36) comment '条款id',
|
||||
term_num varchar(200) comment '标准编号/条款号',
|
||||
term_name varchar(200) comment '标准名称/条款内容',
|
||||
create_by varchar(36) comment '创建人',
|
||||
create_time datetime comment '创建时间',
|
||||
update_by varchar(36) comment '更新人',
|
||||
update_time datetime comment '更新时间',
|
||||
org_code varchar(64) comment '所属部门',
|
||||
del_flag varchar(4) comment '删除状态(0-正常,1-删除)',
|
||||
primary key (id)
|
||||
);
|
||||
|
||||
alter table process_standard_solicit_opinions_term
|
||||
comment '标准征求意见流程关联条款';
|
||||
|
||||
create table process_standard_solicit_opinions_user
|
||||
(
|
||||
id varchar(36) not null comment '主键id',
|
||||
process_id varchar(36) comment '流程主表id',
|
||||
term_id varchar(36) comment '流程条款表id',
|
||||
parent_execution_id varchar(36) comment '父执行实例流id',
|
||||
standard_professional_person varchar(36) comment '法规专业负责人',
|
||||
depart_manager varchar(36) comment '部门经理',
|
||||
depart_senior_manager varchar(36) comment '部门高级经理',
|
||||
before_modify varchar(500) comment '修改前',
|
||||
after_modify varchar(500) comment '修改后',
|
||||
reason varchar(500) comment '修改理由',
|
||||
feedback_opinion varchar(10) comment '反馈意见',
|
||||
create_by varchar(36) comment '创建人',
|
||||
create_time datetime comment '创建时间',
|
||||
update_by varchar(36) comment '更新人',
|
||||
update_time datetime comment '更新时间',
|
||||
org_code varchar(64) comment '所属部门',
|
||||
del_flag varchar(4) comment '删除状态(0-正常,1-删除)',
|
||||
primary key (id)
|
||||
);
|
||||
|
||||
alter table process_standard_solicit_opinions_user
|
||||
comment '标准征求意见流程关联用户';
|
||||
-- 企标计划-计划状态
|
||||
INSERT INTO sys_dict (id, dict_name, dict_code, description, del_flag, create_by, create_time, is_tag_dict,
|
||||
is_read_only)
|
||||
VALUES ('1836301517254893569', '企标计划-计划状态', 'esp_plan_status',
|
||||
'新增:新增计划入库 延期:初稿完成日期和计划归档日期延期 取消:计划取消 如走到初稿、征求意见流程了,计划不允许取消', 0, 'cheryrsm', '2024-09-18 15:09:33', 0, 0);
|
||||
INSERT INTO sys_dict_item (id, dict_id, item_text, item_value, description, sort_order, `status`, create_by,
|
||||
create_time, is_tag_dict, is_read_only, del_flag)
|
||||
VALUES ('1836301610292944898', '1836301517254893569', '新增', '1', '', 1, 1, 'cheryrsm', '2024-09-18 15:09:55', 0, 0, 0);
|
||||
INSERT INTO sys_dict_item (id, dict_id, item_text, item_value, description, sort_order, `status`, create_by,
|
||||
create_time, is_tag_dict, is_read_only, del_flag)
|
||||
VALUES ('1836301637493006338', '1836301517254893569', '延期', '2', '', 2, 1, 'cheryrsm', '2024-09-18 15:10:01', 0, 0, 0);
|
||||
INSERT INTO sys_dict_item (id, dict_id, item_text, item_value, description, sort_order, `status`, create_by,
|
||||
create_time, is_tag_dict, is_read_only, del_flag)
|
||||
VALUES ('1836301659982864385', '1836301517254893569', '取消', '3', '', 3, 1, 'cheryrsm', '2024-09-18 15:10:07', 0, 0, 0);
|
||||
|
||||
-- 企标状态增加 征求意见 --
|
||||
INSERT INTO `sys_dict_item` (`id`, `dict_id`, `parent_id`, `item_text`, `en_name`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `is_tag_dict`, `is_read_only`, `attribute_type`, `del_flag`, `stat_node`, `en_base`) VALUES ('1696811980113661954', '1696811542077329409', NULL, '征求意见', 'Seek For Opinions', '2', '征求意见', 2, 1, 'admin', '2023-08-30 17:07:56', NULL, NULL, 1, 1, NULL, '0', NULL, NULL);
|
||||
|
||||
-- 企标计划变更-变更类型
|
||||
INSERT INTO sys_dict (id, dict_name, dict_code, description, del_flag, create_by, create_time, is_tag_dict,
|
||||
is_read_only)
|
||||
VALUES ('1843464136587796482', '企标计划变更-变更类型', 'espc_change_type', '新增,取消,延期,人员变更', 0, 'cheryrsm', '2024-10-08 09:31:14',
|
||||
0, 0);
|
||||
INSERT INTO sys_dict_item (id, dict_id, item_text, en_name, item_value, description, sort_order, `status`, create_by,
|
||||
create_time, is_tag_dict, is_read_only, del_flag)
|
||||
VALUES ('1843464372399955969', '1843464136587796482', '新增', 'add', '1', '', 1, 1, 'cheryrsm', '2024-10-08 09:32:10', 0,
|
||||
0, 0);
|
||||
INSERT INTO sys_dict_item (id, dict_id, item_text, en_name, item_value, description, sort_order, `status`, create_by,
|
||||
create_time, is_tag_dict, is_read_only, del_flag)
|
||||
VALUES ('1843464482533990401', '1843464136587796482', '取消', 'cancel', '2', '', 2, 1, 'cheryrsm', '2024-10-08 09:32:37',
|
||||
0, 0, 0);
|
||||
INSERT INTO sys_dict_item (id, dict_id, item_text, en_name, item_value, description, sort_order, `status`, create_by,
|
||||
create_time, is_tag_dict, is_read_only, del_flag)
|
||||
VALUES ('1843464553690357761', '1843464136587796482', '延期', 'delay', '3', '', 3, 1, 'cheryrsm', '2024-10-08 09:32:54',
|
||||
0, 0, 0);
|
||||
INSERT INTO sys_dict_item (id, dict_id, item_text, en_name, item_value, description, sort_order, `status`, create_by,
|
||||
create_time, is_tag_dict, is_read_only, del_flag)
|
||||
VALUES ('1843464714877460481', '1843464136587796482', '人员变更', 'Person change', '4', '', 4, 1, 'cheryrsm',
|
||||
'2024-10-08 09:33:32', 0, 0, 0);
|
||||
-- 部署模板后 需要更新顺序
|
||||
update process_model_node set sort = 1 where process_key = 'process-plan-change' and xml_node_id = 'qcrfq';
|
||||
update process_model_node set sort = 2 where process_key = 'process-plan-change' and xml_node_id = 'bmjlsp';
|
||||
update process_model_node set sort = 3 where process_key = 'process-plan-change' and xml_node_id = 'fgbmclrsp';
|
||||
update process_model_node set sort = 4 where process_key = 'process-plan-change' and xml_node_id = 'fgbmjlsp';
|
||||
update process_model_node set sort = 5 where process_key = 'process-plan-change' and xml_node_id = 'gjjlsp';
|
||||
update process_model_node set sort = 6 where process_key = 'process-plan-change' and xml_node_id = 'zjsp';
|
||||
update process_model_node set sort = 7 where process_key = 'process-plan-change' and xml_node_id = 'sqrsp';
|
||||
|
||||
update process_model_node set sort = 1 where process_key = 'process-annual-init' and xml_node_id = 'qcrfq';
|
||||
update process_model_node set sort = 2 where process_key = 'process-annual-init' and xml_node_id = 'bmjlsp';
|
||||
update process_model_node set sort = 3 where process_key = 'process-annual-init' and xml_node_id = 'fgbmclrsp';
|
||||
update process_model_node set sort = 4 where process_key = 'process-annual-init' and xml_node_id = 'fgbmjlsp';
|
||||
update process_model_node set sort = 5 where process_key = 'process-annual-init' and xml_node_id = 'gjjlsp';
|
||||
update process_model_node set sort = 6 where process_key = 'process-annual-init' and xml_node_id = 'zjsp';
|
||||
update process_model_node set sort = 7 where process_key = 'process-annual-init' and xml_node_id = 'sqrsp';
|
||||
|
||||
-- 文件表新增字段
|
||||
ALTER TABLE `oss_file`
|
||||
ADD COLUMN `onl_id` varchar(36) NULL COMMENT 'onlyOffice关联Id 每次在线编辑生成一个 历史版本均用' AFTER `bind_id`;
|
||||
|
||||
-- 添加查看征求意见按钮权限
|
||||
INSERT INTO sys_permission (id, parent_id, name, menu_en, perms, perms_type, sort_no, menu_type, is_leaf, is_route, keep_alive, create_by, del_flag, hidden, create_time, status, always_show, internal_or_external) VALUES ('8989f8bc927fe66001927fe660fb0000', '1700076061557874690', '查看征求意见', 'View for comments', 'enterpriseStandard:adviceList', '1', 3.0, 2, true, true, false, 'chh', 0, false, '2024-10-12 16:44:17', '1', false, false);
|
||||
|
||||
-- 修改修订类型字典
|
||||
UPDATE `laws_chery_dev`.`sys_dict` SET `dict_name` = '企标计划-制修订类型', `dict_en_name` = NULL, `dict_code` = 'esp_revision_type', `description` = '', `del_flag` = 0, `create_by` = 'ldq', `create_time` = '2024-09-05 09:32:49', `update_by` = NULL, `update_time` = NULL, `type` = NULL, `is_tag_dict` = 1, `is_read_only` = 0, `attribute_type` = '1', `order_num` = 35 WHERE `id` = '1831505732815413250';
|
||||
|
||||
-- 企标新增制修订类型字段
|
||||
INSERT INTO `laws_tag` (`id`, `table_name`, `db_field_name`, `db_field_en_name`, `db_field_txt`, `order_num`, `db_field_name_old`, `db_is_key`, `db_is_null`, `db_type`, `db_length`, `db_point_length`, `db_default_val`, `dict_field`, `dict_table`, `dict_text`, `field_show_type`, `field_href`, `field_length`, `field_valid_type`, `field_must_input`, `field_extend_json`, `field_default_value`, `is_show_form_create`, `is_query`, `is_show_form`, `is_show_list`, `is_read_only`, `query_mode`, `main_table`, `main_field`, `update_by`, `update_time`, `create_time`, `create_by`, `converter`, `query_def_val`, `query_dict_text`, `query_dict_field`, `query_dict_table`, `query_show_type`, `query_config_flag`, `query_valid_type`, `query_must_input`, `sort_flag`, `show_area`, `is_show_laws_list`, `is_show_search`, `del_flag`, `is_model`, `dict_id`, `home_search_context_order`, `home_search_file_order`, `dict_field_search`, `dict_table_search`, `dict_text_search`, `usable_range`, `tree_first_href`, `import_sort`) VALUES ('1845652446329446401', 'laws_enterprise_standard', 'zhi4_xiu1_ding4_lei4_xing2', 'Revision Type', '制修订类型', 29, 'zhi4_xiu1_ding4_lei4_xing2', 0, 1, 'String', 100, NULL, NULL, 'esp_revision_type', NULL, NULL, '10', NULL, NULL, NULL, '0', NULL, NULL, 0, 0, 1, 0, 0, NULL, NULL, NULL, NULL, NULL, '2024-10-14 10:26:48', 'chh', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '0', '1694631025451048961', NULL, 0, 0, '3', '1831505732815413250', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
|
||||
|
||||
+9
@@ -351,4 +351,13 @@ public interface ISysBaseAPI extends CommonAPI {
|
||||
List<DictModel> loadDictItemByKeyword(String dictCode, String keyword, Integer pageSize);
|
||||
|
||||
String translateByDictMap(Map<String, String> dictMap, String keys);
|
||||
|
||||
Map<String, String> getDepNamesByUserIds(List<String> userIdList);
|
||||
|
||||
/**
|
||||
* 根据部门Id查询,当前和下级所有部门IDS
|
||||
* @param departId
|
||||
* @return
|
||||
*/
|
||||
List<String> getSubDepIdsByDepId(String departId);
|
||||
}
|
||||
|
||||
@@ -219,4 +219,11 @@ public class ResultCommon {
|
||||
|
||||
public static final String TREE_NODE_EXISTS = "tree.node.exists";
|
||||
|
||||
// 当前节点下存在子集
|
||||
public static final String NODE_EXIST_SUBSETS = "node.exist.subsets";
|
||||
// 社团名称不能重复
|
||||
public static final String CLUB_ALREADY_EXISTS = "club.already.exists";
|
||||
// 根节点不能删除
|
||||
public static final String ROOT_NODE_CANNOT_BE_DELETE = "root.node.cannot.be.delete"; // 根节点不能编辑
|
||||
|
||||
}
|
||||
|
||||
@@ -302,7 +302,10 @@ public class DictAspect {
|
||||
String[] arr = dictCode.split(",");
|
||||
String table = arr[0];
|
||||
String text = arr[1];
|
||||
String code = arr[2];
|
||||
for (int i = 2; i < arr.length - 1; i++) {
|
||||
text += "," + arr[i];
|
||||
}
|
||||
String code = arr[arr.length - 1];
|
||||
String values = String.join(",", needTranslDataTable);
|
||||
log.info("translateDictFromTableByKeys.dictCode:" + dictCode);
|
||||
log.info("translateDictFromTableByKeys.values:" + values);
|
||||
|
||||
+5
-1
@@ -259,7 +259,11 @@ public class TranslationAspect {
|
||||
continue; //跳过循环
|
||||
}
|
||||
if (!StringUtils.isEmpty(table) && StrUtil.isNotBlank(text)) {
|
||||
tmpValue = commonAPI.queryTableDictTextByKey(table, text, code, k.trim());
|
||||
if ("sys_user".equals(table)&&"realname".equals(text)&&"id".equals(code)){
|
||||
tmpValue = commonAPI.translateUserRealNameFromTable(k.trim());
|
||||
}else {
|
||||
tmpValue = commonAPI.queryTableDictTextByKey(table, text, code, k.trim());
|
||||
}
|
||||
} else {
|
||||
List<SysDictItemCore> listNew = listDict.stream()
|
||||
.filter(o -> Objects.equals(o.getDictCode(), code) &&
|
||||
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
package com.jero.common.system.base.config;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||
import org.apache.poi.hssf.usermodel.HSSFFont;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.jeecgframework.poi.excel.export.styler.ExcelExportStylerDefaultImpl;
|
||||
|
||||
/**
|
||||
* 自定义excel导出格式,让标题左对齐
|
||||
*/
|
||||
public class JeroCustomExcelExportStyler extends ExcelExportStylerDefaultImpl {
|
||||
|
||||
public JeroCustomExcelExportStyler(Workbook workbook) {
|
||||
super(workbook);
|
||||
}
|
||||
|
||||
// 设置标题的左对齐样式
|
||||
@Override
|
||||
public HSSFCellStyle getHeaderStyle(short color) {
|
||||
HSSFCellStyle headerStyle = (HSSFCellStyle) super.getHeaderStyle(color); // 确保 getHeaderStyle 返回的是 HSSFCellStyle
|
||||
headerStyle.setAlignment(HorizontalAlignment.LEFT); // 左对齐
|
||||
// 将 workbook 转换为 HSSFWorkbook,以便创建 HSSFFont
|
||||
if (workbook instanceof HSSFWorkbook) {
|
||||
HSSFWorkbook hssfWorkbook = (HSSFWorkbook) workbook;
|
||||
HSSFFont font = hssfWorkbook.createFont(); // 创建 HSSFFont
|
||||
font.setFontHeightInPoints((short) 10); // 设置字体大小为10
|
||||
headerStyle.setFont(font); // 将字体设置到样式中
|
||||
}
|
||||
return headerStyle;
|
||||
}
|
||||
}
|
||||
+61
-3
@@ -5,12 +5,15 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.jero.common.api.vo.Result;
|
||||
import com.jero.common.exception.JeroBootException;
|
||||
import com.jero.common.system.base.config.JeroCustomExcelExportStyler;
|
||||
import com.jero.common.system.query.QueryGenerator;
|
||||
import com.jero.common.system.vo.LoginUser;
|
||||
import com.jero.common.util.oConvertUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.beanutils.PropertyUtils;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.jeecgframework.poi.excel.ExcelImportCheckUtil;
|
||||
import org.jeecgframework.poi.excel.ExcelImportUtil;
|
||||
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
|
||||
import org.jeecgframework.poi.excel.entity.ExportParams;
|
||||
@@ -97,12 +100,15 @@ public class JeroController<T, S extends IService<T>> {
|
||||
// Step.3 AutoPoi 导出Excel
|
||||
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
|
||||
//此处设置的filename无效 ,前端会重更新设置一下
|
||||
|
||||
mv.addObject(NormalExcelConstants.FILE_NAME, title);
|
||||
mv.addObject(NormalExcelConstants.CLASS, clazz);
|
||||
ExportParams exportParams=new ExportParams(title, title);
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setTitle("密级:核心商密□普通商密□内部资料■外部公开□");
|
||||
exportParams.setType(ExcelType.HSSF);
|
||||
exportParams.setSheetName(title);
|
||||
exportParams.setStyle(JeroCustomExcelExportStyler.class); // 使用自定义的样式
|
||||
// 导出xlsx
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
exportParams.setImageBasePath(upLoadPath);
|
||||
mv.addObject(NormalExcelConstants.PARAMS,exportParams);
|
||||
mv.addObject(NormalExcelConstants.DATA_LIST, object);
|
||||
return mv;
|
||||
@@ -224,4 +230,56 @@ public class JeroController<T, S extends IService<T>> {
|
||||
}
|
||||
return Result.error("文件导入失败!");
|
||||
}
|
||||
/**
|
||||
* 通过excel获取导入数据
|
||||
*
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
protected List<T> getExcelData(HttpServletRequest request, Class<T> clazz) {
|
||||
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
|
||||
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
|
||||
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
|
||||
// 获取上传文件对象
|
||||
MultipartFile file = entity.getValue();
|
||||
//校验文件名
|
||||
String originalFilename = file.getOriginalFilename();
|
||||
if (originalFilename != null) {
|
||||
String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
|
||||
if (!".xlsx".equals(substring)&&!".xls".equals(substring)) {
|
||||
throw new JeroBootException("文件类型错误:" + "请上传.xlsx或.xls文件!");
|
||||
}
|
||||
} else {
|
||||
throw new JeroBootException("文件错误:" + "文件名丢失,请上传正确的文件!");
|
||||
}
|
||||
ImportParams params = new ImportParams();
|
||||
params.setSheetNum(1);
|
||||
params.setTitleRows(1);
|
||||
params.setHeadRows(1);
|
||||
try {
|
||||
//导入Excel格式校验,看匹配的字段文本概率
|
||||
Boolean t = ExcelImportCheckUtil.check(file.getInputStream(), clazz, params);
|
||||
if (t == null) {
|
||||
throw new JeroBootException("导入数据为空!");
|
||||
}
|
||||
if(!t){
|
||||
throw new JeroBootException("文件格式有误,请下载模板后上传 !");
|
||||
}
|
||||
return ExcelImportUtil.importExcel(file.getInputStream(), clazz, params);
|
||||
} catch (Exception e) {
|
||||
if(Objects.isNull(e.getMessage())){
|
||||
throw new JeroBootException("文件导入失败:请填写内容标题!");
|
||||
}
|
||||
log.error("文件导入失败:",e);
|
||||
throw new JeroBootException("文件导入失败:" + e.getMessage());
|
||||
} finally {
|
||||
try {
|
||||
file.getInputStream().close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
throw new JeroBootException("文件导入失败!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,6 +83,12 @@
|
||||
<artifactId>pdfbox</artifactId>
|
||||
<version>2.0.27</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dom4j</groupId>
|
||||
<artifactId>dom4j</artifactId>
|
||||
<version>2.1.3</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
|
||||
-4
@@ -84,16 +84,12 @@ public class OSSFileController {
|
||||
OSSFile file = ossFileService.getById(id);
|
||||
LambdaQueryWrapper<OSSFile> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(OSSFile::getBindId, id);
|
||||
OSSFile pdfFile = ossFileService.getOne(queryWrapper);
|
||||
if (file == null) {
|
||||
return Result.error("未找到对应实体");
|
||||
}
|
||||
else {
|
||||
result.setResult(file);
|
||||
result.setSuccess(true);
|
||||
if (pdfFile != null) {
|
||||
file.setPdfId(pdfFile.getId());
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -62,6 +62,9 @@ public class OSSFile extends JeroEntity {
|
||||
@ApiModelProperty(value = "docx文件对应的pdf文件 使用此字段绑定docx的版本")
|
||||
private String bindId;
|
||||
|
||||
@ApiModelProperty(value = "onlyOffice关联Id 每次在线编辑生成一个")
|
||||
private String onlId;
|
||||
|
||||
@TableField(exist = false)
|
||||
@ApiModelProperty(value = "PDF版本对应的文件Id")
|
||||
private String pdfId;
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.jero.modules.oss.entity.OSSFile;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
@@ -33,4 +34,5 @@ public interface IOSSFileService extends IService<OSSFile> {
|
||||
|
||||
Result<OSSFile> commonUpload(MultipartFile file, String bizPath);
|
||||
|
||||
void downloadAndViewWithWaterMark(String id, HttpServletResponse response);
|
||||
}
|
||||
|
||||
+106
-1
@@ -1,5 +1,6 @@
|
||||
package com.jero.modules.oss.service.impl;
|
||||
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.jero.common.api.vo.Result;
|
||||
@@ -8,6 +9,7 @@ import com.jero.common.constant.enums.LanguageEnum;
|
||||
import com.jero.common.exception.JeroBootException;
|
||||
import com.jero.common.system.vo.LoginUser;
|
||||
import com.jero.common.util.CommonUtils;
|
||||
import com.jero.common.util.IntekeyUtils;
|
||||
import com.jero.common.util.MinioUtil;
|
||||
import com.jero.common.util.oConvertUtils;
|
||||
import com.jero.common.util.obs.ObsBootUtil;
|
||||
@@ -16,16 +18,25 @@ import com.jero.modules.oss.entity.OSSFile;
|
||||
import com.jero.modules.oss.mapper.OSSFileMapper;
|
||||
import com.jero.modules.oss.service.IOSSFileService;
|
||||
import com.jero.modules.system.util.MyStringUtils;
|
||||
import com.jero.modules.system.util.SysWaterMarkUtil;
|
||||
import me.zhyd.oauth.utils.UuidUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.entity.ContentType;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.mock.web.MockMultipartFile;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.*;
|
||||
|
||||
@Service("ossFileService")
|
||||
@@ -49,6 +60,11 @@ public class OSSFileServiceImpl extends ServiceImpl<OSSFileMapper, OSSFile> impl
|
||||
@Value(value = "${jero.splitUrl}")
|
||||
private String splitUrl;
|
||||
|
||||
@Resource
|
||||
private SysWaterMarkUtil sysWaterMarkUtil;
|
||||
|
||||
private static final String FILE_VIEW_ERROR = "预览文件失败";
|
||||
|
||||
@Override
|
||||
public void upload(MultipartFile multipartFile) throws IOException {
|
||||
String fileName = multipartFile.getOriginalFilename();
|
||||
@@ -349,7 +365,6 @@ public class OSSFileServiceImpl extends ServiceImpl<OSSFileMapper, OSSFile> impl
|
||||
@Override
|
||||
public Result<OSSFile> outUpload(HttpServletRequest request) {
|
||||
Result<OSSFile> result = new Result<>();
|
||||
String savePath = "";
|
||||
String bizPath = request.getParameter("biz");
|
||||
|
||||
//sys/common/upload接口存在任意文件上传漏洞
|
||||
@@ -405,4 +420,94 @@ public class OSSFileServiceImpl extends ServiceImpl<OSSFileMapper, OSSFile> impl
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void downloadAndViewWithWaterMark(@PathVariable String id, HttpServletResponse response) {
|
||||
// 查询数据表数据是否存在
|
||||
LambdaQueryWrapper<OSSFile> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(OSSFile::getId, id);
|
||||
OSSFile ossFile = this.getOne(queryWrapper);
|
||||
if (null == ossFile) {
|
||||
throw new JeroBootException("文件不存在..");
|
||||
}
|
||||
String fileUrl = ossFile.getUrl();
|
||||
// minio 下载
|
||||
// 通过MinioUtil查询时 只需要桶后面的路径
|
||||
String minioUrl = MinioUtil.getMinioUrl();
|
||||
// Linux/unix 系统下文件路径分隔符为"/" 获取minio与存储桶的路径
|
||||
minioUrl = minioUrl + MinioUtil.getBucketName() + "/";
|
||||
String url = fileUrl.replace(minioUrl, "");
|
||||
// 文件名称
|
||||
String fileName = ossFile.getFileName();
|
||||
response.addHeader("Content-Disposition", "attachment;fileName=" + new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
|
||||
// 设置强制下载不打开
|
||||
response.setContentType("application/force-download");
|
||||
// 然后在您的controller方法中:
|
||||
InputStream watermarkedInputStream = null;
|
||||
if (CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)) {
|
||||
try (InputStream inputStream = MinioUtil.getMinioFile(MinioUtil.getBucketName(), url);
|
||||
OutputStream outputStream = response.getOutputStream()
|
||||
) {
|
||||
byte[] buf = new byte[1024];
|
||||
int len;
|
||||
if (inputStream == null) {
|
||||
return;
|
||||
}
|
||||
while ((len = inputStream.read(buf)) > 0) {
|
||||
outputStream.write(buf, 0, len);
|
||||
}
|
||||
response.flushBuffer();
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
response.setStatus(404);
|
||||
}
|
||||
}else if(CommonConstant.UPLOAD_TYPE_OBS.equals(uploadType)) {
|
||||
// 华为云 下载
|
||||
if ("pdf".equalsIgnoreCase(FileUtil.extName(fileName))) {
|
||||
try (InputStream originalInputStream = ObsBootUtil.getOssFile(fileUrl);
|
||||
OutputStream outputStream = response.getOutputStream()) {
|
||||
if (originalInputStream == null) {
|
||||
return;
|
||||
}
|
||||
MultipartFile mFile = new MockMultipartFile(fileName, fileName,
|
||||
ContentType.APPLICATION_OCTET_STREAM.toString(), originalInputStream);
|
||||
InputStream inputStream = IntekeyUtils.getInputStreamByDecryptFile(mFile);
|
||||
watermarkedInputStream = sysWaterMarkUtil.addWatermarkToPdf(inputStream);
|
||||
|
||||
byte[] buf = new byte[1024];
|
||||
int len;
|
||||
while ((len = watermarkedInputStream.read(buf)) > 0) {
|
||||
outputStream.write(buf, 0, len);
|
||||
}
|
||||
response.flushBuffer();
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("error:",e);
|
||||
response.setStatus(404);
|
||||
}finally {
|
||||
try {
|
||||
if (watermarkedInputStream != null){
|
||||
watermarkedInputStream.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
log.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
try (InputStream inputStream = ObsBootUtil.getOssFile(fileUrl);
|
||||
OutputStream outputStream = response.getOutputStream()
|
||||
) {
|
||||
byte[] buf = new byte[1024];
|
||||
int len;
|
||||
while ((len = inputStream.read(buf)) > 0) {
|
||||
outputStream.write(buf, 0, len);
|
||||
}
|
||||
response.flushBuffer();
|
||||
} catch (Exception e) {
|
||||
log.error(FILE_VIEW_ERROR + e.getMessage());
|
||||
response.setStatus(404);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+63
@@ -181,7 +181,70 @@ public class SysUserController {
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户列表数据
|
||||
* @param user
|
||||
* @param pageNo
|
||||
* @param pageSize
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
@ApiOperationSupport(order = 1)
|
||||
@ApiOperation(value="用户列表查询", notes="用户列表查询")
|
||||
@PermissionData(pageComponent = "system/UserList")
|
||||
@GetMapping("/pageDecrypt")
|
||||
public Result<IPage<SysUser>> queryPageListDecrypt(SysUser user,
|
||||
@RequestParam(name="departId", required = false) String departId,
|
||||
@RequestParam(name="roleId", required = false) String roleId,
|
||||
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
|
||||
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) {
|
||||
Result<IPage<SysUser>> result = new Result<>();
|
||||
|
||||
// 处理手机号和邮箱,进行对应加密
|
||||
Map<String, String[]> parameterMap = req.getParameterMap();
|
||||
String groupId = req.getParameter("groupId");
|
||||
this.sysUserService.encryptReqMapData(parameterMap);
|
||||
user.setEmail(this.sysUserService.proceedEmailEncrypt(user.getEmail()));
|
||||
user.setPhone(this.sysUserService.proceedPhoneEncrypt(user.getPhone()));
|
||||
|
||||
QueryWrapper<SysUser> queryWrapper = QueryGenerator.initQueryWrapper(user, parameterMap);
|
||||
|
||||
Page<SysUser> page = new Page<>(pageNo, pageSize);
|
||||
List<String> subDepIds = null;
|
||||
if (StrUtil.isNotEmpty(departId)){
|
||||
subDepIds = sysDepartService.getSubDepIdsByDepId(departId);
|
||||
}
|
||||
if (StringUtils.isNotBlank(user.getRealnameOrUsername())){
|
||||
queryWrapper.and(aw -> aw.like("realname", user.getRealnameOrUsername())
|
||||
.or().like("username", user.getRealnameOrUsername()));
|
||||
}
|
||||
IPage<SysUser> pageList;
|
||||
try {
|
||||
pageList = sysUserService.queryPageDecrypt(page, subDepIds, roleId, groupId, queryWrapper);
|
||||
}catch (Exception e){
|
||||
log.error("操作异常:" + e.getMessage());
|
||||
return Result.error(MessageUtils.getMessage(ResultCommon.ERROR));
|
||||
}
|
||||
//批量查询用户的所属部门
|
||||
//step.1 先拿到全部的 useids
|
||||
List<String> userIds = pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList());
|
||||
if(userIds!=null && !userIds.isEmpty()){
|
||||
//step.2 通过 useids,一次性查询用户的所属部门名字
|
||||
Map<String,String> useDepNames = sysUserService.getDepNamesByUserIds(userIds);
|
||||
//step.3 通过 useids,一次性查询用户的角色名字
|
||||
Map<String,String> useRoleNames = sysUserService.getRoleNamesByUserIds(userIds);
|
||||
//step.4 遍历赋值
|
||||
pageList.getRecords().forEach(item->{
|
||||
item.setOrgCodeTxt(useDepNames.get(item.getId()));
|
||||
item.setRoleTxt(useRoleNames.get(item.getId()));
|
||||
});
|
||||
}
|
||||
|
||||
result.setSuccess(true);
|
||||
result.setResult(pageList);
|
||||
SysUserController.log.info(pageList.toString());
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* 获取用户列表数据
|
||||
* @param user
|
||||
|
||||
@@ -37,6 +37,13 @@ public interface ISysUserService extends IService<SysUser> {
|
||||
* @return
|
||||
*/
|
||||
IPage<SysUser> queryPage(Page<SysUser> page, List<String> subDepIds, String roleId, String groupId, QueryWrapper<SysUser> queryWrapper);
|
||||
/**
|
||||
* 分页查询用户,可支持组织机构检索
|
||||
* @param page
|
||||
* @param queryWrapper
|
||||
* @return
|
||||
*/
|
||||
IPage<SysUser> queryPageDecrypt(Page<SysUser> page, List<String> subDepIds, String roleId, String groupId, QueryWrapper<SysUser> queryWrapper);
|
||||
|
||||
/**
|
||||
* 查询用户id
|
||||
|
||||
+1
@@ -701,6 +701,7 @@ public class LoginServiceImpl implements ILoginService {
|
||||
String departIds_dicText = this.translateDictValue("id", "depart_name", "sys_depart", departIds, null);
|
||||
sysUser.setDepartIds_dicText(departIds_dicText);
|
||||
}
|
||||
sysUser.setEmail(PasswordUtil.decrypt(sysUser.getEmail()));
|
||||
obj.put("token", token);
|
||||
obj.put(USER_INFO, sysUser);
|
||||
obj.put("sysAllDictItems", sysDictService.queryAllDictItems());
|
||||
|
||||
+12
@@ -77,6 +77,8 @@ public class SysBaseApiImpl implements ISysBaseAPI {
|
||||
private SysUserRoleMapper sysUserRoleMapper;
|
||||
@Autowired
|
||||
private ISysDepartService sysDepartService;
|
||||
@Resource
|
||||
private ISysUserService sysUserService;
|
||||
@Autowired
|
||||
private ISysDictService sysDictService;
|
||||
@Resource
|
||||
@@ -1194,6 +1196,16 @@ public class SysBaseApiImpl implements ISysBaseAPI {
|
||||
return String.join(",",resultList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getDepNamesByUserIds(List<String> userIdList) {
|
||||
return sysUserService.getDepNamesByUserIds(userIdList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getSubDepIdsByDepId(String departId) {
|
||||
return sysDepartService.getSubDepIdsByDepId(departId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, List<DictModel>> translateManyDict(String dictCodes, String keys) {
|
||||
List<String> dictCodeList = Arrays.asList(dictCodes.split(","));
|
||||
|
||||
+11
@@ -90,6 +90,17 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
return sysUserIPage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPage<SysUser> queryPageDecrypt(Page<SysUser> page, List<String> subDepIds, String roleId, String groupId, QueryWrapper<SysUser> queryWrapper) {
|
||||
IPage<SysUser> sysUserIPage = this.userMapper.queryPage(page, subDepIds, roleId, groupId, queryWrapper);
|
||||
sysUserIPage.getRecords().forEach(user -> {
|
||||
// 对手机号、邮箱进行解密处理
|
||||
user.setEmail(proceedEmailDecrypt(user.getEmail()));
|
||||
user.setPhone(proceedPhoneDecrypt(user.getPhone()));
|
||||
});
|
||||
return sysUserIPage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> queryList(List<String> subDepIds, String roleId, String groupId, QueryWrapper<SysUser> queryWrapper){
|
||||
return this.userMapper.queryList(subDepIds, roleId, groupId, queryWrapper);
|
||||
|
||||
@@ -0,0 +1,238 @@
|
||||
package com.jero.modules.util;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.jero.common.exception.JeroBootException;
|
||||
import com.jero.common.util.CommonUtils;
|
||||
import com.jero.common.util.IntekeyUtils;
|
||||
import com.jero.common.util.MinioUtil;
|
||||
import com.jero.common.util.oConvertUtils;
|
||||
import com.jero.modules.oss.entity.OSSFile;
|
||||
import com.jero.modules.oss.service.IOSSFileService;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.HttpStatus;
|
||||
import org.apache.http.client.config.RequestConfig;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.entity.ContentType;
|
||||
import org.apache.http.entity.StringEntity;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.dom4j.Document;
|
||||
import org.dom4j.DocumentHelper;
|
||||
import org.dom4j.Element;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.mock.web.MockMultipartFile;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author: Mzaxd
|
||||
* @Date: 2024/4/25 9:08
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class SysOnlyOfficePdfUtil {
|
||||
|
||||
@Resource
|
||||
private IOSSFileService ossFileService;
|
||||
|
||||
@Value("${file.downloadUrl}")
|
||||
private String downloadFileUrl;
|
||||
|
||||
@Value("${onlyoffice.toUrl}")
|
||||
private String onlyOfficeUrl;
|
||||
|
||||
@Value("${onlyoffice.transferPDfUrl}")
|
||||
private String transferPDfUrl;
|
||||
|
||||
@Value(value = "${jero.uploadType}")
|
||||
private String uploadType;
|
||||
|
||||
@Value("#{'${download.enable}'}")
|
||||
private boolean enable;
|
||||
|
||||
@Value("${file.path}")
|
||||
private String filePath;//文件存储路径
|
||||
|
||||
private static final int TIMEOUT = 60000; // 通用超时设置
|
||||
|
||||
@SneakyThrows
|
||||
public void convertAndSavePdfFile(String fileName, String originFileId, String onlineFilePath) {
|
||||
String key = UUID.randomUUID().toString();
|
||||
log.info("转换的请求参数:onlyOfficeUrl:{}, filePdfName:{}, key:{}, originFileId:{}, onlineFilePath:{}", onlyOfficeUrl, fileName, key, originFileId, onlineFilePath);
|
||||
// 获取onlyOffice转换后文件的url
|
||||
String fileUrl = convertFile(fileName, key, onlineFilePath);
|
||||
log.info("文件转换后PDF的URL: {}", fileUrl);
|
||||
|
||||
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
|
||||
// 根据url获取转换后的文件
|
||||
fetchAndSaveFile(httpClient, fileName, fileUrl, originFileId);
|
||||
} // 自动关闭httpClient
|
||||
}
|
||||
|
||||
private CloseableHttpClient createHttpClient() {
|
||||
RequestConfig requestConfig = RequestConfig.custom()
|
||||
.setSocketTimeout(TIMEOUT)
|
||||
.setConnectionRequestTimeout(TIMEOUT)
|
||||
.setConnectTimeout(TIMEOUT)
|
||||
.build();
|
||||
|
||||
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
|
||||
return httpClientBuilder.setDefaultRequestConfig(requestConfig).build();
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
private String convertFile(String fileName, String key, String onlineFilePath) {
|
||||
Map<String, Object> parameters = new HashMap<>();
|
||||
parameters.put("async", false);
|
||||
parameters.put("filetype", "docx");
|
||||
parameters.put("key", key);
|
||||
parameters.put("outputtype", "pdf");
|
||||
parameters.put("title", fileName + ".pdf");
|
||||
parameters.put("url", downloadFileUrl + onlineFilePath);
|
||||
log.info("转换文件参数: {}", parameters);
|
||||
JSONObject requestJson = new JSONObject(parameters);
|
||||
String data = requestJson.toString();
|
||||
|
||||
try (CloseableHttpClient httpClient = createHttpClient()) {
|
||||
String url = "http://" + onlyOfficeUrl + transferPDfUrl;
|
||||
log.info("访问onlyOfficeUrl:{}", url);
|
||||
HttpPost httpPost = new HttpPost(url);
|
||||
httpPost.setEntity(new StringEntity(data, "UTF-8"));
|
||||
httpPost.setHeader("Content-type", "application/json; charset=UTF-8");
|
||||
|
||||
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
|
||||
return handleResponse(response);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
private void fetchAndSaveFile(CloseableHttpClient httpClient, String fileName, String fileUrl, String originFileId) {
|
||||
String pdfFileName = fileName + ".pdf";
|
||||
HttpGet get = new HttpGet(fileUrl);
|
||||
try (CloseableHttpResponse response = httpClient.execute(get)) {
|
||||
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
|
||||
throw new JeroBootException("Failed to fetch the file: " + response);
|
||||
}
|
||||
HttpEntity entity = response.getEntity();
|
||||
if (entity != null) {
|
||||
try (InputStream content = entity.getContent()) {
|
||||
MultipartFile file = new MockMultipartFile(pdfFileName, pdfFileName, ContentType.APPLICATION_OCTET_STREAM.toString(), content);
|
||||
// 保存文件逻辑
|
||||
String savePath = CommonUtils.upload(file, "convert", uploadType);
|
||||
if (oConvertUtils.isNotEmpty(savePath)) {
|
||||
// 如果有的话,删除原来的pdf版本
|
||||
LambdaQueryWrapper<OSSFile> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(OSSFile::getBindId, originFileId);
|
||||
ossFileService.remove(lambdaQueryWrapper);
|
||||
|
||||
// 上传成功 进行数据库存储
|
||||
OSSFile ossFile = new OSSFile();
|
||||
// 文件名
|
||||
ossFile.setFileName(pdfFileName);
|
||||
ossFile.setUrl(savePath);
|
||||
ossFile.setBindId(originFileId);
|
||||
ossFileService.save(ossFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
private String handleResponse(CloseableHttpResponse response) {
|
||||
HttpEntity entity = response.getEntity();
|
||||
if (entity != null) {
|
||||
String responseData = EntityUtils.toString(entity, "UTF-8");
|
||||
return analysisXML(responseData);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public static String analysisXML(String xmlString) {
|
||||
log.info("OnlyOffice返回xmlString:{}", xmlString);
|
||||
Document document = DocumentHelper.parseText(xmlString);
|
||||
Element root = document.getRootElement();
|
||||
return root.elementText("FileUrl").replaceAll("&", "&");
|
||||
}
|
||||
|
||||
public List<OSSFile> docFileTransferPdf(String fileIds) {
|
||||
List<OSSFile> resultList = new ArrayList<>();
|
||||
// 获取所有需要生成pdf版本的文件
|
||||
// 先获取所有有url的文件记录
|
||||
LambdaQueryWrapper<OSSFile> ossWrapper = new LambdaQueryWrapper<>();
|
||||
ossWrapper.in(StrUtil.isNotBlank(fileIds), OSSFile::getId, Arrays.asList(fileIds.split(",")));
|
||||
ossWrapper.isNotNull(OSSFile::getUrl);
|
||||
List<OSSFile> ossFileList = ossFileService.list(ossWrapper);
|
||||
if (CollUtil.isEmpty(ossFileList)) {
|
||||
return null;
|
||||
}
|
||||
// 筛选出后缀为doc或docx的文件
|
||||
List<OSSFile> docFileList = ossFileList.stream()
|
||||
.filter(o -> o.getUrl().endsWith("doc") || o.getUrl().endsWith("docx"))
|
||||
.collect(Collectors.toList());
|
||||
// 筛选出已经转换过的pdf文件
|
||||
Map<String, List<OSSFile>> alreadyTransferFileMap = ossFileList.stream()
|
||||
.filter(o -> StrUtil.isNotBlank(o.getBindId()))
|
||||
.collect(Collectors.groupingBy(OSSFile::getBindId));
|
||||
for (OSSFile ossFile : docFileList){
|
||||
List<OSSFile> existPdfFileList = alreadyTransferFileMap.get(ossFile.getId());
|
||||
// 已经转换过的不再重复转换
|
||||
if (CollUtil.isNotEmpty(existPdfFileList)) {
|
||||
continue;
|
||||
}
|
||||
String docFileName = ossFile.getFileName();
|
||||
log.info("开始处理文件名为 {} 的文件转换工作", docFileName);
|
||||
// 根据文件url获取文件
|
||||
InputStream isDecrypt;
|
||||
try (InputStream is = MinioUtil.download(ossFile.getUrl())) {
|
||||
isDecrypt = is;
|
||||
// 文件解密
|
||||
if (enable) {
|
||||
isDecrypt = IntekeyUtils.autoDecryptInputStreamFile(isDecrypt, ossFile.getFileName());
|
||||
}
|
||||
// 转换为pdf
|
||||
String pdfFileName = docFileName.substring(0, docFileName.lastIndexOf("."));
|
||||
String targetPath = "convert/" + ossFile.getFileName();
|
||||
File targetFile = new File(filePath + targetPath);
|
||||
try (OutputStream outputStream = Files.newOutputStream(targetFile.toPath())) {
|
||||
byte[] buffer = new byte[1024];
|
||||
int bytesRead;
|
||||
while ((bytesRead = isDecrypt.read(buffer)) != -1) {
|
||||
outputStream.write(buffer, 0, bytesRead);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
log.error("文件写入失败:" + e.getMessage());
|
||||
}
|
||||
this.convertAndSavePdfFile(pdfFileName, ossFile.getId(), targetPath);
|
||||
// 将下载到本地的文件删除
|
||||
FileUtil.del(targetFile);
|
||||
log.info("文件名为 {} 的文件转换成功", docFileName);
|
||||
resultList.add(ossFile);
|
||||
} catch (Exception e) {
|
||||
log.error("文件名为 {} 的文件转换失败,失败原因{}", docFileName, e.getMessage());
|
||||
}
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.jero.modules.docking.api.constans;
|
||||
|
||||
public class ApiConstants {
|
||||
private ApiConstants(){}
|
||||
/**
|
||||
* 生效
|
||||
*/
|
||||
public static final String STATUS_1 = "1";
|
||||
|
||||
/**
|
||||
* 作废
|
||||
*/
|
||||
public static final String STATUS_2 = "2";
|
||||
|
||||
/**
|
||||
* 奇瑞型号
|
||||
*/
|
||||
public static final String FORM_TYPE1 = "1";
|
||||
|
||||
/**
|
||||
* 是
|
||||
*/
|
||||
public static final String PART_YES = "1";
|
||||
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
package com.jero.modules.docking.api.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.jero.common.api.vo.Result;
|
||||
import com.jero.modules.docking.api.service.ILawsSysApiInfoService;
|
||||
import com.jero.modules.docking.api.vo.StandardData;
|
||||
import io.swagger.annotations.Api;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
@Api(tags = "外部对接-提供对外接口")
|
||||
@RestController
|
||||
@RequestMapping("/api")
|
||||
@Slf4j
|
||||
public class LawsSysApiInfoController {
|
||||
|
||||
@Resource
|
||||
private ILawsSysApiInfoService lawsSysApiInfoService;
|
||||
|
||||
/**
|
||||
* 分页列表
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/getStandardDataPage")
|
||||
public Result<IPage<StandardData>> getStandardDataPage(@RequestBody StandardData standardData,
|
||||
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
|
||||
HttpServletRequest req) {
|
||||
return lawsSysApiInfoService.getStandardDataPage(standardData,pageNo,pageSize,req);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 列表
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/getStandardDataList")
|
||||
public Result<List<StandardData>> getStandardDataList(@RequestBody StandardData standardData,HttpServletRequest req) {
|
||||
return lawsSysApiInfoService.getStandardDataList(standardData,req);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
package com.jero.modules.docking.api.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 系统对接信息
|
||||
*
|
||||
* @TableName laws_sys_api_info
|
||||
*/
|
||||
@TableName(value ="laws_sys_api_info")
|
||||
@Data
|
||||
public class LawsSysApiInfo implements Serializable {
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@ApiModelProperty(value = "主键")
|
||||
private String id;
|
||||
/**
|
||||
* 系统中文名称
|
||||
*/
|
||||
@ApiModelProperty(value = "系统中文名称")
|
||||
private String sysName;
|
||||
/**
|
||||
* 系统唯一标识
|
||||
*/
|
||||
@ApiModelProperty(value = "系统唯一标识")
|
||||
private String sysCode;
|
||||
/**
|
||||
* 系统的key值
|
||||
*/
|
||||
@ApiModelProperty(value = "系统的key值")
|
||||
private String appKey;
|
||||
/**
|
||||
* 系统对应秘钥
|
||||
*/
|
||||
@ApiModelProperty(value = "系统对应秘钥")
|
||||
private String secret;
|
||||
/**
|
||||
* IP白名单
|
||||
*/
|
||||
@ApiModelProperty(value = "IP白名单")
|
||||
private String ip;
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
package com.jero.modules.docking.api.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.jero.modules.docking.api.entity.LawsSysApiInfo;
|
||||
import com.jero.modules.docking.api.vo.StandardData;
|
||||
import com.jero.modules.laws.part.entity.LawsPartType;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public interface LawsSysApiInfoMapper extends BaseMapper<LawsSysApiInfo> {
|
||||
|
||||
IPage<StandardData> getStandardData(Page<StandardData> page,
|
||||
@Param(Constants.WRAPPER) QueryWrapper<StandardData> queryWrapper,
|
||||
@Param("foreignStandardReturnUrl") String foreignStandardReturnUrl,
|
||||
@Param("enterpriseStandardReturnUrl")String enterpriseStandardReturnUrl);
|
||||
|
||||
List<StandardData> getStandardData(@Param(Constants.WRAPPER) QueryWrapper<StandardData> queryWrapper,
|
||||
@Param("foreignStandardReturnUrl") String foreignStandardReturnUrl,
|
||||
@Param("enterpriseStandardReturnUrl")String enterpriseStandardReturnUrl);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.jero.modules.docking.api.mapper.LawsSysApiInfoMapper">
|
||||
|
||||
<select id="getStandardData" resultType="com.jero.modules.docking.api.vo.StandardData">
|
||||
select * from (
|
||||
select standard_number, standard_name, '1' as resource_type, concat(#{foreignStandardReturnUrl},id) as returnUrl
|
||||
from laws_domestic_standard where del_flag = 0
|
||||
union all
|
||||
select standard_number, standard_name, '2' as resource_type, concat(#{enterpriseStandardReturnUrl},id) as returnUrl
|
||||
from laws_enterprise_standard where del_flag = 0
|
||||
) a
|
||||
${ew.customSqlSegment}
|
||||
</select>
|
||||
</mapper>
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.jero.modules.docking.api.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.jero.common.api.vo.Result;
|
||||
import com.jero.modules.docking.api.entity.LawsSysApiInfo;
|
||||
import com.jero.modules.docking.api.vo.StandardData;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface ILawsSysApiInfoService extends IService<LawsSysApiInfo> {
|
||||
|
||||
Result<IPage<StandardData>> getStandardDataPage(StandardData standardData,Integer pageNo,Integer pageSize,
|
||||
HttpServletRequest req);
|
||||
|
||||
Result<List<StandardData>> getStandardDataList(StandardData standardData,HttpServletRequest req);
|
||||
|
||||
}
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
package com.jero.modules.docking.api.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.jero.common.api.vo.Result;
|
||||
import com.jero.common.system.query.QueryGenerator;
|
||||
import com.jero.modules.docking.api.entity.LawsSysApiInfo;
|
||||
import com.jero.modules.docking.api.mapper.LawsSysApiInfoMapper;
|
||||
import com.jero.modules.docking.api.service.ILawsSysApiInfoService;
|
||||
import com.jero.modules.docking.api.vo.StandardData;
|
||||
import com.jero.modules.laws.common.constant.FieldCommon;
|
||||
import com.jero.modules.laws.common.service.ILawsCommonService;
|
||||
import com.jero.modules.laws.home.common.LawsHomeSearchCommon;
|
||||
import com.jero.modules.laws.home.mapper.LawsHomeSearchMapper;
|
||||
import com.jero.modules.laws.part.entity.LawsPartType;
|
||||
import com.jero.modules.system.service.ISysDictService;
|
||||
import com.jero.modules.tag.enums.TableNameEnum;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class LawsSysApiInfoServiceImpl extends ServiceImpl<LawsSysApiInfoMapper, LawsSysApiInfo>
|
||||
implements ILawsSysApiInfoService {
|
||||
|
||||
@Resource
|
||||
private LawsSysApiInfoMapper lawsSysApiInfoMapper;
|
||||
@Value("api.enterprise_standard_return_url")
|
||||
private String enterpriseStandardReturnUrl;
|
||||
|
||||
@Value("api.foreign_standard_return_url")
|
||||
private String foreignStandardReturnUrl;
|
||||
|
||||
|
||||
@Override
|
||||
public Result<IPage<StandardData>> getStandardDataPage(StandardData standardData,Integer pageNo,Integer pageSize,
|
||||
HttpServletRequest req) {
|
||||
String msg = checkSysInfo(standardData.getAppKey(),standardData.getSecret(),req);
|
||||
if(!StringUtils.isEmpty(msg)){
|
||||
return Result.error(msg);
|
||||
}
|
||||
QueryWrapper<StandardData> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.like(!StringUtils.isEmpty(standardData.getStandardNumber()),"standard_number",standardData.getStandardNumber());
|
||||
queryWrapper.like(!StringUtils.isEmpty(standardData.getStandardName()),"standard_name",standardData.getStandardName());
|
||||
queryWrapper.eq(!StringUtils.isEmpty(standardData.getResourceType()),"resource_type",standardData.getResourceType());
|
||||
queryWrapper.orderByDesc("create_time");
|
||||
Page<StandardData> page = new Page<>(pageNo, pageSize);
|
||||
return Result.OK(lawsSysApiInfoMapper.getStandardData(page,queryWrapper, foreignStandardReturnUrl, enterpriseStandardReturnUrl));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<List<StandardData>> getStandardDataList(StandardData standardData,HttpServletRequest req) {
|
||||
String msg = checkSysInfo(standardData.getAppKey(),standardData.getSecret(),req);
|
||||
if(!StringUtils.isEmpty(msg)){
|
||||
return Result.error(msg);
|
||||
}
|
||||
QueryWrapper<StandardData> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.like(!StringUtils.isEmpty(standardData.getStandardNumber()),"standard_number",standardData.getStandardNumber());
|
||||
queryWrapper.like(!StringUtils.isEmpty(standardData.getStandardName()),"standard_name",standardData.getStandardName());
|
||||
queryWrapper.eq(!StringUtils.isEmpty(standardData.getResourceType()),"resource_type",standardData.getResourceType());
|
||||
queryWrapper.orderByDesc("create_time");
|
||||
return Result.OK(lawsSysApiInfoMapper.getStandardData(queryWrapper, foreignStandardReturnUrl, enterpriseStandardReturnUrl));
|
||||
}
|
||||
|
||||
public String checkSysInfo(String appKey,String secret,HttpServletRequest req){
|
||||
if(StringUtils.isEmpty(appKey) || StringUtils.isEmpty(secret)){
|
||||
return "参数异常";
|
||||
}
|
||||
LambdaQueryWrapper<LawsSysApiInfo> query = new LambdaQueryWrapper<>();
|
||||
query.eq(LawsSysApiInfo::getAppKey,appKey);
|
||||
query.eq(LawsSysApiInfo::getSecret,secret);
|
||||
LawsSysApiInfo lawsSysApiInfo = getOne(query,false);
|
||||
if(Objects.isNull(lawsSysApiInfo)){
|
||||
return "非法请求";
|
||||
}
|
||||
if(!StringUtils.isEmpty(lawsSysApiInfo.getIp())
|
||||
&& !Arrays.asList(lawsSysApiInfo.getIp().split(",")).contains(getClientIp(req))){
|
||||
return "非法请求";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private String getClientIp(HttpServletRequest request) {
|
||||
String ipAddress = request.getHeader("X-Forwarded-For");
|
||||
if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
|
||||
ipAddress = request.getHeader("Proxy-Client-IP");
|
||||
}
|
||||
if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
|
||||
ipAddress = request.getHeader("WL-Proxy-Client-IP");
|
||||
}
|
||||
if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
|
||||
ipAddress = request.getHeader("HTTP_CLIENT_IP");
|
||||
}
|
||||
if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
|
||||
ipAddress = request.getHeader("HTTP_X_FORWARDED_FOR");
|
||||
}
|
||||
if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
|
||||
ipAddress = request.getRemoteAddr();
|
||||
}
|
||||
|
||||
// 如果X-Forwarded-For有多层代理,取第一个IP作为客户端真实IP
|
||||
if (ipAddress != null && ipAddress.contains(",")) {
|
||||
ipAddress = ipAddress.split(",")[0];
|
||||
}
|
||||
|
||||
return ipAddress;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.jero.modules.docking.api.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author lqt
|
||||
* @version 1.0
|
||||
* @date 2024/10/15 16:15
|
||||
*/
|
||||
@Data
|
||||
public class StandardData implements Serializable {
|
||||
|
||||
/**
|
||||
* 标准编号
|
||||
*/
|
||||
private String standardNumber;
|
||||
/**
|
||||
* 标准名称
|
||||
*/
|
||||
private String standardName;
|
||||
/**
|
||||
* 标准类型1:外标 2:企标
|
||||
*/
|
||||
private String resourceType;
|
||||
/**
|
||||
* 详情页跳转url
|
||||
*/
|
||||
private String returnUrl;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@JsonIgnore
|
||||
private String id;
|
||||
/**
|
||||
* key
|
||||
*/
|
||||
@JsonIgnore
|
||||
private String appKey;
|
||||
/**
|
||||
* secret
|
||||
*/
|
||||
@JsonIgnore
|
||||
private String secret;
|
||||
}
|
||||
-1
@@ -11,7 +11,6 @@ import com.jero.modules.onlyoffice.utils.OnlyOfficePdfUtil;
|
||||
import com.jero.modules.oss.entity.OSSFile;
|
||||
import com.jero.modules.oss.service.IOSSFileService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
|
||||
@@ -22,4 +22,38 @@ public class ActivitiCommon {
|
||||
* 未处理
|
||||
*/
|
||||
public static final int COMMIT_FLAG3 = 3;
|
||||
|
||||
/**
|
||||
* 起草人
|
||||
*/
|
||||
public static final String MAIN_DRAFT_USER = "mainDraftUser";
|
||||
|
||||
/**
|
||||
* 审批人一
|
||||
*/
|
||||
public static final String USER_ONE_List = "userOneList";
|
||||
/**
|
||||
* 审批人二
|
||||
*/
|
||||
public static final String USER_TWO_List = "userTwoList";
|
||||
/**
|
||||
* 审批人三
|
||||
*/
|
||||
public static final String USER_THREE_List = "userThreeList";
|
||||
/**
|
||||
* 审批人四
|
||||
*/
|
||||
public static final String USER_FOUR_List = "userFourList";
|
||||
/**
|
||||
* 审批人五
|
||||
*/
|
||||
public static final String USER_FIVE_List = "userFiveList";
|
||||
/**
|
||||
* 审批人六
|
||||
*/
|
||||
public static final String USER_SIX_List = "userSixList";
|
||||
/**
|
||||
* 审批人七
|
||||
*/
|
||||
public static final String USER_SEVEN_List = "userSevenList";
|
||||
}
|
||||
|
||||
+2
-2
@@ -282,8 +282,8 @@ public class WorkCenterController {
|
||||
@ApiOperation(value="保存", notes="保存")
|
||||
@PostMapping("/save")
|
||||
public Result<?> save(@Validated @RequestBody ProcessInfoVO processInfoVO) {
|
||||
processHandleService.saveToDraft(processInfoVO, UserUtils.getUserId());
|
||||
return Result.OK();
|
||||
String draftId = processHandleService.saveToDraft(processInfoVO, UserUtils.getUserId());
|
||||
return Result.OK("操作成功", draftId);
|
||||
}
|
||||
|
||||
@AutoLog(value = "删除草稿")
|
||||
|
||||
@@ -15,6 +15,17 @@ public enum ProcessTypeEnum {
|
||||
STANDARD_INTERPRET("标准解读流程", 2, "com.jero.modules.activiti.process.standardinterpret.service.impl.StandardInterpretFlow", "/workCenter/StandardInterpretationProcess", "/workCenter/StandardInterpretationProcess"),
|
||||
STANDARD_COMPLIANCE_CHECK("法规符合性排查流程", 3, "com.jero.modules.activiti.process.standardComplianceCheck.service.StandardComplianceCheckFlow", "/workCenter/RegulatoryComplianceCheckProcess", "/workCenter/RegulatoryComplianceCheckProcess"),
|
||||
MARKET_STANDARD_PUBLISH("市场清单发布流程", 4, "com.jero.modules.activiti.process.ms.service.impl.ProcessMarketStandardReleaseServiceImpl", "/workCenter/MarketListReleaseProcess", "/workCenter/MarketListReleaseProcess"),
|
||||
ENTERPRISE_STANDARD_ABOLISH_PUBLISH("企标废止发布流程", 5, "com.jero.modules.activiti.process.abolish.service.impl.ProcessAbolishReleaseServiceImpl", "/workCenter/AbolishReleaseProcess", "/workCenter/AbolishReleaseProcess"),
|
||||
ES_REVISION_ADVICE("企业标准制修订及征求意见流程", 6, "com.jero.modules.activiti.process.esRevisionAdvice.service.impl.EsRevisionServiceImpl","/workCenter/EsRevisionAndConsultationProcess","/workCenter/EsRevisionAndConsultationProcess"),
|
||||
ANNUAL_INIT("企业标准年度制修订计划流程", 7, "com.jero.modules.activiti.process.annualinit.service.ProcessAnnualInitService","/workCenter/ESAnnualRevisionPlanProcess","/workCenter/ESAnnualRevisionPlanProcess"),
|
||||
DOMESTIC_VEHICLE_CONTROL_PUBLISH("国内整车型号和VIN前八位管控流程", 8, "com.jero.modules.activiti.process.vehicledomestic.service.impl.ProcessVehicleDomesticReleaseServiceImpl","/workCenter/VehicleDomesticReleaseProcess","/workCenter/VehicleDomesticReleaseProcess"),
|
||||
PLAN_CHANGE("企业标准计划变更流程", 9, "com.jero.modules.activiti.process.planchange.service.ProcessPlanChangeService","/workCenter/enterpriseStandardRevision/enterpriseStandardRevisionFlow","/workCenter/enterpriseStandardRevision"),
|
||||
INTERNATIONAL_VEHICLE_CONTROL_PUBLISH("国际整车型号和VIN前八位管控流程", 10, "com.jero.modules.activiti.process.vehicleinternational.service.impl.ProcessVehicleDomesticReleaseServiceImpl","/workCenter/VehicleInternationalReleaseProcess","/workCenter/VehicleInternationalReleaseProcess"),
|
||||
PART_TYPE_APPLY("关键零部件型号申请流程", 11, "com.jero.modules.activiti.process.part.service.impl.ProcessPartTypeApplyServiceImpl","/workCenter/KeyComponentModelRequestProcess","/workCenter/KeyComponentModelRequestProcess"),
|
||||
SPECIAL_ES_APPROVAL("专业技术企业标准报批流程", 12, "com.jero.modules.activiti.process.specialEsApproval.service.impl.specialEsApprovalServiceImpl", "/workCenter/specialEsApproval/specialEsApprovalFlow","/workCenter/specialEsApprovalFlow"),
|
||||
MACHINE_ES_APPROVAL("产品标准-整车企业标准报批流程", 13, "com.jero.modules.activiti.process.machineEsApproval.service.impl.machineEsApprovalServiceImpl", "/workCenter/enterpriseStandardRevision/enterpriseStandardRevisionFlow","/workCenter/enterpriseStandardRevision"),
|
||||
CAR_ES_APPROVAL("产品标准-整机企业标准报批流程", 14, "com.jero.modules.activiti.process.carEsApproval.service.impl.carEsApprovalServiceImpl", "/workCenter/enterpriseStandardRevision/enterpriseStandardRevisionFlow","/workCenter/enterpriseStandardRevision"),
|
||||
ES_RECHECK("企标复审流程", 15, "com.jero.modules.activiti.process.esRecheck.service.impl.esRecheckServiceImpl", "/workCenter/enterpriseStandardRecheck/enterpriseStandardRecheckFlow","/workCenter/enterpriseStandardRecheck")
|
||||
;
|
||||
|
||||
private final String name;
|
||||
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
package com.jero.modules.activiti.process.abolish.controller;
|
||||
|
||||
import com.jero.common.api.vo.Result;
|
||||
import com.jero.common.aspect.annotation.AutoLog;
|
||||
import com.jero.common.aspect.annotation.Translation;
|
||||
import com.jero.modules.activiti.enums.ProcessTypeEnum;
|
||||
import com.jero.modules.activiti.process.abolish.entity.ProcessAbolishRelease;
|
||||
import com.jero.modules.activiti.process.abolish.service.IProcessAbolishReleaseService;
|
||||
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
|
||||
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 企标废止发布流程 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author sz
|
||||
* @since 2024-09-05
|
||||
*/
|
||||
@Slf4j
|
||||
@Api(tags = "企标废止发布流程")
|
||||
@RestController
|
||||
@RequestMapping("/process/abolishRelease")
|
||||
public class ProcessAbolishReleaseController {
|
||||
|
||||
@Resource
|
||||
private IProcessAbolishReleaseService processAbolishReleaseService;
|
||||
|
||||
@Resource
|
||||
private ActFlowCommonService actFlowCommonService;
|
||||
|
||||
@AutoLog(value = "企标废止发布流程-发起流程")
|
||||
@ApiOperation(value = "企标废止发布流程-发起流程", notes = "企标废止发布流程-发起流程")
|
||||
@PostMapping(value = "/start")
|
||||
public Result<T> startProcess(@Validated @RequestBody ProcessInfoVO<ProcessAbolishRelease> processInfoVO) {
|
||||
processAbolishReleaseService.startProcess(processInfoVO);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "企标废止发布流程-同意")
|
||||
@ApiOperation(value = "企标废止发布流程-同意", notes = "企标废止发布流程-同意")
|
||||
@PostMapping("/agree")
|
||||
public Result<T> agree(@Validated @RequestBody ProcessInfoVO<ProcessAbolishRelease> processInfoVO) {
|
||||
processAbolishReleaseService.approveTask(processInfoVO, true);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "企标废止发布流程-驳回")
|
||||
@ApiOperation(value = "企标废止发布流程-驳回", notes = "企标废止发布流程-驳回")
|
||||
@PostMapping("/reject")
|
||||
public Result<T> reject(@Validated @RequestBody ProcessInfoVO<ProcessAbolishRelease> processInfoVO) {
|
||||
processAbolishReleaseService.approveTask(processInfoVO, false);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "企标废止发布流程-提交")
|
||||
@ApiOperation(value = "企标废止发布流程-提交", notes = "企标废止发布流程-提交")
|
||||
@PostMapping("/submit")
|
||||
public Result<T> submit(@Validated @RequestBody ProcessInfoVO<ProcessAbolishRelease> processInfoVO) {
|
||||
processAbolishReleaseService.submit(processInfoVO);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "企标废止发布流程-办理")
|
||||
@ApiOperation(value="企标废止发布流程-办理", notes="企标废止发布流程-办理")
|
||||
@GetMapping("/handle/{taskId}")
|
||||
@Translation
|
||||
public Result<?> handle(@PathVariable("taskId") String taskId) {
|
||||
ProcessDraft draft = actFlowCommonService.getExistDraftByTaskId(taskId, ProcessTypeEnum.ENTERPRISE_STANDARD_ABOLISH_PUBLISH);
|
||||
if (draft != null) {
|
||||
return Result.OK(draft);
|
||||
}
|
||||
return Result.OK(processAbolishReleaseService.getHandleData(taskId));
|
||||
}
|
||||
|
||||
}
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
package com.jero.modules.activiti.process.abolish.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 企标废止发布流程
|
||||
* </p>
|
||||
*
|
||||
* @author sz
|
||||
* @since 2024-09-05
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@TableName("process_abolish_release")
|
||||
@ApiModel(value="ProcessAbolishRelease对象", description="企标废止发布流程")
|
||||
public class ProcessAbolishRelease implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "主键ID")
|
||||
@TableId(value = "id", type = IdType.ASSIGN_ID)
|
||||
private String id;
|
||||
|
||||
@ApiModelProperty(value = "流程实例Id")
|
||||
private String processInstanceId;
|
||||
|
||||
@ApiModelProperty(value = "标准编号")
|
||||
private String standardNumber;
|
||||
|
||||
@ApiModelProperty(value = "标准名称")
|
||||
private String standardName;
|
||||
|
||||
@ApiModelProperty(value = "起草人")
|
||||
private String drafter;
|
||||
|
||||
@ApiModelProperty(value = "主起草部门")
|
||||
private String drafterDepart;
|
||||
|
||||
@ApiModelProperty(value = "关联部门")
|
||||
private String relatedDepart;
|
||||
|
||||
@ApiModelProperty(value = "废止理由")
|
||||
private String abolishReason;
|
||||
|
||||
@ApiModelProperty(value = "附件文件id")
|
||||
private String fileIds;
|
||||
|
||||
@ApiModelProperty(value = "0表示未删除,1表示删除")
|
||||
private Integer delFlag;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createBy;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "更新人")
|
||||
private String updateBy;
|
||||
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
private Date updateTime;
|
||||
|
||||
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
package com.jero.modules.activiti.process.abolish.listener;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.jero.modules.activiti.process.abolish.entity.ProcessAbolishRelease;
|
||||
import com.jero.modules.activiti.process.abolish.service.IProcessAbolishReleaseService;
|
||||
import com.jero.modules.activiti.process.common.enums.StandardStateEnum;
|
||||
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
|
||||
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
|
||||
import com.jero.modules.tag.enums.TableNameEnum;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.activiti.engine.delegate.DelegateExecution;
|
||||
import org.activiti.engine.delegate.ExecutionListener;
|
||||
import org.springframework.stereotype.Component;
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* @author: Mzaxd
|
||||
* @Date: 2023/10/10 14:14
|
||||
*/
|
||||
@Slf4j
|
||||
@Component("ProcessESAbolishEndListener")
|
||||
public class ProcessESAbolishEndListener implements ExecutionListener {
|
||||
|
||||
@Resource
|
||||
private ILawsEnterpriseStandardService esService;
|
||||
|
||||
@Resource
|
||||
private IProcessAbolishReleaseService processAbolishReleaseService;
|
||||
|
||||
/**
|
||||
* 企标废止流程结束之后需要把标准状态设为废止
|
||||
* @param delegateExecution
|
||||
*/
|
||||
@Override
|
||||
public void notify(DelegateExecution delegateExecution) {
|
||||
log.info("企标废止流程结束 监听执行器开始执行");
|
||||
// 找到流程实例Id
|
||||
String processInstanceId = delegateExecution.getProcessInstanceId();
|
||||
LambdaQueryWrapper<ProcessAbolishRelease> abolishLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
abolishLambdaQueryWrapper.eq(ProcessAbolishRelease::getProcessInstanceId, processInstanceId);
|
||||
ProcessAbolishRelease abolish = processAbolishReleaseService.getOne(abolishLambdaQueryWrapper);
|
||||
String standNo = abolish.getStandardNumber();
|
||||
LambdaQueryWrapper<LawsEnterpriseStandard> esWrapper = new LambdaQueryWrapper<>();
|
||||
esWrapper.eq(LawsEnterpriseStandard::getStandardNumber, standNo);
|
||||
LawsEnterpriseStandard one = esService.getOne(esWrapper);
|
||||
log.info("企标废止流程监听执行器开始执行,企标编号为:{}", standNo);
|
||||
esService.update(new LambdaUpdateWrapper<LawsEnterpriseStandard>()
|
||||
.set(LawsEnterpriseStandard::getStandardState, StandardStateEnum.ABOLISH.getStateValue())
|
||||
.eq(LawsEnterpriseStandard::getStandardNumber, standNo));
|
||||
// todo 如果需要发消息可以在此处编写
|
||||
log.info("企标废止流程结束监听执行器执行结束");
|
||||
}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.jero.modules.activiti.process.abolish.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.jero.modules.activiti.process.abolish.entity.ProcessAbolishRelease;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 企标废止发布流程 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author sz
|
||||
* @since 2024-09-05
|
||||
*/
|
||||
public interface ProcessAbolishReleaseMapper extends BaseMapper<ProcessAbolishRelease> {
|
||||
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.jero.modules.activiti.process.abolish.mapper.ProcessAbolishReleaseMapper">
|
||||
|
||||
</mapper>
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.jero.modules.activiti.process.abolish.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.jero.modules.activiti.process.abolish.entity.ProcessAbolishRelease;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
import com.jero.modules.activiti.process.ni.entity.ProcessNewStandardImport;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 企标废止发布流程 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author sz
|
||||
* @since 2024-09-05
|
||||
*/
|
||||
public interface IProcessAbolishReleaseService extends IService<ProcessAbolishRelease> {
|
||||
|
||||
void startProcess(ProcessInfoVO<ProcessAbolishRelease> processInfoVO);
|
||||
|
||||
void approveTask(ProcessInfoVO<ProcessAbolishRelease> processInfoVO, boolean pass);
|
||||
|
||||
ProcessInfoVO<ProcessAbolishRelease> getHandleData(String taskId);
|
||||
|
||||
void submit(ProcessInfoVO<ProcessAbolishRelease> processInfoVO);
|
||||
}
|
||||
+281
@@ -0,0 +1,281 @@
|
||||
package com.jero.modules.activiti.process.abolish.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.jero.common.exception.JeroBootException;
|
||||
import com.jero.modules.activiti.common.ActivitiCommon;
|
||||
import com.jero.modules.activiti.entity.ProcessAll;
|
||||
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
|
||||
import com.jero.modules.activiti.enums.ProcessTypeEnum;
|
||||
import com.jero.modules.activiti.process.abolish.entity.ProcessAbolishRelease;
|
||||
import com.jero.modules.activiti.process.abolish.mapper.ProcessAbolishReleaseMapper;
|
||||
import com.jero.modules.activiti.process.abolish.service.IProcessAbolishReleaseService;
|
||||
import com.jero.modules.activiti.process.common.enums.ProcessType;
|
||||
import com.jero.modules.activiti.process.common.enums.StandardStateEnum;
|
||||
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
|
||||
import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
|
||||
import com.jero.modules.activiti.process.fb.dto.BasicTaskInfoDTO;
|
||||
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
import com.jero.modules.activiti.service.ProcessAllService;
|
||||
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
|
||||
import com.jero.modules.activiti.service.ProcessNodeLinkService;
|
||||
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
|
||||
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
|
||||
import com.jero.modules.sys.utils.UserUtils;
|
||||
import org.activiti.engine.RuntimeService;
|
||||
import org.activiti.engine.TaskService;
|
||||
import org.activiti.engine.runtime.ProcessInstance;
|
||||
import org.activiti.engine.task.Task;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import static com.jero.modules.activiti.common.ActivitiCommon.PASS;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 企标废止发布流程 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author sz
|
||||
* @since 2024-09-05
|
||||
*/
|
||||
@Service
|
||||
@Transactional(rollbackFor = JeroBootException.class)
|
||||
public class ProcessAbolishReleaseServiceImpl extends ServiceImpl<ProcessAbolishReleaseMapper, ProcessAbolishRelease> implements IProcessAbolishReleaseService {
|
||||
|
||||
@Resource
|
||||
private ActFlowCommonService actFlowCommonService;
|
||||
@Resource
|
||||
private ProcessNodeLinkService processNodeLinkService;
|
||||
@Resource
|
||||
private ProcessApprovalRecordService processApprovalRecordService;
|
||||
@Resource
|
||||
private ProcessAllService processAllService;
|
||||
@Resource
|
||||
private RuntimeService runtimeService;
|
||||
@Resource
|
||||
private IProcessHandleService processHandleService;
|
||||
@Resource
|
||||
private TaskService taskService;
|
||||
@Resource
|
||||
private ILawsEnterpriseStandardService esService;
|
||||
|
||||
@Override
|
||||
public void startProcess(ProcessInfoVO<ProcessAbolishRelease> processInfoVO) {
|
||||
// 流程Key
|
||||
String processDefinitionKey = ProcessType.ENTERPRISE_STANDARD_ABOLISH_PUBLISH.getProcessKey();
|
||||
// 流程信息
|
||||
BasicProcessInfoDTO processInfo = processInfoVO.getBasicProcessInfoDTO();
|
||||
// 任务信息
|
||||
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
|
||||
// 人员信息
|
||||
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
|
||||
// 业务数据
|
||||
ProcessAbolishRelease businessInfoDTO = processInfoVO.getBusinessInfoDTO();
|
||||
// 设置流程变量
|
||||
Map<String, Object> actVariables = setVariables(userInfoMap);
|
||||
// 删除草稿
|
||||
actFlowCommonService.getExistDraftAndRemove(processInfoVO.getDraftId());
|
||||
// 启动流程
|
||||
ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, actVariables);
|
||||
// 获取流程实例ID
|
||||
String processDefinitionId = processInstance.getProcessDefinitionId();
|
||||
String processInstanceId = processInstance.getId();
|
||||
businessInfoDTO.setProcessInstanceId(processInstanceId);
|
||||
processInfo.setProcessInstanceId(processInstanceId);
|
||||
processInfo.setProcessDefinitionId(processDefinitionId);
|
||||
processInfo.setProcessType(ProcessTypeEnum.ENTERPRISE_STANDARD_ABOLISH_PUBLISH.getValue());
|
||||
// 第一个节点业务数据处理
|
||||
this.startNodeBusProcess(processInfoVO);
|
||||
// 保存选人信息
|
||||
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, changeVariables(userInfoMap));
|
||||
// 当前用户Id
|
||||
String userId = UserUtils.getUserId();
|
||||
// 获取第一个任务的taskId
|
||||
String taskId = actFlowCommonService.getFirstTaskId(processInstanceId, userId, processDefinitionId);
|
||||
processTask.setTaskId(taskId);
|
||||
// 保存第一个节点的草稿
|
||||
processHandleService.saveToDraft(processInfoVO, UserUtils.getUserId());
|
||||
// 更新审批表为完成,填充数据
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
// 根据流程实例id更新流程总表
|
||||
actFlowCommonService.updateProcessAll(processInfo);
|
||||
// 自动完成第一个任务
|
||||
actFlowCommonService.completeTask(taskId, userId);
|
||||
// 保存快照
|
||||
processHandleService.saveToSnapshot(processInfoVO,userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void approveTask(ProcessInfoVO<ProcessAbolishRelease> processInfoVO, boolean pass) {
|
||||
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
|
||||
String taskId = processTask.getTaskId();
|
||||
// 获取task
|
||||
if (StringUtils.isBlank(taskId) || !actFlowCommonService.taskExists(taskId)) {
|
||||
throw new JeroBootException("taskId为空或任务不存在");
|
||||
}
|
||||
// 获取当前节点的id
|
||||
ProcessApprovalRecord processApprovalRecord = actFlowCommonService.getNodeIdByTaskId(taskId);
|
||||
String xmlNodeId = processApprovalRecord.getNodeId();
|
||||
//任务Id 查询任务对象
|
||||
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
|
||||
String processInstanceId = task.getProcessInstanceId();
|
||||
String userId = actFlowCommonService.getOriginTaskAssignee(taskId);
|
||||
if(Objects.isNull(task)){
|
||||
throw new JeroBootException("找不到对应任务");
|
||||
}
|
||||
if (pass && task.getName().equals("授权人审批")) {
|
||||
ProcessAbolishRelease businessInfoDTO = this.getOne(new LambdaQueryWrapper<ProcessAbolishRelease>()
|
||||
.eq(ProcessAbolishRelease::getProcessInstanceId, processInstanceId));
|
||||
String standardNumber = businessInfoDTO.getStandardNumber();
|
||||
LawsEnterpriseStandard es = esService.getOne(new LambdaQueryWrapper<LawsEnterpriseStandard>()
|
||||
.eq(LawsEnterpriseStandard::getStandardNumber, standardNumber));
|
||||
if (StandardStateEnum.ABOLISH.getStateValue().equals(es.getStandardState())) {
|
||||
throw new JeroBootException("该标准已废止,需要驳回重新选择");
|
||||
}
|
||||
}
|
||||
if(Objects.isNull(processTask.getCommitFlag())){
|
||||
processTask.setCommitFlag(pass ? ActivitiCommon.COMMIT_FLAG1 : ActivitiCommon.COMMIT_FLAG2);
|
||||
}
|
||||
// 更新审批表为完成,填充数据
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
// 设置流程变量
|
||||
runtimeService.setVariable(processInstanceId, PASS, pass);
|
||||
// 审批节点
|
||||
actFlowCommonService.completeTask(taskId, userId);
|
||||
// 驳回,结束所有节点
|
||||
processApprovalRecordService.updateApprovalRecordFinishFlag(pass, taskId, xmlNodeId, processInstanceId);
|
||||
// 保存快照
|
||||
// 获取流程通用数据
|
||||
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
|
||||
if(!Objects.isNull(process)){
|
||||
BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO();
|
||||
basicProcessInfoDTO.setProcessName(process.getPrcName());
|
||||
basicProcessInfoDTO.setProcessType(process.getPrcType());
|
||||
basicProcessInfoDTO.setProcessDefinitionId(process.getProcessDefinitionId());
|
||||
basicProcessInfoDTO.setProcessInstanceId(process.getProcessInstanceId());
|
||||
basicProcessInfoDTO.setProcessDescription(process.getPrcMes());
|
||||
basicProcessInfoDTO.setProcessDueDate(process.getDueTime());
|
||||
processInfoVO.setBasicProcessInfoDTO(basicProcessInfoDTO);
|
||||
// 保存快照
|
||||
processHandleService.saveToSnapshot(processInfoVO,userId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void submit(ProcessInfoVO<ProcessAbolishRelease> processInfoVO) {
|
||||
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
|
||||
String taskId = processTask.getTaskId();
|
||||
// 获取task
|
||||
if (StringUtils.isBlank(taskId) || !actFlowCommonService.taskExists(taskId)) {
|
||||
throw new JeroBootException("taskId为空或任务不存在");
|
||||
}
|
||||
//任务Id 查询任务对象
|
||||
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
|
||||
if(Objects.isNull(task)){
|
||||
throw new JeroBootException("找不到对应任务");
|
||||
}
|
||||
// 人员信息
|
||||
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
|
||||
// 设置流程变量
|
||||
Map<String, Object> actVariables = setVariables(userInfoMap);
|
||||
String processInstanceId = task.getProcessInstanceId();
|
||||
runtimeService.setVariables(processInstanceId,actVariables);
|
||||
String userId = actFlowCommonService.getOriginTaskAssignee(taskId);
|
||||
// 发起节点 更新业务数据
|
||||
startNodeBusProcess(processInfoVO);
|
||||
// 更新审批表为完成,填充数据
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
// 审批节点
|
||||
actFlowCommonService.completeTask(taskId, userId);
|
||||
// 保存快照
|
||||
// 获取流程通用数据
|
||||
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
|
||||
if(!Objects.isNull(process)){
|
||||
BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO();
|
||||
basicProcessInfoDTO.setProcessName(process.getPrcName());
|
||||
basicProcessInfoDTO.setProcessType(process.getPrcType());
|
||||
basicProcessInfoDTO.setProcessDefinitionId(process.getProcessDefinitionId());
|
||||
basicProcessInfoDTO.setProcessInstanceId(process.getProcessInstanceId());
|
||||
basicProcessInfoDTO.setProcessDescription(process.getPrcMes());
|
||||
basicProcessInfoDTO.setProcessDueDate(process.getDueTime());
|
||||
processInfoVO.setBasicProcessInfoDTO(basicProcessInfoDTO);
|
||||
// 保存快照
|
||||
processHandleService.saveToSnapshot(processInfoVO,userId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProcessInfoVO<ProcessAbolishRelease> getHandleData(String taskId) {
|
||||
if (!actFlowCommonService.taskExists(taskId)) {
|
||||
throw new JeroBootException("任务不存在");
|
||||
}
|
||||
ProcessInfoVO<ProcessAbolishRelease> result = new ProcessInfoVO<>();
|
||||
// 使用流程引擎根据taskId找到流程实例Id
|
||||
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
|
||||
// 获取流程通用数据
|
||||
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
|
||||
if(!Objects.isNull(process)){
|
||||
BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO();
|
||||
basicProcessInfoDTO.setProcessName(process.getPrcName());
|
||||
basicProcessInfoDTO.setProcessType(process.getPrcType());
|
||||
basicProcessInfoDTO.setProcessDefinitionId(process.getProcessDefinitionId());
|
||||
basicProcessInfoDTO.setProcessInstanceId(process.getProcessInstanceId());
|
||||
basicProcessInfoDTO.setProcessDescription(process.getPrcMes());
|
||||
basicProcessInfoDTO.setProcessDueDate(process.getDueTime());
|
||||
result.setBasicProcessInfoDTO(basicProcessInfoDTO);
|
||||
}
|
||||
// 获取流程实例数据
|
||||
LambdaQueryWrapper<ProcessAbolishRelease> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(ProcessAbolishRelease::getProcessInstanceId, processInstanceId);
|
||||
ProcessAbolishRelease data = getOne(lambdaQueryWrapper,false);
|
||||
result.setBusinessInfoDTO(data);
|
||||
return result;
|
||||
}
|
||||
|
||||
private void startNodeBusProcess(ProcessInfoVO<ProcessAbolishRelease> processInfoVO) {
|
||||
ProcessAbolishRelease businessInfoDTO = processInfoVO.getBusinessInfoDTO();
|
||||
saveOrUpdate(businessInfoDTO);
|
||||
}
|
||||
|
||||
private Map<String, Object> setVariables(Map<String, Object> userInfoMap) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
// 人员信息
|
||||
userInfoMap.forEach((key, value) -> {
|
||||
if(Objects.equals("checkUserLeader1List",key + "List") ||
|
||||
Objects.equals("checkUserLeader2List",key + "List") ||
|
||||
Objects.equals("checkUserLeader3List",key + "List") ||
|
||||
Objects.equals("checkUserLeader4List",key + "List") ||
|
||||
Objects.equals("checkUserLeader5List",key + "List") ||
|
||||
Objects.equals("checkUserLeader6List",key + "List")){
|
||||
map.put(key, value);
|
||||
map.put(key + "List", Arrays.asList(value.toString().split(",")));
|
||||
return;
|
||||
}
|
||||
map.put(key, value);
|
||||
});
|
||||
return map;
|
||||
}
|
||||
|
||||
private Map<String, Object> changeVariables(Map<String, Object> userInfoMap) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
// 人员信息
|
||||
userInfoMap.forEach((key, value) -> {
|
||||
if(Objects.equals("checkUserLeader1List",key + "List") ||
|
||||
Objects.equals("checkUserLeader4List",key + "List") ||
|
||||
Objects.equals("checkUserLeader5List",key + "List") ||
|
||||
Objects.equals("checkUserLeader6List",key + "List")){
|
||||
map.put(key + "List", value);
|
||||
return;
|
||||
}
|
||||
map.put(key, value);
|
||||
});
|
||||
return map;
|
||||
}
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
package com.jero.modules.activiti.process.annualinit.common;
|
||||
|
||||
/**
|
||||
* @author liJiaRao
|
||||
* @date 2024-09-24 15:10
|
||||
*/
|
||||
public class ProcessAnnualInitCommon {
|
||||
//起草人发起
|
||||
public static final String QCRFQ = "qcrfq";
|
||||
//部门经理审批
|
||||
public static final String BMJLSP = "bmjlsp";
|
||||
//法规部门处理人审批
|
||||
public static final String FGBMCLRSP = "fgbmclrsp";
|
||||
//法规部门经理审批
|
||||
public static final String FGBMJLSP = "fgbmjlsp";
|
||||
//高级经理审批
|
||||
public static final String GJJLSP = "gjjlsp";
|
||||
//总监审批
|
||||
public static final String ZJSP = "zjsp";
|
||||
//授权人审批
|
||||
public static final String SQRSP = "sqrsp";
|
||||
//起草人
|
||||
public static final String MAIN_DRAFTING_USER = "mainDraftingUser";
|
||||
//部门经理
|
||||
public static final String DEPART_MANAGER_LIST = "departManagerList";
|
||||
//法规部门处理人
|
||||
public static final String STANDARD_DEPART_HANDLER = "standardDepartHandler";
|
||||
//法规部门经理
|
||||
public static final String STANDARD_DEPART_MANAGER = "standardDepartManager";
|
||||
//高级经理
|
||||
public static final String SENIOR_MANAGER_LIST = "seniorManagerList";
|
||||
//总监
|
||||
public static final String CHIEF_INSPECTOR_LIST = "chiefInspectorList";
|
||||
//授权人
|
||||
public static final String AUTHORIZED_PERSON_LIST = "authorizedPersonList";
|
||||
//制订
|
||||
public static final String FORMULATE = "1";
|
||||
//修订
|
||||
public static final String REVISE = "2";
|
||||
|
||||
|
||||
}
|
||||
+89
@@ -0,0 +1,89 @@
|
||||
package com.jero.modules.activiti.process.annualinit.controller;
|
||||
|
||||
import com.jero.common.api.vo.Result;
|
||||
import com.jero.common.aspect.annotation.AutoLog;
|
||||
import com.jero.common.aspect.annotation.Translation;
|
||||
import com.jero.common.system.base.controller.JeroController;
|
||||
import com.jero.modules.activiti.enums.ProcessTypeEnum;
|
||||
import com.jero.modules.activiti.process.annualinit.entity.ProcessAnnualInit;
|
||||
import com.jero.modules.activiti.process.annualinit.service.ProcessAnnualInitService;
|
||||
import com.jero.modules.activiti.process.annualinit.vo.ProcessAnnualInitVO;
|
||||
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
|
||||
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 年度制修订计划流程(ProcessAnnualInit)表控制层
|
||||
*
|
||||
* @author lijiarao
|
||||
* @since 2024-09-24 14:13:42
|
||||
*/
|
||||
@Slf4j
|
||||
@Api(tags = "年度制修订计划流程")
|
||||
@RestController
|
||||
@RequestMapping("/process/processAnnualInit")
|
||||
public class ProcessAnnualInitController extends JeroController<ProcessAnnualInit, ProcessAnnualInitService> {
|
||||
/**
|
||||
* 服务对象
|
||||
*/
|
||||
@Resource
|
||||
private ProcessAnnualInitService processAnnualInitService;
|
||||
@Resource
|
||||
private ActFlowCommonService actFlowCommonService;
|
||||
|
||||
@AutoLog(value = "年度制修订计划流程-发起流程")
|
||||
@ApiOperation(value = "年度制修订计划流程-发起流程")
|
||||
@PostMapping(value = "/startProcess")
|
||||
public Result<T> startProcess(@Validated @RequestBody ProcessInfoVO<ProcessAnnualInitVO> processInfoVO) {
|
||||
processAnnualInitService.startProcess(processInfoVO);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "年度制修订计划流程-提交")
|
||||
@ApiOperation(value = "年度制修订计划流程-提交")
|
||||
@PostMapping("/submit")
|
||||
public Result<T> submit(@Validated @RequestBody ProcessInfoVO<ProcessAnnualInitVO> processInfoVO) {
|
||||
processAnnualInitService.submit(processInfoVO);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "年度制修订计划流程-同意")
|
||||
@ApiOperation(value = "年度制修订计划流程-同意")
|
||||
@PostMapping("/agree")
|
||||
public Result<T> agree(@Validated @RequestBody ProcessInfoVO<ProcessAnnualInitVO> processInfoVO) {
|
||||
processAnnualInitService.approveTask(processInfoVO, true);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "年度制修订计划流程-驳回")
|
||||
@ApiOperation(value = "年度制修订计划流程-驳回")
|
||||
@PostMapping("/reject")
|
||||
public Result<T> reject(@Validated @RequestBody ProcessInfoVO<ProcessAnnualInitVO> processInfoVO) {
|
||||
processAnnualInitService.approveTask(processInfoVO, false);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "年度制修订计划流程-查询流程信息")
|
||||
@ApiOperation(value="年度制修订计划流程-查询流程信息", notes="年度制修订计划流程-查询流程信息")
|
||||
@GetMapping("queryProcessInfoVO")
|
||||
@ApiImplicitParam(name = "taskId", value = "任务id")
|
||||
@Translation
|
||||
public Result<?> handle(String taskId) {
|
||||
ProcessDraft draft = actFlowCommonService.getExistDraftByTaskId(taskId, ProcessTypeEnum.ANNUAL_INIT);
|
||||
if (draft != null) {
|
||||
return Result.OK(draft);
|
||||
}
|
||||
return Result.OK(processAnnualInitService.getHandleData(taskId));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+204
@@ -0,0 +1,204 @@
|
||||
package com.jero.modules.activiti.process.annualinit.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.jero.common.aspect.annotation.AutoLog;
|
||||
import com.jero.common.aspect.annotation.DictPoint;
|
||||
import com.jero.common.exception.JeroBootException;
|
||||
import com.jero.common.system.base.controller.JeroController;
|
||||
import com.jero.common.system.query.QueryGenerator;
|
||||
import com.jero.common.util.FileUtils;
|
||||
import com.jero.common.util.ZipUtil;
|
||||
import com.jero.modules.activiti.process.annualinit.entity.ProcessAnnualInitLink;
|
||||
import com.jero.modules.activiti.process.annualinit.service.ProcessAnnualInitLinkService;
|
||||
import com.jero.modules.activiti.process.annualinit.vo.ProcessAnnualInitLinkExcelVO;
|
||||
import com.jero.modules.laws.club.vo.excel.LawsClubJoinTeamExcel;
|
||||
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
|
||||
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
|
||||
import com.jero.modules.system.vo.IdMapBody;
|
||||
import com.jero.modules.system.vo.IdsMapBody;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jeecgframework.poi.excel.ExcelImportUtil;
|
||||
import org.jeecgframework.poi.excel.entity.ImportParams;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import com.jero.common.api.vo.Result;
|
||||
import com.jero.common.api.vo.ResultCommon;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.*;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 年度制修订计划流程关联标准(ProcessAnnualInitLink)表控制层
|
||||
*
|
||||
* @author lijiarao
|
||||
* @since 2024-09-25 14:52:55
|
||||
*/
|
||||
@Slf4j
|
||||
@Api(tags = "年度制修订计划流程关联标准")
|
||||
@RestController
|
||||
@RequestMapping("processAnnualInitLink")
|
||||
public class ProcessAnnualInitLinkController extends JeroController<ProcessAnnualInitLink, ProcessAnnualInitLinkService> {
|
||||
/**
|
||||
* 服务对象
|
||||
*/
|
||||
@Resource
|
||||
private ProcessAnnualInitLinkService processAnnualInitLinkService;
|
||||
|
||||
/**
|
||||
* 分页列表查询
|
||||
*/
|
||||
@ApiOperation(value = "年度制修订计划流程关联标准-分页列表查询")
|
||||
@GetMapping(value = "/page")
|
||||
public Result<IPage<ProcessAnnualInitLink>> queryPageList(ProcessAnnualInitLink processAnnualInitLink,
|
||||
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
|
||||
HttpServletRequest req) {
|
||||
Page<ProcessAnnualInitLink> page = new Page<>(pageNo, pageSize);
|
||||
IPage<ProcessAnnualInitLink> pageList = processAnnualInitLinkService.pageList(page, processAnnualInitLink, req);
|
||||
return Result.OK(pageList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 列表查询
|
||||
*/
|
||||
@ApiOperation(value = "年度制修订计划流程关联标准-列表查询", notes = "年度制修订计划流程关联标准-列表查询")
|
||||
@GetMapping(value = "/list")
|
||||
public Result<List<ProcessAnnualInitLink>> queryList(ProcessAnnualInitLink processAnnualInitLink,
|
||||
HttpServletRequest req) {
|
||||
QueryWrapper<ProcessAnnualInitLink> queryWrapper = QueryGenerator.initQueryWrapper(processAnnualInitLink, req.getParameterMap());
|
||||
List<ProcessAnnualInitLink> list = processAnnualInitLinkService.list(queryWrapper);
|
||||
return Result.OK(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
@AutoLog(value = "年度制修订计划流程关联标准-添加")
|
||||
@ApiOperation(value = "年度制修订计划流程关联标准-添加", notes = "年度制修订计划流程关联标准-添加")
|
||||
@PostMapping(value = "/add")
|
||||
public Result<String> add(@Validated @RequestBody ProcessAnnualInitLink processAnnualInitLink) {
|
||||
processAnnualInitLinkService.add(processAnnualInitLink);
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*/
|
||||
@AutoLog(value = "年度制修订计划流程关联标准-编辑")
|
||||
@ApiOperation(value = "年度制修订计划流程关联标准-编辑", notes = "年度制修订计划流程关联标准-编辑")
|
||||
@PostMapping(value = "/edit")
|
||||
public Result<String> edit(@Validated @RequestBody ProcessAnnualInitLink processAnnualInitLink) {
|
||||
processAnnualInitLinkService.editById(processAnnualInitLink);
|
||||
return Result.OK(ResultCommon.EDIT_OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过id删除
|
||||
*/
|
||||
@AutoLog(value = "年度制修订计划流程关联标准-通过id删除")
|
||||
@ApiOperation(value = "年度制修订计划流程关联标准-通过id删除", notes = "年度制修订计划流程关联标准-通过id删除")
|
||||
@PostMapping(value = "/delete")
|
||||
public Result<String> delete(@RequestBody IdMapBody map) {
|
||||
String id = map.getId();
|
||||
if (StringUtils.isBlank(id)) {
|
||||
return Result.error("请选择数据");
|
||||
}
|
||||
processAnnualInitLinkService.deleteById(id);
|
||||
return Result.OK(ResultCommon.SUCCESSFULLY_DELETED);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*/
|
||||
@AutoLog(value = "年度制修订计划流程关联标准-批量删除")
|
||||
@ApiOperation(value = "年度制修订计划流程关联标准-批量删除", notes = "年度制修订计划流程关联标准-批量删除")
|
||||
@PostMapping(value = "/deleteBatch")
|
||||
public Result<String> deleteBatch(@RequestBody IdsMapBody map) {
|
||||
String ids = map.getIds();
|
||||
if (StringUtils.isBlank(ids)) {
|
||||
return Result.error(ResultCommon.PLEASE_SELECT_DATA);
|
||||
}
|
||||
List<String> idList = Arrays.asList(map.getIds().split(","));
|
||||
this.processAnnualInitLinkService.deleteByIds(idList);
|
||||
return Result.OK(ResultCommon.SUCCESSFULLY_DELETED_IN_BULK);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过id查询
|
||||
*/
|
||||
@AutoLog(value = "年度制修订计划流程关联标准-通过id查询")
|
||||
@ApiOperation(value = "年度制修订计划流程关联标准-通过id查询", notes = "年度制修订计划流程关联标准-通过id查询")
|
||||
@GetMapping(value = "/queryById")
|
||||
public Result<ProcessAnnualInitLink> queryById(@RequestParam(name = "id") String id) {
|
||||
ProcessAnnualInitLink processAnnualInitLink = processAnnualInitLinkService.queryById(id);
|
||||
if (processAnnualInitLink == null) {
|
||||
return Result.error(ResultCommon.NO_CORRESPONDING_DATA_FOUND);
|
||||
}
|
||||
return Result.OK(processAnnualInitLink);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出excel
|
||||
*/
|
||||
@ApiOperation(value = "年度制修订计划流程关联标准-导出excel")
|
||||
@GetMapping(value = "/exportXls")
|
||||
public ModelAndView exportXls(HttpServletRequest req, ProcessAnnualInitLink processAnnualInitLink) {
|
||||
Page<ProcessAnnualInitLink> page = new Page<>(-1, -1);
|
||||
IPage<ProcessAnnualInitLink> pageList = processAnnualInitLinkService.pageList(page, processAnnualInitLink, req);
|
||||
// 获取数据
|
||||
List<ProcessAnnualInitLink> records = pageList.getRecords();
|
||||
return super.exportListXls(records, ProcessAnnualInitLink.class, "年度制修订计划流程关联标准");
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载导入模板
|
||||
*/
|
||||
@ApiOperation(value = "年度制修订计划流程关联标准-下载导入模板")
|
||||
@GetMapping(value = "/exportTemplate")
|
||||
public void exportTemplate(HttpServletResponse response) {
|
||||
ClassPathResource resource = new ClassPathResource("excelTemplate/企业标准年度制修订计划导入.xls");
|
||||
// 设置HTTP响应头,包括文件大小和内容类型
|
||||
response.setContentType("application/force-download");// 设置强制下载不打开
|
||||
response.addHeader("Content-Disposition", "attachment;fileName=" + new String("企业标准年度制修订计划导入.xls".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
|
||||
try (InputStream inputStream = resource.getInputStream();
|
||||
OutputStream outputStream = response.getOutputStream()
|
||||
) {
|
||||
byte[] buf = new byte[1024];
|
||||
int len;
|
||||
while ((len = inputStream.read(buf)) > 0) {
|
||||
outputStream.write(buf, 0, len);
|
||||
}
|
||||
response.flushBuffer();
|
||||
} catch (Exception e) {
|
||||
response.setStatus(404);
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过excel导入数据
|
||||
*/
|
||||
@DictPoint
|
||||
@ApiOperation(value = "年度制修订计划流程关联标准-通过excel导入数据")
|
||||
@PostMapping(value = "/importExcel")
|
||||
public Result<List<ProcessAnnualInitLinkExcelVO>> importExcel(HttpServletRequest request) {
|
||||
|
||||
List<ProcessAnnualInitLinkExcelVO> excelData = processAnnualInitLinkService.importExcel(request);
|
||||
return Result.OK(excelData);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+116
@@ -0,0 +1,116 @@
|
||||
package com.jero.modules.activiti.process.annualinit.entity;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.jeecgframework.poi.excel.annotation.Excel;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
|
||||
/**
|
||||
* 年度制修订计划流程(ProcessAnnualInit)实体类
|
||||
*
|
||||
* @author lijiarao
|
||||
* @since 2024-09-24 14:13:42
|
||||
*/
|
||||
@Data
|
||||
@TableName("process_annual_init")
|
||||
@ApiModel(value = "ProcessAnnualInit", description = "年度制修订计划流程")
|
||||
public class ProcessAnnualInit implements Serializable {
|
||||
private static final long serialVersionUID = -24249950589081692L;
|
||||
/**
|
||||
* 主键id
|
||||
*/
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
@ApiModelProperty(value = "主键id")
|
||||
private String id;
|
||||
/**
|
||||
* 部门经理
|
||||
*/
|
||||
@ApiModelProperty(value = "部门经理")
|
||||
@Excel(name = "部门经理", width = 15)
|
||||
private String departManager;
|
||||
/**
|
||||
* 法规部门处理人id
|
||||
*/
|
||||
@ApiModelProperty(value = "法规部门处理人id")
|
||||
@Excel(name = "法规部门处理人id", width = 15)
|
||||
private String standardDepartHandler;
|
||||
/**
|
||||
* 法规部门经理id
|
||||
*/
|
||||
@ApiModelProperty(value = "法规部门经理id")
|
||||
@Excel(name = "法规部门经理id", width = 15)
|
||||
private String standardDepartManager;
|
||||
/**
|
||||
* 高级经理
|
||||
*/
|
||||
@ApiModelProperty(value = "高级经理")
|
||||
@Excel(name = "高级经理", width = 15)
|
||||
private String seniorManager;
|
||||
/**
|
||||
* 总监
|
||||
*/
|
||||
@ApiModelProperty(value = "总监")
|
||||
@Excel(name = "总监", width = 15)
|
||||
private String chiefInspector;
|
||||
/**
|
||||
* 授权人id
|
||||
*/
|
||||
@ApiModelProperty(value = "授权人id")
|
||||
@Excel(name = "授权人id", width = 15)
|
||||
private String authorizedPerson;
|
||||
/**
|
||||
* 附件
|
||||
*/
|
||||
@ApiModelProperty(value = "附件")
|
||||
@Excel(name = "附件", width = 15)
|
||||
private String file;
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createBy;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private Date createTime;
|
||||
/**
|
||||
* 更新人
|
||||
*/
|
||||
@ApiModelProperty(value = "更新人")
|
||||
private String updateBy;
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private Date updateTime;
|
||||
/**
|
||||
* 所属部门
|
||||
*/
|
||||
@ApiModelProperty(value = "所属部门")
|
||||
private String orgCode;
|
||||
/**
|
||||
* 删除状态(0-正常,1-删除)
|
||||
*/
|
||||
@ApiModelProperty(value = "删除状态(0-正常,1-删除)")
|
||||
@TableLogic
|
||||
private String delFlag;
|
||||
|
||||
|
||||
}
|
||||
|
||||
+151
@@ -0,0 +1,151 @@
|
||||
package com.jero.modules.activiti.process.annualinit.entity;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.jero.common.aspect.annotation.Dict;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.jeecgframework.poi.excel.annotation.Excel;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
|
||||
/**
|
||||
* 年度制修订计划流程关联标准(ProcessAnnualInitLink)实体类
|
||||
*
|
||||
* @author lijiarao
|
||||
* @since 2024-09-24 14:30:21
|
||||
*/
|
||||
@Data
|
||||
@TableName("process_annual_init_link")
|
||||
@ApiModel(value = "ProcessAnnualInitLink", description = "年度制修订计划流程关联标准")
|
||||
public class ProcessAnnualInitLink implements Serializable {
|
||||
private static final long serialVersionUID = 647513571439825961L;
|
||||
/**
|
||||
* 主键id
|
||||
*/
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
@ApiModelProperty(value = "主键id")
|
||||
private String id;
|
||||
/**
|
||||
* 流程主表id
|
||||
*/
|
||||
@ApiModelProperty(value = "流程主表id")
|
||||
private String processId;
|
||||
/**
|
||||
* 制修订类别
|
||||
*/
|
||||
@ApiModelProperty(value = "制修订类别")
|
||||
@Excel(name = "*制修订类型", width = 15, dicCode = "esp_revision_type")
|
||||
@Dict(dicCode = "esp_revision_type")
|
||||
private String revisionType;
|
||||
/**
|
||||
* 标准id
|
||||
*/
|
||||
@ApiModelProperty(value = "标准id")
|
||||
private String standardId;
|
||||
/**
|
||||
* 标准编号
|
||||
*/
|
||||
@ApiModelProperty(value = "标准编号")
|
||||
@Excel(name = "*企标编号", width = 15)
|
||||
private String standardNumber;
|
||||
/**
|
||||
* 标准名称
|
||||
*/
|
||||
@ApiModelProperty(value = "标准名称")
|
||||
@Excel(name = "*企标名称", width = 15)
|
||||
private String standardName;
|
||||
/**
|
||||
* 起草人
|
||||
*/
|
||||
@ApiModelProperty(value = "起草人")
|
||||
@Excel(name = "*起草人", width = 15, dictTable = "sys_user", dicText = "CONCAT(realname, '(', username, ')')", dicCode = "id")
|
||||
@Dict(dictTable = "sys_user", dicText = "CONCAT(realname, '(', username, ')')", dicCode = "id")
|
||||
private String mainDraftingUser;
|
||||
/**
|
||||
* 邮箱
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
@ApiModelProperty(value = "邮箱")
|
||||
private String email;
|
||||
/**
|
||||
* 所在部门id
|
||||
*/
|
||||
@ApiModelProperty(value = "所在部门id")
|
||||
@Excel(name = "*所在部门", width = 15, dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
||||
@Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
||||
private String departId;
|
||||
/**
|
||||
* 专业模块
|
||||
*/
|
||||
@ApiModelProperty(value = "专业模块")
|
||||
@Excel(name = "*专业模块", width = 15, dicCode = "professional_module")
|
||||
@Dict(dicCode = "professional_module")
|
||||
private String professionalModule;
|
||||
/**
|
||||
* 初稿完成日期
|
||||
*/
|
||||
@ApiModelProperty(value = "初稿完成日期")
|
||||
@Excel(name = "*初稿完成日期", width = 15, format = "yyyy-MM-dd")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private Date draftCompleteDate;
|
||||
/**
|
||||
* 计划归档日期
|
||||
*/
|
||||
@ApiModelProperty(value = "计划归档日期")
|
||||
@Excel(name = "*计划归档日期", width = 15, format = "yyyy-MM-dd")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private Date planArchivingDate;
|
||||
/**
|
||||
* 是否有英文版
|
||||
*/
|
||||
@ApiModelProperty(value = "是否有英文版")
|
||||
@Excel(name = "是否有英文版", width = 15, dicCode = "yn")
|
||||
@Dict(dicCode = "yn")
|
||||
private String haveEnglishVersion;
|
||||
/**
|
||||
* 所属技术委员会
|
||||
*/
|
||||
@ApiModelProperty(value = "所属技术委员会")
|
||||
@Excel(name = "所属技术委员会", width = 15)
|
||||
private String committee;
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createBy;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private Date createTime;
|
||||
/**
|
||||
* 更新人
|
||||
*/
|
||||
@ApiModelProperty(value = "更新人")
|
||||
private String updateBy;
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private Date updateTime;
|
||||
/**
|
||||
* 所属部门
|
||||
*/
|
||||
@ApiModelProperty(value = "所属部门")
|
||||
private String orgCode;
|
||||
|
||||
|
||||
}
|
||||
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package com.jero.modules.activiti.process.annualinit.mapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import java.util.List;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
|
||||
import com.jero.modules.activiti.process.annualinit.entity.ProcessAnnualInitLink;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* 年度制修订计划流程关联标准(ProcessAnnualInitLink)表数据库访问层
|
||||
*
|
||||
* @author lijiarao
|
||||
* @since 2024-09-24 14:30:21
|
||||
*/
|
||||
public interface ProcessAnnualInitLinkMapper extends BaseMapper<ProcessAnnualInitLink> {
|
||||
default List<ProcessAnnualInitLink> listByProcessId(String processId) {
|
||||
LambdaQueryWrapper<ProcessAnnualInitLink> myQuery = Wrappers.lambdaQuery(ProcessAnnualInitLink.class);
|
||||
myQuery.eq(ProcessAnnualInitLink::getProcessId, processId);
|
||||
return selectList(myQuery);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package com.jero.modules.activiti.process.annualinit.mapper;
|
||||
|
||||
import com.jero.modules.activiti.process.annualinit.entity.ProcessAnnualInit;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* 年度制修订计划流程(ProcessAnnualInit)表数据库访问层
|
||||
*
|
||||
* @author lijiarao
|
||||
* @since 2024-09-24 14:13:42
|
||||
*/
|
||||
public interface ProcessAnnualInitMapper extends BaseMapper<ProcessAnnualInit> {
|
||||
|
||||
}
|
||||
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.jero.modules.activiti.process.annualinit.mapper.ProcessAnnualInitLinkMapper">
|
||||
<resultMap id="BaseResultMap" type="com.jero.modules.activiti.process.annualinit.entity.ProcessAnnualInitLink">
|
||||
<!--@Table process_annual_init_link-->
|
||||
<result property="id" column="id" jdbcType="VARCHAR"/>
|
||||
<result property="processId" column="process_id" jdbcType="VARCHAR"/>
|
||||
<result property="revisionType" column="revision_type" jdbcType="VARCHAR"/>
|
||||
<result property="standardId" column="standard_id" jdbcType="VARCHAR"/>
|
||||
<result property="standardNumber" column="standard_number" jdbcType="VARCHAR"/>
|
||||
<result property="standardName" column="standard_name" jdbcType="VARCHAR"/>
|
||||
<result property="mainDraftingUser" column="main_drafting_user" jdbcType="VARCHAR"/>
|
||||
<result property="departId" column="depart_id" jdbcType="VARCHAR"/>
|
||||
<result property="professionalModule" column="professional_module" jdbcType="VARCHAR"/>
|
||||
<result property="draftCompleteDate" column="draft_complete_date" jdbcType="TIMESTAMP"/>
|
||||
<result property="planArchivingDate" column="plan_archiving_date" jdbcType="TIMESTAMP"/>
|
||||
<result property="haveEnglishVersion" column="have_english_version" jdbcType="VARCHAR"/>
|
||||
<result property="committee" column="committee" jdbcType="VARCHAR"/>
|
||||
<result property="createBy" column="create_by" jdbcType="VARCHAR"/>
|
||||
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
|
||||
<result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
|
||||
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
|
||||
<result property="orgCode" column="org_code" jdbcType="VARCHAR"/>
|
||||
<result property="delFlag" column="del_flag" jdbcType="INTEGER"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
id,
|
||||
process_id,
|
||||
revision_type,
|
||||
standard_id,
|
||||
standard_number,
|
||||
standard_name,
|
||||
main_drafting_user,
|
||||
depart_id,
|
||||
professional_module,
|
||||
draft_complete_date,
|
||||
plan_archiving_date,
|
||||
have_english_version,
|
||||
committee,
|
||||
create_by,
|
||||
create_time,
|
||||
update_by,
|
||||
update_time,
|
||||
org_code,
|
||||
del_flag
|
||||
</sql>
|
||||
</mapper>
|
||||
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.jero.modules.activiti.process.annualinit.mapper.ProcessAnnualInitMapper">
|
||||
<resultMap id="BaseResultMap" type="com.jero.modules.activiti.process.annualinit.entity.ProcessAnnualInit">
|
||||
<!--@Table process_annual_init-->
|
||||
<result property="id" column="id" jdbcType="VARCHAR"/>
|
||||
<result property="departManager" column="depart_manager" jdbcType="VARCHAR"/>
|
||||
<result property="standardDepartHandler" column="standard_depart_handler" jdbcType="VARCHAR"/>
|
||||
<result property="standardDepartManager" column="standard_depart_manager" jdbcType="VARCHAR"/>
|
||||
<result property="seniorManager" column="senior_manager" jdbcType="VARCHAR"/>
|
||||
<result property="chiefInspector" column="chief_inspector" jdbcType="VARCHAR"/>
|
||||
<result property="authorizedPerson" column="authorized_person" jdbcType="VARCHAR"/>
|
||||
<result property="file" column="file" jdbcType="VARCHAR"/>
|
||||
<result property="createBy" column="create_by" jdbcType="VARCHAR"/>
|
||||
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
|
||||
<result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
|
||||
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
|
||||
<result property="orgCode" column="org_code" jdbcType="VARCHAR"/>
|
||||
<result property="delFlag" column="del_flag" jdbcType="VARCHAR"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
id,
|
||||
depart_manager,
|
||||
standard_depart_handler,
|
||||
standard_depart_manager,
|
||||
senior_manager,
|
||||
chief_inspector,
|
||||
authorized_person,
|
||||
file,
|
||||
create_by,
|
||||
create_time,
|
||||
update_by,
|
||||
update_time,
|
||||
org_code,
|
||||
del_flag
|
||||
</sql>
|
||||
</mapper>
|
||||
|
||||
+378
@@ -0,0 +1,378 @@
|
||||
package com.jero.modules.activiti.process.annualinit.service;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import cn.hutool.core.collection.CollStreamUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.jero.common.api.vo.Result;
|
||||
import com.jero.common.exception.JeroBootException;
|
||||
import com.jero.common.system.api.ISysBaseAPI;
|
||||
import com.jero.common.system.query.QueryGenerator;
|
||||
import com.jero.common.system.vo.DictModel;
|
||||
import com.jero.common.util.PasswordUtil;
|
||||
import com.jero.modules.activiti.process.annualinit.common.ProcessAnnualInitCommon;
|
||||
import com.jero.modules.activiti.process.annualinit.entity.ProcessAnnualInitLink;
|
||||
import com.jero.modules.activiti.process.annualinit.mapper.ProcessAnnualInitLinkMapper;
|
||||
import com.jero.modules.activiti.process.annualinit.vo.ProcessAnnualInitLinkExcelVO;
|
||||
import com.jero.modules.activiti.process.planchange.entity.ProcessPlanChangeLink;
|
||||
import com.jero.modules.activiti.process.planchange.service.ProcessPlanChangeLinkService;
|
||||
import com.jero.modules.activiti.process.planchange.service.ProcessPlanChangeService;
|
||||
import com.jero.modules.laws.common.util.ImportUtil;
|
||||
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
|
||||
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
|
||||
import com.jero.modules.system.entity.SysDepart;
|
||||
import com.jero.modules.system.service.ISysDepartService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jeecgframework.poi.excel.ExcelImportCheckUtil;
|
||||
import org.jeecgframework.poi.excel.ExcelImportUtil;
|
||||
import org.jeecgframework.poi.excel.entity.ImportParams;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 年度制修订计划流程关联标准(ProcessAnnualInitLink)表服务实现类
|
||||
*
|
||||
* @author lijiarao
|
||||
* @since 2024-09-24 14:30:22
|
||||
*/
|
||||
@Slf4j
|
||||
@Service()
|
||||
public class ProcessAnnualInitLinkService extends ServiceImpl<ProcessAnnualInitLinkMapper, ProcessAnnualInitLink> {
|
||||
@Resource
|
||||
private ProcessAnnualInitLinkMapper processAnnualInitLinkMapper;
|
||||
@Resource
|
||||
private ISysBaseAPI sysBaseAPI;
|
||||
@Resource
|
||||
private ILawsEnterpriseStandardService enterpriseStandardService;
|
||||
@Resource
|
||||
private ImportUtil importUtil;
|
||||
@Resource
|
||||
private ISysDepartService sysDepartService;
|
||||
@Resource
|
||||
private ProcessPlanChangeLinkService planChangeLinkService;
|
||||
|
||||
public IPage<ProcessAnnualInitLink> pageList(Page<ProcessAnnualInitLink> page, ProcessAnnualInitLink processAnnualInitLink, HttpServletRequest req) {
|
||||
QueryWrapper<ProcessAnnualInitLink> queryWrapper = QueryGenerator.initQueryWrapper(processAnnualInitLink, req.getParameterMap());
|
||||
Page<ProcessAnnualInitLink> pageList = this.page(page, queryWrapper);
|
||||
List<ProcessAnnualInitLink> records = pageList.getRecords();
|
||||
String userIds = records.stream().map(ProcessAnnualInitLink::getMainDraftingUser).collect(Collectors.joining(","));
|
||||
List<DictModel> dictModels = sysBaseAPI.translateDictFromTableByKeys("sys_user", "email", "id", userIds);
|
||||
Map<String, String> userMap = CollStreamUtil.toMap(dictModels, DictModel::getValue, DictModel::getText);
|
||||
for (ProcessAnnualInitLink record : records) {
|
||||
String mainDraftingUser = record.getMainDraftingUser();
|
||||
String email = userMap.get(mainDraftingUser);
|
||||
record.setEmail(PasswordUtil.decrypt(email));
|
||||
}
|
||||
|
||||
return pageList;
|
||||
}
|
||||
|
||||
public void add(ProcessAnnualInitLink processAnnualInitLink) {
|
||||
this.save(processAnnualInitLink);
|
||||
}
|
||||
|
||||
public void editById(ProcessAnnualInitLink processAnnualInitLink) {
|
||||
this.updateById(processAnnualInitLink);
|
||||
}
|
||||
|
||||
public void deleteById(String id) {
|
||||
this.removeById(id);
|
||||
}
|
||||
|
||||
public void deleteByIds(List<String> idList) {
|
||||
for (String id : idList) {
|
||||
deleteById(id);
|
||||
}
|
||||
}
|
||||
|
||||
public ProcessAnnualInitLink queryById(String id) {
|
||||
ProcessAnnualInitLink processAnnualInitLink = this.getById(id);
|
||||
return processAnnualInitLink;
|
||||
}
|
||||
|
||||
public List<ProcessAnnualInitLinkExcelVO> importExcel(HttpServletRequest request) {
|
||||
String processId = request.getParameter("businessId");
|
||||
List<String> standardIdList = new ArrayList<>();
|
||||
Integer type = 1;
|
||||
if (StringUtils.isNotBlank(processId)){
|
||||
LambdaQueryWrapper<ProcessAnnualInitLink> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(ProcessAnnualInitLink::getProcessId,processId);
|
||||
List<ProcessAnnualInitLink> list = this.list(wrapper);
|
||||
if (!list.isEmpty()){
|
||||
standardIdList = list.stream().map(ProcessAnnualInitLink::getStandardId).collect(Collectors.toList());
|
||||
}else {
|
||||
type = 2;
|
||||
LambdaQueryWrapper<ProcessPlanChangeLink> wrapper1 = new LambdaQueryWrapper<>();
|
||||
wrapper1.eq(ProcessPlanChangeLink::getProcessId,processId);
|
||||
List<ProcessPlanChangeLink> list1 = planChangeLinkService.list(wrapper1);
|
||||
standardIdList = list1.stream().map(ProcessPlanChangeLink::getStandardId).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
|
||||
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
|
||||
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
|
||||
// 获取上传文件对象
|
||||
MultipartFile file = entity.getValue();
|
||||
//校验文件名
|
||||
String originalFilename = file.getOriginalFilename();
|
||||
if (originalFilename != null) {
|
||||
String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
|
||||
if (!".xlsx".equals(substring)&&!".xls".equals(substring)) {
|
||||
throw new JeroBootException("文件类型错误:" + "请上传.xlsx或.xls文件!");
|
||||
}
|
||||
} else {
|
||||
throw new JeroBootException("文件错误:" + "文件名丢失,请上传正确的文件!");
|
||||
}
|
||||
ImportParams params = new ImportParams();
|
||||
params.setSheetNum(1);
|
||||
params.setHeadRows(1);
|
||||
try {
|
||||
//导入Excel格式校验,看匹配的字段文本概率
|
||||
Boolean t = ExcelImportCheckUtil.check(file.getInputStream(), ProcessAnnualInitLinkExcelVO.class, params);
|
||||
if (t == null) {
|
||||
throw new JeroBootException("导入数据为空!");
|
||||
}
|
||||
if(!t){
|
||||
throw new JeroBootException("文件格式有误,请下载模板后上传 !");
|
||||
}
|
||||
List<ProcessAnnualInitLinkExcelVO> excelList = ExcelImportUtil.importExcel(file.getInputStream(), ProcessAnnualInitLinkExcelVO.class, params);
|
||||
excelList = excelList.stream().skip(2).filter(item -> !Objects.isNull(item)).collect(Collectors.toList());
|
||||
if (CollectionUtils.isEmpty(excelList)) {
|
||||
throw new JeroBootException("没有数据可导入");
|
||||
}
|
||||
StringBuilder msg = validateExcelData(excelList,standardIdList); // 校验数据
|
||||
if (StringUtils.isNotEmpty(msg.toString())) {
|
||||
throw new JeroBootException(msg.toString());
|
||||
}
|
||||
if (StringUtils.isNotBlank(processId)){
|
||||
if (type == 1){
|
||||
List<ProcessAnnualInitLink> list = convertToProcessAnnualInitLink(processId,excelList);
|
||||
this.saveBatch(list);
|
||||
}else {
|
||||
List<ProcessPlanChangeLink> list = convertToProcessPlanChangeLink(processId,excelList);
|
||||
planChangeLinkService.saveBatch(list);
|
||||
}
|
||||
}
|
||||
return excelList;
|
||||
} catch (Exception e) {
|
||||
log.error("文件导入失败:",e);
|
||||
if(Objects.isNull(e.getMessage())){
|
||||
throw new JeroBootException("文件导入失败:请填写内容标题!");
|
||||
}
|
||||
throw new JeroBootException("文件导入失败:" + e.getMessage());
|
||||
} finally {
|
||||
try {
|
||||
file.getInputStream().close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private List<ProcessPlanChangeLink> convertToProcessPlanChangeLink(String processId, List<ProcessAnnualInitLinkExcelVO> excelList) {
|
||||
List<ProcessPlanChangeLink> processPlanChangeLinklist=Lists.newArrayList();
|
||||
for (ProcessAnnualInitLinkExcelVO processAnnualInitLinkExcelVO :excelList) {
|
||||
processPlanChangeLinklist.add(convertFromProcessAnnualInitLinkExcelVO1(processId,processAnnualInitLinkExcelVO));
|
||||
}
|
||||
return processPlanChangeLinklist;
|
||||
}
|
||||
|
||||
private ProcessPlanChangeLink convertFromProcessAnnualInitLinkExcelVO1(String processId, ProcessAnnualInitLinkExcelVO vo) {
|
||||
ProcessPlanChangeLink processPlanChangeLink = new ProcessPlanChangeLink();
|
||||
processPlanChangeLink.setProcessId(processId);
|
||||
processPlanChangeLink.setRevisionType(vo.getRevisionType());
|
||||
processPlanChangeLink.setStandardId(vo.getStandardId());
|
||||
processPlanChangeLink.setStandardNumber(vo.getStandardNumber());
|
||||
processPlanChangeLink.setStandardName(vo.getStandardName());
|
||||
processPlanChangeLink.setMainDraftingUser(vo.getMainDraftingUser());
|
||||
processPlanChangeLink.setEmail(vo.getEmail());
|
||||
processPlanChangeLink.setDepartId(vo.getDepartId());
|
||||
processPlanChangeLink.setProfessionalModule(vo.getProfessionalModule());
|
||||
processPlanChangeLink.setDraftCompleteDate(DateUtil.parseDate(vo.getDraftCompleteDate()));
|
||||
processPlanChangeLink.setPlanArchivingDate(DateUtil.parseDate(vo.getPlanArchivingDate()));
|
||||
processPlanChangeLink.setHaveEnglishVersion(vo.getHaveEnglishVersion());
|
||||
processPlanChangeLink.setCommittee(vo.getCommittee());
|
||||
return processPlanChangeLink;
|
||||
|
||||
}
|
||||
|
||||
private List<ProcessAnnualInitLink> convertToProcessAnnualInitLink(String processId, List<ProcessAnnualInitLinkExcelVO> excelList) {
|
||||
List<ProcessAnnualInitLink> processAnnualInitLinklist=Lists.newArrayList();
|
||||
for (ProcessAnnualInitLinkExcelVO vo :excelList) {
|
||||
processAnnualInitLinklist.add(convertFromProcessAnnualInitLinkExcelVO(processId,vo));
|
||||
}
|
||||
return processAnnualInitLinklist;
|
||||
}
|
||||
|
||||
private ProcessAnnualInitLink convertFromProcessAnnualInitLinkExcelVO(String processId, ProcessAnnualInitLinkExcelVO vo) {
|
||||
ProcessAnnualInitLink processAnnualInitLink = new ProcessAnnualInitLink();
|
||||
processAnnualInitLink.setProcessId(processId);
|
||||
processAnnualInitLink.setRevisionType(vo.getRevisionType());
|
||||
processAnnualInitLink.setStandardId(vo.getStandardId());
|
||||
processAnnualInitLink.setStandardNumber(vo.getStandardNumber());
|
||||
processAnnualInitLink.setStandardName(vo.getStandardName());
|
||||
processAnnualInitLink.setMainDraftingUser(vo.getMainDraftingUser());
|
||||
processAnnualInitLink.setEmail(vo.getEmail());
|
||||
processAnnualInitLink.setDepartId(vo.getDepartId());
|
||||
processAnnualInitLink.setProfessionalModule(vo.getProfessionalModule());
|
||||
processAnnualInitLink.setDraftCompleteDate(DateUtil.parseDate(vo.getDraftCompleteDate()));
|
||||
processAnnualInitLink.setPlanArchivingDate(DateUtil.parseDate(vo.getPlanArchivingDate()));
|
||||
processAnnualInitLink.setHaveEnglishVersion(vo.getHaveEnglishVersion());
|
||||
processAnnualInitLink.setCommittee(vo.getCommittee());
|
||||
return processAnnualInitLink;
|
||||
|
||||
}
|
||||
|
||||
private StringBuilder validateExcelData(List<ProcessAnnualInitLinkExcelVO> excelList, List<String> oldStandardIdList) {
|
||||
StringBuilder msg = new StringBuilder();
|
||||
//日期格式
|
||||
String users = excelList.stream().map(ProcessAnnualInitLinkExcelVO::getMainDraftingUser).collect(Collectors.joining(","));
|
||||
List<DictModel> dictModels = sysBaseAPI.translateDictFromTableByKeys("sys_user", "id", "CONCAT(realname, '(', username, ')')", users);
|
||||
Map<String, String> userMap = CollStreamUtil.toMap(dictModels, DictModel::getValue, DictModel::getText);
|
||||
List<DictModel> dictModels0 = sysBaseAPI.translateDictFromTableByKeys("sys_user", "email", "CONCAT(realname, '(', username, ')')", users);
|
||||
Map<String, String> emailMap = CollStreamUtil.toMap(dictModels0, DictModel::getValue, DictModel::getText);
|
||||
List<DictModel> dictModels1 = sysBaseAPI.getDictItems("esp_revision_type");
|
||||
Map<String, String> espRevisionTypeMap = CollStreamUtil.toMap(dictModels1, DictModel::getText, DictModel::getValue);
|
||||
|
||||
String departs = excelList.stream().map(ProcessAnnualInitLinkExcelVO::getDepartId).collect(Collectors.joining(","));
|
||||
List<DictModel> dictModels2 = sysBaseAPI.translateDictFromTableByKeys("sys_depart", "id", "depart_name", departs);
|
||||
Map<String, String> departMap = CollStreamUtil.toMap(dictModels2, DictModel::getValue, DictModel::getText);
|
||||
|
||||
List<DictModel> dictModels3 = sysBaseAPI.getDictItems("professional_module");
|
||||
Map<String, String> professionalModuleMap = CollStreamUtil.toMap(dictModels3, DictModel::getText, DictModel::getValue);
|
||||
|
||||
List<DictModel> dictModels4 = sysBaseAPI.getDictItems("yn");
|
||||
Map<String, String> ynMap = CollStreamUtil.toMap(dictModels4, DictModel::getText, DictModel::getValue);
|
||||
// 准备部门校验的数据
|
||||
List<SysDepart> departList = sysDepartService.list();
|
||||
Map<String, List<SysDepart>> sysDepartMap = departList.stream().collect(Collectors.groupingBy(SysDepart::getDepartName));
|
||||
Map<String, String> sysDepartPathMap = SysDepart.buildPaths(departList);
|
||||
|
||||
LinkedList<String> standardNumberList = new LinkedList<>();
|
||||
for (int i = 0; i < excelList.size(); i++) {
|
||||
StringBuilder msgSub = new StringBuilder();
|
||||
ProcessAnnualInitLinkExcelVO excelVO = excelList.get(i);
|
||||
String revisionType = excelVO.getRevisionType();
|
||||
if (StringUtils.isBlank(revisionType)){
|
||||
msgSub.append("第" + (i + 4) + "行" + "制修订类型不能为空;");
|
||||
}else if (!espRevisionTypeMap.containsKey(revisionType)){
|
||||
msgSub.append("第" + (i + 4) + "行" + "制修订类型不存在;");
|
||||
}else {
|
||||
excelVO.setRevisionType(espRevisionTypeMap.get(revisionType));
|
||||
}
|
||||
String standardNumber = excelVO.getStandardNumber();
|
||||
if (ProcessAnnualInitCommon.REVISE.equals(excelVO.getRevisionType())){
|
||||
if (StringUtils.isBlank(standardNumber)){
|
||||
msgSub.append("第" + (i + 4) + "行" + "企标编号不能为空;");
|
||||
}else
|
||||
if (standardNumberList.contains(standardNumber)) {
|
||||
msgSub.append("第" + (i + 4) + "行" + "企标编号重复;");
|
||||
} else {
|
||||
standardNumberList.add(standardNumber);
|
||||
LawsEnterpriseStandard lawsEnterpriseStandard = enterpriseStandardService.queryByStandardNumber(standardNumber);
|
||||
if (lawsEnterpriseStandard != null){
|
||||
String standardId = lawsEnterpriseStandard.getId();
|
||||
if (oldStandardIdList.contains(standardId)) {
|
||||
msgSub.append("第" + (i + 4) + "行" + "企标编号已经存在;");
|
||||
}
|
||||
excelVO.setStandardId(standardId);
|
||||
//使用当前年份的年代号
|
||||
String[] split = standardNumber.split("-");
|
||||
split[split.length-1] = String.valueOf(DateUtil.thisYear());
|
||||
String join = String.join("-", Arrays.asList(split));
|
||||
excelVO.setStandardNumber(join);
|
||||
}else {
|
||||
msgSub.append("第" + (i + 4) + "行" + "企标编号不存在;");
|
||||
}
|
||||
}
|
||||
}
|
||||
String standardName = excelVO.getStandardName();
|
||||
if (StringUtils.isBlank(standardName)){
|
||||
msgSub.append("第" + (i + 4) + "行" + "企标名称不能为空;");
|
||||
}
|
||||
String mainDraftingUser = excelVO.getMainDraftingUser();
|
||||
if (StringUtils.isBlank(mainDraftingUser)){
|
||||
msgSub.append("第" + (i + 4) + "行" + "起草人不能为空;");
|
||||
}else if (!userMap.containsKey(mainDraftingUser)){
|
||||
msgSub.append("第" + (i + 4) + "行" + "起草人不存在;");
|
||||
}else {
|
||||
excelVO.setMainDraftingUser(userMap.get(mainDraftingUser));
|
||||
excelVO.setEmail(PasswordUtil.decrypt(emailMap.get(mainDraftingUser)));
|
||||
}
|
||||
String departName = excelVO.getDepartId();
|
||||
if (StringUtils.isBlank(departName)){
|
||||
msgSub.append("第" + (i + 4) + "行" + "所在部门不能为空;");
|
||||
}else {
|
||||
if (!importUtil.multiOrgValid(departName, sysDepartMap, sysDepartPathMap)) {
|
||||
msgSub.append("第" + (i + 4) + "行" + "所在部门填写错误 ");
|
||||
} else {
|
||||
// 转为id
|
||||
String departId1 = importUtil.convertMultiOrgId(departName, sysDepartMap, sysDepartPathMap);
|
||||
excelVO.setDepartId(departId1);
|
||||
}
|
||||
}
|
||||
|
||||
String professionalModule = excelVO.getProfessionalModule();
|
||||
if (StringUtils.isBlank(professionalModule)){
|
||||
msgSub.append("第" + (i + 4) + "行" + "专业模块不能为空;");
|
||||
}else if (!professionalModuleMap.containsKey(professionalModule)){
|
||||
msgSub.append("第" + (i + 4) + "行" + "专业模块不存在;");
|
||||
}else {
|
||||
excelVO.setProfessionalModule(professionalModuleMap.get(professionalModule));
|
||||
}
|
||||
String draftCompleteDate = excelVO.getDraftCompleteDate();
|
||||
if (StringUtils.isBlank(draftCompleteDate)){
|
||||
msgSub.append("第" + (i + 4) + "行" + "初稿完成日期不能为空;");
|
||||
}else {
|
||||
try {
|
||||
LocalDate.parse(draftCompleteDate);
|
||||
} catch (Exception e) {
|
||||
msgSub.append("第" + (i + 4) + "行" + "初稿完成日期格式不正确,应为yyyy-MM-dd;");
|
||||
}
|
||||
}
|
||||
String planArchivingDate = excelVO.getPlanArchivingDate();
|
||||
if (StringUtils.isBlank(planArchivingDate)){
|
||||
msgSub.append("第" + (i + 4) + "行" + "计划归档日期不能为空;");
|
||||
}else {
|
||||
try {
|
||||
LocalDate.parse(planArchivingDate);
|
||||
} catch (Exception e) {
|
||||
msgSub.append("第" + (i + 4) + "行" + "计划归档日期格式不正确,应为yyyy-MM-dd;");
|
||||
}
|
||||
}
|
||||
String haveEnglishVersion = excelVO.getHaveEnglishVersion();
|
||||
if (StringUtils.isNotBlank(haveEnglishVersion)){
|
||||
if (ynMap.containsKey(haveEnglishVersion)){
|
||||
excelVO.setHaveEnglishVersion(ynMap.get(haveEnglishVersion));
|
||||
}else {
|
||||
msgSub.append("第" + (i + 4) + "行" + "是否有英文版不存在;");
|
||||
}
|
||||
}
|
||||
String committee = excelVO.getCommittee();
|
||||
if (StringUtils.isNotBlank(committee)&&committee.length()>500){
|
||||
msgSub.append("第" + (i + 4) + "行" + "所属技术委员会最大为500字符;");
|
||||
}
|
||||
}
|
||||
return msg;
|
||||
}
|
||||
}
|
||||
|
||||
+412
@@ -0,0 +1,412 @@
|
||||
package com.jero.modules.activiti.process.annualinit.service;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.jero.common.system.api.ISysBaseAPI;
|
||||
import com.jero.modules.activiti.common.ActivitiCommon;
|
||||
import com.jero.modules.activiti.entity.ProcessAll;
|
||||
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
|
||||
import com.jero.modules.activiti.enums.ProcessTypeEnum;
|
||||
import com.jero.modules.activiti.process.annualinit.common.ProcessAnnualInitCommon;
|
||||
import com.jero.modules.activiti.process.annualinit.entity.ProcessAnnualInit;
|
||||
import com.jero.modules.activiti.process.annualinit.entity.ProcessAnnualInitLink;
|
||||
import com.jero.modules.activiti.process.annualinit.mapper.ProcessAnnualInitMapper;
|
||||
import com.jero.modules.activiti.process.annualinit.vo.ProcessAnnualInitVO;
|
||||
import com.jero.modules.activiti.process.common.common.DraftCommon;
|
||||
import com.jero.modules.activiti.process.common.enums.ProcessType;
|
||||
import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
|
||||
import com.jero.modules.activiti.process.fb.dto.BasicTaskInfoDTO;
|
||||
import com.jero.modules.activiti.process.fb.dto.ProcessDTO;
|
||||
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
import com.jero.modules.activiti.service.ProcessAllService;
|
||||
import com.jero.modules.activiti.service.WorkCenterService;
|
||||
import com.jero.modules.laws.common.util.CurrentUserUtil;
|
||||
import com.jero.modules.laws.enterprise.entity.ESPProjectStatus;
|
||||
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan;
|
||||
import com.jero.modules.laws.enterprise.enums.ESPlanStatusEnum;
|
||||
import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.activiti.engine.TaskService;
|
||||
import org.activiti.engine.task.Task;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 年度制修订计划流程(ProcessAnnualInit)表服务实现类
|
||||
*
|
||||
* @author lijiarao
|
||||
* @since 2024-09-24 14:13:43
|
||||
*/
|
||||
@Slf4j
|
||||
@Service()
|
||||
public class ProcessAnnualInitService extends ServiceImpl<ProcessAnnualInitMapper, ProcessAnnualInit> {
|
||||
@Resource
|
||||
private ProcessAnnualInitMapper processAnnualInitMapper;
|
||||
@Resource
|
||||
private ISysBaseAPI sysBaseAPI;
|
||||
@Resource
|
||||
private IProcessHandleService processHandleService;
|
||||
@Resource
|
||||
private ProcessAllService processAllService;
|
||||
@Resource
|
||||
private TaskService taskService;
|
||||
@Resource
|
||||
private ProcessAnnualInitLinkService annualInitLinkService;
|
||||
@Resource
|
||||
private EnterpriseStandardPlanService esPlanService;
|
||||
|
||||
public void startProcess(ProcessInfoVO<ProcessAnnualInitVO> processInfoVO) {
|
||||
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
|
||||
ProcessAnnualInitVO businessInfoDTO = processInfoVO.getBusinessInfoDTO();
|
||||
ProcessAnnualInit annualInit = businessInfoDTO.getAnnualInit();
|
||||
//补充流程主表信息
|
||||
String departManagerList = (String) userInfoMap.get("departManagerList");
|
||||
String standardDepartHandler = (String) userInfoMap.get("standardDepartHandler");
|
||||
String standardDepartManager = (String) userInfoMap.get("standardDepartManager");
|
||||
String seniorManagerList = (String) userInfoMap.get("seniorManagerList");
|
||||
String chiefInspectorList = (String) userInfoMap.get("chiefInspectorList");
|
||||
String authorizedPersonList = (String) userInfoMap.get("authorizedPersonList");
|
||||
|
||||
annualInit.setDepartManager(departManagerList);
|
||||
annualInit.setStandardDepartHandler(standardDepartHandler);
|
||||
annualInit.setStandardDepartManager(standardDepartManager);
|
||||
annualInit.setSeniorManager(seniorManagerList);
|
||||
annualInit.setChiefInspector(chiefInspectorList);
|
||||
annualInit.setAuthorizedPerson(authorizedPersonList);
|
||||
|
||||
this.saveOrUpdate(annualInit);
|
||||
String annualInitId = annualInit.getId();
|
||||
List<ProcessAnnualInitLink> annualInitLinkList = businessInfoDTO.getAnnualInitLinkList();
|
||||
for (ProcessAnnualInitLink link : annualInitLinkList) {
|
||||
link.setProcessId(annualInitId);
|
||||
}
|
||||
annualInitLinkService.saveOrUpdateBatch(annualInitLinkList);
|
||||
processInfoVO.setBusinessId(annualInitId);
|
||||
|
||||
//启动流程
|
||||
BasicProcessInfoDTO basicProcessInfoDTO = processInfoVO.getBasicProcessInfoDTO();
|
||||
basicProcessInfoDTO.setProcessDefinitionId(processHandleService.getDefinitionIdByKey(ProcessType.ANNUAL_INIT.getProcessKey())); // 流程定义id
|
||||
basicProcessInfoDTO.setProcessType(ProcessTypeEnum.ANNUAL_INIT.getValue()); // 流程类型
|
||||
userInfoMap.put(ProcessAnnualInitCommon.MAIN_DRAFTING_USER, CurrentUserUtil.getId());
|
||||
processInfoVO.setUserInfoMap(userInfoMap);
|
||||
String processInstanceId = processHandleService.startProcess(processInfoVO);
|
||||
|
||||
//start 先保存一份初始草稿
|
||||
processInfoVO.setSaveSource(DraftCommon.INITIAL_SOURCE);
|
||||
processHandleService.saveToDraft(processInfoVO, CurrentUserUtil.getId());
|
||||
//end 保存初始草稿结束
|
||||
//保存快照 start
|
||||
saveToSnapshot(processInfoVO, processInstanceId);
|
||||
//保存快照 end
|
||||
}
|
||||
|
||||
|
||||
public void submit(ProcessInfoVO<ProcessAnnualInitVO> processInfoVO) {
|
||||
BasicTaskInfoDTO basicTaskInfoDTO = processInfoVO.getBasicTaskInfoDTO();
|
||||
String taskId = basicTaskInfoDTO.getTaskId();
|
||||
ProcessDTO processDTO = processHandleService.getProcessDTO(taskId);
|
||||
String processInstanceId = processDTO.getProcessInstanceId();
|
||||
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
|
||||
processInfoVO.setBusinessId(processAll.getProjectId());
|
||||
Task task = processDTO.getTask();
|
||||
String taskDefinitionKey = task.getTaskDefinitionKey();
|
||||
processHandleService.updateApprovalRecord(processInfoVO);
|
||||
|
||||
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
|
||||
ProcessAnnualInitVO businessInfoDTO = processInfoVO.getBusinessInfoDTO();
|
||||
ProcessAnnualInit annualInit = businessInfoDTO.getAnnualInit();
|
||||
//补充流程主表信息
|
||||
String departManagerList = (String) userInfoMap.get("departManagerList");
|
||||
String standardDepartHandler = (String) userInfoMap.get("standardDepartHandler");
|
||||
String standardDepartManager = (String) userInfoMap.get("standardDepartManager");
|
||||
String seniorManagerList = (String) userInfoMap.get("seniorManagerList");
|
||||
String chiefInspectorList = (String) userInfoMap.get("chiefInspectorList");
|
||||
String authorizedPersonList = (String) userInfoMap.get("authorizedPersonList");
|
||||
|
||||
annualInit.setDepartManager(departManagerList);
|
||||
annualInit.setStandardDepartHandler(standardDepartHandler);
|
||||
annualInit.setStandardDepartManager(standardDepartManager);
|
||||
annualInit.setSeniorManager(seniorManagerList);
|
||||
annualInit.setChiefInspector(chiefInspectorList);
|
||||
annualInit.setAuthorizedPerson(authorizedPersonList);
|
||||
|
||||
this.saveOrUpdate(annualInit);
|
||||
String annualInitId = annualInit.getId();
|
||||
//先删除,在新增
|
||||
LambdaQueryWrapper<ProcessAnnualInitLink> myQuery = Wrappers.lambdaQuery(ProcessAnnualInitLink.class);
|
||||
myQuery.eq(ProcessAnnualInitLink::getProcessId, annualInit);
|
||||
annualInitLinkService.remove(myQuery);
|
||||
|
||||
List<ProcessAnnualInitLink> annualInitLinkList = businessInfoDTO.getAnnualInitLinkList();
|
||||
for (ProcessAnnualInitLink link : annualInitLinkList) {
|
||||
link.setProcessId(annualInitId);
|
||||
}
|
||||
annualInitLinkService.saveOrUpdateBatch(annualInitLinkList);
|
||||
|
||||
// 完成任务
|
||||
Map<String, Object> variables = new HashMap<>();
|
||||
taskService.complete(processDTO.getTaskId(), variables);
|
||||
|
||||
//保存快照 start
|
||||
saveToSnapshot(processInfoVO, processInstanceId);
|
||||
//保存快照 end
|
||||
}
|
||||
|
||||
private void saveToSnapshot(ProcessInfoVO<ProcessAnnualInitVO> processInfoVO, String processInstanceId) {
|
||||
// 获取流程通用数据
|
||||
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
|
||||
if(!Objects.isNull(process)){
|
||||
BasicProcessInfoDTO processInfoDTO = new BasicProcessInfoDTO();
|
||||
processInfoDTO.setProcessName(process.getPrcName());
|
||||
processInfoDTO.setProcessType(process.getPrcType());
|
||||
processInfoDTO.setProcessDefinitionId(process.getProcessDefinitionId());
|
||||
processInfoDTO.setProcessInstanceId(process.getProcessInstanceId());
|
||||
processInfoDTO.setProcessDescription(process.getPrcMes());
|
||||
processInfoDTO.setProcessDueDate(process.getDueTime());
|
||||
processInfoVO.setBasicProcessInfoDTO(processInfoDTO);
|
||||
// 保存快照
|
||||
processHandleService.saveToSnapshot(processInfoVO, CurrentUserUtil.getId());
|
||||
}
|
||||
}
|
||||
|
||||
public void approveTask(ProcessInfoVO<ProcessAnnualInitVO> processInfoVO, boolean pass) {
|
||||
BasicTaskInfoDTO basicTaskInfoDTO = processInfoVO.getBasicTaskInfoDTO();
|
||||
String taskId = basicTaskInfoDTO.getTaskId();
|
||||
ProcessDTO processDTO = processHandleService.getProcessDTO(taskId);
|
||||
String processInstanceId = processDTO.getProcessInstanceId();
|
||||
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
|
||||
processInfoVO.setBusinessId(processAll.getProjectId());
|
||||
Task task = processDTO.getTask();
|
||||
String taskDefinitionKey = task.getTaskDefinitionKey();
|
||||
processHandleService.updateApprovalRecord(processInfoVO);
|
||||
|
||||
switch (taskDefinitionKey) {
|
||||
//部门经理审批
|
||||
case ProcessAnnualInitCommon.BMJLSP:
|
||||
bmjlspApprove(processInfoVO, processDTO, pass);
|
||||
break;
|
||||
//法规部门处理人审批
|
||||
case ProcessAnnualInitCommon.FGBMCLRSP:
|
||||
fgbmclrspApprove(processInfoVO, processDTO, pass);
|
||||
break;
|
||||
//法规部门经理审批
|
||||
case ProcessAnnualInitCommon.FGBMJLSP:
|
||||
fgbmjlspApprove(processInfoVO, processDTO, pass);
|
||||
break;
|
||||
//高级经理审批
|
||||
case ProcessAnnualInitCommon.GJJLSP:
|
||||
gjjlspApprove(processInfoVO, processDTO, pass);
|
||||
break;
|
||||
//总监审批
|
||||
case ProcessAnnualInitCommon.ZJSP:
|
||||
zjspApprove(processInfoVO, processDTO, pass);
|
||||
break;
|
||||
//授权人审批
|
||||
case ProcessAnnualInitCommon.SQRSP:
|
||||
sqrspApprove(processInfoVO, processDTO, pass);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
//保存快照 start
|
||||
saveToSnapshot(processInfoVO, processInstanceId);
|
||||
//保存快照 end
|
||||
}
|
||||
|
||||
private void bmjlspApprove(ProcessInfoVO<ProcessAnnualInitVO> processInfoVO, ProcessDTO processDTO, boolean pass) {
|
||||
ProcessApprovalRecord processApprovalRecord = processDTO.getProcessApprovalRecord();
|
||||
String originUserId = processApprovalRecord.getOriginUserId();
|
||||
String userId = CurrentUserUtil.getId();
|
||||
String businessId = processInfoVO.getBusinessId();
|
||||
ProcessAnnualInit annualInit = this.getById(businessId);
|
||||
|
||||
// 完成任务
|
||||
Map<String, Object> variables = new HashMap<>();
|
||||
variables.put(ActivitiCommon.PASS, pass);
|
||||
variables.put(ProcessAnnualInitCommon.STANDARD_DEPART_HANDLER, annualInit.getStandardDepartHandler());
|
||||
taskService.complete(processDTO.getTaskId(), variables);
|
||||
if (!Objects.equals(userId, originUserId)) {
|
||||
String departManager = annualInit.getDepartManager();
|
||||
String userIdList = departManager.replaceAll(originUserId, userId);
|
||||
LambdaUpdateWrapper<ProcessAnnualInit> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(ProcessAnnualInit::getId, businessId);
|
||||
updateWrapper.set(ProcessAnnualInit::getDepartManager, userIdList);
|
||||
update(updateWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
private void fgbmclrspApprove(ProcessInfoVO<ProcessAnnualInitVO> processInfoVO, ProcessDTO processDTO, boolean pass) {
|
||||
ProcessApprovalRecord processApprovalRecord = processDTO.getProcessApprovalRecord();
|
||||
String originUserId = processApprovalRecord.getOriginUserId();
|
||||
String userId = CurrentUserUtil.getId();
|
||||
String businessId = processInfoVO.getBusinessId();
|
||||
ProcessAnnualInit annualInit = this.getById(businessId);
|
||||
// 完成任务
|
||||
Map<String, Object> variables = new HashMap<>();
|
||||
variables.put(ActivitiCommon.PASS, pass);
|
||||
variables.put(ProcessAnnualInitCommon.STANDARD_DEPART_MANAGER, annualInit.getStandardDepartManager());
|
||||
|
||||
taskService.complete(processDTO.getTaskId(), variables);
|
||||
if (!Objects.equals(userId, originUserId)) {
|
||||
LambdaUpdateWrapper<ProcessAnnualInit> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(ProcessAnnualInit::getId, businessId);
|
||||
updateWrapper.set(ProcessAnnualInit::getStandardDepartHandler, userId);
|
||||
update(updateWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
private void fgbmjlspApprove(ProcessInfoVO<ProcessAnnualInitVO> processInfoVO, ProcessDTO processDTO, boolean pass) {
|
||||
ProcessApprovalRecord processApprovalRecord = processDTO.getProcessApprovalRecord();
|
||||
String originUserId = processApprovalRecord.getOriginUserId();
|
||||
String userId = CurrentUserUtil.getId();
|
||||
String businessId = processInfoVO.getBusinessId();
|
||||
ProcessAnnualInit annualInit = this.getById(businessId);
|
||||
|
||||
// 完成任务
|
||||
Map<String, Object> variables = new HashMap<>();
|
||||
variables.put(ActivitiCommon.PASS, pass);
|
||||
variables.put(ProcessAnnualInitCommon.SENIOR_MANAGER_LIST, Arrays.asList(annualInit.getSeniorManager().split(",")));
|
||||
|
||||
taskService.complete(processDTO.getTaskId(), variables);
|
||||
if (!Objects.equals(userId, originUserId)) {
|
||||
LambdaUpdateWrapper<ProcessAnnualInit> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(ProcessAnnualInit::getId, businessId);
|
||||
updateWrapper.set(ProcessAnnualInit::getStandardDepartManager, userId);
|
||||
update(updateWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
private void gjjlspApprove(ProcessInfoVO<ProcessAnnualInitVO> processInfoVO, ProcessDTO processDTO, boolean pass) {
|
||||
ProcessApprovalRecord processApprovalRecord = processDTO.getProcessApprovalRecord();
|
||||
String originUserId = processApprovalRecord.getOriginUserId();
|
||||
String userId = CurrentUserUtil.getId();
|
||||
String businessId = processInfoVO.getBusinessId();
|
||||
ProcessAnnualInit annualInit = this.getById(businessId);
|
||||
|
||||
// 完成任务
|
||||
Map<String, Object> variables = new HashMap<>();
|
||||
variables.put(ActivitiCommon.PASS, pass);
|
||||
variables.put(ProcessAnnualInitCommon.CHIEF_INSPECTOR_LIST, Arrays.asList(annualInit.getChiefInspector().split(",")));
|
||||
taskService.complete(processDTO.getTaskId(), variables);
|
||||
if (!Objects.equals(userId, originUserId)) {
|
||||
String departManager = annualInit.getSeniorManager();
|
||||
String userIdList = departManager.replaceAll(originUserId, userId);
|
||||
LambdaUpdateWrapper<ProcessAnnualInit> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(ProcessAnnualInit::getId, businessId);
|
||||
updateWrapper.set(ProcessAnnualInit::getSeniorManager, userIdList);
|
||||
update(updateWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
private void zjspApprove(ProcessInfoVO<ProcessAnnualInitVO> processInfoVO, ProcessDTO processDTO, boolean pass) {
|
||||
ProcessApprovalRecord processApprovalRecord = processDTO.getProcessApprovalRecord();
|
||||
String originUserId = processApprovalRecord.getOriginUserId();
|
||||
String userId = CurrentUserUtil.getId();
|
||||
String businessId = processInfoVO.getBusinessId();
|
||||
ProcessAnnualInit annualInit = this.getById(businessId);
|
||||
|
||||
// 完成任务
|
||||
Map<String, Object> variables = new HashMap<>();
|
||||
variables.put(ActivitiCommon.PASS, pass);
|
||||
variables.put(ProcessAnnualInitCommon.AUTHORIZED_PERSON_LIST, Arrays.asList(annualInit.getAuthorizedPerson().split(",")));
|
||||
taskService.complete(processDTO.getTaskId(), variables);
|
||||
if (!Objects.equals(userId, originUserId)) {
|
||||
String departManager = annualInit.getChiefInspector();
|
||||
String userIdList = departManager.replaceAll(originUserId, userId);
|
||||
LambdaUpdateWrapper<ProcessAnnualInit> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(ProcessAnnualInit::getId, businessId);
|
||||
updateWrapper.set(ProcessAnnualInit::getChiefInspector, userIdList);
|
||||
update(updateWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
private void sqrspApprove(ProcessInfoVO<ProcessAnnualInitVO> processInfoVO, ProcessDTO processDTO, boolean pass) {
|
||||
ProcessApprovalRecord processApprovalRecord = processDTO.getProcessApprovalRecord();
|
||||
String originUserId = processApprovalRecord.getOriginUserId();
|
||||
String userId = CurrentUserUtil.getId();
|
||||
String businessId = processInfoVO.getBusinessId();
|
||||
ProcessAnnualInit annualInit = this.getById(businessId);
|
||||
|
||||
// 完成任务
|
||||
Map<String, Object> variables = new HashMap<>();
|
||||
variables.put(ActivitiCommon.PASS, pass);
|
||||
taskService.complete(processDTO.getTaskId(), variables);
|
||||
if (!Objects.equals(userId, originUserId)) {
|
||||
String departManager = annualInit.getAuthorizedPerson();
|
||||
String userIdList = departManager.replaceAll(originUserId, userId);
|
||||
LambdaUpdateWrapper<ProcessAnnualInit> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(ProcessAnnualInit::getId, businessId);
|
||||
updateWrapper.set(ProcessAnnualInit::getAuthorizedPerson, userIdList);
|
||||
update(updateWrapper);
|
||||
}
|
||||
if (pass){
|
||||
LambdaQueryWrapper<ProcessAnnualInitLink> myQuery = Wrappers.lambdaQuery(ProcessAnnualInitLink.class);
|
||||
myQuery.eq(ProcessAnnualInitLink::getProcessId, businessId);
|
||||
List<ProcessAnnualInitLink> list = annualInitLinkService.list(myQuery);
|
||||
List<EnterpriseStandardPlan> enterpriseStandardPlanList = convertToEnterpriseStandardPlanList(list);
|
||||
esPlanService.saveBatch(enterpriseStandardPlanList);
|
||||
}
|
||||
}
|
||||
|
||||
private List<EnterpriseStandardPlan> convertToEnterpriseStandardPlanList(List<ProcessAnnualInitLink> list) {
|
||||
List<EnterpriseStandardPlan> enterpriseStandardPlanlist=Lists.newArrayList();
|
||||
for (ProcessAnnualInitLink processAnnualInitLink :list) {
|
||||
enterpriseStandardPlanlist.add(convertFromProcessAnnualInitLink(processAnnualInitLink));
|
||||
}
|
||||
return enterpriseStandardPlanlist;
|
||||
}
|
||||
|
||||
private EnterpriseStandardPlan convertFromProcessAnnualInitLink(ProcessAnnualInitLink processAnnualInitLink) {
|
||||
EnterpriseStandardPlan enterpriseStandardPlan = new EnterpriseStandardPlan();
|
||||
enterpriseStandardPlan.setRevisionType(processAnnualInitLink.getRevisionType());
|
||||
//enterpriseStandardPlan.setProjectType();
|
||||
enterpriseStandardPlan.setStandardId(processAnnualInitLink.getStandardId());
|
||||
enterpriseStandardPlan.setStandardNumber(processAnnualInitLink.getStandardNumber());
|
||||
enterpriseStandardPlan.setStandardName(processAnnualInitLink.getStandardName());
|
||||
enterpriseStandardPlan.setMainDraftingUser(processAnnualInitLink.getMainDraftingUser());
|
||||
enterpriseStandardPlan.setDepartId(processAnnualInitLink.getDepartId());
|
||||
enterpriseStandardPlan.setProfessionalModule(processAnnualInitLink.getProfessionalModule());
|
||||
enterpriseStandardPlan.setHaveEnglishVersion(processAnnualInitLink.getHaveEnglishVersion());
|
||||
enterpriseStandardPlan.setCommittee(processAnnualInitLink.getCommittee());
|
||||
enterpriseStandardPlan.setProjectStatus(ESPProjectStatus.NOT_STARTED.getValue());
|
||||
enterpriseStandardPlan.setPlanStatus(ESPlanStatusEnum.ADD.getValue());
|
||||
|
||||
Date draftCompleteDate = processAnnualInitLink.getDraftCompleteDate();
|
||||
enterpriseStandardPlan.setDraftCompleteDate(draftCompleteDate);
|
||||
Date planArchivingDate = processAnnualInitLink.getPlanArchivingDate();
|
||||
enterpriseStandardPlan.setPlanArchivingDate(planArchivingDate);
|
||||
DateTime date = DateUtil.date();
|
||||
//初稿完成日期和计划归档日期有逾期
|
||||
if (date.compareTo(draftCompleteDate) >= 0 || date.compareTo(planArchivingDate) >= 0){
|
||||
enterpriseStandardPlan.setProjectStatus(ESPProjectStatus.OVERDUE.getValue());
|
||||
}
|
||||
return enterpriseStandardPlan;
|
||||
}
|
||||
|
||||
|
||||
public ProcessInfoVO<ProcessAnnualInitVO> getHandleData(String taskId) {
|
||||
ProcessInfoVO processInfoVO = processHandleService.queryProcessInfoVO(taskId);
|
||||
String businessId = processInfoVO.getBusinessId();
|
||||
ProcessAnnualInit annualInit = this.getById(businessId);
|
||||
|
||||
ProcessAnnualInitVO annualInitVO = new ProcessAnnualInitVO();
|
||||
annualInitVO.setAnnualInit(annualInit);
|
||||
|
||||
LambdaQueryWrapper<ProcessAnnualInitLink> myQuery = Wrappers.lambdaQuery(ProcessAnnualInitLink.class);
|
||||
myQuery.eq(ProcessAnnualInitLink::getProcessId, businessId);
|
||||
List<ProcessAnnualInitLink> list = annualInitLinkService.list(myQuery);
|
||||
|
||||
annualInitVO.setAnnualInitLinkList(list);
|
||||
processInfoVO.setBusinessInfoDTO(annualInitVO);
|
||||
return processInfoVO;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+108
@@ -0,0 +1,108 @@
|
||||
package com.jero.modules.activiti.process.annualinit.vo;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.jero.common.aspect.annotation.Dict;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.jeecgframework.poi.excel.annotation.Excel;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 年度制修订计划流程关联标准 Excel导入VO
|
||||
*
|
||||
* @author lijiarao
|
||||
* @since 2024-09-24 14:30:21
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "ProcessAnnualInitLinkExcelVO", description = "年度制修订计划流程关联标准 Excel导入VO")
|
||||
public class ProcessAnnualInitLinkExcelVO implements Serializable {
|
||||
private static final long serialVersionUID = 647513571439825961L;
|
||||
/**
|
||||
* 制修订类别
|
||||
*/
|
||||
@ApiModelProperty(value = "制修订类别")
|
||||
@Excel(name = "*制修订类型", width = 15)
|
||||
@Dict(dicCode = "esp_revision_type")
|
||||
private String revisionType;
|
||||
/**
|
||||
* 标准id
|
||||
*/
|
||||
@ApiModelProperty(value = "标准id")
|
||||
private String standardId;
|
||||
/**
|
||||
* 标准编号
|
||||
*/
|
||||
@ApiModelProperty(value = "标准编号")
|
||||
@Excel(name = "*企标编号", width = 15)
|
||||
private String standardNumber;
|
||||
/**
|
||||
* 标准名称
|
||||
*/
|
||||
@ApiModelProperty(value = "标准名称")
|
||||
@Excel(name = "*企标名称", width = 15)
|
||||
private String standardName;
|
||||
/**
|
||||
* 起草人
|
||||
*/
|
||||
@ApiModelProperty(value = "起草人")
|
||||
@Excel(name = "*起草人", width = 15)
|
||||
@Dict(dictTable = "sys_user", dicText = "CONCAT(realname, '(', username, ')')", dicCode = "id")
|
||||
private String mainDraftingUser;
|
||||
/**
|
||||
* 邮箱
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
@ApiModelProperty(value = "邮箱")
|
||||
private String email;
|
||||
/**
|
||||
* 所在部门id
|
||||
*/
|
||||
@ApiModelProperty(value = "所在部门id")
|
||||
@Excel(name = "*所在部门")
|
||||
@Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
||||
private String departId;
|
||||
/**
|
||||
* 专业模块
|
||||
*/
|
||||
@ApiModelProperty(value = "专业模块")
|
||||
@Excel(name = "*专业模块", width = 15)
|
||||
@Dict(dicCode = "professional_module")
|
||||
private String professionalModule;
|
||||
/**
|
||||
* 初稿完成日期
|
||||
*/
|
||||
@ApiModelProperty(value = "初稿完成日期")
|
||||
@Excel(name = "*初稿完成日期", width = 15)
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private String draftCompleteDate;
|
||||
/**
|
||||
* 计划归档日期
|
||||
*/
|
||||
@ApiModelProperty(value = "计划归档日期")
|
||||
@Excel(name = "*计划归档日期", width = 15)
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private String planArchivingDate;
|
||||
/**
|
||||
* 是否有英文版
|
||||
*/
|
||||
@ApiModelProperty(value = "是否有英文版")
|
||||
@Excel(name = "是否有英文版", width = 15)
|
||||
@Dict(dicCode = "yn")
|
||||
private String haveEnglishVersion;
|
||||
/**
|
||||
* 所属技术委员会
|
||||
*/
|
||||
@ApiModelProperty(value = "所属技术委员会")
|
||||
@Excel(name = "所属技术委员会", width = 15)
|
||||
private String committee;
|
||||
|
||||
|
||||
}
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.jero.modules.activiti.process.annualinit.vo;
|
||||
|
||||
import com.jero.modules.activiti.process.annualinit.entity.ProcessAnnualInit;
|
||||
import com.jero.modules.activiti.process.annualinit.entity.ProcessAnnualInitLink;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author liJiaRao
|
||||
* @date 2024-09-25 13:51
|
||||
*/
|
||||
@Data
|
||||
public class ProcessAnnualInitVO {
|
||||
|
||||
@ApiModelProperty(value = "流程主表信息")
|
||||
private ProcessAnnualInit annualInit;
|
||||
@ApiModelProperty(value = "关联标准信息")
|
||||
private List<ProcessAnnualInitLink> annualInitLinkList;
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package com.jero.modules.activiti.process.carEsApproval.common;
|
||||
|
||||
/**
|
||||
* @author: Mzaxd
|
||||
* @Date: 2023/12/19 15:14
|
||||
*/
|
||||
public class CarEsApprovalTaskNodeIdConstant {
|
||||
|
||||
/** 法规工程师确认是否开启征求意见 */
|
||||
public static final String START = "Activity_1siuksf";
|
||||
/** 设计工程师填写意见 */
|
||||
public static final String ONE = "Activity_04m430n";
|
||||
/** 法规工程师汇总数据 */
|
||||
public static final String TWO = "Activity_1riqzkp";
|
||||
/** 法规工程师派号 */
|
||||
public static final String THREE = "Activity_11uuyg0";
|
||||
/** 主起草人 */
|
||||
public static final String FOUR = "mainDraftUser";
|
||||
/** 法规工程师 */
|
||||
public static final String FIVE = "standardEngineer";
|
||||
/** 征求意见人员 */
|
||||
public static final String SIX = "adviceUserList";
|
||||
}
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
package com.jero.modules.activiti.process.carEsApproval.controller;
|
||||
|
||||
import com.jero.common.api.vo.Result;
|
||||
import com.jero.common.aspect.annotation.AutoLog;
|
||||
import com.jero.common.aspect.annotation.Translation;
|
||||
import com.jero.modules.activiti.enums.ProcessTypeEnum;
|
||||
import com.jero.modules.activiti.process.carEsApproval.service.CarEsApprovalService;
|
||||
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
|
||||
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
import com.jero.modules.activiti.process.carEsApproval.entity.ProcessCarEsApproval;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
|
||||
/**
|
||||
* @author: Mzaxd
|
||||
* @Date: 2023/10/18 10:44
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@Api(tags = "整车企业标准报批流程")
|
||||
@RequestMapping("/process/es/carEsApproval")
|
||||
public class CarEsApprovalController {
|
||||
|
||||
@Resource
|
||||
private CarEsApprovalService flowService;
|
||||
|
||||
@Resource
|
||||
private ActFlowCommonService actFlowCommonService;
|
||||
|
||||
/**
|
||||
* 整车企业标准报批流程
|
||||
*
|
||||
* @param processInfoVO
|
||||
*/
|
||||
@AutoLog(value = "整车企业标准报批流程-发起流程")
|
||||
@ApiOperation(value="整车企业标准报批流程-发起流程", notes="整车企业标准报批流程-发起流程")
|
||||
@PostMapping("/start")
|
||||
public Result<?> startProcess(@RequestBody ProcessInfoVO<ProcessCarEsApproval> processInfoVO) {
|
||||
flowService.startProcess(processInfoVO);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "整车企业标准报批流程-提交")
|
||||
@ApiOperation(value = "整车企业标准报批流程-提交", notes = "整车企业标准报批流程-提交")
|
||||
@PostMapping("/submit")
|
||||
public Result<T> submit(@RequestBody ProcessInfoVO<ProcessCarEsApproval> processInfoVO) {
|
||||
flowService.submit(processInfoVO);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存到待办
|
||||
* @param taskId
|
||||
*/
|
||||
@AutoLog(value = "整车企业标准报批流程-办理")
|
||||
@ApiOperation(value="整车企业标准报批流程-办理", notes="整车企业标准报批流程-办理")
|
||||
@GetMapping("/handle/{taskId}")
|
||||
@Translation
|
||||
public Result<?> handle(@PathVariable("taskId") String taskId) {
|
||||
ProcessDraft draft = actFlowCommonService.getExistDraftByTaskId(taskId, ProcessTypeEnum.MACHINE_ES_APPROVAL);
|
||||
if (draft != null) {
|
||||
return Result.OK(draft);
|
||||
}
|
||||
return Result.OK(flowService.getHandleData(taskId));
|
||||
}
|
||||
|
||||
@AutoLog(value = "整车企业标准报批流程-同意")
|
||||
@ApiOperation(value = "整车企业标准报批流程-同意", notes = "整车企业标准报批流程-同意")
|
||||
@PostMapping("/agree")
|
||||
public Result<T> agree(@RequestBody ProcessInfoVO<ProcessCarEsApproval> processInfoVO) {
|
||||
flowService.approveTask(processInfoVO, true);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "整车企业标准报批流程-驳回")
|
||||
@ApiOperation(value = "整车企业标准报批流程-驳回", notes = "整车企业标准报批流程-驳回")
|
||||
@PostMapping("/reject")
|
||||
public Result<T> reject(@RequestBody ProcessInfoVO<ProcessCarEsApproval> processInfoVO) {
|
||||
flowService.approveTask(processInfoVO, false);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
}
|
||||
+98
@@ -0,0 +1,98 @@
|
||||
package com.jero.modules.activiti.process.carEsApproval.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.jero.common.aspect.annotation.Dict;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
*
|
||||
* @TableName process_car_es_approval
|
||||
*/
|
||||
@TableName(value ="process_car_es_approval")
|
||||
@Data
|
||||
public class ProcessCarEsApproval implements Serializable {
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
@ApiModelProperty(value = "主键ID")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createBy;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新人
|
||||
*/
|
||||
@ApiModelProperty(value = "更新人")
|
||||
private String updateBy;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 所属部门
|
||||
*/
|
||||
@ApiModelProperty(value = "所属部门")
|
||||
private String orgCode;
|
||||
|
||||
/**
|
||||
* 0表示未删除,1表示删除
|
||||
*/
|
||||
@ApiModelProperty(value = "0表示未删除,1表示删除")
|
||||
private Integer delFlag;
|
||||
|
||||
/**
|
||||
* 流程实例Id
|
||||
*/
|
||||
@ApiModelProperty(value = "流程实例Id")
|
||||
private String processInstanceId;
|
||||
|
||||
/**
|
||||
* 在线编辑文件id
|
||||
*/
|
||||
@ApiModelProperty(value = "在线编辑文件id")
|
||||
private String onEditFile;
|
||||
|
||||
/**
|
||||
* 业务json数据
|
||||
*/
|
||||
@ApiModelProperty(value = "业务JSON数据")
|
||||
private String businessJson;
|
||||
|
||||
/**
|
||||
* 附件
|
||||
*/
|
||||
@Dict(dictTable = "sys_oss", dicText = "fileName", dicCode = "id")
|
||||
@ApiModelProperty(value = "附件")
|
||||
private String attach;
|
||||
|
||||
/**
|
||||
* 抄送人员
|
||||
*/
|
||||
@Dict(dictTable = "sys_user", dicText = "realname", dicCode = "id")
|
||||
@ApiModelProperty(value = "抄送人员")
|
||||
private String copyUser;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
package com.jero.modules.activiti.process.carEsApproval.listener;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||
import com.jero.modules.activiti.process.carEsApproval.entity.ProcessCarEsApproval;
|
||||
import com.jero.modules.activiti.process.carEsApproval.service.CarEsApprovalService;
|
||||
import com.jero.modules.activiti.process.common.enums.StandardStateEnum;
|
||||
import com.jero.modules.laws.common.constant.FieldCommon;
|
||||
import com.jero.modules.laws.common.service.ILawsCommonService;
|
||||
import com.jero.modules.tag.enums.TableNameEnum;
|
||||
import lombok.SneakyThrows;
|
||||
import org.activiti.engine.delegate.DelegateExecution;
|
||||
import org.activiti.engine.delegate.ExecutionListener;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author: Mzaxd
|
||||
* @Date: 2023/12/19 11:59
|
||||
*/
|
||||
@Component
|
||||
public class ProcessCarEsApprovalEndListener implements ExecutionListener {
|
||||
|
||||
@Resource
|
||||
private CarEsApprovalService flowService;
|
||||
@Resource
|
||||
private ILawsCommonService lawsCommonService;
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public void notify(DelegateExecution delegateExecution) {
|
||||
// 获取流程实例Id
|
||||
String processInstanceId = delegateExecution.getProcessInstanceId();
|
||||
// 根据流程Id获取业务数据
|
||||
LambdaQueryWrapper<ProcessCarEsApproval> revisionWrapper = new LambdaQueryWrapper<>();
|
||||
revisionWrapper.eq(ProcessCarEsApproval::getProcessInstanceId, processInstanceId);
|
||||
// 获取企标相关数据
|
||||
ProcessCarEsApproval data = flowService.getOne(revisionWrapper);
|
||||
// 将数据转换为Map
|
||||
Map<String, Object> variables = transMap(data);
|
||||
// 发布企标
|
||||
lawsCommonService.commonAdd(variables);
|
||||
}
|
||||
|
||||
private Map<String, Object> transMap(ProcessCarEsApproval data) {
|
||||
Map<String, Object> variables = JSON.parseObject(data.getBusinessJson(), Map.class);
|
||||
variables.put(FieldCommon.MODULE, TableNameEnum.ENTERPRISE_STANDARDS.getValue());
|
||||
// 标准状态
|
||||
variables.put(FieldCommon.STANDARD_STATE, StandardStateEnum.CURRENTLY_EFFECTIVE.getStateValue());
|
||||
String standardId = IdWorker.getIdStr();
|
||||
variables.put(FieldCommon.ID, standardId);
|
||||
String onEditFile = data.getOnEditFile();
|
||||
// 发布稿
|
||||
variables.put(FieldCommon.FILE_PUBLISH_OF_ORIGINAL, onEditFile);
|
||||
return variables;
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.jero.modules.activiti.process.carEsApproval.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.jero.modules.activiti.process.carEsApproval.entity.ProcessCarEsApproval;
|
||||
|
||||
/**
|
||||
* @author ThinkBook
|
||||
* @description 针对表【process_es_revision】的数据库操作Mapper
|
||||
* @createDate 2023-12-19 11:58:59
|
||||
* @Entity com.jero.modules.activiti.process.esRevision.entity.EsRevision
|
||||
*/
|
||||
public interface ProcessCarEsApprovalMapper extends BaseMapper<ProcessCarEsApproval> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package com.jero.modules.activiti.process.carEsApproval.service;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
import com.jero.modules.activiti.process.carEsApproval.entity.ProcessCarEsApproval;
|
||||
|
||||
/**
|
||||
* @author ThinkBook
|
||||
* @description 针对表【process_es_revision】的数据库操作Service
|
||||
* @createDate 2023-12-19 11:58:59
|
||||
*/
|
||||
public interface CarEsApprovalService extends IService<ProcessCarEsApproval> {
|
||||
|
||||
ProcessInfoVO<ProcessCarEsApproval> getHandleData(String taskId);
|
||||
|
||||
void startProcess(ProcessInfoVO<ProcessCarEsApproval> processInfoVO);
|
||||
|
||||
void submit(ProcessInfoVO<ProcessCarEsApproval> processInfoVO);
|
||||
|
||||
void approveTask(ProcessInfoVO<ProcessCarEsApproval> processInfoVO, boolean pass);
|
||||
}
|
||||
+243
@@ -0,0 +1,243 @@
|
||||
package com.jero.modules.activiti.process.carEsApproval.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.jero.common.api.vo.ResultCommon;
|
||||
import com.jero.common.exception.JeroBootException;
|
||||
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
|
||||
import com.jero.modules.activiti.enums.CommitFlagEnum;
|
||||
import com.jero.modules.activiti.enums.ProcessTypeEnum;
|
||||
import com.jero.modules.activiti.process.carEsApproval.mapper.ProcessCarEsApprovalMapper;
|
||||
import com.jero.modules.activiti.process.carEsApproval.service.CarEsApprovalService;
|
||||
import com.jero.modules.activiti.process.common.enums.ProcessType;
|
||||
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
|
||||
import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
|
||||
import com.jero.modules.activiti.process.fb.dto.BasicTaskInfoDTO;
|
||||
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
import com.jero.modules.activiti.process.carEsApproval.entity.ProcessCarEsApproval;
|
||||
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
|
||||
import com.jero.modules.activiti.service.ProcessNodeLinkService;
|
||||
import com.jero.modules.sys.utils.UserUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.activiti.engine.RuntimeService;
|
||||
import org.activiti.engine.TaskService;
|
||||
import org.activiti.engine.runtime.ProcessInstance;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.jero.modules.activiti.common.ActivitiCommon.*;
|
||||
import static com.jero.modules.activiti.process.specialEsApproval.common.SpecialEsApprovalTaskNodeIdConstant.TWO;
|
||||
|
||||
/**
|
||||
* @author ThinkBook
|
||||
* @description 针对表【process_es_revision】的数据库操作Service实现
|
||||
* @createDate 2023-12-19 11:58:59
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
@Transactional(rollbackFor = JeroBootException.class)
|
||||
public class CarEsApprovalServiceImpl extends ServiceImpl<ProcessCarEsApprovalMapper, ProcessCarEsApproval>
|
||||
implements CarEsApprovalService {
|
||||
|
||||
@Resource
|
||||
private ActFlowCommonService actFlowCommonService;
|
||||
|
||||
@Resource
|
||||
private ProcessNodeLinkService processNodeLinkService;
|
||||
|
||||
@Resource
|
||||
private RuntimeService runtimeService;
|
||||
|
||||
@Resource
|
||||
private IProcessHandleService processHandleService;
|
||||
|
||||
@Resource
|
||||
private TaskService taskService;
|
||||
|
||||
@Resource
|
||||
private ProcessApprovalRecordService approvalRecordService;
|
||||
|
||||
@Override
|
||||
public void startProcess(ProcessInfoVO<ProcessCarEsApproval> processInfoVO) {
|
||||
// 流程Key
|
||||
String processDefinitionKey = ProcessType.CAR_ES_APPROVAL.getProcessKey();
|
||||
// 流程信息
|
||||
BasicProcessInfoDTO processInfo = processInfoVO.getBasicProcessInfoDTO();
|
||||
// 任务信息
|
||||
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
|
||||
// 人员信息
|
||||
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
|
||||
// 当前用户Id
|
||||
String userId = UserUtils.getUserId();
|
||||
// 设置流程变量
|
||||
Map<String, Object> actVariables = this.setVariables(processInfoVO);
|
||||
// 删除草稿
|
||||
actFlowCommonService.getExistDraftAndRemove(processInfoVO.getDraftId());
|
||||
// 启动流程
|
||||
ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, actVariables);
|
||||
// 获取流程实例ID
|
||||
String processDefinitionId = processInstance.getProcessDefinitionId();
|
||||
String processInstanceId = processInstance.getId();
|
||||
processInfo.setProcessInstanceId(processInstanceId);
|
||||
processInfo.setProcessDefinitionId(processDefinitionId);
|
||||
processInfo.setProcessType(ProcessTypeEnum.MACHINE_ES_APPROVAL.getValue());
|
||||
// 第一个节点业务数据处理
|
||||
this.startNodeBusProcess(processInfoVO);
|
||||
// 保存选人信息
|
||||
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userInfoMap);
|
||||
// 获取第一个任务的taskId
|
||||
String taskId = actFlowCommonService.getFirstTaskId(processInstanceId, userId, processDefinitionId);
|
||||
processTask.setTaskId(taskId);
|
||||
// 保存第一个节点的草稿
|
||||
processHandleService.saveToDraft(processInfoVO, userId);
|
||||
// 保存第一个节点的快照
|
||||
processHandleService.saveToSnapshot(processInfoVO, userId);
|
||||
// 更新审批表为完成,填充数据
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
// 根据流程实例id更新流程总表
|
||||
actFlowCommonService.updateProcessAll(processInfo);
|
||||
// 自动完成第一个任务
|
||||
actFlowCommonService.completeTask(taskId, userId);
|
||||
}
|
||||
|
||||
private void startNodeBusProcess(ProcessInfoVO<ProcessCarEsApproval> processInfoVO) {
|
||||
String processInstanceId = processInfoVO.getBasicProcessInfoDTO().getProcessInstanceId();
|
||||
ProcessCarEsApproval processInfo = processInfoVO.getBusinessInfoDTO();
|
||||
processInfo.setProcessInstanceId(processInstanceId);
|
||||
save(processInfo);
|
||||
}
|
||||
|
||||
private Map<String, Object> setVariables(ProcessInfoVO<ProcessCarEsApproval> processInfoVO) {
|
||||
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
// 将所有多选人员转换为List后放入map中
|
||||
result.put(MAIN_DRAFT_USER, userInfoMap.get(MAIN_DRAFT_USER));
|
||||
actFlowCommonService.convertAndPutList(result, userInfoMap, USER_ONE_List);
|
||||
actFlowCommonService.convertAndPutList(result, userInfoMap, USER_TWO_List);
|
||||
actFlowCommonService.convertAndPutList(result, userInfoMap, USER_THREE_List);
|
||||
actFlowCommonService.convertAndPutList(result, userInfoMap, USER_FOUR_List);
|
||||
actFlowCommonService.convertAndPutList(result, userInfoMap, USER_FIVE_List);
|
||||
actFlowCommonService.convertAndPutList(result, userInfoMap, USER_SIX_List);
|
||||
actFlowCommonService.convertAndPutList(result, userInfoMap, USER_SEVEN_List);
|
||||
// 获取分发人
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProcessInfoVO<ProcessCarEsApproval> getHandleData(String taskId) {
|
||||
if (!actFlowCommonService.taskExists(taskId)) {
|
||||
throw new JeroBootException(ResultCommon.TASK_NOT_EXISTS);
|
||||
}
|
||||
ProcessInfoVO<ProcessCarEsApproval> result = new ProcessInfoVO<>();
|
||||
// 使用流程引擎根据taskId找到流程实例Id
|
||||
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
|
||||
result.setBasicProcessInfoDTO(actFlowCommonService.getProcessInfo(processInstanceId));
|
||||
// 获取当前流程数据
|
||||
LambdaQueryWrapper<ProcessCarEsApproval> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ProcessCarEsApproval::getProcessInstanceId, processInstanceId);
|
||||
ProcessCarEsApproval processVo = getOne(queryWrapper);
|
||||
// 设置流程信息
|
||||
result.setBusinessInfoDTO(processVo);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void submit(ProcessInfoVO<ProcessCarEsApproval> processInfoVO) {
|
||||
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
|
||||
String taskId = processTask.getTaskId();
|
||||
// 校验是否有权限操作此待办
|
||||
processHandleService.validTask(taskId);
|
||||
// 获取当前节点的id
|
||||
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
|
||||
BasicProcessInfoDTO processInfo = new BasicProcessInfoDTO();
|
||||
// 使用流程引擎根据taskId找到流程实例Id
|
||||
processInfo.setProcessInstanceId(processInstanceId);
|
||||
processInfoVO.setBasicProcessInfoDTO(processInfo);
|
||||
// 更新审批表为完成,填充数据
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
String curUserId = UserUtils.getUserId();
|
||||
ProcessCarEsApproval data = processInfoVO.getBusinessInfoDTO();
|
||||
// 根据流程实例Id获取流程定义ID
|
||||
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
|
||||
.processInstanceId(processInstanceId).singleResult();
|
||||
// 获取数据库中的流程信息
|
||||
LambdaQueryWrapper<ProcessCarEsApproval> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ProcessCarEsApproval::getProcessInstanceId, processInstanceId);
|
||||
ProcessCarEsApproval dataFromDb = getOne(queryWrapper);
|
||||
if (dataFromDb != null) {
|
||||
data.setId(dataFromDb.getId());
|
||||
}
|
||||
// 获取流程实例ID
|
||||
String processDefinitionId = processInstance.getProcessDefinitionId();
|
||||
// 判断是否开启征求意见子流程 设置流程变量
|
||||
Map<String, Object> actVariable = this.setVariables(processInfoVO);
|
||||
taskService.setVariables(taskId, actVariable);
|
||||
// 保存流程数据
|
||||
saveOrUpdate(data);
|
||||
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, processInfoVO.getUserInfoMap());
|
||||
// 完成任务
|
||||
actFlowCommonService.completeTask(taskId, curUserId);
|
||||
// 更新审批表为完成,填充数据
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
// 删除草稿
|
||||
actFlowCommonService.removeDraft(curUserId, taskId, processInstanceId);
|
||||
// 保存快照
|
||||
processHandleService.saveToSnapshot(processInfoVO, curUserId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void approveTask(ProcessInfoVO<ProcessCarEsApproval> processInfoVO, boolean pass) {
|
||||
// 获取task
|
||||
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
|
||||
String taskId = processTask.getTaskId();
|
||||
// 校验是否有权限操作此待办
|
||||
processHandleService.validTask(taskId);
|
||||
String prcId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
|
||||
BasicProcessInfoDTO processInfo = new BasicProcessInfoDTO();
|
||||
processInfo.setProcessInstanceId(prcId);
|
||||
processInfoVO.setBasicProcessInfoDTO(processInfo);
|
||||
// 获取当前节点的id
|
||||
ProcessApprovalRecord record = actFlowCommonService.getNodeIdByTaskId(taskId);
|
||||
String xmlNodeId = record.getNodeId();
|
||||
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
|
||||
// 更新审批表为完成,填充数据
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
String curUserId = UserUtils.getUserId();
|
||||
if (xmlNodeId.equals(TWO)) {
|
||||
// 获取数据库中的流程信息
|
||||
ProcessCarEsApproval data = processInfoVO.getBusinessInfoDTO();
|
||||
LambdaQueryWrapper<ProcessCarEsApproval> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ProcessCarEsApproval::getProcessInstanceId, processInstanceId);
|
||||
ProcessCarEsApproval dataFromDb = getOne(queryWrapper);
|
||||
if (dataFromDb != null) {
|
||||
data.setId(dataFromDb.getId());
|
||||
}
|
||||
// 保存数据
|
||||
updateById(data);
|
||||
}
|
||||
// 设置流程变量
|
||||
runtimeService.setVariable(processInstanceId, PASS, pass);
|
||||
// 会签节点驳回后修改其他节点的状态
|
||||
approvalRecordService.updateApprovalRecordFinishFlag(pass, taskId, xmlNodeId, processInstanceId);
|
||||
// 保存快照
|
||||
processHandleService.saveToSnapshot(processInfoVO, curUserId);
|
||||
// 审批节点
|
||||
actFlowCommonService.completeTask(taskId, curUserId);
|
||||
// 驳回,结束所有节点
|
||||
approvalRecordService.updateApprovalRecordFinishFlag(pass, taskId, xmlNodeId, processInstanceId);
|
||||
// 更新审批表为完成,填充数据
|
||||
processTask.setCommitFlag(pass ? CommitFlagEnum.PASS.getValue() : CommitFlagEnum.REJECT.getValue());
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
// 删除草稿
|
||||
actFlowCommonService.removeDraft(curUserId, taskId, processInstanceId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
+12
-1
@@ -14,7 +14,18 @@ public enum ProcessType {
|
||||
NEW_STANDARD_IMPORT("新法规导入流程", "1", "new_standard_import", "ProcessNewStandardImportServiceImpl"),
|
||||
STANDARD_INTERPRET("标准解读流程", "2", "standard_interpret", "StandardInterpretFlowServiceImpl"),
|
||||
STANDARD_COMPLIANCE_CHECK("法规符合性评估流程", "3", "laws-evaluation-main", "ProcessStandardComplianceCheckServiceImpl"),
|
||||
MARKET_STANDARD_PUBLISH("市场清单发布流程", "4", "market_standard_publish", "ProcessNewStandardImportServiceImpl"),
|
||||
MARKET_STANDARD_PUBLISH("市场清单发布流程", "4", "market_standard_publish", "ProcessMarketStandardReleaseServiceImpl"),
|
||||
ENTERPRISE_STANDARD_ABOLISH_PUBLISH("企标废止发布流程", "5", "enterprise_standard_abolish_publish", "ProcessAbolishReleaseServiceImpl"),
|
||||
ES_REVISION_ADVICE("企标制修订及征求意见流程", "6", "es_revision_advice", "ProcessEsRevisionServiceImpl"),
|
||||
ANNUAL_INIT("企业标准年度制修订计划流程", "7", "process-annual-init", "ProcessAnnualInitService"),
|
||||
DOMESTIC_VEHICLE_CONTROL_PUBLISH("国内整车型号和VIN前八位管控流程", "8", "domestic_vehicle_control_publish", "ProcessVehicleDomesticReleaseServiceImpl"),
|
||||
PLAN_CHANGE("企业标准计划变更流程", "9", "process-plan-change", "ProcessPlanChangeService"),
|
||||
INTERNATIONAL_VEHICLE_CONTROL_PUBLISH("国际整车型号和VIN前八位管控流程", "10", "international_vehicle_control_publish", "ProcessVehicleInternationalReleaseServiceImpl"),
|
||||
PART_TYPE_APPLY("关键零部件型号申请流程", "11", "part_type_apply","ProcessPartTypeApplyServiceImpl"),
|
||||
SPECIAL_ES_APPROVAL("专业技术企业标准报批流程", "12", "special_es_approval", "ProcessSpecialEsApprovalServiceImpl"),
|
||||
MACHINE_ES_APPROVAL("产品标准-整车企业标准报批流程", "13", "machine_es_approval", "ProcessMachineEsApprovalServiceImpl"),
|
||||
CAR_ES_APPROVAL("产品标准-整机企业标准报批流程", "14", "car_es_approval", "ProcessEsCarApprovalServiceImpl"),
|
||||
ES_RECHECK("企标复审流程", "15", "es_recheck", "ProcessEsRecheckServiceImpl"),
|
||||
;
|
||||
|
||||
private final String name;
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ import lombok.Getter;
|
||||
*/
|
||||
@Getter
|
||||
public enum StandardStateEnum {
|
||||
|
||||
SEEK_FOR_OPINIONS("征求意见","2"),
|
||||
CURRENTLY_EFFECTIVE("现行有效","8"),
|
||||
ABOLISH("废止","9"),
|
||||
;
|
||||
|
||||
+1
-1
@@ -110,7 +110,7 @@ public class ActFlowCommonService {
|
||||
* @param flowUserInfoVO
|
||||
* @param key
|
||||
*/
|
||||
public void convertAndPutList(HashMap<String, Object> map, Map<String, Object> flowUserInfoVO, String key) {
|
||||
public void convertAndPutList(Map<String, Object> map, Map<String, Object> flowUserInfoVO, String key) {
|
||||
Optional.ofNullable(flowUserInfoVO.get(key))
|
||||
.map(Object::toString)
|
||||
.map(s -> Arrays.asList(s.split(",")))
|
||||
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
package com.jero.modules.activiti.process.esRevisionAdvice.common;
|
||||
|
||||
/**
|
||||
* @author: Mzaxd
|
||||
* @Date: 2023/12/19 15:14
|
||||
*/
|
||||
public class RevisionTaskNodeIdConstant {
|
||||
|
||||
/** 主起草人发起 */
|
||||
public static final String START = "Activity_0v98tow";
|
||||
/** 法规工程师确认是否开启征求意见 */
|
||||
public static final String CONFIRM_ADVISE = "Activity_1siuksf";
|
||||
/** 设计工程师填写意见 */
|
||||
public static final String ADVICE = "Activity_04m430n";
|
||||
/** 法规工程师汇总数据 */
|
||||
public static final String ADVICE_COLLECT = "Activity_1riqzkp";
|
||||
/** 法规工程师派号 */
|
||||
public static final String SET_STANDARD_NUMBER = "Activity_11uuyg0";
|
||||
/** 主起草人 */
|
||||
public static final String MAIN_DRAFT_USER = "mainDraftUser";
|
||||
/** 法规工程师 */
|
||||
public static final String STANDARD_ENGINEER = "standardEngineer";
|
||||
/** 征求意见人员 */
|
||||
public static final String ADVICE_USER_LIST = "adviceUserList";
|
||||
/** 开启征求意见 */
|
||||
public static final String OPEN = "open";
|
||||
/** 开启征求意见 */
|
||||
public static final String CAN_REJECT = "canReject";
|
||||
}
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
package com.jero.modules.activiti.process.esRevisionAdvice.controller;
|
||||
|
||||
import com.jero.common.api.vo.Result;
|
||||
import com.jero.common.aspect.annotation.AutoLog;
|
||||
import com.jero.common.aspect.annotation.Translation;
|
||||
import com.jero.modules.activiti.enums.ProcessTypeEnum;
|
||||
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
|
||||
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.vo.ProcessRevisionVO;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionService;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
|
||||
/**
|
||||
* @author: Mzaxd
|
||||
* @Date: 2023/10/18 10:44
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@Api(tags = "企标制修订征求意见流程")
|
||||
@RequestMapping("/process/es/revision")
|
||||
public class ESRevisionController {
|
||||
|
||||
@Resource
|
||||
private EsRevisionService revisionService;
|
||||
|
||||
@Resource
|
||||
private ActFlowCommonService actFlowCommonService;
|
||||
|
||||
/**
|
||||
* 企标制修订流程
|
||||
*
|
||||
* @param processInfoVO
|
||||
*/
|
||||
@AutoLog(value = "企标制修订流程-发起流程")
|
||||
@ApiOperation(value="企标制修订流程-发起流程", notes="企标制修订流程-发起流程")
|
||||
@PostMapping("/start")
|
||||
public Result<?> startProcess(@RequestBody ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
|
||||
revisionService.startProcess(processInfoVO);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "企标制修订流程-提交")
|
||||
@ApiOperation(value = "企标制修订流程-提交", notes = "企标制修订流程-提交")
|
||||
@PostMapping("/submit")
|
||||
public Result<T> submit(@RequestBody ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
|
||||
revisionService.submit(processInfoVO);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "整车企业标准报批流程-驳回")
|
||||
@ApiOperation(value = "整车企业标准报批流程-驳回", notes = "整车企业标准报批流程-驳回")
|
||||
@PostMapping("/reject")
|
||||
public Result<T> reject(@RequestBody ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
|
||||
revisionService.approveTask(processInfoVO, false);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存到待办
|
||||
* @param taskId
|
||||
*/
|
||||
@AutoLog(value = "企标制修订流程-办理")
|
||||
@ApiOperation(value="企标制修订流程-办理", notes="企标制修订流程-办理")
|
||||
@GetMapping("/handle/{taskId}")
|
||||
@Translation
|
||||
public Result<?> handle(@PathVariable("taskId") String taskId) {
|
||||
ProcessDraft draft = actFlowCommonService.getExistDraftByTaskId(taskId, ProcessTypeEnum.ES_REVISION_ADVICE);
|
||||
if (draft != null) {
|
||||
return Result.OK(draft);
|
||||
}
|
||||
return Result.OK(revisionService.getHandleData(taskId));
|
||||
}
|
||||
}
|
||||
+131
@@ -0,0 +1,131 @@
|
||||
package com.jero.modules.activiti.process.esRevisionAdvice.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.jero.common.aspect.annotation.Dict;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
*
|
||||
* @TableName process_es_revision_advice
|
||||
*/
|
||||
@TableName(value ="process_es_revision_advice")
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class EsRevisionAdvice implements Serializable {
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
@ApiModelProperty(value = "主键ID")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createBy;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新人
|
||||
*/
|
||||
@ApiModelProperty(value = "更新人")
|
||||
private String updateBy;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 所属部门
|
||||
*/
|
||||
@ApiModelProperty(value = "所属部门")
|
||||
private String orgCode;
|
||||
|
||||
/**
|
||||
* 流程实例Id
|
||||
*/
|
||||
@ApiModelProperty(value = "流程实例Id")
|
||||
private String processInstanceId;
|
||||
|
||||
/**
|
||||
* 条款号
|
||||
*/
|
||||
@ApiModelProperty(value = "条款号")
|
||||
private String termNum;
|
||||
|
||||
/**
|
||||
* 条款内容
|
||||
*/
|
||||
@ApiModelProperty(value = "条款内容")
|
||||
private String termContent;
|
||||
|
||||
/**
|
||||
* 修改意见内容(包括修改理由和依据)
|
||||
*/
|
||||
@ApiModelProperty(value = "修改意见内容(包括修改理由和依据)")
|
||||
private String editAdvice;
|
||||
|
||||
/**
|
||||
* 意见提出人
|
||||
*/
|
||||
@Dict(dictTable = "sys_user", dicText = "realname", dicCode = "id")
|
||||
@ApiModelProperty(value = "意见提出人")
|
||||
private String createUserId;
|
||||
|
||||
/**
|
||||
* 1采纳 2部分采纳 3不采纳
|
||||
*/
|
||||
@ApiModelProperty(value = "1采纳 2部分采纳 3不采纳")
|
||||
@Dict(dicCode = "consultation_opinion")
|
||||
private String handleAdvice;
|
||||
|
||||
/**
|
||||
* 理由
|
||||
*/
|
||||
@ApiModelProperty(value = "提出缘由")
|
||||
private String reason;
|
||||
|
||||
/**
|
||||
* 轮数
|
||||
*/
|
||||
@ApiModelProperty(value = "轮数")
|
||||
@Dict(dicCode = "batch_num")
|
||||
private Integer batchNum;
|
||||
|
||||
/**
|
||||
* 修改意见
|
||||
*/
|
||||
@ApiModelProperty(value = "修改意见")
|
||||
private String description;
|
||||
|
||||
/**
|
||||
* 标准Id
|
||||
*/
|
||||
@ApiModelProperty(value = "标准Id")
|
||||
private String standardId;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package com.jero.modules.activiti.process.esRevisionAdvice.entity;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @author: Mzaxd
|
||||
* @Date: 2024/1/28 17:36
|
||||
*/
|
||||
@Getter
|
||||
public enum HandleAdviceEnum {
|
||||
|
||||
/**
|
||||
* 1:采纳
|
||||
*/
|
||||
AGREE("同意", "1"),
|
||||
|
||||
/**
|
||||
* 2:部分采纳
|
||||
*/
|
||||
PART_DISAGREE("部分采纳", "2"),
|
||||
|
||||
/**
|
||||
* 3:不采纳
|
||||
*/
|
||||
DISAGREE("不采纳", "3"),
|
||||
;
|
||||
|
||||
private final String name;
|
||||
|
||||
private final String value;
|
||||
|
||||
|
||||
HandleAdviceEnum(String name, String value) {
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
}
|
||||
+127
@@ -0,0 +1,127 @@
|
||||
package com.jero.modules.activiti.process.esRevisionAdvice.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
*
|
||||
* @TableName process_es_revision
|
||||
*/
|
||||
@TableName(value ="process_es_revision")
|
||||
@Data
|
||||
public class ProcessEsRevision implements Serializable {
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
@ApiModelProperty(value = "主键ID")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createBy;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新人
|
||||
*/
|
||||
@ApiModelProperty(value = "更新人")
|
||||
private String updateBy;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 所属部门
|
||||
*/
|
||||
@ApiModelProperty(value = "所属部门")
|
||||
private String orgCode;
|
||||
|
||||
/**
|
||||
* 0表示未删除,1表示删除
|
||||
*/
|
||||
@ApiModelProperty(value = "0表示未删除,1表示删除")
|
||||
private Integer delFlag;
|
||||
|
||||
/**
|
||||
* 企标计划Id
|
||||
*/
|
||||
@ApiModelProperty(value = "企标计划Id")
|
||||
private String espId;
|
||||
|
||||
/**
|
||||
* 流程实例Id
|
||||
*/
|
||||
@ApiModelProperty(value = "流程实例Id")
|
||||
private String processInstanceId;
|
||||
|
||||
/**
|
||||
* 是否开启征求意见 0不征求 1征求
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
@ApiModelProperty(value = "是否开启征求意见 0不征求 1征求")
|
||||
private String adviceFlag;
|
||||
|
||||
/**
|
||||
* 征求意见截止日期
|
||||
*/
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
@ApiModelProperty(value = "征求意见截止日期")
|
||||
private Date adviceDeadline;
|
||||
|
||||
/**
|
||||
* 在线编辑文件id
|
||||
*/
|
||||
@ApiModelProperty(value = "在线编辑文件id")
|
||||
private String onEditFile;
|
||||
|
||||
/**
|
||||
* 业务json数据
|
||||
*/
|
||||
@ApiModelProperty(value = "业务JSON数据")
|
||||
private String businessJson;
|
||||
|
||||
/**
|
||||
* 主起草人
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
@ApiModelProperty(value = "主起草人")
|
||||
private String mainDraftUser;
|
||||
|
||||
/**
|
||||
* 法规工程师
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
@ApiModelProperty(value = "法规工程师")
|
||||
private String standardEngineer;
|
||||
|
||||
/**
|
||||
* 设计工程师
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
@ApiModelProperty(value = "设计工程师")
|
||||
private String adviceUsers;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
package com.jero.modules.activiti.process.esRevisionAdvice.entity.vo;
|
||||
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class ProcessRevisionVO {
|
||||
|
||||
ProcessEsRevision processInfo;
|
||||
|
||||
List<EsRevisionAdvice> adviceList;
|
||||
|
||||
boolean canReject;
|
||||
}
|
||||
+114
@@ -0,0 +1,114 @@
|
||||
package com.jero.modules.activiti.process.esRevisionAdvice.job;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.jero.modules.activiti.entity.ProcessAll;
|
||||
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
|
||||
import com.jero.modules.activiti.enums.FinishFlagEnum;
|
||||
import com.jero.modules.activiti.enums.ProcessStatusEnum;
|
||||
import com.jero.modules.activiti.enums.ProcessTypeEnum;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.vo.ProcessRevisionVO;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionService;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
import com.jero.modules.activiti.service.ProcessAllService;
|
||||
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.activiti.engine.TaskService;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.quartz.Job;
|
||||
import org.quartz.JobExecutionContext;
|
||||
import org.quartz.JobExecutionException;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author: Mzaxd
|
||||
* @Date: 2023/12/28 18:40
|
||||
*/
|
||||
@Slf4j
|
||||
public class AdviceDeadlineJob implements Job {
|
||||
|
||||
@Resource
|
||||
private EsRevisionService revisionService;
|
||||
|
||||
@Resource
|
||||
private ProcessApprovalRecordService approvalRecordService;
|
||||
|
||||
@Resource
|
||||
private ProcessAllService processAllService;
|
||||
|
||||
@Resource
|
||||
private TaskService taskService;
|
||||
|
||||
@Override
|
||||
public void execute(JobExecutionContext context) throws JobExecutionException {
|
||||
log.info("开始执行征求意见截止日期每日定时任务");
|
||||
// 获取所有正在进行中的企标制修订流程
|
||||
List<ProcessAll> processAlls = processAllService.list(new LambdaQueryWrapper<ProcessAll>()
|
||||
.eq(ProcessAll::getPrcType, ProcessTypeEnum.ES_REVISION_ADVICE.getValue())
|
||||
.eq(ProcessAll::getPrcStatus, ProcessStatusEnum.INCOMPLETE.getValue()));
|
||||
if (processAlls.isEmpty()) {
|
||||
log.info("没有进行中的企标制修订流程");
|
||||
return;
|
||||
}
|
||||
List<String> processInstanceIds = processAlls.stream().map(ProcessAll::getProcessInstanceId).collect(Collectors.toList());
|
||||
LambdaQueryWrapper<ProcessEsRevision> revisionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
revisionLambdaQueryWrapper.in(ProcessEsRevision::getProcessInstanceId, processInstanceIds);
|
||||
revisionLambdaQueryWrapper.isNotNull(ProcessEsRevision::getAdviceDeadline);
|
||||
List<ProcessEsRevision> revisionList = revisionService.list(revisionLambdaQueryWrapper);
|
||||
if (revisionList.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
Map<String, ProcessEsRevision> revisionMap = revisionList.stream()
|
||||
.collect(Collectors.toMap(ProcessEsRevision::getProcessInstanceId, revision -> revision));
|
||||
// 找到所有征求意见的未完成的待办
|
||||
LambdaQueryWrapper<ProcessApprovalRecord> arWrapper = new LambdaQueryWrapper<>();
|
||||
arWrapper.eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue());
|
||||
arWrapper.in(ProcessApprovalRecord::getProcessInstanceId, revisionMap.keySet());
|
||||
arWrapper.eq(ProcessApprovalRecord::getTaskName, "征求意见对象填写意见");
|
||||
arWrapper.isNotNull(ProcessApprovalRecord::getTaskId);
|
||||
List<ProcessApprovalRecord> arList = approvalRecordService.list(arWrapper);
|
||||
Map<String, List<ProcessApprovalRecord>> arMap = arList.stream()
|
||||
.collect(Collectors.groupingBy(ProcessApprovalRecord::getProcessInstanceId));
|
||||
Date curDate = new Date();
|
||||
for (Map.Entry<String, List<ProcessApprovalRecord>> map : arMap.entrySet()) {
|
||||
String processInstanceId = map.getKey();
|
||||
ProcessEsRevision revision = revisionMap.get(processInstanceId);
|
||||
List<ProcessApprovalRecord> recordList = map.getValue();
|
||||
// 判断是否到期
|
||||
Date adviceDeadline = getDeadlineDate(revision.getAdviceDeadline());
|
||||
if (curDate.after(adviceDeadline)) {
|
||||
// 如果到期则批量完成
|
||||
for (ProcessApprovalRecord record : recordList) {
|
||||
ProcessInfoVO<ProcessRevisionVO> handleData = revisionService.getHandleData(record.getTaskId());
|
||||
// 如果当前日期大于该条数据的截止日期 则自动完成任务
|
||||
revisionService.submit(handleData);
|
||||
}
|
||||
}
|
||||
}
|
||||
log.info("征求意见截止日期每日定时任务执行结束");
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static Date getDeadlineDate(Date deadline) {
|
||||
// 设置deadline为今天的最后一秒
|
||||
// 创建一个 Calendar 对象
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
// 获取当前日期和时间
|
||||
calendar.setTime(deadline);
|
||||
// 设置时间部分为当天的最后一秒
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
||||
calendar.set(Calendar.MINUTE, 59);
|
||||
calendar.set(Calendar.SECOND, 59);
|
||||
calendar.set(Calendar.MILLISECOND, 999);
|
||||
|
||||
// 将修改后的日期和时间设置回原始的 Date 对象
|
||||
deadline = calendar.getTime();
|
||||
return deadline;
|
||||
}
|
||||
}
|
||||
+245
@@ -0,0 +1,245 @@
|
||||
package com.jero.modules.activiti.process.esRevisionAdvice.listener;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||
import com.jero.common.util.CommonUtils;
|
||||
import com.jero.modules.activiti.process.common.enums.StandardStateEnum;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionAdviceService;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionService;
|
||||
import com.jero.modules.laws.common.constant.FieldCommon;
|
||||
import com.jero.modules.laws.common.service.ILawsCommonService;
|
||||
import com.jero.modules.oss.entity.OSSFile;
|
||||
import com.jero.modules.oss.service.IOSSFileService;
|
||||
import com.jero.modules.tag.enums.TableNameEnum;
|
||||
import com.jero.modules.util.SysOnlyOfficePdfUtil;
|
||||
import lombok.SneakyThrows;
|
||||
import org.activiti.engine.delegate.DelegateExecution;
|
||||
import org.activiti.engine.delegate.ExecutionListener;
|
||||
import org.apache.poi.xwpf.usermodel.*;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.mock.web.MockMultipartFile;
|
||||
import org.springframework.mock.web.MockMultipartHttpServletRequest;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
/**
|
||||
* @author: Mzaxd
|
||||
* @Date: 2023/12/19 11:59
|
||||
*/
|
||||
@Component
|
||||
public class ProcessESRevisionEndListener implements ExecutionListener {
|
||||
|
||||
@Resource
|
||||
private EsRevisionService esRevisionService;
|
||||
|
||||
@Resource
|
||||
private EsRevisionAdviceService esAdviceService;
|
||||
|
||||
@Resource
|
||||
private ILawsCommonService lawsCommonService;
|
||||
|
||||
@Resource
|
||||
private IOSSFileService ossFileService;
|
||||
|
||||
@Resource
|
||||
private EsRevisionAdviceService revisionAdviceService;
|
||||
|
||||
@Resource
|
||||
private SysOnlyOfficePdfUtil sysOnlyOfficePdfUtil;
|
||||
|
||||
@Value(value = "${jero.uploadType}")
|
||||
private String uploadType;
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public void notify(DelegateExecution delegateExecution) {
|
||||
// 获取流程实例Id
|
||||
String processInstanceId = delegateExecution.getProcessInstanceId();
|
||||
// 根据流程Id获取业务数据
|
||||
LambdaQueryWrapper<ProcessEsRevision> revisionWrapper = new LambdaQueryWrapper<>();
|
||||
revisionWrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId);
|
||||
// 获取企标相关数据
|
||||
ProcessEsRevision data = esRevisionService.getOne(revisionWrapper);
|
||||
// 将数据转换为Map
|
||||
Map<String, Object> variables = transMap(data);
|
||||
Date adviceDeadline = data.getAdviceDeadline();
|
||||
if (adviceDeadline != null) {
|
||||
// 制作征求意见稿
|
||||
String draftFileId = this.makeDraftFile(data);
|
||||
variables.put(FieldCommon.FILE_DRAFT_FOR_COMMENT, draftFileId);
|
||||
}
|
||||
// 发布企标
|
||||
String esId = lawsCommonService.commonAdd(variables);
|
||||
// 所有意见设置标准Id
|
||||
LambdaQueryWrapper<EsRevisionAdvice> adviceWrapper = new LambdaQueryWrapper<>();
|
||||
adviceWrapper.eq(EsRevisionAdvice::getProcessInstanceId, processInstanceId);
|
||||
List<EsRevisionAdvice> list = esAdviceService.list(adviceWrapper);
|
||||
if (!list.isEmpty()) {
|
||||
list.forEach(item -> item.setStandardId(esId));
|
||||
esAdviceService.updateBatchById(list);
|
||||
}
|
||||
}
|
||||
|
||||
private Map<String, Object> transMap(ProcessEsRevision data) {
|
||||
Map<String, Object> variables = JSON.parseObject(data.getBusinessJson(), Map.class);
|
||||
variables.put(FieldCommon.MODULE, TableNameEnum.ENTERPRISE_STANDARDS.getValue());
|
||||
// 标准状态
|
||||
variables.put(FieldCommon.STANDARD_STATE, StandardStateEnum.SEEK_FOR_OPINIONS.getStateValue());
|
||||
String standardId = IdWorker.getIdStr();
|
||||
variables.put(FieldCommon.ID, standardId);
|
||||
String onEditFile = data.getOnEditFile();
|
||||
// 发布稿
|
||||
List<OSSFile> ossFileList = sysOnlyOfficePdfUtil.docFileTransferPdf(onEditFile);
|
||||
if (ossFileList != null && !ossFileList.isEmpty()) {
|
||||
variables.put(FieldCommon.FILE_PUBLISH_OF_ORIGINAL, onEditFile + "," + ossFileList.get(0).getId());
|
||||
} else {
|
||||
variables.put(FieldCommon.FILE_PUBLISH_OF_ORIGINAL, onEditFile);
|
||||
}
|
||||
return variables;
|
||||
}
|
||||
|
||||
private String makeDraftFile(ProcessEsRevision data) throws Exception {
|
||||
Map<String, Object> variables = JSON.parseObject(data.getBusinessJson(), Map.class);
|
||||
String standardNo = (String) variables.get(FieldCommon.STANDARD_NUMBER);
|
||||
String standardName = (String) variables.get(FieldCommon.STANDARD_NAME);
|
||||
ClassPathResource resource = new ClassPathResource("wordTemplate/征求意见反馈单.docx");
|
||||
// 使用ClassPathResource来读取模板文件
|
||||
try (InputStream fis = resource.getInputStream()) {
|
||||
XWPFDocument document = new XWPFDocument(fis);
|
||||
|
||||
// Iterate through paragraphs to find "标准名称:"
|
||||
for (XWPFParagraph paragraph : document.getParagraphs()) {
|
||||
for (XWPFRun run : paragraph.getRuns()) {
|
||||
String text = run.getText(0);
|
||||
if (text != null && text.contains("标准名称:")) {
|
||||
// Append the new text right after "标准名称:"
|
||||
text = text + standardName;
|
||||
run.setText(text, 0); // Update the text in the current run
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取并修改文档中的表格
|
||||
List<XWPFTable> tables = document.getTables();
|
||||
if (!tables.isEmpty()) {
|
||||
XWPFTable firstTable = tables.get(0);
|
||||
setFirstTableContents(firstTable, data);
|
||||
}
|
||||
|
||||
// 创建临时文件
|
||||
String fileName = standardNo + "征求意见回函意见表";
|
||||
fileName = fileName.replaceAll("/", "");
|
||||
File tempFile = Files.createTempFile(fileName, ".docx").toFile();
|
||||
|
||||
// 将更改写入临时文件
|
||||
try (FileOutputStream fos = new FileOutputStream(tempFile)) {
|
||||
document.write(fos);
|
||||
}
|
||||
|
||||
// 将文件作为MultipartFile封装
|
||||
MultipartFile multipartFile = new MockMultipartFile(
|
||||
"file", // 表单字段名称
|
||||
tempFile.getName(), // 文件名
|
||||
"application/vnd.openxmlformats-officedocument.wordprocessingml.document", // 内容类型
|
||||
Files.newInputStream(tempFile.toPath()) // 文件内容
|
||||
);
|
||||
|
||||
// 创建模拟的MultipartHttpServletRequest
|
||||
MockMultipartHttpServletRequest mockRequest = new MockMultipartHttpServletRequest();
|
||||
mockRequest.addFile(multipartFile); // 添加文件
|
||||
mockRequest.addParameter("biz", "temp"); // 添加其他表单字段
|
||||
|
||||
// 调用上传接口
|
||||
String bizPath = "esDraft";
|
||||
CommonUtils.upload(multipartFile, bizPath, uploadType);
|
||||
String savePath = CommonUtils.upload(multipartFile, bizPath, uploadType);
|
||||
|
||||
//上传成功 进行数据库存储
|
||||
OSSFile ossFile = new OSSFile();
|
||||
// 文件名
|
||||
ossFile.setStandardFileType(FieldCommon.FILE_DRAFT_FOR_COMMENT);
|
||||
ossFile.setStandardNumber(standardNo);
|
||||
ossFile.setFileName(fileName.substring(0, fileName.lastIndexOf("征求意见反馈单") + 7) + ".docx");
|
||||
ossFile.setUrl(savePath);
|
||||
ossFileService.save(ossFile);
|
||||
// 删除临时文件
|
||||
boolean delete = tempFile.delete();
|
||||
return ossFile.getId();
|
||||
}
|
||||
}
|
||||
|
||||
private void setFirstTableContents(XWPFTable table, ProcessEsRevision data) {
|
||||
List<EsRevisionAdvice> opinions = revisionAdviceService.list(new LambdaQueryWrapper<EsRevisionAdvice>()
|
||||
.eq(EsRevisionAdvice::getProcessInstanceId, data.getProcessInstanceId()));
|
||||
|
||||
List<String> termNo = opinions.stream().map(EsRevisionAdvice::getTermNum).collect(Collectors.toList());
|
||||
List<String> adviceList = opinions.stream().map(EsRevisionAdvice::getEditAdvice).collect(Collectors.toList());
|
||||
// 获取一个1-5的List
|
||||
List<String> noList = IntStream.rangeClosed(1, termNo.size()).mapToObj(String::valueOf).collect(Collectors.toList());
|
||||
// 获取表格的行列表
|
||||
List<XWPFTableRow> rows = table.getRows();
|
||||
if (!rows.isEmpty()) {
|
||||
// 序号
|
||||
setContentList(rows, 1, 0, noList);
|
||||
// 章节编号
|
||||
setContentList(rows, 1, 1, termNo);
|
||||
// 修改意见内容
|
||||
setContentList(rows, 1, 2, adviceList);
|
||||
}
|
||||
}
|
||||
|
||||
private void setContentList(List<XWPFTableRow> rows, int rowNum, int cellNum, List<String> contentList) {
|
||||
for (String content : contentList) {
|
||||
if (StrUtil.isBlank(content)) {
|
||||
continue;
|
||||
}
|
||||
setContent(rows, rowNum, cellNum, content, true, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
private void setContent(List<XWPFTableRow> rows, int rowNum, int cellNum, String content,
|
||||
boolean newLine, boolean alignCenter, boolean verCenter) {
|
||||
if (StrUtil.isBlank(content)) {
|
||||
return;
|
||||
}
|
||||
XWPFTableRow row = rows.get(rowNum);
|
||||
List<XWPFTableCell> cells = row.getTableCells();
|
||||
if (!cells.isEmpty()) {
|
||||
XWPFTableCell cell = cells.get(cellNum);
|
||||
XWPFParagraph paragraph;
|
||||
if (newLine) {
|
||||
paragraph = cell.addParagraph();
|
||||
} else {
|
||||
paragraph = cell.getParagraphs().get(0);
|
||||
}
|
||||
XWPFRun run = paragraph.createRun();
|
||||
// 设置段落居中(水平)
|
||||
if (alignCenter) {
|
||||
paragraph.setAlignment(ParagraphAlignment.CENTER);
|
||||
}
|
||||
run.setText(content);
|
||||
run.setFontSize(12);
|
||||
run.setFontFamily("新宋体");
|
||||
// 设置单元格垂直居中
|
||||
if (verCenter) {
|
||||
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.jero.modules.activiti.process.esRevisionAdvice.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice;
|
||||
|
||||
/**
|
||||
* @author ThinkBook
|
||||
* @description 针对表【process_es_revision_advice】的数据库操作Mapper
|
||||
* @createDate 2023-12-20 17:17:56
|
||||
* @Entity com.jero.modules.activiti.process.esRevision.entity.EsRevisionAdvice
|
||||
*/
|
||||
public interface EsRevisionAdviceMapper extends BaseMapper<EsRevisionAdvice> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.jero.modules.activiti.process.esRevisionAdvice.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision;
|
||||
|
||||
/**
|
||||
* @author ThinkBook
|
||||
* @description 针对表【process_es_revision】的数据库操作Mapper
|
||||
* @createDate 2023-12-19 11:58:59
|
||||
* @Entity com.jero.modules.activiti.process.esRevision.entity.EsRevision
|
||||
*/
|
||||
public interface EsRevisionMapper extends BaseMapper<ProcessEsRevision> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package com.jero.modules.activiti.process.esRevisionAdvice.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice;
|
||||
|
||||
/**
|
||||
* @author ThinkBook
|
||||
* @description 针对表【process_es_revision_advice】的数据库操作Service
|
||||
* @createDate 2023-12-20 17:17:56
|
||||
*/
|
||||
public interface EsRevisionAdviceService extends IService<EsRevisionAdvice> {
|
||||
|
||||
IPage<EsRevisionAdvice> adviceList(EsRevisionAdvice advice, Integer pageNo, Integer pageSize);
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package com.jero.modules.activiti.process.esRevisionAdvice.service;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.vo.ProcessRevisionVO;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
|
||||
/**
|
||||
* @author ThinkBook
|
||||
* @description 针对表【process_es_revision】的数据库操作Service
|
||||
* @createDate 2023-12-19 11:58:59
|
||||
*/
|
||||
public interface EsRevisionService extends IService<ProcessEsRevision> {
|
||||
|
||||
|
||||
ProcessInfoVO<ProcessRevisionVO> getHandleData(String taskId);
|
||||
|
||||
void startProcess(ProcessInfoVO<ProcessRevisionVO> processInfoVO);
|
||||
|
||||
void submit(ProcessInfoVO<ProcessRevisionVO> processInfoVO);
|
||||
|
||||
void approveTask(ProcessInfoVO<ProcessRevisionVO> processInfoVO, boolean pass);
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
package com.jero.modules.activiti.process.esRevisionAdvice.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.jero.common.exception.JeroBootException;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.mapper.EsRevisionAdviceMapper;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionAdviceService;
|
||||
import com.jero.modules.system.entity.SysUser;
|
||||
import com.jero.modules.system.service.ISysUserService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author ThinkBook
|
||||
* @description 针对表【process_es_revision_advice】的数据库操作Service实现
|
||||
* @createDate 2023-12-20 17:17:56
|
||||
*/
|
||||
@Service
|
||||
public class EsRevisionAdviceServiceImpl extends ServiceImpl<EsRevisionAdviceMapper, EsRevisionAdvice>
|
||||
implements EsRevisionAdviceService{
|
||||
|
||||
@Resource
|
||||
private ISysUserService userService;
|
||||
|
||||
|
||||
@Override
|
||||
public IPage<EsRevisionAdvice> adviceList(EsRevisionAdvice advice, Integer pageNo, Integer pageSize) {
|
||||
boolean userQuery = StrUtil.isNotBlank(advice.getCreateUserId());
|
||||
|
||||
LambdaQueryWrapper<EsRevisionAdvice> queryWrapper = new LambdaQueryWrapper<>();
|
||||
String standardId = advice.getStandardId();
|
||||
if (StrUtil.isBlank(standardId)) {
|
||||
log.error("standardId为空");
|
||||
throw new JeroBootException("standardId为空");
|
||||
}
|
||||
Page<EsRevisionAdvice> page = new Page<>(pageNo, pageSize);
|
||||
queryWrapper.eq(EsRevisionAdvice::getStandardId, advice.getStandardId());
|
||||
queryWrapper.eq(null != advice.getBatchNum() , EsRevisionAdvice::getBatchNum, advice.getBatchNum());
|
||||
if (userQuery) {
|
||||
QueryWrapper<SysUser> userQueryWrapper = new QueryWrapper<>();
|
||||
userQueryWrapper.like("CONCAT(realname, '(', username, ')')", advice.getCreateUserId());
|
||||
List<SysUser> list = userService.list(userQueryWrapper);
|
||||
if (!list.isEmpty()) {
|
||||
queryWrapper.in(EsRevisionAdvice::getCreateUserId, list.stream().map(SysUser::getId).collect(Collectors.toList()));
|
||||
}
|
||||
}
|
||||
queryWrapper.eq(StrUtil.isNotBlank(advice.getHandleAdvice()), EsRevisionAdvice::getHandleAdvice, advice.getHandleAdvice());
|
||||
queryWrapper.like(StrUtil.isNotBlank(advice.getTermNum()), EsRevisionAdvice::getTermNum, advice.getTermNum());
|
||||
queryWrapper.orderByAsc(EsRevisionAdvice::getBatchNum);
|
||||
return page(page, queryWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
+392
@@ -0,0 +1,392 @@
|
||||
package com.jero.modules.activiti.process.esRevisionAdvice.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.jero.common.api.SendMessageAPI;
|
||||
import com.jero.common.api.dto.message.SendMessageDTO;
|
||||
import com.jero.common.api.vo.ResultCommon;
|
||||
import com.jero.common.constant.enums.YesOrNoEnum;
|
||||
import com.jero.common.exception.JeroBootException;
|
||||
import com.jero.modules.activiti.entity.ProcessAll;
|
||||
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
|
||||
import com.jero.modules.activiti.enums.CommitFlagEnum;
|
||||
import com.jero.modules.activiti.enums.ProcessTypeEnum;
|
||||
import com.jero.modules.activiti.process.common.enums.ProcessType;
|
||||
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.entity.vo.ProcessRevisionVO;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.mapper.EsRevisionMapper;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionAdviceService;
|
||||
import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionService;
|
||||
import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
|
||||
import com.jero.modules.activiti.process.fb.dto.BasicTaskInfoDTO;
|
||||
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
import com.jero.modules.activiti.service.ProcessAllService;
|
||||
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
|
||||
import com.jero.modules.activiti.service.ProcessNodeLinkService;
|
||||
import com.jero.modules.laws.common.constant.FieldCommon;
|
||||
import com.jero.modules.laws.common.constant.MessageTemplateCodeCommon;
|
||||
import com.jero.modules.laws.enterprise.entity.ESPProjectStatus;
|
||||
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan;
|
||||
import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService;
|
||||
import com.jero.modules.laws.enterprise.util.EnterpriseStandardUtil;
|
||||
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
|
||||
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
|
||||
import com.jero.modules.sys.utils.UserUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.activiti.engine.RuntimeService;
|
||||
import org.activiti.engine.TaskService;
|
||||
import org.activiti.engine.runtime.ProcessInstance;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
|
||||
import static com.jero.modules.activiti.common.ActivitiCommon.PASS;
|
||||
import static com.jero.modules.activiti.process.esRevisionAdvice.common.RevisionTaskNodeIdConstant.*;
|
||||
|
||||
/**
|
||||
* @author ThinkBook
|
||||
* @description 针对表【process_es_revision】的数据库操作Service实现
|
||||
* @createDate 2023-12-19 11:58:59
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
@Transactional(rollbackFor = JeroBootException.class)
|
||||
public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, ProcessEsRevision>
|
||||
implements EsRevisionService {
|
||||
|
||||
@Resource
|
||||
private ActFlowCommonService actFlowCommonService;
|
||||
|
||||
@Resource
|
||||
private ProcessNodeLinkService processNodeLinkService;
|
||||
|
||||
@Resource
|
||||
private RuntimeService runtimeService;
|
||||
|
||||
@Resource
|
||||
private IProcessHandleService processHandleService;
|
||||
|
||||
@Resource
|
||||
private ProcessAllService processAllService;
|
||||
|
||||
@Resource
|
||||
private TaskService taskService;
|
||||
|
||||
@Resource
|
||||
private EnterpriseStandardPlanService espService;
|
||||
|
||||
@Resource
|
||||
private EsRevisionAdviceService adviceService;
|
||||
|
||||
@Resource
|
||||
private SendMessageAPI sendMessageAPI;
|
||||
|
||||
@Resource
|
||||
private ILawsEnterpriseStandardService esService;
|
||||
|
||||
@Resource
|
||||
private EnterpriseStandardPlanService planService;
|
||||
|
||||
@Resource
|
||||
private EnterpriseStandardUtil esUtil;
|
||||
|
||||
@Resource
|
||||
private ProcessApprovalRecordService approvalRecordService;
|
||||
|
||||
@Override
|
||||
public void startProcess(ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
|
||||
// 流程Key
|
||||
String processDefinitionKey = ProcessType.ES_REVISION_ADVICE.getProcessKey();
|
||||
// 流程信息
|
||||
BasicProcessInfoDTO processInfo = processInfoVO.getBasicProcessInfoDTO();
|
||||
// 任务信息
|
||||
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
|
||||
// 人员信息
|
||||
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
|
||||
// 当前用户Id
|
||||
String userId = UserUtils.getUserId();
|
||||
// 设置流程变量
|
||||
Map<String, Object> actVariables = this.setVariables(processInfoVO);
|
||||
// 删除草稿
|
||||
actFlowCommonService.getExistDraftAndRemove(processInfoVO.getDraftId());
|
||||
// 启动流程
|
||||
ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, actVariables);
|
||||
// 获取流程实例ID
|
||||
String processDefinitionId = processInstance.getProcessDefinitionId();
|
||||
String processInstanceId = processInstance.getId();
|
||||
processInfo.setProcessInstanceId(processInstanceId);
|
||||
processInfo.setProcessDefinitionId(processDefinitionId);
|
||||
processInfo.setProcessType(ProcessTypeEnum.ES_REVISION_ADVICE.getValue());
|
||||
// 第一个节点业务数据处理
|
||||
this.startNodeBusProcess(processInfoVO);
|
||||
// 保存选人信息
|
||||
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userInfoMap);
|
||||
// 获取第一个任务的taskId
|
||||
String taskId = actFlowCommonService.getFirstTaskId(processInstanceId, userId, processDefinitionId);
|
||||
processTask.setTaskId(taskId);
|
||||
// 保存第一个节点的草稿
|
||||
processHandleService.saveToDraft(processInfoVO, userId);
|
||||
// 保存第一个节点的快照
|
||||
processHandleService.saveToSnapshot(processInfoVO, userId);
|
||||
// 更新审批表为完成,填充数据
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
// 根据流程实例id更新流程总表
|
||||
actFlowCommonService.updateProcessAll(processInfo);
|
||||
// 自动完成第一个任务
|
||||
actFlowCommonService.completeTask(taskId, userId);
|
||||
}
|
||||
|
||||
private void startNodeBusProcess(ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
|
||||
String processInstanceId = processInfoVO.getBasicProcessInfoDTO().getProcessInstanceId();
|
||||
ProcessRevisionVO businessInfoDTO = processInfoVO.getBusinessInfoDTO();
|
||||
ProcessEsRevision processInfo = businessInfoDTO.getProcessInfo();
|
||||
// 修改企标计划状态
|
||||
// 检查企标计划是否已被删除
|
||||
String espId = processInfo.getEspId();
|
||||
EnterpriseStandardPlan esp = espService.getById(espId);
|
||||
if (esp == null) {
|
||||
throw new JeroBootException(ResultCommon.INVALID_ESP);
|
||||
}
|
||||
// 设置状态为运行中
|
||||
espService.updateProjectStatus(espId, ESPProjectStatus.IN_PROGRESS.getValue());
|
||||
// 保存数据
|
||||
processInfo.setProcessInstanceId(processInstanceId);
|
||||
save(processInfo);
|
||||
}
|
||||
|
||||
private Map<String, Object> setVariables(ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
|
||||
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
|
||||
HashMap<String, Object> result = new HashMap<>(userInfoMap);
|
||||
result.put(CAN_REJECT, true);
|
||||
// 获取分发人
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProcessInfoVO<ProcessRevisionVO> getHandleData(String taskId) {
|
||||
if (!actFlowCommonService.taskExists(taskId)) {
|
||||
throw new JeroBootException(ResultCommon.TASK_NOT_EXISTS);
|
||||
}
|
||||
ProcessInfoVO<ProcessRevisionVO> result = new ProcessInfoVO<>();
|
||||
ProcessRevisionVO processVo = new ProcessRevisionVO();
|
||||
// 使用流程引擎根据taskId找到流程实例Id
|
||||
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
|
||||
result.setBasicProcessInfoDTO(actFlowCommonService.getProcessInfo(processInstanceId));
|
||||
// 获取流程通用数据
|
||||
ProcessApprovalRecord record = actFlowCommonService.getNodeIdByTaskId(taskId);
|
||||
// 获取当前流程数据
|
||||
LambdaQueryWrapper<ProcessEsRevision> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId);
|
||||
ProcessEsRevision data = getOne(queryWrapper);
|
||||
LambdaQueryWrapper<EsRevisionAdvice> detailQueryWrapper = new LambdaQueryWrapper<>();
|
||||
List<EsRevisionAdvice> adviceList = null;
|
||||
if (Objects.nonNull(data)) {
|
||||
detailQueryWrapper.eq(EsRevisionAdvice::getProcessInstanceId, processInstanceId);
|
||||
adviceList = adviceService.list(detailQueryWrapper);
|
||||
}
|
||||
// 获取当前流程
|
||||
String xmlNodeId = record.getNodeId();
|
||||
// 设置流程信息
|
||||
switch (xmlNodeId) {
|
||||
case START:
|
||||
case CONFIRM_ADVISE:
|
||||
case ADVICE:
|
||||
case SET_STANDARD_NUMBER:
|
||||
break;
|
||||
case ADVICE_COLLECT:
|
||||
processVo.setAdviceList(adviceList);
|
||||
}
|
||||
// 设置流程变量等相关信息
|
||||
processVo.setProcessInfo(data);
|
||||
boolean canReject = (boolean) taskService.getVariable(taskId, CAN_REJECT);
|
||||
processVo.setCanReject(canReject);
|
||||
result.setBusinessInfoDTO(processVo);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void submit(ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
|
||||
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
|
||||
String taskId = processTask.getTaskId();
|
||||
// 校验是否有权限操作此待办
|
||||
processHandleService.validTask(taskId);
|
||||
// 获取当前节点的id
|
||||
ProcessApprovalRecord record = actFlowCommonService.getNodeIdByTaskId(taskId);
|
||||
String xmlNodeId = record.getNodeId();
|
||||
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
|
||||
BasicProcessInfoDTO processInfo = new BasicProcessInfoDTO();
|
||||
// 使用流程引擎根据taskId找到流程实例Id
|
||||
processInfo.setProcessInstanceId(processInstanceId);
|
||||
processInfoVO.setBasicProcessInfoDTO(processInfo);
|
||||
// 更新审批表为完成,填充数据
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
String curUserId = UserUtils.getUserId();
|
||||
ProcessRevisionVO businessInfoDTO = processInfoVO.getBusinessInfoDTO();
|
||||
ProcessEsRevision data = businessInfoDTO.getProcessInfo();
|
||||
List<EsRevisionAdvice> adviceList = businessInfoDTO.getAdviceList();
|
||||
// 根据流程实例Id获取流程定义ID
|
||||
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
|
||||
// 获取数据库中的流程信息
|
||||
LambdaQueryWrapper<ProcessEsRevision> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId);
|
||||
ProcessEsRevision dataFromDb = getOne(queryWrapper);
|
||||
if (dataFromDb != null) {
|
||||
data.setId(dataFromDb.getId());
|
||||
}
|
||||
// 获取流程实例ID
|
||||
String processDefinitionId = processInstance.getProcessDefinitionId();
|
||||
Map<String, Object> userMap = new HashMap<>();
|
||||
LambdaQueryWrapper<EsRevisionAdvice> detailQueryWrapper = new LambdaQueryWrapper<>();
|
||||
detailQueryWrapper.eq(EsRevisionAdvice::getProcessInstanceId, processInstanceId);
|
||||
List<EsRevisionAdvice> dbAdviceList = adviceService.list(detailQueryWrapper);
|
||||
// 筛选出最新一轮
|
||||
Integer maxBatchNum = this.calculateAdviceBatchNum(dbAdviceList);
|
||||
switch (xmlNodeId) {
|
||||
case START:
|
||||
saveOrUpdate(data);
|
||||
break;
|
||||
case CONFIRM_ADVISE:
|
||||
// 判断是否开启征求意见子流程 设置流程变量
|
||||
boolean adviceFlag = !data.getAdviceFlag().equals(YesOrNoEnum.NO.getValue());
|
||||
if (adviceFlag) {
|
||||
List<String> adviceUserList = Arrays.asList(data.getAdviceUsers().split(","));
|
||||
taskService.setVariable(taskId, ADVICE_USER_LIST, adviceUserList);
|
||||
taskService.setVariable(taskId, STANDARD_ENGINEER, curUserId);
|
||||
taskService.setVariable(taskId, OPEN, true);
|
||||
taskService.setVariable(taskId, CAN_REJECT, false);
|
||||
// 保存流程数据
|
||||
saveOrUpdate(data);
|
||||
userMap.put(STANDARD_ENGINEER, curUserId);
|
||||
userMap.put(ADVICE_USER_LIST, data.getAdviceUsers());
|
||||
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap);
|
||||
} else {
|
||||
taskService.setVariable(taskId, OPEN, false);
|
||||
}
|
||||
taskService.setVariable(taskId, PASS, true);
|
||||
break;
|
||||
case ADVICE:
|
||||
// 保存意见数据
|
||||
if (!adviceList.isEmpty()) {
|
||||
adviceList.forEach(advice -> {
|
||||
advice.setProcessInstanceId(processInstanceId);
|
||||
advice.setBatchNum(maxBatchNum + 1);
|
||||
advice.setCreateUserId(curUserId);
|
||||
});
|
||||
adviceService.saveBatch(adviceList);
|
||||
}
|
||||
break;
|
||||
case ADVICE_COLLECT:
|
||||
// 保存数据
|
||||
adviceService.updateBatchById(adviceList);
|
||||
// 给主起草人发消息
|
||||
String mainDraftUser = (String) taskService.getVariable(taskId, MAIN_DRAFT_USER);
|
||||
this.sendMessageToMainDraftUser(mainDraftUser, processInstanceId, maxBatchNum);
|
||||
break;
|
||||
case SET_STANDARD_NUMBER:
|
||||
// 判断标准编号是否重复
|
||||
Map<String, Object> variables = JSON.parseObject(data.getBusinessJson(), Map.class);
|
||||
// 根据派号字段重新生成标准编号
|
||||
String standardNumberTmp = (String) variables.get(FieldCommon.STANDARD_NUMBER_TEMP);
|
||||
String standardNumber = "";
|
||||
if (StringUtils.isNotBlank(standardNumberTmp)) {
|
||||
// 组合企标编号
|
||||
standardNumber = esUtil.combineStandardNumber(variables);
|
||||
} else {
|
||||
// 生成企标编号
|
||||
standardNumber = esUtil.generateStandardNumber(variables);
|
||||
standardNumberTmp = EnterpriseStandardUtil.getSequenceNoFromStandardNo(standardNumber);
|
||||
}
|
||||
variables.put(FieldCommon.STANDARD_NUMBER, standardNumber);
|
||||
variables.put(FieldCommon.STANDARD_NUMBER_TEMP, standardNumberTmp);
|
||||
// 重新序列化为json
|
||||
data.setBusinessJson(JSON.toJSONString(variables));
|
||||
// 校验重复
|
||||
LambdaQueryWrapper<LawsEnterpriseStandard> esQueryWrapper = new LambdaQueryWrapper<>();
|
||||
esQueryWrapper.eq(LawsEnterpriseStandard::getStandardNumber, standardNumber);
|
||||
LawsEnterpriseStandard es = esService.getOne(esQueryWrapper);
|
||||
if (Objects.nonNull(es)) {
|
||||
throw new JeroBootException(ResultCommon.STANDARD_NUMBER_ALREADY_EXISTS);
|
||||
}
|
||||
LambdaQueryWrapper<EnterpriseStandardPlan> planQueryWrapper = new LambdaQueryWrapper<>();
|
||||
planQueryWrapper.eq(EnterpriseStandardPlan::getStandardNumber, standardNumber);
|
||||
EnterpriseStandardPlan plan = planService.getOne(planQueryWrapper);
|
||||
if (Objects.nonNull(plan)) {
|
||||
throw new JeroBootException(ResultCommon.STANDARD_NUMBER_ALREADY_EXISTS);
|
||||
}
|
||||
// 保存数据
|
||||
updateById(data);
|
||||
break;
|
||||
}
|
||||
// 审批节点
|
||||
actFlowCommonService.completeTask(taskId, curUserId);
|
||||
// 更新审批表为完成,填充数据
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
// 删除草稿
|
||||
actFlowCommonService.removeDraft(curUserId, taskId, processInstanceId);
|
||||
// 保存快照
|
||||
processHandleService.saveToSnapshot(processInfoVO, curUserId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void approveTask(ProcessInfoVO<ProcessRevisionVO> processInfoVO, boolean pass) {
|
||||
// 获取task
|
||||
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
|
||||
String taskId = processTask.getTaskId();
|
||||
// 校验是否有权限操作此待办
|
||||
processHandleService.validTask(taskId);
|
||||
String prcId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
|
||||
BasicProcessInfoDTO processInfo = new BasicProcessInfoDTO();
|
||||
processInfo.setProcessInstanceId(prcId);
|
||||
processInfoVO.setBasicProcessInfoDTO(processInfo);
|
||||
// 获取当前节点的id
|
||||
ProcessApprovalRecord record = actFlowCommonService.getNodeIdByTaskId(taskId);
|
||||
String xmlNodeId = record.getNodeId();
|
||||
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
|
||||
// 更新审批表为完成,填充数据
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
String curUserId = UserUtils.getUserId();
|
||||
// 设置流程变量
|
||||
runtimeService.setVariable(processInstanceId, PASS, pass);
|
||||
runtimeService.setVariable(processInstanceId, OPEN, pass);
|
||||
// 会签节点驳回后修改其他节点的状态
|
||||
approvalRecordService.updateApprovalRecordFinishFlag(pass, taskId, xmlNodeId, processInstanceId);
|
||||
// 保存快照
|
||||
processHandleService.saveToSnapshot(processInfoVO, curUserId);
|
||||
// 审批节点
|
||||
actFlowCommonService.completeTask(taskId, curUserId);
|
||||
// 驳回,结束所有节点
|
||||
approvalRecordService.updateApprovalRecordFinishFlag(pass, taskId, xmlNodeId, processInstanceId);
|
||||
// 更新审批表为完成,填充数据
|
||||
processTask.setCommitFlag(pass ? CommitFlagEnum.PASS.getValue() : CommitFlagEnum.REJECT.getValue());
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
// 删除草稿
|
||||
actFlowCommonService.removeDraft(curUserId, taskId, processInstanceId);
|
||||
}
|
||||
|
||||
private Integer calculateAdviceBatchNum(List<EsRevisionAdvice> adviceList) {
|
||||
return adviceList.stream().mapToInt(EsRevisionAdvice::getBatchNum).max().orElse(0);
|
||||
}
|
||||
|
||||
private void sendMessageToMainDraftUser(String mainDraftUser, String processInstanceId, Integer maxBatchNum) {
|
||||
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
|
||||
SendMessageDTO sendMessageDTO = new SendMessageDTO();
|
||||
sendMessageDTO.setTemplateCode(MessageTemplateCodeCommon.ES_REVISION_ADVICE);
|
||||
sendMessageDTO.setToUserId(mainDraftUser);
|
||||
Map<String, String> sendMap = new HashMap<>();
|
||||
sendMap.put("prcNum", processAll.getPrcNum());
|
||||
sendMap.put("batchNum", maxBatchNum.toString());
|
||||
sendMessageDTO.setMap(sendMap);
|
||||
sendMessageAPI.sendMessage(sendMessageDTO);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
+7
-1
@@ -70,7 +70,7 @@ public interface IProcessHandleService {
|
||||
**/
|
||||
void updateApprovalRecord(ProcessInfoVO processInfoVO);
|
||||
|
||||
void saveToDraft(ProcessInfoVO processInfoVO, String userId);
|
||||
String saveToDraft(ProcessInfoVO processInfoVO, String userId);
|
||||
|
||||
void saveToSnapshot(ProcessInfoVO processInfoVO, String userId);
|
||||
|
||||
@@ -88,4 +88,10 @@ public interface IProcessHandleService {
|
||||
**/
|
||||
void deleteMyDraft(String taskId, String businessId, Integer processType);
|
||||
|
||||
/**
|
||||
* 查询流程信息
|
||||
* @param taskId taskId
|
||||
* @return ProcessInfoVO
|
||||
*/
|
||||
ProcessInfoVO queryProcessInfoVO(String taskId);
|
||||
}
|
||||
|
||||
+24
-2
@@ -403,7 +403,7 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveToDraft(ProcessInfoVO processInfoVO, String userId) {
|
||||
public String saveToDraft(ProcessInfoVO processInfoVO, String userId) {
|
||||
BasicProcessInfoDTO basicProcessInfoDTO = processInfoVO.getBasicProcessInfoDTO();
|
||||
BasicTaskInfoDTO basicTaskInfoDTO = processInfoVO.getBasicTaskInfoDTO();
|
||||
String taskId = null;
|
||||
@@ -426,7 +426,7 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
|
||||
String draftId = processInfoVO.getDraftId();
|
||||
if (StringUtils.isNotBlank(draftId)) {
|
||||
processDraft.setId(draftId);
|
||||
//processDraftService.removeById(draftId);
|
||||
processDraftService.removeById(draftId);
|
||||
}
|
||||
// 根据是否有taskId区分保存来源(待办、草稿)
|
||||
processDraft.setProjectId(processInfoVO.getBusinessId()); // 业务id
|
||||
@@ -479,6 +479,7 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
|
||||
log.error("反序列化失败", e);
|
||||
}
|
||||
}
|
||||
return processDraft.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -555,6 +556,27 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProcessInfoVO queryProcessInfoVO(String taskId) {
|
||||
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
|
||||
String processInstanceId = task.getProcessInstanceId();
|
||||
ProcessInfoVO processInfoVO = new ProcessInfoVO<>();
|
||||
// 获取流程通用数据
|
||||
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
|
||||
if(!Objects.isNull(process)){
|
||||
BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO();
|
||||
basicProcessInfoDTO.setProcessName(process.getPrcName());
|
||||
basicProcessInfoDTO.setProcessType(process.getPrcType());
|
||||
basicProcessInfoDTO.setProcessDefinitionId(process.getProcessDefinitionId());
|
||||
basicProcessInfoDTO.setProcessInstanceId(process.getProcessInstanceId());
|
||||
basicProcessInfoDTO.setProcessDescription(process.getPrcMes());
|
||||
basicProcessInfoDTO.setProcessDueDate(process.getDueTime());
|
||||
processInfoVO.setBasicProcessInfoDTO(basicProcessInfoDTO);
|
||||
processInfoVO.setBusinessId(process.getProjectId());
|
||||
}
|
||||
return processInfoVO;
|
||||
}
|
||||
|
||||
/**
|
||||
* @Author: liao
|
||||
* @Date: 2023/11/3 11:14
|
||||
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package com.jero.modules.activiti.process.machineEsApproval.common;
|
||||
|
||||
/**
|
||||
* @author: Mzaxd
|
||||
* @Date: 2023/12/19 15:14
|
||||
*/
|
||||
public class MachineEsApprovalTaskNodeIdConstant {
|
||||
|
||||
/** 法规工程师确认是否开启征求意见 */
|
||||
public static final String START = "Activity_1siuksf";
|
||||
/** 设计工程师填写意见 */
|
||||
public static final String ONE = "Activity_04m430n";
|
||||
/** 法规工程师汇总数据 */
|
||||
public static final String TWO = "Activity_1riqzkp";
|
||||
/** 法规工程师派号 */
|
||||
public static final String THREE = "Activity_11uuyg0";
|
||||
/** 主起草人 */
|
||||
public static final String FOUR = "mainDraftUser";
|
||||
/** 法规工程师 */
|
||||
public static final String FIVE = "standardEngineer";
|
||||
/** 征求意见人员 */
|
||||
public static final String SIX = "adviceUserList";
|
||||
}
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
package com.jero.modules.activiti.process.machineEsApproval.controller;
|
||||
|
||||
import com.jero.common.api.vo.Result;
|
||||
import com.jero.common.aspect.annotation.AutoLog;
|
||||
import com.jero.common.aspect.annotation.Translation;
|
||||
import com.jero.modules.activiti.enums.ProcessTypeEnum;
|
||||
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
|
||||
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
import com.jero.modules.activiti.process.machineEsApproval.entity.ProcessMachineEsApproval;
|
||||
import com.jero.modules.activiti.process.machineEsApproval.service.MachineEsApprovalService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
|
||||
/**
|
||||
* @author: Mzaxd
|
||||
* @Date: 2023/10/18 10:44
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@Api(tags = "整机企业标准报批流程")
|
||||
@RequestMapping("/process/es/machineEsApproval")
|
||||
public class MachineEsApprovalController {
|
||||
|
||||
@Resource
|
||||
private MachineEsApprovalService flowService;
|
||||
|
||||
@Resource
|
||||
private ActFlowCommonService actFlowCommonService;
|
||||
|
||||
/**
|
||||
* 整机企业标准报批流程
|
||||
*
|
||||
* @param processInfoVO
|
||||
*/
|
||||
@AutoLog(value = "整机企业标准报批流程-发起流程")
|
||||
@ApiOperation(value="整机企业标准报批流程-发起流程", notes="整机企业标准报批流程-发起流程")
|
||||
@PostMapping("/start")
|
||||
public Result<?> startProcess(@RequestBody ProcessInfoVO<ProcessMachineEsApproval> processInfoVO) {
|
||||
flowService.startProcess(processInfoVO);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "整机企业标准报批流程-提交")
|
||||
@ApiOperation(value = "整机企业标准报批流程-提交", notes = "整机企业标准报批流程-提交")
|
||||
@PostMapping("/submit")
|
||||
public Result<T> submit(@RequestBody ProcessInfoVO<ProcessMachineEsApproval> processInfoVO) {
|
||||
flowService.submit(processInfoVO);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存到待办
|
||||
* @param taskId
|
||||
*/
|
||||
@AutoLog(value = "整机企业标准报批流程-办理")
|
||||
@ApiOperation(value="整机企业标准报批流程-办理", notes="整机企业标准报批流程-办理")
|
||||
@GetMapping("/handle/{taskId}")
|
||||
@Translation
|
||||
public Result<?> handle(@PathVariable("taskId") String taskId) {
|
||||
ProcessDraft draft = actFlowCommonService.getExistDraftByTaskId(taskId, ProcessTypeEnum.MACHINE_ES_APPROVAL);
|
||||
if (draft != null) {
|
||||
return Result.OK(draft);
|
||||
}
|
||||
return Result.OK(flowService.getHandleData(taskId));
|
||||
}
|
||||
|
||||
@AutoLog(value = "整机企业标准报批流程-同意")
|
||||
@ApiOperation(value = "整机企业标准报批流程-同意", notes = "整机企业标准报批流程-同意")
|
||||
@PostMapping("/agree")
|
||||
public Result<T> agree(@RequestBody ProcessInfoVO<ProcessMachineEsApproval> processInfoVO) {
|
||||
flowService.approveTask(processInfoVO, true);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "整机企业标准报批流程-驳回")
|
||||
@ApiOperation(value = "整机企业标准报批流程-驳回", notes = "整机企业标准报批流程-驳回")
|
||||
@PostMapping("/reject")
|
||||
public Result<T> reject(@RequestBody ProcessInfoVO<ProcessMachineEsApproval> processInfoVO) {
|
||||
flowService.approveTask(processInfoVO, false);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
}
|
||||
+98
@@ -0,0 +1,98 @@
|
||||
package com.jero.modules.activiti.process.machineEsApproval.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.jero.common.aspect.annotation.Dict;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
*
|
||||
* @TableName process_machine_es_approval
|
||||
*/
|
||||
@TableName(value ="process_machine_es_approval")
|
||||
@Data
|
||||
public class ProcessMachineEsApproval implements Serializable {
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
@ApiModelProperty(value = "主键ID")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createBy;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新人
|
||||
*/
|
||||
@ApiModelProperty(value = "更新人")
|
||||
private String updateBy;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 所属部门
|
||||
*/
|
||||
@ApiModelProperty(value = "所属部门")
|
||||
private String orgCode;
|
||||
|
||||
/**
|
||||
* 0表示未删除,1表示删除
|
||||
*/
|
||||
@ApiModelProperty(value = "0表示未删除,1表示删除")
|
||||
private Integer delFlag;
|
||||
|
||||
/**
|
||||
* 流程实例Id
|
||||
*/
|
||||
@ApiModelProperty(value = "流程实例Id")
|
||||
private String processInstanceId;
|
||||
|
||||
/**
|
||||
* 在线编辑文件id
|
||||
*/
|
||||
@ApiModelProperty(value = "在线编辑文件id")
|
||||
private String onEditFile;
|
||||
|
||||
/**
|
||||
* 业务json数据
|
||||
*/
|
||||
@ApiModelProperty(value = "业务JSON数据")
|
||||
private String businessJson;
|
||||
|
||||
/**
|
||||
* 附件
|
||||
*/
|
||||
@Dict(dictTable = "sys_oss", dicText = "fileName", dicCode = "id")
|
||||
@ApiModelProperty(value = "附件")
|
||||
private String attach;
|
||||
|
||||
/**
|
||||
* 抄送人员
|
||||
*/
|
||||
@Dict(dictTable = "sys_user", dicText = "realname", dicCode = "id")
|
||||
@ApiModelProperty(value = "抄送人员")
|
||||
private String copyUser;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
package com.jero.modules.activiti.process.machineEsApproval.listener;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||
import com.jero.modules.activiti.process.common.enums.StandardStateEnum;
|
||||
import com.jero.modules.activiti.process.machineEsApproval.entity.ProcessMachineEsApproval;
|
||||
import com.jero.modules.activiti.process.machineEsApproval.service.MachineEsApprovalService;
|
||||
import com.jero.modules.laws.common.constant.FieldCommon;
|
||||
import com.jero.modules.laws.common.service.ILawsCommonService;
|
||||
import com.jero.modules.tag.enums.TableNameEnum;
|
||||
import lombok.SneakyThrows;
|
||||
import org.activiti.engine.delegate.DelegateExecution;
|
||||
import org.activiti.engine.delegate.ExecutionListener;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author: Mzaxd
|
||||
* @Date: 2023/12/19 11:59
|
||||
*/
|
||||
@Component
|
||||
public class ProcessMachineEsApprovalEndListener implements ExecutionListener {
|
||||
|
||||
@Resource
|
||||
private MachineEsApprovalService flowService;
|
||||
|
||||
@Resource
|
||||
private ILawsCommonService lawsCommonService;
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public void notify(DelegateExecution delegateExecution) {
|
||||
// 获取流程实例Id
|
||||
String processInstanceId = delegateExecution.getProcessInstanceId();
|
||||
// 根据流程Id获取业务数据
|
||||
LambdaQueryWrapper<ProcessMachineEsApproval> revisionWrapper = new LambdaQueryWrapper<>();
|
||||
revisionWrapper.eq(ProcessMachineEsApproval::getProcessInstanceId, processInstanceId);
|
||||
// 获取企标相关数据
|
||||
ProcessMachineEsApproval data = flowService.getOne(revisionWrapper);
|
||||
// 将数据转换为Map
|
||||
Map<String, Object> variables = transMap(data);
|
||||
// 发布企标
|
||||
lawsCommonService.commonAdd(variables);
|
||||
}
|
||||
|
||||
private Map<String, Object> transMap(ProcessMachineEsApproval data) {
|
||||
Map<String, Object> variables = JSON.parseObject(data.getBusinessJson(), Map.class);
|
||||
variables.put(FieldCommon.MODULE, TableNameEnum.ENTERPRISE_STANDARDS.getValue());
|
||||
// 标准状态
|
||||
variables.put(FieldCommon.STANDARD_STATE, StandardStateEnum.CURRENTLY_EFFECTIVE.getStateValue());
|
||||
String standardId = IdWorker.getIdStr();
|
||||
variables.put(FieldCommon.ID, standardId);
|
||||
String onEditFile = data.getOnEditFile();
|
||||
// 发布稿
|
||||
variables.put(FieldCommon.FILE_PUBLISH_OF_ORIGINAL, onEditFile);
|
||||
return variables;
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.jero.modules.activiti.process.machineEsApproval.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.jero.modules.activiti.process.machineEsApproval.entity.ProcessMachineEsApproval;
|
||||
|
||||
/**
|
||||
* @author ThinkBook
|
||||
* @description 针对表【process_es_revision】的数据库操作Mapper
|
||||
* @createDate 2023-12-19 11:58:59
|
||||
* @Entity com.jero.modules.activiti.process.esRevision.entity.EsRevision
|
||||
*/
|
||||
public interface ProcessMachineEsApprovalMapper extends BaseMapper<ProcessMachineEsApproval> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package com.jero.modules.activiti.process.machineEsApproval.service;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
import com.jero.modules.activiti.process.machineEsApproval.entity.ProcessMachineEsApproval;
|
||||
|
||||
/**
|
||||
* @author ThinkBook
|
||||
* @description 针对表【process_es_revision】的数据库操作Service
|
||||
* @createDate 2023-12-19 11:58:59
|
||||
*/
|
||||
public interface MachineEsApprovalService extends IService<ProcessMachineEsApproval> {
|
||||
|
||||
|
||||
ProcessInfoVO<ProcessMachineEsApproval> getHandleData(String taskId);
|
||||
|
||||
void startProcess(ProcessInfoVO<ProcessMachineEsApproval> processInfoVO);
|
||||
|
||||
void submit(ProcessInfoVO<ProcessMachineEsApproval> processInfoVO);
|
||||
|
||||
void approveTask(ProcessInfoVO<ProcessMachineEsApproval> processInfoVO, boolean pass);
|
||||
}
|
||||
+242
@@ -0,0 +1,242 @@
|
||||
package com.jero.modules.activiti.process.machineEsApproval.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.jero.common.api.vo.ResultCommon;
|
||||
import com.jero.common.exception.JeroBootException;
|
||||
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
|
||||
import com.jero.modules.activiti.enums.CommitFlagEnum;
|
||||
import com.jero.modules.activiti.enums.ProcessTypeEnum;
|
||||
import com.jero.modules.activiti.process.common.enums.ProcessType;
|
||||
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
|
||||
import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
|
||||
import com.jero.modules.activiti.process.fb.dto.BasicTaskInfoDTO;
|
||||
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
import com.jero.modules.activiti.process.machineEsApproval.entity.ProcessMachineEsApproval;
|
||||
import com.jero.modules.activiti.process.machineEsApproval.mapper.ProcessMachineEsApprovalMapper;
|
||||
import com.jero.modules.activiti.process.machineEsApproval.service.MachineEsApprovalService;
|
||||
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
|
||||
import com.jero.modules.activiti.service.ProcessNodeLinkService;
|
||||
import com.jero.modules.sys.utils.UserUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.activiti.engine.RuntimeService;
|
||||
import org.activiti.engine.TaskService;
|
||||
import org.activiti.engine.runtime.ProcessInstance;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.jero.modules.activiti.common.ActivitiCommon.*;
|
||||
import static com.jero.modules.activiti.process.specialEsApproval.common.SpecialEsApprovalTaskNodeIdConstant.TWO;
|
||||
|
||||
/**
|
||||
* @author ThinkBook
|
||||
* @description 针对表【process_es_revision】的数据库操作Service实现
|
||||
* @createDate 2023-12-19 11:58:59
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
@Transactional(rollbackFor = JeroBootException.class)
|
||||
public class MachineEsApprovalServiceImpl extends ServiceImpl<ProcessMachineEsApprovalMapper, ProcessMachineEsApproval>
|
||||
implements MachineEsApprovalService {
|
||||
|
||||
@Resource
|
||||
private ActFlowCommonService actFlowCommonService;
|
||||
|
||||
@Resource
|
||||
private ProcessNodeLinkService processNodeLinkService;
|
||||
|
||||
@Resource
|
||||
private RuntimeService runtimeService;
|
||||
|
||||
@Resource
|
||||
private IProcessHandleService processHandleService;
|
||||
|
||||
@Resource
|
||||
private TaskService taskService;
|
||||
|
||||
@Resource
|
||||
private ProcessApprovalRecordService approvalRecordService;
|
||||
|
||||
@Override
|
||||
public void startProcess(ProcessInfoVO<ProcessMachineEsApproval> processInfoVO) {
|
||||
// 流程Key
|
||||
String processDefinitionKey = ProcessType.MACHINE_ES_APPROVAL.getProcessKey();
|
||||
// 流程信息
|
||||
BasicProcessInfoDTO processInfo = processInfoVO.getBasicProcessInfoDTO();
|
||||
// 任务信息
|
||||
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
|
||||
// 人员信息
|
||||
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
|
||||
// 当前用户Id
|
||||
String userId = UserUtils.getUserId();
|
||||
// 设置流程变量
|
||||
Map<String, Object> actVariables = this.setVariables(processInfoVO);
|
||||
// 删除草稿
|
||||
actFlowCommonService.getExistDraftAndRemove(processInfoVO.getDraftId());
|
||||
// 启动流程
|
||||
ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, actVariables);
|
||||
// 获取流程实例ID
|
||||
String processDefinitionId = processInstance.getProcessDefinitionId();
|
||||
String processInstanceId = processInstance.getId();
|
||||
processInfo.setProcessInstanceId(processInstanceId);
|
||||
processInfo.setProcessDefinitionId(processDefinitionId);
|
||||
processInfo.setProcessType(ProcessTypeEnum.MACHINE_ES_APPROVAL.getValue());
|
||||
// 第一个节点业务数据处理
|
||||
this.startNodeBusProcess(processInfoVO);
|
||||
// 保存选人信息
|
||||
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userInfoMap);
|
||||
// 获取第一个任务的taskId
|
||||
String taskId = actFlowCommonService.getFirstTaskId(processInstanceId, userId, processDefinitionId);
|
||||
processTask.setTaskId(taskId);
|
||||
// 保存第一个节点的草稿
|
||||
processHandleService.saveToDraft(processInfoVO, userId);
|
||||
// 保存第一个节点的快照
|
||||
processHandleService.saveToSnapshot(processInfoVO, userId);
|
||||
// 更新审批表为完成,填充数据
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
// 根据流程实例id更新流程总表
|
||||
actFlowCommonService.updateProcessAll(processInfo);
|
||||
// 自动完成第一个任务
|
||||
actFlowCommonService.completeTask(taskId, userId);
|
||||
}
|
||||
|
||||
private void startNodeBusProcess(ProcessInfoVO<ProcessMachineEsApproval> processInfoVO) {
|
||||
String processInstanceId = processInfoVO.getBasicProcessInfoDTO().getProcessInstanceId();
|
||||
ProcessMachineEsApproval processInfo = processInfoVO.getBusinessInfoDTO();
|
||||
processInfo.setProcessInstanceId(processInstanceId);
|
||||
save(processInfo);
|
||||
}
|
||||
|
||||
private Map<String, Object> setVariables(ProcessInfoVO<ProcessMachineEsApproval> processInfoVO) {
|
||||
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
// 将所有多选人员转换为List后放入map中
|
||||
result.put(MAIN_DRAFT_USER, userInfoMap.get(MAIN_DRAFT_USER));
|
||||
actFlowCommonService.convertAndPutList(result, userInfoMap, USER_ONE_List);
|
||||
actFlowCommonService.convertAndPutList(result, userInfoMap, USER_TWO_List);
|
||||
actFlowCommonService.convertAndPutList(result, userInfoMap, USER_THREE_List);
|
||||
actFlowCommonService.convertAndPutList(result, userInfoMap, USER_FOUR_List);
|
||||
actFlowCommonService.convertAndPutList(result, userInfoMap, USER_FIVE_List);
|
||||
actFlowCommonService.convertAndPutList(result, userInfoMap, USER_SIX_List);
|
||||
// 获取分发人
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProcessInfoVO<ProcessMachineEsApproval> getHandleData(String taskId) {
|
||||
if (!actFlowCommonService.taskExists(taskId)) {
|
||||
throw new JeroBootException(ResultCommon.TASK_NOT_EXISTS);
|
||||
}
|
||||
ProcessInfoVO<ProcessMachineEsApproval> result = new ProcessInfoVO<>();
|
||||
// 使用流程引擎根据taskId找到流程实例Id
|
||||
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
|
||||
result.setBasicProcessInfoDTO(actFlowCommonService.getProcessInfo(processInstanceId));
|
||||
// 获取当前流程数据
|
||||
LambdaQueryWrapper<ProcessMachineEsApproval> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ProcessMachineEsApproval::getProcessInstanceId, processInstanceId);
|
||||
ProcessMachineEsApproval processVo = getOne(queryWrapper);
|
||||
// 设置流程信息
|
||||
result.setBusinessInfoDTO(processVo);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void submit(ProcessInfoVO<ProcessMachineEsApproval> processInfoVO) {
|
||||
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
|
||||
String taskId = processTask.getTaskId();
|
||||
// 校验是否有权限操作此待办
|
||||
processHandleService.validTask(taskId);
|
||||
// 获取当前节点的id
|
||||
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
|
||||
BasicProcessInfoDTO processInfo = new BasicProcessInfoDTO();
|
||||
// 使用流程引擎根据taskId找到流程实例Id
|
||||
processInfo.setProcessInstanceId(processInstanceId);
|
||||
processInfoVO.setBasicProcessInfoDTO(processInfo);
|
||||
// 更新审批表为完成,填充数据
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
String curUserId = UserUtils.getUserId();
|
||||
ProcessMachineEsApproval data = processInfoVO.getBusinessInfoDTO();
|
||||
// 根据流程实例Id获取流程定义ID
|
||||
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
|
||||
.processInstanceId(processInstanceId).singleResult();
|
||||
// 获取数据库中的流程信息
|
||||
LambdaQueryWrapper<ProcessMachineEsApproval> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ProcessMachineEsApproval::getProcessInstanceId, processInstanceId);
|
||||
ProcessMachineEsApproval dataFromDb = getOne(queryWrapper);
|
||||
if (dataFromDb != null) {
|
||||
data.setId(dataFromDb.getId());
|
||||
}
|
||||
// 获取流程实例ID
|
||||
String processDefinitionId = processInstance.getProcessDefinitionId();
|
||||
// 判断是否开启征求意见子流程 设置流程变量
|
||||
Map<String, Object> actVariable = this.setVariables(processInfoVO);
|
||||
taskService.setVariables(taskId, actVariable);
|
||||
// 保存流程数据
|
||||
saveOrUpdate(data);
|
||||
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, processInfoVO.getUserInfoMap());
|
||||
// 完成任务
|
||||
actFlowCommonService.completeTask(taskId, curUserId);
|
||||
// 更新审批表为完成,填充数据
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
// 删除草稿
|
||||
actFlowCommonService.removeDraft(curUserId, taskId, processInstanceId);
|
||||
// 保存快照
|
||||
processHandleService.saveToSnapshot(processInfoVO, curUserId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void approveTask(ProcessInfoVO<ProcessMachineEsApproval> processInfoVO, boolean pass) {
|
||||
// 获取task
|
||||
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
|
||||
String taskId = processTask.getTaskId();
|
||||
// 校验是否有权限操作此待办
|
||||
processHandleService.validTask(taskId);
|
||||
String prcId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
|
||||
BasicProcessInfoDTO processInfo = new BasicProcessInfoDTO();
|
||||
processInfo.setProcessInstanceId(prcId);
|
||||
processInfoVO.setBasicProcessInfoDTO(processInfo);
|
||||
// 获取当前节点的id
|
||||
ProcessApprovalRecord record = actFlowCommonService.getNodeIdByTaskId(taskId);
|
||||
String xmlNodeId = record.getNodeId();
|
||||
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
|
||||
// 更新审批表为完成,填充数据
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
String curUserId = UserUtils.getUserId();
|
||||
if (xmlNodeId.equals(TWO)) {
|
||||
// 获取数据库中的流程信息
|
||||
ProcessMachineEsApproval data = processInfoVO.getBusinessInfoDTO();
|
||||
LambdaQueryWrapper<ProcessMachineEsApproval> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ProcessMachineEsApproval::getProcessInstanceId, processInstanceId);
|
||||
ProcessMachineEsApproval dataFromDb = getOne(queryWrapper);
|
||||
if (dataFromDb != null) {
|
||||
data.setId(dataFromDb.getId());
|
||||
}
|
||||
// 保存数据
|
||||
updateById(data);
|
||||
}
|
||||
// 设置流程变量
|
||||
runtimeService.setVariable(processInstanceId, PASS, pass);
|
||||
// 会签节点驳回后修改其他节点的状态
|
||||
approvalRecordService.updateApprovalRecordFinishFlag(pass, taskId, xmlNodeId, processInstanceId);
|
||||
// 保存快照
|
||||
processHandleService.saveToSnapshot(processInfoVO, curUserId);
|
||||
// 审批节点
|
||||
actFlowCommonService.completeTask(taskId, curUserId);
|
||||
// 驳回,结束所有节点
|
||||
approvalRecordService.updateApprovalRecordFinishFlag(pass, taskId, xmlNodeId, processInstanceId);
|
||||
// 更新审批表为完成,填充数据
|
||||
processTask.setCommitFlag(pass ? CommitFlagEnum.PASS.getValue() : CommitFlagEnum.REJECT.getValue());
|
||||
actFlowCommonService.updateApprovalInfo(processTask, taskId);
|
||||
// 删除草稿
|
||||
actFlowCommonService.removeDraft(curUserId, taskId, processInstanceId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
+92
-49
@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.jeecgframework.poi.excel.annotation.Excel;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
@@ -34,17 +35,103 @@ public class ProcessNewStandardImport implements Serializable {
|
||||
*/
|
||||
@ApiModelProperty(value = "标准ID")
|
||||
private String standardId;
|
||||
|
||||
/**标准编号*/
|
||||
@ApiModelProperty(value = "标准编号")
|
||||
@TableField(exist = false)
|
||||
@Excel(name = "标准编号", width = 15)
|
||||
private String standardNumber;
|
||||
/**标准名称*/
|
||||
@ApiModelProperty(value = "标准名称")
|
||||
@TableField(exist = false)
|
||||
@Excel(name = "标准名称", width = 15)
|
||||
private String standardName;
|
||||
/**代替标准编号*/
|
||||
@ApiModelProperty(value = "代替标准编号")
|
||||
@TableField(exist = false)
|
||||
@Excel(name = "代替标准编号", width = 15)
|
||||
private String substituteStandardNumber;
|
||||
/**标准类型*/
|
||||
@ApiModelProperty(value = "标准类型")
|
||||
@Dict(dicCode = "standard_type")
|
||||
@Excel(name = "标准类型", width = 15,dicCode = "standard_type")
|
||||
private String standardCategory;
|
||||
/**主管部门*/
|
||||
@ApiModelProperty(value = "主管部门")
|
||||
@Excel(name = "主管部门", width = 15,dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
||||
@Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
||||
private String competentDepartment;
|
||||
/**主控部门*/
|
||||
@ApiModelProperty(value = "主控部门")
|
||||
@Excel(name = "主控部门", width = 15, dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
||||
@Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
||||
private String mainControlDepartment;
|
||||
/**主控部门专业模块*/
|
||||
@ApiModelProperty(value = "主控部门专业模块")
|
||||
@Excel(name = "主控部门专业模块", width = 15, dicCode = "professional_module")
|
||||
@Dict(dicCode = "professional_module")
|
||||
private String mainDeptProfMode;
|
||||
/**所处阶段*/
|
||||
@ApiModelProperty(value = "所处阶段")
|
||||
@Excel(name = "所处阶段", width = 15,dicCode = "stage_we_are_in")
|
||||
@Dict(dicCode = "stage_we_are_in")
|
||||
private String eventPhase;
|
||||
/**新认证车实施日期*/
|
||||
@ApiModelProperty(value = "新认证车实施日期")
|
||||
@Excel(name = "新认证车实施日期", width = 15)
|
||||
private String newAuthImplDate;
|
||||
/**新生产车实施日期*/
|
||||
@ApiModelProperty(value = "新生产车实施日期")
|
||||
@Excel(name = "新生产车实施日期", width = 15)
|
||||
private String newProductImplDate;
|
||||
/**注册日期*/
|
||||
@ApiModelProperty(value = "注册日期")
|
||||
@Excel(name = "注册日期", width = 15)
|
||||
private String registrationDate;
|
||||
/**适用市场*/
|
||||
@ApiModelProperty(value = "适用市场")
|
||||
@Excel(name = "适用市场", width = 15,dicCode = "market_state")
|
||||
@Dict(dicCode = "market_state")
|
||||
private String applicableMarket;
|
||||
/**法规要求简要描述*/
|
||||
@ApiModelProperty(value = "法规要求简要描述")
|
||||
@Excel(name = "法规要求简要描述", width = 15)
|
||||
private String requireBriefDesc;
|
||||
/**主送部门*/
|
||||
@ApiModelProperty(value = "主送部门")
|
||||
@Excel(name = "主送部门", width = 15,dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
||||
@Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
||||
private String masterSendDepartment;
|
||||
/**抄送部门*/
|
||||
@ApiModelProperty(value = "抄送部门")
|
||||
@Excel(name = "抄送部门", width = 15,dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
||||
@Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
||||
private String copySendDepartment;
|
||||
/**发送人员*/
|
||||
@ApiModelProperty(value = "发送人员")
|
||||
@Dict(dictTable = "sys_user", dicText = "realname", dicCode = "id")
|
||||
@Excel(name = "发送人员", width = 15,dictTable = "sys_user", dicText = "CONCAT(realname,'(',username,')')", dicCode = "id")
|
||||
private String copyUser;
|
||||
/**通知发起人*/
|
||||
@ApiModelProperty(value = "通知发起人")
|
||||
@Dict(dictTable = "sys_user", dicText = "CONCAT(realname,'(',username,')')", dicCode = "username")
|
||||
@Excel(name = "通知发起人", width = 15,dictTable = "sys_user", dicText = "CONCAT(realname,'(',username,')')", dicCode = "username")
|
||||
private String createBy;
|
||||
/**实施日期*/
|
||||
@ApiModelProperty(value = "实施日期")
|
||||
@TableField(exist = false)
|
||||
private String implementationDate;
|
||||
/**通知发布日期*/
|
||||
@ApiModelProperty(value = "通知发布日期")
|
||||
@TableField(exist = false)
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
|
||||
@Excel(name = "通知发布日期", width = 15,format = "yyyy-MM-dd")
|
||||
private Date publishDate;
|
||||
/**
|
||||
* 流程实例id
|
||||
*/
|
||||
@ApiModelProperty(value = "流程实例id")
|
||||
private String processInstanceId;
|
||||
|
||||
/**创建人*/
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createBy;
|
||||
|
||||
/**创建日期*/
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
@@ -61,54 +148,10 @@ public class ProcessNewStandardImport implements Serializable {
|
||||
@ApiModelProperty(value = "更新日期")
|
||||
private Date updateTime;
|
||||
|
||||
|
||||
/**
|
||||
* 0表示未删除,1表示删除
|
||||
*/
|
||||
@ApiModelProperty(value = "0表示未删除,1表示删除")
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
|
||||
/**所处阶段*/
|
||||
@ApiModelProperty(value = "所处阶段")
|
||||
private String eventPhase;
|
||||
|
||||
/**适用市场*/
|
||||
@ApiModelProperty(value = "适用市场")
|
||||
private String applicableMarket;
|
||||
/**法规要求简要描述*/
|
||||
@ApiModelProperty(value = "法规要求简要描述")
|
||||
private String requireBriefDesc;
|
||||
/**抄送人员*/
|
||||
@ApiModelProperty(value = "抄送人员")
|
||||
@Dict(dictTable = "sys_user", dicText = "realname", dicCode = "id")
|
||||
private String copyUser;
|
||||
/**适用市场*/
|
||||
@ApiModelProperty(value = "标准类型")
|
||||
@Dict(dicCode = "standard_type")
|
||||
private String standardCategory;
|
||||
/**实施日期*/
|
||||
@ApiModelProperty(value = "实施日期")
|
||||
@TableField(exist = false)
|
||||
private String implementationDate;
|
||||
/**标准名称*/
|
||||
@ApiModelProperty(value = "标准名称")
|
||||
@TableField(exist = false)
|
||||
private String standardName;
|
||||
/**标准编号*/
|
||||
@ApiModelProperty(value = "标准编号")
|
||||
@TableField(exist = false)
|
||||
private String standardNumber;
|
||||
/**代替标准编号*/
|
||||
@ApiModelProperty(value = "代替标准编号")
|
||||
@TableField(exist = false)
|
||||
private String substituteStandardNumber;
|
||||
|
||||
/**主管部门*/
|
||||
@ApiModelProperty(value = "主管部门")
|
||||
private String competentDepartment;
|
||||
|
||||
/**主控部门*/
|
||||
@ApiModelProperty(value = "主控部门")
|
||||
private String mainControlDepartment;
|
||||
}
|
||||
|
||||
+23
@@ -1,8 +1,16 @@
|
||||
package com.jero.modules.activiti.process.ni.mapper;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.jero.modules.activiti.process.ni.entity.ProcessNewStandardImport;
|
||||
import com.jero.modules.laws.marketStandard.entity.LawsMarketStandard;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author
|
||||
@@ -18,6 +26,21 @@ public interface ProcessNewStandardImportMapper extends BaseMapper<ProcessNewSta
|
||||
* @return
|
||||
*/
|
||||
ProcessNewStandardImport getStandardNameById(String id);
|
||||
|
||||
/**
|
||||
* 分页
|
||||
* @param page
|
||||
* @param queryWrapper
|
||||
* @return
|
||||
*/
|
||||
IPage<ProcessNewStandardImport> queryByPage(Page<ProcessNewStandardImport> page, @Param(Constants.WRAPPER) QueryWrapper<ProcessNewStandardImport> queryWrapper);
|
||||
|
||||
/**
|
||||
* 列表
|
||||
* @param queryWrapper
|
||||
* @return
|
||||
*/
|
||||
List<ProcessNewStandardImport> queryByPage(@Param(Constants.WRAPPER) QueryWrapper<ProcessNewStandardImport> queryWrapper);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+15
-9
@@ -5,15 +5,21 @@
|
||||
<mapper namespace="com.jero.modules.activiti.process.ni.mapper.ProcessNewStandardImportMapper">
|
||||
|
||||
<select id="getStandardNameById" resultType="com.jero.modules.activiti.process.ni.entity.ProcessNewStandardImport">
|
||||
select standard_number,standard_name,
|
||||
(select GROUP_CONCAT(replaced SEPARATOR ', ') from laws_replaced_standard where type=1 and replaced_by = a.standard_number) as substitute_standard_number,
|
||||
implementation_date from
|
||||
(select id, standard_number,standard_name,implementation_date
|
||||
select id,standard_number,standard_name,
|
||||
(select GROUP_CONCAT(replaced SEPARATOR ', ') from laws_replaced_standard where type=1 and replaced_by = laws_domestic_standard.standard_number) as substitute_standard_number,
|
||||
implementation_date,new_product_impl_date,new_auth_impl_date,registration_date
|
||||
from laws_domestic_standard
|
||||
where del_flag = 0
|
||||
union all
|
||||
select id, standard_number,standard_name,implementation_date
|
||||
from laws_enterprise_standard
|
||||
where del_flag = 0) a where id = #{id}
|
||||
where del_flag = 0 and id = #{id}
|
||||
</select>
|
||||
|
||||
<select id="queryByPage" resultType="com.jero.modules.activiti.process.ni.entity.ProcessNewStandardImport">
|
||||
select p.*,p1.standard_number,p1.standard_name,
|
||||
(select GROUP_CONCAT(replaced SEPARATOR ', ') from laws_replaced_standard where type=1 and replaced_by = p1.standard_number) as substitute_standard_number,
|
||||
p1.implementation_date,p1.new_product_impl_date,p1.new_auth_impl_date,p1.registration_date,p2.end_time as publishDate
|
||||
from process_standard_import p
|
||||
left join laws_domestic_standard p1 on p.standard_id = p1.id and p1.del_flag = 0
|
||||
left join process_all p2 on p2.process_instance_id = p.process_instance_id
|
||||
left join sys_user s1 on s1.username = p.create_by and s1.del_flag = 0
|
||||
${ew.customSqlSegment}
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
+2
@@ -1,5 +1,7 @@
|
||||
package com.jero.modules.activiti.process.ni.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
import com.jero.modules.activiti.process.ni.entity.ProcessNewStandardImport;
|
||||
|
||||
-1
@@ -323,7 +323,6 @@ public class ProcessNewStandardImportServiceImpl extends ServiceImpl<ProcessNewS
|
||||
if(!Objects.isNull(processNewStandardImport)){
|
||||
data.setStandardName(processNewStandardImport.getStandardName());
|
||||
data.setStandardNumber(processNewStandardImport.getStandardNumber());
|
||||
data.setImplementationDate(processNewStandardImport.getImplementationDate());
|
||||
data.setSubstituteStandardNumber(processNewStandardImport.getSubstituteStandardNumber());
|
||||
}
|
||||
result.setBusinessInfoDTO(data);
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package com.jero.modules.activiti.process.part.common;
|
||||
|
||||
/**
|
||||
* @author liJiaRao
|
||||
* @date 2024-06-17 15:28
|
||||
*/
|
||||
public class ProcessPartTypeApplyConstants {
|
||||
private ProcessPartTypeApplyConstants(){}
|
||||
|
||||
/**
|
||||
* 设计工程师部门经理审批
|
||||
*/
|
||||
public static final String DESIGN_ENGINEER_DEPARTMENT_MANAGER_APPROVAL = "SID-BA959E3B-C6E3-4407-BA45-7127052C1E4A";
|
||||
}
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
package com.jero.modules.activiti.process.part.controller;
|
||||
|
||||
import com.jero.common.api.vo.Result;
|
||||
import com.jero.common.aspect.annotation.AutoLog;
|
||||
import com.jero.common.aspect.annotation.Translation;
|
||||
import com.jero.common.system.base.controller.JeroController;
|
||||
import com.jero.modules.activiti.enums.ProcessTypeEnum;
|
||||
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
|
||||
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
|
||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
||||
import com.jero.modules.activiti.process.part.entity.ProcessPartTypeApply;
|
||||
import com.jero.modules.activiti.process.part.service.IProcessPartTypeApplyService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 流程-关键零部件型号申请流程
|
||||
*
|
||||
* @author xxxxx
|
||||
*/
|
||||
@Slf4j
|
||||
@Api(tags = "关键零部件型号申请流程")
|
||||
@RestController
|
||||
@RequestMapping("process/processPartTypeApply")
|
||||
public class ProcessPartTypeApplyController extends JeroController<ProcessPartTypeApply, IProcessPartTypeApplyService> {
|
||||
|
||||
@Resource
|
||||
private IProcessPartTypeApplyService sccService;
|
||||
|
||||
@Resource
|
||||
private ActFlowCommonService actFlowCommonService;
|
||||
|
||||
@AutoLog(value = "关键零部件型号申请流程-发起流程")
|
||||
@ApiOperation(value = "关键零部件型号申请流程-发起流程", notes = "关键零部件型号申请流程-发起流程")
|
||||
@PostMapping(value = "/start")
|
||||
public Result<T> startProcess(@Validated @RequestBody ProcessInfoVO<ProcessPartTypeApply> processInfoVO) {
|
||||
sccService.startProcess(processInfoVO);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "关键零部件型号申请流程-同意")
|
||||
@ApiOperation(value = "关键零部件型号申请流程-同意", notes = "关键零部件型号申请流程-同意")
|
||||
@PostMapping("/agree")
|
||||
public Result<T> agree(@Validated @RequestBody ProcessInfoVO<ProcessPartTypeApply> processInfoVO) {
|
||||
sccService.approveTask(processInfoVO, true);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "关键零部件型号申请流程-驳回")
|
||||
@ApiOperation(value = "关键零部件型号申请流程-驳回", notes = "关键零部件型号申请流程-驳回")
|
||||
@PostMapping("/reject")
|
||||
public Result<T> reject(@Validated @RequestBody ProcessInfoVO<ProcessPartTypeApply> processInfoVO) {
|
||||
sccService.approveTask(processInfoVO, false);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
@AutoLog(value = "关键零部件型号申请流程-提交")
|
||||
@ApiOperation(value = "关键零部件型号申请流程-提交", notes = "关键零部件型号申请流程-提交")
|
||||
@PostMapping("/submit")
|
||||
public Result<T> submit(@Validated @RequestBody ProcessInfoVO<ProcessPartTypeApply> processInfoVO) {
|
||||
sccService.submit(processInfoVO);
|
||||
return Result.OK();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 关键零部件型号申请流程-办理
|
||||
* @param taskId
|
||||
*/
|
||||
@AutoLog(value = "关键零部件型号申请流程-办理")
|
||||
@ApiOperation(value="关键零部件型号申请流程-办理", notes="关键零部件型号申请流程-办理")
|
||||
@GetMapping("/handle/{taskId}")
|
||||
@Translation
|
||||
public Result<?> handle(@PathVariable("taskId") String taskId) {
|
||||
ProcessDraft draft = actFlowCommonService.getExistDraftByTaskId(taskId, ProcessTypeEnum.PART_TYPE_APPLY);
|
||||
if (draft != null) {
|
||||
return Result.OK(draft);
|
||||
}
|
||||
return Result.OK(sccService.getHandleData(taskId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成
|
||||
* @param scc
|
||||
*/
|
||||
@AutoLog(value = "关键零部件型号申请流程-生成")
|
||||
@ApiOperation(value="关键零部件型号申请流程-生成", notes="关键零部件型号申请流程-生成")
|
||||
@PostMapping("/generate")
|
||||
@Translation
|
||||
public Result<?> generate(@RequestPart("scc") ProcessPartTypeApply scc,
|
||||
@RequestPart("modelFile") MultipartFile modelFile,
|
||||
@RequestPart(name = "splitFile", required = false) MultipartFile splitFile) {
|
||||
return Result.OK(sccService.generate(scc, modelFile, splitFile));
|
||||
}
|
||||
}
|
||||
+163
@@ -0,0 +1,163 @@
|
||||
package com.jero.modules.activiti.process.part.controller;
|
||||
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||
import com.jero.common.api.vo.Result;
|
||||
import com.jero.common.api.vo.ResultCommon;
|
||||
import com.jero.common.aspect.annotation.AutoLog;
|
||||
import com.jero.common.aspect.annotation.Translation;
|
||||
import com.jero.modules.activiti.process.part.entity.ProcessPartTypeApply;
|
||||
import com.jero.modules.activiti.process.part.entity.ProcessPartTypeApplyRecord;
|
||||
import com.jero.modules.activiti.process.part.service.IProcessPartTypeApplyRecordService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
@Api(tags = "业务支持-关键零部件型号库流程表")
|
||||
@RestController
|
||||
@RequestMapping("/laws/processPartTypeApplyRecord")
|
||||
@Slf4j
|
||||
public class ProcessPartTypeApplyRecordController {
|
||||
|
||||
@Resource
|
||||
private IProcessPartTypeApplyRecordService processPartTypeApplyRecordService;
|
||||
|
||||
/**
|
||||
* 分页列表查询
|
||||
*
|
||||
* @param processPartTypeApplyRecord
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "业务支持-关键零部件型号库-列表查询")
|
||||
@ApiOperation(value = "业务支持-关键零部件型号库-列表查询", notes = "业务支持-关键零部件型号库-列表查询")
|
||||
@GetMapping(value = "/page")
|
||||
@ApiOperationSupport(order = 1)
|
||||
// @RequiresPermissions("keyPartBindingManage:search")
|
||||
@Translation
|
||||
public Result<List<ProcessPartTypeApplyRecord>> queryList(ProcessPartTypeApplyRecord processPartTypeApplyRecord,
|
||||
HttpServletRequest req) {
|
||||
List<ProcessPartTypeApplyRecord> pageList = processPartTypeApplyRecordService.queryList(processPartTypeApplyRecord, req);
|
||||
return Result.OK(pageList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*
|
||||
* @param processPartTypeApplyRecord
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "业务支持-关键零部件型号库-详情")
|
||||
@ApiOperation(value = "业务支持-关键零部件型号库-详情", notes = "业务支持-关键零部件型号库-详情")
|
||||
@GetMapping(value = "/queryById")
|
||||
@ApiOperationSupport(order = 2)
|
||||
@Translation
|
||||
public Result<ProcessPartTypeApplyRecord> queryById(ProcessPartTypeApplyRecord processPartTypeApplyRecord) {
|
||||
ProcessPartTypeApplyRecord result = processPartTypeApplyRecordService.queryById(processPartTypeApplyRecord.getId());
|
||||
return Result.OK(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*
|
||||
* @param map
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "业务支持-关键零部件型号库-删除")
|
||||
@ApiOperation(value = "业务支持-关键零部件型号库-删除", notes = "业务支持-关键零部件型号库-删除")
|
||||
@ApiOperationSupport(order = 4)
|
||||
@PostMapping(value = "/delete")
|
||||
// @RequiresPermissions("keyPartBindingManage:delete")
|
||||
public Result<?> delete(@RequestBody Map<String, String> map) {
|
||||
if (!map.containsKey("id") || StringUtils.isEmpty(map.get("id"))) {
|
||||
return Result.error(ResultCommon.SELECT_DATA);
|
||||
}
|
||||
this.processPartTypeApplyRecordService.deleteById(map.get("id"));
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*
|
||||
* @param map
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "业务支持-关键零部件型号库-批量删除")
|
||||
@ApiOperation(value = "业务支持-关键零部件型号库-批量删除", notes = "业务支持-关键零部件型号库-批量删除")
|
||||
@ApiOperationSupport(order = 4)
|
||||
@PostMapping(value = "/deleteBatch")
|
||||
// @RequiresPermissions("keyPartBindingManage:batchDel")
|
||||
public Result<T> deleteBatch(@RequestBody Map<String, String> map) {
|
||||
if (!map.containsKey("ids") || StringUtils.isEmpty(map.get("ids"))) {
|
||||
return Result.error(ResultCommon.SELECT_DATA);
|
||||
}
|
||||
this.processPartTypeApplyRecordService.deleteByIds(Arrays.asList(map.get("ids").split(",")));
|
||||
return Result.OK(ResultCommon.OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增
|
||||
*
|
||||
* @param processPartTypeApplyRecord
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "业务支持-关键零部件型号库-新增")
|
||||
@ApiOperation(value = "业务支持-关键零部件型号库-新增", notes = "业务支持-关键零部件型号库-新增")
|
||||
@ApiOperationSupport(order = 5)
|
||||
@PostMapping(value = "/add")
|
||||
@Translation
|
||||
// @RequiresPermissions("keyPartBindingManage:add")
|
||||
public Result<ProcessPartTypeApplyRecord> add(@RequestBody ProcessPartTypeApplyRecord processPartTypeApplyRecord) {
|
||||
return Result.OK(processPartTypeApplyRecordService.add(processPartTypeApplyRecord));
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*
|
||||
* @param processPartTypeApplyRecord
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "业务支持-关键零部件型号库-编辑")
|
||||
@ApiOperation(value = "业务支持-关键零部件型号库-编辑", notes = "业务支持-关键零部件型号库-编辑")
|
||||
@ApiOperationSupport(order = 6)
|
||||
@PostMapping(value = "/edit")
|
||||
// @RequiresPermissions("keyPartBindingManage:import")
|
||||
@Translation
|
||||
public Result<ProcessPartTypeApplyRecord> edit(@RequestBody ProcessPartTypeApplyRecord processPartTypeApplyRecord) {
|
||||
return Result.OK(this.processPartTypeApplyRecordService.edit(processPartTypeApplyRecord));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 关键零部件型号编辑
|
||||
* @param processPartTypeApplyRecord
|
||||
*/
|
||||
@AutoLog(value = "业务支持-关键零部件型号库-关键零部件型号编辑")
|
||||
@ApiOperation(value="业务支持-关键零部件型号库-关键零部件型号编辑", notes="关键零部件型号库-关键零部件型号编辑")
|
||||
@PostMapping("/partRelevanceTypeUpdate")
|
||||
public Result<?> partRelevanceTypeUpdate(@RequestBody ProcessPartTypeApplyRecord processPartTypeApplyRecord) {
|
||||
return Result.OK(processPartTypeApplyRecordService.partRelevanceTypeUpdate(processPartTypeApplyRecord));
|
||||
}
|
||||
|
||||
/**
|
||||
* 确认生成
|
||||
* @param processPartTypeApplyRecord
|
||||
*/
|
||||
@AutoLog(value = "业务支持-关键零部件型号库-确认生成")
|
||||
@ApiOperation(value="业务支持-关键零部件型号库-确认生成", notes="关键零部件型号库-确认生成")
|
||||
@PostMapping("/affirmGenerate")
|
||||
public Result<?> affirmGenerate(@RequestBody ProcessPartTypeApplyRecord processPartTypeApplyRecord) {
|
||||
return Result.OK(processPartTypeApplyRecordService.affirmGenerate(processPartTypeApplyRecord));
|
||||
}
|
||||
|
||||
}
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
package com.jero.modules.activiti.process.part.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.jero.common.aspect.annotation.Dict;
|
||||
import com.jero.modules.laws.marketStandard.entity.LawsMarketStandardDetail;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* @TableName process_standard_compliance_check
|
||||
*/
|
||||
@TableName(value ="process_part_type_apply")
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@ApiModel(value="process_part_type_apply对象", description="关键零部件型号申请流程")
|
||||
public class ProcessPartTypeApply implements Serializable {
|
||||
|
||||
/**主键*/
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
@ApiModelProperty(value = "主键")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 流程实例id
|
||||
*/
|
||||
@ApiModelProperty(value = "流程实例id")
|
||||
private String processInstanceId;
|
||||
|
||||
/**创建人*/
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createBy;
|
||||
|
||||
/**创建日期*/
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
@ApiModelProperty(value = "创建日期")
|
||||
private Date createTime;
|
||||
|
||||
/**更新人*/
|
||||
@ApiModelProperty(value = "更新人")
|
||||
private String updateBy;
|
||||
|
||||
/**更新日期*/
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
@ApiModelProperty(value = "更新日期")
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 0表示未删除,1表示删除
|
||||
*/
|
||||
@ApiModelProperty(value = "0表示未删除,1表示删除")
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
|
||||
/**关键零部件型号ids*/
|
||||
@ApiModelProperty(value = "关键零部件型号ids")
|
||||
@TableField(exist = false)
|
||||
private String ids;
|
||||
|
||||
/**
|
||||
* 关键零部件型号列表
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private List<ProcessPartTypeApplyRecord> list;
|
||||
|
||||
}
|
||||
+245
@@ -0,0 +1,245 @@
|
||||
package com.jero.modules.activiti.process.part.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.jero.common.aspect.annotation.Dict;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.jeecgframework.poi.excel.annotation.Excel;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 关键零部件型号库
|
||||
*
|
||||
* @TableName laws_part_type
|
||||
*/
|
||||
@TableName(value ="process_part_type_apply_record")
|
||||
@Data
|
||||
public class ProcessPartTypeApplyRecord implements Serializable {
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
@ApiModelProperty(value = "主键ID")
|
||||
private String id;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
/**
|
||||
* 更新人
|
||||
*/
|
||||
@ApiModelProperty(value = "更新人")
|
||||
private String updateBy;
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
private Date updateTime;
|
||||
/**
|
||||
* 0表示未删除,1表示删除
|
||||
*/
|
||||
@TableLogic
|
||||
@ApiModelProperty(value = "0表示未删除,1表示删除")
|
||||
private Integer delFlag;
|
||||
/**
|
||||
* 零件号
|
||||
*/
|
||||
@ApiModelProperty(value = "零件号")
|
||||
@Excel(name = "零件号", width = 15)
|
||||
@NotBlank(message = "零件号")
|
||||
private String partNum;
|
||||
|
||||
/**
|
||||
* 关键零部件id
|
||||
*/
|
||||
@ApiModelProperty(value = "关键零部件id")
|
||||
private String partRelevanceId;
|
||||
|
||||
|
||||
/**
|
||||
* 关键零部件名称
|
||||
*/
|
||||
@ApiModelProperty(value = "关键零部件名称")
|
||||
@Excel(name = "关键零部件名称", width = 15)
|
||||
@NotBlank(message = "关键零部件名称不能为空")
|
||||
private String regPartNameCn;
|
||||
|
||||
/**
|
||||
* 关键零部件名称(英文)
|
||||
*/
|
||||
@ApiModelProperty(value = "关键零部件名称(英文)")
|
||||
@Excel(name = "关键零部件名称(英文)", width = 15)
|
||||
private String regPartNameEn;
|
||||
|
||||
/**
|
||||
* 零件名称
|
||||
*/
|
||||
@NotBlank(message = "零件名称")
|
||||
@ApiModelProperty(value = "零件名称")
|
||||
@Excel(name = "零件名称", width = 15)
|
||||
private String partName;
|
||||
|
||||
/**
|
||||
* 生产厂家
|
||||
*/
|
||||
@NotBlank(message = "生产厂家")
|
||||
@ApiModelProperty(value = "生产厂家")
|
||||
@Excel(name = "生产厂家", width = 15, dicCode = "production_factory_code", dictTable = "laws_part_production_factory", dicText = "production_factory")
|
||||
@Dict(dicCode = "production_factory_code", dictTable = "laws_part_production_factory", dicText = "production_factory")
|
||||
private String productionFactory;
|
||||
/**
|
||||
* 关键零部件型号
|
||||
*/
|
||||
@ApiModelProperty(value = "关键零部件型号")
|
||||
@Excel(name = "关键零部件型号", width = 15)
|
||||
private String partRelevanceType;
|
||||
/**
|
||||
* 适用车型
|
||||
*/
|
||||
@NotBlank(message = "适用车型不能为空")
|
||||
@ApiModelProperty(value = "适用车型")
|
||||
@Excel(name = "适用车型", width = 15, dicCode = "applicable_vehicle_type_part")
|
||||
@Dict(dicCode = "applicable_vehicle_type_part")
|
||||
private String applicableVehicleType;
|
||||
|
||||
/**
|
||||
* 技术特性与已有零件全部相同
|
||||
*/
|
||||
@NotBlank(message = "技术特性与已有零件全部相同")
|
||||
@ApiModelProperty(value = "技术特性与已有零件全部相同")
|
||||
@Dict(dicCode = "yn")
|
||||
private String technicalFeature;
|
||||
|
||||
/**
|
||||
* 型号型式
|
||||
*/
|
||||
@NotBlank(message = "型号型式不能为空")
|
||||
@ApiModelProperty(value = "型号型式")
|
||||
@Excel(name = "型号型式", width = 15, dicCode = "form_type")
|
||||
@Dict(dicCode = "form_type")
|
||||
private String formType;
|
||||
/**
|
||||
* 技术特性判定要求
|
||||
*/
|
||||
@ApiModelProperty(value = "技术特性判定要求")
|
||||
@Excel(name = "技术特性判定要求", width = 15)
|
||||
private String decisionRequirement;
|
||||
|
||||
/**
|
||||
* 已有零件对应零件号
|
||||
*/
|
||||
@ApiModelProperty(value = "已有零件对应零件号")
|
||||
@Excel(name = "已有零件对应零件号", width = 15)
|
||||
private String alreadyPartNum;
|
||||
/**
|
||||
* 已有零件对应零件号id
|
||||
*/
|
||||
@ApiModelProperty(value = "已有零件对应零件号id")
|
||||
private String alreadyPartNumId;
|
||||
/**
|
||||
* 分类(国内)
|
||||
*/
|
||||
@ApiModelProperty(value = "分类(国内)")
|
||||
@Excel(name = "分类(国内)", width = 15,dicCode = "classification")
|
||||
@Dict(dicCode = "classification")
|
||||
private String classification;
|
||||
/**
|
||||
* 适用市场
|
||||
*/
|
||||
@Excel(name = "适用市场", width = 15,dicCode = "market_state")
|
||||
@NotBlank(message = "适用市场不能为空")
|
||||
@ApiModelProperty(value = "适用市场")
|
||||
@Dict(dicCode = "market_state")
|
||||
private String applicableMarket;
|
||||
/**
|
||||
* 零部件认证交付物
|
||||
*/
|
||||
@ApiModelProperty(value = "零部件认证交付物")
|
||||
@Excel(name = "零部件认证交付物", width = 15,dicCode = "parts_certified_deliverables")
|
||||
@Dict(dicCode = "parts_certified_deliverables")
|
||||
private String partsCertifiedDeliverables;
|
||||
/**
|
||||
* 责任部门
|
||||
*/
|
||||
@NotBlank(message = "责任部门不能为空")
|
||||
@Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name")
|
||||
@ApiModelProperty(value = "责任部门")
|
||||
@Excel(name = "责任部门", width = 15, dictTable = "sys_depart", dicCode = "id", dicText = "depart_name")
|
||||
private String responsibleDepartment;
|
||||
/**
|
||||
* 责任部门专业模块
|
||||
*/
|
||||
@NotBlank(message = "责任部门专业模块不能为空")
|
||||
@ApiModelProperty(value = "责任部门专业模块")
|
||||
@Dict(dicCode = "responsible_module")
|
||||
@Excel(name = "责任部门专业模块", width = 15, dicCode = "responsible_module")
|
||||
private String responsibleModule;
|
||||
/**
|
||||
* 代替关键零部件型号
|
||||
*/
|
||||
@ApiModelProperty(value = "代替关键零部件型号")
|
||||
@Excel(name = "代替关键零部件型号", width = 15)
|
||||
private String replacePartNum;
|
||||
|
||||
|
||||
/**
|
||||
* 申请人
|
||||
*/
|
||||
@ApiModelProperty(value = "申请人")
|
||||
@Dict(dictTable = "sys_user", dicCode = "id", dicText = "username")
|
||||
@Excel(name = "申请人", width = 15, dictTable = "sys_user", dicCode = "id", dicText = "username")
|
||||
private String createBy;
|
||||
/**
|
||||
* 申请部门
|
||||
*/
|
||||
@ApiModelProperty(value = "申请部门")
|
||||
@Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name")
|
||||
@Excel(name = "申请部门", width = 15, dictTable = "sys_depart", dicCode = "id", dicText = "depart_name")
|
||||
@TableField(exist = false)
|
||||
private String depId;
|
||||
|
||||
/**
|
||||
* 完成时间
|
||||
*/
|
||||
@ApiModelProperty(value = "完成时间")
|
||||
@Excel(name = "完成时间",format = "yyyy-MM-dd")
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date successTime;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
@ApiModelProperty(value = "状态")
|
||||
@Excel(name = "状态", dicCode = "part_type_status")
|
||||
@Dict(dicCode = "part_type_status")
|
||||
private String status;
|
||||
|
||||
|
||||
/**
|
||||
* 替换前id
|
||||
*/
|
||||
@ApiModelProperty(value = "替换前id")
|
||||
private String lastId;
|
||||
|
||||
/**
|
||||
* 流程id
|
||||
*/
|
||||
@ApiModelProperty(value = "流程id")
|
||||
private String processId;
|
||||
|
||||
/**
|
||||
* FND+GPC关联
|
||||
*/
|
||||
@ApiModelProperty(value = "FND+GPC关联")
|
||||
private String fndGpc;
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package com.jero.modules.activiti.process.part.listener;
|
||||
|
||||
import com.jero.modules.activiti.process.part.service.IProcessPartTypeApplyService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.activiti.engine.delegate.DelegateExecution;
|
||||
import org.activiti.engine.delegate.ExecutionListener;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* @author liJiaRao
|
||||
* @date 2023-06-18 15:43
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class ProcessPartTypeApplyEndListener implements ExecutionListener {
|
||||
|
||||
@Resource
|
||||
private IProcessPartTypeApplyService processPartTypeApplyService;
|
||||
|
||||
@Override
|
||||
public void notify(DelegateExecution delegateExecution) {
|
||||
processPartTypeApplyService.flowListener(delegateExecution);
|
||||
}
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package com.jero.modules.activiti.process.part.mapper;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.jero.modules.activiti.process.part.entity.ProcessPartTypeApply;
|
||||
|
||||
/**
|
||||
* @author
|
||||
* @description 针对表【process_standard_import】的数据库操作Mapper
|
||||
* @createDate 2024-07-04 10:21:21
|
||||
* @Entity
|
||||
*/
|
||||
public interface ProcessPartTypeApplyMapper extends BaseMapper<ProcessPartTypeApply> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package com.jero.modules.activiti.process.part.mapper;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.jero.modules.activiti.process.part.entity.ProcessPartTypeApplyRecord;
|
||||
import com.jero.modules.laws.part.entity.LawsPartType;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author
|
||||
* @description 针对表【process_standard_import】的数据库操作Mapper
|
||||
* @createDate 2024-07-04 10:21:21
|
||||
* @Entity
|
||||
*/
|
||||
public interface ProcessPartTypeApplyRecordMapper extends BaseMapper<ProcessPartTypeApplyRecord> {
|
||||
|
||||
List<ProcessPartTypeApplyRecord> pageList(@Param(Constants.WRAPPER) QueryWrapper<ProcessPartTypeApplyRecord> queryWrapper);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.jero.modules.activiti.process.part.mapper.ProcessPartTypeApplyMapper">
|
||||
|
||||
</mapper>
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.jero.modules.activiti.process.part.mapper.ProcessPartTypeApplyRecordMapper">
|
||||
|
||||
<select id="pageList"
|
||||
resultType="com.jero.modules.activiti.process.part.entity.ProcessPartTypeApplyRecord">
|
||||
select
|
||||
l1.reg_part_name_en,
|
||||
l1.reg_part_name_cn,
|
||||
l1.form_type,
|
||||
l1.system_code,
|
||||
l1.decision_requirement,
|
||||
l1.classification,
|
||||
l1.applicable_market,
|
||||
l1.parts_certified_deliverables,
|
||||
l1.responsible_department,
|
||||
l1.responsible_module,
|
||||
l1.remark,
|
||||
l1.fnd_gpc,
|
||||
l1.id,
|
||||
l1.part_num,
|
||||
l1.part_relevance_id,
|
||||
l1.part_name,
|
||||
l1.production_factory,
|
||||
l1.applicable_vehicle_type,
|
||||
l1.technical_feature,
|
||||
l1.already_part_num_id,
|
||||
l1.already_part_num,
|
||||
l1.status,
|
||||
l1.success_time,
|
||||
l1.part_relevance_type,
|
||||
l1.replace_part_num,
|
||||
l1.create_by,
|
||||
l1.last_id,
|
||||
l1.create_time,
|
||||
s3.id as dep_id
|
||||
from process_part_type_apply_record l1
|
||||
left join sys_user s1 on s1.username = l1.create_by
|
||||
left join sys_user_depart s2 on s2.user_id = s1.id
|
||||
left join sys_depart s3 on s3.id = s2.dep_id
|
||||
${ew.customSqlSegment}
|
||||
</select>
|
||||
</mapper>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user