Explorar o código

码包加入md5校验字段

tanzhongran %!s(int64=4) %!d(string=hai) anos
pai
achega
644e9a866f

+ 3 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/entity/QrPackage.java

@@ -69,6 +69,9 @@ public class QrPackage implements Serializable {
 	@Schema(name = "下载压缩文件密码")
 	private String zipPassword;
 
+	@Schema(name = "文件校验MD5")
+	private String fileVerifyMd5;
+
 	@Schema(name = "是否已下载")
     private Integer isDownload;
 

+ 14 - 8
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/mq/GenerateCodeConsumer.java

@@ -21,9 +21,6 @@ import com.abi.qms.platform.service.QrPackageService;
 import com.abi.task.common.api.exception.BusinessException;
 import com.abi.task.common.tablestore.TableStorePlusUtils;
 import com.abi.task.common.tablestore.common.TableStoreEntity;
-import com.abi.task.common.tablestore.entity.DemoEntity;
-import com.abi.task.common.utils.TableStoreUtils;
-import com.alicloud.openservices.tablestore.model.search.query.BoolQuery;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.rabbitmq.client.Channel;
@@ -39,7 +36,6 @@ import org.redisson.api.RedissonClient;
 import org.springframework.amqp.rabbit.annotation.RabbitHandler;
 import org.springframework.amqp.rabbit.annotation.RabbitListener;
 import org.springframework.amqp.support.AmqpHeaders;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.messaging.Message;
@@ -48,7 +44,7 @@ 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 org.springframework.util.CollectionUtils;
+import org.springframework.util.DigestUtils;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
@@ -56,6 +52,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -119,7 +116,10 @@ public class GenerateCodeConsumer {
 	private File file = new File(this.getClass().getResource("/").getPath()+"/code");
 
 	//批量添加文件
-	private ArrayList<File> files = new ArrayList<>();
+	private ArrayList<File> fileList = new ArrayList<>();
+
+	//批量添加文件
+	private ArrayList<String> fileVerifyMd5List = new ArrayList<>();
 
 	/** 允许单个码生成重复的次数 */
 	private static final int REPEAT_BUILD_CODE_TIMES = 10;
@@ -257,7 +257,7 @@ public class GenerateCodeConsumer {
 		String pas = RandomCodeUtils.getStr(6);
 		log.info("生成密码:"+pas);
 		//压缩加密文件
-		zipEncryption(file,files,pas,zipName);
+		zipEncryption(file, fileList,pas,zipName);
 		//上传阿里云,并更新码包的下载路径 保存zip密码
 		try{
 			MultipartFile multipartFile = toMultipartFile(file.getPath()+"\\"+zipName, zipName);
@@ -278,6 +278,8 @@ public class GenerateCodeConsumer {
 		//3-更改生成状态为已生成
 		qrPackage.setGenerateStatus(QrPackageGenerateStatusEnum.GENERATE_SUCCESS.getCode());
 		qrPackage.setGenerateTime(LocalDateTime.now());
+		//将MD5的字符换逗号拼接放入码包
+		qrPackage.setFileVerifyMd5(String.join(",",fileVerifyMd5List));
 		//根据包材厂获取包材厂负责人邮箱
 		QueryWrapper<BaseFactory> baseQuery = new QueryWrapper<>();
 		baseQuery.eq("id", qrPackage.getFactoryCoverId());
@@ -547,7 +549,11 @@ public class GenerateCodeConsumer {
 		// 生成txt
 		FileWriter fileWriter = new FileWriter(file.getPath()+"/"+ batchNumber + ".txt");
 		fileWriter.write(content.toString());
-		files.add(new File(file.getPath()+"/"+ batchNumber + ".txt"));
+		fileList.add(new File(file.getPath()+"/"+ batchNumber + ".txt"));
+
+		//生成md5(用于前端校验是否被替换)
+		String fileVerifyMd5 = DigestUtils.md5DigestAsHex(content.toString().getBytes(StandardCharsets.UTF_8));
+		fileVerifyMd5List.add(fileVerifyMd5);
 	}
 
 	/**