Przeglądaj źródła

修改SAP关联订单

liguosong 3 lat temu
rodzic
commit
c15365868d

+ 36 - 20
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/QrPackageBookingOrderServiceImpl.java

@@ -1,5 +1,6 @@
 package com.abi.qms.platform.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.abi.qms.platform.dao.entity.*;
 import com.abi.qms.platform.dao.enums.FactoryTypeEnum;
 import com.abi.qms.platform.dao.mapper.*;
@@ -46,6 +47,11 @@ public class QrPackageBookingOrderServiceImpl implements QrPackageBookingOrderSe
     @Autowired
     private MaterialService materialService;
 
+    @Autowired
+    private BaseMaterialMapper baseMaterialMapper;
+
+    @Autowired
+    private FactoryService factoryService;
     /**
      * 新增修改预订单
      * @author ludashi
@@ -144,43 +150,53 @@ public class QrPackageBookingOrderServiceImpl implements QrPackageBookingOrderSe
      * @param associateSapOrderReq
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void associateSapOrder(AssociateSapOrderReq associateSapOrderReq) {
-        //1根据物料code查询id保存
-        BaseMaterial baseMaterials = materialService.getMaterialByCode(associateSapOrderReq.getMaterialCode());
-        if(ObjectUtils.isEmpty(baseMaterials)){
-            new BusinessException("该SAP订单号内未找到需要打码的物料,请维护物料数据后重试");
+        //查询码包信息
+        QueryWrapper<QrPackage> packageQuery = new QueryWrapper<>();
+        packageQuery.eq("booking_order",associateSapOrderReq.getBookingOrder());
+        QrPackage qrPackage = qrPackageMapper.selectOne(packageQuery);
+        if(ObjectUtils.isEmpty(qrPackage)){
+            throw new BusinessException("该笔预订单未关联码包,不允许直接关联SAP订单号");
         }
+        //1根据物料id查询物料code保存
+        BaseMaterial baseMaterials = baseMaterialMapper.selectById(associateSapOrderReq.getMaterialCode());
+        BaseMaterial materialByCode = materialService.getMaterialByCode(baseMaterials.getMaterialCode());
+        AssertUtil.isNull(materialByCode,"该SAP订单号内未找到需要打码的物料,请维护物料数据后重试");
         //关联SAP订单 校验
         QueryWrapper<QrPackageSapOrderItem> qrPackageSapOrderItem = new QueryWrapper<>();
         qrPackageSapOrderItem.eq("sap_order_no",associateSapOrderReq.getSapOrder());
         qrPackageSapOrderItem.eq("sap_material_id",baseMaterials.getMaterialCode());
         QrPackageSapOrderItem queryQrPackageSapOrderItem = qrPackageSapOrderItemMapper.selectOne(qrPackageSapOrderItem);
         if(ObjectUtils.isEmpty(queryQrPackageSapOrderItem)){
-            new BusinessException("关联的SAP订单不存在。");
+            new BusinessException("该SAP订单号内未找到需要打码的物料,请维护物料数据后重试");
         }
-        //2修改预订单名称
         QrPackageBookingOrder qrPackageBookingOrder = qrPackageBookingOrderMapper.selectById(associateSapOrderReq.getId());
-        qrPackageBookingOrder.setMaterialName(baseMaterials.getMaterialName());
-
-        //修改码包
-        QueryWrapper<QrPackage> packageQuery = new QueryWrapper<>();
-        packageQuery.eq("booking_order",associateSapOrderReq.getBookingOrder());
-        QrPackage qrPackage = qrPackageMapper.selectOne(packageQuery);
-        qrPackage.setSapOrderNo(associateSapOrderReq.getSapOrder());
-        qrPackage.setMaterialId(baseMaterials.getId());
-        qrPackage.setMaterialCode(baseMaterials.getMaterialCode());
-        if(!queryQrPackageSapOrderItem.getSapCoverFactoryId().equals(qrPackageBookingOrder.getFactoryCoverId().toString())){
+        //查询包材厂Code
+        BaseFactory factory = baseFactoryMapper.selectById(qrPackageBookingOrder.getFactoryCoverId());
+        AssertUtil.isNull(factory,"包材厂信息不存在");
+        //判断是否和sap订单信息一致
+        if(!queryQrPackageSapOrderItem.getSapCoverFactoryId().equals(factory.getFactoryCode())){
             new BusinessException("关联的SAP订单内包材厂信息与原预订单不符,请确认后重试。");
         }
         //  物料类型 3-罐子 4-瓶盖 5-纸板箱
-        BaseMaterial materialByCode = materialService.getMaterialByCode(queryQrPackageSapOrderItem.getSapMaterialId());
-        if(ObjectUtils.isEmpty(materialByCode)){
-            new BusinessException("关联的SAP订单内物料查询为空,请确认后重试。");
-        }
         if(!materialByCode.getMaterialType().equals(baseMaterials.getMaterialType())){
             new BusinessException("关联的SAP订单内物料类型与原预订单码类型不符,请确认后重试。");
         }
+        QueryWrapper<QrPackage> packageQueryList = new QueryWrapper<>();
+        packageQueryList.eq("booking_order",associateSapOrderReq.getBookingOrder());
+        packageQueryList.eq("material_code",baseMaterials.getMaterialCode());
+        Integer integer = qrPackageMapper.selectCount(packageQueryList);
+        if (integer>0) {
+            throw new BusinessException("该SAP订单和物料已存在,不允许重复!");
+        }
+        //1修改预订单名称
+        qrPackageBookingOrder.setMaterialName(baseMaterials.getMaterialName());
         qrPackageBookingOrderMapper.updateById(qrPackageBookingOrder);
+        //2修改码包
+        qrPackage.setSapOrderNo(associateSapOrderReq.getSapOrder());
+        qrPackage.setMaterialId(baseMaterials.getId());
+        qrPackage.setMaterialCode(baseMaterials.getMaterialCode());
         qrPackageMapper.updateById(qrPackage);
     }
 

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

@@ -76,6 +76,7 @@
                 AND package.sap_order_no IS NULL
             </if>
         </where>
+        order by bookingOrder.update_time desc
     </select>
 
     <select id="reservationOrderQuery" resultType="com.abi.qms.platform.dao.vo.result.ReservationOrderQueryVO">