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 2f92b685e..4f5a85094 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,10 +6,11 @@ package com.jero.common.constant.enums; * @auth zhn */ public enum MessageTypeEnum { - READ("订阅通知","1"), - WARN("预警信息","2"), - PUSH("转发推送","3"), - COLLECT("认证消息","4"); + READ("Subscription Notification","1"), + WARN("Early Warning","2"), + PUSH("Share / Forward","3"), + HOMO_TASK("Homo Parameter Task","4"), + TASK("Regulation Compliance Task", "5"); String name; String value; diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java index 5a711c8d3..b8157a18c 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java @@ -486,53 +486,58 @@ public class QueryGenerator { } name = oConvertUtils.camelToUnderline(name); log.info("--查询规则-->"+name+" "+rule.getValue()+" "+value); - switch (rule) { - case GT: - queryWrapper.gt(name, value); - break; - case GE: - queryWrapper.ge(name, value); - break; - case LT: - queryWrapper.lt(name, value); - break; - case LE: - queryWrapper.le(name, value); - break; - case EQ: - case EQ_WITH_ADD: - queryWrapper.eq(name, value); - break; - case NE: - queryWrapper.ne(name, value); - break; - case IN: - if(value instanceof String) { - queryWrapper.in(name, (Object[])value.toString().split(",")); - }else if(value instanceof String[]) { - queryWrapper.in(name, (Object[]) value); + if(" is null ".equals(value)){ + queryWrapper.isNull(name); + }else{ + switch (rule) { + case GT: + queryWrapper.gt(name, value); + break; + case GE: + queryWrapper.ge(name, value); + break; + case LT: + queryWrapper.lt(name, value); + break; + case LE: + queryWrapper.le(name, value); + break; + case EQ: + case EQ_WITH_ADD: + queryWrapper.eq(name, value); + break; + case NE: + queryWrapper.ne(name, value); + break; + case IN: + if(value instanceof String) { + queryWrapper.in(name, (Object[])value.toString().split(",")); + }else if(value instanceof String[]) { + queryWrapper.in(name, (Object[]) value); + } + //update-begin-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671 + else if(value.getClass().isArray()) { + queryWrapper.in(name, (Object[])value); + }else { + queryWrapper.in(name, value); + } + //update-end-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671 + break; + case LIKE: + queryWrapper.like(name, value); + break; + case LEFT_LIKE: + queryWrapper.likeLeft(name, value); + break; + case RIGHT_LIKE: + queryWrapper.likeRight(name, value); + break; + default: + log.info("--查询规则未匹配到---"); + break; } - //update-begin-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671 - else if(value.getClass().isArray()) { - queryWrapper.in(name, (Object[])value); - }else { - queryWrapper.in(name, value); - } - //update-end-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671 - break; - case LIKE: - queryWrapper.like(name, value); - break; - case LEFT_LIKE: - queryWrapper.likeLeft(name, value); - break; - case RIGHT_LIKE: - queryWrapper.likeRight(name, value); - break; - default: - log.info("--查询规则未匹配到---"); - break; } + } /** * diff --git a/jero-boot/jero-boot-module-certification/src/main/java/com/jero/modules/cert/collect/service/impl/ParamsCollectManifestEOServiceImpl.java b/jero-boot/jero-boot-module-certification/src/main/java/com/jero/modules/cert/collect/service/impl/ParamsCollectManifestEOServiceImpl.java index af78bfab8..03cd16f4f 100644 --- a/jero-boot/jero-boot-module-certification/src/main/java/com/jero/modules/cert/collect/service/impl/ParamsCollectManifestEOServiceImpl.java +++ b/jero-boot/jero-boot-module-certification/src/main/java/com/jero/modules/cert/collect/service/impl/ParamsCollectManifestEOServiceImpl.java @@ -1061,7 +1061,7 @@ public class ParamsCollectManifestEOServiceImpl extends ServiceImpl headerMap = new HashMap<>(); + headerMap.put("Authorization", "Bearer " + token); + headerMap.put("Content-Type", "application/json; charset=utf-8"); + + // 示例 + StringBuilder contentSb = new StringBuilder(); + contentSb.append("{"); + contentSb.append("\"elements\": ["); + // 补充内容 + if (StrUtil.isNotEmpty(feishuMsgVo.getContent())){ + contentSb.append("{"); + contentSb.append("\"tag\": \"div\","); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"" + feishuMsgVo.getContent() + "\","); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + }; + // 补充tasktype、project、Initiator等的外层 + contentSb.append("{"); + contentSb.append("\"fields\": ["); + contentSb.append("{"); + contentSb.append("\"is_short\": false,"); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"**Task Type:** " + feishuMsgVo.getTaskType() + "\","); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("}"); + + if (StrUtil.isNotEmpty(feishuMsgVo.getRegulationNo())){ + contentSb.append(","); + contentSb.append("{"); + contentSb.append("\"is_short\": false,"); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"**Regulation No:** " + feishuMsgVo.getRegulationNo() + "\","); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("}"); + } + if (StrUtil.isNotEmpty(feishuMsgVo.getProject())){ + contentSb.append(","); + contentSb.append("{"); + contentSb.append("\"is_short\": false,"); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"**Project:** " + feishuMsgVo.getProject() + "\","); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("}"); + } + if (StrUtil.isNotEmpty(feishuMsgVo.getInitiator())){ + contentSb.append(","); + contentSb.append("{"); + contentSb.append("\"is_short\": false,"); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"**Initiator:** " + feishuMsgVo.getInitiator() + "\","); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("}"); + } + if (StrUtil.isNotEmpty(feishuMsgVo.getDueDate())){ + contentSb.append(","); + contentSb.append("{"); + contentSb.append("\"is_short\": false,"); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"**Due Date:** " + feishuMsgVo.getDueDate() + "\","); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("}"); + } + contentSb.append("],"); + contentSb.append("\"tag\": \"div\""); + contentSb.append("},"); + contentSb.append("{\"tag\": \"hr\"},"); + contentSb.append("{"); + contentSb.append("\"actions\": ["); + contentSb.append("{"); + contentSb.append("\"tag\": \"button\","); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"view\","); + contentSb.append("\"tag\": \"plain_text\""); + contentSb.append("},"); + contentSb.append("\"type\": \"primary\","); + contentSb.append("\"url\": \" "+ feishuMsgVo.getUrl() +" \""); + contentSb.append("}"); + contentSb.append("],"); + contentSb.append("\"tag\": \"action\""); + contentSb.append("}"); + contentSb.append("],"); + contentSb.append("\"header\": {"); + contentSb.append("\"template\": \"green\","); + contentSb.append("\"title\": {"); + contentSb.append("\"content\": \" " + feishuMsgVo.getTitle() + " \","); + contentSb.append("\"tag\": \"plain_text\""); + contentSb.append("}"); + contentSb.append("}"); + contentSb.append("}"); + + JSONObject jsonObject = JSONObject.parseObject(contentSb.toString()); + + // 设置请求参数 + JSONObject paramsMap = new JSONObject(); + paramsMap.put("user_ids", userIds); + paramsMap.put("msg_type", "interactive"); + paramsMap.put("card", jsonObject); + + // 发送请求给飞书 + String response = HttpRequestUtil.getResponseOfPOST(batchSendMessageUrl, headerMap, paramsMap.toJSONString()); + // 获取返回结果 + JSONObject tokenJson = JSONObject.parseObject(response); + if(!tokenJson.get("code").toString().equals("0")) { + log.error("请求出现异常:" + tokenJson.get("msg") + " " + tokenJson); + } + return tokenJson.get("msg").toString(); + } + } 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 new file mode 100644 index 000000000..631a32d97 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/vo/FeishuMsgVo.java @@ -0,0 +1,28 @@ +package com.jero.modules.feishu.vo; + +import lombok.Data; + +/** + * 飞书消息的VO + */ +@Data +public class FeishuMsgVo { + + private String title; //标题 + + private String content; //内容 + + private String taskType; //任务类型 + + private String regulationNo; //法规编号 + + private String project; //项目名称 + + private String initiator; //发起人 + + private String dueDate; //截止时间 + + private String url; //回调的网址 + +} + 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 85bfb5c44..edf6d31e5 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,6 +1,8 @@ package com.jero.modules.project.job; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.constant.enums.MessageTypeEnum; +import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.project.entity.ProjectLawsInventoryEO; import com.jero.modules.project.entity.ProjectLibraryBase; import com.jero.modules.project.entity.ProjectNameInfoEO; @@ -140,6 +142,11 @@ public class InventoryAffirmJob implements Job { + projectLibraryBase.getTargetMarket() + " are 3 days. Please check and handle it in time."; + FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + feishuMsgVo.setContent("Hello! The remaining processing time for the task are 3 days. Please check and address it in a timely manner."); + feishuMsgVo.setTaskType("Regulation List Confirmation"); + feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + //飞书跳转链接 String hrefFeishu = backUrl + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() @@ -159,17 +166,22 @@ public class InventoryAffirmJob implements Job { sendMessageMap.put("contentInfo",contentInfo); //发送消息 - projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLibraryBase.getId(),sendMessageMap); + projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLibraryBase.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK); } if(CollectionUtils.isNotEmpty(currentDaysUserIdList)){ currentDaysUserIdList = currentDaysUserIdList.stream().distinct().collect(Collectors.toList()); /*String msgContentCN = "您" + projectLibraryBase.getProjectName() + "(项目名称)法规清单的任务今天即将结束,请及时查看处理*/ - String msgContentEN = "The the regulation list confirmation for " - + projectNameInfoEO.getProjectName() + String msgContentEN = "The regulation list confirmation for " + + projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + " will expire today. Please check and address it in a timely manner."; + FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + feishuMsgVo.setContent("Hello! The task will expire today. Please check and address it in a timely manner."); + feishuMsgVo.setTaskType("Regulation List Confirmation"); + feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + //飞书跳转链接 String hrefFeishu = backUrl + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() @@ -188,7 +200,7 @@ public class InventoryAffirmJob implements Job { sendMessageMap.put("hrefFeishu",hrefFeishu); sendMessageMap.put("contentInfo",contentInfo); //发送消息 - projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLibraryBase.getId(),sendMessageMap); + projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLibraryBase.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK); } } } 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 3213c8c63..cc7e96613 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,9 +1,12 @@ package com.jero.modules.project.job; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.constant.enums.MessageTypeEnum; +import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.project.entity.*; import com.jero.modules.project.enums.DesignComplianceStatusEnum; import com.jero.modules.project.enums.JumpLinkEnum; +import com.jero.modules.project.enums.MsgTypeEnum; import com.jero.modules.project.enums.SendMsgFlagEnum; import com.jero.modules.project.mapper.ProjectLawsInventoryEOMapper; import com.jero.modules.project.mapper.ProjectLibraryBaseMapper; @@ -142,6 +145,12 @@ public class PrehomoJob implements Job { + projectLibraryBase.getTargetMarket() + " are 3 days. Please check and handle it in time."; + FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + feishuMsgVo.setContent("Hello! The remaining processing time for the task are 3 days. Please check and address it in a timely manner."); + feishuMsgVo.setTaskType("Pre-Homo Confirmation"); + feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber()); + feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + //飞书跳转链接 String hrefFeishu = backUrl + JumpLinkEnum.PREHOMO_AFFIRM_LINK.getLink() @@ -161,7 +170,7 @@ public class PrehomoJob implements Job { sendMessageMap.put("contentInfo",contentInfo); //发送消息 - projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap); + projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK); } if(CollectionUtils.isNotEmpty(currentDaysUserIdList)){ @@ -170,9 +179,15 @@ public class PrehomoJob implements Job { //您XXX(项目名称)中GB 7258的Pre-Homo确认任务今天即将结束,请及时查看处理 //The the Pre-Homo confirmation of GB 7258 in XXX (project name) is coming to an end today. Please check and deal with it in time String msgContentEN = "The the Pre-Homo confirmation of " - + projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName() + + projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + " will expire today. Please check and address it in time."; + FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + feishuMsgVo.setContent("Hello! The task will expire today. Please check and address it in a timely manner."); + feishuMsgVo.setTaskType("Pre-Homo Confirmation"); + feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber()); + feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + //飞书跳转链接 String hrefFeishu = backUrl + JumpLinkEnum.PREHOMO_AFFIRM_LINK.getLink() @@ -192,7 +207,7 @@ public class PrehomoJob implements Job { sendMessageMap.put("contentInfo",contentInfo); //发送消息 - projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap); + projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK); } } } 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 34ce80fe3..12eaf2479 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,6 +1,8 @@ package com.jero.modules.project.job; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.constant.enums.MessageTypeEnum; +import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.project.entity.*; import com.jero.modules.project.enums.DesignComplianceStatusEnum; import com.jero.modules.project.enums.JumpLinkEnum; @@ -140,6 +142,12 @@ public class VerifyComplianceJob implements Job { + projectLibraryBase.getTargetMarket() + " are 3 days. Please check and handle it in time."; + FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + feishuMsgVo.setContent("Hello! The remaining processing time for the task are 3 days. Please check and address it in a timely manner."); + feishuMsgVo.setTaskType("Validation Compliance Confirmation"); + feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber()); + //飞书跳转链接 String hrefFeishu = backUrl + JumpLinkEnum.VERIFY_AFFIRM_LINK.getLink() @@ -159,7 +167,7 @@ public class VerifyComplianceJob implements Job { sendMessageMap.put("contentInfo",contentInfo); //发送消息 - projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap); + projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK); } if(CollectionUtils.isNotEmpty(currentDaysUserIdList)){ @@ -168,9 +176,15 @@ public class VerifyComplianceJob implements Job { //您XXX(项目名称)中GB 7258的验证符合性确认任务今天即将结束,请及时查看处理 //The the Verify compliance confirmation of GB 7258 in XXX (project name) is coming to an end today. Please check and deal with it in time String msgContentEN = "The the validation compliance confirmation of " - + projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName() + + projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + " will expire today. Please check and address it in time."; + FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + feishuMsgVo.setContent("Hello! The task will expire today. Please check and address it in a timely manner."); + feishuMsgVo.setTaskType("Validation Compliance Confirmation"); + feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber()); + feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + //飞书跳转链接 String hrefFeishu = backUrl + JumpLinkEnum.VERIFY_AFFIRM_LINK.getLink() @@ -190,7 +204,7 @@ public class VerifyComplianceJob implements Job { sendMessageMap.put("contentInfo",contentInfo); //发送消息 - projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap); + projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK); } } } 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 c294751d6..caf689b71 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,6 +1,8 @@ package com.jero.modules.project.job; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.constant.enums.MessageTypeEnum; +import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.project.entity.*; import com.jero.modules.project.enums.DesignComplianceStatusEnum; import com.jero.modules.project.enums.JumpLinkEnum; @@ -141,6 +143,12 @@ public class designComplianceJob implements Job { + projectLibraryBase.getTargetMarket() + " are 3 days. Please check and address it in a timely manner."; + FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + feishuMsgVo.setContent("Hello! The remaining processing time for the task are 3 days. Please check and address it in a timely manner."); + feishuMsgVo.setTaskType("Design Compliance Confirmation"); + feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber()); + //飞书跳转链接 String hrefFeishu = backUrl + JumpLinkEnum.DESIGN_AFFIRM_LINK.getLink() @@ -160,17 +168,23 @@ public class designComplianceJob implements Job { sendMessageMap.put("contentInfo",contentInfo); //发送消息 - projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap); + projectLawsInventoryEOService.sendMessage(msgContentEN,threeDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK); } if(CollectionUtils.isNotEmpty(currentDaysUserIdList)){ currentDaysUserIdList = currentDaysUserIdList.stream().distinct().collect(Collectors.toList()); //您XXX(项目名称)中GB 7258的设计符合性确认任务今天即将结束,请及时查看处理 - String msgContentEN = "The the design compliance confirmation for " + String msgContentEN = "The design compliance confirmation of " + projectLawsInventoryEO.getSerialNumber() + " in " + projectNameInfoEO.getProjectName() + " will expire today. Please check and address it in time."; + FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + feishuMsgVo.setContent("Hello! The task will expire today. Please check and address it in a timely manner."); + feishuMsgVo.setTaskType("Design Compliance Confirmation"); + feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber()); + //飞书跳转链接 String hrefFeishu = backUrl + JumpLinkEnum.DESIGN_AFFIRM_LINK.getLink() @@ -190,7 +204,7 @@ public class designComplianceJob implements Job { sendMessageMap.put("contentInfo",contentInfo); //发送消息 - projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap); + projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLawsInventoryEO.getId(),sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK); } } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectLawsInventoryEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectLawsInventoryEOService.java index b4434de43..61e4e02af 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectLawsInventoryEOService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectLawsInventoryEOService.java @@ -4,7 +4,9 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; import com.itextpdf.text.DocumentException; import com.jero.common.api.vo.Result; +import com.jero.common.constant.enums.MessageTypeEnum; import com.jero.common.system.vo.LoginUser; +import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.project.entity.ProjectLawsInventoryEO; import com.jero.modules.system.entity.SysRole; import org.springframework.web.multipart.MultipartFile; @@ -76,7 +78,7 @@ public interface IProjectLawsInventoryEOService extends IService updateStatusBatch(JSONObject json); - void sendMessage(String msgContent, List userIdList,String projectLibraryId,Map params); + void sendMessage(String msgContent, List userIdList, String projectLibraryId, Map params, FeishuMsgVo feishuMsgVo, MessageTypeEnum messageType); /** * 匹配相关人员 diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectLawsInventoryEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectLawsInventoryEOServiceImpl.java index 1b871abc1..7afe0b528 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectLawsInventoryEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectLawsInventoryEOServiceImpl.java @@ -35,6 +35,7 @@ import com.jero.modules.dummy.service.impl.DummyInventoryBaseEOServiceImpl; import com.jero.modules.dummy.util.DeepCopyListUtil; import com.jero.modules.dummy.util.ListDiff; import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.message.websocket.WebSocket; import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; @@ -1262,9 +1263,18 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl userIdList,String projectLibraryId,Map sendMessageMap){ + public void sendMessage(String msgContent, List userIdList,String projectLibraryId,Map sendMessageMap, FeishuMsgVo feishuMsgVo, MessageTypeEnum messageType){ String idTemp = projectLibraryId; List sysUsers = sysUserService.listByIds(userIdList); @@ -1405,7 +1415,7 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl projectYearInfoEOQueryWrapper = new QueryWrapper<>(); + projectYearInfoEOQueryWrapper.lambda().eq(ProjectYearNameInfoEO::getId,projectLibraryBase.getYearNameId()); + ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper); + SysUser sysUser = sysUserMapper.selectOne(new QueryWrapper().lambda().eq(SysUser::getId, currentUserId)); String msgContentEN = ""; List userIdList = new ArrayList<>(); + FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_START_MSG.getValue())) { userIdList.add(engineeringInterfacePerson); msgContentEN = sysUser.getUsername() + " assigned the regulation task confirmation of " + projectNameInfoEO.getProjectName() + ".The due date is:" +taskAffirmDueDate+ " Please check and address it in a timely manner."; + + feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has assigned the task to you. Please check and and handle it in time."); + } else if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_ISSUE_DRE_MSG.getValue())) { String dreUserId = jsonObject.getString("dreUserId"); //dre用户id userIdList.add(dreUserId); msgContentEN = sysUser.getUsername() + " has rejected the regulation task confirmation of " + serialNumber + " in "+ projectNameInfoEO.getProjectName() + ".to you. the due date is " +taskAffirmDueDate+ " Please check and handle it in time."; + + feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has rejected the task. Please check and and handle it in time."); + } else if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_DRE_REJECTED.getValue())) { userIdList.add(engineeringInterfacePerson); msgContentEN = sysUser.getUsername() + " has returned the regulation task confirmation of " + serialNumber +" in "+ projectNameInfoEO.getProjectName() + ".The due date is " +taskAffirmDueDate+ " Please check and handle it in time."; + + feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has returned the task. Please check and and handle it in time."); + } else if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_DRE_ACCEPTED.getValue())) { userIdList.add(engineeringInterfacePerson); msgContentEN = sysUser.getUsername() + " has submitted the regulation task confirmation of " + serialNumber +" in "+ projectNameInfoEO.getProjectName() + ".The due date is " +taskAffirmDueDate+ " Please check and handle it in time."; + + feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has submitted the task. Please check and and handle it in time."); + } if(CollectionUtils.isNotEmpty(userIdList) && StringUtils.isNotEmpty(msgContentEN)){ + feishuMsgVo.setTaskType("Regulation Task Confirmation"); + feishuMsgVo.setRegulationNo(serialNumber); + feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + feishuMsgVo.setInitiator(sysUser.getUsername()); + feishuMsgVo.setDueDate(taskAffirmDueDate); + //飞书跳转链接 String hrefFeishu = backUrl + JumpLinkEnum.TASK_AFFIRM_LINK.getLink(); //系统内部跳转链接 @@ -1803,7 +1844,7 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl projectYearInfoEOQueryWrapper = new QueryWrapper<>(); + projectYearInfoEOQueryWrapper.lambda().eq(ProjectYearNameInfoEO::getId,projectLibraryBase.getYearNameId()); + ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper); + //消息内容 String msgContentEN = "Please address the regulation task confirmation process for "+ projectNameInfoEO.getProjectName() +" ASAP. "; + FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + feishuMsgVo.setContent("Hello! Please address the task ASAP. "); + feishuMsgVo.setTaskType("Regulation List Confirmation"); + feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + //飞书跳转链接 String hrefFeishu = backUrl + JumpLinkEnum.TASK_AFFIRM_LINK.getLink(); //系统内部跳转链接 @@ -6046,7 +6101,7 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl dictItemList = sysDictItemServiceImpl.selectItemsByDictCode("region"); for (ProjectLibraryBase libraryBase : projectLibraryBaseList) { + targetMarket(projectLibraryBase, dictItemList, libraryBase); Map mapList = new HashMap<>(); List> collect = new ArrayList<>(); if(ObjectUtils.isNotEmpty(startTime) && ObjectUtils.isNotEmpty(endTime)){ @@ -124,7 +125,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService if(collect.size() != 0){ index ++; mapList.put("index",index); - mapList.put("projectName",libraryBase.getProjectName()); + mapList.put("projectName",libraryBase.getProjectName()+" "+libraryBase.getYearName()+"-"+libraryBase.getTargetMarket()); mapList.put("data",collect); result.add(mapList); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectTaskInventoryDetailEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectTaskInventoryDetailEOServiceImpl.java index fae17e73f..be2581e13 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectTaskInventoryDetailEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectTaskInventoryDetailEOServiceImpl.java @@ -5,7 +5,9 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.common.api.vo.Result; +import com.jero.common.constant.enums.MessageTypeEnum; import com.jero.common.system.vo.LoginUser; +import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.project.entity.*; import com.jero.modules.project.enums.JumpLinkEnum; import com.jero.modules.project.enums.MsgTypeEnum; @@ -260,22 +262,44 @@ public class ProjectTaskInventoryDetailEOServiceImpl extends ServiceImpl().success("提醒办理成功!"); } @@ -622,10 +645,17 @@ public class ProjectTaskInventoryEOServiceImpl extends ServiceImpl userIdList, String projectLibraryId, Map sendMessageMap) { + public static void sendMessage(String msgContent, List userIdList, String projectLibraryId, Map sendMessageMap, FeishuMsgVo feishuMsgVo, MessageTypeEnum messageType) { String idTemp = projectLibraryId; List sysUsers = sysUserService.listByIds(userIdList); @@ -74,7 +75,14 @@ public class SendMessageUtils { //飞书消息 try { - iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), msgContent, MessageTypeEnum.PUSH.getName(), hrefFeishu); + if (feishuMsgVo != null){ + // 补充飞书跳转链接 + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setTitle(messageType.getName()); + iFeishuService.sendCardMsg(thirdIdList.toArray(new String[]{}), feishuMsgVo); + } else { + iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), msgContent, messageType.getName(), hrefFeishu); + } } catch (IOException e) { logger.error("飞书消息推送失败"); } diff --git a/jero-web/src/common/lang/en-us.js b/jero-web/src/common/lang/en-us.js index c2ca4fa7a..0e901fa6d 100644 --- a/jero-web/src/common/lang/en-us.js +++ b/jero-web/src/common/lang/en-us.js @@ -404,9 +404,9 @@ module.exports = { NodeQuickLookup: 'Node quick lookup', AreAllLabelsRead: 'Are all labels read', AllLabelsRead: 'Labels Read', - SubscriptionNotification: 'Subscription notification', - warningInformation: 'Warning Information', - ForwardPush: 'Forward push', + SubscriptionNotification: 'Subscription Notification', + warningInformation: 'Early Warning', + ForwardPush: 'Share / Forward', PleaseSelectData: 'Please select data first', MessageContent: 'Message Content', MessageType: 'Message Type', @@ -856,7 +856,8 @@ module.exports = { yellowSchedule: 'Yellow: non conformance / to be tracked, with acceptable scheme and schedule', greenRequirements: 'Green: confirm that it meets or meets the current requirements', blueUndeterminedState: 'Blue: undetermined state', - authenticationMessage: 'Authentication Message', + authenticationMessage: 'Homo Parameter Task', + taskRegulationComplianceTask: 'Regulation Compliance Task', accept: 'Accept', notLaunch: 'Not start', refuse: 'Reject', diff --git a/jero-web/src/common/lang/zh-cn.js b/jero-web/src/common/lang/zh-cn.js index 93aa4ba6f..a0b80bb3f 100644 --- a/jero-web/src/common/lang/zh-cn.js +++ b/jero-web/src/common/lang/zh-cn.js @@ -864,7 +864,8 @@ module.exports = { yellowSchedule: '黄:不符合/待追踪,有可接受的方案和时间表', greenRequirements: '绿:确认符合或满足当前要求', blueUndeterminedState: '蓝:未判断状态', - authenticationMessage: '认证消息', + authenticationMessage: '参数收集', + taskRegulationComplianceTask: '法规符合性任务', accept: '接受', refuse: '拒绝', taskTermination: '任务终止', diff --git a/jero-web/src/components/globalAdvancedQuery/index.vue b/jero-web/src/components/globalAdvancedQuery/index.vue index d7058e9d1..45dbc9e1b 100644 --- a/jero-web/src/components/globalAdvancedQuery/index.vue +++ b/jero-web/src/components/globalAdvancedQuery/index.vue @@ -387,7 +387,7 @@ return str }, handleOk() { - if (!this.isNullArray(this.queryParamsModel)) { + // if (!this.isNullArray(this.queryParamsModel)) { let event = { matchType: this.matchType, params: this.removeEmptyObject(this.queryParamsModel) @@ -397,9 +397,9 @@ this.visible = false } this.emitCallback(event) - } else { - this.$message.warn(this.$t('CannotQueryEmpty')) - } + // } else { + // this.$message.warn(this.$t('CannotQueryEmpty')) + // } }, emitCallback(event = {}) { let { params = [], matchType = this.matchType } = event @@ -408,6 +408,9 @@ if (Array.isArray(param.val)) { param.val = param.val.join(',') } + if (param.type == "Personnel" && !param.val){ + param.val = ' is null ' + } } console.debug('---高级查询参数--->', { params, matchType }) this.$emit(this.callback, params, matchType) @@ -614,7 +617,6 @@ item.val = values[item.popup['destFields']] }, PersonnelSelectionChange(value, id,index){ - console.log(index) this.queryParamsModel[index].val = id this.queryParamsModel[index].valueId = id console.log(this.queryParamsModel) diff --git a/jero-web/src/components/uploadFile/file.vue b/jero-web/src/components/uploadFile/file.vue index cf346c6fd..c2ea1df03 100644 --- a/jero-web/src/components/uploadFile/file.vue +++ b/jero-web/src/components/uploadFile/file.vue @@ -30,6 +30,7 @@ import { ACCESS_TOKEN } from '@/store/mutation-types' import { getAction, postAction, downFile, downloadFile } from '@/api/manage' import { Base64 } from 'js-base64' + import { mapGetters } from 'vuex' export default { name: 'file', @@ -65,6 +66,7 @@ // console.log(this.thisFileType,this.thisFileSize,this.thisFileUploadUrl); }, methods: { + ...mapGetters(['userInfo']), perentHandleFunc(data) { this.myfileList = data if (data && data.length > 0) { @@ -182,7 +184,7 @@ let index2 = fileName.length let fileSuffix = fileName.substring(index1, index2) if (fileSuffix === '.pdf') { - window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id)) + window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id+'&userName='+this.userInfo().username)) } else if (fileSuffix === '.docx') { let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix) window.open(url, '_blank') diff --git a/jero-web/src/components/uploadFileChange/file.vue b/jero-web/src/components/uploadFileChange/file.vue index 58e6ef07f..1a29bf328 100644 --- a/jero-web/src/components/uploadFileChange/file.vue +++ b/jero-web/src/components/uploadFileChange/file.vue @@ -30,6 +30,7 @@ import Vue from 'vue' import { ACCESS_TOKEN } from '@/store/mutation-types' import { getAction, postAction, downFile, downloadFile } from '@/api/manage' import { Base64 } from 'js-base64' +import { mapGetters } from 'vuex' export default { name: 'file', @@ -66,6 +67,7 @@ export default { // console.log(this.thisFileType,this.thisFileSize,this.thisFileUploadUrl); }, methods: { + ...mapGetters(['userInfo']), perentHandleFunc(data) { this.myfileList = data if (data && data.length > 0) { @@ -187,7 +189,7 @@ export default { let index2 = fileName.length let fileSuffix = fileName.substring(index1, index2) if (fileSuffix === '.pdf') { - window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id)) + window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id+'&userName='+this.userInfo().username)) } else if (fileSuffix === '.docx') { let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix) window.open(url, '_blank') diff --git a/jero-web/src/components/uploadFileChangeDown/file.vue b/jero-web/src/components/uploadFileChangeDown/file.vue index 5a930d60f..17e836819 100644 --- a/jero-web/src/components/uploadFileChangeDown/file.vue +++ b/jero-web/src/components/uploadFileChangeDown/file.vue @@ -38,6 +38,7 @@ import Vue from 'vue' import { ACCESS_TOKEN } from '@/store/mutation-types' import { getAction, postAction, downFile, downloadFile } from '@/api/manage' import { Base64 } from 'js-base64' +import { mapGetters } from 'vuex' export default { name: 'file', @@ -87,6 +88,7 @@ export default { // console.log(this.thisFileType,this.thisFileSize,this.thisFileUploadUrl); }, methods: { + ...mapGetters(['userInfo']), download() { downloadFile('/sys/common/downLoadFile', this.template.templateName, { id: this.template.templateId }) }, @@ -209,7 +211,7 @@ export default { let index2 = fileName.length let fileSuffix = fileName.substring(index1, index2) if (fileSuffix === '.pdf') { - window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id)) + window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id+'&userName='+this.userInfo().username)) } else if (fileSuffix === '.docx') { let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix) window.open(url, '_blank') diff --git a/jero-web/src/components/viewFileModel/index.vue b/jero-web/src/components/viewFileModel/index.vue index 7fd43152b..945838eee 100644 --- a/jero-web/src/components/viewFileModel/index.vue +++ b/jero-web/src/components/viewFileModel/index.vue @@ -36,6 +36,7 @@