Преглед на файлове

Merge branch 'feature/1.0.0' of github.com:ab-inbev-apac/abi-cloud-qr-platform into feature/1.0.0

 Conflicts:
	abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/interceptor/TokenInterceptor.java
tanzhongran преди 3 години
родител
ревизия
f918d47fb9

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

@@ -107,8 +107,8 @@ public class FactoryController {
     }
 
     @ApiOperation("启用中的供应商列表")
-    @GetMapping("listDeptEnable")
-    public BaseResponse<ListFactoryEnableRes> listDeptEnable() throws Exception {
+    @GetMapping("listFactoryEnable")
+    public BaseResponse<ListFactoryEnableRes> listFactoryEnable() throws Exception {
         ListFactoryEnableRes result = factoryService.listFactoryEnable();
         //包装出参
         return BaseResponse.create(result);

+ 1 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/interceptor/TokenInterceptor.java

@@ -82,6 +82,7 @@ public class TokenInterceptor implements HandlerInterceptor {
             userInfo.setId(Long.valueOf(userId));
             userInfo.setUserName(userName);
             userInfo.setRoleCode(roleCode);
+            userUtil.setUser(userInfo);
             if(Objects.nonNull(userMap.get("factoryId"))) {
                 Long factoryId = userMap.get("factoryId").asLong();
                 userInfo.setFactoryId(factoryId);

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

@@ -31,6 +31,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.fileupload.FileItemFactory;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
@@ -46,6 +47,7 @@ import net.lingala.zip4j.core.ZipFile;
 import net.lingala.zip4j.exception.ZipException;
 import net.lingala.zip4j.model.ZipParameters;
 import net.lingala.zip4j.util.Zip4jConstants;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
@@ -97,6 +99,12 @@ public class GenerateCodeConsumer {
 	@Autowired
 	private BaseFactoryMapper baseFactoryMapper;
 
+	@Autowired
+	private QrBoxCodeFormatMapper boxCodeFormatMapper;
+
+	@Autowired
+	private QrBoxCodeFormatSplitMapper qrBoxCodeFormatSplitMapper;
+
 	//生成码数据
 	final List<QrData> qrDataList = new LinkedList<>();
 
@@ -187,6 +195,8 @@ public class GenerateCodeConsumer {
 			String batchNumber = qrPackageBatch.getBatchNumber();
 			//重复次数
 			int repeatTimes = 0;
+			//获取箱码幅面
+			QrBoxCodeFormat boxCodeFormat = boxCodeFormatMapper.selectById(qrPackageVo.getBoxCodeFormatId());
 
 			/**
 			 * qrRepertoryColumnList  码库的列
@@ -196,15 +206,27 @@ public class GenerateCodeConsumer {
 			 * qrNumber 码数量
 			 * batchNumber 批次号
 			 * localDateTime 创建时间
+			 * boxCodeFormat 箱码幅面
 			 */
 			// 循环生成码
-			List<QrData> codeList = loopGenerateCode(qrRepertoryColumnList, qrRepertoryId, urlMap, qrRepertorySerialNumberMap, qrNumber, batchNumber, repeatTimes);
+			List<QrData> codeList = loopGenerateCode(qrRepertoryColumnList, qrRepertoryId, urlMap, qrRepertorySerialNumberMap, qrNumber, batchNumber, repeatTimes,boxCodeFormat);
+
+            // 更新码库流水号
+            if (!qrRepertorySerialNumberMap.isEmpty()) {
+                for (Map.Entry<String, QrRepertorySerialNumber> entry : qrRepertorySerialNumberMap.entrySet()) {
+                    QrRepertorySerialNumber qrRepertorySerialNumber = entry.getValue();
+                    QrRepertorySerialNumber updateSerialNumber = new QrRepertorySerialNumber()
+                            .setId(qrRepertorySerialNumber.getId())
+                            .setSerialNumber(qrRepertorySerialNumber.getSerialNumber());
+                    qrRepertorySerialNumberMapper.updateById(updateSerialNumber);
+                }
+            }
 
 			// table数据库  批量插入
 			saveTableStore(qrPackageBatch, codeList);
 
 			// 创建码文件
-			createCodeFile(qrRepertory,batchNumber);
+			createCodeFile(qrRepertory,batchNumber,boxCodeFormat);
 
 		}
 
@@ -223,7 +245,7 @@ public class GenerateCodeConsumer {
 			if(null != returDat){
 				Map<String,Object> result =(Map<String, Object>)returDat;
 				//放入oss地址
-				qrPackage.setDownloadPath(null == (String) result.get("data") ? null :(String) result.get("data"));
+				qrPackage.setDownloadPath(null ==  result.get("data") ? "" :(String) result.get("data"));
 			}
 //			//放入oss地址和密码
 			qrPackage.setZipPassword(pas);
@@ -244,6 +266,7 @@ public class GenerateCodeConsumer {
 		qrPackageService.sendEmailForQrPackageCreated(baseFactory.getEmail(),qrPackage.getSapOrderNo(),aliPath,qrPackage.getZipPassword());
 		//邮件发送后修改状态
 		qrPackageMapper.updateById(qrPackage);
+		qrDataList.clear();
 	}
 
 	/**
@@ -311,8 +334,9 @@ public class GenerateCodeConsumer {
      * batchNumber 批次号
      * localDateTime 创建时间
      * 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) {
+	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();
 		while (true) {
 			// 计算还需生成的数量
@@ -341,35 +365,63 @@ public class GenerateCodeConsumer {
 						.setCreateTime(localDateTime);
 
 				List<QrInnerData> qrInnerDataList = new LinkedList<>();
-				for (int j = 0; j < qrRepertoryColumnList.size(); j++) {
-					QrRepertoryColumnVO qrRepertoryColumn = qrRepertoryColumnList.get(j);
-					Long qrRepertoryColumnId = qrRepertoryColumn.getId();
-
-					// 判断当前列是否为clone列
-					Integer cloneColumn = qrRepertoryColumn.getCloneColumn();
-					QrInnerData qrInnerData = new QrInnerData();
-					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 + "次");
+				//箱子码幅面
+				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();
+						//判断是否有拆分数量  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);
+						//声明拆分数量
+						int splitNum = 0;
+						//判断是否为空
+						if(ObjectUtils.isNotEmpty(qrBoxCodeFormatSplits)){
+							//查分数量
+							splitNum = qrBoxCodeFormatSplits.getSplitNum();
 						}
 
-						qrInnerData.setCode(code).setUrl(url);
-						qrInnerData.setQrRepertoryColumnId(qrRepertoryColumnId).setSortNumber(qrRepertoryColumn.getSortNumber());
-						qrInnerDataList.add(qrInnerData);
-					} else {
-						// clone列,设置相同的code和url
-						QrInnerData originalQrInnerData = qrInnerDataList.get(cloneColumn);
-						qrInnerData.setCode(originalQrInnerData.getCode()).setUrl(originalQrInnerData.getUrl());
-						qrInnerData.setQrRepertoryColumnId(qrRepertoryColumnId).setSortNumber(qrRepertoryColumn.getSortNumber());
-						qrInnerDataList.add(qrInnerData);
+						// 判断当前列是否为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 {
+								QrInnerData qrInnerData = new QrInnerData();
+								qrInnerData.setCode(code).setUrl(url);
+								qrInnerData.setQrRepertoryColumnId(qrRepertoryColumnId).setSortNumber(qrRepertoryColumn.getSortNumber());
+								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.setQrRepertoryColumnId(qrRepertoryColumnId).setSortNumber(qrRepertoryColumn.getSortNumber());
+							qrInnerDataList.add(qrInnerData);
+						}
 					}
 				}
-
 				qrData.setInnerDataList(qrInnerDataList);
 				qrDataList.add(qrData);
+
 			}
 
 			try {
@@ -444,12 +496,19 @@ public class GenerateCodeConsumer {
 	/**
 	 * 创建码文件
 	 */
-	private void createCodeFile( QrRepertoryVO qrRepertory,String batchNumber) {
+	private void createCodeFile( QrRepertoryVO qrRepertory,String batchNumber,QrBoxCodeFormat boxCodeFormat) {
 		List<QrRepertoryColumnVO> qrRepertoryColumnList = qrRepertory.getQrRepertoryColumnList();
 		StringBuilder content = new StringBuilder();
 		// 第一行为每列的名称,用“,”分隔
 		String dataComposition = qrRepertoryColumnList.stream().map(col -> col.getAlias()).collect(Collectors.joining(","));
-		content.append(dataComposition).append("\r\n");
+        content.append(dataComposition);
+        //暂时根据项目幅面分,没有根据拆分数量分
+		if(boxCodeFormat.getFormatNumber() > 1){
+			for (int i = 1; i < boxCodeFormat.getFormatNumber(); i++) {
+				content.append(",").append(dataComposition);
+			}
+		}
+		content.append("\r\n");
 		// 拼接码
 		List<QrInnerData> innerDataList;
 		String innerData;
@@ -563,4 +622,34 @@ public class GenerateCodeConsumer {
 			e.printStackTrace();
 		}
 	}
+
+
+	public static List<char[]> a(String str, int groupSum){
+		List<char[]> result = new ArrayList<>();
+
+		if (null == str){
+			return null;
+		}
+
+		if (groupSum < 0 || str.length() < groupSum){
+			result.add(str.toCharArray());
+		}else {
+
+			int group = str.length() / groupSum ;
+
+			int count = 0;
+
+			while (true){
+				if (result.size() + 1 == groupSum){
+					result.add(str.substring(count * group).toCharArray());
+					break;
+				}
+				result.add(str.substring(count * group ,count * group + group ).toCharArray());
+				count ++ ;
+			}
+
+		}
+
+		return result;
+	}
 }

+ 0 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/util/JwtTokenUtils.java

@@ -63,7 +63,6 @@ public class JwtTokenUtils{
                     .withClaim("userId",user.getId())
                     .withClaim("userName",user.getUserName())
                     .withClaim("roleCode",user.getRoleCode())
-                    .withClaim("factoryId",user.getFactoryId())
                     .withClaim("roles","")
                     .sign(Algorithm.RSA512((RSAPublicKey)globalRsaKeyMap.get(RSA_PUBLIC_KEY),
                             (RSAPrivateKey)globalRsaKeyMap.get(RSA_PRIVATE_KEY)));