|
@@ -127,9 +127,6 @@ public class GenerateCodeConsumer {
|
|
/** 允许单个码生成重复的次数 */
|
|
/** 允许单个码生成重复的次数 */
|
|
private static final int REPEAT_BUILD_CODE_TIMES = 10;
|
|
private static final int REPEAT_BUILD_CODE_TIMES = 10;
|
|
|
|
|
|
- /** 一次生成数量 */
|
|
|
|
- public static final int ONCE_GENERATE_NUMBER = 5000;
|
|
|
|
-
|
|
|
|
/** 声明码对应的值 */
|
|
/** 声明码对应的值 */
|
|
public Long codeIndex = 0L;
|
|
public Long codeIndex = 0L;
|
|
|
|
|
|
@@ -223,6 +220,10 @@ public class GenerateCodeConsumer {
|
|
//获取箱码幅面
|
|
//获取箱码幅面
|
|
QrBoxCodeFormat boxCodeFormat = boxCodeFormatMapper.selectById(qrPackageVo.getBoxCodeFormatId());
|
|
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 码库的列
|
|
* qrRepertoryColumnList 码库的列
|
|
* qrRepertoryId 码库id
|
|
* qrRepertoryId 码库id
|
|
@@ -233,10 +234,8 @@ public class GenerateCodeConsumer {
|
|
* localDateTime 创建时间
|
|
* localDateTime 创建时间
|
|
* boxCodeFormat 箱码幅面
|
|
* 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()) {
|
|
if (!qrRepertorySerialNumberMap.isEmpty()) {
|
|
for (Map.Entry<String, QrRepertorySerialNumber> entry : qrRepertorySerialNumberMap.entrySet()) {
|
|
for (Map.Entry<String, QrRepertorySerialNumber> entry : qrRepertorySerialNumberMap.entrySet()) {
|
|
@@ -363,24 +362,22 @@ public class GenerateCodeConsumer {
|
|
* repeatTimes 失败次数
|
|
* repeatTimes 失败次数
|
|
* formatNumber 幅面数量
|
|
* 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) {
|
|
while (true) {
|
|
|
|
+ LocalDateTime localDateTime = LocalDateTime.now();
|
|
// 计算还需生成的数量
|
|
// 计算还需生成的数量
|
|
- long needGenerateNumber = qrNumber --;
|
|
|
|
|
|
+ long needGenerateNumber = qrNumber;
|
|
if (needGenerateNumber <= 0) {
|
|
if (needGenerateNumber <= 0) {
|
|
log.info("批次号:{},码生成完毕", batchNumber);
|
|
log.info("批次号:{},码生成完毕", batchNumber);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- // 计算本次最多生成多少码
|
|
|
|
- long currentMaxGenerateNumber = needGenerateNumber <= ONCE_GENERATE_NUMBER ? needGenerateNumber : ONCE_GENERATE_NUMBER;
|
|
|
|
// 用Set存放不重复的码
|
|
// 用Set存放不重复的码
|
|
HashSet<String> uniqueSet = new HashSet<>();
|
|
HashSet<String> uniqueSet = new HashSet<>();
|
|
// 生成码要用的参数
|
|
// 生成码要用的参数
|
|
Map<String, Object> paramMap = new HashMap<>();
|
|
Map<String, Object> paramMap = new HashMap<>();
|
|
// 码
|
|
// 码
|
|
StringBuilder codeSb = new StringBuilder();
|
|
StringBuilder codeSb = new StringBuilder();
|
|
- for (int i = 0; i < currentMaxGenerateNumber; i++) {
|
|
|
|
|
|
+ for (int i = 0; i < needGenerateNumber; i++) {
|
|
QrData qrData = new QrData()
|
|
QrData qrData = new QrData()
|
|
.setQrRepertoryId(qrRepertoryId)
|
|
.setQrRepertoryId(qrRepertoryId)
|
|
.setBatchNumber(batchNumber)
|
|
.setBatchNumber(batchNumber)
|
|
@@ -393,25 +390,12 @@ public class GenerateCodeConsumer {
|
|
for (int j = 0; j < qrRepertoryColumnList.size(); j++) {
|
|
for (int j = 0; j < qrRepertoryColumnList.size(); j++) {
|
|
QrRepertoryColumnVO qrRepertoryColumn = qrRepertoryColumnList.get(j);
|
|
QrRepertoryColumnVO qrRepertoryColumn = qrRepertoryColumnList.get(j);
|
|
Long qrRepertoryColumnId = qrRepertoryColumn.getId();
|
|
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
|
|
// 非clone列,设置code和url
|
|
String code = buildUniqueCode(uniqueSet, qrRepertoryColumn, codeSb, paramMap, qrRepertorySerialNumberMap, 0);
|
|
String code = buildUniqueCode(uniqueSet, qrRepertoryColumn, codeSb, paramMap, qrRepertorySerialNumberMap, 0);
|
|
if (code == null) {
|
|
if (code == null) {
|