From 89fd0130c274132d3c16689e18fb9e6ab9c455fb Mon Sep 17 00:00:00 2001 From: yuejiayang <146344614+YangLei105@users.noreply.github.com> Date: Mon, 25 Nov 2024 10:04:16 +0800 Subject: [PATCH] =?UTF-8?q?2024.11.25=20=E6=96=87=E6=A1=A3=E6=94=B6?= =?UTF-8?q?=E9=9B=86=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/controller/EamProjectController.java | 10 +- .../modules/pms/data/ProofDocumentData.java | 3 + .../service/Impl/EamProjectServiceImpl.java | 96 +++++++++++++------ src/main/resources/application-dev.yml | 2 +- 4 files changed, 75 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/xujie/sys/modules/pms/controller/EamProjectController.java b/src/main/java/com/xujie/sys/modules/pms/controller/EamProjectController.java index 0e0ce937..396768b7 100644 --- a/src/main/java/com/xujie/sys/modules/pms/controller/EamProjectController.java +++ b/src/main/java/com/xujie/sys/modules/pms/controller/EamProjectController.java @@ -425,9 +425,9 @@ public class EamProjectController { return R.ok(); } -// @PostMapping("/sendEmail") -// public R sendEmail() throws MessagingException, UnsupportedEncodingException { -// eamProjectService.sendEmail(); -// return R.ok(); -// } + @PostMapping("/sendEmail") + public R sendEmail() throws MessagingException, UnsupportedEncodingException { + eamProjectService.sendEmail(); + return R.ok(); + } } diff --git a/src/main/java/com/xujie/sys/modules/pms/data/ProofDocumentData.java b/src/main/java/com/xujie/sys/modules/pms/data/ProofDocumentData.java index 65baed1f..110bddc0 100644 --- a/src/main/java/com/xujie/sys/modules/pms/data/ProofDocumentData.java +++ b/src/main/java/com/xujie/sys/modules/pms/data/ProofDocumentData.java @@ -87,6 +87,9 @@ public class ProofDocumentData extends ProofingInformationData { @TableField(exist = false) private Date massProductionStartDate; + @TableField(exist = false) + private Integer emailInfoType; + public Integer getUserId() { return userId; } diff --git a/src/main/java/com/xujie/sys/modules/pms/service/Impl/EamProjectServiceImpl.java b/src/main/java/com/xujie/sys/modules/pms/service/Impl/EamProjectServiceImpl.java index 616fb30c..c45ebcb7 100644 --- a/src/main/java/com/xujie/sys/modules/pms/service/Impl/EamProjectServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/pms/service/Impl/EamProjectServiceImpl.java @@ -47,6 +47,8 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.text.SimpleDateFormat; +import java.time.DayOfWeek; +import java.time.LocalDate; import java.util.*; /** @@ -845,48 +847,82 @@ public class EamProjectServiceImpl implements EamProjectService { public void sendEmail() throws MessagingException, UnsupportedEncodingException { // 创建数组用于存储定时任务所有待发送邮件的数据 List allUserSendEmailList; + // 调用存储过程拿到所有需要自动发送邮件通知的数据 + allUserSendEmailList = EamProjectMapper.getAutoSendMailAddress("2"); // 创建数组用于存储单个用户的所有待发送邮件的数据 List oneUserSendEmailList = null; -// List proofingDocumentUserSendEmailList = null; -// List massProductionDocumentUserSendEmailList = null; -// List proofingUserSendEmailList = null; -// List confirmUserSendEmailList = null; // 创建变量用于存储上一个用户名 String previousUsername = null; - // 调用存储过程拿到所有需要自动发送邮件通知的数据 - allUserSendEmailList = EamProjectMapper.getAutoSendMailAddress("2"); - - // 遍历allUserSendEmailList,将相同用户名的数据放到oneUserSendEmailList数组中 - for (ProofDocumentData data : allUserSendEmailList) { - if (data.getUsername() != null && !data.getUsername().equals("")) { - if (!data.getUsername().equals(previousUsername)) { + //如果是周五 + if (LocalDate.now().getDayOfWeek().equals(DayOfWeek.FRIDAY)) { + // 遍历allUserSendEmailList,将相同用户名的数据放到oneUserSendEmailList数组中 + for (ProofDocumentData data : allUserSendEmailList) { + if (data.getUsername() != null && !data.getUsername().equals("")) { + if (!data.getUsername().equals(previousUsername)) { + + // 如果oneUserSendEmailList不为空,说明上一个用户的数据已经遍历完毕,需要发送邮件 + if (oneUserSendEmailList != null && !oneUserSendEmailList.isEmpty() && oneUserSendEmailList.get(0).getEmail() != null && !oneUserSendEmailList.get(0).getEmail().equals("")) { + // 调用发送邮件方法 + this.sendAutoMailToOnlyUserHandle(oneUserSendEmailList); + } else { + // 如果oneUserSendEmailList为空,说明是第一次遍历,需要初始化 + oneUserSendEmailList = new ArrayList<>(); + } - // 如果oneUserSendEmailList不为空,说明上一个用户的数据已经遍历完毕,需要发送邮件 - if (oneUserSendEmailList != null && !oneUserSendEmailList.isEmpty() && oneUserSendEmailList.get(0).getEmail() != null && !oneUserSendEmailList.get(0).getEmail().equals("")) { - // 调用发送邮件方法 - this.sendAutoMailToOnlyUserHandle(oneUserSendEmailList); + // 如果当前用户名与上一个用户名不同,需要重新给previousUsername赋值,同时清空oneUserSendEmailList数组重新添加新的username的数据 + previousUsername = data.getUsername(); + oneUserSendEmailList.clear(); + oneUserSendEmailList.add(data); } else { - // 如果oneUserSendEmailList为空,说明是第一次遍历,需要初始化 - oneUserSendEmailList = new ArrayList<>(); + // 如果当前用户名与上一个用户名相同,直接添加到oneUserSendEmailList数组中 + oneUserSendEmailList.add(data); } - - // 如果当前用户名与上一个用户名不同,需要重新给previousUsername赋值,同时清空oneUserSendEmailList数组重新添加新的username的数据 - previousUsername = data.getUsername(); - oneUserSendEmailList.clear(); - oneUserSendEmailList.add(data); - } else { - // 如果当前用户名与上一个用户名相同,直接添加到oneUserSendEmailList数组中 - oneUserSendEmailList.add(data); } } - } - // 遍历完毕后,需要判断oneUserSendEmailList是否为空,如果不为空,说明最后一个用户的数据还未发送邮件 - if (oneUserSendEmailList != null && oneUserSendEmailList.get(0).getEmail() != null && !oneUserSendEmailList.get(0).getEmail().equals("")) { - // 调用发送邮件方法 - this.sendAutoMailToOnlyUserHandle(oneUserSendEmailList); + // 遍历完毕后,需要判断oneUserSendEmailList是否为空,如果不为空,说明最后一个用户的数据还未发送邮件 + if (oneUserSendEmailList != null && oneUserSendEmailList.get(0).getEmail() != null && !oneUserSendEmailList.get(0).getEmail().equals("")) { + // 调用发送邮件方法 + this.sendAutoMailToOnlyUserHandle(oneUserSendEmailList); + } } + // 如果是周一到周四 + if (LocalDate.now().getDayOfWeek().equals(DayOfWeek.MONDAY) || LocalDate.now().getDayOfWeek().equals(DayOfWeek.TUESDAY) || LocalDate.now().getDayOfWeek().equals(DayOfWeek.WEDNESDAY) || LocalDate.now().getDayOfWeek().equals(DayOfWeek.THURSDAY)) { + for (ProofDocumentData data : allUserSendEmailList) { + // 拿到allUserSendEmailList中emailInfoType=1并且dueData还有2天以及超过dueData的数据 + if (data.getEmailInfoType() == 1 || data.getEmailInfoType() == 2) { + if (data.getDueDate().getTime() - new Date().getTime() <= 2 * 24 * 60 * 60 * 1000 || data.getDueDate().getTime() - new Date().getTime() >= 0) { + if (data.getUsername() != null && !data.getUsername().equals("")) { + if (!data.getUsername().equals(previousUsername)) { + + // 如果oneUserSendEmailList不为空,说明上一个用户的数据已经遍历完毕,需要发送邮件 + if (oneUserSendEmailList != null && !oneUserSendEmailList.isEmpty() && oneUserSendEmailList.get(0).getEmail() != null && !oneUserSendEmailList.get(0).getEmail().equals("")) { + // 调用发送邮件方法 + this.sendAutoMailToOnlyUserHandle(oneUserSendEmailList); + } else { + // 如果oneUserSendEmailList为空,说明是第一次遍历,需要初始化 + oneUserSendEmailList = new ArrayList<>(); + } + + // 如果当前用户名与上一个用户名不同,需要重新给previousUsername赋值,同时清空oneUserSendEmailList数组重新添加新的username的数据 + previousUsername = data.getUsername(); + oneUserSendEmailList.clear(); + oneUserSendEmailList.add(data); + } else { + // 如果当前用户名与上一个用户名相同,直接添加到oneUserSendEmailList数组中 + oneUserSendEmailList.add(data); + } + } + } + } + } + // 遍历完毕后,需要判断oneUserSendEmailList是否为空,如果不为空,说明最后一个用户的数据还未发送邮件 + if (oneUserSendEmailList != null && oneUserSendEmailList.get(0).getEmail() != null && !oneUserSendEmailList.get(0).getEmail().equals("")) { + // 调用发送邮件方法 + this.sendAutoMailToOnlyUserHandle(oneUserSendEmailList); + } + } // if (data.getProofingId() == -1){ // massProductionDocumentUserSendEmailList.add(data); // } else if (data.getProofingId() == 0) { diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index afd92ad4..b87031b6 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -53,7 +53,7 @@ task: # sendEmail: 0 0/5 * * * ? #每5分钟执行一次 # sendEmail: 0 30 12 1/15 * ? #每15天的中午12:30执行一次 #发送邮件,每周一到周五中午12点执行一次 - sendEmail: 0 0 12 * * FRI + sendEmail: 0 0 12 ? * MON-FRI #--------------------------------------------接口地址和开关控制------------------------------------------------- toacc: