Bladeren bron

添加已生成码包位置,删除伪列多余代码

luyanwen 4 jaren geleden
bovenliggende
commit
a403e12c13

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

@@ -29,4 +29,7 @@ public class QrInnerData implements Serializable {
 	/** 排序号 */
 	private Integer sortNumber;
 
+	/** 已生成码包位置 */
+	private Long codeIndex;
+
 }

+ 5 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/tablestore/entity/QrCode.java

@@ -46,4 +46,9 @@ public class QrCode implements TableStoreEntity, Serializable {
      * 创建时间
      */
     private LocalDateTime createTime;
+
+    /**
+     * 已生成码包位置
+     */
+    private Long codeIndex;
 }

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

@@ -3,6 +3,7 @@ package com.abi.qms.platform.infrastructure.mq;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.io.file.FileWriter;
 import com.abi.base.foundation.util.JsonUtil;
+import com.abi.base.foundation.util.RedisClient;
 import com.abi.qms.platform.dao.entity.*;
 import com.abi.qms.platform.dao.enums.QrFormatUrlEnum;
 import com.abi.qms.platform.dao.enums.QrPackageGenerateStatusEnum;
@@ -105,6 +106,12 @@ public class GenerateCodeConsumer {
 	@Autowired
 	private QrBoxCodeFormatSplitMapper qrBoxCodeFormatSplitMapper;
 
+	@Autowired
+	private QrIndexMapper qrIndexMapper;
+
+	@Autowired
+	private RedisClient redisClient;
+
 	//生成码数据
 	final List<QrData> qrDataList = new LinkedList<>();
 
@@ -131,8 +138,35 @@ public class GenerateCodeConsumer {
         String str = JsonUtil.toBean(id, String.class);
 		QrPackageVO qrPackageVO = qrPackageMapper.selectQrPackageDetailById(Long.parseLong(str));
 		try {
+			//声明码对应的值
+			Long codeIndex = 0L;
+			Object code_qr_index = redisClient.get("code_qr_index");
+			if(ObjectUtils.isEmpty(code_qr_index)){
+				QueryWrapper<QrIndex>  indexQuery= new QueryWrapper<>();
+				indexQuery.orderByDesc("index_current").last("limit 1");
+				QrIndex qrIndex = qrIndexMapper.selectOne(indexQuery);
+				if(ObjectUtils.isEmpty(qrIndex)){
+					QrIndex index = new QrIndex();
+					index.setIndexCurrent(qrPackageVO.getQrNumber());
+					qrIndexMapper.insert(index);
+					redisClient.set("code_qr_index",qrPackageVO.getQrNumber());
+				} else {
+					codeIndex = qrIndex.getIndexCurrent();
+					QrIndex index = new QrIndex();
+					index.setIndexCurrent(qrIndex.getIndexCurrent()+qrPackageVO.getQrNumber());
+					qrIndexMapper.insert(index);
+					redisClient.set("code_qr_index",qrIndex.getIndexCurrent()+qrPackageVO.getQrNumber());
+				}
+			} else {
+				codeIndex = Long.parseLong(code_qr_index.toString());
+				long l = qrPackageVO.getQrNumber() + Long.parseLong(code_qr_index.toString());
+				QrIndex index = new QrIndex();
+				index.setIndexCurrent(l);
+				qrIndexMapper.insert(index);
+				redisClient.set("code_qr_index",l);
+			}
 			// 生成码
-			loopGenerateCode(qrPackageVO);
+			loopGenerateCode(qrPackageVO,codeIndex);
 		} catch (Exception e) {
 			log.error("生成码失败", e);
 			// 回滚
@@ -150,7 +184,7 @@ public class GenerateCodeConsumer {
 	/**
 	 * 生成码
 	 */
-	private void loopGenerateCode(QrPackageVO qrPackageVO) {
+	private void loopGenerateCode(QrPackageVO qrPackageVO,Long codeIndex) {
 		//刷新码包信息
 		QrPackage qrPackage = qrPackageMapper.selectById(qrPackageVO.getId());
 
@@ -209,7 +243,7 @@ public class GenerateCodeConsumer {
 			 * boxCodeFormat 箱码幅面
 			 */
 			// 循环生成码
-			List<QrData> codeList = loopGenerateCode(qrRepertoryColumnList, qrRepertoryId, urlMap, qrRepertorySerialNumberMap, qrNumber, batchNumber, repeatTimes,boxCodeFormat);
+			List<QrData> codeList = loopGenerateCode(qrRepertoryColumnList, qrRepertoryId, urlMap, qrRepertorySerialNumberMap, qrNumber, batchNumber, repeatTimes,boxCodeFormat,codeIndex);
 
             // 更新码库流水号
             if (!qrRepertorySerialNumberMap.isEmpty()) {
@@ -319,6 +353,8 @@ public class GenerateCodeConsumer {
 				qrCode.setUrl(qrInnerData.getUrl());
 				//创建时间
 				qrCode.setCreateTime(LocalDateTime.now());
+				//已生成码包位置
+				qrCode.setCodeIndex(qrInnerData.getCodeIndex());
 				codeSave.add(qrCode);
 			}
 		}
@@ -336,7 +372,8 @@ public class GenerateCodeConsumer {
      * repeatTimes 失败次数
 	 * formatNumber 幅面数量
      */
-	private List<QrData> loopGenerateCode(List<QrRepertoryColumnVO> qrRepertoryColumnList, Long qrRepertoryId, Map<Long, String> urlMap, Map<String, QrRepertorySerialNumber> qrRepertorySerialNumberMap, Long qrNumber, String batchNumber, int repeatTimes,QrBoxCodeFormat boxCodeFormat) {
+	private List<QrData> loopGenerateCode(List<QrRepertoryColumnVO> qrRepertoryColumnList, Long qrRepertoryId, Map<Long, String> urlMap, Map<String, QrRepertorySerialNumber> qrRepertorySerialNumberMap, Long qrNumber, String batchNumber, int repeatTimes,QrBoxCodeFormat boxCodeFormat,Long codeIndex ) {
+		codeIndex ++;
         LocalDateTime localDateTime = LocalDateTime.now();
 		while (true) {
 			// 计算还需生成的数量
@@ -384,37 +421,27 @@ public class GenerateCodeConsumer {
 							splitNum = qrBoxCodeFormatSplits.getSplitNum();
 						}
 
-						// 判断当前列是否为clone列
-						Integer cloneColumn = qrRepertoryColumn.getCloneColumn();
-						if (cloneColumn.compareTo(-1) == 0) {
-							// 非clone列,设置code和url
-							String code = buildUniqueCode(uniqueSet, qrRepertoryColumn, codeSb, paramMap, qrRepertorySerialNumberMap, 0);
-							String url = urlMap.get(qrRepertoryColumnId);
-							if (code == null) {
-								throw new RuntimeException("生成码失败,重复生成码次数超过" + REPEAT_BUILD_CODE_TIMES + "次");
-							}
-							//判断拆分数量是否为空
-							if( splitNum >0){
-								List<char[]> codeStr = a(code, splitNum);
-								for (char[] chars:codeStr) {
-									QrInnerData qrInnerData = new QrInnerData();
-									qrInnerData.setCode(String.valueOf(chars)).setUrl(url);
-									qrInnerData.setQrRepertoryColumnId(qrRepertoryColumnId).setSortNumber(qrRepertoryColumn.getSortNumber());
-									qrInnerDataList.add(qrInnerData);
-								}
-							} else {
+						// 非clone列,设置code和url
+						String code = buildUniqueCode(uniqueSet, qrRepertoryColumn, codeSb, paramMap, qrRepertorySerialNumberMap, 0);
+						String url = urlMap.get(qrRepertoryColumnId);
+						if (code == null) {
+							throw new RuntimeException("生成码失败,重复生成码次数超过" + REPEAT_BUILD_CODE_TIMES + "次");
+						}
+						//判断拆分数量是否为空
+						if( splitNum >0){
+							List<char[]> codeStr = a(code, splitNum);
+							for (char[] chars:codeStr) {
 								QrInnerData qrInnerData = new QrInnerData();
-								qrInnerData.setCode(code).setUrl(url);
+								qrInnerData.setCode(String.valueOf(chars)).setUrl(url);
 								qrInnerData.setQrRepertoryColumnId(qrRepertoryColumnId).setSortNumber(qrRepertoryColumn.getSortNumber());
+								qrInnerData.setCodeIndex(codeIndex);
 								qrInnerDataList.add(qrInnerData);
 							}
 						} else {
-							//鼎昌提供的clone列,暂时未知可用性
-							// clone列,设置相同的code和url
 							QrInnerData qrInnerData = new QrInnerData();
-							QrInnerData originalQrInnerData = qrInnerDataList.get( a * qrRepertoryColumnList.size() + cloneColumn );
-							qrInnerData.setCode(originalQrInnerData.getCode()).setUrl(originalQrInnerData.getUrl());
+							qrInnerData.setCode(code).setUrl(url);
 							qrInnerData.setQrRepertoryColumnId(qrRepertoryColumnId).setSortNumber(qrRepertoryColumn.getSortNumber());
+							qrInnerData.setCodeIndex(codeIndex);
 							qrInnerDataList.add(qrInnerData);
 						}
 					}