|
@@ -85,6 +85,9 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
|
|
Properties prop = System.getProperties();
|
|
Properties prop = System.getProperties();
|
|
prop.put("mail.imap.port", "993");
|
|
prop.put("mail.imap.port", "993");
|
|
prop.put("mail.imap.ssl.enable", true);
|
|
prop.put("mail.imap.ssl.enable", true);
|
|
|
|
+ //如果设置,并且未指定套接字工厂,则启用MailSSLSocketFactory的使用。 如果设置为“ *”,则所有主机都是受信任的。
|
|
|
|
+ //如果设置为以空格分隔的主机列表,则这些主机是可信任的。 否则,信任取决于服务器提供的证书。(设置主机可信任)
|
|
|
|
+ prop.put("mail.imap.ssl.trust", host);
|
|
//这部分就是解决异常的关键所在,设置IAMP ID信息
|
|
//这部分就是解决异常的关键所在,设置IAMP ID信息
|
|
HashMap IAM = new HashMap();
|
|
HashMap IAM = new HashMap();
|
|
//带上IMAP ID信息,由key和value组成,例如name,version,vendor,support-email等。
|
|
//带上IMAP ID信息,由key和value组成,例如name,version,vendor,support-email等。
|
|
@@ -93,6 +96,7 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
|
|
IAM.put("version", "1.0.0");
|
|
IAM.put("version", "1.0.0");
|
|
IAM.put("vendor", "myclient");
|
|
IAM.put("vendor", "myclient");
|
|
IAM.put("support-email", "testmail@test.com");
|
|
IAM.put("support-email", "testmail@test.com");
|
|
|
|
+
|
|
try {
|
|
try {
|
|
Session session = Session.getDefaultInstance(prop, null);
|
|
Session session = Session.getDefaultInstance(prop, null);
|
|
session.setDebug(false);
|
|
session.setDebug(false);
|
|
@@ -138,11 +142,13 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
|
|
public void parseMessage(Message... messages) throws MessagingException, IOException, InterruptedException {
|
|
public void parseMessage(Message... messages) throws MessagingException, IOException, InterruptedException {
|
|
if (messages == null || messages.length < 1)
|
|
if (messages == null || messages.length < 1)
|
|
throw new MessagingException("未找到要解析的邮件!");
|
|
throw new MessagingException("未找到要解析的邮件!");
|
|
-
|
|
|
|
|
|
+ String subject = "";
|
|
// 解析所有邮件
|
|
// 解析所有邮件
|
|
for (int i = 0, count = messages.length; i < count; i++) {
|
|
for (int i = 0, count = messages.length; i < count; i++) {
|
|
MimeMessage msg = (MimeMessage) messages[i];
|
|
MimeMessage msg = (MimeMessage) messages[i];
|
|
log.info("------------------解析第" + msg.getMessageNumber() + "封邮件-------------------- ");
|
|
log.info("------------------解析第" + msg.getMessageNumber() + "封邮件-------------------- ");
|
|
|
|
+ //获取邮件主题
|
|
|
|
+ subject = getSubject(msg);
|
|
boolean isContainerAttachment = isContainAttachment(msg);
|
|
boolean isContainerAttachment = isContainAttachment(msg);
|
|
File file = new File(path);
|
|
File file = new File(path);
|
|
if (!file.exists()) {
|
|
if (!file.exists()) {
|
|
@@ -159,7 +165,7 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
|
|
log.info("------------------第" + msg.getMessageNumber() + "封邮件解析结束-------------------- ");
|
|
log.info("------------------第" + msg.getMessageNumber() + "封邮件解析结束-------------------- ");
|
|
}
|
|
}
|
|
//执行系统命令转为txt文件sdf.parse("20220428")
|
|
//执行系统命令转为txt文件sdf.parse("20220428")
|
|
- systemCommand();
|
|
|
|
|
|
+ systemCommand(subject);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -357,7 +363,12 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
|
|
//如果是文本类型的附件,通过getContent方法可以取到文本内容,但这不是我们需要的结果,所以在这里要做判断
|
|
//如果是文本类型的附件,通过getContent方法可以取到文本内容,但这不是我们需要的结果,所以在这里要做判断
|
|
boolean isContainTextAttach = part.getContentType().indexOf("name") > 0;
|
|
boolean isContainTextAttach = part.getContentType().indexOf("name") > 0;
|
|
if (part.isMimeType("text/*") && !isContainTextAttach) {
|
|
if (part.isMimeType("text/*") && !isContainTextAttach) {
|
|
- content.append(part.getContent().toString());
|
|
|
|
|
|
+ try{
|
|
|
|
+ content.append(part.getContent().toString());
|
|
|
|
+ }catch(UnsupportedEncodingException e) {
|
|
|
|
+ InputStream is = part.getInputStream();
|
|
|
|
+ content.append(inputStream2String(is));
|
|
|
|
+ }
|
|
} else if (part.isMimeType("message/rfc822")) {
|
|
} else if (part.isMimeType("message/rfc822")) {
|
|
getMailTextContent((Part) part.getContent(), content);
|
|
getMailTextContent((Part) part.getContent(), content);
|
|
} else if (part.isMimeType("multipart/*")) {
|
|
} else if (part.isMimeType("multipart/*")) {
|
|
@@ -370,6 +381,17 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ //处理编码错误问题
|
|
|
|
+ public static String inputStream2String(InputStream in)throws IOException {
|
|
|
|
+ StringBuffer out = new StringBuffer();
|
|
|
|
+ byte[] b = new byte[4096];
|
|
|
|
+ for(int n; (n=in.read(b))!=-1;){
|
|
|
|
+ out.append(new String(b,0,n));
|
|
|
|
+ }
|
|
|
|
+ return out.toString();
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 保存附件
|
|
* 保存附件
|
|
*
|
|
*
|
|
@@ -447,32 +469,22 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
|
|
/**
|
|
/**
|
|
* 执行命令通过软件解压rld文件到D:\out\new\下
|
|
* 执行命令通过软件解压rld文件到D:\out\new\下
|
|
*/
|
|
*/
|
|
- public void systemCommand() {
|
|
|
|
|
|
+ public void systemCommand(String subject) {
|
|
try {
|
|
try {
|
|
Runtime runtime = Runtime.getRuntime();
|
|
Runtime runtime = Runtime.getRuntime();
|
|
File file = new File("D:\\in\\");
|
|
File file = new File("D:\\in\\");
|
|
//遍历所有文件
|
|
//遍历所有文件
|
|
File[] files = file.listFiles();
|
|
File[] files = file.listFiles();
|
|
for (File f : files) {
|
|
for (File f : files) {
|
|
- String[] fileType = f.getName().split("\\.");
|
|
|
|
- if (fileType[1].equals("RWD")) {
|
|
|
|
|
|
+ String type = f.getName().split("\\.")[1];
|
|
|
|
+
|
|
|
|
+ if (type.equals("RWD")) {
|
|
//RWD文件类型
|
|
//RWD文件类型
|
|
String id = f.getName().substring(0, 4);
|
|
String id = f.getName().substring(0, 4);
|
|
//根据编号过滤
|
|
//根据编号过滤
|
|
- List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list().stream().filter(wind -> wind.getEquipmentNo().equals(id)).collect(Collectors.toList());
|
|
|
|
|
|
+ List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getByEquipmentNo(id);
|
|
//没有这个编号的塔
|
|
//没有这个编号的塔
|
|
- if (windTowerInfoList.size() == 0) {
|
|
|
|
- List<EmailWindTowerInfo> emailWindTowerInfos = emailWindTowerInfoService.list().stream().filter(wind -> wind.getEquipmentNo().equals(id)).collect(Collectors.toList());
|
|
|
|
- if (emailWindTowerInfos.size() == 0) {
|
|
|
|
- //如果测风塔里面没有这个塔并且邮件测风塔里也没有这个塔 则添加到邮箱读取的测风塔表中
|
|
|
|
- EmailWindTowerInfo emailWindTowerInfo = new EmailWindTowerInfo();
|
|
|
|
- emailWindTowerInfo.setEquipmentNo(id);
|
|
|
|
- emailWindTowerInfoService.save(emailWindTowerInfo);
|
|
|
|
- log.info(id + " 测风塔信息里没有这个的塔 并且邮件测风塔里也没有这个塔");
|
|
|
|
- } else {
|
|
|
|
- log.info(id + " 测风塔信息里没有这个的塔 邮件测风塔里已存在这个塔");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ windTowerInfoType(id,windTowerInfoList);
|
|
for (WindTowerInfo w : windTowerInfoList) {
|
|
for (WindTowerInfo w : windTowerInfoList) {
|
|
if (id.equals(w.getEquipmentNo())) {
|
|
if (id.equals(w.getEquipmentNo())) {
|
|
if (w.getPassword().equals("")) {
|
|
if (w.getPassword().equals("")) {
|
|
@@ -503,39 +515,16 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//转成txt后把文件移动到系统文件备份目录下
|
|
//转成txt后把文件移动到系统文件备份目录下
|
|
- File file2 = new File("D:\\in\\");
|
|
|
|
- File[] files2 = file2.listFiles();
|
|
|
|
//xls移动系统文件目录下
|
|
//xls移动系统文件目录下
|
|
- for (File e : files2) {
|
|
|
|
- String[] str = e.getName().split("\\.");
|
|
|
|
- if (str[1].equals("RWD")) {
|
|
|
|
- FileUtil.move(e.getPath(), FileUtil.getSystemFilePath() + File.separator + str[0].substring(0, 4));
|
|
|
|
- } else {
|
|
|
|
- String[] strs = str[0].split("_");
|
|
|
|
- FileUtil.move(e.getPath(), FileUtil.getSystemFilePath() + File.separator + strs[0]);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ this.tranFile();
|
|
//把txt文件转成excel文件并解析
|
|
//把txt文件转成excel文件并解析
|
|
- String type = "RWD";
|
|
|
|
analysisDataService.analysisData(type);
|
|
analysisDataService.analysisData(type);
|
|
- } else {
|
|
|
|
|
|
+ } else if(type.equals("rld")){
|
|
//rld文件类型
|
|
//rld文件类型
|
|
String[] id = f.getName().split("_");
|
|
String[] id = f.getName().split("_");
|
|
//根据编号过滤
|
|
//根据编号过滤
|
|
- List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list().stream().filter(wind -> wind.getEquipmentNo().equals(id[0])).collect(Collectors.toList());
|
|
|
|
- //没有这个编号的塔
|
|
|
|
- if (windTowerInfoList.size() == 0) {
|
|
|
|
- List<EmailWindTowerInfo> emailWindTowerInfos = emailWindTowerInfoService.list().stream().filter(wind -> wind.getEquipmentNo().equals(id[0])).collect(Collectors.toList());
|
|
|
|
- if (emailWindTowerInfos.size() == 0) {
|
|
|
|
- //如果测风塔里面没有这个塔并且邮件测风塔里也没有这个塔 则添加到邮箱读取的测风塔表中
|
|
|
|
- EmailWindTowerInfo emailWindTowerInfo = new EmailWindTowerInfo();
|
|
|
|
- emailWindTowerInfo.setEquipmentNo(id[0]);
|
|
|
|
- emailWindTowerInfoService.save(emailWindTowerInfo);
|
|
|
|
- log.info(id[0] + " 测风塔信息里没有这个的塔 并且邮件测风塔里也没有这个塔");
|
|
|
|
- } else {
|
|
|
|
- log.info(id[0] + " 测风塔信息里没有这个的塔 邮件测风塔里已存在这个塔");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ List<WindTowerInfo> windTowerInfoList = windTowerInfoService.getByEquipmentNo(id[0]);
|
|
|
|
+ windTowerInfoType(id[0],windTowerInfoList);
|
|
//如果有 有可能会有编号相同 但是记录仪编号不同的情况 不解析看不到记录仪编号 所以只能用相同编号的测风塔密码解析
|
|
//如果有 有可能会有编号相同 但是记录仪编号不同的情况 不解析看不到记录仪编号 所以只能用相同编号的测风塔密码解析
|
|
//如果是从邮件里读到的塔新增的话是没有数据密码的 所以需要人为的手动配置密码
|
|
//如果是从邮件里读到的塔新增的话是没有数据密码的 所以需要人为的手动配置密码
|
|
for (WindTowerInfo w : windTowerInfoList) {
|
|
for (WindTowerInfo w : windTowerInfoList) {
|
|
@@ -559,24 +548,19 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ //转成txt后把文件移动到系统文件备份目录下
|
|
|
|
+ //xls移动系统文件目录下
|
|
|
|
+ this.tranFile();
|
|
|
|
+ //把txt文件转成excel文件并解析
|
|
|
|
+ analysisDataService.analysisData(type);
|
|
|
|
+ }else if(type.equals("csv")){
|
|
|
|
+ String id = subject.substring(subject.indexOf("[") + 1, subject.lastIndexOf("]"));
|
|
|
|
+ analysisDataService.acousticRadar(f,id);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
}
|
|
}
|
|
- //转成txt后把文件移动到系统文件备份目录下
|
|
|
|
- File file1 = new File("D:\\in\\");
|
|
|
|
- File[] files1 = file1.listFiles();
|
|
|
|
- //xls移动系统文件目录下
|
|
|
|
- for (File e : files1) {
|
|
|
|
- String[] str = e.getName().split("\\.");
|
|
|
|
- if (str[1].equals("RWD")) {
|
|
|
|
- FileUtil.move(e.getPath(), FileUtil.getSystemFilePath() + File.separator + str[0].substring(0, 4));
|
|
|
|
- } else {
|
|
|
|
- String[] strs = str[0].split("_");
|
|
|
|
- FileUtil.move(e.getPath(), FileUtil.getSystemFilePath() + File.separator + strs[0]);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- //把txt文件转成excel文件并解析
|
|
|
|
- String type = "rld";
|
|
|
|
- analysisDataService.analysisData(type);
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -584,4 +568,42 @@ public class EmailImpl extends ServiceImpl<EmailMapper, Email> implements EmailS
|
|
log.error("执行系统命令失败:" + e);
|
|
log.error("执行系统命令失败:" + e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ //检测是否存在
|
|
|
|
+ public void windTowerInfoType(String id, List<WindTowerInfo> windTowerInfoList) {
|
|
|
|
+ //没有这个编号的塔
|
|
|
|
+ if (windTowerInfoList.size() == 0) {
|
|
|
|
+ List<EmailWindTowerInfo> emailWindTowerInfos = emailWindTowerInfoService.list().stream().filter(wind -> wind.getEquipmentNo().equals(id)).collect(Collectors.toList());
|
|
|
|
+ if (emailWindTowerInfos.size() == 0) {
|
|
|
|
+ //如果测风塔里面没有这个塔并且邮件测风塔里也没有这个塔 则添加到邮箱读取的测风塔表中
|
|
|
|
+ EmailWindTowerInfo emailWindTowerInfo = new EmailWindTowerInfo();
|
|
|
|
+ emailWindTowerInfo.setEquipmentNo(id);
|
|
|
|
+ emailWindTowerInfoService.save(emailWindTowerInfo);
|
|
|
|
+ log.info(id + " 测风塔信息里没有这个的塔 并且邮件测风塔里也没有这个塔");
|
|
|
|
+ } else {
|
|
|
|
+ log.info(id + " 测风塔信息里没有这个的塔 邮件测风塔里已存在这个塔");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //转移文件
|
|
|
|
+ public void tranFile() throws Exception {
|
|
|
|
+ //转成txt后把文件移动到系统文件备份目录下
|
|
|
|
+ File file1 = new File("D:\\in\\");
|
|
|
|
+ File[] files1 = file1.listFiles();
|
|
|
|
+ //xls移动系统文件目录下
|
|
|
|
+ for (File e : files1) {
|
|
|
|
+ String[] str = e.getName().split("\\.");
|
|
|
|
+ if (str[1].equals("RWD")) {
|
|
|
|
+ FileUtil.move(e.getPath(), FileUtil.getSystemFilePath() + File.separator + str[0].substring(0, 4));
|
|
|
|
+ } else {
|
|
|
|
+ String[] strs = str[0].split("_");
|
|
|
|
+ FileUtil.move(e.getPath(), FileUtil.getSystemFilePath() + File.separator + strs[0]);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
}
|
|
}
|