1
0

EmailConfigServiceImpl.java 11 KB

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