Browse Source

PDA备货组盘优化

k 2 years ago
parent
commit
2e62776d56

+ 25 - 54
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/WmsDocOrderHeaderServiceImpl.java

@@ -928,7 +928,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         AjaxResult ajaxResultC = invLotLocIdService.checkPalletIsOnlyOrderNo(groupDiskFrom.getPalletNoTo()
                 , StringUtils.isEmpty(endLotattVO.getLotatt14()) ? "" : endLotattVO.getLotatt14());
         if (!ajaxResultC.isSuccess()) {
-            return ajaxResult;
+            return ajaxResultC;
         }
 
         // 创建Lotnum和库存对应关系
@@ -1091,7 +1091,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         String orderNo = ""; // 出库单号(备货才会传入)
         String sku = ""; // 物料编码
         Double qty = Double.valueOf(groupDiskFrom.getQty()); // 数量
-        boolean isAllUpdate = false; // 是全部修改,还是拆分
+        boolean isAllUpdate = false; // 库存转移类型,是全部修改,还是拆分
         boolean isStockPalletNoTo = groupDiskFrom.isStockPalletNoTo(); // 目标托盘是否是备货托盘,为了方便,目标托盘默认是备货托盘
         final Double toQty;
         if (StringUtils.isNotEmpty(groupDiskFrom.getOrderNo())) {
@@ -1099,13 +1099,16 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         }
         // 验证出库单
         if (StringUtils.isNotEmpty(orderNo)) {
-//            WmsDocOrderHeader header = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
-//            if (header != null
-//                    && !header.getOrderStatus().equals(Constant.ORDER_STS.STS10.getValue())
-//                    && !header.getOrderStatus().equals(Constant.ORDER_STS.STS20.getValue())
-//                    && !header.getOrderStatus().equals(Constant.ORDER_STS.STS21.getValue())) {
-//                return AjaxResult.error("出库单状态不可组盘!");
-//            }
+            WmsDocOrderHeader header = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
+            if(!header.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())){
+                return AjaxResult.error("出库单类型不可备货组盘!");
+            }
+            if (header != null
+                    && !header.getOrderStatus().equals(Constant.ORDER_STS.STS10.getValue())
+                    && !header.getOrderStatus().equals(Constant.ORDER_STS.STS20.getValue())
+                    && !header.getOrderStatus().equals(Constant.ORDER_STS.STS22.getValue())) {
+                return AjaxResult.error("出库单状态不可备货组盘!");
+            }
         }
         // 根据条码获取物料号
         CodeSkuRelationshipVO codeSkuRelationshipVO = codeSkuRelationshipService.checkIsProduct(sn);
@@ -1120,6 +1123,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         LotattDTO lotattDTO = new LotattDTO();
         lotattDTO.setLotatt07(palletNoFrom);
         lotattDTO.setLotatt02(sn);
+        lotattDTO.setLotatt15(orderNo);
         locIdSearchFrom.setLotattDTO(lotattDTO);
         List<InvLotLocIdLotattVO> invLotLocIdLotattList = invLotLocIdService.selectInvLocIdLotattList(locIdSearchFrom);
         // 组盘是把出库的库存重新组到一个新的托盘上,所以起始托盘和条码理应可以查询到系统里有对应的库存。
@@ -1143,6 +1147,12 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
             return AjaxResult.error("组盘数量大于单条库存数量!");
         }
         invLotLocIdLotattVOList.add(endLotattVO);
+        //验证目标托盘库存,一个托盘只能备货一个出库单
+        AjaxResult ajaxResultC = invLotLocIdService.checkPalletIsOnlyOrderNo(groupDiskFrom.getPalletNoTo()
+                , StringUtils.isEmpty(endLotattVO.getLotatt14()) ? "" : endLotattVO.getLotatt14());
+        if (!ajaxResultC.isSuccess()) {
+            return ajaxResultC;
+        }
         // 创建Lotnum和库存对应关系
         Map<String, List<InvLotLocIdLotattVO>> lotnumAndInvLocIdMap = new HashMap<>();
         invLotLocIdLotattVOList.stream().forEach(v -> {
@@ -1154,11 +1164,6 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
                 lotnumAndInvLocIdMap.put(v.getLotnum(), locIdLotattVOList);
             }
         });
