Browse Source

修改加密逻辑 新增单行加密逻辑

tanzhongran 3 years ago
parent
commit
a4a09f0803

+ 2 - 2
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/controller/console/FactoryController.java

@@ -121,9 +121,9 @@ public class FactoryController {
 
     @ApiOperation("供应商包材厂是否加密")
     @PostMapping("updateIsEncryption")
-    public BaseResponse<OutIsEncryptionRes> updateIsEncryption(@RequestBody @Validated GetIsEncryptionReq getIsEncryptionReq){
+    public BaseResponse<UpdateIsEncryptionRes> updateIsEncryption(@RequestBody @Validated UpdateIsEncryptionReq updateIsEncryptionReq){
         //修改是否加密状态
-        OutIsEncryptionRes res=factoryService.updateIsEncryption(getIsEncryptionReq);
+        UpdateIsEncryptionRes res=factoryService.updateIsEncryption(updateIsEncryptionReq);
         //包装出参
         return BaseResponse.create(res);
     }

+ 1 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/entity/BaseFactory.java

@@ -69,7 +69,7 @@ public class BaseFactory {
     @ApiModelProperty(value = "是否有效 0-无效 1-有效")
     private Integer valid;
 
-    @ApiModelProperty(value = "生成码包是否需要加密 0-否 1-是")
+    @ApiModelProperty(value = "生成码包加密类型 0-不加密 1-整个文件加密 2-单行加密")
     private Integer isQrCodeEncode;
 
     @ApiModelProperty(value = "创建时间")

+ 49 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/enums/QrCodeEncodeTypeEnum.java

@@ -0,0 +1,49 @@
+package com.abi.qms.platform.dao.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.EnumSet;
+import java.util.Set;
+
+/**
+ * 生成码包加密类型
+ * @Author AndyTan
+ */
+@Getter
+@AllArgsConstructor
+@JsonFormat(shape = JsonFormat.Shape.OBJECT)
+public enum QrCodeEncodeTypeEnum {
+
+	//生成码包加密类型: 0-不加密 1-整个文件加密 2-单行加密
+	NOT_ENCODE(0,"不加密"),
+	FILE_ENCODE(1,"整个文件加密"),
+	LINE_ENCODE(2,"单行加密");
+
+	@EnumValue
+	private Integer code;
+	private String name;
+
+	private static final Set<QrCodeEncodeTypeEnum> ALL = EnumSet.allOf(QrCodeEncodeTypeEnum.class);
+
+    public static String getName(Integer code) {
+        return ALL.stream()
+                .filter(o -> o.code.equals(code))
+                .map(o -> o.getName())
+                .findAny().orElse(null);
+    }
+
+    public static Integer getCode(String name) {
+        return ALL.stream()
+                .filter(o -> o.name.equals(name))
+                .map(o -> o.getCode())
+                .findAny().orElse(null);
+    }
+
+	public boolean is(Integer code){
+		return getCode().equals(code);
+	}
+
+}

+ 2 - 2
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/GetIsEncryptionReq.java

@@ -14,14 +14,14 @@ import javax.validation.constraints.NotNull;
  */
 @Data
 @ApiModel
-public class GetIsEncryptionReq {
+public class UpdateIsEncryptionReq {
 
     @NotNull(message = "ID为空")
     @ApiModelProperty(value = "供应商ID")
     private Long id;
 
     @NotNull(message = "码包加密状态为空")
-    @ApiModelProperty(value = "码包是否加密0-否,1-是")
+    @ApiModelProperty(value = "生成码包加密类型 0-不加密 1-整个文件加密 2-单行加密")
     private Integer isQrCodeEncode;
 
 

+ 1 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/GetFactoryDetailRes.java

@@ -72,7 +72,7 @@ public class GetFactoryDetailRes implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime updateTime;
 
-    @ApiModelProperty(value = "是否加密")
+    @ApiModelProperty(value = "生成码包加密类型 0-不加密 1-整个文件加密 2-单行加密")
     private Integer isQrCodeEncode;
 
 }

+ 1 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/OutIsEncryptionRes.java

@@ -11,7 +11,7 @@ import lombok.Data;
  */
 @Data
 @ApiModel
-public class OutIsEncryptionRes {
+public class UpdateIsEncryptionRes {
 
     @ApiModelProperty("返回是否加密状态0-否,1-是")
     private Integer status;

+ 3 - 3
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/FactoryService.java

@@ -59,9 +59,9 @@ public interface FactoryService {
     BaseFactory getFactoryByCode(String factoryCode,Integer factoryType);
 
     /**
-     * 是否加密
-     * @param getIsEncryptionReq
+     * 修改是否加密
+     * @param updateIsEncryptionReq
      */
-    OutIsEncryptionRes updateIsEncryption(GetIsEncryptionReq getIsEncryptionReq);
+    UpdateIsEncryptionRes updateIsEncryption(UpdateIsEncryptionReq updateIsEncryptionReq);
 
 }

+ 6 - 6
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/FactoryServiceImpl.java

@@ -499,22 +499,22 @@ public class FactoryServiceImpl implements FactoryService {
 
     /**
      * 是否加密
-     * @param getIsEncryptionReq
+     * @param updateIsEncryptionReq
      */
     @Override
-    public OutIsEncryptionRes updateIsEncryption(GetIsEncryptionReq getIsEncryptionReq){
+    public UpdateIsEncryptionRes updateIsEncryption(UpdateIsEncryptionReq updateIsEncryptionReq){
         //1.查询是否存在
-        BaseFactory factory = baseFactoryMapper.selectById(getIsEncryptionReq.getId());
+        BaseFactory factory = baseFactoryMapper.selectById(updateIsEncryptionReq.getId());
         AssertUtil.isNull(factory, "供应商不存在");
         //2.判断是否包材厂,且非一级包材厂
         if (!FactoryTypeEnum.COVER.is(factory.getFactoryType()) && TrueFalseEnum.FALSE.is(factory.getIsFirstFactory())) {
             throw new BusinessException("该供应商不是包材厂,无法设置是否加密");
         }
         //3-修改是否加密状态
-        factory.setIsQrCodeEncode(getIsEncryptionReq.getIsQrCodeEncode());
+        factory.setIsQrCodeEncode(updateIsEncryptionReq.getIsQrCodeEncode());
         baseFactoryMapper.updateById(factory);
-        OutIsEncryptionRes res = new OutIsEncryptionRes();
-        res.setStatus(getIsEncryptionReq.getIsQrCodeEncode());
+        UpdateIsEncryptionRes res = new UpdateIsEncryptionRes();
+        res.setStatus(updateIsEncryptionReq.getIsQrCodeEncode());
         return res;
     }
 

+ 20 - 11
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/GenerateCodeServiceImpl.java

@@ -504,7 +504,9 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
     /**
      * 创建码文件
      */
-    private String createCodeFile(BaseFactory coverFactory, QrRepertoryVO qrRepertory,Map<Long,QrBoxCodeFormatSplit> splitCache,String batchNumber,QrBoxCodeFormat boxCodeFormat,ArrayList<File> fileList,List<QrData> codeList) {
+    private String createCodeFile(BaseFactory coverFactory, QrRepertoryVO qrRepertory,
+                                  Map<Long,QrBoxCodeFormatSplit> splitCache,String batchNumber,QrBoxCodeFormat boxCodeFormat,
+                                  ArrayList<File> fileList,List<QrData> codeList) {
         List<QrRepertoryColumnVO> qrRepertoryColumnList = qrRepertory.getQrRepertoryColumnList();
         List<String> columnNameList = new ArrayList<>();
         StringBuilder content = new StringBuilder();
@@ -516,8 +518,7 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
         }
         Map<Long, Integer> colUrlTypeMap = qrRepertoryColumnList.stream().collect(Collectors.toMap(QrRepertoryColumnVO::getId, QrRepertoryColumnVO::getUrlType));
 
-
-        // 第一行为每列的名称,用“,”分隔
+        // 1-第一行为每列的名称,用“,”分隔
         for(QrRepertoryColumnVO colVO:qrRepertoryColumnList){
             int splitNum = splitCache.containsKey(colVO.getId()) ? splitCache.get(colVO.getId()).getSplitNum() : 0;
             if(splitNum>1){
@@ -537,7 +538,8 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
             }
         }
         content.append("\r\n");
-        // 拼接码
+
+        // 2-第二行开始拼接码
         for (QrData qrData : codeList) {
             List<String> codeTextList = new ArrayList<>();
             for(QrInnerData qrInnerData:qrData.getInnerDataList()){
@@ -558,10 +560,23 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
                 }
             }
             String innerData = String.join(",",codeTextList);
+
+            // *特殊逻辑,单行加密 如果是单行加密就在这个地方加密
+            if(QrCodeEncodeTypeEnum.LINE_ENCODE.is(coverFactory.getIsQrCodeEncode())){
+                innerData = AesEncodeUtil.aesEncode(innerData, encodeKey);
+            }
+
             //拼上码
             content.append(innerData).append("\r\n");
         }
-        //如果文件不存在,创建一个文件
+
+        // 如果包材厂是接受加密的包材厂 则对这个text的内容加密
+        String contentText = content.toString();
+        if(QrCodeEncodeTypeEnum.FILE_ENCODE.is(coverFactory.getIsQrCodeEncode())){
+            contentText = AesEncodeUtil.aesEncode(contentText, encodeKey);
+        }
+
+        // 3-如果文件不存在,创建一个文件
         File file = new File("/code");
         try{
             if (!file.exists()) {
@@ -571,12 +586,6 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
             log.error("创建文件异常",e);
         }
 
-        // 如果包材厂是接受加密的包材厂 则对这个text的内容加密
-        String contentText = content.toString();
-        if(TrueFalseEnum.TRUE.is(coverFactory.getIsQrCodeEncode())){
-            contentText = AesEncodeUtil.aesEncode(contentText, encodeKey);
-        }
-
         // 生成txt
         FileWriter fileWriter = new FileWriter(file.getPath()+"/"+ batchNumber + ".txt");
         fileWriter.write(contentText);

+ 1 - 1
abi-cloud-qr-platform-server/src/test/java/com/abi/qms/platform/EncryptionTest.java

@@ -34,7 +34,7 @@ public class EncryptionTest {
 
 
     public static void main(String[] args) {
-        String a = "hwc6davQc6wAsDKz3zIuBQ==";
+        String a = "aLI5iXza3R/w7aJ2AsYhUT7EGS0Zqk94k1nXK9rT8AvJGMbMUJytae53f82pFphWy0bmnEGv4fWb6RcpE9m3tQ==";
         String s = AesEncodeUtil.aesDecode(a, "EC/Z+S7c3EFJa2dtvLyekg==");
         System.out.println(s);
     }