EmailConfigServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. package com.simuwang.manage.service.impl;
  2. import cn.hutool.crypto.asymmetric.KeyType;
  3. import cn.hutool.crypto.asymmetric.RSA;
  4. import com.alibaba.fastjson2.JSON;
  5. import com.simuwang.base.common.conts.UserConstants;
  6. import com.simuwang.base.common.enums.EmailCron;
  7. import com.simuwang.base.common.enums.OpenStatusType;
  8. import com.simuwang.base.common.enums.ResultCode;
  9. import com.simuwang.base.common.support.MybatisPage;
  10. import com.simuwang.base.common.util.*;
  11. import com.simuwang.base.config.DaqProperties;
  12. import com.simuwang.base.mapper.MailboxInfoMapper;
  13. import com.simuwang.base.pojo.dos.MailboxInfoDO;
  14. import com.simuwang.base.pojo.dto.MailboxInfoDTO;
  15. import com.simuwang.base.pojo.dto.QuartzBean;
  16. import com.simuwang.base.pojo.dto.query.EmailPageQuery;
  17. import com.simuwang.base.pojo.vo.MailboxInfoTableVO;
  18. import com.simuwang.base.pojo.vo.MailboxInfoVO;
  19. import com.simuwang.base.pojo.vo.OpenStatusVO;
  20. import com.simuwang.base.pojo.vo.ParseParamVO;
  21. import com.simuwang.daq.service.EmailParseApiService;
  22. import com.simuwang.manage.service.EmailConfigService;
  23. import com.smppw.common.pojo.ResultVo;
  24. import com.smppw.utils.DateUtil;
  25. import jakarta.mail.MessagingException;
  26. import jakarta.mail.Store;
  27. import org.quartz.Scheduler;
  28. import org.slf4j.Logger;
  29. import org.slf4j.LoggerFactory;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.beans.factory.annotation.Value;
  32. import org.springframework.stereotype.Service;
  33. import org.springframework.transaction.annotation.Transactional;
  34. import java.util.ArrayList;
  35. import java.util.Date;
  36. import java.util.List;
  37. import java.util.stream.Collectors;
  38. /**
  39. * FileName: EmailConfigServiceImpl
  40. * Author: chenjianhua
  41. * Date: 2024/9/9 13:40
  42. * Description: ${DESCRIPTION}
  43. */
  44. @Service
  45. public class EmailConfigServiceImpl implements EmailConfigService {
  46. @Autowired
  47. private MailboxInfoMapper emailConfigMapper;
  48. @Autowired
  49. private Scheduler scheduler;
  50. @Value("${spring.task.groupName}")
  51. private String groupName;
  52. @Autowired
  53. private EmailParseApiService emailParseApiService;
  54. @Autowired
  55. private DaqProperties properties;
  56. private String JOB_CLASS="com.simuwang.manage.task.ParseSchedulerTask";
  57. private static final Logger logger = LoggerFactory.getLogger(EmailConfigServiceImpl.class);
  58. @Override
  59. public MybatisPage<MailboxInfoTableVO> searchEmailConfigList(EmailPageQuery emailPageQuery) {
  60. List<MailboxInfoDO> mailboxInfoOS = emailConfigMapper.searchEmailConfigList(emailPageQuery);
  61. List<MailboxInfoTableVO> mailboxInfoTableVOS = mailboxInfoOS.stream().map(MailboxInfoDO::toTableVo).collect(Collectors.toList());
  62. long total = emailConfigMapper.countEmailConfig(emailPageQuery);
  63. return MybatisPage.of(total,mailboxInfoTableVOS);
  64. }
  65. @Override
  66. @Transactional(rollbackFor=Exception.class)
  67. public void saveEmailConfig(MailboxInfoVO mailboxInfoVO) {
  68. MailboxInfoDO mailboxInfoDO = toMailboxInfoDO(mailboxInfoVO);
  69. if(mailboxInfoVO.getId() == null){
  70. mailboxInfoDO.setCreateTime(new Date());
  71. mailboxInfoDO.setCron(EmailCron.getEmailCronByText(mailboxInfoVO.getCron()).getCron());
  72. emailConfigMapper.insert(mailboxInfoDO);
  73. }else{
  74. emailConfigMapper.updateById(mailboxInfoDO);
  75. }
  76. //添加任务
  77. addJob(mailboxInfoVO);
  78. }
  79. private void addJob(MailboxInfoVO mailboxInfoVO) {
  80. try{
  81. QuartzUtils.deleteScheduleJob(scheduler,mailboxInfoVO.getEmail(),groupName);
  82. MailboxInfoDO infoDO = emailConfigMapper.selectEmailConfigByEmail(mailboxInfoVO.getEmail());
  83. QuartzBean quartzBean = new QuartzBean();
  84. quartzBean.setCronExpression(infoDO.getCron());
  85. quartzBean.setStatus(infoDO.getOpenStatus());
  86. quartzBean.setGroupName(groupName);
  87. quartzBean.setJobName(mailboxInfoVO.getEmail());
  88. quartzBean.setJobClass(JOB_CLASS);
  89. //请求参数
  90. MailboxInfoDTO paramDTO = new MailboxInfoDTO();
  91. paramDTO.setAccount(infoDO.getEmail());
  92. paramDTO.setPassword(infoDO.getPassword());
  93. paramDTO.setPort(infoDO.getPort());
  94. paramDTO.setHost(infoDO.getServer());
  95. paramDTO.setProtocol(infoDO.getProtocol());
  96. quartzBean.setJobParam(JSON.toJSONString(paramDTO));
  97. QuartzUtils.createScheduleJob(scheduler,quartzBean);
  98. }catch (Exception e){
  99. logger.error(e.getMessage(),e);
  100. }
  101. }
  102. @Override
  103. public ResultVo connectTest(MailboxInfoVO mailboxInfoVO) {
  104. ResultVo vo = new ResultVo(ResultCode.CONNECT_SUCCESS);
  105. MailboxInfoDTO mailboxInfoDTO = new MailboxInfoDTO();
  106. mailboxInfoDTO.setAccount(mailboxInfoVO.getEmail());
  107. try{
  108. String publicKey = this.properties.getSecurityRsa().getPublicKey();
  109. String privateKey = this.properties.getSecurityRsa().getPrivateKey();
  110. String password = new RSA(privateKey, publicKey).decryptStr(mailboxInfoVO.getPassword(), KeyType.PrivateKey);
  111. mailboxInfoDTO.setPassword(password);
  112. }catch (Exception e){
  113. logger.error(e.getMessage(),e);
  114. }
  115. mailboxInfoDTO.setPort(mailboxInfoVO.getPort());
  116. mailboxInfoDTO.setHost(mailboxInfoVO.getServer());
  117. mailboxInfoDTO.setProtocol(mailboxInfoVO.getProtocol());
  118. Store store = EmailUtil.getStoreNew(mailboxInfoDTO);
  119. if(store != null){
  120. try {
  121. store.close();
  122. } catch (MessagingException e) {
  123. throw new RuntimeException(e);
  124. }
  125. vo.setMsg(ResultCode.CONNECT_SUCCESS.getMsg());
  126. vo.setData(true);
  127. return vo;
  128. }
  129. vo = new ResultVo(ResultCode.CONNECT_ERROR);
  130. vo.setData(false);
  131. vo.setMsg(ResultCode.CONNECT_ERROR.getMsg());
  132. return vo;
  133. }
  134. @Override
  135. public void deleteEmailConfig(Integer id) {
  136. //删除定时任务
  137. MailboxInfoDO mailboxInfoDO = emailConfigMapper.searchEmailConfigById(id);
  138. QuartzUtils.deleteScheduleJob(scheduler,mailboxInfoDO.getEmail(),groupName);
  139. List<Integer> idList = new ArrayList<>();
  140. idList.add(id);
  141. emailConfigMapper.deleteEmailConfigByIds(idList);
  142. }
  143. @Override
  144. public boolean checkEmailUnique(String email) {
  145. MailboxInfoDO mailboxInfoDO = emailConfigMapper.selectEmailConfigByEmail(email);
  146. if (StringUtil.isNotNull(mailboxInfoDO))
  147. {
  148. return UserConstants.NOT_UNIQUE;
  149. }
  150. return UserConstants.UNIQUE;
  151. }
  152. @Override
  153. public MailboxInfoVO searchEmailConfigById(Integer id) {
  154. MailboxInfoDO mailboxInfoDO = emailConfigMapper.searchEmailConfigById(id);
  155. MailboxInfoVO mailboxInfoVO = mailboxInfoDO.toVo();
  156. return mailboxInfoVO;
  157. }
  158. @Override
  159. public void controlEmailConfig(OpenStatusVO openStatusVO) {
  160. MailboxInfoDO mailboxInfoDO = emailConfigMapper.searchEmailConfigById(openStatusVO.getId());
  161. mailboxInfoDO.setOpenStatus(openStatusVO.getOpenStatus());
  162. mailboxInfoDO.setUpdateTime(DateUtils.getNowDate());
  163. emailConfigMapper.updateById(mailboxInfoDO);
  164. //设置定时任务
  165. QuartzUtils.deleteScheduleJob(scheduler,mailboxInfoDO.getEmail(),groupName);
  166. if(openStatusVO.getOpenStatus().equals(OpenStatusType.YES.getCode())){
  167. QuartzBean quartzBean = new QuartzBean();
  168. quartzBean.setCronExpression(mailboxInfoDO.getCron());
  169. quartzBean.setStatus(mailboxInfoDO.getOpenStatus());
  170. quartzBean.setGroupName(groupName);
  171. quartzBean.setJobName(mailboxInfoDO.getEmail());
  172. quartzBean.setJobClass(JOB_CLASS);
  173. //请求参数
  174. MailboxInfoDTO paramDTO = new MailboxInfoDTO();
  175. paramDTO.setAccount(mailboxInfoDO.getEmail());
  176. paramDTO.setPassword(mailboxInfoDO.getPassword());
  177. paramDTO.setPort(mailboxInfoDO.getPort());
  178. paramDTO.setHost(mailboxInfoDO.getServer());
  179. paramDTO.setProtocol(mailboxInfoDO.getProtocol());
  180. quartzBean.setJobParam(JSON.toJSONString(paramDTO));
  181. QuartzUtils.createScheduleJob(scheduler,quartzBean);
  182. }
  183. }
  184. @Override
  185. public List<MailboxInfoDO> getAll() {
  186. return emailConfigMapper.getAll();
  187. }
  188. @Override
  189. public MailboxInfoDO selectEmailConfigByEmail(String email) {
  190. return emailConfigMapper.selectEmailConfigByEmail(email);
  191. }
  192. @Override
  193. public void runOnce(Integer id) {
  194. MailboxInfoDO mailboxInfoDO = emailConfigMapper.searchEmailConfigById(id);
  195. QuartzUtils.runOnce(scheduler,mailboxInfoDO.getEmail(),groupName);
  196. }
  197. @Override
  198. public void parseEmail(ParseParamVO parseParamVO) {
  199. Integer id = parseParamVO.getId();
  200. String startDate = parseParamVO.getStartDate();
  201. String endDate = null;
  202. if(StringUtil.isEmpty(parseParamVO.getEndDate())){
  203. endDate = DateUtils.getAroundToday(1);
  204. }else{
  205. endDate = DateUtil.getAroundDate(DateUtils.parse(parseParamVO.getEndDate(),DateUtils.YYYY_MM_DD),1);
  206. }
  207. MailboxInfoDO mailboxInfoDO = emailConfigMapper.searchEmailConfigById(id);
  208. MailboxInfoDTO mailboxInfoDTO = new MailboxInfoDTO();
  209. mailboxInfoDTO.setAccount(mailboxInfoDO.getEmail());
  210. String password = mailboxInfoDO.getPassword();
  211. try{
  212. String publicKey = this.properties.getSecurityRsa().getPublicKey();
  213. String privateKey = this.properties.getSecurityRsa().getPrivateKey();
  214. password = new RSA(privateKey, publicKey).decryptStr(password, KeyType.PrivateKey);
  215. }catch (Exception e){
  216. logger.error(e.getMessage(),e);
  217. }
  218. mailboxInfoDTO.setPassword(password);
  219. mailboxInfoDTO.setPort(mailboxInfoDO.getPort());
  220. mailboxInfoDTO.setHost(mailboxInfoDO.getServer());
  221. mailboxInfoDTO.setProtocol(mailboxInfoDO.getProtocol());
  222. emailParseApiService.parseEmail(mailboxInfoDTO,DateUtils.parse(startDate,DateUtils.YYYY_MM_DD),DateUtils.parse(endDate,DateUtils.YYYY_MM_DD));
  223. }
  224. private MailboxInfoDO toMailboxInfoDO(MailboxInfoVO mailboxInfoVO) {
  225. MailboxInfoDO mailboxInfoDO = new MailboxInfoDO();
  226. mailboxInfoDO.setIsvalid(1);
  227. mailboxInfoDO.setId(mailboxInfoVO.getId());
  228. mailboxInfoDO.setEmail(mailboxInfoVO.getEmail());
  229. mailboxInfoDO.setCron(EmailCron.getEmailCronByText(mailboxInfoVO.getCron()).getCron());
  230. mailboxInfoDO.setServer(mailboxInfoVO.getServer());
  231. mailboxInfoDO.setPort(mailboxInfoVO.getPort());
  232. mailboxInfoDO.setDescription(mailboxInfoVO.getDescription());
  233. mailboxInfoDO.setPassword(mailboxInfoVO.getPassword());
  234. mailboxInfoDO.setType(mailboxInfoVO.getType());
  235. mailboxInfoDO.setProtocol(mailboxInfoVO.getProtocol());
  236. mailboxInfoDO.setOpenStatus(mailboxInfoVO.getOpenStatus());
  237. mailboxInfoDO.setUpdateTime(new Date());
  238. mailboxInfoDO.setUpdaterId(999);
  239. mailboxInfoDO.setCreatorId(999);
  240. return mailboxInfoDO;
  241. }
  242. }