-//        if (palletNoFrom.equals(palletNoTo) && orderNo.equals("")) {
-        // 起始托盘和目标托盘一样,并且出库单传入为空,不做操作
-//            return AjaxResult.success("起始和目标托盘一致,不用组盘!");
-
-//        } else {
         // 根据老Lotnum创建新的Lotnum
         for (Map.Entry<String, List<InvLotLocIdLotattVO>> lotnumToInvLocId : lotnumAndInvLocIdMap.entrySet()) {
             String lotnum = lotnumToInvLocId.getKey();
@@ -1167,11 +1172,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
             String newLotnum = idSequenceUtils.generateId("LOTNUMBER");
             invLotAtt.setLotnum(newLotnum);
             invLotAtt.setLotatt07(palletNoTo);
-            if (!orderNo.equals("")) {
-                invLotAtt.setLotatt14(orderNo); // 备货对应的出库单号
-            } else {
-                invLotAtt.setLotatt14(""); // 备货对应的出库单号
-            }
+            invLotAtt.setLotatt14(orderNo); // 备货对应的出库单号
             invLotAtt.setCreateTime(DateUtils.getNowDate());
             if (invLotAttMapper.insertInvLotAtt(invLotAtt) > 0) {
                 for (InvLotLocIdLotattVO v : invLocIdList) {
@@ -1194,29 +1195,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
                         InvLotLocId invLotLocId = invLotLocIdService.selectInvLotLocIdById(v.getLocationId().toString()
                                 , v.getCustomerId(), v.getSku(), v.getLotnum());
                         BigDecimal qtyallocated = invLotLocId.getQtyallocated();
-                        // 判断是否是备货组盘
-                        if (StringUtils.isNotEmpty(orderNo)) {
-                            if (isStockPalletNoTo) {
-                                // 拆分库存
-                                // 修改原库存
-                                InvLotLocIdForm invLotLocIdUpdate = new InvLotLocIdForm();
-                                invLotLocIdUpdate.setLotnum(v.getLotnum());
-                                invLotLocIdUpdate.setLocationId(v.getLocationId().toString());
-                                invLotLocIdUpdate.setCustomerId(v.getCustomerId());
-                                invLotLocIdUpdate.setSku(v.getSku());
-                                invLotLocIdUpdate.setQty(invLotLocId.getQty().subtract(new BigDecimal(toQty)));
-                                invLotLocIdUpdate.setQtyallocated(qtyallocated.subtract(new BigDecimal(toQty)));
-                                invLotLocIdService.updateInvLotLocId(invLotLocIdUpdate);
-                                // 插入新库存
-                                InvLotLocId invLotLocIdInsert = invLotLocId;
-                                invLotLocIdInsert.setLotnum(newLotnum);
-                                invLotLocIdInsert.setQty(new BigDecimal(toQty));
-                                invLotLocIdInsert.setQtyEach(invLotLocIdInsert.getQty());
-                                invLotLocIdInsert.setQtyallocated(new BigDecimal(toQty));
-                                invLotLocIdInsert.setQtyallocatedEach(invLotLocIdInsert.getQtyallocated());
-                                invLotLocIdService.insertInvLotLocId(invLotLocIdInsert);
-                            }
-                        }else {
+                        if (isStockPalletNoTo) {
                             // 拆分库存
                             // 修改原库存
                             InvLotLocIdForm invLotLocIdUpdate = new InvLotLocIdForm();
@@ -1225,32 +1204,24 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
                             invLotLocIdUpdate.setCustomerId(v.getCustomerId());
                             invLotLocIdUpdate.setSku(v.getSku());
                             invLotLocIdUpdate.setQty(invLotLocId.getQty().subtract(new BigDecimal(toQty)));
-                            if(qtyallocated.compareTo(new BigDecimal(toQty)) == 1) {
-                                invLotLocIdUpdate.setQtyallocated(qtyallocated.subtract(new BigDecimal(toQty)));
-                            }else {
-                                invLotLocIdUpdate.setQtyallocated(BigDecimal.ZERO);
-                            }
+                            invLotLocIdUpdate.setQtyallocated(qtyallocated.subtract(new BigDecimal(toQty)));
                             invLotLocIdService.updateInvLotLocId(invLotLocIdUpdate);
                             // 插入新库存
                             InvLotLocId invLotLocIdInsert = invLotLocId;
                             invLotLocIdInsert.setLotnum(newLotnum);
                             invLotLocIdInsert.setQty(new BigDecimal(toQty));
                             invLotLocIdInsert.setQtyEach(invLotLocIdInsert.getQty());
-                            if(qtyallocated.compareTo(new BigDecimal(toQty)) == 1) {
-                                invLotLocIdInsert.setQtyallocated(new BigDecimal(toQty));
-                            }else {
-                                invLotLocIdInsert.setQtyallocated(qtyallocated);
-                            }
+                            invLotLocIdInsert.setQtyallocated(new BigDecimal(toQty));
                             invLotLocIdInsert.setQtyallocatedEach(invLotLocIdInsert.getQtyallocated());
                             invLotLocIdService.insertInvLotLocId(invLotLocIdInsert);
                         }
                     }
-
+                    // 更新出库单备货数量
+                    wmsDocOrderHeaderService.modifystockCompletionStatus(orderNo,sku,new BigDecimal(toQty));
                 }
 
             }
         }
-//        }
         // 更新托盘
         WmsBoxInfo boxFrom = wmsBoxInfoService.selectWmsBoxInfoByBoxNo(groupDiskFrom.getPalletNoTo());
         boxFrom.setIsFull(groupDiskFrom.getIsFull());