|
@@ -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";
|