CompanyEmailConfigServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  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.mapper.system.SysConfigMapper;
  14. import com.simuwang.base.pojo.dos.CompanyEmailConfigDO;
  15. import com.simuwang.base.pojo.dos.CompanyEmailSendHistoryDO;
  16. import com.simuwang.base.pojo.dos.EmailDeletionInfoDO;
  17. import com.simuwang.base.pojo.dto.ExcelDeletionInfoDTO;
  18. import com.simuwang.base.pojo.dto.MailboxInfoDTO;
  19. import com.simuwang.base.pojo.vo.CompanyEmailConfigVO;
  20. import com.simuwang.manage.init.CompleteScheduleConfig;
  21. import com.simuwang.manage.service.CompanyEmailConfigService;
  22. import com.simuwang.shiro.utils.UserUtils;
  23. import com.smppw.common.pojo.ResultVo;
  24. import jakarta.annotation.Resource;
  25. import jakarta.mail.Message;
  26. import jakarta.mail.Store;
  27. import jakarta.mail.internet.MimeMessage;
  28. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  29. import org.slf4j.Logger;
  30. import org.slf4j.LoggerFactory;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.beans.factory.annotation.Value;
  33. import org.springframework.mail.javamail.JavaMailSender;
  34. import org.springframework.stereotype.Service;
  35. import java.io.File;
  36. import java.io.IOException;
  37. import java.util.*;
  38. import java.util.stream.Collectors;
  39. /**
  40. * FileName: CompanyEmailConfigServiceImpl
  41. * Author: chenjianhua
  42. * Date: 2024/9/7 12:55
  43. * Description: ${DESCRIPTION}
  44. */
  45. @Service
  46. public class CompanyEmailConfigServiceImpl implements CompanyEmailConfigService {
  47. @Autowired
  48. private CompanyEmailConfigMapper companyEmailConfigMapper;
  49. @Autowired
  50. private CompanyEmailSendHistoryMapper companyEmailSendHistoryMapper;
  51. @Autowired
  52. private FundInfoMapper fundInfoMapper;
  53. @Autowired
  54. private DeletionInfoMapper deletionInfoMapper;
  55. @Autowired
  56. private SysConfigMapper sysConfigMapper;
  57. private static Logger logger = LoggerFactory.getLogger(CompanyEmailConfigServiceImpl.class);
  58. @Value("${email.file.path}")
  59. private String path;
  60. @Override
  61. public ResultVo saveCompanyEmailConfig(List<CompanyEmailConfigVO> companyEmailConfigVOS) {
  62. ResultVo vo = new ResultVo(com.smppw.common.pojo.enums.status.ResultCode.SAVE_SUCCESS);
  63. vo.setData(true);
  64. StringBuffer msg = new StringBuffer();
  65. try{
  66. for(CompanyEmailConfigVO emailConfigVO : companyEmailConfigVOS){
  67. CompanyEmailConfigDO oldEmailConfigDO = companyEmailConfigMapper.selectEmailConfig(emailConfigVO.getCompanyId(),emailConfigVO.getEmail());
  68. if(!StringUtil.isNull(oldEmailConfigDO) && emailConfigVO.getId() == null){
  69. msg.append(emailConfigVO.getCompanyName()+"已存在邮箱"+emailConfigVO.getEmail()).append(",");
  70. }
  71. if(!StringUtil.isNull(oldEmailConfigDO) && emailConfigVO.getId() != null){
  72. if(!oldEmailConfigDO.getId().equals(emailConfigVO.getId())){
  73. msg.append(emailConfigVO.getCompanyName()+"已存在邮箱"+emailConfigVO.getEmail()).append(",");
  74. }
  75. }
  76. }
  77. if(StringUtil.isNotEmpty(msg.toString())){
  78. vo.setMsg(msg.toString().substring(0,msg.length()-1));
  79. vo.setData(false);
  80. return vo;
  81. }
  82. for(CompanyEmailConfigVO emailConfigVO : companyEmailConfigVOS){
  83. CompanyEmailConfigDO emailConfigDO = new CompanyEmailConfigDO();
  84. emailConfigDO.setCompanyId(emailConfigVO.getCompanyId());
  85. emailConfigDO.setCompanyName(emailConfigVO.getCompanyName());
  86. emailConfigDO.setEmail(emailConfigVO.getEmail());
  87. emailConfigDO.setOpenStatus(emailConfigVO.getOpenStatus());
  88. emailConfigDO.setRemark(emailConfigVO.getSendRemark());
  89. emailConfigDO.setCreatorId(UserUtils.getLoginUser().getUserId());
  90. emailConfigDO.setCreatorId(UserUtils.getLoginUser().getUserId());
  91. emailConfigDO.setIsvalid(1);
  92. emailConfigDO.setUpdateTime(new Date());
  93. if(emailConfigVO.getId() != null){
  94. emailConfigDO.setId(emailConfigVO.getId());
  95. companyEmailConfigMapper.updateCompanyEmailConfig(emailConfigDO);
  96. }else{
  97. emailConfigDO.setCreateTime(new Date());
  98. companyEmailConfigMapper.saveCompanyEmailConfig(emailConfigDO);
  99. }
  100. }
  101. }catch (Exception e){
  102. }
  103. return vo;
  104. }
  105. @Override
  106. public void deleteCompanyEmailConfig(Integer id) {
  107. CompanyEmailConfigDO configDO = companyEmailConfigMapper.selectById(id);
  108. if (configDO != null) {
  109. configDO.setIsvalid(0);
  110. configDO.setUpdateTime(new Date());
  111. configDO.setUpdaterId(UserUtils.getLoginUser().getUserId());
  112. companyEmailConfigMapper.updateById(configDO);
  113. }
  114. }
  115. @Override
  116. public void updateCompanyEmailConfig(CompanyEmailConfigVO companyEmailConfigVO) {
  117. CompanyEmailConfigDO configDO = companyEmailConfigMapper.selectCompanyEmailConfigById(companyEmailConfigVO.getId());
  118. if(configDO != null){
  119. configDO.setEmail(companyEmailConfigVO.getEmail());
  120. configDO.setCompanyId(companyEmailConfigVO.getCompanyId());
  121. configDO.setCompanyName(companyEmailConfigVO.getCompanyName());
  122. configDO.setUpdateTime(new Date());
  123. configDO.setUpdaterId(UserUtils.getLoginUser().getUserId());
  124. companyEmailConfigMapper.updateCompanyEmailConfig(configDO);
  125. }
  126. }
  127. @Override
  128. public void sendCompanyEmail(List<Integer> idList) {
  129. List<CompanyEmailConfigDO> configDOList = companyEmailConfigMapper.selectCompanyEmailConfigByIdList(idList);
  130. Map<String,List<CompanyEmailConfigDO>> companyListMap = configDOList.stream().collect(Collectors.groupingBy(e -> e.getCompanyId()));
  131. for(String companyId : companyListMap.keySet()){
  132. StringBuffer emails = new StringBuffer();
  133. List<CompanyEmailConfigDO> configDOS = companyListMap.get(companyId);
  134. for(CompanyEmailConfigDO configDO: configDOS){
  135. emails.append(configDO.getEmail()).append(";");
  136. }
  137. //把缺失数据的邮件发送到该公司名下的邮箱地址
  138. sendEmail(companyId,emails.toString());
  139. }
  140. }
  141. @Override
  142. //邮件校验处理
  143. public void sendEmail(String companyId, String emails) {
  144. List<String> fundIdList = fundInfoMapper.getFundIdByCompanyId(companyId);
  145. if(fundIdList.size() < 1){
  146. return;
  147. }
  148. List<EmailDeletionInfoDO> emailDeletionInfoDOS = deletionInfoMapper.getDeletionInfoByFundId(fundIdList);
  149. for(EmailDeletionInfoDO infoDO : emailDeletionInfoDOS){
  150. infoDO.setDeletionType(DeletionType.getDeletionTypeByCode(Integer.valueOf(infoDO.getDeletionType())).getInfo());
  151. }
  152. if(emailDeletionInfoDOS.size() > 0){
  153. try {
  154. //将数据写入excel文件
  155. File file = writeExcelFile(emailDeletionInfoDOS);
  156. file.setWritable(true);
  157. file.setReadable(true);
  158. file.setExecutable(true);
  159. MailboxInfoDTO dto = getFromEmailInfo();
  160. // "<p>您好,附件为产品的数据未发送到最新,麻烦尽快发送缺失的数据。若是产品清算或者有其他原因不再发送数据,还请将产品的清算日期或者不再发送数据的原因发送给我们,非常感谢~\n</p>";
  161. String htmlText = sysConfigMapper.selectConfigByKey("deletion_email_body");
  162. String emailTitle = sysConfigMapper.selectConfigByKey("deletion_email_title");
  163. EmailUtil.senEmail(dto,emails,file,htmlText,sysConfigMapper.selectConfigByKey("email.host")==null?"":sysConfigMapper.selectConfigByKey("email.host"),emailTitle);
  164. //发送成功之后修改数据为已发送
  165. deletionInfoMapper.updateSendStatusByFundId(fundIdList);
  166. //写入发送历史
  167. String[] emailList = emails.split(";");
  168. for(String email : emailList){
  169. saveCompanyEmailSendHistory(companyId,email,1,ResultCode.SEND_SUCCESS.getMsg());
  170. }
  171. } catch (Exception e) {
  172. String[] emailList = emails.split(";");
  173. for(String email : emailList){
  174. saveCompanyEmailSendHistory(companyId,email,0,e.getMessage());
  175. }
  176. logger.error(e.getMessage(),e);
  177. }
  178. }
  179. }
  180. private void saveCompanyEmailSendHistory(String companyId, String email,Integer sendStatus,String msg) {
  181. CompanyEmailSendHistoryDO historyDO = new CompanyEmailSendHistoryDO();
  182. historyDO.setCompanyId(companyId);
  183. historyDO.setEmail(email);
  184. historyDO.setSendStatus(sendStatus);
  185. historyDO.setSendRemark(msg);
  186. historyDO.setIsvalid(1);
  187. historyDO.setSendTime(DateUtils.getNowDate());
  188. historyDO.setCreateTime(DateUtils.getNowDate());
  189. historyDO.setCreateTime(DateUtils.getNowDate());
  190. companyEmailSendHistoryMapper.saveCompanyEmailSendHistory(historyDO);
  191. }
  192. private MailboxInfoDTO getFromEmailInfo(){
  193. MailboxInfoDTO dto = new MailboxInfoDTO();
  194. dto.setAccount(sysConfigMapper.selectConfigByKey("sender.email"));
  195. dto.setProtocol(sysConfigMapper.selectConfigByKey("sender.protocol"));
  196. dto.setPassword(sysConfigMapper.selectConfigByKey("sender.password"));
  197. dto.setPort(sysConfigMapper.selectConfigByKey("sender.port"));
  198. dto.setHost(sysConfigMapper.selectConfigByKey("sender.host"));
  199. return dto;
  200. }
  201. private File writeExcelFile(List<EmailDeletionInfoDO> emailDeletionInfoDOS) {
  202. Map<String,List<List<String>>> values = new HashMap<>();
  203. List<String> head = new ArrayList<>();
  204. head.add("基金全称");
  205. head.add("管理人");
  206. head.add("缺失类型");
  207. head.add("缺失日期");
  208. String sheetName = "基金缺失明细";
  209. List<List<String>> dataList = new ArrayList<>();
  210. for(EmailDeletionInfoDO dto : emailDeletionInfoDOS){
  211. List<String> data = new ArrayList<>();
  212. data.add(dto.getFundName());
  213. data.add(dto.getCompanyName());
  214. data.add(dto.getDeletionType());
  215. data.add(dto.getDeletionDate());
  216. dataList.add(data);
  217. }
  218. values.put(sheetName,dataList);
  219. HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName,head,values,null);
  220. File file = new File(path+"/"+DateUtils.format(new Date(),DateUtils.YYYYMMDDHHMMSS)+"基金缺失明细.xls");
  221. if(!file.exists()){
  222. try {
  223. file.createNewFile();
  224. } catch (IOException e) {
  225. throw new RuntimeException(e);
  226. }
  227. }
  228. try {
  229. wb.write(file);
  230. wb.close();
  231. } catch (IOException e) {
  232. throw new RuntimeException(e);
  233. }
  234. return file;
  235. }
  236. }