|
@@ -124,16 +124,13 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
|
|
|
*/
|
|
|
@Override
|
|
|
public void generateQrCode(Long qrPackageId) {
|
|
|
- log.info("1 loopGenerateCode begin -->"+System.currentTimeMillis());
|
|
|
- log.info("请求参数id为 -->{}",qrPackageId);
|
|
|
-
|
|
|
+ log.debug("请求参数id为 -->{}",qrPackageId);
|
|
|
//0-查询码包,校验状态,标记生成中
|
|
|
QrPackage qrPackage = qrPackageMapper.selectById(qrPackageId);
|
|
|
// 码数据已生成,return
|
|
|
if (QrPackageGenerateStatusEnum.GENERATE_SUCCESS.is(qrPackage.getGenerateStatus())) {
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
//批量添加文件
|
|
|
ArrayList<File> fileList = new ArrayList<>();
|
|
|
//md5列表
|
|
@@ -144,7 +141,6 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
|
|
|
// 更改生成状态为生成中
|
|
|
qrPackage.setGenerateStatus(QrPackageGenerateStatusEnum.GENERATING.getCode());
|
|
|
qrPackageMapper.updateById(qrPackage);
|
|
|
- log.info("2 loopGenerateCode update status -->"+System.currentTimeMillis());
|
|
|
|
|
|
//1-准备参数
|
|
|
//包材厂信息(取二级包材厂id,如果是非一级的包材厂,保存的时候FactoryCoverLevelTwoId这个字段就会填写他自己的id)
|
|
@@ -153,7 +149,9 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
|
|
|
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));
|
|
|
+ Map<Long,QrBoxCodeFormatSplit> splitCache = split.stream()
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toMap(QrBoxCodeFormatSplit::getQrRepertoryColumnId, t->t));
|
|
|
// 码库 & 码库的列
|
|
|
QrRepertoryVO qrRepertory = qrRepertoryMapper.selectQrRepertoryDetailById(qrBoxCodeFormat.getQrRepertoryId());
|
|
|
List<QrRepertoryColumnVO> qrRepertoryColumnList = qrRepertory.getQrRepertoryColumnList();
|
|
@@ -162,7 +160,6 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
|
|
|
QueryWrapper<QrPackageBatch> param = new QueryWrapper<>();
|
|
|
param.eq("package_id", qrPackage.getId());
|
|
|
List<QrPackageBatch> qrPackageBatches = qrPackageBatchMapper.selectList(param);
|
|
|
- log.info("3 loopGenerateCode prepared data info -->"+System.currentTimeMillis());
|
|
|
|
|
|
// 存放每列的url
|
|
|
Map<Long, String> urlMap = new LinkedHashMap<>();
|
|
@@ -171,13 +168,11 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
|
|
|
Map<String, QrRepertorySerialNumber> qrRepertorySerialNumberMap = new LinkedHashMap<>();
|
|
|
// 处理url和流水号--后续生成码要用到
|
|
|
getUrlAndSerialNumber(qrRepertoryColumnList, qrRepertoryId, urlMap, qrRepertorySerialNumberMap);
|
|
|
- log.info("4 loopGenerateCode do some qrcode opts -->"+System.currentTimeMillis());
|
|
|
|
|
|
//2-生成二维码
|
|
|
log.info("码包的批次列表数量为"+qrPackageBatches.size());
|
|
|
- for (QrPackageBatch qrPackageBatch:qrPackageBatches) {
|
|
|
- log.info("进入单个批次: "+JsonUtils.toJson(qrPackageBatch));
|
|
|
- try{
|
|
|
+ try{
|
|
|
+ for (QrPackageBatch qrPackageBatch:qrPackageBatches) {
|
|
|
//计算备用码包数量
|
|
|
Long standbyRatio = 0L;
|
|
|
if(null != qrPackage.getStandbyRatio() && qrPackage.getStandbyRatio() != 0){
|
|
@@ -192,7 +187,6 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
|
|
|
|
|
|
// 循环生成码
|
|
|
List<QrData> codeList = doLoopGenerateCode(qrRepertoryColumnList, qrRepertoryId, urlMap, qrRepertorySerialNumberMap, qrNumber, batchNumber, repeatTimes,qrBoxCodeFormat,splitCache);
|
|
|
- log.info("5 loopGenerateCode get codeList -->"+System.currentTimeMillis());
|
|
|
// 更新码库流水号
|
|
|
qrRepertorySerialNumberMap.entrySet().stream().forEach(o->{
|
|
|
QrRepertorySerialNumber updateSerialNumber = new QrRepertorySerialNumber()
|
|
@@ -203,26 +197,24 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
|
|
|
});
|
|
|
//转化为tablestore的对象列表
|
|
|
List<QrCode> qrCodes = convertToTableStoreEntity(codeList, qrPackageBatch);
|
|
|
- log.info("6 loopGenerateCode transform tableStoreEntityList -->"+System.currentTimeMillis());
|
|
|
|
|
|
// table数据库 批量插入
|
|
|
asyncTableStoreUtil.mqPutRow(qrCodes);
|
|
|
// 累加数量
|
|
|
sum = sum + qrCodes.size();
|
|
|
- log.info("7 loopGenerateCode save tablestore async -->"+System.currentTimeMillis());
|
|
|
// 创建码文件
|
|
|
String md5 = createCodeFile(qrPackage,coverFactory,qrRepertory,splitCache, batchNumber, qrBoxCodeFormat, fileList, codeList);
|
|
|
fileVerifyMd5List.add(md5);
|
|
|
- log.info("8 loopGenerateCode create file -->"+System.currentTimeMillis());
|
|
|
- }catch(Exception e){
|
|
|
- log.warn("单个批次生成码异常",e);
|
|
|
- log.warn("qrPackageBatch: "+JsonUtils.toJson(qrPackageBatch));
|
|
|
- throw e;
|
|
|
- }
|
|
|
+ // 清除qrCodes,codeList
|
|
|
+ qrCodes.clear();
|
|
|
+ codeList.clear();
|
|
|
|
|
|
+ }
|
|
|
+ }catch(Exception e){
|
|
|
+ log.warn("生成码异常",e);
|
|
|
+ log.warn("qrPackageBatch: "+JsonUtils.toJson(qrPackageBatches));
|
|
|
+ throw e;
|
|
|
}
|
|
|
- log.info("9 loopGenerateCode all files -->"+System.currentTimeMillis());
|
|
|
-
|
|
|
//3-保存压缩文件并上传oss
|
|
|
//压缩后得名字 正式码_预订单号(或者SAP订单号_物料id)_文件内码数量
|
|
|
String zipName = null;
|
|
@@ -232,13 +224,11 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
|
|
|
}else{
|
|
|
zipName = "正式码_"+qrPackage.getBookingOrder()+"_"+sum+".zip";
|
|
|
}
|
|
|
-
|
|
|
//压缩密码
|
|
|
String pas = RandomCodeUtils.getStr(6);
|
|
|
//压缩加密文件
|
|
|
File file = new File("/code");
|
|
|
zipEncryption(file, fileList,pas,zipName);
|
|
|
- log.info("10 loopGenerateCode zip file -->"+System.currentTimeMillis());
|
|
|
|
|
|
//上传阿里云,并更新码包的下载路径 保存zip密码
|
|
|
try{
|
|
@@ -258,9 +248,8 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
|
|
|
}finally {
|
|
|
//删除生成文件
|
|
|
FileUtil.del(file);
|
|
|
+ System.gc();
|
|
|
}
|
|
|
- log.info("11 loopGenerateCode upload oss -->"+System.currentTimeMillis());
|
|
|
-
|
|
|
//3-更改生成状态为已生成
|
|
|
qrPackage.setGenerateStatus(QrPackageGenerateStatusEnum.GENERATE_SUCCESS.getCode());
|
|
|
qrPackage.setGenerateTime(LocalDateTime.now());
|
|
@@ -321,6 +310,7 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
|
|
|
os = fileItem.getOutputStream();
|
|
|
while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
|
|
|
os.write(buffer, 0, bytesRead);
|
|
|
+ os.flush();
|
|
|
}
|
|
|
} catch (IOException e) {
|
|
|
log.warn("文件读取异常",e);
|
|
@@ -340,9 +330,7 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
|
|
|
log.warn("文件流关闭失败",e);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
|
|
|
- return multipartFile;
|
|
|
+ return new CommonsMultipartFile(fileItem);
|
|
|
}
|
|
|
|
|
|
private List<QrCode> convertToTableStoreEntity(List<QrData> codeList,QrPackageBatch qrPackageBatch){
|
|
@@ -484,6 +472,7 @@ public class GenerateCodeServiceImpl implements GenerateCodeService {
|
|
|
qrRepertorySerialNumberMap.put(qrRepertoryColumnId + "_" + j, qrRepertorySerialNumber);
|
|
|
}
|
|
|
}
|
|
|
+ buildClassArr = null;
|
|
|
}
|
|
|
}
|
|
|
|