|
|
@ -78,6 +78,7 @@ public class MailSourceTask {
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 十分钟获取邮件内容
|
|
|
|
* 十分钟获取邮件内容
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
|
|
|
|
@SneakyThrows
|
|
|
|
@Scheduled(cron = "0 0/10 * * * ? ")
|
|
|
|
@Scheduled(cron = "0 0/10 * * * ? ")
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
public void receiveMail() {
|
|
|
|
public void receiveMail() {
|
|
|
@ -85,93 +86,88 @@ public class MailSourceTask {
|
|
|
|
List<Message> list = MailUtil.readMailByIMAP
|
|
|
|
List<Message> list = MailUtil.readMailByIMAP
|
|
|
|
(deliveryProperties.getEmailAddress(), deliveryProperties.getEmailPassword());
|
|
|
|
(deliveryProperties.getEmailAddress(), deliveryProperties.getEmailPassword());
|
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
|
try {
|
|
|
|
for (Message message : list) {
|
|
|
|
for (Message message : list) {
|
|
|
|
// 获取未读的邮件内容 且与之对应
|
|
|
|
// 获取未读的邮件内容 且与之对应
|
|
|
|
if (deliveryProperties.getToEmailAddress().equalsIgnoreCase
|
|
|
|
if (deliveryProperties.getToEmailAddress().equalsIgnoreCase
|
|
|
|
(MailUtil.getFrom((MimeMessage) message))) {
|
|
|
|
(MailUtil.getFrom((MimeMessage) message))) {
|
|
|
|
String taskName = message.getSubject();
|
|
|
|
String taskName = message.getSubject();
|
|
|
|
Object objCache = redisUtils.get(taskName);
|
|
|
|
Object objCache = redisUtils.get(taskName);
|
|
|
|
if (ObjectUtil.isNotNull(objCache)) {
|
|
|
|
if (ObjectUtil.isNotNull(objCache)) {
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 设置十分钟缓存
|
|
|
|
// 设置十分钟缓存
|
|
|
|
redisUtils.set(taskName, taskName, DefaultNumberConstants.TEN_NUMBER, TimeUnit.MINUTES);
|
|
|
|
redisUtils.set(taskName, taskName, DefaultNumberConstants.TEN_NUMBER, TimeUnit.MINUTES);
|
|
|
|
// 内容获取发送请求
|
|
|
|
// 内容获取发送请求
|
|
|
|
DeliveryRecord byTaskName = deliveryRecordService.findByTaskName(taskName);
|
|
|
|
DeliveryRecord byTaskName = deliveryRecordService.findByTaskName(taskName);
|
|
|
|
if (ObjectUtil.isNotNull(byTaskName)
|
|
|
|
if (ObjectUtil.isNotNull(byTaskName)
|
|
|
|
&& byTaskName.getStatus() == DefaultNumberConstants.ZERO_NUMBER) {
|
|
|
|
&& byTaskName.getStatus() == DefaultNumberConstants.ZERO_NUMBER) {
|
|
|
|
log.info("================ the receive mail taskName as {} ==============", taskName);
|
|
|
|
log.info("================ the receive mail taskName as {} ==============", taskName);
|
|
|
|
Task task = new Task();
|
|
|
|
Task task = new Task();
|
|
|
|
Long taskId = byTaskName.getTaskId();
|
|
|
|
Long taskId = byTaskName.getTaskId();
|
|
|
|
CsvReader reader = CsvUtil.getReader();
|
|
|
|
CsvReader reader = CsvUtil.getReader();
|
|
|
|
List<String> tagList = Lists.newArrayList();
|
|
|
|
List<String> tagList = Lists.newArrayList();
|
|
|
|
List<String> phoneList = Lists.newArrayList();
|
|
|
|
List<String> phoneList = Lists.newArrayList();
|
|
|
|
List<String> decryptList = Lists.newArrayList();
|
|
|
|
List<String> decryptList = Lists.newArrayList();
|
|
|
|
// 解析附件内容并保存文件
|
|
|
|
// 解析附件内容并保存文件
|
|
|
|
String path = MailUtil.saveAttachMent
|
|
|
|
String path = MailUtil.saveAttachMent
|
|
|
|
(message, deliveryProperties.getFileUrl());
|
|
|
|
(message, deliveryProperties.getFileUrl());
|
|
|
|
// 解压文件
|
|
|
|
// 解压文件
|
|
|
|
String unzipPath =
|
|
|
|
String unzipPath =
|
|
|
|
CompressUtil.unzipFiles(deliveryProperties.getFileUrl(),
|
|
|
|
CompressUtil.unzipFiles(deliveryProperties.getFileUrl(),
|
|
|
|
path, deliveryProperties.getZipPassword());
|
|
|
|
path, deliveryProperties.getZipPassword());
|
|
|
|
if (ObjectUtil.isNotNull(byTaskName.getType())) {
|
|
|
|
if (ObjectUtil.isNotNull(byTaskName.getType())) {
|
|
|
|
if (byTaskName.getType() == DefaultNumberConstants.ONE_NUMBER
|
|
|
|
if (byTaskName.getType() == DefaultNumberConstants.ONE_NUMBER
|
|
|
|
|| byTaskName.getType() == DefaultNumberConstants.THREE_NUMBER) {
|
|
|
|
|| byTaskName.getType() == DefaultNumberConstants.THREE_NUMBER) {
|
|
|
|
File file = new File(unzipPath);
|
|
|
|
File file = new File(unzipPath);
|
|
|
|
File parseFile = Objects.requireNonNull
|
|
|
|
File parseFile = Objects.requireNonNull
|
|
|
|
(file.listFiles())[DefaultNumberConstants.ZERO_NUMBER];
|
|
|
|
(file.listFiles())[DefaultNumberConstants.ZERO_NUMBER];
|
|
|
|
// 解析文件
|
|
|
|
// 解析文件
|
|
|
|
CsvData data = reader.read(parseFile);
|
|
|
|
CsvData data = reader.read(parseFile);
|
|
|
|
CsvRow strings = data.getRows().get(DefaultNumberConstants.ZERO_NUMBER);
|
|
|
|
CsvRow strings = data.getRows().get(DefaultNumberConstants.ZERO_NUMBER);
|
|
|
|
String tagStr = strings.get(DefaultNumberConstants.ONE_NUMBER);
|
|
|
|
String tagStr = strings.get(DefaultNumberConstants.ONE_NUMBER);
|
|
|
|
// csv通配
|
|
|
|
// csv通配
|
|
|
|
data.getRows().forEach(clue -> {
|
|
|
|
data.getRows().forEach(clue -> {
|
|
|
|
phoneList.add(clue.size() == DefaultNumberConstants.THREE_NUMBER
|
|
|
|
phoneList.add(clue.size() == DefaultNumberConstants.THREE_NUMBER
|
|
|
|
? clue.get(DefaultNumberConstants.TWO_NUMBER) : clue.get(DefaultNumberConstants.THREE_NUMBER));
|
|
|
|
? clue.get(DefaultNumberConstants.TWO_NUMBER) : clue.get(DefaultNumberConstants.THREE_NUMBER));
|
|
|
|
tagList.add(tagStr);
|
|
|
|
tagList.add(tagStr);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
// 去除重复
|
|
|
|
// 去除重复
|
|
|
|
List<String> phoneSets = Lists.newArrayList(Sets.newHashSet(phoneList));
|
|
|
|
List<String> phoneSets = Lists.newArrayList(Sets.newHashSet(phoneList));
|
|
|
|
log.info("=============== the phone list as {} ==================", phoneList.size());
|
|
|
|
log.info("=============== the phone list as {} ==================", phoneList.size());
|
|
|
|
// 集合分割
|
|
|
|
// 集合分割
|
|
|
|
List<List<String>> partitions = ListUtil.partition(phoneSets, DefaultNumberConstants.TWO_HUNDRED);
|
|
|
|
List<List<String>> partitions = ListUtil.partition(phoneSets, DefaultNumberConstants.TWO_HUNDRED);
|
|
|
|
for (List<String> partition : partitions) {
|
|
|
|
for (List<String> partition : partitions) {
|
|
|
|
String join = Joiner.on(StrPool.COMMA).skipNulls().join(partition);
|
|
|
|
String join = Joiner.on(StrPool.COMMA).skipNulls().join(partition);
|
|
|
|
// 批量解析号码
|
|
|
|
// 批量解析号码
|
|
|
|
SecretResponseBean responseBean = DecryptPnoUtil.batchDecryptPno
|
|
|
|
SecretResponseBean responseBean = DecryptPnoUtil.batchDecryptPno
|
|
|
|
(Base64.encode(StringUtils.substringBeforeLast(join, StrPool.COMMA)));
|
|
|
|
(Base64.encode(StringUtils.substringBeforeLast(join, StrPool.COMMA)));
|
|
|
|
if (ObjectUtil.isNotNull(responseBean) && ObjectUtil.isNotNull(responseBean.getTels())) {
|
|
|
|
if (ObjectUtil.isNotNull(responseBean) && ObjectUtil.isNotNull(responseBean.getTels())) {
|
|
|
|
String decodeStr = Base64.decodeStr(responseBean.getTels());
|
|
|
|
String decodeStr = Base64.decodeStr(responseBean.getTels());
|
|
|
|
String[] split = decodeStr.split(StrPool.COMMA);
|
|
|
|
String[] split = decodeStr.split(StrPool.COMMA);
|
|
|
|
if (split.length > DefaultNumberConstants.ZERO_NUMBER) {
|
|
|
|
if (split.length > DefaultNumberConstants.ZERO_NUMBER) {
|
|
|
|
decryptList.addAll(Lists.newArrayList(Arrays.asList(split)));
|
|
|
|
decryptList.addAll(Lists.newArrayList(Arrays.asList(split)));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 剔除空值
|
|
|
|
}
|
|
|
|
decryptList = decryptList.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList());
|
|
|
|
// 剔除空值
|
|
|
|
// 请求黑名单
|
|
|
|
decryptList = decryptList.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList());
|
|
|
|
if (CollUtil.isNotEmpty(decryptList)) {
|
|
|
|
// 请求黑名单
|
|
|
|
log.info("=================== the decryptList size as {} =====================", decryptList.size());
|
|
|
|
if (CollUtil.isNotEmpty(decryptList)) {
|
|
|
|
if (byTaskName.getType() == DefaultNumberConstants.ONE_NUMBER) {
|
|
|
|
log.info("=================== the decryptList size as {} =====================", decryptList.size());
|
|
|
|
saveClue(taskName, byTaskName, task, taskId, tagList, decryptList, path, unzipPath);
|
|
|
|
if (byTaskName.getType() == DefaultNumberConstants.ONE_NUMBER) {
|
|
|
|
}
|
|
|
|
saveClue(taskName, byTaskName, task, taskId, tagList, decryptList, path, unzipPath);
|
|
|
|
if (byTaskName.getType() == DefaultNumberConstants.THREE_NUMBER) {
|
|
|
|
}
|
|
|
|
downResource(taskName, tagList, decryptList, path, unzipPath);
|
|
|
|
if (byTaskName.getType() == DefaultNumberConstants.THREE_NUMBER) {
|
|
|
|
}
|
|
|
|
downResource(taskName, tagList, decryptList, path, unzipPath);
|
|
|
|
if (byTaskName.getType() == DefaultNumberConstants.TWO_NUMBER) {
|
|
|
|
}
|
|
|
|
sendRequest(taskName, byTaskName, decryptList, path);
|
|
|
|
if (byTaskName.getType() == DefaultNumberConstants.TWO_NUMBER) {
|
|
|
|
}
|
|
|
|
sendRequest(taskName, byTaskName, decryptList, path);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
|
|
log.error("=================== the receive mail error message as {} ===========", e.getMessage());
|
|
|
|
|
|
|
|
throw new BadRequestException("接收邮件失败");
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|