From 1956855b43808d81f246d9570d477ac1cbc404b7 Mon Sep 17 00:00:00 2001 From: xinyb <574600396@qq.com> Date: 星期四, 19 九月 2024 11:25:36 +0800 Subject: [PATCH] CRM邮箱接口优化 --- src/com/yc/crm/mail/action/MailController.java | 349 +++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 249 insertions(+), 100 deletions(-) diff --git a/src/com/yc/crm/mail/action/MailController.java b/src/com/yc/crm/mail/action/MailController.java index 6c9c185..e182c91 100644 --- a/src/com/yc/crm/mail/action/MailController.java +++ b/src/com/yc/crm/mail/action/MailController.java @@ -1,20 +1,24 @@ package com.yc.crm.mail.action; -import com.yc.crm.mail.entity.MailModuleEntity; -import com.yc.crm.mail.entity.T482102Entity; -import com.yc.crm.mail.entity.t482101HEntity; -import com.yc.crm.mail.entity.t482101HList; +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; @@ -35,10 +39,17 @@ @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}$"); @@ -77,7 +88,8 @@ * @return */ @GetMapping("/getMailList.do") - public AllBackMsg getMailList(String mail, @RequestParam(defaultValue = "1") Integer mailType, boolean isNoRead, HttpServletRequest request, HttpServletResponse response) throws Exception { + 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)) { @@ -94,7 +106,43 @@ } DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//鑾峰彇鏁版嵁婧愪俊鎭� SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//鍒囨崲鏁版嵁婧� - List<t482101HList> t482101HEntityList = emailIfc.getReceivingMailList(mail, mailType, isNoRead, userCode); + List<t482101HList> t482101HEntityList = emailIfc.getReceivingMailList(mail, mailType, isNoRead, userCode,page,limit); + if (t482101HEntityList.size() > 0) { + msg.setSuccess("鎵ц瀹屾垚", t482101HEntityList); + } + } 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<t482101HList> t482101HEntityList = emailIfc.getHandleMailList(mail, userCode,page,limit); if (t482101HEntityList.size() > 0) { msg.setSuccess("鎵ц瀹屾垚", t482101HEntityList); } @@ -123,6 +171,17 @@ SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//鍒囨崲鏁版嵁婧� t482101HEntity t482101HEntity = emailIfc.getReceivingMailInfo(docCode); if (t482101HEntity != null) { + if (StringUtils.isNotBlank(t482101HEntity.getAttachmentList())) {//闄勪欢鐨勫鐞� + //鑾峰彇鍒伴檮浠跺唴瀹� + List<AttachmentEntity> attachmentEntities = mailFileIfc.getAttachmentEntityList(t482101HEntity.getAttachmentList()); + List<String> list = new ArrayList<>(); + if (attachmentEntities.size() > 0) { + for (AttachmentEntity a : attachmentEntities) { + list.add(shoppingImageServer + "/uploads/email/" + dataSourceEntity.getDbId() + "/482101/" + a.getUnid() + "@p@" + a.getPhysicalFile()); + } + t482101HEntity.setAttachmentPath(list); + } + } msg.setSuccess("鎵ц瀹屾垚", t482101HEntity); } } catch (Exception e) { @@ -158,6 +217,52 @@ 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<String, Object> 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<String, Object> 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()); @@ -206,7 +311,7 @@ t482101H.setUserName(userName); t482101H.setMailType(0);//鑽夌 t482101H.setReadFlag(1);//宸茶 - t482101H.setAttachmentList(t482101H.getFileUNID()); + t482101H.setAttachmentList(t482101H.getAttachmentList()); DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//鑾峰彇鏁版嵁婧愪俊鎭� SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//鍒囨崲鏁版嵁婧� t482101H = emailIfc.saveReceivingMail(t482101H); @@ -221,42 +326,66 @@ return msg; } - /** - * 鍒犻櫎鑽夌绠� - * - * @return - */ -// @PostMapping("/deleteMailDrafts.do") -// public AllBackMsg deleteMailDrafts(@RequestBody List<String> 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());//鍒囨崲鏁版嵁婧� -// int 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; -// } /** - * 鍙戦�侀偖浠� + * 鏀堕偖浠� + * + * @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<T482102Entity> 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<t482101HEntity> mails = new ArrayList<>(); + Map<String, Object> map = new HashMap<>(); + for (T482102Entity e : emailEntities) {//閬嶅巻鐢ㄦ埛缁戝畾閭 + //澶氱嚎绋嬫敹閭欢 + threadPoolExecutor.execute(new ReceivingEmailsSave(mailServiceIfc, e, new FoundationEntity(request))); + } + map.put("code", 0); + map.put("msg", "璇烽攢绛夛紝閭欢姝e湪绯荤粺淇濆瓨"); + 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 @@ -295,70 +424,25 @@ t482101H.setUserCode(userCode); t482101H.setUserName(userName); t482101H.setMailType(2);//鍙戜欢 - t482101H.setAttachmentList(t482101H.getFileUNID()); + t482101H.setAttachmentList(t482101H.getAttachmentList()); DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//鑾峰彇鏁版嵁婧愪俊鎭� SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//鍒囨崲鏁版嵁婧� //鍙戦�� - emailIfc.sendingMail(t482101H, request); + mailServiceIfc.sendEmails(t482101H, request); msg.setOk("鍙戦�佹垚鍔�"); - } catch (Exception e) { + } catch (MessagingException e) { String error = e.getCause() != null ? e.getCause().getMessage() : e.getMessage(); - String[] arrayError = error.split("#"); - if (arrayError.length == 2) { - Map<String, Object> map = new HashMap<>(); - map.put("docCode", arrayError[1]); - msg.setError(arrayError[0], map); + if (StringUtils.isNotBlank(error)) { + String[] arrayError = error.split("#"); + if (arrayError.length == 2) { + Map<String, Object> map = new HashMap<>(); + map.put("docCode", arrayError[1]); + msg.setError(arrayError[0], map); + } else { + msg.setFail(error); + } } else { msg.setFail(error); - } - } 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<T482102Entity> emailEntities = emailAccountIfc.getAccount(userCode);//杩斿洖閭鐨勮处鍙蜂俊鎭� - if (emailEntities.size() > 0) { - List<t482101HEntity> mails = new ArrayList<>(); - for (T482102Entity e : emailEntities) {//閬嶅巻鐢ㄦ埛缁戝畾閭 - //鏀堕偖浠朵俊鎭� - mails.addAll(emailIfc.getMailReceiving(e, request)); - } - if (mails.size() > 0) { - emailIfc.saveReceivingMailList(mails);//淇濆瓨 - msg.setOk("淇濆瓨鎴愬姛"); - } else { - msg.setOk("鏈彂鐜版柊閭欢"); - } - } else { - msg.setFail("娌℃湁鎵惧埌缁戝畾鐨勯偖绠变俊鎭�"); } } catch (Exception e) { msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); @@ -376,7 +460,7 @@ * @return */ @PostMapping("/updateRead.do") - public AllBackMsg updateRead(@RequestBody List<String> docCode, HttpServletRequest request, HttpServletResponse response) throws Exception { + public AllBackMsg updateRead(@RequestBody Map<String, Object> map, HttpServletRequest request, HttpServletResponse response) throws Exception { AllBackMsg msg = new AllBackMsg(); try { HttpSession session = request.getSession(); @@ -385,14 +469,20 @@ msg.setFail("鑾峰彇涓嶅埌鐢ㄦ埛淇℃伅"); return msg; } + List<String> docCode = (List<String>) 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); + emailIfc.updateRead(arrayCode, read); msg.setOk("鏍囪鎴愬姛"); } catch (Exception e) { msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); @@ -402,4 +492,63 @@ return msg; } + /** + * 寰呭鐞嗛偖浠� + * + * @param request + * @param response + * @return + */ + @GetMapping("/updateHandle.do") + public AllBackMsg updateHandle(String handleTime, String docCode, 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.isBlank(docCode)) { + msg.setFail("閭欢鍞竴鏍囪瘑docCode涓嶈兘绌�"); + return msg; + } + DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//鑾峰彇鏁版嵁婧愪俊鎭� + SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//鍒囨崲鏁版嵁婧� + emailIfc.updateMailHandle(handleTime, 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(); + } + } + } + } -- Gitblit v1.8.0