diff --git a/ad-platform-common/ad-platform-common-core/pom.xml b/ad-platform-common/ad-platform-common-core/pom.xml
index ffc263e2..4321618b 100644
--- a/ad-platform-common/ad-platform-common-core/pom.xml
+++ b/ad-platform-common/ad-platform-common-core/pom.xml
@@ -123,6 +123,10 @@
mail
+
+ net.lingala.zip4j
+ zip4j
+
diff --git a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/CacheKey.java b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/CacheKey.java
index 579b5c47..6291b1df 100644
--- a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/CacheKey.java
+++ b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/CacheKey.java
@@ -56,4 +56,10 @@ public interface CacheKey {
* 数据字典
*/
String DICT_NAME = "dict::name:";
+
+
+ /**
+ * dmp请求批次
+ */
+ String DMP_REQUEST_ID = "dmp::request::id";
}
diff --git a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/CompressUtil.java b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/CompressUtil.java
new file mode 100644
index 00000000..51d2d951
--- /dev/null
+++ b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/CompressUtil.java
@@ -0,0 +1,83 @@
+package com.baiye.util;
+
+import cn.hutool.core.text.StrPool;
+import cn.hutool.core.util.CharsetUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import net.lingala.zip4j.core.ZipFile;
+import net.lingala.zip4j.exception.ZipException;
+import net.lingala.zip4j.model.ZipParameters;
+import net.lingala.zip4j.util.Zip4jConstants;
+
+import java.io.File;
+import java.util.ArrayList;
+
+/**
+ * @author Enzo
+ * @date : 2022/10/24
+ */
+public class CompressUtil {
+ private CompressUtil() {
+ }
+
+ /**
+ * @param zipPath 压缩文件路径
+ * @param filepath 文件路径
+ * @param password 压缩密码
+ */
+ public static void decryptionCompression(String zipPath, String filepath, String password) {
+ try {
+ //创建压缩文件
+ ZipFile zipFile = new ZipFile(zipPath);
+ ArrayList files = new ArrayList<>();
+ files.add(new File(filepath));
+
+ //设置压缩文件参数
+ ZipParameters parameters = new ZipParameters();
+ //设置压缩方法
+ parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
+
+ //设置压缩级别
+ //DEFLATE_LEVEL_FASTEST - Lowest compression level but higher speed of compression
+ //DEFLATE_LEVEL_FAST - Low compression level but higher speed of compression
+ //DEFLATE_LEVEL_NORMAL - Optimal balance between compression level/speed
+ //DEFLATE_LEVEL_MAXIMUM - High compression level with a compromise of speed
+ //DEFLATE_LEVEL_ULTRA - Highest compression level but low speed
+ parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
+
+ //设置压缩文件加密
+ parameters.setEncryptFiles(true);
+
+ //设置加密方法
+ parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
+
+ //设置aes加密强度
+ parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
+
+ //设置密码
+ parameters.setPassword(password);
+
+ //添加文件到压缩文件
+ zipFile.addFiles(files, parameters);
+ } catch (ZipException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static String unzipFiles(String fileUrl, String zipPath, String password) throws ZipException {
+ File file = new File(zipPath);
+ ZipFile zipFile = new ZipFile(file);
+ //设置文件编码,根据实际场景
+ zipFile.setFileNameCharset(CharsetUtil.GBK);
+ if (zipFile.isEncrypted()) {
+ zipFile.setPassword(password);
+ }
+ String uuid = IdUtil.randomUUID();
+ String filePath
+ = fileUrl.concat(StrPool.SLASH).concat(uuid);
+ zipFile.extractAll(filePath);
+ return filePath;
+ }
+
+
+}
diff --git a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/MailUtil.java b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/MailUtil.java
index 872bfde4..a8575238 100644
--- a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/MailUtil.java
+++ b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/MailUtil.java
@@ -1,10 +1,14 @@
package com.baiye.util;
+import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.CharsetUtil;
+import com.baiye.constant.DefaultNumberConstants;
import com.baiye.exception.BadRequestException;
+import com.baiye.exception.CallException;
import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
@@ -12,12 +16,16 @@ import javax.mail.*;
import javax.mail.internet.*;
import java.io.*;
import java.nio.file.Files;
-import java.util.*;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
/**
* @author Enzo
* @date 2022-10-22 13:49:33
*/
+@Slf4j
public class MailUtil {
private MailUtil() {
@@ -25,6 +33,7 @@ public class MailUtil {
/**
* 结合邮件返回
+ *
* @param username
* @param password
* @return
@@ -43,11 +52,11 @@ public class MailUtil {
Message[] messages = inbox.getMessages();
list.addAll(Arrays.asList(messages));
} catch (NoSuchProviderException e) {
- e.printStackTrace();
- System.exit(1);
+ log.error("======================= open mail error time {} ==================", DateUtil.date());
+ throw new CallException("没有找到该服务");
} catch (MessagingException e) {
- e.printStackTrace();
- System.exit(2);
+ log.error("======================= open mail error time {} ==================", DateUtil.date());
+ throw new CallException("获取邮箱失败");
}
return list;
}
@@ -55,7 +64,7 @@ public class MailUtil {
/**
* 创建一封复杂邮件(文本+图片+附件)
*/
- public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail, String filename, String taskName, String customerId) throws Exception {
+ public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail, String filename, String taskName) throws Exception {
// 1. 创建邮件对象
MimeMessage message = new MimeMessage(session);
@@ -66,14 +75,14 @@ public class MailUtil {
message.addRecipient(Message.RecipientType.TO, new InternetAddress(receiveMail, receiveMail, CharsetUtil.UTF_8));
// 4. Subject: 邮件主题
- message.setSubject(customerId, CharsetUtil.UTF_8);
+ message.setSubject(taskName, CharsetUtil.UTF_8);
/*
* 下面是邮件内容的创建:
*/
// 6. 创建文本“节点”
- MimeBodyPart text = new MimeBodyPart();
+ /*MimeBodyPart text = new MimeBodyPart();
// 这里添加图片的方式是将整个图片包含到邮件内容中, 实际上也可以以 http 链接的形式添加网络图片
text.setContent(taskName, "text/html;charset=UTF-8");
@@ -87,7 +96,7 @@ public class MailUtil {
// 最终添加到邮件的 Content 是由多个 BodyPart 组成的 Multipart, 所以我们需要的是 BodyPart,
// 上面的 mm_text_image 并非 BodyPart, 所有要把 mm_text_image 封装成一个 BodyPart
MimeBodyPart textImage = new MimeBodyPart();
- textImage.setContent(mmTextImage);
+ textImage.setContent(mmTextImage);*/
// 9. 创建附件“节点”
MimeBodyPart attachment = new MimeBodyPart();
@@ -100,7 +109,7 @@ public class MailUtil {
// 10. 设置(文本+图片)和 附件 的关系(合成一个大的混合“节点” / Multipart )
MimeMultipart mm = new MimeMultipart();
- mm.addBodyPart(textImage);
+ // mm.addBodyPart(textImage);
// 如果有多个附件,可以创建多个多次添加
mm.addBodyPart(attachment);
// 混合关系
@@ -118,7 +127,7 @@ public class MailUtil {
return message;
}
- public static void sendMail(String username, String password, String toUsername, String fileName, String customerId, String taskName) {
+ public static void sendMail(String username, String password, String toUsername, String fileName, String taskName) {
try {
// 1. 创建参数配置, 用于连接邮件服务器的参数配置
@@ -141,7 +150,7 @@ public class MailUtil {
session.setDebug(Boolean.FALSE);
// 3. 创建一封邮件
- MimeMessage message = createMimeMessage(session, username, toUsername, fileName, taskName, customerId);
+ MimeMessage message = createMimeMessage(session, username, toUsername, fileName, taskName);
// 4. 根据 Session 获取邮件传输对象
Transport transport = session.getTransport();
@@ -175,7 +184,7 @@ public class MailUtil {
}
}
}
- return "";
+ return CharSequenceUtil.EMPTY;
}
@@ -215,7 +224,10 @@ public class MailUtil {
private static String saveFile(String fileName, InputStream in, String path) {
String osName = System.getProperty("os.name");
-
+ File file = new File(path);
+ if (!file.exists()) {
+ file.mkdirs();
+ }
String separator;
if (osName == null) {
osName = "";
@@ -226,7 +238,8 @@ public class MailUtil {
separator = "/";
}
File storeFile = new File(path + separator + fileName);
- try (BufferedOutputStream bos = new BufferedOutputStream(Files.newOutputStream(storeFile.toPath())); BufferedInputStream bis = new BufferedInputStream(in)) {
+ try (BufferedOutputStream bos = new BufferedOutputStream(Files.newOutputStream(storeFile.toPath()));
+ BufferedInputStream bis = new BufferedInputStream(in)) {
int c;
while ((c = bis.read()) != -1) {
bos.write(c);
@@ -238,4 +251,20 @@ public class MailUtil {
return storeFile.getPath();
}
+ /**
+ * 获得邮件发件人
+ *
+ * @param msg 邮件内容
+ * @return
+ * @throws MessagingException
+ * @throws UnsupportedEncodingException
+ */
+ public static String getFrom(MimeMessage msg) throws MessagingException {
+ Address[] froms = msg.getFrom();
+ if (froms.length < DefaultNumberConstants.ONE_NUMBER)
+ throw new MessagingException("没有发件人!");
+ InternetAddress address = (InternetAddress) froms[DefaultNumberConstants.ZERO_NUMBER];
+ return address.getAddress();
+ }
+
}
diff --git a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/MobileUtil.java b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/MobileUtil.java
index c25a6c72..f73fcdb7 100644
--- a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/MobileUtil.java
+++ b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/MobileUtil.java
@@ -55,9 +55,7 @@ public class MobileUtil {
public static boolean checkChinaMobile(String phone) {
if (StringUtils.isNotBlank(phone)) {
Pattern regexp = Pattern.compile(CHINA_MOBILE_PATTERN);
- if (regexp.matcher(phone).matches()) {
- return true;
- }
+ return regexp.matcher(phone).matches();
}
return false;
}
diff --git a/manage/ad-platform-management/src/main/java/com/baiye/config/properties/DeliveryProperties.java b/manage/ad-platform-management/src/main/java/com/baiye/config/properties/DeliveryProperties.java
index 69f6a9ee..bb572ad3 100644
--- a/manage/ad-platform-management/src/main/java/com/baiye/config/properties/DeliveryProperties.java
+++ b/manage/ad-platform-management/src/main/java/com/baiye/config/properties/DeliveryProperties.java
@@ -17,6 +17,9 @@ public class DeliveryProperties {
@ApiModelProperty("文件地址")
private String fileUrl;
+ @ApiModelProperty("压缩密码")
+ private String zipPassword;
+
@ApiModelProperty("customerId")
private String customerId;
diff --git a/manage/ad-platform-management/src/main/java/com/baiye/timed/DeliveryBalanceTask.java b/manage/ad-platform-management/src/main/java/com/baiye/timed/DeliveryBalanceTask.java
index 2a50b3fd..8d97bbf5 100644
--- a/manage/ad-platform-management/src/main/java/com/baiye/timed/DeliveryBalanceTask.java
+++ b/manage/ad-platform-management/src/main/java/com/baiye/timed/DeliveryBalanceTask.java
@@ -2,19 +2,23 @@ package com.baiye.timed;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.text.StrPool;
-import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
import com.baiye.config.properties.DeliveryProperties;
import com.baiye.constant.DefaultNumberConstants;
-import com.baiye.modules.system.domain.*;
-import com.baiye.modules.system.service.*;
+import com.baiye.modules.system.domain.Company;
+import com.baiye.modules.system.domain.PayFatherTemplate;
+import com.baiye.modules.system.domain.TaskImei;
+import com.baiye.modules.system.service.CompanyService;
+import com.baiye.modules.system.service.DeliveryRecordService;
+import com.baiye.modules.system.service.PayFatherTemplateService;
+import com.baiye.modules.system.service.TaskImeiService;
import com.baiye.modules.system.service.dto.ImeiDTO;
-import com.baiye.util.CSVFileUtil;
-import com.baiye.util.MailUtil;
+import com.baiye.util.*;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -25,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -36,10 +41,14 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class DeliveryBalanceTask {
+
+ private final RedisUtils redisUtils;
+
private final CompanyService companyService;
private final TaskImeiService taskImeiService;
+
private final DeliveryProperties deliveryProperties;
private final DeliveryRecordService deliveryRecordService;
@@ -59,6 +68,7 @@ public class DeliveryBalanceTask {
for (Map.Entry> map : listMap.entrySet()) {
Long taskId = map.getKey();
List list = listMap.get(taskId);
+ log.info("=================== the task Id as {},upload size as {} ====================", taskId, list.size());
Long userId = list.get(DefaultNumberConstants.ZERO_NUMBER).getUserId();
Company companyByUserId = companyService.findCompanyByUserId(userId);
if (ObjectUtil.isNotNull(companyByUserId)
@@ -83,23 +93,36 @@ public class DeliveryBalanceTask {
continue;
}
String fileUrl = deliveryProperties.getFileUrl();
+ Integer num = (Integer) redisUtils.get(CacheKey.DMP_REQUEST_ID);
// 转换DTO
List toList = Convert.toList(ImeiDTO.class, taskImeiList);
- String taskImeiName = IdUtil.fastUUID();
+ String format = DateUtil.format(DateUtil.date(), DatePattern.PURE_DATE_PATTERN);
+ Integer batch = ObjectUtil.isNull(num) ? DefaultNumberConstants.ONE_NUMBER : num + DefaultNumberConstants.ONE_NUMBER;
+ String taskImeiName = "BY".concat(StrPool.UNDERLINE).concat(format).concat(StrPool.UNDERLINE).concat(String.valueOf(batch));
+
+ String file = fileUrl.concat(StrPool.SLASH).concat(taskImeiName);
// 保存文件
- String filePath = fileUrl.concat(StrPool.SLASH).concat(taskImeiName).concat(".csv");
- CSVFileUtil.createCsvFile(toList, filePath);
+ String csvPath = file.concat(".csv");
+ CSVFileUtil.createCsvFile(toList, csvPath);
+ String zipPath = file.concat(".zip");
+ // 设置压缩文件
+ CompressUtil.decryptionCompression
+ (zipPath, csvPath, deliveryProperties.getZipPassword());
// 发送邮件
MailUtil.sendMail(deliveryProperties.getEmailAddress(),
deliveryProperties.getEmailPassword(),
- deliveryProperties.getToEmailAddress(), filePath,
- deliveryProperties.getCustomerId(), taskImeiName);
+ deliveryProperties.getToEmailAddress(), zipPath, taskImeiName);
+ // 保存批次号
+ redisUtils.set(CacheKey.DMP_REQUEST_ID, batch, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS);
// 修改状态 修改余额
taskImeiService.updateBath(taskId, taskImeiName, DefaultNumberConstants.ONE_NUMBER);
- deliveryRecordService.saveDeliveryRecord(filePath, taskImeiName, taskImeiList.size(), taskId, userId);
+ deliveryRecordService.saveDeliveryRecord(zipPath, taskImeiName, taskImeiList.size(), taskId, userId);
companyService.updateUserBalanceByCompanyId(sub.doubleValue(), companyByUserId.getId());
+
// 删除文件
- FileUtil.del(filePath);
+ FileUtil.del(csvPath);
+ FileUtil.del(zipPath);
+ log.info("=========================== the csv path as {}, zip path as {} ========================", csvPath, zipPath);
}
}
}
diff --git a/manage/ad-platform-management/src/main/resources/config/application-dev.yml b/manage/ad-platform-management/src/main/resources/config/application-dev.yml
index 4e33f7b6..f3e447ea 100644
--- a/manage/ad-platform-management/src/main/resources/config/application-dev.yml
+++ b/manage/ad-platform-management/src/main/resources/config/application-dev.yml
@@ -173,11 +173,12 @@ debt:
platform:
authToken: JI8AeA7POKsdGcBC
+ zipPassword: DB2022hjk213v1...
fileUrl: /home/eladmin/mail/upload
emailAddress: ensoze@outlook.com
emailPassword: baiye2022
- toEmailAddress: ggggod_2022@outlook.com
customerId: QISX0xz4l6fR3YL2sUNSpzM2
+ toEmailAddress: ggggod_2022@outlook.com
# 巨量引擎配置
ocean:
diff --git a/manage/ad-platform-management/src/main/resources/config/application-prod.yml b/manage/ad-platform-management/src/main/resources/config/application-prod.yml
index 9e8b3e72..c1039059 100644
--- a/manage/ad-platform-management/src/main/resources/config/application-prod.yml
+++ b/manage/ad-platform-management/src/main/resources/config/application-prod.yml
@@ -173,6 +173,7 @@ debt:
platform:
authToken: nqJpVSf3UcrEcVIH
+ zipPassword: DB2022hjk213v1...
fileUrl: /home/eladmin/mail/upload
emailAddress: ensoze@outlook.com
emailPassword: baiye2022
diff --git a/pom.xml b/pom.xml
index c34b9240..75c22380 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,6 +37,7 @@
23.0
5.23
0.11.1
+ 1.3.2
5.1.1
1.5.4
1.1.24
@@ -247,6 +248,12 @@
mail
${mail.version}
+
+
+ net.lingala.zip4j
+ zip4j
+ ${zip4j.version}
+
diff --git a/services/ad-platform-source/src/main/java/com/baiye/config/properties/DeliveryProperties.java b/services/ad-platform-source/src/main/java/com/baiye/config/properties/DeliveryProperties.java
index 24cd619f..b19f4a1d 100644
--- a/services/ad-platform-source/src/main/java/com/baiye/config/properties/DeliveryProperties.java
+++ b/services/ad-platform-source/src/main/java/com/baiye/config/properties/DeliveryProperties.java
@@ -14,6 +14,9 @@ import org.springframework.context.annotation.Configuration;
@ConfigurationProperties(prefix = "platform")
public class DeliveryProperties {
+ @ApiModelProperty("压缩密码")
+ private String zipPassword;
+
@ApiModelProperty("文件地址")
private String fileUrl;
diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/controller/ClueController.java b/services/ad-platform-source/src/main/java/com/baiye/module/controller/ClueController.java
index 19b6bcc4..1e8130f1 100644
--- a/services/ad-platform-source/src/main/java/com/baiye/module/controller/ClueController.java
+++ b/services/ad-platform-source/src/main/java/com/baiye/module/controller/ClueController.java
@@ -202,11 +202,7 @@ public class ClueController {
return clueService.reportClueStageAndTurnover(reportStageAndTurnoverDto);
}
- @PostMapping("/dmp/exchange")
- @ApiOperation("dmp资源兑换")
- public CommonResponse