fix: 实施日期发消息重复发送问题

This commit is contained in:
2024-08-05 10:11:17 +08:00
parent b42f111cba
commit 3511ac82e9
@@ -49,23 +49,35 @@ public class ReplaceImplementationDateMsgJob implements Job {
private void sendEsStandardMsg() {
List<String> allExpireStandardNumberList = new ArrayList<>();
// 获取所有已经到了外部标准
// 获取所有已经到了标准
List<LawsEnterpriseStandard> standardList = esService.list();
if (standardList.isEmpty()) {
log.info("没有需要更新的标准");
return;
}
Map<String, LawsEnterpriseStandard> standardMap =
standardList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getId, es -> es));
standardList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getStandardNumber, es -> es));
// 获取今天0点
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
Date todayMidnight = cal.getTime();
// 获取明天0点
cal.add(Calendar.DAY_OF_YEAR, 1);
Date tomorrowMidnight = cal.getTime();
// 根据新认证车实施日期筛选出已经到期的标准
for (LawsEnterpriseStandard es : standardList) {
Date implementationDate = es.getImplementationDate();
if (implementationDate == null) {
continue;
}
// 判断当前时间是否大于实施日期且实施日期没到后一天
if (implementationDate.getTime() <= System.currentTimeMillis() &&
implementationDate.before(new Date(implementationDate.getTime() + 24 * 60 * 60 * 1000))) {
// 判断实施日期大于今天0点小于明天0点
if (implementationDate.equals(todayMidnight) && implementationDate.before(tomorrowMidnight)) {
allExpireStandardNumberList.add(es.getStandardNumber());
}
}
@@ -101,6 +113,8 @@ public class ReplaceImplementationDateMsgJob implements Job {
Set<String> userIdList = new HashSet<>();
// 拼接发送人员
for (String standard : replacedStandardNumberList) {
// 如果有书名号的话只取书名号前的内容
standard = standard.split("")[0];
LawsEnterpriseStandard replaceStandard = standardMap.get(standard);
// 被代替标准的主起草人,责任人,收藏标准的人员
userIdList.add(replaceStandard.getMainDraftingUser());
@@ -177,6 +191,8 @@ public class ReplaceImplementationDateMsgJob implements Job {
Set<String> userIdList = new HashSet<>();
// 拼接发送人员
for (String standard : replacedStandardNumberList) {
// 如果有书名号的话只取书名号前的内容
standard = standard.split("")[0];
LawsDomesticStandard replaceStandard = standardMap.get(standard);
// 被代替标准的主起草人,责任人,收藏标准的人员
userIdList.add(replaceStandard.getResponsibleUser());