Przeglądaj źródła

申请码包改造接口
没有批次自动算批次

tanzhongran 3 lat temu
rodzic
commit
17f4980edd

+ 6 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/entity/QrPackage.java

@@ -27,9 +27,15 @@ public class QrPackage implements Serializable {
 	@Schema(name = "包材厂id")
 	private Long factoryCoverId;
 
+	@Schema(name = "二级包材厂id")
+	private Long factoryCoverLevelTwoId;
+
 	@Schema(name = "物料id")
 	private Long materialId;
 
+	@Schema(name = "二维码类型 1-箱码 2-盖码")
+	private Integer qrType;
+
 	@Schema(name = "啤酒厂id")
 	private Long factoryBeerId;
 

+ 3 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/entity/UserInfo.java

@@ -49,6 +49,9 @@ public class UserInfo {
     @ApiModelProperty(value = "供应商id")
     private Long factoryId;
 
+    @ApiModelProperty(value = "供应商类型 1-包材厂 2-啤酒厂")
+    private Integer factoryType;
+
     @ApiModelProperty(value = "角色code")
     private String roleCode;
 

+ 48 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/enums/QrTypeEnum.java

@@ -0,0 +1,48 @@
+package com.abi.qms.platform.dao.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.EnumSet;
+import java.util.Set;
+
+/**
+ * 二维码类型
+ * @Author AndyTan
+ */
+@Getter
+@AllArgsConstructor
+@JsonFormat(shape = JsonFormat.Shape.OBJECT)
+public enum QrTypeEnum {
+
+	//二维码类型: 1-箱码 2-盖码
+	CARTON(1,"箱码"),
+	CAP(2,"盖码");
+
+	@EnumValue
+	private Integer code;
+	private String name;
+
+	private static final Set<QrTypeEnum> ALL = EnumSet.allOf(QrTypeEnum.class);
+
+    public static String getName(Integer code) {
+        return ALL.stream()
+                .filter(o -> o.code.equals(code))
+                .map(o -> o.getName())
+                .findAny().orElse(null);
+    }
+
+    public static Integer getCode(String name) {
+        return ALL.stream()
+                .filter(o -> o.name.equals(name))
+                .map(o -> o.getCode())
+                .findAny().orElse(null);
+    }
+
+	public boolean is(Integer code){
+		return getCode().equals(code);
+	}
+
+}

+ 3 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/SaveQrPackageReq.java

@@ -42,6 +42,9 @@ public class SaveQrPackageReq implements Serializable {
 	@ApiModelProperty(value = "包材厂id")
 	private Long factoryCoverId;
 
+	@ApiModelProperty(value = "二级包材厂id")
+	private Long factoryCoverLevelTwoId;
+
 	@NotNull(message = "啤酒厂为空")
 	@ApiModelProperty(value = "啤酒厂id")
 	private Long factoryBeerId;

+ 14 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/config/mybatis/MybatisPlusConfig.java

@@ -1,10 +1,12 @@
 package com.abi.qms.platform.infrastructure.config.mybatis;
 
+import com.abi.qms.platform.infrastructure.util.UserUtil;
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
 import org.apache.ibatis.reflection.MetaObject;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -19,6 +21,9 @@ import java.time.LocalDateTime;
 @Configuration
 public class MybatisPlusConfig {
 
+    @Autowired
+    private UserUtil userUtil;
+
     /**
      * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题
      */
@@ -53,11 +58,20 @@ public class MybatisPlusConfig {
             public void insertFill(MetaObject metaObject) {
                 setFieldValByName("createTime", LocalDateTime.now(), metaObject);
                 setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
+                //操作人
+                if(userUtil.getUser()!=null && userUtil.getUser().getId()!=null){
+                    setFieldValByName("update_by", userUtil.getUser().getId(), metaObject);
+                    setFieldValByName("create_by", userUtil.getUser().getId(), metaObject);
+                }
             }
 
             @Override
             public void updateFill(MetaObject metaObject) {
                 setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
+                //操作人
+                if(userUtil.getUser()!=null && userUtil.getUser().getId()!=null){
+                    setFieldValByName("update_by", userUtil.getUser().getId(), metaObject);
+                }
             }
         };
     }

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

@@ -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;
     }
 
+
     /**
      * 码包分页查询
      */

+ 2 - 1
abi-cloud-qr-platform-server/src/main/resources/dao/mapper/UserInfoMapper.xml

@@ -13,6 +13,7 @@
         <result column="PASSWORD" property="password"/>
         <result column="is_abi" property="isAbi"/>
         <result column="factory_id" property="factoryId"/>
+        <result column="factory_type" property="factoryType"/>
         <result column="is_enable" property="isEnable"/>
         <result column="role_code" property="roleCode"/>
         <result column="link_flag" property="linkFlag"/>
@@ -24,7 +25,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        ID, USER_NAME, EMPLOYEE_NO, PHONE, EMAIL, LOGIN_NAME, PASSWORD, is_abi, factory_id, role_code, is_enable, CREATE_TIME, CREATE_BY, UPDATE_TIME, IS_DELETE
+        id, user_name, employee_no, phone, email, login_name, password, is_abi, factory_id, factory_type, role_code, is_enable, create_time, create_by, update_time, is_delete
     </sql>
 
     <!--列表查询列-->