|
@@ -40,227 +40,227 @@ import java.util.List;
|
|
|
*/
|
|
|
@Service
|
|
|
@Slf4j
|
|
|
-public class QrDataServiceImpl implements QrDataService {
|
|
|
-
|
|
|
+public class QrDataServiceImpl {
|
|
|
+//
|
|
|
+//// @Autowired
|
|
|
+//// private MongoTemplate mongoTemplate;
|
|
|
+//
|
|
|
// @Autowired
|
|
|
-// private MongoTemplate mongoTemplate;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private QrPackageMapper qrPackageMapper;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private QrRepertoryMapper qrRepertoryMapper;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private QrPackageService qrPackageService;
|
|
|
-
|
|
|
- /**
|
|
|
- * 根据批次号查询码数量
|
|
|
- */
|
|
|
- @Override
|
|
|
- public long selectCountByBatchNumber(String batchNumber) {
|
|
|
-// Query query = new Query();
|
|
|
-// query.addCriteria(Criteria.where("batchNumber").is(batchNumber));
|
|
|
-// return mongoTemplate.count(query, QrData.class);
|
|
|
- return 0L;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 根据批次号删除码
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void deleteCodeByBatchNumber(String batchNumber) {
|
|
|
-// Query query = new Query();
|
|
|
-// query.addCriteria(Criteria.where("batchNumber").is(batchNumber));
|
|
|
-// mongoTemplate.remove(query, QrData.class);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 根据批次号查询码
|
|
|
- */
|
|
|
- @Override
|
|
|
- public List<QrData> selectCodeByBatch(String batchNumber) {
|
|
|
-// Query query = new Query();
|
|
|
-// query.addCriteria(Criteria.where("batchNumber").is(batchNumber));
|
|
|
-// return mongoTemplate.find(query, QrData.class);
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 批量插入
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void batchInsert(List<QrData> qrDataList) {
|
|
|
-// mongoTemplate.insert(qrDataList, QrData.class);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 导入码数据
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void importQrData(ImportQrDataReq req) {
|
|
|
- // 校验txt文件
|
|
|
- MultipartFile file = req.getFile();
|
|
|
- checkTxtFile(file);
|
|
|
-
|
|
|
- // 查询码包
|
|
|
- QrPackageVO qrPackageVo = qrPackageMapper.selectQrPackageDetailById(req.getQrPackageId());
|
|
|
-
|
|
|
- List<QrData> qrDataList = new LinkedList<>();
|
|
|
-
|
|
|
- // 从txt中提取码数据
|
|
|
- txtToQrData(file, qrPackageVo, qrDataList);
|
|
|
-
|
|
|
- try {
|
|
|
- // 插入文本中的数据
|
|
|
- insertImportData(qrPackageVo, qrDataList);
|
|
|
-
|
|
|
- // 压缩文件
|
|
|
- zipFile(file, qrPackageVo);
|
|
|
-
|
|
|
- // 更改生成状态为已生成
|
|
|
- QrPackage update = new QrPackage().setId(qrPackageVo.getId()).setGenerateStatus(QrPackageGenerateStatusEnum.GENERATE_SUCCESS.getCode());
|
|
|
- qrPackageMapper.updateById(update);
|
|
|
-
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("导入码失败", e);
|
|
|
- qrPackageService.failedRollback(new QrPackage().setId(qrPackageVo.getId()).setBatchNumber(qrPackageVo.getBatchNumber()));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 压缩文件
|
|
|
- */
|
|
|
- private void zipFile(MultipartFile file, QrPackageVO qrPackageVo) {
|
|
|
- try {
|
|
|
- File txtFile = File.createTempFile(qrPackageVo.getBatchNumber(), "txt");
|
|
|
- file.transferTo(txtFile);
|
|
|
- // 按照批次号.txt的方式重命名
|
|
|
- txtFile = FileUtil.rename(txtFile, qrPackageVo.getBatchNumber() + ".txt", true, true);
|
|
|
-
|
|
|
- // 压缩文件
|
|
|
- File zipFile = ZipUtil.zip(txtFile);
|
|
|
-
|
|
|
- // 删除生成的临时文件,上传阿里云,并更新码包的下载路径
|
|
|
- qrPackageService.delFileAndUpdatePath(txtFile, zipFile, qrPackageVo.getId());
|
|
|
- } catch (IOException e) {
|
|
|
- log.error("IOException", e);
|
|
|
- throw new BusinessException("压缩文件错误");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 从txt中提取码数据
|
|
|
- * @param file txt文件
|
|
|
- * @param qrPackageVo 码包
|
|
|
- * @param qrDataList 码数据
|
|
|
- */
|
|
|
- private void txtToQrData(MultipartFile file, QrPackageVO qrPackageVo, List<QrData> qrDataList) {
|
|
|
- // 码库 & 码库的列
|
|
|
- QrRepertoryVO qrRepertory = qrRepertoryMapper.selectQrRepertoryDetailById(qrPackageVo.getQrRepertoryId());
|
|
|
- List<QrRepertoryColumnVO> qrRepertoryColumnList = qrRepertory.getQrRepertoryColumnList();
|
|
|
-
|
|
|
- // 用于比较申请数量和txt中的数量是否一致
|
|
|
- Long qrNumber = qrPackageVo.getQrNumber();
|
|
|
- long txtCodeNumber = 0;
|
|
|
-
|
|
|
- BufferedReader br = null;
|
|
|
- try {
|
|
|
- br = new BufferedReader(new InputStreamReader(file.getInputStream()));
|
|
|
- LocalDateTime localDateTime = LocalDateTime.now();
|
|
|
- String line = null;
|
|
|
- while ((line = br.readLine()) != null) {
|
|
|
- if (StringUtils.isBlank(line)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- line = line.replace(",", ",");
|
|
|
- // 跳过特殊字符
|
|
|
- if (!line.matches("[0-9a-zA-Z\\.\\,\\:\\-/]*")) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- String[] codeArr = line.split(",");
|
|
|
- // 验证导入的码列数是否与定义的码库列数一致
|
|
|
- if (codeArr.length != qrRepertoryColumnList.size()) {
|
|
|
- throw new BusinessException("导入文件的码列数与码库定义的码列数不一致,导入失败");
|
|
|
- }
|
|
|
-
|
|
|
- txtCodeNumber++;
|
|
|
- QrData qrData = new QrData();
|
|
|
- List<QrInnerData> qrInnerDataList = new LinkedList<>();
|
|
|
-
|
|
|
- for (int i = 0; i < codeArr.length; i++) {
|
|
|
- String urlCode = codeArr[i];
|
|
|
- // 分离url与code
|
|
|
- int urlIndex = urlCode.lastIndexOf("/") + 1;
|
|
|
- QrInnerData qrInnerData = new QrInnerData();
|
|
|
- qrInnerData.setUrl(urlCode.substring(0, urlIndex));
|
|
|
- qrInnerData.setCode(urlCode.substring(urlIndex));
|
|
|
- qrInnerData.setQrRepertoryColumnId(qrRepertoryColumnList.get(i).getId());
|
|
|
- qrInnerData.setSortNumber(i);
|
|
|
-
|
|
|
- qrInnerDataList.add(qrInnerData);
|
|
|
- }
|
|
|
-
|
|
|
- qrData.setQrRepertoryId(qrRepertory.getId());
|
|
|
- qrData.setBatchNumber(qrPackageVo.getBatchNumber());
|
|
|
- qrData.setQrRepertoryType(qrRepertory.getType());
|
|
|
- qrData.setInnerDataList(qrInnerDataList);
|
|
|
- qrData.setCreateTime(localDateTime);
|
|
|
-
|
|
|
- qrDataList.add(qrData);
|
|
|
- }
|
|
|
- } catch (IOException e) {
|
|
|
- log.error("读取码文件出错", e);
|
|
|
- throw new BusinessException("读取码文件出错");
|
|
|
- } finally {
|
|
|
- IoUtil.close(br);
|
|
|
- }
|
|
|
-
|
|
|
- if (qrNumber.longValue() != txtCodeNumber) {
|
|
|
- throw new BusinessException("申请数量与导入数量不一致,无法导入");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 校验txt文件
|
|
|
- * @param file
|
|
|
- */
|
|
|
- private void checkTxtFile(MultipartFile file) {
|
|
|
- if (file != null && file.getSize() > 0) {
|
|
|
- String fileName = file.getOriginalFilename();
|
|
|
- String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
|
|
|
- if (!"txt".equals(suffix)) {
|
|
|
- throw new BusinessException("上传文件格式不正确");
|
|
|
- }
|
|
|
- } else {
|
|
|
- throw new BusinessException("上传文件为空");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 插入文本中的数据
|
|
|
- * @param qrPackageVo 码包
|
|
|
- * @param qrDataList 码数据List
|
|
|
- */
|
|
|
- private void insertImportData(QrPackageVO qrPackageVo, List<QrData> qrDataList) {
|
|
|
- try {
|
|
|
- List<QrData> batchInsertList = new ArrayList<>();
|
|
|
- for (int i = 0; i < qrDataList.size(); i++) {
|
|
|
- batchInsertList.add(qrDataList.get(i));
|
|
|
- // 每5000个插入一次
|
|
|
- if (i > 0 && i % GenerateCodeConsumer.ONCE_GENERATE_NUMBER == 0) {
|
|
|
- batchInsert(batchInsertList);
|
|
|
- batchInsertList.clear();
|
|
|
- }
|
|
|
- }
|
|
|
- if (!batchInsertList.isEmpty()) {
|
|
|
- batchInsert(batchInsertList);
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("导入的码插入mongodb失败", e);
|
|
|
- throw new BusinessException("导入的码重复或与系统中的码重复,导入失败");
|
|
|
- }
|
|
|
- }
|
|
|
+// private QrPackageMapper qrPackageMapper;
|
|
|
+//
|
|
|
+// @Autowired
|
|
|
+// private QrRepertoryMapper qrRepertoryMapper;
|
|
|
+//
|
|
|
+// @Autowired
|
|
|
+// private QrPackageService qrPackageService;
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 根据批次号查询码数量
|
|
|
+// */
|
|
|
+// @Override
|
|
|
+// public long selectCountByBatchNumber(String batchNumber) {
|
|
|
+//// Query query = new Query();
|
|
|
+//// query.addCriteria(Criteria.where("batchNumber").is(batchNumber));
|
|
|
+//// return mongoTemplate.count(query, QrData.class);
|
|
|
+// return 0L;
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 根据批次号删除码
|
|
|
+// */
|
|
|
+// @Override
|
|
|
+// public void deleteCodeByBatchNumber(String batchNumber) {
|
|
|
+//// Query query = new Query();
|
|
|
+//// query.addCriteria(Criteria.where("batchNumber").is(batchNumber));
|
|
|
+//// mongoTemplate.remove(query, QrData.class);
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 根据批次号查询码
|
|
|
+// */
|
|
|
+// @Override
|
|
|
+// public List<QrData> selectCodeByBatch(String batchNumber) {
|
|
|
+//// Query query = new Query();
|
|
|
+//// query.addCriteria(Criteria.where("batchNumber").is(batchNumber));
|
|
|
+//// return mongoTemplate.find(query, QrData.class);
|
|
|
+// return null;
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 批量插入
|
|
|
+// */
|
|
|
+// @Override
|
|
|
+// public void batchInsert(List<QrData> qrDataList) {
|
|
|
+//// mongoTemplate.insert(qrDataList, QrData.class);
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 导入码数据
|
|
|
+// */
|
|
|
+// @Override
|
|
|
+// public void importQrData(ImportQrDataReq req) {
|
|
|
+// // 校验txt文件
|
|
|
+// MultipartFile file = req.getFile();
|
|
|
+// checkTxtFile(file);
|
|
|
+//
|
|
|
+// // 查询码包
|
|
|
+// QrPackageVO qrPackageVo = qrPackageMapper.selectQrPackageDetailById(req.getQrPackageId());
|
|
|
+//
|
|
|
+// List<QrData> qrDataList = new LinkedList<>();
|
|
|
+//
|
|
|
+// // 从txt中提取码数据
|
|
|
+// txtToQrData(file, qrPackageVo, qrDataList);
|
|
|
+//
|
|
|
+// try {
|
|
|
+// // 插入文本中的数据
|
|
|
+// insertImportData(qrPackageVo, qrDataList);
|
|
|
+//
|
|
|
+// // 压缩文件
|
|
|
+// zipFile(file, qrPackageVo);
|
|
|
+//
|
|
|
+// // 更改生成状态为已生成
|
|
|
+// QrPackage update = new QrPackage().setId(qrPackageVo.getId()).setGenerateStatus(QrPackageGenerateStatusEnum.GENERATE_SUCCESS.getCode());
|
|
|
+// qrPackageMapper.updateById(update);
|
|
|
+//
|
|
|
+// } catch (Exception e) {
|
|
|
+// log.error("导入码失败", e);
|
|
|
+// qrPackageService.failedRollback(new QrPackage().setId(qrPackageVo.getId()).setBatchNumber(qrPackageVo.getBatchNumber()));
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 压缩文件
|
|
|
+// */
|
|
|
+// private void zipFile(MultipartFile file, QrPackageVO qrPackageVo) {
|
|
|
+// try {
|
|
|
+// File txtFile = File.createTempFile(qrPackageVo.getBatchNumber(), "txt");
|
|
|
+// file.transferTo(txtFile);
|
|
|
+// // 按照批次号.txt的方式重命名
|
|
|
+// txtFile = FileUtil.rename(txtFile, qrPackageVo.getBatchNumber() + ".txt", true, true);
|
|
|
+//
|
|
|
+// // 压缩文件
|
|
|
+// File zipFile = ZipUtil.zip(txtFile);
|
|
|
+//
|
|
|
+// // 删除生成的临时文件,上传阿里云,并更新码包的下载路径
|
|
|
+// qrPackageService.delFileAndUpdatePath(txtFile, zipFile, qrPackageVo.getId());
|
|
|
+// } catch (IOException e) {
|
|
|
+// log.error("IOException", e);
|
|
|
+// throw new BusinessException("压缩文件错误");
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 从txt中提取码数据
|
|
|
+// * @param file txt文件
|
|
|
+// * @param qrPackageVo 码包
|
|
|
+// * @param qrDataList 码数据
|
|
|
+// */
|
|
|
+// private void txtToQrData(MultipartFile file, QrPackageVO qrPackageVo, List<QrData> qrDataList) {
|
|
|
+// // 码库 & 码库的列
|
|
|
+// QrRepertoryVO qrRepertory = qrRepertoryMapper.selectQrRepertoryDetailById(qrPackageVo.getQrRepertoryId());
|
|
|
+// List<QrRepertoryColumnVO> qrRepertoryColumnList = qrRepertory.getQrRepertoryColumnList();
|
|
|
+//
|
|
|
+// // 用于比较申请数量和txt中的数量是否一致
|
|
|
+// Long qrNumber = qrPackageVo.getQrNumber();
|
|
|
+// long txtCodeNumber = 0;
|
|
|
+//
|
|
|
+// BufferedReader br = null;
|
|
|
+// try {
|
|
|
+// br = new BufferedReader(new InputStreamReader(file.getInputStream()));
|
|
|
+// LocalDateTime localDateTime = LocalDateTime.now();
|
|
|
+// String line = null;
|
|
|
+// while ((line = br.readLine()) != null) {
|
|
|
+// if (StringUtils.isBlank(line)) {
|
|
|
+// continue;
|
|
|
+// }
|
|
|
+//
|
|
|
+// line = line.replace(",", ",");
|
|
|
+// // 跳过特殊字符
|
|
|
+// if (!line.matches("[0-9a-zA-Z\\.\\,\\:\\-/]*")) {
|
|
|
+// continue;
|
|
|
+// }
|
|
|
+//
|
|
|
+// String[] codeArr = line.split(",");
|
|
|
+// // 验证导入的码列数是否与定义的码库列数一致
|
|
|
+// if (codeArr.length != qrRepertoryColumnList.size()) {
|
|
|
+// throw new BusinessException("导入文件的码列数与码库定义的码列数不一致,导入失败");
|
|
|
+// }
|
|
|
+//
|
|
|
+// txtCodeNumber++;
|
|
|
+// QrData qrData = new QrData();
|
|
|
+// List<QrInnerData> qrInnerDataList = new LinkedList<>();
|
|
|
+//
|
|
|
+// for (int i = 0; i < codeArr.length; i++) {
|
|
|
+// String urlCode = codeArr[i];
|
|
|
+// // 分离url与code
|
|
|
+// int urlIndex = urlCode.lastIndexOf("/") + 1;
|
|
|
+// QrInnerData qrInnerData = new QrInnerData();
|
|
|
+// qrInnerData.setUrl(urlCode.substring(0, urlIndex));
|
|
|
+// qrInnerData.setCode(urlCode.substring(urlIndex));
|
|
|
+// qrInnerData.setQrRepertoryColumnId(qrRepertoryColumnList.get(i).getId());
|
|
|
+// qrInnerData.setSortNumber(i);
|
|
|
+//
|
|
|
+// qrInnerDataList.add(qrInnerData);
|
|
|
+// }
|
|
|
+//
|
|
|
+// qrData.setQrRepertoryId(qrRepertory.getId());
|
|
|
+// qrData.setBatchNumber(qrPackageVo.getBatchNumber());
|
|
|
+// qrData.setQrRepertoryType(qrRepertory.getType());
|
|
|
+// qrData.setInnerDataList(qrInnerDataList);
|
|
|
+// qrData.setCreateTime(localDateTime);
|
|
|
+//
|
|
|
+// qrDataList.add(qrData);
|
|
|
+// }
|
|
|
+// } catch (IOException e) {
|
|
|
+// log.error("读取码文件出错", e);
|
|
|
+// throw new BusinessException("读取码文件出错");
|
|
|
+// } finally {
|
|
|
+// IoUtil.close(br);
|
|
|
+// }
|
|
|
+//
|
|
|
+// if (qrNumber.longValue() != txtCodeNumber) {
|
|
|
+// throw new BusinessException("申请数量与导入数量不一致,无法导入");
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 校验txt文件
|
|
|
+// * @param file
|
|
|
+// */
|
|
|
+// private void checkTxtFile(MultipartFile file) {
|
|
|
+// if (file != null && file.getSize() > 0) {
|
|
|
+// String fileName = file.getOriginalFilename();
|
|
|
+// String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
|
|
|
+// if (!"txt".equals(suffix)) {
|
|
|
+// throw new BusinessException("上传文件格式不正确");
|
|
|
+// }
|
|
|
+// } else {
|
|
|
+// throw new BusinessException("上传文件为空");
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 插入文本中的数据
|
|
|
+// * @param qrPackageVo 码包
|
|
|
+// * @param qrDataList 码数据List
|
|
|
+// */
|
|
|
+// private void insertImportData(QrPackageVO qrPackageVo, List<QrData> qrDataList) {
|
|
|
+// try {
|
|
|
+// List<QrData> batchInsertList = new ArrayList<>();
|
|
|
+// for (int i = 0; i < qrDataList.size(); i++) {
|
|
|
+// batchInsertList.add(qrDataList.get(i));
|
|
|
+// // 每5000个插入一次
|
|
|
+// if (i > 0 && i % GenerateCodeConsumer.ONCE_GENERATE_NUMBER == 0) {
|
|
|
+// batchInsert(batchInsertList);
|
|
|
+// batchInsertList.clear();
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if (!batchInsertList.isEmpty()) {
|
|
|
+// batchInsert(batchInsertList);
|
|
|
+// }
|
|
|
+// } catch (Exception e) {
|
|
|
+// log.error("导入的码插入mongodb失败", e);
|
|
|
+// throw new BusinessException("导入的码重复或与系统中的码重复,导入失败");
|
|
|
+// }
|
|
|
+// }
|
|
|
}
|