Ver código fonte

生成码数据慢问题

luyanwen-001 3 anos atrás
pai
commit
dca5e0fff1

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

@@ -127,9 +127,6 @@ public class GenerateCodeConsumer {
 	/** 允许单个码生成重复的次数 */
 	private static final int REPEAT_BUILD_CODE_TIMES = 10;
 
-	/** 一次生成数量 */
-	public static final int ONCE_GENERATE_NUMBER = 5000;
-
 	/** 声明码对应的值 */
 	public Long codeIndex = 0L;
 
@@ -223,6 +220,10 @@ public class GenerateCodeConsumer {
 			//获取箱码幅面
 			QrBoxCodeFormat boxCodeFormat = boxCodeFormatMapper.selectById(qrPackageVo.getBoxCodeFormatId());
 
+			//查询拆分数量
+			List<QrBoxCodeFormatSplit> split= qrBoxCodeFormatSplitMapper.querySplit(boxCodeFormat.getId(),boxCodeFormat.getQrRepertoryId());
+			Map<Long,QrBoxCodeFormatSplit> splitCache = split.stream().distinct() .collect(Collectors.toMap(QrBoxCodeFormatSplit::getQrRepertoryColumnId,t->t));
+
 			/**
 			 * qrRepertoryColumnList  码库的列
 			 * qrRepertoryId 码库id
@@ -233,10 +234,8 @@ public class GenerateCodeConsumer {
 			 * localDateTime 创建时间
 			 * boxCodeFormat 箱码幅面
 			 */
-			System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"+++...");
 			// 循环生成码
-			List<QrData> codeList = loopGenerateCode(qrRepertoryColumnList, qrRepertoryId, urlMap, qrRepertorySerialNumberMap, qrNumber, batchNumber, repeatTimes,boxCodeFormat);
-			System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"+++...");
+			List<QrData> codeList = loopGenerateCode(qrRepertoryColumnList, qrRepertoryId, urlMap, qrRepertorySerialNumberMap, qrNumber, batchNumber, repeatTimes,boxCodeFormat,splitCache);
             // 更新码库流水号
             if (!qrRepertorySerialNumberMap.isEmpty()) {
                 for (Map.Entry<String, QrRepertorySerialNumber> entry : qrRepertorySerialNumberMap.entrySet()) {
@@ -363,24 +362,22 @@ 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 ) {
-        LocalDateTime localDateTime = LocalDateTime.now();
+	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,Map<Long, QrBoxCodeFormatSplit> splitCache ) {
 		while (true) {
+			LocalDateTime localDateTime = LocalDateTime.now();
 			// 计算还需生成的数量
-			long needGenerateNumber = qrNumber --;
+			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++) {
+			for (int i = 0; i < needGenerateNumber; i++) {
 				QrData qrData = new QrData()
 						.setQrRepertoryId(qrRepertoryId)
 						.setBatchNumber(batchNumber)
@@ -393,25 +390,12 @@ public class GenerateCodeConsumer {
 					for (int j = 0; j < qrRepertoryColumnList.size(); j++) {
 						QrRepertoryColumnVO qrRepertoryColumn = qrRepertoryColumnList.get(j);
 						Long qrRepertoryColumnId = qrRepertoryColumn.getId();
-						//缓存中获取拆分列
-						Integer split = redisClient.get("box_code_format_split");
-						if(null == split){
-							//判断是否有拆分数量  0 或者空不拆分 ,根据箱码幅面id,码库id,码库列id 查询拆分数量
-							QueryWrapper<QrBoxCodeFormatSplit> boxCodeFormatSplit = new QueryWrapper<>();
-							boxCodeFormatSplit.eq("box_code_format_id",boxCodeFormat.getId() );
-							boxCodeFormatSplit.eq("qr_repertory_id", boxCodeFormat.getQrRepertoryId());
-							boxCodeFormatSplit.eq("qr_repertory_column_id",qrRepertoryColumnId );
-							QrBoxCodeFormatSplit qrBoxCodeFormatSplits = qrBoxCodeFormatSplitMapper.selectOne(boxCodeFormatSplit);
-							if(!ObjectUtils.isEmpty(qrBoxCodeFormatSplits)){
-								split = qrBoxCodeFormatSplits.getSplitNum();
-								redisClient.set("box_code_format_split",qrBoxCodeFormatSplits.getSplitNum());
-							}else {
-								split = 0;
-								redisClient.set("box_code_format_split",0);
-							}
-						}
 						//声明拆分数量
-						int splitNum = split;
+						int splitNum = 0;
+						Integer splitNum1 = splitCache.get(qrRepertoryColumnId).getSplitNum();
+						if(null != splitNum1){
+							splitNum = splitNum1;
+						}
 						// 非clone列,设置code和url
 						String code = buildUniqueCode(uniqueSet, qrRepertoryColumn, codeSb, paramMap, qrRepertorySerialNumberMap, 0);
 						if (code == null) {