Commit 9c0b5ddd by jianan

保费到期提醒18

parent 0a199995
......@@ -3,8 +3,7 @@ package com.yd.csf.api.service;
import java.util.List;
/**
* 续期提醒邮件发送。
* 一期为占位实现,后续替换为公司统一邮件服务(yd-email-api)。
* 续期提醒邮件发送(JavaMail 直连 SMTP,见 RenewalMailServiceImpl)。
*/
public interface RenewalMailService {
......
......@@ -10,7 +10,6 @@ import com.yd.csf.service.enums.RenewalRemindStatusEnum;
import com.yd.csf.service.model.RenewalRemindBatch;
import com.yd.csf.service.service.IRenewalRemindBatchService;
import com.yd.csf.service.service.RenewalReminderQueryService;
import com.yd.framework.config.LockExecutor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -33,7 +32,6 @@ import java.util.stream.Collectors;
@Slf4j
public class RenewalDispatchServiceImpl implements RenewalDispatchService {
private static final String LOCK_KEY_PREFIX = "renewal:remind:";
private static final String BATCH_BIZ_ID_PREFIX = "RR";
private static final int ERROR_MSG_MAX_LEN = 1900;
......@@ -41,8 +39,6 @@ public class RenewalDispatchServiceImpl implements RenewalDispatchService {
private String recipientsConfig;
@Resource
private LockExecutor lockExecutor;
@Resource
private RenewalReminderQueryService renewalReminderQueryService;
@Resource
private RenewalPolicyReportService renewalPolicyReportService;
......@@ -55,11 +51,6 @@ public class RenewalDispatchServiceImpl implements RenewalDispatchService {
public void dispatch(String bizMonthParam) {
YearMonth execMonth = parseExecMonth(bizMonthParam);
String bizMonth = execMonth.toString();
lockExecutor.executeWithLock(LOCK_KEY_PREFIX + bizMonth, () -> doDispatch(execMonth));
}
private void doDispatch(YearMonth execMonth) {
String bizMonth = execMonth.toString();
RenewalRemindBatch existBatch = renewalRemindBatchService.queryByBizMonth(bizMonth);
if (existBatch != null
&& RenewalRemindStatusEnum.SUCCESS.getItemValue().equals(existBatch.getStatus())) {
......@@ -71,8 +62,9 @@ public class RenewalDispatchServiceImpl implements RenewalDispatchService {
String fileName = null;
String recipientsSnapshot = null;
try {
LocalDate today = LocalDate.now();
data = renewalReminderQueryService.build(execMonth, today);
// 计算基准日固定为执行月 1 号:定时跑与手动补发同一 bizMonth 结果可复现
LocalDate baseDate = execMonth.atDay(1);
data = renewalReminderQueryService.build(execMonth, baseDate);
// 窗口内无到期保单:不发邮件,记 EMPTY
if (CollectionUtils.isEmpty(data.getDuePolicies())) {
......@@ -84,7 +76,7 @@ public class RenewalDispatchServiceImpl implements RenewalDispatchService {
List<String> recipients = parseRecipients();
recipientsSnapshot = String.join(",", recipients);
fileName = renewalPolicyReportService.buildFileName(data, today);
fileName = renewalPolicyReportService.buildFileName(data, LocalDate.now());
byte[] attachment = renewalPolicyReportService.generate(data);
String subject = buildSubject(data);
String content = buildContent(data);
......@@ -121,7 +113,8 @@ public class RenewalDispatchServiceImpl implements RenewalDispatchService {
batch.setFileName(fileName);
batch.setStatus(status.getItemValue());
batch.setErrorMsg(errorMsg);
batch.setSendTime(status == RenewalRemindStatusEnum.FAIL ? null : LocalDateTime.now());
// 仅实际发信成功才记录发送时间;EMPTY 未发信、FAIL 发送失败,均置空
batch.setSendTime(status == RenewalRemindStatusEnum.SUCCESS ? LocalDateTime.now() : null);
batch.setUpdateTime(LocalDateTime.now());
renewalRemindBatchService.saveOrUpdate(batch);
}
......
......@@ -59,9 +59,6 @@ public final class RenewalDueDateCalculator {
if (years == null) {
return Result.skip("缴费年期为空或无法解析: " + issueNumber, true);
}
if (years <= 0) {
return Result.skip("缴费年期非法: " + years, true);
}
LocalDate endDate = effectiveDate.plusYears(years).minusDays(1);
LocalDate candidate = effectiveDate;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment