|
@@ -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);
|
|
|
}
|
|
|
}
|