123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813 |
- package com.simuwang.manage.service.impl;
- import com.simuwang.base.common.enums.DeletionType;
- import com.simuwang.base.common.enums.Frequency;
- import com.simuwang.base.common.enums.OpenStatusType;
- import com.simuwang.base.common.enums.ResultCode;
- 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.*;
- import com.simuwang.base.mapper.daq.system.SysConfigMapper;
- import com.simuwang.base.pojo.dos.*;
- import com.simuwang.base.pojo.dto.EmailInfoDTO;
- import com.simuwang.base.pojo.dto.MailboxInfoDTO;
- import com.simuwang.base.pojo.vo.CompanyEmailConfigVO;
- import com.simuwang.manage.service.CompanyEmailConfigService;
- import com.simuwang.manage.service.ContactInformationService;
- import com.simuwang.shiro.utils.UserUtils;
- import com.smppw.common.pojo.ResultVo;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import org.apache.poi.xssf.usermodel.XSSFWorkbook;
- 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.scheduling.annotation.Async;
- import org.springframework.stereotype.Service;
- import org.springframework.web.multipart.MultipartFile;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.*;
- import java.util.stream.Collectors;
- /**
- * FileName: CompanyEmailConfigServiceImpl
- * Author: chenjianhua
- * Date: 2024/9/7 12:55
- * Description: ${DESCRIPTION}
- */
- @Service
- public class CompanyEmailConfigServiceImpl implements CompanyEmailConfigService {
- @Autowired
- private CompanyEmailConfigMapper companyEmailConfigMapper;
- @Autowired
- private CompanyEmailSendHistoryMapper companyEmailSendHistoryMapper;
- @Autowired
- private FundInfoMapper fundInfoMapper;
- @Autowired
- private DeletionInfoMapper deletionInfoMapper;
- @Autowired
- private DeletionTaskLogInfoMapper deletionTaskLogInfoMapper;
- @Autowired
- private EmailTemplateMapper emailTemplateMapper;
- @Autowired
- private SysConfigMapper sysConfigMapper;
- private static Logger logger = LoggerFactory.getLogger(CompanyEmailConfigServiceImpl.class);
- @Value("${email.file.path}")
- private String path;
- @Autowired
- private FundReportFrequencyMapper fundReportFrequencyMapper;
- @Autowired
- private NavMapper navMapper;
- @Autowired
- private AssetMapper assetMapper;
- private static final String DELETION_TEMPLATE_CODE = "DATA_MISS";
- private static final String DISTRIBUTION_DELETION_TEMPLATE_CODE = "DISTRIBUTION_MISS";
- @Autowired
- private ContactInformationServiceImpl contactInformationServiceImpl;
- @Autowired
- private ContactInformationService contactInformationService;
- @Override
- public ResultVo saveCompanyEmailConfig(List<CompanyEmailConfigVO> companyEmailConfigVOS) {
- ResultVo vo = new ResultVo(com.smppw.common.pojo.enums.status.ResultCode.SAVE_SUCCESS);
- vo.setData(true);
- StringBuffer msg = new StringBuffer();
- try{
- for(CompanyEmailConfigVO emailConfigVO : companyEmailConfigVOS){
- CompanyEmailConfigDO oldEmailConfigDO = companyEmailConfigMapper.selectEmailConfig(emailConfigVO.getCompanyId(),emailConfigVO.getEmail());
- if(!StringUtil.isNull(oldEmailConfigDO) && emailConfigVO.getId() == null){
- msg.append(emailConfigVO.getCompanyName()+"已存在邮箱"+emailConfigVO.getEmail()).append(",");
- }
- if(!StringUtil.isNull(oldEmailConfigDO) && emailConfigVO.getId() != null){
- if(!oldEmailConfigDO.getId().equals(emailConfigVO.getId())){
- msg.append(emailConfigVO.getCompanyName()+"已存在邮箱"+emailConfigVO.getEmail()).append(",");
- }
- }
- }
- if(StringUtil.isNotEmpty(msg.toString())){
- vo.setMsg(msg.toString().substring(0,msg.length()-1));
- vo.setData(false);
- return vo;
- }
- for(CompanyEmailConfigVO emailConfigVO : companyEmailConfigVOS){
- CompanyEmailConfigDO emailConfigDO = new CompanyEmailConfigDO();
- emailConfigDO.setCompanyId(emailConfigVO.getCompanyId());
- emailConfigDO.setCompanyName(emailConfigVO.getCompanyName());
- emailConfigDO.setEmail(emailConfigVO.getEmail());
- emailConfigDO.setOpenStatus(emailConfigVO.getOpenStatus());
- emailConfigDO.setRemark(emailConfigVO.getSendRemark());
- emailConfigDO.setCreatorId(UserUtils.getLoginUser().getUserId());
- emailConfigDO.setCreatorId(UserUtils.getLoginUser().getUserId());
- emailConfigDO.setIsvalid(1);
- emailConfigDO.setUpdateTime(new Date());
- if(emailConfigVO.getId() != null){
- emailConfigDO.setId(emailConfigVO.getId());
- companyEmailConfigMapper.updateCompanyEmailConfig(emailConfigDO);
- }else{
- emailConfigDO.setCreateTime(new Date());
- companyEmailConfigMapper.saveCompanyEmailConfig(emailConfigDO);
- }
- }
- }catch (Exception e){
- }
- return vo;
- }
- @Override
- public void deleteCompanyEmailConfig(Integer id) {
- CompanyEmailConfigDO configDO = companyEmailConfigMapper.selectById(id);
- if (configDO != null) {
- configDO.setIsvalid(0);
- configDO.setUpdateTime(new Date());
- configDO.setUpdaterId(UserUtils.getLoginUser().getUserId());
- companyEmailConfigMapper.updateById(configDO);
- }
- }
- @Override
- public void updateCompanyEmailConfig(CompanyEmailConfigVO companyEmailConfigVO) {
- CompanyEmailConfigDO configDO = companyEmailConfigMapper.selectCompanyEmailConfigById(companyEmailConfigVO.getId());
- if(configDO != null){
- configDO.setEmail(companyEmailConfigVO.getEmail());
- configDO.setCompanyId(companyEmailConfigVO.getCompanyId());
- configDO.setCompanyName(companyEmailConfigVO.getCompanyName());
- configDO.setUpdateTime(new Date());
- configDO.setUpdaterId(UserUtils.getLoginUser().getUserId());
- companyEmailConfigMapper.updateCompanyEmailConfig(configDO);
- }
- }
- @Override
- @Async
- public void sendCompanyEmail(List<Integer> idList) {
- List<ContactInformationDO> configDOList = contactInformationService.selectByIdList(idList);
- Map<String,List<ContactInformationDO>> companyListMap = configDOList.stream().collect(Collectors.groupingBy(e -> e.getCompanyId()));
- for(String companyId : companyListMap.keySet()){
- StringBuffer emails = new StringBuffer();
- List<ContactInformationDO> configDOS = companyListMap.get(companyId);
- for(ContactInformationDO configDO: configDOS){
- emails.append(configDO.getContactEmail()).append(";");
- }
- //把缺失数据的邮件发送到该公司名下的邮箱地址
- sendNavAssetEmail(companyId,emails.toString());
- }
- }
- private void sendNavAssetEmail(String companyId, String emails) {
- List<String> fundIdList = fundInfoMapper.getFundIdByCompanyId(companyId);
- List<EmailDeletionInfoDO> emailDeletionInfoDOS = new ArrayList<>();
- for (String fundId : fundIdList) {
- getNavNotRemarkDeletion(fundId,emailDeletionInfoDOS);
- getAssetNotRemarkDeletion(fundId,emailDeletionInfoDOS);
- }
- if(emailDeletionInfoDOS.size() > 0){
- EmailTemplateDO emailTemplateDO = emailTemplateMapper.selectByCode(DELETION_TEMPLATE_CODE,1);
- if(emailTemplateDO == null){
- return;
- }
- String emailTitle = emailTemplateDO.getEmailTitle();
- String emailBody = emailTemplateDO.getEmailBody().replaceAll("\r\n", "<br/>").replaceAll("\n", "<br/>");
- try {
- //将数据写入excel文件
- File file = writeExcelFile(emailDeletionInfoDOS);
- file.setWritable(true);
- file.setReadable(true);
- file.setExecutable(true);
- MailboxInfoDTO dto = getFromEmailInfo();
- try{
- EmailUtil.senEmail(dto,emails,List.of(file),emailBody,sysConfigMapper.selectConfigByKey("email.host")==null?"":sysConfigMapper.selectConfigByKey("email.host"),emailTitle);
- }catch (Exception e){
- //有些是因为被识别为垃圾邮件导致的报错,需要在发送一次
- logger.error(e.getMessage(),e);
- EmailUtil.senEmail(dto,emails,List.of(file),emailBody,sysConfigMapper.selectConfigByKey("email.host")==null?"":sysConfigMapper.selectConfigByKey("email.host"),emailTitle);
- }
- //发送成功之后修改数据为已发送
- deletionInfoMapper.updateSendStatusByFundId(fundIdList);
- //写入发送历史
- String[] emailList = emails.split(";");
- for(String email : emailList){
- saveCompanyEmailSendHistory(companyId,email,emailTitle,1,ResultCode.SEND_SUCCESS.getMsg());
- }
- } catch (Exception e) {
- String[] emailList = emails.split(";");
- for(String email : emailList){
- saveCompanyEmailSendHistory(companyId,email,emailTitle,0,e.getMessage());
- }
- logger.error(e.getMessage(),e);
- }
- }
- }
- private void getAssetNotRemarkDeletion(String fundId, List<EmailDeletionInfoDO> emailDeletionInfoDOS) {
- List<EmailDeletionInfoDO> fundEmailDeletionInfoDOList = deletionInfoMapper.selectAssetNotRemarkDeletionInfoByFundId(fundId);
- if(fundEmailDeletionInfoDOList.isEmpty()){
- return;
- }
- fundEmailDeletionInfoDOList = fundEmailDeletionInfoDOList.stream().filter(e -> e.getChannelId() != null).collect(Collectors.toList());
- Map<Integer, List<EmailDeletionInfoDO>> channelDeletionMap = fundEmailDeletionInfoDOList.stream().collect(Collectors.groupingBy(EmailDeletionInfoDO::getChannelId));
- FundReportFrequencyDO fundReportFrequencyDO = fundReportFrequencyMapper.getFrequencyByFundId(fundId);
- if(fundReportFrequencyDO == null){
- return;
- }
- for (Integer channelId : channelDeletionMap.keySet()) {
- List<EmailDeletionInfoDO> channelEmailDeletionInfoDOList = channelDeletionMap.get(channelId);
- if(channelEmailDeletionInfoDOList.isEmpty()){
- continue;
- }
- //根据渠道ID和基金ID去查最新的净值日期
- Date priceDate = assetMapper.selectMaxPriceDate(channelId,fundId);
- if(priceDate == null){
- FundInfoDO fundInformationDO = fundInfoMapper.searchFundDetail(fundId);
- if(fundInformationDO != null && fundInformationDO.getInceptionDate() == null){
- continue;
- }
- try{
- priceDate = DateUtils.parse(fundInformationDO.getInceptionDate(),"yyyy-MM-dd");
- }catch (Exception e){
- logger.error(e.getMessage(),e);
- }
- }
- if(Frequency.DAY.getCode().equals(fundReportFrequencyDO.getAssetFrequency())){
- List<DeletionTaskLogInfoDO> deletionTaskLogInfoDOList = deletionTaskLogInfoMapper.selectDeletionTaskLogInfoDO(fundId,channelId,fundReportFrequencyDO.getNavFrequency(),DateUtils.format(priceDate,"yyyy-MM-dd"),DeletionType.NAV_DELETION.getCode());
- //最新净值不再更新,超过五次就不再发送
- if(deletionTaskLogInfoDOList.size() >= 5){
- continue;
- }
- DeletionTaskLogInfoDO deletionTaskLogInfoDO = new DeletionTaskLogInfoDO();
- deletionTaskLogInfoDO.setChannelId(channelId);
- deletionTaskLogInfoDO.setFundId(fundId);
- deletionTaskLogInfoDO.setIsvalid(1);
- deletionTaskLogInfoDO.setCreateTime(new Date());
- deletionTaskLogInfoDO.setUpdateTime(new Date());
- deletionTaskLogInfoDO.setPriceDate(DateUtils.format(priceDate,"yyyy-MM-dd"));
- deletionTaskLogInfoDO.setFrequency(fundReportFrequencyDO.getNavFrequency());
- deletionTaskLogInfoDO.setDeletionType(DeletionType.ASSET_DELETION.getCode());
- deletionTaskLogInfoMapper.saveDeletionTaskLogInfoDO(deletionTaskLogInfoDO);
- }
- if(Frequency.WEEK.getCode().equals(fundReportFrequencyDO.getAssetFrequency())){
- List<DeletionTaskLogInfoDO> deletionTaskLogInfoDOList = deletionTaskLogInfoMapper.selectDeletionTaskLogInfoDO(fundId,channelId,fundReportFrequencyDO.getNavFrequency(),DateUtils.format(priceDate,"yyyy-MM-dd"),DeletionType.NAV_DELETION.getCode());
- //最新净值不再更新,超过3次就不再发送
- if(deletionTaskLogInfoDOList.size() >= 3){
- continue;
- }
- DeletionTaskLogInfoDO deletionTaskLogInfoDO = new DeletionTaskLogInfoDO();
- deletionTaskLogInfoDO.setChannelId(channelId);
- deletionTaskLogInfoDO.setFundId(fundId);
- deletionTaskLogInfoDO.setIsvalid(1);
- deletionTaskLogInfoDO.setCreateTime(new Date());
- deletionTaskLogInfoDO.setUpdateTime(new Date());
- deletionTaskLogInfoDO.setPriceDate(DateUtils.format(priceDate,"yyyy-MM-dd"));
- deletionTaskLogInfoDO.setFrequency(fundReportFrequencyDO.getNavFrequency());
- deletionTaskLogInfoDO.setDeletionType(DeletionType.ASSET_DELETION.getCode());
- deletionTaskLogInfoMapper.saveDeletionTaskLogInfoDO(deletionTaskLogInfoDO);
- }
- if(Frequency.MONTH.getCode().equals(fundReportFrequencyDO.getAssetFrequency())){
- List<DeletionTaskLogInfoDO> deletionTaskLogInfoDOList = deletionTaskLogInfoMapper.selectDeletionTaskLogInfoDO(fundId,channelId,fundReportFrequencyDO.getNavFrequency(),DateUtils.format(priceDate,"yyyy-MM-dd"),DeletionType.NAV_DELETION.getCode());
- //最新净值不再更新,超过1次就不再发送
- if(deletionTaskLogInfoDOList.size() >= 1){
- continue;
- }
- DeletionTaskLogInfoDO deletionTaskLogInfoDO = new DeletionTaskLogInfoDO();
- deletionTaskLogInfoDO.setChannelId(channelId);
- deletionTaskLogInfoDO.setFundId(fundId);
- deletionTaskLogInfoDO.setIsvalid(1);
- deletionTaskLogInfoDO.setCreateTime(new Date());
- deletionTaskLogInfoDO.setUpdateTime(new Date());
- deletionTaskLogInfoDO.setPriceDate(DateUtils.format(priceDate,"yyyy-MM-dd"));
- deletionTaskLogInfoDO.setFrequency(fundReportFrequencyDO.getNavFrequency());
- deletionTaskLogInfoDO.setDeletionType(DeletionType.ASSET_DELETION.getCode());
- deletionTaskLogInfoMapper.saveDeletionTaskLogInfoDO(deletionTaskLogInfoDO);
- }
- for(EmailDeletionInfoDO infoDO : channelEmailDeletionInfoDOList){
- infoDO.setDeletionType(DeletionType.getDeletionTypeByCode(Integer.valueOf(infoDO.getDeletionType())).getInfo());
- }
- emailDeletionInfoDOS.addAll(channelEmailDeletionInfoDOList);
- }
- }
- private void getNavNotRemarkDeletion(String fundId, List<EmailDeletionInfoDO> emailDeletionInfoDOS) {
- List<EmailDeletionInfoDO> fundEmailDeletionInfoDOList = deletionInfoMapper.selectNavNotRemarkDeletionInfoByFundId(fundId);
- if(fundEmailDeletionInfoDOList.isEmpty()){
- return;
- }
- fundEmailDeletionInfoDOList = fundEmailDeletionInfoDOList.stream().filter(e -> e.getChannelId() != null).collect(Collectors.toList());
- Map<Integer, List<EmailDeletionInfoDO>> channelDeletionMap = fundEmailDeletionInfoDOList.stream().collect(Collectors.groupingBy(EmailDeletionInfoDO::getChannelId));
- FundReportFrequencyDO fundReportFrequencyDO = fundReportFrequencyMapper.getFrequencyByFundId(fundId);
- if(fundReportFrequencyDO == null){
- return;
- }
- for (Integer channelId : channelDeletionMap.keySet()) {
- List<EmailDeletionInfoDO> channelEmailDeletionInfoDOList = channelDeletionMap.get(channelId);
- if(channelEmailDeletionInfoDOList.isEmpty()){
- continue;
- }
- //根据渠道ID和基金ID去查最新的净值日期
- Date priceDate = navMapper.selectMaxPriceDate(channelId,fundId);
- if(priceDate == null){
- FundInfoDO fundInformationDO = fundInfoMapper.searchFundDetail(fundId);
- if(fundInformationDO != null && fundInformationDO.getInceptionDate() == null){
- continue;
- }
- try{
- priceDate = DateUtils.parse(fundInformationDO.getInceptionDate(),"yyyy-MM-dd");
- }catch (Exception e){
- logger.error(e.getMessage(),e);
- }
- }
- if(Frequency.DAY.getCode().equals(fundReportFrequencyDO.getNavFrequency())){
- List<DeletionTaskLogInfoDO> deletionTaskLogInfoDOList = deletionTaskLogInfoMapper.selectDeletionTaskLogInfoDO(fundId,channelId,fundReportFrequencyDO.getNavFrequency(),DateUtils.format(priceDate,"yyyy-MM-dd"),DeletionType.NAV_DELETION.getCode());
- //最新净值不再更新,超过五次就不再发送
- if(deletionTaskLogInfoDOList.size() >= 5){
- continue;
- }
- DeletionTaskLogInfoDO deletionTaskLogInfoDO = new DeletionTaskLogInfoDO();
- deletionTaskLogInfoDO.setChannelId(channelId);
- deletionTaskLogInfoDO.setFundId(fundId);
- deletionTaskLogInfoDO.setIsvalid(1);
- deletionTaskLogInfoDO.setCreateTime(new Date());
- deletionTaskLogInfoDO.setUpdateTime(new Date());
- deletionTaskLogInfoDO.setPriceDate(DateUtils.format(priceDate,"yyyy-MM-dd"));
- deletionTaskLogInfoDO.setFrequency(fundReportFrequencyDO.getNavFrequency());
- deletionTaskLogInfoDO.setDeletionType(DeletionType.NAV_DELETION.getCode());
- deletionTaskLogInfoMapper.saveDeletionTaskLogInfoDO(deletionTaskLogInfoDO);
- }
- if(Frequency.WEEK.getCode().equals(fundReportFrequencyDO.getNavFrequency())){
- List<DeletionTaskLogInfoDO> deletionTaskLogInfoDOList = deletionTaskLogInfoMapper.selectDeletionTaskLogInfoDO(fundId,channelId,fundReportFrequencyDO.getNavFrequency(),DateUtils.format(priceDate,"yyyy-MM-dd"),DeletionType.NAV_DELETION.getCode());
- //最新净值不再更新,超过3次就不再发送
- if(deletionTaskLogInfoDOList.size() >= 3){
- continue;
- }
- DeletionTaskLogInfoDO deletionTaskLogInfoDO = new DeletionTaskLogInfoDO();
- deletionTaskLogInfoDO.setChannelId(channelId);
- deletionTaskLogInfoDO.setFundId(fundId);
- deletionTaskLogInfoDO.setIsvalid(1);
- deletionTaskLogInfoDO.setCreateTime(new Date());
- deletionTaskLogInfoDO.setUpdateTime(new Date());
- deletionTaskLogInfoDO.setPriceDate(DateUtils.format(priceDate,"yyyy-MM-dd"));
- deletionTaskLogInfoDO.setFrequency(fundReportFrequencyDO.getNavFrequency());
- deletionTaskLogInfoDO.setDeletionType(DeletionType.NAV_DELETION.getCode());
- deletionTaskLogInfoMapper.saveDeletionTaskLogInfoDO(deletionTaskLogInfoDO);
- }
- if(Frequency.MONTH.getCode().equals(fundReportFrequencyDO.getNavFrequency())){
- List<DeletionTaskLogInfoDO> deletionTaskLogInfoDOList = deletionTaskLogInfoMapper.selectDeletionTaskLogInfoDO(fundId,channelId,fundReportFrequencyDO.getNavFrequency(),DateUtils.format(priceDate,"yyyy-MM-dd"),DeletionType.NAV_DELETION.getCode());
- //最新净值不再更新,超过1次就不再发送
- if(deletionTaskLogInfoDOList.size() >= 1){
- continue;
- }
- DeletionTaskLogInfoDO deletionTaskLogInfoDO = new DeletionTaskLogInfoDO();
- deletionTaskLogInfoDO.setChannelId(channelId);
- deletionTaskLogInfoDO.setFundId(fundId);
- deletionTaskLogInfoDO.setIsvalid(1);
- deletionTaskLogInfoDO.setCreateTime(new Date());
- deletionTaskLogInfoDO.setUpdateTime(new Date());
- deletionTaskLogInfoDO.setPriceDate(DateUtils.format(priceDate,"yyyy-MM-dd"));
- deletionTaskLogInfoDO.setFrequency(fundReportFrequencyDO.getNavFrequency());
- deletionTaskLogInfoDO.setDeletionType(DeletionType.NAV_DELETION.getCode());
- deletionTaskLogInfoMapper.saveDeletionTaskLogInfoDO(deletionTaskLogInfoDO);
- }
- for(EmailDeletionInfoDO infoDO : channelEmailDeletionInfoDOList){
- infoDO.setDeletionType(DeletionType.getDeletionTypeByCode(Integer.valueOf(infoDO.getDeletionType())).getInfo());
- }
- emailDeletionInfoDOS.addAll(channelEmailDeletionInfoDOList);
- }
- }
- @Override
- //邮件校验处理
- public void sendEmail(String companyId, String emails) {
- List<String> fundIdList = fundInfoMapper.getFundIdByCompanyId(companyId);
- List<EmailDeletionInfoDO> emailDeletionInfoDOS = new ArrayList<>();
- for (String fundId : fundIdList) {
- getNavDeletion(fundId,emailDeletionInfoDOS);
- getAssetDeletion(fundId,emailDeletionInfoDOS);
- }
- if(emailDeletionInfoDOS.size() > 0){
- EmailTemplateDO emailTemplateDO = emailTemplateMapper.selectByCode(DELETION_TEMPLATE_CODE,1);
- if(emailTemplateDO == null){
- return;
- }
- String emailTitle = emailTemplateDO.getEmailTitle();
- String emailBody = emailTemplateDO.getEmailBody().replaceAll("\r\n", "<br/>").replaceAll("\n", "<br/>");
- try {
- //将数据写入excel文件
- File file = writeExcelFile(emailDeletionInfoDOS);
- file.setWritable(true);
- file.setReadable(true);
- file.setExecutable(true);
- MailboxInfoDTO dto = getFromEmailInfo();
- try{
- EmailUtil.senEmail(dto,emails,List.of(file),emailBody,sysConfigMapper.selectConfigByKey("email.host")==null?"":sysConfigMapper.selectConfigByKey("email.host"),emailTitle);
- }catch (Exception e){
- //有些是因为被识别为垃圾邮件导致的报错,需要在发送一次
- logger.error(e.getMessage(),e);
- EmailUtil.senEmail(dto,emails,List.of(file),emailBody,sysConfigMapper.selectConfigByKey("email.host")==null?"":sysConfigMapper.selectConfigByKey("email.host"),emailTitle);
- }
- //发送成功之后修改数据为已发送
- deletionInfoMapper.updateSendStatusByFundId(fundIdList);
- //写入发送历史
- String[] emailList = emails.split(";");
- for(String email : emailList){
- saveCompanyEmailSendHistory(companyId,email,emailTitle,1,ResultCode.SEND_SUCCESS.getMsg());
- }
- } catch (Exception e) {
- String[] emailList = emails.split(";");
- for(String email : emailList){
- saveCompanyEmailSendHistory(companyId,email,emailTitle,0,e.getMessage());
- }
- logger.error(e.getMessage(),e);
- }
- }
- }
- private void getNavDeletion(String fundId, List<EmailDeletionInfoDO> emailDeletionInfoDOS) {
- List<EmailDeletionInfoDO> fundEmailDeletionInfoDOList = deletionInfoMapper.selectNavDeletionInfoByFundId(fundId);
- if(fundEmailDeletionInfoDOList.isEmpty()){
- return;
- }
- fundEmailDeletionInfoDOList = fundEmailDeletionInfoDOList.stream().filter(e -> e.getChannelId() != null).collect(Collectors.toList());
- Map<Integer, List<EmailDeletionInfoDO>> channelDeletionMap = fundEmailDeletionInfoDOList.stream().collect(Collectors.groupingBy(EmailDeletionInfoDO::getChannelId));
- FundReportFrequencyDO fundReportFrequencyDO = fundReportFrequencyMapper.getFrequencyByFundId(fundId);
- if(fundReportFrequencyDO == null){
- return;
- }
- for (Integer channelId : channelDeletionMap.keySet()) {
- List<EmailDeletionInfoDO> channelEmailDeletionInfoDOList = channelDeletionMap.get(channelId);
- if(channelEmailDeletionInfoDOList.isEmpty()){
- continue;
- }
- //根据渠道ID和基金ID去查最新的净值日期
- Date priceDate = navMapper.selectMaxPriceDate(channelId,fundId);
- if(priceDate == null){
- FundInfoDO fundInformationDO = fundInfoMapper.searchFundDetail(fundId);
- if(fundInformationDO != null && fundInformationDO.getInceptionDate() == null){
- continue;
- }
- try{
- priceDate = DateUtils.parse(fundInformationDO.getInceptionDate(),"yyyy-MM-dd");
- }catch (Exception e){
- logger.error(e.getMessage(),e);
- }
- }
- if(Frequency.DAY.getCode().equals(fundReportFrequencyDO.getNavFrequency())){
- List<DeletionTaskLogInfoDO> deletionTaskLogInfoDOList = deletionTaskLogInfoMapper.selectDeletionTaskLogInfoDO(fundId,channelId,fundReportFrequencyDO.getNavFrequency(),DateUtils.format(priceDate,"yyyy-MM-dd"),DeletionType.NAV_DELETION.getCode());
- //最新净值不再更新,超过五次就不再发送
- if(deletionTaskLogInfoDOList.size() >= 5){
- continue;
- }
- DeletionTaskLogInfoDO deletionTaskLogInfoDO = new DeletionTaskLogInfoDO();
- deletionTaskLogInfoDO.setChannelId(channelId);
- deletionTaskLogInfoDO.setFundId(fundId);
- deletionTaskLogInfoDO.setIsvalid(1);
- deletionTaskLogInfoDO.setCreateTime(new Date());
- deletionTaskLogInfoDO.setUpdateTime(new Date());
- deletionTaskLogInfoDO.setPriceDate(DateUtils.format(priceDate,"yyyy-MM-dd"));
- deletionTaskLogInfoDO.setFrequency(fundReportFrequencyDO.getNavFrequency());
- deletionTaskLogInfoDO.setDeletionType(DeletionType.NAV_DELETION.getCode());
- deletionTaskLogInfoMapper.saveDeletionTaskLogInfoDO(deletionTaskLogInfoDO);
- }
- if(Frequency.WEEK.getCode().equals(fundReportFrequencyDO.getNavFrequency())){
- List<DeletionTaskLogInfoDO> deletionTaskLogInfoDOList = deletionTaskLogInfoMapper.selectDeletionTaskLogInfoDO(fundId,channelId,fundReportFrequencyDO.getNavFrequency(),DateUtils.format(priceDate,"yyyy-MM-dd"),DeletionType.NAV_DELETION.getCode());
- //最新净值不再更新,超过3次就不再发送
- if(deletionTaskLogInfoDOList.size() >= 3){
- continue;
- }
- DeletionTaskLogInfoDO deletionTaskLogInfoDO = new DeletionTaskLogInfoDO();
- deletionTaskLogInfoDO.setChannelId(channelId);
- deletionTaskLogInfoDO.setFundId(fundId);
- deletionTaskLogInfoDO.setIsvalid(1);
- deletionTaskLogInfoDO.setCreateTime(new Date());
- deletionTaskLogInfoDO.setUpdateTime(new Date());
- deletionTaskLogInfoDO.setPriceDate(DateUtils.format(priceDate,"yyyy-MM-dd"));
- deletionTaskLogInfoDO.setFrequency(fundReportFrequencyDO.getNavFrequency());
- deletionTaskLogInfoDO.setDeletionType(DeletionType.NAV_DELETION.getCode());
- deletionTaskLogInfoMapper.saveDeletionTaskLogInfoDO(deletionTaskLogInfoDO);
- }
- if(Frequency.MONTH.getCode().equals(fundReportFrequencyDO.getNavFrequency())){
- List<DeletionTaskLogInfoDO> deletionTaskLogInfoDOList = deletionTaskLogInfoMapper.selectDeletionTaskLogInfoDO(fundId,channelId,fundReportFrequencyDO.getNavFrequency(),DateUtils.format(priceDate,"yyyy-MM-dd"),DeletionType.NAV_DELETION.getCode());
- //最新净值不再更新,超过1次就不再发送
- if(deletionTaskLogInfoDOList.size() >= 1){
- continue;
- }
- DeletionTaskLogInfoDO deletionTaskLogInfoDO = new DeletionTaskLogInfoDO();
- deletionTaskLogInfoDO.setChannelId(channelId);
- deletionTaskLogInfoDO.setFundId(fundId);
- deletionTaskLogInfoDO.setIsvalid(1);
- deletionTaskLogInfoDO.setCreateTime(new Date());
- deletionTaskLogInfoDO.setUpdateTime(new Date());
- deletionTaskLogInfoDO.setPriceDate(DateUtils.format(priceDate,"yyyy-MM-dd"));
- deletionTaskLogInfoDO.setFrequency(fundReportFrequencyDO.getNavFrequency());
- deletionTaskLogInfoDO.setDeletionType(DeletionType.NAV_DELETION.getCode());
- deletionTaskLogInfoMapper.saveDeletionTaskLogInfoDO(deletionTaskLogInfoDO);
- }
- for(EmailDeletionInfoDO infoDO : channelEmailDeletionInfoDOList){
- infoDO.setDeletionType(DeletionType.getDeletionTypeByCode(Integer.valueOf(infoDO.getDeletionType())).getInfo());
- }
- emailDeletionInfoDOS.addAll(channelEmailDeletionInfoDOList);
- }
- }
- private void getAssetDeletion(String fundId, List<EmailDeletionInfoDO> emailDeletionInfoDOS) {
- List<EmailDeletionInfoDO> fundEmailDeletionInfoDOList = deletionInfoMapper.selectAssetDeletionInfoByFundId(fundId);
- if(fundEmailDeletionInfoDOList.isEmpty()){
- return;
- }
- fundEmailDeletionInfoDOList = fundEmailDeletionInfoDOList.stream().filter(e -> e.getChannelId() != null).collect(Collectors.toList());
- Map<Integer, List<EmailDeletionInfoDO>> channelDeletionMap = fundEmailDeletionInfoDOList.stream().collect(Collectors.groupingBy(EmailDeletionInfoDO::getChannelId));
- FundReportFrequencyDO fundReportFrequencyDO = fundReportFrequencyMapper.getFrequencyByFundId(fundId);
- if(fundReportFrequencyDO == null){
- return;
- }
- for (Integer channelId : channelDeletionMap.keySet()) {
- List<EmailDeletionInfoDO> channelEmailDeletionInfoDOList = channelDeletionMap.get(channelId);
- if(channelEmailDeletionInfoDOList.isEmpty()){
- continue;
- }
- //根据渠道ID和基金ID去查最新的净值日期
- Date priceDate = assetMapper.selectMaxPriceDate(channelId,fundId);
- if(priceDate == null){
- FundInfoDO fundInformationDO = fundInfoMapper.searchFundDetail(fundId);
- if(fundInformationDO != null && fundInformationDO.getInceptionDate() == null){
- continue;
- }
- try{
- priceDate = DateUtils.parse(fundInformationDO.getInceptionDate(),"yyyy-MM-dd");
- }catch (Exception e){
- logger.error(e.getMessage(),e);
- }
- }
- if(Frequency.DAY.getCode().equals(fundReportFrequencyDO.getAssetFrequency())){
- List<DeletionTaskLogInfoDO> deletionTaskLogInfoDOList = deletionTaskLogInfoMapper.selectDeletionTaskLogInfoDO(fundId,channelId,fundReportFrequencyDO.getNavFrequency(),DateUtils.format(priceDate,"yyyy-MM-dd"),DeletionType.NAV_DELETION.getCode());
- //最新净值不再更新,超过五次就不再发送
- if(deletionTaskLogInfoDOList.size() >= 5){
- continue;
- }
- DeletionTaskLogInfoDO deletionTaskLogInfoDO = new DeletionTaskLogInfoDO();
- deletionTaskLogInfoDO.setChannelId(channelId);
- deletionTaskLogInfoDO.setFundId(fundId);
- deletionTaskLogInfoDO.setIsvalid(1);
- deletionTaskLogInfoDO.setCreateTime(new Date());
- deletionTaskLogInfoDO.setUpdateTime(new Date());
- deletionTaskLogInfoDO.setPriceDate(DateUtils.format(priceDate,"yyyy-MM-dd"));
- deletionTaskLogInfoDO.setFrequency(fundReportFrequencyDO.getNavFrequency());
- deletionTaskLogInfoDO.setDeletionType(DeletionType.ASSET_DELETION.getCode());
- deletionTaskLogInfoMapper.saveDeletionTaskLogInfoDO(deletionTaskLogInfoDO);
- }
- if(Frequency.WEEK.getCode().equals(fundReportFrequencyDO.getAssetFrequency())){
- List<DeletionTaskLogInfoDO> deletionTaskLogInfoDOList = deletionTaskLogInfoMapper.selectDeletionTaskLogInfoDO(fundId,channelId,fundReportFrequencyDO.getNavFrequency(),DateUtils.format(priceDate,"yyyy-MM-dd"),DeletionType.NAV_DELETION.getCode());
- //最新净值不再更新,超过3次就不再发送
- if(deletionTaskLogInfoDOList.size() >= 3){
- continue;
- }
- DeletionTaskLogInfoDO deletionTaskLogInfoDO = new DeletionTaskLogInfoDO();
- deletionTaskLogInfoDO.setChannelId(channelId);
- deletionTaskLogInfoDO.setFundId(fundId);
- deletionTaskLogInfoDO.setIsvalid(1);
- deletionTaskLogInfoDO.setCreateTime(new Date());
- deletionTaskLogInfoDO.setUpdateTime(new Date());
- deletionTaskLogInfoDO.setPriceDate(DateUtils.format(priceDate,"yyyy-MM-dd"));
- deletionTaskLogInfoDO.setFrequency(fundReportFrequencyDO.getNavFrequency());
- deletionTaskLogInfoDO.setDeletionType(DeletionType.ASSET_DELETION.getCode());
- deletionTaskLogInfoMapper.saveDeletionTaskLogInfoDO(deletionTaskLogInfoDO);
- }
- if(Frequency.MONTH.getCode().equals(fundReportFrequencyDO.getAssetFrequency())){
- List<DeletionTaskLogInfoDO> deletionTaskLogInfoDOList = deletionTaskLogInfoMapper.selectDeletionTaskLogInfoDO(fundId,channelId,fundReportFrequencyDO.getNavFrequency(),DateUtils.format(priceDate,"yyyy-MM-dd"),DeletionType.NAV_DELETION.getCode());
- //最新净值不再更新,超过1次就不再发送
- if(deletionTaskLogInfoDOList.size() >= 1){
- continue;
- }
- DeletionTaskLogInfoDO deletionTaskLogInfoDO = new DeletionTaskLogInfoDO();
- deletionTaskLogInfoDO.setChannelId(channelId);
- deletionTaskLogInfoDO.setFundId(fundId);
- deletionTaskLogInfoDO.setIsvalid(1);
- deletionTaskLogInfoDO.setCreateTime(new Date());
- deletionTaskLogInfoDO.setUpdateTime(new Date());
- deletionTaskLogInfoDO.setPriceDate(DateUtils.format(priceDate,"yyyy-MM-dd"));
- deletionTaskLogInfoDO.setFrequency(fundReportFrequencyDO.getNavFrequency());
- deletionTaskLogInfoDO.setDeletionType(DeletionType.ASSET_DELETION.getCode());
- deletionTaskLogInfoMapper.saveDeletionTaskLogInfoDO(deletionTaskLogInfoDO);
- }
- for(EmailDeletionInfoDO infoDO : channelEmailDeletionInfoDOList){
- infoDO.setDeletionType(DeletionType.getDeletionTypeByCode(Integer.valueOf(infoDO.getDeletionType())).getInfo());
- }
- emailDeletionInfoDOS.addAll(channelEmailDeletionInfoDOList);
- }
- }
- @Override
- public void sendDistributeEmail(String companyId, String emails) {
- List<String> fundIdList = fundInfoMapper.getFundIdByCompanyId(companyId);
- List<EmailDeletionInfoDO> emailDeletionInfoDOS = new ArrayList<>();
- for (String fundId : fundIdList) {
- List<EmailDeletionInfoDO> distributeDeletionList = deletionInfoMapper.selectDistributeDeletionInfoByFundId(fundId);
- if(distributeDeletionList.isEmpty()){
- continue;
- }
- DistributeDeletionInfoDO distributeDeletionInfoDO = deletionInfoMapper.getDistributeDeletionInfo(fundId);
- //查询第一次缺失日期,如果一样就不在发送,不一样才发生,同时更新最新的最小缺失日期
- if(distributeDeletionInfoDO == null){
- distributeDeletionInfoDO = new DistributeDeletionInfoDO();
- distributeDeletionInfoDO.setFundId(fundId);
- distributeDeletionInfoDO.setDeletionDate(distributeDeletionList.get(0).getDeletionDate());
- distributeDeletionInfoDO.setIsvalid(1);
- distributeDeletionInfoDO.setUpdateTime(new Date());
- distributeDeletionInfoDO.setCreateTime(new Date());
- deletionInfoMapper.saveDistributeFirstDeletion(distributeDeletionInfoDO);
- }else{
- String deletionDate = distributeDeletionInfoDO.getDeletionDate();
- if(deletionDate.equals(distributeDeletionList.get(0).getDeletionDate())){
- continue;
- }else{
- distributeDeletionInfoDO.setDeletionDate(distributeDeletionList.get(0).getDeletionDate());
- deletionInfoMapper.updateDistributeDeletionInfoDO(distributeDeletionInfoDO);
- }
- }
- for(EmailDeletionInfoDO infoDO : distributeDeletionList){
- infoDO.setDeletionType(DeletionType.getDeletionTypeByCode(Integer.valueOf(infoDO.getDeletionType())).getInfo());
- }
- emailDeletionInfoDOS.addAll(distributeDeletionList);
- }
- if(emailDeletionInfoDOS.size() > 0){
- EmailTemplateDO emailTemplateDO = emailTemplateMapper.selectByCode(DISTRIBUTION_DELETION_TEMPLATE_CODE,1);
- if(emailTemplateDO == null){
- return;
- }
- String emailTitle = emailTemplateDO.getEmailTitle();
- String emailBody = emailTemplateDO.getEmailBody().replaceAll("\r\n", "<br/>").replaceAll("\n", "<br/>");
- try {
- //将数据写入excel文件
- File file = writeExcelFile(emailDeletionInfoDOS);
- file.setWritable(true);
- file.setReadable(true);
- file.setExecutable(true);
- MailboxInfoDTO dto = getFromEmailInfo();
- try{
- EmailUtil.senEmail(dto,emails,List.of(file),emailBody,sysConfigMapper.selectConfigByKey("email.host")==null?"":sysConfigMapper.selectConfigByKey("email.host"),emailTitle);
- }catch (Exception e){
- logger.error(e.getMessage(),e);
- EmailUtil.senEmail(dto,emails,List.of(file),emailBody,sysConfigMapper.selectConfigByKey("email.host")==null?"":sysConfigMapper.selectConfigByKey("email.host"),emailTitle);
- }
- //发送成功之后修改数据为已发送
- deletionInfoMapper.updateSendStatusByFundId(fundIdList);
- //写入发送历史
- String[] emailList = emails.split(";");
- for(String email : emailList){
- saveCompanyEmailSendHistory(companyId,email,emailTitle,1,ResultCode.SEND_SUCCESS.getMsg());
- }
- } catch (Exception e) {
- String[] emailList = emails.split(";");
- for(String email : emailList){
- saveCompanyEmailSendHistory(companyId,email,emailTitle,0,e.getMessage());
- }
- logger.error(e.getMessage(),e);
- }
- }
- }
- @Override
- public void sendDistributeEmailById(List<Integer> idList) {
- List<ContactInformationDO> configDOList = contactInformationService.selectByIdList(idList);
- Map<String,List<ContactInformationDO>> companyListMap = configDOList.stream().collect(Collectors.groupingBy(e -> e.getCompanyId()));
- for(String companyId : companyListMap.keySet()){
- StringBuffer emails = new StringBuffer();
- List<ContactInformationDO> configDOS = companyListMap.get(companyId);
- for(ContactInformationDO configDO: configDOS){
- emails.append(configDO.getContactEmail()).append(";");
- }
- //把缺失数据的邮件发送到该公司名下的邮箱地址
- sendDistributeNotRemarkEmail(companyId,emails.toString());
- }
- }
- private void sendDistributeNotRemarkEmail(String companyId, String emails) {
- List<String> fundIdList = fundInfoMapper.getFundIdByCompanyId(companyId);
- List<EmailDeletionInfoDO> emailDeletionInfoDOS = new ArrayList<>();
- for (String fundId : fundIdList) {
- List<EmailDeletionInfoDO> distributeDeletionList = deletionInfoMapper.selectDistributeNotRemarkDeletionInfoByFundId(fundId);
- if(distributeDeletionList.isEmpty()){
- continue;
- }
- for(EmailDeletionInfoDO infoDO : distributeDeletionList){
- infoDO.setDeletionType(DeletionType.getDeletionTypeByCode(Integer.valueOf(infoDO.getDeletionType())).getInfo());
- }
- emailDeletionInfoDOS.addAll(distributeDeletionList);
- }
- if(emailDeletionInfoDOS.size() > 0){
- EmailTemplateDO emailTemplateDO = emailTemplateMapper.selectByCode(DISTRIBUTION_DELETION_TEMPLATE_CODE,1);
- if(emailTemplateDO == null){
- return;
- }
- String emailTitle = emailTemplateDO.getEmailTitle();
- String emailBody = emailTemplateDO.getEmailBody().replaceAll("\r\n", "<br/>").replaceAll("\n", "<br/>");
- try {
- //将数据写入excel文件
- File file = writeExcelFile(emailDeletionInfoDOS);
- file.setWritable(true);
- file.setReadable(true);
- file.setExecutable(true);
- MailboxInfoDTO dto = getFromEmailInfo();
- try{
- EmailUtil.senEmail(dto,emails,List.of(file),emailBody,sysConfigMapper.selectConfigByKey("email.host")==null?"":sysConfigMapper.selectConfigByKey("email.host"),emailTitle);
- }catch (Exception e){
- logger.error(e.getMessage(),e);
- EmailUtil.senEmail(dto,emails,List.of(file),emailBody,sysConfigMapper.selectConfigByKey("email.host")==null?"":sysConfigMapper.selectConfigByKey("email.host"),emailTitle);
- }
- //发送成功之后修改数据为已发送
- deletionInfoMapper.updateSendStatusByFundId(fundIdList);
- //写入发送历史
- String[] emailList = emails.split(";");
- for(String email : emailList){
- saveCompanyEmailSendHistory(companyId,email,emailTitle,1,ResultCode.SEND_SUCCESS.getMsg());
- }
- } catch (Exception e) {
- String[] emailList = emails.split(";");
- for(String email : emailList){
- saveCompanyEmailSendHistory(companyId,email,emailTitle,0,e.getMessage());
- }
- logger.error(e.getMessage(),e);
- }
- }
- }
- private void saveCompanyEmailSendHistory(String companyId, String email, String emailTitle,Integer sendStatus,String msg) {
- CompanyEmailSendHistoryDO historyDO = new CompanyEmailSendHistoryDO();
- historyDO.setCompanyId(companyId);
- historyDO.setEmail(email);
- historyDO.setSendStatus(sendStatus);
- historyDO.setSendRemark(msg);
- historyDO.setEmailTitle(emailTitle);
- historyDO.setIsvalid(1);
- historyDO.setSendTime(DateUtils.getNowDate());
- historyDO.setCreateTime(DateUtils.getNowDate());
- historyDO.setCreateTime(DateUtils.getNowDate());
- companyEmailSendHistoryMapper.saveCompanyEmailSendHistory(historyDO);
- }
- public 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"));
- dto.setSsl(sysConfigMapper.selectConfigByKey("sender.ssl"));
- return dto;
- }
- private File writeExcelFile(List<EmailDeletionInfoDO> 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("缺失日期");
- String sheetName = "基金缺失明细";
- List<List<String>> dataList = new ArrayList<>();
- for(EmailDeletionInfoDO dto : emailDeletionInfoDOS){
- List<String> data = new ArrayList<>();
- data.add(String.valueOf(dto.getChannelId()));
- data.add(dto.getChannelName());
- data.add(dto.getFundName());
- data.add(dto.getCompanyName());
- data.add(dto.getDeletionType());
- data.add(dto.getDeletionDate());
- dataList.add(data);
- }
- values.put(sheetName,dataList);
- XSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName,head,values,null);
- File file = new File(path+"/"+DateUtils.format(new Date(),DateUtils.YYYYMMDDHHMMSS)+"基金缺失明细.xlsx");
- if(!file.exists()){
- try {
- file.createNewFile();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
- try {
- FileOutputStream fos = new FileOutputStream(file);
- wb.write(fos);
- wb.close();
- fos.close();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- return file;
- }
- }
|