CompanyEmailConfigServiceImpl.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. package com.simuwang.manage.service.impl;
  2. import com.simuwang.base.common.enums.DeletionType;
  3. import com.simuwang.base.common.enums.OpenStatusType;
  4. import com.simuwang.base.common.enums.ResultCode;
  5. import com.simuwang.base.common.util.DateUtils;
  6. import com.simuwang.base.common.util.EmailUtil;
  7. import com.simuwang.base.common.util.ExcelUtil;
  8. import com.simuwang.base.common.util.StringUtil;
  9. import com.simuwang.base.mapper.CompanyEmailConfigMapper;
  10. import com.simuwang.base.mapper.CompanyEmailSendHistoryMapper;
  11. import com.simuwang.base.mapper.DeletionInfoMapper;
  12. import com.simuwang.base.mapper.FundInfoMapper;
  13. import com.simuwang.base.pojo.dos.CompanyEmailConfigDO;
  14. import com.simuwang.base.pojo.dos.CompanyEmailSendHistoryDO;
  15. import com.simuwang.base.pojo.dos.EmailDeletionInfoDO;
  16. import com.simuwang.base.pojo.dto.ExcelDeletionInfoDTO;
  17. import com.simuwang.base.pojo.dto.MailboxInfoDTO;
  18. import com.simuwang.base.pojo.vo.CompanyEmailConfigVO;
  19. import com.simuwang.manage.service.CompanyEmailConfigService;
  20. import jakarta.annotation.Resource;
  21. import jakarta.mail.Message;
  22. import jakarta.mail.Store;
  23. import jakarta.mail.internet.MimeMessage;
  24. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.beans.factory.annotation.Value;
  27. import org.springframework.mail.javamail.JavaMailSender;
  28. import org.springframework.stereotype.Service;
  29. import java.io.File;
  30. import java.io.IOException;
  31. import java.util.*;
  32. /**
  33. * FileName: CompanyEmailConfigServiceImpl
  34. * Author: chenjianhua
  35. * Date: 2024/9/7 12:55
  36. * Description: ${DESCRIPTION}
  37. */
  38. @Service
  39. public class CompanyEmailConfigServiceImpl implements CompanyEmailConfigService {
  40. @Autowired
  41. private CompanyEmailConfigMapper companyEmailConfigMapper;
  42. @Autowired
  43. private CompanyEmailSendHistoryMapper companyEmailSendHistoryMapper;
  44. @Autowired
  45. private FundInfoMapper fundInfoMapper;
  46. @Autowired
  47. private DeletionInfoMapper deletionInfoMapper;
  48. @Resource
  49. private JavaMailSender javaMailSender;
  50. @Value("${email.file.path}")
  51. private String path;
  52. @Value("${spring.mail.username}")
  53. private String account;
  54. @Value("${spring.mail.password}")
  55. private String password;
  56. @Value("${spring.mail.host}")
  57. private String host;
  58. @Value("${spring.mail.port}")
  59. private String port;
  60. @Value("${spring.mail.protocol}")
  61. private String protocol;
  62. @Override
  63. public void saveCompanyEmailConfig(List<CompanyEmailConfigVO> companyEmailConfigVOS) {
  64. try{
  65. for(CompanyEmailConfigVO emailConfigVO : companyEmailConfigVOS){
  66. CompanyEmailConfigDO emailConfigDO = new CompanyEmailConfigDO();
  67. emailConfigDO.setCompanyId(emailConfigVO.getCompanyId());
  68. emailConfigDO.setCompanyName(emailConfigVO.getCompanyName());
  69. emailConfigDO.setEmail(emailConfigVO.getEmail());
  70. emailConfigDO.setOpenStatus(emailConfigVO.getOpenStatus());
  71. emailConfigDO.setRemark(emailConfigVO.getSendRemark());
  72. emailConfigDO.setIsvalid(1);
  73. emailConfigDO.setUpdateTime(new Date());
  74. CompanyEmailConfigDO oldEmailConfigDO = companyEmailConfigMapper.selectEmailConfig(emailConfigVO.getCompanyId(),emailConfigVO.getEmail());
  75. if(!StringUtil.isNull(oldEmailConfigDO)){
  76. emailConfigVO.setId(oldEmailConfigDO.getId());
  77. }
  78. if(emailConfigVO.getId() != null){
  79. emailConfigDO.setId(emailConfigVO.getId());
  80. companyEmailConfigMapper.updateCompanyEmailConfig(emailConfigDO);
  81. }else{
  82. emailConfigDO.setCreateTime(new Date());
  83. companyEmailConfigMapper.saveCompanyEmailConfig(emailConfigDO);
  84. }
  85. }
  86. }catch (Exception e){
  87. }
  88. }
  89. @Override
  90. public void deleteCompanyEmailConfig(Integer id) {
  91. CompanyEmailConfigDO configDO = companyEmailConfigMapper.selectById(id);
  92. if (configDO != null) {
  93. configDO.setIsvalid(0);
  94. configDO.setUpdateTime(new Date());
  95. companyEmailConfigMapper.updateById(configDO);
  96. }
  97. }
  98. @Override
  99. public void updateCompanyEmailConfig(CompanyEmailConfigVO companyEmailConfigVO) {
  100. CompanyEmailConfigDO configDO = companyEmailConfigMapper.selectCompanyEmailConfigById(companyEmailConfigVO.getId());
  101. if(configDO != null){
  102. configDO.setEmail(companyEmailConfigVO.getEmail());
  103. configDO.setCompanyId(companyEmailConfigVO.getCompanyId());
  104. configDO.setCompanyName(companyEmailConfigVO.getCompanyName());
  105. configDO.setUpdateTime(new Date());
  106. companyEmailConfigMapper.updateCompanyEmailConfig(configDO);
  107. }
  108. }
  109. @Override
  110. public void sendCompanyEmail(List<Integer> idList) {
  111. for(Integer id : idList){
  112. CompanyEmailConfigDO configDO = companyEmailConfigMapper.selectCompanyEmailConfigById(id);
  113. //把缺失数据的邮件发送到该公司名下的邮箱地址
  114. if(configDO.getOpenStatus().equals(OpenStatusType.YES.getCode())){
  115. sendEmail(configDO.getCompanyId(),configDO.getEmail());
  116. }
  117. }
  118. }
  119. //邮件校验处理
  120. private void sendEmail(String companyId, String email) {
  121. List<String> fundIdList = fundInfoMapper.getFundIdByCompanyId(companyId);
  122. if(fundIdList.size() < 1){
  123. return;
  124. }
  125. List<EmailDeletionInfoDO> emailDeletionInfoDOS = deletionInfoMapper.getDeletionInfoByFundId(fundIdList);
  126. for(EmailDeletionInfoDO infoDO : emailDeletionInfoDOS){
  127. infoDO.setDeletionType(DeletionType.getDeletionTypeByCode(Integer.valueOf(infoDO.getDeletionType())).getInfo());
  128. }
  129. if(emailDeletionInfoDOS.size() > 0){
  130. //将数据写入excel文件
  131. File file = writeExcelFile(emailDeletionInfoDOS);
  132. file.setWritable(true);
  133. file.setReadable(true);
  134. file.setExecutable(true);
  135. try {
  136. MailboxInfoDTO dto = getFromEmailInfo();
  137. EmailUtil.senEmail(dto,email,file,javaMailSender);
  138. //发送成功之后修改数据为已发送
  139. deletionInfoMapper.updateSendStatusByFundId(fundIdList);
  140. //写入发送历史
  141. saveCompanyEmailSendHistory(companyId,email,1,ResultCode.SEND_SUCCESS.getMsg());
  142. } catch (Exception e) {
  143. saveCompanyEmailSendHistory(companyId,email,0,e.getMessage());
  144. throw new RuntimeException(e);
  145. }
  146. }
  147. }
  148. private void saveCompanyEmailSendHistory(String companyId, String email,Integer sendStatus,String msg) {
  149. CompanyEmailSendHistoryDO historyDO = new CompanyEmailSendHistoryDO();
  150. historyDO.setCompanyId(companyId);
  151. historyDO.setEmail(email);
  152. historyDO.setSendStatus(sendStatus);
  153. historyDO.setSendRemark(msg);
  154. historyDO.setIsvalid(1);
  155. historyDO.setSendTime(DateUtils.getNowDate());
  156. historyDO.setCreateTime(DateUtils.getNowDate());
  157. historyDO.setCreateTime(DateUtils.getNowDate());
  158. companyEmailSendHistoryMapper.saveCompanyEmailSendHistory(historyDO);
  159. }
  160. private MailboxInfoDTO getFromEmailInfo(){
  161. MailboxInfoDTO dto = new MailboxInfoDTO();
  162. dto.setAccount(account);
  163. dto.setProtocol(protocol);
  164. dto.setPassword(password);
  165. dto.setPort(port);
  166. dto.setHost(host);
  167. return dto;
  168. }
  169. private File writeExcelFile(List<EmailDeletionInfoDO> emailDeletionInfoDOS) {
  170. Map<String,List<List<String>>> values = new HashMap<>();
  171. List<String> head = new ArrayList<>();
  172. head.add("基金全称");
  173. head.add("管理人");
  174. head.add("缺失类型");
  175. head.add("缺失日期");
  176. String sheetName = "基金缺失明细";
  177. List<List<String>> dataList = new ArrayList<>();
  178. for(EmailDeletionInfoDO dto : emailDeletionInfoDOS){
  179. List<String> data = new ArrayList<>();
  180. data.add(dto.getFundName());
  181. data.add(dto.getCompanyName());
  182. data.add(dto.getDeletionType());
  183. data.add(dto.getDeletionDate());
  184. dataList.add(data);
  185. }
  186. values.put(sheetName,dataList);
  187. HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName,head,values,null);
  188. File file = new File(path+"/"+DateUtils.getDate()+"基金缺失明细.xls");
  189. if(!file.exists()){
  190. try {
  191. file.createNewFile();
  192. } catch (IOException e) {
  193. throw new RuntimeException(e);
  194. }
  195. }
  196. try {
  197. wb.write(file);
  198. wb.close();
  199. } catch (IOException e) {
  200. throw new RuntimeException(e);
  201. }
  202. return file;
  203. }
  204. }