Parcourir la source

fix: 修复生成重复码

Marko552 il y a 3 ans
Parent
commit
76a6112856

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

@@ -210,14 +210,9 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
                 // 累加数量
                 sum = sum + qrCodes.size();
                 log.info("7 loopGenerateCode save tablestore async -->"+System.currentTimeMillis());
-                // 清空qrCodes
-                qrCodes.clear();
-
                 // 创建码文件
                 String md5 = createCodeFile(qrPackage,coverFactory,qrRepertory,splitCache, batchNumber, qrBoxCodeFormat, fileList, codeList);
                 fileVerifyMd5List.add(md5);
-                // 清空codeList
-                codeList.clear();
                 log.info("8 loopGenerateCode create file -->"+System.currentTimeMillis());
             }catch(Exception e){
                 log.warn("单个批次生成码异常",e);
@@ -354,11 +349,11 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
         //保存所有码的列表
         List<QrCode> qrCodes = Lists.newLinkedList();
         //将每一列的码拆成多条码保存
-        codeList.stream().forEach(sout-> {
+        codeList.forEach(sout-> {
             List<QrInnerData> innerDataList = sout.getInnerDataList();
             List<QrCode> qrCodeCope = PojoConverterUtils.copyList(innerDataList, QrCode.class);
             //批次号 码包
-            qrCodeCope.stream().forEach(stable->{
+            qrCodeCope.forEach(stable->{
                 stable.setBatchNumberId(qrPackageBatch.getId());
                 stable.setPackageId(qrPackageBatch.getPackageId());
 //                stable.setCreateTime(LocalDateTime.now());
@@ -399,42 +394,44 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
         Map<String, Object> paramMap = Maps.newHashMap();
         // 码
         StringBuilder codeSb = new StringBuilder();
-        QrData qrData = new QrData()
-                .setQrRepertoryId(qrRepertoryId)
-                .setBatchNumber(batchNumber)
-                .setQrRepertoryType(QrRepertoryTypeEnum.SYSTEM_GENERATE.getCode())
-                .setCreateTime(LocalDateTime.now());
         try {
             for (int i = 0; i < needGenerateNumber; i++) {
-            List<QrInnerData> qrInnerDataList = Lists.newLinkedList();
-            //箱子码幅面
-            for (int a = 0; a < boxCodeFormat.getFormatNumber(); a++) {
-                for (int j = 0; j < qrRepertoryColumnList.size(); j++) {
-                    QrRepertoryColumnVO qrRepertoryColumn = qrRepertoryColumnList.get(j);
-                    Long qrRepertoryColumnId = qrRepertoryColumn.getId();
-                    // 非clone列,设置code
-                    String code = buildUniqueCode(uniqueSet, qrRepertoryColumn, codeSb, paramMap, qrRepertorySerialNumberMap, 0);
-                    if (code == null) {
-                        throw new BusinessException("生成码失败,重复生成码次数超过" + REPEAT_BUILD_CODE_TIMES + "次");
-                    }
-                    // 判断拆分数量是否为空
-                    int splitNum = 0;
-                    if(splitCache.containsKey(qrRepertoryColumnId)){
-                        splitNum = splitCache.get(qrRepertoryColumnId).getSplitNum();
+                QrData qrData = new QrData()
+                        .setQrRepertoryId(qrRepertoryId)
+                        .setBatchNumber(batchNumber)
+                        .setQrRepertoryType(QrRepertoryTypeEnum.SYSTEM_GENERATE.getCode())
+                        .setCreateTime(LocalDateTime.now());
+
+                List<QrInnerData> qrInnerDataList = new LinkedList<>();
+                //箱子码幅面
+                for (int a = 0; a < boxCodeFormat.getFormatNumber(); a++) {
+
+                    for (int j = 0; j < qrRepertoryColumnList.size(); j++) {
+                        QrRepertoryColumnVO qrRepertoryColumn = qrRepertoryColumnList.get(j);
+                        Long qrRepertoryColumnId = qrRepertoryColumn.getId();
+                        // 非clone列,设置code
+                        String code = buildUniqueCode(uniqueSet, qrRepertoryColumn, codeSb, paramMap, qrRepertorySerialNumberMap, 0);
+                        if (code == null) {
+                            throw new BusinessException("生成码失败,重复生成码次数超过" + REPEAT_BUILD_CODE_TIMES + "次");
+                        }
+                        // 判断拆分数量是否为空
+                        int splitNum = 0;
+                        if(splitCache.containsKey(qrRepertoryColumnId)){
+                            splitNum = splitCache.get(qrRepertoryColumnId).getSplitNum();
+                        }
+                        QrInnerData qrInnerData = new QrInnerData();
+                        qrInnerData.setCode(code);
+                        qrInnerData.setQrRepertoryColumnId(qrRepertoryColumnId).setSortNumber(qrRepertoryColumn.getSortNumber());
+                        qrInnerData.setCodeIndex(++qrIndex);
+                        qrInnerData.setSplitNum(splitNum);
+                        qrInnerDataList.add(qrInnerData);
                     }
-                    QrInnerData qrInnerData = new QrInnerData();
-                    qrInnerData.setCode(code);
-                    qrInnerData.setQrRepertoryColumnId(qrRepertoryColumnId).setSortNumber(qrRepertoryColumn.getSortNumber());
-                    qrInnerData.setCodeIndex(++qrIndex);
-                    qrInnerData.setSplitNum(splitNum);
-                    qrInnerDataList.add(qrInnerData);
                 }
+                qrData.setInnerDataList(qrInnerDataList);
+                qrDataList.add(qrData);
             }
-            qrData.setInnerDataList(qrInnerDataList);
-            qrDataList.add(qrData);
-        }
-        //保存index
-        setQrIndex(qrIndex);
+            //保存index
+            setQrIndex(qrIndex);
 
             return qrDataList;
         } catch (Exception e) {