|
@@ -66,10 +66,7 @@ public class CompetitionTask {
|
|
if (type == 1) {
|
|
if (type == 1) {
|
|
outputFundNavDetail(competitionId, period);
|
|
outputFundNavDetail(competitionId, period);
|
|
} else if (type == 2) {
|
|
} else if (type == 2) {
|
|
- List<RcCompetitionCalcDateDO> calcDateDOList = competitionCalcDateMapper.queryByPriod(ListUtil.toList(period), competitionId);
|
|
|
|
- if (CollUtil.isNotEmpty(calcDateDOList)) {
|
|
|
|
- outputFundNavDeletion(competitionId, period, calcDateDOList.get(0).getBeginDate(), calcDateDOList.get(0).getEndDate());
|
|
|
|
- }
|
|
|
|
|
|
+ outputFundNavDeletion(competitionId, period, true);
|
|
} else if (type == 3) {
|
|
} else if (type == 3) {
|
|
List<RcCompetitionCalcDateDO> calcDateDOList = competitionCalcDateMapper.queryByPriod(ListUtil.toList(period), competitionId);
|
|
List<RcCompetitionCalcDateDO> calcDateDOList = competitionCalcDateMapper.queryByPriod(ListUtil.toList(period), competitionId);
|
|
if (CollUtil.isNotEmpty(calcDateDOList)) {
|
|
if (CollUtil.isNotEmpty(calcDateDOList)) {
|
|
@@ -106,26 +103,11 @@ public class CompetitionTask {
|
|
@Scheduled(cron = "0 0 10,15 * * ?")
|
|
@Scheduled(cron = "0 0 10,15 * * ?")
|
|
public void navDeletionTask() {
|
|
public void navDeletionTask() {
|
|
Integer competitionId = competitionConfig.getId();
|
|
Integer competitionId = competitionConfig.getId();
|
|
- String date = DateUtil.format(new Date(), DateConst.YYYY_MM_DD);
|
|
|
|
- List<RcCompetitionTaskDateDO> taskDateDOList = competitionTaskDateMapper.queryByNavDetailDate(date, competitionId);
|
|
|
|
- if (CollUtil.isEmpty(taskDateDOList)) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- // 输出之前 -> 执行净值缺失检测(确保净值不全的基金不参与榜单)
|
|
|
|
|
|
+ // 输出之前 -> 执行净值缺失检测
|
|
fundDeletionTask.computeDeletion();
|
|
fundDeletionTask.computeDeletion();
|
|
|
|
|
|
- List<String> periodList = taskDateDOList.stream().map(RcCompetitionTaskDateDO::getPriod).distinct().toList();
|
|
|
|
- List<RcCompetitionCalcDateDO> calcDateDOList = competitionCalcDateMapper.queryByPriod(periodList, competitionId);
|
|
|
|
- Map<String, RcCompetitionCalcDateDO> periodCalcDataDoMap = calcDateDOList.stream().collect(Collectors.toMap(RcCompetitionCalcDateDO::getPriod, v -> v));
|
|
|
|
- for (RcCompetitionTaskDateDO taskDateDO : taskDateDOList) {
|
|
|
|
- RcCompetitionCalcDateDO calcDateDO = periodCalcDataDoMap.get(taskDateDO.getPriod());
|
|
|
|
- if (calcDateDO == null) {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- String beginDate = calcDateDO.getBeginDate();
|
|
|
|
- String endDate = calcDateDO.getEndDate();
|
|
|
|
- outputFundNavDeletion(competitionId, taskDateDO.getPriod(), beginDate, endDate);
|
|
|
|
- }
|
|
|
|
|
|
+ String period = DateUtil.format(new Date(), DateConst.YYYY_MM);
|
|
|
|
+ outputFundNavDeletion(competitionId, period, false);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -140,6 +122,9 @@ public class CompetitionTask {
|
|
if (CollUtil.isEmpty(taskDateDOList)) {
|
|
if (CollUtil.isEmpty(taskDateDOList)) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
+ // 输出榜单之前 -> 执行净值缺失检测(确保净值不全的基金不参与榜单)
|
|
|
|
+ fundDeletionTask.computeDeletion();
|
|
|
|
+
|
|
List<String> periodList = taskDateDOList.stream().map(RcCompetitionTaskDateDO::getPriod).distinct().collect(Collectors.toList());
|
|
List<String> periodList = taskDateDOList.stream().map(RcCompetitionTaskDateDO::getPriod).distinct().collect(Collectors.toList());
|
|
List<RcCompetitionCalcDateDO> calcDateDOList = competitionCalcDateMapper.queryByPriod(periodList, competitionId);
|
|
List<RcCompetitionCalcDateDO> calcDateDOList = competitionCalcDateMapper.queryByPriod(periodList, competitionId);
|
|
Map<String, RcCompetitionCalcDateDO> periodCalcDataDoMap = calcDateDOList.stream().collect(Collectors.toMap(RcCompetitionCalcDateDO::getPriod, v -> v));
|
|
Map<String, RcCompetitionCalcDateDO> periodCalcDataDoMap = calcDateDOList.stream().collect(Collectors.toMap(RcCompetitionCalcDateDO::getPriod, v -> v));
|
|
@@ -155,7 +140,7 @@ public class CompetitionTask {
|
|
if (CollUtil.isEmpty(navDataDTOList)) {
|
|
if (CollUtil.isEmpty(navDataDTOList)) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- String filePath = competitionConfig.getDirectory() + competitionConfig.getName() + "_" + period + "_榜单_基金净值采集结果明细_" + DateUtil.format(new Date(), DateConst.YYYYMMDD) + ".xlsx";
|
|
|
|
|
|
+ String filePath = competitionConfig.getDirectory() + competitionConfig.getName() + "_" + period + "_基金净值采集结果明细_" + DateUtil.format(new Date(), DateConst.YYYYMMDD) + ".xlsx";
|
|
EasyExcel.write(filePath, FundNavDataDTO.class)
|
|
EasyExcel.write(filePath, FundNavDataDTO.class)
|
|
.sheet("基金净值采集结果明细")
|
|
.sheet("基金净值采集结果明细")
|
|
.doWrite(navDataDTOList);
|
|
.doWrite(navDataDTOList);
|
|
@@ -166,11 +151,11 @@ public class CompetitionTask {
|
|
MailboxInfoDTO mailboxInfoDTO = emailSystemConfigService.getFromEmailInfo();
|
|
MailboxInfoDTO mailboxInfoDTO = emailSystemConfigService.getFromEmailInfo();
|
|
String receivingMailbox = emailSystemConfigService.getRecipientEmail();
|
|
String receivingMailbox = emailSystemConfigService.getRecipientEmail();
|
|
if (mailboxInfoDTO == null || StrUtil.isBlank(receivingMailbox)) {
|
|
if (mailboxInfoDTO == null || StrUtil.isBlank(receivingMailbox)) {
|
|
- log.info("未配置发件箱和收件箱,无法发送邮件");
|
|
|
|
|
|
+ log.info("未配置发件箱和收件箱,无法发送基金净值采集结果明细邮件");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
try {
|
|
try {
|
|
- EmailUtil.senEmail(mailboxInfoDTO, receivingMailbox, new File(filePath), "基金净值采集结果明细", "", period + "基金净值采集结果明细");
|
|
|
|
|
|
+ EmailUtil.senEmail(mailboxInfoDTO, receivingMailbox, new File(filePath), "基金净值采集结果明细", "", period + "_基金净值采集结果明细");
|
|
log.info("基金净值采集结果明细表 -> 邮件已发送");
|
|
log.info("基金净值采集结果明细表 -> 邮件已发送");
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
log.error("邮件发送基金净值采集结果明细表异常 -> 堆栈信息:{}", ExceptionUtil.stacktraceToString(e));
|
|
log.error("邮件发送基金净值采集结果明细表异常 -> 堆栈信息:{}", ExceptionUtil.stacktraceToString(e));
|
|
@@ -178,25 +163,32 @@ public class CompetitionTask {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- private void outputFundNavDeletion(Integer competitionId, String period, String beginDate, String endDate) {
|
|
|
|
- List<FundNavDeletionDTO> navDeletionDTOList = fundNavService.getFundNavDeletion(competitionId, beginDate, endDate);
|
|
|
|
|
|
+ private void outputFundNavDeletion(Integer competitionId, String period, boolean isComputeDeletion) {
|
|
|
|
+ String endDate = DateUtil.format(new Date(), DateConst.YYYY_MM_DD);
|
|
|
|
+ // 输出榜单之前 -> 执行净值缺失检测(确保净值不全的基金不参与榜单)
|
|
|
|
+ if (isComputeDeletion) {
|
|
|
|
+ fundDeletionTask.computeDeletion();
|
|
|
|
+ }
|
|
|
|
+ List<FundNavDeletionDTO> navDeletionDTOList = fundNavService.getFundNavDeletion(competitionId, endDate);
|
|
if (CollUtil.isEmpty(navDeletionDTOList)) {
|
|
if (CollUtil.isEmpty(navDeletionDTOList)) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- String filePath = competitionConfig.getDirectory() + competitionConfig.getName() + "_" + period + "_榜单_基金净值缺失明细_" + DateUtil.format(new Date(), DateConst.YYYYMMDD) + ".xlsx";
|
|
|
|
|
|
+ String filePath = competitionConfig.getDirectory() + competitionConfig.getName() + "_" + period + "_基金净值缺失明细_" + DateUtil.format(new Date(), DateConst.YYYYMMDD) + ".xlsx";
|
|
EasyExcel.write(filePath, FundNavDeletionDTO.class)
|
|
EasyExcel.write(filePath, FundNavDeletionDTO.class)
|
|
.sheet("基金净值缺失明细")
|
|
.sheet("基金净值缺失明细")
|
|
.doWrite(navDeletionDTOList);
|
|
.doWrite(navDeletionDTOList);
|
|
|
|
+ log.info("基金净值缺失明细表格已输出 -> 文件:{}", filePath);
|
|
|
|
+
|
|
// 通过邮件发送"基金净值采集结果明细表格"
|
|
// 通过邮件发送"基金净值采集结果明细表格"
|
|
if (competitionConfig.getMethod() == 1) {
|
|
if (competitionConfig.getMethod() == 1) {
|
|
MailboxInfoDTO mailboxInfoDTO = emailSystemConfigService.getFromEmailInfo();
|
|
MailboxInfoDTO mailboxInfoDTO = emailSystemConfigService.getFromEmailInfo();
|
|
String receivingMailbox = emailSystemConfigService.getRecipientEmail();
|
|
String receivingMailbox = emailSystemConfigService.getRecipientEmail();
|
|
if (mailboxInfoDTO == null || StrUtil.isBlank(receivingMailbox)) {
|
|
if (mailboxInfoDTO == null || StrUtil.isBlank(receivingMailbox)) {
|
|
- log.info("未配置发件箱和收件箱,无法发送邮件");
|
|
|
|
|
|
+ log.info("未配置发件箱和收件箱,无法发送基金净值缺失明细邮件");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
try {
|
|
try {
|
|
- EmailUtil.senEmail(mailboxInfoDTO, receivingMailbox, new File(filePath), "基金净值缺失明细", "", period + "_榜单_基金净值缺失明细");
|
|
|
|
|
|
+ EmailUtil.senEmail(mailboxInfoDTO, receivingMailbox, new File(filePath), "基金净值缺失明细", "", period + "_基金净值缺失明细");
|
|
log.info("基金净值缺失明细表 -> 邮件已发送");
|
|
log.info("基金净值缺失明细表 -> 邮件已发送");
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
log.error("邮件发送基金净值缺失明细表异常 -> 堆栈信息:{}", ExceptionUtil.stacktraceToString(e));
|
|
log.error("邮件发送基金净值缺失明细表异常 -> 堆栈信息:{}", ExceptionUtil.stacktraceToString(e));
|
|
@@ -206,16 +198,16 @@ public class CompetitionTask {
|
|
|
|
|
|
private void outputCompetitionResult(Integer competitionId, String period, RcCompetitionCalcDateDO calcDateDO) {
|
|
private void outputCompetitionResult(Integer competitionId, String period, RcCompetitionCalcDateDO calcDateDO) {
|
|
long startTime = System.currentTimeMillis();
|
|
long startTime = System.currentTimeMillis();
|
|
- // 输出榜单之前 -> 执行净值缺失检测(确保净值不全的基金不参与榜单)
|
|
|
|
- fundDeletionTask.computeDeletion();
|
|
|
|
// 输出榜单之前 -> 执行基金净值指标计算
|
|
// 输出榜单之前 -> 执行基金净值指标计算
|
|
competitionIndicatorCalcTask.calculateIndicator(competitionId, calcDateDO);
|
|
competitionIndicatorCalcTask.calculateIndicator(competitionId, calcDateDO);
|
|
|
|
+
|
|
List<? extends CompetitionBaseResultDTO> competitionResultDTOList = fundNavService.getCompetitionResult(competitionId, period);
|
|
List<? extends CompetitionBaseResultDTO> competitionResultDTOList = fundNavService.getCompetitionResult(competitionId, period);
|
|
if (CollUtil.isEmpty(competitionResultDTOList)) {
|
|
if (CollUtil.isEmpty(competitionResultDTOList)) {
|
|
|
|
+ log.info("当前榜单:{}无结果数据", period);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
Class<? extends CompetitionBaseResultDTO> aClass = competitionResultDTOList.get(0).getClass();
|
|
Class<? extends CompetitionBaseResultDTO> aClass = competitionResultDTOList.get(0).getClass();
|
|
- String filePath = competitionConfig.getDirectory() + competitionConfig.getName() + "_" + period + "_榜单_基金净值衍生指标及排名结果明细_" + DateUtil.format(new Date(), DateConst.YYYYMMDD) + ".xlsx";
|
|
|
|
|
|
+ String filePath = competitionConfig.getDirectory() + competitionConfig.getName() + "_" + period + "_基金净值衍生指标及排名结果明细_" + DateUtil.format(new Date(), DateConst.YYYYMMDD) + ".xlsx";
|
|
EasyExcel.write(filePath, aClass)
|
|
EasyExcel.write(filePath, aClass)
|
|
.sheet("基金净值衍生指标及排名结果明细")
|
|
.sheet("基金净值衍生指标及排名结果明细")
|
|
.doWrite(competitionResultDTOList);
|
|
.doWrite(competitionResultDTOList);
|
|
@@ -227,11 +219,11 @@ public class CompetitionTask {
|
|
MailboxInfoDTO mailboxInfoDTO = emailSystemConfigService.getFromEmailInfo();
|
|
MailboxInfoDTO mailboxInfoDTO = emailSystemConfigService.getFromEmailInfo();
|
|
String receivingMailbox = emailSystemConfigService.getRecipientEmail();
|
|
String receivingMailbox = emailSystemConfigService.getRecipientEmail();
|
|
if (mailboxInfoDTO == null || StrUtil.isBlank(receivingMailbox)) {
|
|
if (mailboxInfoDTO == null || StrUtil.isBlank(receivingMailbox)) {
|
|
- log.info("未配置发件箱和收件箱,无法发送邮件");
|
|
|
|
|
|
+ log.info("未配置发件箱和收件箱,无法发送基金净值衍生指标及排名结果明细邮件");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
try {
|
|
try {
|
|
- String emailTitle = period + "_榜单_基金净值衍生指标及排名结果明细";
|
|
|
|
|
|
+ String emailTitle = period + "_基金净值衍生指标及排名结果明细";
|
|
EmailUtil.senEmail(mailboxInfoDTO, receivingMailbox, new File(filePath), emailTitle, "", emailTitle);
|
|
EmailUtil.senEmail(mailboxInfoDTO, receivingMailbox, new File(filePath), emailTitle, "", emailTitle);
|
|
log.info("基金净值衍生指标及排名结果明细表 -> 邮件已发送");
|
|
log.info("基金净值衍生指标及排名结果明细表 -> 邮件已发送");
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|