1
0

EmailConfigServiceImpl.java 10 KB

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