diff --git a/src/main/java/com/xujie/sys/modules/erf/controller/ErfExpApplyController.java b/src/main/java/com/xujie/sys/modules/erf/controller/ErfExpApplyController.java index 2f0c1778..0b803d6a 100644 --- a/src/main/java/com/xujie/sys/modules/erf/controller/ErfExpApplyController.java +++ b/src/main/java/com/xujie/sys/modules/erf/controller/ErfExpApplyController.java @@ -7,6 +7,7 @@ import com.xujie.sys.modules.erf.data.ErfFlowApprovalData; import com.xujie.sys.modules.erf.data.ErfFlowStatusData; import com.xujie.sys.modules.erf.data.ErfPlannerScheduleData; import com.xujie.sys.modules.erf.entity.ErfFlowApproveLog; +import com.xujie.sys.modules.erf.service.ErfApprovalReminderService; import com.xujie.sys.modules.erf.service.ErfExpApplyService; import com.xujie.sys.modules.erf.service.ErfFieldAuthService; import com.xujie.sys.modules.sys.controller.AbstractController; @@ -35,6 +36,9 @@ public class ErfExpApplyController extends AbstractController { @Autowired private ErfFieldAuthService erfFieldAuthService; + @Autowired + private ErfApprovalReminderService erfApprovalReminderService; + /** * 查询申请单列表 * @@ -417,4 +421,30 @@ public class ErfExpApplyController extends AbstractController { return R.error("录入失败: " + e.getMessage()); } } + + /** + * 手动催办:向指定申请单所有未确认的审批人(技术经理、生产经理、质量经理、计划员)发送催办邮件 + * + *
不含三方确认人员
+ * + * @param data 包含applyNo的请求数据 + * @return 操作结果,包含实际发送邮件人数 + */ + @PostMapping("/urgeApproval") + @ResponseBody + public R urgeApproval(@RequestBody ErfExpApplyData data) { + try { + if (data.getApplyNo() == null || data.getApplyNo().trim().isEmpty()) { + return R.error("申请单号不能为空"); + } + int sentCount = erfApprovalReminderService.sendManualUrgeEmail(data.getApplyNo().trim()); + if (sentCount == 0) { + return R.ok("当前没有未确认的审批人,无需催办"); + } + return R.ok(String.format("催办邮件已发送,共通知 %d 位审批人", sentCount)); + } catch (Exception e) { + log.error("催办失败: " + e.getMessage(), e); + return R.error("催办失败: " + e.getMessage()); + } + } } diff --git a/src/main/java/com/xujie/sys/modules/erf/service/ErfApprovalReminderService.java b/src/main/java/com/xujie/sys/modules/erf/service/ErfApprovalReminderService.java index 9c9eb80c..b6b605e8 100644 --- a/src/main/java/com/xujie/sys/modules/erf/service/ErfApprovalReminderService.java +++ b/src/main/java/com/xujie/sys/modules/erf/service/ErfApprovalReminderService.java @@ -35,4 +35,14 @@ public interface ErfApprovalReminderService { *提醒生产、质量、技术部门有待确认的工序
*/ void sendTriConfirmReminder(); + + /** + * 手动催办:向指定申请单所有未确认的审批人发送催办邮件 + * + *催办范围:技术经理、生产经理、质量经理、计划员(不含三方确认人员)
+ * + * @param applyNo 申请单号 + * @return 实际发送催办邮件的人数 + */ + int sendManualUrgeEmail(String applyNo); } diff --git a/src/main/java/com/xujie/sys/modules/erf/service/impl/ErfApprovalReminderServiceImpl.java b/src/main/java/com/xujie/sys/modules/erf/service/impl/ErfApprovalReminderServiceImpl.java index 349d8bb5..760cd0cd 100644 --- a/src/main/java/com/xujie/sys/modules/erf/service/impl/ErfApprovalReminderServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/erf/service/impl/ErfApprovalReminderServiceImpl.java @@ -1,14 +1,18 @@ package com.xujie.sys.modules.erf.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.xujie.sys.common.utils.MailUtil; import com.xujie.sys.modules.erf.entity.ErfExpApply; import com.xujie.sys.modules.erf.entity.ErfExpTriConfirm; import com.xujie.sys.modules.erf.entity.ErfExpTriConfirmDetail; +import com.xujie.sys.modules.erf.entity.ErfFlowInstance; import com.xujie.sys.modules.erf.entity.ErfFlowNodeInstance; import com.xujie.sys.modules.erf.mapper.ErfExpApplyMapper; import com.xujie.sys.modules.erf.mapper.ErfExpTriConfirmDetailMapper; import com.xujie.sys.modules.erf.mapper.ErfExpTriConfirmMapper; +import com.xujie.sys.modules.erf.mapper.ErfFlowInstanceMapper; import com.xujie.sys.modules.erf.mapper.ErfFlowNodeInstanceMapper; import com.xujie.sys.modules.erf.service.ErfApprovalReminderService; import com.xujie.sys.modules.pms.data.MailSendAddressData; @@ -39,6 +43,9 @@ public class ErfApprovalReminderServiceImpl implements ErfApprovalReminderServic @Autowired private ErfFlowNodeInstanceMapper erfFlowNodeInstanceMapper; + @Autowired + private ErfFlowInstanceMapper erfFlowInstanceMapper; + @Autowired private ErfExpApplyMapper erfExpApplyMapper; @@ -54,6 +61,11 @@ public class ErfApprovalReminderServiceImpl implements ErfApprovalReminderServic @Autowired private ErfExpTriConfirmMapper erfExpTriConfirmMapper; + private static final ObjectMapper JSON_MAPPER = new ObjectMapper(); + + private static final String APPROVAL_PAGE_URL = "http://172.26.68.20:9001/#/erf-expApplyApproval"; + private static final String PLANNER_PAGE_URL = "http://172.26.68.20:9001/#/erf-plannerSchedule"; + @Value("${erf.reminder.manager.enabled:false}") private boolean managerReminderEnabled; @@ -475,7 +487,7 @@ public class ErfApprovalReminderServiceImpl implements ErfApprovalReminderServic emailBody.append(""); emailBody.append(""); emailBody.append("发送时间:").append(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).append("
"); emailBody.append("