Browse Source

解决码包和批次号结构调整出现的各种业务代码的问题,包括码生成失败回滚,码包下载
对码包新增和修改的业务代码进行整改

v_HuilingDeng 3 years ago
parent
commit
2127bce641

+ 27 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/vo/result/QrPackageBatchVO.java

@@ -0,0 +1,27 @@
+package com.abi.qms.platform.dao.vo.result;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author Eurus
+ * @date 2021/5/19 20:39
+ * @Description: 码包批次信息对象 qr_package_batch
+ */
+@Data
+@ApiModel
+public class QrPackageBatchVO {
+
+    @ApiModelProperty(value = "码包批次id")
+    private Long id;
+
+    @ApiModelProperty(value = "码包id")
+    private Long packageId;
+
+    @ApiModelProperty(value = "批次号")
+    private String batchNumber;
+
+    @ApiModelProperty(value = "批次内码数量")
+    private Long batchQrNumber;
+}

+ 68 - 19
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/QrPackageServiceImpl.java

@@ -1,16 +1,17 @@
 package com.abi.qms.platform.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.io.IoUtil;
-import cn.hutool.json.JSONUtil;
 import com.abi.qms.platform.dao.entity.QrPackage;
+import com.abi.qms.platform.dao.entity.QrPackageBatch;
 import com.abi.qms.platform.dao.entity.QrPackageDownloadRecord;
 import com.abi.qms.platform.dao.enums.QrPackageApplyStatusEnum;
 import com.abi.qms.platform.dao.enums.QrPackageGenerateStatusEnum;
 import com.abi.qms.platform.dao.enums.QrRepertoryTypeEnum;
+import com.abi.qms.platform.dao.mapper.QrPackageBatchMapper;
 import com.abi.qms.platform.dao.mapper.QrPackageDownloadRecordMapper;
 import com.abi.qms.platform.dao.mapper.QrPackageMapper;
-import com.abi.qms.platform.dao.mapper.QrRepertoryMapper;
 import com.abi.qms.platform.dao.vo.result.QrPackageVO;
 import com.abi.qms.platform.dto.req.*;
 import com.abi.qms.platform.dto.res.GetQrPackageDetailRes;
