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