1
0

EmailConfigServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  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(getPassword(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. private String getPassword(String password){
  103. try{
  104. String privateKey = this.properties.getSecurityRsa().getPrivateKey();
  105. password = new RSA(privateKey, null).decryptStr(password, KeyType.PrivateKey);
  106. }catch (Exception e){
  107. logger.error(e.getMessage(),e);
  108. }
  109. return password;
  110. }
  111. @Override
  112. public ResultVo connectTest(MailboxInfoVO mailboxInfoVO) {
  113. ResultVo vo = new ResultVo(ResultCode.CONNECT_SUCCESS);
  114. MailboxInfoDTO mailboxInfoDTO = new MailboxInfoDTO();
  115. mailboxInfoDTO.setAccount(mailboxInfoVO.getEmail());
  116. mailboxInfoDTO.setPassword(getPassword(mailboxInfoVO.getPassword()));
  117. mailboxInfoDTO.setPort(mailboxInfoVO.getPort());
  118. mailboxInfoDTO.setHost(mailboxInfoVO.getServer());
  119. mailboxInfoDTO.setProtocol(mailboxInfoVO.getProtocol());
  120. Store store = EmailUtil.getStoreNew(mailboxInfoDTO);
  121. if(store != null){
  122. try {
  123. store.close();
  124. } catch (MessagingException e) {
  125. throw new RuntimeException(e);
  126. }
  127. vo.setMsg(ResultCode.CONNECT_SUCCESS.getMsg());
  128. vo.setData(true);
  129. return vo;
  130. }
  131. vo = new ResultVo(ResultCode.CONNECT_ERROR);
  132. vo.setData(false);
  133. vo.setMsg(ResultCode.CONNECT_ERROR.getMsg());
  134. return vo;
  135. }
  136. @Override
  137. public void deleteEmailConfig(Integer id) {
  138. //删除定时任务
  139. MailboxInfoDO mailboxInfoDO = emailConfigMapper.searchEmailConfigById(id);
  140. QuartzUtils.deleteScheduleJob(scheduler,mailboxInfoDO.getEmail(),groupName);
  141. List<Integer> idList = new ArrayList<>();
  142. idList.add(id);
  143. emailConfigMapper.deleteEmailConfigByIds(idList);
  144. }
  145. @Override
  146. public boolean checkEmailUnique(String email) {
  147. MailboxInfoDO mailboxInfoDO = emailConfigMapper.selectEmailConfigByEmail(email);
  148. if (StringUtil.isNotNull(mailboxInfoDO))
  149. {
  150. return UserConstants.NOT_UNIQUE;
  151. }
  152. return UserConstants.UNIQUE;
  153. }
  154. @Override
  155. public MailboxInfoVO searchEmailConfigById(Integer id) {
  156. MailboxInfoDO mailboxInfoDO = emailConfigMapper.searchEmailConfigById(id);
  157. MailboxInfoVO mailboxInfoVO = mailboxInfoDO.toVo();
  158. return mailboxInfoVO;
  159. }
  160. @Override
  161. public void controlEmailConfig(OpenStatusVO openStatusVO) {
  162. MailboxInfoDO mailboxInfoDO = emailConfigMapper.searchEmailConfigById(openStatusVO.getId());
  163. mailboxInfoDO.setOpenStatus(openStatusVO.getOpenStatus());
  164. mailboxInfoDO.setUpdateTime(DateUtils.getNowDate());
  165. emailConfigMapper.updateById(mailboxInfoDO);
  166. //设置定时任务
  167. QuartzUtils.deleteScheduleJob(scheduler,mailboxInfoDO.getEmail(),groupName);
  168. if(openStatusVO.getOpenStatus().equals(OpenStatusType.YES.getCode())){
  169. QuartzBean quartzBean = new QuartzBean();
  170. quartzBean.setCronExpression(mailboxInfoDO.getCron());
  171. quartzBean.setStatus(mailboxInfoDO.getOpenStatus());
  172. quartzBean.setGroupName(groupName);
  173. quartzBean.setJobName(mailboxInfoDO.getEmail());
  174. quartzBean.setJobClass(JOB_CLASS);
  175. //请求参数
  176. MailboxInfoDTO paramDTO = new MailboxInfoDTO();
  177. paramDTO.setAccount(mailboxInfoDO.getEmail());
  178. paramDTO.setPassword(mailboxInfoDO.getPassword());
  179. paramDTO.setPort(mailboxInfoDO.getPort());
  180. paramDTO.setHost(mailboxInfoDO.getServer());
  181. paramDTO.setProtocol(mailboxInfoDO.getProtocol());
  182. quartzBean.setJobParam(JSON.toJSONString(paramDTO));
  183. QuartzUtils.createScheduleJob(scheduler,quartzBean);
  184. }
  185. }
  186. @Override
  187. public List<MailboxInfoDO> getAll() {
  188. return emailConfigMapper.getAll();
  189. }
  190. @Override
  191. public MailboxInfoDO selectEmailConfigByEmail(String email) {
  192. return emailConfigMapper.selectEmailConfigByEmail(email);
  193. }
  194. @Override
  195. public void runOnce(Integer id) {
  196. MailboxInfoDO mailboxInfoDO = emailConfigMapper.searchEmailConfigById(id);
  197. QuartzUtils.runOnce(scheduler,mailboxInfoDO.getEmail(),groupName);
  198. }
  199. @Override
  200. public void parseEmail(ParseParamVO parseParamVO) {
  201. Integer id = parseParamVO.getId();
  202. String startDate = parseParamVO.getStartDate();
  203. String endDate = null;
  204. if(StringUtil.isEmpty(parseParamVO.getEndDate())){
  205. endDate = DateUtils.getAroundToday(1);
  206. }else{
  207. endDate = DateUtil.getAroundDate(DateUtils.parse(parseParamVO.getEndDate(),DateUtils.YYYY_MM_DD),1);
  208. }
  209. MailboxInfoDO mailboxInfoDO = emailConfigMapper.searchEmailConfigById(id);
  210. MailboxInfoDTO mailboxInfoDTO = new MailboxInfoDTO();
  211. mailboxInfoDTO.setAccount(mailboxInfoDO.getEmail());
  212. String password = mailboxInfoDO.getPassword();
  213. try{
  214. String publicKey = this.properties.getSecurityRsa().getPublicKey();
  215. String privateKey = this.properties.getSecurityRsa().getPrivateKey();
  216. password = new RSA(privateKey, publicKey).decryptStr(password, KeyType.PrivateKey);
  217. }catch (Exception e){
  218. logger.error(e.getMessage(),e);
  219. }
  220. mailboxInfoDTO.setPassword(password);
  221. mailboxInfoDTO.setPort(mailboxInfoDO.getPort());
  222. mailboxInfoDTO.setHost(mailboxInfoDO.getServer());
  223. mailboxInfoDTO.setProtocol(mailboxInfoDO.getProtocol());
  224. emailParseApiService.parseEmail(mailboxInfoDTO,DateUtils.parse(startDate,DateUtils.YYYY_MM_DD),DateUtils.parse(endDate,DateUtils.YYYY_MM_DD));
  225. }
  226. private MailboxInfoDO toMailboxInfoDO(MailboxInfoVO mailboxInfoVO) {
  227. MailboxInfoDO mailboxInfoDO = new MailboxInfoDO();
  228. mailboxInfoDO.setIsvalid(1);
  229. mailboxInfoDO.setId(mailboxInfoVO.getId());
  230. mailboxInfoDO.setEmail(mailboxInfoVO.getEmail());
  231. mailboxInfoDO.setCron(EmailCron.getEmailCronByText(mailboxInfoVO.getCron()).getCron());
  232. mailboxInfoDO.setServer(mailboxInfoVO.getServer());
  233. mailboxInfoDO.setPort(mailboxInfoVO.getPort());
  234. mailboxInfoDO.setDescription(mailboxInfoVO.getDescription());
  235. mailboxInfoDO.setPassword(mailboxInfoVO.getPassword());
  236. mailboxInfoDO.setType(mailboxInfoVO.getType());
  237. mailboxInfoDO.setProtocol(mailboxInfoVO.getProtocol());
  238. mailboxInfoDO.setOpenStatus(mailboxInfoVO.getOpenStatus());
  239. mailboxInfoDO.setUpdateTime(new Date());
  240. mailboxInfoDO.setUpdaterId(999);
  241. mailboxInfoDO.setCreatorId(999);
  242. return mailboxInfoDO;
  243. }
  244. }