|
@@ -0,0 +1,249 @@
|
|
|
+package com.simuwang.manage.task;
|
|
|
+
|
|
|
+import com.simuwang.base.common.enums.DeletionType;
|
|
|
+import com.simuwang.base.common.enums.Frequency;
|
|
|
+import com.simuwang.base.common.enums.TaskType;
|
|
|
+import com.simuwang.base.common.enums.YesOrNoType;
|
|
|
+import com.simuwang.base.common.util.DateUtils;
|
|
|
+import com.simuwang.base.common.util.EmailUtil;
|
|
|
+import com.simuwang.base.common.util.ExcelUtil;
|
|
|
+import com.simuwang.base.common.util.StringUtil;
|
|
|
+import com.simuwang.base.mapper.daq.ContactInformationMapper;
|
|
|
+import com.simuwang.base.mapper.daq.EmailTaskInfoMapper;
|
|
|
+import com.simuwang.base.mapper.daq.FundInfoMapper;
|
|
|
+import com.simuwang.base.mapper.daq.system.SysConfigMapper;
|
|
|
+import com.simuwang.base.pojo.dos.*;
|
|
|
+import com.simuwang.base.pojo.dto.MailboxInfoDTO;
|
|
|
+import com.simuwang.manage.service.DeletionService;
|
|
|
+import com.simuwang.shiro.utils.UserUtils;
|
|
|
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import java.io.File;
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * FileName: FundDeletionTask
|
|
|
+ * Author: chenjianhua
|
|
|
+ * Date: 2024/9/18 22:43
|
|
|
+ * Description: ${DESCRIPTION}
|
|
|
+ */
|
|
|
+//@EnableScheduling
|
|
|
+@Component
|
|
|
+public class SendDeletionEmailTask {
|
|
|
+ private static final Logger log = LoggerFactory.getLogger(SendDeletionEmailTask.class);
|
|
|
+ @Autowired
|
|
|
+ private FundInfoMapper fundInfoMapper;
|
|
|
+ @Autowired
|
|
|
+ private DeletionService deletionService;
|
|
|
+ @Autowired
|
|
|
+ private EmailTaskInfoMapper emailTaskInfoMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SysConfigMapper sysConfigMapper;
|
|
|
+
|
|
|
+ @Value("${email.file.path}")
|
|
|
+ private String path;
|
|
|
+
|
|
|
+ public void sendDeletionEmail(){
|
|
|
+ EmailTaskInfoDO emailTaskInfoDO = startEmailTask(null, 1);
|
|
|
+ try{
|
|
|
+ String preDay = DateUtils.getAroundToday(-1) ;
|
|
|
+ //获取有设置净值频率的基金ID
|
|
|
+ List<FundDeletionBaseInfoDO> fundDeletionBaseInfoDOList = fundInfoMapper.getHasFrequencyFundInfo();
|
|
|
+ Map<FundDeletionBaseInfoDO,List<EmailDeletionInfoDO>> fundDeletionBaseInfoDOListMap = new HashMap<>();
|
|
|
+ for (FundDeletionBaseInfoDO fundDeletionBaseInfoDO : fundDeletionBaseInfoDOList) {
|
|
|
+ try{
|
|
|
+ String fundId = fundDeletionBaseInfoDO.getFundId();
|
|
|
+ int existsDeletion = deletionService.countFundDeletion(fundId);
|
|
|
+ if(existsDeletion == 0){
|
|
|
+ fundDeletionBaseInfoDO.setIsDeletion(YesOrNoType.NO.getInfo());
|
|
|
+ }else{
|
|
|
+ fundDeletionBaseInfoDO.setIsDeletion(YesOrNoType.YES.getInfo());
|
|
|
+ }
|
|
|
+ List<EmailDeletionInfoDO> fundDeletionDetailDOList = deletionService.selectDeletionInfoByFundId(fundId,preDay);
|
|
|
+ if(fundDeletionDetailDOList.isEmpty()){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ fundDeletionBaseInfoDOListMap.put(fundDeletionBaseInfoDO,fundDeletionDetailDOList);
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error(e.getMessage(),e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(fundDeletionBaseInfoDOList.isEmpty()){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<File> fileList = new ArrayList<>();
|
|
|
+ File fundBaseInfoFile = writeExcelFile(fundDeletionBaseInfoDOList);
|
|
|
+ fundBaseInfoFile.setWritable(true);
|
|
|
+ fundBaseInfoFile.setReadable(true);
|
|
|
+ fundBaseInfoFile.setExecutable(true);
|
|
|
+ File fundDeletionFile = writeFundDeletionFile(fundDeletionBaseInfoDOListMap);
|
|
|
+ fundDeletionFile.setWritable(true);
|
|
|
+ fundDeletionFile.setReadable(true);
|
|
|
+ fundDeletionFile.setExecutable(true);
|
|
|
+ MailboxInfoDTO dto = getFromEmailInfo();
|
|
|
+ String htmlText = sysConfigMapper.selectConfigByKey("deletion_email_body");
|
|
|
+ String emailTitle = sysConfigMapper.selectConfigByKey("deletion_email_title");
|
|
|
+ String emails = sysConfigMapper.selectConfigByKey("ppw_email");
|
|
|
+ if(StringUtil.isEmpty(emails)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(!fundDeletionBaseInfoDOListMap.keySet().isEmpty()){
|
|
|
+ fileList.add(fundDeletionFile);
|
|
|
+ }
|
|
|
+ fileList.add(fundBaseInfoFile);
|
|
|
+ EmailUtil.senEmail(dto,emails,fileList,htmlText,sysConfigMapper.selectConfigByKey("email.host")==null?"":sysConfigMapper.selectConfigByKey("email.host"),emailTitle);
|
|
|
+
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error(e.getMessage(),e);
|
|
|
+ endEmailTask(emailTaskInfoDO.getId(),-1);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ endEmailTask(emailTaskInfoDO.getId(),2);
|
|
|
+ }
|
|
|
+
|
|
|
+ private File writeFundDeletionFile(Map<FundDeletionBaseInfoDO,List<EmailDeletionInfoDO>> fundDeletionBaseInfoDOListMap) {
|
|
|
+ Map<String,List<List<String>>> values = new HashMap<>();
|
|
|
+ List<String> head = new ArrayList<>();
|
|
|
+ head.add("基金ID");
|
|
|
+ head.add("基金名称");
|
|
|
+ head.add("管理人");
|
|
|
+ head.add("净值频率");
|
|
|
+ head.add("规模频率");
|
|
|
+ head.add("估值评率");
|
|
|
+ head.add("缺失类型");
|
|
|
+ head.add("缺失日期");
|
|
|
+ head.add("渠道ID");
|
|
|
+ head.add("渠道名称");
|
|
|
+ String sheetName = "缺失明细";
|
|
|
+ List<List<String>> dataList = new ArrayList<>();
|
|
|
+ for(FundDeletionBaseInfoDO key : fundDeletionBaseInfoDOListMap.keySet()){
|
|
|
+ List<EmailDeletionInfoDO> emailDeletionInfoDOList = fundDeletionBaseInfoDOListMap.get(key);
|
|
|
+ for (EmailDeletionInfoDO emailDeletionInfoDO : emailDeletionInfoDOList) {
|
|
|
+ List<String> data = new ArrayList<>();
|
|
|
+ data.add(emailDeletionInfoDO.getFundId());
|
|
|
+ data.add(emailDeletionInfoDO.getFundName());
|
|
|
+ data.add(emailDeletionInfoDO.getCompanyName());
|
|
|
+ data.add(Frequency.getFrequencyByCode(Integer.parseInt(key.getNavFrequency())).getInfo());
|
|
|
+ data.add(Frequency.getFrequencyByCode(Integer.parseInt(key.getAssetFrequency())).getInfo());
|
|
|
+ data.add(Frequency.getFrequencyByCode(Integer.parseInt(key.getValuationFrequency())).getInfo());
|
|
|
+ data.add(DeletionType.getDeletionTypeByCode(Integer.parseInt(emailDeletionInfoDO.getDeletionType())).getInfo());
|
|
|
+ data.add(emailDeletionInfoDO.getDeletionDate());
|
|
|
+ data.add(String.valueOf(emailDeletionInfoDO.getChannelId()));
|
|
|
+ data.add(emailDeletionInfoDO.getChannelName());
|
|
|
+ dataList.add(data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ values.put(sheetName,dataList);
|
|
|
+ HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName,head,values,null);
|
|
|
+ File file = new File(path+"/"+DateUtils.format(new Date(),DateUtils.YYYYMMDDHHMMSS)+"缺失明细.xls");
|
|
|
+ if(!file.exists()){
|
|
|
+ try {
|
|
|
+ file.createNewFile();
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ wb.write(file);
|
|
|
+ wb.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ return file;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void endEmailTask(Integer id, Integer taskStatus) {
|
|
|
+ try{
|
|
|
+ EmailTaskInfoDO emailTaskInfoDO = new EmailTaskInfoDO();
|
|
|
+ emailTaskInfoDO.setId(id);
|
|
|
+ emailTaskInfoDO.setTaskStatus(taskStatus);
|
|
|
+ emailTaskInfoDO.setUpdateTime(DateUtils.getNowDate());
|
|
|
+ emailTaskInfoDO.setEndTime(DateUtils.getNowDate());
|
|
|
+ emailTaskInfoMapper.updateTaskStatusById(emailTaskInfoDO);
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error(e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private MailboxInfoDTO getFromEmailInfo(){
|
|
|
+ MailboxInfoDTO dto = new MailboxInfoDTO();
|
|
|
+ dto.setAccount(sysConfigMapper.selectConfigByKey("sender.email"));
|
|
|
+ dto.setProtocol(sysConfigMapper.selectConfigByKey("sender.protocol"));
|
|
|
+ dto.setPassword(sysConfigMapper.selectConfigByKey("sender.password"));
|
|
|
+ dto.setPort(sysConfigMapper.selectConfigByKey("sender.port"));
|
|
|
+ dto.setHost(sysConfigMapper.selectConfigByKey("sender.host"));
|
|
|
+ return dto;
|
|
|
+ }
|
|
|
+ private EmailTaskInfoDO startEmailTask(String email,Integer taskStatus) {
|
|
|
+ EmailTaskInfoDO emailTaskInfoDO = new EmailTaskInfoDO();
|
|
|
+ try{
|
|
|
+ emailTaskInfoDO.setTaskName(TaskType.DELETION_COMPUTE.getInfo());
|
|
|
+ emailTaskInfoDO.setTaskType(TaskType.DELETION_COMPUTE.getType());
|
|
|
+ emailTaskInfoDO.setTaskStatus(taskStatus);
|
|
|
+ emailTaskInfoDO.setStartTime(DateUtils.getNowDate());
|
|
|
+ emailTaskInfoDO.setIsvalid(1);
|
|
|
+ emailTaskInfoDO.setEmail(email);
|
|
|
+ emailTaskInfoDO.setCreateTime(DateUtils.getNowDate());
|
|
|
+ emailTaskInfoDO.setUpdateTime(DateUtils.getNowDate());
|
|
|
+ try{
|
|
|
+ emailTaskInfoDO.setCreatorId(UserUtils.getLoginUser().getUserId());
|
|
|
+ emailTaskInfoDO.setUpdaterId(UserUtils.getLoginUser().getUserId());
|
|
|
+ }catch (Exception e){
|
|
|
+ emailTaskInfoDO.setCreatorId(1);
|
|
|
+ emailTaskInfoDO.setUpdaterId(1);
|
|
|
+ }
|
|
|
+ emailTaskInfoMapper.insert(emailTaskInfoDO);
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error(e.getMessage());
|
|
|
+ }
|
|
|
+ return emailTaskInfoDO;
|
|
|
+ }
|
|
|
+
|
|
|
+ private File writeExcelFile(List<FundDeletionBaseInfoDO> emailDeletionInfoDOS) {
|
|
|
+ Map<String,List<List<String>>> values = new HashMap<>();
|
|
|
+ List<String> head = new ArrayList<>();
|
|
|
+ head.add("基金ID");
|
|
|
+ head.add("基金名称");
|
|
|
+ head.add("管理人");
|
|
|
+ head.add("净值频率");
|
|
|
+ head.add("规模频率");
|
|
|
+ head.add("估值评率");
|
|
|
+ head.add("是否缺失");
|
|
|
+ String sheetName = "缺失产品清单";
|
|
|
+ List<List<String>> dataList = new ArrayList<>();
|
|
|
+ for(FundDeletionBaseInfoDO dto : emailDeletionInfoDOS){
|
|
|
+ List<String> data = new ArrayList<>();
|
|
|
+ data.add(dto.getFundId());
|
|
|
+ data.add(dto.getFundName());
|
|
|
+ data.add(dto.getCompanyName());
|
|
|
+ data.add(Frequency.getFrequencyByCode(Integer.parseInt(dto.getNavFrequency())).getInfo());
|
|
|
+ data.add(Frequency.getFrequencyByCode(Integer.parseInt(dto.getAssetFrequency())).getInfo());
|
|
|
+ data.add(Frequency.getFrequencyByCode(Integer.parseInt(dto.getValuationFrequency())).getInfo());
|
|
|
+ data.add(dto.getIsDeletion());
|
|
|
+ dataList.add(data);
|
|
|
+ }
|
|
|
+ values.put(sheetName,dataList);
|
|
|
+ HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName,head,values,null);
|
|
|
+ File file = new File(path+"/"+DateUtils.format(new Date(),DateUtils.YYYYMMDDHHMMSS)+"缺失产品清单.xls");
|
|
|
+ if(!file.exists()){
|
|
|
+ try {
|
|
|
+ file.createNewFile();
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ wb.write(file);
|
|
|
+ wb.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ return file;
|
|
|
+ }
|
|
|
+}
|