Browse Source

微调整码包生成逻辑

tanzhongran 3 years ago
parent
commit
2c418c2e4a

+ 1 - 1
abi-cloud-qr-platform-common/src/main/java/com/abi/task/common/tablestore/TableStoreUtils.java

@@ -66,7 +66,7 @@ public class TableStoreUtils {
         taskExecutor = new ThreadPoolTaskExecutor();
         //设置线程池参数
         taskExecutor.setCorePoolSize(1);
-        taskExecutor.setMaxPoolSize(20);
+        taskExecutor.setMaxPoolSize(100);
         taskExecutor.setQueueCapacity(10000);
         taskExecutor.initialize();
     }

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

@@ -119,28 +119,28 @@ public class QrPackageController {
     }
 
 
-    @Autowired
-    private TableStorePlusUtils tableStorePlusUtils;
-
-    @ApiOperation("测试批量")
-    @GetMapping("/testBatch")
-    @PassToken
-    public void testBatch() {
-        List<TableStoreEntity> qrCodeList = new ArrayList<>();
-        for(int i=0;i<20000;i++){
-            QrCode qrCode = new QrCode();
-            qrCode.setCode(System.currentTimeMillis()+"-"+i);
-            qrCode.setPackageId(0L);
-            qrCode.setBatchNumberId(0L);
-            qrCode.setCreateTime(LocalDateTime.now());
-            qrCode.setCodeIndex(0L);
-            qrCode.setQrRepertoryColumnId(0L);
-            qrCode.setInvalid(0);
-            qrCodeList.add(qrCode);
-        }
-
-        tableStorePlusUtils.putRow(qrCodeList);
-
-    }
+//    @Autowired
+//    private TableStorePlusUtils tableStorePlusUtils;
+//
+//    @ApiOperation("测试批量")
+//    @GetMapping("/testBatch")
+//    @PassToken
+//    public void testBatch() {
+//        List<TableStoreEntity> qrCodeList = new ArrayList<>();
+//        for(int i=0;i<20000;i++){
+//            QrCode qrCode = new QrCode();
+//            qrCode.setCode(System.currentTimeMillis()+"-"+i);
+//            qrCode.setPackageId(0L);
+//            qrCode.setBatchNumberId(0L);
+//            qrCode.setCreateTime(LocalDateTime.now());
+//            qrCode.setCodeIndex(0L);
+//            qrCode.setQrRepertoryColumnId(0L);
+//            qrCode.setInvalid(0);
+//            qrCodeList.add(qrCode);
+//        }
+//
+//        tableStorePlusUtils.putRow(qrCodeList);
+//
+//    }
 
 }

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

