diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/dao/ISendEmailDao.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/dao/ISendEmailDao.java index 5a6cb52c..3a550a51 100644 --- a/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/dao/ISendEmailDao.java +++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/dao/ISendEmailDao.java @@ -3,8 +3,11 @@ package com.hzya.frame.plugin.sendEmail.dao; import com.hzya.frame.basedao.dao.IBaseDao; import com.hzya.frame.plugin.sendEmail.entity.SendEmailEntity; +import java.util.List; + public interface ISendEmailDao extends IBaseDao { + List queryFileList(SendEmailEntity fileEntity); } diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/dao/impl/SendEmailDaoImpl.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/dao/impl/SendEmailDaoImpl.java index df6de7a7..68c52aed 100644 --- a/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/dao/impl/SendEmailDaoImpl.java +++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/dao/impl/SendEmailDaoImpl.java @@ -1,13 +1,20 @@ package com.hzya.frame.plugin.sendEmail.dao.impl; +import com.baomidou.dynamic.datasource.annotation.DS; import com.hzya.frame.basedao.dao.MybatisGenericDao; import com.hzya.frame.plugin.sendEmail.dao.ISendEmailDao; import com.hzya.frame.plugin.sendEmail.entity.SendEmailEntity; +import java.util.List; public class SendEmailDaoImpl extends MybatisGenericDao implements ISendEmailDao { + @DS("#entity.dataSourceCode") + @Override + public List queryFileList(SendEmailEntity entity) { + return (List) super.selectList(getSqlIdPrifx()+"queryFileList",entity); + } } diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/entity/SendEmailEntity.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/entity/SendEmailEntity.java index e87ca3ad..a3b9f1aa 100644 --- a/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/entity/SendEmailEntity.java +++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/entity/SendEmailEntity.java @@ -2,8 +2,46 @@ package com.hzya.frame.plugin.sendEmail.entity; import com.hzya.frame.web.entity.BaseEntity; +import java.util.List; + public class SendEmailEntity extends BaseEntity { + private List ids;//附件id + private String id; + private String filename; + private String contentType; + @Override + public String getId() { + return id; + } + @Override + public void setId(String id) { + this.id = id; + } + + public String getFilename() { + return filename; + } + + public void setFilename(String filename) { + this.filename = filename; + } + + public List getIds() { + return ids; + } + + public void setIds(List ids) { + this.ids = ids; + } + + public String getContentType() { + return contentType; + } + + public void setContentType(String contentType) { + this.contentType = contentType; + } } diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/entity/SendEmailEntity.xml b/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/entity/SendEmailEntity.xml index fbfaca83..98b693c2 100644 --- a/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/entity/SendEmailEntity.xml +++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/entity/SendEmailEntity.xml @@ -2,6 +2,18 @@ - + diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/service/impl/SendEmailServiceImpl.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/service/impl/SendEmailServiceImpl.java index 32d4cd0d..2780c5d2 100644 --- a/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/service/impl/SendEmailServiceImpl.java +++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/service/impl/SendEmailServiceImpl.java @@ -16,14 +16,29 @@ import org.springframework.mock.web.MockMultipartFile; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; import java.math.BigDecimal; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.UUID; public class SendEmailServiceImpl extends BaseService implements ISendEmailService { @Value("${zt.url}") @@ -66,10 +81,8 @@ public class SendEmailServiceImpl extends BaseService i return BaseResult.getFailureMessageEntity("供应商邮箱为空,请检查"); } String subject = null; - //subject = mainData.getString("field0034");//todo - if(sendEmail == null || "".equals(sendEmail)){ - subject = "采购"; - } + subject = mainData.getOrDefault("field0016","")+"采购";//供应商名称+采购 + JSONArray detailArray = businessDataStr.getJSONArray("formson_1234"); //组装发送数据 String htmls = null; @@ -79,28 +92,132 @@ public class SendEmailServiceImpl extends BaseService i e.printStackTrace(); return BaseResult.getFailureMessageEntity("发送邮件失败:组装数据失败"); } + List files = null; + List ids = new ArrayList<>(); + if(detailArray != null && detailArray.size() > 0){ + for (int i = 0; i < detailArray.size(); i++) { + if(detailArray.getJSONObject(i).getString("field0015") != null && !"".equals(detailArray.getJSONObject(i).getString("field0015"))){ + ids.add(detailArray.getJSONObject(i).getString("field0015")); + } + } + } + if(ids != null && ids.size() > 0){ + SendEmailEntity fileEntity = new SendEmailEntity(); + fileEntity.setDataSourceCode("SW-OA"); + fileEntity.setId(mainData.getString("field0040")); + files = sendEmailDao.queryFileList(fileEntity); + } + List attachments = new ArrayList<>(); + //发送数据 logger.error("发送邮件发送数据:" + htmls); try { - String filePath = "/Users/apple/Desktop/【C4协同费控产品】(报表相关)字典说明zm@2025.pdf"; - File file = new File(filePath); - List attachments = new ArrayList<>(); - try (FileInputStream input = new FileInputStream(file)) { - MultipartFile multipartFile = new MockMultipartFile( - file.getName(), // 对应表单中的文件字段名 - file.getName(), // 原始文件名 - "application/pdf", // 或根据文件类型指定 MIME 类型 - input - ); - attachments.add(multipartFile); + //循环下载附件 + if(files != null && files.size() > 0){ + String token = null; + JSONObject tokenData = new JSONObject(); + tokenData.put("userName","hzya_rest"); + tokenData.put("password","879dead9-a8a7-464a-9bac-e8f574e66985"); + tokenData.put("loginName","shileilei"); + String tokenResult = HttpRequest.post("http://oa.sptzj.cn/seeyon/rest/token"). + body(tokenData.toJSONString()). + execute(). + body(); + logger.error("OAToken:" + tokenResult); + JSONObject resoutJson = JSONObject.parseObject(tokenResult); + if (resoutJson.getBoolean("flag")) { + token = resoutJson.getJSONObject("attribute").getString("id"); + } else { + return BaseResult.getFailureMessageEntity("获取OA token失败"); + } + + for (int i = 0; i < files.size(); i++) { + String encodedFileName = URLEncoder.encode(files.get(i).getFilename(), StandardCharsets.UTF_8.name()); + String pdfUrl = "http://oa.sptzj.cn/seeyon/rest/attachment/file/"+files.get(i).getId()+"?fileName="+encodedFileName+"&token="+token; + logger.error("附件的url"+pdfUrl); + File file = getFile(pdfUrl,files.get(i).getFilename()); + if(file != null){ + try { + FileInputStream input = new FileInputStream(file); + MultipartFile multipartFile = new MockMultipartFile( + file.getName(), // 对应表单中的文件字段名 + file.getName(), // 原始文件名 + files.get(i).getContentType(), // 或根据文件类型指定 MIME 类型 + input + ); + attachments.add(multipartFile); + }catch (Exception e){ + return BaseResult.getFailureMessageEntity("发送邮件失败"); + } + } + } + } + + if(attachments != null && attachments.size() > 0){ + emailUtil.sendHtmlAndFileMessage(sendEmail,subject, htmls,attachments); + }else { + emailUtil.sendHtmlMessage(sendEmail,subject, htmls); } - emailUtil.sendHtmlAndFileMessage(sendEmail,subject, htmls,attachments); return BaseResult.getSuccessMessageEntity("发送邮件成功"); }catch (Exception e){ return BaseResult.getFailureMessageEntity("发送邮件失败"); } } + private File getFile(String fileurl,String filename) { + try { + // 获取文件字节数据 + byte[] fileBytes = null; + // 创建信任所有证书的TrustManager + TrustManager[] trustAllCerts = new TrustManager[]{ + new X509TrustManager() { + public X509Certificate[] getAcceptedIssuers() { + return null; + } + public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException { + } + public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException { + } + } + }; + + // 安装信任管理器 + SSLContext sc = SSLContext.getInstance("TLS"); + sc.init(null, trustAllCerts, new java.security.SecureRandom()); + HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + + // 创建允许所有主机名的验证器 + HostnameVerifier allHostsValid = (hostname, session) -> true; + HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); + + URL url = new URL(fileurl); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + + try (InputStream inputStream = connection.getInputStream(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + byte[] buffer = new byte[4096]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + fileBytes = outputStream.toByteArray(); + } + + + if (fileBytes != null) { + // 模拟一个文件 + File tempFile = new File(filename); + try (FileOutputStream fos = new FileOutputStream(tempFile)) { + fos.write(fileBytes); + } + return tempFile; + } + } catch (Exception e) { + logger.error(e.getMessage()); + } + return null; + } /** * @param mainData * @param detailArray