@@ -31,7 +32,6 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.core.AmqpTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -39,6 +39,8 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.net.URLEncoder;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 码包 Service业务层处理
@@ -61,6 +63,9 @@ public class QrPackageServiceImpl implements QrPackageService {
 
 	@Autowired
 	private QrPackageDownloadRecordMapper qrPackageDownloadRecordMapper;
+	
+	@Autowired
+	private QrPackageBatchMapper qrPackageBatchMapper;
 
 	/**
 	 * 保存码包
@@ -80,22 +85,52 @@ public class QrPackageServiceImpl implements QrPackageService {
 				throw new BusinessException("码包不可编辑");
 			}
 		}
-
-		// 码包名称不可重复
-		QueryWrapper<QrPackage> qrPackageQw = new QueryWrapper<>();
-		qrPackageQw.eq("name", req.getName());
-		qrPackageQw.eq("is_delete", 0);
-		if (qrPackageId != null) {
-			qrPackageQw.ne("id", qrPackageId);
+		//如果SAP订单号和物料有重复数据,需提交额外申请原因
+		ValidSAPOrderNoAndMaterialReq reqValid =  new ValidSAPOrderNoAndMaterialReq();
+		reqValid.setMaterialId(req.getMaterialId());
+		reqValid.setSapOrderNo(req.getSapOrderNo());
+		ValidSAPOrderNoAndMaterialRes validSAPOrderNoAndMaterialRes = validSAPOrderNoAndMaterial(reqValid);
+		if(Objects.nonNull(validSAPOrderNoAndMaterialRes) && CollectionUtil.isNotEmpty(validSAPOrderNoAndMaterialRes.getPackageBeanList())){
+			Long id = validSAPOrderNoAndMaterialRes.getPackageBeanList().get(0).getId();
+			if(validSAPOrderNoAndMaterialRes.getPackageBeanList().size() > 1) {
+				if (Objects.isNull(req.getReasonApply())) {
+					throw new BusinessException("该SAP订单号和物料与码包" + id + "重复,若仍需申请需要提交额外码包申请原因");
+				}
+			}
+			if(validSAPOrderNoAndMaterialRes.getPackageBeanList().size() == 1) {
+				if(req.getId() == null){
+					if (Objects.isNull(req.getReasonApply())) {
+						throw new BusinessException("该SAP订单号和物料与码包" + id + "重复,若仍需申请需要提交额外码包申请原因");
+					}
+				}
+				if (!id.equals(req.getId())) {
+					if (Objects.isNull(req.getReasonApply())) {
+						throw new BusinessException("该SAP订单号和物料与码包" + id + "重复,若仍需申请需要提交额外码包申请原因");
+					}
+				}
+			}
 		}
-		Integer count = qrPackageMapper.selectCount(qrPackageQw);
-		if (!count.equals(0)) {
-			throw new BusinessException("码包名称已存在");
+
+		if(CollectionUtil.isNotEmpty(req.getPackageBatchBeanList())){
+			//同一个码包内,不同批次的批次号不一样
+			List<SaveQrPackageReq.PackageBatchBean> packageBatchBeanList = req.getPackageBatchBeanList();
+			//聚合批次号
+			List<String> batchNumberList = packageBatchBeanList.stream().map(SaveQrPackageReq.PackageBatchBean::getBatchNumber).collect(Collectors.toList());
+			if(batchNumberList.size() < req.getPackageBatchBeanList().size()){
+				throw new BusinessException("批次号重复,请确认后重试");
+			}
+			//同一个码包内,批次加起来的总数量和码包数量一致
+			//计算码包数量总和
+			Long sum = packageBatchBeanList.stream().mapToLong(SaveQrPackageReq.PackageBatchBean::getBatchQrNumber).sum();
+			if(sum != req.getQrNumber()){
+				throw new BusinessException("批次码数量与申请码总量不匹配,请确认后重试");
+			}
 		}
 
 		// copy属性值
 		qrPackage = PojoConverterUtils.copy(req, QrPackage.class);
-
+		//若当前登录用户为包材厂用户,则该选项默认选择该用户所在的包材厂,不可修改
+		qrPackage.setFactoryCoverId(UserUtil.getUser().getFactoryId() != null ? UserUtil.getUser().getFactoryId() : req.getFactoryCoverId());
 		// 新增or修改
 		Long userId = UserUtil.getUser().getId();
 		qrPackage.setUpdateBy(userId);
@@ -103,11 +138,18 @@ public class QrPackageServiceImpl implements QrPackageService {
 			// 修改时,需要重置码包的状态为待审核
 			qrPackage.setApplyStatus(QrPackageApplyStatusEnum.WAIT_REVIEW.getCode());
 			qrPackageMapper.updateById(qrPackage);
+			//Todo:批次号和码包关联
+			//更新批次号的数据
+			QueryWrapper<QrPackageBatch> qrPackageBatchQuery = new QueryWrapper<>();
+			qrPackageBatchQuery.eq("package_id", qrPackageId);
+			qrPackageBatchQuery.eq("is_delete", 0);
+			List<QrPackageBatch> qrPackageBatches = qrPackageBatchMapper.selectList(qrPackageBatchQuery);
+
 		} else {
-			qrPackage.setBatchNumber(IdWorker.getIdStr());
 			qrPackage.setCreateBy(userId);
 			int insert = qrPackageMapper.insert(qrPackage);
-			System.out.println(insert);
+			//插入批次号的数据
+
 		}
 
 	}
@@ -119,7 +161,7 @@ public class QrPackageServiceImpl implements QrPackageService {
 	public ListQrPackageRes listQrPackage(ListQrPackageReq req) {
 		//数据权限隔离,如果登录账号是包材厂,只能看账号包材厂的数据。否则看全部
 		if(UserUtil.getUser().getFactoryId() != null){
-			req.setFactoryId(UserUtil.getUser().getFactoryId());
+			req.setFactoryCoverId(UserUtil.getUser().getFactoryId());
 		}
 
 		// 分页查询
@@ -229,7 +271,7 @@ public class QrPackageServiceImpl implements QrPackageService {
 			in = new BufferedInputStream(new FileInputStream(new File("E:\\firefox_download\\202104161027287567357.zip")));
 			out = new BufferedOutputStream(response.getOutputStream());
 
-			String fileName = qrPackage.getBatchNumber() + ".zip";
+			String fileName = qrPackage.getSapOrderNo() + ".zip";
 			response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(fileName,"utf-8"));
 
 			byte [] b = new byte[1024];
@@ -276,8 +318,15 @@ public class QrPackageServiceImpl implements QrPackageService {
 	 */
 	@Override
 	public void failedRollback(QrPackage qrPackage) {
+		QueryWrapper<QrPackageBatch> qrPackageBatchQuery = new QueryWrapper<>();
+		qrPackageBatchQuery.eq("package_id", qrPackage.getId());
+		qrPackageBatchQuery.eq("is_delete", 0);
+		List<QrPackageBatch> qrPackageBatches = qrPackageBatchMapper.selectList(qrPackageBatchQuery);
 		// 删除本次生成的码
-		qrDataService.deleteCodeByBatchNumber(qrPackage.getBatchNumber());
+		qrPackageBatches.forEach(qrPackageBatch -> {
+			qrDataService.deleteCodeByBatchNumber(qrPackageBatch.getBatchNumber());
+
+		});
 
 		// 更改生成状态为生成失败
 		QrPackage qrPackageUpdate = new QrPackage().setId(qrPackage.getId()).setGenerateStatus(QrPackageGenerateStatusEnum.GENERATE_FAIL.getCode());