diff --git a/jero-boot/db/蔚来标准sql/dev_2nd_period.sql b/jero-boot/db/蔚来标准sql/dev_2nd_period.sql new file mode 100644 index 000000000..3a32c5b11 --- /dev/null +++ b/jero-boot/db/蔚来标准sql/dev_2nd_period.sql @@ -0,0 +1,29 @@ +-- 二期一阶段的表变更,必须添加的固定数据以sql形式放到此处 + + +-- 项目库添加字段(项目版本,软件版本,说明)---------2022-10-18 未同步生产环境 +ALTER TABLE `laws_weilai`.`project_library_base` +ADD COLUMN `parent_id` varchar(255) NULL COMMENT '主项目id' AFTER `update_by`, +ADD COLUMN `project_version` varchar(255) NULL COMMENT '项目版本' AFTER `parent_id`, +ADD COLUMN `explanation` varchar(2000) NULL COMMENT '说明' AFTER `project_version`, +ADD COLUMN `software_version` varchar(255) NULL COMMENT '软件版本' AFTER `explanation`; + +-- 项目库添加字段(排序)---------2022-10-18 未同步生产环境 +ALTER TABLE `laws_weilai`.`project_library_base` +ADD COLUMN `sort` varchar(255) NULL COMMENT '排序(用于置顶功能)' AFTER `software_version`, +ADD COLUMN `flag` varchar(255) NULL COMMENT '置顶(flag为空的时候为置顶, flag为1的时候取消置顶)' AFTER `sort`; + +-- 认证参数列表添加字段--------2022-10-20 未同步生产环境 +ALTER TABLE `laws_weilai`.`params_manifest` +ADD COLUMN `project_version` varchar(255) NULL COMMENT '相关项目版本' AFTER `params_template_name`, +ADD COLUMN `explanation` varchar(2000) NULL COMMENT '说明' AFTER `project_version`; + +-- 项目库修改认证软件版本字段长度---------2022-11-01 未同步生产环境 +ALTER TABLE `laws_weilai`.`project_library_base` +MODIFY COLUMN `software_version` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '软件版本' AFTER `explanation`; + +-- 认证参数历史列表添加字段--------2022-11-02 未同步生产环境 +ALTER TABLE `laws_weilai`.`params_manifest_history` +ADD COLUMN `project_version` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '相关项目版本' AFTER `params_template_name`, +ADD COLUMN `explanation` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '说明' AFTER `project_version`; + diff --git a/jero-boot/db/蔚来标准sql/dev_third_record.sql b/jero-boot/db/蔚来标准sql/dev_third_record.sql index 706a8ec55..e5eaf7717 100644 --- a/jero-boot/db/蔚来标准sql/dev_third_record.sql +++ b/jero-boot/db/蔚来标准sql/dev_third_record.sql @@ -1204,5 +1204,8 @@ ALTER TABLE `laws_weilai`.`laws_monthly_report_write` MODIFY COLUMN `work_progress_cn` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'NIO工作进展中文' AFTER `content_en`, MODIFY COLUMN `work_progress_en` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'NIO工作进展英文' AFTER `work_progress_cn`; ---文档拆分条款 条款号取消必填 2022-10-25 未同步生产环境 -UPDATE `laws_weilai`.`onl_cgform_field` SET `field_must_input` = '0' WHERE `id` = '0a455895498552bc709dff250b3364b1' \ No newline at end of file + +--参数收集清单 添加英文 +UPDATE `laws_weilai`.`onl_cgform_field` SET `db_field_en_name` = 'Control Component' WHERE `id` = '84fec4a260dc646dc570cbf7cb581dab'; +UPDATE `laws_weilai`.`onl_cgform_field` SET `db_field_en_name` = 'Component Value' WHERE `id` = '5d468613746f413a53fa0b485089839b'; +UPDATE `laws_weilai`.`onl_cgform_field` SET `db_field_en_name` = 'Validate Component' WHERE `id` = '608274a6a6dfed0e183093d9ea357436'; \ No newline at end of file diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/MessageType2Enum.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/MessageType2Enum.java new file mode 100644 index 000000000..bf4544532 --- /dev/null +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/MessageType2Enum.java @@ -0,0 +1,41 @@ +package com.jero.common.constant.enums; + +public enum MessageType2Enum { + + + SUBSCRIPTION_NOTIFICATION("Subscription Notification","订阅通知"), + SHARE_FORWARD("Share Forward","转发推送"), + REGULATION_EARLY_WARNING("Regulation Early Warning","法规预警"), + REGULATION_LIST_CONFIRMATION("Regulation List Confirmation","法规清单确认"), + REGULATION_TASK_CONFIRMATION("Regulation Task Confirmation","法规任务确认"), + DESIGN_COMPLIANCE_CONFIRMATION("Design Compliance Confirmation","设计符合性确认"), + PRE_HOMO_CONFIRMATION("Pre-Homo Confirmation","Pre-Homo确认"), + VALIDATION_COMPLIANCE_CONFIRMATION("Validation Compliance Confirmation","验证符合性确认"), + REGULATION_OPINION_COLLECTION("Regulation Opinion Collection","法规意见收集"), + REGULATION_TECHNICAL_ASSESSMENT("Regulation Technical Assessment","法规技术评估"), + HOMO_PARAMETER_COLLECTION("Homo Parameter Collection","认证参数收集"); + + String en; + String cn; + + MessageType2Enum(String en, String cn) { + this.en = en; + this.cn = cn; + } + + public String getEn() { + return en; + } + + public void setEn(String en) { + this.en = en; + } + + public String getCn() { + return cn; + } + + public void setCn(String cn) { + this.cn = cn; + } +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/MessageTypeEnum.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/MessageTypeEnum.java index 3181758a0..f9d101325 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/MessageTypeEnum.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/MessageTypeEnum.java @@ -6,11 +6,11 @@ package com.jero.common.constant.enums; * @auth zhn */ public enum MessageTypeEnum { - READ("Subscription Notification","1"), - WARN("Early Warning","2"), - PUSH("Share / Forward","3"), - HOMO_TASK("Homo Parameter Task","4"), - TASK("Regulation Compliance Task", "5"), + READ("Subscription Notification","订阅通知","1"), + WARN("Regulation Early Warning","法规预警","2"), + PUSH("Share / Forward","转发推送","3"), + HOMO_TASK("Homo Parameter Task","","4"), + TASK("Regulation Compliance Task","", "5"), //REGULATION_LIST_CONFIRMATION_TASK("Regulation List Confirmation Task", "6"), // 清单确认任务 //REGULATION_LIST_CONFIRMATION_NOTIFICATION("Regulation List Confirmation Notification", "7"), // 清单确认通知 //REGULATION_TASK_CONFIRMATION_TASK("Regulation Task Confirmation", "8"), // 任务确认任务 @@ -21,19 +21,21 @@ public enum MessageTypeEnum { //DESIGN_COMPLIANCE_NOTIFICATION("Design Compliance Notification", "12"), // 设计符合性通知 //PRE_HOMO_NOTIFICATION("Pre-Homo Notification", "13"), // Pre-Homo通知 //VALIDATION_COMPLIANCE_NOTIFICATION("Validation Compliance Notification", "14"), // 验证符合性通知 - SYSTEMATIC_NOTIFICATION("Systematic Notification", "15"), // 系统通知 - LIST_CONFIRMATION("List Confirmation", "17"), // 清单确认 - TASK_CONFIRMATION("Task Confirmation", "18"), // 任务确认 - COMPLIANCE_CONFIRMATION("Compliance Confirmation", "19"), // 符合性确认 - COLLECTION_OF_LEGISLATIVE_COMMENTS("Collection of Legislative Comments", "20"), // 法规意见收集 - REGULATORY_AND_TECHNICAL_ASSESSMENT("Regulatory and technical assessment", "21"), // 法规技术评估 + SYSTEMATIC_NOTIFICATION("Systematic Notification","", "15"), // 系统通知 + LIST_CONFIRMATION("List Confirmation", "","17"), // 清单确认 + TASK_CONFIRMATION("Task Confirmation", "","18"), // 任务确认 + COMPLIANCE_CONFIRMATION("Compliance Confirmation","", "19"), // 符合性确认 + COLLECTION_OF_LEGISLATIVE_COMMENTS("Collection of Legislative Comments","", "20"), // 法规意见收集 + REGULATORY_AND_TECHNICAL_ASSESSMENT("Regulatory and technical assessment", "","21"), // 法规技术评估 ; String name; + String nameCn; String value; - private MessageTypeEnum(String name, String value) { + private MessageTypeEnum(String name,String nameCn, String value) { this.name = name; + this.nameCn = nameCn; this.value = value; } @@ -52,4 +54,12 @@ public enum MessageTypeEnum { public void setValue(String value) { this.value = value; } + + public String getNameCn() { + return nameCn; + } + + public void setNameCn(String nameCn) { + this.nameCn = nameCn; + } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/MsgColorEnum.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/MsgColorEnum.java new file mode 100644 index 000000000..f8064cc7e --- /dev/null +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/MsgColorEnum.java @@ -0,0 +1,32 @@ +package com.jero.common.constant.enums; + +public enum MsgColorEnum { + + GREEN("其他","green"), + RED("任务被拒绝","red"), + YELLOW("任务逾期","yellow"); + + String label; + String value; + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + MsgColorEnum(String label, String value) { + this.label = label; + this.value = value; + } +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java index 086cbddee..6a49669a8 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java @@ -152,11 +152,17 @@ public class ShiroConfig { filterChainDefinitionMap.put("/lawsTechnologyEvaluation/lawsTechnologyEvaluationEO/processCall", "anon"); // 法规技术评估-条款信息评估结果表 工作流处理数据接口排除 filterChainDefinitionMap.put("/lawsTechnologyEvaluation/lawsTechnologyEvaluationItemResultEO/processCall", "anon"); + // 流程信息表 工作流处理数据接口排除 + filterChainDefinitionMap.put("/todoCenter/processInfoEO/processCall", "anon"); + // 流程信息明细表 工作流处理数据接口排除 + filterChainDefinitionMap.put("/todoCenter/processInfoDetailEO/processCall", "anon"); filterChainDefinitionMap.put("/lark/larkEventSubscriptionConfig", "anon"); //飞书调用接口,事件订阅配置。 filterChainDefinitionMap.put("/lark/larkCardMessageConfig", "anon"); //飞书调用接口,卡片消息配置。 filterChainDefinitionMap.put("/sys/user/querySysUserListByIdList", "anon"); // 工作流根据用户idList获取用户信息接口 filterChainDefinitionMap.put("/project/projectTaskInventoryConditionAssessmentEO/initConditionAssessment", "anon"); // 初始化项目当前状态数据接口 + filterChainDefinitionMap.put("/todoCenter/projectProcess/initHistoryData", "anon"); // 待办中心-初始化历史数据接口排除 + filterChainDefinitionMap.put("/project/projectTaskInventoryEO/disposeHistoryData", "anon"); // 项目库-任务清单 处理历史数据接口 // 添加自己的过滤器并且取名为jwt Map filterMap = new HashMap(1); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysPermissionController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysPermissionController.java index 9668a5a92..f9b86374a 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysPermissionController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysPermissionController.java @@ -5,13 +5,14 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.jero.common.constant.enums.CutEnum; +import com.jero.modules.system.enums.SysPermissionEnum; +import com.jero.modules.system.mapper.TodoCenterMapper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.apache.shiro.authz.annotation.RequiresRoles; import com.jero.common.api.vo.Result; import com.jero.common.constant.CommonConstant; -import com.jero.common.system.util.JwtUtil; import com.jero.common.system.vo.LoginUser; import com.jero.common.util.MD5Util; import com.jero.common.util.oConvertUtils; @@ -54,6 +55,9 @@ public class SysPermissionController { @Autowired private ISysDepartPermissionService sysDepartPermissionService; + @Autowired + private TodoCenterMapper todoCenterMapper; + /** * 加载数据节点 * @@ -641,6 +645,47 @@ public class SysPermissionController { if (isWWWHttpUrl(permission.getUrl())) { meta.put("url", permission.getUrl()); } + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + Map params = new HashMap<>(); + params.put("currentUserId",currentUser.getId()); + + List flowTypeList = new ArrayList<>(); + //项目法规任务 + if(StringUtils.equals(permission.getId(), SysPermissionEnum.PROJECT_REGULATION_TASKS.getId())){ + flowTypeList.add("1"); + flowTypeList.add("2"); + flowTypeList.add("3"); + flowTypeList.add("4"); + flowTypeList.add("10"); + params.put("flowTypeList",flowTypeList); + //存在待办任务标识,true为有 + boolean existTaskFlag = false; + int result = todoCenterMapper.todoCenterTaskCount(params); + if(result > 0){ + existTaskFlag = true; + } + //查询当前登录用户是否有项目法规任务 + meta.put("existTask",existTaskFlag); + } + //法规评估任务 + if(StringUtils.equals(permission.getId(), SysPermissionEnum.REGULATORY_ASSESSMENT_TASKS.getId())){ + flowTypeList.add("5"); + flowTypeList.add("6"); + params.put("flowTypeList",flowTypeList); + int result = todoCenterMapper.todoCenterTaskCount(params); + boolean existTaskFlag = false; + if(result > 0){ + existTaskFlag = true; + } + meta.put("existTask",existTaskFlag); + } + //项目参数任务 + if(StringUtils.equals(permission.getId(), SysPermissionEnum.PROJECT_PARAMETER_TASKS.getId())){ + boolean existTaskFlag = false; + meta.put("existTask",existTaskFlag); + } json.put("meta", meta); } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncement.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncement.java index 4da6a9046..fac7280f7 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncement.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncement.java @@ -157,4 +157,8 @@ public class SysAnnouncement implements Serializable { * 发起人 */ private java.lang.String initiator; + + private java.lang.String msgContentCn;//消息的中文(不带标签) + + private java.lang.String msgContentInfoCn;//消息的中文(带标签) } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/enums/SysPermissionEnum.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/enums/SysPermissionEnum.java new file mode 100644 index 000000000..951afcc20 --- /dev/null +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/enums/SysPermissionEnum.java @@ -0,0 +1,35 @@ +package com.jero.modules.system.enums; + +/** + * 菜单权限枚举类 + * @Author: wzj + * @Date: 2022/10/26 16:14 + **/ +public enum SysPermissionEnum { + + PROJECT_REGULATION_TASKS("项目法规任务","1580735287309119489",""), + REGULATORY_ASSESSMENT_TASKS("法规评估任务","1580735611793059842",""), + PROJECT_PARAMETER_TASKS("项目参数任务","1580735965892980738",""); + + private String name; + private String id; + private String value; + + private SysPermissionEnum(String name,String id, String value) { + this.name = name; + this.id = id; + this.value = value; + } + + public String getName() { + return name; + } + + public String getValue() { + return value; + } + + public String getId() { + return id; + } +} diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/TodoCenterMapper.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/TodoCenterMapper.java new file mode 100644 index 000000000..b6e0e59ca --- /dev/null +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/TodoCenterMapper.java @@ -0,0 +1,14 @@ +package com.jero.modules.system.mapper; + +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + * 待办中心mapper层 + * @Author: wzj + * @Date: 2022/10/26 16:41 + **/ +public interface TodoCenterMapper { + int todoCenterTaskCount(@Param("params") Map params); +} diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysAnnouncementSendMapper.xml b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysAnnouncementSendMapper.xml index eeaf3e484..e8572c2ad 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysAnnouncementSendMapper.xml +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysAnnouncementSendMapper.xml @@ -18,6 +18,8 @@ + + + select + count(1) + from + process_info pi + where + pi.id in ( + select detail.process_info_id from process_info_detail detail where detail.status = 'NotDone' and detail.user_id = #{params.currentUserId} + ) + + and pi.flow_type in + + #{item} + + + + diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/AnnouncementSendModel.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/AnnouncementSendModel.java index c06ddda74..97ceb8071 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/AnnouncementSendModel.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/AnnouncementSendModel.java @@ -87,4 +87,8 @@ public class AnnouncementSendModel implements Serializable { */ private java.lang.String initiator; + private java.lang.String msgContentCn;//消息的中文(不带标签) + + private java.lang.String msgContentInfoCn;//消息的中文(带标签) + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/controller/ParamsCollectManifestEOController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/controller/ParamsCollectManifestEOController.java index 349d8ced7..d7e034acc 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/controller/ParamsCollectManifestEOController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/controller/ParamsCollectManifestEOController.java @@ -19,6 +19,7 @@ import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; @@ -530,6 +531,25 @@ public class ParamsCollectManifestEOController extends JeroController importParamsInfo( MultipartFile file, + @RequestParam(value = "cut") String cut, + @RequestParam(value = "paramsManifestId") String paramsManifestId) throws Exception { + return paramsCollectManifestEOService.importDre(file, cut, paramsManifestId); + } + /** * 调整责任领域 * diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/entity/ParamsManifestEO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/entity/ParamsManifestEO.java index 9d9cb0d9b..4c73955ec 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/entity/ParamsManifestEO.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/entity/ParamsManifestEO.java @@ -103,4 +103,10 @@ public class ParamsManifestEO implements Serializable { @TableField(exist = false) private String projectName; + //相关项目版本 + private String projectVersion; + + //说明 + private String explanation; + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/ParamsCollectManifestEOMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/ParamsCollectManifestEOMapper.java index 1166ad6d3..1a6edaa5b 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/ParamsCollectManifestEOMapper.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/ParamsCollectManifestEOMapper.java @@ -17,11 +17,13 @@ import java.util.Map; public interface ParamsCollectManifestEOMapper extends BaseMapper { List listInfo(@Param("paramsCollectManifestEO") ParamsCollectManifestEO paramsCollectManifestEO); - - List> listInfoForExport(@Param("paramsCollectManifestEO") ParamsCollectManifestEO paramsCollectManifestEO); + List> listInfoForExport(@Param("paramsCollectManifestEO") ParamsCollectManifestEO paramsCollectManifestEO, @Param("ids") String ids); + List listInfoOfTodoCenter(); // 查询控件类型为 标题的 参数项 List listInfoOfTitle(@Param("paramsManifestId") String paramsManifestId); IPage pageInfo(@Param("page") IPage page, @Param("paramsCollectManifestEO") ParamsCollectManifestEO paramsCollectManifestEO); - } + + List queryByParamManifestId(@Param("paramsManifestId") String paramsManifestIdString); +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/ParamsManifestEOMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/ParamsManifestEOMapper.java index 97a6d0c9b..5d718889d 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/ParamsManifestEOMapper.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/ParamsManifestEOMapper.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.jero.modules.cert.collect.entity.ParamsManifestEO; import com.jero.modules.cert.collect.vo.ParamsManifestVO; +import com.jero.modules.todoCenter.entity.ParamsManifestTodoCenterEO; +import com.jero.modules.todoCenter.vo.ParamsManifestTodoCenterEOPage; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -24,6 +26,8 @@ public interface ParamsManifestEOMapper extends BaseMapper { List listInfoAll(@Param("idList") List idList); + List listForTodoCenter(ParamsManifestTodoCenterEOPage paramsManifestTodoCenterEOPage); + ParamsManifestVO getProjectById(@Param("projectId") String projectId); List> labelListForProjectDetails(@Param("projectId") String projectId); diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/xml/ParamsCollectManifestEOMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/xml/ParamsCollectManifestEOMapper.xml index 26f0ae6c0..80b2edd93 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/xml/ParamsCollectManifestEOMapper.xml +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/xml/ParamsCollectManifestEOMapper.xml @@ -51,7 +51,10 @@ AND duty_territory = #{paramsCollectManifestEO.dutyTerritory} - AND state = #{paramsCollectManifestEO.state} + AND state in + + #{item} + AND params_manifest_id = #{paramsCollectManifestEO.paramsManifestId} @@ -81,10 +84,20 @@ order by del_flag desc, add_flag desc, change_flag desc, nio_number asc + + @@ -104,4 +117,8 @@ order by del_flag desc, add_flag desc, change_flag desc, nio_number asc - \ No newline at end of file + + + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/xml/ParamsManifestEOMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/xml/ParamsManifestEOMapper.xml index 592058433..ef6b378b5 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/xml/ParamsManifestEOMapper.xml +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/mapper/xml/ParamsManifestEOMapper.xml @@ -16,6 +16,8 @@ + + @@ -27,6 +29,8 @@ + + @@ -43,6 +47,8 @@ pm.project_id as project_id, pm.params_template_id as params_template_id, pm.params_template_publish_version as params_template_publish_version, + pm.project_version as project_version, + pm.explanation as explanation, if (pt.params_template_name is not null, pt.params_template_name, pm.params_template_name) as params_template_name @@ -114,11 +120,35 @@ + + - \ No newline at end of file + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/service/IParamsCollectManifestEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/service/IParamsCollectManifestEOService.java index 8904cd11c..7a20536f8 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/service/IParamsCollectManifestEOService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/service/IParamsCollectManifestEOService.java @@ -2,11 +2,14 @@ package com.jero.modules.cert.collect.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.common.api.vo.Result; import com.jero.modules.cert.collect.entity.ParamsCollectManifestEO; import com.jero.modules.cert.collect.vo.ParamsCollectManifestVO; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.List; import java.util.Map; @@ -162,6 +165,21 @@ public interface IParamsCollectManifestEOService extends IService importDre(MultipartFile file, String cut, String paramsManifestId) throws IOException; + + Result importData(List> dataList, + String unzipfilepath, + String cut, + String paramsManifestId) throws IOException; + // 调整责任领域 List updateBatchDutyTerritory(ParamsCollectManifestVO paramsCollectManifestVO); + + //监控参数收集任务的截止时间,并根据时间段发送飞书 + void checkDeadline(); + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/service/impl/ParamsCollectManifestEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/service/impl/ParamsCollectManifestEOServiceImpl.java index c33947e1c..5b39498e7 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/service/impl/ParamsCollectManifestEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/service/impl/ParamsCollectManifestEOServiceImpl.java @@ -1,5 +1,6 @@ package com.jero.modules.cert.collect.service.impl; +import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ZipUtil; @@ -9,12 +10,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; +import com.jero.common.api.vo.Result; import com.jero.common.constant.CommonConstant; import com.jero.common.constant.WebsocketConst; -import com.jero.common.constant.enums.CutEnum; -import com.jero.common.constant.enums.MessageTypeEnum; -import com.jero.common.constant.enums.ModuleEnum; -import com.jero.common.constant.enums.YesOrNoEnum; +import com.jero.common.constant.enums.*; import com.jero.common.exception.JeroBootException; import com.jero.common.system.query.QueryGenerator; import com.jero.common.system.vo.LoginUser; @@ -36,11 +35,12 @@ import com.jero.modules.cert.report.service.*; import com.jero.modules.cert.template.entity.CertCategoryParamsInfoPublishEO; import com.jero.modules.cert.template.entity.ParamsInfoPublishEO; import com.jero.modules.cert.template.enums.ControlTypeEnum; +import com.jero.modules.cert.template.enums.ControlVerifyEnum; import com.jero.modules.cert.template.enums.ParamsIsMustEnum; import com.jero.modules.cert.template.service.ICertCategoryParamsInfoPublishEOService; import com.jero.modules.cert.template.service.IParamsInfoPublishEOService; import com.jero.modules.feishu.service.IFeishuService; -import com.jero.modules.feishu.vo.FeishuMsgVo; +import com.jero.modules.feishu.vo.FeishuMsg2Vo; import com.jero.modules.message.websocket.WebSocket; import com.jero.modules.ocr.service.WebSocketServer; import com.jero.modules.ocr.util.LineHumpUtil; @@ -50,6 +50,8 @@ import com.jero.modules.project.entity.ProjectLibraryBase; import com.jero.modules.project.entity.ProjectRelatedPersonnel; import com.jero.modules.project.mapper.ProjectLibraryBaseMapper; import com.jero.modules.project.service.IProjectRelatedPersonnelService; +import com.jero.modules.split.common.FileUnZip; +import com.jero.modules.split.common.ReadExcel; import com.jero.modules.system.entity.SysAnnouncement; import com.jero.modules.system.entity.SysDictItem; import com.jero.modules.system.entity.SysUser; @@ -58,9 +60,12 @@ import com.jero.modules.system.service.ISysAnnouncementService; import com.jero.modules.system.service.ISysDictItemService; import com.jero.modules.system.service.ISysUserRoleService; import com.jero.modules.system.service.ISysUserService; +import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.util.HSSFColor; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.*; import org.apache.shiro.SecurityUtils; @@ -88,6 +93,8 @@ import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; +import static com.jero.modules.split.util.ExcelUtil.checkObjAllFieldsIsNull; + /** * @Description: 参数项收集清单 * @Author: jero-boot @@ -1278,13 +1285,111 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl engThirdIds = new ArrayList<>(); + List projectLibraryBases = projectLibraryBaseMapper.queryById(paramsManifestEO.getProjectId()); + if (ObjectUtils.isNotEmpty(projectLibraryBases)) { + String[] ids = projectLibraryBases.get(0).getCertificationEngineer().split(","); + if (ObjectUtils.isNotEmpty(ids)) { + for (String id : ids) { + SysUser engineer = sysUserService.getById(id); + if (ObjectUtils.isNotEmpty(engineer)) { + engThirdIds.add(engineer.getThirdId()); + } + } + } + } + if (CollectManifestStateEnum.SDT_BACK.getValue().equals(paramsCollectManifestEO.getState())) { + //通知认证工程师 + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(MessageType2Enum.HOMO_PARAMETER_COLLECTION.getCn() + "/" + MessageType2Enum.HOMO_PARAMETER_COLLECTION.getEn()); + feishuMsgVo.setCnContentUpper("您好,"+ currentUser.getUsername() +"退回了参数NIO-"+ paramsCollectManifestEO.getNioNumber() +",请及时处理"); + feishuMsgVo.setCnContentLower("项目: " + projectInfo.getProjectName() + + "\n发起人: " + currentUser.getUsername() + + "\n截止时间: " + deadline); + feishuMsgVo.setEnContentUpper("Hello! "+ currentUser.getUsername() +" has returned the Parameter NIO-"+ paramsCollectManifestEO.getNioNumber() +". Please address it in a timely manner"); + feishuMsgVo.setEnContentLower("Project: " + projectInfo.getProjectName() + + "\nInitiator: " + currentUser.getUsername() + + "\nDue Date: " + deadline); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.RED.getValue()); // 颜色 + feishuService.sendCard(engThirdIds.toArray(new String[engThirdIds.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } else if (CollectManifestStateEnum.DRE_BACK.getValue().equals(paramsCollectManifestEO.getState())) { + + //通知认证工程师 + /*try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(MessageType2Enum.HOMO_PARAMETER_COLLECTION.getCn() + "/" + MessageType2Enum.HOMO_PARAMETER_COLLECTION.getEn()); + feishuMsgVo.setCnContentUpper("您好,"+ currentUser.getUsername() +"申请撤回参数NIO-"+ paramsCollectManifestEO.getNioNumber() +",请及时处理"); + feishuMsgVo.setCnContentLower("项目: " + projectInfo.getProjectName() + + "\n发起人: " + currentUser.getUsername() + + "\n截止时间: " + deadline); + feishuMsgVo.setEnContentUpper("Hello! "+ currentUser.getUsername() +" requested for withdrawing Parameter NIO-"+ paramsCollectManifestEO.getNioNumber() +". Please address it in a timely manner"); + feishuMsgVo.setEnContentLower("Project: " + projectInfo.getProjectName() + + "\nInitiator: " + currentUser.getUsername() + + "\nDue Date: " + deadline); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.RED.getValue()); // 颜色 + feishuService.sendCard(engThirdIds.toArray(new String[engThirdIds.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + }*/ + //通知工程接口人 + List SdtThirdIds = new ArrayList<>(); + for (String sdt : paramsCollectManifestEO.getSdt().split(",")) { + SysUser sdtUser = sysUserService.getUserByName(sdt); + if (ObjectUtils.isNotEmpty(sdtUser)) { + SdtThirdIds.add(sdtUser.getThirdId()); + } + } + + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(MessageType2Enum.HOMO_PARAMETER_COLLECTION.getCn() + "/" + MessageType2Enum.HOMO_PARAMETER_COLLECTION.getEn()); + feishuMsgVo.setCnContentUpper("您好,"+ currentUser.getUsername() +"退回了参数NIO-"+ paramsManifestEO.getTitle() +",请及时处理"); + feishuMsgVo.setCnContentLower("项目: " + projectInfo.getProjectName() + + "\n发起人: " + currentUser.getUsername() + + "\n截止时间: " + deadline); + feishuMsgVo.setEnContentUpper("Hello! "+ currentUser.getUsername() +" has returned the Parameter NIO-"+ paramsManifestEO.getTitle() +". Please address it in a timely manner"); + feishuMsgVo.setEnContentLower("Project: " + projectInfo.getProjectName() + + "\nInitiator: " + currentUser.getUsername() + + "\nDue Date: " + deadline); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.RED.getValue()); // 颜色 + feishuService.sendCard(SdtThirdIds.toArray(new String[SdtThirdIds.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + + } + + } + } + return update; } @Override @@ -1437,13 +1542,13 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImplthe link,"; - String content = connectBuilder.substring(0, connectBuilder.toString().length()-1) + " and other parameter items, please enter the link to handle it."; - String contentInfo = connectBuilder.substring(0, connectBuilder.toString().length()-1) + " and other parameter items, please enter " + href + " and fill in the relevant information."; - String msgTitle = projectInfo.getProjectName() + ": You have a homo parameter task to complete"; + //String href = "the link,"; + //String content = connectBuilder.substring(0, connectBuilder.toString().length()-1) + " and other parameter items, please enter the link to handle it."; + //String contentInfo = connectBuilder.substring(0, connectBuilder.toString().length()-1) + " and other parameter items, please enter " + href + " and fill in the relevant information."; + //String msgTitle = projectInfo.getProjectName() + ": You have a homo parameter task to complete"; // 发送系统消息 - SysAnnouncement sysAnnouncement = new SysAnnouncement(); + /*SysAnnouncement sysAnnouncement = new SysAnnouncement(); sysAnnouncement.setDelFlag("0"); sysAnnouncement.setSendStatus("0"); sysAnnouncement.setSendTime(new Date()); @@ -1460,10 +1565,10 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl paramsCollectManifestEOList = listByIds(Arrays.asList(paramsCollectManifestIdStr)); paramsCollectManifestEOList = paramsCollectManifestEOList.stream().sorted(Comparator.comparing(ParamsCollectManifestBaseEO::getNioNumber)).collect(Collectors.toList()); // 按NIO编号升序 - for (ParamsCollectManifestEO paramsCollectManifestEO : paramsCollectManifestEOList) { + for (ParamsCollectManifestEO paramsCollectManifestEO : paramsCollectManifestEOList) { // 判断参数项状态 if (CollectManifestStateEnum.WAIT_COLLECT.getValue().equals(paramsCollectManifestEO.getState()) || CollectManifestStateEnum.SDT_BACK.getValue().equals(paramsCollectManifestEO.getState()) @@ -1539,19 +1661,19 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl afterUpdateEOList = listByIds(updateEOIdList); - List sdtList = afterUpdateEOList.stream() - .map(ParamsCollectManifestEO::getSdt) - .distinct() - .collect(Collectors.toList()); - if (CollectionUtil.isEmpty(sdtList)) { - throw new JeroBootException("没有可下发的工程接口人!"); - } - for (String sdt : sdtList) { + if (isSuccess) { + // 消息内容 + List afterUpdateEOList = listByIds(updateEOIdList); + List sdtList = afterUpdateEOList.stream() + .map(ParamsCollectManifestEO::getSdt) + .distinct() + .collect(Collectors.toList()); + if (CollectionUtil.isEmpty(sdtList)) { + throw new JeroBootException("没有可下发的工程接口人!"); + } + for (String sdt : sdtList) { - StringBuilder connectBuilder = new StringBuilder(); + /* StringBuilder connectBuilder = new StringBuilder(); connectBuilder.append("You are required to fill in "); for (int i = 0; i < afterUpdateEOList.size(); i++) { ParamsCollectManifestEO paramsCollectManifestEO = afterUpdateEOList.get(i); @@ -1559,19 +1681,19 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImplthe link,"; - String contentInfo = connectBuilder.substring(0, connectBuilder.toString().length() - 1) + " and other parameter items, please enter " + href + " and fill in the relevant information."; - String msgTitle = projectInfo.getProjectName() + ": You have a homo parameter task to complete"; + SysUser sysUser = sysUserService.getUserByName(sdt); + String[] thirdIds = new String[1]; + thirdIds[0] = sysUser.getThirdId(); + String urlParamsStr = parseUrlParams(paramsManifestEO); + String hrefFeishu = backUrl + "/ParameterItemCollection" + urlParamsStr; + //String href = "the link,"; + //String contentInfo = connectBuilder.substring(0, connectBuilder.toString().length() - 1) + " and other parameter items, please enter " + href + " and fill in the relevant information."; + //String msgTitle = projectInfo.getProjectName() + ": You have a homo parameter task to complete"; - // 发送系统消息 - SysAnnouncement sysAnnouncement = new SysAnnouncement(); + // 发送系统消息 + /* SysAnnouncement sysAnnouncement = new SysAnnouncement(); sysAnnouncement.setDelFlag("0"); sysAnnouncement.setSendStatus("0"); sysAnnouncement.setSendTime(new Date()); @@ -1588,24 +1710,28 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImplthe link,"; - String contentInfo = connectBuilder.substring(0, connectBuilder.toString().length() - 1) + " and other parameter items, please enter " + href + " and fill in the relevant information."; - String msgTitle = projectInfo.getProjectName() + ": You have a homo parameter task to complete"; + //String href = "the link,"; + //String contentInfo = connectBuilder.substring(0, connectBuilder.toString().length() - 1) + " and other parameter items, please enter " + href + " and fill in the relevant information."; + //String msgTitle = projectInfo.getProjectName() + ": You have a homo parameter task to complete"; // 发送系统消息 - SysAnnouncement sysAnnouncement = new SysAnnouncement(); + /*SysAnnouncement sysAnnouncement = new SysAnnouncement(); sysAnnouncement.setDelFlag("0"); sysAnnouncement.setSendStatus("0"); sysAnnouncement.setSendTime(new Date()); @@ -1722,19 +1847,23 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl getMsgOfIssueCollection(List> msgMapList, String cut, String operation) { List msgList = new ArrayList<>(); Map collectManifestStateEnumMap = CollectManifestStateEnum.toMap(cut); @@ -1761,13 +1891,20 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl").append(nioNumber).append("").append("工程接口人没有填写,请填写完工程接口人再进行下发收集。"); } - } else { + } else if ("2".equals(type)) { if (CutEnum.EN.getValue().equals(cut)) { stringBuilder.append("NIO number is ").append(nioNumber).append(",state is ").append("").append(stateName).append("").append(",no operation permission for this button."); } else { stringBuilder.append("NIO编号为").append(nioNumber).append(",状态为").append("").append(stateName).append("").append(",没有此按钮的操作权限。"); } + } else if ("3".equals(type)) { + if (CutEnum.EN.getValue().equals(cut)) { + stringBuilder.append("NIO number is ").append(nioNumber).append(",state is ").append("").append(stateName).append("").append(", fail to import."); + } else { + stringBuilder.append("NIO编号为").append(nioNumber).append(",状态为").append("").append(stateName).append("").append(",导入失败。"); + } + } msgList.add(stringBuilder.toString()); @@ -2313,6 +2450,409 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl fieldList = Arrays.asList(field.split(",")); // list形式 + + // 查询导出数据 + List> allParamsInfoList = queryForExportDre(paramsCollectManifestVO, request); // id记得去掉 + + // 在excel表中添加表头 + XSSFRow row = sheetItems.createRow(0); + for (int i = 0; i < headers.length; i++) { + XSSFCell cell = row.createCell(i); + XSSFRichTextString text = new XSSFRichTextString(headers[i]); + cell.setCellValue(text); + cell.setCellStyle(cellStyle1); + sheetItems.setColumnWidth(i, 20 * 256); // 设置单元格宽度 + } + // 在excel表中添加添加填写说明 + String explanation = ""; + if (CutEnum.EN.getValue().equals(paramsCollectManifestVO.getCut())) { + explanation = "Filling explanation\n" + + "1.Import data starts at the third line, the first line is the header, the second line is the description, the third line is the example, and the fourth line is the official data\n" + + "2.All fields is filled in according to Validate Component and Component Value\n" + + "3.If the control type is drop-down multi-selection, multiple entries are separated by English or Chinese exclamation points\n" + + "4.Configuration data is filled in according to the control type, and if there are multiple control types, it needs to be separated by \"#\"\n" + + "5.When filling in, start in column G and do not modify information such as NIO number and parameter name\n" + + "6.File fields are file type, must create a folder in the directory of the same level as the file with the name of the nio number and place the file in the folder. Assume that the file is saved in the A number B.pdf,Should fill in A/B.pdf\n" + + "7.When importing into the system, you need to put the Excel into a folder, place other attachment files correctly as required, and finally compress the folder into zip format for import\n"; + } else { + explanation = "填写说明\n" + + "1.导入数据从第三行开始,第一行为表头,第二行为填写说明,第三行是示例数据,需要从第四行开始填写\n" + + "2.填写时需按照控件校验和控件备选值进行填写\n" + + "3.控件类型为下拉多选时,填写多个时采用英文或中文感叹号分割\n" + + "4.配置数据按照控件类型进行填写,若存在多种控件类型填写时需要通过“#”隔开\n" + + "5.填写时从G列开始,请勿修改NIO编号和参数名称等信息\n" + + "6.上传附件为文件属性,填写时需要在本文件同级目录下以NIO编号为名称建立文件夹,并在文件夹下放置文件且该文件夹下只能有一层级,假设在NIO.XXXX下放置了B.pdf,则应填写NIO.XXXX/B.pdf\n" + + "7.导入系统时,需要将该Excel放入文件夹内,并按照要求正确放置其他附件文件,最后将文件夹压缩为zip格式进行导入\n"; + } + XSSFRow row2 = sheetItems.createRow(1); + row2.setHeight((short) 2500); + Cell cell2 = row2.createCell(0); + cell2.setCellStyle(cellStyle); + cell2.setCellValue(new XSSFRichTextString(explanation)); + + // 在excel表中添加添加填写示例 + String[] exampleRow = titles[2].split(","); + XSSFRow row3 = sheetItems.createRow(2); + for (int i = 0; i < exampleRow.length; i++) { + XSSFCell cell3 = row3.createCell(i); + XSSFRichTextString text = new XSSFRichTextString(exampleRow[i]); + cell3.setCellValue(text); + cell3.setCellStyle(cellStyle); + sheetItems.setColumnWidth(i, 20 * 256); // 设置单元格宽度 + } + + List allRelevFileList = new ArrayList<>(); + Map fileNowPathMap = new HashMap<>(); + + //放文字内容 + int allRow = 2; + for(int rowNum = 0;rowNum < allParamsInfoList.size(); rowNum++){ + Map exportDto = allParamsInfoList.get(rowNum); + + // 处理文件 + List fileList = (List) exportDto.get("fileList"); + if (CollectionUtil.isNotEmpty(fileList)) { + allRelevFileList.addAll(fileList); + fileList.forEach(file -> { + fileNowPathMap.put(file.getId(), fileNowPath + File.separator + exportDto.get("nio_number")); + }); + + } + + allRow++; + XSSFRow row1 = sheetItems.createRow(allRow); + for(int cellNum = 0; cellNum < fieldList.size(); cellNum++){ + if (ObjectUtils.isNotEmpty(exportDto.get(fieldList.get(cellNum)))) { + row1.createCell(cellNum).setCellValue(exportDto.get(fieldList.get(cellNum)).toString()); + row1.getCell(cellNum).setCellStyle(cellStyle); + + } + } + + } + + //下载关联文件内容 + if (allRelevFileList != null && !allRelevFileList.isEmpty()) { + allRelevFileList = allRelevFileList.stream().distinct().collect(Collectors.toList()); + downLoadFileList(allRelevFileList,fileNowPathMap); + } + + String repFileName = fileName.replaceAll("/","_"); + excelOS = new FileOutputStream(fileNowPath + File.separator + repFileName); + response.setHeader("Content-Disposition", + "attachment; filename=\""+ ReadExcel.encodeFileName(fileOriName+".zip", request) +"\""); + response.setContentType("application/force-download"); + response.flushBuffer(); + os = response.getOutputStream(); + workbook.write(excelOS); + excelOS.flush(); + excelOS.close(); + ZipUtil.zip(fileNowPath,fileNowPath+".zip"); + fis = new FileInputStream(fileNowPath+".zip"); + int len = 0; + while ((len = fis.read()) != -1) { + os.write(len); + } + + } catch (Exception e) { + if (e instanceof JeroBootException){ + throw new JeroBootException(e.getMessage()); + } else { + log.error(e.getMessage(), e); + if (CutEnum.EN.getValue().equals(paramsCollectManifestVO.getCut())) { + throw new JeroBootException("Failed to download file, please try again"); + } else { + throw new JeroBootException("下载文件失败,请重试"); + } + + } + } finally { + IOUtils.closeQuietly(os); + IOUtils.closeQuietly(fis); + try { + if (workbook != null) { + workbook.close(); + } + } catch (IOException e) { + log.error("发生异常,异常信息为:"+e.getMessage(), e); + } + } + } + + @Override + public Result importDre(MultipartFile file, String cut, String paramsManifestId) throws IOException { + //验证文件名是否合格 + /* 截取后缀名 */ + int pos = file.getOriginalFilename().lastIndexOf("."); + String str = file.getOriginalFilename().substring(pos+1).toLowerCase(); + String filenameorg = file.getOriginalFilename().substring(0,pos); + String resultMsg = ""; + //判断上传文件必须是zip + if (!str.equals("zip")) { + if(CutEnum.CN.getValue().equals(cut)){ + resultMsg = "请上传zip文件"; + }else{ + resultMsg = "Please upload a zip file"; + } + return Result.error(resultMsg); + } + String path = uploadpath + File.separator + "modal" + File.separator + filenameorg + System.currentTimeMillis(); + File saveDirectory = new File(path); + if(!saveDirectory.isDirectory()){ + saveDirectory.mkdir(); + } + try{ + FileUtils.copyInputStreamToFile(file.getInputStream(), new File(path +File.separator+ file.getOriginalFilename())); + //解压缩 + String zipEntryName = FileUnZip.unZipFiles2(path +File.separator+ file.getOriginalFilename(), path); + // 数据相关处理, + // 1.获取其中的Excel, + List excelfilelist = FileUnZip.readExcelFile(zipEntryName); + if(excelfilelist.size()<1){ + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + if(CutEnum.CN.getValue().equals(cut)){ + resultMsg = "压缩包内没有上传Excel数据"; + }else{ + resultMsg = "In the cabinet did not upload the Excel data"; + } + return Result.error(1, resultMsg); + + } else if (excelfilelist.size()>1) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + if(CutEnum.CN.getValue().equals(cut)){ + resultMsg = "压缩包根目录下仅能存在一个excel为导入数据"; + }else{ + resultMsg = "Only one Excel file can be imported in the compressed package root directory"; + } + return Result.error(1, resultMsg); + } + File excelfile = excelfilelist.get(0); + // 导入参数设置,默认即可 + ImportParams params = new ImportParams(); + try { + // 导入表头 + ParamsCollectManifestVO paramsCollectManifestVO = new ParamsCollectManifestVO(); + paramsCollectManifestVO.setCut(cut); + paramsCollectManifestVO.setParamsManifestId(paramsManifestId); + String titles[] = getWorkbookTitleForExportDre(paramsCollectManifestVO); // 有顺序 + String headers[] = titles[1].split(","); + params.setImportFields(headers); + + List> result = new ArrayList<>(); + List dbfieldList = Arrays.asList(titles[0].split(",")); // 有顺序 + + // 解析excel + result = read(excelfile, dbfieldList, headers, cut); + + //excel读取到的数据 + List> datas = result; + if(datas!=null &&!datas.isEmpty()){ + try { +// int i = 0 ; +// List> datasUpdate = new ArrayList<>(); + //处理空行数据,当读取exceL出现空行过多时,空行数为20以上时中断读取,将数据清洗为新的list +// for(Map importDto :datas){ +// if(i>20){ +// break; +// } +// //判断此行数据是否全部为空 +// if(checkObjAllFieldsIsNull(importDto)){ +// i++; +// //是则不读取 +// continue; +// } +// i = 0; +// datasUpdate.add(importDto); +// } + String unzipfilepath = zipEntryName; + Result message = importData(datas,unzipfilepath,cut,paramsManifestId); + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + return message; + } catch (NullPointerException e) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + if(CutEnum.CN.getValue().equals(cut)){ + resultMsg = "读取失败,请严格按照模板文件导入数据"; + }else{ + resultMsg = "The data fails to be read. Import data strictly according to the template file"; + } + return Result.error(1, resultMsg); + } catch (Exception e) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + return Result.error(e.getMessage()); + } + }else{ + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + if(CutEnum.CN.getValue().equals(cut)){ + resultMsg = "没有可导入的数据,请检查!"; + }else{ + resultMsg = "No data to import, please check"; + } + return Result.error(1, resultMsg); + } + } catch (NoSuchElementException e){ + FileUnZip.deleteDir(saveDirectory); + if(CutEnum.CN.getValue().equals(cut)){ + resultMsg = "没有可导入的数据,请检查!"; + }else{ + resultMsg = "No data to import, please check"; + } + return Result.error(1, resultMsg); + } catch (JeroBootException e){ + FileUnZip.deleteDir(saveDirectory); + return Result.error(1, e.getMessage()); + } catch (Exception e) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + if(CutEnum.CN.getValue().equals(cut)){ + resultMsg = "读取失败,请严格按照模板文件导入数据"; + }else{ + resultMsg = "The data fails to be read. Import data strictly according to the template file"; + } + return Result.error(1, resultMsg); + } + } catch (Exception e) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + if(CutEnum.CN.getValue().equals(cut)){ + resultMsg = "读取失败,请严格按照模板文件导入数据"; + }else{ + resultMsg = "The data fails to be read. Import data strictly according to the template file"; + } + return Result.error(1, resultMsg); + } + } + + @Override + public Result importData(List> dataList, + String unzipfilepath, + String cut, + String paramsManifestId) throws IOException { + //验证导入数据是否符合规则 + Map map = validateImportDatas(dataList,unzipfilepath,cut,paramsManifestId); + boolean isOk = (boolean) map.get("result"); + if (!isOk) { + //验证没有通过 + String message = (String) map.get("message"); + return Result.error(message); + } + //将导入数据循环合并整理后 新增至相应表 + List configDataList = (List) map.get("configDataList"); + List> notImportNioNumberList = (List>) map.get("notImportNioNumberList"); + + for (ParamsConfigDataEO importDto : configDataList) { + //判断此行数据是否全部为空,是则不读取 + if (checkObjAllFieldsIsNull(importDto)) { + continue; + } + // 处理文件 + if (StringUtils.isNotBlank(importDto.getFileConnectId())) { // 判空,否则报空指针异常 + List nowFileList = FileUnZip.readFileByFilename(unzipfilepath, importDto.getFileConnectId(), null, null, null, null, null); + + FileInputStream input = new FileInputStream(nowFileList.get(0)); + MultipartFile multipartFile = + new MockMultipartFile(nowFileList.get(0).getName(), nowFileList.get(0).getName(), "text/plain", input); + //文件存入文件表 + OSSFile ossFile = ossFileService.uploadLocalOfCos(multipartFile, "", null, null); + if (ObjectUtils.isNotEmpty(ossFile)) { + String connectId = UUID.randomUUID().toString().replace("-", ""); + OSSFile ossFileUpdate = new OSSFile(); + ossFileUpdate.setId(ossFile.getId()); + ossFileUpdate.setConnectId(connectId); + ossFileService.updateById(ossFileUpdate); + + importDto.setFileConnectId(connectId); + } + } + + // 处理下拉值 + if (StringUtils.isNotEmpty(importDto.getPullData())) { + String newPullData = importDto.getPullData().replaceAll("!", "!").replaceAll("!", ","); + importDto.setPullData(newPullData); + } + } + + // 批量新增参数项 + Boolean isSuccess = paramsConfigDataEOService.saveOrUpdateBatch(configDataList); + + String msg = ""; + if (isSuccess) { + if (CollectionUtil.isNotEmpty(notImportNioNumberList)) { + List msgList = getMsgOfIssueCollection(notImportNioNumberList, cut, "3"); + return Result.OK(null, msgList); + + } else { + int countSuccess = configDataList.size(); + if (CutEnum.CN.getValue().equals(cut)) { + msg = "成功导入" + countSuccess + "条"; + } else { + msg = "import " + countSuccess + " datas successfully"; + } + return Result.OK(msg, null); + } + } else { + if (CutEnum.CN.getValue().equals(cut)) { + msg = "导入失败"; + } else { + msg = "import failed"; + } + return Result.error(1, msg); + } + } + @Override public List updateBatchDutyTerritory(ParamsCollectManifestVO paramsCollectManifestVO) { if (StringUtils.isEmpty(paramsCollectManifestVO.getIds()) @@ -2453,6 +2993,96 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl fieldList = onlCgformFieldService.getFieldList(ModuleEnum.PARAMS_COLLECT_MANIFEST.getValue()); + + List dbFieldNameList = new LinkedList<>(); + List dbFieldList = new LinkedList<>(); + List dbFieldExampleList = new LinkedList<>(); + + // 固定列 + for (int i = 0; i < fieldList.size(); i++) { + OnlCgformField onlCgformField = fieldList.get(i); + String dbFieldName = onlCgformField.getDbFieldName(); + if ("nio_number".equals(dbFieldName) || "params_name".equals(dbFieldName) || "description".equals(dbFieldName) + || "control_type".equals(dbFieldName) || "control_verify".equals(dbFieldName) || "control_values".equals(dbFieldName) + || "is_must".equals(dbFieldName)) { + dbFieldList.add(dbFieldName); + + if(CutEnum.CN.getValue().equals(cut)){ + dbFieldNameList.add(onlCgformField.getDbFieldTxt()); // 字段中文名 + if("nio_number".equals(dbFieldName)) { + dbFieldExampleList.add("例NIO.XXXX"); + } else if("params_name".equals(dbFieldName) || "description".equals(dbFieldName)) { + dbFieldExampleList.add("XXXXX"); + + } else if("control_verify".equals(dbFieldName)) { + dbFieldExampleList.add("数据来源于参数模版管理中控件校验数据"); + + } else if("control_values".equals(dbFieldName)) { + dbFieldExampleList.add("数据来源于参数模版管理中控件备选值数据"); + + } else if("is_must".equals(dbFieldName)) { + dbFieldExampleList.add("是/否"); + + } else { + dbFieldExampleList.add("下拉多选+文本"); + } + }else{ + dbFieldNameList.add(onlCgformField.getDbFieldEnName()); // 字段英文名 + if("nio_number".equals(dbFieldName)) { + dbFieldExampleList.add("Example:NIO.XXXX"); + } else if("params_name".equals(dbFieldName) || "description".equals(dbFieldName)) { + dbFieldExampleList.add("XXXXX"); + + } else if("control_verify".equals(dbFieldName)) { + dbFieldExampleList.add("The data comes from Validate Component in the parameter template management"); + + } else if("control_values".equals(dbFieldName)) { + dbFieldExampleList.add("The data comes from Component Value in the parameter template management"); + + } else if("is_must".equals(dbFieldName)) { + dbFieldExampleList.add("Yes/No"); + + } else { + dbFieldExampleList.add("Pull more+File"); + } + } + + + } + } + + // 配置列 + List dbFieldNameListConfig = new LinkedList<>(); + List dbFieldListConfig = new LinkedList<>(); + List paramsConfigEOList = paramsConfigEOService.queryList(paramsManifestId); + for (ParamsConfigEO paramsConfigEO : paramsConfigEOList) { + if (ConfigLockEnum.NO.getValue().equals(paramsConfigEO.getIsLock())) { // 只导出未冻结的配置列 + dbFieldListConfig.add(paramsConfigEO.getId()); + dbFieldNameListConfig.add(paramsConfigEO.getConfigName()); + dbFieldExampleList.add("XX!XX!XX#XXXXX"); + } + } + + // 插入配置列 + dbFieldList.addAll(dbFieldListConfig); + dbFieldNameList.addAll(dbFieldNameListConfig); + + String[] title = new String[3]; + String dbFieldStr = StringUtils.join(dbFieldList, ","); + String dbFieldNameStr = StringUtils.join(dbFieldNameList, ","); + String dbFieldExampleStr = StringUtils.join(dbFieldExampleList, ","); + + title[0] = dbFieldStr; + title[1] = dbFieldNameStr; + title[2] = dbFieldExampleStr; + return title; + } + private List> queryForExportAll(ParamsCollectManifestVO paramsCollectManifestVO) { String paramsManifestId = paramsCollectManifestVO.getParamsManifestId(); String paramsTemplateId = paramsCollectManifestVO.getParamsTemplateId(); @@ -2470,7 +3100,7 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl> dataList = paramsCollectManifestEOMapper.listInfoForExport(queryEO); // 查询导出数据 + List> dataList = paramsCollectManifestEOMapper.listInfoForExport(queryEO, null); // 查询导出数据 if (dataList == null || dataList.isEmpty()){ // 没有查到数据,进行提示 if (CutEnum.EN.getValue().equals(paramsCollectManifestVO.getCut())) { @@ -2563,6 +3193,112 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl> queryForExportDre(ParamsCollectManifestVO paramsCollectManifestVO, HttpServletRequest req) { + String paramsManifestId = paramsCollectManifestVO.getParamsManifestId(); + String cut = paramsCollectManifestVO.getCut(); + List idList = new ArrayList<>(); + if (StringUtils.isNotBlank(paramsCollectManifestVO.getIds())) { + idList = Arrays.asList(paramsCollectManifestVO.getIds().split(",")); + } + List stateList = new ArrayList(){{ + add(CollectManifestStateEnum.WAIT_FILL.getValue()); + add(CollectManifestStateEnum.CERT_BACK.getValue()); + }}; + + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + ParamsCollectManifestEO paramsCollectManifestEO = new ParamsCollectManifestEO(); + BeanUtils.copyProperties(paramsCollectManifestVO, paramsCollectManifestEO); + paramsCollectManifestEO.setParamsManifestId(null); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(paramsCollectManifestEO, req.getParameterMap()); + queryWrapper.lambda().eq(ParamsCollectManifestEO::getParamsManifestId, paramsManifestId) + .eq(ParamsCollectManifestEO::getDre, loginUser.getUsername()) + .in(ParamsCollectManifestEO::getState, stateList) + .notIn(ParamsCollectManifestEO::getControlType, ControlTypeEnum.Title.getValue()) + .orderByDesc(ParamsCollectManifestEO::getDelFlag) + .orderByDesc(ParamsCollectManifestEO::getAddFlag) + .orderByDesc(ParamsCollectManifestEO::getChangeFlag) + .orderByAsc(ParamsCollectManifestEO::getNioNumber) + .in(CollectionUtil.isNotEmpty(idList), ParamsCollectManifestEO::getId, idList); + + List dataList = list(queryWrapper); // 查询导出数据 + if (dataList == null || dataList.isEmpty()){ + // 没有查到数据,进行提示 + if (CutEnum.EN.getValue().equals(paramsCollectManifestVO.getCut())) { + throw new JeroBootException("No data, unable to export"); + } else { + throw new JeroBootException("无数据,无法导出"); + } + } + + List paramsConfigEOList = paramsConfigEOService.queryList(paramsManifestId); // 查询所有配置列 + + List paramsConfigIdList = paramsConfigEOList.stream().map(ParamsConfigEO::getId).collect(Collectors.toList()); + List paramsConfigDataEOList = paramsConfigDataEOService.queryListByConfigIdList(paramsConfigIdList); // 查询所有配置数据 + + Map isMustMap = ParamsIsMustEnum.toMapForExport(cut); + Map controlVerifyMap = ControlVerifyEnum.toMapForExport(cut); + Map controlTypeMap = ControlTypeEnum.toMapForExport(cut); + // 插入配置列和认证类别列数据 + List> result = new ArrayList<>(); + for (ParamsCollectManifestEO collectManifestEO: dataList) { + Map record1 = objectToMapDre(collectManifestEO); + String controlType = (String) record1.get("control_type"); + String controlVerify = (String) record1.get("control_verify"); + String isMust = (String) record1.get("is_must"); + String paramsCollectManifestId = (String) record1.get("id"); + String nioNumber = (String) record1.get("nio_number"); + + record1.put("is_must", isMustMap.get(isMust)); + record1.put("control_type", controlTypeMap.get(controlType)); + record1.put("control_verify", controlVerifyMap.get(controlVerify)); + + // 配置列 + if (CollectionUtil.isNotEmpty(paramsConfigEOList)) { + List fileList = new ArrayList<>(); + + paramsConfigEOList.forEach(paramsConfigEO -> { // 参数配置 + + String paramsConfigId = paramsConfigEO.getId(); + List paramsConfigDataEOS = paramsConfigDataEOList.stream().filter(e-> paramsConfigId.equals(e.getParamsConfigId()) && paramsCollectManifestId.equals(e.getParamsCollectManifestId())).collect(Collectors.toList()); // 参数配置数据 + StringBuilder configDataBuilder = new StringBuilder(); // 重新组合配置数据 + if (CollectionUtil.isNotEmpty(paramsConfigDataEOS)) { + ParamsConfigDataEO paramsConfigDataEO = paramsConfigDataEOS.get(0); + if (StringUtils.isNotEmpty(paramsConfigDataEO.getTextData())) { + configDataBuilder.append(paramsConfigDataEO.getTextData()).append("#"); + } + if (StringUtils.isNotEmpty(paramsConfigDataEO.getPullData())) { + configDataBuilder.append(paramsConfigDataEO.getPullData().replaceAll(",", "!")).append("#"); + } + if (StringUtils.isNotEmpty(paramsConfigDataEO.getFileConnectId())) { + List ossFileList = ossFileService.getFileInfosByConnectId(paramsConfigDataEO.getFileConnectId()); + if (CollectionUtil.isNotEmpty(ossFileList)) { + configDataBuilder.append(nioNumber).append("/").append(ossFileList.get(0).getFileName()).append("#"); + + fileList.addAll(ossFileList); + } + } + + } + + String configData = configDataBuilder.toString(); + if (configData.contains("#")) { + configData = configData.substring(0, configData.lastIndexOf("#")); + } + + record1.put(paramsConfigEO.getId(), configData); + }); + + record1.put("fileList", fileList); + } + + + result.add(record1); + } + return result; + } + private void downLoadFileList(List fileTemplateList,Map fileNowPathMap) { for(OSSFile fileExportDto : fileTemplateList){ String fileNowPath = fileNowPathMap.get(fileExportDto.getId()); @@ -2678,6 +3414,80 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl objectToMapDre(Object obj) { + + Map map = new HashMap<>(); + // 获取f对象对应类中的所有属性域 + List list = findAllFieldsOfSelfAndSuperClass(obj.getClass()); + for (Field field : list) { + + String varName = field.getName(); + try { + // 获取原来的访问控制权限 + boolean accessFlag = field.isAccessible(); + // 修改访问控制权限 + field.setAccessible(true); + // 获取在对象f中属性fields[i]对应的对象中的变量 + Object o = field.get(obj); + if (o != null) { + if (Date.class.equals(field.getType())) { + Date date = (Date) o; + String pattern = ""; + if ("deadline".equals(varName) || "reportTime".equals(varName)) { + pattern = "yyyy-MM-dd"; + } else { + pattern = "yyyy-MM-dd HH:mm:ss"; + } + SimpleDateFormat formatter=new SimpleDateFormat(pattern); + String time=formatter.format(date); + map.put(toUnderlineCase(varName), time); + } else { + map.put(toUnderlineCase(varName), o); + } + } + // 恢复访问控制权限 + field.setAccessible(accessFlag); + } catch (IllegalArgumentException ex) { + ex.printStackTrace(); + } catch (IllegalAccessException ex) { + ex.printStackTrace(); + } + } + return map; + + } + + /** + * 驼峰转 转 下划线 + * userName ----> user_name + * user_name ----> user_name + * + * @param camelCaseStr 驼峰字符串 + * @return 带下滑线的String + */ + private String toUnderlineCase(String camelCaseStr) { + if (camelCaseStr == null) { + return null; + } + // 将驼峰字符串转换成数组 + char[] charArray = camelCaseStr.toCharArray(); + StringBuffer buffer = new StringBuffer(); + //处理字符串 + for (int i = 0, l = charArray.length; i < l; i++) { + if (charArray[i] >= 65 && charArray[i] <= 90) { + buffer.append("_").append(charArray[i] += 32); + } else { + buffer.append(charArray[i]); + } + } + return buffer.toString(); + } + /** * 通过实体类获取 URL Params * @@ -2731,6 +3541,682 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl> read(File file, List dbfieldList, String[] titles, String cut) throws Exception { + + //最终返回数据 + List> list = new ArrayList<>(); + + Workbook workbook = null; + InputStream is = new FileInputStream(file); + String name = file.getName().toLowerCase(); + // 创建excel操作对象 + if (name.contains(".xlsx")) { + workbook = WorkbookFactory.create(is); + } else { + if(CutEnum.CN.getValue().equals(cut)){ + throw new JeroBootException("请导入正确模板!"); + } else { + throw new JeroBootException("Please import the correct template"); + } + } + //得到一个工作表 + Sheet sheet = workbook.getSheetAt(0); + + //获得数据的总行数 + int totalRowNum = sheet.getLastRowNum(); + + //获得总列数 + int cellLength = sheet.getRow(0).getPhysicalNumberOfCells(); + // 验证模板表头是否正确 + Row rowTitle = sheet.getRow(0); + for (int i = 0; i < cellLength; i++) { + if (rowTitle != null) { + Cell cell = rowTitle.getCell(i); + if(ObjectUtil.isNotNull(cell)){ + //设置单元格类型 + cell.setCellType(CellType.STRING); + String cellValue = cell.getStringCellValue().substring(cell.getStringCellValue().indexOf("*")+1); + if(!cellValue.equals(titles[i])){ + if(CutEnum.CN.getValue().equals(cut)){ + throw new JeroBootException("请导入正确模板!"); + } else { + throw new JeroBootException("Please import the correct template"); + } + } + } else{ + if(CutEnum.CN.getValue().equals(cut)){ + throw new JeroBootException("请导入正确模板!"); + } else { + throw new JeroBootException("Please import the correct template"); + } + } + }else{ + if(CutEnum.CN.getValue().equals(cut)){ + throw new JeroBootException("请导入正确模板!"); + } else { + throw new JeroBootException("Please import the correct template"); + } + } + } + Row rowDescription= sheet.getRow(1); + if (rowDescription != null) { + Cell cell = rowDescription.getCell(0); + if(ObjectUtil.isNotNull(cell)){ + //设置单元格类型 + cell.setCellType(CellType.STRING); + String cellValue = cell.getStringCellValue(); + if(!cellValue.startsWith("填写说明") && !cellValue.startsWith("Filling explanation")){ + if(CutEnum.CN.getValue().equals(cut)){ + throw new JeroBootException("请导入正确模板!"); + } else { + throw new JeroBootException("Please import the correct template"); + } + } + } else{ + if(CutEnum.CN.getValue().equals(cut)){ + throw new JeroBootException("请导入正确模板!"); + } else { + throw new JeroBootException("Please import the correct template"); + } + } + }else{ + if(CutEnum.CN.getValue().equals(cut)){ + throw new JeroBootException("请导入正确模板!"); + } else { + throw new JeroBootException("Please import the correct template"); + } + } + Row rowExample= sheet.getRow(2); + if (rowExample != null) { + Cell cell = rowExample.getCell(0); + if(ObjectUtil.isNotNull(cell)){ + //设置单元格类型 + cell.setCellType(CellType.STRING); + String cellValue = cell.getStringCellValue(); + if(!cellValue.startsWith("例") && !cellValue.startsWith("Example")){ + if(CutEnum.CN.getValue().equals(cut)){ + throw new JeroBootException("请导入正确模板!"); + } else { + throw new JeroBootException("Please import the correct template"); + } + } + } else{ + if(CutEnum.CN.getValue().equals(cut)){ + throw new JeroBootException("请导入正确模板!"); + } else { + throw new JeroBootException("Please import the correct template"); + } + } + }else{ + if(CutEnum.CN.getValue().equals(cut)){ + throw new JeroBootException("请导入正确模板!"); + } else { + throw new JeroBootException("Please import the correct template"); + } + } + + Map map = null; + //获得所有数据 + //从第4行开始获取,第一行是表头,第二行是填写说明, 第三行是填写示例 + for (int x = 3; x <= totalRowNum; x++) { + map = new LinkedHashMap(); + //获得第i行对象 + Row row= sheet.getRow(x); + //如果一行里的所有单元格都为空则不放进list里面 + int a = 0; + for (int y = 0; y < cellLength; y++) { + if (!(row == null)) { + Cell cell = row.getCell(y); // cell 为空时会抛空指针异常 + if(ObjectUtil.isNull(cell)) { + map.put(dbfieldList.get(y), ""); + } else { + + cell.setCellType(CellType.STRING); //设置单元格类型 + String cellValue = cell.getStringCellValue(); + map.put(dbfieldList.get(y), cellValue); + } + if (map.get(dbfieldList.get(y)) == null || "".equals(map.get(dbfieldList.get(y)))) { + a++; + } + } + } + // 当前行所有单元格均不为空时 +// if (a != cellLength && row != null) { + list.add(map); +// } + } + return list; + } + + private Map validateImportDatas(List> dataList, + String unzipfilepath, + String cut, + String paramsManifestId) { + // 查询清单的配置列信息 + List paramsConfigEOList = paramsConfigEOService.queryList(paramsManifestId); + Map configMap = paramsConfigEOList.stream().collect(Collectors.toMap(ParamsConfigEO::getId, ParamsConfigEO::getConfigName)); + // 查询清单参数项 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ParamsCollectManifestEO::getParamsManifestId, paramsManifestId); + List paramsCollectManifestEOList = paramsCollectManifestEOMapper.selectList(queryWrapper); + Map collectManifestMap = paramsCollectManifestEOList.stream().collect(Collectors.toMap(ParamsCollectManifestEO::getNioNumber, ParamsCollectManifestEO::getId)); + // 查询清单的配置数据 + List configIdList = paramsConfigEOList.stream().map(ParamsConfigEO::getId).collect(Collectors.toList()); + List paramsConfigDataEOList = paramsConfigDataEOService.queryListByConfigIdList(configIdList); + + //存放数据验证结果信息 + List configDataList = new ArrayList<>(); + List verifyNioNumber = new ArrayList<>(); + List> notImportNioNumberList = new ArrayList<>(); + List stringMessage = new ArrayList<>(); + int i = 3; //记录行号 + //循环验证数据 + for (Map dto : dataList) { + i++; + int countError = 0; //记录失败数据数量 + String errorMsg = ""; + if (CutEnum.CN.getValue().equals(cut)) { + errorMsg = "第" + i + "行:"; + } else { + errorMsg = i + " line:"; + } + + Map resultMap = new HashMap<>(); + String nioNumber = (String) dto.get("nio_number"); + if (StringUtils.isBlank(nioNumber)) { + continue; + } + + List listPCM = paramsCollectManifestEOList.stream().filter(e-> nioNumber.equals(e.getNioNumber())).collect(Collectors.toList()); + if (CollectionUtil.isEmpty(listPCM)) { + if (CutEnum.EN.getValue().equals(cut)) { + errorMsg += "NIO Number can not find; "; + } else{ + errorMsg += "NIO编号不存在;"; + } + countError++; + stringMessage.add(errorMsg); + continue; + } + + if (!verifyNioNumber.contains(nioNumber)) { + verifyNioNumber.add(nioNumber); + } else{ + if (CutEnum.EN.getValue().equals(cut)) { + errorMsg += "NIO Number is repeat; "; + } else{ + errorMsg += "NIO编号重复;"; + } + countError ++; + stringMessage.add(errorMsg); + continue; + } + + ParamsCollectManifestEO paramsCollectManifestEO = listPCM.get(0); + String state = paramsCollectManifestEO.getState(); + if (!CollectManifestStateEnum.WAIT_FILL.getValue().equals(state) && !CollectManifestStateEnum.CERT_BACK.getValue().equals(state)) { + Map msgMap = new HashMap<>(); + msgMap.put("nioNumber", nioNumber); + msgMap.put("state", state); + msgMap.put("type", "3"); + notImportNioNumberList.add(msgMap); + continue; + } + + String controlType = paramsCollectManifestEO.getControlType(); + String controlVerify = paramsCollectManifestEO.getControlVerify(); + String controlValues = paramsCollectManifestEO.getControlValues(); + String isMust = paramsCollectManifestEO.getIsMust(); + for (Map.Entry entry : dto.entrySet()) { + String key = entry.getKey(); + String value = (String) entry.getValue(); + + if ("nio_number".equals(key) || "params_name".equals(key) || "description".equals(key) + || "control_type".equals(key) || "control_verify".equals(key) || "control_values".equals(key) + || "is_must".equals(key)) { + continue; + } + // + ParamsConfigDataEO configDataEO = new ParamsConfigDataEO(); + List list = paramsConfigDataEOList.stream().filter(e-> collectManifestMap.get(nioNumber).equals(e.getParamsCollectManifestId()) + && key.equals(e.getParamsConfigId())).collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(list)) { + configDataEO.setId(list.get(0).getId()); + } + configDataEO.setParamsCollectManifestId(collectManifestMap.get(nioNumber)); + configDataEO.setParamsConfigId(key); + + + // 校验配置列 + if (ControlTypeEnum.TEXT.getValue().equals(controlType)) { + resultMap = validateText(configMap.get(key), controlVerify, value, isMust, "1000", cut); + errorMsg += (String)resultMap.get("errorMsg"); + countError += (int)resultMap.get("countError"); + + configDataEO.setTextData(value); + + } else if (ControlTypeEnum.PULL_SINGLE.getValue().equals(controlType)) { + resultMap = validatePull(configMap.get(key), controlValues, value, isMust, true, cut); + errorMsg += (String)resultMap.get("errorMsg"); + countError += (int)resultMap.get("countError"); + + configDataEO.setPullData(value); + + } else if (ControlTypeEnum.PULL_MORE.getValue().equals(controlType)) { + resultMap = validatePull(configMap.get(key), controlValues, value, isMust, false, cut); + errorMsg += (String)resultMap.get("errorMsg"); + countError += (int)resultMap.get("countError"); + + configDataEO.setPullData(value); + + } else if (ControlTypeEnum.FILE.getValue().equals(controlType)) { + resultMap = validateFile(configMap.get(key), unzipfilepath, value, isMust , cut); + errorMsg += (String)resultMap.get("errorMsg"); + countError += (int)resultMap.get("countError"); + + configDataEO.setFileConnectId(value); + + } else if (ControlTypeEnum.TEXT_PULL_SINGLE.getValue().equals(controlType)) { + // 校验必填 + if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) { + if(CutEnum.CN.getValue().equals(cut)) { + errorMsg += configMap.get(key) + "为必填项,不能为空;"; + } else { + errorMsg += configMap.get(key) + " is mandatory and cannot be empty; "; + } + countError++; + } else { + if (value.split("#").length > 1) { + resultMap = validatePull(configMap.get(key), controlValues, value.split("#")[1], isMust, true, cut); + errorMsg += (String) resultMap.get("errorMsg"); + countError += (int) resultMap.get("countError"); + configDataEO.setPullData(value.split("#")[1]); + + resultMap = validateText(configMap.get(key), controlVerify, value.split("#")[0], ParamsIsMustEnum.NO.getValue(), "1000", cut); + errorMsg += (String) resultMap.get("errorMsg"); + countError += (int) resultMap.get("countError"); + configDataEO.setTextData(value.split("#")[0]); + + } else { + resultMap = validatePull(configMap.get(key), controlValues, value.split("#")[0], isMust, true, cut); + errorMsg += (String) resultMap.get("errorMsg"); + countError += (int) resultMap.get("countError"); + configDataEO.setPullData(value.split("#")[0]); + } + } + + } else if (ControlTypeEnum.TEXT_PULL_MORE.getValue().equals(controlType)) { + // 校验必填 + if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) { + if(CutEnum.CN.getValue().equals(cut)) { + errorMsg += configMap.get(key) + "为必填项,不能为空;"; + } else { + errorMsg += configMap.get(key) + " is mandatory and cannot be empty; "; + } + countError++; + } else { + if (value.split("#").length > 1) { + resultMap = validatePull(configMap.get(key), controlValues, value.split("#")[1], isMust, false, cut); + errorMsg += (String) resultMap.get("errorMsg"); + countError += (int) resultMap.get("countError"); + configDataEO.setPullData(value.split("#")[1]); + + resultMap = validateText(configMap.get(key), controlVerify, value.split("#")[0], ParamsIsMustEnum.NO.getValue(), "1000", cut); + errorMsg += (String) resultMap.get("errorMsg"); + countError += (int) resultMap.get("countError"); + configDataEO.setTextData(value.split("#")[0]); + } else { + resultMap = validatePull(configMap.get(key), controlValues, value.split("#")[0], isMust, false, cut); + errorMsg += (String) resultMap.get("errorMsg"); + countError += (int) resultMap.get("countError"); + configDataEO.setPullData(value.split("#")[0]); + } + } + + } else if (ControlTypeEnum.TEXT_FILE.getValue().equals(controlType)) { + // 校验必填 + if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) { + if(CutEnum.CN.getValue().equals(cut)) { + errorMsg += configMap.get(key) + "为必填项,不能为空;"; + } else { + errorMsg += configMap.get(key) + " is mandatory and cannot be empty; "; + } + countError++; + } else { + resultMap = validateText(configMap.get(key), controlVerify, value.split("#")[0], isMust, "1000", cut); + errorMsg += (String) resultMap.get("errorMsg"); + countError += (int) resultMap.get("countError"); + configDataEO.setTextData(value.split("#")[0]); + + if (value.split("#").length > 1) { + resultMap = validateFile(configMap.get(key), unzipfilepath, value.split("#")[1], ParamsIsMustEnum.NO.getValue(), cut); + errorMsg += (String) resultMap.get("errorMsg"); + countError += (int) resultMap.get("countError"); + configDataEO.setFileConnectId(value.split("#")[1]); + } + } + + } else if (ControlTypeEnum.PULL_SINGLE_FILE.getValue().equals(controlType)) { + // 校验必填 + if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) { + if(CutEnum.CN.getValue().equals(cut)) { + errorMsg += configMap.get(key) + "为必填项,不能为空;"; + } else { + errorMsg += configMap.get(key) + " is mandatory and cannot be empty; "; + } + countError++; + } else { + resultMap = validatePull(configMap.get(key), controlValues, value.split("#")[0], isMust, true, cut); + errorMsg += (String) resultMap.get("errorMsg"); + countError += (int) resultMap.get("countError"); + configDataEO.setPullData(value.split("#")[0]); + + if (value.split("#").length > 1) { + resultMap = validateFile(configMap.get(key), unzipfilepath, value.split("#")[1], ParamsIsMustEnum.NO.getValue(), cut); + errorMsg += (String) resultMap.get("errorMsg"); + countError += (int) resultMap.get("countError"); + configDataEO.setFileConnectId(value.split("#")[1]); + } + } + + } else if (ControlTypeEnum.PULL_MORE_FILE.getValue().equals(controlType)) { + // 校验必填 + if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) { + if(CutEnum.CN.getValue().equals(cut)) { + errorMsg += configMap.get(key) + "为必填项,不能为空;"; + } else { + errorMsg += configMap.get(key) + " is mandatory and cannot be empty; "; + } + countError++; + } else { + resultMap = validatePull(configMap.get(key), controlValues, value.split("#")[0], isMust, false, cut); + errorMsg += (String) resultMap.get("errorMsg"); + countError += (int) resultMap.get("countError"); + configDataEO.setPullData(value.split("#")[0]); + + if (value.split("#").length > 1) { + resultMap = validateFile(configMap.get(key), unzipfilepath, value.split("#")[1], ParamsIsMustEnum.NO.getValue(), cut); + errorMsg += (String) resultMap.get("errorMsg"); + countError += (int) resultMap.get("countError"); + configDataEO.setFileConnectId(value.split("#")[1]); + } + } + + } else if (ControlTypeEnum.TEXT_PULL_SINGLE_FILE.getValue().equals(controlType)) { + // 校验必填 + if (ParamsIsMustEnum.YES.getValue().equals(isMust) && StringUtils.isEmpty(value)) { + if(CutEnum.CN.getValue().equals(cut)) { + errorMsg += configMap.get(key) + "为必填项,不能为空;"; + } else { + errorMsg += configMap.get(key) + " is mandatory and cannot be empty; "; + } + countError++; + } else { + if (value.split("#").length > 1) { + resultMap = validatePull(configMap.get(key), controlValues, value.split("#")[1], isMust, true, cut); + errorMsg += (String) resultMap.get("errorMsg"); + countError += (int) resultMap.get("countError"); + configDataEO.setPullData(value.split("#")[1]); + + resultMap = validateText(configMap.get(key), controlVerify, value.split("#")[0], ParamsIsMustEnum.NO.getValue(), "1000", cut); + errorMsg += (String) resultMap.get("errorMsg"); + countError += (int) resultMap.get("countError"); + configDataEO.setTextData(value.split("#")[0]); + + if (value.split("#").length > 2) { + resultMap = validateFile(configMap.get(key), unzipfilepath, value.split("#")[2], ParamsIsMustEnum.NO.getValue(), cut); + errorMsg += (String) resultMap.get("errorMsg"); + countError += (int) resultMap.get("countError"); + configDataEO.setFileConnectId(value.split("#")[2]); + } + } else { + resultMap = validatePull(configMap.get(key), controlValues, value.split("#")[0], isMust, false, cut); + errorMsg += (String) resultMap.get("errorMsg"); + countError += (int) resultMap.get("countError"); + configDataEO.setPullData(value.split("#")[0]); + } + + } + + } else { + + if (CutEnum.EN.getValue().equals(cut)) { + errorMsg += configMap.get(key) + "did not match the Control Component in the system; "; + countError ++; + } else { + errorMsg += configMap.get(key) + "未匹配到系统中的控件类型"; + countError ++; + } + } + configDataList.add(configDataEO); + } + + if (countError > 0) { + stringMessage.add(errorMsg); + } + + } + Map map = new HashMap(); + if (stringMessage.isEmpty()) { + map.put("result", true); + map.put("configDataList", configDataList); + map.put("notImportNioNumberList", notImportNioNumberList); + map.put("message", ""); + } else { + map.put("result", false); + String html = ""; + for (String message : stringMessage) { + html += message + "
"; + } + map.put("message", html); + } + return map; + + } + + private Map validateFile(String configName, String unzipfilepath, String value, String mustInput, String cut) { + String errorMsg = ""; + int countError= 0; + Map resultMap = new HashMap<>(); + + // 校验必填 + if (IsMustEnum.YES.getValue().equals(mustInput) && StringUtils.isEmpty(value)) { + if(CutEnum.CN.getValue().equals(cut)) { + errorMsg += configName + "为必填项,不能为空;"; + } else { + errorMsg += configName + " is mandatory and cannot be empty; "; + } + countError++; + } + + String fileName = value; + if (StringUtils.isNotBlank(fileName)) { + fileName = fileName.replace(",", ","); + if (fileName.contains(",")) { + if (CutEnum.CN.getValue().equals(cut)) { + errorMsg += "附件模板只能上传一个文件;"; + } else { + errorMsg += "File template only can upload one; "; + } + } + List nowFileList = FileUnZip.readFileByFilename(unzipfilepath, fileName, null, null, null, null, null); +// List nowFileList = FileUnZip.readFileByFilename(filepath, fileName); + if (nowFileList.size() == 0) { + if (CutEnum.CN.getValue().equals(cut)) { + errorMsg += "附件模板压缩包中没有" + fileName + "文件; "; + } else { + errorMsg += "File template " + fileName + "isn't present in the cabinet; "; + } + countError++; + } + } + + resultMap.put("errorMsg", errorMsg); + resultMap.put("countError", countError); + return resultMap; + } + + private Map validatePull(String configName, String controlValues, String value, String mustInput, Boolean isSingle, String cut) { + String errorMsg = ""; + int countError= 0; + List controlValueList = Arrays.asList(controlValues.replaceAll(",", ",").split(",")); + Map resultMap = new HashMap<>(); +// StringBuilder newValue = new StringBuilder(); + + // 校验必填 + if (IsMustEnum.YES.getValue().equals(mustInput) && StringUtils.isEmpty(value)) { + if(CutEnum.CN.getValue().equals(cut)) { + errorMsg += configName + "为必填项,不能为空;"; + } else { + errorMsg += configName + " is mandatory and cannot be empty; "; + } + countError++; + } + + if (StringUtils.isNotEmpty(value)) { + //判断是否是单选 + if (isSingle) { + if (StringUtils.isNotBlank(value) && (value.contains("!") ||value.contains("!"))) { + if (CutEnum.CN.getValue().equals(cut)) { + errorMsg += configName + "为单选项;"; + } else { + errorMsg += configName + " is single type; "; + } + countError++; + } else { + // 判断是否符合备选值 + if (!controlValueList.contains(value)) { + if (CutEnum.CN.getValue().equals(cut)) { + errorMsg += configName + "下拉单选中的" + value + "不正确;"; + } else { + errorMsg += configName + " " + value + " is not correct; "; + } + countError++; + } + } + } else { + // 判断是否符合备选值 + value = value.replaceAll("!", "!"); + List valueList = Arrays.asList(value.split("!")); + for (String v : valueList) { + if (!controlValueList.contains(v)) { + if (CutEnum.CN.getValue().equals(cut)) { + errorMsg += configName + "下拉多选中的" + value + "不正确;"; + } else { + errorMsg += configName + " " + value + " is not correct; "; + } + countError++; + } +// else { +// +// newValue.append(v).append(","); +// } + } + } + } + +// resultMap.put("value", newValue.toString()); + resultMap.put("errorMsg", errorMsg); + resultMap.put("countError", countError); + return resultMap; + } + + private Map validateText(String configName, String controlVerify, String value, String mustInput, String dbLength, String cut) { + String errorMsg = ""; + int countError= 0; + Map resultMap = new HashMap<>(); + + // 校验必填 + if (IsMustEnum.YES.getValue().equals(mustInput) && StringUtils.isEmpty(value)) { + if(CutEnum.CN.getValue().equals(cut)) { + errorMsg += configName + "为必填项,不能为空;"; + } else { + errorMsg += configName + " is mandatory and cannot be empty; "; + } + countError++; + } + + // 校验长度 + if (StringUtils.isNotBlank(value) && value.length() > Long.parseLong(dbLength)) { + if(CutEnum.CN.getValue().equals(cut)) { + errorMsg += configName + "不能超过" + dbLength + "个字符;"; + } else { + errorMsg += configName + " can not be more than " + dbLength + " char; "; + } + countError++; + } + + if (StringUtils.isNotEmpty(value)) { + String regex = ""; + Boolean result = false; + Boolean flag = false; + if (ControlVerifyEnum.NULL.getValue().equals(controlVerify)) { + result = true; + + } else if (ControlVerifyEnum.CHINESE.getValue().equals(controlVerify)) { + regex = "^[\\u4e00-\\u9fa5]{0,}$"; + result = value.matches(regex); + + } else if (ControlVerifyEnum.POSITIVE_INTEGER.getValue().equals(controlVerify)) { + regex = "^[0-9]*$"; + result = value.matches(regex); + + } else if (ControlVerifyEnum.POSITIVE_FLOAT.getValue().equals(controlVerify)) { + regex = "^[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*$ 或 ^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$"; + result = value.matches(regex); + + } else if (ControlVerifyEnum.INTEGER_DECIMAL.getValue().equals(controlVerify)) { + regex = "^(\\-|\\+)?\\d+(\\.\\d+)?$"; + result = value.matches(regex); + + } else if (ControlVerifyEnum.DECIMAL_ONE.getValue().equals(controlVerify)) { + regex = "^(\\-)?\\d+(\\.\\d{1})$"; + result = value.matches(regex); + + } else if (ControlVerifyEnum.DECIMAL_TWO.getValue().equals(controlVerify)) { + regex = "^(\\-)?\\d+(\\.\\d{2})$"; + result = value.matches(regex); + + } else if (ControlVerifyEnum.DECIMAL_THREE.getValue().equals(controlVerify)) { + regex = "^(\\-)?\\d+(\\.\\d{3})$"; + result = value.matches(regex); + + } else if (ControlVerifyEnum.DECIMAL_FOUR.getValue().equals(controlVerify)) { + regex = "^(\\-)?\\d+(\\.\\d{4})$"; + result = value.matches(regex); + + } else { + flag = true; + } + + if (CutEnum.EN.getValue().equals(cut)) { + if (flag) { + errorMsg += configName + " did not match the Validate Component in the system; "; + countError++; + } else { + if (!result) { + errorMsg += configName + " Validate Component is wrong; "; + countError++; + } + } + + } else { + if (flag) { + errorMsg += configName + "未匹配到系统中的控件校验;"; + countError++; + } else { + if (!result) { + errorMsg += configName + "文本的控件校验不正确;"; + countError++; + } + } + } + } + + resultMap.put("errorMsg", errorMsg); + resultMap.put("countError", countError); + return resultMap; + } /** * 实体对象转成Map * @param obj 实体对象 @@ -2754,4 +4240,153 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("state", ManifestStateEnum.COLLECTING.getValue()); + List manifestEOS = paramsManifestEOService.list(queryWrapper); + for (ParamsManifestEO manifestEO : manifestEOS) { + //项目名称 + ParamsManifestVO projectInfo = paramsManifestEOService.getProjectById(manifestEO.getProjectId()); + if (ObjectUtils.isNotEmpty(projectInfo)) { + //url + String urlParamsStr = parseUrlParams(manifestEO); + String hrefFeishu = backUrl + "/ParameterItemCollection" + urlParamsStr; + //查出对应清单 + List collectManifestEOS = paramsCollectManifestEOMapper.queryByParamManifestId(manifestEO.getId()); + Map> seven = new HashMap<>(); + Map> three = new HashMap<>(); + Map> today = new HashMap<>(); + for (ParamsCollectManifestEO collectManifestEO : collectManifestEOS) { + String thirdId = null; + if (CollectManifestStateEnum.WAIT_SDT.getValue().equals(collectManifestEO.getState()) + ||CollectManifestStateEnum.DRE_BACK.getValue().equals(collectManifestEO.getState())) { + //工程接口人 + if (ObjectUtils.isNotEmpty(collectManifestEO.getSdt())) { + SysUser sdt = sysUserService.getUserByName(collectManifestEO.getSdt()); + if (ObjectUtils.isNotEmpty(sdt)) { + thirdId = sdt.getThirdId(); + } + } + + } else if (CollectManifestStateEnum.WAIT_FILL.getValue().equals(collectManifestEO.getState()) + ||CollectManifestStateEnum.CERT_BACK.getValue().equals(collectManifestEO.getState())) { + //填写人 + if (ObjectUtils.isNotEmpty(collectManifestEO.getDre())) { + SysUser dre = sysUserService.getUserByName(collectManifestEO.getDre()); + if (ObjectUtils.isNotEmpty(dre)) { + thirdId = dre.getThirdId(); + } + } + } + //截止时间 + if (ObjectUtils.isNotEmpty(thirdId) && ObjectUtils.isNotEmpty(collectManifestEO.getDeadline())) { + String deadline =sdf.format(collectManifestEO.getDeadline()); + //判断日期 + int days = 0; + try { + days = (int) (sdf.parse(deadline).getTime() - sdf.parse(now).getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + e.printStackTrace(); + throw new JeroBootException("时间获取失败"); + } + if (days == 7) { + deadlineDateMap(seven, collectManifestEO, thirdId); + } else if (days == 3) { + deadlineDateMap(three, collectManifestEO, thirdId); + } else if (now.equals(deadline)) { + deadlineDateMap(today, collectManifestEO, thirdId); + } + + } + } + + String title = MessageType2Enum.HOMO_PARAMETER_COLLECTION.getCn() + "/" + MessageType2Enum.HOMO_PARAMETER_COLLECTION.getEn(); + String cnContentLower = "项目: " + projectInfo.getProjectName() + + "\n发起人: 系统通知"; + String enContentLower = "Project: " + projectInfo.getProjectName() + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + if (!seven.isEmpty()) { + for (String key : seven.keySet()) { + String[] thirds = new String[1]; + thirds[0] = key; + List stringList = seven.get(key); + String join = StringUtils.join(stringList, ","); + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(title); + feishuMsgVo.setCnContentUpper("您参与填写的参数"+ join +",还有7天到期,请及时查看处理"); + feishuMsgVo.setCnContentLower(cnContentLower); + feishuMsgVo.setEnContentUpper("The parameter "+ join +" you filled in will expire in 7 days. Please check and address it in a timely manner"); + feishuMsgVo.setEnContentLower(enContentLower); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirds, feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + } + if (!three.isEmpty()) { + for (String key : three.keySet()) { + String[] thirds = new String[1]; + thirds[0] = key; + List stringList = three.get(key); + String join = StringUtils.join(stringList, ","); + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(title); + feishuMsgVo.setCnContentUpper("您参与填写的参数"+ join +",还有3天到期,请及时查看处理"); + feishuMsgVo.setCnContentLower(cnContentLower); + feishuMsgVo.setEnContentUpper("The parameter "+ join +" you filled in will expire in 3 days. Please check and address it in a timely manner"); + feishuMsgVo.setEnContentLower(enContentLower); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirds, feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + } + if (!today.isEmpty()) { + for (String key : today.keySet()) { + String[] thirds = new String[1]; + thirds[0] = key; + List stringList = today.get(key); + String join = StringUtils.join(stringList, ","); + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(title); + feishuMsgVo.setCnContentUpper("您参与填写的参数"+ join +",将于今天到期,请及时查看处理"); + feishuMsgVo.setCnContentLower(cnContentLower); + feishuMsgVo.setEnContentUpper("The parameter "+ join +" you filled in will expire today. Please check and address it in a timely manner"); + feishuMsgVo.setEnContentLower(enContentLower); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirds, feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + } + } + } + + } + + private void deadlineDateMap(Map> today, ParamsCollectManifestEO collectManifestEO, String thirdId) { + List stringList = today.get(thirdId); + if (ObjectUtils.isEmpty(stringList)) { + stringList = new ArrayList<>(); + stringList.add("NIO-" + collectManifestEO.getNioNumber()); + today.put(thirdId, stringList); + } else { + stringList.add("NIO-" + collectManifestEO.getNioNumber()); + } + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/service/impl/ParamsManifestEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/service/impl/ParamsManifestEOServiceImpl.java index 7ebdaab76..90ac5c6ba 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/service/impl/ParamsManifestEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/service/impl/ParamsManifestEOServiceImpl.java @@ -187,6 +187,8 @@ public class ParamsManifestEOServiceImpl extends ServiceImpl> listAll = paramsCollectManifestEOMapper.listInfoForExport(paramsCollectManifestEO); + List> listAll = paramsCollectManifestEOMapper.listInfoForExport(paramsCollectManifestEO, null); // 循环责任领域,计算每个责任领域中的四种状态数据 for (DictModel item : dutyTerritoryDictList) { diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/task/ScheduledTask.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/task/ScheduledTask.java new file mode 100644 index 000000000..91fb719d8 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/task/ScheduledTask.java @@ -0,0 +1,30 @@ +package com.jero.modules.cert.collect.task; + +import com.jero.modules.cert.collect.service.IParamsCollectManifestEOService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class ScheduledTask { + + @Autowired + private IParamsCollectManifestEOService paramsCollectManifestEOServicea; + + /** + * 监控参数收集任务的截止时间,并根据时间段发送飞书 + */ + //@Scheduled(cron = "0 30 14 * * ?") + @Scheduled(cron = "0 0 0 */1 * ?") + public void checkTime() { + log.info("-----checkDeadline-----begin-----------"); + + paramsCollectManifestEOServicea.checkDeadline(); + + log.info("-----checkDeadline------end-----------"); + } + + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/vo/ParamsManifestVO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/vo/ParamsManifestVO.java index 584936f61..1ffbdaf53 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/vo/ParamsManifestVO.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/collect/vo/ParamsManifestVO.java @@ -24,4 +24,10 @@ public class ParamsManifestVO { private String ids; private String cut; private String sourceManifestId; + + //相关项目版本 + private String projectVersion; + + //说明 + private String explanation; } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/template/enums/ControlTypeEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/template/enums/ControlTypeEnum.java index 9304ce180..a6948d07d 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/template/enums/ControlTypeEnum.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/template/enums/ControlTypeEnum.java @@ -70,4 +70,18 @@ public enum ControlTypeEnum { } return map; } + + public static Map toMapForExport(String cut){ + Map map = new HashMap<>(); + if (CutEnum.CN.getValue().equals(cut)) { + for (ControlTypeEnum controlTypeEnum : ControlTypeEnum.values()) { + map.put(controlTypeEnum.getValue(), controlTypeEnum.getName()); + } + } else if (CutEnum.EN.getValue().equals(cut)) { + for (ControlTypeEnum controlTypeEnum : ControlTypeEnum.values()) { + map.put(controlTypeEnum.getValue(), controlTypeEnum.getEnName()); + } + } + return map; + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/template/enums/ControlVerifyEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/template/enums/ControlVerifyEnum.java index 8bb6ccc20..d51ff4bef 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/template/enums/ControlVerifyEnum.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/template/enums/ControlVerifyEnum.java @@ -68,4 +68,18 @@ public enum ControlVerifyEnum { } return map; } + + public static Map toMapForExport(String cut){ + Map map = new HashMap<>(); + if (CutEnum.CN.getValue().equals(cut)) { + for (ControlVerifyEnum controlVerifyEnum : ControlVerifyEnum.values()) { + map.put(controlVerifyEnum.getValue(), controlVerifyEnum.getName()); + } + } else if (CutEnum.EN.getValue().equals(cut)) { + for (ControlVerifyEnum controlVerifyEnum : ControlVerifyEnum.values()) { + map.put(controlVerifyEnum.getValue(), controlVerifyEnum.getEnName()); + } + } + return map; + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/template/enums/ParamsIsMustEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/template/enums/ParamsIsMustEnum.java index 5c8ea1caf..630579765 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/template/enums/ParamsIsMustEnum.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/cert/template/enums/ParamsIsMustEnum.java @@ -62,4 +62,18 @@ public enum ParamsIsMustEnum { return map; } + public static Map toMapForExport(String cut){ + Map map = new HashMap<>(); + if (CutEnum.CN.getValue().equals(cut)) { + for (ParamsIsMustEnum paramsIsMustEnum : ParamsIsMustEnum.values()) { + map.put(paramsIsMustEnum.getValue(), paramsIsMustEnum.getName()); + } + } else if (CutEnum.EN.getValue().equals(cut)) { + for (ParamsIsMustEnum paramsIsMustEnum : ParamsIsMustEnum.values()) { + map.put(paramsIsMustEnum.getValue(), paramsIsMustEnum.getEnName()); + } + } + return map; + } + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java index e53b0e1b1..42b30a509 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java @@ -316,7 +316,14 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl" + serialNumber + ""; + + //消息英文--不带标签 + String contentNo = "In the "+ technologyTerritoryName + + " technical field you subscribed to, the "+ + category + " " + serialNumber +" has been updated.";; + + //消息英文--带标签 + String contentYes = "In the "+ technologyTerritoryName + + " technical field you subscribed to, the "+ + category + " " + hrefYes +" has been updated.";; + + //消息中文--不带标签 + String contentInfoNo = "您所订阅的" + technologyTerritoryName + "技术领域中更新了" + category + " " + serialNumber;; + + //消息中文--带标签 + + String contentInfoYes = "您所订阅的" + technologyTerritoryName + "技术领域中更新了" + category + " " + hrefYes;; + + //封装消息的实体类 - SysAnnouncement sysAnnouncement = getSysAnnouncement(userIdList, msgTitle, content, contentInfo,MessageTypeEnum.READ.getValue(),MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + SysAnnouncement sysAnnouncement = getSysAnnouncement(userIdList, + msgTitle, + contentNo, + contentYes, + MessageTypeEnum.READ.getValue(), + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(), + contentInfoNo, + contentInfoYes); sysAnnouncementService.saveAnnouncement(sysAnnouncement); sendWebsocket(idTemp, contentInfo); //飞书 try { String contentInfoFeiShu = "In the "+ technologyTerritoryName - + " technical field you subscribed to, the " - + serialNumber +" has been updated."; - iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentInfoFeiShu, MessageTypeEnum.PUSH.getName(), hrefTemp); + + " technical field you subscribed to, the "+ + category + " " + serialNumber +" has been updated."; + String contentInfoFeiShuCn = "您所订阅的" + technologyTerritoryName + "技术领域中更新了" + category + " " + serialNumber; + + FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + feishuMsgVo.setTitle(MessageTypeEnum.READ.getNameCn()+"/"+MessageTypeEnum.READ.getName()); + feishuMsgVo.setUrl(hrefTemp); + feishuMsgVo.setContentEn(contentInfoFeiShu); + feishuMsgVo.setContent(contentInfoFeiShuCn); + + iFeishuService.sendCardMsgTerritory(thirdIdList.toArray(new String[]{}), feishuMsgVo); +// iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentInfoFeiShu, MessageTypeEnum.PUSH.getName(), hrefTemp); } catch (IOException e) { log.error("飞书消息推送失败"); } @@ -2980,13 +3027,13 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl map, List> dataList, + List fieldList, List fieldDateList, + List fieldFileList, List fieldPullList, + String cut,String flagTemp) { + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + //调整dataList中map中字段顺序与表单中的一致 + Map mapNew = new LinkedHashMap<>(); + for (OnlCgformField onlCgformField : fieldList) { + for (Map.Entry entry : dataList.get(0).entrySet()) { + if (onlCgformField.getDbFieldName().equals(entry.getKey())) { + mapNew.put(entry.getKey(), entry.getValue()); + break; + } + } + } + dataList.remove(0); + dataList.add(mapNew); + Map mapTemp = new HashMap<>(); + mapCopy(map, mapTemp); + //时间类型的字段 + List fieldDate = fieldDateList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList()); + //文件类型的字段 + List fieldFile = fieldFileList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList()); + //下拉类型的字段 + //过滤出树形字段 + List treeFieldList = fieldList.stream() + .filter(e -> FieldTypeEnum.TREE.getValue().equals(e.getFieldShowType())) + .collect(Collectors.toList()); + + //数据字典 + List sysDictItems = sysDictItemServiceImpl.selectItemsAll(); + //树形数据字典 + List categoryList = sysCategoryService.list(); + //下拉选处理数据字典 + for (Map.Entry entry : dataList.get(0).entrySet()) { + //下拉选处理数据字典 + dictItemCn(sysDictItems, entry, cut, fieldList,flagTemp); + treeDictItemCn(categoryList, entry, treeFieldList, cut,flagTemp); + } + for (Map.Entry entry : mapTemp.entrySet()) { + //下拉选处理数据字典 + dictItemCn(sysDictItems, entry, cut, fieldList,flagTemp); + treeDictItemCn(categoryList, entry, treeFieldList, cut,flagTemp); + } + + StringBuilder sb = new StringBuilder(); + dataList.get(0).entrySet().forEach(entry -> { + String key = entry.getKey(); + Object value = entry.getValue(); + //字段中文名 + List fields = fieldList.stream().filter(e -> e.getDbFieldName().equals(key)).collect(Collectors.toList()); + + if (fields.size() != 0) { + String dbFieldTxt = fields.get(0).getDbFieldTxt(); + if("2".equals(flagTemp)){ + dbFieldTxt = fields.get(0).getDbFieldTxt(); + }else{ + dbFieldTxt = fields.get(0).getDbFieldTxt(); + } + dbFieldTxt = "" + dbFieldTxt + ""; + if (value == null) { + value = ""; + } + for (Map.Entry entryTemp : mapTemp.entrySet()) { + String keyTemp = entryTemp.getKey(); + Object valueTemp = entryTemp.getValue(); + if (valueTemp == null) { + valueTemp = ""; + } + if (!"create_time".equals(key) && !"update_time".equals(key)) { + if (key.equals(keyTemp)) { + if (fieldDate.contains(key)) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + if (ObjectUtils.isNotEmpty(value)) { + value = sdf.format(value); + } + if (ObjectUtils.isNotEmpty(valueTemp)) { + try { + valueTemp = sdf.format(sdf.parse((String) valueTemp)); + } catch (ParseException e) { + } + } + //处理时间类型字段 + if (ObjectUtils.isNotEmpty(value)) { + if (ObjectUtils.isNotEmpty(valueTemp) && !value.equals(valueTemp)) { + if("2".equals(flagTemp)){ + sb.append(dbFieldTxt + "由\"" + value + "\"改为\"“" + valueTemp + "\","); + }else{ + sb.append(dbFieldTxt + "由\"" + value + "\"改为\"“" + valueTemp + "\","); + } + } else if (ObjectUtils.isEmpty(valueTemp)) { + if("2".equals(flagTemp)){ + sb.append(dbFieldTxt + "由\"" + value + "\"改为空" + ","); + }else{ + sb.append(dbFieldTxt + "由\"" + value + "\"改为空" + ","); + } + } + } else { + if (ObjectUtils.isNotEmpty(valueTemp)) { + if("2".equals(flagTemp)){ + sb.append(dbFieldTxt + "由空改为\"" + valueTemp + "\","); + }else{ + sb.append(dbFieldTxt + "由空改为\"" + valueTemp + "\","); + } + + } + } + + } else if (fieldFile.contains(key)) { + //处理文件类型字段 + List fileNameList = new ArrayList<>(); + List fileNameListTemp = new ArrayList<>(); + //之前的文件 + if (ObjectUtils.isNotEmpty(value)) { + List fileInfos = iOSSFileService.getFileInfosByConnectId((String) value); + fileNameList = fileInfos.stream().map(OSSFile::getFileName).collect(Collectors.toList()); + } + //修改的文件 + if (ObjectUtils.isNotEmpty(valueTemp)) { + List fileInfosTemp = iOSSFileService.getFileInfos((String) valueTemp); + fileNameListTemp = fileInfosTemp.stream().map(OSSFile::getFileName).collect(Collectors.toList()); + } + + if (ObjectUtils.isNotEmpty(value)) { + boolean checkDiffrent = checkDiffrent(fileNameList, fileNameListTemp); + + if (fileNameListTemp.size() != 0 && !checkDiffrent) { + if("2".equals(flagTemp)){ + //sysUser + sb.append(dbFieldTxt + "由\"" + StringUtils.join(fileNameList, ",") + "\"改为\"" + StringUtils.join(fileNameListTemp, ",") + "\","); + }else{ + sb.append(dbFieldTxt + "由\"" + StringUtils.join(fileNameList, ",") + "\"改为\"" + StringUtils.join(fileNameListTemp, ",") + "\","); + } + } else if (fileNameListTemp.size() == 0) { + if("2".equals(flagTemp)){ + sb.append(dbFieldTxt + "由\"" + StringUtils.join(fileNameList, ",") + "\"改为空" + ","); + }else{ + sb.append(dbFieldTxt + "由\"" + StringUtils.join(fileNameList, ",") + "\"改为空" + ","); + } + + } + } else { + if (fileNameListTemp.size() != 0) { + if("2".equals(flagTemp)){ + sb.append(dbFieldTxt + "由空改为\"" + StringUtils.join(fileNameListTemp, ",") + "\","); + }else{ + sb.append(dbFieldTxt + "由空改为\"" + StringUtils.join(fileNameListTemp, ",") + "\","); + } + + } + } + } else { +// if ("replace_standard".equals(key) || "corresponding_standard".equals(key)) { +// if (ObjectUtils.isNotEmpty(value)) { +// value = getReplaceStandardName(value); +// } +// if (ObjectUtils.isNotEmpty(valueTemp)) { +// valueTemp = getReplaceStandardName(valueTemp); +// } +// } + //其他类型(被代替标准不处理) + if (!"replaced_standard".equals(key)) { + if (ObjectUtils.isNotEmpty(value)) { + if (ObjectUtils.isNotEmpty(valueTemp) && !value.equals(valueTemp)) { + if("2".equals(flagTemp)){ + sb.append(dbFieldTxt + "由\"" + value + "\"改为\"" + valueTemp + "\","); + }else{ + sb.append(dbFieldTxt + "由\"" + value + "\"改为\"" + valueTemp + "\","); + } + } else if (ObjectUtils.isEmpty(valueTemp)) { + if("2".equals(flagTemp)){ + sb.append(dbFieldTxt + "由\"" + value + "\"改为空" + ","); + }else{ + sb.append(dbFieldTxt + "由\"" + value + "\"改为空" + ","); + } + } + } else { + if (ObjectUtils.isNotEmpty(valueTemp)) { + if("2".equals(flagTemp)){ + sb.append(dbFieldTxt + "由空改为\"" + valueTemp + "\","); }else{ sb.append(dbFieldTxt + "由空改为\"" + valueTemp + "\","); } @@ -3114,20 +3357,34 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl fieldFileList, List fieldPullList, String cut) { + List> dataListTemp = new ArrayList<>(); + for (Map stringObjectMap : dataList) { + Map mapT = new HashMap<>(); + mapCopy(stringObjectMap, mapT); + dataListTemp.add(mapT); + } + String technologyTerritoryNew = (String) dataList.get(0).get("technology_territory"); //1. 处理订阅的发送消息 //修改的内容 String flag ="1";//消息的标识(英文) StringBuilder sb = getUpdateInfo(map, dataList, fieldList, fieldDateList, fieldFileList, fieldPullList, null,flag); + String flagTemp ="2";//消息的标识(中文--消息采用卡片型式发送, 消息内容包含中英文, 所以此处需要获取消息的中文) + StringBuilder sbCn = getUpdateInfoCn(map, dataListTemp, fieldList, fieldDateList, fieldFileList, fieldPullList, null,flagTemp); //树形数据字典 List categoryList = sysCategoryService.list(); String sbStr = ""; if (ObjectUtils.isNotEmpty(sb)) { sbStr = sb.substring(0, sb.length() - 1); } + String sbStrCn = ""; + if (ObjectUtils.isNotEmpty(sbCn)) { + sbStrCn = sbCn.substring(0, sbCn.length() - 1); + } LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String serialNumber = (String) dataList.get(0).get("serial_number"); String category = (String)map.get("lei4_bie2"); + String categoryCn = (String)map.get("lei4_bie2"); String technologyTerritory = (String) map.get("technology_territory"); if(StringUtils.isNotBlank(category)){ List dictItemList = sysDictItemServiceImpl.selectItemsAll(); @@ -3137,21 +3394,20 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImplXXX对“GB 7258 进行了修改请及时查看”) //向订阅领域管理中订阅了该技术领域的人和文档库中订阅了该条文档的人发送消息 + // 只有技术领域变更为订阅的技术领域这一种情况发消息, 假如订阅了技术领域A,编辑的文档的技术领域也是A,这时编辑的是其他的字段,这种情况不发消息 Map mapTemp = new HashMap<>(); mapTemp.put("domainId", map.get("technology_territory")); mapTemp.put("documentId", map.get("id")); //订阅技术领域的人和订阅该条标准的人 -// List userIdList = domainUserRelService.queryDomainUserRelInfo(mapTemp); //订阅技术领域发消息 List domainUserRelList = domainManageService.list(); -// List thirdIdListAll = new ArrayList<>(); -// List userListAll = new ArrayList<>(); List thirdIdList = new ArrayList<>(); List userList = new ArrayList<>(); String technologyTerritoryNameEn = ""; @@ -3167,12 +3423,6 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl" + serialNumber + ""; String content = ""; - if (StringUtils.isNotBlank(sbStr.toString())) { + if (StringUtils.isNotBlank(sbStr.toString()) && StringUtils.isNotBlank(sbStrCn)) { //去掉a标签 sbStr = sbStr.replaceAll("", "").replaceAll("", ""); //您订阅的XXX已被修改 content = "In the "+category + " " + serialNumber+" you subscribed to, has been modified,Please pay attention to check."; - String contentInfo = "In the "+category + " " + href+" you subscribed to, "+sysUser.getUsername()+" changed the "+ href + " " + sbStr.toString(); + //内容详情--英文(不带标签) + String contentInfoNo = "In the "+category + " " + serialNumber+" you subscribed to, "+ sbStr.toString(); + + //内容详情--英文(带标签) + String contentInfoYes = "In the "+category + " " + href+" you subscribed to, "+ sbStr.toString(); + String msgTitle = serialNumber + " you subscribed to has been updated"; + //内容详情-中文(不带标签) + String sbStrCnTemp = sbStrCn.replaceAll("", "").replaceAll("", ""); + String contentCnNo = "您所订阅的"+categoryCn+serialNumber+","+sbStrCnTemp; + + //内容详情--中文(带标签) + String contentInfoCnReplace = sbStrCn.replaceAll("","").replaceAll("",""); + String contentInfoCnYes ="您所订阅的"+categoryCn+href+","+contentInfoCnReplace;; //封装消息的实体类 - SysAnnouncement sysAnnouncement = getSysAnnouncement(userIdListUpdate, msgTitle, content, contentInfo,MessageTypeEnum.READ.getValue(),MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + SysAnnouncement sysAnnouncement = getSysAnnouncement(userIdListUpdate, + msgTitle, + contentInfoNo, + contentInfoYes, + MessageTypeEnum.READ.getValue(), + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(), + contentCnNo, + contentInfoCnYes); sysAnnouncementService.saveAnnouncement(sysAnnouncement); - sendWebsocket((String) map.get("id"), contentInfo); + sendWebsocket((String) map.get("id"), contentInfoYes); } //订阅文档的飞书消息 try { -// String contentInfoFei = "In the " + technologyTerritoryNameEn + " technical field you subscribed to, the " + -// category + " " + serialNumber+" has been updated."; - String contentInfoFei = "In the "+category + " " + serialNumber +" you subscribed to, "+sysUser.getUsername()+" changed the " + sbStr.toString();; + //英文消息 + String contentInfoFei = "In the "+category + " " + serialNumber +" you subscribed to, "+ sbStr.toString();; + //中文消息 + String contentInfoFeiCn ="您所订阅的"+categoryCn+ serialNumber +","+ sbStrCn.toString();; //跳转文档详情 String url = backUrl + "/docManage/library/detail?id=" + id; - iFeishuService.batchSendMessage(userIdListUpdateFeishu.toArray(new String[]{}), contentInfoFei, MessageTypeEnum.READ.getName(), url); -// iFeishuService.batchSendMessage(userIdListUpdateFeishu.toArray(new String[]{}), content, MessageTypeEnum.READ.getName(), url); + FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + feishuMsgVo.setTitle(MessageTypeEnum.READ.getNameCn()+"/"+MessageTypeEnum.READ.getName()); + feishuMsgVo.setUrl(url); + String replaceAll = contentInfoFei.replaceAll("\"", "<"); + feishuMsgVo.setContentEn(replaceAll); + + String replaceAllCn = contentInfoFeiCn.replaceAll("", "") + .replaceAll("","").replaceAll("\"", "<"); + feishuMsgVo.setContent(replaceAllCn); +// + iFeishuService.sendCardMsgDocument(userIdListUpdateFeishu.toArray(new String[]{}), feishuMsgVo); + +// String contentInfoFei = "In the "+category + " " + serialNumber +" you subscribed to, "+sysUser.getUsername()+" changed the " + sbStr.toString();; +// //跳转文档详情 +// String url = backUrl + "/docManage/library/detail?id=" + id; +// iFeishuService.batchSendMessage(userIdListUpdateFeishu.toArray(new String[]{}), contentInfoFei, MessageTypeEnum.READ.getName(), url); } catch (IOException e) { log.error("文档新增飞书消息推送失败"); } @@ -3349,7 +3656,13 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl sysDictItems, Map.Entry entry, String cut, List fieldList,String flagTemp) { + //通过dictField判断字段是否为下拉选(不为空则为下拉选) + List onlCgformFieldList = fieldList.stream().filter(e -> entry.getKey().equals(e.getDbFieldName())).collect(Collectors.toList()); + //数据字典中文 + List dictItemsCh = new ArrayList<>(); + List dictItemsEn = new ArrayList<>(); + for (OnlCgformField onlCgformField : onlCgformFieldList) { + if (FieldTypeEnum.PULL_SINGLE.getValue().equals(onlCgformField.getFieldShowType()) + || FieldTypeEnum.PULL_MORE.getValue().equals(onlCgformField.getFieldShowType())) { + String value = (String) entry.getValue(); + if (StringUtils.isNotBlank(value) && onlCgformFieldList.size() != 0 && StringUtils.isNotBlank(onlCgformFieldList.get(0).getDictField())) { + for (String itemValue : value.split(",")) { + //字段的数据字典 + List dictItemList = sysDictItems.stream() + .filter(e -> StringUtils.isNotBlank(e.getDictCode()) && e.getDictCode().equals(onlCgformFieldList.get(0).getDictField())) + .collect(Collectors.toList()); + if (dictItemList.size() != 0) { + List dictItems = dictItemList.stream() + .filter(e -> itemValue.equals(e.getItemValue())) + .collect(Collectors.toList()); + if (dictItems.size() != 0) { + List itemText = new ArrayList<>(); + if (CutEnum.CN.getValue().equals(cut)) { + itemText = dictItems.stream().map(SysDictItem::getItemText).collect(Collectors.toList()); + } else if(CutEnum.EN.getValue().equals(cut)) { + itemText = dictItems.stream().map(SysDictItem::getEnName).collect(Collectors.toList()); + }else if("2".equals(flagTemp)){ + itemText = dictItems.stream().map(SysDictItem::getItemText).collect(Collectors.toList()); + } + dictItemsCh.addAll(itemText); + dictItemsEn.addAll(itemText); + } + } + } + } + } + } + + + if (onlCgformFieldList.size() != 0 && StringUtils.isNotBlank(onlCgformFieldList.get(0).getDictField())) { + if(FieldTypeEnum.PULL_SINGLE.getValue().equals(onlCgformFieldList.get(0).getFieldShowType()) + || FieldTypeEnum.PULL_MORE.getValue().equals(onlCgformFieldList.get(0).getFieldShowType())){ + if (CutEnum.CN.getValue().equals(cut)) { + entry.setValue(StringUtils.join(dictItemsCh, ",")); + } else if(CutEnum.EN.getValue().equals(cut)){ + entry.setValue(StringUtils.join(dictItemsEn, ",")); + }else if("2".equals(flagTemp)){ + entry.setValue(StringUtils.join(dictItemsEn, ",")); + } + } + } + } @Override @@ -4890,8 +5265,20 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl categoryList, Map.Entry entry, List treeFieldList, String cut,String flagTemp) { + List treeFields = treeFieldList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList()); + String key = entry.getKey(); + if (treeFields.contains(entry.getKey())) { + String value = StringUtils.valueOf(entry.getValue()); + if (StringUtils.isNotBlank(value)) { + List idList = Arrays.asList(value.split(",")); + List sysCategoryList = categoryList.stream().filter(e -> idList.contains(e.getId())).collect(Collectors.toList()); + List nameList = sysCategoryList.stream().map(SysCategory::getName).collect(Collectors.toList()); + List nameEnList = sysCategoryList.stream().map(SysCategory::getEnName).collect(Collectors.toList()); + if (CutEnum.CN.getValue().equals(cut)) { + entry.setValue(StringUtils.join(nameList, ",")); + } else if(CutEnum.EN.getValue().equals(cut)){ + entry.setValue(StringUtils.join(nameEnList, ",")); + }else if("2".equals(flagTemp)){ + entry.setValue(StringUtils.join(nameList, ",")); + } + } + } + } @SneakyThrows diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/dummy/service/impl/DummyInventoryBaseEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/dummy/service/impl/DummyInventoryBaseEOServiceImpl.java index 20b31fb67..b4bc7f017 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/dummy/service/impl/DummyInventoryBaseEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/dummy/service/impl/DummyInventoryBaseEOServiceImpl.java @@ -29,6 +29,7 @@ import com.jero.modules.dummy.service.IDummyInventoryInfoEOService; import com.jero.modules.dummy.service.IDummyReadEOService; import com.jero.modules.dummy.vo.VirtualCreaterVo; import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; import com.jero.modules.system.entity.SysAnnouncement; @@ -41,6 +42,7 @@ import com.jero.modules.system.service.ISysUserService; import com.jero.modules.system.service.impl.SysCategoryServiceImpl; import org.apache.commons.collections.MapUtils; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -370,6 +372,7 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl dummyInventoryInfoEOList = iDummyInventoryInfoEOService.list(lambdaQueryWrapper); String contentLog = "The "+ baseEO.getName()+" virtual list you subscribed to has been updated as follows:" + "
"; String contentLogFeishu = "The "+ baseEO.getName()+" virtual list you subscribed to has been updated as follows:" + " "; + String contentLogFeishuTemp = "The "+ baseEO.getName()+" virtual list you subscribed to has been updated as follows:" + " "; if(dummyContentChangeEOList.size() == 0){ //没有添加过需要进行第一次添加 @@ -411,31 +414,83 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl hrefListAdd = new ArrayList<>(); if(serialNumberAddList.size() != 0){ - List hrefList = new ArrayList<>(); + for (DummyInventoryInfoEO dummyInventoryInfoEO : collectAdd) { String href = "" + dummyInventoryInfoEO.getSerialNumber() + ""; - hrefList.add(href); + hrefListAdd.add(href); } - contentLog += count+". New regulations: " + StringUtils.join(hrefList,",") + "
"; + contentLog += count+". New regulations: " + StringUtils.join(hrefListAdd,",") + "
"; contentLogFeishu += count+". New regulations: " + StringUtils.join(serialNumberAddList,",") + " "; count++; } + List hrefListDelete = new ArrayList<>(); if(serialNumberDeleteList.size() != 0){ - List hrefList = new ArrayList<>(); for (DummyInventoryInfoEO dummyInventoryInfoEO : collectDelete) { String href = "" + dummyInventoryInfoEO.getSerialNumber() + ""; - hrefList.add(href); + hrefListDelete.add(href); } - contentLog += count + ". Remove regulations: " + StringUtils.join(hrefList,",") + "
"; + contentLog += count + ". Remove regulations: " + StringUtils.join(hrefListDelete,",") + "
"; contentLogFeishu += count + ". Remove regulations: " + StringUtils.join(serialNumberDeleteList,",") + " "; } if(serialNumberAddList.size() != 0 || serialNumberDeleteList.size() != 0){ + int countNo = 1; + StringBuilder sbContentNo = new StringBuilder(); + if(ObjectUtils.isNotEmpty(serialNumberAddList)){ + sbContentNo.append(countNo+". New regulations: "+StringUtils.join(serialNumberAddList,",")+", "); + countNo ++; + } + if(ObjectUtils.isNotEmpty(serialNumberDeleteList)){ + sbContentNo.append(countNo+". Remove regulations: "+StringUtils.join(serialNumberDeleteList,",")); + } + + int countYes = 1; + StringBuilder sbContentYes = new StringBuilder(); + if(ObjectUtils.isNotEmpty(serialNumberAddList)){ + sbContentYes.append(countYes+". New regulations: "+StringUtils.join(hrefListAdd,",")+"
"); + countYes ++; + } + if(ObjectUtils.isNotEmpty(serialNumberDeleteList)){ + sbContentYes.append(countYes+". Remove regulations: "+StringUtils.join(hrefListDelete,",")); + } + //消息英文--不带标签 + String contentNo = "The "+ baseEO.getName()+" virtual list you subscribed to has been updated as follows:" + sbContentNo; + //消息英文--带标签 + String contentYes = "The "+ baseEO.getName()+" virtual list you subscribed to has been updated as follows:"+ "
" + sbContentYes;; + + int countInfoNo = 1; + StringBuilder sbContentINfoNo = new StringBuilder(); + if(ObjectUtils.isNotEmpty(serialNumberAddList)){ + sbContentINfoNo.append(countInfoNo+". 新增文档: "+StringUtils.join(serialNumberAddList,",")+", "); + countInfoNo ++; + } + if(ObjectUtils.isNotEmpty(serialNumberDeleteList)){ + sbContentINfoNo.append(countInfoNo+". 删除文档: "+StringUtils.join(serialNumberDeleteList,",")); + } + + int countInfoYes = 1; + StringBuilder sbContentInfoYes = new StringBuilder(); + if(ObjectUtils.isNotEmpty(serialNumberAddList)){ + sbContentInfoYes.append(countInfoYes+". 新增文档: "+StringUtils.join(hrefListAdd,",")+"
"); + countInfoYes ++; + } + if(ObjectUtils.isNotEmpty(serialNumberDeleteList)){ + sbContentInfoYes.append(countInfoYes+". 删除文档: "+StringUtils.join(hrefListDelete,",")); + } + + //消息中文--不带标签 + String contentInfoNo = "您所订阅的"+baseEO.getName()+"虚拟清单已更新,更新内容如下:"+sbContentINfoNo; + //消息中文--带标签 + String contentInfoYes = "您所订阅的"+baseEO.getName()+"虚拟清单已更新,更新内容如下:"+"
"+sbContentInfoYes; + + + List userNameList = dummyReadEOService.queryReadUserInfo(dummyInventoryBaseEO.getId()); List thirdIdList = new ArrayList<>(); if(userNameList.size() != 0){ @@ -444,7 +499,14 @@ public class DummyInventoryBaseEOServiceImpl extends ServiceImpl serialNumberAddList,List serialNumberDeleteList) throws IOException; + /** * 翻译文本 * @param params @@ -62,4 +100,7 @@ public interface IFeishuService { * @param split */ void sendKnowledgeBaseTypeChargePersonCard(String[] split); + + void sendCard(String[] thirdIds, FeishuMsg2Vo feishuMsgVo) throws IOException; + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/impl/FeishuServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/impl/FeishuServiceImpl.java index b3367fda2..72761116a 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/impl/FeishuServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/impl/FeishuServiceImpl.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.feishu.vo.FeishuMsg2Vo; import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.problemKnowledgeBase.entity.ProblemKnowledgeBaseClassifyEO; import com.jero.modules.problemKnowledgeBase.entity.ProblemKnowledgeBaseEO; @@ -24,6 +25,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -280,6 +282,476 @@ public class FeishuServiceImpl implements IFeishuService { return tokenJson.get("msg").toString(); } + /** + * 文档库卡片消息 + * @param userIds + * @param feishuMsgVo + * @return + * @throws IOException + */ + public String sendCardMsgDocument(String[] userIds, FeishuMsgVo feishuMsgVo) throws IOException { + String token = getTenantAccessToken(); + // 设置请求头 + Map 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("},"); + }; + contentSb.append("{\"tag\": \"hr\"},"); + + //内容英文 + if (StrUtil.isNotEmpty(feishuMsgVo.getContentEn())){ + contentSb.append("{"); + contentSb.append("\"tag\": \"div\","); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"" + feishuMsgVo.getContentEn() + "\","); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + }; + + + + 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()); + + String content = JSONObject.parseObject( + JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(0).toString()).get("text").toString()) + .get("content").toString(); + String contentEn = JSONObject.parseObject( + JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(2).toString()).get("text").toString()) + .get("content").toString(); + + JSONObject elementTwo = + JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(1).toString()); + JSONObject elementFour = + JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(3).toString()); + + //处理内容中的双引号(将尖括号替换成双引号) + JSONObject elementOne = getJsonObject(jsonObject, content); + JSONObject elementThree = getJsonObject(jsonObject, contentEn); + + JSONArray jsonArray = new JSONArray(); + jsonArray.add(elementOne); + jsonArray.add(elementTwo); + jsonArray.add(elementThree); + jsonArray.add(elementFour); + jsonObject.put("elements",jsonArray); + + // 设置请求参数 + 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(); + } + + + /** + * 订阅领域(飞书消息) + * @param userIds + * @param feishuMsgVo + * @return + * @throws IOException + */ + public String sendCardMsgTerritory(String[] userIds, FeishuMsgVo feishuMsgVo) throws IOException { + String token = getTenantAccessToken(); + // 设置请求头 + Map 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("},"); + }; + contentSb.append("{\"tag\": \"hr\"},"); + + //内容英文 + if (StrUtil.isNotEmpty(feishuMsgVo.getContentEn())){ + contentSb.append("{"); + contentSb.append("\"tag\": \"div\","); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"" + feishuMsgVo.getContentEn() + "\","); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + }; + + 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(); + } + /** + * 预警推送(飞书消息) + * @param userIds + * @param feishuMsgVo + * @return + * @throws IOException + */ + public String sendCardMsgWarn(String[] userIds, FeishuMsgVo feishuMsgVo) throws IOException { + String token = getTenantAccessToken(); + // 设置请求头 + Map 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() + "\"\n,"); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + }; + // 编号,标题,新车型实施日期,在产车实施日期 + contentSb.append("{"); + contentSb.append("\"tag\": \"div\","); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"" + "编号: " + feishuMsgVo.getRegulationNo() + "\n") + .append("标题: "+feishuMsgVo.getDocumentTitleCn() + "\n"); + if (StringUtils.isNotBlank(feishuMsgVo.getNewTypeExecutionDate())) { + contentSb.append("新车型实施日期: " + feishuMsgVo.getNewTypeExecutionDate() + "\n"); + } else { + contentSb.append("新车型实施日期: "+ "\n"); + } + if (StringUtils.isNotBlank(feishuMsgVo.getNewVehicleExecutionDate())) { + contentSb.append("在产车实施日期: " + feishuMsgVo.getNewVehicleExecutionDate()); + } else { + contentSb.append("在产车实施日期: "); + } + contentSb.append("\","); + + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + contentSb.append("{\"tag\": \"hr\"},"); + + //内容英文 + if (StrUtil.isNotEmpty(feishuMsgVo.getContentEn())){ + contentSb.append("{"); + contentSb.append("\"tag\": \"div\","); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"" + feishuMsgVo.getContentEn() + "\"\n,"); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + }; + // 编号,标题,新车型实施日期,在产车实施日期 + contentSb.append("{"); + contentSb.append("\"tag\": \"div\","); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"" + "Regulation No: " + feishuMsgVo.getRegulationNo() + "\n") + .append("Title: " + feishuMsgVo.getDocumentTitleEn() + "\n"); + if (StringUtils.isNotBlank(feishuMsgVo.getNewTypeExecutionDate())) { + contentSb.append("New Type Execution Date: " + feishuMsgVo.getNewTypeExecutionDate() + "\n"); + } else { + contentSb.append("New Type Execution Date: "+ "\n"); + } + if (StringUtils.isNotBlank(feishuMsgVo.getNewVehicleExecutionDate())) { + contentSb.append("New Vehicle Execution Date: " + feishuMsgVo.getNewVehicleExecutionDate()); + } else { + contentSb.append("New Vehicle Execution Date: "); + } + contentSb.append("\","); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + + + 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(); + } + /** + * 虚拟清单发布(飞书消息) + * @param userIds + * @param feishuMsgVo + * @return + * @throws IOException + */ + public String sendCardMsgVirtua(String[] userIds, FeishuMsgVo feishuMsgVo, + List serialNumberAddList,List serialNumberDeleteList) throws IOException { + String token = getTenantAccessToken(); + // 设置请求头 + Map 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() + "\"\n,"); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + }; + if(ObjectUtils.isNotEmpty(serialNumberAddList)){ + int count = 1; + contentSb.append("{"); + contentSb.append("\"tag\": \"div\","); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"" + count + ". 新增文档: " + StringUtils.join(serialNumberAddList,",") + "\"\n,"); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + } + if(ObjectUtils.isNotEmpty(serialNumberDeleteList)){ + int count = 2; + contentSb.append("{"); + contentSb.append("\"tag\": \"div\","); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"" + count + ". 删除文档: " + StringUtils.join(serialNumberDeleteList,",") + "\"\n,"); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + } + contentSb.append("{\"tag\": \"hr\"},"); + + //内容英文 + if (StrUtil.isNotEmpty(feishuMsgVo.getContentEn())){ + contentSb.append("{"); + contentSb.append("\"tag\": \"div\","); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"" + feishuMsgVo.getContentEn() + "\"\n,"); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + }; + + if (ObjectUtils.isNotEmpty(serialNumberAddList)) { + int count = 1; + contentSb.append("{"); + contentSb.append("\"tag\": \"div\","); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"" + count + ". New regulations: " + StringUtils.join(serialNumberAddList,",") + "\"\n,"); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + } + if (ObjectUtils.isNotEmpty(serialNumberDeleteList)) { + int count = 2; + contentSb.append("{"); + contentSb.append("\"tag\": \"div\","); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"" + count + ". Remove regulations: " + StringUtils.join(serialNumberDeleteList,",") + "\"\n,"); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + } + + 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(); + } + + @NotNull + private JSONObject getJsonObject(JSONObject jsonObject, String content) { + String contentReplaceAll = content.replaceAll("<", "\""); + + JSONObject jsonObject1 = JSONObject.parseObject( + JSONObject.parseObject( + JSONArray.parseArray(jsonObject.get("elements").toString()).get(0).toString()) + .get("text").toString()); + jsonObject1.put("content",contentReplaceAll); + + + JSONObject elementOne = + JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(0).toString()); + + elementOne.put("text",jsonObject1); + return elementOne; + } + /** * 翻译文本 * 参数: @@ -674,4 +1146,86 @@ public class FeishuServiceImpl implements IFeishuService { } } + /** + * 发送消息 + * @param thirdIds + * @param feishuMsgVo + */ + @Override + public void sendCard(String[] thirdIds, FeishuMsg2Vo feishuMsgVo) throws IOException { + String token = getTenantAccessToken(); + // 设置请求头 + Map headerMap = new HashMap<>(); + headerMap.put("Authorization", "Bearer " + token); + headerMap.put("Content-Type", "application/json; charset=utf-8"); + + + String sendJson = "{\n" + + " \"config\": {\n" + + " \"wide_screen_mode\": true\n" + + " },\n" + + " \"elements\": [\n" + + " {\n" + + " \"tag\": \"markdown\",\n" + + " \"content\": \"" + feishuMsgVo.getCnContentUpper() + "\"\n" + + " },\n" + + " {\n" + + " \"tag\": \"markdown\",\n" + + " \"content\": \"" + feishuMsgVo.getCnContentLower() + "\"\n" + + " },\n" + + " {\n" + + " \"tag\": \"hr\"\n" + + " },\n" + + " {\n" + + " \"tag\": \"markdown\",\n" + + " \"content\": \"" + feishuMsgVo.getEnContentUpper() + "\"\n" + + " },\n" + + " {\n" + + " \"tag\": \"markdown\",\n" + + " \"content\": \"" + feishuMsgVo.getEnContentLower() + "\"\n" + + " },\n" + + " {\n" + + " \"actions\": [\n" + + " {\n" + + " \"tag\": \"button\",\n" + + " \"text\": {\n" + + " \"content\": \"View\",\n" + + " \"tag\": \"plain_text\"\n" + + " },\n" + + " \"type\": \"primary\",\n" + + " \"url\": \"" + feishuMsgVo.getUrl() + "\"\n" + + " }\n" + + " ],\n" + + " \"tag\": \"action\"\n" + + " }\n" + + " ],\n" + + " \"header\": {\n" + + " \"template\": \"" + feishuMsgVo.getColor() + "\",\n" + + " \"title\": {\n" + + " \"content\": \"" + feishuMsgVo.getTitle() + "\",\n" + + " \"tag\": \"plain_text\"\n" + + " }\n" + + " }\n" + + "}"; + + JSONObject jsonObject = JSONObject.parseObject(sendJson.toString()); + + // 设置请求参数 + JSONObject paramsMap = new JSONObject(); + + paramsMap.put("user_ids", thirdIds); + + 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); + } + + } + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/vo/FeishuMsg2Vo.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/vo/FeishuMsg2Vo.java new file mode 100644 index 000000000..11d701482 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/vo/FeishuMsg2Vo.java @@ -0,0 +1,20 @@ +package com.jero.modules.feishu.vo; + +import lombok.Data; + +@Data +public class FeishuMsg2Vo { + + private String title; //标题 + + private String color; //颜色 + + private String enContentUpper; //英文内容上部 + private String enContentLower; //英文内容下部 + + private String cnContentUpper; //中文内容上部 + private String cnContentLower; //中文内容下部 + + private String url; //回调的网址 + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/vo/FeishuMsgVo.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/vo/FeishuMsgVo.java index 0aee3596c..98bccf88f 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/vo/FeishuMsgVo.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/vo/FeishuMsgVo.java @@ -12,6 +12,8 @@ public class FeishuMsgVo { private String content; //内容 + private String contentEn; //内容英文 + private String taskType; //任务类型 private String regulationNo; //法规编号 @@ -26,5 +28,14 @@ public class FeishuMsgVo { private String assignee; //评估人 适用范围:责任人提交通知发起人(设计符合性,pre-homo符合性,验证符合性) + private String documentTitleCn; //文档标题中文 + + private String documentTitleEn; //文档标题英文 + + private String newTypeExecutionDate; //新车型实施日期 + + private String newVehicleExecutionDate; //在产车实施日期 + + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsOpinionGather/job/LawsOpinionGatherRemindJob.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsOpinionGather/job/LawsOpinionGatherRemindJob.java index 9bbfc9b96..fe112748e 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsOpinionGather/job/LawsOpinionGatherRemindJob.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsOpinionGather/job/LawsOpinionGatherRemindJob.java @@ -2,6 +2,7 @@ package com.jero.modules.lawsOpinionGather.job; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.exception.JeroBootException; import com.jero.modules.lawsOpinionGather.entity.LawsOpinionGatherEO; import com.jero.modules.lawsOpinionGather.enums.GatherResultEnum; import com.jero.modules.lawsOpinionGather.service.ILawsOpinionGatherEOService; @@ -41,18 +42,45 @@ public class LawsOpinionGatherRemindJob implements Job { if(CollectionUtils.isNotEmpty(lawsOpinionGatherEOList)){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - Date currentDate = new Date(); - + //Date currentDate = new Date(); + String now = sdf.format(new Date()); //获取后一天的时间 - Calendar calendar=new GregorianCalendar(); - calendar.setTime(new Date()); - calendar.add(Calendar.DATE,1); - Date nextDay = calendar.getTime(); + //Calendar calendar=new GregorianCalendar(); + //calendar.setTime(new Date()); + //calendar.add(Calendar.DATE,1); + //Date nextDay = calendar.getTime(); - String nextDayStr = sdf.format(nextDay); + //String nextDayStr = sdf.format(nextDay); lawsOpinionGatherEOList.forEach(lawsOpinionGatherEO -> { - if(StringUtils.equals(nextDayStr,sdf.format(lawsOpinionGatherEO.getEndTime()))){ + String endTime = sdf.format(lawsOpinionGatherEO.getEndTime()); + int days = 0; + try { + days = (int) (sdf.parse(endTime).getTime() - sdf.parse(now).getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + e.printStackTrace(); + throw new JeroBootException("日期转换错误"); + } + if (days == 3) { + List userIdList = this.workFlowFeignClient.getLawsOpinionGatherFlowAssigneeList(lawsOpinionGatherEO.getId()); + if(CollectionUtils.isNotEmpty(userIdList)){ + JSONObject sendJsonObject = new JSONObject(); + sendJsonObject.put("msgType", MsgTypeEnum.LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_THREE_DAYS_BEFORE_MSG.getValue()); + sendJsonObject.put("lawsOpinionGatherId",lawsOpinionGatherEO.getId()); + sendJsonObject.put("userIdList",userIdList); + this.lawsOpinionGatherEOService.workFlowSendMsg(sendJsonObject); + } + } else if (endTime.equals(now)) { + List userIdList = this.workFlowFeignClient.getLawsOpinionGatherFlowAssigneeList(lawsOpinionGatherEO.getId()); + if(CollectionUtils.isNotEmpty(userIdList)){ + JSONObject sendJsonObject = new JSONObject(); + sendJsonObject.put("msgType", MsgTypeEnum.LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_TODAY_MSG.getValue()); + sendJsonObject.put("lawsOpinionGatherId",lawsOpinionGatherEO.getId()); + sendJsonObject.put("userIdList",userIdList); + this.lawsOpinionGatherEOService.workFlowSendMsg(sendJsonObject); + } + } + /*if(StringUtils.equals(nextDayStr,sdf.format(lawsOpinionGatherEO.getEndTime()))){ List userIdList = this.workFlowFeignClient.getLawsOpinionGatherFlowAssigneeList(lawsOpinionGatherEO.getId()); if(CollectionUtils.isNotEmpty(userIdList)){ JSONObject sendJsonObject = new JSONObject(); @@ -62,7 +90,7 @@ public class LawsOpinionGatherRemindJob implements Job { sendJsonObject.put("userIdList",userIdList); this.lawsOpinionGatherEOService.workFlowSendMsg(sendJsonObject); } - } + }*/ }); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsOpinionGather/service/impl/LawsOpinionGatherEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsOpinionGather/service/impl/LawsOpinionGatherEOServiceImpl.java index 60217e805..2d490d9f3 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsOpinionGather/service/impl/LawsOpinionGatherEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsOpinionGather/service/impl/LawsOpinionGatherEOServiceImpl.java @@ -2,11 +2,18 @@ package com.jero.modules.lawsOpinionGather.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.jero.common.api.vo.Result; import com.jero.common.constant.enums.CutEnum; +import com.jero.common.constant.enums.MessageType2Enum; import com.jero.common.constant.enums.MessageTypeEnum; +import com.jero.common.constant.enums.MsgColorEnum; import com.jero.common.exception.JeroBootException; import com.jero.common.system.vo.LoginUser; +import com.jero.modules.document.entity.BussDocumentLibraryEO; +import com.jero.modules.document.service.IBussDocumentLibraryEOService; +import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.feishu.vo.FeishuMsg2Vo; import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.lawsOpinionGather.entity.LawsOpinionGatherEO; import com.jero.modules.lawsOpinionGather.enums.GatherResultEnum; @@ -29,8 +36,13 @@ import com.jero.modules.system.entity.SysCategory; import com.jero.modules.system.entity.SysUser; import com.jero.modules.system.service.ISysUserService; import com.jero.modules.system.service.impl.SysCategoryServiceImpl; +import com.jero.modules.todoCenter.entity.ProcessInfoEO; +import com.jero.modules.todoCenter.enums.TodoCenterStatusEnum; +import com.jero.modules.todoCenter.service.IProcessInfoEOService; +import com.jero.modules.wkflow.enums.FlowTypeEnum; import com.jero.modules.wkflow.feginClient.WorkFlowFeignClient; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.jeecg.modules.jmreport.common.constant.CommonConstant; @@ -38,6 +50,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -70,6 +83,12 @@ public class LawsOpinionGatherEOServiceImpl extends ServiceImpl userIdList = new ArrayList<>(); - String msgContentEN = ""; - String msgTitle = ""; + //String msgContentEN = ""; + //String msgTitle = ""; + + LawsOpinionGatherEO lawsOpinionGatherEO = queryById(lawsOpinionGatherId); + //英文标题 + BussDocumentLibraryEO bussDocumentLibraryEO = bussDocumentLibraryEOService.queryById(lawsOpinionGatherEO.getStandId()); + + //Map lawsOpinionGatherPrcInfo = this.workFlowFeignClient.getLawsOpinionGatherPrcInfo(lawsOpinionGatherId); String initiator = ""; + String title = MessageType2Enum.REGULATION_OPINION_COLLECTION.getCn() + "/" + MessageType2Enum.REGULATION_OPINION_COLLECTION.getEn(); + String endTime = new SimpleDateFormat("yyyy-MM-dd").format(lawsOpinionGatherEO.getEndTime());//截止日期 + //String prcNum = lawsOpinionGatherPrcInfo.get("prcNum"); + //String prcName = lawsOpinionGatherPrcInfo.get("prcName"); + String cnContentUpper = ""; + String cnContentLower = ""; + String enContentUpper = ""; + String enContentLower = ""; if(StringUtils.equals(msgType,MsgTypeEnum.LAWS_OPOMOPM_GATHER_START_MSG.getValue())){ userIdList.addAll(Arrays.asList(jsonObject.getString("evaluatorIds").split(","))); - String endTime = jsonObject.getString("endTime"); //截止日期 - msgContentEN = "You recieved the Collection of Legislative Comments of "+serialNumber+" . The due date is "+endTime+". Please check and address it in a timely manner."; - msgTitle = "You have a Collection of Legislative Comments task to complete"; + + //msgContentEN = "You recieved the Collection of Legislative Comments of "+serialNumber+" . The due date is "+endTime+". Please check and address it in a timely manner."; + //msgTitle = "You have a Collection of Legislative Comments task to complete"; String currentUserId = jsonObject.getString("currentUserId"); //当前操作用户id SysUser currentUser = sysUserService.getBaseMapper().selectOne(new QueryWrapper().lambda().eq(SysUser::getId, currentUserId)); initiator = currentUser.getUsername(); + cnContentUpper = "您好,请及时查看处理此项任务,谢谢!"; + cnContentLower = "编号: " + lawsOpinionGatherEO.getSerialNumber() + + "\n标题: " + lawsOpinionGatherEO.getTitle() + + "\n发起人: " + initiator + + "\n截止时间: " + endTime; + enContentUpper = "Hello! Please check and address the task in a timely manner. Thank you!"; + enContentLower = "Regulation No: " + lawsOpinionGatherEO.getSerialNumber() + + "\nTitle: " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + initiator + + "\nDue Date: " + endTime; + }else if(StringUtils.equals(msgType,MsgTypeEnum.LAWS_OPOMOPM_GATHER_ENALUATOR_SUBMIT_MSG.getValue())){ String currentUserId = jsonObject.getString("currentUserId"); //当前操作用户id SysUser currentUser = sysUserService.getBaseMapper().selectOne(new QueryWrapper().lambda().eq(SysUser::getId, currentUserId)); userIdList.add(jsonObject.getString("initiatorUserId")); - msgContentEN = currentUser.getUsername() + " has submitted the collection process of Collection of Legislative Comments of "+serialNumber+", please check it in time."; - msgTitle = "You have a Collection of Legislative Comments task completed"; + //msgContentEN = currentUser.getUsername() + " has submitted the collection process of Collection of Legislative Comments of "+serialNumber+", please check it in time."; + //msgTitle = "You have a Collection of Legislative Comments task completed"; - initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); - }else if(StringUtils.equals(msgType, MsgTypeEnum.LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_MSG.getValue())){ + initiator = currentUser.getUsername(); + cnContentUpper = "您好,"+ currentUser.getUsername() +"已提交反馈意见,请查看"; + cnContentLower = "编号: " + lawsOpinionGatherEO.getSerialNumber() + + "\n标题: " + lawsOpinionGatherEO.getTitle() + + "\n发起人: " + initiator + + "\n截止时间: " + endTime; + enContentUpper = "Hello! "+ currentUser.getUsername() +" has submitted the comments. Please check it"; + enContentLower = "Regulation No: " + lawsOpinionGatherEO.getSerialNumber() + + "\nTitle: " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + initiator + + "\nDue Date: " + endTime; + + } else if (StringUtils.equals(msgType, MsgTypeEnum.LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_THREE_DAYS_BEFORE_MSG.getValue())) { userIdList = (List) jsonObject.get("userIdList"); - msgContentEN = "The the Collection of Legislative Comments of "+serialNumber+" will expire tomorrow . Please check and address it in time."; - msgTitle = "You have a Collection of Legislative Comments task to complete"; + + cnContentUpper = "您好,该任务将于3天后到期,请及时查看处理,谢谢!"; + cnContentLower = "编号: " + lawsOpinionGatherEO.getSerialNumber() + + "\n标题: " + lawsOpinionGatherEO.getTitle() + + "\n发起人: 系统通知" ; + enContentUpper = "Hello! This task will expire in 3 days. Please check and address the task in a timely manner. Thank you!"; + enContentLower = "Regulation No: " + lawsOpinionGatherEO.getSerialNumber() + + "\nTitle: " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + + } else if (StringUtils.equals(msgType, MsgTypeEnum.LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_TODAY_MSG.getValue())){ + userIdList = (List) jsonObject.get("userIdList"); + + cnContentUpper = "您好,该任务将于今天到期,请尽快查看处理,谢谢!"; + cnContentLower = "编号: " + lawsOpinionGatherEO.getSerialNumber() + + "\n标题: " + lawsOpinionGatherEO.getTitle() + + "\n发起人: 系统通知"; + enContentUpper = "Hello! This task will expire today. Please check and address the task ASAP. Thank you!"; + enContentLower = "Regulation No: " + lawsOpinionGatherEO.getSerialNumber() + + "\nTitle: " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + + } else if (StringUtils.equals(msgType, MsgTypeEnum.LAWS_OPOMOPM_GATHER_COMPLETE_MSG.getValue())) { + userIdList.add((String) jsonObject.get("initiatorUserId")); + + cnContentUpper = "您好,该任务已完成,请查看"; + cnContentLower = "编号: " + lawsOpinionGatherEO.getSerialNumber() + + "\n标题: " + lawsOpinionGatherEO.getTitle() + + "\n发起人: 系统通知"+ + "\n截止时间: " + endTime; + enContentUpper = "Hello! The task is completed. Please check it."; + enContentLower = "Regulation No: " + lawsOpinionGatherEO.getSerialNumber() + + "\nTitle: " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName() + + "\nDue Date: " + endTime; + } + /*else if(StringUtils.equals(msgType, MsgTypeEnum.LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_MSG.getValue())){ + userIdList = (List) jsonObject.get("userIdList"); + //msgContentEN = "The the Collection of Legislative Comments of "+serialNumber+" will expire tomorrow . Please check and address it in time."; + //msgTitle = "You have a Collection of Legislative Comments task to complete"; initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + }*/ + + List thirdIdList = new ArrayList<>(); + List sysUsers = sysUserService.listByIds(userIdList); + if (ObjectUtils.isNotEmpty(sysUsers)) { + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); } - //飞书跳转链接 - String hrefFeishu = backUrl + JumpLinkEnum.TASK_AFFIRM_LINK.getLink(); + String hrefFeishu = backUrl + JumpLinkEnum.FGPG_TODO_CENTER_LINK.getLink(); + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(title); + feishuMsgVo.setCnContentUpper(cnContentUpper); + feishuMsgVo.setCnContentLower(cnContentLower); + feishuMsgVo.setEnContentUpper(enContentUpper); + feishuMsgVo.setEnContentLower(enContentLower); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } //系统内部跳转链接 - String href = "" + " View details" + ""; - String contentInfo = msgContentEN + " " + href; + //String href = "" + " View details" + ""; + //String contentInfo = msgContentEN + " " + href; - Map sendMessageMap = new HashMap<>(); - sendMessageMap.put("hrefFeishu",hrefFeishu); - sendMessageMap.put("contentInfo",contentInfo); + //Map sendMessageMap = new HashMap<>(); + //sendMessageMap.put("hrefFeishu",hrefFeishu); + //sendMessageMap.put("contentInfo",contentInfo); - SendMessageUtils.sendMessage(msgTitle,msgContentEN,userIdList,lawsOpinionGatherId,sendMessageMap,null,MessageTypeEnum.COLLECTION_OF_LEGISLATIVE_COMMENTS,initiator); + //SendMessageUtils.sendMessage(msgTitle,msgContentEN,userIdList,lawsOpinionGatherId,sendMessageMap,null,MessageTypeEnum.COLLECTION_OF_LEGISLATIVE_COMMENTS,initiator); } @Override @@ -338,6 +458,12 @@ public class LawsOpinionGatherEOServiceImpl extends ServiceImpl processInfoUpdateWrap = new LambdaUpdateWrapper<>(); + processInfoUpdateWrap.set(ProcessInfoEO::getStatus, TodoCenterStatusEnum.COMPLETED.getValue()); + processInfoUpdateWrap.in(ProcessInfoEO::getId,actiProcInstIdList); + processInfoUpdateWrap.eq(ProcessInfoEO::getFlowType, FlowTypeEnum.FGYJSJLC.getValue()); + this.processInfoEOService.update(processInfoUpdateWrap); } } return new Result<>().success("手动结束成功!"); diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsTechnologyEvaluation/job/LawsTechnologyEvaluationRemindJob.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsTechnologyEvaluation/job/LawsTechnologyEvaluationRemindJob.java index 66cc0531d..e2cdfab4b 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsTechnologyEvaluation/job/LawsTechnologyEvaluationRemindJob.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsTechnologyEvaluation/job/LawsTechnologyEvaluationRemindJob.java @@ -2,6 +2,7 @@ package com.jero.modules.lawsTechnologyEvaluation.job; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.exception.JeroBootException; import com.jero.modules.lawsOpinionGather.enums.GatherResultEnum; import com.jero.modules.lawsTechnologyEvaluation.entity.LawsTechnologyEvaluationEO; import com.jero.modules.lawsTechnologyEvaluation.entity.LawsTechnologyEvaluationFlowDetailEO; @@ -52,14 +53,16 @@ public class LawsTechnologyEvaluationRemindJob implements Job { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //获取后一天的时间 - Calendar calendar=new GregorianCalendar(); - calendar.setTime(new Date()); - calendar.add(Calendar.DATE,1); - Date nextDay = calendar.getTime(); + //Calendar calendar=new GregorianCalendar(); + //calendar.setTime(new Date()); + //calendar.add(Calendar.DATE,1); + //Date nextDay = calendar.getTime(); - String nextDayStr = sdf.format(nextDay); + //String nextDayStr = sdf.format(nextDay); + + String now = sdf.format(new Date()); LawsTechnologyEvaluationEOList.forEach(lawsTechnologyEvaluationEO -> { - if(StringUtils.equals(nextDayStr,sdf.format(lawsTechnologyEvaluationEO.getEndTime()))){ + /*if(StringUtils.equals(nextDayStr,sdf.format(lawsTechnologyEvaluationEO.getEndTime()))){ String actiProcInstIds = flowDetailList.stream().filter(flowDetail -> { boolean flag = false; @@ -80,6 +83,56 @@ public class LawsTechnologyEvaluationRemindJob implements Job { this.lawsTechnologyEvaluationEOService.workFlowSendMsg(sendJsonObject); } } + }*/ + String endTime = sdf.format(lawsTechnologyEvaluationEO.getEndTime()); + int days = 0; + try { + days = (int) (sdf.parse(endTime).getTime() - sdf.parse(now).getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + e.printStackTrace(); + throw new JeroBootException("日期转换错误"); + } + + if (days == 3) { + //到期前3天 + String actiProcInstIds = flowDetailList.stream().filter(flowDetail -> { + boolean flag = false; + if (StringUtils.equals(lawsTechnologyEvaluationEO.getId(), flowDetail.getLawsTechnologyEvaluationId())) { + flag = true; + } + return flag; + }).map(LawsTechnologyEvaluationFlowDetailEO::getActiProcInstId).distinct().collect(Collectors.joining(",")); + + if(StringUtils.isNotEmpty(actiProcInstIds)){ + List userIdList = this.workFlowFeignClient.getTaskAssigneeListByPrcIds(actiProcInstIds); + if(CollectionUtils.isNotEmpty(userIdList)){ + JSONObject sendJsonObject = new JSONObject(); + sendJsonObject.put("msgType", MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_THREE_DAYS_BEFORE_MSG.getValue()); + sendJsonObject.put("lawsTechnologyEvaluationId",lawsTechnologyEvaluationEO.getId()); + sendJsonObject.put("userIdList",userIdList); + this.lawsTechnologyEvaluationEOService.workFlowSendMsg(sendJsonObject); + } + } + } else if (endTime.equals(now)){ + //当天 + String actiProcInstIds = flowDetailList.stream().filter(flowDetail -> { + boolean flag = false; + if (StringUtils.equals(lawsTechnologyEvaluationEO.getId(), flowDetail.getLawsTechnologyEvaluationId())) { + flag = true; + } + return flag; + }).map(LawsTechnologyEvaluationFlowDetailEO::getActiProcInstId).distinct().collect(Collectors.joining(",")); + + if(StringUtils.isNotEmpty(actiProcInstIds)){ + List userIdList = this.workFlowFeignClient.getTaskAssigneeListByPrcIds(actiProcInstIds); + if(CollectionUtils.isNotEmpty(userIdList)){ + JSONObject sendJsonObject = new JSONObject(); + sendJsonObject.put("msgType", MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_TODAY_MSG.getValue()); + sendJsonObject.put("lawsTechnologyEvaluationId",lawsTechnologyEvaluationEO.getId()); + sendJsonObject.put("userIdList",userIdList); + this.lawsTechnologyEvaluationEOService.workFlowSendMsg(sendJsonObject); + } + } } }); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsTechnologyEvaluation/mapper/LawsTechnologyEvaluationFlowDetailEOMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsTechnologyEvaluation/mapper/LawsTechnologyEvaluationFlowDetailEOMapper.java index da6be153c..f2c103e1f 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsTechnologyEvaluation/mapper/LawsTechnologyEvaluationFlowDetailEOMapper.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsTechnologyEvaluation/mapper/LawsTechnologyEvaluationFlowDetailEOMapper.java @@ -14,4 +14,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface LawsTechnologyEvaluationFlowDetailEOMapper extends BaseMapper { + LawsTechnologyEvaluationFlowDetailEO queryByEvaluationId(@Param("lawsTechnologyEvaluationId") String lawsTechnologyEvaluationId); + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsTechnologyEvaluation/mapper/xml/LawsTechnologyEvaluationFlowDetailEOMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsTechnologyEvaluation/mapper/xml/LawsTechnologyEvaluationFlowDetailEOMapper.xml index 72cc2a9f6..c1fdf969b 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsTechnologyEvaluation/mapper/xml/LawsTechnologyEvaluationFlowDetailEOMapper.xml +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsTechnologyEvaluation/mapper/xml/LawsTechnologyEvaluationFlowDetailEOMapper.xml @@ -14,4 +14,11 @@ - \ No newline at end of file + + + + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsTechnologyEvaluation/service/impl/LawsTechnologyEvaluationEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsTechnologyEvaluation/service/impl/LawsTechnologyEvaluationEOServiceImpl.java index 0b39ff36e..39dfd81ee 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsTechnologyEvaluation/service/impl/LawsTechnologyEvaluationEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/lawsTechnologyEvaluation/service/impl/LawsTechnologyEvaluationEOServiceImpl.java @@ -2,23 +2,26 @@ package com.jero.modules.lawsTechnologyEvaluation.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.constant.enums.ModuleEnum; +import com.jero.common.constant.enums.*; import com.jero.common.exception.JeroBootException; import com.jero.common.system.vo.LoginUser; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; import com.jero.generater.modules.online.cgform.service.impl.OnlCgformFieldServiceImpl; +import com.jero.modules.document.entity.BussDocumentLibraryEO; import com.jero.modules.document.enums.FieldTypeEnum; import com.jero.modules.document.mapper.BussDocumentLibraryEOMapper; import com.jero.modules.document.service.impl.BussDocumentLibraryEOServiceImpl; +import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.feishu.vo.FeishuMsg2Vo; import com.jero.modules.lawsOpinionGather.enums.GatherResultEnum; import com.jero.modules.lawsTechnologyEvaluation.entity.LawsTechnologyEvaluationEO; import com.jero.modules.lawsTechnologyEvaluation.entity.LawsTechnologyEvaluationFlowDetailEO; import com.jero.modules.lawsTechnologyEvaluation.mapper.LawsTechnologyEvaluationEOMapper; +import com.jero.modules.lawsTechnologyEvaluation.mapper.LawsTechnologyEvaluationFlowDetailEOMapper; import com.jero.modules.lawsTechnologyEvaluation.service.*; import com.jero.modules.project.enums.JumpLinkEnum; import com.jero.modules.project.enums.MsgTypeEnum; @@ -33,9 +36,14 @@ import com.jero.modules.system.entity.SysUser; import com.jero.modules.system.service.ISysUserService; import com.jero.modules.system.service.impl.SysCategoryServiceImpl; import com.jero.modules.system.service.impl.SysDictItemServiceImpl; +import com.jero.modules.todoCenter.entity.ProcessInfoEO; +import com.jero.modules.todoCenter.enums.TodoCenterStatusEnum; +import com.jero.modules.todoCenter.service.IProcessInfoEOService; +import com.jero.modules.wkflow.enums.FlowTypeEnum; import com.jero.modules.wkflow.feginClient.WorkFlowFeignClient; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; @@ -47,7 +55,9 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.File; +import java.io.IOException; import java.io.OutputStream; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -97,6 +107,13 @@ public class LawsTechnologyEvaluationEOServiceImpl extends ServiceImpl lawsTechnologyEvaluationFlowDetailEOList = lawsTechnologyEvaluationFlowDetailEOService.list(flowDetailEOQueryWrapper); if(CollectionUtils.isNotEmpty(lawsTechnologyEvaluationFlowDetailEOList)){ - String prcIds = lawsTechnologyEvaluationFlowDetailEOList.stream().map(LawsTechnologyEvaluationFlowDetailEO::getActiProcInstId).distinct().collect(Collectors.joining(",")); + List actiProcInstIdList = lawsTechnologyEvaluationFlowDetailEOList.stream().map(LawsTechnologyEvaluationFlowDetailEO::getActiProcInstId).distinct().collect(Collectors.toList()); + String prcIds = actiProcInstIdList.stream().collect(Collectors.joining(",")); Result result = this.workFlowFeignClient.deleteProcessInstanceByPrcIds(prcIds); if(result.getCode().equals(CommonConstant.SC_OK_200)){ removeByIds(ids); @@ -170,6 +188,8 @@ public class LawsTechnologyEvaluationEOServiceImpl extends ServiceImpl userIdList = new ArrayList<>(); - String msgContentEN = ""; - String msgTitle = ""; + //String msgContentEN = ""; + //String msgTitle = ""; String initiator = ""; + String lawsTechnologyEvaluationId = jsonObject.getString("lawsTechnologyEvaluationId"); + LawsTechnologyEvaluationEO lawsTechnologyEvaluationEO = queryById(lawsTechnologyEvaluationId); + //LawsTechnologyEvaluationFlowDetailEO flowDetailEO = flowDetailEOMapper.queryByEvaluationId(lawsTechnologyEvaluationId); + //String number = flowDetailEO.getPrcNum(); + //String name = flowDetailEO.getPrcName(); + String endTime = new SimpleDateFormat("yyyy-MM-dd").format(lawsTechnologyEvaluationEO.getEndTime()); + + //英文标题 + BussDocumentLibraryEO bussDocumentLibraryEO = bussDocumentLibraryEOService.queryById(lawsTechnologyEvaluationEO.getStandId()); + + String title = MessageType2Enum.REGULATION_TECHNICAL_ASSESSMENT.getCn() + "/" + MessageType2Enum.REGULATION_TECHNICAL_ASSESSMENT.getEn(); + String cnContentUpper = ""; + String cnContentLower = ""; + String enContentUpper = ""; + String enContentLower = ""; if(StringUtils.equals(msgType, MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_START_MSG.getValue())){ userIdList.add(jsonObject.getString("evaluationId")); - String endTime = jsonObject.getString("endTime"); //截止日期 + //String endTime = jsonObject.getString("endTime"); //截止日期 //您收到GB 7258 的法规技术评估流程任务,请及时查看处理。 - msgContentEN = "You recieved the Regulatory and technical assessment of "+serialNumber+" . The due date is "+endTime+". Please check and address it in a timely manner."; - msgTitle = "You have a Regulatory and technical assessment task to complete"; + //msgContentEN = "You recieved the Regulatory and technical assessment of "+serialNumber+" . The due date is "+endTime+". Please check and address it in a timely manner."; + //msgTitle = "You have a Regulatory and technical assessment task to complete"; String currentUserId = jsonObject.getString("currentUserId"); //当前操作用户id SysUser currentUser = sysUserService.getBaseMapper().selectOne(new QueryWrapper().lambda().eq(SysUser::getId, currentUserId)); initiator = currentUser.getUsername(); + cnContentUpper = "您好,请及时查看处理此项任务,谢谢!"; + cnContentLower = "编号:" + lawsTechnologyEvaluationEO.getSerialNumber() + + "\n标题: " + lawsTechnologyEvaluationEO.getTitle() + + "\n发起人: " + initiator + + "\n截止时间: " + endTime; + enContentUpper = "Hello! Please check and address the task in a timely manner. Thank you!"; + enContentLower = "Regulation No :" + lawsTechnologyEvaluationEO.getSerialNumber() + + "\nTitle: " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + initiator + + "\nDue Date: " + endTime; }else if(StringUtils.equals(msgType,MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_ENALUATOR_SUBMIT_MSG.getValue())){ String currentUserId = jsonObject.getString("currentUserId"); //当前操作用户id SysUser currentUser = this.sysUserService.getBaseMapper().selectOne(new QueryWrapper().lambda().eq(SysUser::getId, currentUserId)); userIdList.add(jsonObject.getString("initiatorUserId")); //XXX(人员账号)已提交GB 7258 的法规意见收集流程,请及时查看审核。 - msgContentEN = currentUser.getUsername() + " has submitted the collection process of Regulatory and technical assessment of "+serialNumber+", Please check and address it in time."; - msgTitle = "You have a Regulatory and technical assessment task to complete"; + //msgContentEN = currentUser.getUsername() + " has submitted the collection process of Regulatory and technical assessment of "+serialNumber+", Please check and address it in time."; + //msgTitle = "You have a Regulatory and technical assessment task to complete"; - initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + initiator = currentUser.getUsername(); + cnContentUpper = "您好,"+ currentUser.getUsername() +"已提交评估结果,请审核"; + cnContentLower = "编号:" + lawsTechnologyEvaluationEO.getSerialNumber() + + "\n标题: " + lawsTechnologyEvaluationEO.getTitle() + + "\n发起人: " + initiator + + "\n截止时间: " + endTime; + enContentUpper = "Hello! "+ currentUser.getUsername() +" has submitted the assessment result. Please review it"; + enContentLower = "Regulation No :" + lawsTechnologyEvaluationEO.getSerialNumber() + + "\nTitle: " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + initiator + + "\nDue Date: " + endTime; }else if(StringUtils.equals(msgType, MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_AUDIT_ACCEPTED_MSG.getValue())){ userIdList.add(jsonObject.getString("evaluationId")); //您提交的GB 7258 的法规技术评估流程已通过。 - msgContentEN = "The regulatory and technical assessment process for "+serialNumber+" you submitted has passed."; - msgTitle = "You have a Regulatory and technical assessment task completed"; - - initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + //msgContentEN = "The regulatory and technical assessment process for "+serialNumber+" you submitted has passed."; + //msgTitle = "You have a Regulatory and technical assessment task completed"; + String currentUserId = jsonObject.getString("currentUserId"); //当前操作用户id + SysUser currentUser = this.sysUserService.getBaseMapper().selectOne(new QueryWrapper().lambda().eq(SysUser::getId, currentUserId)); + initiator = currentUser.getUsername(); + cnContentUpper = "您好,您提交的评估结果已通过"; + cnContentLower = "编号:" + lawsTechnologyEvaluationEO.getSerialNumber() + + "\n标题: " + lawsTechnologyEvaluationEO.getTitle() + + "\n发起人: " + initiator + + "\n截止时间: " + endTime; + enContentUpper = "Hello! The assessment result you submitted has passed"; + enContentLower = "Regulation No :" + lawsTechnologyEvaluationEO.getSerialNumber() + + "\nTitle: " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + initiator + + "\nDue Date: " + endTime; }else if(StringUtils.equals(msgType, MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_AUDIT_REJECTED_MSG.getValue())){ userIdList.add(jsonObject.getString("evaluationId")); //您提交的GB 7258 的法规技术评估流程已被退回,请及时查看处理。 - msgContentEN = "The regulatory and technical assessment process of "+serialNumber+" you submitted has been returned, Please check and address it in time."; - msgTitle = "You have a Regulatory and technical assessment task to complete"; + //msgContentEN = "The regulatory and technical assessment process of "+serialNumber+" you submitted has been returned, Please check and address it in time."; + //msgTitle = "You have a Regulatory and technical assessment task to complete"; + String currentUserId = jsonObject.getString("currentUserId"); //当前操作用户id + SysUser currentUser = this.sysUserService.getBaseMapper().selectOne(new QueryWrapper().lambda().eq(SysUser::getId, currentUserId)); + initiator = currentUser.getUsername(); + cnContentUpper = "您好,您提交的评估结果被退回,请及时查看处理"; + cnContentLower = "编号:" + lawsTechnologyEvaluationEO.getSerialNumber() + + "\n标题: " + lawsTechnologyEvaluationEO.getTitle() + + "\n发起人: " + initiator + + "\n截止时间: " + endTime; + enContentUpper = "Hello! The assessment result you submitted has been rejected. Please check and address it in a timely manner"; + enContentLower = "Regulation No :" + lawsTechnologyEvaluationEO.getSerialNumber() + + "\nTitle: " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + initiator + + "\nDue Date: " + endTime; + } else if (StringUtils.equals(msgType, MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_THREE_DAYS_BEFORE_MSG.getValue())) { + cnContentUpper = "您好,该任务将于3天后到期,请及时查看处理,谢谢!"; + cnContentLower = "编号:" + lawsTechnologyEvaluationEO.getSerialNumber() + + "\n标题: " + lawsTechnologyEvaluationEO.getTitle() + + "\n发起人: 系统通知"; + enContentUpper = "Hello! This task will expire in 3 days. Please check and address the task in a timely manner. Thank you!"; + enContentLower = "Regulation No :" + lawsTechnologyEvaluationEO.getSerialNumber() + + "\nTitle: " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + userIdList = (List) jsonObject.get("userIdList"); - initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); - }else if(StringUtils.equals(msgType, MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_MSG.getValue())){ + } else if (StringUtils.equals(msgType, MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_TODAY_MSG.getValue())) { + cnContentUpper = "您好,该任务将于今天到期,请尽快查看处理,谢谢!"; + cnContentLower = "编号:" + lawsTechnologyEvaluationEO.getSerialNumber() + + "\n标题: " + lawsTechnologyEvaluationEO.getTitle() + + "\n发起人: 系统通知"; + enContentUpper = "Hello! This task will expire today. Please check and address the task ASAP. Thank you!"; + enContentLower = "Regulation No :" + lawsTechnologyEvaluationEO.getSerialNumber() + + "\nTitle: " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + userIdList = (List) jsonObject.get("userIdList"); + + } /*else if (StringUtils.equals(msgType, MsgTypeEnum.LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_MSG.getValue())) { userIdList = (List) jsonObject.get("userIdList"); //您GB 7258的法规技术评估流程将于明天结束,请及时查看处理 - msgContentEN = "The the Regulatory and technical assessment of "+serialNumber+" will expire tomorrow. Please check and address it in time."; - msgTitle = "You have a Regulatory and technical assessment task to complete"; + //msgContentEN = "The the Regulatory and technical assessment of "+serialNumber+" will expire tomorrow. Please check and address it in time."; + //msgTitle = "You have a Regulatory and technical assessment task to complete"; initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + } */ + + List thirdIdList = new ArrayList<>(); + List sysUsers = sysUserService.listByIds(userIdList); + if (ObjectUtils.isNotEmpty(sysUsers)) { + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); } - //飞书跳转链接 - String hrefFeishu = backUrl + JumpLinkEnum.TASK_AFFIRM_LINK.getLink(); + String hrefFeishu = backUrl + JumpLinkEnum.FGPG_TODO_CENTER_LINK.getLink(); + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(title); + feishuMsgVo.setCnContentUpper(cnContentUpper); + feishuMsgVo.setCnContentLower(cnContentLower); + feishuMsgVo.setEnContentUpper(enContentUpper); + feishuMsgVo.setEnContentLower(enContentLower); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } //系统内部跳转链接 - String href = "" + " View details" + ""; - String contentInfo = msgContentEN + " " + href; + //String href = "" + " View details" + ""; + //String contentInfo = msgContentEN + " " + href; - Map sendMessageMap = new HashMap<>(); - sendMessageMap.put("hrefFeishu",hrefFeishu); - sendMessageMap.put("contentInfo",contentInfo); + //Map sendMessageMap = new HashMap<>(); + //sendMessageMap.put("hrefFeishu",hrefFeishu); + //sendMessageMap.put("contentInfo",contentInfo); - SendMessageUtils.sendMessage(msgTitle,msgContentEN,userIdList,lawsTechnologyEvaluationId,sendMessageMap,null, MessageTypeEnum.REGULATORY_AND_TECHNICAL_ASSESSMENT,initiator); + //SendMessageUtils.sendMessage(msgTitle,msgContentEN,userIdList,lawsTechnologyEvaluationId,sendMessageMap,null, MessageTypeEnum.REGULATORY_AND_TECHNICAL_ASSESSMENT,initiator); } @Override @@ -690,13 +807,20 @@ public class LawsTechnologyEvaluationEOServiceImpl extends ServiceImpl lawsTechnologyEvaluationFlowDetailEOList = lawsTechnologyEvaluationFlowDetailEOService.list(flowDetailEOQueryWrapper); if(CollectionUtils.isNotEmpty(lawsTechnologyEvaluationFlowDetailEOList)){ - String actiProcInstIds = lawsTechnologyEvaluationFlowDetailEOList.stream().map(LawsTechnologyEvaluationFlowDetailEO::getActiProcInstId).distinct().collect(Collectors.joining(",")); + List actiProcInstIdList = lawsTechnologyEvaluationFlowDetailEOList.stream().map(LawsTechnologyEvaluationFlowDetailEO::getActiProcInstId).distinct().collect(Collectors.toList()); + String actiProcInstIds = actiProcInstIdList.stream().collect(Collectors.joining(",")); Result result = this.workFlowFeignClient.completeLawsTechnologyEvaluationTaskByPids(actiProcInstIds); if(result.getCode().equals(CommonConstant.SC_OK_200)){ lawsTechnologyEvaluationEOList.forEach(lawsTechnologyEvaluationEO -> { lawsTechnologyEvaluationEO.setFlowStatus(GatherResultEnum.COMPLETED.getValue()); }); this.updateBatchById(lawsTechnologyEvaluationEOList); + + LambdaUpdateWrapper processInfoUpdateWrap = new LambdaUpdateWrapper<>(); + processInfoUpdateWrap.set(ProcessInfoEO::getStatus, TodoCenterStatusEnum.COMPLETED.getValue()); + processInfoUpdateWrap.in(ProcessInfoEO::getId,actiProcInstIdList); + processInfoUpdateWrap.eq(ProcessInfoEO::getFlowType, FlowTypeEnum.FGJSPG.getValue()); + this.processInfoEOService.update(processInfoUpdateWrap); } } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/problemKnowledgeBase/service/impl/ProblemKnowledgeBaseCommentEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/problemKnowledgeBase/service/impl/ProblemKnowledgeBaseCommentEOServiceImpl.java index 7395b1b6c..a5a6e52ac 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/problemKnowledgeBase/service/impl/ProblemKnowledgeBaseCommentEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/problemKnowledgeBase/service/impl/ProblemKnowledgeBaseCommentEOServiceImpl.java @@ -1,29 +1,43 @@ package com.jero.modules.problemKnowledgeBase.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.constant.enums.MessageTypeEnum; import com.jero.common.system.query.QueryGenerator; +import com.jero.common.system.vo.LoginUser; +import com.jero.modules.document.service.impl.BussDocumentLibraryEOServiceImpl; +import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.problemKnowledgeBase.entity.ProblemKnowledgeBaseCommentEO; +import com.jero.modules.problemKnowledgeBase.entity.ProblemKnowledgeBaseEO; import com.jero.modules.problemKnowledgeBase.mapper.ProblemKnowledgeBaseCommentEOMapper; import com.jero.modules.problemKnowledgeBase.service.IProblemKnowledgeBaseCommentEOService; +import com.jero.modules.problemKnowledgeBase.service.IProblemKnowledgeBaseEOService; import com.jero.modules.problemKnowledgeBase.vo.ProblemKnowledgeBaseCommentVO; import com.jero.modules.project.entity.ProblemKnowledgeBaseReplyEO; import com.jero.modules.project.service.IProblemKnowledgeBaseReplyEOService; +import com.jero.modules.system.entity.SysAnnouncement; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.service.ISysAnnouncementService; +import com.jero.modules.system.service.ISysUserService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.List; -import java.util.Date; -import java.util.stream.Collectors; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; /** * @Description: 问题知识库评论表 @@ -37,6 +51,24 @@ public class ProblemKnowledgeBaseCommentEOServiceImpl extends ServiceImpl" + " View details" + ""; String contentInfo = msgContentEN + " " + href; + + String ContentENNo = currentUser.getUsername()+" shared " + problemKnowledgeBaseTitle + " with you.Please be reminded to check it out."; + String ContentInfoENYes = currentUser.getUsername()+" shared " + problemKnowledgeBaseTitle + " with you.Please be reminded to check it out."+ " " + href; + + String contentCnNo = currentUser.getUsername()+"向您分享了"+problemKnowledgeBaseTitle+",请查看."; + String contentInfoCnYes = currentUser.getUsername()+"向您分享了"+problemKnowledgeBaseTitle+",请查看"+ " " + href; + + //封装消息的实体类 - SysAnnouncement sysAnnouncement = getSysAnnouncement(userIdList, msgTitle, msgContentEN, contentInfo,MessageTypeEnum.PUSH.getValue(),MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + SysAnnouncement sysAnnouncement = getSysAnnouncement(userIdList, + msgTitle, + ContentENNo, + ContentInfoENYes, + MessageTypeEnum.PUSH.getValue(), + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(), + contentCnNo, + contentInfoCnYes); + this.sysAnnouncementService.saveAnnouncement(sysAnnouncement); this.sendWebsocket(StringUtils.join(thirdIdList, ","), contentInfo); //飞书 try { - this.iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), msgContentEN, MessageTypeEnum.PUSH.getName(), hrefFeishu); + //XXX向您分享了XXXXXXXXX,请查看。 + //XXX shared xxxxxxxx with you. Please be reminded to check it out. + + String contentInfoFeiCn = currentUser.getUsername()+"向您分享了"+problemKnowledgeBaseTitle+",请查看"; + String msgContentENTemp = currentUser.getUsername()+" shared " + problemKnowledgeBaseTitle + " with you.Please be reminded to check it out."; + FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + feishuMsgVo.setTitle(MessageTypeEnum.PUSH.getNameCn()+"/"+MessageTypeEnum.PUSH.getName()); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setContentEn(msgContentENTemp); + feishuMsgVo.setContent(contentInfoFeiCn); + + this.iFeishuService.sendCardMsgTerritory(thirdIdList.toArray(new String[]{}), feishuMsgVo); + +// this.iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), msgContentEN, MessageTypeEnum.PUSH.getName(), hrefFeishu); } catch (IOException e) { log.error("飞书推送失败"); } @@ -908,7 +940,9 @@ public class ProblemKnowledgeBaseEOServiceImpl extends ServiceImpl taskUrg(@RequestBody ProjectTaskUrgVo projectTaskUrgVo) { + return this.projectLawsInventoryEOService.taskUrg(projectTaskUrgVo); + } + + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectLibraryBaseController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectLibraryBaseController.java index 46058eaca..7d87ac22d 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectLibraryBaseController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectLibraryBaseController.java @@ -1,6 +1,6 @@ package com.jero.modules.project.controller; -import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.jero.common.api.vo.Result; import com.jero.common.aspect.annotation.AutoLog; import com.jero.common.system.base.controller.JeroController; @@ -12,7 +12,15 @@ import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; @@ -46,8 +54,9 @@ public class ProjectLibraryBaseController extends JeroController queryPageList(@RequestBody Map params) { - IPage pageList= projectLibraryBaseService.queryPageList(params); - return Result.OK(params.get("cut").toString(),pageList); + List pageList= projectLibraryBaseService.queryPageList(params); + Page pages = projectLibraryBaseService.getPages(Integer.parseInt(params.get("pageNo").toString()), Integer.parseInt(params.get("pageSize").toString()), pageList); + return Result.OK(params.get("cut").toString(),pages); } /** @@ -77,6 +86,20 @@ public class ProjectLibraryBaseController extends JeroController addChild(@Validated @RequestBody ProjectLibraryBase projectLibraryBase) throws ParseException { + projectLibraryBaseService.addChild(projectLibraryBase); + return Result.OK("添加成功!"); + } /** * 编辑 @@ -137,7 +160,7 @@ public class ProjectLibraryBaseController extends JeroController queryById(@RequestParam(name="id",required=true) String id, @RequestParam(name="cut",required=true) String cut) { - List data = projectLibraryBaseService.queryById(id); + List data = projectLibraryBaseService.queryById(id,cut); if(data==null) { return Result.error("未找到对应数据"); } @@ -205,4 +228,45 @@ public class ProjectLibraryBaseController extends JeroController top(String id,String flag) { + projectLibraryBaseService.top(id,flag); + return Result.OK("编辑成功!"); + } + + /** + * 获取项目所有的版本(主版本和子版本的集合) + * @param id 项目id + * @return + */ + @AutoLog(value = "获取项目所有的版本(主版本和子版本的集合)") + @ApiOperation(value="获取项目所有的版本(主版本和子版本的集合)", notes="获取项目所有的版本(主版本和子版本的集合)") + @GetMapping(value = "/getVersionsInfo") + public Result getVersionsInfo(String id) { + List versionsInfoList = projectLibraryBaseService.getVersionsInfo(id); + return Result.OK(versionsInfoList); + } + + /** + * 版本统计 + * @return + */ + @AutoLog(value = "版本统计") + @ApiOperation(value="版本统计)", notes="版本统计") + @PostMapping(value = "/versionStatistics") + public Result versionStatistics(@RequestBody Map params) { + List projectLibraryBasesList = projectLibraryBaseService.versionStatistics(String.valueOf(params.get("id"))); + Page pages = projectLibraryBaseService.getPages(Integer.parseInt(params.get("pageNo").toString()), Integer.parseInt(params.get("pageSize").toString()), projectLibraryBasesList); + return Result.OK(pages); + } + + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectTaskInventoryEOController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectTaskInventoryEOController.java index a15ea842e..197bcb91c 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectTaskInventoryEOController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectTaskInventoryEOController.java @@ -22,9 +22,10 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.List; +import java.util.Map; - /** +/** * @Description: 项目库-任务清单表 * @Author: jero-boot * @Date: 2022-04-29 @@ -231,4 +232,16 @@ public class ProjectTaskInventoryEOController extends JeroController msgList = projectTaskInventoryEOService.verifyRoleCode(projectTaskInventoryVO); return Result.OK(msgList); } + + /** + * 处理历史数据 + * @param params + * @return + */ + @AutoLog(value = "项目库-任务清单表-处理历史数据") + @ApiOperation(value="项目库-任务清单表-处理历史数据", notes="项目库-任务清单表-处理历史数据") + @GetMapping(value = "/disposeHistoryData") + public Result disposeHistoryData(@RequestParam Map params){ + return this.projectTaskInventoryEOService.disposeHistoryData(params); + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectLibraryBase.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectLibraryBase.java index b5eeb4c7e..d831a5896 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectLibraryBase.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectLibraryBase.java @@ -12,7 +12,7 @@ import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; -import java.io.Serializable; +import java.util.List; /** @@ -25,7 +25,7 @@ import java.io.Serializable; @TableName("project_library_base") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -public class ProjectLibraryBase implements Serializable { +public class ProjectLibraryBase implements Comparable { private static final long serialVersionUID = 1L; /**主键*/ @@ -109,4 +109,36 @@ public class ProjectLibraryBase implements Serializable { /**目标市场展示名称*/ @TableField(exist = false) private java.lang.String targetMarketName; + + //主项目id parent_id + private String parentId; + + //项目版本 + private String projectVersion; + + //软件版本 + private String softwareVersion; + + //最后一个版本 + @TableField(exist = false) + private String versionLast; + + //说明 + private String explanation; + + //排序(用于项目置顶) + private String sort; + + //置顶标识(flag为空的时候为置顶, flag为1的时候取消置顶) + private String flag; + + @TableField(exist = false) + private List children; + + @Override + public int compareTo(ProjectLibraryBase o) { + return Integer.valueOf(this.projectVersion)-Integer.valueOf(o.projectVersion);//升序 +// return o.id-this.id;//降序 + } + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/InventoryAffirmNodeEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/InventoryAffirmNodeEnum.java new file mode 100644 index 000000000..c10a37cc5 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/InventoryAffirmNodeEnum.java @@ -0,0 +1,63 @@ +package com.jero.modules.project.enums; + +import com.alibaba.druid.util.StringUtils; +import com.jero.common.constant.enums.CutEnum; + +/** + * 清单确认节点枚举类 + */ +public enum InventoryAffirmNodeEnum { + + INITIATED_BY_STUDIO_ENGINEERS("studiofq","R&H Studio发起","R&H Studio initiate"), + HOMOLOGATION_ENGINEER_AUDIT ("homologationEngineer audit","认证审核","homologationEngineer audit"), + REGULATION_OWNER_AUDIT("regulationOwner audit","法规审核","regulationOwner audit"), + ; + + String key; + String cnName; + String enName; + + private InventoryAffirmNodeEnum(String key, String cnName, String enName) { + this.key = key; + this.cnName = cnName; + this.enName = enName; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getCnName() { + return cnName; + } + + public void setCnName(String cnName) { + this.cnName = cnName; + } + + public String getEnName() { + return enName; + } + + public void setEnName(String enName) { + this.enName = enName; + } + + public static String getTextByValue(String key,String cut) { + InventoryAffirmNodeEnum[] values = values(); + for (InventoryAffirmNodeEnum inventoryAffirmNodeEnum : values) { + if (inventoryAffirmNodeEnum.key.equals(key)) { + if(StringUtils.equals(cut, CutEnum.CN.getValue())){ + return inventoryAffirmNodeEnum.cnName; + }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ + return inventoryAffirmNodeEnum.enName; + } + } + } + return null; + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/JumpLinkEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/JumpLinkEnum.java index 85f2b4d9f..3a763eed5 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/JumpLinkEnum.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/JumpLinkEnum.java @@ -18,6 +18,8 @@ public enum JumpLinkEnum { VERIFY_AFFIRM_LINK("验证符合性确认链接","3","/ProjectDetails?id=","&type=103"), DESIGN_AFFIRM_LINK("设计符合性确认链接","4","/ProjectDetails?id=","&type=103"), TASK_AFFIRM_LINK("任务确认链接","2","/ProcessCenter",""), + FGPG_TODO_CENTER_LINK("法规评估任务待办中心链接","88","/regulatoryAssessmentTasks",""), + XMCS_TODO_CENTER_LINK("项目参数任务待办中心链接","99","/projectParameterTasks",""), COMPLIANCE_PROCESS_DETAIL_LINK("符合性流程明细页路由","2","/taskListProcess",""), PROBLEM_KNOWLEDGE_BASE_DETAIL("问题知识库,详情页","","/problemKnowledgeBaseView",""), diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/MsgTypeEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/MsgTypeEnum.java index c78462df3..6d7ec78d3 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/MsgTypeEnum.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/MsgTypeEnum.java @@ -34,12 +34,18 @@ public enum MsgTypeEnum { LAWS_OPOMOPM_GATHER_START_MSG("法规意见收集发起消息","lawsOpomopmGatherStartMsg"), LAWS_OPOMOPM_GATHER_ENALUATOR_SUBMIT_MSG("法规意见收集评估人提交任务消息","lawsOpomopmGatherEnaluatorSubmitMsg"), LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_MSG("法规意见收集到期前一天消息","lawsOpomopmGatherExpireRemindMsg"), + LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_THREE_DAYS_BEFORE_MSG("法规意见收集到期前三天消息","lawsOpomopmGatherExpireRemindThreeDaysBeforeMsg"), + LAWS_OPOMOPM_GATHER_ENALUATOR_EXPIRE_REMIND_TODAY_MSG("法规意见收集到期当天消息","lawsOpomopmGatherExpireRemindTodayMsg"), + LAWS_OPOMOPM_GATHER_COMPLETE_MSG("法规意见收集任务完成通知消息","lawsOpomopmGatherCompleteMsg"), + LAWS_TECHNOLOGY_EVALUATION_START_MSG("法规技术评估发起消息","lawsTechnologyEvaluationStartMsg"), LAWS_TECHNOLOGY_EVALUATION_ENALUATOR_SUBMIT_MSG("法规技术评估,评估人提交任务消息","lawsTechnologyEvaluationEnaluatorSubmitMsg"), LAWS_TECHNOLOGY_EVALUATION_AUDIT_ACCEPTED_MSG("法规技术评估,发起人审核通过消息","lawsTechnologyEvaluationAuditAcceptedMsg"), LAWS_TECHNOLOGY_EVALUATION_AUDIT_REJECTED_MSG("法规技术评估,发起人审核拒绝消息","lawsTechnologyEvaluationAuditRejectedMsg"), LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_MSG("法规技术评估到期前一天消息","lawsTechnologyEvaluationExpireRemindMsg"), + LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_THREE_DAYS_BEFORE_MSG("法规技术评估到期前三天消息","lawsTechnologyEvaluationExpireRemindThreeDaysBeforeMsg"), + LAWS_TECHNOLOGY_EVALUATION_EXPIRE_REMIND_TODAY_MSG("法规技术评估到期当天消息","lawsTechnologyEvaluationExpireRemindTodayMsg"), ; String name; diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/OperatorTypeEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/OperatorTypeEnum.java index 5e2058238..731d28c0f 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/OperatorTypeEnum.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/OperatorTypeEnum.java @@ -11,6 +11,7 @@ public enum OperatorTypeEnum { * 工作流调用后台操作类型 */ ADD("添加","add"), + UPDATE("更新","update"), UPDATE_STATUS("修改状态","updateStatus"), DELETE("删除","delete"), QUERY("查询","query"), @@ -40,6 +41,11 @@ public enum OperatorTypeEnum { ADD_LAWS_OPINION_GATHER("添加法规意见收集数据","addLawsOpinionGather"), UPDATE_LAWS_OPINION_GATHER_GATHER_RESULT("更新法规意见收集数据收集结果","updateLawsOpinionGatherGatherResult"), + + /** + * 流程信息明细表 + */ + UPDATE_PROCESS_INFO_DETAIL_BY_TASK_ID("根据taskId更新流程信息明细表","updateProcessInfoDetailByTaskId"), ; String name; diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/TopEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/TopEnum.java new file mode 100644 index 000000000..f54bbb021 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/TopEnum.java @@ -0,0 +1,44 @@ +package com.jero.modules.project.enums; + +/** + * 任务状态枚举类 + */ +public enum TopEnum { + TOP_CANCEL("取消置顶","1"), + ; + + + String name; + String value; + + private TopEnum(String name, String value) { + this.name = name; + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public static String getTextByValue(String value) { + TopEnum[] values = values(); + for (TopEnum taskStatusEnum : values) { + if (taskStatusEnum.value.equals(value)) { + return taskStatusEnum.name; + } + } + return null; + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/InventoryAffirmJob.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/InventoryAffirmJob.java index 1fbef43a5..dae07a815 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/InventoryAffirmJob.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/InventoryAffirmJob.java @@ -1,7 +1,13 @@ package com.jero.modules.project.job; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.constant.enums.MessageType2Enum; import com.jero.common.constant.enums.MessageTypeEnum; +import com.jero.common.constant.enums.MsgColorEnum; +import com.jero.modules.document.entity.BussDocumentLibraryEO; +import com.jero.modules.document.service.IBussDocumentLibraryEOService; +import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.feishu.vo.FeishuMsg2Vo; import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.project.entity.ProjectLawsInventoryEO; import com.jero.modules.project.entity.ProjectLibraryBase; @@ -15,8 +21,11 @@ import com.jero.modules.project.mapper.ProjectLibraryBaseMapper; import com.jero.modules.project.mapper.ProjectNameInfoEOMapper; import com.jero.modules.project.mapper.ProjectYearNameInfoEOMapper; import com.jero.modules.project.service.IProjectLawsInventoryEOService; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.service.ISysUserService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.quartz.Job; import org.quartz.JobExecutionContext; @@ -24,6 +33,7 @@ import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -49,16 +59,24 @@ public class InventoryAffirmJob implements Job { @Autowired private ProjectYearNameInfoEOMapper projectYearNameInfoEOMapper; + @Autowired + private IFeishuService feishuService; + @Value(value = "${jero.backUrl}") private String backUrl; + @Autowired + private ISysUserService sysUserService; + @Autowired + private IBussDocumentLibraryEOService bussDocumentLibraryEOService; + /** * 清单任务到达截止时间后,给用户发送消息 */ @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { - log.info("清单确认流程,定时任务开启 ====================================================="); - //获取状态为待确认的数据 + log.info("清单确认流程,定时任务开启 ====================================================="); + /* //获取状态为待确认的数据 QueryWrapper queryWrapperInventory = new QueryWrapper<>(); queryWrapperInventory.lambda().eq(ProjectLawsInventoryEO::getInventoryAffirmStatus, InventoryAffirmStatusEnum.LIST_TO_CONFIRM.getValue()); List projectLawsInventoryEOList = projectLawsInventoryEOMapper.selectList(queryWrapperInventory); @@ -96,125 +114,269 @@ public class InventoryAffirmJob implements Job { projectYearInfoEOQueryWrapper.lambda().eq(ProjectYearNameInfoEO::getId,projectLibraryBase.getYearNameId()); ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper); - List threeDaysUserIdList = new ArrayList<>(); - List currentDaysUserIdList = new ArrayList<>(); + + Map> threeDaysMap = new HashMap<>(); + Map> currentDaysMap = new HashMap<>(); + Map> overdueMap = new HashMap<>(); for (ProjectLawsInventoryEO projectLawsInventoryEO : projectLawsInventoryEOList) { if(StringUtils.equals(projectLibraryBase.getId(),projectLawsInventoryEO.getProjectLibraryId())){ if(projectLawsInventoryEO.getInventoryAffirmDueDate() != null){ //如果清单确认结束日期是当前日期 if(StringUtils.equals(currentDateStr,sdf.format(projectLawsInventoryEO.getInventoryAffirmDueDate()))){ + List currentDaysUserIdList = new ArrayList<>(); if(StringUtils.isEmpty(projectLawsInventoryEO.getSendMsgFlag())){ - if(StringUtils.isNotEmpty(projectLawsInventoryEO.getRegulationOwnerId()) && StringUtils.isEmpty(projectLawsInventoryEO.getRegulationOwnerSubmitStatus())){ - currentDaysUserIdList.add(projectLawsInventoryEO.getRegulationOwnerId()); - } - if(StringUtils.isNotEmpty(projectLawsInventoryEO.getHomologationEngineerId()) && StringUtils.isEmpty(projectLawsInventoryEO.getHomologationEngineerSubmitStatus())){ - currentDaysUserIdList.add(projectLawsInventoryEO.getHomologationEngineerId()); + //if(StringUtils.isNotEmpty(projectLawsInventoryEO.getRegulationOwnerId()) && StringUtils.isEmpty(projectLawsInventoryEO.getRegulationOwnerSubmitStatus())){ + // currentDaysUserIdList.add(projectLawsInventoryEO.getRegulationOwnerId()); + //} + //if(StringUtils.isNotEmpty(projectLawsInventoryEO.getHomologationEngineerId()) && StringUtils.isEmpty(projectLawsInventoryEO.getHomologationEngineerSubmitStatus())){ + // currentDaysUserIdList.add(projectLawsInventoryEO.getHomologationEngineerId()); + //} + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getHomologationEngineerSubmitStatus())||StringUtils.isNotEmpty(projectLawsInventoryEO.getRegulationOwnerSubmitStatus())) { + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getEngineeringInterfacePerson())) { + currentDaysUserIdList.add(projectLawsInventoryEO.getEngineeringInterfacePerson()); + } } projectLawsInventoryEO.setSendMsgFlag(SendMsgFlagEnum.FALSE.getValue()); projectLawsInventoryEOMapper.updateById(projectLawsInventoryEO); } + if (ObjectUtils.isNotEmpty(currentDaysUserIdList)) { + currentDaysMap.put(projectLawsInventoryEO.getId(), currentDaysUserIdList); + } } //如果清单确认结束时间是当前系统时间后三天 if(StringUtils.equals(threeDaysStr,sdf.format(projectLawsInventoryEO.getInventoryAffirmDueDate()))){ + List threeDaysUserIdList = new ArrayList<>(); if(StringUtils.isEmpty(projectLawsInventoryEO.getSendMsgCurrentFlag())){ - if(StringUtils.isNotEmpty(projectLawsInventoryEO.getRegulationOwnerId()) && StringUtils.isEmpty(projectLawsInventoryEO.getRegulationOwnerSubmitStatus())){ - threeDaysUserIdList.add(projectLawsInventoryEO.getRegulationOwnerId()); - } - if(StringUtils.isNotEmpty(projectLawsInventoryEO.getHomologationEngineerId()) && StringUtils.isEmpty(projectLawsInventoryEO.getHomologationEngineerSubmitStatus())){ - threeDaysUserIdList.add(projectLawsInventoryEO.getHomologationEngineerId()); + //if(StringUtils.isNotEmpty(projectLawsInventoryEO.getRegulationOwnerId()) && StringUtils.isEmpty(projectLawsInventoryEO.getRegulationOwnerSubmitStatus())){ + // threeDaysUserIdList.add(projectLawsInventoryEO.getRegulationOwnerId()); + //} + //if(StringUtils.isNotEmpty(projectLawsInventoryEO.getHomologationEngineerId()) && StringUtils.isEmpty(projectLawsInventoryEO.getHomologationEngineerSubmitStatus())){ + // threeDaysUserIdList.add(projectLawsInventoryEO.getHomologationEngineerId()); + //} + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getHomologationEngineerSubmitStatus())||StringUtils.isNotEmpty(projectLawsInventoryEO.getRegulationOwnerSubmitStatus())) { + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getEngineeringInterfacePerson())) { + threeDaysUserIdList.add(projectLawsInventoryEO.getEngineeringInterfacePerson()); + } } projectLawsInventoryEO.setSendMsgCurrentFlag(SendMsgFlagEnum.FALSE.getValue()); projectLawsInventoryEOMapper.updateById(projectLawsInventoryEO); } + if (ObjectUtils.isNotEmpty(threeDaysUserIdList)) { + threeDaysMap.put(projectLawsInventoryEO.getId(), threeDaysUserIdList); + } } + + //逾期3天、七天、14天 + Calendar day3Later=new GregorianCalendar(); + day3Later.setTime(projectLawsInventoryEO.getInventoryAffirmDueDate()); + day3Later.add(Calendar.DATE,3); + Date overdue3Days = day3Later.getTime(); + + Calendar day7Later=new GregorianCalendar(); + day7Later.setTime(projectLawsInventoryEO.getInventoryAffirmDueDate()); + day7Later.add(Calendar.DATE,7); + Date overdue7Days = day7Later.getTime(); + + Calendar day14Later=new GregorianCalendar(); + day14Later.setTime(projectLawsInventoryEO.getInventoryAffirmDueDate()); + day14Later.add(Calendar.DATE,14); + Date overdue14Days = day14Later.getTime(); + + if(StringUtils.equals(sdf.format(overdue3Days),sdf.format(projectLawsInventoryEO.getInventoryAffirmDueDate())) + ||StringUtils.equals(sdf.format(overdue7Days),sdf.format(projectLawsInventoryEO.getInventoryAffirmDueDate())) + ||StringUtils.equals(sdf.format(overdue14Days),sdf.format(projectLawsInventoryEO.getInventoryAffirmDueDate()))){ + List overdueUserIdList = new ArrayList<>(); + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getHomologationEngineerSubmitStatus())||StringUtils.isNotEmpty(projectLawsInventoryEO.getRegulationOwnerSubmitStatus())) { + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getEngineeringInterfacePerson())) { + overdueUserIdList.add(projectLawsInventoryEO.getEngineeringInterfacePerson()); + } + } + if (ObjectUtils.isNotEmpty(overdueUserIdList)) { + overdueMap.put(projectLawsInventoryEO.getId(), overdueUserIdList); + } + } + } } } - if(CollectionUtils.isNotEmpty(threeDaysUserIdList)){ - threeDaysUserIdList = threeDaysUserIdList.stream().distinct().collect(Collectors.toList()); + //飞书跳转链接 + String hrefFeishu = backUrl + + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() + + projectLibraryBase.getId() + + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType() + + "&projectName=" + projectNameInfoEO.getProjectName() + "-" + + projectYearNameInfoEO.getYearName() + + "&targetMarket=" + projectLibraryBase.getTargetMarket(); - /*String msgContentCN = "您" + projectLibraryBase.getProjectName() + "(项目名称)法规清单的任务确认剩余处理时间还有3天,请及时查看处理";*/ + //项目名称 + String PRN = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + "-" + projectLibraryBase.getTargetMarket() + "-" + projectLibraryBase.getProjectVersion(); + if(!threeDaysMap.isEmpty()){ + for (String key : threeDaysMap.keySet()) { + List threeDaysUserIdList = threeDaysMap.get(key); + threeDaysUserIdList = threeDaysUserIdList.stream().distinct().collect(Collectors.toList()); + List thirdIdList = new ArrayList<>(); + List sysUsers = sysUserService.listByIds(threeDaysUserIdList); + if (ObjectUtils.isNotEmpty(sysUsers)) { + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + //法规中英文 + ProjectLawsInventoryEO projectLawsInventoryEO = projectLawsInventoryEOMapper.selectById(key); + BussDocumentLibraryEO bussDocumentLibraryEO = bussDocumentLibraryEOService.queryById(projectLawsInventoryEO.getStandId()); + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(MessageType2Enum.REGULATION_TASK_CONFIRMATION.getCn() + "/" + MessageType2Enum.REGULATION_TASK_CONFIRMATION.getEn()); + feishuMsgVo.setCnContentUpper("您好,该任务将于3天后到期,请及时查看处理,谢谢!"); + feishuMsgVo.setCnContentLower("项目: " + PRN + + "\n法规: " + projectLawsInventoryEO.getSerialNumber() + " " + projectLawsInventoryEO.getTitle() + + "\n发起人: 系统通知"); + feishuMsgVo.setEnContentUpper("Hello! This task will expire in 3 days. Please check and address it in a timely manner. Thank you!"); + feishuMsgVo.setEnContentLower("Project:" + PRN + + "\nRegulation No: " + projectLawsInventoryEO.getSerialNumber() + " " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + + } + + + *//*String msgContentCN = "您" + projectLibraryBase.getProjectName() + "(项目名称)法规清单的任务确认剩余处理时间还有3天,请及时查看处理";*//* // XXX . - String msgContentEN = "The remaining processing time for the regulation task confirmation for " - + projectNameInfoEO.getProjectName() + "-" - + projectYearNameInfoEO.getYearName()+ " " - + projectLibraryBase.getTargetMarket() - + " are 3 days. Please check and address it in a timely manner."; - String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName()+ " " + projectLibraryBase.getTargetMarket() - + ": You have a regulation task confirmation to complete"; + //String msgContentEN = "The remaining processing time for the regulation task confirmation for " + // + projectNameInfoEO.getProjectName() + "-" + // + projectYearNameInfoEO.getYearName()+ " " + // + projectLibraryBase.getTargetMarket() + // + " are 3 days. Please check and address it in a timely manner."; + //String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName()+ " " + projectLibraryBase.getTargetMarket() + // + ": You have a regulation task confirmation to complete"; + + //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 Task Confirmation"); + //feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); - 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 Task 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 = "" + " View details" + ""; - String contentInfo = msgContentEN + " " + href; - Map sendMessageMap = new HashMap<>(); - sendMessageMap.put("hrefFeishu",hrefFeishu); - sendMessageMap.put("contentInfo",contentInfo); + //String href = "" + " View details" + ""; + //String contentInfo = msgContentEN + " " + href; + //Map sendMessageMap = new HashMap<>(); + // sendMessageMap.put("hrefFeishu",hrefFeishu); + //sendMessageMap.put("contentInfo",contentInfo); //发送消息 - projectLawsInventoryEOService.sendMessage(msgTitle, msgContentEN, threeDaysUserIdList, projectLibraryBase.getId(), sendMessageMap, feishuMsgVo, MessageTypeEnum.LIST_CONFIRMATION,MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + //projectLawsInventoryEOService.sendMessage(msgTitle, msgContentEN, threeDaysUserIdList, projectLibraryBase.getId(), sendMessageMap, feishuMsgVo, MessageTypeEnum.LIST_CONFIRMATION,MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); } - if(CollectionUtils.isNotEmpty(currentDaysUserIdList)){ - currentDaysUserIdList = currentDaysUserIdList.stream().distinct().collect(Collectors.toList()); + if(!currentDaysMap.isEmpty()){ + for (String key : currentDaysMap.keySet()) { + List currentDaysUserIdList = currentDaysMap.get(key); + currentDaysUserIdList = currentDaysUserIdList.stream().distinct().collect(Collectors.toList()); + List thirdIdList = new ArrayList<>(); + List sysUsers = sysUserService.listByIds(currentDaysUserIdList); + if (ObjectUtils.isNotEmpty(sysUsers)) { + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + //法规中英文 + ProjectLawsInventoryEO projectLawsInventoryEO = projectLawsInventoryEOMapper.selectById(key); + BussDocumentLibraryEO bussDocumentLibraryEO = bussDocumentLibraryEOService.queryById(projectLawsInventoryEO.getStandId()); + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(MessageType2Enum.REGULATION_TASK_CONFIRMATION.getCn() + "/" + MessageType2Enum.REGULATION_TASK_CONFIRMATION.getEn()); + feishuMsgVo.setCnContentUpper("您好,该任务今天即将到期,请尽快查看处理,谢谢!"); + feishuMsgVo.setCnContentLower("项目: " + PRN + + "\n法规: " + projectLawsInventoryEO.getSerialNumber() + " " +projectLawsInventoryEO.getTitle() + + "\n发起人: 系统通知"); + feishuMsgVo.setEnContentUpper("Hello! This task will expire today. Please check and address the task ASAP. Thank you!"); + feishuMsgVo.setEnContentLower("Project:" + PRN + + "\nRegulation No: " + projectLawsInventoryEO.getSerialNumber() + " " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } - /*String msgContentCN = "您" + projectLibraryBase.getProjectName() + "(项目名称)法规清单的任务今天即将结束,请及时查看处理*/ - String msgContentEN = "The regulation task confirmation for " - + projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() - + " will expire today. Please check and address it in a timely manner."; - String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName()+ " " + projectLibraryBase.getTargetMarket() - + ": You have a regulation task confirmation to complete"; - FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); - feishuMsgVo.setContent("Hello! The task will expire today. Please check and address it in a timely manner."); - feishuMsgVo.setTaskType("Regulation Task Confirmation"); - feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + *//*String msgContentCN = "您" + projectLibraryBase.getProjectName() + "(项目名称)法规清单的任务今天即将结束,请及时查看处理*//* + //String msgContentEN = "The regulation task confirmation for " + // + projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + " will expire today. Please check and address it in a timely manner."; + //String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName()+ " " + projectLibraryBase.getTargetMarket() + // + ": You have a regulation task confirmation to complete"; + + //FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + //feishuMsgVo.setContent("Hello! The task will expire today. Please check and address it in a timely manner."); + //feishuMsgVo.setTaskType("Regulation Task 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 = "" + " View details" + ""; - String contentInfo = msgContentEN + " " + href; - Map sendMessageMap = new HashMap<>(); - sendMessageMap.put("hrefFeishu",hrefFeishu); - sendMessageMap.put("contentInfo",contentInfo); + //String href = "" + " View details" + ""; + //String contentInfo = msgContentEN + " " + href; + //Map sendMessageMap = new HashMap<>(); + //sendMessageMap.put("hrefFeishu",hrefFeishu); + //sendMessageMap.put("contentInfo",contentInfo); //发送消息 - projectLawsInventoryEOService.sendMessage(msgTitle, msgContentEN, currentDaysUserIdList, projectLibraryBase.getId(), sendMessageMap, feishuMsgVo, MessageTypeEnum.LIST_CONFIRMATION,MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + //projectLawsInventoryEOService.sendMessage(msgTitle, msgContentEN, currentDaysUserIdList, projectLibraryBase.getId(), sendMessageMap, feishuMsgVo, MessageTypeEnum.LIST_CONFIRMATION,MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); } + + if(!overdueMap.isEmpty()){ + for (String key : overdueMap.keySet()) { + List overdueUserIdList = overdueMap.get(key); + overdueUserIdList = overdueUserIdList.stream().distinct().collect(Collectors.toList()); + List thirdIdList = new ArrayList<>(); + List sysUsers = sysUserService.listByIds(overdueUserIdList); + if (ObjectUtils.isNotEmpty(sysUsers)) { + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + //法规中英文 + ProjectLawsInventoryEO projectLawsInventoryEO = projectLawsInventoryEOMapper.selectById(key); + BussDocumentLibraryEO bussDocumentLibraryEO = bussDocumentLibraryEOService.queryById(projectLawsInventoryEO.getStandId()); + + String dueDate = sdf.format(projectLawsInventoryEO.getInventoryAffirmDueDate()); + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(MessageType2Enum.REGULATION_TASK_CONFIRMATION.getCn() + "/" + MessageType2Enum.REGULATION_TASK_CONFIRMATION.getEn()); + feishuMsgVo.setCnContentUpper("您好,该任务已逾期,请尽快处理,谢谢!"); + feishuMsgVo.setCnContentLower("项目: " + PRN + + "\n法规: " + projectLawsInventoryEO.getSerialNumber() + " " + projectLawsInventoryEO.getTitle() + + "\n发起人: 系统通知" + + "\n截止时间: " + dueDate); + feishuMsgVo.setEnContentUpper("Hello! This task is overdue. Please address it ASAP. Thank you!"); + feishuMsgVo.setEnContentLower("Project:" + PRN + + "\nRegulation No: " + projectLawsInventoryEO.getSerialNumber() + " " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName() + + "\nDue Date: " + dueDate); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.YELLOW.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + } + } } - } + }*/ log.info("清单确认流程,定时任务结束 ====================================================="); } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/PrehomoJob.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/PrehomoJob.java index ac17549ce..915893fa7 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/PrehomoJob.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/PrehomoJob.java @@ -1,7 +1,13 @@ package com.jero.modules.project.job; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.constant.enums.MessageType2Enum; import com.jero.common.constant.enums.MessageTypeEnum; +import com.jero.common.constant.enums.MsgColorEnum; +import com.jero.modules.document.entity.BussDocumentLibraryEO; +import com.jero.modules.document.service.IBussDocumentLibraryEOService; +import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.feishu.vo.FeishuMsg2Vo; import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.project.entity.*; import com.jero.modules.project.enums.DesignComplianceStatusEnum; @@ -14,8 +20,11 @@ import com.jero.modules.project.mapper.ProjectNameInfoEOMapper; import com.jero.modules.project.mapper.ProjectYearNameInfoEOMapper; import com.jero.modules.project.service.IProjectLawsInventoryEOService; import com.jero.modules.project.service.IProjectTaskInventoryEOService; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.service.ISysUserService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.quartz.Job; import org.quartz.JobExecutionContext; @@ -23,6 +32,7 @@ import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -53,6 +63,13 @@ public class PrehomoJob implements Job { @Value(value = "${jero.backUrl}") private String backUrl; + @Autowired + private IBussDocumentLibraryEOService bussDocumentLibraryEOService; + @Autowired + private ISysUserService sysUserService; + @Autowired + private IFeishuService feishuService; + @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { log.info("prehomo流程,定时任务开启 ====================================================="); @@ -60,7 +77,10 @@ public class PrehomoJob implements Job { //查询出已经启动了prehomo流程的数据。 并且流程没有结束。 QueryWrapper queryProjectTaskInventoryWrapper = new QueryWrapper<>(); queryProjectTaskInventoryWrapper.isNotNull("prehomo_p_id"); - queryProjectTaskInventoryWrapper.lambda().ne(ProjectTaskInventoryEO::getPrehomoStatus, DesignComplianceStatusEnum.REVIEW_COMPLETED.getValue()); + List status = new ArrayList<>(); + status.add(DesignComplianceStatusEnum.TO_SUBMIT.getValue()); + status.add(DesignComplianceStatusEnum.REVIEW_THE_RETURN.getValue()); + queryProjectTaskInventoryWrapper.lambda().in(ProjectTaskInventoryEO::getPrehomoStatus, status); List projectTaskInventoryEOList = projectTaskInventoryEOService.getBaseMapper().selectList(queryProjectTaskInventoryWrapper); if(CollectionUtils.isNotEmpty(projectTaskInventoryEOList)){ @@ -81,15 +101,24 @@ public class PrehomoJob implements Job { Date currentDate = new Date(); - //获取后三天前的时间 - Calendar calendar=new GregorianCalendar(); - calendar.setTime(new Date()); - calendar.add(Calendar.DATE,3); - Date threeDays = calendar.getTime(); - - String threeDaysStr = sdf.format(threeDays); + //两周 + Calendar twoWeeksLaterCalendar=new GregorianCalendar(); + twoWeeksLaterCalendar.setTime(new Date()); + twoWeeksLaterCalendar.add(Calendar.DATE,14); + Date twoWeeksLaterDays = twoWeeksLaterCalendar.getTime(); + String twoWeeksLaterDaysStr = sdf.format(twoWeeksLaterDays); + //一周 + Calendar oneWeekLaterCalendar=new GregorianCalendar(); + oneWeekLaterCalendar.setTime(new Date()); + oneWeekLaterCalendar.add(Calendar.DATE,7); + Date oneWeekLaterDays = oneWeekLaterCalendar.getTime(); + String oneWeekLaterDaysStr = sdf.format(oneWeekLaterDays); + //当天 String currentDateStr = sdf.format(currentDate); + String msgTitle = MessageType2Enum.PRE_HOMO_CONFIRMATION.getCn() + "/" + MessageType2Enum.PRE_HOMO_CONFIRMATION.getEn(); + + for (ProjectLibraryBase projectLibraryBase : projectLibraryBaseList) { QueryWrapper projectNameInfoEOQueryWrapper = new QueryWrapper<>(); projectNameInfoEOQueryWrapper.lambda().eq(ProjectNameInfoEO::getId,projectLibraryBase.getProjectNameId()); @@ -99,115 +128,234 @@ public class PrehomoJob implements Job { projectYearInfoEOQueryWrapper.lambda().eq(ProjectYearNameInfoEO::getId,projectLibraryBase.getYearNameId()); ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper); + //项目名称 + String projectVersion = (com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getParentId()) && com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getProjectVersion())) ? "00" : projectLibraryBase.getProjectVersion(); + String projectName = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + "-" + projectLibraryBase.getTargetMarket() + "-" + projectVersion; for (ProjectLawsInventoryEO projectLawsInventoryEO: projectLawsInventoryEOList) { - List threeDaysUserIdList = new ArrayList<>(); - List currentDaysUserIdList = new ArrayList<>(); - for (ProjectTaskInventoryEO projectTaskInventoryEO : projectTaskInventoryEOList) { - if(StringUtils.equals(projectTaskInventoryEO.getProjectLawsInventoryId(),projectLawsInventoryEO.getId())){ - if(projectLawsInventoryEO.getPrehomoDueDate() != null){ - //如果prehomo - 结束日期是当前日期 - if(StringUtils.equals(currentDateStr,sdf.format(projectLawsInventoryEO.getPrehomoDueDate()))){ - if(StringUtils.isEmpty(projectTaskInventoryEO.getPrehomoSendMsgFlag())){ - if(StringUtils.isNotEmpty(projectLawsInventoryEO.getPrehomoDutyId())){ - currentDaysUserIdList.add(projectLawsInventoryEO.getPrehomoDutyId()); - }if(StringUtils.isNotEmpty(projectLawsInventoryEO.getPrehomoInitiatorId())){ - currentDaysUserIdList.add(projectLawsInventoryEO.getPrehomoInitiatorId()); - } - projectTaskInventoryEO.setPrehomoSendMsgFlag(SendMsgFlagEnum.FALSE.getValue()); - projectTaskInventoryEOService.updateById(projectTaskInventoryEO); - } + //法规中英文 + String LAW_CN = projectLawsInventoryEO.getSerialNumber() + " " + projectLawsInventoryEO.getTitle();//法规 + BussDocumentLibraryEO bussDocumentLibraryEO = bussDocumentLibraryEOService.queryById(projectLawsInventoryEO.getStandId()); + String LAW_EN = ""; + if (ObjectUtils.isEmpty(bussDocumentLibraryEO)) { + LAW_EN = LAW_CN; + } else { + LAW_EN = projectLawsInventoryEO.getSerialNumber() + " " + bussDocumentLibraryEO.getTitleEn();//法规 + } + + List twoWeeksLaterUserIdList = new ArrayList<>(); + List oneWeeksLaterUserIdList = new ArrayList<>(); + List currentDaysUserIdList = new ArrayList<>(); + List dueUserIdList = new ArrayList<>(); + + if(StringUtils.equals(projectLawsInventoryEO.getProjectLibraryId(),projectLibraryBase.getId())){ + if(projectLawsInventoryEO.getPrehomoDueDate() != null){ + //如果prehomo - 结束日期是当前日期 + if(StringUtils.equals(currentDateStr,sdf.format(projectLawsInventoryEO.getPrehomoDueDate()))){ + if(StringUtils.isNotEmpty(projectLawsInventoryEO.getPrehomoDutyId())){ + currentDaysUserIdList.add(projectLawsInventoryEO.getPrehomoDutyId()); } - //如果prehomo - 结束日期是三天后的日期 - if(StringUtils.equals(threeDaysStr,sdf.format(projectLawsInventoryEO.getPrehomoDueDate()))){ - if(StringUtils.isEmpty(projectTaskInventoryEO.getPrehomoSendMsgCurrentFlag())){ - if(StringUtils.isNotEmpty(projectLawsInventoryEO.getPrehomoDutyId())){ - threeDaysUserIdList.add(projectLawsInventoryEO.getPrehomoDutyId()); - }if(StringUtils.isNotEmpty(projectLawsInventoryEO.getPrehomoInitiatorId())){ - threeDaysUserIdList.add(projectLawsInventoryEO.getPrehomoInitiatorId()); - } - projectTaskInventoryEO.setPrehomoSendMsgCurrentFlag(SendMsgFlagEnum.FALSE.getValue()); - projectTaskInventoryEOService.updateById(projectTaskInventoryEO); - } + } + //如果prehomo - 结束日期是两周后的日期 + if(StringUtils.equals(twoWeeksLaterDaysStr,sdf.format(projectLawsInventoryEO.getPrehomoDueDate()))){ + if(StringUtils.isNotEmpty(projectLawsInventoryEO.getPrehomoDutyId())){ + twoWeeksLaterUserIdList.add(projectLawsInventoryEO.getPrehomoDutyId()); + } + } + //如果prehomo - 结束日期是一周后的日期 + if(StringUtils.equals(oneWeekLaterDaysStr,sdf.format(projectLawsInventoryEO.getDesignDueDate()))){ + if(StringUtils.isNotEmpty(projectLawsInventoryEO.getDesignDutyId())){ + oneWeeksLaterUserIdList.add(projectLawsInventoryEO.getDesignDutyId()); + } + } + //如果prehomo - 逾期后每天通知 + if (!StringUtils.equals(currentDateStr,sdf.format(projectLawsInventoryEO.getPrehomoDueDate()))&&projectLawsInventoryEO.getDesignDueDate().before(currentDate)) { + if(StringUtils.isNotEmpty(projectLawsInventoryEO.getDesignDutyId())){ + dueUserIdList.add(projectLawsInventoryEO.getDesignDutyId()); } } } } - if(CollectionUtils.isNotEmpty(threeDaysUserIdList)){ - threeDaysUserIdList = threeDaysUserIdList.stream().distinct().collect(Collectors.toList()); + + String hrefFeishu = backUrl + + JumpLinkEnum.PREHOMO_AFFIRM_LINK.getLink() + + projectLibraryBase.getId() + + JumpLinkEnum.PREHOMO_AFFIRM_LINK.getType() + + "&projectName=" + projectNameInfoEO.getProjectName(); + + if (ObjectUtils.isNotEmpty(dueUserIdList)) { + dueUserIdList = dueUserIdList.stream().distinct().collect(Collectors.toList()); + List sysUsers = sysUserService.listByIds(dueUserIdList); + List thirdIdList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(sysUsers)){ + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(msgTitle); + feishuMsgVo.setCnContentUpper("您好,您的任务已逾期,请尽快查看处理"); + feishuMsgVo.setCnContentLower("项目: " + projectName + + "\n法规: " + LAW_CN + + "\n发起人: 系统通知"+ + "\n截止时间: "+ sdf.format(projectLawsInventoryEO.getDesignDueDate())); + feishuMsgVo.setEnContentUpper("Hello! Your task is overdue. Please check and address it ASAP"); + feishuMsgVo.setEnContentLower("Project: " + projectName + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()+ + "\nDue Date: "+ sdf.format(projectLawsInventoryEO.getDesignDueDate())); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.YELLOW.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + + if (ObjectUtils.isNotEmpty(oneWeeksLaterUserIdList)) { + oneWeeksLaterUserIdList = oneWeeksLaterUserIdList.stream().distinct().collect(Collectors.toList()); + List sysUsers = sysUserService.listByIds(oneWeeksLaterUserIdList); + List thirdIdList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(sysUsers)){ + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(msgTitle); + feishuMsgVo.setCnContentUpper("您好,您的任务将于7天后结束,请及时查看处理"); + feishuMsgVo.setCnContentLower("项目: " + projectName + + "\n法规: " + LAW_CN + + "\n发起人: 系统通知"); + feishuMsgVo.setEnContentUpper("Hello! Your task will end in 7 days. Please check and address it in a timely manner"); + feishuMsgVo.setEnContentLower("Project: " + projectName + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + + if(CollectionUtils.isNotEmpty(twoWeeksLaterUserIdList)){ + twoWeeksLaterUserIdList = twoWeeksLaterUserIdList.stream().distinct().collect(Collectors.toList()); + List sysUsers = sysUserService.listByIds(twoWeeksLaterUserIdList); + List thirdIdList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(sysUsers)){ + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(msgTitle); + feishuMsgVo.setCnContentUpper("您好,您的任务将于14天后结束,请及时查看处理"); + feishuMsgVo.setCnContentLower("项目: " + projectName + + "\n法规: " + LAW_CN + + "\n发起人: 系统通知"); + feishuMsgVo.setEnContentUpper("Hello! Your task will end in 14 days. Please check and address it in a timely manner"); + feishuMsgVo.setEnContentLower("Project: " + projectName + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } //您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() + "-" - + projectYearNameInfoEO.getYearName()+ " " - + projectLibraryBase.getTargetMarket() - + " are 3 days. Please check and handle it in time."; - String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName()+ " " + projectLibraryBase.getTargetMarket() - + ": You have a Pre-Homo task to complete"; + //String msgContentEN = "The remaining processing time for the Pre-Homo confirmation of " + // + projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName() + "-" + // + projectYearNameInfoEO.getYearName()+ " " + // + projectLibraryBase.getTargetMarket() + // + " are 3 days. Please check and handle it in time."; + //String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName()+ " " + projectLibraryBase.getTargetMarket() + // + ": You have a Pre-Homo task to complete"; - 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()); + //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() - + projectLibraryBase.getId() - + JumpLinkEnum.PREHOMO_AFFIRM_LINK.getType() - + "&projectName=" + projectNameInfoEO.getProjectName(); + //String hrefFeishu = backUrl + // + JumpLinkEnum.PREHOMO_AFFIRM_LINK.getLink() + // + projectLibraryBase.getId() + // + JumpLinkEnum.PREHOMO_AFFIRM_LINK.getType() + // + "&projectName=" + projectNameInfoEO.getProjectName(); //系统内部跳转链接 - String href = "" + " View details" + ""; - String contentInfo = msgContentEN + " " + href; - Map sendMessageMap = new HashMap<>(); - sendMessageMap.put("hrefFeishu",hrefFeishu); - sendMessageMap.put("contentInfo",contentInfo); + //String href = "" + " View details" + ""; + //String contentInfo = msgContentEN + " " + href; + // Map sendMessageMap = new HashMap<>(); + //sendMessageMap.put("hrefFeishu",hrefFeishu); + //sendMessageMap.put("contentInfo",contentInfo); //发送消息 - projectLawsInventoryEOService.sendMessage(msgTitle, msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.COMPLIANCE_CONFIRMATION,MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + //projectLawsInventoryEOService.sendMessage(msgTitle, msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.COMPLIANCE_CONFIRMATION,MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); } if(CollectionUtils.isNotEmpty(currentDaysUserIdList)){ currentDaysUserIdList = currentDaysUserIdList.stream().distinct().collect(Collectors.toList()); + List sysUsers = sysUserService.listByIds(currentDaysUserIdList); + List thirdIdList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(sysUsers)){ + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(msgTitle); + feishuMsgVo.setCnContentUpper("您好,您的任务将于今天到期,请及时查看处理"); + feishuMsgVo.setCnContentLower("项目: " + projectName + + "\n法规: " + LAW_CN + + "\n发起人: 系统通知"); + feishuMsgVo.setEnContentUpper("Hello! Your task will expire today. Please check and address it ASAP"); + feishuMsgVo.setEnContentLower("Project: " + projectName + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } //您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() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() - + " will expire today. Please check and address it in time."; - String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName()+ " " + projectLibraryBase.getTargetMarket() - + ": You have a Pre-Homo task to complete"; + //String msgContentEN = "The the Pre-Homo confirmation of " + // + projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + " will expire today. Please check and address it in time."; + //String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName()+ " " + projectLibraryBase.getTargetMarket() + // + ": You have a Pre-Homo task to complete"; - 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()); + //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() - + projectLibraryBase.getId() - + JumpLinkEnum.PREHOMO_AFFIRM_LINK.getType() - + "&projectName=" + projectNameInfoEO.getProjectName(); + // String hrefFeishu = backUrl + // + JumpLinkEnum.PREHOMO_AFFIRM_LINK.getLink() + // + projectLibraryBase.getId() + // + JumpLinkEnum.PREHOMO_AFFIRM_LINK.getType() + // + "&projectName=" + projectNameInfoEO.getProjectName(); //系统内部跳转链接 - String href = "" + " View details" + ""; - String contentInfo = msgContentEN + " " + href; - Map sendMessageMap = new HashMap<>(); - sendMessageMap.put("hrefFeishu",hrefFeishu); - sendMessageMap.put("contentInfo",contentInfo); + //String href = "" + " View details" + ""; + //String contentInfo = msgContentEN + " " + href; + //Map sendMessageMap = new HashMap<>(); + //sendMessageMap.put("hrefFeishu",hrefFeishu); + //sendMessageMap.put("contentInfo",contentInfo); //发送消息 - projectLawsInventoryEOService.sendMessage(msgTitle, msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.COMPLIANCE_CONFIRMATION,MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + //projectLawsInventoryEOService.sendMessage(msgTitle, msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.COMPLIANCE_CONFIRMATION,MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); } } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/TaskAffirmJob.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/TaskAffirmJob.java new file mode 100644 index 000000000..a865ab379 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/TaskAffirmJob.java @@ -0,0 +1,268 @@ +package com.jero.modules.project.job; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.constant.enums.MessageType2Enum; +import com.jero.common.constant.enums.MessageTypeEnum; +import com.jero.common.constant.enums.MsgColorEnum; +import com.jero.modules.document.entity.BussDocumentLibraryEO; +import com.jero.modules.document.service.IBussDocumentLibraryEOService; +import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.feishu.vo.FeishuMsg2Vo; +import com.jero.modules.project.entity.ProjectLawsInventoryEO; +import com.jero.modules.project.entity.ProjectLibraryBase; +import com.jero.modules.project.entity.ProjectNameInfoEO; +import com.jero.modules.project.entity.ProjectYearNameInfoEO; +import com.jero.modules.project.enums.InventoryAffirmStatusEnum; +import com.jero.modules.project.enums.JumpLinkEnum; +import com.jero.modules.project.mapper.ProjectLawsInventoryEOMapper; +import com.jero.modules.project.mapper.ProjectLibraryBaseMapper; +import com.jero.modules.project.mapper.ProjectNameInfoEOMapper; +import com.jero.modules.project.mapper.ProjectYearNameInfoEOMapper; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.service.ISysUserService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; + +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +public class TaskAffirmJob implements Job { + + @Autowired + private ProjectLawsInventoryEOMapper projectLawsInventoryEOMapper; + + @Autowired + private ProjectLibraryBaseMapper projectLibraryBaseMapper; + + @Autowired + private ProjectNameInfoEOMapper projectNameInfoEOMapper; + + @Autowired + private ProjectYearNameInfoEOMapper projectYearNameInfoEOMapper; + + @Autowired + private IFeishuService feishuService; + + @Value(value = "${jero.backUrl}") + private String backUrl; + + @Autowired + private ISysUserService sysUserService; + @Autowired + private IBussDocumentLibraryEOService bussDocumentLibraryEOService; + + + /** + * 任务确认流程定时 + * @param context + * @throws JobExecutionException + */ + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + log.info("任务确认流程,定时任务开启 ====================================================="); + + QueryWrapper queryWrapperInventory = new QueryWrapper<>(); + queryWrapperInventory.lambda().eq(ProjectLawsInventoryEO::getTaskAffirmStatus, InventoryAffirmStatusEnum.LIST_TO_CONFIRM.getValue()); + List projectLawsInventoryEOList = projectLawsInventoryEOMapper.selectList(queryWrapperInventory); + if (ObjectUtils.isNotEmpty(projectLawsInventoryEOList)) { + List projectLibraryIdList = projectLawsInventoryEOList.stream().distinct() + .map(ProjectLawsInventoryEO::getProjectLibraryId).collect(Collectors.toList()); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().in(ProjectLibraryBase::getId,projectLibraryIdList); + List projectLibraryBaseList = projectLibraryBaseMapper.selectList(queryWrapper); + if (ObjectUtils.isNotEmpty(projectLibraryBaseList)) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + + Date currentDate = new Date(); + + //获取后三天前的时间 + Calendar calendar=new GregorianCalendar(); + calendar.setTime(new Date()); + calendar.add(Calendar.DATE,3); + Date threeDays = calendar.getTime(); + + String threeDaysStr = sdf.format(threeDays); + String currentDateStr = sdf.format(currentDate); + + for (ProjectLibraryBase projectLibraryBase : projectLibraryBaseList) { + + QueryWrapper projectNameInfoEOQueryWrapper = new QueryWrapper<>(); + projectNameInfoEOQueryWrapper.lambda().eq(ProjectNameInfoEO::getId, projectLibraryBase.getProjectNameId()); + ProjectNameInfoEO projectNameInfoEO = projectNameInfoEOMapper.selectOne(projectNameInfoEOQueryWrapper); + + QueryWrapper projectYearInfoEOQueryWrapper = new QueryWrapper<>(); + projectYearInfoEOQueryWrapper.lambda().eq(ProjectYearNameInfoEO::getId, projectLibraryBase.getYearNameId()); + ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper); + + + Map threeDaysMap = new HashMap<>(); + Map currentDaysMap = new HashMap<>(); + Map overdueMap = new HashMap<>(); + + for (ProjectLawsInventoryEO projectLawsInventoryEO : projectLawsInventoryEOList) { + if (StringUtils.equals(projectLibraryBase.getId(), projectLawsInventoryEO.getProjectLibraryId())) { + if (projectLawsInventoryEO.getTaskAffirmDueDate() != null) { + //结束日期是当前日期 + if (StringUtils.equals(currentDateStr, sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()))) { + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getEngineeringInterfacePerson())) { + currentDaysMap.put(projectLawsInventoryEO.getId(), projectLawsInventoryEO.getEngineeringInterfacePerson()); + } + } + + //如果清单确认结束时间是当前系统时间后三天 + if (StringUtils.equals(threeDaysStr, sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()))) { + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getEngineeringInterfacePerson())) { + threeDaysMap.put(projectLawsInventoryEO.getId(), projectLawsInventoryEO.getEngineeringInterfacePerson()); + } + } + + //逾期3天、七天、14天 + Calendar day3Later = new GregorianCalendar(); + day3Later.setTime(projectLawsInventoryEO.getTaskAffirmDueDate()); + day3Later.add(Calendar.DATE, 3); + Date overdue3Days = day3Later.getTime(); + + Calendar day7Later = new GregorianCalendar(); + day7Later.setTime(projectLawsInventoryEO.getTaskAffirmDueDate()); + day7Later.add(Calendar.DATE, 7); + Date overdue7Days = day7Later.getTime(); + + Calendar day14Later = new GregorianCalendar(); + day14Later.setTime(projectLawsInventoryEO.getTaskAffirmDueDate()); + day14Later.add(Calendar.DATE, 14); + Date overdue14Days = day14Later.getTime(); + + if (StringUtils.equals(sdf.format(overdue3Days), sdf.format(currentDate)) + || StringUtils.equals(sdf.format(overdue7Days), sdf.format(currentDate)) + || StringUtils.equals(sdf.format(overdue14Days), sdf.format(currentDate))) { + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getEngineeringInterfacePerson())) { + overdueMap.put(projectLawsInventoryEO.getId(), projectLawsInventoryEO.getEngineeringInterfacePerson()); + } + } + + } + } + } + + //飞书跳转链接 + + String hrefFeishu = backUrl + + "/projectRegulationTasks"; + + //项目名称 + String projectVersion = (com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getParentId()) && com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getProjectVersion())) ? "00" : projectLibraryBase.getProjectVersion(); + String PRN = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + "-" + projectLibraryBase.getTargetMarket() + "-" + projectVersion; + if (!threeDaysMap.isEmpty()) { + for (String key : threeDaysMap.keySet()) { + String[] ids = threeDaysMap.get(key).split(","); + List thirdIdList = new ArrayList<>(); + List sysUsers = sysUserService.listByIds(Arrays.asList(ids)); + if (ObjectUtils.isNotEmpty(sysUsers)) { + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + //法规中英文 + ProjectLawsInventoryEO projectLawsInventoryEO = projectLawsInventoryEOMapper.selectById(key); + BussDocumentLibraryEO bussDocumentLibraryEO = bussDocumentLibraryEOService.queryById(projectLawsInventoryEO.getStandId()); + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(MessageType2Enum.REGULATION_TASK_CONFIRMATION.getCn() + "/" + MessageType2Enum.REGULATION_TASK_CONFIRMATION.getEn()); + feishuMsgVo.setCnContentUpper("您好,该任务将于3天后到期,请及时查看处理,谢谢!"); + feishuMsgVo.setCnContentLower("项目: " + PRN + + "\n法规: " + projectLawsInventoryEO.getSerialNumber() + " " + projectLawsInventoryEO.getTitle() + + "\n发起人: 系统通知"); + feishuMsgVo.setEnContentUpper("Hello! This task will expire in 3 days. Please check and address it in a timely manner. Thank you!"); + feishuMsgVo.setEnContentLower("Project:" + PRN + + "\nRegulation No: " + projectLawsInventoryEO.getSerialNumber() + " " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + + } + } + + if (!currentDaysMap.isEmpty()) { + for (String key : currentDaysMap.keySet()) { + String[] ids = currentDaysMap.get(key).split(","); + List thirdIdList = new ArrayList<>(); + List sysUsers = sysUserService.listByIds(Arrays.asList(ids)); + if (ObjectUtils.isNotEmpty(sysUsers)) { + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + //法规中英文 + ProjectLawsInventoryEO projectLawsInventoryEO = projectLawsInventoryEOMapper.selectById(key); + BussDocumentLibraryEO bussDocumentLibraryEO = bussDocumentLibraryEOService.queryById(projectLawsInventoryEO.getStandId()); + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(MessageType2Enum.REGULATION_TASK_CONFIRMATION.getCn() + "/" + MessageType2Enum.REGULATION_TASK_CONFIRMATION.getEn()); + feishuMsgVo.setCnContentUpper("您好,该任务今天即将到期,请尽快查看处理,谢谢!"); + feishuMsgVo.setCnContentLower("项目: " + PRN + + "\n法规: " + projectLawsInventoryEO.getSerialNumber() + " " + projectLawsInventoryEO.getTitle() + + "\n发起人: 系统通知"); + feishuMsgVo.setEnContentUpper("Hello! This task will expire today. Please check and address the task ASAP. Thank you!"); + feishuMsgVo.setEnContentLower("Project:" + PRN + + "\nRegulation No: " + projectLawsInventoryEO.getSerialNumber() + " " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + } + + if (!overdueMap.isEmpty()) { + for (String key : overdueMap.keySet()) { + String[] ids = overdueMap.get(key).split(","); + List thirdIdList = new ArrayList<>(); + List sysUsers = sysUserService.listByIds(Arrays.asList(ids)); + if (ObjectUtils.isNotEmpty(sysUsers)) { + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + //法规中英文 + ProjectLawsInventoryEO projectLawsInventoryEO = projectLawsInventoryEOMapper.selectById(key); + BussDocumentLibraryEO bussDocumentLibraryEO = bussDocumentLibraryEOService.queryById(projectLawsInventoryEO.getStandId()); + + String dueDate = sdf.format(projectLawsInventoryEO.getInventoryAffirmDueDate()); + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(MessageType2Enum.REGULATION_TASK_CONFIRMATION.getCn() + "/" + MessageType2Enum.REGULATION_TASK_CONFIRMATION.getEn()); + feishuMsgVo.setCnContentUpper("您好,该任务已逾期,请尽快处理,谢谢!"); + feishuMsgVo.setCnContentLower("项目: " + PRN + + "\n法规: " + projectLawsInventoryEO.getSerialNumber() + " " + projectLawsInventoryEO.getTitle() + + "\n发起人: 系统通知" + + "\n截止时间: " + dueDate); + feishuMsgVo.setEnContentUpper("Hello! This task is overdue. Please address it ASAP. Thank you!"); + feishuMsgVo.setEnContentLower("Project:" + PRN + + "\nRegulation No: " + projectLawsInventoryEO.getSerialNumber() + " " + bussDocumentLibraryEO.getTitleEn() + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName() + + "\nDue Date: " + dueDate); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.YELLOW.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + } + } + } + } + + log.info("任务确认流程,定时任务结束 ====================================================="); + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/VerifyComplianceJob.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/VerifyComplianceJob.java index 7acc1e185..65b071784 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/VerifyComplianceJob.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/VerifyComplianceJob.java @@ -1,7 +1,13 @@ package com.jero.modules.project.job; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.constant.enums.MessageType2Enum; import com.jero.common.constant.enums.MessageTypeEnum; +import com.jero.common.constant.enums.MsgColorEnum; +import com.jero.modules.document.entity.BussDocumentLibraryEO; +import com.jero.modules.document.service.IBussDocumentLibraryEOService; +import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.feishu.vo.FeishuMsg2Vo; import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.project.entity.*; import com.jero.modules.project.enums.DesignComplianceStatusEnum; @@ -13,8 +19,11 @@ import com.jero.modules.project.mapper.ProjectNameInfoEOMapper; import com.jero.modules.project.mapper.ProjectYearNameInfoEOMapper; import com.jero.modules.project.service.IProjectLawsInventoryEOService; import com.jero.modules.project.service.IProjectTaskInventoryEOService; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.service.ISysUserService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.quartz.Job; import org.quartz.JobExecutionContext; @@ -22,6 +31,7 @@ import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -52,13 +62,23 @@ public class VerifyComplianceJob implements Job { @Value(value = "${jero.backUrl}") private String backUrl; + @Autowired + private IBussDocumentLibraryEOService bussDocumentLibraryEOService; + @Autowired + private ISysUserService sysUserService; + @Autowired + private IFeishuService feishuService; + @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { log.info("验证符合性流程,定时任务开启 ====================================================="); //查询出已经启动了验证符合性流程的数据。 并且流程没有结束。 QueryWrapper queryProjectTaskInventoryWrapper = new QueryWrapper<>(); queryProjectTaskInventoryWrapper.isNotNull("verify_p_id"); - queryProjectTaskInventoryWrapper.lambda().ne(ProjectTaskInventoryEO::getVerifyStatus, DesignComplianceStatusEnum.REVIEW_COMPLETED.getValue()); + List status = new ArrayList<>(); + status.add(DesignComplianceStatusEnum.TO_SUBMIT.getValue()); + status.add(DesignComplianceStatusEnum.REVIEW_THE_RETURN.getValue()); + queryProjectTaskInventoryWrapper.lambda().in(ProjectTaskInventoryEO::getVerifyStatus, status); List projectTaskInventoryEOList = projectTaskInventoryEOService.getBaseMapper().selectList(queryProjectTaskInventoryWrapper); if(CollectionUtils.isNotEmpty(projectTaskInventoryEOList)){ @@ -79,15 +99,24 @@ public class VerifyComplianceJob implements Job { Date currentDate = new Date(); - //获取后三天前的时间 - Calendar calendar=new GregorianCalendar(); - calendar.setTime(new Date()); - calendar.add(Calendar.DATE,3); - Date threeDays = calendar.getTime(); - - String threeDaysStr = sdf.format(threeDays); + //两周 + Calendar twoWeeksLaterCalendar=new GregorianCalendar(); + twoWeeksLaterCalendar.setTime(new Date()); + twoWeeksLaterCalendar.add(Calendar.DATE,14); + Date twoWeeksLaterDays = twoWeeksLaterCalendar.getTime(); + String twoWeeksLaterDaysStr = sdf.format(twoWeeksLaterDays); + //一周 + Calendar oneWeekLaterCalendar=new GregorianCalendar(); + oneWeekLaterCalendar.setTime(new Date()); + oneWeekLaterCalendar.add(Calendar.DATE,7); + Date oneWeekLaterDays = oneWeekLaterCalendar.getTime(); + String oneWeekLaterDaysStr = sdf.format(oneWeekLaterDays); + //当天 String currentDateStr = sdf.format(currentDate); + String msgTitle = MessageType2Enum.VALIDATION_COMPLIANCE_CONFIRMATION.getCn() + "/" + MessageType2Enum.VALIDATION_COMPLIANCE_CONFIRMATION.getEn(); + + for (ProjectLibraryBase projectLibraryBase : projectLibraryBaseList) { QueryWrapper projectNameInfoEOQueryWrapper = new QueryWrapper<>(); projectNameInfoEOQueryWrapper.lambda().eq(ProjectNameInfoEO::getId,projectLibraryBase.getProjectNameId()); @@ -97,114 +126,235 @@ public class VerifyComplianceJob implements Job { projectYearInfoEOQueryWrapper.lambda().eq(ProjectYearNameInfoEO::getId,projectLibraryBase.getYearNameId()); ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper); - for (ProjectLawsInventoryEO projectLawsInventoryEO: projectLawsInventoryEOList) { - List threeDaysUserIdList = new ArrayList<>(); - List currentDaysUserIdList = new ArrayList<>(); + //项目名称 + String projectVersion = (com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getParentId()) && com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getProjectVersion())) ? "00" : projectLibraryBase.getProjectVersion(); + String projectName = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + "-" + projectLibraryBase.getTargetMarket() + "-" + projectVersion; - for (ProjectTaskInventoryEO projectTaskInventoryEO : projectTaskInventoryEOList) { - if(StringUtils.equals(projectTaskInventoryEO.getProjectLawsInventoryId(),projectLawsInventoryEO.getId())){ - if(projectLawsInventoryEO.getVerifyDueDate() != null){ - //如果验证符合性 - 结束日期是当前日期 - if(StringUtils.equals(currentDateStr,sdf.format(projectLawsInventoryEO.getVerifyDueDate()))){ - if(StringUtils.isEmpty(projectTaskInventoryEO.getVerifySendMsgFlag())){ - if(StringUtils.isNotEmpty(projectLawsInventoryEO.getVerifyDutyId())){ - currentDaysUserIdList.add(projectLawsInventoryEO.getVerifyDutyId()); - }if(StringUtils.isNotEmpty(projectLawsInventoryEO.getVerifyInitiatorId())){ - currentDaysUserIdList.add(projectLawsInventoryEO.getVerifyInitiatorId()); - } - projectTaskInventoryEO.setVerifySendMsgFlag(SendMsgFlagEnum.FALSE.getValue()); - projectTaskInventoryEOService.updateById(projectTaskInventoryEO); - } + + for (ProjectLawsInventoryEO projectLawsInventoryEO: projectLawsInventoryEOList) { + + //法规中英文 + String LAW_CN = projectLawsInventoryEO.getSerialNumber() + " " + projectLawsInventoryEO.getTitle();//法规 + BussDocumentLibraryEO bussDocumentLibraryEO = bussDocumentLibraryEOService.queryById(projectLawsInventoryEO.getStandId()); + String LAW_EN = ""; + if (ObjectUtils.isEmpty(bussDocumentLibraryEO)) { + LAW_EN = LAW_CN; + } else { + LAW_EN = projectLawsInventoryEO.getSerialNumber() + " " + bussDocumentLibraryEO.getTitleEn();//法规 + } + + List twoWeeksLaterUserIdList = new ArrayList<>(); + List oneWeeksLaterUserIdList = new ArrayList<>(); + List currentDaysUserIdList = new ArrayList<>(); + List dueUserIdList = new ArrayList<>(); + + if(StringUtils.equals(projectLawsInventoryEO.getProjectLibraryId(),projectLibraryBase.getId())){ + if(projectLawsInventoryEO.getVerifyDueDate() != null){ + //如果验证符合性 - 结束日期是当前日期 + if(StringUtils.equals(currentDateStr,sdf.format(projectLawsInventoryEO.getVerifyDueDate()))){ + if(StringUtils.isNotEmpty(projectLawsInventoryEO.getVerifyDutyId())){ + currentDaysUserIdList.add(projectLawsInventoryEO.getVerifyDutyId()); } - //如果验证符合性 - 结束日期是三天后的日期 - if(StringUtils.equals(threeDaysStr,sdf.format(projectLawsInventoryEO.getVerifyDueDate()))){ - if(StringUtils.isEmpty(projectTaskInventoryEO.getVerifySendMsgCurrentFlag())){ - if(StringUtils.isNotEmpty(projectLawsInventoryEO.getVerifyDutyId())){ - threeDaysUserIdList.add(projectLawsInventoryEO.getVerifyDutyId()); - }if(StringUtils.isNotEmpty(projectLawsInventoryEO.getVerifyInitiatorId())){ - threeDaysUserIdList.add(projectLawsInventoryEO.getVerifyInitiatorId()); - } - projectTaskInventoryEO.setVerifySendMsgCurrentFlag(SendMsgFlagEnum.FALSE.getValue()); - projectTaskInventoryEOService.updateById(projectTaskInventoryEO); - } + } + //如果验证符合性 - 结束日期是两周后的日期 + if(StringUtils.equals(twoWeeksLaterDaysStr,sdf.format(projectLawsInventoryEO.getVerifyDueDate()))){ + if(StringUtils.isNotEmpty(projectLawsInventoryEO.getVerifyDutyId())){ + currentDaysUserIdList.add(projectLawsInventoryEO.getVerifyDutyId()); + } + } + //如果验证符合性 - 结束日期是一周后的日期 + if(StringUtils.equals(oneWeekLaterDaysStr,sdf.format(projectLawsInventoryEO.getVerifyDueDate()))){ + if(StringUtils.isNotEmpty(projectLawsInventoryEO.getVerifyDutyId())){ + oneWeeksLaterUserIdList.add(projectLawsInventoryEO.getVerifyDutyId()); + } + } + //如果验证符合性 - 逾期后每天通知 + if (!StringUtils.equals(currentDateStr,sdf.format(projectLawsInventoryEO.getVerifyDueDate()))&&projectLawsInventoryEO.getVerifyDueDate().before(currentDate)) { + if(StringUtils.isNotEmpty(projectLawsInventoryEO.getVerifyDutyId())){ + dueUserIdList.add(projectLawsInventoryEO.getVerifyDutyId()); } } } } - if(CollectionUtils.isNotEmpty(threeDaysUserIdList)){ - threeDaysUserIdList = threeDaysUserIdList.stream().distinct().collect(Collectors.toList()); + + String hrefFeishu = backUrl + + JumpLinkEnum.VERIFY_AFFIRM_LINK.getLink() + + projectLibraryBase.getId() + + JumpLinkEnum.VERIFY_AFFIRM_LINK.getType() + + "&projectName=" + projectNameInfoEO.getProjectName(); + + if (ObjectUtils.isNotEmpty(dueUserIdList)) { + dueUserIdList = dueUserIdList.stream().distinct().collect(Collectors.toList()); + List sysUsers = sysUserService.listByIds(dueUserIdList); + List thirdIdList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(sysUsers)){ + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(msgTitle); + feishuMsgVo.setCnContentUpper("您好,您的任务已逾期,请尽快查看处理"); + feishuMsgVo.setCnContentLower("项目: " + projectName + + "\n法规: " + LAW_CN + + "\n发起人: 系统通知"+ + "\n截止时间: "+ sdf.format(projectLawsInventoryEO.getDesignDueDate())); + feishuMsgVo.setEnContentUpper("Hello! Your task is overdue. Please check and address it ASAP"); + feishuMsgVo.setEnContentLower("Project: " + projectName + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()+ + "\nDue Date: "+ sdf.format(projectLawsInventoryEO.getDesignDueDate())); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.YELLOW.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + + if (ObjectUtils.isNotEmpty(oneWeeksLaterUserIdList)) { + oneWeeksLaterUserIdList = oneWeeksLaterUserIdList.stream().distinct().collect(Collectors.toList()); + List sysUsers = sysUserService.listByIds(oneWeeksLaterUserIdList); + List thirdIdList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(sysUsers)){ + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(msgTitle); + feishuMsgVo.setCnContentUpper("您好,您的任务将于7天后结束,请及时查看处理"); + feishuMsgVo.setCnContentLower("项目: " + projectName + + "\n法规: " + LAW_CN + + "\n发起人: 系统通知"); + feishuMsgVo.setEnContentUpper("Hello! Your task will end in 7 days. Please check and address it in a timely manner"); + feishuMsgVo.setEnContentLower("Project: " + projectName + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + + if(CollectionUtils.isNotEmpty(twoWeeksLaterUserIdList)){ + twoWeeksLaterUserIdList = twoWeeksLaterUserIdList.stream().distinct().collect(Collectors.toList()); + List sysUsers = sysUserService.listByIds(twoWeeksLaterUserIdList); + List thirdIdList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(sysUsers)){ + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(msgTitle); + feishuMsgVo.setCnContentUpper("您好,您的任务将于14天后结束,请及时查看处理"); + feishuMsgVo.setCnContentLower("项目: " + projectName + + "\n法规: " + LAW_CN + + "\n发起人: 系统通知"); + feishuMsgVo.setEnContentUpper("Hello! Your task will end in 14 days. Please check and address it in a timely manner"); + feishuMsgVo.setEnContentLower("Project: " + projectName + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } //您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() + "-" - + projectYearNameInfoEO.getYearName()+ " " - + projectLibraryBase.getTargetMarket() - + " are 3 days. Please check and handle it in time."; - String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName()+ " " + projectLibraryBase.getTargetMarket() - + ": You have a validation compliance task to complete"; + //String msgContentEN = "The remaining processing time for the validation compliance confirmation of " + // + projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName() + "-" + // + projectYearNameInfoEO.getYearName()+ " " + // + projectLibraryBase.getTargetMarket() + // + " are 3 days. Please check and handle it in time."; + //String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName()+ " " + projectLibraryBase.getTargetMarket() + // + ": You have a validation compliance task to complete"; - 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()); + // 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() - + projectLibraryBase.getId() - + JumpLinkEnum.VERIFY_AFFIRM_LINK.getType() - + "&projectName=" + projectNameInfoEO.getProjectName(); + //String hrefFeishu = backUrl + // + JumpLinkEnum.VERIFY_AFFIRM_LINK.getLink() + // + projectLibraryBase.getId() + // + JumpLinkEnum.VERIFY_AFFIRM_LINK.getType() + // + "&projectName=" + projectNameInfoEO.getProjectName(); //系统内部跳转链接 - String href = "" + " View details" + ""; - String contentInfo = msgContentEN + " " + href; - Map sendMessageMap = new HashMap<>(); - sendMessageMap.put("hrefFeishu",hrefFeishu); - sendMessageMap.put("contentInfo",contentInfo); + //String href = "" + " View details" + ""; + //String contentInfo = msgContentEN + " " + href; + //Map sendMessageMap = new HashMap<>(); + //sendMessageMap.put("hrefFeishu",hrefFeishu); + //sendMessageMap.put("contentInfo",contentInfo); //发送消息 - projectLawsInventoryEOService.sendMessage(msgTitle, msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.COMPLIANCE_CONFIRMATION,MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + //projectLawsInventoryEOService.sendMessage(msgTitle, msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.COMPLIANCE_CONFIRMATION,MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); } if(CollectionUtils.isNotEmpty(currentDaysUserIdList)){ currentDaysUserIdList = currentDaysUserIdList.stream().distinct().collect(Collectors.toList()); + List sysUsers = sysUserService.listByIds(currentDaysUserIdList); + List thirdIdList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(sysUsers)){ + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(msgTitle); + feishuMsgVo.setCnContentUpper("您好,您的任务将于今天到期,请及时查看处理"); + feishuMsgVo.setCnContentLower("项目: " + projectName + + "\n法规: " + LAW_CN + + "\n发起人: 系统通知"); + feishuMsgVo.setEnContentUpper("Hello! Your task will expire today. Please check and address it ASAP"); + feishuMsgVo.setEnContentLower("Project: " + projectName + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } //您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() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() - + " will expire today. Please check and address it in time."; - String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName()+ " " + projectLibraryBase.getTargetMarket() - + ": You have a validation compliance task to complete"; + //String msgContentEN = "The the validation compliance confirmation of " + // + projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + " will expire today. Please check and address it in time."; + //String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName()+ " " + projectLibraryBase.getTargetMarket() + // + ": You have a validation compliance task to complete"; - 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()); + //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() - + projectLibraryBase.getId() - + JumpLinkEnum.VERIFY_AFFIRM_LINK.getType() - + "&projectName=" + projectNameInfoEO.getProjectName(); + // String hrefFeishu = backUrl + // + JumpLinkEnum.VERIFY_AFFIRM_LINK.getLink() + // + projectLibraryBase.getId() + // + JumpLinkEnum.VERIFY_AFFIRM_LINK.getType() + // + "&projectName=" + projectNameInfoEO.getProjectName(); //系统内部跳转链接 - String href = "" + " View details" + ""; - String contentInfo = msgContentEN + " " + href; - Map sendMessageMap = new HashMap<>(); - sendMessageMap.put("hrefFeishu",hrefFeishu); - sendMessageMap.put("contentInfo",contentInfo); + //String href = "" + " View details" + ""; + // String contentInfo = msgContentEN + " " + href; + // Map sendMessageMap = new HashMap<>(); + // sendMessageMap.put("hrefFeishu",hrefFeishu); + // sendMessageMap.put("contentInfo",contentInfo); //发送消息 - projectLawsInventoryEOService.sendMessage(msgTitle, msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.COMPLIANCE_CONFIRMATION,MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + // projectLawsInventoryEOService.sendMessage(msgTitle, msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.COMPLIANCE_CONFIRMATION,MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); } } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/designComplianceJob.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/designComplianceJob.java index 1ea8abeb1..129d65395 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/designComplianceJob.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/designComplianceJob.java @@ -1,7 +1,13 @@ package com.jero.modules.project.job; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.constant.enums.MessageType2Enum; import com.jero.common.constant.enums.MessageTypeEnum; +import com.jero.common.constant.enums.MsgColorEnum; +import com.jero.modules.document.entity.BussDocumentLibraryEO; +import com.jero.modules.document.service.IBussDocumentLibraryEOService; +import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.feishu.vo.FeishuMsg2Vo; import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.project.entity.*; import com.jero.modules.project.enums.DesignComplianceStatusEnum; @@ -13,8 +19,11 @@ import com.jero.modules.project.mapper.ProjectNameInfoEOMapper; import com.jero.modules.project.mapper.ProjectYearNameInfoEOMapper; import com.jero.modules.project.service.IProjectLawsInventoryEOService; import com.jero.modules.project.service.IProjectTaskInventoryEOService; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.service.ISysUserService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.quartz.Job; import org.quartz.JobExecutionContext; @@ -22,6 +31,7 @@ import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -52,13 +62,23 @@ public class designComplianceJob implements Job { @Value(value = "${jero.backUrl}") private String backUrl; + @Autowired + private IBussDocumentLibraryEOService bussDocumentLibraryEOService; + @Autowired + private ISysUserService sysUserService; + @Autowired + private IFeishuService feishuService; + @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { log.info("设计符合性确认流程,定时任务开启 ====================================================="); //查询出已经启动了设计符合性流程的数据。 并且流程没有结束。 QueryWrapper queryProjectTaskInventoryWrapper = new QueryWrapper<>(); queryProjectTaskInventoryWrapper.isNotNull("design_p_id"); - queryProjectTaskInventoryWrapper.lambda().ne(ProjectTaskInventoryEO::getDesignStatus, DesignComplianceStatusEnum.REVIEW_COMPLETED.getValue()); + List status = new ArrayList<>(); + status.add(DesignComplianceStatusEnum.TO_SUBMIT.getValue()); + status.add(DesignComplianceStatusEnum.REVIEW_THE_RETURN.getValue()); + queryProjectTaskInventoryWrapper.lambda().in(ProjectTaskInventoryEO::getDesignStatus, status); List projectTaskInventoryEOList = projectTaskInventoryEOService.getBaseMapper().selectList(queryProjectTaskInventoryWrapper); if(CollectionUtils.isNotEmpty(projectTaskInventoryEOList)){ @@ -79,15 +99,24 @@ public class designComplianceJob implements Job { Date currentDate = new Date(); - //获取后三天前的时间 - Calendar calendar=new GregorianCalendar(); - calendar.setTime(new Date()); - calendar.add(Calendar.DATE,3); - Date threeDays = calendar.getTime(); - - String threeDaysStr = sdf.format(threeDays); + //两周 + Calendar twoWeeksLaterCalendar=new GregorianCalendar(); + twoWeeksLaterCalendar.setTime(new Date()); + twoWeeksLaterCalendar.add(Calendar.DATE,14); + Date twoWeeksLaterDays = twoWeeksLaterCalendar.getTime(); + String twoWeeksLaterDaysStr = sdf.format(twoWeeksLaterDays); + //一周 + Calendar oneWeekLaterCalendar=new GregorianCalendar(); + oneWeekLaterCalendar.setTime(new Date()); + oneWeekLaterCalendar.add(Calendar.DATE,7); + Date oneWeekLaterDays = oneWeekLaterCalendar.getTime(); + String oneWeekLaterDaysStr = sdf.format(oneWeekLaterDays); + //当天 String currentDateStr = sdf.format(currentDate); + + String msgTitle = MessageType2Enum.DESIGN_COMPLIANCE_CONFIRMATION.getCn() + "/" + MessageType2Enum.DESIGN_COMPLIANCE_CONFIRMATION.getEn(); + for (ProjectLibraryBase projectLibraryBase : projectLibraryBaseList) { QueryWrapper projectNameInfoEOQueryWrapper = new QueryWrapper<>(); projectNameInfoEOQueryWrapper.lambda().eq(ProjectNameInfoEO::getId,projectLibraryBase.getProjectNameId()); @@ -97,109 +126,249 @@ public class designComplianceJob implements Job { projectYearInfoEOQueryWrapper.lambda().eq(ProjectYearNameInfoEO::getId,projectLibraryBase.getYearNameId()); ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper); + //项目名称 + String projectVersion = (com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getParentId()) && com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getProjectVersion())) ? "00" : projectLibraryBase.getProjectVersion(); + String projectName = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + "-" + projectLibraryBase.getTargetMarket() + "-" + projectVersion; + + for (ProjectLawsInventoryEO projectLawsInventoryEO: projectLawsInventoryEOList) { - List threeDaysUserIdList = new ArrayList<>(); + + //法规中英文 + String LAW_CN = projectLawsInventoryEO.getSerialNumber() + " " + projectLawsInventoryEO.getTitle();//法规 + BussDocumentLibraryEO bussDocumentLibraryEO = bussDocumentLibraryEOService.queryById(projectLawsInventoryEO.getStandId()); + String LAW_EN = ""; + if (ObjectUtils.isEmpty(bussDocumentLibraryEO)) { + LAW_EN = LAW_CN; + } else { + LAW_EN = projectLawsInventoryEO.getSerialNumber() + " " + bussDocumentLibraryEO.getTitleEn();//法规 + } + + + List twoWeeksLaterUserIdList = new ArrayList<>(); + List oneWeeksLaterUserIdList = new ArrayList<>(); List currentDaysUserIdList = new ArrayList<>(); + List dueUserIdList = new ArrayList<>(); - for (ProjectTaskInventoryEO projectTaskInventoryEO : projectTaskInventoryEOList) { - if(StringUtils.equals(projectTaskInventoryEO.getProjectLawsInventoryId(),projectLawsInventoryEO.getId())){ - //如果设计符合性 - 结束日期是当前日期 - if(projectLawsInventoryEO.getDesignDueDate() != null){ - if(StringUtils.equals(currentDateStr,sdf.format(projectLawsInventoryEO.getDesignDueDate()))){ - if(StringUtils.isEmpty(projectTaskInventoryEO.getDesignSendMsgFlag())){ - if(StringUtils.isNotEmpty(projectLawsInventoryEO.getDesignDutyId())){ - currentDaysUserIdList.add(projectLawsInventoryEO.getDesignDutyId()); - }if(StringUtils.isNotEmpty(projectLawsInventoryEO.getDesignInitiatorId())){ - currentDaysUserIdList.add(projectLawsInventoryEO.getDesignInitiatorId()); - } - projectTaskInventoryEO.setDesignSendMsgFlag(SendMsgFlagEnum.FALSE.getValue()); - projectTaskInventoryEOService.updateById(projectTaskInventoryEO); - } + if(StringUtils.equals(projectLawsInventoryEO.getProjectLibraryId(),projectLibraryBase.getId())){ + //如果设计符合性 - 结束日期是当前日期 + if(projectLawsInventoryEO.getDesignDueDate() != null){ + if(StringUtils.equals(currentDateStr,sdf.format(projectLawsInventoryEO.getDesignDueDate()))){ + if(StringUtils.isNotEmpty(projectLawsInventoryEO.getDesignDutyId())){ + currentDaysUserIdList.add(projectLawsInventoryEO.getDesignDutyId()); } + } - //如果设计符合性 - 结束日期是三天后的日期 - if(StringUtils.equals(threeDaysStr,sdf.format(projectLawsInventoryEO.getDesignDueDate()))){ - if(StringUtils.isEmpty(projectTaskInventoryEO.getDesignSendMsgCurrentFlag())){ - if(StringUtils.isNotEmpty(projectLawsInventoryEO.getDesignDutyId())){ - threeDaysUserIdList.add(projectLawsInventoryEO.getDesignDutyId()); - }if(StringUtils.isNotEmpty(projectLawsInventoryEO.getDesignInitiatorId())){ - threeDaysUserIdList.add(projectLawsInventoryEO.getDesignInitiatorId()); - } - projectTaskInventoryEO.setDesignSendMsgCurrentFlag(SendMsgFlagEnum.FALSE.getValue()); - projectTaskInventoryEOService.updateById(projectTaskInventoryEO); - } + //如果设计符合性 - 结束日期是两周后的日期 + if(StringUtils.equals(twoWeeksLaterDaysStr,sdf.format(projectLawsInventoryEO.getDesignDueDate()))){ + if(StringUtils.isNotEmpty(projectLawsInventoryEO.getDesignDutyId())){ + twoWeeksLaterUserIdList.add(projectLawsInventoryEO.getDesignDutyId()); + } + } + + //如果设计符合性 - 结束日期是一周后的日期 + if(StringUtils.equals(oneWeekLaterDaysStr,sdf.format(projectLawsInventoryEO.getDesignDueDate()))){ + if(StringUtils.isNotEmpty(projectLawsInventoryEO.getDesignDutyId())){ + oneWeeksLaterUserIdList.add(projectLawsInventoryEO.getDesignDutyId()); + } + } + //逾期三天、七天、十四天 + Calendar due3Days = new GregorianCalendar(); + due3Days.setTime(projectLawsInventoryEO.getDesignDueDate()); + due3Days.add(Calendar.DATE, 3); + Date overdue3Days = due3Days.getTime(); + + Calendar due7Days = new GregorianCalendar(); + due7Days.setTime(projectLawsInventoryEO.getDesignDueDate()); + due7Days.add(Calendar.DATE, 7); + Date overdue7Days = due7Days.getTime(); + + Calendar due14Days = new GregorianCalendar(); + due14Days.setTime(projectLawsInventoryEO.getDesignDueDate()); + due14Days.add(Calendar.DATE, 14); + Date overdue14Days = due14Days.getTime(); + if (StringUtils.equals(sdf.format(overdue3Days), currentDateStr) + || StringUtils.equals(sdf.format(overdue7Days), currentDateStr) + || StringUtils.equals(sdf.format(overdue14Days), currentDateStr)) { + if(StringUtils.isNotEmpty(projectLawsInventoryEO.getDesignDutyId())){ + dueUserIdList.add(projectLawsInventoryEO.getDesignDutyId()); } } } + } - if(CollectionUtils.isNotEmpty(threeDaysUserIdList)){ - threeDaysUserIdList = threeDaysUserIdList.stream().distinct().collect(Collectors.toList()); + String hrefFeishu = backUrl + + JumpLinkEnum.DESIGN_AFFIRM_LINK.getLink() + + projectLibraryBase.getId() + + JumpLinkEnum.DESIGN_AFFIRM_LINK.getType() + + "&projectName=" + projectNameInfoEO.getProjectName(); + + if (ObjectUtils.isNotEmpty(dueUserIdList)) { + dueUserIdList = dueUserIdList.stream().distinct().collect(Collectors.toList()); + List sysUsers = sysUserService.listByIds(dueUserIdList); + List thirdIdList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(sysUsers)){ + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(msgTitle); + feishuMsgVo.setCnContentUpper("您好,您的任务已逾期,请尽快查看处理"); + feishuMsgVo.setCnContentLower("项目: " + projectName + + "\n法规: " + LAW_CN + + "\n发起人: 系统通知"+ + "\n截止时间: "+ sdf.format(projectLawsInventoryEO.getDesignDueDate())); + feishuMsgVo.setEnContentUpper("Hello! Your task is overdue. Please check and address it ASAP"); + feishuMsgVo.setEnContentLower("Project: " + projectName + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()+ + "\nDue Date: "+ sdf.format(projectLawsInventoryEO.getDesignDueDate())); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.YELLOW.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + + if (ObjectUtils.isNotEmpty(oneWeeksLaterUserIdList)) { + oneWeeksLaterUserIdList = oneWeeksLaterUserIdList.stream().distinct().collect(Collectors.toList()); + List sysUsers = sysUserService.listByIds(oneWeeksLaterUserIdList); + List thirdIdList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(sysUsers)){ + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(msgTitle); + feishuMsgVo.setCnContentUpper("您好,您的任务将于7天后结束,请及时查看处理"); + feishuMsgVo.setCnContentLower("项目: " + projectName + + "\n法规: " + LAW_CN + + "\n发起人: 系统通知"); + feishuMsgVo.setEnContentUpper("Hello! Your task will end in 7 days. Please check and address it in a timely manner"); + feishuMsgVo.setEnContentLower("Project: " + projectName + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + + if(CollectionUtils.isNotEmpty(twoWeeksLaterUserIdList)){ + twoWeeksLaterUserIdList = twoWeeksLaterUserIdList.stream().distinct().collect(Collectors.toList()); + List sysUsers = sysUserService.listByIds(twoWeeksLaterUserIdList); + List thirdIdList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(sysUsers)){ + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(msgTitle); + feishuMsgVo.setCnContentUpper("您好,您的任务将于14天后结束,请及时查看处理"); + feishuMsgVo.setCnContentLower("项目: " + projectName + + "\n法规: " + LAW_CN + + "\n发起人: 系统通知"); + feishuMsgVo.setEnContentUpper("Hello! Your task will end in 14 days. Please check and address it in a timely manner"); + feishuMsgVo.setEnContentLower("Project: " + projectName + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } //您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."; - String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName()+ " " + projectLibraryBase.getTargetMarket() - + ": You have a design compliance task to complete"; + //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."; + //String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName()+ " " + projectLibraryBase.getTargetMarket() + // + ": You have a design compliance task to complete"; - 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()); + //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(); + //String hrefFeishu = backUrl + JumpLinkEnum.DESIGN_AFFIRM_LINK.getLink() + projectLibraryBase.getId() + JumpLinkEnum.DESIGN_AFFIRM_LINK.getType(); //系统内部跳转链接 - String href = "" + " View details" + ""; - String contentInfo = msgContentEN + " " + href; - Map sendMessageMap = new HashMap<>(); - sendMessageMap.put("hrefFeishu",hrefFeishu); - sendMessageMap.put("contentInfo",contentInfo); + //String href = "" + " View details" + ""; + //String contentInfo = msgContentEN + " " + href; + //Map sendMessageMap = new HashMap<>(); + //sendMessageMap.put("hrefFeishu",hrefFeishu); + //sendMessageMap.put("contentInfo",contentInfo); //发送消息 - projectLawsInventoryEOService.sendMessage(msgTitle, msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.COMPLIANCE_CONFIRMATION,MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + //projectLawsInventoryEOService.sendMessage(msgTitle, msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.COMPLIANCE_CONFIRMATION,MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); } if(CollectionUtils.isNotEmpty(currentDaysUserIdList)){ currentDaysUserIdList = currentDaysUserIdList.stream().distinct().collect(Collectors.toList()); - + List sysUsers = sysUserService.listByIds(currentDaysUserIdList); + List thirdIdList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(sysUsers)){ + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(msgTitle); + feishuMsgVo.setCnContentUpper("您好,您的任务将于今天到期,请及时查看处理"); + feishuMsgVo.setCnContentLower("项目: " + projectName + + "\n法规: " + LAW_CN + + "\n发起人: 系统通知"); + feishuMsgVo.setEnContentUpper("Hello! Your task will expire today. Please check and address it ASAP"); + feishuMsgVo.setEnContentLower("Project: " + projectName + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } //您XXX(项目名称)中GB 7258的设计符合性确认任务今天即将结束,请及时查看处理 - String msgContentEN = "The design compliance confirmation of " - + projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName() - + " will expire today. Please check and address it in time."; - String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName()+ " " + projectLibraryBase.getTargetMarket() - + ": You have a design compliance task to complete"; + //String msgContentEN = "The design compliance confirmation of " + // + projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName() + // + " will expire today. Please check and address it in time."; + //String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName()+ " " + projectLibraryBase.getTargetMarket() + // + ": You have a design compliance task to complete"; - 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()); + //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() - + projectLibraryBase.getId() - + JumpLinkEnum.DESIGN_AFFIRM_LINK.getType() - + "&projectName=" + projectNameInfoEO.getProjectName(); + //String hrefFeishu = backUrl + // + JumpLinkEnum.DESIGN_AFFIRM_LINK.getLink() + // + projectLibraryBase.getId() + // + JumpLinkEnum.DESIGN_AFFIRM_LINK.getType() + // + "&projectName=" + projectNameInfoEO.getProjectName(); + + //系统内部跳转链接 - String href = "" + " View details" + ""; - String contentInfo = msgContentEN + " " + href; - Map sendMessageMap = new HashMap<>(); - sendMessageMap.put("hrefFeishu",hrefFeishu); - sendMessageMap.put("contentInfo",contentInfo); + //String href = "" + " View details" + ""; + //String contentInfo = msgContentEN + " " + href; + //Map sendMessageMap = new HashMap<>(); + //sendMessageMap.put("hrefFeishu",hrefFeishu); + //sendMessageMap.put("contentInfo",contentInfo); //发送消息 - projectLawsInventoryEOService.sendMessage(msgTitle, msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.COMPLIANCE_CONFIRMATION,MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); + //projectLawsInventoryEOService.sendMessage(msgTitle, msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.COMPLIANCE_CONFIRMATION,MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); } } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectLibraryBaseMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectLibraryBaseMapper.java index 1611566e0..164a6fb5a 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectLibraryBaseMapper.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectLibraryBaseMapper.java @@ -16,7 +16,9 @@ import java.util.Map; */ public interface ProjectLibraryBaseMapper extends BaseMapper { /**分页列表*/ - IPage queryPageList(IPage page, Map params); + List queryPageList(@Param("params") Map params); + List queryMaimList(); +// IPage queryPageList(IPage page, Map params); List getList(@Param("projectLibraryBase") ProjectLibraryBase projectLibraryBase); diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectLawsInventoryEOMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectLawsInventoryEOMapper.xml index 1a3038c6b..333452acb 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectLawsInventoryEOMapper.xml +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectLawsInventoryEOMapper.xml @@ -55,7 +55,10 @@ from project_laws_inventory where - project_library_id = #{projectLibraryId} + project_library_id in + + #{item} + group by inventory_affirm_status @@ -67,7 +70,10 @@ from project_laws_inventory where - project_library_id = #{projectLibraryId} + project_library_id in + + #{item} + group by task_affirm_status diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectLibraryBaseMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectLibraryBaseMapper.xml index ddbfbb6d4..f438c3f24 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectLibraryBaseMapper.xml +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectLibraryBaseMapper.xml @@ -43,7 +43,13 @@ plb.create_time, plb.sys_org_code, plb.update_by, - plb.update_time + plb.update_time, + plb.parent_id, + plb.project_version, + plb.explanation, + plb.software_version, + plb.sort, + plb.flag from project_library_base as plb left join project_name_info as pni on plb.project_name_id=pni.id left join sys_user as studiouser on plb.studio_engineer=studiouser.id @@ -62,10 +68,10 @@ ( pni.project_name like '%1%%' escape '1' or pni.project_name like '%1%%' escape '1') - (pni.project_name like concat('%',#{params.projectName},'%') or pyni.year_name like concat('%',#{params.projectName},'%')) - - -
+ + + + @@ -111,8 +117,80 @@ and plb.digital_platform like concat('%',#{params.digitalPlatform},'%') - order by plb.create_time desc + order by plb.sort desc, plb.create_time desc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select temp.* from ( + SELECT + pi.id, + pi.project_library_id, + pi.project_laws_inventory_id, + pi.buss_document_library_id, + pi.acti_proc_inst_id, + pni.project_name, + pyni.year_name, + pli.serial_number, + pli.title, + bdl.title_en, + + concat(pli.serial_number,'、',pli.title) as standard_info, + + + concat(pli.serial_number,'、',bdl.title_en) as standard_info, + + pi.flow_type, + createBy.username as "create_by", + pi.end_time, + ( + select + detail.task_id + from + process_info_detail detail + where detail.process_info_id = pi.id and detail.user_id = #{params.currentUserId} order by submit_time desc limit 1 + ) as task_id, + ( + select + detail.task_definition_key + from + process_info_detail detail + where detail.process_info_id = pi.id and detail.user_id = #{params.currentUserId} order by submit_time desc limit 1 + ) as task_definition_key, + pi.status, + pi.prc_num, + pi.prc_name, + plb.project_name_id, + plb.target_market, + plb.studio_engineer + FROM + process_info pi + left join project_library_base plb on plb.id = pi.project_library_id + left join project_name_info pni on pni.id = plb.project_name_id + left join project_year_name_info pyni on pyni.id = plb.year_name_id + left join project_laws_inventory pli on pi.project_laws_inventory_id = pli.id + LEFT JOIN sys_user createBy on createBy.id = pi.create_by + LEFT JOIN buss_document_library bdl ON pi.buss_document_library_id = bdl.id + + and pi.id IN ( + SELECT + pid.process_info_id + FROM + process_info_detail pid + + pid.user_id = #{params.currentUserId} + + and pid.status = #{params.taskStatus} + + + ) + + and pi.flow_type in + + #{item} + + + + + and pi.create_by = #{params.createBy} + + + + ) temp + + order by temp.end_time desc + + + + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/IParamsManifestTodoCenterService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/IParamsManifestTodoCenterService.java new file mode 100644 index 000000000..ab08b4a0a --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/IParamsManifestTodoCenterService.java @@ -0,0 +1,16 @@ +package com.jero.modules.todoCenter.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.jero.modules.todoCenter.vo.ParamsManifestTodoCenterEOPage; + +/** + * @Author: liyawei + * @Description: + * @Date: Created in 09:43 2022/10/11 + */ + +public interface IParamsManifestTodoCenterService { + + // 分页查询当前登录人待办清单列表 + IPage queryPage(ParamsManifestTodoCenterEOPage pageVO); +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/IProcessInfoDetailEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/IProcessInfoDetailEOService.java new file mode 100644 index 000000000..72124c3b0 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/IProcessInfoDetailEOService.java @@ -0,0 +1,85 @@ +package com.jero.modules.todoCenter.service; + +import com.alibaba.fastjson.JSONObject; +import com.jero.common.api.vo.Result; +import com.jero.modules.project.entity.ProjectLawsInventoryEO; +import com.jero.modules.todoCenter.entity.ProcessInfoDetailEO; +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + +/** + * @Description: 流程信息明细表 + * @Author: jero-boot + * @Date: 2022-10-14 + * @Version: V1.0 + */ +public interface IProcessInfoDetailEOService extends IService { + + /** + * 保存 + * + * @param processInfoDetailEO + * @return + */ + void add(ProcessInfoDetailEO processInfoDetailEO); + + /** + * 更新 + * + * @param processInfoDetailEO + * @return + */ + void editById(ProcessInfoDetailEO processInfoDetailEO); + + /** + * 通过id删除 + * + * @param id + * @return + */ + void deleteById(String id); + + /** + * 批量删除 + * + * @param ids + * @return + */ + void deleteByIds(List ids); + + /** + * 通过id查询 + * + * @param id + * @return + */ + ProcessInfoDetailEO queryById(String id); + + /** + * 列表查询 + * + * @return + */ + List queryList(); + + /** + * 流程调用 + * @param jsonObject + * @return + */ + Result processCall(JSONObject jsonObject); + + /** + * 批量插入dre工程师的待办任务 + * @param processInfoDetailEOList + */ + void batchInsertDreUserTask(List processInfoDetailEOList); + + /** + * 更新待办中心流程信息明细表,处理人 + * @param projectLawsInventoryEO + * @param pId + * @param flowType + */ + void updateProcessInfoDetailUserId(ProjectLawsInventoryEO projectLawsInventoryEO, String pId, String flowType); +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/IProcessInfoEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/IProcessInfoEOService.java new file mode 100644 index 000000000..65fa57838 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/IProcessInfoEOService.java @@ -0,0 +1,122 @@ +package com.jero.modules.todoCenter.service; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.jero.common.api.vo.Result; +import com.jero.modules.todoCenter.entity.ProcessInfoEO; +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; +import java.util.Map; + +/** + * @Description: 流程信息表 + * @Author: jero-boot + * @Date: 2022-10-14 + * @Version: V1.0 + */ +public interface IProcessInfoEOService extends IService { + + /** + * 保存 + * + * @param processInfoEO + * @return + */ + void add(ProcessInfoEO processInfoEO); + + /** + * 更新 + * + * @param processInfoEO + * @return + */ + void editById(ProcessInfoEO processInfoEO); + + /** + * 通过id删除 + * + * @param id + * @return + */ + void deleteById(String id); + + /** + * 批量删除 + * + * @param ids + * @return + */ + void deleteByIds(List ids); + + /** + * 通过id查询 + * + * @param id + * @return + */ + ProcessInfoEO queryById(String id); + + /** + * 列表查询 + * + * @return + */ + List queryList(); + + /** + * 流程调用 + * @param jsonObject + * @return + */ + Result processCall(JSONObject jsonObject); + + /** + * 项目流程-待办任务列表 + * @param params + * @return + */ + IPage projectProcessTodoTaskList(Map params); + + /** + * 项目流程-已办任务列表 + * @param params + * @return + */ + IPage projectProcessDoneProcess(Map params); + + /** + * 项目流程-已发任务列表 + * @param params + * @return + */ + IPage projectProcessIssuedProcess(Map params); + + /** + * 法规清单变更,清除对应待办中心数据。 + * @param params + */ + void change(Map params); + + /** + * 法规评估-待办任务列表 + * @param params + * @return + */ + IPage lawsAssessTodoTaskList(Map params); + + /** + * 法规评估-已办任务列表 + * @param params + * @return + */ + IPage lawsAssessDoneProcess(Map params); + + /** + * 法规评估-已发任务列表 + * @param params + * @return + */ + IPage lawsAssessIssuedProcess(Map params); + + Result initHistoryData(Map params); +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/impl/ParamsManifestTodoCenterServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/impl/ParamsManifestTodoCenterServiceImpl.java new file mode 100644 index 000000000..5566e8fb5 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/impl/ParamsManifestTodoCenterServiceImpl.java @@ -0,0 +1,350 @@ +package com.jero.modules.todoCenter.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.system.vo.LoginUser; +import com.jero.modules.cert.collect.entity.ParamsCollectManifestEO; +import com.jero.modules.cert.collect.enums.CollectManifestStateEnum; +import com.jero.modules.cert.collect.enums.CollectManifestUserTypeEnum; +import com.jero.modules.cert.collect.enums.ManifestStateEnum; +import com.jero.modules.cert.collect.mapper.ParamsCollectManifestEOMapper; +import com.jero.modules.cert.collect.mapper.ParamsManifestEOMapper; +import com.jero.modules.project.entity.ProjectLibraryBase; +import com.jero.modules.project.entity.ProjectRelatedPersonnel; +import com.jero.modules.project.mapper.ProjectLibraryBaseMapper; +import com.jero.modules.project.service.IProjectRelatedPersonnelService; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.service.ISysUserService; +import com.jero.modules.todoCenter.entity.ParamsManifestTodoCenterEO; +import com.jero.modules.todoCenter.service.IParamsManifestTodoCenterService; +import com.jero.modules.todoCenter.vo.ParamsManifestTodoCenterEOPage; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author: liyawei + * @Description: + * @Date: Created in 09:43 2022/10/11 + */ +@Service +public class ParamsManifestTodoCenterServiceImpl implements IParamsManifestTodoCenterService { + @Autowired + private ProjectLibraryBaseMapper projectLibraryBaseMapper; + + @Autowired + private ISysUserService sysUserService; + + @Autowired + private IProjectRelatedPersonnelService projectRelatedPersonnelService; + + @Autowired + private ParamsCollectManifestEOMapper paramsCollectManifestEOMapper; + + @Autowired + private ParamsManifestEOMapper paramsManifestEOMapper; + + @Override + public IPage queryPage(ParamsManifestTodoCenterEOPage pageVO) { + + // 查询所有项目下的 状态为收集中的清单 + pageVO.setState(ManifestStateEnum.COLLECTING.getValue()); + List paramsManifestEOListAll = paramsManifestEOMapper.listForTodoCenter(pageVO); + + // 筛选出当前登录人能在清单中是homo/sdt/dre角色的清单,并分页 + LambdaQueryWrapper projectLibraryBaseLambdaQueryWrapper = new LambdaQueryWrapper<>(); + List projectLibraryBaseListAll = projectLibraryBaseMapper.selectList(projectLibraryBaseLambdaQueryWrapper); + + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // 获取当前登录用户 + List paramsManifestEOList = new ArrayList<>(); + List projectLibraryBaseList = new ArrayList<>(); + Map manifestUserTypeOfHomo = new HashMap<>(); + Map manifestUserTypeOfSdt = new HashMap<>(); + Map manifestUserTypeOfDre = new HashMap<>(); + Map> paramsManifestEOListMap = new HashMap<>(); + + // 查询清单的所有参数项 + List pcmListAll = paramsCollectManifestEOMapper.listInfoOfTodoCenter(); + + String userType = ""; + for(ParamsManifestTodoCenterEO paramsManifestEO : paramsManifestEOListAll) { + // 查询清单的所有参数项 + List pcmList = pcmListAll.stream().filter(e->paramsManifestEO.getId().equals(e.getParamsManifestId())).collect(Collectors.toList()); + int count1 = (int) pcmList.stream().filter(e-> CollectManifestStateEnum.SUBMIT.getValue().equals(e.getState()) + || CollectManifestStateEnum.SYNC_REPORT.getValue().equals(e.getState())).count(); + if (count1 == pcmList.size()) { + continue; + } + + // 判断是不是homo角色 + projectLibraryBaseList = projectLibraryBaseListAll.stream().filter(e->paramsManifestEO.getProjectId().equals(e.getId())).collect(Collectors.toList()); + userType = getLoginUserTypeOfHomo(projectLibraryBaseList, loginUser); + if(StringUtils.isNotBlank(userType)) { + paramsManifestEOList.add(paramsManifestEO); + manifestUserTypeOfHomo.put(paramsManifestEO.getId(), true); + paramsManifestEOListMap.put(paramsManifestEO.getId(), pcmList); + continue; + } + + // 判断是不是sdt角色 + userType = getLoginUserTypeOfSdt(pcmList, loginUser); + if(StringUtils.isNotBlank(userType)) { + paramsManifestEOList.add(paramsManifestEO); + manifestUserTypeOfSdt.put(paramsManifestEO.getId(), true); + paramsManifestEOListMap.put(paramsManifestEO.getId(), pcmList); + continue; + } + + // 判断是不是dre角色 + userType = getLoginUserTypeOfDre(pcmList, loginUser); + if(StringUtils.isNotBlank(userType)) { + paramsManifestEOList.add(paramsManifestEO); + manifestUserTypeOfDre.put(paramsManifestEO.getId(), true); + paramsManifestEOListMap.put(paramsManifestEO.getId(), pcmList); + continue; + } + } + + // 分页 + paramsManifestEOList = paramsManifestEOList.stream() + .sorted(Comparator.comparing(ParamsManifestTodoCenterEO::getCreateTime).reversed()) + .collect(Collectors.toList()); + List result = new ArrayList<>(); + int pageNo = pageVO.getPageNo(); + int pageSize = pageVO.getPageSize(); + IPage page = new Page(pageNo, pageSize); + page.setTotal(paramsManifestEOList.size()); + + int subSize = pageVO.getPageSize(); // 每页记录数 + int subCount = paramsManifestEOList.size(); // 总记录数 + int subPageTotal = (subCount / subSize) + ((subCount % subSize > 0) ? 1 : 0); //总页数 + // 分页计算 + int fromIndex = (pageNo-1) * subSize; + int toIndex = ((pageNo == subPageTotal) ? subCount : (pageNo * subSize)); + if( fromIndex <= subCount && toIndex <= subCount) { + result = paramsManifestEOList.subList(fromIndex, toIndex); + } else { + result = new ArrayList(); + } + + // 统计清单中的待办参数数据 + List records = getStatistics(result, manifestUserTypeOfHomo, manifestUserTypeOfSdt, manifestUserTypeOfDre, paramsManifestEOListMap,loginUser); + page.setRecords(records); + return page; + } + + + public List getStatistics(List paramsManifestEOList, Map manifestUserTypeOfHomo + ,Map manifestUserTypeOfSdt, Map manifestUserTypeOfDre, Map> paramsManifestEOListMap, LoginUser loginUser) { + List paramsManifestTodoCenterEOList = new ArrayList<>(); + + for(ParamsManifestTodoCenterEO paramsManifestTodoCenterEO : paramsManifestEOList) { + // 查询清单的所有参数项 + ParamsCollectManifestEO paramsCollectManifestEO = new ParamsCollectManifestEO(); + paramsCollectManifestEO.setParamsManifestId(paramsManifestTodoCenterEO.getId()); + List pcmList = paramsManifestEOListMap.get(paramsManifestTodoCenterEO.getId()); + int count = 0; + + if (ObjectUtil.isNotEmpty(paramsManifestTodoCenterEO.getId()) + && ObjectUtil.isNotEmpty(manifestUserTypeOfHomo.get(paramsManifestTodoCenterEO.getId()))) { + // 统计待发起数量 包括状态:待发起收集,变更,工程接口人退回 + count = (int) pcmList.stream().filter(e-> CollectManifestStateEnum.WAIT_COLLECT.getValue().equals(e.getState()) + || CollectManifestStateEnum.SDT_BACK.getValue().equals(e.getState()) + || CollectManifestStateEnum.CHANGE.getValue().equals(e.getState())).count(); + if (count > 0) { + paramsManifestTodoCenterEO.setWaitCollectNum(count); + } + // 统计待分配数量 包括状态:待工程接口人处理,填写人退回 + count = (int) pcmList.stream().filter(e-> (CollectManifestStateEnum.WAIT_SDT.getValue().equals(e.getState()) + || CollectManifestStateEnum.DRE_BACK.getValue().equals(e.getState()))).count(); + if (count > 0) { + paramsManifestTodoCenterEO.setWaitSdtNum(count); + } + // 统计待填写数量 包括状态:待填写,认证工程师退回 + count = (int) pcmList.stream().filter(e-> (CollectManifestStateEnum.WAIT_FILL.getValue().equals(e.getState()) + || CollectManifestStateEnum.CERT_BACK.getValue().equals(e.getState()))).count(); + if (count > 0) { + paramsManifestTodoCenterEO.setWaitFillNum(count); + } + } else if (ObjectUtil.isNotEmpty(paramsManifestTodoCenterEO.getId()) + && ObjectUtil.isNotEmpty(manifestUserTypeOfSdt.get(paramsManifestTodoCenterEO.getId()))) { + // 统计待分配数量 包括状态:待工程接口人处理,填写人退回 + count = (int) pcmList.stream().filter(e-> (CollectManifestStateEnum.WAIT_SDT.getValue().equals(e.getState()) + || CollectManifestStateEnum.DRE_BACK.getValue().equals(e.getState())) + && loginUser.getUsername().equals(e.getSdt())).count(); + if (count > 0) { + paramsManifestTodoCenterEO.setWaitSdtNum(count); + } + // 统计待填写数量 包括状态:待填写,认证工程师退回 + count = (int) pcmList.stream().filter(e-> (CollectManifestStateEnum.WAIT_FILL.getValue().equals(e.getState()) + || CollectManifestStateEnum.CERT_BACK.getValue().equals(e.getState()))).count(); + if (count > 0) { + paramsManifestTodoCenterEO.setWaitFillNum(count); + } + + } else if (ObjectUtil.isNotEmpty(paramsManifestTodoCenterEO.getId()) + && ObjectUtil.isNotEmpty(manifestUserTypeOfDre.get(paramsManifestTodoCenterEO.getId()))) { + // 统计待填写数量 包括状态:待填写,认证工程师退回 + count = (int) pcmList.stream().filter(e-> (CollectManifestStateEnum.WAIT_FILL.getValue().equals(e.getState()) + || CollectManifestStateEnum.CERT_BACK.getValue().equals(e.getState())) + && loginUser.getUsername().equals(e.getDre())).count(); + if (count > 0) { + paramsManifestTodoCenterEO.setWaitFillNum(count); + } + + } + + paramsManifestTodoCenterEOList.add(paramsManifestTodoCenterEO); + } + return paramsManifestTodoCenterEOList; + } + + /** + * 根据项目id,清单id查询当前登录人的Homo角色 + * @param projectId + * @param paramsManifestId + * @return + */ + public List getLoginUserTypes(String projectId, String paramsManifestId, LoginUser loginUser) { + + List userTypeList = new ArrayList<>(); // 一个用户可以有多个用户类型 +// LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // 获取当前登录用户 + + // 查询项目下所有责任领域下的 homo人员 + List projectLibraryBaseList = projectLibraryBaseMapper.queryById(projectId); + List homoList = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(projectLibraryBaseList)) { + String homoIdStr = projectLibraryBaseList.get(0).getCertificationEngineer(); + if (StringUtils.isNotEmpty(homoIdStr)) { + List homoIdList = Arrays.asList(homoIdStr.split(",")).stream().distinct().collect(Collectors.toList()); + homoList = sysUserService.listByIds(homoIdList).stream().map(SysUser::getUsername).collect(Collectors.toList()); + } + } + + // 查询项目下所有责任领域下的 sdt人员 + List sdtList = new ArrayList<>(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ProjectRelatedPersonnel::getProjectId, projectId); + List prpList = projectRelatedPersonnelService.list(queryWrapper); +// String homoIdStr = prpList.stream().map(e -> e.getCertificationEngineer()).collect(Collectors.joining(",")); + String sdtIdStr = prpList.stream().map(e -> e.getEngineeringInterfacePerson()).collect(Collectors.joining(",")); + // 项目下有homo-->不一定有sdt + if(StringUtils.isNotBlank(sdtIdStr)) { + List sdtIdList = Arrays.asList(sdtIdStr.split(",")).stream().distinct().collect(Collectors.toList()); + sdtList = sysUserService.listByIds(sdtIdList).stream().map(SysUser::getUsername).collect(Collectors.toList()); + } + + // 查询项目下参数清单下收集参数项中的 sdt,dre人员 + ParamsCollectManifestEO paramsCollectManifestEO = new ParamsCollectManifestEO(); + paramsCollectManifestEO.setParamsManifestId(paramsManifestId); + List pcmList = paramsCollectManifestEOMapper.listInfo(paramsCollectManifestEO); + List sdtListOfPCM = pcmList.stream() + .filter(e->StringUtils.isNotEmpty(e.getSdt())) + .map(ParamsCollectManifestEO::getSdt) + .distinct() + .collect(Collectors.toList()); + sdtList.addAll(sdtListOfPCM); // 需要取并集,因为存在参数项开始收集但 人员相关名单中sdt被修改的情况 + + List dreListOfPCM = pcmList.stream() + .filter(e->StringUtils.isNotEmpty(e.getDre())) + .map(ParamsCollectManifestEO::getDre) + .distinct() + .collect(Collectors.toList()); + + String loginUserName = loginUser.getUsername().toLowerCase(); + + homoList = toLowerCaseOfList(homoList); + sdtList = toLowerCaseOfList(sdtList); + dreListOfPCM = toLowerCaseOfList(dreListOfPCM); + + + if (homoList.contains(loginUserName)) { + userTypeList.add(CollectManifestUserTypeEnum.HOMO.getValue()); + } + + if (sdtList.contains(loginUserName)) { + userTypeList.add(CollectManifestUserTypeEnum.SDT.getValue()); + } + + if (dreListOfPCM.contains(loginUserName)) { + userTypeList.add(CollectManifestUserTypeEnum.DRE.getValue()); + } + + return userTypeList; + } + + public String getLoginUserTypeOfHomo(List projectLibraryBaseList, LoginUser loginUser) { + + String userType = ""; // 一个用户可以有多个用户类型 + + // 查询项目下的 homo人员 + List homoList = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(projectLibraryBaseList)) { + String homoIdStr = projectLibraryBaseList.get(0).getCertificationEngineer(); + if (StringUtils.isNotEmpty(homoIdStr)) { + List homoIdList = Arrays.asList(homoIdStr.split(",")).stream().distinct().collect(Collectors.toList()); + homoList = sysUserService.listByIds(homoIdList).stream().map(SysUser::getUsername).collect(Collectors.toList()); + } + } + + String loginUserName = loginUser.getUsername().toLowerCase(); + homoList = toLowerCaseOfList(homoList); + if (homoList.contains(loginUserName)) { + userType = CollectManifestUserTypeEnum.HOMO.getValue(); + } + return userType; + } + + public String getLoginUserTypeOfSdt(List pcmList, LoginUser loginUser) { + + String userType = ""; // 一个用户可以有多个用户类型 + + List sdtListOfPCM = pcmList.stream() + .filter(e->StringUtils.isNotEmpty(e.getSdt())) + .map(ParamsCollectManifestEO::getSdt) + .distinct() + .collect(Collectors.toList()); + + String loginUserName = loginUser.getUsername().toLowerCase(); + sdtListOfPCM = toLowerCaseOfList(sdtListOfPCM); + if (sdtListOfPCM.contains(loginUserName)) { + userType = CollectManifestUserTypeEnum.SDT.getValue(); + } + return userType; + } + + public String getLoginUserTypeOfDre(List pcmList, LoginUser loginUser) { + + String userType = ""; // 一个用户可以有多个用户类型 + + List dreListOfPCM = pcmList.stream() + .filter(e->StringUtils.isNotEmpty(e.getDre())) + .map(ParamsCollectManifestEO::getDre) + .distinct() + .collect(Collectors.toList()); + + String loginUserName = loginUser.getUsername().toLowerCase(); + dreListOfPCM = toLowerCaseOfList(dreListOfPCM); + if (dreListOfPCM.contains(loginUserName)) { + userType = CollectManifestUserTypeEnum.DRE.getValue(); + } + return userType; + } + + private List toLowerCaseOfList(List list) { + List newList = list; + if (CollectionUtil.isNotEmpty(list)) { + newList = list.stream().map(String::toLowerCase).collect(Collectors.toList()); + } + return newList; + } + + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/impl/ProcessInfoDetailEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/impl/ProcessInfoDetailEOServiceImpl.java new file mode 100644 index 000000000..feb2a195e --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/impl/ProcessInfoDetailEOServiceImpl.java @@ -0,0 +1,226 @@ +package com.jero.modules.todoCenter.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.jero.common.api.vo.Result; +import com.jero.common.exception.JeroBootException; +import com.jero.modules.project.entity.ProjectLawsInventoryEO; +import com.jero.modules.project.enums.OperatorTypeEnum; +import com.jero.modules.project.enums.RequestSourceEnum; +import com.jero.modules.todoCenter.entity.ProcessInfoDetailEO; +import com.jero.modules.todoCenter.mapper.ProcessInfoDetailEOMapper; +import com.jero.modules.todoCenter.service.IProcessInfoDetailEOService; +import com.jero.modules.wkflow.enums.DesignComplianceNodeEnum; +import com.jero.modules.wkflow.enums.FlowTypeEnum; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Date; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +/** + * @Description: 流程信息明细表 + * @Author: jero-boot + * @Date: 2022-10-14 + * @Version: V1.0 + */ +@Service +@Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class) +public class ProcessInfoDetailEOServiceImpl extends ServiceImpl implements IProcessInfoDetailEOService { + + /** + * 保存 + * + * @param processInfoDetailEO + * @return + */ + @Override + public void add(ProcessInfoDetailEO processInfoDetailEO) { + Date now = new Date(); + processInfoDetailEO.setCreateTime(now); + processInfoDetailEO.setUpdateTime(now); + save(processInfoDetailEO); + } + + /** + * 更新 + * + * @param processInfoDetailEO + * @return + */ + @Override + public void editById(ProcessInfoDetailEO processInfoDetailEO) { + Date now = new Date(); + processInfoDetailEO.setUpdateTime(now); + saveOrUpdate(processInfoDetailEO); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @Override + public void deleteById(String id) { + removeById(id); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @Override + public void deleteByIds(List ids) { + removeByIds(ids); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @Override + public ProcessInfoDetailEO queryById(String id) { + return getById(id); + } + + /** + * 列表查询 + * + * @return + */ + @Override + public List queryList() { + return list(); + } + + @Override + public Result processCall(JSONObject jsonObject) { + String requestSource = jsonObject.getString("requestSource"); + if(StringUtils.isEmpty(requestSource)){ + throw new JeroBootException("请求来源不能为空!"); + } + if(!StringUtils.equals(requestSource, RequestSourceEnum.WORK_FLOW.getValue())){ + throw new JeroBootException("来源有误,没有权限调用该接口!"); + } + + String operatorType = jsonObject.getString("operatorType"); + if(StringUtils.isEmpty(operatorType)){ + throw new JeroBootException("操作类型不能为空!"); + } + + if(StringUtils.equals(operatorType, OperatorTypeEnum.ADD.getValue())){ + JSONArray processInfoDetailList = jsonObject.getJSONArray("processInfoDetailList"); + ProcessInfoDetailEO processInfoDetailEO = null; + List detailEOList = new ArrayList<>(); + for (Object processInfoDetail : processInfoDetailList) { + processInfoDetailEO = JSONObject.parseObject(JSONObject.toJSONString(processInfoDetail), ProcessInfoDetailEO.class); + // 当前流程 当前用户 的数据删掉 确保唯一。 + QueryWrapper deleteWrapper = new QueryWrapper<>(); + deleteWrapper.lambda().eq(ProcessInfoDetailEO::getActiProcInstId,processInfoDetailEO.getActiProcInstId()); + deleteWrapper.lambda().eq(ProcessInfoDetailEO::getUserId,processInfoDetailEO.getUserId()); + deleteWrapper.lambda().eq(ProcessInfoDetailEO::getFlowType,processInfoDetailEO.getFlowType()); + this.baseMapper.delete(deleteWrapper); + detailEOList.add(processInfoDetailEO); + } + this.saveBatch(detailEOList); + }else if(StringUtils.equals(operatorType, OperatorTypeEnum.UPDATE.getValue())){ + ProcessInfoDetailEO processInfoDetailEO = JSONObject.parseObject(jsonObject.toString(), ProcessInfoDetailEO.class); + this.baseMapper.updateById(processInfoDetailEO); + }else if(StringUtils.equals(operatorType, OperatorTypeEnum.QUERY.getValue())){ + String userId = jsonObject.getString("userId"); + String flowType = jsonObject.getString("flowType"); + String actiProcInstId = jsonObject.getString("actiProcInstId"); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(ProcessInfoDetailEO::getUserId,userId); + queryWrapper.lambda().eq(ProcessInfoDetailEO::getFlowType,flowType); + queryWrapper.lambda().eq(ProcessInfoDetailEO::getActiProcInstId,actiProcInstId); + queryWrapper.isNull("task_id"); + + List processInfoDetailEOList = this.baseMapper.selectList(queryWrapper); + Result> objectResult = new Result<>(); + objectResult.setResult(processInfoDetailEOList); + objectResult.setSuccess(true); + return objectResult; + }else if(StringUtils.equals(operatorType, OperatorTypeEnum.UPDATE_PROCESS_INFO_DETAIL_BY_TASK_ID.getValue())){ + String taskId = jsonObject.getString("taskId"); + String taskStatus = jsonObject.getString("taskStatus"); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.set(ProcessInfoDetailEO::getStatus,taskStatus); + updateWrapper.set(ProcessInfoDetailEO::getSubmitTime,new Date()); + updateWrapper.eq(ProcessInfoDetailEO::getTaskId,taskId); + this.update(updateWrapper); + } + return new Result<>().success("调用成功!"); + } + + @Override + public void batchInsertDreUserTask(List processInfoDetailEOList) { + processInfoDetailEOList.forEach(detail -> { + QueryWrapper removeWrap = new QueryWrapper<>(); + removeWrap.lambda().eq(ProcessInfoDetailEO::getUserId,detail.getUserId()); + removeWrap.lambda().eq(ProcessInfoDetailEO::getFlowType,detail.getFlowType()); + removeWrap.lambda().eq(ProcessInfoDetailEO::getActiProcInstId,detail.getActiProcInstId()); + removeWrap.lambda().eq(ProcessInfoDetailEO::getTaskDefinitionKey,detail.getTaskDefinitionKey()); + this.remove(removeWrap); + }); + + this.saveBatch(processInfoDetailEOList); + } + + @Override + public void updateProcessInfoDetailUserId(ProjectLawsInventoryEO projectLawsInventoryEO, String pId, String flowType) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(ProcessInfoDetailEO::getActiProcInstId,pId); + queryWrapper.lambda().eq(ProcessInfoDetailEO::getFlowType,flowType); + List processInfoDetailEOList = this.list(queryWrapper); + if(CollectionUtils.isNotEmpty(processInfoDetailEOList)){ + for (ProcessInfoDetailEO processInfoDetailEO : processInfoDetailEOList) { + if(StringUtils.equals(flowType, FlowTypeEnum.SJFHXSHLC.getValue())){ + if(StringUtils.equals(processInfoDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.THE_RESPONSIBLE_PERSON_HANDLES_THE_TASK.getKey())){ + //更新责任人的任务 + processInfoDetailEO.setUserId(projectLawsInventoryEO.getDesignDutyId()); + } + if(StringUtils.equals(processInfoDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.SPONSOR_REVIEW.getKey())){ + //更新发起人的任务 + processInfoDetailEO.setUserId(projectLawsInventoryEO.getDesignInitiatorId()); + } + } + if(StringUtils.equals(flowType, FlowTypeEnum.PREHOMOQRLC.getValue())){ + if(StringUtils.equals(processInfoDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.THE_RESPONSIBLE_PERSON_HANDLES_THE_TASK.getKey())){ + //更新责任人的任务 + processInfoDetailEO.setUserId(projectLawsInventoryEO.getPrehomoDutyId()); + } + if(StringUtils.equals(processInfoDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.SPONSOR_REVIEW.getKey())){ + //更新发起人的任务 + processInfoDetailEO.setUserId(projectLawsInventoryEO.getPrehomoInitiatorId()); + } + } + + if(StringUtils.equals(flowType,FlowTypeEnum.YZFHXSCLC.getValue())){ + if(StringUtils.equals(processInfoDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.THE_RESPONSIBLE_PERSON_HANDLES_THE_TASK.getKey())){ + //更新责任人的任务 + processInfoDetailEO.setUserId(projectLawsInventoryEO.getVerifyDutyId()); + } + if(StringUtils.equals(processInfoDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.SPONSOR_REVIEW.getKey())){ + //更新发起人的任务 + processInfoDetailEO.setUserId(projectLawsInventoryEO.getVerifyInitiatorId()); + } + } + this.baseMapper.updateById(processInfoDetailEO); + } + } + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/impl/ProcessInfoEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/impl/ProcessInfoEOServiceImpl.java new file mode 100644 index 000000000..e6c4d9d0c --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/service/impl/ProcessInfoEOServiceImpl.java @@ -0,0 +1,1065 @@ +package com.jero.modules.todoCenter.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.api.vo.Result; +import com.jero.common.exception.JeroBootException; +import com.jero.common.system.vo.LoginUser; +import com.jero.modules.lawsOpinionGather.entity.LawsOpinionGatherEO; +import com.jero.modules.lawsOpinionGather.service.ILawsOpinionGatherEOService; +import com.jero.modules.lawsTechnologyEvaluation.entity.LawsTechnologyEvaluationEO; +import com.jero.modules.lawsTechnologyEvaluation.entity.LawsTechnologyEvaluationFlowDetailEO; +import com.jero.modules.lawsTechnologyEvaluation.service.ILawsTechnologyEvaluationEOService; +import com.jero.modules.lawsTechnologyEvaluation.service.ILawsTechnologyEvaluationFlowDetailEOService; +import com.jero.modules.project.entity.ProjectLawsInventoryEO; +import com.jero.modules.project.entity.ProjectLibraryBase; +import com.jero.modules.project.entity.ProjectTaskInventoryDetailEO; +import com.jero.modules.project.entity.ProjectTaskInventoryEO; +import com.jero.modules.project.enums.*; +import com.jero.modules.project.service.IProjectLawsInventoryEOService; +import com.jero.modules.project.service.IProjectLibraryBaseService; +import com.jero.modules.project.service.IProjectTaskInventoryDetailEOService; +import com.jero.modules.project.service.IProjectTaskInventoryEOService; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.service.ISysUserService; +import com.jero.modules.todoCenter.entity.ProcessInfoDetailEO; +import com.jero.modules.todoCenter.entity.ProcessInfoEO; +import com.jero.modules.todoCenter.enums.TodoCenterStatusEnum; +import com.jero.modules.todoCenter.mapper.ProcessInfoEOMapper; +import com.jero.modules.todoCenter.service.IProcessInfoDetailEOService; +import com.jero.modules.todoCenter.service.IProcessInfoEOService; +import com.jero.modules.todoCenter.vo.ProcessInfoVO; +import com.jero.modules.wkflow.enums.FlowTypeEnum; +import com.jero.modules.wkflow.feginClient.impl.WorkFlowFeignClientImpl; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +/** + * @Description: 流程信息表 + * @Author: jero-boot + * @Date: 2022-10-14 + * @Version: V1.0 + */ +@Service +@Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class) +public class ProcessInfoEOServiceImpl extends ServiceImpl implements IProcessInfoEOService { + + @Autowired + private IProcessInfoDetailEOService processInfoDetailEOService; + @Autowired + private ISysUserService sysUserService; + @Autowired + private IProjectTaskInventoryDetailEOService projectTaskInventoryDetailEOService; + @Autowired + private IProjectTaskInventoryEOService projectTaskInventoryEOService; + @Autowired + private IProjectLawsInventoryEOService projectLawsInventoryEOService; + @Autowired + private WorkFlowFeignClientImpl workFlowFeignClient; + @Autowired + private IProjectLibraryBaseService projectLibraryBaseService; + @Autowired + private ILawsOpinionGatherEOService lawsOpinionGatherEOService; + @Autowired + private ILawsTechnologyEvaluationEOService lawsTechnologyEvaluationEOService; + @Autowired + private ILawsTechnologyEvaluationFlowDetailEOService lawsTechnologyEvaluationFlowDetailEOService; + + /** + * 保存 + * + * @param processInfoEO + * @return + */ + @Override + public void add(ProcessInfoEO processInfoEO) { + Date now = new Date(); + processInfoEO.setCreateTime(now); + processInfoEO.setUpdateTime(now); + save(processInfoEO); + } + + /** + * 更新 + * + * @param processInfoEO + * @return + */ + @Override + public void editById(ProcessInfoEO processInfoEO) { + Date now = new Date(); + processInfoEO.setUpdateTime(now); + saveOrUpdate(processInfoEO); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @Override + public void deleteById(String id) { + removeById(id); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @Override + public void deleteByIds(List ids) { + removeByIds(ids); + + QueryWrapper detailRemoveWrap = new QueryWrapper<>(); + detailRemoveWrap.lambda().in(ProcessInfoDetailEO::getProcessInfoId,ids); + this.processInfoDetailEOService.remove(detailRemoveWrap); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @Override + public ProcessInfoEO queryById(String id) { + return getById(id); + } + + /** + * 列表查询 + * + * @return + */ + @Override + public List queryList() { + return list(); + } + + @Override + public Result processCall(JSONObject jsonObject) { + String requestSource = jsonObject.getString("requestSource"); + if(StringUtils.isEmpty(requestSource)){ + throw new JeroBootException("请求来源不能为空!"); + } + if(!StringUtils.equals(requestSource, RequestSourceEnum.WORK_FLOW.getValue())){ + throw new JeroBootException("来源有误,没有权限调用该接口!"); + } + + String operatorType = jsonObject.getString("operatorType"); + if(StringUtils.isEmpty(operatorType)){ + throw new JeroBootException("操作类型不能为空!"); + } + if(StringUtils.equals(operatorType, OperatorTypeEnum.ADD.getValue())){ + Object processInfoJson = jsonObject.get("processInfo"); + ProcessInfoEO processInfo = JSONObject.parseObject( + JSONObject.toJSONString(processInfoJson),ProcessInfoEO.class + ); + this.baseMapper.insert(processInfo); + }else if(StringUtils.equals(operatorType, OperatorTypeEnum.UPDATE_STATUS.getValue())){ + ProcessInfoEO processInfo = JSONObject.parseObject(JSONObject.toJSONString(jsonObject.get("processInfo")),ProcessInfoEO.class); + this.updateById(processInfo); + } + return new Result<>().success("调用成功!"); + } + + @Override + public IPage projectProcessTodoTaskList(Map params) { + Integer pageNo = Integer.parseInt(params.get("pageNo").toString()); + Integer pageSize = Integer.parseInt(params.get("pageSize").toString()); + String cut = (String) params.get("cut"); + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + List flowTypeList = new ArrayList<>(); + flowTypeList.add(FlowTypeEnum.RWQRLC.getValue()); + flowTypeList.add(FlowTypeEnum.SJFHXSHLC.getValue()); + flowTypeList.add(FlowTypeEnum.YZFHXSCLC.getValue()); + flowTypeList.add(FlowTypeEnum.PREHOMOQRLC.getValue()); + params.put("flowTypeList",flowTypeList); + params.put("taskStatus", TaskStatusEnum.NOT_DONE.getValue()); + params.put("currentUserId",currentUser.getId()); + params.put("qdqrFlowTypeValue",FlowTypeEnum.QDQR.getValue()); + + IPage page = new Page(pageNo, pageSize); + IPage result = this.baseMapper.queryProjectProcessTodoTaskListList(page,params); + this.disposeData(result.getRecords(),cut); + return result; + } + + @Override + public IPage projectProcessDoneProcess(Map params) { + Integer pageNo = Integer.parseInt(params.get("pageNo").toString()); + Integer pageSize = Integer.parseInt(params.get("pageSize").toString()); + String cut = (String) params.get("cut"); + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + List flowTypeList = new ArrayList<>(); + this.setFlowTypeList(flowTypeList); + params.put("flowTypeList",flowTypeList); + params.put("taskStatus", TaskStatusEnum.HAVE_DONE.getValue()); + params.put("currentUserId",currentUser.getId()); + + IPage page = new Page(pageNo, pageSize); + IPage result = this.baseMapper.queryProjectProcessPageList(page,params); + this.disposeData(result.getRecords(),cut); + return result; + } + + @Override + public IPage projectProcessIssuedProcess(Map params) { + Integer pageNo = Integer.parseInt(params.get("pageNo").toString()); + Integer pageSize = Integer.parseInt(params.get("pageSize").toString()); + String cut = (String) params.get("cut"); + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + params.put("createBy",currentUser.getId()); + + List flowTypeList = new ArrayList<>(); + this.setFlowTypeList(flowTypeList); + params.put("flowTypeList",flowTypeList); + params.put("currentUserId",currentUser.getId()); + params.put("queryType","issuedProcess"); + + IPage page = new Page(pageNo, pageSize); + IPage result = this.baseMapper.queryProjectProcessPageList(page,params); + this.disposeData(result.getRecords(),cut); + return result; + } + + @Override + public void change(Map params) { + //需要清除数据的法规清单ids + String ids = (String)params.get("ids"); + List projectLawsInventoryIdList = Arrays.asList(ids.split(",")); + if(CollectionUtils.isNotEmpty(projectLawsInventoryIdList)){ + //清除清单确认相关数据 + QueryWrapper qdqrDetailRemoveWrap = new QueryWrapper<>(); + qdqrDetailRemoveWrap.lambda().in(ProcessInfoDetailEO::getProjectLawsInventoryId,projectLawsInventoryIdList); + qdqrDetailRemoveWrap.lambda().eq(ProcessInfoDetailEO::getFlowType,FlowTypeEnum.QDQR.getValue()); + this.processInfoDetailEOService.remove(qdqrDetailRemoveWrap); + + //查询出所有的清单确认流程 + QueryWrapper qdqrProcessInfoWrap = new QueryWrapper<>(); + qdqrProcessInfoWrap.lambda().eq(ProcessInfoEO::getFlowType,FlowTypeEnum.QDQR.getValue()); + List qdqrProcessInfoList = this.list(qdqrProcessInfoWrap); + if(CollectionUtils.isNotEmpty(qdqrProcessInfoList)){ + List qdqrProcessInfoIdList = qdqrProcessInfoList.stream().map(ProcessInfoEO::getId).distinct().collect(Collectors.toList()); + + QueryWrapper qdqrDetailQueryWrap = new QueryWrapper<>(); + qdqrDetailQueryWrap.lambda().in(ProcessInfoDetailEO::getProcessInfoId,qdqrProcessInfoIdList); + List qdqrDetailList = this.processInfoDetailEOService.list(qdqrDetailQueryWrap); + if(CollectionUtils.isNotEmpty(qdqrDetailList)){ + qdqrProcessInfoIdList = qdqrProcessInfoIdList.stream().filter(qdqrProcessInfoId -> { + boolean flag = true; + for (ProcessInfoDetailEO processInfoDetailEO : qdqrDetailList) { + if (StringUtils.equals(qdqrProcessInfoId, processInfoDetailEO.getProcessInfoId())) { + flag = false; + break; + } + } + return flag; + }).distinct().collect(Collectors.toList()); + }else { + qdqrProcessInfoIdList.addAll(qdqrProcessInfoIdList); + } + + if(CollectionUtils.isNotEmpty(qdqrProcessInfoIdList)){ + this.baseMapper.deleteBatchIds(qdqrProcessInfoIdList); + } + } + + /** + * 1.清除任务确认相关数据 + * 2.清除设计符合性流程相关数据 + * 3.清除Pre-Homo确认流程相关数据 + * 4.清除验证符合性流程相关数据 + */ + List flowTypeList = new ArrayList<>(); + flowTypeList.add(FlowTypeEnum.RWQRLC.getValue()); + flowTypeList.add(FlowTypeEnum.SJFHXSHLC.getValue()); + flowTypeList.add(FlowTypeEnum.PREHOMOQRLC.getValue()); + flowTypeList.add(FlowTypeEnum.YZFHXSCLC.getValue()); + + //根据法规清单id,查询待办中心数据 + QueryWrapper processInfoQueryWrap = new QueryWrapper<>(); + processInfoQueryWrap.lambda().in(ProcessInfoEO::getProjectLawsInventoryId,projectLawsInventoryIdList); + processInfoQueryWrap.lambda().in(ProcessInfoEO::getFlowType,flowTypeList); + List processInfoEOList = this.list(processInfoQueryWrap); + if(CollectionUtils.isNotEmpty(processInfoEOList)){ + List processInfoIdList = processInfoEOList.stream().map(ProcessInfoEO::getId).distinct().collect(Collectors.toList()); + /*QueryWrapper detailRemoveWrap = new QueryWrapper<>(); + detailRemoveWrap.lambda().in(ProcessInfoDetailEO::getProcessInfoId,processInfoIdList); + this.processInfoDetailEOService.remove(detailRemoveWrap);*/ + this.deleteByIds(processInfoIdList); + } + } + } + + @Override + public IPage lawsAssessTodoTaskList(Map params) { + Integer pageNo = Integer.parseInt(params.get("pageNo").toString()); + Integer pageSize = Integer.parseInt(params.get("pageSize").toString()); + String cut = (String) params.get("cut"); + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + params.put("createBy",currentUser.getId()); + params.put("queryType","todoProcess"); + + List flowTypeList = new ArrayList<>(); + flowTypeList.add(FlowTypeEnum.FGYJSJLC.getValue()); + flowTypeList.add(FlowTypeEnum.FGJSPG.getValue()); + params.put("flowTypeList",flowTypeList); + params.put("currentUserId",currentUser.getId()); + params.put("taskStatus", TaskStatusEnum.NOT_DONE.getValue()); + + IPage page = new Page(pageNo, pageSize); + IPage result = this.baseMapper.queryLawsAssessPageList(page,params); + this.disposeData(result.getRecords(),cut); + return result; + } + + @Override + public IPage lawsAssessDoneProcess(Map params) { + Integer pageNo = Integer.parseInt(params.get("pageNo").toString()); + Integer pageSize = Integer.parseInt(params.get("pageSize").toString()); + String cut = (String) params.get("cut"); + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + params.put("createBy",currentUser.getId()); + params.put("queryType","doneProcess"); + + List flowTypeList = new ArrayList<>(); + flowTypeList.add(FlowTypeEnum.FGYJSJLC.getValue()); + flowTypeList.add(FlowTypeEnum.FGJSPG.getValue()); + params.put("flowTypeList",flowTypeList); + params.put("currentUserId",currentUser.getId()); + params.put("taskStatus", TaskStatusEnum.HAVE_DONE.getValue()); + + IPage page = new Page(pageNo, pageSize); + IPage result = this.baseMapper.queryLawsAssessPageList(page,params); + this.disposeData(result.getRecords(),cut); + return result; + } + + @Override + public IPage lawsAssessIssuedProcess(Map params) { + Integer pageNo = Integer.parseInt(params.get("pageNo").toString()); + Integer pageSize = Integer.parseInt(params.get("pageSize").toString()); + String cut = (String) params.get("cut"); + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + params.put("createBy",currentUser.getId()); + params.put("queryType","issuedProcess"); + + List flowTypeList = new ArrayList<>(); + flowTypeList.add(FlowTypeEnum.FGYJSJLC.getValue()); + flowTypeList.add(FlowTypeEnum.FGJSPG.getValue()); + params.put("flowTypeList",flowTypeList); + params.put("currentUserId",currentUser.getId()); + params.put("taskStatus", TaskStatusEnum.HAVE_DONE.getValue()); + + IPage page = new Page(pageNo, pageSize); + IPage result = this.baseMapper.queryLawsAssessPageList(page,params); + this.disposeData(result.getRecords(),cut); + return result; + } + + public void setFlowTypeList(List flowTypeList){ + //flowTypeList.add(FlowTypeEnum.QDQR.getValue()); + flowTypeList.add(FlowTypeEnum.RWQRLC.getValue()); + flowTypeList.add(FlowTypeEnum.SJFHXSHLC.getValue()); + flowTypeList.add(FlowTypeEnum.YZFHXSCLC.getValue()); + flowTypeList.add(FlowTypeEnum.PREHOMOQRLC.getValue()); + } + + /** + * 处理项目流程数据 + * @param datas + * @param cut + */ + public void disposeData(List datas, String cut){ + if(CollectionUtils.isNotEmpty(datas)){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date currentDate = new Date(); + try { + currentDate = sdf.parse(sdf.format(currentDate)); + } catch (ParseException e) { + e.printStackTrace(); + } + + List processInfoIdList = datas.stream().map(ProcessInfoVO::getId).distinct().collect(Collectors.toList()); + + QueryWrapper processInfoDetailQueryWrap = new QueryWrapper<>(); + processInfoDetailQueryWrap.lambda().in(ProcessInfoDetailEO::getProcessInfoId,processInfoIdList); + List processInfoDetailEOList = this.processInfoDetailEOService.list(processInfoDetailQueryWrap); + + Map> lastAssigneeDetailMap = processInfoDetailEOList.stream().filter(processInfoDetailEO -> { + boolean flag = false; + if(StringUtils.equals(processInfoDetailEO.getStatus(),TaskStatusEnum.HAVE_DONE.getValue()) && processInfoDetailEO.getSubmitTime() != null){ + flag = true; + } + return flag; + }).collect(Collectors.groupingBy(ProcessInfoDetailEO::getProcessInfoId)); + + Map> assigneeDetailMap = processInfoDetailEOList.stream().filter(processInfoDetailEO -> { + boolean flag = false; + if(StringUtils.equals(processInfoDetailEO.getStatus(),TaskStatusEnum.NOT_DONE.getValue()) && processInfoDetailEO.getSubmitTime() == null){ + flag = true; + } + return flag; + }).collect(Collectors.groupingBy(ProcessInfoDetailEO::getProcessInfoId)); + //设置责任人反馈意见 + this.setPersonChargeFeedback(datas); + + List userIdList = new ArrayList<>(); + datas.forEach(data -> { + //设置上一个操作人。 + for (Map.Entry> detailMap : lastAssigneeDetailMap.entrySet()) { + if(StringUtils.equals(data.getId(),detailMap.getKey())){ + List detailEOList = detailMap.getValue(); + + Collections.sort(detailEOList,new Comparator(){ + @Override + public int compare(ProcessInfoDetailEO o1, ProcessInfoDetailEO o2) { + return o2.getSubmitTime().compareTo(o1.getSubmitTime()); + } + }); + + String userId = detailEOList.get(0).getUserId(); + userIdList.add(userId); + data.setLastAssignee(userId); + break; + } + } + + //设置当前操作人 + for (Map.Entry> detailMap : assigneeDetailMap.entrySet()) { + if(StringUtils.equals(data.getId(),detailMap.getKey())){ + List detailEOList = detailMap.getValue(); + data.setAssignee(detailEOList.stream().map(ProcessInfoDetailEO::getUserId).collect(Collectors.joining(","))); + userIdList.addAll(detailEOList.stream().map(ProcessInfoDetailEO::getUserId).collect(Collectors.toList())); + break; + } + } + }); + + List taskIdList = datas.stream().map(ProcessInfoVO::getTaskId).distinct().collect(Collectors.toList()); + List taskInventoryDetailList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(taskIdList)){ + QueryWrapper taskInventoryDetailQueryWrap = new QueryWrapper<>(); + taskInventoryDetailQueryWrap.lambda().in(ProjectTaskInventoryDetailEO::getTaskId,taskIdList); + taskInventoryDetailList = this.projectTaskInventoryDetailEOService.list(taskInventoryDetailQueryWrap); + } + List finalTaskInventoryDetailList = taskInventoryDetailList; + + List sysUserList = this.sysUserService.querySysUserListByIdList(userIdList); + + Date finalCurrentDate = currentDate; + datas.forEach(data -> { + if(StringUtils.isNotEmpty(data.getFlowType())){ + data.setFlowTypeShow(FlowTypeEnum.getTextByValue(data.getFlowType(),cut)); + } + if(StringUtils.isNotEmpty(data.getStatus())){ + data.setStatusShow(TodoCenterStatusEnum.getTextByValue(data.getStatus(),cut)); + } + + if(CollectionUtils.isNotEmpty(sysUserList)){ + if(StringUtils.isNotEmpty(data.getLastAssignee())){ + String lastUserName = sysUserList.stream().filter(sysUser -> { + boolean flag = false; + if (StringUtils.equals(data.getLastAssignee(), sysUser.getId())) { + flag = true; + } + return flag; + }).map(SysUser::getUsername).collect(Collectors.joining(",")); + data.setLastAssigneeName(lastUserName); + } + //如果流程没有结束,才可以展示当前处理人。 + if(!StringUtils.equals(data.getStatus(),TodoCenterStatusEnum.COMPLETED.getValue())){ + if(StringUtils.isNotEmpty(data.getAssignee())){ + String[] assigneeArr = data.getAssignee().split(","); + String currentUserName = sysUserList.stream().filter(sysUser -> { + boolean flag = false; + for (String assignee : assigneeArr) { + if (StringUtils.equals(assignee, sysUser.getId())) { + flag = true; + } + } + return flag; + }).map(SysUser::getUsername).collect(Collectors.joining(",")); + data.setAssigneeName(currentUserName); + } + } + } + data.setProjectName(data.getProjectName() + "-" + data.getYearName()); + + //设置任务清单明细表id + if(CollectionUtils.isNotEmpty(finalTaskInventoryDetailList)){ + String primaryKeyId = finalTaskInventoryDetailList.stream().filter(taskInventoryDetail -> { + boolean flag = false; + if (StringUtils.equals(data.getTaskId(), taskInventoryDetail.getTaskId())) { + flag = true; + } + return flag; + }).map(ProjectTaskInventoryDetailEO::getId).collect(Collectors.joining(",")); + data.setPrimaryKeyId(primaryKeyId); + } + + //判断当前任务是否过期 + Date endTime = data.getEndTime(); + try { + endTime = sdf.parse(sdf.format(endTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if(finalCurrentDate.after(endTime) || finalCurrentDate.equals(endTime)){ + data.setEndTimePastDueFlag(true); + } + }); + } + } + + /** + * 设置符合性流程中责任人反馈意见 + * @param datas + */ + public void setPersonChargeFeedback(List datas){ + //符合性流程实例id + List complianceProcessPrcIdList = datas.stream().filter(data -> { + boolean designFlowFlag = StringUtils.equals(data.getFlowType(),FlowTypeEnum.SJFHXSHLC.getValue()); + boolean preHomoFlowFlag = StringUtils.equals(data.getFlowType(),FlowTypeEnum.PREHOMOQRLC.getValue()); + boolean verifyFlowFlag = StringUtils.equals(data.getFlowType(),FlowTypeEnum.YZFHXSCLC.getValue()); + boolean flag = false; + if(designFlowFlag || preHomoFlowFlag || verifyFlowFlag){ + flag = true; + } + return flag; + }).map(ProcessInfoVO::getActiProcInstId).collect(Collectors.toList()); + + if(CollectionUtils.isNotEmpty(complianceProcessPrcIdList)){ + QueryWrapper taskInventoryQueryWrap = new QueryWrapper<>(); + taskInventoryQueryWrap.and(queryWrap -> { + queryWrap.lambda().in(ProjectTaskInventoryEO::getDesignPId,complianceProcessPrcIdList) + .or().in(ProjectTaskInventoryEO::getPrehomoPId,complianceProcessPrcIdList) + .or().in(ProjectTaskInventoryEO::getVerifyPId,complianceProcessPrcIdList); + }); + //查询出符合性流程相关的任务清单信息。 + List taskInventoryList = this.projectTaskInventoryEOService.list(taskInventoryQueryWrap); + + datas.forEach(data -> { + boolean designFlowFlag = StringUtils.equals(data.getFlowType(),FlowTypeEnum.SJFHXSHLC.getValue()); + boolean preHomoFlowFlag = StringUtils.equals(data.getFlowType(),FlowTypeEnum.PREHOMOQRLC.getValue()); + boolean verifyFlowFlag = StringUtils.equals(data.getFlowType(),FlowTypeEnum.YZFHXSCLC.getValue()); + String personChargeFeedback = taskInventoryList.stream().filter(taskInventory -> { + boolean flag = false; + if(designFlowFlag){ + if(StringUtils.equals(data.getActiProcInstId(),taskInventory.getDesignPId())){ + flag = true; + } + }else if(preHomoFlowFlag){ + if(StringUtils.equals(data.getActiProcInstId(),taskInventory.getPrehomoPId())){ + flag = true; + } + }else if(verifyFlowFlag){ + if(StringUtils.equals(data.getActiProcInstId(),taskInventory.getVerifyPId())){ + flag = true; + } + } + return flag; + }).map(ProjectTaskInventoryEO::getDesignPersonChargeFeedback).collect(Collectors.joining(",")); + + data.setPersonChargeFeedback(personChargeFeedback); + }); + } + } + + + @Override + public Result initHistoryData(Map params) { + /** + * disposeType:处理类型 + * value: + * 10:清单确认 + * 1:任务确认 + * 2:设计符合性 + * 3:prehomo确认 + * 4:验证符合性 + * 5:法规意见收集 + * 6:法规技术评估 + * 多个之间使用英文逗号分隔. + */ + String disposeType = (String) params.get("disposeType"); + //查询出所有的法规清单数据 + List projectLawsInventoryEOList = this.projectLawsInventoryEOService.list(); + //查询出所有项目库信息 + List projectLibraryBaseList = this.projectLibraryBaseService.list(); + + //1、清单确认 + if(StringUtils.contains(disposeType,FlowTypeEnum.QDQR.getValue())){ + this.initQdqr(projectLawsInventoryEOList,projectLibraryBaseList); + } + + //2.任务确认 + if(StringUtils.contains(disposeType,FlowTypeEnum.RWQRLC.getValue())){ + this.initRwqr(projectLawsInventoryEOList); + } + + List taskInventoryEOList = this.projectTaskInventoryEOService.list(); + + QueryWrapper taskInventoryDetailQueryWrap = new QueryWrapper<>(); + taskInventoryDetailQueryWrap.lambda().eq(ProjectTaskInventoryDetailEO::getStatus,TaskStatusEnum.NOT_DONE.getValue()); + List taskInventoryDetailEOList = this.projectTaskInventoryDetailEOService.list(taskInventoryDetailQueryWrap); + + //3.设计符合性流程 + if(StringUtils.contains(disposeType,FlowTypeEnum.SJFHXSHLC.getValue())){ + this.initConformance(FlowTypeEnum.SJFHXSHLC.getValue(),projectLawsInventoryEOList,taskInventoryEOList,taskInventoryDetailEOList); + } + //4.prehomo流程 + if(StringUtils.contains(disposeType,FlowTypeEnum.PREHOMOQRLC.getValue())){ + this.initConformance(FlowTypeEnum.PREHOMOQRLC.getValue(),projectLawsInventoryEOList,taskInventoryEOList,taskInventoryDetailEOList); + } + //5.验证符合性流程 + if(StringUtils.contains(disposeType,FlowTypeEnum.YZFHXSCLC.getValue())){ + this.initConformance(FlowTypeEnum.YZFHXSCLC.getValue(),projectLawsInventoryEOList,taskInventoryEOList,taskInventoryDetailEOList); + } + //6.法规技术评估 + if(StringUtils.contains(disposeType,FlowTypeEnum.FGJSPG.getValue())){ + this.initFgjspg(); + } + //7.法规意见收集 + if(StringUtils.contains(disposeType,FlowTypeEnum.FGYJSJLC.getValue())){ + this.initFgyjsj(); + } + + //8.处理之前流程数据在发起的时候,在bus_process_new中没有任务数据 + if(StringUtils.contains(disposeType,"disposeBusProcessNew")){ + this.workFlowFeignClient.dispostHistoryBusProcessNewData(); + } + return Result.OK("初始化数据成功",disposeType); + } + + /** + * 初始化清单确认 + * @param projectLawsInventoryEOList + * @param projectLibraryBaseList + */ + public void initQdqr(List projectLawsInventoryEOList,List projectLibraryBaseList){ + Map> qdqrMap = projectLawsInventoryEOList.stream().filter(lawsInventory -> { + boolean flag = false; + if (StringUtils.equals(lawsInventory.getInventoryAffirmStatus(), InventoryAffirmStatusEnum.LIST_TO_CONFIRM.getValue())) { + flag = true; + } + return flag; + }).collect(Collectors.groupingBy(ProjectLawsInventoryEO::getProjectLibraryId)); + + if(!Objects.isNull(qdqrMap)){ + for (Map.Entry> map : qdqrMap.entrySet()) { + String projectLibraryId = map.getKey(); + ProjectLibraryBase projectLibraryBaseEO = projectLibraryBaseList.stream().filter(projectLibraryBase -> { + boolean flag = false; + if(StringUtils.equals(projectLibraryId,projectLibraryBase.getId())){ + flag = true; + } + return flag; + }).collect(Collectors.toList()).get(0); + + List processInfoDetailEOList = new ArrayList<>(); + + List qdqrLawsInventoryList = map.getValue(); + if(CollectionUtils.isNotEmpty(qdqrLawsInventoryList)){ + qdqrLawsInventoryList.forEach(projectLawsInventoryEO-> { + boolean homologationEngineerFlag = ( + StringUtils.isEmpty(projectLawsInventoryEO.getHomologationEngineerSubmitStatus()) + || StringUtils.equals(projectLawsInventoryEO.getHomologationEngineerSubmitStatus(),"1") + ); + boolean regulationOwnerFlag = ( + StringUtils.isEmpty(projectLawsInventoryEO.getRegulationOwnerSubmitStatus()) + || StringUtils.equals(projectLawsInventoryEO.getRegulationOwnerSubmitStatus(),"1") + ); + + if(homologationEngineerFlag){ + ProcessInfoDetailEO processInfoDetailEO = new ProcessInfoDetailEO(); + processInfoDetailEO.setProjectLawsInventoryId(projectLawsInventoryEO.getId()); + processInfoDetailEO.setUserId(projectLawsInventoryEO.getHomologationEngineerId()); + processInfoDetailEO.setTaskDefinitionKey(InventoryAffirmNodeEnum.HOMOLOGATION_ENGINEER_AUDIT.getKey()); + processInfoDetailEO.setEndTime(projectLawsInventoryEO.getInventoryAffirmDueDate()); + processInfoDetailEO.setCreateTime(new Date()); + processInfoDetailEO.setCreateBy(projectLibraryBaseEO.getStudioEngineer()); + processInfoDetailEO.setStatus(TaskStatusEnum.NOT_DONE.getValue()); + + processInfoDetailEOList.add(processInfoDetailEO); + } + if(regulationOwnerFlag){ + ProcessInfoDetailEO processInfoDetailEO = new ProcessInfoDetailEO(); + processInfoDetailEO.setProjectLawsInventoryId(projectLawsInventoryEO.getId()); + processInfoDetailEO.setUserId(projectLawsInventoryEO.getRegulationOwnerId()); + processInfoDetailEO.setTaskDefinitionKey(InventoryAffirmNodeEnum.REGULATION_OWNER_AUDIT.getKey()); + processInfoDetailEO.setEndTime(projectLawsInventoryEO.getInventoryAffirmDueDate()); + processInfoDetailEO.setCreateTime(new Date()); + processInfoDetailEO.setCreateBy(projectLibraryBaseEO.getStudioEngineer()); + processInfoDetailEO.setStatus(TaskStatusEnum.NOT_DONE.getValue()); + + processInfoDetailEOList.add(processInfoDetailEO); + } + }); + + //往待办中心添加数据。 + ProcessInfoEO processInfoEO = new ProcessInfoEO(); + this.projectLawsInventoryEOService.addProcessInfo(processInfoEO,projectLibraryId,null); + this.projectLawsInventoryEOService.addProcessInfoDetail(processInfoEO.getId(),processInfoDetailEOList,null); + } + } + } + } + + /** + * 初始化任务确认 + * @param projectLawsInventoryEOList + */ + public void initRwqr(List projectLawsInventoryEOList){ + String flowType = FlowTypeEnum.RWQRLC.getValue(); + List> rwqrResult = this.workFlowFeignClient.queryProcessInfoByPrcType(flowType); + if(CollectionUtils.isNotEmpty(rwqrResult)){ + for (Map rwqrMap : rwqrResult) { + List lawsInventoryList = projectLawsInventoryEOList.stream().filter(projectLawsInventory -> { + boolean flag = false; + if (StringUtils.equals((String) rwqrMap.get("projectLawsInventoryId"), projectLawsInventory.getId())) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + + if(CollectionUtils.isNotEmpty(lawsInventoryList)){ + ProjectLawsInventoryEO projectLawsInventoryEO = lawsInventoryList.get(0); + + rwqrMap.put("projectLibraryId",projectLawsInventoryEO.getProjectLibraryId()); + rwqrMap.put("projectLawsInventoryId",projectLawsInventoryEO.getId()); + rwqrMap.put("standId",projectLawsInventoryEO.getStandId()); + rwqrMap.put("flowType",flowType); + + List> taskMapList = (List>)rwqrMap.get("taskMapList"); + if(CollectionUtils.isNotEmpty(taskMapList)){ + String status = TodoCenterStatusEnum.COMPLETED.getValue(); + for (Map taskMap : taskMapList) { + String deleteReason = (String) taskMap.get("deleteReason"); + if(StringUtils.isEmpty(deleteReason)){ + //如果是dre确认节点,将状态设置为询问,否则就是待确认。 + if(StringUtils.equals((String)taskMap.get("taskDefinitionKey"),"dreqr")){ + status = TodoCenterStatusEnum.INQUIRY.getValue(); + }else { + status = TodoCenterStatusEnum.LIST_TO_CONFIRM.getValue(); + } + break; + } + } + + rwqrMap.put("status",status); + this.addProcessInfo(rwqrMap); + } + } + } + } + } + + /** + * 初始化符合性流程 + * @param flowType + */ + public void initConformance(String flowType,List projectLawsInventoryEOList,List taskInventoryEOList,List taskInventoryDetailEOList){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + List> conformanceResult = this.workFlowFeignClient.queryProcessInfoByPrcType(flowType); + if(CollectionUtils.isNotEmpty(conformanceResult)){ + for (Map conformanceMap : conformanceResult) { + String actiProcInstId = (String) conformanceMap.get("actiProcInstId"); + List taskInventoryListTemp = taskInventoryEOList.stream().filter(taskInventoryEO -> { + boolean flag = false; + if(StringUtils.equals(flowType,FlowTypeEnum.SJFHXSHLC.getValue())){ + if (StringUtils.equals(taskInventoryEO.getDesignPId(), actiProcInstId)) { + flag = true; + } + }else if(StringUtils.equals(flowType,FlowTypeEnum.PREHOMOQRLC.getValue())){ + if (StringUtils.equals(taskInventoryEO.getPrehomoPId(), actiProcInstId)) { + flag = true; + } + }else if(StringUtils.equals(flowType,FlowTypeEnum.YZFHXSCLC.getValue())){ + if (StringUtils.equals(taskInventoryEO.getVerifyPId(), actiProcInstId)) { + flag = true; + } + } + return flag; + }).collect(Collectors.toList()); + + if(CollectionUtils.isNotEmpty(taskInventoryListTemp)){ + List> taskMapList = (List>)conformanceMap.get("taskMapList"); + if(CollectionUtils.isNotEmpty(taskMapList)){ + for (Map taskMap : taskMapList) { + String taskId = (String) taskMap.get("taskId"); + String userId = ""; + for (ProjectTaskInventoryDetailEO projectTaskInventoryDetailEO : taskInventoryDetailEOList) { + if(StringUtils.equals(taskId,projectTaskInventoryDetailEO.getTaskId())){ + userId = projectTaskInventoryDetailEO.getUserId(); + } + } + taskMap.put("userId",userId); + } + String endTimeStr = ""; + if(StringUtils.equals(flowType,FlowTypeEnum.SJFHXSHLC.getValue()) && taskInventoryListTemp.get(0).getDesignDueDate() != null){ + endTimeStr = sdf.format(taskInventoryListTemp.get(0).getDesignDueDate()); + }else if(StringUtils.equals(flowType,FlowTypeEnum.PREHOMOQRLC.getValue()) && taskInventoryListTemp.get(0).getPrehomoDueDate() != null){ + endTimeStr = sdf.format(taskInventoryListTemp.get(0).getPrehomoDueDate()); + }else if(StringUtils.equals(flowType,FlowTypeEnum.YZFHXSCLC.getValue()) && taskInventoryListTemp.get(0).getVerifyDueDate() != null){ + endTimeStr = sdf.format(taskInventoryListTemp.get(0).getVerifyDueDate()); + } + + String projectLawsInventoryId = taskInventoryListTemp.get(0).getProjectLawsInventoryId(); + String projectLibraryId = ""; + String bussDocumentLibraryId = ""; + List projectLawsInventoryListTemp = projectLawsInventoryEOList.stream().filter(lawsInventory -> { + boolean flag = false; + if (StringUtils.equals(lawsInventory.getId(), projectLawsInventoryId)) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + + if(CollectionUtils.isNotEmpty(projectLawsInventoryListTemp)){ + projectLibraryId = projectLawsInventoryListTemp.get(0).getProjectLibraryId(); + bussDocumentLibraryId = projectLawsInventoryListTemp.get(0).getStandId(); + } + conformanceMap.put("flowType",flowType); + conformanceMap.put("endTime",endTimeStr); + conformanceMap.put("projectLibraryId",projectLibraryId); + conformanceMap.put("projectLawsInventoryId",projectLawsInventoryId); + conformanceMap.put("bussDocumentLibraryId",bussDocumentLibraryId); + + String status = TodoCenterStatusEnum.COMPLETED.getValue(); + for (Map taskMap : taskMapList) { + String deleteReason = (String) taskMap.get("deleteReason"); + if(StringUtils.isEmpty(deleteReason)){ + //如果是发起人审查节点,状态应该为 待审核,否则就是待提交 + if(StringUtils.equals((String)taskMap.get("taskDefinitionKey"),"fqrsh")){ + status = TodoCenterStatusEnum.TO_AUDIT.getValue(); + }else { + status = TodoCenterStatusEnum.TO_SUBMIT.getValue(); + } + break; + } + } + conformanceMap.put("status",status); + + this.addProcessInfo(conformanceMap); + } + } + } + } + } + + /** + * 初始化法规技术评估 + */ + public void initFgjspg(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String flowType = FlowTypeEnum.FGJSPG.getValue(); + List> fgjspgResult = this.workFlowFeignClient.queryProcessInfoByPrcType(flowType); + if(CollectionUtils.isNotEmpty(fgjspgResult)){ + List lawsTechnologyEvaluationEOList = this.lawsTechnologyEvaluationEOService.list(); + List flowDetailEOList = this.lawsTechnologyEvaluationFlowDetailEOService.list(); + + for (Map fgjspgMap : fgjspgResult) { + List> taskMapList = (List>)fgjspgMap.get("taskMapList"); + if(CollectionUtils.isNotEmpty(taskMapList)){ + String standId = ""; + String endTimeStr = ""; + String actiProcInstId = (String) fgjspgMap.get("actiProcInstId"); + + List flowDetailEOListTemp = flowDetailEOList.stream().filter(flowDetailEO -> { + boolean flag = false; + if (StringUtils.equals(actiProcInstId, flowDetailEO.getActiProcInstId())) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + + if(CollectionUtils.isNotEmpty(flowDetailEOListTemp)){ + String lawsTechnologyEvaluationId = flowDetailEOListTemp.get(0).getLawsTechnologyEvaluationId(); + List technologyEvaluationEOListTemp = lawsTechnologyEvaluationEOList.stream().filter(lawsTechnologyEvaluation -> { + boolean flag = false; + if (StringUtils.equals(lawsTechnologyEvaluationId, lawsTechnologyEvaluation.getId())) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(technologyEvaluationEOListTemp)){ + standId = technologyEvaluationEOListTemp.get(0).getStandId(); + endTimeStr = sdf.format(technologyEvaluationEOListTemp.get(0).getEndTime()); + } + } + + fgjspgMap.put("standId",standId); + fgjspgMap.put("endTime",endTimeStr); + fgjspgMap.put("flowType",flowType); + + String status = TodoCenterStatusEnum.COMPLETED.getValue(); + for (Map taskMap : taskMapList) { + String deleteReason = (String) taskMap.get("deleteReason"); + if(StringUtils.isEmpty(deleteReason)){ + //如果是发起人审查节点,状态应该为 待审核,否则就是待提交 + if(StringUtils.equals((String)taskMap.get("taskDefinitionKey"),"fqrsc")){ + status = TodoCenterStatusEnum.TO_AUDIT.getValue(); + }else { + status = TodoCenterStatusEnum.TO_SUBMIT.getValue(); + } + break; + } + } + fgjspgMap.put("status",status); + this.addProcessInfo(fgjspgMap); + } + } + } + } + + /** + * 初始化法规意见收集 + */ + public void initFgyjsj(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String flowType = FlowTypeEnum.FGYJSJLC.getValue(); + List> fgyjsjResult = this.workFlowFeignClient.queryProcessInfoByPrcType(flowType); + + if(CollectionUtils.isNotEmpty(fgyjsjResult)){ + List lawsOpinionGatherEOList = this.lawsOpinionGatherEOService.list(); + for (Map fgyjsjMap : fgyjsjResult) { + List> taskMapList = (List>)fgyjsjMap.get("taskMapList"); + if(CollectionUtils.isNotEmpty(taskMapList)){ + String standId = ""; + String endTimeStr = ""; + String actiProcInstId = (String) fgyjsjMap.get("actiProcInstId"); + List lawsOpinionGatherTempList = lawsOpinionGatherEOList.stream().filter(lawsOpinionGatherEO -> { + boolean flag = false; + if (StringUtils.equals(lawsOpinionGatherEO.getActiProcInstId(), actiProcInstId)) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(lawsOpinionGatherTempList)){ + standId = lawsOpinionGatherTempList.get(0).getStandId(); + endTimeStr = sdf.format(lawsOpinionGatherTempList.get(0).getEndTime()); + } + fgyjsjMap.put("standId",standId); + fgyjsjMap.put("endTime",endTimeStr); + fgyjsjMap.put("flowType",flowType); + + String status = TodoCenterStatusEnum.COMPLETED.getValue(); + for (Map taskMap : taskMapList) { + String deleteReason = (String) taskMap.get("deleteReason"); + if(StringUtils.isEmpty(deleteReason)){ + //如果还有没提交的任务 + status = TodoCenterStatusEnum.TO_SUBMIT.getValue(); + break; + } + } + fgyjsjMap.put("status",status); + this.addProcessInfo(fgyjsjMap); + } + } + } + } + + public void addProcessInfo(Map params){ + String prcNum = (String) params.get("prcNum"); + String prcName = (String) params.get("prcName"); + String actiProcInstId = (String) params.get("actiProcInstId"); + String flowType = (String) params.get("flowType"); + String endTimeStr = ""; + String projectLibraryId = ""; + String projectLawsInventoryId = ""; + String standId = ""; + String status = (String) params.get("status"); + String createBy = (String) params.get("createBy"); + if(StringUtils.equals(flowType,FlowTypeEnum.RWQRLC.getValue())){ + projectLibraryId = (String) params.get("projectLibraryId"); + projectLawsInventoryId = (String) params.get("projectLawsInventoryId"); + standId = (String) params.get("standId"); + endTimeStr = (String) params.get("endTime"); + }else if(StringUtils.equals(flowType,FlowTypeEnum.FGYJSJLC.getValue()) || StringUtils.equals(flowType,FlowTypeEnum.FGJSPG.getValue())){ + standId = (String) params.get("standId"); + endTimeStr = (String) params.get("endTime"); + }else if(StringUtils.equals(flowType,FlowTypeEnum.SJFHXSHLC.getValue()) || StringUtils.equals(flowType,FlowTypeEnum.PREHOMOQRLC.getValue())|| StringUtils.equals(flowType,FlowTypeEnum.YZFHXSCLC.getValue())){ + projectLibraryId = (String) params.get("projectLibraryId"); + projectLawsInventoryId = (String) params.get("projectLawsInventoryId"); + standId = (String) params.get("bussDocumentLibraryId"); + endTimeStr = (String) params.get("endTime"); + } + + ProcessInfoEO processInfoEO = new ProcessInfoEO(); + processInfoEO.setId(actiProcInstId); + processInfoEO.setProjectLibraryId(projectLibraryId); + processInfoEO.setProjectLawsInventoryId(projectLawsInventoryId); + processInfoEO.setActiProcInstId(actiProcInstId); + processInfoEO.setFlowType(flowType); + processInfoEO.setPrcNum(prcNum); + processInfoEO.setPrcName(prcName); + processInfoEO.setBussDocumentLibraryId(standId); + + //截止日期 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date endTime = new Date(); + try { + endTime = sdf.parse(endTimeStr); + } catch (ParseException e) { + e.printStackTrace(); + } + processInfoEO.setEndTime(endTime); + processInfoEO.setStatus(status); + processInfoEO.setCreateBy(createBy); + this.baseMapper.insert(processInfoEO); + + List> taskMapList = (List>)params.get("taskMapList"); + List processInfoDetailEOList = new ArrayList<>(); + for (Map taskMap : taskMapList) { + ProcessInfoDetailEO processInfoDetailEO = new ProcessInfoDetailEO(); + processInfoDetailEO.setActiProcInstId((String) taskMap.get("actiProcInstId")); + processInfoDetailEO.setTaskId((String) taskMap.get("taskId")); + processInfoDetailEO.setTaskDefinitionKey((String) taskMap.get("taskDefinitionKey")); + processInfoDetailEO.setUserId((String) taskMap.get("userId")); + String taskStatus = (String) taskMap.get("status"); + if(StringUtils.equals(taskStatus,TaskStatusEnum.HAVE_DONE.getValue())){ + try { + processInfoDetailEO.setSubmitTime(sdf.parse((String) taskMap.get("submitTime"))); + } catch (ParseException e) { + e.printStackTrace(); + } + } + processInfoDetailEO.setStatus(taskStatus); + processInfoDetailEO.setProcessInfoId(processInfoEO.getId()); + processInfoDetailEO.setFlowType(flowType); + processInfoDetailEO.setProjectLawsInventoryId(projectLawsInventoryId); + processInfoDetailEO.setCreateTime(new Date()); + processInfoDetailEO.setCreateBy(createBy); + + processInfoDetailEOList.add(processInfoDetailEO); + } + + this.processInfoDetailEOService.saveBatch(processInfoDetailEOList); + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/vo/ParamsManifestTodoCenterEOPage.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/vo/ParamsManifestTodoCenterEOPage.java new file mode 100644 index 000000000..98079f027 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/vo/ParamsManifestTodoCenterEOPage.java @@ -0,0 +1,45 @@ +package com.jero.modules.todoCenter.vo; + +import lombok.Data; + +@Data +public class ParamsManifestTodoCenterEOPage { + /** + * 参数清单id + */ + private String id; + + /** + * 相关项目名称 + */ + private String projectName; + + /** + * 参数清单标题 + */ + private String title; + + /** + * 相关项目版本 + */ + private String projectVersion; + + /** + * 待发起数量 包括状态:待发起收集,变更,工程接口人退回 + */ + private Integer waitCollectNum; + + /** + * 待工程接口人处理数量(即待分配) 包括状态:待工程接口人处理,填写人退回 + */ + private Integer waitSdtNum; + + /** + * 待填写数量 包括状态:待填写,认证工程师退回 + */ + private Integer waitFillNum; + + private int pageNo; + private int pageSize; + private String state; +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/vo/ProcessInfoVO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/vo/ProcessInfoVO.java new file mode 100644 index 000000000..94a903a45 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/todoCenter/vo/ProcessInfoVO.java @@ -0,0 +1,110 @@ +package com.jero.modules.todoCenter.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; + +/** + * 流程信息表VO类 + */ +@Data +public class ProcessInfoVO implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + private String id; + + /**创建人*/ + private String createBy; + + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + + /**更新人*/ + private String updateBy; + + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + + /**所属部门*/ + private String sysOrgCode; + + /**项目库id*/ + private String projectLibraryId; + + /**法规清单id*/ + private String projectLawsInventoryId; + + /**文档库id/标准id*/ + private String bussDocumentLibraryId; + + /**流程实例id*/ + private String actiProcInstId; + + /**流程类型*/ + private String flowType; + + /**截止日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + private java.util.Date endTime; + + /**任务状态*/ + private String status; + + /**流程编号**/ + private String prcNum; + + /**流程名称*/ + private String prcName; + + /**流程类型展示字段*/ + private String flowTypeShow; + + /**任务状态展示字段*/ + private String statusShow; + + /**上一个操作人 用户id*/ + private String lastAssignee; + private String lastAssigneeName; + + /**当前操作人/代理人 用户id*/ + private String assignee; + private String assigneeName; + + /**标准编号*/ + private String serialNumber; + /**标准标题-中文*/ + private String title; + /**标准标题-英文*/ + private String titleEn; + /**项目名称*/ + private String projectName; + /**年份*/ + private String yearName; + /**待办id*/ + private String taskId; + /**任务节点定义key*/ + private String taskDefinitionKey; + /**项目名称id*/ + private String projectNameId; + /**目标市场*/ + private String targetMarket; + /**studio*/ + private String studioEngineer; + /**任务清单明细表id,任务清单明细数据与待办中心明细表 是taskId一对一的关系**/ + private String primaryKeyId; + /**符合性流程:责任人填写反馈意见*/ + private String personChargeFeedback; + /**截止日期 过期标识:true为已经过期 false为没有过期**/ + private boolean endTimePastDueFlag = false; + + /**标准信息**/ + private String standardInfo; +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/service/LawsWarnService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/service/LawsWarnService.java index beab9d1eb..527eb8527 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/service/LawsWarnService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/service/LawsWarnService.java @@ -13,6 +13,7 @@ import com.jero.modules.document.enums.FieldTypeEnum; import com.jero.modules.document.mapper.BussDocumentLibraryEOMapper; import com.jero.modules.document.service.impl.BussDocumentLibraryEOServiceImpl; import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.system.entity.SysAnnouncement; import com.jero.modules.system.entity.SysCategory; import com.jero.modules.system.entity.SysDictItem; @@ -372,7 +373,7 @@ public class LawsWarnService { thirdIdList.addAll(thirdId); } } - + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); //查询文档 List> mapList = bussDocumentLibraryEOMapper.selectMapsAll(documentIds); List serialNumberList = new ArrayList<>(); @@ -408,29 +409,65 @@ public class LawsWarnService { "&serial_number=" + map.get("serial_number") + "'" + " target='_blank'>" + map.get("serial_number") + ""; urlList.add(url); hrefList.add(href+timeContent); + + //推送多条时, 每条单独发消息 + //编号, 标题, 新车型实施日期, 在产车实施日期 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String serialNumber = StringUtils.valueOf(map.get("serial_number")); + String titleCn = StringUtils.valueOf(map.get("title")); + String titleEn = StringUtils.valueOf(map.get("title_en")); + String newType = ""; + if(ObjectUtils.isNotEmpty(map.get("xin1_che1_xing2_shi2_shi1_ri4_qi1"))){ + newType = sdf.format(map.get("xin1_che1_xing2_shi2_shi1_ri4_qi1")); + } + String newVehicle = ""; + if(ObjectUtils.isNotEmpty(map.get("implement_time"))){ + newVehicle = sdf.format(map.get("implement_time")); + } + //消息-英文 + String contentNo = sysUser.getUsername() +" shared Regulation Early Warning infomation with you, " + +"Regulation No: "+serialNumber+",Title: "+titleEn+",New Type Execution Date: "+newType+",New Vehicle Execution Date: "+newVehicle; + String contentInfoYes = sysUser.getUsername() +" shared Regulation Early Warning infomation with you, "+"
" + +"Regulation No: "+href+"
" + +"Title: "+titleEn+"
" + +"New Type Execution Date: "+newType+"
" + +"New Vehicle Execution Date: "+newVehicle; + + + //消息中文 + String contentCnNo = sysUser.getUsername() +"向您分享了法规预警信息, "+"编号: "+serialNumber+",标题: "+titleCn+",新车型实施日期: "+newType+",在产车实施日期: "+newVehicle; + String contentInfoCnYes = sysUser.getUsername() +"向您分享了法规预警信息,"+"
" + +"编号: "+href+"
" + +"标题: "+titleCn+"
" + +"新车型实施日期: "+newType+"
" + +"在产车实施日期: "+newVehicle; + + //封装消息的实体类 + SysAnnouncement sysAnnouncement = bussDocumentLibraryEOService.getSysAnnouncement(userIdList, + null, + contentNo, + contentInfoYes, + MessageTypeEnum.PUSH.getValue(), + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(), + contentCnNo,contentInfoCnYes); + sysAnnouncementService.saveAnnouncement(sysAnnouncement); + bussDocumentLibraryEOService.sendWebsocket(StringUtils.join(thirdIdList, ","), contentInfoCnYes); } - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - String content = StringUtils.join(serialNumberList, ",") + " has been shared with you, please check."; - //消息详情模板 - // XXX has pushed GB 7258 to you as the implementation date of vehicle production is XXXX-XX-XX, - // GB 7258 to you as the implementation date of vehicle production is XXXX-XX-XX, Please be reminded to check it out. - String contentInfo = sysUser.getUsername() + " has pushed " + StringUtils.join(hrefList, ",") + ", Please be reminded to check it out."; - String title = content; - - //封装消息的实体类 - SysAnnouncement sysAnnouncement = bussDocumentLibraryEOService.getSysAnnouncement(userIdList, title, content, contentInfo,MessageTypeEnum.PUSH.getValue(),MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); - sysAnnouncementService.saveAnnouncement(sysAnnouncement); - bussDocumentLibraryEOService.sendWebsocket(StringUtils.join(thirdIdList, ","), contentInfo); //飞书 try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); for (String s : urlList) { + FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); String encode = UriEncoder.encode(s); List list = new ArrayList<>(); mapList.stream().forEach(e->{ if(s.contains((String)e.get("id"))){ String serialNumber = StringUtils.valueOf(e.get("serial_number")); + //封装飞书消息实体类 + setFeishuMsgVo(sysUser, sdf, feishuMsgVo, encode, e, serialNumber); + String timeContent = ""; if("1".equals(flag)){ String value = StringUtils.valueOf(e.get("xin1_che1_xing2_shi2_shi1_ri4_qi1")); @@ -452,15 +489,50 @@ public class LawsWarnService { list.add(serialNumber + timeContent); } }); - String contentTemp = sysUser.getUsername() + " has pushed " + StringUtils.join(list, ",") + ", Please be reminded to check it out."; - iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentTemp, MessageTypeEnum.PUSH.getName(), encode); + iFeishuService.sendCardMsgWarn(thirdIdList.toArray(new String[]{}), feishuMsgVo); + + +// String contentTemp = sysUser.getUsername() + " has pushed " + StringUtils.join(list, ",") + ", Please be reminded to check it out."; +// iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentTemp, MessageTypeEnum.PUSH.getName(), encode); } } catch (IOException e) { e.printStackTrace(); } - bussDocumentLibraryEOService.sendWebsocket(documentIds, contentInfo); + bussDocumentLibraryEOService.sendWebsocket(documentIds, documentIds); return "推送成功"; } + + private void setFeishuMsgVo(LoginUser sysUser, SimpleDateFormat sdf, FeishuMsgVo feishuMsgVo, String encode, Map e, String serialNumber) { + String documentTitleCn = ""; //文档标题 + String documentTitleEn = ""; //文档标题 + String newTypeExecutionDate = ""; //新车型实施日期 + String newVehicleExecutionDate = ""; //在产车实施日期 + if(ObjectUtils.isNotEmpty(e.get("title"))){ + documentTitleCn = String.valueOf(e.get("title")); + } + if(ObjectUtils.isNotEmpty(e.get("title_en"))){ + documentTitleEn = String.valueOf(e.get("title_en")); + } + if(ObjectUtils.isNotEmpty(e.get("xin1_che1_xing2_shi2_shi1_ri4_qi1"))){ + newTypeExecutionDate = sdf.format(e.get("xin1_che1_xing2_shi2_shi1_ri4_qi1")); + } + if(ObjectUtils.isNotEmpty(e.get("implement_time"))){ + newVehicleExecutionDate = sdf.format(e.get("implement_time")); + } + String contentInfoFei = sysUser.getUsername() +" shared Regulation Early Warning infomation with you."; + String contentInfoFeiCn = sysUser.getUsername() +"向您分享了法规预警信息."; + + + feishuMsgVo.setTitle(MessageTypeEnum.WARN.getNameCn()+"/"+MessageTypeEnum.WARN.getName()); + feishuMsgVo.setUrl(encode); + feishuMsgVo.setContentEn(contentInfoFei); + feishuMsgVo.setContent(contentInfoFeiCn); + feishuMsgVo.setRegulationNo(serialNumber); + feishuMsgVo.setNewTypeExecutionDate(newTypeExecutionDate); + feishuMsgVo.setNewVehicleExecutionDate(newVehicleExecutionDate); + feishuMsgVo.setDocumentTitleCn(documentTitleCn); + feishuMsgVo.setDocumentTitleEn(documentTitleEn); + } // public String warnPullMessage(String departIds, String userIds, String documentIds,String flag) { // Set allDepartIds = new HashSet<>(); // //查询当前部门下所有部门 diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/service/TimedTaskWarn.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/service/TimedTaskWarn.java index 86300e2b0..397ac8803 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/service/TimedTaskWarn.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/service/TimedTaskWarn.java @@ -4,6 +4,7 @@ import com.jero.common.constant.enums.MessageTypeEnum; import com.jero.modules.document.entity.BussDocumentLibraryEO; import com.jero.modules.document.service.impl.BussDocumentLibraryEOServiceImpl; import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.subscribe.entity.OnlCgformSubscribe; import com.jero.modules.subscribe.service.IOnlCgformSubscribeService; import com.jero.modules.system.entity.SysAnnouncement; @@ -123,15 +124,33 @@ public class TimedTaskWarn implements Job { //当前时间的前12个月 String beforeTimeSixTen = beforeTime(12,xin1Che1Xing2Shi2Shi1Ri4Qi1); - if(currentTime.equals(beforeTimeSix) || currentTime.equals(beforeTimeSixTen) || currentTime.equals(xin1Che1Xing2Shi2Shi1Ri4Qi1Str)){ - //发送站内消息和飞书消息 - String format = sdf.format(xin1Che1Xing2Shi2Shi1Ri4Qi1); - String content = "The implementation date of the " + category +" "+ serialNumber - + " new model you subscribed to is "+format+",please pay attention to check"; - String contentInfo = "The implementation date of the " + category +" "+ href - + " new model you subscribed to is "+format+",please pay attention to check"; - String msgTitle = content; - sendMessage(msgTitle, content,contentInfo,content, url, userIdList, thirdIdList); +// if(currentTime.equals(beforeTimeSix) || currentTime.equals(beforeTimeSixTen) || currentTime.equals(xin1Che1Xing2Shi2Shi1Ri4Qi1Str)){ +// //发送站内消息和飞书消息 +// String format = sdf.format(xin1Che1Xing2Shi2Shi1Ri4Qi1); +// String content = "The implementation date of the " + category +" "+ serialNumber +// + " new model you subscribed to is "+format+",please pay attention to check"; +// String contentInfo = "The implementation date of the " + category +" "+ href +// + " new model you subscribed to is "+format+",please pay attention to check"; +// String msgTitle = content; +// sendMessage(msgTitle, content,contentInfo,content, url, userIdList, thirdIdList); +// } + if(currentTime.equals(beforeTimeSixTen)){ + //发送飞书消息(提前一年) + sendFeishu(sdf, bussDocumentLibraryEO, url, thirdIdList,"1"); + //站内消息 + sendMessage(bussDocumentLibraryEO, userIdList,"1",sdf,href); + } + if(currentTime.equals(beforeTimeSix)){ + //发送飞书消息(提前6个月) + sendFeishu(sdf, bussDocumentLibraryEO, url, thirdIdList,"6"); + //站内消息 + sendMessage(bussDocumentLibraryEO, userIdList,"6",sdf,href); + } + if(currentTime.equals(xin1Che1Xing2Shi2Shi1Ri4Qi1Str)){ + //发送飞书消息(当天) + sendFeishu(sdf, bussDocumentLibraryEO, url, thirdIdList,"0"); + //站内消息 + sendMessage(bussDocumentLibraryEO, userIdList,"0",sdf,href); } } @@ -152,27 +171,165 @@ public class TimedTaskWarn implements Job { String contentInfo = "The implementation date of the " + category +" "+ href + " production vehicle you subscribed to is "+format+",please pay attention to check"; String msgTitle = content; - sendMessage(msgTitle, content,contentInfo,content, url, userIdList, thirdIdList); +// sendMessage(msgTitle, content,contentInfo,content, url, userIdList, thirdIdList); + } + if(currentTime.equals(beforeTimeSixTen)){ + //发送飞书消息(提前一年) + sendFeishu(sdf, bussDocumentLibraryEO, url, thirdIdList,"1"); + //站内消息 + sendMessage(bussDocumentLibraryEO, userIdList,"1",sdf,href); + } + if(currentTime.equals(beforeTimeSix)){ + //发送飞书消息(提前6个月) + sendFeishu(sdf, bussDocumentLibraryEO, url, thirdIdList,"6"); + //站内消息 + sendMessage(bussDocumentLibraryEO, userIdList,"6",sdf,href); + } + if(currentTime.equals(implementTimeStr)){ + //发送飞书消息(当天) + sendFeishu(sdf, bussDocumentLibraryEO, url, thirdIdList,"0"); + //站内消息 + sendMessage(bussDocumentLibraryEO, userIdList,"0",sdf,href); } } } } - private void sendMessage(String title, String content,String contentInfo,String contentFeiShu, String url, List userIdList, List thirdIdList) { - //站内消息 - //封装消息的实体类 - SysAnnouncement sysAnnouncement = bussDocumentLibraryEOService.getSysAnnouncement(userIdList, title, content, contentInfo,MessageTypeEnum.WARN.getValue(),MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName()); - sysAnnouncementService.saveAnnouncement(sysAnnouncement); - bussDocumentLibraryEOService.sendWebsocket(StringUtils.join(userIdList, ","), content); + private void sendFeishu(SimpleDateFormat sdf, + BussDocumentLibraryEO bussDocumentLibraryEO, + String url, + List thirdIdList, + String flag) { + FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + feishuMsgVo.setTitle(MessageTypeEnum.WARN.getNameCn()+"/"+MessageTypeEnum.WARN.getName()); + feishuMsgVo.setUrl(url); + String contentCn = ""; + String contentEn = ""; + if("1".equals(flag)){ + contentCn = "您所订阅的法规将于1年后实施."; + contentEn = "The regulation you subscribed to will be implemented in one year."; + } + if("6".equals(flag)){ + contentCn = "您所订阅的法规将于6个月后实施."; + contentEn = "The regulation you subscribed to will be implemented in six months."; + } + if("0".equals(flag)){ + contentCn = "您所订阅的法规已实施."; + contentEn = "The regulation you subscribed to is implemented."; + } + feishuMsgVo.setContent(contentCn); + feishuMsgVo.setContentEn(contentEn); + feishuMsgVo.setRegulationNo(bussDocumentLibraryEO.getSerialNumber()); + feishuMsgVo.setDocumentTitleCn(bussDocumentLibraryEO.getTitle()); + feishuMsgVo.setDocumentTitleEn(bussDocumentLibraryEO.getTitleEn()); + if(ObjectUtils.isNotEmpty(bussDocumentLibraryEO.getXin1Che1Xing2Shi2Shi1Ri4Qi1())){ + feishuMsgVo.setNewTypeExecutionDate(sdf.format(bussDocumentLibraryEO.getXin1Che1Xing2Shi2Shi1Ri4Qi1())); + } + if(ObjectUtils.isNotEmpty(bussDocumentLibraryEO.getImplementTime())){ + feishuMsgVo.setNewVehicleExecutionDate(sdf.format(bussDocumentLibraryEO.getImplementTime())); + } - //飞书消息 try { - iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentFeiShu, MessageTypeEnum.WARN.getName(), url); + iFeishuService.sendCardMsgWarn(thirdIdList.toArray(new String[]{}),feishuMsgVo); } catch (IOException e) { e.printStackTrace(); } } +// private void sendMessage(String title, String content,String contentInfo,String contentFeiShu, String url, List userIdList, List thirdIdList) { +// //站内消息 +// //封装消息的实体类 +// SysAnnouncement sysAnnouncement = bussDocumentLibraryEOService.getSysAnnouncement(userIdList, +// title, +// content, +// contentInfo, +// MessageTypeEnum.WARN.getValue(), +// MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(), +// null,null); +// sysAnnouncementService.saveAnnouncement(sysAnnouncement); +// bussDocumentLibraryEOService.sendWebsocket(StringUtils.join(userIdList, ","), content); +// +//// //飞书消息 +//// try { +//// iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentFeiShu, MessageTypeEnum.WARN.getName(), url); +//// } catch (IOException e) { +//// e.printStackTrace(); +//// } +// } + private void sendMessage(BussDocumentLibraryEO bussDocumentLibraryEO, + List userIdList, + String flag, + SimpleDateFormat sdf, + String href) { + String number = bussDocumentLibraryEO.getSerialNumber(); + String title = bussDocumentLibraryEO.getTitle(); + String titleEn = bussDocumentLibraryEO.getTitleEn(); + Date xin1Che1Xing2Shi2Shi1Ri4Qi1 = bussDocumentLibraryEO.getXin1Che1Xing2Shi2Shi1Ri4Qi1(); + Date implementTime = bussDocumentLibraryEO.getImplementTime(); + String newType = ""; + String newVehicle = ""; + if(ObjectUtils.isNotEmpty(xin1Che1Xing2Shi2Shi1Ri4Qi1)){ + newType = sdf.format(xin1Che1Xing2Shi2Shi1Ri4Qi1); + } + if(ObjectUtils.isNotEmpty(implementTime)){ + newVehicle = sdf.format(implementTime); + } + String contentCn = ""; + String contentInfoCn = ""; + String contentEn = ""; + String contentInfoEn = ""; + //"
" + + contentCn = ",编号: "+number + +",标题: "+title + +",新车型实施日期: "+newType + +",在产车实施日期: "+newVehicle; + contentInfoCn = "编号: "+href+"
" + +"标题: "+title+"
" + +"新车型实施日期: "+newType+"
" + +"在产车实施日期: "+newVehicle; + + contentEn = ",Regulation No: "+number + +",Title: "+titleEn + +",New Type Execution Date: "+newType + +",New Vehicle Execution Date: "+newVehicle; + + contentInfoEn = "Regulation No: "+href+"
" + +"Title: "+titleEn+"
" + +"New Type Execution Date: "+newType+"
" + +"New Vehicle Execution Date: "+newVehicle; + + if("1".equals(flag)){ + contentCn = "您所订阅的法规将于1年后实施"+contentCn; + contentInfoCn = "您所订阅的法规将于1年后实施"+"
"+contentInfoCn; + contentEn = "The regulation you subscribed to will be implemented in one year"+contentEn; + contentInfoEn = "The regulation you subscribed to will be implemented in one year"+"
"+contentInfoEn; + } + if("6".equals(flag)){ + contentCn = "您所订阅的法规将于6个月后实施"+contentCn; + contentInfoCn = "您所订阅的法规将于6个月后实施"+"
"+contentInfoCn; + contentEn = "The regulation you subscribed to will be implemented in six months"+contentEn; + contentInfoEn = "The regulation you subscribed to will be implemented in six months"+"
"+contentInfoEn; + } + if("0".equals(flag)){ + contentCn = "您所订阅的法规已实施"+contentCn; + contentInfoCn = "您所订阅的法规已实施"+"
"+contentInfoCn; + contentEn = "The regulation you subscribed to is implemented"+contentEn; + contentInfoEn = "The regulation you subscribed to is implemented"+"
"+contentInfoEn; + } + + //封装消息的实体类 + SysAnnouncement sysAnnouncement = bussDocumentLibraryEOService.getSysAnnouncement(userIdList, + title, + contentEn, + contentInfoEn, + MessageTypeEnum.WARN.getValue(), + MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(), + contentCn,contentInfoCn); + sysAnnouncementService.saveAnnouncement(sysAnnouncement); + bussDocumentLibraryEOService.sendWebsocket(StringUtils.join(userIdList, ","), contentInfoEn); + } + private String beforeTime (int month,Date date){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendarBefore = Calendar.getInstance(); diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/enums/FlowTypeEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/enums/FlowTypeEnum.java index d41f6e887..81d073225 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/enums/FlowTypeEnum.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/enums/FlowTypeEnum.java @@ -1,16 +1,21 @@ package com.jero.modules.wkflow.enums; +import com.jero.common.constant.enums.CutEnum; +import com.jero.modules.todoCenter.enums.TodoCenterStatusEnum; +import org.apache.commons.lang3.StringUtils; + /** * 流程类型枚举类 */ public enum FlowTypeEnum { - RWQRLC("1","任务确认流程","RWQRLC","任务确认流程","rwqrlc"), - SJFHXSHLC("2","设计符合性审查流程","SJFHXSHLC","设计符合性审查流程","sjfhxlc"), - PREHOMOQRLC("3","prehomo确认流程","PREHOMOQRLC","prehomo确认流程","prehomoqrlc"), - YZFHXSCLC("4","验证符合性审查流程","YZFHXSCLC","验证符合性审查流程","yzfhxsclc"), - FGYJSJLC("5","法规意见收集流程","FGYJSJLC","法规意见收集流程","fgyjsjlc"), - FGJSPG("6","法规技术评估","FGJSPG","法规技术评估流程","fgjspglc"), + RWQRLC("1","任务确认流程","RWQRLC","任务确认流程","rwqrlc","清单任务确认","List task Confirmation"), + SJFHXSHLC("2","设计符合性审查流程","SJFHXSHLC","设计符合性审查流程","sjfhxlc","设计符合性确认","Design conformance verification"), + PREHOMOQRLC("3","prehomo确认流程","PREHOMOQRLC","prehomo确认流程","prehomoqrlc","Pre-Homo确认","The Pre - Homo confirmation"), + YZFHXSCLC("4","验证符合性审查流程","YZFHXSCLC","验证符合性审查流程","yzfhxsclc","验证符合性确认","Verify conformance confirmation"), + FGYJSJLC("5","法规意见收集流程","FGYJSJLC","法规意见收集流程","fgyjsjlc","法规意见收集","Collection of Legislative Comments"), + FGJSPG("6","法规技术评估流程","FGJSPG","法规技术评估流程","fgjspglc","法规技术评估","Regulatory and technical assessment"), + QDQR("10","清单确认","QDQR","清单确认流程","qdqr","法规清单确认","Regulation list confirmation"), ; private String value; @@ -18,13 +23,17 @@ public enum FlowTypeEnum { private String prcNum; private String prcName; private String processDefinitionKey; + private String cnName; + private String enName; - private FlowTypeEnum(String value, String lable, String prcNum, String prcName, String processDefinitionKey) { + private FlowTypeEnum(String value, String lable, String prcNum, String prcName, String processDefinitionKey,String cnName,String enName) { this.value = value; this.lable = lable; this.prcNum = prcNum; this.prcName = prcName; this.processDefinitionKey = processDefinitionKey; + this.cnName = cnName; + this.enName = enName; } public String getValue() { return value; @@ -43,4 +52,26 @@ public enum FlowTypeEnum { public String getProcessDefinitionKey() { return processDefinitionKey; } + + public String getCnName() { + return cnName; + } + + public String getEnName() { + return enName; + } + + public static String getTextByValue(String value, String cut) { + FlowTypeEnum[] values = values(); + for (FlowTypeEnum flowTypeEnum : values) { + if (flowTypeEnum.value.equals(value)) { + if(StringUtils.equals(cut, CutEnum.CN.getValue())){ + return flowTypeEnum.cnName; + }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ + return flowTypeEnum.enName; + } + } + } + return null; + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/feginClient/WorkFlowFeignClient.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/feginClient/WorkFlowFeignClient.java index 51070cea7..28a479a45 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/feginClient/WorkFlowFeignClient.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/feginClient/WorkFlowFeignClient.java @@ -181,4 +181,21 @@ public interface WorkFlowFeignClient { @RequestMapping(value = "/bat-wkflow/deleteProcessInstanceByPrcIds",method = RequestMethod.GET) Result deleteProcessInstanceByPrcIds(@RequestParam("prcIds") String prcIds); + + @RequestMapping(value = "/bat-wkflow/task/getLawsOpinionGatherPrcInfo",method = RequestMethod.GET) + Map getLawsOpinionGatherPrcInfo(@RequestParam("lawsOpinionGatherId") String lawsOpinionGatherId); + + /** + * 根据流程类型,查询未完成的流程信息 + * @param prcType + * @return + */ + @RequestMapping(value = "/bat-wkflow/datas/bus-process-name/queryProcessInfoByPrcType",method = RequestMethod.GET) + List> queryProcessInfoByPrcType(@RequestParam("prcType") String prcType); + + /** + * 处理历史数据-之前的数据发起的时候在busProcessNew中没有待办信息 + */ + @RequestMapping(value = "/bat-wkflow/datas/bus-process-new/dispostHistoryBusProcessNewData",method = RequestMethod.GET) + Result dispostHistoryBusProcessNewData(); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/feginClient/impl/WorkFlowFeignClientImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/feginClient/impl/WorkFlowFeignClientImpl.java index e8db6f85e..e0ab1dc66 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/feginClient/impl/WorkFlowFeignClientImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/feginClient/impl/WorkFlowFeignClientImpl.java @@ -196,4 +196,20 @@ public class WorkFlowFeignClientImpl{ public Result deleteProcessInstanceByTaskId(@RequestParam("taskId")String taskId){ return workFlowFeignClient.deleteProcessInstance(taskId); } + + /** + * 根据流程类型,查询未完成的流程信息 + * @param prcType + * @return + */ + public List> queryProcessInfoByPrcType(String prcType) { + return workFlowFeignClient.queryProcessInfoByPrcType(prcType); + } + + /** + * 处理历史数据-之前的数据发起的时候在busProcessNew中没有待办信息 + */ + public Result dispostHistoryBusProcessNewData() { + return workFlowFeignClient.dispostHistoryBusProcessNewData(); + } } diff --git a/jero-boot/jero-boot-single-startup/src/main/java/com/jero/LawNioApplication.java b/jero-boot/jero-boot-single-startup/src/main/java/com/jero/LawNioApplication.java index 207380e88..87c4ee8cb 100644 --- a/jero-boot/jero-boot-single-startup/src/main/java/com/jero/LawNioApplication.java +++ b/jero-boot/jero-boot-single-startup/src/main/java/com/jero/LawNioApplication.java @@ -11,6 +11,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.core.env.Environment; +import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.web.socket.server.standard.ServerEndpointExporter; import java.net.InetAddress; @@ -25,6 +26,7 @@ import java.net.UnknownHostException; @SpringBootApplication @EnableEurekaClient @EnableFeignClients +@EnableScheduling public class LawNioApplication extends SpringBootServletInitializer { @Override diff --git a/jero-web/src/common/lang/en-us.js b/jero-web/src/common/lang/en-us.js index 146157a4d..08529934a 100644 --- a/jero-web/src/common/lang/en-us.js +++ b/jero-web/src/common/lang/en-us.js @@ -793,6 +793,7 @@ module.exports = { parameter: 'Parameter', changeExtension: 'Change Extension', addDetailList: 'Add', + editDetailList:'Edit DetailList', detailedList: 'DetailedList', copyParamDetailList: 'Copy Parameter List', collectionCompletionTime: 'Collection Completed', @@ -1329,5 +1330,35 @@ module.exports = { thereForTheCurrentlySelectedData:'There is no standard breakdown for the currently selected data', secondaryDirectory:'Secondary Directory', OnlyPersonsCanBeSelected:'The maximum upper limit is exceeded; Only 100 persons can be selected', + projectVersion:'Project Version', + softwareVersion:'Authentication Software version', + versionStatistics:'Version statistics', + addSubproject:'Add Subproject', + Topping:'Topping', + cancelTopping:'Cancel Topping', + relatedProjectVersion:'Related project version', + taskType:'Task Type', + taskStatus:'Task Status', + taskConfirmationHandling:'Task confirmation handling', + relatedVersion:'Related version', + filledBy:'Filled by', + parameterToBeInitiated:'Parameter to be initiated', + listTaskConfirmation:'List task confirmation', + completednum: 'Quantity to be filled', + filledBynum:'Filled by', + parameterToBeInitiatednum:'Parameter to be initiated', + listToConfirm:'List to confirm', + toSubmit:'To submit', + toAudit:'To audit', + secondaryDirectory:'Secondary Directory', + OnlyPersonsCanBeSelected:'The maximum upper limit is exceeded; Only 100 persons can be selected', + projectVersion:'Project Version', + softwareVersion:'Authentication Software version', + versionStatistics:'Version statistics', + addSubproject:'Add Subproject', + Topping:'Topping', + cancelTopping:'Cancel Topping', + relatedProjectVersion:'Related project version', + Importfailure:'Import failure', CuiBan:'CuiBan', } \ No newline at end of file diff --git a/jero-web/src/common/lang/zh-cn.js b/jero-web/src/common/lang/zh-cn.js index 1124ee14d..63891c8d9 100644 --- a/jero-web/src/common/lang/zh-cn.js +++ b/jero-web/src/common/lang/zh-cn.js @@ -516,8 +516,8 @@ module.exports = { AddProcess: '添加流程', RelatedItems: '相关项目', Sponsor: '发起人', - CurrentProcessor: '当前处理人', - LastProcessor: '上一处理人', + CurrentProcessor: '当前操作人', + LastProcessor: '上一操作人', ProcessingTime: '办理时间', cutoffTime: '截止时间', ProcessStatus: '流程状态', @@ -809,6 +809,7 @@ module.exports = { parameter: '参数', changeExtension: '变更扩展', addDetailList: '添加清单', + editDetailList:'编辑清单', detailedList: '清单', copyParamDetailList: '复制参数清单', collectionCompletionTime: '收集完成时间', @@ -1430,5 +1431,35 @@ module.exports = { thereForTheCurrentlySelectedData:'当前所选数据暂无标准分解单', secondaryDirectory:'二级目录', OnlyPersonsCanBeSelected:'超出最大上限;最多只能选择100个人员', + projectVersion:'项目版本', + softwareVersion:'认证软件版本', + versionStatistics:'版本统计', + addSubproject:'添加子项目', + Topping:'置顶', + cancelTopping:'取消置顶', + relatedProjectVersion:'相关项目版本', + taskType:'任务类型', + taskStatus:'任务状态', + taskConfirmationHandling:'任务确认办理', + relatedVersion:'相关版本', + filledBy:'待分配填写人', + parameterToBeInitiated:'参数待发起', + listTaskConfirmation:'清单任务确认', + completednum: '待填写', + filledBynum:'待分配填写人', + parameterToBeInitiatednum:'参数待发起', + listToConfirm:'待确认', + toSubmit:'待提交', + toAudit:'待审核', + secondaryDirectory:'二级目录', + OnlyPersonsCanBeSelected:'超出最大上限;最多只能选择100个人员', + projectVersion:'项目版本', + softwareVersion:'认证软件版本', + versionStatistics:'版本统计', + addSubproject:'添加子项目', + Topping:'置顶', + cancelTopping:'取消置顶', + relatedProjectVersion:'相关项目版本', + Importfailure:'导入失败', CuiBan:'催办', } \ No newline at end of file diff --git a/jero-web/src/components/CollectionType/index.vue b/jero-web/src/components/CollectionType/index.vue index 2b59628ee..0430379dd 100644 --- a/jero-web/src/components/CollectionType/index.vue +++ b/jero-web/src/components/CollectionType/index.vue @@ -29,6 +29,7 @@ :disabled="item.isLock == '1' ? true: false" :placeholder="$t('pleaseEnter')+$t('chinese')" @input="onInput" + :maxLength="1000" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))" v-model="item.dataValue"/> diff --git a/jero-web/src/components/CollectionTypeDisabled/index.vue b/jero-web/src/components/CollectionTypeDisabled/index.vue index f5852220f..65c82d9ea 100644 --- a/jero-web/src/components/CollectionTypeDisabled/index.vue +++ b/jero-web/src/components/CollectionTypeDisabled/index.vue @@ -27,6 +27,7 @@ diff --git a/jero-web/src/components/ImportFileOnlyList/index.vue b/jero-web/src/components/ImportFileOnlyList/index.vue index 7caf6dabd..a0e0b4709 100644 --- a/jero-web/src/components/ImportFileOnlyList/index.vue +++ b/jero-web/src/components/ImportFileOnlyList/index.vue @@ -54,6 +54,10 @@ export default { type: String, default: '' }, + paramsManifestId: { + type: String, + default: '' + }, projectLibraryId: { type: String, default: '' @@ -76,6 +80,8 @@ export default { return window._CONFIG['domianURL'] + '/' + this.url.importZipUrl + '?cut=' + this.cut + '¶msTemplateId=' + this.paramsTemplateId } else if (this.projectLibraryId) { return window._CONFIG['domianURL'] + '/' + this.url.importZipUrl + '?cut=' + this.cut + '&projectLibraryId=' + this.projectLibraryId + } else if (this.paramsManifestId) { + return window._CONFIG['domianURL'] + '/' + this.url.importZipUrl + '?cut=' + this.cut + '¶msManifestId=' + this.paramsManifestId } return window._CONFIG['domianURL'] + '/' + this.url.importZipUrl + '?cut=' + this.cut } diff --git a/jero-web/src/components/ImportFileOnlyListtag/index.vue b/jero-web/src/components/ImportFileOnlyListtag/index.vue new file mode 100644 index 000000000..86a679cfa --- /dev/null +++ b/jero-web/src/components/ImportFileOnlyListtag/index.vue @@ -0,0 +1,284 @@ + + + + + + \ No newline at end of file diff --git a/jero-web/src/components/menu/index.js b/jero-web/src/components/menu/index.js index 6255cfdd4..f4cf57561 100644 --- a/jero-web/src/components/menu/index.js +++ b/jero-web/src/components/menu/index.js @@ -109,8 +109,10 @@ export default { props = { to: { path: menu.path } } } - const attrs = { href: menu.path, target: menu.meta.target , title:menu.meta.title } - + const attrs = { href: menu.path, target: menu.meta.target, title: menu.meta.title } + if (menu.meta && menu.meta.existTask) { + attrs.style = 'color:red' + } if (menu.children && menu.alwaysShow) { // 把有子菜单的 并且 父菜单是要隐藏子菜单的 // 都给子菜单增加一个 hidden 属性 @@ -162,7 +164,8 @@ export default { span slot = 'title' > { this.renderIcon(menu.meta.icon) } - < span title={menu.meta.title}> { menu.meta.title } < /span> + < span + title = { menu.meta.title } > { menu.meta.title } < /span> < /span> { itemArr diff --git a/jero-web/src/components/tools/HeaderNotice.vue b/jero-web/src/components/tools/HeaderNotice.vue index 8ff499e95..0233fec30 100644 --- a/jero-web/src/components/tools/HeaderNotice.vue +++ b/jero-web/src/components/tools/HeaderNotice.vue @@ -15,7 +15,10 @@ @@ -50,6 +53,7 @@ data() { return { loadding: false, + language: '', url: { listCementByUser: '/sys/sysAnnouncementSend/getMessageUnreadList', editCementSend: '/sys/sysAnnouncementSend/editByAnntIdAndUserId', @@ -91,6 +95,7 @@ }, created() { this.loadData() + this.language = localStorage.getItem('language') || '' // this.initWebSocket() if (store.getters.userInfo) { this.$socketPublic.dispatch('webSocketInit')//初始化ws @@ -110,6 +115,11 @@ // clearInterval(this.timer) // }, methods: { + getText(str) { + let words = str.replace(/<[^<>]+>/g, '').replace(/ /gi, '') //这里是去除标签 + //.replace(/\s/g, '') //这里是去除空格 + return words + }, loadData() { getAction(this.url.listCementByUser).then((res) => { if (res.success) { @@ -134,9 +144,16 @@ showAnnouncement(record) { getAction(this.url.readAllMsg, { ids: record.id }).then((res) => { }) + if (this.language == 'zh-cn') { + localStorage.setItem('msgContent', record.msgContentCn) + } else { + localStorage.setItem('msgContent', record.msgContent) + } this.$router.push({ - path: '/system/MessageDetails', - query: record + path: '/isps/userAnnouncement', + query: { + Date: Date.now() + } }) }, toMyAnnouncement() { diff --git a/jero-web/src/views/dashboard/components/myList.vue b/jero-web/src/views/dashboard/components/myList.vue index 0779fe942..b3e9180d5 100644 --- a/jero-web/src/views/dashboard/components/myList.vue +++ b/jero-web/src/views/dashboard/components/myList.vue @@ -10,11 +10,17 @@
- {{item.prcName}} - + + {{item.flowTypeShow+'-'+item.projectName}} + + + {{item.flowTypeShow+'-'+item.serialNumber}} + +
- {{item.creatTime}} + {{item.endTime}}
{{$t('Pending')}} @@ -43,9 +49,13 @@ dataSource: [], loading: false, prcTypeName: { - 1: this.$t('taskConfirmationProcess'), - 5:this.$t('collectionOfRegulatoryOpinionsProcess'), - 6:this.$t('regulatoryTechnologyAssessmentProcess') + 1: this.$t('listTaskConfirmation'), + 2: this.$t('designComplianceReview'), + 3: this.$t('preHomeConfirmation'), + 4: this.$t('verificationComplianceReview'), + 10: this.$t('confirmationOfRegulationsList'), + 5: this.$t('collectionOfRegulatoryOpinionsProcess'), + 6: this.$t('regulatoryTechnologyAssessmentProcess') } } }, @@ -74,11 +84,11 @@ queryProcess() { this.loading = true let parmes = {} - parmes.current = this.pageNo - parmes.size = this.pageSize - parmes.userId = this.userInfo().userId - postAction('task/todoTaskList', parmes).then((res) => { - this.dataSource = res.list || [] + parmes.pageNo = this.pageNo + parmes.pageSize = this.pageSize + // parmes.userId = this.userInfo().userId + getAction('/todoCenter/projectProcess/todoTaskList', parmes).then((res) => { + this.dataSource = res.result.records || [] this.loading = false }) }, @@ -88,29 +98,138 @@ }) }, prcClick(row) { - // let index = row.taskIds.lastIndexOf(',') - // row.taskIds = row.taskIds.slice(0, index) + let query = {} row.router = this.$route.path - if (row.prcType == '1') { + if (row.flowType == '1') { + query = { + taskDefinitionKey: row.taskDefinitionKey, + taskIds: row.taskId, + prcType: row.flowType, + prcNum: row.prcNum, + isTrue: true + } let newUrl = this.$router.resolve({ path: '/handshakeProcess', - query: row + query: query }) window.open(newUrl.href, '_blank') - } else if (row.prcType == '5') { + } else if (row.flowType == '10') { let newUrl = this.$router.resolve({ - path: '/regulatoryProcessReview', - query: row + path: '/ProjectDetails', + query: { + id: row.projectLibraryId, + projectName: row.projectName, + projectNameId: row.projectNameId, + targetMarket: row.targetMarket, + studioEngineer: row.studioEngineer, + type: '102' + } }) window.open(newUrl.href, '_blank') - } else if (row.prcType == '6') { + } else if (row.flowType == '2') { + row.taskId = row.taskId + '' + if (row.taskId.length > 30) { + row.taskId = '' + } + query = { + router: row.router, + taskIds: row.taskId, + actiProcInstId: row.actiProcInstId, + projectTaskInventoryId: row.projectLawsInventoryId, + projectLibraryId: row.projectLibraryId, + id: row.projectLibraryId, + studioEngineer: row.studioEngineer, + serialNumber: row.serialNumber, + TaskKey: row.taskDefinitionKey, + isDisplay: true, + flowType: 2, + Sponsor: 'designInitiatorName', + personLiable: 'designDutyName', + typeOfDeliverables: 'designDeliverableTypeName', + deliverableTemplate: 'designDeliverableTemplate', + DueDate: 'designDueDate', + remarks: 'designRemark', + projectName: row.projectName, + targetMarket: row.targetMarket, + projectNameId: row.projectNameId, + primaryKeyId: row.primaryKeyId, + PersonChargeFeedback: row.personChargeFeedback + } let newUrl = this.$router.resolve({ - path: '/evaluationProcess', - query: row + path: '/taskListProcess', + query: query + }) + window.open(newUrl.href, '_blank') + } else if (row.flowType == '3') { + row.taskId = row.taskId + '' + if (row.taskId.length > 30) { + row.taskId = '' + } + query = { + router: row.router, + taskIds: row.taskId, + actiProcInstId: row.actiProcInstId, + projectTaskInventoryId: row.projectLawsInventoryId, + studioEngineer: row.studioEngineer, + projectLibraryId: row.projectLibraryId, + serialNumber: row.serialNumber, + TaskKey: row.taskDefinitionKey, + flowType: 3, + isDisplay: true, + id: row.projectLibraryId, + Sponsor: 'prehomoInitiatorName', + personLiable: 'prehomoDutyName', + typeOfDeliverables: 'prehomoDeliverableTypeName', + deliverableTemplate: 'prehomoDeliverableTemplate', + DueDate: 'prehomoDueDate', + remarks: 'prehomoRemark', + projectName: row.projectName, + targetMarket: row.targetMarket, + projectNameId: row.projectNameId, + primaryKeyId: row.primaryKeyId, + PersonChargeFeedback: row.personChargeFeedback + } + let newUrl = this.$router.resolve({ + path: '/taskListProcess', + query: query + }) + window.open(newUrl.href, '_blank') + } else if (row.flowType == '4') { + row.taskId = row.taskId + '' + if (row.taskId.length > 30) { + row.taskId = '' + } + query = { + router: row.router, + taskIds: row.taskId, + actiProcInstId: row.actiProcInstId, + id: row.projectLibraryId, + projectLibraryId: row.projectLibraryId, + studioEngineer: row.studioEngineer, + serialNumber: row.serialNumber, + projectTaskInventoryId: row.projectLawsInventoryId, + TaskKey: row.taskDefinitionKey, + flowType: 4, + isDisplay: true, + Sponsor: 'verifyInitiatorName', + personLiable: 'verifyDutyName', + typeOfDeliverables: 'verifyDeliverableTypeName', + deliverableTemplate: 'verifyDeliverableTemplate', + DueDate: 'verifyDueDate', + remarks: 'verifyRemark', + projectName: row.projectName, + targetMarket: row.targetMarket, + projectNameId: row.projectNameId, + primaryKeyId: row.primaryKeyId, + PersonChargeFeedback: row.personChargeFeedback + } + let newUrl = this.$router.resolve({ + path: '/taskListProcess', + query: query }) window.open(newUrl.href, '_blank') } - } + }, } } @@ -167,6 +286,7 @@ text-overflow: ellipsis; white-space: nowrap; } + /*.top-admin {*/ /* font-size: 16px;*/ /* font-family: Blue Sky Noto;*/ diff --git a/jero-web/src/views/dashboard/components/myNews.vue b/jero-web/src/views/dashboard/components/myNews.vue index f1d76361c..3d693062a 100644 --- a/jero-web/src/views/dashboard/components/myNews.vue +++ b/jero-web/src/views/dashboard/components/myNews.vue @@ -11,8 +11,8 @@
-
- {{item.titile}} +
+ {{language == 'zh-cn'?item.msgContentCn:item.msgContent}}
{{item.sendTime}} @@ -44,11 +44,13 @@ loading: false, pageNo: 1, pageSize: 4, - dataSource: [] + dataSource: [], + language: '' } }, mounted() { this.getList() + this.language = localStorage.getItem('language') || '' }, methods: { getList() { @@ -69,9 +71,16 @@ magClick(row) { getAction(this.url.readAllMsg, { ids: row.id }).then((res) => { }) + if (this.language == 'zh-cn'){ + localStorage.setItem('msgContent', row.msgContentCn) + }else{ + localStorage.setItem('msgContent', row.msgContent) + } this.$router.push({ - path: '/system/MessageDetails', - query: row + path: '/isps/userAnnouncement', + query: { + Date: Date.now() + } }) }, moreClick() { diff --git a/jero-web/src/views/parameter/parameterlist/components/addModel.vue b/jero-web/src/views/parameter/parameterlist/components/addModel.vue index 9fe7a3502..922689d45 100644 --- a/jero-web/src/views/parameter/parameterlist/components/addModel.vue +++ b/jero-web/src/views/parameter/parameterlist/components/addModel.vue @@ -225,6 +225,7 @@ @@ -609,9 +610,12 @@ export default { }; }) - - - + }, + onInput(r) { + let value = r.target.value + r.target.value = value.replace(/[!!#]/g, '') + this.formInline.controlValues = r.target.value + this.formInline = {...this.formInline} }, getSysCategoryTree() { getAction('/sys/category/getSysCategoryTree', {}).then((res) => { diff --git a/jero-web/src/views/processCenter/ProcessMapping.vue b/jero-web/src/views/processCenter/ProcessMapping.vue index 15cdff2b2..3a879812b 100644 --- a/jero-web/src/views/processCenter/ProcessMapping.vue +++ b/jero-web/src/views/processCenter/ProcessMapping.vue @@ -16,7 +16,7 @@ data() { return { name: '', - actUrl: 'http://10.0.1.13:17210/bat-wkflow/modeler.html?modelId='//本地 + actUrl: 'http://localhost:17210/bat-wkflow/modeler.html?modelId='//本地 // actUrl: 'http://10.255.35.25:8082/modeler.html?modelId=' //正式 // actUrl: 'http://10.255.128.148:8888/modeler.html?modelId=' //测试 } diff --git a/jero-web/src/views/processCenter/components/evaluatorFeedback.vue b/jero-web/src/views/processCenter/components/evaluatorFeedback.vue index df1fc8781..31501554b 100644 --- a/jero-web/src/views/processCenter/components/evaluatorFeedback.vue +++ b/jero-web/src/views/processCenter/components/evaluatorFeedback.vue @@ -15,7 +15,15 @@ {{$t('complianceResults')}}
- {{formInline.complianceResult == 'Compliance'?$t('accord'):$t('nonConformity')}} + + {{$t('accord')}} + + + {{$t('nonConformity')}} + + + -- +
{{$t('relevantSections')}}
- {{item.relatedSection}} + {{item.relatedSection ?item.relatedSection : '--'}}
{{$t('problemDescription')}}
- {{item.issueOrSuggest}} + {{item.issueOrSuggest ? item.issueOrSuggest :'--'}}
{{$t('relevantSections')}}
- {{item.relatedSection}} + {{item.relatedSection?item.relatedSection : '--'}}
@@ -132,7 +140,7 @@ :title="$t('problemDescription')">{{$t('problemDescription')}}
- {{item.issueOrSuggest}} + {{item.issueOrSuggest ? item.issueOrSuggest:'--'}}
@@ -156,12 +164,13 @@ -
+
{{$t('sponsorReview')}}
- +
@@ -175,6 +184,18 @@
+ + + + + + + + + + + +
@@ -259,7 +280,8 @@ }, disabled: false, uploadIndex: '', - dataList: [] + dataList: [], + isTrue: false } }, mounted() { @@ -283,8 +305,14 @@ }) if (this.$route.query.taskDefinitionKey == 'pgrqr') { this.disabled = false + if (this.$route.query.isDisabled) { + this.disabled = JSON.parse(this.$route.query.isDisabled) + } } else { this.disabled = true + if (this.$route.query.isDisabled) { + this.isTrue = JSON.parse(this.$route.query.isDisabled) + } } }, methods: { @@ -443,4 +471,5 @@ white-space: normal; word-break: break-all; } + \ No newline at end of file diff --git a/jero-web/src/views/processCenter/components/evaluatorFeedbackList.vue b/jero-web/src/views/processCenter/components/evaluatorFeedbackList.vue index ecdb62caa..07c74ec95 100644 --- a/jero-web/src/views/processCenter/components/evaluatorFeedbackList.vue +++ b/jero-web/src/views/processCenter/components/evaluatorFeedbackList.vue @@ -74,7 +74,9 @@ -- - {{text == 'Compliance' ? $t('accord'):$t('nonConformity')}} + {{$t('accord')}} + {{$t('nonConformity')}} + -- { res.sponsorFeedback = '' }) @@ -306,10 +387,18 @@ }, computed: { columns() { - if (this.$route.query.taskDefinitionKey == 'pgrqr') { - return this.columnsTwo + let disabled = false + if (this.$route.query.isDisabled) { + disabled = JSON.parse(this.$route.query.isDisabled) + } + if (disabled) { + return this.columnsOne } else { - return this.columnsThree + if (this.$route.query.taskDefinitionKey == 'pgrqr') { + return this.columnsTwo + } else { + return this.columnsThree + } } } }, @@ -345,14 +434,14 @@ this.$message.warning(this.$t('PleaseCompleteList')) return } - Object.keys(this.dataSource[i]).forEach(res=>{ + Object.keys(this.dataSource[i]).forEach(res => { if (this.dataSource[i][res] && typeof this.dataSource[i][res] == 'string') { this.dataSource[i][res] = this.dataSource[i][res].replace(/\"/g, '“') this.dataSource[i][res] = this.dataSource[i][res].replace(/\'/g, '‘') } }) } - if (this.$route.query.taskDefinitionKey == 'pgrqr'){ + if (this.$route.query.taskDefinitionKey == 'pgrqr') { let feedbackTime = moment(new Date()).format('YYYY-MM-DD HH:mm:ss') for (let i = 0; i < this.dataSource.length; i++) { this.dataSource[i].feedbackTime = feedbackTime @@ -361,7 +450,7 @@ callBack && callBack(this.dataSource) }, preservationData(callBack) { - if (this.$route.query.taskDefinitionKey == 'pgrqr'){ + if (this.$route.query.taskDefinitionKey == 'pgrqr') { let feedbackTime = moment(new Date()).format('YYYY-MM-DD HH:mm:ss') for (let i = 0; i < this.dataSource.length; i++) { this.dataSource[i].feedbackTime = feedbackTime diff --git a/jero-web/src/views/processCenter/components/feedbackInformation.vue b/jero-web/src/views/processCenter/components/feedbackInformation.vue index ff7b18e69..def1f809c 100644 --- a/jero-web/src/views/processCenter/components/feedbackInformation.vue +++ b/jero-web/src/views/processCenter/components/feedbackInformation.vue @@ -12,18 +12,18 @@ {{$t('feedbackPoint')+(index+1)}}
- * + * {{$t('relevantSections')}}
@@ -53,6 +54,7 @@ }]">
@@ -62,7 +64,7 @@
- * + * {{$t('questionsSuggestions')}}
@@ -72,6 +74,7 @@ }]">
@@ -79,7 +82,7 @@
- * + * {{$t('reason')}}
@@ -112,6 +116,7 @@
+ @@ -166,7 +171,9 @@ } this.formInline = { ...this.formInline } }) - + if (this.$route.query.isDisabled) { + this.disabled = JSON.parse(this.$route.query.isDisabled) + } }, methods: { clickButtonToUpload(item, index) { @@ -301,4 +308,7 @@ margin-left: 8px; cursor: pointer; } + ::v-deep .ant-input-disabled{ + color: #000F16; + } \ No newline at end of file diff --git a/jero-web/src/views/processCenter/components/reviewedByThePersonInCharge.vue b/jero-web/src/views/processCenter/components/reviewedByThePersonInCharge.vue index f9614c226..17ca2a498 100644 --- a/jero-web/src/views/processCenter/components/reviewedByThePersonInCharge.vue +++ b/jero-web/src/views/processCenter/components/reviewedByThePersonInCharge.vue @@ -72,7 +72,7 @@ - +
* @@ -88,16 +88,29 @@
+ +
+
+ {{$t('feedbackFromTheEngineer')}} +
+ + + {{formInline.engineerFeedbackContent}} + + +
+
- + {{$t('Deliverables')}}
- + diff --git a/jero-web/src/views/processCenter/components/taskCirculationHistory.vue b/jero-web/src/views/processCenter/components/taskCirculationHistory.vue index 8495f0393..c474671e7 100644 --- a/jero-web/src/views/processCenter/components/taskCirculationHistory.vue +++ b/jero-web/src/views/processCenter/components/taskCirculationHistory.vue @@ -80,7 +80,7 @@ methods: { getList() { let query = { - actiProcInstId: this.$route.query.actiProcInstId + actiProcInstId: this.$route.query.actiProcInstId || this.$route.query.prcId } this.loading = true getAction('/wkflow/processHistoryEO/list', query).then((res) => { diff --git a/jero-web/src/views/processCenter/processForm/evaluationProcess/index.vue b/jero-web/src/views/processCenter/processForm/evaluationProcess/index.vue index cc0b76f8f..6aac8943e 100644 --- a/jero-web/src/views/processCenter/processForm/evaluationProcess/index.vue +++ b/jero-web/src/views/processCenter/processForm/evaluationProcess/index.vue @@ -26,7 +26,7 @@ :title="$t('evaluatorFeedback')" /> { if (res instanceof String) { - this.queryBy = JSON.parse(res) + this.queryBy = JSON.parse(res) || {} callback() } else { - this.queryBy = res + this.queryBy = res || {} callback() } }) diff --git a/jero-web/src/views/processCenter/processForm/processDetails/index.vue b/jero-web/src/views/processCenter/processForm/processDetails/index.vue index 875ca81b0..f3ab23d05 100644 --- a/jero-web/src/views/processCenter/processForm/processDetails/index.vue +++ b/jero-web/src/views/processCenter/processForm/processDetails/index.vue @@ -15,6 +15,7 @@
+
@@ -22,6 +23,7 @@ + + \ No newline at end of file diff --git a/jero-web/src/views/projectManagement/components/versionStatistics.vue b/jero-web/src/views/projectManagement/components/versionStatistics.vue new file mode 100644 index 000000000..a8e087be0 --- /dev/null +++ b/jero-web/src/views/projectManagement/components/versionStatistics.vue @@ -0,0 +1,212 @@ + + + + + \ No newline at end of file diff --git a/jero-web/src/views/projectManagement/dialog/ParameterTemplateAdd.vue b/jero-web/src/views/projectManagement/dialog/ParameterTemplateAdd.vue index bcec63bc8..6e8b589cf 100644 --- a/jero-web/src/views/projectManagement/dialog/ParameterTemplateAdd.vue +++ b/jero-web/src/views/projectManagement/dialog/ParameterTemplateAdd.vue @@ -10,19 +10,75 @@ :wrapper-col='wrapperCol' > - - - - + +
+
+ * + {{$t('title')}} +
+ + + + + + + + + + +
+ + + + + +
+ +
+
+ {{$t('relatedProjectVersion')}} +
+ + + + + + {{ item }} + + + + +
+ + +
+
+ {{$t('explain')}} +
+ + + +
+
+
@@ -94,11 +150,11 @@ :dataSource='areaTable' :pagination='false' :loading='loading' - :scroll='{x: 600,y:300}' + :scroll='{x: 600,y:400}' :rowSelection='{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}' @change='handleTableChange'> -
+
{ + if (res.success) { + this.projectVersionList = res.result || [] + } else { + this.projectVersionList = [] + } + }) + }, pageOnChange(page, pageSize) { this.pageNo = page this.loadData() @@ -246,9 +323,15 @@ }, editData(edit) { // 编辑一行的数据 - this.row = edit - this.formData = { ...edit } - this.selectedRowKeys = edit.paramsTemplateId.split(',') + let query = JSON.parse(JSON.stringify(edit)) + if (query.projectVersion) { + query.projectVersion = query.projectVersion.split(',') + }else{ + query.projectVersion = [] + } + this.row = query + this.formData = { ...query } + this.selectedRowKeys = query.paramsTemplateId.split(',') }, //新增 handleSubmit() { @@ -267,10 +350,17 @@ this.confirmLoading = true let postDate = { title: this.formData.title, + projectVersion: this.formData.projectVersion, + explanation: this.formData.explanation, paramsTemplateId: this.paramsTemplateId || this.selectedRowKeys[0], paramsTemplatePublishVersion: this.row.version || this.selectedRowKeysDate[0].version, projectId: this.projectId } + Object.keys(postDate).forEach(res => { + if (postDate[res] && postDate[res] instanceof Array) { + postDate[res] = postDate[res].join(',') + } + }) if (this.formData.id) { //编辑 postDate = { @@ -377,8 +467,16 @@ } .drawer-bootom-button { - display: flex; - justify-content: flex-end; + position: absolute; + bottom: 0; + width: 100%; + border-top: 1px solid #e8e8e8; + padding: 10px 16px; + text-align: right; + left: 0; + z-index: 100; + background: #fff; + border-radius: 0 0 2px 2px; } .Required { @@ -393,7 +491,7 @@ } .title-text { - width: 85px; + width: 84px; text-align: right; display: inline-block; font-weight: 500; @@ -413,10 +511,10 @@ } .itemModel { - width: calc(100% - 101px); + width: calc(100% - 100px); display: inline-block; margin-top: 2px; - height: 40px; + /*height: 40px;*/ margin-bottom: 24px; } @@ -473,6 +571,15 @@ .box-button { height: 38px; } + + .itemOption { + display: inline-block; + width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; + } \ No newline at end of file diff --git a/jero-web/src/views/projectManagement/projectLibrary/components/changeExtensionModel.vue b/jero-web/src/views/projectManagement/projectLibrary/components/changeExtensionModel.vue new file mode 100644 index 000000000..9d8801182 --- /dev/null +++ b/jero-web/src/views/projectManagement/projectLibrary/components/changeExtensionModel.vue @@ -0,0 +1,278 @@ + + + + + + + \ No newline at end of file diff --git a/jero-web/src/views/projectManagement/projectLibrary/index.vue b/jero-web/src/views/projectManagement/projectLibrary/index.vue index 76b8eb34e..2d1d6d2e8 100644 --- a/jero-web/src/views/projectManagement/projectLibrary/index.vue +++ b/jero-web/src/views/projectManagement/projectLibrary/index.vue @@ -125,10 +125,18 @@ :columns="columns" > - {{text}} + {{text}} + + {{record.flag == '1'?$t('cancelTopping'):$t('Topping')}} + + + {{$t('addSubproject')}} +
+ + + \ No newline at end of file diff --git a/jero-web/src/views/toDoCenter/projectRegulationTasks/components/SentList.vue b/jero-web/src/views/toDoCenter/projectRegulationTasks/components/SentList.vue new file mode 100644 index 000000000..a282c6bd0 --- /dev/null +++ b/jero-web/src/views/toDoCenter/projectRegulationTasks/components/SentList.vue @@ -0,0 +1,354 @@ + + + + + \ No newline at end of file diff --git a/jero-web/src/views/toDoCenter/projectRegulationTasks/components/dealtWith.vue b/jero-web/src/views/toDoCenter/projectRegulationTasks/components/dealtWith.vue new file mode 100644 index 000000000..118d34cae --- /dev/null +++ b/jero-web/src/views/toDoCenter/projectRegulationTasks/components/dealtWith.vue @@ -0,0 +1,338 @@ + + + + + \ No newline at end of file diff --git a/jero-web/src/views/toDoCenter/projectRegulationTasks/components/doneList.vue b/jero-web/src/views/toDoCenter/projectRegulationTasks/components/doneList.vue new file mode 100644 index 000000000..ec3a33458 --- /dev/null +++ b/jero-web/src/views/toDoCenter/projectRegulationTasks/components/doneList.vue @@ -0,0 +1,355 @@ + + + + + \ No newline at end of file diff --git a/jero-web/src/views/toDoCenter/projectRegulationTasks/index.vue b/jero-web/src/views/toDoCenter/projectRegulationTasks/index.vue new file mode 100644 index 000000000..bd405bd48 --- /dev/null +++ b/jero-web/src/views/toDoCenter/projectRegulationTasks/index.vue @@ -0,0 +1,259 @@ + + + + + \ No newline at end of file diff --git a/jero-web/src/views/toDoCenter/regulatoryAssessmentTasks/components/SentList.vue b/jero-web/src/views/toDoCenter/regulatoryAssessmentTasks/components/SentList.vue new file mode 100644 index 000000000..03459bc80 --- /dev/null +++ b/jero-web/src/views/toDoCenter/regulatoryAssessmentTasks/components/SentList.vue @@ -0,0 +1,231 @@ + + + + + \ No newline at end of file diff --git a/jero-web/src/views/toDoCenter/regulatoryAssessmentTasks/components/dealtWith.vue b/jero-web/src/views/toDoCenter/regulatoryAssessmentTasks/components/dealtWith.vue new file mode 100644 index 000000000..f37f9d6b6 --- /dev/null +++ b/jero-web/src/views/toDoCenter/regulatoryAssessmentTasks/components/dealtWith.vue @@ -0,0 +1,214 @@ + + + + + \ No newline at end of file diff --git a/jero-web/src/views/toDoCenter/regulatoryAssessmentTasks/components/doneList.vue b/jero-web/src/views/toDoCenter/regulatoryAssessmentTasks/components/doneList.vue new file mode 100644 index 000000000..febfb2bf7 --- /dev/null +++ b/jero-web/src/views/toDoCenter/regulatoryAssessmentTasks/components/doneList.vue @@ -0,0 +1,231 @@ + + + + + \ No newline at end of file diff --git a/jero-web/src/views/toDoCenter/regulatoryAssessmentTasks/index.vue b/jero-web/src/views/toDoCenter/regulatoryAssessmentTasks/index.vue new file mode 100644 index 000000000..7849db357 --- /dev/null +++ b/jero-web/src/views/toDoCenter/regulatoryAssessmentTasks/index.vue @@ -0,0 +1,174 @@ + + + + + \ No newline at end of file diff --git a/jero-web/src/views/toDoCenter/taskConfirmation/components/batchProcessing.vue b/jero-web/src/views/toDoCenter/taskConfirmation/components/batchProcessing.vue new file mode 100644 index 000000000..ec5e2708f --- /dev/null +++ b/jero-web/src/views/toDoCenter/taskConfirmation/components/batchProcessing.vue @@ -0,0 +1,266 @@ + + + + + \ No newline at end of file diff --git a/jero-web/src/views/toDoCenter/taskConfirmation/index.vue b/jero-web/src/views/toDoCenter/taskConfirmation/index.vue new file mode 100644 index 000000000..254cb1a9e --- /dev/null +++ b/jero-web/src/views/toDoCenter/taskConfirmation/index.vue @@ -0,0 +1,354 @@ + + + + + \ No newline at end of file