|
@@ -6,13 +6,8 @@ import cn.hutool.core.io.IoUtil;
|
|
|
import com.abi.base.foundation.util.JsonUtil;
|
|
|
import com.abi.base.foundation.util.RedisClient;
|
|
|
import com.abi.qms.platform.constant.RedisKeysConstant;
|
|
|
-import com.abi.qms.platform.dao.entity.BaseFactory;
|
|
|
-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.entity.*;
|
|
|
+import com.abi.qms.platform.dao.enums.*;
|
|
|
import com.abi.qms.platform.dao.mapper.BaseFactoryMapper;
|
|
|
import com.abi.qms.platform.dao.mapper.QrPackageBatchMapper;
|
|
|
import com.abi.qms.platform.dao.mapper.QrPackageDownloadRecordMapper;
|
|
@@ -107,9 +102,166 @@ public class QrPackageServiceImpl implements QrPackageService {
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void saveQrPackage(SaveQrPackageReq req) {
|
|
|
+ boolean isAdd = (req.getId() == null);
|
|
|
+
|
|
|
+ //0-校验入参
|
|
|
+ QrPackage qrPackage = checkRequestWhenSaveQrPackage(req);
|
|
|
+
|
|
|
+ //1-自动补全or处理入参数据
|
|
|
+ fullParam(req);
|
|
|
+
|
|
|
+ //2-构造码包主表对象
|
|
|
+ qrPackage = buildQrPackage(req,qrPackage);
|
|
|
+
|
|
|
+ //3-新增or修改 码包主表
|
|
|
+ if (!isAdd) {
|
|
|
+ qrPackageMapper.updateById(qrPackage);
|
|
|
+ }else{
|
|
|
+ qrPackageMapper.insert(qrPackage);
|
|
|
+ }
|
|
|
+
|
|
|
+ //4-保存码包批次子表信息
|
|
|
+ saveQrPackageBatch(qrPackage,isAdd,req);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 自动补全or处理入参数据
|
|
|
+ */
|
|
|
+ private void fullParam(SaveQrPackageReq req){
|
|
|
+ //1-如果没有传入二级供应商,则表示选的是无等级(即自己做自己)的包材厂,那么就把自己放入二级供应商内
|
|
|
+ if(req.getFactoryCoverLevelTwoId()==null){
|
|
|
+ req.setFactoryCoverLevelTwoId(req.getFactoryCoverId());
|
|
|
+ }
|
|
|
+
|
|
|
+ //2-如果批次信息为空(盖码 or 真实业务没有批次的箱码包材厂),则补充批次信息
|
|
|
+ if(CollectionUtil.isEmpty(req.getPackageBatchBeanList())){
|
|
|
+ //列表
|
|
|
+ List<SaveQrPackageReq.PackageBatchBean> batchBeanList = new ArrayList<>();
|
|
|
+
|
|
|
+ //码的总量
|
|
|
+ Long qrNumber = req.getQrNumber();
|
|
|
+
|
|
|
+ //批次信息按包材厂的最大文件数来拆分
|
|
|
+ BaseFactory factory = baseFactoryMapper.selectById(req.getFactoryCoverLevelTwoId());
|
|
|
+ Long maxFileCount = factory.getMaxFileCount();
|
|
|
+ //如果二级包材厂的最大数为空,则认为和总数一致
|
|
|
+ if(maxFileCount==null || maxFileCount<=0){
|
|
|
+ maxFileCount = qrNumber;
|
|
|
+ }
|
|
|
+
|
|
|
+ //计算需要生成多少批次,不是整除则+1
|
|
|
+ int batchCount = qrNumber.intValue()/maxFileCount.intValue();
|
|
|
+ if(batchCount*maxFileCount<qrNumber){
|
|
|
+ batchCount = batchCount+1;
|
|
|
+ }
|
|
|
+
|
|
|
+ //循环添加批次
|
|
|
+ for(int i=0;i<batchCount;i++){
|
|
|
+ //每个批次多少条
|
|
|
+ Long batchQrNumber = maxFileCount;
|
|
|
+ if(i==batchCount-1){
|
|
|
+ batchQrNumber = qrNumber-(batchCount-1)*maxFileCount;
|
|
|
+ }
|
|
|
+ SaveQrPackageReq.PackageBatchBean batchBean = new SaveQrPackageReq.PackageBatchBean();
|
|
|
+ batchBean.setBatchNumber("000001");
|
|
|
+ batchBean.setBatchQrNumber(req.getQrNumber());
|
|
|
+ batchBeanList.add(batchBean);
|
|
|
+ }
|
|
|
+ req.setPackageBatchBeanList(batchBeanList);
|
|
|
+ }
|
|
|
+
|
|
|
+ //
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存码包批次子表信息
|
|
|
+ * @param qrPackage
|
|
|
+ * @param isAdd
|
|
|
+ * @param req
|
|
|
+ */
|
|
|
+ private void saveQrPackageBatch(QrPackage qrPackage,boolean isAdd,SaveQrPackageReq req){
|
|
|
+ //删除批次号(仅更新码包可能删除)
|
|
|
+ if(!isAdd){
|
|
|
+ //查询原有批次号
|
|
|
+ QueryWrapper<QrPackageBatch> qrPackageBatchQuery = new QueryWrapper<>();
|
|
|
+ qrPackageBatchQuery.eq("package_id", qrPackage.getId());
|
|
|
+ qrPackageBatchQuery.eq("is_delete", 0);
|
|
|
+ List<QrPackageBatch> qrPackageBatches = qrPackageBatchMapper.selectList(qrPackageBatchQuery);
|
|
|
+ List<Long> batchOldIds = qrPackageBatches.stream().map(QrPackageBatch::getId).collect(Collectors.toList());
|
|
|
+ //更新的批次数据
|
|
|
+ List<Long> batchNewIds = req.getPackageBatchBeanList().stream().map(SaveQrPackageReq.PackageBatchBean::getId).collect(Collectors.toList());
|
|
|
+ //原有-入参更新 = 删除的数据
|
|
|
+ List<Long> deleteBatch = new ArrayList<>(batchOldIds);
|
|
|
+ deleteBatch.removeAll(batchNewIds);
|
|
|
+ if (CollectionUtil.isNotEmpty(deleteBatch)) {
|
|
|
+ UpdateWrapper<QrPackageBatch> qrPackageBatchDeleteParam = new UpdateWrapper<>();
|
|
|
+ qrPackageBatchDeleteParam.in("id", deleteBatch)
|
|
|
+ .set("is_delete", 1);
|
|
|
+ qrPackageBatchMapper.update(null, qrPackageBatchDeleteParam);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //添加或更新
|
|
|
+ for (SaveQrPackageReq.PackageBatchBean packageBatchBean : req.getPackageBatchBeanList()) {
|
|
|
+ if (packageBatchBean.getId() == null) {
|
|
|
+ QrPackageBatch qrPackageBatch = new QrPackageBatch();
|
|
|
+ qrPackageBatch.setPackageId(qrPackage.getId());
|
|
|
+ qrPackageBatch.setBatchNumber(packageBatchBean.getBatchNumber());
|
|
|
+ qrPackageBatch.setBatchQrNumber(packageBatchBean.getBatchQrNumber());
|
|
|
+ qrPackageBatchMapper.insert(qrPackageBatch);
|
|
|
+ } else {
|
|
|
+ QueryWrapper<QrPackageBatch> qrPackageBatchQ = new QueryWrapper<>();
|
|
|
+ qrPackageBatchQ.eq("id", packageBatchBean.getId());
|
|
|
+ qrPackageBatchQ.eq("is_delete", 0);
|
|
|
+ QrPackageBatch qrPackageBatch = qrPackageBatchMapper.selectOne(qrPackageBatchQ);
|
|
|
+ if (Objects.isNull(qrPackageBatch)) {
|
|
|
+ throw new BusinessException(ErrorCodeEnum.NO_EXISTS_DATA.getCode(), "批次对象不存在");
|
|
|
+ }
|
|
|
+ qrPackageBatch.setBatchQrNumber(packageBatchBean.getBatchQrNumber());
|
|
|
+ qrPackageBatch.setBatchNumber(packageBatchBean.getBatchNumber());
|
|
|
+ qrPackageBatchMapper.updateById(qrPackageBatch);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * build数据库的码包对象
|
|
|
+ * @param req
|
|
|
+ * @param qrPackage
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private QrPackage buildQrPackage(SaveQrPackageReq req,QrPackage qrPackage){
|
|
|
+ if(qrPackage==null){
|
|
|
+ qrPackage = new QrPackage();
|
|
|
+ }
|
|
|
+
|
|
|
+ qrPackage.setSapOrderNo(req.getSapOrderNo());
|
|
|
+ qrPackage.setMaterialId(req.getMaterialId());
|
|
|
+ qrPackage.setFactoryCoverId(req.getFactoryCoverId());
|
|
|
+ qrPackage.setFactoryCoverLevelTwoId(req.getFactoryCoverLevelTwoId());
|
|
|
+ qrPackage.setFactoryBeerId(req.getFactoryBeerId());
|
|
|
+ qrPackage.setBoxCodeFormatId(req.getBoxCodeFormatId());
|
|
|
+ qrPackage.setQrNumber(req.getQrNumber());
|
|
|
+ qrPackage.setStandbyRatio(req.getStandbyRatio());
|
|
|
+ qrPackage.setReasonApply(req.getReasonApply());
|
|
|
+
|
|
|
+ return qrPackage;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验保存码包的入参
|
|
|
+ * @param req
|
|
|
+ * @return QrPackage 如果是修改码包就把码包查出来
|
|
|
+ */
|
|
|
+ private QrPackage checkRequestWhenSaveQrPackage(SaveQrPackageReq req){
|
|
|
Long qrPackageId = req.getId();
|
|
|
+ QrPackage qrPackage = null;
|
|
|
+
|
|
|
// 修改码包时的条件限制
|
|
|
- QrPackage qrPackage;
|
|
|
if (qrPackageId != null) {
|
|
|
qrPackage = qrPackageMapper.selectById(qrPackageId);
|
|
|
AssertUtil.isNull(qrPackage, "码包不存在");
|
|
@@ -145,6 +297,21 @@ public class QrPackageServiceImpl implements QrPackageService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //若当前登录用户为包材厂用户,则该选项默认选择该用户所在的包材厂,不可修改
|
|
|
+ UserInfo wholeUser = userUtil.getWholeUser();
|
|
|
+ if(wholeUser.getFactoryId() != null
|
|
|
+ && FactoryTypeEnum.COVER.is(wholeUser.getFactoryType())
|
|
|
+ && !req.getFactoryCoverId().equals(wholeUser.getFactoryId())){
|
|
|
+ throw new BusinessException("包材厂用户只能选择自己的包材厂");
|
|
|
+ }
|
|
|
+ //如果选择的是一级包材厂(而不是无等级包材厂),那么二级包材厂必填
|
|
|
+ BaseFactory factoryCover = baseFactoryMapper.selectById(req.getFactoryCoverId());
|
|
|
+ if(FactoryLevelEnum.ONE.is(factoryCover.getFactoryLevel())
|
|
|
+ &&req.getFactoryCoverLevelTwoId()==null){
|
|
|
+ throw new BusinessException("选择了一级包材厂,则二级包材厂必填");
|
|
|
+ }
|
|
|
+
|
|
|
+ //校验批次号
|
|
|
if (CollectionUtil.isNotEmpty(req.getPackageBatchBeanList())) {
|
|
|
//同一个码包内,不同批次的批次号不一样
|
|
|
List<SaveQrPackageReq.PackageBatchBean> packageBatchBeanList = req.getPackageBatchBeanList();
|
|
@@ -155,93 +322,16 @@ public class QrPackageServiceImpl implements QrPackageService {
|
|
|
}
|
|
|
//同一个码包内,批次加起来的总数量和码包数量一致
|
|
|
//计算码包数量总和
|
|
|
- Long sum = packageBatchBeanList.stream().mapToLong(SaveQrPackageReq.PackageBatchBean::getBatchQrNumber).sum();
|
|
|
+ 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.getWholeUser().getFactoryId() != null ? userUtil.getWholeUser().getFactoryId() : req.getFactoryCoverId());
|
|
|
- // 新增or修改
|
|
|
- Long userId = userUtil.getUser().getId();
|
|
|
- qrPackage.setUpdateBy(userId);
|
|
|
- if (qrPackageId != null) {
|
|
|
- // 修改时,需要重置码包的状态为待审核
|
|
|
- qrPackage.setApplyStatus(QrPackageApplyStatusEnum.WAIT_REVIEW.getCode());
|
|
|
- qrPackageMapper.updateById(qrPackage);
|
|
|
- //更新批次号的数据
|
|
|
- QueryWrapper<QrPackageBatch> qrPackageBatchQuery = new QueryWrapper<>();
|
|
|
- qrPackageBatchQuery.eq("package_id", qrPackageId);
|
|
|
- qrPackageBatchQuery.eq("is_delete", 0);
|
|
|
- List<QrPackageBatch> qrPackageBatches = qrPackageBatchMapper.selectList(qrPackageBatchQuery);
|
|
|
- List<Long> batchOldId = qrPackageBatches.stream().map(QrPackageBatch::getId).collect(Collectors.toList());
|
|
|
- if (CollectionUtil.isNotEmpty(req.getPackageBatchBeanList())) {
|
|
|
- //提取出更新的批次数据
|
|
|
- List<Long> batchNewId = req.getPackageBatchBeanList().stream().map(SaveQrPackageReq.PackageBatchBean::getId).collect(Collectors.toList());
|
|
|
- //整理需删除的数据
|
|
|
- List<Long> deleteBatch = new ArrayList<>(batchOldId);
|
|
|
- deleteBatch.removeAll(batchNewId);
|
|
|
- if (CollectionUtil.isNotEmpty(deleteBatch)) {
|
|
|
- UpdateWrapper<QrPackageBatch> qrPackageBatchDeleteParam = new UpdateWrapper<>();
|
|
|
- qrPackageBatchDeleteParam.in("id", deleteBatch)
|
|
|
- .set("is_delete", 1);
|
|
|
- qrPackageBatchMapper.update(null, qrPackageBatchDeleteParam);
|
|
|
- }
|
|
|
- //循环添加或更新
|
|
|
- for (SaveQrPackageReq.PackageBatchBean packageBatchBean : req.getPackageBatchBeanList()) {
|
|
|
- if (packageBatchBean.getId() == null) {
|
|
|
- QrPackageBatch qrPackageBatch = new QrPackageBatch();
|
|
|
- qrPackageBatch.setPackageId(qrPackage.getId());
|
|
|
- qrPackageBatch.setBatchNumber(packageBatchBean.getBatchNumber());
|
|
|
- qrPackageBatch.setBatchQrNumber(packageBatchBean.getBatchQrNumber());
|
|
|
- qrPackageBatch.setUpdateBy(userId);
|
|
|
- qrPackageBatch.setCreateBy(userId);
|
|
|
- qrPackageBatchMapper.insert(qrPackageBatch);
|
|
|
- } else {
|
|
|
- QueryWrapper<QrPackageBatch> qrPackageBatchQ = new QueryWrapper<>();
|
|
|
- qrPackageBatchQ.eq("id", packageBatchBean.getId());
|
|
|
- qrPackageBatchQ.eq("is_delete", 0);
|
|
|
- QrPackageBatch qrPackageBatch = qrPackageBatchMapper.selectOne(qrPackageBatchQ);
|
|
|
- if (Objects.isNull(qrPackageBatch)) {
|
|
|
- throw new BusinessException(ErrorCodeEnum.NO_EXISTS_DATA.getCode(), "批次对象不存在");
|
|
|
- }
|
|
|
- qrPackageBatch.setBatchQrNumber(packageBatchBean.getBatchQrNumber());
|
|
|
- qrPackageBatch.setBatchNumber(packageBatchBean.getBatchNumber());
|
|
|
- qrPackageBatch.setUpdateBy(userId);
|
|
|
- qrPackageBatchMapper.updateById(qrPackageBatch);
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- //入参没有批次信息,数据库有,则全删除
|
|
|
- if (CollectionUtil.isNotEmpty(qrPackageBatches)) {
|
|
|
- UpdateWrapper<QrPackageBatch> qrPackageBatchDeleteParam = new UpdateWrapper<>();
|
|
|
- qrPackageBatchDeleteParam.in("id", batchOldId)
|
|
|
- .set("is_delete", 1);
|
|
|
- qrPackageBatchMapper.update(null, qrPackageBatchDeleteParam);
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- qrPackage.setCreateBy(userId);
|
|
|
- int insert = qrPackageMapper.insert(qrPackage);
|
|
|
- if (CollectionUtil.isNotEmpty(req.getPackageBatchBeanList())) {
|
|
|
- //插入批次号的数据
|
|
|
- for (SaveQrPackageReq.PackageBatchBean packageBatchBean : req.getPackageBatchBeanList()) {
|
|
|
- QrPackageBatch qrPackageBatch = new QrPackageBatch();
|
|
|
- qrPackageBatch.setPackageId(qrPackage.getId());
|
|
|
- qrPackageBatch.setBatchNumber(packageBatchBean.getBatchNumber());
|
|
|
- qrPackageBatch.setBatchQrNumber(packageBatchBean.getBatchQrNumber());
|
|
|
- qrPackageBatch.setUpdateBy(userId);
|
|
|
- qrPackageBatch.setCreateBy(userId);
|
|
|
- qrPackageBatchMapper.insert(qrPackageBatch);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ return qrPackage;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* 码包分页查询
|
|
|
*/
|