Explorar o código

feature 过滤收件箱为空的数据

xiahan hai 10 meses
pai
achega
972133678c

+ 8 - 0
bs-common/src/main/java/com/rongwei/safecommon/utils/CXCommonUtils.java

@@ -14,6 +14,7 @@ import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.utils.SecurityUtil;
 import com.rongwei.rwcommon.utils.StringUtils;
 import com.rongwei.rwcommon.vo.CriteriaQuery;
+import com.rongwei.rwcommon.vo.MailDo;
 import com.rongwei.rwcommon.vo.generalsql.BatchSaveVo;
 import com.rongwei.rwcommon.vo.generalsql.GeneralInsertVo;
 import com.rongwei.rwcommonentity.commonservers.vo.SysNotifyAnnounceVo;
@@ -74,6 +75,13 @@ public class CXCommonUtils {
         sysSerialNumberService = autoSysSerialNumberService;
     }
 
+    /**
+     * 发送邮件
+     * @param mailDo
+     */
+    public static void sendHtmlMail(MailDo mailDo){
+        commonFeginClient.sendHtmlMail(mailDo);
+    }
 
     /**
      * 发送消息提醒

+ 24 - 1
bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java

@@ -369,6 +369,14 @@ public class SaveConstans {
          * 特种设备提醒
          */
         public static final String SPECIALEQUIPMENT_TITLE = "特种设备提醒";
+        /**
+         * 特种催办提醒
+         */
+        public static final String SPECIALEQUIPMENT_URGING_TITLE = "特种设备年检--催办提醒";
+        /**
+         * 安全附件催办提醒
+         */
+        public static final String SAFETY_ATTACHMENT_VERIFICATION_URGING_TITLE = "安全附件检验提醒";
         /**
          * 报工不合格提醒
          */
