luyanwen-001 4 سال پیش
والد
کامیت
ffb19b0dcf

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

@@ -135,8 +135,11 @@ public class GenerateCodeConsumer {
 	@RabbitHandler
 	@RabbitListener(queues = GenerateCodeConsumer.GENERATE_CODE_BY_REPERTORY_QUEUE)
 	public void onMessage(String id, Message message, Channel channel) {
-        String str = JsonUtil.toBean(id, String.class);
-		QrPackageVO qrPackageVO = qrPackageMapper.selectQrPackageDetailById(Long.parseLong(str));
+		//判断rabbit消息是否为空
+		if(StringUtils.isEmpty(id)){
+			throw new BusinessException("队列监听数据为空!");
+		}
+		QrPackageVO qrPackageVO = qrPackageMapper.selectQrPackageDetailById(Long.parseLong(id));
 		try {
 			Object code_qr_index = redisClient.get("code_qr_index");
 			if(ObjectUtils.isEmpty(code_qr_index)){
@@ -147,6 +150,8 @@ public class GenerateCodeConsumer {
 					codeIndex = qrIndex.getIndexCurrent();
 				}
 				redisClient.set("code_qr_index",codeIndex);
+			} else {
+				codeIndex = Long.parseLong(code_qr_index.toString());
 			}
 			// 生成码
 			loopGenerateCode(qrPackageVO);
@@ -244,7 +249,7 @@ public class GenerateCodeConsumer {
 
 			// 创建码文件
 			createCodeFile(qrRepertory,batchNumber,boxCodeFormat);
-
+			qrDataList.clear();
 		}
 
 		//2-保存压缩文件并上传oss
@@ -291,7 +296,6 @@ public class GenerateCodeConsumer {
 		qrIndexMapper.insert(index);
 		redisClient.set("code_qr_index",codeIndex);
 		codeIndex = 0L;
-		qrDataList.clear();
 	}
 
 	/**
@@ -359,22 +363,18 @@ public class GenerateCodeConsumer {
 		while (true) {
 			// 计算还需生成的数量
 			long needGenerateNumber = qrNumber --;
-
 			if (needGenerateNumber <= 0) {
 				log.info("批次号:{},码生成完毕", batchNumber);
 				break;
 			}
-
 			// 计算本次最多生成多少码
 			long currentMaxGenerateNumber = needGenerateNumber <= ONCE_GENERATE_NUMBER ? needGenerateNumber : ONCE_GENERATE_NUMBER;
-
 			// 用Set存放不重复的码
 			HashSet<String> uniqueSet = new HashSet<>();
 			// 生成码要用的参数
 			Map<String, Object> paramMap = new HashMap<>();
 			// 码
 			StringBuilder codeSb = new StringBuilder();
-
 			for (int i = 0; i < currentMaxGenerateNumber; i++) {
 				QrData qrData = new QrData()
 						.setQrRepertoryId(qrRepertoryId)
@@ -401,16 +401,14 @@ public class GenerateCodeConsumer {
 							//查分数量
 							splitNum = qrBoxCodeFormatSplits.getSplitNum();
 						}
-
 						// 非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);
+							List<char[]> codeStr = segmentation(code, splitNum);
 							for (char[] chars:codeStr) {
 								QrInnerData qrInnerData = new QrInnerData();
 								qrInnerData.setCode(String.valueOf(chars));
@@ -451,19 +449,7 @@ public class GenerateCodeConsumer {
 		for (int i = 0; i < qrRepertoryColumnList.size(); i++) {
 			QrRepertoryColumnVO qrRepertoryColumn = qrRepertoryColumnList.get(i);
 			Long qrRepertoryColumnId = qrRepertoryColumn.getId();
-
-			// 每列的url格式
-//			Integer urlType = qrRepertoryColumn.getUrlType();
-//			String url = "";
-//			if (QrFormatUrlEnum.SYSTEM_URL.is(urlType)) {
-//				url = systemUrl;
-//			}
-//			// 如果url没有以/结尾,则加上/
-//			if (StringUtils.isNotBlank(url) && !url.endsWith("/")) {
-//				url += "/";
-//			}
 			urlMap.put(qrRepertoryColumnId, "");
-
 			// 使用到流水号参数的列
 			String[] buildClassArr = qrRepertoryColumn.getQrFormatVO().getCodeVariableBuildClass().split(",");
 			for (int j = 0; j < buildClassArr.length; j++) {
@@ -473,7 +459,6 @@ public class GenerateCodeConsumer {
 					QueryWrapper<QrRepertorySerialNumber> qrRepertorySerialNumberQw = new QueryWrapper<>();
 					qrRepertorySerialNumberQw.eq("qr_repertory_column_id", qrRepertoryColumnId);
 					qrRepertorySerialNumberQw.eq("child_index", j);
-
 					// 加锁查询插入流水号
 					RLock lock = redissonClient.getLock("serial_number_lock_" + qrRepertoryColumnId + "_" + j);
 					QrRepertorySerialNumber qrRepertorySerialNumber = null;
@@ -492,12 +477,10 @@ public class GenerateCodeConsumer {
 					} finally {
 						lock.unlock();
 					}
-
 					// key:qr_repertory_column_id + child_index
 					qrRepertorySerialNumberMap.put(qrRepertoryColumnId + "_" + j, qrRepertorySerialNumber);
 				}
 			}
-
 		}
 	}
 
@@ -635,8 +618,13 @@ public class GenerateCodeConsumer {
 		}
 	}
 
-
-	public static List<char[]> a(String str, int groupSum){
+	/**
+	 * 分割数量 -- 码.length / 要分割数量 = 最后一组+余数;
+	 * @param str 要分割码
+	 * @param groupSum 分割数量
+	 * @return 分割后的码
+	 */
+	public static List<char[]> segmentation(String str, int groupSum){
 		List<char[]> result = new ArrayList<>();
 
 		if (null == str){