@@ -26,6 +26,7 @@ import com.abi.task.common.utils.PojoConverterUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.rabbitmq.client.Channel;
+import com.sun.xml.internal.bind.v2.TODO;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.fileupload.FileItem;
@@ -76,6 +77,9 @@ public class GenerateCodeConsumer {
 	@Autowired
 	private QrPackageMapper qrPackageMapper;
 
+	@Autowired
+	private QrBoxCodeFormatMapper qrBoxCodeFormatMapper;
+
 	@Autowired
 	private QrRepertoryMapper qrRepertoryMapper;
 
@@ -144,7 +148,6 @@ public class GenerateCodeConsumer {
 		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)){
@@ -159,14 +162,14 @@ public class GenerateCodeConsumer {
 				codeIndex = Long.parseLong(code_qr_index.toString());
 			}
 			// 生成码
-			loopGenerateCode(qrPackageVO);
+			loopGenerateCode(Long.parseLong(id));
 
 		} catch (Exception e) {
 			log.error("生成码失败", e);
 			// 回滚
 			QrPackage qrPackage = new QrPackage();
-			qrPackage.setId(qrPackageVO.getId());
-			qrPackage.setGenerateStatus(qrPackageVO.getGenerateStatus());
+			qrPackage.setId(Long.parseLong(id));
+			qrPackage.setGenerateStatus(QrPackageGenerateStatusEnum.GENERATE_FAIL.getCode());
 			qrPackageService.failedRollback(qrPackage);
 		} finally {
 			// 手工ack
@@ -178,26 +181,32 @@ public class GenerateCodeConsumer {
 	/**
 	 * 生成码
 	 */
-	private void loopGenerateCode(QrPackageVO qrPackageVO) {
-		//刷新码包信息
-		QrPackage qrPackage = qrPackageMapper.selectById(qrPackageVO.getId());
-
-		// 查询码包关联的幅面关联的码库的信息
-		QrPackageVO qrPackageVo = qrPackageMapper.selectQrPackageDetailById(qrPackage.getId());
-
+	private void loopGenerateCode(Long qrPackageId) {
+		//0-查询码包,校验状态,标记生成中
+		QrPackage qrPackage = qrPackageMapper.selectById(qrPackageId);
 		// 码数据已生成,return
-		if (QrPackageGenerateStatusEnum.GENERATE_SUCCESS.is(qrPackageVo.getGenerateStatus())) {
+		if (QrPackageGenerateStatusEnum.GENERATE_SUCCESS.is(qrPackage.getGenerateStatus())) {
 			return;
 		}
-
 		// 更改生成状态为生成中
 		qrPackage.setGenerateStatus(QrPackageGenerateStatusEnum.GENERATING.getCode());
 		qrPackageMapper.updateById(qrPackage);
 
+		//1-准备参数
+		//查询幅面
+		QrBoxCodeFormat qrBoxCodeFormat = qrBoxCodeFormatMapper.selectById(qrPackage.getBoxCodeFormatId());
+		//查询拆分数量
+		List<QrBoxCodeFormatSplit> split= qrBoxCodeFormatSplitMapper.querySplit(qrBoxCodeFormat.getId(),qrBoxCodeFormat.getQrRepertoryId());
+		Map<Long,QrBoxCodeFormatSplit> splitCache = split.stream().distinct() .collect(Collectors.toMap(QrBoxCodeFormatSplit::getQrRepertoryColumnId,t->t));
 		// 码库 & 码库的列
-		QrRepertoryVO qrRepertory = qrRepertoryMapper.selectQrRepertoryDetailById(qrPackageVo.getQrRepertoryId());
+		QrRepertoryVO qrRepertory = qrRepertoryMapper.selectQrRepertoryDetailById(qrBoxCodeFormat.getQrRepertoryId());
 		List<QrRepertoryColumnVO> qrRepertoryColumnList = qrRepertory.getQrRepertoryColumnList();
 		Long qrRepertoryId = qrRepertory.getId();
+		//根据码包id查询,获取批次号
+		QueryWrapper<QrPackageBatch> param = new QueryWrapper<>();
+		param.eq("package_id", qrPackage.getId());
+		List<QrPackageBatch> qrPackageBatches = qrPackageBatchMapper.selectList(param);
+
 
 		// 存放每列的url
 		Map<Long, String> urlMap = new LinkedHashMap<>();
@@ -209,17 +218,12 @@ public class GenerateCodeConsumer {
 		// 处理url和流水号--后续生成码要用到
 		getUrlAndSerialNumber(qrRepertoryColumnList, qrRepertoryId, urlMap, qrRepertorySerialNumberMap);
 
-		//码包id
-        //根据码包id查询,获取批次号
-		QueryWrapper<QrPackageBatch> param = new QueryWrapper<>();
-		param.eq("package_id", qrPackageVo.getId());
-		List<QrPackageBatch> qrPackageBatches = qrPackageBatchMapper.selectList(param);
-
-		//1-生成二维码
+		//2-生成二维码
 		for (QrPackageBatch qrPackageBatch:qrPackageBatches) {
+			//计算备用码包数量
 			Long standbyRatio = 0L;
-			if(null != qrPackageVo.getStandbyRatio() && qrPackageVo.getStandbyRatio() != 0){
-				standbyRatio=new Double( Math.ceil(qrPackageBatch.getBatchQrNumber()*qrPackageVo.getStandbyRatio()*1.0/100)).longValue();
+			if(null != qrPackage.getStandbyRatio() && qrPackage.getStandbyRatio() != 0){
+				standbyRatio=new Double( Math.ceil(qrPackageBatch.getBatchQrNumber()*qrPackage.getStandbyRatio()*1.0/100)).longValue();
 			}
 			// 这批下的申请数量
 			Long qrNumber = qrPackageBatch.getBatchQrNumber()+standbyRatio;
@@ -227,12 +231,8 @@ public class GenerateCodeConsumer {
 			String batchNumber = qrPackageBatch.getBatchNumber();
 			//重复次数
 			int repeatTimes = 0;
-			//获取箱码幅面
-			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  码库的列
@@ -245,7 +245,7 @@ public class GenerateCodeConsumer {
 			 * boxCodeFormat 箱码幅面
 			 */
 			// 循环生成码
-			List<QrData> codeList = loopGenerateCode(qrRepertoryColumnList, qrRepertoryId, urlMap, qrRepertorySerialNumberMap, qrNumber, batchNumber, repeatTimes,boxCodeFormat,splitCache);
+			List<QrData> codeList = loopGenerateCode(qrRepertoryColumnList, qrRepertoryId, urlMap, qrRepertorySerialNumberMap, qrNumber, batchNumber, repeatTimes,qrBoxCodeFormat,splitCache);
             // 更新码库流水号
             if (!qrRepertorySerialNumberMap.isEmpty()) {
                 for (Map.Entry<String, QrRepertorySerialNumber> entry : qrRepertorySerialNumberMap.entrySet()) {
@@ -263,11 +263,11 @@ public class GenerateCodeConsumer {
 			saveTableStore(tableStoreEntityList);
 
 			// 创建码文件
-			createCodeFile(qrRepertory,batchNumber,boxCodeFormat);
+			createCodeFile(qrRepertory,batchNumber,qrBoxCodeFormat);
 			qrDataList.clear();
 		}
 
-		//2-保存压缩文件并上传oss
+		//3-保存压缩文件并上传oss
 		//压缩后得名字  正式码_SAP订单号_物料名称_文件内码数量
 		BaseMaterial baseMaterial = baseMaterialMapper.selectById(qrPackage.getMaterialId());
 		String zipName = "正式码_"+qrPackage.getSapOrderNo()+"_"+baseMaterial.getMaterialName()+"_"+sum+".zip";