@@ -385,6 +393,10 @@ public class SaveConstans {
          * 特种设备作业人员证书提醒
          */
         public static final String PERSONNEL_CERTIFICATES_TITLE = "特种设备人员证书年检提醒";
+        /**
+         * 特种设备作业人员证书提醒
+         */
+        public static final String PERSONNEL_CERTIFICATES_URGING_TITLE = "特种设备人员证书--催办提醒";
         /**
          * 设备年检
          */
@@ -392,6 +404,14 @@ public class SaveConstans {
     }
 
     public static class NotifyContent {
+        /**
+         * 特种设备催办提醒
+         */
+        public static final String SPECIAL_EQUIPMENT_URGING_CONTENT ="【设备年检--催办提醒】,您好,【%s】提醒您,有%d条特种设备年检数据还未处理,请尽快处理!!";
+        /**
+         * 安全附件--催办提醒
+         */
+        public static final String SAFETY_ATTACHMENT_VERIFICATION_URGING_CONTENT="【安全附件--催办提醒】,您好,【%s】提醒您,有%d条安全附件年检数据还未处理,请尽快处理!!";
         /**
          * 培训截止提醒内容
          */
@@ -526,7 +546,10 @@ public class SaveConstans {
          * 特种设备作业人员证书提醒
          */
         public static final String PERSONNEL_CERTIFICATES_CONTENT = "您好,有如下人员证书即将到期,请及时处理 姓名:【%s】,所属部门:【%s】证书类别:【%s】,复审日期:【%tF】";
-
+        /**
+         * 特种设备作业人员证书提醒
+         */
+        public static final String PERSONNEL_CERTIFICATES_URGING_CONTENT = "【特种设备人员证书--催办提醒】,您好,【%s】提醒您,有%d条特种设备人员证书年检数据还未处理,请尽快处理!!";
         /**
          * 设备年检
          */

+ 57 - 0
cx-safe-check/cx-save-check-common/src/main/java/com/rongwei/sfcommon/sys/service/UrgingService.java

@@ -0,0 +1,57 @@
+package com.rongwei.sfcommon.sys.service;
+
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.vo.MailDo;
+import com.rongwei.safecommon.utils.CXCommonUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+import static com.rongwei.safecommon.utils.SaveConstans.NotifyContent.ORDEROUTTIME_AUDIT_CONTENT;
+import static com.rongwei.safecommon.utils.SaveConstans.NotifyTitle.ORDEROUTTIMEAUDIT_TITLE;
+
+/**
+ * UrgingService class
+ *
+ * @author XH
+ * @date 2024/09/13
+ */
+public interface UrgingService {
+    @Autowired
+
+    R emailAndNotifyUrging(List<String> ids);
+
+    /**
+     *  发送催办邮件
+     * @param title 主题
+     * @param content 内容
+     * @param reMails 收件人
+     */
+    default void sendEmail(String title,String content,String[] reMails) {
+        MailDo mailDo = new MailDo();
+        mailDo.setReceiveEmail(reMails);
+        mailDo.setNeedTransReceive(false);
+        mailDo.setCcEmail(new String[]{});
+        mailDo.setSubject(title);
+        mailDo.setContent(content);
+        CXCommonUtils.sendHtmlMail(mailDo);
+    }
+
+    /**
+     * 发送催办消息提醒
+     *
+     * @param title        消息提醒标题
+     * @param content      消息提醒内容
+     * @param remark       消息提醒备注
+     * @param recipientIds 接收人ID
+     * @param roption      目前存的是业务数据ID
+     * @param notifyStatus 消息提醒类型
+     */
+    default void sendNotify(String title, String content,
+                            List<String> recipientIds, String roption,
+                            String notifyStatus) {
+        // TODO:XH add 2024/9/14 需要执行的特殊逻辑
+        //发送消息
+        CXCommonUtils.sendNotify(title,content, null, recipientIds, roption, notifyStatus);
+    }
+}

+ 98 - 0
cx-safe-check/cx-save-check-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/SecurityAttachmentsUrgingServiceImpl.java

@@ -0,0 +1,98 @@
+package com.rongwei.sfcommon.sys.service.impl;
+
+import com.rongwe.scentity.domian.AspSafeAttachmentsDo;
+import com.rongwe.scentity.vo.UserMailOrgVo;
+import com.rongwei.rwadmincommon.system.domain.SysDictDo;
+import com.rongwei.rwadmincommon.system.service.SysDictService;
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.base.exception.CustomException;
+import com.rongwei.rwcommon.utils.StringUtils;
+import com.rongwei.safecommon.utils.CXCommonUtils;
+import com.rongwei.sfcommon.sys.dao.SaveCheckCommonDao;
+import com.rongwei.sfcommon.sys.service.UrgingService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static com.rongwei.safecommon.utils.SaveConstans.NotifyContent.SAFETY_ATTACHMENT_VERIFICATION_URGING_CONTENT;
+import static com.rongwei.safecommon.utils.SaveConstans.NotifyTitle.SAFETY_ATTACHMENT_VERIFICATION_URGING_TITLE;
+import static com.rongwei.safecommon.utils.SaveConstans.NotifyType.SPECIALEQUIPMENT;
+
+/**
+ * UrgingServiceImpl class
+ *
+ * @author XH
+ * @date 2024/09/13
+ */
+@Service
+public class SecurityAttachmentsUrgingServiceImpl implements UrgingService {
+
+    public static final String MAIL_CONTENT = "  您好!【%s】提醒您,有如下安全附件即将年检到期,请尽快处理!\n" +
+            "  %s" +
+            "  详见安全生产平台,如果无法点击请复制链接到浏览器中:";
+    public static final String MAIL_CONTENT_ITEM = "%d、附件类型:【%s】,证书/报告编号:【%s】,名称:【%s】,检验日期:【%tF】\n";
+    public static final List<String> ROLE_CODE_LIST = new ArrayList<String>() {{
+        add("code-safe");
+        add("role031");
+    }};
+    private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
+    @Autowired
+    private SysDictService sysDictService;
+    @Autowired
+    private AspSafeAttachmentsServiceImpl aspSafeAttachmentsService;
+    @Autowired
+    private SaveCheckCommonDao saveCheckCommonDao;
+
+    @Override
+    public R emailAndNotifyUrging(List<String> ids) {
+        if (ids == null || ids.isEmpty()) {
+            log.error("id为空");
+        }
+        SysUserVo currentUser = CXCommonUtils.getCurrentUser();
+        String currentUserFactoryId = CXCommonUtils.getCurrentUserFactoryId(currentUser);
+        List<AspSafeAttachmentsDo> safeAttachmentsDos = aspSafeAttachmentsService.getBaseMapper().selectBatchIds(ids);
+        if (safeAttachmentsDos.isEmpty()) {
+            log.debug("根据id:{}没有找到安全附件信息", ids);
+            return R.ok();
+        }
+        //获取工厂对应的 安全管理员和特种设备管理员
+        List<UserMailOrgVo> userInfo = saveCheckCommonDao.getUserInfoByTenantIdAndRoleCode(currentUserFactoryId, ROLE_CODE_LIST);
+        // 发生通知信息
+        sendNotify(SAFETY_ATTACHMENT_VERIFICATION_URGING_TITLE,
+                String.format(SAFETY_ATTACHMENT_VERIFICATION_URGING_CONTENT, currentUser.getName(), safeAttachmentsDos.size())
+                , userInfo.stream().map(UserMailOrgVo::getId).collect(Collectors.toList()),
+                safeAttachmentsDos.stream().map(AspSafeAttachmentsDo::getId).collect(Collectors.joining(","))
+                , SPECIALEQUIPMENT);
+
+        // 收件箱
+        String[] array = userInfo.stream().map(UserMailOrgVo::getEmail).filter(StringUtils::isNotBlank).toArray(String[]::new);
+        if (array.length == 0) {
+            log.error("收件人邮箱为空");
+            throw new CustomException("收件人邮箱为空无法发送通知邮件");
+        }
+        // 数据字典替换
+        List<SysDictDo> sysDictDoList = sysDictService.getDictsByType("aqfjfjlx");
+        AspSafeAttachmentsDo aspSafeAttachmentsDo;
+        List<String> str = new ArrayList<>();
+        for (int i = 0; i < safeAttachmentsDos.size(); i++) {
+            aspSafeAttachmentsDo = safeAttachmentsDos.get(i);
+            String checkitemtype = aspSafeAttachmentsDo.getAttachmenttype();
+            SysDictDo sysDictDo = sysDictDoList.stream()
+                    .filter(data -> data.getValue().equals(checkitemtype))
+                    .findFirst()
+                    .orElse(null);
+            str.add(String.format(MAIL_CONTENT_ITEM, i + 1, sysDictDo == null ? "" : sysDictDo.getName(),
+                    aspSafeAttachmentsDo.getCertificatenumber(), aspSafeAttachmentsDo.getName(),
+                    aspSafeAttachmentsDo.getNextinspectiondate()));
+        }
+        // 发送通知邮件
+        sendEmail(SAFETY_ATTACHMENT_VERIFICATION_URGING_TITLE, String.format(MAIL_CONTENT, currentUser.getName(), StringUtils.join(str, "\n")), array);
+        return null;
+    }
+}

+ 101 - 0
cx-safe-check/cx-save-check-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/SpecialCertificateUrgingServiceImpl.java

@@ -0,0 +1,101 @@
+package com.rongwei.sfcommon.sys.service.impl;
+
+import com.rongwe.scentity.domian.AspSafeAttachmentsDo;
+import com.rongwe.scentity.domian.AspSpecialEquipmentCertificateDo;
+import com.rongwe.scentity.vo.UserMailOrgVo;
+import com.rongwei.rwadmincommon.system.domain.SysDictDo;
+import com.rongwei.rwadmincommon.system.service.SysDictService;
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.base.exception.CustomException;
+import com.rongwei.rwcommon.utils.StringUtils;
+import com.rongwei.safecommon.utils.CXCommonUtils;
+import com.rongwei.sfcommon.sys.dao.SaveCheckCommonDao;
+import com.rongwei.sfcommon.sys.service.UrgingService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static com.rongwei.safecommon.utils.SaveConstans.NotifyContent.PERSONNEL_CERTIFICATES_URGING_CONTENT;
+import static com.rongwei.safecommon.utils.SaveConstans.NotifyContent.SAFETY_ATTACHMENT_VERIFICATION_URGING_CONTENT;
+import static com.rongwei.safecommon.utils.SaveConstans.NotifyTitle.PERSONNEL_CERTIFICATES_URGING_TITLE;
+import static com.rongwei.safecommon.utils.SaveConstans.NotifyTitle.SAFETY_ATTACHMENT_VERIFICATION_URGING_TITLE;
+import static com.rongwei.safecommon.utils.SaveConstans.NotifyType.SPECIALEQUIPMENT;
+
+/**
+ * SpecialCertificateUrgingServiceImpl class
+ *
+ * @author XH
+ * @date 2024/09/13
+ */
+@Service
+public class SpecialCertificateUrgingServiceImpl implements UrgingService {
+    private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
+    @Autowired
+    private AspSpecialEquipmentCertificateServiceImpl aspSpecialEquipmentCertificateService;
+    @Autowired
+    private SaveCheckCommonDao saveCheckCommonDao;
+    @Autowired
+    private SysDictService sysDictService;
+    public static final String MAIL_CONTENT=" 您好!【%s】提醒您,有如下特种设备人员证书即将年检到期,请尽快处理!\n" +
+            "%s" +
+            "详见安全生产平台,如果无法点击请复制链接到浏览器中:http://192.168.100.78/#/page/lr/9329c07dd31b4b8b95d4decaa021adc3";
+    public static final String MAIL_CONTENT_ITEM="%d、姓名:【%s】,,所属部门:【%s】,证书类别:【%s】,复审日期:【%tF】\n";
+
+    public static final List<String> ROLE_CODE_LIST = new ArrayList<String>() {{
+        add("code-safe");
+        add("role031");
+    }};
+
+    @Override
+    public R emailAndNotifyUrging(List<String> ids) {
+        if (ids == null || ids.isEmpty()) {
+            log.error("id为空");
+        }
+        SysUserVo currentUser = CXCommonUtils.getCurrentUser();
+        String currentUserFactoryId = CXCommonUtils.getCurrentUserFactoryId(currentUser);
+        List<AspSpecialEquipmentCertificateDo> aspSpecialEquipmentCertificateDos = aspSpecialEquipmentCertificateService.getBaseMapper().selectBatchIds(ids);
+        if (aspSpecialEquipmentCertificateDos.isEmpty()) {
+            log.debug("根据id:{}没有找到安全附件信息", ids);
+            return R.ok();
+        }
+        //获取工厂对应的 安全管理员和特种设备管理员
+        List<UserMailOrgVo> userInfo = saveCheckCommonDao.getUserInfoByTenantIdAndRoleCode(currentUserFactoryId, ROLE_CODE_LIST);
+        // 发生通知信息
+        sendNotify(PERSONNEL_CERTIFICATES_URGING_TITLE, String.format(PERSONNEL_CERTIFICATES_URGING_CONTENT, currentUser.getName(),
+                        aspSpecialEquipmentCertificateDos.size())
+                , userInfo.stream().map(UserMailOrgVo::getId).collect(Collectors.toList()),
+                aspSpecialEquipmentCertificateDos.stream().map(AspSpecialEquipmentCertificateDo::getId).collect(Collectors.joining(","))
+                , SPECIALEQUIPMENT);
+        // 收件箱
+        String[] array = userInfo.stream().map(UserMailOrgVo::getEmail).filter(StringUtils::isNotBlank).toArray(String[]::new);
+        if (array.length == 0) {
+            log.error("收件人邮箱为空");
+            throw new CustomException("收件人邮箱为空无法发送通知邮件");
+        }
+        // 数据字典替换
+        List<SysDictDo> sysDictDoList= sysDictService.getDictsByType("zslb");
+
+        AspSpecialEquipmentCertificateDo aspSpecialEquipmentCertificateDo;
+        List<String> str = new ArrayList<>();
+        for (int i = 0; i < aspSpecialEquipmentCertificateDos.size(); i++) {
+            aspSpecialEquipmentCertificateDo = aspSpecialEquipmentCertificateDos.get(i);
+            String jobType = aspSpecialEquipmentCertificateDo.getJobtype();
+            SysDictDo sysDictDo = sysDictDoList.stream()
+                    .filter(data -> data.getValue().equals(jobType))
+                    .findFirst()
+                    .orElse(null);
+            str.add(String.format(MAIL_CONTENT_ITEM, i + 1, aspSpecialEquipmentCertificateDo.getName(),
+                    aspSpecialEquipmentCertificateDo.getOrgname(), sysDictDo == null ? "" : sysDictDo.getName(),
+                    aspSpecialEquipmentCertificateDo.getReviewdate()));
+        }
+        // 发送通知邮件
+        sendEmail(PERSONNEL_CERTIFICATES_URGING_TITLE, String.format(MAIL_CONTENT,currentUser.getName(), StringUtils.join(str, "\n")), array);
+        return R.ok();
+    }
+}

+ 99 - 0
cx-safe-check/cx-save-check-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/SpecialEquipmentUrgingServiceImpl.java

@@ -0,0 +1,99 @@
+package com.rongwei.sfcommon.sys.service.impl;
+
+import com.rongwe.scentity.domian.CheckItemsDo;
+import com.rongwe.scentity.vo.UserMailOrgVo;
+import com.rongwei.rwadmincommon.system.domain.SysDictDo;
+import com.rongwei.rwadmincommon.system.service.SysDictService;
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.base.exception.CustomException;
+import com.rongwei.rwcommon.utils.StringUtils;
+import com.rongwei.safecommon.utils.CXCommonUtils;
+import com.rongwei.sfcommon.sys.dao.SaveCheckCommonDao;
+import com.rongwei.sfcommon.sys.service.UrgingService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static com.rongwei.safecommon.utils.SaveConstans.NotifyContent.SPECIAL_EQUIPMENT_URGING_CONTENT;
+import static com.rongwei.safecommon.utils.SaveConstans.NotifyTitle.SPECIALEQUIPMENT_URGING_TITLE;
+import static com.rongwei.safecommon.utils.SaveConstans.NotifyType.SPECIALEQUIPMENT;
+
+/**
+ * SpecialEquipmentUrgingServiceImpl class
+ *
+ * @author XH
+ * @date 2024/09/13
+ */
+@Service
+public class SpecialEquipmentUrgingServiceImpl implements UrgingService {
+    public static final String MAIL_CONTENT = "  您好!【%s】提醒您,有如下特种设备即将年检到期,请尽快处理!\n" +
+            " %s " +
+            "  详见安全生产平台,如果无法点击请复制链接到浏览器中:http://192.168.100.78/#/page/lr/9329c07dd31b4b8b95d4decaa021adc3";
+    public static final String MAIL_CONTENT_ITEM = "  %d、设备类型:【%s】,设备编号:【%s】,设备名称:【%s】,检验日期:【%tF】";
+    public static final List<String> ROLE_CODE_LIST = new ArrayList<String>() {{
+        add("code-safe");
+        add("role031");
+    }};
+    private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
+    @Autowired
+    private CheckItemsServiceImpl checkItemsService;
+    @Autowired
+    private SaveCheckCommonDao saveCheckCommonDao;
+    @Autowired
+    private SysDictService sysDictService;
+
+    @Override
+    public R emailAndNotifyUrging(List<String> ids) {
+        if (ids == null || ids.isEmpty()) {
+            log.error("id为空");
+        }
+        SysUserVo currentUser = CXCommonUtils.getCurrentUser();
+        String currentUserFactoryId = CXCommonUtils.getCurrentUserFactoryId(currentUser);
+        // 获取特种设备信息
+        List<CheckItemsDo> checkItemsDos = checkItemsService.getBaseMapper().selectBatchIds(ids);
+        if (checkItemsDos.isEmpty()) {
+            log.debug("根据id:{}没有找到特种设备信息", ids);
+            return R.ok();
+        }
+        //获取工厂对应的 安全管理员和特种设备管理员
+        List<UserMailOrgVo> userInfo = saveCheckCommonDao.getUserInfoByTenantIdAndRoleCode(currentUserFactoryId, ROLE_CODE_LIST);
+        // 发生通知信息
+        sendNotify(SPECIALEQUIPMENT_URGING_TITLE, String.format(SPECIAL_EQUIPMENT_URGING_CONTENT, currentUser.getName(),
+                        checkItemsDos.size())
+                , userInfo.stream().map(UserMailOrgVo::getId).collect(Collectors.toList()),
+                checkItemsDos.stream().map(CheckItemsDo::getId).collect(Collectors.joining(","))
+                , SPECIALEQUIPMENT);
+
+        // 收件箱
+        String[] array = userInfo.stream().map(UserMailOrgVo::getEmail).filter(StringUtils::isNotBlank).toArray(String[]::new);
+        if (array.length == 0) {
+            log.error("收件人邮箱为空");
+            throw new CustomException("收件人邮箱为空无法发送通知邮件");
+        }
+        // 数据字典替换
+        List<SysDictDo> aspCheckItemType = sysDictService.getDictsByType("asp_check_item_type");
+        CheckItemsDo checkItemsDo;
+        List<String> str = new ArrayList<>();
+        for (int i = 0; i < checkItemsDos.size(); i++) {
+            checkItemsDo = checkItemsDos.get(i);
+            String checkitemtype = checkItemsDo.getCheckitemtype();
+            SysDictDo sysDictDo = aspCheckItemType.stream()
+                    .filter(data -> data.getValue().equals(checkitemtype))
+                    .findFirst()
+                    .orElse(null);
+            str.add(String.format(MAIL_CONTENT_ITEM, i + 1, sysDictDo == null ? "" : sysDictDo.getName(),
+                    checkItemsDo.getDevicecode(), checkItemsDo.getCheckitemname(),
+                    checkItemsDo.getNextcheckdate()));
+        }
+
+        // 发送通知邮件
+        sendEmail(SPECIALEQUIPMENT_URGING_TITLE, String.format(MAIL_CONTENT, currentUser.getName(), StringUtils.join(str, "\n")), array);
+        return R.ok();
+    }
+}

+ 68 - 0
cx-safe-check/cx-save-check-server/src/main/java/com/rongwei/savecheck/controller/UrgingController.java

@@ -0,0 +1,68 @@
+package com.rongwei.savecheck.controller;
+
+import com.rongwei.rwcommon.utils.SpringContextUtils;
+import com.rongwei.rwcommon.utils.StringUtils;
+import com.rongwei.sfcommon.sys.service.UrgingService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * UrgingController class
+ *
+ * @author XH
+ * @date 2024/09/13
+ */
+@RestController
+@RequestMapping("/urging")
+public class UrgingController {
+    /**
+     * 特种设备
+     */
+    public static final String SPECIAL_EQUIPMENT = "SpecialEquipment";
+    /**
+     * 特种证书
+     */
+    public static final String SPECIAL_CERTIFICATE = "PersonnelCertificates";
+    /**
+     * 安全附件
+     */
+    public static final String SECURITY_ATTACHMENTS = "safeAttachments";
+    private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
+
+    @PostMapping("/send")
+    public void complaintForm(@RequestBody Map<String, List<String>> params) {
+        log.info("开发发送催办提醒:{}",params);
+        params.forEach((k, v) -> {
+            if (StringUtils.isBlank(k)) {
+                log.error("催办类型为空");
+                return;
+            }
+            if (v == null) {
+                log.error("催办数据ID为空");
+                return;
+            }
+            UrgingService urgingService;
+            if (SPECIAL_EQUIPMENT.equals(k)) {
+                urgingService = SpringContextUtils.getBean("specialEquipmentUrgingServiceImpl");
+            } else if (SPECIAL_CERTIFICATE.equals(k)) {
+                urgingService = SpringContextUtils.getBean("specialCertificateUrgingServiceImpl");
+            } else if (SECURITY_ATTACHMENTS.equals(k)) {
+                urgingService = SpringContextUtils.getBean("securityAttachmentsUrgingServiceImpl");
+            } else {
+                log.error("催办类型不正确:{}", k);
+                urgingService = null;
+            }
+            if (urgingService != null) {
+                log.error("当前催办类型为:{},需要被催办的数据为:{}", k, v);
+                urgingService.emailAndNotifyUrging(v);
+            }
+        });
+    }
+}