Merge remote-tracking branch 'origin/dev_third_stage' into dev_third_stage

This commit is contained in:
liyawei
2022-07-01 16:19:20 +08:00
76 changed files with 2950 additions and 1795 deletions
@@ -1 +1,10 @@
-- 一阶段的bug修复导致的字段增删、必须数据增删添加到此处
-- 一阶段的bug修复导致的字段增删、必须数据增删添加到此处
ALTER TABLE `sys_role_permission`
MODIFY COLUMN `operate_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作ip' AFTER `operate_date`;
-- 6月23日部署上线
ALTER TABLE `dummy_inventory_info`
ADD COLUMN `verify_remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '验证备注' AFTER `applicable_supplement`,
ADD COLUMN `prehomo_remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'pre备注' AFTER `verify_remark`,
ADD COLUMN `design_remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设计备注' AFTER `prehomo_remark`;
@@ -10,7 +10,7 @@ Target Server Type : MYSQL
Target Server Version : 50733
File Encoding : 65001
Date: 2022-06-18 16:09:03
Date: 2022-06-21 22:25:01
*/
SET FOREIGN_KEY_CHECKS=0;
@@ -29,7 +29,7 @@ CREATE TABLE `buss_document_library` (
`region` varchar(100) DEFAULT NULL COMMENT '适用地区',
`standard_system` varchar(100) DEFAULT NULL COMMENT '标准体系',
`state` varchar(100) DEFAULT NULL COMMENT '状态',
`title` varchar(100) DEFAULT NULL COMMENT '中文标题',
`title` varchar(500) DEFAULT NULL COMMENT '中文标题',
`issue_time` datetime DEFAULT NULL COMMENT '发布日期',
`implement_time` datetime DEFAULT NULL COMMENT '在产车实施日期',
`replace_standard` varchar(100) DEFAULT NULL COMMENT '代替标准',
@@ -42,7 +42,7 @@ CREATE TABLE `buss_document_library` (
`approval_draft` varchar(255) DEFAULT NULL COMMENT '报批稿',
`exposure_draft` varchar(255) DEFAULT NULL COMMENT '征求意见稿',
`serial_number` varchar(100) DEFAULT NULL COMMENT '编号',
`title_en` varchar(200) DEFAULT NULL COMMENT '英文标题',
`title_en` varchar(500) DEFAULT NULL COMMENT '英文标题',
`technology_territory` varchar(1000) DEFAULT NULL COMMENT '技术领域',
`shi4_yong4_fan4_wei2` varchar(2000) DEFAULT NULL COMMENT '适用范围',
`xin1_che1_xing2_shi2_shi1_ri4_qi1` datetime DEFAULT NULL COMMENT '新车型实施日期',
@@ -206,7 +206,7 @@ CREATE TABLE `dummy_inventory_info` (
`update_time` datetime DEFAULT NULL COMMENT '更新日期',
`sys_org_code` varchar(64) DEFAULT NULL COMMENT '所属部门',
`serial_number` varchar(100) DEFAULT NULL COMMENT '编号',
`title` varchar(100) DEFAULT NULL COMMENT '标题',
`title` varchar(500) DEFAULT NULL COMMENT '标题',
`shi4_yong4_fan4_wei2` varchar(100) DEFAULT NULL COMMENT '适用范围',
`state` varchar(1) DEFAULT NULL COMMENT '状态',
`technology_territory` varchar(1000) DEFAULT NULL COMMENT '技术领域',
@@ -432,8 +432,8 @@ CREATE TABLE `ocr_record` (
`sync_state` varchar(32) DEFAULT NULL COMMENT '同步情况',
`connect_id` varchar(50) DEFAULT NULL COMMENT '文档库关联文件id',
`check_flag` varchar(1) DEFAULT NULL COMMENT '校核锁定标识',
`stand_name` varchar(255) DEFAULT NULL COMMENT '标题',
`stand_name_en` varchar(255) DEFAULT NULL COMMENT '英文标题',
`stand_name` varchar(500) DEFAULT NULL COMMENT '标题',
`stand_name_en` varchar(500) DEFAULT NULL COMMENT '英文标题',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
@@ -1346,7 +1346,7 @@ INSERT INTO `onl_cgform_field` VALUES ('142ab64194ed716d13d4072eed986481', 'c041
INSERT INTO `onl_cgform_field` VALUES ('14990381dc845a9198a4128ed1b59218', '402813817f0b96ae017f0b96ae150000', 'code', null, '类型编码', '4', 'code', '0', '1', 'string', '100', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', 'admin', '2022-03-04 17:36:22', '2022-02-18 14:48:19', 'admin', '', '', '', '', '', null, '0', null, null, '0', null, null, null, '0', null, null);
INSERT INTO `onl_cgform_field` VALUES ('14ab86b4d9de68bc3eb01af6b07eaf51', 'adf3934df41447aba921e5466f23dfff', 'attestation_rank', 'aaaa', '认证级别', '20', null, '0', '1', 'string', '100', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', 'admin', '2022-04-11 15:39:04', '2022-04-08 17:18:31', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('14c7e5062e0fb7f5db5138acc6bede28', '402813817eebc6c9017eebc6d4bc0004', 'id_type', null, '主键类型', '11', 'id_type', '0', '1', 'string', '100', '0', null, null, null, null, 'text', null, '120', null, '0', null, null, '0', '1', '1', '0', 'single', null, null, null, null, '2022-02-12 10:33:04', 'admin', null, null, null, null, null, null, null, null, null, null, null, null, null, '0', null, null);
INSERT INTO `onl_cgform_field` VALUES ('1501848401568935937', '48308196e7b04761b533dc31bc899707', 'title_en', 'English Title', '英文标题', '4', null, '0', '1', 'String', '200', '0', null, null, null, null, '1', null, null, null, '1', null, null, '1', '1', '1', '1', null, null, null, 'admin', '2022-06-06 16:05:28', null, null, null, null, null, null, null, null, null, null, null, null, '1499657602378825729', '1', '1', '0', '1', null);
INSERT INTO `onl_cgform_field` VALUES ('1501848401568935937', '48308196e7b04761b533dc31bc899707', 'title_en', 'English Title', '英文标题', '4', null, '0', '1', 'String', '500', '0', null, null, null, null, '1', null, null, null, '1', null, null, '1', '1', '1', '1', null, null, null, 'admin', '2022-06-06 16:05:28', null, null, null, null, null, null, null, null, null, null, null, null, '1499657602378825729', '1', '1', '0', '1', null);
INSERT INTO `onl_cgform_field` VALUES ('1506541101228556290', '48308196e7b04761b533dc31bc899707', 'xin1_che1_xing2_shi2_shi1_ri4_qi1', 'New Type Execution Date', '新车型实施日期', '11', null, '0', '1', 'Date', '50', '0', null, '', null, null, '5', null, null, null, '0', null, null, '1', '1', '0', '1', null, null, null, 'admin', '2022-06-06 16:05:28', null, null, null, null, null, null, null, null, null, null, null, null, '1499657602378825729', '1', '1', '0', '1', '1493782653286047745');
INSERT INTO `onl_cgform_field` VALUES ('1529373706885799937', 'c998a34ea4b84089932197ed0705c757', 'zhan3_shi4_shun4_xu4', 'sortNumber', '展示顺序', '11', null, '0', '1', 'Double', '100', '0', null, null, null, null, '2', null, null, null, '1', null, null, '0', '1', '1', '1', null, null, null, 'ning.chen', '2022-05-25 16:08:01', '2022-05-25 16:08:01', 'ning.chen', null, null, null, null, null, null, null, null, null, null, null, null, null, '0', '0', null);
INSERT INTO `onl_cgform_field` VALUES ('157f9119129a2126fd15dc127b9f6f6c', 'a234bb12c0174f9d9d451ae138169b6a', 'content_json', 'aaaa', '内容', '9', null, '0', '1', 'Text', '0', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-04-11 17:32:20', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
@@ -1356,7 +1356,7 @@ INSERT INTO `onl_cgform_field` VALUES ('161c35a16e92682972dd1aeb26151fa2', '9ca1
INSERT INTO `onl_cgform_field` VALUES ('169e043518f5f97536d4f03ba47c7360', '8c8ab9e99505430a85eb24b9c325d282', 'update_time', 'update_time', '更新日期', '15', null, '0', '1', 'Date', '20', '0', '', '', '', '', 'datetime', '', '120', null, '0', '', '', '0', '0', '0', '0', 'single', '', '', 'admin', '2022-04-21 10:24:36', '2022-04-11 14:59:13', 'admin', '', '', '', '', '', null, '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('16a9476d1c674bc63dde5a8768334444', 'a44f101118744c83bbec236d64f755db', 'text_data', 'aaaa', '文本类型数据', '7', null, '0', '1', 'string', '255', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-05-18 10:53:52', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('16b24e8bf70c86b8a8228f4de75582a8', '402813817f0b96ae017f0b96ae150000', 'name', null, '类型名称', '3', 'name', '0', '1', 'string', '100', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', 'admin', '2022-03-04 17:36:22', '2022-02-18 14:48:19', 'admin', '', '', '', '', '', null, '0', null, null, '0', null, null, null, '0', null, null);
INSERT INTO `onl_cgform_field` VALUES ('16be02f77d65d98f80a2c1af6e8d6563', '465c69b795614d72b9e64ee3a980402b', 'stand_name_en', 'Title', '英文标题', '9', null, '0', '1', 'string', '255', '0', '', '', '', '', '1', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', 'admin', '2022-05-31 14:25:45', '2022-05-31 09:35:26', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, '0', null, null);
INSERT INTO `onl_cgform_field` VALUES ('16be02f77d65d98f80a2c1af6e8d6563', '465c69b795614d72b9e64ee3a980402b', 'stand_name_en', 'Title', '英文标题', '9', null, '0', '1', 'string', '500', '0', '', '', '', '', '1', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', 'admin', '2022-05-31 14:25:45', '2022-05-31 09:35:26', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, '0', null, null);
INSERT INTO `onl_cgform_field` VALUES ('16e250c97c10fecde7ab664445edb6e8', '8ed012c5f28842bbb76c6882cca3eea5', 'update_time', 'aaaa', '更新日期', '5', null, '0', '1', 'Date', '20', '0', '', '', '', '', 'datetime', '', '120', null, '0', '', '', '0', '0', '0', '0', 'single', '', '', 'admin', '2022-05-13 16:48:06', '2022-05-05 14:59:12', 'admin', '', '', '', '', '', null, '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('170b7c84d575af41d39f51291b3a3565', '1fadedad93cf418ca3f369460f7c4cda', 'sys_org_code', 'aaaa', '所属部门', '6', null, '0', '1', 'string', '64', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '0', '0', '0', 'single', '', '', 'admin', '2022-03-02 23:31:30', '2022-03-02 15:51:10', 'admin', '', '', '', '', '', null, '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('17f0065cd5a3174c66589d7fe0c00e0d', '8972ea4b5c9f421baea31d07cc8e4bc9', 'attestation_engineer', 'aaaa', '认证工程师', '6', null, '0', '1', 'string', '100', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-04-11 15:02:34', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
@@ -1461,7 +1461,7 @@ INSERT INTO `onl_cgform_field` VALUES ('2b57e2f3275282b53f703ed52f9f32c9', '9ca1
INSERT INTO `onl_cgform_field` VALUES ('2b691a978bda6909a6b2f09215cd219e', '465c69b795614d72b9e64ee3a980402b', 'json_file_code', 'aaaa', 'json文件编码', '19', null, '0', '1', 'Text', '0', '0', '', '', '', '', '1', '', '120', null, '0', '', '', '0', '0', '0', '0', 'single', '', '', 'admin', '2022-05-31 14:25:45', '2022-02-16 11:40:33', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, '0', null, null);
INSERT INTO `onl_cgform_field` VALUES ('2bff220ecb82e2a3fda3375bec802b96', '402813817f0b96ae017f0b96ae150000', 'has_child', null, '是否有子节点', '11', 'has_child', '0', '1', 'string', '3', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '0', '0', '0', 'single', '', '', 'admin', '2022-03-04 17:36:23', '2022-02-18 14:48:19', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, '0', null, null);
INSERT INTO `onl_cgform_field` VALUES ('2c087d03c8a2c4229ac953f1a3ed5963', '5a0de4646b964d3b8c3c8d36b08668b3', 'params_template_id', 'aaaa', '参数模板id', '12', null, '0', '1', 'string', '36', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-05-18 10:56:21', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('2c13cf479aed3cc6075c329834b0681f', '465c69b795614d72b9e64ee3a980402b', 'stand_name', 'Title', '标题', '8', null, '0', '1', 'string', '255', '0', '', '', '', '', '1', '', '120', null, '1', '', '', '1', '1', '1', '0', 'single', '', '', 'admin', '2022-05-31 14:25:45', '2022-04-14 11:11:10', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, '0', null, null);
INSERT INTO `onl_cgform_field` VALUES ('2c13cf479aed3cc6075c329834b0681f', '465c69b795614d72b9e64ee3a980402b', 'stand_name', 'Title', '标题', '8', null, '0', '1', 'string', '500', '0', '', '', '', '', '1', '', '120', null, '1', '', '', '1', '1', '1', '0', 'single', '', '', 'admin', '2022-05-31 14:25:45', '2022-04-14 11:11:10', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, '0', null, null);
INSERT INTO `onl_cgform_field` VALUES ('2c5f7d8634acbbb0fb370168fdeab7aa', '42baaa106e80443391523133807e6456', 'nio_number', 'aaaa', 'nio编号', '10', null, '0', '1', 'string', '15', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-04-29 13:48:51', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('2c8c0ae0d5f1f31f1a5892352c629b9d', 'becc0b2db5fb4511920bb34a94dd53b7', 'duty_territory', 'aaaa', '责任领域', '12', null, '0', '1', 'string', '50', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-04-29 13:46:26', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('2da38cebeb64b612dd5112956f0a26b5', '402813817f3e397e017f3e39831e0002', 'password', null, '密码', '4', 'password', '0', '1', 'string', '255', '0', null, null, null, null, 'text', null, '120', null, '0', null, null, '0', '1', '1', '0', 'single', null, null, null, null, '2022-02-28 10:47:11', 'admin', null, null, null, null, null, null, null, null, null, null, null, null, null, '0', null, null);
@@ -1615,7 +1615,7 @@ INSERT INTO `onl_cgform_field` VALUES ('4d835e89149bd552f9dae019c1ce8d14', 'c7ce
INSERT INTO `onl_cgform_field` VALUES ('4d88e479e4c0a22a9125298fdddb1375', 'dc4a39d84e8c4936913966306bd3a08e', 'params_template_name', 'aaaa', '参数模板', '7', null, '0', '1', 'string', '50', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', 'admin', '2022-04-21 11:03:56', '2022-04-21 10:38:17', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('4d98c6a5998ee22e4fb6f1818e67d2d3', 'd430c9dfb1014e41a5a823ae947e3804', 'duty_territory', 'aaaa', '责任领域', '12', null, '0', '1', 'string', '50', '0', '', 'duty_territory', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-04-22 10:39:25', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('4da707d6c70977c4d941c64079395651', 'dc4a39d84e8c4936913966306bd3a08e', 'description', 'aaaa', '内容说明', '10', null, '0', '1', 'string', '300', '0', '', '', '', '', 'textarea', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', 'admin', '2022-04-21 11:03:56', '2022-04-21 10:38:17', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('4e7cbe27c3b7575dfa1ef97f9b2fe02f', 'adf3934df41447aba921e5466f23dfff', 'title', 'aaaa', '标题', '9', null, '0', '1', 'string', '100', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', 'admin', '2022-04-11 15:39:03', '2022-04-08 17:18:31', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('4e7cbe27c3b7575dfa1ef97f9b2fe02f', 'adf3934df41447aba921e5466f23dfff', 'title', 'aaaa', '标题', '9', null, '0', '1', 'string', '500', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', 'admin', '2022-04-11 15:39:03', '2022-04-08 17:18:31', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('4ea375466c169714b494c0c31cea5a6b', '8972ea4b5c9f421baea31d07cc8e4bc9', 'create_user_id', 'aaaa', '创建人', '8', null, '0', '1', 'string', '100', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '0', '0', '0', 'single', '', '', null, null, '2022-04-11 15:02:34', 'admin', '', '', '', '', '', null, '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('4eaa96dea28e30327c30bb41a21ab747', '69bd6189a60b4cc19cd97fa3e6c0673b', 'id', 'aaaa', '主键', '1', null, '1', '0', 'string', '36', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '0', '0', '1', 'single', '', '', 'admin', '2022-01-25 11:17:23', '2022-01-25 11:14:27', 'admin', '', '', '', '', '', null, '0', null, null, '0', null, null, null, '0', null, null);
INSERT INTO `onl_cgform_field` VALUES ('4f22a60a0c65c6e3e70417c4a5ddad6e', '9e637cee15834bd19ea99d6889d1d1ad', 'params_template_id', 'aaaa', '参数模板id', '12', null, '0', '1', 'string', '50', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-05-05 14:28:50', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
@@ -1707,7 +1707,7 @@ INSERT INTO `onl_cgform_field` VALUES ('65ae4ae4e1a15608dd0028c678ecb17a', 'e0b3
INSERT INTO `onl_cgform_field` VALUES ('65c60e6aec2098a28e7cd60fb1966c84', '299fb71b0d0b435ba1a25c4a9ae6ef3e', 'motor', 'aaaa', '电机', '11', null, '0', '1', 'string', '20', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', 'admin', '2022-05-13 16:52:21', '2022-05-12 15:45:48', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('65f264e3af7ea7a0fd67c9ef6c84defd', '402813817f3e397e017f3e39831e0002', 'third_type', null, '第三方类型', '15', 'third_type', '0', '1', 'string', '100', '0', null, null, null, null, 'text', null, '120', null, '0', null, null, '0', '1', '1', '0', 'single', null, null, null, null, '2022-02-28 10:47:11', 'admin', null, null, null, null, null, null, null, null, null, null, null, null, null, '0', null, null);
INSERT INTO `onl_cgform_field` VALUES ('65f311b83ac3efec631d347b6042ee84', '402813817eebc6c9017eebc6d4bc0004', 'id_sequence', null, '主键生成序列', '10', 'id_sequence', '0', '1', 'string', '200', '0', null, null, null, null, 'text', null, '120', null, '0', null, null, '0', '1', '1', '0', 'single', null, null, null, null, '2022-02-12 10:33:04', 'admin', null, null, null, null, null, null, null, null, null, null, null, null, null, '0', null, null);
INSERT INTO `onl_cgform_field` VALUES ('6622a83abb0bd1b9ac0ab6bd7bbf0363', '2937b7c89eaf4145af393b64ab43e132', 'title', 'aaaa', '标题', '10', null, '0', '1', 'string', '100', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-05-05 14:54:22', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('6622a83abb0bd1b9ac0ab6bd7bbf0363', '2937b7c89eaf4145af393b64ab43e132', 'title', 'aaaa', '标题', '10', null, '0', '1', 'string', '500', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-05-05 14:54:22', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('663f5d515bd7ca8228f73f0e820f2845', '2937b7c89eaf4145af393b64ab43e132', 'design_duty', 'aaaa', '设计符合性确认-责任人', '27', null, '0', '1', 'string', '100', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-05-05 14:54:22', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('666cfb19bdab5ab4e36183e3a095f571', 'b2c4096566dd4fab8b6476ecd0a5ea52', 'update_by', null, '更新人', '12', null, '0', '1', 'string', '50', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-04-20 17:07:02', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('66780fb026cfb89179b9d7cb90fc08f0', '891a5f26e9224ddfb811441c1947d20e', 'params_batch', 'aaaa', '参数批次', '12', null, '0', '1', 'string', '50', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '0', '0', '0', 'single', '', '', 'admin', '2022-05-18 11:14:19', '2022-05-18 10:49:36', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, '0', null, null);
@@ -1900,7 +1900,7 @@ INSERT INTO `onl_cgform_field` VALUES ('921a95944d0f6a780bb4e8eea10858eb', '4830
INSERT INTO `onl_cgform_field` VALUES ('9265e26a846cf863add004b29b4c124a', 'a129e6617bec42fbaa205eb08076103a', 'field_show_type', 'aaaa', '表单控件类型', '10', null, '0', '0', 'string', '10', '0', '', 'field_show_type', 'onl_cgform_field', 'field_show_type', 'list', '', '120', '*', '0', '', '', '0', '1', '1', '0', 'single', '', '', 'admin', '2022-02-15 17:22:01', '2022-01-25 15:51:14', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, '0', null, null);
INSERT INTO `onl_cgform_field` VALUES ('926820302b4821efccdb5eff69b693f6', '8972ea4b5c9f421baea31d07cc8e4bc9', 'update_time', 'aaaa', '更新日期', '11', null, '0', '1', 'Date', '20', '0', '', '', '', '', 'datetime', '', '120', null, '0', '', '', '0', '0', '0', '0', 'single', '', '', null, null, '2022-04-11 15:02:34', 'admin', '', '', '', '', '', null, '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('926e96f2025e5df1943044437ede6af7', '402813817eebc6c9017eebc6d4bc0004', 'table_name', null, '表名', '2', 'table_name', '0', '0', 'string', '50', '0', null, null, null, null, 'text', null, '120', null, '0', null, null, '0', '1', '1', '0', 'single', null, null, null, null, '2022-02-12 10:33:04', 'admin', null, null, null, null, null, null, null, null, null, null, null, null, null, '0', null, null);
INSERT INTO `onl_cgform_field` VALUES ('92e6c5d7e92c369f5a341408e0dc897d', 'c04152cd08634d898b6140a64009bd9d', 'title', 'aaaa', '标题', '9', null, '0', '1', 'string', '100', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-04-14 10:36:35', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('92e6c5d7e92c369f5a341408e0dc897d', 'c04152cd08634d898b6140a64009bd9d', 'title', 'aaaa', '标题', '9', null, '0', '1', 'string', '500', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-04-14 10:36:35', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('92f4ffc8572fbe2d82188c57a1a83801', '0932e2bf6b824439ac8f8fd58350094b', 'params_template_id', 'aaaa', '参数模板id', '18', null, '0', '1', 'string', '36', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '0', '0', '0', 'single', '', '', 'admin', '2022-05-18 14:37:53', '2022-05-12 13:49:55', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('9316b4d024d06739be32302f88bc1d80', '69bd6189a60b4cc19cd97fa3e6c0673b', 'sys_org_code', 'aaaa', '所属部门', '6', null, '0', '1', 'string', '64', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '1', '1', '1', '0', 'single', '', '', 'admin', '2022-01-25 11:17:24', '2022-01-25 11:14:27', 'admin', '', '', '', '', '', null, '0', null, null, '0', null, null, null, '0', null, null);
INSERT INTO `onl_cgform_field` VALUES ('931bac2053e6bd795f0e350a6aad0ef4', '5a0de4646b964d3b8c3c8d36b08668b3', 'params_name', 'aaaa', '参数名称', '8', null, '0', '1', 'string', '30', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-05-18 10:56:21', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
@@ -1923,7 +1923,7 @@ INSERT INTO `onl_cgform_field` VALUES ('985f22d06d72e4b70c1dbc3b040eb8c8', 'f689
INSERT INTO `onl_cgform_field` VALUES ('9871ef70786ff8cc0f4126f3866ad8bc', '256924c625f04ae7920191ad813dff4a', 'description', 'aaaa', '参数说明', '9', null, '0', '1', 'string', '200', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', 'admin', '2022-04-22 14:57:05', '2022-04-22 11:33:08', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('987b02e5d72fc54c9a70c8d5c7866dbd', '6cf7c541349040248439eb73d588c3dd', 'project_id', 'aaaa', '项目id', '12', null, '0', '1', 'string', '50', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-05-12 13:44:17', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('98949ccfd329486e94a7b2df2419b6a3', '2937b7c89eaf4145af393b64ab43e132', 'attestation_type', 'aaaa', '认证类型', '16', null, '0', '1', 'string', '100', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-05-05 14:54:22', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('9904aaba0b0aeb5dbdb4a9ed9cbdd726', '48308196e7b04761b533dc31bc899707', 'title', 'Chinese Title', '中文标题', '3', null, '0', '1', 'string', '100', '0', '', '', '', '', '1', '', '120', null, '1', '', '', '1', '1', '1', '1', 'single', '', '', 'admin', '2022-06-06 16:05:28', '2022-01-21 14:33:40', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', '1499657602378825729', '1', '1', '0', '1', null);
INSERT INTO `onl_cgform_field` VALUES ('9904aaba0b0aeb5dbdb4a9ed9cbdd726', '48308196e7b04761b533dc31bc899707', 'title', 'Chinese Title', '中文标题', '3', null, '0', '1', 'string', '500', '0', '', '', '', '', '1', '', '120', null, '1', '', '', '1', '1', '1', '1', 'single', '', '', 'admin', '2022-06-06 16:05:28', '2022-01-21 14:33:40', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', '1499657602378825729', '1', '1', '0', '1', null);
INSERT INTO `onl_cgform_field` VALUES ('9926d139e0ce42d06f88899a96a4758f', '0932e2bf6b824439ac8f8fd58350094b', 'control_type', 'aaaa', '控件类型', '14', null, '0', '1', 'string', '50', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '0', '0', '0', 'single', '', '', 'admin', '2022-05-18 14:37:53', '2022-05-12 13:49:55', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('998263a84918664ab2effb4f6ca05e2a', 'd430c9dfb1014e41a5a823ae947e3804', 'control_type', 'aaaa', '控件类型', '15', null, '0', '1', 'string', '50', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '1', '1', '0', 'single', '', '', null, null, '2022-04-22 10:39:25', 'admin', '', '', '', '', '', 'text', '0', null, null, '0', null, null, null, null, null, null);
INSERT INTO `onl_cgform_field` VALUES ('998440cf076aee7a7e1ed196ab95983e', '65525fc5732b44d2af16d4e908747e15', 'id', 'aaaa', '主键', '1', null, '1', '0', 'string', '36', '0', '', '', '', '', 'text', '', '120', null, '0', '', '', '0', '0', '0', '1', 'single', '', '', null, null, '2022-04-29 15:39:10', 'admin', '', '', '', '', '', null, '0', null, null, '0', null, null, null, null, null, null);
@@ -3240,7 +3240,7 @@ CREATE TABLE `project_laws_inventory` (
`sys_org_code` varchar(64) DEFAULT NULL COMMENT '所属部门',
`project_library_id` varchar(36) DEFAULT NULL COMMENT '项目库id',
`serial_number` varchar(100) DEFAULT NULL COMMENT '编号',
`title` varchar(100) DEFAULT NULL COMMENT '标题',
`title` varchar(500) DEFAULT NULL COMMENT '标题',
`subtitle` varchar(255) DEFAULT NULL COMMENT '子标题',
`corresponding_standard` varchar(1000) DEFAULT NULL COMMENT '对应标准',
`implement_type` varchar(100) DEFAULT NULL COMMENT '实施类别',
@@ -3636,7 +3636,7 @@ CREATE TABLE `project_version_info` (
`history_versions_id` varchar(32) DEFAULT NULL COMMENT '法规清单版本id',
`project_library_id` varchar(32) DEFAULT NULL COMMENT '项目库id',
`serial_number` varchar(100) DEFAULT NULL COMMENT '编号',
`title` varchar(100) DEFAULT NULL COMMENT '标题',
`title` varchar(500) DEFAULT NULL COMMENT '标题',
`subtitle` varchar(100) DEFAULT NULL COMMENT '子标题',
`corresponding_standard` varchar(1000) DEFAULT NULL COMMENT '对应标准',
`implement_type` varchar(100) DEFAULT NULL COMMENT '实施类别',
File diff suppressed because one or more lines are too long
@@ -6,10 +6,11 @@ package com.jero.common.constant.enums;
* @auth zhn
*/
public enum MessageTypeEnum {
READ("订阅通知","1"),
WARN("预警信息","2"),
PUSH("转发推送","3"),
COLLECT("认证消息","4");
READ("Subscription Notification","1"),
WARN("Early Warning","2"),
PUSH("Share / Forward","3"),
HOMO_TASK("Homo Parameter Task","4"),
TASK("Regulation Compliance Task", "5");
String name;
String value;
@@ -486,53 +486,58 @@ public class QueryGenerator {
}
name = oConvertUtils.camelToUnderline(name);
log.info("--查询规则-->"+name+" "+rule.getValue()+" "+value);
switch (rule) {
case GT:
queryWrapper.gt(name, value);
break;
case GE:
queryWrapper.ge(name, value);
break;
case LT:
queryWrapper.lt(name, value);
break;
case LE:
queryWrapper.le(name, value);
break;
case EQ:
case EQ_WITH_ADD:
queryWrapper.eq(name, value);
break;
case NE:
queryWrapper.ne(name, value);
break;
case IN:
if(value instanceof String) {
queryWrapper.in(name, (Object[])value.toString().split(","));
}else if(value instanceof String[]) {
queryWrapper.in(name, (Object[]) value);
if(" is null ".equals(value)){
queryWrapper.isNull(name);
}else{
switch (rule) {
case GT:
queryWrapper.gt(name, value);
break;
case GE:
queryWrapper.ge(name, value);
break;
case LT:
queryWrapper.lt(name, value);
break;
case LE:
queryWrapper.le(name, value);
break;
case EQ:
case EQ_WITH_ADD:
queryWrapper.eq(name, value);
break;
case NE:
queryWrapper.ne(name, value);
break;
case IN:
if(value instanceof String) {
queryWrapper.in(name, (Object[])value.toString().split(","));
}else if(value instanceof String[]) {
queryWrapper.in(name, (Object[]) value);
}
//update-begin-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671
else if(value.getClass().isArray()) {
queryWrapper.in(name, (Object[])value);
}else {
queryWrapper.in(name, value);
}
//update-end-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671
break;
case LIKE:
queryWrapper.like(name, value);
break;
case LEFT_LIKE:
queryWrapper.likeLeft(name, value);
break;
case RIGHT_LIKE:
queryWrapper.likeRight(name, value);
break;
default:
log.info("--查询规则未匹配到---");
break;
}
//update-begin-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671
else if(value.getClass().isArray()) {
queryWrapper.in(name, (Object[])value);
}else {
queryWrapper.in(name, value);
}
//update-end-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671
break;
case LIKE:
queryWrapper.like(name, value);
break;
case LEFT_LIKE:
queryWrapper.likeLeft(name, value);
break;
case RIGHT_LIKE:
queryWrapper.likeRight(name, value);
break;
default:
log.info("--查询规则未匹配到---");
break;
}
}
/**
*
@@ -1201,7 +1201,7 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
sysAnnouncement.setDelFlag("0");
sysAnnouncement.setSendStatus("0");
sysAnnouncement.setSendTime(new Date());
sysAnnouncement.setMsgCategory(MessageTypeEnum.COLLECT.getValue());//消息类型
sysAnnouncement.setMsgCategory(MessageTypeEnum.HOMO_TASK.getValue());//消息类型
sysAnnouncement.setMsgType(CommonConstant.MSG_TYPE_UESR);//指定用户
sysAnnouncement.setMsgContent(content);
sysAnnouncement.setMsgContentInfo(contentInfo);
@@ -1210,7 +1210,7 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
// 发送飞书消息
try {
feishuService.batchSendMessage(thirdIds, content, MessageTypeEnum.COLLECT.getName(), hrefFeishu);
feishuService.batchSendMessage(thirdIds, content, MessageTypeEnum.HOMO_TASK.getName(), hrefFeishu);
} catch (IOException e) {
log.error("飞书消息推送失败");
}
@@ -1269,7 +1269,7 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
sysAnnouncement.setDelFlag("0");
sysAnnouncement.setSendStatus("0");
sysAnnouncement.setSendTime(new Date());
sysAnnouncement.setMsgCategory(MessageTypeEnum.COLLECT.getValue());//消息类型
sysAnnouncement.setMsgCategory(MessageTypeEnum.HOMO_TASK.getValue());//消息类型
sysAnnouncement.setMsgType(CommonConstant.MSG_TYPE_UESR);//指定用户
sysAnnouncement.setMsgContent(content);
sysAnnouncement.setMsgContentInfo(contentInfo);
@@ -1278,7 +1278,7 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl<ParamsCollec
// 发送飞书消息
try {
feishuService.batchSendMessage(thirdIds, content, MessageTypeEnum.COLLECT.getName(), hrefFeishu);
feishuService.batchSendMessage(thirdIds, content, MessageTypeEnum.HOMO_TASK.getName(), hrefFeishu);
} catch (IOException e) {
log.error("飞书消息推送失败");
}
@@ -4,10 +4,10 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.api.vo.Result;
import com.jero.common.constant.CommonConstant;
import com.jero.common.constant.enums.CutEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.RestUtil;
import com.jero.common.util.TokenUtils;
import com.jero.common.util.oConvertUtils;
@@ -19,6 +19,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpHeaders;
@@ -47,6 +48,8 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
@@ -341,7 +344,7 @@ public class CommonController {
* @param response
*/
@GetMapping(value = "/downLoadFile")
public void downLoadFromCos(String id,HttpServletRequest request, HttpServletResponse response) {
public void downLoadFromCos(String id,HttpServletRequest request, HttpServletResponse response,String userName) {
if(StringUtils.isBlank(id)){
throw new JeroBootException("参数信息不全");
}
@@ -355,6 +358,7 @@ public class CommonController {
}
InputStream inputStream = null;
OutputStream outputStream = null;
File newFile =null;
try {
String fileName = "";
//本地下载
@@ -367,9 +371,18 @@ public class CommonController {
fileName = ossFile.getFileName();
response.setContentType("application/force-download");// 设置强制下载不打开
response.addHeader("Content-Disposition", "attachment;fileName=" + new String(fileName.getBytes("UTF-8"),"iso-8859-1"));
InputStream download = CosBootUtil.download(filePath);
File file = new File(filePath);
if(file.getName().endsWith(".pdf") || file.getName().endsWith(".PDF")){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentTime = sdf.format(new Date());
String waterContent = userName+" "+currentTime;
newFile = PDFUtils.PDFWatermark(download,uploadpath,file.getName(),waterContent);
inputStream = new FileInputStream(newFile.getPath());
}else{
inputStream = CosBootUtil.download(filePath);
}
outputStream = response.getOutputStream();
inputStream = CosBootUtil.download(filePath);
byte[] buf = new byte[1024];
int len;
while ((len = inputStream.read(buf)) > 0) {
@@ -394,7 +407,17 @@ public class CommonController {
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
if (newFile != null) {
try {
newFile.delete();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
}
}
@@ -468,7 +491,7 @@ public class CommonController {
* @param response
*/
@GetMapping(value = "/pdf/viewFile")
public void viewFile(String id,HttpServletRequest request, HttpServletResponse response) {
public void viewFile(String id,HttpServletRequest request, HttpServletResponse response,String userName) {
// 查询数据表数据是否存在
LambdaQueryWrapper<OSSFile> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(OSSFile::getId,id);
@@ -490,7 +513,10 @@ public class CommonController {
InputStream download = CosBootUtil.download(filePath);
File file = new File(filePath);
//水印内容
String waterContent = "water mark";//临时定义(水印信息通过传过来)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentTime = sdf.format(new Date());
String waterContent = userName+" "+currentTime;
// String waterContent = "water mark";//临时定义(水印信息通过传过来)
File newFile = PDFUtils.PDFWatermark(download,uploadpath,file.getName(),waterContent);
// 文件名称
fileName = file.getName();
@@ -23,7 +23,7 @@ public interface SysDictItemMapper extends BaseMapper<SysDictItem> {
@Select("SELECT sys_dict_item.* FROM sys_dict_item LEFT JOIN sys_dict ON sys_dict_item.dict_id = sys_dict.id WHERE sys_dict_item.DEL_FLAG = 0 and DICT_CODE = #{dictCode} order by sort_order asc, item_value asc")
public List<SysDictItem> selectItemsByDictCode(String dictCode);
@Select("SELECT sys_dict_item.* FROM sys_dict_item LEFT JOIN sys_dict ON sys_dict_item.dict_id = sys_dict.id WHERE DICT_CODE = #{dictCode} order by sys_dict_item.sort_order asc")
@Select("SELECT sys_dict_item.* FROM sys_dict_item LEFT JOIN sys_dict ON sys_dict_item.dict_id = sys_dict.id WHERE DICT_CODE = #{dictCode} order by sys_dict_item.item_text asc")
public List<SysDictItem> selectItemsOrderBySortOrder(String dictCode);
@Select("SELECT sys_dict.dict_code,sys_dict_item.* from sys_dict_item LEFT JOIN sys_dict ON sys_dict_item.dict_id = sys_dict.id where status = 1")
@@ -195,8 +195,8 @@ public class SyncDataServiceImpl implements ISyncDataService{
ppEmployeeList.addAll(currentPPEmployeeList);
}
}
// 处理同步过来的数据id不同,username相同的情况
ppEmployeeList.sort(Comparator.comparing(PPEmployee::getCreation_time).reversed());
// 处理同步过来的数据id不同,username相同的情况 creation_time不能为空
// ppEmployeeList.sort(Comparator.comparing(PPEmployee::getCreation_time).reversed());
//此处获取全部pp用户信息
List<SysUser> sysUserList = sysUserService.getPPEmployeeList();
@@ -73,9 +73,9 @@ public class PDFUtils {
PdfTilingBrush brush = new PdfTilingBrush(dimension2D);
brush.getGraphics().setTransparency(0.4F);
brush.getGraphics().save();
brush.getGraphics().translateTransform((float) brush.getSize().getWidth() / 5, (float) brush.getSize().getHeight() / 5);
brush.getGraphics().translateTransform((float) brush.getSize().getWidth() / 1.5, (float) brush.getSize().getHeight() / 3);
brush.getGraphics().rotateTransform(-45);
brush.getGraphics().drawString(watermark, new PdfFont(PdfFontFamily.Helvetica, 15),
brush.getGraphics().drawString(watermark, new PdfFont(PdfFontFamily.Helvetica, 10),
PdfBrushes.getViolet(), 0 , 0 , new PdfStringFormat(PdfTextAlignment.Center));
brush.getGraphics().restore();
brush.getGraphics().setTransparency(1);
@@ -4997,9 +4997,20 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
File saveDirectory,
String cut) {
//树形数据字典
List<String> treeNameList = categoryList.stream().map(SysCategory::getName).collect(Collectors.toList());
List<String> treeNameList = new ArrayList<>();
if(CutEnum.CN.getValue().equals(cut)){
treeNameList = categoryList.stream().map(SysCategory::getName).collect(Collectors.toList());
}else{
treeNameList = categoryList.stream().map(SysCategory::getEnName).collect(Collectors.toList());
}
//普通数据字典
List<String> itemNameList = dictItemList.stream().map(SysDictItem::getItemText).collect(Collectors.toList());
List<String> itemNameList = new ArrayList<>();
if(CutEnum.CN.getValue().equals(cut)){
itemNameList = dictItemList.stream().map(SysDictItem::getItemText).collect(Collectors.toList());
}else{
itemNameList = dictItemList.stream().map(SysDictItem::getEnName).collect(Collectors.toList());
}
int i = 2;
List<String> msgList = new ArrayList<>();
List<Map<String, Object>> mapList = new ArrayList<>();
@@ -5097,11 +5108,18 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
if (StringUtils.isNotBlank(value)) {
for (String valueTemp : value.split(",")) {
if (treeNameList.contains(valueTemp)) {
List<SysCategory> collect = categoryList.stream().filter(e -> e.getName().equals(valueTemp)).collect(Collectors.toList());
valueId += collect.get(0).getId();
List<SysCategory> collect = new ArrayList<>();
if(CutEnum.CN.getValue().equals(cut)){
collect = categoryList.stream().filter(e -> e.getName().equals(valueTemp)).collect(Collectors.toList());
}else{
collect = categoryList.stream().filter(e -> e.getEnName().equals(valueTemp)).collect(Collectors.toList());
}
valueId += collect.get(0).getId()+",";
}
}
value = valueId;
if(StringUtils.isNotBlank(valueId)){
value = valueId.substring(0, valueId.length() - 1);
}
}
} else if (FieldTypeEnum.TEXT_STRING.getValue().equals(fieldShowType)) {
@@ -5173,7 +5191,12 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
//文字转数据字典编码
if (itemNameList.contains(value)) {
String finalValue = value;
List<SysDictItem> collect = dictItemList.stream().filter(e -> StringUtils.isNotBlank(e.getItemText()) && e.getItemText().equals(finalValue)).collect(Collectors.toList());
List<SysDictItem> collect = new ArrayList<>();
if(CutEnum.CN.getValue().equals(cut)){
collect = dictItemList.stream().filter(e -> StringUtils.isNotBlank(e.getItemText()) && e.getItemText().equals(finalValue)).collect(Collectors.toList());
}else{
collect = dictItemList.stream().filter(e -> StringUtils.isNotBlank(e.getEnName()) && e.getEnName().equals(finalValue)).collect(Collectors.toList());
}
if (collect.size() != 0) {
value = collect.get(0).getItemValue();
}
@@ -5216,7 +5239,13 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl<BussDocumentLi
if (StringUtils.isNotBlank(value)) {
for (String valueTemp : value.split(",")) {
if (itemNameList.contains(valueTemp)) {
List<SysDictItem> collect = dictItemList.stream().filter(e -> StringUtils.isNotBlank(e.getItemText()) && e.getItemText().equals(valueTemp)).collect(Collectors.toList());
List<SysDictItem> collect = new ArrayList<>();
if(CutEnum.CN.getValue().equals(cut)){
collect = dictItemList.stream().filter(e -> StringUtils.isNotBlank(e.getItemText()) && e.getItemText().equals(valueTemp)).collect(Collectors.toList());
}else{
collect = dictItemList.stream().filter(e -> StringUtils.isNotBlank(e.getEnName()) && e.getEnName().equals(valueTemp)).collect(Collectors.toList());
}
valueId += collect.get(0).getItemValue() + ",";
}
}
@@ -201,6 +201,10 @@ public class DummyInventoryInfoEO implements Serializable {
@Dict(dicCode ="ze2_ren4_ren2")
private java.lang.String designDuty;
//交付物说明
@Excel(name = "设计符合性确认-交付物说明", width = 20)
private String designRemark;
/**prehomo确认-交付物类型*/
@Excel(name = "Prehomo-交付物类型", width = 15,dicCode ="deliverable_template")
@ApiModelProperty(value = "prehomo确认-交付物类型")
@@ -209,6 +213,7 @@ public class DummyInventoryInfoEO implements Serializable {
@TableField(exist = false)
private java.lang.String prehomoDeliverableTypeName;
/**prehomo确认-交付物模板*/
@ApiModelProperty(value = "prehomo确认-交付物模板")
@@ -230,6 +235,10 @@ public class DummyInventoryInfoEO implements Serializable {
@Dict(dicCode ="ze2_ren4_ren2")
private java.lang.String prehomoDuty;
//prehomo确认-交付物说明
@Excel(name = "prehomo确认-交付物说明", width = 20)
private String prehomoRemark;
/**验证符合性确认-交付物类型*/
@Excel(name = "验证-交付物类型", width = 15,dicCode ="deliverable_template")
@ApiModelProperty(value = "验证符合性确认-交付物类型")
@@ -259,6 +268,10 @@ public class DummyInventoryInfoEO implements Serializable {
@Dict(dicCode ="ze2_ren4_ren2")
private java.lang.String verifyDuty;
//验证备注
@Excel(name = "验证符合性确认-交付物说明", width = 20)
private String verifyRemark;
@TableField(exist = false)
private String cut;
@@ -273,4 +286,9 @@ public class DummyInventoryInfoEO implements Serializable {
}
@@ -82,11 +82,11 @@ public class DummyInventoryInfoEOEn implements Serializable {
/**适用地区*/
@ApiModelProperty(value = "适用地区")
@Dict(dicCode ="region")
@Excel(name = "Area", width = 15, dicCode = "region")
@Excel(name = "Area", width = 15)
private String region;
/**适用范围*/
@Excel(name = "Scope of application", width = 15, dicCode = "apply_scope")
@Excel(name = "Scope of application", width = 30, dicCode = "apply_scope")
@ApiModelProperty(value = "适用范围")
@Dict(dicCode ="apply_scope")
private String shi4Yong4Fan4Wei2;
@@ -111,7 +111,7 @@ public class DummyInventoryInfoEOEn implements Serializable {
private String implementType;
/**新车型实施日期*/
@Excel(name = "New Type Execute Date", width = 15,format = "yyyy-MM-dd")
@Excel(name = "New Type Execute Date", width = 30,format = "yyyy-MM-dd")
@ApiModelProperty(value = "新车型实施日期")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@@ -120,7 +120,7 @@ public class DummyInventoryInfoEOEn implements Serializable {
private String xin1Che1Xing2Shi2Shi1Ri4Qi1String;
/**在产车实施日期*/
@Excel(name = "New Vehicle Execute Date", width = 15,format = "yyyy-MM-dd")
@Excel(name = "New Vehicle Execute Date", width = 30,format = "yyyy-MM-dd")
@ApiModelProperty(value = "在产车实施日期")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@@ -134,25 +134,25 @@ public class DummyInventoryInfoEOEn implements Serializable {
private String wvtaId;
/**认证类型*/
@Excel(name = "Certification Type", width = 15,dicCode ="attestation_type")
@Excel(name = "Certification Type", width = 30,dicCode ="attestation_type")
@ApiModelProperty(value = "认证类型")
@Dict(dicCode ="attestation_type")
private String attestationType;
/**认证级别*/
@Excel(name = "Certification Level", width = 15,dicCode ="attestation_rank")
@Excel(name = "Certification Level", width = 30,dicCode ="attestation_rank")
@ApiModelProperty(value = "认证级别")
@Dict(dicCode ="attestation_rank")
private String attestationRank;
/**适用增补件*/
@ApiModelProperty(value = "适用增补件")
@Excel(name = "Applicable Supplement", width = 15)
@Excel(name = "Applicable Supplement", width = 30)
private String applicableSupplement;
/**技术领域*/
@Excel(name = "Technical Field", width = 15)
@Excel(name = "Technical Field", width = 30)
@ApiModelProperty(value = "技术领域")
private String technologyTerritory;
@@ -160,7 +160,7 @@ public class DummyInventoryInfoEOEn implements Serializable {
private String technologyTerritoryName;
/**责任领域*/
@Excel(name = "Responsible Field", width = 15,dicCode ="duty_territory")
@Excel(name = "Responsible Field", width = 30,dicCode ="duty_territory")
@ApiModelProperty(value = "责任领域")
@Dict(dicCode ="duty_territory")
private String dutyTerritory;
@@ -171,7 +171,7 @@ public class DummyInventoryInfoEOEn implements Serializable {
private String remark;
/**设计符合性确认-交付物类型*/
@Excel(name = "Design-Deliverables", width = 15,dicCode ="deliverable_template")
@Excel(name = "Design Deliverables", width = 30,dicCode ="deliverable_template")
@ApiModelProperty(value = "设计符合性确认-交付物类型")
@Dict(dicCode ="deliverable_template")
private String designDeliverableType;
@@ -182,23 +182,28 @@ public class DummyInventoryInfoEOEn implements Serializable {
private String designDeliverableTemplate;
@TableField(exist = false)
@Excel(name = "Design-Deliverable Template", width = 15)
@Excel(name = "Design Deliverable Template", width = 30)
private String designDeliverableTemplateName;
/**设计符合性确认-发起人*/
@Excel(name = "Design-Initiator", width = 15)
@Excel(name = "Design Initiator", width = 30)
@ApiModelProperty(value = "设计符合性确认-发起人")
@Dict(dicCode ="fa1_qi3_ren2")
private String designInitiator;
/**设计符合性确认-责任人*/
@Excel(name = "Design-Assignee", width = 15)
@Excel(name = "Design Assignee", width = 30)
@ApiModelProperty(value = "设计符合性确认-责任人")
@Dict(dicCode ="ze2_ren4_ren2")
private String designDuty;
//交付物说明
@Excel(name = "Design Compliance Check Deliverable Description", width = 50)
private String designRemark;
/**prehomo确认-交付物类型*/
@Excel(name = "Prehomo-Deliverables", width = 15,dicCode ="deliverable_template")
@Excel(name = "Prehomo Deliverables", width = 30,dicCode ="deliverable_template")
@ApiModelProperty(value = "prehomo确认-交付物类型")
@Dict(dicCode ="deliverable_template")
private String prehomoDeliverableType;
@@ -209,23 +214,27 @@ public class DummyInventoryInfoEOEn implements Serializable {
private String prehomoDeliverableTemplate;
@TableField(exist = false)
@Excel(name = "Prehomo-Deliverable Template", width = 15)
@Excel(name = "Prehomo Deliverable Template", width = 30)
private String prehomoDeliverableTemplateName;
/**prehomo确认-发起人*/
@Excel(name = "Prehomo-Initiator", width = 15)
@Excel(name = "Prehomo Initiator", width = 30)
@ApiModelProperty(value = "prehomo确认-发起人")
@Dict(dicCode ="fa1_qi3_ren2")
private String prehomoInitiator;
/**prehomo确认-责任人*/
@Excel(name = "Prehomo-Assignee", width = 15)
@Excel(name = "Prehomo Assignee", width = 30)
@ApiModelProperty(value = "prehomo确认-责任人")
@Dict(dicCode ="ze2_ren4_ren2")
private String prehomoDuty;
//prehomo确认-交付物说明
@Excel(name = "Prehomo Check Deliverable Description", width = 50)
private String prehomoRemark;
/**验证符合性确认-交付物类型*/
@Excel(name = "Verify-Deliverables", width = 15,dicCode ="deliverable_template")
@Excel(name = "Verify Deliverables", width = 30,dicCode ="deliverable_template")
@ApiModelProperty(value = "验证符合性确认-交付物类型")
@Dict(dicCode ="deliverable_template")
private String verifyDeliverableType;
@@ -235,21 +244,25 @@ public class DummyInventoryInfoEOEn implements Serializable {
private String verifyDeliverableTemplate;
@TableField(exist = false)
@Excel(name = "Verify-Deliverable Template", width = 15)
@Excel(name = "Verify Deliverable Template", width = 30)
private String verifyDeliverableTemplateName;
/**验证符合性确认-发起人*/
@Excel(name = "Verify-Initiator", width = 15)
@Excel(name = "Verify Initiator", width = 30)
@ApiModelProperty(value = "验证符合性确认-发起人")
@Dict(dicCode ="fa1_qi3_ren2")
private String verifyInitiator;
/**验证符合性确认-责任人*/
@Excel(name = "Verify-Assignee", width = 15)
@Excel(name = "Verify Assignee", width = 30)
@ApiModelProperty(value = "验证符合性确认-责任人")
@Dict(dicCode ="ze2_ren4_ren2")
private String verifyDuty;
///验证-交付物说明
@Excel(name = "Validation Compliance Check Deliverable Description", width = 60)
private String verifyRemark;
@TableField(exist = false)
private String cut;
@@ -264,4 +277,9 @@ public class DummyInventoryInfoEOEn implements Serializable {
}
@@ -30,7 +30,6 @@
<result column="design_duty" property="designDuty" />
<result column="prehomo_deliverable_type" property="prehomoDeliverableType" />
<result column="prehomo_deliverable_template" property="prehomoDeliverableTemplate" />
<result column="prehomo_initiator" property="prehomoInitiator" />
<result column="prehomo_duty" property="prehomoDuty" />
<result column="verify_deliverable_type" property="verifyDeliverableType" />
<result column="verify_deliverable_template" property="verifyDeliverableTemplate" />
@@ -38,5 +37,8 @@
<result column="verify_duty" property="verifyDuty" />
<result column="region" property="region" />
<result column="applicable_supplement" property="applicableSupplement" />
<result column="verify_remark" property="verifyRemark" />
<result column="prehomo_remark" property="prehomoRemark" />
<result column="design_remark" property="designRemark" />
</resultMap>
</mapper>
@@ -653,16 +653,18 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
"*认证级别," +"适用增补件,"+
"*责任领域,备注," +
"设计符合性确认,Pre-homo确认,验证符合性确认";
titleTwo = "交付物类型,交付物模板,发起人,责任人,交付物类型,交付物模板,发起人,责任人,交付物类型,交付物模板,发起人,责任人";
titleTwo = "交付物类型,交付物模板,发起人,责任人,交付物说明," +
"交付物类型,交付物模板,发起人,责任人,交付物说明," +
"交付物类型,交付物模板,发起人,责任人,交付物说明";
}else{
titleOne = "*Number,Sub-Title,Usage," +
"WVTA ID,Certification Type," +
"*Certification Level," +"Applicable Supplement,"+
"*Responsible Field,Comments," +
"design compliance check,pre-homo check,validation compliance chech";
titleTwo = "type of deliverables,deliverable template,initiator,person liable," +
"type of deliverables,deliverable template,initiator,person liable," +
"type of deliverables,deliverable template,initiator,person liable";
"Design compliance check,Pre-homo check,Validation compliance chech";
titleTwo = "Type of deliverables,Deliverable template,Initiator,Person liable,Deliverables description," +
"Type of deliverables,Deliverable template,Initiator,Person liable,Deliverables description," +
"Type of deliverables,Deliverable template,Initiator,Person liable,Deliverables description";
}
@@ -694,7 +696,7 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
int count = 1;
int startLine = 0;
int endLine = 0;
int line = 3;
int line = 4;
for (int i = 0; i < index; i++) {
//合并单元格
CellRangeAddress region1 =
@@ -716,7 +718,7 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
count ++;
}
CellRangeAddress region =
new CellRangeAddress(2, 2, 0, 20); //参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
new CellRangeAddress(2, 2, 0, 23); //参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
sheet.addMergedRegion(region);
String explain= "";
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
@@ -751,7 +753,7 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
row.createCell(lineTemp).setCellValue(headerArr[m]);
Cell cell = row.getCell(lineTemp);
cell.setCellStyle(cellStyle);
lineTemp = lineTemp + 4;
lineTemp = lineTemp + 5;
}
}
@@ -916,15 +918,17 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
String title = "";
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
title = "*编号,子标题,实施类别,WVTA ID,认证类型,*认证级别,适用增补件,*责任领域,备注," +
"设计交付物类型,设计交付物模板,设计发起人,设计责任人,pre交付物类型,pre交付物模板,pre发起人,pre责任人,验证交付物类型,验证交付物模板,验证发起人,验证责任人";
"设计交付物类型,设计交付物模板,设计发起人,设计责任人,设计交付物说明," +
"Pre交付物类型,Pre交付物模板,Pre发起人,Pre责任人,Pre交付物说明," +
"验证交付物类型,验证交付物模板,验证发起人,验证责任人,验证交付物说明";
}else{
title = "*Number,Sub-Title,Usage," +
"WVTA ID,Certification Type," +
"*Certification Level," +"Applicable Supplement,"+
"*Responsible Field,Comments," +
"design type of deliverables,design deliverable template,design initiator,design person liable," +
"pre type of deliverables,pre deliverable template,pre initiator,pre person liable," +
"verify type of deliverables,verify deliverable template,verify initiator,verify person liable";
"Design Type of deliverables,Design Deliverable template,Design Initiator,Design Person liable,Design Deliverables description," +
"Pre Type of deliverables,Pre Deliverable template,Pre Initiator,Pre Person liable,Pre Deliverables description," +
"Verify Type of deliverables,Verify Deliverable template,Verify Initiator,Verify Person liable,Verify Deliverables description";
}
int pos = file.getOriginalFilename().lastIndexOf(".");
@@ -1046,27 +1050,27 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
}else if(i == 1){
if(j > 8){
String flag = "";
if(8 < j && j < 13){
if(8 < j && j < 14){
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
flag ="设计";
}else{
flag ="design ";
flag ="Design ";
}
key = flag + headerCell.getStringCellValue();
}
if(12 < j && j < 17){
if(13 < j && j < 19){
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
flag ="pre";
flag ="Pre";
}else{
flag ="pre ";
flag ="Pre ";
}
key = flag + headerCell.getStringCellValue();
}
if(16 < j && j < 21){
if(18 < j && j < 24){
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
flag ="验证";
}else{
flag ="verify ";
flag ="Verify ";
}
key = flag + headerCell.getStringCellValue();
@@ -1469,10 +1473,12 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
//存在文档库没有的数据
List<String> collect = bussDocumentLibraryEOList.stream().map(BussDocumentLibraryEO::getSerialNumber).collect(Collectors.toList());
List<String> serialNumbers = serialNumberS.stream().filter(e -> !collect.contains(e)).collect(Collectors.toList());
if(CutEnum.CN.getValue().equals(dataList.get(0).getCut())){
throw new JeroBootException(StringUtils.join(serialNumbers,",")+"文档库中不存在,不能添加");
}else{
throw new JeroBootException(StringUtils.join(serialNumbers,",")+" does not exist in the document library and cannot be added");
if(serialNumbers.size() != 0){
if(CutEnum.CN.getValue().equals(dataList.get(0).getCut())){
throw new JeroBootException(StringUtils.join(serialNumbers,",")+"文档库中不存在,不能添加");
}else{
throw new JeroBootException(StringUtils.join(serialNumbers,",")+" does not exist in the document library and cannot be added");
}
}
}
if(dummyInventoryInfoEOList.size() > 0){
@@ -1718,18 +1724,21 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
case "设计交付物模板": return "designDeliverableTemplate";
case "设计发起人": return "designInitiator";
case "设计责任人": return "designDuty";
case "pre交付物类型": return "prehomoDeliverableType";
case "pre交付物模板": return "prehomoDeliverableTemplate";
case "pre发起人": return "prehomoInitiator";
case "pre责任": return "prehomoDuty";
case "设计交付物说明": return "designRemark";
case "Pre交付物类型": return "prehomoDeliverableType";
case "Pre交付物模板": return "prehomoDeliverableTemplate";
case "Pre发起": return "prehomoInitiator";
case "Pre责任人": return "prehomoDuty";
case "Pre交付物说明": return "prehomoRemark";
case "验证交付物类型": return "verifyDeliverableType";
case "验证交付物模板": return "verifyDeliverableTemplate";
case "验证发起人": return "verifyInitiator";
case "验证责任人": return "verifyDuty";
case "验证交付物说明": return "verifyRemark";
case "*Number": return "serialNumber";
case "title": return "title";
case "Title": return "title";
case "Sub-Title": return "subtitle";
// case "适用范围": return "shi4Yong4Fan4Wei2";
// case "状态": return "state";
@@ -1745,18 +1754,21 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
case "*Responsible Field": return "dutyTerritory";
// case "适用地区": return "region";
case "Comments": return "remark";
case "design type of deliverables": return "designDeliverableType";
case "design deliverable template": return "designDeliverableTemplate";
case "design initiator": return "designInitiator";
case "design person liable": return "designDuty";
case "pre type of deliverables": return "prehomoDeliverableType";
case "pre deliverable template": return "prehomoDeliverableTemplate";
case "pre initiator": return "prehomoInitiator";
case "pre person liable": return "prehomoDuty";
case "verify type of deliverables": return "verifyDeliverableType";
case "verify deliverable template": return "verifyDeliverableTemplate";
case "verify initiator": return "verifyInitiator";
case "verify person liable": return "verifyDuty";
case "Design Type of deliverables": return "designDeliverableType";
case "Design Deliverable template": return "designDeliverableTemplate";
case "Design Initiator": return "designInitiator";
case "Design Person liable": return "designDuty";
case "Design Deliverables description": return "designRemark";
case "Pre Type of deliverables": return "prehomoDeliverableType";
case "Pre Deliverable template": return "prehomoDeliverableTemplate";
case "Pre Initiator": return "prehomoInitiator";
case "Pre Person liable": return "prehomoDuty";
case "Pre Deliverables description": return "prehomoRemark";
case "Verify Type of deliverables": return "verifyDeliverableType";
case "Verify Deliverable template": return "verifyDeliverableTemplate";
case "Verify Initiator": return "verifyInitiator";
case "Verify Person liable": return "verifyDuty";
case "Verify Deliverables description": return "verifyRemark";
default: return null;
}
}
@@ -1,5 +1,7 @@
package com.jero.modules.feishu.service;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import java.io.IOException;
/**
@@ -26,4 +28,11 @@ public interface IFeishuService {
* @throws IOException
*/
String batchSendMessage(String[] userIds, String message, String title, String backUrl) throws IOException;
/**
* 发送卡片消息
* @param feishuMsgVo
* @return
*/
String sendCardMsg(String[] userIds, FeishuMsgVo feishuMsgVo) throws IOException;
}
@@ -1,8 +1,11 @@
package com.jero.modules.feishu.service.impl;
import cn.hutool.core.util.StrUtil;
import com.alibaba.druid.support.json.JSONUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.jero.modules.feishu.service.IFeishuService;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.system.util.HttpRequestUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@@ -111,4 +114,128 @@ public class FeishuServiceImpl implements IFeishuService {
}
return tokenJson.get("msg").toString();
}
/**
* 发送卡片消息
* @param feishuMsgVo
* @return
*/
public String sendCardMsg(String[] userIds, FeishuMsgVo feishuMsgVo) throws IOException {
String token = getTenantAccessToken();
// 设置请求头
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Authorization", "Bearer " + token);
headerMap.put("Content-Type", "application/json; charset=utf-8");
// 示例
StringBuilder contentSb = new StringBuilder();
contentSb.append("{");
contentSb.append("\"elements\": [");
// 补充内容
if (StrUtil.isNotEmpty(feishuMsgVo.getContent())){
contentSb.append("{");
contentSb.append("\"tag\": \"div\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"" + feishuMsgVo.getContent() + "\",");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("},");
};
// 补充tasktype、project、Initiator等的外层
contentSb.append("{");
contentSb.append("\"fields\": [");
contentSb.append("{");
contentSb.append("\"is_short\": false,");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"**Task Type** " + feishuMsgVo.getTaskType() + "\",");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("}");
if (StrUtil.isNotEmpty(feishuMsgVo.getRegulationNo())){
contentSb.append(",");
contentSb.append("{");
contentSb.append("\"is_short\": false,");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"**Regulation No** " + feishuMsgVo.getRegulationNo() + "\",");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("}");
}
if (StrUtil.isNotEmpty(feishuMsgVo.getProject())){
contentSb.append(",");
contentSb.append("{");
contentSb.append("\"is_short\": false,");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"**Project** " + feishuMsgVo.getProject() + "\",");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("}");
}
if (StrUtil.isNotEmpty(feishuMsgVo.getInitiator())){
contentSb.append(",");
contentSb.append("{");
contentSb.append("\"is_short\": false,");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"**Initiator** " + feishuMsgVo.getInitiator() + "\",");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("}");
}
if (StrUtil.isNotEmpty(feishuMsgVo.getDueDate())){
contentSb.append(",");
contentSb.append("{");
contentSb.append("\"is_short\": false,");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"**Due Date** " + feishuMsgVo.getDueDate() + "\",");
contentSb.append("\"tag\": \"lark_md\"");
contentSb.append("}");
contentSb.append("}");
}
contentSb.append("],");
contentSb.append("\"tag\": \"div\"");
contentSb.append("},");
contentSb.append("{\"tag\": \"hr\"},");
contentSb.append("{");
contentSb.append("\"actions\": [");
contentSb.append("{");
contentSb.append("\"tag\": \"button\",");
contentSb.append("\"text\": {");
contentSb.append("\"content\": \"view\",");
contentSb.append("\"tag\": \"plain_text\"");
contentSb.append("},");
contentSb.append("\"type\": \"primary\",");
contentSb.append("\"url\": \" "+ feishuMsgVo.getUrl() +" \"");
contentSb.append("}");
contentSb.append("],");
contentSb.append("\"tag\": \"action\"");
contentSb.append("}");
contentSb.append("],");
contentSb.append("\"header\": {");
contentSb.append("\"template\": \"green\",");
contentSb.append("\"title\": {");
contentSb.append("\"content\": \" " + feishuMsgVo.getTitle() + " \",");
contentSb.append("\"tag\": \"plain_text\"");
contentSb.append("}");
contentSb.append("}");
contentSb.append("}");
JSONObject jsonObject = JSONObject.parseObject(contentSb.toString());
// 设置请求参数
JSONObject paramsMap = new JSONObject();
paramsMap.put("user_ids", userIds);
paramsMap.put("msg_type", "interactive");
paramsMap.put("card", jsonObject);
// 发送请求给飞书
String response = HttpRequestUtil.getResponseOfPOST(batchSendMessageUrl, headerMap, paramsMap.toJSONString());
// 获取返回结果
JSONObject tokenJson = JSONObject.parseObject(response);
if(!tokenJson.get("code").toString().equals("0")) {
log.error("请求出现异常:" + tokenJson.get("msg") + " " + tokenJson);
}
return tokenJson.get("msg").toString();
}
}
@@ -0,0 +1,28 @@
package com.jero.modules.feishu.vo;
import lombok.Data;
/**
* 飞书消息的VO
*/
@Data
public class FeishuMsgVo {
private String title; //标题
private String content; //内容
private String taskType; //任务类型
private String regulationNo; //法规编号
private String project; //项目名称
private String initiator; //发起人
private String dueDate; //截止时间
private String url; //回调的网址
}
@@ -101,10 +101,13 @@ public class ProjectLawsInventoryEO implements Serializable {
/**适用地区*/
@ApiModelProperty(value = "适用地区")
@Dict(dicCode ="region")
//@Dict(dicCode ="region")
@Excel(name = "适用地区", width = 15, dicCode = "region")
private java.lang.String region;
@TableField(exist = false)
private String region_dictText;
/**对应标准*/
@Excel(name = "对应标准", width = 20)
@ApiModelProperty(value = "对应标准")
@@ -113,8 +116,10 @@ public class ProjectLawsInventoryEO implements Serializable {
/**实施类别*/
@Excel(name = "实施类别", width = 20,dicCode ="implement_type")
@ApiModelProperty(value = "实施类别")
@Dict(dicCode ="implement_type")
//@Dict(dicCode ="implement_type")
private String implementType;
@TableField(exist = false)
private String implementType_dictText;
/**新车型实施日期*/
@Excel(name = "新车型实施日期", width = 20, format = "yyyy-MM-dd")
@@ -139,14 +144,18 @@ public class ProjectLawsInventoryEO implements Serializable {
/**认证类型*/
@Excel(name = "认证类型", width = 20,dicCode ="attestation_type")
@ApiModelProperty(value = "认证类型")
@Dict(dicCode ="attestation_type")
//@Dict(dicCode ="attestation_type")
private String attestationType;
@TableField(exist = false)
private String attestationType_dictText;
/**认证级别*/
@Excel(name = "认证级别", width = 20,dicCode ="attestation_rank")
@ApiModelProperty(value = "认证级别")
@Dict(dicCode ="attestation_rank")
//@Dict(dicCode ="attestation_rank")
private String attestationRank;
@TableField(exist = false)
private String attestationRank_dictText;
//适用增补件
@Excel(name = "适用增补件", width = 20)
@@ -160,8 +169,10 @@ public class ProjectLawsInventoryEO implements Serializable {
/**责任领域*/
@Excel(name = "责任领域", width = 20,dicCode ="duty_territory")
@ApiModelProperty(value = "责任领域")
@Dict(dicCode ="duty_territory")
//@Dict(dicCode ="duty_territory")
private String dutyTerritory;
@TableField(exist = false)
private String dutyTerritory_dictText;
/**法规工程师id*/
@ApiModelProperty(value = "法规工程师id")
@@ -198,10 +209,12 @@ public class ProjectLawsInventoryEO implements Serializable {
/**设计符合性确认-交付物类型*/
@Excel(name = "设计符合性确认-交付物类型", width = 20,dicCode ="deliverable_template")
@ApiModelProperty(value = "设计符合性确认-交付物类型")
@Dict(dicCode ="deliverable_template")
//@Dict(dicCode ="deliverable_template")
private String designDeliverableType;
@TableField(exist = false)
private String designDeliverableTypeName;
@TableField(exist = false)
private String designDeliverableType_dictText;
/**设计符合性确认-交付物模板*/
@ApiModelProperty(value = "设计符合性确认-交付物模板")
@@ -214,8 +227,10 @@ public class ProjectLawsInventoryEO implements Serializable {
/**设计符合性确认-发起人角色*/
@ApiModelProperty(value = "设计符合性确认-发起人角色")
@Dict(dicCode ="fa1_qi3_ren2")
//@Dict(dicCode ="fa1_qi3_ren2")
private String designInitiator;
@TableField(exist = false)
private String designInitiator_dictText;
/**设计符合性确认-发起人id*/
//@TableField(updateStrategy = FieldStrategy.IGNORED)
@@ -229,8 +244,10 @@ public class ProjectLawsInventoryEO implements Serializable {
/**设计符合性确认-责任人角色*/
@ApiModelProperty(value = "设计符合性确认-责任人角色")
@Dict(dicCode ="ze2_ren4_ren2")
//@Dict(dicCode ="ze2_ren4_ren2")
private String designDuty;
@TableField(exist = false)
private String designDuty_dictText;
/**设计符合性确认-责任人id*/
@ApiModelProperty(value = "设计符合性确认-责任人id")
@@ -259,8 +276,10 @@ public class ProjectLawsInventoryEO implements Serializable {
/**prehomo确认-交付物类型*/
@Excel(name = "prehomo确认-交付物类型", width = 20,dicCode ="deliverable_template")
@ApiModelProperty(value = "prehomo确认-1")
@Dict(dicCode ="deliverable_template")
////@Dict(dicCode ="deliverable_template")
private String prehomoDeliverableType;
@TableField(exist = false)
private String prehomoDeliverableType_dictText;
@TableField(exist = false)
private String prehomoDeliverableTypeName;
@@ -275,8 +294,10 @@ public class ProjectLawsInventoryEO implements Serializable {
/**prehomo确认-发起人角色*/
@ApiModelProperty(value = "prehomo确认-发起人角色")
@Dict(dicCode ="fa1_qi3_ren2")
//@Dict(dicCode ="fa1_qi3_ren2")
private String prehomoInitiator;
@TableField(exist = false)
private String prehomoInitiator_dictText;
/**prehomo确认-发起人id*/
@ApiModelProperty(value = "prehomo确认-发起人id")
@@ -290,8 +311,10 @@ public class ProjectLawsInventoryEO implements Serializable {
/**prehomo确认-责任人角色*/
@ApiModelProperty(value = "prehomo确认-责任人角色")
@Dict(dicCode ="ze2_ren4_ren2")
//@Dict(dicCode ="ze2_ren4_ren2")
private String prehomoDuty;
@TableField(exist = false)
private String prehomoDuty_dictText;
/**prehomo确认-责任人id*/
@ApiModelProperty(value = "prehomo确认-责任人id")
@@ -320,8 +343,10 @@ public class ProjectLawsInventoryEO implements Serializable {
/**验证符合性确认-交付物类型*/
@Excel(name = "验证符合性确认-交付物类型", width = 20,dicCode ="deliverable_template")
@ApiModelProperty(value = "验证符合性确认-交付物类型")
@Dict(dicCode ="deliverable_template")
//@Dict(dicCode ="deliverable_template")
private String verifyDeliverableType;
@TableField(exist = false)
private String verifyDeliverableType_dictText;
@TableField(exist = false)
private String verifyDeliverableTypeName;
@@ -336,8 +361,10 @@ public class ProjectLawsInventoryEO implements Serializable {
/**验证符合性确认-发起人角色*/
@ApiModelProperty(value = "验证符合性确认-发起人角色")
@Dict(dicCode ="fa1_qi3_ren2")
//@Dict(dicCode ="fa1_qi3_ren2")
private String verifyInitiator;
@TableField(exist = false)
private String verifyInitiator_dictText;
/**验证符合性确认-发起人id*/
@ApiModelProperty(value = "验证符合性确认-发起人id")
@@ -351,8 +378,10 @@ public class ProjectLawsInventoryEO implements Serializable {
/**验证符合性确认-责任人角色*/
@ApiModelProperty(value = "验证符合性确认-责任人角色")
@Dict(dicCode ="ze2_ren4_ren2")
//@Dict(dicCode ="ze2_ren4_ren2")
private String verifyDuty;
@TableField(exist = false)
private String verifyDuty_dictText;
/**验证符合性确认-责任人id*/
@ApiModelProperty(value = "验证符合性确认-责任人id")
@@ -71,7 +71,7 @@ public class ProjectLawsInventoryEOEn implements Serializable {
private String serialNumber;
/**标题*/
@Excel(name = "title", width = 20)
@Excel(name = "Title", width = 20)
@ApiModelProperty(value = "标题")
private String title;
@@ -101,7 +101,7 @@ public class ProjectLawsInventoryEOEn implements Serializable {
/**适用地区*/
@ApiModelProperty(value = "适用地区")
@Dict(dicCode ="Area")
@Excel(name = "Area", width = 15, dicCode = "region")
@Excel(name = "Area", width = 15)
private String region;
/**对应标准*/
@@ -1,13 +1,13 @@
package com.jero.modules.project.enums;
public enum ProjectTaskPlanningNameEnum {
LIST_CONFIRMATION("法规清单确认"," Confirmation of regulations list"),
LEGAL_TASK_CONFIRMATION("法规任务确认","Regulatory task confirmation"),
DESIGN_DEADLINE("设计符合性确认","Design Compliance Check"),
PREHOMO_DEADLINE("Pre-Homo确认","Pre-Homo Check"),
ATTESTATION_START_TIME("认证开始","Certification start"),
ATTESTATION_END_TIME("认证结束"," Certification end"),
VERIFY_DEADLINE("验证符合性确认","Verification compliance confirmation deadline"),
LIST_CONFIRMATION("清单确认"," Checklist confirmation"),
LEGAL_TASK_CONFIRMATION("任务确认","Task confirmation"),
DESIGN_DEADLINE("设计符合性","Design compliance"),
PREHOMO_DEADLINE("Pre-Homo","Pre-Homo"),
ATTESTATION_START_TIME("认证开始","Certification begins"),
ATTESTATION_END_TIME("认证结束"," End of certification"),
VERIFY_DEADLINE("验证符合性","Verify compliance"),
;
String name;
@@ -1,6 +1,8 @@
package com.jero.modules.project.job;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.common.constant.enums.MessageTypeEnum;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.project.entity.ProjectLawsInventoryEO;
import com.jero.modules.project.entity.ProjectLibraryBase;
import com.jero.modules.project.entity.ProjectNameInfoEO;
@@ -71,7 +73,7 @@ public class InventoryAffirmJob implements Job {
List<ProjectLibraryBase> projectLibraryBaseList = projectLibraryBaseMapper.selectList(queryWrapper);
if(CollectionUtils.isNotEmpty(projectLibraryBaseList)){
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date currentDate = new Date();
@@ -134,54 +136,75 @@ public class InventoryAffirmJob implements Job {
/*String msgContentCN = "您" + projectLibraryBase.getProjectName() + "(项目名称)法规清单的任务确认剩余处理时间还有3天,请及时查看处理";*/
// XXX .
String msgContentEN = "The remaining processing time for the regulation list confirmation of"
+ projectNameInfoEO.getProjectName()
String msgContentEN = "The remaining processing time for the regulation list confirmation of "
+ projectNameInfoEO.getProjectName() + "-"
+ projectYearNameInfoEO.getYearName()+ " "
+ projectLibraryBase.getTargetMarket()
+ " are 3 days. Please check and handle it in time.";
//飞书跳转链接
String hrefFeishu = backUrl
+ JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink()
+ projectLibraryBase.getId() + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType()
+ "&projectName=" + projectNameInfoEO.getProjectName();
//系统内部跳转链接
String href = "<a href='"
+ JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() + projectLibraryBase.getId() + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType()
+ "&projectName=" + projectNameInfoEO.getProjectName()
+ "'>" + "Jump link" + "</a>";
String contentInfo = msgContentEN + " " + href;
Map<String,Object> sendMessageMap = new HashMap<>();
sendMessageMap.put("hrefFeishu",hrefFeishu);
sendMessageMap.put("contentInfo",contentInfo);
//发送消息
projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLibraryBase.getId(),sendMessageMap);
}
if(CollectionUtils.isNotEmpty(currentDaysUserIdList)){
currentDaysUserIdList = currentDaysUserIdList.stream().distinct().collect(Collectors.toList());
/*String msgContentCN = "您" + projectLibraryBase.getProjectName() + "(项目名称)法规清单的任务今天即将结束,请及时查看处理*/
String msgContentEN = "The the regulation list confirmation for "
+ projectNameInfoEO.getProjectName()
+ " will expire today. Please check and address it in a timely manner.";
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setContent("Hello! The remaining processing time for the task are 3 days. Please check and address it in a timely manner.");
feishuMsgVo.setTaskType("Regulation List Confirmation");
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
//飞书跳转链接
String hrefFeishu = backUrl
+ JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink()
+ projectLibraryBase.getId()
+ JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType()
+ "&projectName=" + projectNameInfoEO.getProjectName();
+ "&projectName=" + projectNameInfoEO.getProjectName() + "-"
+ projectYearNameInfoEO.getYearName()
+ "&targetMarket=" + projectLibraryBase.getTargetMarket();
//系统内部跳转链接
String href = "<a href='"
+ JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() + projectLibraryBase.getId() + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType()
+ "&projectName=" + projectNameInfoEO.getProjectName()
+ "&projectName=" + projectNameInfoEO.getProjectName() + "-"
+ projectYearNameInfoEO.getYearName()
+ "&targetMarket=" + projectLibraryBase.getTargetMarket()
+ "'>" + "Jump link" + "</a>";
String contentInfo = msgContentEN + " " + href;
Map<String,Object> sendMessageMap = new HashMap<>();
sendMessageMap.put("hrefFeishu",hrefFeishu);
sendMessageMap.put("contentInfo",contentInfo);
//发送消息
projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLibraryBase.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK);
}
if(CollectionUtils.isNotEmpty(currentDaysUserIdList)){
currentDaysUserIdList = currentDaysUserIdList.stream().distinct().collect(Collectors.toList());
/*String msgContentCN = "您" + projectLibraryBase.getProjectName() + "(项目名称)法规清单的任务今天即将结束,请及时查看处理*/
String msgContentEN = "The regulation list confirmation for "
+ projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()
+ " will expire today. Please check and address it in a timely manner.";
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setContent("Hello! The task will expire today. Please check and address it in a timely manner.");
feishuMsgVo.setTaskType("Regulation List Confirmation");
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
//飞书跳转链接
String hrefFeishu = backUrl
+ JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink()
+ projectLibraryBase.getId()
+ JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType()
+ "&projectName=" + projectNameInfoEO.getProjectName() + "-"
+ projectYearNameInfoEO.getYearName()
+ "&targetMarket=" + projectLibraryBase.getTargetMarket();
//系统内部跳转链接
String href = "<a href='"
+ JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() + projectLibraryBase.getId() + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType()
+ "&projectName=" + projectNameInfoEO.getProjectName() + "-"
+ projectYearNameInfoEO.getYearName()
+ "&targetMarket=" + projectLibraryBase.getTargetMarket()
+ "'>" + "Jump link" + "</a>";
String contentInfo = msgContentEN + " " + href;
Map<String,Object> sendMessageMap = new HashMap<>();
sendMessageMap.put("hrefFeishu",hrefFeishu);
sendMessageMap.put("contentInfo",contentInfo);
//发送消息
projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLibraryBase.getId(),sendMessageMap);
projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLibraryBase.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK);
}
}
}
@@ -1,9 +1,12 @@
package com.jero.modules.project.job;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.common.constant.enums.MessageTypeEnum;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.project.entity.*;
import com.jero.modules.project.enums.DesignComplianceStatusEnum;
import com.jero.modules.project.enums.JumpLinkEnum;
import com.jero.modules.project.enums.MsgTypeEnum;
import com.jero.modules.project.enums.SendMsgFlagEnum;
import com.jero.modules.project.mapper.ProjectLawsInventoryEOMapper;
import com.jero.modules.project.mapper.ProjectLibraryBaseMapper;
@@ -74,7 +77,7 @@ public class PrehomoJob implements Job {
queryWrapper.lambda().in(ProjectLibraryBase::getId,projectLibraryIdList);
List<ProjectLibraryBase> projectLibraryBaseList = projectLibraryBaseMapper.selectList(queryWrapper);
if(CollectionUtils.isNotEmpty(projectLibraryBaseList)){
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date currentDate = new Date();
@@ -137,9 +140,17 @@ public class PrehomoJob implements Job {
//您XXX(项目名称)中GB 7258的Pre-Homo确认剩余处理时间还有3天,请及时查看处理
//The remaining processing time for the Pre-Homo confirmation of GB 7258 in XXX (project name) is 3 days. Please check and handle it in time.
String msgContentEN = "The remaining processing time for the Pre-Homo confirmation of "
+ projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName()
+ projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName() + "-"
+ projectYearNameInfoEO.getYearName()+ " "
+ projectLibraryBase.getTargetMarket()
+ " are 3 days. Please check and handle it in time.";
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setContent("Hello! The remaining processing time for the task are 3 days. Please check and address it in a timely manner.");
feishuMsgVo.setTaskType("Pre-Homo Confirmation");
feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber());
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
//飞书跳转链接
String hrefFeishu = backUrl
+ JumpLinkEnum.PREHOMO_AFFIRM_LINK.getLink()
@@ -157,7 +168,7 @@ public class PrehomoJob implements Job {
sendMessageMap.put("contentInfo",contentInfo);
//发送消息
projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap);
projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK);
}
if(CollectionUtils.isNotEmpty(currentDaysUserIdList)){
@@ -166,9 +177,15 @@ public class PrehomoJob implements Job {
//您XXX(项目名称)中GB 7258的Pre-Homo确认任务今天即将结束,请及时查看处理
//The the Pre-Homo confirmation of GB 7258 in XXX (project name) is coming to an end today. Please check and deal with it in time
String msgContentEN = "The the Pre-Homo confirmation of "
+ projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName()
+ projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()
+ " will expire today. Please check and address it in time.";
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setContent("Hello! The task will expire today. Please check and address it in a timely manner.");
feishuMsgVo.setTaskType("Pre-Homo Confirmation");
feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber());
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
//飞书跳转链接
String hrefFeishu = backUrl
+ JumpLinkEnum.PREHOMO_AFFIRM_LINK.getLink()
@@ -186,7 +203,7 @@ public class PrehomoJob implements Job {
sendMessageMap.put("contentInfo",contentInfo);
//发送消息
projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap);
projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK);
}
}
}
@@ -1,6 +1,8 @@
package com.jero.modules.project.job;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.common.constant.enums.MessageTypeEnum;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.project.entity.*;
import com.jero.modules.project.enums.DesignComplianceStatusEnum;
import com.jero.modules.project.enums.JumpLinkEnum;
@@ -73,7 +75,7 @@ public class VerifyComplianceJob implements Job {
queryWrapper.lambda().in(ProjectLibraryBase::getId,projectLibraryIdList);
List<ProjectLibraryBase> projectLibraryBaseList = projectLibraryBaseMapper.selectList(queryWrapper);
if(CollectionUtils.isNotEmpty(projectLibraryBaseList)){
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date currentDate = new Date();
@@ -135,9 +137,17 @@ public class VerifyComplianceJob implements Job {
//您XXX(项目名称)中GB 7258的验证符合性确认剩余处理时间还有3天,请及时查看处理
//The remaining processing time for the Verify compliance confirmation of GB 7258 in XXX (project name) is 3 days. Please check and handle it in time.
String msgContentEN = "The remaining processing time for the validation compliance confirmation of "
+ projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName()
+ projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName() + "-"
+ projectYearNameInfoEO.getYearName()+ " "
+ projectLibraryBase.getTargetMarket()
+ " are 3 days. Please check and handle it in time.";
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setContent("Hello! The remaining processing time for the task are 3 days. Please check and address it in a timely manner.");
feishuMsgVo.setTaskType("Validation Compliance Confirmation");
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber());
//飞书跳转链接
String hrefFeishu = backUrl
+ JumpLinkEnum.VERIFY_AFFIRM_LINK.getLink()
@@ -155,7 +165,7 @@ public class VerifyComplianceJob implements Job {
sendMessageMap.put("contentInfo",contentInfo);
//发送消息
projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap);
projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK);
}
if(CollectionUtils.isNotEmpty(currentDaysUserIdList)){
@@ -164,9 +174,15 @@ public class VerifyComplianceJob implements Job {
//您XXX(项目名称)中GB 7258的验证符合性确认任务今天即将结束,请及时查看处理
//The the Verify compliance confirmation of GB 7258 in XXX (project name) is coming to an end today. Please check and deal with it in time
String msgContentEN = "The the validation compliance confirmation of "
+ projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName()
+ projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()
+ " will expire today. Please check and address it in time.";
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setContent("Hello! The task will expire today. Please check and address it in a timely manner.");
feishuMsgVo.setTaskType("Validation Compliance Confirmation");
feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber());
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
//飞书跳转链接
String hrefFeishu = backUrl
+ JumpLinkEnum.VERIFY_AFFIRM_LINK.getLink()
@@ -184,7 +200,7 @@ public class VerifyComplianceJob implements Job {
sendMessageMap.put("contentInfo",contentInfo);
//发送消息
projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap);
projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK);
}
}
}
@@ -1,6 +1,8 @@
package com.jero.modules.project.job;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.common.constant.enums.MessageTypeEnum;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.project.entity.*;
import com.jero.modules.project.enums.DesignComplianceStatusEnum;
import com.jero.modules.project.enums.JumpLinkEnum;
@@ -73,7 +75,7 @@ public class designComplianceJob implements Job {
queryWrapper.lambda().in(ProjectLibraryBase::getId,projectLibraryIdList);
List<ProjectLibraryBase> projectLibraryBaseList = projectLibraryBaseMapper.selectList(queryWrapper);
if(CollectionUtils.isNotEmpty(projectLibraryBaseList)){
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date currentDate = new Date();
@@ -137,8 +139,16 @@ public class designComplianceJob implements Job {
//您XXX(项目名称)中GB 7258的设计符合性确认剩余处理时间还有3天,请及时查看处理
String msgContentEN = "The remaining processing time for the design compliance confirmation for "
+ projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName()
+ projectYearNameInfoEO.getYearName()+ " "
+ projectLibraryBase.getTargetMarket()
+ " are 3 days. Please check and address it in a timely manner.";
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setContent("Hello! The remaining processing time for the task are 3 days. Please check and address it in a timely manner.");
feishuMsgVo.setTaskType("Design Compliance Confirmation");
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber());
//飞书跳转链接
String hrefFeishu = backUrl + JumpLinkEnum.DESIGN_AFFIRM_LINK.getLink() + projectLibraryBase.getId() + JumpLinkEnum.DESIGN_AFFIRM_LINK.getType();
//系统内部跳转链接
@@ -151,17 +161,23 @@ public class designComplianceJob implements Job {
sendMessageMap.put("contentInfo",contentInfo);
//发送消息
projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap);
projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK);
}
if(CollectionUtils.isNotEmpty(currentDaysUserIdList)){
currentDaysUserIdList = currentDaysUserIdList.stream().distinct().collect(Collectors.toList());
//您XXX(项目名称)中GB 7258的设计符合性确认任务今天即将结束,请及时查看处理
String msgContentEN = "The the design compliance confirmation for "
String msgContentEN = "The design compliance confirmation of "
+ projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName()
+ " will expire today. Please check and address it in time.";
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setContent("Hello! The task will expire today. Please check and address it in a timely manner.");
feishuMsgVo.setTaskType("Design Compliance Confirmation");
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber());
//飞书跳转链接
String hrefFeishu = backUrl
+ JumpLinkEnum.DESIGN_AFFIRM_LINK.getLink()
@@ -179,7 +195,7 @@ public class designComplianceJob implements Job {
sendMessageMap.put("contentInfo",contentInfo);
//发送消息
projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap);
projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK);
}
}
}
@@ -44,7 +44,7 @@
</if>
AND sd.dict_code = #{dictCode}
</where>
ORDER BY sdi.sort_order
ORDER BY sdi.item_text ASC
</select>
<select id="queryById" resultType="com.jero.modules.project.entity.ProjectRelatedPersonnel">
@@ -4,7 +4,9 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.itextpdf.text.DocumentException;
import com.jero.common.api.vo.Result;
import com.jero.common.constant.enums.MessageTypeEnum;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.project.entity.ProjectLawsInventoryEO;
import com.jero.modules.system.entity.SysRole;
import org.springframework.web.multipart.MultipartFile;
@@ -76,7 +78,7 @@ public interface IProjectLawsInventoryEOService extends IService<ProjectLawsInve
*/
Result<?> updateStatusBatch(JSONObject json);
void sendMessage(String msgContent, List<String> userIdList,String projectLibraryId,Map<String,Object> params);
void sendMessage(String msgContent, List<String> userIdList, String projectLibraryId, Map<String,Object> params, FeishuMsgVo feishuMsgVo, MessageTypeEnum messageType);
/**
* 匹配相关人员
@@ -35,6 +35,7 @@ import com.jero.modules.dummy.service.impl.DummyInventoryBaseEOServiceImpl;
import com.jero.modules.dummy.util.DeepCopyListUtil;
import com.jero.modules.dummy.util.ListDiff;
import com.jero.modules.feishu.service.IFeishuService;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.message.websocket.WebSocket;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService;
@@ -646,6 +647,166 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
}
List<ProjectLawsInventoryEO> result = super.baseMapper.selectList(projectLawsInventoryEOQueryWrapper);
dataDispose(result,currentUser,isProjectRole,projectLawsInventoryEO.getCut());
long startTime = System.currentTimeMillis();
dataDictDispose(result,projectLawsInventoryEO.getCut());
log.debug("处理数据字典消耗时间:" + (System.currentTimeMillis() - startTime));
return result;
}
/**
* 数据字典数据处理方法
* @param result 返回值
* @param cut 中英文切换
*/
public void dataDictDispose(List<ProjectLawsInventoryEO> result,String cut){
if(CollectionUtils.isNotEmpty(result)){
List<SysDictItem> sysDictItems = sysDictItemServiceImpl.getBaseMapper().selectItemsAll();
for (ProjectLawsInventoryEO projectLawsInventoryEO : result) {
//处理适用地区
String region = projectLawsInventoryEO.getRegion();
if(StringUtils.isNotEmpty(region)){
String region_dictText = disposeShowDictItemValue(sysDictItems, region,cut,ProjectInventoryFieldEnum.REGION.getValue());
projectLawsInventoryEO.setRegion_dictText(region_dictText);
}
//处理实施类别
String implementType = projectLawsInventoryEO.getImplementType();
if(StringUtils.isNotEmpty(implementType)){
String implementType_dictText = disposeShowDictItemValue(sysDictItems, implementType,cut,ProjectInventoryFieldEnum.IMPLEMENT_TYPE.getValue());
projectLawsInventoryEO.setImplementType_dictText(implementType_dictText);
}
//处理认证类型
String attestationType = projectLawsInventoryEO.getAttestationType();
if(StringUtils.isNotEmpty(attestationType)){
String attestationType_dictText = disposeShowDictItemValue(sysDictItems, attestationType,cut,ProjectInventoryFieldEnum.ATTESTATION_TYPE.getValue());
projectLawsInventoryEO.setAttestationType_dictText(attestationType_dictText);
}
//处理认证级别
String attestationRank = projectLawsInventoryEO.getAttestationRank();
if(StringUtils.isNotEmpty(attestationRank)){
String attestationRank_dictText = disposeShowDictItemValue(sysDictItems, attestationRank,cut,ProjectInventoryFieldEnum.ATTESTATION_RANK.getValue());
projectLawsInventoryEO.setAttestationRank_dictText(attestationRank_dictText);
}
//处理责任领域
String dutyTerritory = projectLawsInventoryEO.getDutyTerritory();
if(StringUtils.isNotEmpty(dutyTerritory)){
String dutyTerritory_dictText = disposeShowDictItemValue(sysDictItems, dutyTerritory,cut,ProjectInventoryFieldEnum.DUTY_TERRITORY.getValue());
projectLawsInventoryEO.setDutyTerritory_dictText(dutyTerritory_dictText);
}
//处理设计符合性确认-交付物类型
String designDeliverableType = projectLawsInventoryEO.getDesignDeliverableType();
if(StringUtils.isNotEmpty(designDeliverableType)){
String designDeliverableType_dictText = disposeShowDictItemValue(sysDictItems, designDeliverableType,cut,ProjectInventoryFieldEnum.DESIGN_DELIVERABLE_TYPE.getValue());
projectLawsInventoryEO.setDesignDeliverableType_dictText(designDeliverableType_dictText);
}
//处理设计符合性确认-发起人角色
String designInitiator = projectLawsInventoryEO.getDesignInitiator();
if(StringUtils.isNotEmpty(designInitiator)){
String designInitiator_dictText = disposeShowDictItemValue(sysDictItems, designInitiator,cut,ProjectInventoryFieldEnum.DESIGN_INITIATOR.getValue());
projectLawsInventoryEO.setDesignInitiator_dictText(designInitiator_dictText);
}
//处理设计符合性确认-责任人角色
String designDuty = projectLawsInventoryEO.getDesignDuty();
if(StringUtils.isNotEmpty(designDuty)){
String designDuty_dictText = disposeShowDictItemValue(sysDictItems, designDuty,cut,ProjectInventoryFieldEnum.DESIGN_DUTY.getValue());
projectLawsInventoryEO.setDesignDuty_dictText(designDuty_dictText);
}
//处理prehomo确认-交付物类型
String prehomoDeliverableType = projectLawsInventoryEO.getPrehomoDeliverableType();
if(StringUtils.isNotEmpty(prehomoDeliverableType)){
String prehomoDeliverableType_dictText = disposeShowDictItemValue(sysDictItems, prehomoDeliverableType,cut,ProjectInventoryFieldEnum.PREHOMO_DELIVERABLE_TYPE.getValue());
projectLawsInventoryEO.setPrehomoDeliverableType_dictText(prehomoDeliverableType_dictText);
}
//处理prehomo确认-发起人角色
String prehomoInitiator = projectLawsInventoryEO.getPrehomoInitiator();
if(StringUtils.isNotEmpty(prehomoInitiator)){
String prehomoInitiator_dictText = disposeShowDictItemValue(sysDictItems, prehomoInitiator,cut,ProjectInventoryFieldEnum.PREHOMO_INITIATOR.getValue());
projectLawsInventoryEO.setPrehomoInitiator_dictText(prehomoInitiator_dictText);
}
//处理prehomo确认-责任人角色
String prehomoDuty = projectLawsInventoryEO.getPrehomoDuty();
if(StringUtils.isNotEmpty(prehomoDuty)){
String prehomoDuty_dictText = disposeShowDictItemValue(sysDictItems, prehomoDuty,cut,ProjectInventoryFieldEnum.PREHOMO_DUTY.getValue());
projectLawsInventoryEO.setPrehomoDuty_dictText(prehomoDuty_dictText);
}
//处理验证符合性确认-交付物类型
String verifyDeliverableType = projectLawsInventoryEO.getVerifyDeliverableType();
if(StringUtils.isNotEmpty(verifyDeliverableType)){
String verifyDeliverableType_dictText = disposeShowDictItemValue(sysDictItems, verifyDeliverableType,cut,ProjectInventoryFieldEnum.VERIFY_DELIVERABLE_TYPE.getValue());
projectLawsInventoryEO.setVerifyDeliverableType_dictText(verifyDeliverableType_dictText);
}
//处理验证符合性确认-发起人角色
String verifyInitiator = projectLawsInventoryEO.getVerifyInitiator();
if(StringUtils.isNotEmpty(verifyInitiator)){
String verifyInitiator_dictText = disposeShowDictItemValue(sysDictItems, verifyInitiator,cut,ProjectInventoryFieldEnum.VERIFY_INITIATOR.getValue());
projectLawsInventoryEO.setVerifyInitiator_dictText(verifyInitiator_dictText);
}
//处理验证符合性确认-责任人角色
String verifyDuty = projectLawsInventoryEO.getVerifyDuty();
if(StringUtils.isNotEmpty(verifyDuty)){
String verifyDuty_dictText = disposeShowDictItemValue(sysDictItems, verifyDuty,cut,ProjectInventoryFieldEnum.VERIFY_DUTY.getValue());
projectLawsInventoryEO.setVerifyDuty_dictText(verifyDuty_dictText);
}
}
}
}
/**
* 处理展示数据字典值
* @param sysDictItems 所有的数据字典项
* @param fieldValues 字段值
* @param cut 中英文切换标识
* @param dicCode 数据字典code码
* @return
*/
public String disposeShowDictItemValue(List<SysDictItem> sysDictItems,String fieldValues,String cut,String dicCode){
String result = "";
List<SysDictItem> sysDictItemList = sysDictItems.stream().filter(e -> {
boolean flag = false;
if(StringUtils.equals(e.getDictCode(),dicCode)){
flag = true;
}
return flag;
}).distinct().collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(sysDictItemList)){
if(StringUtils.equals(cut,CutEnum.CN.getValue())){
result = sysDictItemList.stream().filter(e -> {
boolean flag = false;
List<String> fieldValueStrList = Arrays.asList(fieldValues.split(","));
for (String fieldValueStr : fieldValueStrList) {
if(StringUtils.equals(fieldValueStr,e.getItemValue())){
flag = true;
break;
}
}
return flag;
}).map(SysDictItem::getItemText).collect(Collectors.joining(","));
}else if(StringUtils.equals(cut,CutEnum.EN.getValue())){
result = sysDictItemList.stream().filter(e -> {
boolean flag = false;
List<String> fieldValueStrList = Arrays.asList(fieldValues.split(","));
for (String fieldValueStr : fieldValueStrList) {
if(StringUtils.equals(fieldValueStr,e.getItemValue())){
flag = true;
break;
}
}
return flag;
}).map(SysDictItem::getEnName).collect(Collectors.joining(","));
}
}
return result;
}
@@ -1102,18 +1263,31 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper);
//消息内容
String msgContentEN = currentUser.getUsername() + " initiated the regulation list confirmation for " + projectNameInfoEO.getProjectName()
String msgContentEN = currentUser.getUsername() + " initiated the regulation list confirmation for "
+ projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()
+ ". The due date is" +inventoryAffirmDueDate+ " .Please check and address it in a timely manner.";
// 飞书消息封装
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setContent("Hello! Please check and address this task in a timely manner.");
feishuMsgVo.setTaskType("Regulation List Confirmation");
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
feishuMsgVo.setInitiator(currentUser.getUsername());
feishuMsgVo.setDueDate(inventoryAffirmDueDate);
//飞书跳转链接
String hrefFeishu = backUrl
+ JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink()
+ projectLibraryId + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType()
+ "&projectName=" + projectNameInfoEO.getProjectName();
+ "&projectName=" + projectNameInfoEO.getProjectName() + "-"
+ projectYearNameInfoEO.getYearName()
+ "&targetMarket=" + projectLibraryBase.getTargetMarket();
//系统内部跳转链接
String href = "<a href='"
+ JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() + projectLibraryId + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType()
+ "&projectName=" + projectNameInfoEO.getProjectName()
+ "&projectName=" + projectNameInfoEO.getProjectName() + "-"
+ projectYearNameInfoEO.getYearName()
+ "&targetMarket=" + projectLibraryBase.getTargetMarket()
+ "'>" + "Jump link" + "</a>";
String contentInfo = msgContentEN + " " + href;
Map<String,Object> sendMessageMap = new HashMap<>();
@@ -1121,7 +1295,7 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
sendMessageMap.put("contentInfo",contentInfo);
//发送消息
sendMessage(msgContentEN,userIdList,projectLibraryId,sendMessageMap);
sendMessage(msgContentEN,userIdList,projectLibraryId,sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK);
}
result = "发起清单确认";
@@ -1235,7 +1409,7 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
* @param projectLibraryId
*/
@Override
public void sendMessage(String msgContent, List<String> userIdList,String projectLibraryId,Map<String,Object> sendMessageMap){
public void sendMessage(String msgContent, List<String> userIdList,String projectLibraryId,Map<String,Object> sendMessageMap, FeishuMsgVo feishuMsgVo, MessageTypeEnum messageType){
String idTemp = projectLibraryId;
List<SysUser> sysUsers = sysUserService.listByIds(userIdList);
@@ -1243,7 +1417,7 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
if(CollectionUtils.isNotEmpty(sysUsers)){
thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList());
}
//飞书跳转链接
// //飞书跳转链接
String hrefFeishu = (String) sendMessageMap.get("hrefFeishu");
//消息内容
String contentInfo = (String) sendMessageMap.get("contentInfo");
@@ -1253,9 +1427,16 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
sysAnnouncementService.saveAnnouncement(sysAnnouncement);
sendWebsocket(idTemp, idTemp);
//飞书消息
// //飞书消息
try {
iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), msgContent, MessageTypeEnum.PUSH.getName(), hrefFeishu);
if (feishuMsgVo != null){
// 补充飞书跳转链接
feishuMsgVo.setUrl(hrefFeishu);
feishuMsgVo.setTitle(messageType.getName());
iFeishuService.sendCardMsg(thirdIdList.toArray(new String[]{}), feishuMsgVo);
} else {
iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), msgContent, messageType.getName(), hrefFeishu);
}
} catch (IOException e) {
log.error("飞书消息推送失败");
}
@@ -1605,32 +1786,56 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
projectNameInfoEOQueryWrapper.lambda().eq(ProjectNameInfoEO::getId,projectLibraryBase.getProjectNameId());
ProjectNameInfoEO projectNameInfoEO = projectNameInfoEOMapper.selectOne(projectNameInfoEOQueryWrapper);
QueryWrapper<ProjectYearNameInfoEO> projectYearInfoEOQueryWrapper = new QueryWrapper<>();
projectYearInfoEOQueryWrapper.lambda().eq(ProjectYearNameInfoEO::getId,projectLibraryBase.getYearNameId());
ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper);
SysUser sysUser = sysUserMapper.selectOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getId, currentUserId));
String msgContentEN = "";
List<String> userIdList = new ArrayList<>();
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_START_MSG.getValue())) {
userIdList.add(engineeringInterfacePerson);
msgContentEN = sysUser.getUsername() + " assigned the regulation task confirmation of " + projectNameInfoEO.getProjectName()
+ ".The due date is" +taskAffirmDueDate+ " Please check and address it in a timely manner.";
feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has assigned the task to you. Please check and and handle it in time.");
} else if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_ISSUE_DRE_MSG.getValue())) {
String dreUserId = jsonObject.getString("dreUserId"); //dre用户id
userIdList.add(dreUserId);
msgContentEN = sysUser.getUsername() + " has rejected the regulation task confirmation of " + serialNumber + " in "+ projectNameInfoEO.getProjectName()
+ ".to you. the due date is " +taskAffirmDueDate+ " Please check and handle it in time.";
feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has rejected the task. Please check and and handle it in time.");
} else if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_DRE_REJECTED.getValue())) {
userIdList.add(engineeringInterfacePerson);
msgContentEN = sysUser.getUsername() + " has returned the regulation task confirmation of " + serialNumber +" in "+ projectNameInfoEO.getProjectName()
+ ".The due date is " +taskAffirmDueDate+ " Please check and handle it in time.";
feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has returned the task. Please check and and handle it in time.");
} else if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_DRE_ACCEPTED.getValue())) {
userIdList.add(engineeringInterfacePerson);
msgContentEN = sysUser.getUsername() + " has submitted the regulation task confirmation of " + serialNumber +" in "+ projectNameInfoEO.getProjectName()
+ ".The due date is " +taskAffirmDueDate+ " Please check and handle it in time.";
feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has submitted the task. Please check and and handle it in time.");
}
if(CollectionUtils.isNotEmpty(userIdList) && StringUtils.isNotEmpty(msgContentEN)){
feishuMsgVo.setTaskType("Regulation Task Confirmation");
feishuMsgVo.setRegulationNo(serialNumber);
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
feishuMsgVo.setInitiator(sysUser.getUsername());
feishuMsgVo.setDueDate(taskAffirmDueDate);
//飞书跳转链接
String hrefFeishu = backUrl
+ JumpLinkEnum.TASK_AFFIRM_LINK.getLink()
@@ -1643,7 +1848,7 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
sendMessageMap.put("contentInfo",contentInfo);
//发送消息
sendMessage(msgContentEN,userIdList,id,sendMessageMap);
sendMessage(msgContentEN,userIdList,id,sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK);
}
}
@@ -5788,15 +5993,25 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
//消息内容
String msgContentEN = "Please address the regulation list confirmation process for "+ projectNameInfoEO.getProjectName() +" ASAP. ";
//飞书跳转链接
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setContent("Hello! Please address the regulation list confirmation process ASAP. ");
feishuMsgVo.setTaskType("Regulation List Confirmation");
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
//飞书跳转链接
String hrefFeishu = backUrl
+ JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink()
+ projectLibraryId + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType()
+ "&projectName=" + projectNameInfoEO.getProjectName();
+ projectLibraryId
+ JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType()
+ "&projectName=" + projectNameInfoEO.getProjectName() + "-"
+ projectYearNameInfoEO.getYearName()
+ "&targetMarket=" + projectLibraryBase.getTargetMarket();
//系统内部跳转链接
String href = "<a href='"
+ JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() + projectLibraryId + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType()
+ "&projectName=" + projectNameInfoEO.getProjectName()
+ "&projectName=" + projectNameInfoEO.getProjectName() + "-"
+ projectYearNameInfoEO.getYearName()
+ "&targetMarket=" + projectLibraryBase.getTargetMarket()
+ "'>" + "Jump link" + "</a>";
String contentInfo = msgContentEN + " " + href;
Map<String,Object> sendMessageMap = new HashMap<>();
@@ -5804,7 +6019,7 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
sendMessageMap.put("contentInfo",contentInfo);
//发送消息
sendMessage(msgContentEN,inventoryAffirmUserIdList,projectLibraryId,sendMessageMap);
sendMessage(msgContentEN,inventoryAffirmUserIdList,projectLibraryId,sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK);
}
}
@@ -5835,9 +6050,18 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
projectNameInfoEOQueryWrapper.lambda().eq(ProjectNameInfoEO::getId,projectLibraryBase.getProjectNameId());
ProjectNameInfoEO projectNameInfoEO = projectNameInfoEOMapper.selectOne(projectNameInfoEOQueryWrapper);
QueryWrapper<ProjectYearNameInfoEO> projectYearInfoEOQueryWrapper = new QueryWrapper<>();
projectYearInfoEOQueryWrapper.lambda().eq(ProjectYearNameInfoEO::getId,projectLibraryBase.getYearNameId());
ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper);
//消息内容
String msgContentEN = "Please address the regulation task confirmation process for "+ projectNameInfoEO.getProjectName() +" ASAP. ";
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setContent("Hello! Please address the task ASAP. ");
feishuMsgVo.setTaskType("Regulation List Confirmation");
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
//飞书跳转链接
String hrefFeishu = backUrl + JumpLinkEnum.TASK_AFFIRM_LINK.getLink();
//系统内部跳转链接
@@ -5849,7 +6073,7 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
sendMessageMap.put("contentInfo",contentInfo);
//发送消息
sendMessage(msgContentEN,taskAffirmUserIdList,projectLibraryId,sendMessageMap);
sendMessage(msgContentEN,taskAffirmUserIdList,projectLibraryId,sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK);
}
}
});
@@ -211,6 +211,16 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl<ProjectLibraryBas
*/
@Override
public void checkData(String id, String cut) {
//判断该条项目是否是自己创建,如果不是则不能删除
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
List<ProjectLibraryBase> projectLibraryBases = this.queryById(id);
if(!loginUser.getUsername().equals(projectLibraryBases.get(0).getCreateBy())){
if(CutEnum.CN.getValue().equals(cut)){
throw new JeroBootException("该条项目非本人创建,不能删除");
}else{
throw new JeroBootException("This item is not created by myself and cannot be deleted");
}
}
QueryWrapper<ProjectLawsInventoryEO> lawsInventoryQueryWrapper = new QueryWrapper<>();
lawsInventoryQueryWrapper.eq("project_library_id",id);
List<ProjectLawsInventoryEO> lawsInventoryRecords = projectLawsInventoryEOMapper.selectList(lawsInventoryQueryWrapper);
@@ -1063,8 +1063,6 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
}
}
if (CollectionUtils.isNotEmpty(certificationEngineerNameList) && StringUtils.isNotBlank(certificationEngineerNameList.get(0))) {
certificationEngineerNameList = certificationEngineerNameList.stream().distinct().collect(Collectors.toList());
certificationEngineerUsers=sysUserService.queryUserIdListByNameList(certificationEngineerNameList);
@@ -1139,28 +1137,29 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
List<ProjectLibraryBase> baseDataList = projectLibraryBaseService.list(baseQueryWrapper.eq("id", projectId));
if (CollectionUtils.isNotEmpty(baseDataList)) {
String baseCertificationEngineer = baseDataList.get(0).getCertificationEngineer();
List<String> baseCertificationEngineerIdList = Arrays.asList(baseCertificationEngineer.split(","));
String certificationEngineerName;
QueryWrapper<SysUser> userqueryWrapper = new QueryWrapper<>();
userqueryWrapper.in("id ", baseCertificationEngineerIdList);
List<SysUser> userList = sysUserMapper.selectList(userqueryWrapper);
if (CollectionUtils.isNotEmpty(userList)) {
for (String baseUserId : baseCertificationEngineerIdList) {
// 判断是否有工程师
if (StringUtils.isNotEmpty(baseCertificationEngineer)){
List<String> baseCertificationEngineerIdList = Arrays.asList(baseCertificationEngineer.split(","));
String certificationEngineerName;
QueryWrapper<SysUser> userqueryWrapper = new QueryWrapper<>();
userqueryWrapper.in("id ", baseCertificationEngineerIdList);
List<SysUser> userList = sysUserMapper.selectList(userqueryWrapper);
if (CollectionUtils.isNotEmpty(userList)) {
for (String baseUserId : baseCertificationEngineerIdList) {
if (StringUtils.isNotEmpty(baseUserId)) {
certificationEngineerName = userList.stream().filter(e -> baseUserId.equals(e.getId()))
.map(sysUser -> sysUser.getUsername()).collect(Collectors.joining(","));
ProjectRelatedPersonnel relatedPersonnel =new ProjectRelatedPersonnel();
relatedPersonnel.setCertificationEngineer(baseUserId);
relatedPersonnel.setCertificationEngineerName(certificationEngineerName);
certificationEngineerList.add(relatedPersonnel);
if (StringUtils.isNotEmpty(baseUserId)) {
certificationEngineerName = userList.stream().filter(e -> baseUserId.equals(e.getId()))
.map(sysUser -> sysUser.getUsername()).collect(Collectors.joining(","));
ProjectRelatedPersonnel relatedPersonnel =new ProjectRelatedPersonnel();
relatedPersonnel.setCertificationEngineer(baseUserId);
relatedPersonnel.setCertificationEngineerName(certificationEngineerName);
certificationEngineerList.add(relatedPersonnel);
}
}
}
}
}
certificationEngineerList = certificationEngineerList.stream().distinct().collect(Collectors.toList());
return certificationEngineerList;
@@ -111,8 +111,9 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
}
}
}
List<SysDictItem> dictItemList = sysDictItemServiceImpl.selectItemsByDictCode("region");
for (ProjectLibraryBase libraryBase : projectLibraryBaseList) {
targetMarket(projectLibraryBase, dictItemList, libraryBase);
Map<String,Object> mapList = new HashMap<>();
List<List<TimeNodeVO>> collect = new ArrayList<>();
if(ObjectUtils.isNotEmpty(startTime) && ObjectUtils.isNotEmpty(endTime)){
@@ -124,7 +125,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
if(collect.size() != 0){
index ++;
mapList.put("index",index);
mapList.put("projectName",libraryBase.getProjectName());
mapList.put("projectName",libraryBase.getProjectName()+" "+libraryBase.getYearName()+"-"+libraryBase.getTargetMarket());
mapList.put("data",collect);
result.add(mapList);
}
@@ -5,7 +5,11 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.api.vo.Result;
import com.jero.common.constant.enums.CutEnum;
import com.jero.common.constant.enums.MessageTypeEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.project.entity.*;
import com.jero.modules.project.enums.JumpLinkEnum;
import com.jero.modules.project.enums.MsgTypeEnum;
@@ -62,6 +66,8 @@ public class ProjectTaskInventoryDetailEOServiceImpl extends ServiceImpl<Project
*/
@Override
public void add(JSONObject jsonObject) {
String cut = jsonObject.getString("cut");
ProjectTaskInventoryDetailEO taskInventoryDetail = JSONObject.parseObject(JSONObject.toJSONString(jsonObject), ProjectTaskInventoryDetailEO.class);
List<ProjectTaskInventoryDetailEO> projectTaskInventoryDetailEOAddList = new ArrayList<>();
@@ -79,6 +85,15 @@ public class ProjectTaskInventoryDetailEOServiceImpl extends ServiceImpl<Project
projectTaskInventoryDetail.setStatus(taskInventoryDetail.getStatus());
projectTaskInventoryDetail.setTaskDefinitionKey(taskInventoryDetail.getTaskDefinitionKey());
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
if(StringUtils.equals(projectTaskInventoryDetail.getUserId(),currentUser.getId())){
if(StringUtils.equals(cut, CutEnum.CN.getValue())){
throw new JeroBootException("分发工程师时不能分发给自己。");
}else if(StringUtils.equals(cut, CutEnum.EN.getValue())){
throw new JeroBootException("You cannot distribute to yourself when you distribute to engineers.");
}
}
//这个工程师被分发过.
if(StringUtils.isNotEmpty(projectTaskInventoryDetail.getId())){
projectTaskInventoryDetailEOUpdateList.add(projectTaskInventoryDetail);
@@ -260,22 +275,44 @@ public class ProjectTaskInventoryDetailEOServiceImpl extends ServiceImpl<Project
ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper);
String id = UUID.randomUUID().toString().replace("-", "");
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
//给工程师下发消息
if(org.apache.commons.lang3.StringUtils.equals(projectTaskInventoryDetailEO.getMsgType(), MsgTypeEnum.DESIGN_ISSUE_DRE_MSG.getValue())){
//XXX has distributed the design compliance confirmation process of GB 7258 in XXX (project name) to you. Please check and handle it in time.
msgContentEN = currentUser.getUsername() + " has distributed the design compliance confirmation process of "
+ projectLawsInventoryEO.getSerialNumber() + " in "+ projectNameInfoEO.getProjectName()
msgContentEN = currentUser.getUsername() + " has assigned the design compliance confirmation process of "
+ projectLawsInventoryEO.getSerialNumber() + " in "
+ projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()
+ " to you. Please check and handle it in time.";
feishuMsgVo.setContent("Hello! " + currentUser.getUsername() + " has assigned the task to you. Please check and handle it in time.");
feishuMsgVo.setTaskType("Design Compliance Confirmation");
feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber());
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
}else if(org.apache.commons.lang3.StringUtils.equals(projectTaskInventoryDetailEO.getMsgType(), MsgTypeEnum.PREHOMO_ISSUE_DRE_MSG.getValue())){
//XXX has distributed the Pre-Homo confirmation process of GB 7258 in XXX (project name) to you. Please check and handle it in time.
msgContentEN = currentUser.getUsername() + " has assigned the Pre-Homo confirmation process of "
+ projectLawsInventoryEO.getSerialNumber() + " in "+ projectNameInfoEO.getProjectName()
+ projectLawsInventoryEO.getSerialNumber() + " in "
+ projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()
+ " to you. Please check and handle it in time.";
feishuMsgVo.setContent("Hello! " + currentUser.getUsername() + " has assigned the task to you. Please check and handle it in time.");
feishuMsgVo.setTaskType("Pre-Homo Confirmation");
feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber());
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
}else if(org.apache.commons.lang3.StringUtils.equals(projectTaskInventoryDetailEO.getMsgType(), MsgTypeEnum.VERIFY_ISSUE_DRE_MSG.getValue())){
//XXX has distributed the Verify compliance confirmation process of GB 7258 in XXX (project name) to you. Please check and handle it in time.
msgContentEN = currentUser.getUsername() + " has assigned the validation compliance confirmation process of "
+ projectLawsInventoryEO.getSerialNumber() + " in "+ projectNameInfoEO.getProjectName()
+ projectLawsInventoryEO.getSerialNumber() + " in "
+ projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()
+ " to you. Please check and handle it in time.";
feishuMsgVo.setContent("Hello! " + currentUser.getUsername() + " has assigned the task to you. Please check and handle it in time.");
feishuMsgVo.setTaskType("Validation Compliance Confirmation");
feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber());
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
}
if(CollectionUtils.isNotEmpty(userIdList) && org.apache.commons.lang3.StringUtils.isNotEmpty(msgContentEN)){
//飞书跳转链接
@@ -295,7 +332,7 @@ public class ProjectTaskInventoryDetailEOServiceImpl extends ServiceImpl<Project
sendMessageMap.put("contentInfo",contentInfo);
//发送消息
SendMessageUtils.sendMessage(msgContentEN,userIdList,id,sendMessageMap);
SendMessageUtils.sendMessage(msgContentEN,userIdList,id,sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK);
}
}
}
@@ -6,9 +6,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.api.vo.Result;
import com.jero.common.constant.enums.CutEnum;
import com.jero.common.constant.enums.MessageTypeEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.query.QueryGenerator;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.project.entity.*;
import com.jero.modules.project.enums.*;
import com.jero.modules.project.mapper.*;
@@ -315,21 +317,42 @@ public class ProjectTaskInventoryEOServiceImpl extends ServiceImpl<ProjectTaskIn
String dreUserIds = jsonObject.getString("dreUserIds"); //dre用户id
userIdList.addAll(Arrays.asList(dreUserIds.split(",")));
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
if(StringUtils.equals(msgType,MsgTypeEnum.DESIGN_REMIND_MSG.getValue())){
//Please check and deal with the design compliance confirmation process of GB 7258 in XXX (project name) in time.
msgContentEN = "Please check and deal with the design compliance confirmation process of "
+ serialNumber + " in "+ projectNameInfoEO.getProjectName()
+ serialNumber + " in "
+ projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()
+ " in time.";
feishuMsgVo.setContent("Hello! Please address the task ASAP. ");
feishuMsgVo.setTaskType("Design Compliance Confirmation");
feishuMsgVo.setRegulationNo(serialNumber);
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
}else if(StringUtils.equals(msgType,MsgTypeEnum.PREHOMO_REMIND_MSG.getValue())){
//Please check and deal with the Pre-Homo confirmation process of GB 7258 in XXX (project name) in time.
msgContentEN = "Please check and address the Pre-Homo confirmation process of "
+ serialNumber + " in "+ projectNameInfoEO.getProjectName()
+ " in time.";
feishuMsgVo.setContent("Hello! Please address the task ASAP. ");
feishuMsgVo.setTaskType("Pre-Homo Confirmation");
feishuMsgVo.setRegulationNo(serialNumber);
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
}else if(StringUtils.equals(msgType,MsgTypeEnum.VERIFY_REMIND_MSG.getValue())){
//Please check and deal with the Verify compliance confirmation process of GB 7258 in XXX (project name) in time.
msgContentEN = "Please check and address the Verify compliance confirmation process of "
msgContentEN = "Please check and address the validation compliance confirmation process of "
+ serialNumber + " in "+ projectNameInfoEO.getProjectName()
+ " in time.";
feishuMsgVo.setContent("Hello! Please address the task ASAP. ");
feishuMsgVo.setTaskType("Validation Compliance Confirmation");
feishuMsgVo.setRegulationNo(serialNumber);
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
}
if(CollectionUtils.isNotEmpty(userIdList) && StringUtils.isNotEmpty(msgContentEN)){
@@ -337,12 +360,17 @@ public class ProjectTaskInventoryEOServiceImpl extends ServiceImpl<ProjectTaskIn
//飞书跳转链接
String hrefFeishu = backUrl
+ JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink()
+ projectLibraryBase.getId() + JumpLinkEnum.DESIGN_AFFIRM_LINK.getType()
+ "&projectName=" + projectNameInfoEO.getProjectName();
+ projectLibraryBase.getId()
+ JumpLinkEnum.DESIGN_AFFIRM_LINK.getType()
+ "&projectName=" + projectNameInfoEO.getProjectName() + "-"
+ projectYearNameInfoEO.getYearName()
+ "&targetMarket=" + projectLibraryBase.getTargetMarket();
//系统内部跳转链接
String href = "<a href='"
+ JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() + projectLibraryBase.getId() + JumpLinkEnum.DESIGN_AFFIRM_LINK.getType()
+ "&projectName=" + projectNameInfoEO.getProjectName()
+ "&projectName=" + projectNameInfoEO.getProjectName() + "-"
+ projectYearNameInfoEO.getYearName()
+ "&targetMarket=" + projectLibraryBase.getTargetMarket()
+ "'>" + "Jump link" + "</a>";
String contentInfo = msgContentEN + " " + href;
Map<String,Object> sendMessageMap = new HashMap<>();
@@ -350,7 +378,7 @@ public class ProjectTaskInventoryEOServiceImpl extends ServiceImpl<ProjectTaskIn
sendMessageMap.put("contentInfo",contentInfo);
//发送消息
SendMessageUtils.sendMessage(msgContentEN,userIdList,projectLibraryId,sendMessageMap);
SendMessageUtils.sendMessage(msgContentEN,userIdList,projectLibraryId,sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK);
}
return new Result<>().success("提醒办理成功!");
}
@@ -607,6 +635,10 @@ public class ProjectTaskInventoryEOServiceImpl extends ServiceImpl<ProjectTaskIn
projectNameInfoEOQueryWrapper.lambda().eq(ProjectNameInfoEO::getId,projectLibraryBase.getProjectNameId());
ProjectNameInfoEO projectNameInfoEO = projectNameInfoEOMapper.selectOne(projectNameInfoEOQueryWrapper);
QueryWrapper<ProjectYearNameInfoEO> projectYearInfoEOQueryWrapper = new QueryWrapper<>();
projectYearInfoEOQueryWrapper.lambda().eq(ProjectYearNameInfoEO::getId,projectLibraryBase.getYearNameId());
ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper);
SysUser sysUser = sysUserMapper.selectOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getId, currentUserId));
String msgContentEN = "";
@@ -615,10 +647,17 @@ public class ProjectTaskInventoryEOServiceImpl extends ServiceImpl<ProjectTaskIn
userIdList.addAll(Arrays.asList(dreUserIds.split(",")));
if (StringUtils.equals(msgType, MsgTypeEnum.DESIGN_ISSUE_DRE_MSG.getValue())) {
msgContentEN = sysUser.getUsername() + "has assigned the design compliance confirmation process of " + serialNumber + " in "+ projectNameInfoEO.getProjectName()
+ " to you. Please check and handle it in time.";
msgContentEN = sysUser.getUsername() + "has assigned the design compliance confirmation process of " + serialNumber + " in "
+ projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()
+ " to you. Please check and handle it in time.";
}
FeishuMsgVo feishuMsgVo = new FeishuMsgVo();
feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has assigned the task to you. Please check and handle it in time.");
feishuMsgVo.setTaskType("Design Compliance Confirmation");
feishuMsgVo.setRegulationNo(serialNumber);
feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket());
if(CollectionUtils.isNotEmpty(userIdList) && StringUtils.isNotEmpty(msgContentEN)){
//飞书跳转链接
@@ -626,11 +665,15 @@ public class ProjectTaskInventoryEOServiceImpl extends ServiceImpl<ProjectTaskIn
+ JumpLinkEnum.DESIGN_AFFIRM_LINK.getLink()
+ projectLibraryBase.getId()
+ JumpLinkEnum.DESIGN_AFFIRM_LINK.getType()
+ "&projectName=" + projectNameInfoEO.getProjectName();
+ "&projectName=" + projectNameInfoEO.getProjectName() + "-"
+ projectYearNameInfoEO.getYearName()
+ projectLibraryBase.getTargetMarket();
//系统内部跳转链接
String href = "<a href='"
+ JumpLinkEnum.DESIGN_AFFIRM_LINK.getLink() + projectLibraryBase.getId() + JumpLinkEnum.DESIGN_AFFIRM_LINK.getType()
+ "&projectName=" + projectNameInfoEO.getProjectName()
+ "&projectName=" + projectNameInfoEO.getProjectName() + "-"
+ projectYearNameInfoEO.getYearName()
+ projectLibraryBase.getTargetMarket()
+ "'>" + "Jump link" + "</a>";
String contentInfo = msgContentEN + " " + href;
Map<String,Object> sendMessageMap = new HashMap<>();
@@ -638,7 +681,7 @@ public class ProjectTaskInventoryEOServiceImpl extends ServiceImpl<ProjectTaskIn
sendMessageMap.put("contentInfo",contentInfo);
//发送消息
SendMessageUtils.sendMessage(msgContentEN,userIdList,id,sendMessageMap);
SendMessageUtils.sendMessage(msgContentEN,userIdList,id,sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK);
}
}
@@ -5,6 +5,7 @@ import com.jero.common.constant.CommonConstant;
import com.jero.common.constant.WebsocketConst;
import com.jero.common.constant.enums.MessageTypeEnum;
import com.jero.modules.feishu.service.IFeishuService;
import com.jero.modules.feishu.vo.FeishuMsgVo;
import com.jero.modules.message.websocket.WebSocket;
import com.jero.modules.system.entity.SysAnnouncement;
import com.jero.modules.system.entity.SysUser;
@@ -53,7 +54,7 @@ public class SendMessageUtils {
SendMessageUtils.webSocket = webSocket;
}
public static void sendMessage(String msgContent, List<String> userIdList, String projectLibraryId, Map<String,Object> sendMessageMap) {
public static void sendMessage(String msgContent, List<String> userIdList, String projectLibraryId, Map<String,Object> sendMessageMap, FeishuMsgVo feishuMsgVo, MessageTypeEnum messageType) {
String idTemp = projectLibraryId;
List<SysUser> sysUsers = sysUserService.listByIds(userIdList);
@@ -74,7 +75,14 @@ public class SendMessageUtils {
//飞书消息
try {
iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), msgContent, MessageTypeEnum.PUSH.getName(), hrefFeishu);
if (feishuMsgVo != null){
// 补充飞书跳转链接
feishuMsgVo.setUrl(hrefFeishu);
feishuMsgVo.setTitle(messageType.getName());
iFeishuService.sendCardMsg(thirdIdList.toArray(new String[]{}), feishuMsgVo);
} else {
iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), msgContent, messageType.getName(), hrefFeishu);
}
} catch (IOException e) {
logger.error("飞书消息推送失败");
}
+4 -1
View File
@@ -872,7 +872,8 @@ module.exports = {
yellowSchedule: 'Yellow: non conformance / to be tracked, with acceptable scheme and schedule',
greenRequirements: 'Green: confirm that it meets or meets the current requirements',
blueUndeterminedState: 'Blue: undetermined state',
authenticationMessage: 'Authentication Message',
authenticationMessage: 'Homo Parameter Task',
taskRegulationComplianceTask: 'Regulation Compliance Task',
accept: 'Accept',
notLaunch: 'Not start',
refuse: 'Reject',
@@ -959,7 +960,9 @@ module.exports = {
question: 'Question',
ConfirmQuestion: 'Confirm Question',
disableInput: 'Disable input',
taskConfirmationDeadline: 'Task Confirmation Deadline',
OnlyOrTaskconfirmationOut: 'Only when the list confirmation status or task confirmation status is to be confirmed can the reminder be carried out',
taskConfirmationResponsiblePerson:'Task confirmation of responsible person',
or: 'or',
warningTime: 'Warning time',
RegulationMonthlyManagement: 'Regulation Monthly Management',
+4 -2
View File
@@ -963,8 +963,10 @@ module.exports = {
documentLibraryDetails: '文档库详情',
question: '催办',
ConfirmQuestion: '确认催办',
OnlyOrTaskconfirmationOut: '只有清单确认状态或任务确认状态为待确认时才可以进行催办',
disableInput: '禁止输入',
OnlyOrTaskconfirmationOut:'只有清单确认状态或任务确认状态为待确认时才可以进行催办',
disableInput:'禁止输入',
taskConfirmationDeadline:'任务确认截止时间',
taskConfirmationResponsiblePerson:'责任人任务确认',
or: '或',
warningTime: '预警时间',
RegulationMonthlyManagement: '法规月报管理',
+45 -38
View File
@@ -3,13 +3,20 @@
<a-radio v-for="(item, key) in dictOptions" :key="key" :value="item.value">{{ item.text }}</a-radio>
</a-radio-group>
<a-radio-group v-else-if="tagType=='radioButton'" buttonStyle="solid" @change="handleInput" :value="getValueSting" :disabled="disabled">
<a-radio-group v-else-if="tagType=='radioButton'" buttonStyle="solid" @change="handleInput" :value="getValueSting"
:disabled="disabled">
<a-radio-button v-for="(item, key) in dictOptions" :key="key" :value="item.value">{{ item.text }}</a-radio-button>
</a-radio-group>
<a-select v-else-if="tagType=='select'" allowClear :getPopupContainer = "getPopupContainer" :placeholder="placeholder" :disabled="disabled" :value="getValueSting" @change="handleInput">
<!-- <a-select-option :value="null">{{$t('pleaseSelect')}}</a-select-option>-->
<a-select-option v-for="(item, key) in dictOptionsValue" :key="key" :value="item.value">
<a-select v-else-if="tagType=='select'" allowClear :getPopupContainer="getPopupContainer"
show-search
optionFilterProp="label"
:placeholder="placeholder" :disabled="disabled" :value="getValueSting" @change="handleInput">
<!-- <a-select-option :value="null">{{$t('pleaseSelect')}}</a-select-option>-->
<a-select-option v-for="(item, key) in dictOptionsValue"
:key="key"
:label="item.text || item.label"
:value="item.value">
<span class="itemOption-index" :title=" item.text || item.label ">
{{ item.text || item.label }}
</span>
@@ -18,19 +25,19 @@
</template>
<script>
import {ajaxGetDictItems,getDictItemsFromCache} from '@/api/api'
import { ajaxGetDictItems, getDictItemsFromCache } from '@/api/api'
export default {
name: "JDictSelectTag",
name: 'JDictSelectTag',
props: {
dictCode: String,
placeholder: String,
triggerChange: Boolean,
disabled: Boolean,
db_field_name:String,
db_field_name: String,
value: [String, Number],
type: String,
getPopupContainer:{
getPopupContainer: {
type: Function,
default: (node) => node.parentNode
}
@@ -38,36 +45,36 @@
data() {
return {
dictOptions: [],
tagType:""
tagType: ''
}
},
watch:{
dictCode:{
immediate:true,
watch: {
dictCode: {
immediate: true,
handler() {
this.initDictData()
},
}
}
},
created() {
// console.log(this.dictCode);
if(!this.type || this.type==="list"){
this.tagType = "select"
}else{
if (!this.type || this.type === 'list') {
this.tagType = 'select'
} else {
this.tagType = this.type
}
//获取字典数据
// this.initDictData();
},
computed: {
getValueSting(){
getValueSting() {
// update-begin author:wangshuai date:20200601 for: 不显示placeholder的文字 ------
// 当有null或 placeholder不显示
return this.value != null ? this.value.toString() : undefined;
return this.value != null ? this.value.toString() : undefined
// update-end author:wangshuai date:20200601 for: 不显示placeholder的文字 ------
},
dictOptionsValue: function () {
return this.dictOptions.filter(function (dictOption) {
dictOptionsValue: function() {
return this.dictOptions.filter(function(dictOption) {
return dictOption.value
})
}
@@ -75,8 +82,8 @@
methods: {
initDictData() {
//优先从缓存中读取字典配置
if(getDictItemsFromCache(this.dictCode)){
this.dictOptions = getDictItemsFromCache(this.dictCode);
if (getDictItemsFromCache(this.dictCode)) {
this.dictOptions = getDictItemsFromCache(this.dictCode)
return
}
@@ -84,34 +91,34 @@
ajaxGetDictItems(this.dictCode, null).then((res) => {
if (res.success) {
// console.log(res.result);
this.dictOptions = res.result;
this.dictOptions = res.result
}
})
},
handleInput(e) {
let val;
if(this.tagType=="radio"){
let val
if (this.tagType == 'radio') {
val = e.target.value
}else{
} else {
val = e
}
let content = ''
this.dictOptions.forEach(res=>{
if (res.value == e){
content = res.text || res.label
}
this.dictOptions.forEach(res => {
if (res.value == e) {
content = res.text || res.label
}
})
if(this.triggerChange){
this.$emit('change', val);
}else{
this.$emit('input', val);
this.$emit('changeQuery', content,this.db_field_name);
if (this.triggerChange) {
this.$emit('change', val)
} else {
this.$emit('input', val)
this.$emit('changeQuery', content, this.db_field_name)
}
},
setCurrentDictOptions(dictOptions){
setCurrentDictOptions(dictOptions) {
this.dictOptions = dictOptions
},
getCurrentDictOptions(){
getCurrentDictOptions() {
return this.dictOptions
}
}
@@ -124,6 +131,6 @@
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
-o-text-overflow:ellipsis;
-o-text-overflow: ellipsis;
}
</style>
@@ -387,7 +387,7 @@
return str
},
handleOk() {
if (!this.isNullArray(this.queryParamsModel)) {
// if (!this.isNullArray(this.queryParamsModel)) {
let event = {
matchType: this.matchType,
params: this.removeEmptyObject(this.queryParamsModel)
@@ -397,9 +397,9 @@
this.visible = false
}
this.emitCallback(event)
} else {
this.$message.warn(this.$t('CannotQueryEmpty'))
}
// } else {
// this.$message.warn(this.$t('CannotQueryEmpty'))
// }
},
emitCallback(event = {}) {
let { params = [], matchType = this.matchType } = event
@@ -408,6 +408,9 @@
if (Array.isArray(param.val)) {
param.val = param.val.join(',')
}
if (param.type == "Personnel" && !param.val){
param.val = ' is null '
}
}
console.debug('---高级查询参数--->', { params, matchType })
this.$emit(this.callback, params, matchType)
@@ -614,7 +617,6 @@
item.val = values[item.popup['destFields']]
},
PersonnelSelectionChange(value, id,index){
console.log(index)
this.queryParamsModel[index].val = id
this.queryParamsModel[index].valueId = id
console.log(this.queryParamsModel)
@@ -120,6 +120,11 @@
this.getData()
this.getTableList()
})
eventBUs.$on('searchGetData', target => {
this.selectedRowKeys = []
this.getData()
this.getTableList()
})
this.getData()
this.getTableList()
},
+3 -1
View File
@@ -30,6 +30,7 @@
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { getAction, postAction, downFile, downloadFile } from '@/api/manage'
import { Base64 } from 'js-base64'
import { mapGetters } from 'vuex'
export default {
name: 'file',
@@ -69,6 +70,7 @@
// console.log(this.thisFileType,this.thisFileSize,this.thisFileUploadUrl);
},
methods: {
...mapGetters(['userInfo']),
perentHandleFunc(data) {
this.myfileList = data
if (data && data.length > 0) {
@@ -190,7 +192,7 @@
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix === '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id))
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id+'&userName='+this.userInfo().username))
} else if (fileSuffix === '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
@@ -30,6 +30,7 @@ import Vue from 'vue'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { getAction, postAction, downFile, downloadFile } from '@/api/manage'
import { Base64 } from 'js-base64'
import { mapGetters } from 'vuex'
export default {
name: 'file',
@@ -66,6 +67,7 @@ export default {
// console.log(this.thisFileType,this.thisFileSize,this.thisFileUploadUrl);
},
methods: {
...mapGetters(['userInfo']),
perentHandleFunc(data) {
this.myfileList = data
if (data && data.length > 0) {
@@ -187,7 +189,7 @@ export default {
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix === '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id))
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id+'&userName='+this.userInfo().username))
} else if (fileSuffix === '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
@@ -35,10 +35,11 @@
</template>
<script>
import Vue from 'vue'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { getAction, postAction, downFile, downloadFile } from '@/api/manage'
import { Base64 } from 'js-base64'
import Vue from 'vue'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { getAction, postAction, downFile, downloadFile } from '@/api/manage'
import { Base64 } from 'js-base64'
import { mapGetters } from 'vuex'
export default {
name: 'file',
@@ -76,153 +77,154 @@
if (item.type === 'file') {
this.template.templateId = item.templateId
this.template.templateName = item.templateName
}
})
let long = localStorage.getItem('language')
this.cut = ''
if (long && long == 'zh-cn') {
this.cut = 'cn'
} else if (long && long == 'en-us') {
this.cut = 'en'
}
// console.log(this.thisFileType,this.thisFileSize,this.thisFileUploadUrl);
},
methods: {
...mapGetters(['userInfo']),
download() {
downloadFile('/sys/common/downLoadFile', this.template.templateName, { id: this.template.templateId })
},
perentHandleFunc(data) {
this.myfileList = data
if (data && data.length > 0) {
this.myfileList.forEach((res) => {
res.name = res.fileName
res.uid = res.id
})
} else {
this.myfileList = []
}
},
beforeUpload(file) {
// let thisFileType = this.thisFileType.replace(/\s+/g, "");
this.fileTypeSatus = true
//TODO 客户要求不拦截文件
// if(file.type){
// if (thisFileType.indexOf(file.type) != -1) {
// this.fileTypeSatus = true;
// }else{
// this.fileTypeSatus = false;
// }
// }else{
// if(file.name.slice(file.name.length - 3 , file.name.length) == 'rar'){
// this.fileTypeSatus = true
// }else if(file.type == 'application/x-zip-compressed'){
// this.fileTypeSatus = true
// }else{
// this.fileTypeSatus = false;
// }
// }
this.$message.destroy()
},
remove() {
this.fileTypeSatus = true
},
mypreview(item) {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + encodeURIComponent(this.downLoadFileUrl + '/' + item.ext1)
window.open(url, '_blank')
},
handleChange(info) {
if(info.fileList.length > 1) {
this.$message.warning(this.$t('onlyOnefileUploaded'))
return
}
let { file } = info
const status = info.file.status
info.fileList.forEach((val, index) => {
if (val.response && !val.response.result) {
this.$message.error(val.response.message)
info.fileList.splice(index, 1)
}
})
let long = localStorage.getItem('language')
this.cut = ''
if (long && long == 'zh-cn') {
this.cut = 'cn'
} else if (long && long == 'en-us') {
this.cut = 'en'
}
// console.log(this.thisFileType,this.thisFileSize,this.thisFileUploadUrl);
},
methods: {
download() {
downloadFile('/sys/common/downLoadFile', this.template.templateName, { id: this.template.templateId })
},
perentHandleFunc(data) {
this.myfileList = data
if (data && data.length > 0) {
this.myfileList.forEach((res) => {
res.name = res.fileName
res.uid = res.id
})
} else {
this.myfileList = []
}
},
beforeUpload(file) {
// let thisFileType = this.thisFileType.replace(/\s+/g, "");
this.fileTypeSatus = true
//TODO 客户要求不拦截文件
// if(file.type){
// if (thisFileType.indexOf(file.type) != -1) {
// this.fileTypeSatus = true;
// }else{
// this.fileTypeSatus = false;
// }
// }else{
// if(file.name.slice(file.name.length - 3 , file.name.length) == 'rar'){
// this.fileTypeSatus = true
// }else if(file.type == 'application/x-zip-compressed'){
// this.fileTypeSatus = true
// }else{
// this.fileTypeSatus = false;
// }
// }
if (status === 'error') {
this.$emit('uploadSuccess', this.fileList)
this.$message.destroy()
},
remove() {
this.fileTypeSatus = true
},
mypreview(item) {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + encodeURIComponent(this.downLoadFileUrl + '/' + item.ext1)
window.open(url, '_blank')
},
handleChange(info) {
if (info.fileList.length > 1) {
this.$message.warning(this.$t('onlyOnefileUploaded'))
return
}
let { file } = info
const status = info.file.status
info.fileList.forEach((val, index) => {
if (val.response && !val.response.result) {
this.$message.error(val.response.message)
info.fileList.splice(index, 1)
this.$message.error(`${info.file.name}` + this.$t('FileUploadFailed'))
} else if (status === 'removed') {
this.myfileList = info.fileList
this.fileList = []
this.myfileList.forEach((res) => {
if (res.response) {
this.fileList.push(res.response.result)
} else {
this.fileList.push(res)
}
})
if (status === 'error') {
this.$emit('uploadSuccess', this.fileList)
if (this.myfileList.length > 0) {
this.$message.destroy()
this.$message.success(`${info.file.name}` + this.$t('DeletedSuccessfully'))
}
} else if (status === 'done') {
this.fileList = []
this.myfileList = info.fileList
if (info.fileList.length > 20) {
info.fileList.splice(20)
this.myfileList = info.fileList
this.myfileList.forEach((res) => {
if (res.response) {
this.fileList.push(res.response.result)
} else {
this.fileList.push(res)
}
})
this.$emit('uploadSuccess', this.fileList)
this.$message.destroy()
this.$message.error(`${info.file.name}` + this.$t('FileUploadFailed'))
} else if (status === 'removed') {
this.myfileList = info.fileList
this.fileList = []
this.myfileList.forEach((res) => {
if (res.response) {
this.fileList.push(res.response.result)
} else {
this.fileList.push(res)
}
})
this.$emit('uploadSuccess', this.fileList)
if (this.myfileList.length > 0) {
this.$message.destroy()
this.$message.success(`${info.file.name}` + this.$t('DeletedSuccessfully'))
}
} else if (status === 'done') {
this.fileList = []
this.myfileList = info.fileList
if (info.fileList.length > 20) {
info.fileList.splice(20)
this.myfileList = info.fileList
this.myfileList.forEach((res) => {
if (res.response) {
this.fileList.push(res.response.result)
} else {
this.fileList.push(res)
}
})
this.$emit('uploadSuccess', this.fileList)
this.$message.destroy()
this.$message.error(this.$t('UploadMost'))
return
}
this.myfileList.forEach((res) => {
if (res.response) {
this.fileList.push(res.response.result)
} else {
this.fileList.push(res)
}
})
this.$emit('uploadSuccess', this.fileList)
if (this.myfileList.length > 0) {
this.$message.destroy()
if (file.response.success) {
this.$message.success(`${info.file.name}` + this.$t('FileUploadedSuccessfully'))
}
}
} else if (status === 'uploading') {
this.myfileList = info.fileList
// this.$message.success(`${info.file.name} 文件上传成功`);
this.$message.error(this.$t('UploadMost'))
return
}
},
resetFileList() {
this.myfileList = []
this.fileList = []
},
preview(file) {
let fileQuery = file.response ? file.response.result : file
let fileName = fileQuery.fileName
let index1 = fileName.lastIndexOf('.')
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix === '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id))
} else if (fileSuffix === '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
} else if (fileSuffix === '.xlsx' || fileSuffix === '.xls') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
} else {
downloadFile('/sys/common/downLoadFile', fileQuery.fileName, { id: fileQuery.id })
this.myfileList.forEach((res) => {
if (res.response) {
this.fileList.push(res.response.result)
} else {
this.fileList.push(res)
}
})
this.$emit('uploadSuccess', this.fileList)
if (this.myfileList.length > 0) {
this.$message.destroy()
if (file.response.success) {
this.$message.success(`${info.file.name}` + this.$t('FileUploadedSuccessfully'))
}
}
} else if (status === 'uploading') {
this.myfileList = info.fileList
// this.$message.success(`${info.file.name} 文件上传成功`);
}
},
resetFileList() {
this.myfileList = []
this.fileList = []
},
preview(file) {
let fileQuery = file.response ? file.response.result : file
let fileName = fileQuery.fileName
let index1 = fileName.lastIndexOf('.')
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix === '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id))
} else if (fileSuffix === '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
} else if (fileSuffix === '.xlsx' || fileSuffix === '.xls') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
} else {
downloadFile('/sys/common/downLoadFile', fileQuery.fileName, { id: fileQuery.id })
}
}
}
}
</script>
<style>
@@ -36,6 +36,7 @@
<script>
import { Base64 } from 'js-base64'
import { getAction, postAction, downloadFile, putAction } from '@/api/manage'
import { mapGetters } from 'vuex'
export default {
name: 'viewFileModel',
@@ -64,13 +65,14 @@
}
},
methods: {
...mapGetters(['userInfo']),
pdfPreview(fileQuery) {
let fileName = fileQuery.fileName
let index1 = fileName.lastIndexOf('.')
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix == '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id))
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id+'&userName='+this.userInfo().username))
} else if (fileSuffix == '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
@@ -82,7 +84,7 @@
}
},
download(item) {
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id })
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id ,userName:this.userInfo().username})
},
clickButtonToUpload(item) {
this.loading = true
@@ -8,10 +8,10 @@
</div>
</div>
<div class="monthlyReportRegulations-box-content">
<div class="monthlyReportRegulations-text" v-for="item in 6">
<div class="monthlyReportRegulations-text" v-for="item in monthlyReportRegulationsList">
<div class="yuan"></div>
<div class="text">文档库中新增了新的标准 GB 7258 机动车文件</div>
<div class="time">2022-04-04 12:00:00</div>
<div class="text" :title="item.name">{{item.name}}</div>
<div class="time">{{item.time}}</div>
</div>
</div>
</div>
@@ -19,7 +19,37 @@
<script>
export default {
name: 'monthlyReportRegulations'
name: 'monthlyReportRegulations',
data() {
return {
monthlyReportRegulationsList: [
{
name: '蔚来汽车法规月报_202201_主页面 CN.docx',
time: '2022-01-01 13:24:36'
},
{
name: '蔚来汽车法规月报_202202_主页面 CN.docx',
time: '2022-02-01 15:50:06'
},
{
name: '蔚来汽车法规月报_202203_主页面 CN.docx',
time: '2022-03-01 13:56:20'
},
{
name: '蔚来汽车法规月报_202204_主页面 CN.docx',
time: '2022-04-01 16:24:45'
},
{
name: '蔚来汽车法规月报_202205_主页面 CN.docx',
time: '2022-06-01 17:24:06'
},
{
name: '蔚来汽车法规月报_202206_主页面 CN.docx',
time: '2022-06-01 17:24:06'
}
]
}
}
}
</script>
@@ -1,7 +1,7 @@
<template>
<div class="myList-box">
<div class="header-text">
<div class="header-text-left">{{this.$t('myList')}}</div>
<div class="header-text-left">{{this.$t('toDoProcess')}}</div>
<div class="header-text-right" @click="moreClick">
More
<img src="../../../assets/gengduo.png" alt="">
@@ -264,6 +264,7 @@
import { getAction, postAction, downFile, downloadFile } from '@/api/manage'
import { Base64 } from 'js-base64'
import uploadFile from '@/components/uploadFile/file'
import { mapGetters } from 'vuex'
export default {
name: 'docIndex',
@@ -351,6 +352,7 @@
})
},
methods: {
...mapGetters(['userInfo']),
getTitle(callback) {
let _id = this.$route.query.documentId === undefined ? this.$route.query.id : this.$route.query.documentId
getAction(this.url.getTitle, { id: _id }).then((res) => {
@@ -399,7 +401,7 @@
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix == '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id))
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id+'&userName='+this.userInfo().username))
} else if (fileSuffix == '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
@@ -411,7 +413,7 @@
}
},
download(item) {
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id })
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id ,userName:this.userInfo().username})
},
UpdateLog() {
this.visible = true
@@ -151,13 +151,17 @@
},
//带文件导出
handleFileExport() {
let query = {
...this.$refs.searchRef.queryParam,
id: this.idList.join(','),
flag: 'file'
if (this.idList.length > 0) {
let query = {
...this.$refs.searchRef.queryParam,
id: this.idList.join(','),
flag: 'file'
}
let handlingTime = moment(new Date()).format('YYYY-MM-DD')
downloadFile('document/bussDocumentLibraryEO/exportZip', this.$t('DocumentLibrary')+handlingTime+'.zip', query, this.Deselect)
}else{
this.$message.warning(this.$t('selectLeastOne'))
}
let handlingTime = moment(new Date()).format('YYYY-MM-DD')
downloadFile('document/bussDocumentLibraryEO/exportZip', this.$t('DocumentLibrary')+handlingTime+'.zip', query, this.Deselect)
},
//新增
handleAdd() {
@@ -253,7 +257,7 @@
getAction(url, { id: val.id }).then((res) => {
if (res.success) {
_this.$message.success(_this.$t('OperationSuccessful'))
eventBUs.$emit('searchReset')
eventBUs.$emit('searchGetData')
} else {
_this.$message.warning(_this.$t('operationFailed'))
}
@@ -276,7 +280,7 @@
getAction(url, { id: val.id }).then((res) => {
if (res.success) {
_this.$message.success(_this.$t('OperationSuccessful'))
eventBUs.$emit('searchReset')
eventBUs.$emit('searchGetData')
} else {
_this.$message.warning(_this.$t('operationFailed'))
}
@@ -96,6 +96,7 @@
import Vue from 'vue'
import eventBUs from '../../../common/event'
import axios from 'axios'
import { mapGetters } from 'vuex'
export default {
name: 'ocr',
@@ -177,6 +178,7 @@
},
methods:{
...mapGetters(['userInfo']),
initWebSocket: function () {
let token = Vue.ls.get(ACCESS_TOKEN)
// console.log("------------WebSocket连接成功");
@@ -443,7 +445,7 @@
},
//文件详情跳转
detailClick(val){
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + val.attId))
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + val.attId+'&userName='+this.userInfo().username))
},
exportVisible(val){
// this.fileVisible=val
@@ -5,44 +5,46 @@
<div class="subscribtion-search-header">
<!-- <search :url="url" :flag="'1'"></search>-->
<div class="table-page-search-wrapper">
<a-row :gutter="24">
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('standard')">
<span>{{$t('standard')}}</span>
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('standard')">
<span>{{$t('standard')}}</span>
</div>
<a-input class="box-input" :placeholder="$t('PleaseEnter')+$t('standard')"
v-model="queryParams.serialNumber"></a-input>
</div>
<a-input class="box-input" :placeholder="$t('PleaseEnter')+$t('standard')"
v-model="queryParams.serialNumber"></a-input>
</div>
</a-col>
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('title')">
<span>{{$t('title')}}</span>
</a-col>
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('title')">
<span>{{$t('title')}}</span>
</div>
<a-input class="box-input" :placeholder="$t('PleaseEnter')+$t('title')"
v-model="queryParams.title"></a-input>
</div>
<a-input class="box-input" :placeholder="$t('PleaseEnter')+$t('title')"
v-model="queryParams.title"></a-input>
</div>
</a-col>
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('status')">
<span>{{$t('status')}}</span>
</a-col>
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('status')">
<span>{{$t('status')}}</span>
</div>
<j-dict-select-tag class="box-input" v-model="queryParams.state"
:placeholder="$t('PleaseSelect')+$t('status')"
:type="'select'"
:triggerChange="false" :dictCode="'state'"/>
</div>
<j-dict-select-tag class="box-input" v-model="queryParams.state"
:placeholder="$t('PleaseSelect')+$t('status')"
:type="'select'"
:triggerChange="false" :dictCode="'state'"/>
</div>
</a-col>
<span style="float: right;overflow: hidden;margin-right: 11px"
class="table-page-search-submitButtons">
</a-col>
<span style="float: right;overflow: hidden;margin-right: 11px"
class="table-page-search-submitButtons">
<a-col :md="6" :sm="24">
<a-button class="box-button" type="primary" @click="searchQuery">{{$t('query')}}</a-button>
<a-button class="box-button" style="margin-left: 8px" @click="searchReset">{{$t('reset')}}</a-button>
</a-col>
</span>
</a-row>
</a-row>
</a-form>
</div>
</div>
</div>
@@ -2,11 +2,10 @@
<div class="dic-list">
<div class="dic-list-content">
<div class="dic-list-header">
<a-form :model="queryParams" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-form :model="queryParams" :label-col="labelCol" @keyup.enter.native="search" :wrapper-col="wrapperCol">
<a-form-item :label="$t('name')+':'">
<a-input v-if="dictVal=='tree'" v-model="queryParams.name" :placeholder="$t('enterName')"/>
<j-input v-if="dictVal=='list'" v-model="queryParams.itemText" :placeholder="$t('enterName')"/>
<a-input v-if="dictVal=='list'" v-model="queryParams.itemText" :placeholder="$t('enterName')"/>
</a-form-item>
</a-form>
<div class="form-btn">
@@ -215,9 +215,13 @@
:title="$t('viewFile')"
:width="500"
:visible="visible"
@ok="visible=false"
@cancel="visible=false"
>
<template slot="footer">
<a-button key="back" @click="visible = false">
{{$t('cancel')}}
</a-button>
</template>
<p v-for="(item,index) in fileList" :key="index"
class="fileText" :title="item.fileName" @click="fileClick(item)">{{ item.fileName }}</p>
</a-modal>
@@ -230,6 +234,7 @@
import libraryPush from '@/components/libraryPush/index'
import moment from 'moment'
import { Base64 } from 'js-base64'
import { mapGetters } from 'vuex'
export default {
name: 'DocumentLibrary',
@@ -376,6 +381,7 @@
},
methods: {
...mapGetters(['userInfo']),
handleChange() {
},
@@ -677,7 +683,7 @@
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix == '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id))
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id+'&userName='+this.userInfo().username))
} else if (fileSuffix == '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
@@ -90,6 +90,7 @@
<script>
import { getAction, postAction, downloadFile } from '@/api/manage'
import { Base64 } from 'js-base64'
import { mapGetters } from 'vuex'
export default {
name: 'whole',
@@ -130,6 +131,7 @@
// }
},
methods: {
...mapGetters(['userInfo']),
checkedClick(item) {
if (item.checked) {
this.checkboxText = this.checkboxText.filter(res => {
@@ -151,7 +153,7 @@
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix == '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id.slice(0, 32)))
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id.slice(0, 32)+'&userName='+this.userInfo().username))
} else if (fileSuffix == '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id.slice(0, 32) + fileSuffix)
window.open(url, '_blank')
@@ -13,6 +13,7 @@
</a-select>
<a-input
:maxLength="100"
@keyup.enter.native="onSearch(selectValueTwo)"
v-model="selectValueTwo"
style="width: calc(100% - 128px)"
:placeholder="$t('pleaseEnter')+$t('searchContent')"
@@ -21,6 +22,7 @@
<a-input
v-model="selectValueTwo"
:maxLength="100"
@keyup.enter.native="wholeOnSearch(selectValueTwo)"
v-else-if="active === $t('whole')"
class="inputSearch"
:placeholder="$t('pleaseEnter')+$t('searchContent')"
@@ -32,6 +34,7 @@
</a-button>
<a-button class="textSearch"
v-if="active === $t('whole')"
@keyup.enter.native="wholeOnSearch(selectValueTwo)"
@click="wholeOnSearch(selectValueTwo)"
>{{$t('query')}}
</a-button>
@@ -31,11 +31,15 @@
<span class="title-text-text" :title="$t('certificationType')">{{$t('certificationType')}}</span>
</div>
<a-form-model-item class="itemModel">
<j-dict-select-tag class="box-input" v-model="formInline.attestationType"
@input="handleInput('attestationType')"
:placeholder="$t('PleaseSelect')+$t('certificationType')"
:type="'select'"
:triggerChange="false" dictCode="attestation_type"/>
<j-multi-select-tag class="box-input" v-model="formInline.attestationType"
:placeholder="$t('PleaseSelect')+$t('certificationType')"
:type="'select'"
:triggerChange="false" :dictCode="'attestation_type'"/>
<!-- <j-dict-select-tag class="box-input" v-model="formInline.attestationType"-->
<!-- @input="handleInput('attestationType')"-->
<!-- :placeholder="$t('PleaseSelect')+$t('certificationType')"-->
<!-- :type="'select'"-->
<!-- :triggerChange="false" dictCode="attestation_type"/>-->
</a-form-model-item>
</div>
</a-col>
@@ -47,11 +51,15 @@
<span class="title-text-text" :title="$t('certificationLevel')">{{$t('certificationLevel')}}</span>
</div>
<a-form-model-item class="itemModel">
<j-dict-select-tag class="box-input" v-model="formInline.attestationRank"
@input="handleInput('attestationRank')"
:placeholder="$t('PleaseSelect')+$t('certificationLevel')"
:type="'select'"
:triggerChange="false" dictCode="attestation_rank"/>
<j-multi-select-tag class="box-input" v-model="formInline.attestationRank"
:placeholder="$t('PleaseSelect')+$t('certificationLevel')"
:type="'select'"
:triggerChange="false" :dictCode="'attestation_rank'"/>
<!-- <j-dict-select-tag class="box-input" v-model="formInline.attestationRank"-->
<!-- @input="handleInput('attestationRank')"-->
<!-- :placeholder="$t('PleaseSelect')+$t('certificationLevel')"-->
<!-- :type="'select'"-->
<!-- :triggerChange="false" dictCode="attestation_rank"/>-->
</a-form-model-item>
</div>
</a-col>
@@ -195,7 +195,7 @@
<span class="title-text-text"
:title="$t('certificationType')">{{$t('certificationType')}}</span>
</div>
<a-form-model-item class="itemModel" prop="certificationType">
<a-form-model-item class="itemModel-multi" prop="certificationType">
<j-multi-select-tag class="box-input" v-model="formInline.attestationType"
:placeholder="$t('PleaseSelect')+$t('certificationType')"
:type="'select'"
@@ -212,13 +212,11 @@
<span class="title-text-text"
:title="$t('certificationLevel')">{{$t('certificationLevel')}}</span>
</div>
<a-form-model-item class="itemModel" prop="attestationRank">
<j-dict-select-tag class="box-input" v-model="formInline.attestationRank"
:disabled="disabled"
@input="handleInput('attestationRank')"
:placeholder="$t('PleaseSelect')+$t('certificationLevel')"
:type="'select'"
:triggerChange="false" :dictCode="'attestation_rank'"/>
<a-form-model-item class="itemModel-multi" prop="attestationRank">
<j-multi-select-tag class="box-input" v-model="formInline.attestationRank"
:placeholder="$t('PleaseSelect')+$t('certificationLevel')"
:type="'select'"
:triggerChange="false" :dictCode="'attestation_rank'"/>
</a-form-model-item>
</div>
</a-col>
@@ -84,7 +84,7 @@
</a-row>
</a-form>
</div>
<div class="table-operator">
<div class="table-operator" style="margin-bottom: 16px">
<!-- 导入-->
<!-- <div class="operator-text"-->
<!-- style="float: left;font-size: 16px;font-weight: 400;color: #040B29;">-->
@@ -140,10 +140,10 @@
<div style="width: 100%">
<a-table
ref="table"
class="ant-table"
class="ant-table tableList"
:loading="loading"
:pagination="false"
:scroll="{x: '100%',y:'calc(100vh - 200px)'}"
:scroll="{x: '100%',y:'calc(100vh - 170px)'}"
rowKey="id"
:data-source="dataSource"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
@@ -247,6 +247,7 @@
import globalAdvancedQuery from '@/components/globalAdvancedQuery/index'
import { getAction, postAction, downloadFile } from '@/api/manage'
import { Base64 } from 'js-base64'
import { mapGetters } from 'vuex'
export default {
name: 'virtualListDetails',
@@ -320,8 +321,7 @@
align: 'center',
dataIndex: 'subtitle',
width: 180,
fixed: 'left',
scopedSlots: { customRender: 'titleName' }
ellipsis: true
},
{
title: this.$t('zoneOfApplication'),
@@ -630,6 +630,7 @@
}
},
methods: {
...mapGetters(['userInfo']),
handleSuperQuery(params, matchType) {
let sqp = {}
if (!params || (params && params.length == 0)) {
@@ -789,7 +790,7 @@
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix == '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id))
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id+'&userName='+this.userInfo().username))
} else if (fileSuffix == '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
@@ -806,7 +807,7 @@
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix == '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + id))
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + id+'&userName='+this.userInfo().username))
} else if (fileSuffix == '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + id + fileSuffix)
window.open(url, '_blank')
@@ -818,7 +819,7 @@
}
},
download(item) {
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id })
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id ,userName:this.userInfo().username})
},
clickButtonToUpload(item) {
this.loading = true
@@ -1007,4 +1008,7 @@
border-top: none;
}
.tableList .ant-table-thead > tr > th {
padding: 7px 16px !important;
}
</style>
@@ -139,11 +139,12 @@
<a-col :span="24" v-if="title == $t('addFeedback') || title == $t('edit')">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<!-- <span class="Required">*</span>-->
<span class="title-text-text"
:title="$t('Deliverables')">{{$t('Deliverables')}}</span>
</div>
<a-form-model-item class="itemModel" prop="fileId">
<!-- prop="fileId"-->
<a-form-model-item class="itemModel">
<a-button type="primary" class="button-text"
@click="clickButtonToUpload('fileId')">
{{ (formInline.fileId === 'null' || formInline.fileId === '' ||
@@ -16,7 +16,7 @@
<a-form-model-item style="margin-left: 36px" class="itemModel" prop="flag">
<a-radio-group style="margin-top: 2px" @change="flagChange" class="box-input" v-model="formInline.flag">
<a-radio value="0">
{{$t('agree')}}
{{$t('accept')}}
</a-radio>
<a-radio value="1">
{{$t('disagree')}}
@@ -44,6 +44,7 @@
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="Required" v-if="$route.query.isDisplay">*</span>
<span class="title-text-text" :title="$t('feedbackMessage')">{{$t('feedbackMessage')}}</span>
</div>
<a-form-model-item class="itemModel" prop="approvalOpinion">
@@ -148,6 +149,7 @@
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="Required" v-if="$route.query.isDisplay">*</span>
<span class="title-text-text" :title="$t('feedbackMessage')">{{$t('feedbackMessage')}}</span>
</div>
<a-form-model-item class="itemModel" prop="approvalOpinion">
@@ -197,6 +199,11 @@
}
],
approvalOpinion: [
{
required: true,
message: this.$t('feedbackMessage') + this.$t('cannotEmpty'),
trigger: 'blur'
},
{
max: 300,
message: this.$t('feedbackMessage') + this.$t('cannotExceed') + 300 + this.$t('Characters'),
@@ -227,6 +234,7 @@
},
mounted() {
this.formInline.approvalOpinion = ''
this.formInline = { ...this.formInline }
this.$route.query.isDisplay = JSON.parse(this.$route.query.isDisplay)
if (this.queryBy && this.$route.query.TaskKey == 'fqrsh') {
this.formInline.reviewResult = this.queryBy.reviewResult || undefined
@@ -56,6 +56,7 @@
<script>
import { Base64 } from 'js-base64'
import { getAction, postAction, downloadFile, deleteAction } from '@/api/manage'
import { mapGetters } from 'vuex'
export default {
name: 'standardContentList',
@@ -168,13 +169,14 @@
})
},
methods: {
...mapGetters(['userInfo']),
pdfPreview(fileQuery) {
let fileName = fileQuery.fileName
let index1 = fileName.lastIndexOf('.')
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix == '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id))
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id+'&userName='+this.userInfo().username))
} else if (fileSuffix == '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
@@ -191,7 +193,7 @@
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix == '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + id))
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + id+'&userName='+this.userInfo().username))
} else if (fileSuffix == '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + id + fileSuffix)
window.open(url, '_blank')
@@ -203,7 +205,7 @@
}
},
download(item) {
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id })
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id ,userName:this.userInfo().username})
},
clickButtonToUpload(item) {
this.loading = true
@@ -126,7 +126,7 @@
if (this.$route.query.taskDefinitionKey == 'dreqr') {
this.titleName = this.$t('engineerReply')
} else {
this.titleName = this.$t('confirmationEngineeringInterfacePerson')
this.titleName = this.$t('taskConfirmationResponsiblePerson')
}
this.queryTaskDetailByTask(function() {
_this.queryProjectLawsInventoryInfo()
@@ -195,17 +195,17 @@
this.$message.success(this.$t('OperationSuccessful'))
if (this.$route.query.taskDefinitionKey == 'zrrjsrw' || this.$route.query.taskDefinitionKey == 'zrrqr') {
if (value.flag == 0) {
if (this.queryProject.verifyDeliverableType) {
if (this.queryProject.verifyRemark) {
this.startProcessDesign(this.queryBy, 4)
}
if (this.queryProject.prehomoDeliverableType) {
if (this.queryProject.prehomoRemark) {
this.startProcessDesign(this.queryBy, 3)
}
if (this.queryProject.designDeliverableType) {
if (this.queryProject.designRemark) {
this.startProcessDesign(this.queryBy, 2)
}
if (!this.queryProject.verifyDeliverableType && !this.queryProject.prehomoDeliverableType &&
!this.queryProject.designDeliverableType) {
if (!this.queryProject.verifyRemark && !this.queryProject.prehomoRemark &&
!this.queryProject.designRemark) {
setTimeout(() => {
this.loading = false
window.close()
@@ -320,15 +320,18 @@
putAction(this.url.dreSubmit, query).then((res) => {
if (res.success) {
this.$message.success(this.$t('OperationSuccessful'))
// this.$router.push({
// path: '/ProjectDetails',
// query: this.$route.query
// })
setTimeout(() => {
this.loading = false
window.close()
}, 1000)
this.$router.push({
path: '/ProjectDetails',
query: {
type:'103',
...this.$route.query
}
})
// setTimeout(() => {
// this.loading = false
// window.close()
// }, 1000)
} else {
this.loading = false
this.$message.warning(this.$t('operationFailed'))
@@ -347,10 +350,6 @@
if (res.success) {
this.$message.success(this.$t('OperationSuccessful'))
this.edit()
// this.$router.push({
// path: '/ProjectDetails',
// query: this.$route.query
// })
} else {
this.loading = false
this.$message.warning(this.$t('operationFailed'))
@@ -366,7 +365,13 @@
if (res.success) {
setTimeout(() => {
this.loading = false
window.close()
this.$router.push({
path: '/ProjectDetails',
query: {
type:'103',
...this.$route.query
}
})
}, 1000)
}
})
@@ -2,9 +2,10 @@
<div class="doc-detail">
<div class="Virtual-detail-header" style="position: fixed;top: 0">
<div class="Virtual-detail-title">
<!-- <span style="line-height: 74px;display: inline-block;float: left">-->
<!-- <a-icon type="left-circle" theme="filled" style="margin-right: 6px;font-size: 30px;color: #21c9cc;"/>-->
<!-- </span>-->
<span style="line-height: 74px;display: inline-block;float: left">
<a-icon @click="backClick" type="left-circle" theme="filled"
style="margin-right: 8px;font-size: 30px;color: #21c9cc;"/>
</span>
<span>
{{this.title}}
</span>
@@ -26,7 +27,7 @@
</div>
<div style="padding: 67px 0 0 0;background: #ffffff;height:100%">
<div class="detail-content" style="height: 100%">
<div class="Virtual-detail-left">
<div v-if="isDisplay" class="Virtual-detail-left">
<div class="Virtual-detail-left-text" :title="$t('projectDetails')"
v-has="'projectLawsInventory:projectDetails'"
v-if="isTrue"
@@ -36,28 +37,58 @@
</div>
<div class="Virtual-detail-left-text" v-has="'projectLawsInventory:list'" :title="$t('listOfRegulations')"
@click="textClick(1,$t('listOfRegulations'))">
<a-icon type="container"/>
<a-icon type="control"/>
{{$t('listOfRegulations')}}
</div>
<div class="Virtual-detail-left-text" :title="$t('taskList')"
v-has="'projectLawsInventory:taskList'"
@click="textClick(2,$t('taskList'))">
<a-icon type="container"/>
<a-icon type="safety"/>
{{$t('taskList')}}
</div>
<div class="Virtual-detail-left-text" v-has="'ncrTrack:queryPageInfo'" :title="$t('nonConformance')"
@click="textClick(3,$t('nonConformance'))">
<a-icon type="container"/>
<a-icon type="safety-certificate"/>
{{$t('nonConformance')}}
</div>
<div class="Virtual-detail-left-text" v-has="'projectLawsInventory:TaskParameterCollection'"
:title="$t('TaskParameterCollection')"
@click="textClick(4,$t('TaskParameterCollection'))">
<a-icon type="container"/>
<a-icon type="profile"/>
{{$t('TaskParameterCollection')}}
</div>
<a-icon @click="textIconClick" type="menu-fold" class="text-icon"/>
</div>
<div class="Virtual-detail-right">
<div v-if="!isDisplay" class="Virtual-detail-left-One">
<div class="Virtual-detail-left-text"
:title="$t('projectDetails')"
v-has="'projectLawsInventory:projectDetails'"
v-if="isTrue"
@click="textClick(0,$t('projectDetails'))">
<a-icon type="container"/>
</div>
<div class="Virtual-detail-left-text" v-has="'projectLawsInventory:list'" :title="$t('listOfRegulations')"
@click="textClick(1,$t('listOfRegulations'))">
<a-icon type="control"/>
</div>
<div class="Virtual-detail-left-text" :title="$t('taskList')"
v-has="'projectLawsInventory:taskList'"
@click="textClick(2,$t('taskList'))">
<a-icon type="safety"/>
</div>
<div class="Virtual-detail-left-text" v-has="'ncrTrack:queryPageInfo'" :title="$t('nonConformance')"
@click="textClick(3,$t('nonConformance'))">
<a-icon type="safety-certificate"/>
</div>
<div class="Virtual-detail-left-text" v-has="'projectLawsInventory:TaskParameterCollection'"
:title="$t('TaskParameterCollection')"
@click="textClick(4,$t('TaskParameterCollection'))">
<a-icon type="profile"/>
</div>
<a-icon @click="textIconClick" type="menu-unfold" class="text-icon-one"/>
</div>
<div class="Virtual-detail-right"
:style="{'width':isDisplay?'calc(100% - 240px)':'calc(100% - 66px)'}">
<ProjectDetailsName @TaskListChange="TaskListChange" v-if="textTitle === $t('projectDetails')"/>
<listOfRegulations v-else-if="textTitle === $t('listOfRegulations')"/>
<TaskList :isDisplayNum="isDisplayNum" :areaOfResponsibility="areaOfResponsibility"
@@ -100,11 +131,13 @@
},
data() {
return {
title: this.$t('projectDetails'),
title: '',
isDisplayNum: '',
textTitle: '',
isTrue: true,
loading: false,
isDisplay: true,
url: {
logList: '/project/projectLawsInventoryLogEO/page',
historicalVersionUrl: '',
@@ -115,7 +148,8 @@
}
},
created() {
document.title = this.$t('projectDetails') + '-' + this.$route.query.projectName
document.title = this.$route.query.projectName ? this.$t('projectDetails') + '-' + this.$route.query.projectName : this.$t('projectDetails')
this.title = this.$route.query.projectName && this.$route.query.targetMarket ? this.$route.query.projectName + '-' + this.$route.query.targetMarket : this.$t('projectDetails')
},
mounted() {
this.getTaskId()
@@ -149,6 +183,9 @@
}
},
methods: {
textIconClick() {
this.isDisplay = !this.isDisplay
},
...mapGetters(['userInfo']),
textColor(name) {
let textColor = document.getElementsByClassName('Virtual-detail-left-text-color')
@@ -261,6 +298,11 @@
text[i].classList.add('Virtual-detail-left-text-color')
}
}
},
backClick() {
this.$router.push({
path: '/projectLibrary'
})
}
}
}
@@ -305,11 +347,13 @@
.Virtual-detail-left {
width: 240px;
flex: 0 0 240px;
padding: 16px 24px;
box-sizing: border-box;
font-size: 16px;
line-height: 3;
float: left;
transition: all 0.2s;
.Virtual-detail-left-text {
padding: 2px 12px;
@@ -320,12 +364,30 @@
}
}
.Virtual-detail-left-One {
width: 66px;
flex: 0 0 66px;
display: inline-block;
padding: 16px 16px;
box-sizing: border-box;
font-size: 18px;
right: 0;
transition: all 0.2s;
.Virtual-detail-left-text {
padding: 2px 8px;
cursor: pointer;
margin-bottom: 18px;
color: rgb(0, 0, 0);
}
}
.Virtual-detail-right {
border-left: 2px #eff1f3 solid;
width: calc(100% - 240px);
height: 100%;
float: left;
float: right;
overflow: auto;
transition: all 0.2s;
}
}
@@ -337,4 +399,22 @@
.Virtual-detail-text-right {
}
.text-icon {
color: rgb(0, 0, 0);
font-size: 22px;
position: absolute;
left: 200px;
bottom: 20px;
transition: all 0.2s;
}
.text-icon-one {
color: rgb(0, 0, 0);
font-size: 22px;
position: absolute;
left: 22px;
bottom: 20px;
transition: all 0.2s;
}
</style>
@@ -5,7 +5,8 @@
{{$t('basicInformationOfParameters')}}
</div>
<div class="header-tight">
<a-button v-has="'projectLibraryBase:edit'" class="box-button" style="line-height: 32px" @click="edit">
<a-button v-if="this.$route.query.studioEngineer == this.userInfo().id" class="box-button"
style="line-height: 32px" @click="edit">
{{$t('edit')}}
</a-button>
</div>
@@ -92,7 +93,8 @@
{{$t('regulatoryCertificationTaskPlan')}}
</div>
<div class="header-tight">
<a-button class="box-button" v-has="'projectTaskPlanning:queryByProjectId'" style="line-height: 32px"
<a-button class="box-button" v-if="this.$route.query.studioEngineer == this.userInfo().id"
style="line-height: 32px"
@click="settingClick">{{$t('setting')}}
</a-button>
</div>
@@ -139,6 +141,7 @@
import currentStatusOfTheProjectEcharts from './currentStatusOfTheProjectEcharts'
import deliverableStatusEchart from './deliverableStatusEchart'
import certificationProgressEchart from './certificationProgressEchart'
import { mapGetters } from 'vuex'
export default {
name: 'ProjectDetails',
@@ -171,6 +174,7 @@
this.getSetting()
},
methods: {
...mapGetters(['userInfo']),
getForm() {
getAction(this.url.queryById, { id: this.$route.query.id }).then((res) => {
if (res.success) {
@@ -46,6 +46,7 @@
<a-table
ref="table"
bordered
class="taskTable"
:loading="loading"
:pagination="false"
:scroll="{x: true}"
@@ -197,7 +198,7 @@
scopedSlots: { customRender: 'CertificationProgress' }
},
{
title: this.$t('CurrentProjectStatusEvaluation'),
title: this.$t('CurrentStatus'),
align: 'center',
width: 150,
dataIndex: 'CurrentProjectStatusEvaluation',
@@ -406,7 +407,7 @@
},
CurrentProjectClick(val) {
let item = JSON.parse(JSON.stringify(val))
this.$refs.TaskListModelRef.getData(item, this.$t('CurrentProjectStatusEvaluation'))
this.$refs.TaskListModelRef.getData(item, this.$t('CurrentStatus'))
},
TaskListModelList() {
this.getList()
@@ -603,4 +604,9 @@
.box-input .ant-select-selection__rendered {
line-height: 38px;
}
.taskTable .ant-empty-normal {
padding: 32px 0 !important;
margin: 0 !important;
}
</style>
@@ -10,7 +10,7 @@
>
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<a-row :gutter="24">
<div class="headerText" v-if="title == $t('CurrentProjectStatusEvaluation')">
<div class="headerText" v-if="title == $t('CurrentStatus')">
{{this.$t('redSchedule')}}<br/>
{{this.$t('yellowSchedule')}}<br/>
{{this.$t('greenRequirements')}}<br/>
@@ -47,7 +47,7 @@
</div>
</a-col>
<a-col :span="24" v-if="title == $t('CurrentProjectStatusEvaluation') && this.formInline.roleCode != '0'">
<a-col :span="24" v-if="title == $t('CurrentStatus') && this.formInline.roleCode != '0'">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text"
@@ -84,7 +84,7 @@
</div>
</a-col>
<a-col :span="24" v-if="title == $t('CurrentProjectStatusEvaluation') && this.formInline.roleCode != '0'">
<a-col :span="24" v-if="title == $t('CurrentStatus') && this.formInline.roleCode != '0'">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text"
@@ -99,7 +99,7 @@
</div>
</a-col>
<div v-for="item in studioList"
v-if="title == $t('CurrentProjectStatusEvaluation') && formInline.roleCode == '0'">
v-if="title == $t('CurrentStatus') && formInline.roleCode == '0'">
<div class="headerText"
v-if="item.roleCode == 1"
style="margin-top: 10px">
@@ -196,7 +196,7 @@
getData(val, title) {
this.visible = true
this.title = title
if (title == this.$t('CurrentProjectStatusEvaluation')) {
if (title == this.$t('CurrentStatus')) {
val.remark = val.projectStatusAssessRemark || ''
val.conditionAssessment = val.projectStatusAssess || ''
if (val.roleCode == '2' || val.roleCode == '4' || val.roleCode == '1') {
@@ -31,11 +31,15 @@
<span class="title-text-text" :title="$t('certificationType')">{{$t('certificationType')}}</span>
</div>
<a-form-model-item class="itemModel">
<j-dict-select-tag class="box-input" v-model="formInline.attestationType"
@input="handleInput('attestationType')"
:placeholder="$t('PleaseSelect')+$t('certificationType')"
:type="'select'"
:triggerChange="false" dictCode="attestation_type"/>
<j-multi-select-tag class="box-input" v-model="formInline.attestationType"
:placeholder="$t('PleaseSelect')+$t('certificationType')"
:type="'select'"
:triggerChange="false" :dictCode="'attestation_type'"/>
<!-- <j-dict-select-tag class="box-input" v-model="formInline.attestationType"-->
<!-- @input="handleInput('attestationType')"-->
<!-- :placeholder="$t('PleaseSelect')+$t('certificationType')"-->
<!-- :type="'select'"-->
<!-- :triggerChange="false" dictCode="attestation_type"/>-->
</a-form-model-item>
</div>
</a-col>
@@ -61,11 +65,15 @@
<span class="title-text-text" :title="$t('certificationLevel')">{{$t('certificationLevel')}}</span>
</div>
<a-form-model-item class="itemModel">
<j-dict-select-tag class="box-input" v-model="formInline.attestationRank"
@input="handleInput('attestationRank')"
:placeholder="$t('PleaseSelect')+$t('certificationLevel')"
:type="'select'"
:triggerChange="false" dictCode="attestation_rank"/>
<j-multi-select-tag class="box-input" v-model="formInline.attestationRank"
:placeholder="$t('PleaseSelect')+$t('certificationLevel')"
:type="'select'"
:triggerChange="false" :dictCode="'attestation_rank'"/>
<!-- <j-dict-select-tag class="box-input" v-model="formInline.attestationRank"-->
<!-- @input="handleInput('attestationRank')"-->
<!-- :placeholder="$t('PleaseSelect')+$t('certificationLevel')"-->
<!-- :type="'select'"-->
<!-- :triggerChange="false" dictCode="attestation_rank"/>-->
</a-form-model-item>
</div>
</a-col>
@@ -142,7 +142,7 @@
<span class="title-text-text"
:title="$t('certificationType')">{{$t('certificationType')}}</span>
</div>
<a-form-model-item class="itemModel" prop="attestationType">
<a-form-model-item class="itemModel-multi" prop="attestationType">
<j-multi-select-tag class="box-input" v-model="formInline.attestationType"
:disabled="formInline.roleCode == 0 || formInline.roleCode == 2 ? false : true"
:placeholder="$t('PleaseSelect')+$t('certificationType')"
@@ -158,13 +158,12 @@
<span class="title-text-text"
:title="$t('certificationLevel')">{{$t('certificationLevel')}}</span>
</div>
<a-form-model-item class="itemModel" prop="attestationRank">
<j-dict-select-tag class="box-input" v-model="formInline.attestationRank"
:disabled="formInline.roleCode == 0 || formInline.roleCode == 2 ? false : true"
@input="handleInput('attestationRank')"
:placeholder="$t('PleaseSelect')+$t('certificationLevel')"
:type="'select'"
:triggerChange="false" :dictCode="'attestation_rank'"/>
<a-form-model-item class="itemModel-multi" prop="attestationRank">
<j-multi-select-tag class="box-input" v-model="formInline.attestationRank"
:disabled="formInline.roleCode == 0 || formInline.roleCode == 2 ? false : true"
:placeholder="$t('PleaseSelect')+$t('certificationLevel')"
:type="'select'"
:triggerChange="false" :dictCode="'attestation_rank'"/>
</a-form-model-item>
</div>
</a-col>
@@ -1,8 +1,8 @@
<template>
<a-card :bordered="false">
<div class="header-text">
{{ $t('DocumentStandard') }}
</div>
<!-- <div class="header-text">-->
<!-- {{ $t('DocumentStandard') }}-->
<!-- </div>-->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
@@ -46,8 +46,10 @@
</a-row>
</a-form>
</div>
<div class="table-operator" style="overflow:hidden;">
<div style="float: left;margin-bottom: 10px;margin-left: 20px" v-if="isDisplay">
<div class="table-operator"
v-if="(isRoleSwitching && !isDisplay) || (!isDisplay && roleSwitchingList.length > 1) || isDisplay"
style="overflow:hidden;margin-bottom: 20px">
<div style="float: left;margin-bottom: 0px;margin-left: 20px" v-if="isDisplay">
<div class="operator-text" @click="initiateListConfirmationcClick('清单')">
<a-icon type="solution"/>
{{ $t('initiateListConfirmation') }}
@@ -124,7 +126,7 @@
{{ $t('roleSwitching') }}
</div>
</div>
<div v-if="!isDisplay" style="float: right;margin-top: 1px;margin-bottom: 19px">
<div v-if="!isDisplay" style="float: right;margin-top: 1px;margin-bottom: 0px">
<div class="operator-text" @click="submitClick(0)" v-if="isRoleSwitching">
<a-icon type="check-circle"/>
{{ $t('submit') }}
@@ -148,9 +150,10 @@
<div style="width: 100%">
<a-table
ref="table"
class="tableList"
:loading="loading"
:pagination="false"
:scroll="{x: '100%',y:'calc(100vh - 420px)'}"
:scroll="{x: '100%',y:'calc(100vh - 170px)'}"
rowKey="id"
:data-source="dataSource"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
@@ -220,7 +223,7 @@
<transferList :url="url" @transferListForm="addModelList" ref="transferListRef"/>
<fixedPlate @fixedPlateForm="addModelList" ref="fixedPlateRef"/>
<a-modal
:title="$t('ListConfirmationDeadline')"
:title="listTitle"
:width="500"
:visible="visible"
:confirm-loading="confirmLoading"
@@ -228,39 +231,41 @@
@ok="handleOk"
@cancel="handleCancel"
>
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text-index">
<div class="title-text-index">
<span class="Required">*</span>
<span class="title-text-text"
:title="$t('TaskCutOffTime')">{{ $t('TaskCutOffTime') }}</span>
<a-spin :spinning="confirmLoading">
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text-index">
<div class="title-text-index">
<span class="Required">*</span>
<span class="title-text-text"
:title="$t('TaskCutOffTime')">{{ $t('TaskCutOffTime') }}</span>
</div>
<a-form-model-item v-if="this.timeName == '清单'" class="itemModel" prop="inventoryAffirmDueDate">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+$t('TaskCutOffTime')"
@change="dateChange({db_field_name:'inventoryAffirmDueDate'})"
format="YYYY-MM-DD"
:disabledDate="disabledDate"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.inventoryAffirmDueDate"
style="width: 100%"/>
</a-form-model-item>
<a-form-model-item v-else-if="this.timeName == '任务'" class="itemModel" prop="taskAffirmDueDate">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+$t('TaskCutOffTime')"
@change="dateChange({db_field_name:'taskAffirmDueDate'})"
format="YYYY-MM-DD"
:disabledDate="disabledDate"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.taskAffirmDueDate"
style="width: 100%"/>
</a-form-model-item>
</div>
<a-form-model-item v-if="this.timeName == '清单'" class="itemModel" prop="inventoryAffirmDueDate">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+$t('TaskCutOffTime')"
@change="dateChange({db_field_name:'inventoryAffirmDueDate'})"
format="YYYY-MM-DD"
:disabledDate="disabledDate"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.inventoryAffirmDueDate"
style="width: 100%"/>
</a-form-model-item>
<a-form-model-item v-else-if="this.timeName == '任务'" class="itemModel" prop="taskAffirmDueDate">
<a-date-picker class="box-input"
:placeholder="$t('PleaseSelect')+$t('TaskCutOffTime')"
@change="dateChange({db_field_name:'taskAffirmDueDate'})"
format="YYYY-MM-DD"
:disabledDate="disabledDate"
:getCalendarContainer="(trigger) => trigger.parentNode"
v-model="formInline.taskAffirmDueDate"
style="width: 100%"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
</a-form-model>
</a-col>
</a-row>
</a-form-model>
</a-spin>
</a-modal>
<a-modal
:title="fileTitle"
@@ -391,6 +396,7 @@
data() {
return {
roleSwitchingList: [],
listTitle: '',
columnsAll: [
{
title: this.$t('standard'),
@@ -412,9 +418,8 @@
title: this.$t('subtitle'),
align: 'center',
dataIndex: 'subtitle',
width: 180,
fixed: 'left',
scopedSlots: { customRender: 'titleName' }
ellipsis: true,
width: 180
},
{
title: this.$t('listConfirmationStatus'),
@@ -1215,10 +1220,10 @@
this.getList()
},
searchReset() {
this.queryParam = {}
this.$refs.globalAdvancedQueryRef.resetLine()
this.$refs.globalAdvancedQueryRef.emitCallback()
this.queryParam = {}
this.getList()
// this.getList()
},
addModelList() {
this.getList()
@@ -1253,8 +1258,8 @@
roleCode: roleCode
}
this.loading = true
this.getRoleByUserId()
getAction(this.url.list, query).then((res) => {
this.getRoleByUserId()
if (res.success) {
this.dataSource = res.result
this.loading = false
@@ -1269,6 +1274,7 @@
this.getList()
},
initiateListConfirmationcClick(name) {
this.listTitle = this.$t('ListConfirmationDeadline')
this.timeName = name
if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
let selectedRowKeys = JSON.parse(JSON.stringify(this.selectedRowKeys))
@@ -1276,11 +1282,16 @@
for (let i = 0; i < this.dataSource.length; i++) {
for (let j = 0; j < selectedRowKeys.length; j++) {
if (this.dataSource[i].id == selectedRowKeys[j]) {
if ((this.dataSource[i].inventoryAffirmStatus == 'Not started' || this.dataSource[i].inventoryAffirmStatus == 'Rejected') &&
this.dataSource[i].homologationEngineerId && this.dataSource[i].regulationOwnerId) {
isTrue = true
if (this.dataSource[i].inventoryAffirmStatus == 'Not started' || this.dataSource[i].inventoryAffirmStatus == 'Rejected') {
if (this.dataSource[i].homologationEngineerId && this.dataSource[i].regulationOwnerId) {
isTrue = true
} else {
this.$message.warning(this.dataSource[i].serialNumber + this.$t('TheEngineerAndCertification'))
isTrue = false
return
}
} else {
this.$message.warning(this.$t('dataConfirmation'))
this.$message.warning(this.dataSource[i].serialNumber + ',' + this.$t('pleaseSelectinitiatedOrRejected'))
isTrue = false
return
}
@@ -1298,6 +1309,7 @@
initiateTaskConfirmationClick(name) {
this.timeName = name
this.listTitle = this.$t('taskConfirmationDeadline')
if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
let selectedRowKeys = JSON.parse(JSON.stringify(this.selectedRowKeys))
let isTrue = true
@@ -1305,40 +1317,49 @@
for (let j = 0; j < selectedRowKeys.length; j++) {
if (this.dataSource[i].id == selectedRowKeys[j]) {
if ((this.dataSource[i].taskAffirmStatus == 'Not started' || this.dataSource[i].taskAffirmStatus == 'Rejected') &&
this.dataSource[i].engineeringInterfacePerson && this.dataSource[i].inventoryAffirmStatus == 'Accepted') {
if ((this.dataSource[i].verifyDueDate && this.dataSource[i].verifyDutyId
&& this.dataSource[i].verifyInitiatorId && this.dataSource[i].verifyDeliverableType) ||
(!this.dataSource[i].verifyDueDate && !this.dataSource[i].verifyDutyId
&& !this.dataSource[i].verifyInitiatorId && !this.dataSource[i].verifyDeliverableType)) {
isTrue = true
this.dataSource[i].inventoryAffirmStatus == 'Accepted') {
if (this.dataSource[i].engineeringInterfacePerson) {
if (this.dataSource[i].verifyRemark) {
if (this.dataSource[i].verifyDueDate && this.dataSource[i].verifyDutyId
&& this.dataSource[i].verifyInitiatorId) {
isTrue = true
} else {
isTrue = false
this.$message.warning(this.dataSource[i].serialNumber + ',' + this.$t('pleaseConformityVerification'))
return
}
}
if (this.dataSource[i].prehomoRemark) {
if (this.dataSource[i].prehomoDueDate && this.dataSource[i].prehomoDutyId
&& this.dataSource[i].prehomoInitiatorId) {
isTrue = true
} else {
isTrue = false
this.$message.warning(this.dataSource[i].serialNumber + ',' + this.$t('pleaseConfirmedByPrehomo'))
return
}
}
if (this.dataSource[i].designRemark) {
if (this.dataSource[i].designDueDate && this.dataSource[i].designDutyId
&& this.dataSource[i].designInitiatorId) {
isTrue = true
} else {
isTrue = false
this.$message.warning(this.dataSource[i].serialNumber + ',' + this.$t('pleaseDesignConformityConfirmation'))
return
}
}
} else {
isTrue = false
this.$message.warning(this.$t('pleaseConformityVerification'))
return
}
if ((this.dataSource[i].prehomoDueDate && this.dataSource[i].prehomoDutyId
&& this.dataSource[i].prehomoInitiatorId && this.dataSource[i].prehomoDeliverableType) ||
(!this.dataSource[i].prehomoDueDate && !this.dataSource[i].prehomoDutyId
&& !this.dataSource[i].prehomoInitiatorId && !this.dataSource[i].prehomoDeliverableType)) {
isTrue = true
} else {
isTrue = false
this.$message.warning(this.$t('pleaseConfirmedByPrehomo'))
return
}
if ((this.dataSource[i].designDueDate && this.dataSource[i].designDutyId
&& this.dataSource[i].designInitiatorId && this.dataSource[i].designDeliverableType) ||
(!this.dataSource[i].designDueDate && !this.dataSource[i].designDutyId
&& !this.dataSource[i].designInitiatorId && !this.dataSource[i].designDeliverableType)) {
isTrue = true
} else {
isTrue = false
this.$message.warning(this.$t('pleaseDesignConformityConfirmation'))
this.$message.warning(this.dataSource[i].serialNumber + ',' + this.$t('theProjectContactEmpty'))
return
}
} else {
isTrue = false
this.$message.warning(this.$t('taskDataConfirmation'))
this.$message.warning(this.dataSource[i].serialNumber + ',' + this.$t('PleaseTaskConfirmationRejected'))
return
}
}
@@ -1578,7 +1599,7 @@
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix == '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id))
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id + '&userName=' + this.userInfo().username))
} else if (fileSuffix == '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
@@ -1596,7 +1617,7 @@
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix == '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + id))
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + id + '&userName=' + this.userInfo().username))
} else if (fileSuffix == '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + id + fileSuffix)
window.open(url, '_blank')
@@ -1604,12 +1625,12 @@
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + id + fileSuffix)
window.open(url, '_blank')
} else {
downloadFile('/sys/common/downLoadFile', name, { id: id })
downloadFile('/sys/common/downLoadFile', name, { id: id, userName: this.userInfo().username })
}
},
download(item) {
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id })
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id, userName: this.userInfo().username })
},
clickButtonToUpload(item, num) {
@@ -1885,4 +1906,8 @@
.itemModelComment .ant-form-item-control-wrapper {
width: 100% !important;
}
.tableList .ant-table-thead > tr > th {
padding: 7px 16px !important;
}
</style>
@@ -84,10 +84,11 @@
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<!-- <span class="Required">*</span>-->
<span class="title-text-text" :title="$t('regulatoryEngineer')">{{$t('regulatoryEngineer')}}</span>
</div>
<a-form-model-item class="itemModel" :prop="'lawEngineerName'">
<!-- :prop="'lawEngineerName'"-->
<a-form-model-item class="itemModel">
<PersonnelSelection
:query="{db_field_name:'lawEngineer',db_field_txt:$t('regulatoryEngineer')}"
:personneQuery="formInline"
@@ -101,10 +102,11 @@
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<!-- <span class="Required">*</span>-->
<span class="title-text-text" :title="$t('engineeringInterfacePerson')">{{$t('engineeringInterfacePerson')}}</span>
</div>
<a-form-model-item class="itemModel" :prop="'engineeringInterfacePersonName'">
<!-- :prop="'engineeringInterfacePersonName'"-->
<a-form-model-item class="itemModel">
<PersonnelSelection
:query="{db_field_name:'engineeringInterfacePerson',db_field_txt:$t('engineeringInterfacePerson')}"
:personneQuery="formInline"
@@ -118,10 +120,11 @@
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<!-- <span class="Required">*</span>-->
<span class="title-text-text" :title="$t('certifiedEngineer')">{{$t('certifiedEngineer')}}</span>
</div>
<a-form-model-item class="itemModel" :prop="'certificationEngineer'">
<!-- :prop="'certificationEngineer'"-->
<a-form-model-item class="itemModel">
<a-select allowClear
v-model="formInline.certificationEngineer"
:placeholder="$t('certifiedEngineer')+$t('areaOfResponsibility')">
@@ -325,6 +328,9 @@
editOk() {
this.$refs.ruleForm.validate(valid => {
if (valid) {
if (!this.formInline.certificationEngineer){
this.formInline.certificationEngineer = ''
}
this.confirmLoading = true
putAction(this.url.edit, this.formInline).then((res) => {
if (res.success) {
@@ -35,6 +35,7 @@
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { getAction, postAction, downFile, downloadFile, putAction } from '@/api/manage'
import { Base64 } from 'js-base64'
import { mapGetters } from 'vuex'
export default {
name: 'resultReportedUpload',
@@ -74,6 +75,7 @@
}
},
methods: {
...mapGetters(['userInfo']),
clickButtonToUploadFile(item) {
this.uploadQuery = item
this.myfileList = []
@@ -208,7 +210,7 @@
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix === '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id))
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id+'&userName='+this.userInfo().username))
} else if (fileSuffix === '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
@@ -216,7 +218,7 @@
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
} else {
downloadFile('/sys/common/downLoadFile', fileQuery.fileName, { id: fileQuery.id })
downloadFile('/sys/common/downLoadFile', fileQuery.fileName, { id: fileQuery.id,userName:this.userInfo().username })
}
}
}
@@ -463,7 +463,7 @@
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix == '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id))
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id+'&userName='+this.userInfo().username))
} else if (fileSuffix == '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
@@ -480,7 +480,7 @@
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix == '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + id))
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + id+'&userName='+this.userInfo().username))
} else if (fileSuffix == '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + id + fileSuffix)
window.open(url, '_blank')
@@ -492,7 +492,7 @@
}
},
download(item) {
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id })
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id ,userName:this.userInfo().username})
},
clickButtonToUpload(item) {
this.loading = true
@@ -107,10 +107,10 @@
<a-icon type="plus"/>
{{$t('newlyAdded')}}
</div>
<div @click="handleDel" class="operator-text" v-has="'projectLibraryBase:deleteBatch'">
<a-icon type="delete"/>
{{$t('BatchDelete')}}
</div>
<!-- <div @click="handleDel" class="operator-text" v-has="'projectLibraryBase:deleteBatch'">-->
<!-- <a-icon type="delete"/>-->
<!-- {{$t('BatchDelete')}}-->
<!-- </div>-->
</div>
<div>
<a-table
@@ -129,7 +129,10 @@
</span>
<span slot="operation" slot-scope="text,record">
<!-- <a class="text-operation" @click="edit(record)">{{$t('edit')}}</a>-->
<a class="text-operation" v-has="'projectLibraryBase:deleteBatch'" @click="deleteLib(record)">{{$t('deleteLib')}}</a>
<a class="text-operation"
v-has="'projectLibraryBase:delete'"
v-if="record.createBy == userInfoQuery.username"
@click="deleteLib(record)">{{$t('deleteLib')}}</a>
<!-- <a class="text-operation" @click="entryNameClick(record)">{{$t('see')}}</a>-->
</span>
</a-table>
@@ -153,6 +156,7 @@
import { getAction, postAction, downloadFile, deleteAction } from '@/api/manage'
import addModel from '../components/addModel'
import PersonnelSelection from '@/components/PersonnelSelection/index'
import { mapGetters } from 'vuex'
export default {
name: 'index',
@@ -240,13 +244,16 @@
scopedSlots: { customRender: 'operation' }
}
],
userInfoQuery: {},
queryParam: {}
}
},
mounted() {
this.getList()
this.userInfoQuery = this.userInfo()
},
methods: {
...mapGetters(['userInfo']),
handleToggleSearch() {
this.toggleSearchStatus = !this.toggleSearchStatus
},
@@ -45,11 +45,12 @@
<div class="process-content-right-xian"></div>
<div class="process-content-content" :style="val.left"
v-for="(val,indexOne) in item.data[0]" :key="indexOne">
<div class="process-content-right-top" :title="val.name">{{val.name}}</div>
<a-tooltip placement="topLeft">
<template slot="title">
<span>{{val.time.slice(0,11)}}</span>
</template>
<div class="process-content-right-top">{{val.name}}</div>
<img v-if="val.status == 1" src="../../../../assets/done.svg" class="process-content-left" alt="">
<img v-else-if="val.status == 2" src="../../../../assets/open.svg"
class="process-content-left"
@@ -109,10 +110,73 @@
this.handlingTime = moment(new Date()).format('YYYY-MM-DD')
},
methods: {
getNewDate(flag, many) {
const thirtyDays = [4, 6, 9, 11] // 30天的月份
const thirtyOneDays = [1, 3, 5, 7, 8, 10, 12] // 31天的月份
const currDate = new Date() // 今天日期
const year = currDate.getFullYear()
let month = currDate.getMonth() + 1
let targetDateMilli = 0
let GMTDate = '' // 中国标准时间
let targetYear = '' //
let targetMonth = '' //
let targetDate = '' //
let dealTargetDays = '' // 目标日期
const isLeapYear = !!((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) // 是否是闰年
let countDays = 0 // 累计天数
for (let i = 0; i < many; i++) {
if (flag === 'before') {
month = month - 1 <= 0 ? 12 : month - 1
} else {
month = month + 1 > 12 ? 1 : month + 1
}
thirtyDays.includes(month) ? (countDays += 30) : thirtyOneDays.includes(month) ? (countDays += 31) : isLeapYear ? (countDays += 29) : (countDays += 28)
}
targetDateMilli = currDate.setDate(
currDate.getDate() - (flag === 'before' ? countDays : countDays * -1)
)
GMTDate = new Date(targetDateMilli)
targetYear = GMTDate.getFullYear()
targetMonth = GMTDate.getMonth() + 1
targetDate = GMTDate.getDate()
targetMonth = targetMonth.toString().padStart(2, '0')
targetDate = targetDate.toString().padStart(2, '0')
dealTargetDays = `${targetYear}-${targetMonth}`
return dealTargetDays
},
getTimeline() {
let query = {
startTime: this.startTime,
endTime: this.endTime
startTime: this.startTime || this.getNewDate('before', 6),
endTime: this.endTime || this.getNewDate('after', 5)
}
this.loadingMain = true
getAction(this.url.timeline, query).then((res) => {
@@ -143,8 +207,8 @@
},
getTimelineList(time) {
let query = {
startTime: this.startTime,
endTime: this.endTime
startTime: this.startTime || this.getNewDate('before', 6),
endTime: this.endTime || this.getNewDate('after', 5)
}
getAction(this.url.timelineList, query).then((res) => {
if (res.success) {
@@ -355,7 +419,7 @@
}
.box-top-content-left {
width: 160px;
width: 140px;
float: left;
padding-top: 100px;
margin-right: 20px;
@@ -364,8 +428,8 @@
.box-top-content-left-text {
color: #191E29;
font-weight: bold;
font-size: 14px;
height: 104px;
font-size: 12px;
height: 84px;
letter-spacing: 0px;
text-align: left;
text-overflow: ellipsis;
@@ -374,7 +438,7 @@
}
.box-top-content-right {
width: calc(100% - 180px);
width: calc(100% - 160px);
float: left;
}
@@ -392,7 +456,7 @@
height: 36px;
color: #54565A;
font-weight: bold;
font-size: 14px;
font-size: 13px;
line-height: 36px;
letter-spacing: 0px;
text-align: center;
@@ -409,7 +473,7 @@
.process-content {
position: relative;
height: 104px;
height: 84px;
.process-content-content {
background: #fff;
@@ -430,15 +494,22 @@
}
.process-content-right-top {
font-size: 14px;
font-size: 12px;
color: #040B29;
max-width: 155px;
text-overflow: ellipsis;
white-space: nowrap;
width: 50px;
overflow: hidden;
position: absolute;
top: -8px;
top: -14px;
left: 50%;
line-height: 1.2;
display: -webkit-box;
text-overflow: ellipsis;
/*! autoprefixer: off */
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
/*! autoprefixer: on;*/
text-justify: inter-ideograph;
word-break: break-all;
transform: translate(-50%, -50%);
}
@@ -71,11 +71,11 @@
<div class="process-content-right-xian"></div>
<div class="process-content-content" :style="val.left"
v-for="(val,indexOne) in item.data[0]" :key="indexOne">
<div class="process-content-right-top" :title="val.name">{{val.name}}</div>
<a-tooltip placement="topLeft">
<template slot="title">
<span>{{val.time.slice(0,11)}}</span>
</template>
<div class="process-content-right-top">{{val.name}}</div>
<img v-if="val.status == 1" src="../../../assets/done.svg" class="process-content-left"
alt="">
<img v-else-if="val.status == 2" src="../../../assets/open.svg"
@@ -242,10 +242,73 @@
this.handlingTime = moment(new Date()).format('YYYY-MM-DD')
},
methods: {
getNewDate(flag, many) {
const thirtyDays = [4, 6, 9, 11] // 30天的月份
const thirtyOneDays = [1, 3, 5, 7, 8, 10, 12] // 31天的月份
const currDate = new Date() // 今天日期
const year = currDate.getFullYear()
let month = currDate.getMonth() + 1
let targetDateMilli = 0
let GMTDate = '' // 中国标准时间
let targetYear = '' //
let targetMonth = '' //
let targetDate = '' //
let dealTargetDays = '' // 目标日期
const isLeapYear = !!((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) // 是否是闰年
let countDays = 0 // 累计天数
for (let i = 0; i < many; i++) {
if (flag === 'before') {
month = month - 1 <= 0 ? 12 : month - 1
} else {
month = month + 1 > 12 ? 1 : month + 1
}
thirtyDays.includes(month) ? (countDays += 30) : thirtyOneDays.includes(month) ? (countDays += 31) : isLeapYear ? (countDays += 29) : (countDays += 28)
}
targetDateMilli = currDate.setDate(
currDate.getDate() - (flag === 'before' ? countDays : countDays * -1)
)
GMTDate = new Date(targetDateMilli)
targetYear = GMTDate.getFullYear()
targetMonth = GMTDate.getMonth() + 1
targetDate = GMTDate.getDate()
targetMonth = targetMonth.toString().padStart(2, '0')
targetDate = targetDate.toString().padStart(2, '0')
dealTargetDays = `${targetYear}-${targetMonth}`
return dealTargetDays
},
getTimeline() {
let query = {
startTime: this.startTime,
endTime: this.endTime,
startTime: this.startTime || this.getNewDate('before',6),
endTime: this.endTime || this.getNewDate('after',5),
...this.queryParam
}
this.loadingMain = true
@@ -277,8 +340,8 @@
},
getTimelineList(time) {
let query = {
startTime: this.startTime,
endTime: this.endTime,
startTime: this.startTime || this.getNewDate('before',6),
endTime: this.endTime || this.getNewDate('after',5),
...this.queryParam
}
getAction(this.url.timelineList, query).then((res) => {
@@ -506,7 +569,7 @@
}
.box-top-content-left {
width: 160px;
width: 140px;
float: left;
padding-top: 100px;
margin-right: 20px;
@@ -515,8 +578,8 @@
.box-top-content-left-text {
color: #191E29;
font-weight: bold;
font-size: 14px;
height: 104px;
font-size: 12px;
height: 84px;
letter-spacing: 0px;
text-align: left;
text-overflow: ellipsis;
@@ -525,7 +588,7 @@
}
.box-top-content-right {
width: calc(100% - 180px);
width: calc(100% - 160px);
float: left;
}
@@ -544,7 +607,7 @@
padding-left: 10px;
color: #54565A;
font-weight: bold;
font-size: 14px;
font-size: 13px;
line-height: 36px;
letter-spacing: 0px;
text-align: center;
@@ -561,7 +624,7 @@
.process-content {
position: relative;
height: 104px;
height: 84px;
.process-content-content {
background: #fff;
@@ -582,15 +645,22 @@
}
.process-content-right-top {
font-size: 14px;
font-size: 12px;
color: #040B29;
max-width: 155px;
text-overflow: ellipsis;
white-space: nowrap;
width: 50px;
overflow: hidden;
position: absolute;
top: -8px;
top: -14px;
left: 50%;
line-height: 1.2;
display: -webkit-box;
text-overflow: ellipsis;
/*! autoprefixer: off */
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
/*! autoprefixer: on;*/
text-justify: inter-ideograph;
word-break: break-all;
transform: translate(-50%, -50%);
}
@@ -104,7 +104,8 @@
'1': this.$t('SubscriptionNotification'),
'2': this.$t('warningInformation'),
'3': this.$t('ForwardPush'),
'4': this.$t('authenticationMessage')
'4': this.$t('authenticationMessage'),
'5': this.$t('taskRegulationComplianceTask')
},
columns: [
{