This commit is contained in:
hejinbo
2023-09-27 15:33:53 +08:00
parent c60ad9f3fc
commit 2a147f119e
7 changed files with 346 additions and 106 deletions
@@ -6,10 +6,7 @@ import com.ruoyi.wisdomarbitrate.domain.CaseApplication;
import com.ruoyi.wisdomarbitrate.service.IAdjudicationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/adjudication")
@@ -26,8 +23,27 @@ public class AdjudicationController extends BaseController {
public AjaxResult createDocument(@Validated @RequestBody CaseApplication caseApplication){
return adjudicationService.createDocument(caseApplication);
}
@PostMapping("/")
public AjaxResult sendDocumentByEmail(){
return adjudicationService.sendDocumentByEmail();
/**
* 裁决书送达(电子邮件)
* @param id 案件id
* @param appEmail 申请人邮箱
* @param resEmail 被申请人邮箱
* @return
*/
@PostMapping("/delivery")
public AjaxResult sendDocumentByEmail(Long id,String appEmail,String resEmail){
return adjudicationService.sendDocumentByEmail(id,appEmail,resEmail);
}
/**
* 根据快递单号查询物流信息
* @param trackingNum 单号
* @param phoneLastFour 收/寄件人手机号后四位,顺丰快递需填写本字段。
* @return
*/
@GetMapping("/logistics")
public AjaxResult getLogisticsInfo(String trackingNum,Integer phoneLastFour){
return adjudicationService.getLogisticsInfo(trackingNum,phoneLastFour);
}
}
+8 -22
View File
@@ -92,30 +92,16 @@ spring:
resources:
static-locations: file:/home/ruoyi/
mail:
# 邮件服务地址
host: smtp.163.com
# 默认端口25,可不写
port: 25
# 编码格式
default-encoding: utf-8
# 发送者用户名
username: xxx@163.com
# 授权码,刚才获取的代码
password: xxx
# 其它参数
# properties:
# mail:
# smtp:
# # 如果是用 SSL 方式,需要配置如下属性
# ssl:
# enable: true
# required: true
# # 邮件接收时间的限制,单位毫秒
# timeout: 10000
# # 连接时间的限制,单位毫秒
# connectiontimeout: 10000
# # 邮件发送时间的限制,单位毫秒
# writetimeout: 10000
username: hjbjava@163.com
password: BSRSSEPJWGNNVYYL
default-encoding: UTF-8
properties:
mail:
smtp:
socketFactoryClass: javax.net.ssl.SSLSocketFactory
debug: false
# token配置
token:
+15
View File
@@ -159,6 +159,21 @@
<version>3.1.4</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,187 @@
package com.ruoyi.common.utils;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.validation.constraints.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @ClassName EmailInUtil
* @Description 邮件发送工具
*/
@Component
@Data
@Slf4j
public class EmailOutUtil {
private static Pattern emailPattern = Pattern.compile("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$");
// private static Pattern phonePattern = Pattern.compile("0?(13|14|15|18)[0-9]{9}");
private static Pattern phonePattern = Pattern.compile("^1\\d{10}$");
// @Autowired
// private JavaMailSender mailSender;
// 发送发邮箱地址(外网地址)
// @Value("${spring.mail-out-network.from}")
// private static String fromOut;
@Value("${spring.mail.host}")
private String hostOut;
@Value("${spring.mail.username}")
private String usernameOut;
@Value("${spring.mail.password}")
private String passwordOut;
@Value("${spring.mail.port}")
private Integer portOut;
public JavaMailSender rebuildMailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(hostOut);
mailSender.setUsername(usernameOut);
mailSender.setPassword(passwordOut);
mailSender.setPort(portOut);
mailSender.setProtocol("smtp");
mailSender.setDefaultEncoding("UTF-8");
return mailSender;
}
/**
* 发送纯文本邮件信息
*
* @param to 接收方
* @param subject 邮件主题
* @param content 邮件内容(发送内容)
*/
public void sendMessage(String to, String subject, String content, String from, JavaMailSender mailSender) {
// 创建一个邮件对象
SimpleMailMessage msg = new SimpleMailMessage();
msg.setFrom(from);
msg.setTo(to);
// 设置邮件主题
msg.setSubject(subject);
// 设置邮件内容
msg.setText(content);
// 发送邮件
mailSender.send(msg);
////System.out.println("发送成功:" + from + ":to:" + to);
}
/**
* 发送带附件的邮件信息
*
* @param to 接收方
* @param subject 邮件主题
* @param content 邮件内容(发送内容)
* @param fileList 文件集合 // 可发送多个附件
*/
public void sendMessageCarryFiles(String to, String subject, String content, List<File> fileList, String from, @NotNull JavaMailSender mailSender) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(from);
helper.setTo(to);
// 设置邮件主题
helper.setSubject(subject);
// 设置邮件内容
helper.setText(content);
// 添加附件(多个)
if (fileList != null && fileList.size() > 0) {
for (File file : fileList) {
helper.addAttachment(file.getName(), file);
}
}
} catch (MessagingException e) {
e.printStackTrace();
}
// 发送邮件
mailSender.send(mimeMessage);
}
/**
* 发送带附件的邮件信息
*
* @param to 接收方
* @param subject 邮件主题
* @param content 邮件内容(发送内容)
* @param file 单个文件
*/
public void sendMessageCarryFile(String to, String subject, String content, File file, String from, JavaMailSender mailSender) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(from);
helper.setTo(to);
// 设置邮件主题
helper.setSubject(subject);
// 设置邮件内容
helper.setText(content);
// 单个附件
helper.addAttachment(file.getName(), file);
} catch (MessagingException e) {
e.printStackTrace();
}
// 发送邮件
mailSender.send(mimeMessage);
}
/**
* 初始化内外网邮件发送对象
*
* @param num
*/
// public static JavaMailSender initJavaMailSender(Integer num) {
// if (num != null && num == 1) {
// //内网
// return rebuildMailSender(hostIn, usernameIn, passwordIn, Integer.parseInt(portIn), "smtps");
// } else {
// //外网
// return rebuildMailSender(hostOut, usernameOut, passwordOut, Integer.parseInt(portOut), "smtps");
// }
// }
// public static String getInnerFrom() {
// return EmailInUtil;
// }
//
// public static String getOutterFrom() {
// return fromOut;
// }
/**
* 验证邮箱格式
*
* @param str
* @return
*/
public static boolean isEmail(String str) {
boolean flag = false;
Matcher matcher = emailPattern.matcher(str);
if (matcher.matches()) {
flag = true;
}
return flag;
}
public static boolean isPhoneNumber(String str) {
boolean flag = false;
Matcher matcher = phonePattern.matcher(str);
if (matcher.matches()) {
flag = true;
}
return flag;
}
}
@@ -1,49 +0,0 @@
//package com.ruoyi.common.utils;
//
//
//import jakarta.mail.internet.MimeMessage;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.core.io.FileSystemResource;
//import org.springframework.mail.javamail.JavaMailSender;
//import org.springframework.mail.javamail.MimeMessageHelper;
//import org.springframework.stereotype.Component;
//
//import java.io.File;
//import java.util.List;
//
//@Component
//public class SendMailUtils {
// private static final String SENDER = "xxx@163.com";
// @Autowired
// private JavaMailSender mailSender;
// /**
// * 发送带附件的邮件
// *
// * @param to 收件人
// * @param subject 主题
// * @param content 内容
// * @param fileList 附件
// */
// public void sendFileMail(String to, String subject, String content, List<File> fileList) {
// MimeMessage message = mailSender.createMimeMessage();
// try {
// //true表示需要创建一个multipart message
// MimeMessageHelper helper = new MimeMessageHelper(message, true);
// helper.setFrom(SENDER);
// helper.setTo(to);
// helper.setSubject(subject);
// helper.setText(content, true);
//
// if (fileList != null && fileList.size() > 0) {
// for (File file : fileList) {
// FileSystemResource fileSystemResource = new FileSystemResource(file);
// String fileName = fileSystemResource.getFilename();
// helper.addAttachment(fileName, fileSystemResource);
// }
// }
// mailSender.send(message);
// } catch (MessagingException e) {
// System.out.println("发送带附件的邮件时发生异常!" + e);
// }
// }
//}
@@ -6,6 +6,7 @@ import com.ruoyi.wisdomarbitrate.domain.CaseApplication;
public interface IAdjudicationService {
AjaxResult createDocument(CaseApplication caseApplication);
AjaxResult sendDocumentByEmail();
AjaxResult sendDocumentByEmail(Long id,String appEmail,String resEmail);
AjaxResult getLogisticsInfo(String trackingNum,Integer phoneLastFour);
}
@@ -3,6 +3,7 @@ package com.ruoyi.wisdomarbitrate.service.impl;
import com.deepoove.poi.config.Configure;
import com.ruoyi.common.constant.CaseApplicationConstants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.EmailOutUtil;
import com.ruoyi.common.utils.WordUtil;
import com.ruoyi.wisdomarbitrate.domain.*;
import com.ruoyi.wisdomarbitrate.mapper.ArbitrateRecordMapper;
@@ -12,9 +13,14 @@ import com.ruoyi.wisdomarbitrate.mapper.CaseAttachMapper;
import com.ruoyi.wisdomarbitrate.service.IAdjudicationService;
import org.apache.poi.xwpf.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailSendException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
@@ -25,6 +31,8 @@ import java.util.*;
@Service
public class AdjudicationServiceImpl implements IAdjudicationService {
private final String apiUrl = "http://api.cainiaoapi.com/api/exp/v1/index";
@Autowired
private CaseApplicationMapper caseApplicationMapper;
@Autowired
@@ -33,6 +41,8 @@ public class AdjudicationServiceImpl implements IAdjudicationService {
private ArbitrateRecordMapper arbitrateRecordMapper;
@Autowired
private CaseAttachMapper caseAttachMapper;
@Autowired
private EmailOutUtil emailOutUtil;
@Override
public AjaxResult createDocument(CaseApplication caseApplication) {
@@ -115,10 +125,10 @@ public class AdjudicationServiceImpl implements IAdjudicationService {
datas.put("year", now.getYear());
datas.put("months", now.getMonthValue());
datas.put("day", now.getDayOfMonth());
String modalFilePath = "/data/arbitrate-document/template/仲裁裁决书模板.docx";
//String modalFilePath = "D:/develop/仲裁裁决书模板 (2).docx";
String saveFolderPath = "/data/arbitrate-document/formal/" + now.getYear() + "/" + now.getMonthValue() + "/" + now.getDayOfMonth();
//String saveFolderPath = "D:/data/" + now.getYear() + "/" + now.getMonthValue() + "/" + now.getDayOfMonth();
//String modalFilePath = "/data/arbitrate-document/template/仲裁裁决书模板.docx";
String modalFilePath = "D:/develop/仲裁裁决书模板 (2).docx";
//String saveFolderPath = "/data/arbitrate-document/formal/" + now.getYear() + "/" + now.getMonthValue() + "/" + now.getDayOfMonth();
String saveFolderPath = "D:/data/" + now.getYear() + "/" + now.getMonthValue() + "/" + now.getDayOfMonth();
String fileName = UUID.randomUUID().toString().replace("-", "") + ".docx";
String resultFilePath = saveFolderPath + "/" + fileName;
// 创建日期目录
@@ -157,7 +167,81 @@ public class AdjudicationServiceImpl implements IAdjudicationService {
}
@Override
public AjaxResult sendDocumentByEmail() {
public AjaxResult sendDocumentByEmail(Long id, String appEmail, String resEmail) {
CaseApplication caseApplication = new CaseApplication();
caseApplication.setId(id);
CaseApplication caseApplication1 = caseApplicationMapper.selectCaseApplication(caseApplication);
if (caseApplication1 == null) {
return AjaxResult.error("未查询到相关案件");
}
//根据案件id查询裁决书
try {
List<File> fileList = new ArrayList<>();
List<CaseAttach> caseAttachList = caseAttachMapper.queryAnnexPathByCaseId(id);
if (caseAttachList != null && caseAttachList.size() > 0) {
for (CaseAttach caseAttach : caseAttachList) {
if (caseAttach.getAnnexType() == 3) {
String annexPath = caseAttach.getAnnexPath();
fileList.add(new File(annexPath));
}
}
}
//电子邮件送达
JavaMailSender javaMailSender = emailOutUtil.rebuildMailSender();
if (appEmail != null) {
emailOutUtil.sendMessageCarryFiles(appEmail, "案件裁决书", "您的裁决书已送达,详情请查阅附件", fileList
, "hjbjava@163.com", javaMailSender);
}
if (resEmail != null) {
emailOutUtil.sendMessageCarryFiles(resEmail, "案件裁决书", "您的裁决书已送达,详情请查阅附件", fileList
, "hjbjava@163.com", javaMailSender);
}
//修改案件状态
caseApplication1.setCaseStatus(CaseApplicationConstants.CASE_FILING);
caseApplicationMapper.submitCaseApplication(caseApplication1);
return AjaxResult.success("仲裁文书送达成功");
} catch (MailSendException e) {
return AjaxResult.error("发送失败,请检查文件路径");
}
}
@Override
public AjaxResult getLogisticsInfo(String trackingNum, Integer phoneLastFour) {
try {
//快递单号查询
String key = "70ba5c7b327f71fccd5924f70e3e7b7f";
String com = "auto";
// 构造查询字符串参数
String queryParameters = String.format("key=%s&com=%s&no=%s&phone=%d",
URLEncoder.encode(key, "UTF-8"),
URLEncoder.encode(com, "UTF-8"),
URLEncoder.encode(trackingNum, "UTF-8"),
phoneLastFour);
// 拼接到API URL中
String fullUrl = apiUrl + "?" + queryParameters;
URL url = new URL(fullUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
StringBuilder response = new StringBuilder();
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
// 处理返回的响应数据
return AjaxResult.success(response);
} else {
// 请求失败
return AjaxResult.error("请求失败,错误码:" + responseCode);
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}