package com.ruoyi.sales.task;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.ruoyi.project.system.domain.SysNotice;
|
import com.ruoyi.project.system.service.ISysNoticeService;
|
import com.ruoyi.projectManagement.vo.InfoVo;
|
import com.ruoyi.projectManagement.pojo.ProjectConfig;
|
import com.ruoyi.projectManagement.service.InfoService;
|
import com.ruoyi.projectManagement.service.ProjectConfigService;
|
import com.ruoyi.sales.pojo.SalesLedger;
|
import com.ruoyi.sales.service.ISalesLedgerService;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
|
import java.time.LocalDate;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
/**
|
* 销售台账-合同原件约定回传日期预警任务
|
*/
|
@Slf4j
|
@Component
|
@RequiredArgsConstructor
|
public class ContractReturnReminderTask {
|
|
private final ProjectConfigService projectConfigService;
|
private final ISalesLedgerService salesLedgerService;
|
private final InfoService infoService;
|
private final ISysNoticeService sysNoticeService;
|
|
// 每天上午 8 点执行
|
@Scheduled(cron = "0 0 8 * * ?")
|
public void processReminders() {
|
log.info("开始执行:合同原件回传预警扫描");
|
ProjectConfig config = projectConfigService.getGlobalConfig();
|
Integer reminderDays = config.getContractReturnReminderDays();
|
if (reminderDays == null) {
|
reminderDays = 3;
|
}
|
|
LocalDate targetDate = LocalDate.now().plusDays(reminderDays);
|
|
// 查询符合条件的销售台账
|
List<SalesLedger> ledgers = salesLedgerService.list(Wrappers.<SalesLedger>lambdaQuery()
|
.eq(SalesLedger::getContractOriginalReturnDate, targetDate));
|
|
if (ledgers == null || ledgers.isEmpty()) {
|
log.info("今日无需要预警的合同回传记录");
|
return;
|
}
|
|
log.info("发现 {} 条预警记录", ledgers.size());
|
|
for (SalesLedger ledger : ledgers) {
|
if (ledger.getProjectId() == null) {
|
continue;
|
}
|
InfoVo projectInfo = infoService.getInfoById(ledger.getProjectId());
|
if (projectInfo != null && projectInfo.getInfo() != null && projectInfo.getInfo().getManagerId() != null) {
|
sendNotice(ledger, projectInfo);
|
}
|
}
|
log.info("合同原件回传预警扫描结束");
|
}
|
|
private void sendNotice(SalesLedger ledger, InfoVo projectInfo) {
|
SysNotice notice = new SysNotice();
|
notice.setNoticeTitle("合同原件回传预警");
|
notice.setNoticeType("1"); // 1为通知
|
String content = String.format("项目【%s】关联的销售台账(%s)的合同原件约定回传日期(%s)即将到期,请及时处理!",
|
projectInfo.getInfo().getTitle(),
|
ledger.getSalesContractNo(),
|
ledger.getContractOriginalReturnDate().toString());
|
notice.setNoticeContent(content);
|
notice.setStatus("0"); // 正常
|
notice.setConsigneeId(projectInfo.getInfo().getManagerId());
|
// 可以设置 senderId 为系统管理员 (例如 1L)
|
notice.setSenderId(1L);
|
|
try {
|
sysNoticeService.save(notice);
|
} catch (Exception e) {
|
log.error("发送预警通知失败: salesLedgerId={}, error={}", ledger.getId(), e.getMessage());
|
}
|
}
|
}
|