Kaynağa Gözat

增加同步邮箱账号及回复id

18118724055@163.com 1 gün önce
ebeveyn
işleme
81b319a6de

+ 2 - 0
java/storlead-framework/storlead-common/src/main/java/com/storlead/framework/common/properties/UrlChainDefinitionPorperties.java

@@ -73,6 +73,8 @@ public class UrlChainDefinitionPorperties {
 			"/sys/menu/update_menu_icon",
 			"/sys/menu/update_menu_icon",
 			"/mail/file/images",
 			"/mail/file/images",
 			"/mail/file/cache_image_file",
 			"/mail/file/cache_image_file",
+			"/mkt/email/file/images",
+			"/mkt/email/file/cache_image_file",
 			"/mail/import_mail_eml",
 			"/mail/import_mail_eml",
 			"/mail/import_mail_eml_zip",
 			"/mail/import_mail_eml_zip",
 			"/sys/test/receive_mail_test",
 			"/sys/test/receive_mail_test",

+ 77 - 0
java/storlead-mail/storlead-mail-api/src/main/java/com/storlead/mail/controller/mkt/MktAttachmentApiController.java

@@ -0,0 +1,77 @@
+package com.storlead.mail.controller.mkt;
+
+import com.storlead.framework.common.result.Result;
+import com.storlead.mail.webclient.client.MktMailFileRemoteClient;
+import com.storlead.mail.webclient.support.MailRemoteResponseWriter;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 营销邮件附件(路径前缀 /mkt/email/file,能力对齐 CRM {@code MaiAttachmentApiController})。
+ */
+@RestController
+@RequestMapping("/mkt/email/file")
+@Api(tags = "营销邮件: 附件")
+@Log4j2
+public class MktAttachmentApiController {
+
+    @Resource
+    private MktMailFileRemoteClient mktMailFileRemoteClient;
+
+    @PostMapping("/cache_mail_file")
+    @ApiOperation("缓存营销邮件临时附件(scene=MKT)")
+    public Result<?> cacheMailFile(@RequestParam("files") List<MultipartFile> files,
+                                   @RequestParam("accountId") Long accountId) {
+        return mktMailFileRemoteClient.cacheMailFile(files, accountId);
+    }
+
+    @PostMapping("/cache_image_file")
+    @ApiOperation("缓存营销邮件正文图片")
+    public Map<String, Object> cacheImageFile(@RequestParam("upload") MultipartFile file,
+                                              @RequestParam(value = "accountId", required = false) Long accountId) {
+        return mktMailFileRemoteClient.cacheImageFile(file, accountId);
+    }
+
+    @PostMapping("/download_mail_file")
+    @ApiOperation("下载营销临时附件")
+    public void downLoadMailFile(Long fileId, HttpServletResponse response) {
+        MailRemoteResponseWriter.write(response, mktMailFileRemoteClient.downloadTempFile(fileId));
+    }
+
+    @GetMapping("/images/{imageName}")
+    public ResponseEntity<byte[]> getImage(@PathVariable String imageName) {
+        return MailRemoteResponseWriter.image(mktMailFileRemoteClient.getImage(imageName));
+    }
+
+    @PostMapping("/list")
+    @ApiOperation("按邮件查询正式附件(mkt_mail_attachment)")
+    public Result<?> listAttachments(@RequestParam Long mailId) {
+        return mktMailFileRemoteClient.listAttachments(mailId);
+    }
+
+    @PostMapping("/download")
+    @ApiOperation("下载营销正式附件")
+    public void downloadFormalFile(@RequestParam Long fileId, HttpServletResponse response) {
+        MailRemoteResponseWriter.write(response, mktMailFileRemoteClient.downloadFormalFile(fileId));
+    }
+
+    @PostMapping("/download_temp")
+    @ApiOperation("下载营销临时附件")
+    public void downloadTempFile(@RequestParam Long fileId, HttpServletResponse response) {
+        MailRemoteResponseWriter.write(response, mktMailFileRemoteClient.downloadTempFile(fileId));
+    }
+}

+ 0 - 28
java/storlead-mail/storlead-mail-api/src/main/java/com/storlead/mail/controller/mkt/MktMailApiController.java

@@ -5,7 +5,6 @@ import com.storlead.mail.webclient.client.MktMailRemoteClient;
 import com.storlead.mail.webclient.dto.MktEditMailContentRemoteDTO;
 import com.storlead.mail.webclient.dto.MktEditMailContentRemoteDTO;
 import com.storlead.mail.webclient.dto.MktMailQueryRemoteDTO;
 import com.storlead.mail.webclient.dto.MktMailQueryRemoteDTO;
 import com.storlead.mail.webclient.dto.MktSendMailRemoteDTO;
 import com.storlead.mail.webclient.dto.MktSendMailRemoteDTO;
-import com.storlead.mail.webclient.support.MailRemoteResponseWriter;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.log4j.Log4j2;
 import lombok.extern.log4j.Log4j2;
@@ -18,11 +17,9 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
-import java.util.List;
 
 
 /**
 /**
  * 营销邮件主流程(路径对齐邮件服务 {@code MktMailApiController},转发独立邮件服务 /mkt/**)。
  * 营销邮件主流程(路径对齐邮件服务 {@code MktMailApiController},转发独立邮件服务 /mkt/**)。
@@ -36,31 +33,6 @@ public class MktMailApiController {
     @Resource
     @Resource
     private MktMailRemoteClient mktMailRemoteClient;
     private MktMailRemoteClient mktMailRemoteClient;
 
 
-    @PostMapping("/file/cache_mail_file")
-    @ApiOperation("缓存营销邮件临时附件(scene=MKT)")
-    public Result<?> cacheMailFile(@RequestParam("files") List<MultipartFile> files,
-                                   @RequestParam("accountId") Long accountId) {
-        return mktMailRemoteClient.cacheMailFile(files, accountId);
-    }
-
-    @PostMapping("/file/list")
-    @ApiOperation("按邮件查询正式附件(mkt_mail_attachment)")
-    public Result<?> listAttachments(@RequestParam Long mailId) {
-        return mktMailRemoteClient.listAttachments(mailId);
-    }
-
-    @PostMapping("/file/download")
-    @ApiOperation("下载营销正式附件")
-    public void downloadFormalFile(@RequestParam Long fileId, HttpServletResponse response) {
-        MailRemoteResponseWriter.write(response, mktMailRemoteClient.downloadFormalFile(fileId));
-    }
-
-    @PostMapping("/file/download_temp")
-    @ApiOperation("下载营销临时附件")
-    public void downloadTempFile(@RequestParam Long fileId, HttpServletResponse response) {
-        MailRemoteResponseWriter.write(response, mktMailRemoteClient.downloadTempFile(fileId));
-    }
-
     @PostMapping("/receive_mail")
     @PostMapping("/receive_mail")
     @ApiOperation("接收营销邮件(异步:INBOX+Sent Items,落 mkt_mail_message 并用 reply_msg_id 绑定原信)")
     @ApiOperation("接收营销邮件(异步:INBOX+Sent Items,落 mkt_mail_message 并用 reply_msg_id 绑定原信)")
     public Result<?> receiveMail(@RequestParam("accountId") Long accountId) {
     public Result<?> receiveMail(@RequestParam("accountId") Long accountId) {

+ 1 - 0
java/storlead-mail/storlead-mail-api/src/main/java/com/storlead/mail/webclient/MailRemoteClientFacade.java

@@ -12,6 +12,7 @@ import lombok.RequiredArgsConstructor;
 public class MailRemoteClientFacade {
 public class MailRemoteClientFacade {
 
 
     private final MktMailRemoteClient mktMail;
     private final MktMailRemoteClient mktMail;
+    private final MktMailFileRemoteClient mktMailFile;
     private final MktAccountRemoteClient mktAccount;
     private final MktAccountRemoteClient mktAccount;
     private final CrmMailRemoteClient crmMail;
     private final CrmMailRemoteClient crmMail;
     private final CrmAccountRemoteClient crmAccount;
     private final CrmAccountRemoteClient crmAccount;

+ 54 - 0
java/storlead-mail/storlead-mail-api/src/main/java/com/storlead/mail/webclient/client/MktMailFileRemoteClient.java

@@ -0,0 +1,54 @@
+package com.storlead.mail.webclient.client;
+
+import com.storlead.framework.common.result.Result;
+import com.storlead.mail.webclient.constant.MailRemoteApiConstants;
+import com.storlead.mail.webclient.support.MailRemoteHttpSupport;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 营销邮件附件远程客户端,对齐 B 服务 {@code /mkt/file/**}。
+ */
+@RequiredArgsConstructor
+public class MktMailFileRemoteClient {
+
+    private final MailRemoteHttpSupport http;
+
+    public Result<?> cacheMailFile(List<MultipartFile> files, Long accountId) {
+        Map<String, String> extra = new HashMap<>();
+        if (accountId != null) {
+            extra.put("accountId", String.valueOf(accountId));
+        }
+        return http.postFiles(MailRemoteApiConstants.MKT_FILE_CACHE, "files", files, extra);
+    }
+
+    /** B 服务该接口直接返回 Map(非 Result 包装)。 */
+    public Map<String, Object> cacheImageFile(MultipartFile file, Long accountId) {
+        Map<String, String> extra = null;
+        if (accountId != null) {
+            extra = new HashMap<>();
+            extra.put("accountId", String.valueOf(accountId));
+        }
+        return http.postFileForMap(MailRemoteApiConstants.MKT_FILE_CACHE_IMAGE, "upload", file, extra);
+    }
+
+    public byte[] downloadTempFile(Long fileId) {
+        return http.postForBytes(MailRemoteApiConstants.MKT_FILE_DOWNLOAD_TEMP, http.formOf("fileId", fileId));
+    }
+
+    public byte[] getImage(String imageName) {
+        return http.getForBytes(MailRemoteApiConstants.MKT_FILE_IMAGES_PREFIX + imageName, null);
+    }
+
+    public Result<?> listAttachments(Long mailId) {
+        return http.postForm(MailRemoteApiConstants.MKT_FILE_LIST, http.formOf("mailId", mailId));
+    }
+
+    public byte[] downloadFormalFile(Long fileId) {
+        return http.postForBytes(MailRemoteApiConstants.MKT_FILE_DOWNLOAD, http.formOf("fileId", fileId));
+    }
+}

+ 0 - 21
java/storlead-mail/storlead-mail-api/src/main/java/com/storlead/mail/webclient/client/MktMailRemoteClient.java

@@ -9,7 +9,6 @@ import com.storlead.mail.webclient.dto.MktMailStatusSyncQueryRemoteDTO;
 import com.storlead.mail.webclient.dto.MktSendMailRemoteDTO;
 import com.storlead.mail.webclient.dto.MktSendMailRemoteDTO;
 import com.storlead.mail.webclient.support.MailRemoteHttpSupport;
 import com.storlead.mail.webclient.support.MailRemoteHttpSupport;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
-import org.springframework.web.multipart.MultipartFile;
 
 
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
@@ -23,26 +22,6 @@ public class MktMailRemoteClient {
 
 
     private final MailRemoteHttpSupport http;
     private final MailRemoteHttpSupport http;
 
 
-    public Result<?> cacheMailFile(List<MultipartFile> files, Long accountId) {
-        Map<String, String> extra = new HashMap<>();
-        if (accountId != null) {
-            extra.put("accountId", String.valueOf(accountId));
-        }
-        return http.postFiles(MailRemoteApiConstants.MKT_FILE_CACHE, "files", files, extra);
-    }
-
-    public Result<?> listAttachments(Long mailId) {
-        return http.postForm(MailRemoteApiConstants.MKT_FILE_LIST, http.formOf("mailId", mailId));
-    }
-
-    public byte[] downloadFormalFile(Long fileId) {
-        return http.postForBytes(MailRemoteApiConstants.MKT_FILE_DOWNLOAD, http.formOf("fileId", fileId));
-    }
-
-    public byte[] downloadTempFile(Long fileId) {
-        return http.postForBytes(MailRemoteApiConstants.MKT_FILE_DOWNLOAD_TEMP, http.formOf("fileId", fileId));
-    }
-
     public Result<?> receiveMail(Long accountId) {
     public Result<?> receiveMail(Long accountId) {
         return http.postForm(MailRemoteApiConstants.MKT_RECEIVE_MAIL, http.formOf("accountId", accountId));
         return http.postForm(MailRemoteApiConstants.MKT_RECEIVE_MAIL, http.formOf("accountId", accountId));
     }
     }

+ 8 - 1
java/storlead-mail/storlead-mail-api/src/main/java/com/storlead/mail/webclient/config/MailWebClientAutoConfiguration.java

@@ -60,6 +60,12 @@ public class MailWebClientAutoConfiguration {
         return new MktMailRemoteClient(http);
         return new MktMailRemoteClient(http);
     }
     }
 
 
+    @Bean
+    @ConditionalOnMissingBean
+    public MktMailFileRemoteClient mktMailFileRemoteClient(MailRemoteHttpSupport http) {
+        return new MktMailFileRemoteClient(http);
+    }
+
     @Bean
     @Bean
     @ConditionalOnMissingBean
     @ConditionalOnMissingBean
     public MktAccountRemoteClient mktAccountRemoteClient(MailRemoteHttpSupport http) {
     public MktAccountRemoteClient mktAccountRemoteClient(MailRemoteHttpSupport http) {
@@ -135,6 +141,7 @@ public class MailWebClientAutoConfiguration {
     @Bean
     @Bean
     @ConditionalOnMissingBean
     @ConditionalOnMissingBean
     public MailRemoteClientFacade mailRemoteClientFacade(MktMailRemoteClient mktMail,
     public MailRemoteClientFacade mailRemoteClientFacade(MktMailRemoteClient mktMail,
+                                                         MktMailFileRemoteClient mktMailFile,
                                                          MktAccountRemoteClient mktAccount,
                                                          MktAccountRemoteClient mktAccount,
                                                          CrmMailRemoteClient crmMail,
                                                          CrmMailRemoteClient crmMail,
                                                          CrmAccountRemoteClient crmAccount,
                                                          CrmAccountRemoteClient crmAccount,
@@ -148,7 +155,7 @@ public class MailWebClientAutoConfiguration {
                                                          CrmThumbnailRemoteClient crmThumbnail,
                                                          CrmThumbnailRemoteClient crmThumbnail,
                                                          MailCommonRemoteClient commonRemote) {
                                                          MailCommonRemoteClient commonRemote) {
         return new MailRemoteClientFacade(
         return new MailRemoteClientFacade(
-                mktMail, mktAccount, crmMail, crmAccount, crmMailFile,
+                mktMail, mktMailFile, mktAccount, crmMail, crmAccount, crmMailFile,
                 crmMailTemplates, crmMailBlacklist, crmUserEmailFolder,
                 crmMailTemplates, crmMailBlacklist, crmUserEmailFolder,
                 crmEmailFolderRule, crmMailboxAutoReply, crmMailSignature, crmThumbnail,commonRemote);
                 crmEmailFolderRule, crmMailboxAutoReply, crmMailSignature, crmThumbnail,commonRemote);
     }
     }

+ 8 - 0
java/storlead-mail/storlead-mail-api/src/main/java/com/storlead/mail/webclient/constant/MailRemoteApiConstants.java

@@ -16,6 +16,9 @@ public final class MailRemoteApiConstants {
     /** 缓存营销邮件临时附件(scene=MKT),multipart:files + accountId */
     /** 缓存营销邮件临时附件(scene=MKT),multipart:files + accountId */
     public static final String MKT_FILE_CACHE = "/mkt/file/cache_mail_file";
     public static final String MKT_FILE_CACHE = "/mkt/file/cache_mail_file";
 
 
+    /** 缓存营销邮件正文图片,multipart:upload;响应为 Map(非 Result) */
+    public static final String MKT_FILE_CACHE_IMAGE = "/mkt/file/cache_image_file";
+
     /** 按邮件查询正式附件列表(mkt_mail_attachment),参数:mailId */
     /** 按邮件查询正式附件列表(mkt_mail_attachment),参数:mailId */
     public static final String MKT_FILE_LIST = "/mkt/file/list";
     public static final String MKT_FILE_LIST = "/mkt/file/list";
 
 
@@ -25,6 +28,11 @@ public final class MailRemoteApiConstants {
     /** 下载营销临时附件,参数:fileId,返回二进制流 */
     /** 下载营销临时附件,参数:fileId,返回二进制流 */
     public static final String MKT_FILE_DOWNLOAD_TEMP = "/mkt/file/download_temp";
     public static final String MKT_FILE_DOWNLOAD_TEMP = "/mkt/file/download_temp";
 
 
+    /**
+     * 获取营销邮件缓存图片。完整路径:{@value #MKT_FILE_IMAGES_PREFIX}{imageName}
+     */
+    public static final String MKT_FILE_IMAGES_PREFIX = "/mkt/file/images/";
+
     /** 接收营销邮件(异步拉取 INBOX+Sent),参数:accountId */
     /** 接收营销邮件(异步拉取 INBOX+Sent),参数:accountId */
     public static final String MKT_RECEIVE_MAIL = "/mkt/receive_mail";
     public static final String MKT_RECEIVE_MAIL = "/mkt/receive_mail";