package com.yc.crm.mail.action; import com.yc.crm.mail.entity.*; import com.yc.crm.mail.service.MailAccountIfc; import com.yc.crm.mail.service.MailFileIfc; import com.yc.crm.mail.service.MailIfc; import com.yc.crm.mail.service.MailServiceIfc; import com.yc.crm.mail.util.AllBackMsg; import com.yc.entity.AttachmentConfig; import com.yc.entity.DataSourceEntity; import com.yc.entity.attachment.AttachmentEntity; import com.yc.factory.FactoryBean; import com.yc.multiData.MultiDataSource; import com.yc.multiData.SpObserver; import com.yc.utils.SessionKey; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.web.bind.annotation.*; import javax.mail.MessagingException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @BelongsProject: eCoWorksV3 * @BelongsPackage: com.yc.crm.mail.action * @author: xinyb * @CreateTime: 2024-08-07 17:30 * @Description: 邮箱发送 收件 */ @CrossOrigin @RestController @RequestMapping("/crm/mail") public class MailController { ThreadPoolTaskExecutor threadPoolExecutor = (ThreadPoolTaskExecutor) FactoryBean.getBean("threadPoolExecutor");//线程池 final static String shoppingImageServer = AttachmentConfig.get("attachment.server"); @Autowired MailAccountIfc emailAccountIfc; @Autowired MailIfc emailIfc; @Autowired MailServiceIfc mailServiceIfc; @Autowired MailFileIfc mailFileIfc; private static final Pattern EMAIL_PATTERN = Pattern.compile("^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$"); /** * 左边结构上层 * * @return */ @GetMapping("/getEmailModule.do") public AllBackMsg getEmailModule(HttpServletRequest request, HttpServletResponse response) throws Exception { AllBackMsg msg = new AllBackMsg(); try { HttpSession session = request.getSession(); String userCode = (String) session.getAttribute(SessionKey.USERCODE);//当前登录用户 if (StringUtils.isBlank(userCode)) {//获取不到当前用户直接结束 msg.setFail("获取不到用户信息"); return msg; } DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//获取数据源信息 SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//切换数据源 List list = emailIfc.getMailModuleList(userCode); msg.setSuccess("执行成功", list); } catch (Exception e) { msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); } finally { SpObserver.setDBtoInstance(); } return msg; } /** * 左边结构下层 * * @return */ @GetMapping("/getEmailModuleBelow.do") public AllBackMsg getEmailModuleBelow(HttpServletRequest request, HttpServletResponse response) throws Exception { AllBackMsg msg = new AllBackMsg(); try { HttpSession session = request.getSession(); String userCode = (String) session.getAttribute(SessionKey.USERCODE);//当前登录用户 if (StringUtils.isBlank(userCode)) {//获取不到当前用户直接结束 msg.setFail("获取不到用户信息"); return msg; } DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//获取数据源信息 SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//切换数据源 List list = emailIfc.getMailModuleBelowList(userCode); msg.setSuccess("执行成功", list); } catch (Exception e) { msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); } finally { SpObserver.setDBtoInstance(); } return msg; } /** * 获取邮件列表(包括草稿箱,收件箱) * * @return */ @GetMapping("/getMailList.do") public AllBackMsg getMailList(String mail, @RequestParam(defaultValue = "1") Integer mailType, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "20") Integer limit, boolean isNoRead, HttpServletRequest request, HttpServletResponse response) throws Exception { AllBackMsg msg = new AllBackMsg(); try { if (StringUtils.isNotBlank(mail)) { if (!EMAIL_PATTERN.matcher(mail).matches()) { msg.setFail("邮箱的各式不争取"); return msg; } } HttpSession session = request.getSession(); String userCode = (String) session.getAttribute(SessionKey.USERCODE);//当前登录用户 if (StringUtils.isBlank(userCode)) {//获取不到当前用户直接结束 msg.setFail("获取不到用户信息"); return msg; } DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//获取数据源信息 SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//切换数据源 List t482101HEntityList = emailIfc.getReceivingMailList(mail, mailType, isNoRead, userCode, page, limit); Map map = new HashMap<>(); map.put("page", page); map.put("limit", limit); if (t482101HEntityList.size() > 0) { map.put("total", emailIfc.getMailTotal(mail, mailType, isNoRead, null, userCode)); map.put("list", t482101HEntityList); } else { map.put("list", new ArrayList<>()); } msg.setSuccess("执行完成", map); } catch (Exception e) { msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); } finally { SpObserver.setDBtoInstance(); } return msg; } /** * 获取待处理邮件列表 * * @return */ @GetMapping("/getHandleMailList.do") public AllBackMsg getHandleMailList(String mail, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "20") Integer limit, HttpServletRequest request, HttpServletResponse response) throws Exception { AllBackMsg msg = new AllBackMsg(); try { if (StringUtils.isNotBlank(mail)) { if (!EMAIL_PATTERN.matcher(mail).matches()) { msg.setFail("邮箱的各式不争取"); return msg; } } HttpSession session = request.getSession(); String userCode = (String) session.getAttribute(SessionKey.USERCODE);//当前登录用户 if (StringUtils.isBlank(userCode)) {//获取不到当前用户直接结束 msg.setFail("获取不到用户信息"); return msg; } DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//获取数据源信息 SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//切换数据源 List t482101HEntityList = emailIfc.getHandleMailList(mail, userCode, page, limit); Map map = new HashMap<>(); map.put("page", page); map.put("limit", limit); if (t482101HEntityList.size() > 0) { map.put("total", emailIfc.getMailTotal(mail, 3, false, null, userCode)); map.put("list", t482101HEntityList); } else { map.put("list", new ArrayList<>()); } msg.setSuccess("执行完成", map); } catch (Exception e) { msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); } finally { SpObserver.setDBtoInstance(); } return msg; } /** * 获取邮件详情 * * @return */ @GetMapping("/getMailInfo.do") public AllBackMsg getMailInfo(String docCode, HttpServletRequest request, HttpServletResponse response) throws Exception { AllBackMsg msg = new AllBackMsg(); try { if (StringUtils.isBlank(docCode)) {//获取不到当前用户直接结束 msg.setFail("缺少邮箱唯一码docCode,请检查"); return msg; } DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//获取数据源信息 SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//切换数据源 t482101HEntity t482101HEntity = emailIfc.getReceivingMailInfo(docCode); if (t482101HEntity != null) { if (StringUtils.isNotBlank(t482101HEntity.getAttachmentList())) {//附件的处理 //获取到附件内容 List attachmentEntities = mailFileIfc.getAttachmentEntityList(t482101HEntity.getAttachmentList()); List> list = new ArrayList<>(); if (attachmentEntities.size() > 0) { for (AttachmentEntity a : attachmentEntities) { Map map = new HashMap<>(); map.put("url", shoppingImageServer + "/uploads/email/" + dataSourceEntity.getDbId() + "/482101/" + a.getUnid() + "@p@" + a.getPhysicalFile()); if (!t482101HEntity.getMailType().equals(1)) {//不是收件类型(1) map.put("url", shoppingImageServer + "/uploads/attachment/" + dataSourceEntity.getDbId() + "/482101/" + a.getUnid() + "@p@" + a.getSeq() + "." + a.getFileType()); } map.put("name", a.getOriginalFileName()); map.put("size", a.getFileSize()); map.put("fileType", a.getFileType()); list.add(map); } t482101HEntity.setAttachmentPath(list); } } msg.setSuccess("执行完成", t482101HEntity); } } catch (Exception e) { msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); } finally { SpObserver.setDBtoInstance(); } return msg; } /** * 删除邮件 * * @return */ @PostMapping("/deleteEmail.do") public AllBackMsg deleteEmail(@RequestBody List docCode, HttpServletRequest request, HttpServletResponse response) throws Exception { AllBackMsg msg = new AllBackMsg(); try { if (docCode == null && docCode.size() == 0) {//获取不到当前用户直接结束 msg.setFail("请选中删除的邮件"); return msg; } String arrayCode = StringUtils.join(docCode, ","); HttpSession session = request.getSession(); String userCode = (String) session.getAttribute(SessionKey.USERCODE);//当前登录用户 if (StringUtils.isBlank(userCode)) {//获取不到当前用户直接结束 msg.setFail("获取不到用户信息"); return msg; } DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//获取数据源信息 SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//切换数据源 Integer cont = emailIfc.deleteEmail(userCode, arrayCode); if (cont > 0) { msg.setOk("已删除"); } } catch (Exception e) { msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); } finally { SpObserver.setDBtoInstance(); } return msg; } /** * 快速回复 * * @return */ @PostMapping("/setQuickReply.do") public AllBackMsg setQuickReply(@RequestBody Map reply, HttpServletRequest request, HttpServletResponse response) throws Exception { AllBackMsg msg = new AllBackMsg(); try { if (reply.get("docCode") == null) { msg.setFail("获取不到回复邮件的唯一docCode值"); return msg; } if (reply.get("content") == null) { msg.setFail("请输入回复内容"); return msg; } HttpSession session = request.getSession(); String userCode = (String) session.getAttribute(SessionKey.USERCODE);//当前登录用户 if (StringUtils.isBlank(userCode)) {//获取不到当前用户直接结束 msg.setFail("获取不到用户信息"); return msg; } String docCode = (String) reply.get("docCode");//编号 String content = (String) reply.get("content");//内容 Integer count = mailServiceIfc.setQuickReply(docCode, content); Map map = new HashMap<>(); if (count.equals(1)) { map.put("code", 0); map.put("docCode", docCode); map.put("msg", "邮件已回复"); msg.setSuccess("执行成功", map); } else { map.put("code", -1); map.put("docCode", docCode); map.put("msg", "邮件回复失败"); msg.setSuccess("执行成功", map); } } catch (Exception e) { msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); } finally { SpObserver.setDBtoInstance(); } return msg; } /** * 保存草稿箱(保存或修改) * * @return */ @PostMapping("/saveMailDrafts.do") public AllBackMsg saveMailDrafts(@RequestBody t482101HEntity t482101H, HttpServletRequest request, HttpServletResponse response) throws Exception { AllBackMsg msg = new AllBackMsg(); try { HttpSession session = request.getSession(); String userCode = (String) session.getAttribute(SessionKey.USERCODE);//当前登录用户 if (StringUtils.isBlank(userCode)) {//获取不到当前用户直接结束 msg.setFail("获取不到用户信息"); return msg; } if (StringUtils.isNotBlank(t482101H.getSender())) { if (!EMAIL_PATTERN.matcher(t482101H.getSender()).matches()) { msg.setFail("发送人邮箱:" + t482101H.getSender() + "的格式不正确"); return msg; } } if (t482101H.getReceiver() != null && t482101H.getReceiver().size() > 0) { for (String mail : t482101H.getReceiver()) { if (!EMAIL_PATTERN.matcher(mail).matches()) { msg.setFail("收件人邮箱:" + mail + "的格式不正确"); return msg; } } } String companyId = (String) session.getAttribute(SessionKey.COMPANY_ID); String companyName = (String) session.getAttribute(SessionKey.COMPANY_NAME); String userName = (String) session.getAttribute(SessionKey.USER_NAME); t482101H.setCompanyId(companyId); t482101H.setCompanyName(companyName); t482101H.setUserCode(userCode); t482101H.setUserName(userName); t482101H.setMailType(0);//草稿 t482101H.setReadFlag(1);//已读 t482101H.setAttachmentList(t482101H.getAttachmentList()); DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//获取数据源信息 SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//切换数据源 t482101H = emailIfc.saveReceivingMail(t482101H); Map map = new HashMap<>(); map.put("docCode", t482101H.getDocCode()); msg.setSuccess("执行成功", map); } catch (Exception e) { msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); } finally { SpObserver.setDBtoInstance(); } return msg; } /** * 收邮件 * * @param request * @param response * @return */ @GetMapping("/receive.do") public AllBackMsg getReceiveMail(String mail, HttpServletRequest request, HttpServletResponse response) throws Exception { AllBackMsg msg = new AllBackMsg(); try { HttpSession session = request.getSession(); String userCode = (String) session.getAttribute(SessionKey.USERCODE);//当前登录用户 if (StringUtils.isBlank(userCode)) {//获取不到当前用户直接结束 msg.setFail("获取不到用户信息"); return msg; } if (StringUtils.isNotBlank(mail)) { if (!EMAIL_PATTERN.matcher(mail).matches()) { msg.setFail("请输入有效的邮箱"); return msg; } } DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//获取数据源信息 SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//切换数据源 //根据当前用户查询绑定的邮箱信息 List emailEntities = new ArrayList<>(); if (StringUtils.isBlank(mail)) { emailEntities = emailAccountIfc.getAccount(userCode);//返回邮箱的账号信息 } else { T482102Entity T482102 = emailAccountIfc.getAccountInfo(userCode, mail); if (T482102 != null) { emailEntities.add(T482102); } } if (emailEntities.size() > 0) { List mails = new ArrayList<>(); Map map = new HashMap<>(); for (T482102Entity e : emailEntities) {//遍历用户绑定邮箱 //多线程收邮件 threadPoolExecutor.execute(new ReceivingEmailsSave(mailServiceIfc, e, new FoundationEntity(request))); } map.put("code", 0); map.put("msg", "请销等,邮件正在系统保存"); msg.setSuccess("执行成功", map); } else { msg.setFail("没有找到绑定的邮箱信息"); } } catch (Exception e) { msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); } finally { SpObserver.setDBtoInstance(); } return msg; } /** * 发邮件 * * @param request * @param response * @return */ @PostMapping("/sendingMail.do") public AllBackMsg sendingMail(@RequestBody t482101HEntity t482101H, HttpServletRequest request, HttpServletResponse response) throws Exception { AllBackMsg msg = new AllBackMsg(); try { HttpSession session = request.getSession(); String userCode = (String) session.getAttribute(SessionKey.USERCODE);//当前登录用户 if (StringUtils.isBlank(userCode)) {//获取不到当前用户直接结束 msg.setFail("获取不到用户信息"); return msg; } if (StringUtils.isNotBlank(t482101H.getSender())) { if (!EMAIL_PATTERN.matcher(t482101H.getSender()).matches()) { msg.setFail("发送人邮箱:" + t482101H.getSender() + "的格式不正确"); return msg; } } if (t482101H.getReceiver() != null && t482101H.getReceiver().size() > 0) { for (String mail : t482101H.getReceiver()) { if (!EMAIL_PATTERN.matcher(mail).matches()) { msg.setFail("收件人邮箱:" + mail + "的格式不正确"); return msg; } } } String companyId = (String) session.getAttribute(SessionKey.COMPANY_ID); String companyName = (String) session.getAttribute(SessionKey.COMPANY_NAME); String userName = (String) session.getAttribute(SessionKey.USER_NAME); t482101H.setCompanyId(companyId); t482101H.setCompanyName(companyName); t482101H.setUserCode(userCode); t482101H.setUserName(userName); t482101H.setMailType(2);//发件 t482101H.setAttachmentList(t482101H.getAttachmentList()); DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//获取数据源信息 SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//切换数据源 //发送 mailServiceIfc.sendEmails(t482101H, request); msg.setOk("发送成功"); } catch (MessagingException e) { String error = e.getCause() != null ? e.getCause().getMessage() : e.getMessage(); if (StringUtils.isNotBlank(error)) { String[] arrayError = error.split("#"); if (arrayError.length == 2) { Map map = new HashMap<>(); map.put("docCode", arrayError[1]); msg.setError(arrayError[0], map); } else { msg.setFail(error); } } else { msg.setFail(error); } } catch (Exception e) { msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); } finally { SpObserver.setDBtoInstance(); } return msg; } /** * 标记已读 * * @param request * @param response * @return */ @PostMapping("/updateRead.do") public AllBackMsg updateRead(@RequestBody Map map, HttpServletRequest request, HttpServletResponse response) throws Exception { AllBackMsg msg = new AllBackMsg(); try { HttpSession session = request.getSession(); String userCode = (String) session.getAttribute(SessionKey.USERCODE);//当前登录用户 if (StringUtils.isBlank(userCode)) {//获取不到当前用户直接结束 msg.setFail("获取不到用户信息"); return msg; } List docCode = (List) map.get("list"); if (docCode == null && docCode.size() == 0) { msg.setFail("请选择标记邮件"); return msg; } if (map.get("status") == null) { msg.setFail("请传入状态值"); return msg; } boolean read = (Boolean) map.get("status"); String arrayCode = StringUtils.join(docCode, ","); DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//获取数据源信息 SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//切换数据源 emailIfc.updateRead(arrayCode, read); msg.setOk("标记成功"); } catch (Exception e) { msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); } finally { SpObserver.setDBtoInstance(); } return msg; } /** * 移动邮件分类 * * @param request * @param response * @return */ @PostMapping("/updateMailType.do") public AllBackMsg updateMailType(@RequestBody Map map, HttpServletRequest request, HttpServletResponse response) throws Exception { AllBackMsg msg = new AllBackMsg(); try { HttpSession session = request.getSession(); String userCode = (String) session.getAttribute(SessionKey.USERCODE);//当前登录用户 if (StringUtils.isBlank(userCode)) {//获取不到当前用户直接结束 msg.setFail("获取不到用户信息"); return msg; } if (map.get("docCode") == null) { msg.setFail("获取不到移动邮件编号docCode"); return msg; } String docCode = (String) map.get("docCode"); Integer folderId = map.get("folderId") == null ? 0 : (Integer) map.get("folderId"); List tagArray = (List) map.get("tagId"); if (folderId.equals(0) && (tagArray == null || tagArray.size() == 0)) { msg.setFail("移动邮件分类不能为空"); return msg; } String tagId = ""; if (tagArray != null && tagArray.size() > 0) { tagId = StringUtils.join(tagArray, ","); } DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//获取数据源信息 SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//切换数据源 emailIfc.updateMailType(docCode, folderId, tagId); msg.setOk("移动成功"); } catch (Exception e) { msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); } finally { SpObserver.setDBtoInstance(); } return msg; } /** * 加载不同目录里的邮件 * * @param request * @param response * @return */ @GetMapping("/classificationMail.do") public AllBackMsg classificationMail(@RequestParam(defaultValue = "-1") Integer id, String type, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "20") Integer limit, HttpServletRequest request, HttpServletResponse response) throws Exception { AllBackMsg msg = new AllBackMsg(); try { HttpSession session = request.getSession(); String userCode = (String) session.getAttribute(SessionKey.USERCODE);//当前登录用户 if (StringUtils.isBlank(userCode)) {//获取不到当前用户直接结束 msg.setFail("获取不到用户信息"); return msg; } if (id == null || id.equals(-1)) { msg.setFail("获取不到文件Id"); return msg; } if (StringUtils.isBlank(type)) { msg.setFail("获取不到文件类型"); return msg; } type = type + "_" + id;//组装下 DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//获取数据源信息 SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//切换数据源 List t482101 = emailIfc.getFolderMailList(type, userCode, page, limit); Map map = new HashMap<>(); map.put("page", page); map.put("limit", limit); if (t482101.size() > 0) { map.put("total", emailIfc.getMailTotal(null, 6, false, type, userCode)); map.put("list", t482101); } else { map.put("list", new ArrayList<>()); } msg.setSuccess("执行完成", map); } catch (Exception e) { msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); } finally { SpObserver.setDBtoInstance(); } return msg; } /** * 待处理邮件 * * @param request * @param response * @return */ @PostMapping("/updateHandle.do") public AllBackMsg updateHandle(@RequestBody Map param, HttpServletRequest request, HttpServletResponse response) throws Exception { AllBackMsg msg = new AllBackMsg(); try { HttpSession session = request.getSession(); String userCode = (String) session.getAttribute(SessionKey.USERCODE);//当前登录用户 if (StringUtils.isBlank(userCode)) {//获取不到当前用户直接结束 msg.setFail("获取不到用户信息"); return msg; } if (param.get("docCode") == null) { msg.setFail("邮件唯一标识docCode不能空"); return msg; } if (param.get("handleTime") == null) { msg.setFail("待处理时间不能空"); return msg; } List docCode = (List) param.get("docCode"); String handleTime = (String) param.get("handleTime"); // 正则表达式,用于匹配日期格式 String regex = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(handleTime); if (!matcher.matches()) { msg.setFail("待处理日期格式为:yyyy-MM-dd HH:mm(如:1900-08-01 08:00)。请检查"); return msg; } DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//获取数据源信息 SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//切换数据源 emailIfc.updateMailHandle(handleTime, StringUtils.join(docCode, ",")); msg.setOk("成功标记为待处理邮件"); } catch (Exception e) { msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); } finally { SpObserver.setDBtoInstance(); } return msg; } private class ReceivingEmailsSave implements Runnable { final MailServiceIfc mailServiceIfc; final T482102Entity t482102; final FoundationEntity foundation; public ReceivingEmailsSave(MailServiceIfc mailServiceIfc, T482102Entity t482102, FoundationEntity foundation) { this.mailServiceIfc = mailServiceIfc; this.t482102 = t482102; this.foundation = foundation; } @Override public void run() { try { SpObserver.setDBtoInstance("_" + foundation.getDbId()); //收邮件 mailServiceIfc.receivingEmails(t482102, foundation); } catch (Exception e) { e.printStackTrace(); } finally { SpObserver.setDBtoInstance(); } } } }