Browse Source

入库码盘:
1.备货验证出库单接受数
2.备货修改出库单备货数
3.备货生成的库存直接完全分配

k 2 years ago
parent
commit
a33b66e3b3

+ 35 - 61
warewms-ams/src/main/java/com/ruoyi/ams/asn/service/impl/WmsDocAsnHeaderServiceImpl.java

@@ -282,7 +282,6 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
         Long STAGE01 = Constant.LOC_STAGE_CACHE;
         Long STAGE01 = Constant.LOC_STAGE_CACHE;
         WmsDocOrderHeader wmsDocOrderHeader;
         WmsDocOrderHeader wmsDocOrderHeader;
         List<WmsDocOrderDetails> orderDetails = new ArrayList<>();
         List<WmsDocOrderDetails> orderDetails = new ArrayList<>();
-        Map<String, List<WmsDocOrderDTO>> orderMap = new HashMap<>();
 
 
         //查询托盘是否存在,生成托盘绑定信息
         //查询托盘是否存在,生成托盘绑定信息
         WmsBoxInfo wmsBoxInfo = new WmsBoxInfo();
         WmsBoxInfo wmsBoxInfo = new WmsBoxInfo();
@@ -321,32 +320,36 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
         //当前订单总数
         //当前订单总数
         BigDecimal totalQty = new BigDecimal(stockForm.getQty());
         BigDecimal totalQty = new BigDecimal(stockForm.getQty());
 
 
-        //备货入库
-        if (stockForm.getStockTag().equals("Y") && StringUtils.isEmpty(stockForm.getOrderNo())) {
-            return AjaxResult.error("备货必须选择出库单号");
+        // 不同的产品类型不允许放一个托盘上
+        boolean isSameType = checkSameTypeByPalletNo(stockForm.getPalletNo(), codeSkuRelationshipVO.getSku());
+        if (!isSameType) {
+            throw new ServiceException("不同的产品类型不允许放一个托盘上");
+        }
+
+        // 成品数量默认为1
+        if (codeSkuRelationshipVO.isProduct()) {
+            stockForm.setQty(BigDecimal.ONE.toString());
+            totalQty = BigDecimal.ONE;
         }
         }
-        //校验出库单
+
+        // 匹配出库单 计算备货数量是否已经超出出库单可分配数量
         if (stockForm.getStockTag().equals("Y")) {
         if (stockForm.getStockTag().equals("Y")) {
             //查询出库单
             //查询出库单
             wmsDocOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(stockForm.getOrderNo());
             wmsDocOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(stockForm.getOrderNo());
-            if (wmsDocOrderHeader == null) {
-                return AjaxResult.error("出库单不存在");
-            }
-            if (wmsDocOrderHeader.getOrderStatus().equals("90") || wmsDocOrderHeader.getOrderStatus().equals("98") || wmsDocOrderHeader.getOrderStatus().equals("99")) {
-                return AjaxResult.error("出库单已完成");
+            if (wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS99.getValue())
+                    || wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS90.getValue())
+                    || wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS23.getValue())) {
+                return AjaxResult.error("出库单已完成,不可备货!");
             }
             }
             //每个托盘只允许码一个出库单
             //每个托盘只允许码一个出库单
-            InvLotAtt queryAtt = new InvLotAtt();
-            queryAtt.setLotatt14(stockForm.getOrderNo());
-            queryAtt.setLotatt07(stockForm.getPalletNo());
-            List<InvLotLocId> invList = invLotLocIdService.queryInvByInvLotatt(queryAtt);
-            if (invList != null && invList.size() > 1) {
-                throw new ServiceException("每个托盘只允许码一个出库单");
+            AjaxResult ajaxResult = invLotLocIdService.checkPalletIsOnlyOrderNo(stockForm.getPalletNo(), wmsDocOrderHeader.getOrderNo());
+            if (!ajaxResult.isSuccess()) {
+                return ajaxResult;
             }
             }
 
 
             orderDetails = wmsDocOrderHeader.getWmsDocOrderDetailsList();
             orderDetails = wmsDocOrderHeader.getWmsDocOrderDetailsList();
 
 
-            //匹配出库单
+            //匹配出库单,根据sku统计可分配的数量
             BigDecimal orderQty = BigDecimal.ZERO;
             BigDecimal orderQty = BigDecimal.ZERO;
             for (WmsDocOrderDetails de : orderDetails) {
             for (WmsDocOrderDetails de : orderDetails) {
                 if (!de.getSku().equals(codeSkuRelationshipVO.getSku())) {
                 if (!de.getSku().equals(codeSkuRelationshipVO.getSku())) {
@@ -355,43 +358,16 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
                 if (de.getQtyOrdered().compareTo(de.getQtyAllocated()) == 1) {
                 if (de.getQtyOrdered().compareTo(de.getQtyAllocated()) == 1) {
                     BigDecimal current = de.getQtyOrdered().subtract(de.getQtyAllocated());
                     BigDecimal current = de.getQtyOrdered().subtract(de.getQtyAllocated());
                     orderQty = orderQty.add(current);
                     orderQty = orderQty.add(current);
-                    List<WmsDocOrderDTO> list = orderMap.get(de.getSku());
-                    if (list == null) {
-                        list = new ArrayList<>();
-                    }
-                    WmsDocOrderDTO orderDTO = new WmsDocOrderDTO();
-                    orderDTO.setOrderNo(de.getOrderNo());
-                    orderDTO.setOrderLineNo(de.getOrderLineNo().longValue());
-                    orderDTO.setQty(current);
-                    list.add(orderDTO);
-                    orderMap.put(de.getSku(), list);
-                    if (orderQty.compareTo(totalQty) == 0) {
-                        break;
-                    }
                 }
                 }
             }
             }
-
-            if (orderQty.compareTo(BigDecimal.ZERO) != 1 || orderQty.compareTo(new BigDecimal(stockForm.getQty())) == -1) {
+            //可分配数量小于传入数量
+            if (orderQty.compareTo(new BigDecimal(stockForm.getQty())) == -1) {
                 return AjaxResult.error("接收数超出出货单需求数量");
                 return AjaxResult.error("接收数超出出货单需求数量");
             }
             }
-
-            wmsDocOrderHeader.setUserdefine1("Stock");
-            wmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader);
         }
         }
 
 
-        // 不同的产品类型不允许放一个托盘上
-        boolean isSameType = checkSameTypeByPalletNo(stockForm.getPalletNo(), codeSkuRelationshipVO.getSku());
-        if (!isSameType) {
-            throw new ServiceException("不同的产品类型不允许放一个托盘上");
-        }
-
-        // 成品数量默认为1
-        if (codeSkuRelationshipVO.isProduct()) {
-            stockForm.setQty(BigDecimal.ONE.toString());
-            totalQty = BigDecimal.ONE;
-        }
 
 
-        //匹配对应的入库单,出库单
+        //匹配对应的入库单
         if (stockForm.getAsnNo() != null && stockForm.getAsnNo().size() > 0) {
         if (stockForm.getAsnNo() != null && stockForm.getAsnNo().size() > 0) {
             List<WmsDocAsnDetails> list = wmsDocAsnDetailsMapper.selectDetailsListByAsnNos(stockForm.getAsnNo(), codeSkuRelationshipVO.getSku());
             List<WmsDocAsnDetails> list = wmsDocAsnDetailsMapper.selectDetailsListByAsnNos(stockForm.getAsnNo(), codeSkuRelationshipVO.getSku());
             if (list == null || list.size() == 0) {
             if (list == null || list.size() == 0) {
@@ -453,16 +429,6 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
                             } else {
                             } else {
                                 throw new ServiceException("更新接收数失败");
                                 throw new ServiceException("更新接收数失败");
                             }
                             }
-                            if (!StringUtils.isEmpty(stockForm.getOrderNo())) {
-                                //绑定对应入库单号 todo 这边修改了个寂寞
-                                WmsDocAsnDetails updateDetails = new WmsDocAsnDetails();
-                                updateDetails.setAsnNo(details.getAsnNo());
-                                updateDetails.setAsnLineNo(details.getAsnLineNo());
-                                updateDetails.setUpdateTime(new Date());
-                                updateDetails.setUpdateBy(loginUser.getUsername());
-                                wmsDocAsnDetailsMapper.updateWmsDocAsnDetails(updateDetails);
-                            }
-
                             //修改头单状态
                             //修改头单状态
                             WmsDocAsnDetails detailsQuery = new WmsDocAsnDetails();
                             WmsDocAsnDetails detailsQuery = new WmsDocAsnDetails();
                             detailsQuery.setAsnNo(details.getAsnNo());
                             detailsQuery.setAsnNo(details.getAsnNo());
@@ -480,18 +446,26 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
                             headerUpdate.setUpdateTime(new Date());
                             headerUpdate.setUpdateTime(new Date());
                             wmsDocAsnHeaderMapper.updateWmsDocAsnHeader(headerUpdate);
                             wmsDocAsnHeaderMapper.updateWmsDocAsnHeader(headerUpdate);
 
 
+                            if (stockForm.getStockTag().equals("Y")) {
+                                // 匹配对应出库单 修改出库单备货数量
+                                wmsDocOrderHeaderService.modifystockCompletionStatusAsn(stockForm.getOrderNo(), codeSkuRelationshipVO.getSku(), current);
+                            }
+
                             //生成库存
                             //生成库存
                             LotattDTO lotattDTO = new LotattDTO();
                             LotattDTO lotattDTO = new LotattDTO();
-//                            if (codeSkuRelationshipVO.isProduct()) {
                             lotattDTO.setLotatt02(stockForm.getSkuSn());
                             lotattDTO.setLotatt02(stockForm.getSkuSn());
-//                            }
                             lotattDTO.setLotatt05("90");
                             lotattDTO.setLotatt05("90");
                             lotattDTO.setLotatt07(stockForm.getPalletNo());
                             lotattDTO.setLotatt07(stockForm.getPalletNo());
                             lotattDTO.setLotatt08(details.getAsnNo());
                             lotattDTO.setLotatt08(details.getAsnNo());
                             lotattDTO.setLotatt12("Y");
                             lotattDTO.setLotatt12("Y");
                             lotattDTO.setLotatt13(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD));
                             lotattDTO.setLotatt13(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD));
-                            lotattDTO.setLotatt14(stockForm.getOrderNo());
-                            invLotLocIdService.initInv(STAGE01.toString(), codeSkuRelationshipVO.getSku(), Constant.CUSTOMER_ID, current.doubleValue(), lotattDTO, BigDecimal.ZERO);
+                            if (stockForm.getStockTag().equals("Y")) {
+                                lotattDTO.setLotatt14(stockForm.getOrderNo());
+                                // 生成完全分配的库存
+                                invLotLocIdService.initInv(STAGE01.toString(), codeSkuRelationshipVO.getSku(), Constant.CUSTOMER_ID, current.doubleValue(), lotattDTO, current);
+                            }else {
+                                invLotLocIdService.initInv(STAGE01.toString(), codeSkuRelationshipVO.getSku(), Constant.CUSTOMER_ID, current.doubleValue(), lotattDTO, BigDecimal.ZERO);
+                            }
                         } else {
                         } else {
                             break;
                             break;
                         }
                         }

+ 21 - 0
warewms-ams/src/main/java/com/ruoyi/ams/inv/service/IInvLotLocIdService.java

@@ -203,6 +203,18 @@ public interface IInvLotLocIdService {
      */
      */
     String initInv(String locationFrom, String sku, String customerId, Double qty, LotattDTO lotattDTO, BigDecimal qtyallocated);
     String initInv(String locationFrom, String sku, String customerId, Double qty, LotattDTO lotattDTO, BigDecimal qtyallocated);
 
 
+    /**
+     * 初始化库存 完全分配
+     *
+     * @param locationFrom
+     * @param sku
+     * @param customerId
+     * @param qty
+     * @param lotattDTO
+     * @return
+     */
+    String initInvAllAct(String locationFrom, String sku, String customerId, Double qty, LotattDTO lotattDTO);
+
     /**
     /**
      * 初始化库存
      * 初始化库存
      *
      *
@@ -312,4 +324,13 @@ public interface IInvLotLocIdService {
      * 2,释放其余库位,直接清空库位
      * 2,释放其余库位,直接清空库位
      */
      */
     AjaxResult releaseLocation(String locationFrom, Long warehouseId, String updateBy);
     AjaxResult releaseLocation(String locationFrom, Long warehouseId, String updateBy);
+
+    /**
+     * 备货组盘的时候,一个托盘只能备货一个出库单
+     *
+     * @param palletNo
+     * @param orderNo
+     * @return false代表托盘上已经备货了出库单
+     */
+    AjaxResult checkPalletIsOnlyOrderNo(String palletNo,String orderNo);
 }
 }

+ 75 - 6
warewms-ams/src/main/java/com/ruoyi/ams/inv/service/impl/InvLotLocIdServiceImpl.java

@@ -531,12 +531,64 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
             invLotLocId.setSku(sku);
             invLotLocId.setSku(sku);
             invLotLocId.setCustomerId(customerId);
             invLotLocId.setCustomerId(customerId);
             invLotLocId.setQty(new BigDecimal(qty));
             invLotLocId.setQty(new BigDecimal(qty));
-//            invLotLocId.setQtyEach(new BigDecimal(qty));
-//            invLotLocId.setQtyallocated(qtyallocated);
-//            invLotLocId.setQtyallocatedEach(qtyallocated);
-            invLotLocId.setQtyEach(new BigDecimal(0));
-            invLotLocId.setQtyallocated(new BigDecimal(0));
-            invLotLocId.setQtyallocatedEach(new BigDecimal(0));
+            invLotLocId.setQtyEach(new BigDecimal(qty));
+            invLotLocId.setQtyallocated(qtyallocated);
+            invLotLocId.setQtyallocatedEach(qtyallocated);
+//            invLotLocId.setQtyEach(new BigDecimal(0));
+//            invLotLocId.setQtyallocated(new BigDecimal(0));
+//            invLotLocId.setQtyallocatedEach(new BigDecimal(0));
+            invLotLocId.setQtypa(BigDecimal.ZERO);
+            invLotLocId.setQtyrpin(BigDecimal.ZERO);
+            invLotLocId.setCreateTime(new Date());
+            invLotLocIdMapper.insertInvLotLocId(invLotLocId);
+//        }
+
+        BaseLocationInfo baseLocationInfo = new BaseLocationInfo();
+        baseLocationInfo.setId(Long.parseLong(locationFrom));
+        baseLocationInfo.setIsEmpty("N");
+        baseLocationInfoService.updateBaseLocationInfo(baseLocationInfo);
+        return lotnum;
+    }
+
+    @Transactional
+    @Override
+    public String initInvAllAct(String locationFrom, String sku, String customerId, Double qty, LotattDTO lotattDTO) {
+        InvLotAtt invLotAtt = new InvLotAtt();
+        BeanUtils.copyProperties(lotattDTO, invLotAtt);
+        invLotAtt.setCustomerId(customerId);
+        invLotAtt.setSku(sku);
+        //查询lotatt是否存在
+        String lotnum;
+        // todo 注释掉的可能以后会用到,物料码盘的时候同sku批次都是一样的,所以需要在原有库存上进行累加。
+//        List<InvLotAtt> queryList = invLotAttMapper.selectInvLotAttList(invLotAtt);
+        List<InvLotAtt> queryList = new ArrayList<>();
+//        if (queryList != null && queryList.size() > 0) {
+        if (false) {
+            invLotAtt = queryList.get(0);
+            lotnum = invLotAtt.getLotnum();
+        } else {
+            lotnum = idSequenceUtils.generateId("LOTNUMBER");
+            invLotAtt.setLotnum(lotnum);
+            invLotAtt.setSku(sku);
+            invLotAtt.setCustomerId(customerId);
+            invLotAtt.setCreateTime(DateUtils.getNowDate());
+            invLotAttMapper.insertInvLotAtt(invLotAtt);
+        }
+//        InvLotLocId query = invLotLocIdMapper.selectInvLotLocIdByKey(lotnum, locationFrom, customerId, sku);
+//        if (query != null) {
+//            query.setQty(query.getQty().add(BigDecimal.valueOf(qty)));
+//            query.setQtyEach(query.getQty());
+//            invLotLocIdService.updateInvLotLocId(query);
+//        } else {
+            InvLotLocId invLotLocId = new InvLotLocId();
+            invLotLocId.setLotnum(lotnum);
+            invLotLocId.setLocationId(locationFrom);
+            invLotLocId.setSku(sku);
+            invLotLocId.setCustomerId(customerId);
+            invLotLocId.setQty(new BigDecimal(qty));
+            invLotLocId.setQtyEach(invLotLocId.getQty());
+            invLotLocId.setQtyallocated(invLotLocId.getQty());
+            invLotLocId.setQtyallocatedEach(invLotLocId.getQty());
             invLotLocId.setQtypa(BigDecimal.ZERO);
             invLotLocId.setQtypa(BigDecimal.ZERO);
             invLotLocId.setQtyrpin(BigDecimal.ZERO);
             invLotLocId.setQtyrpin(BigDecimal.ZERO);
             invLotLocId.setCreateTime(new Date());
             invLotLocId.setCreateTime(new Date());
@@ -767,4 +819,21 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         //释放库位状态
         //释放库位状态
         return AjaxResult.success("操作成功");
         return AjaxResult.success("操作成功");
     }
     }
+
+    @Override
+    public AjaxResult checkPalletIsOnlyOrderNo(String palletNo, String orderNo) {
+        InvLocIdSearchFrom invLocIdSearchFrom = new InvLocIdSearchFrom();
+        invLocIdSearchFrom.setLotatt07(palletNo);
+        List<InvLotLocIdLotattVO> invLotLocIdLotattVOS = invLotLocIdService.selectInvLocIdLotattList(invLocIdSearchFrom);
+        if(invLotLocIdLotattVOS.size() == 0){
+            return AjaxResult.success();
+        }
+        for (InvLotLocIdLotattVO invLotLocIdLotattVO : invLotLocIdLotattVOS) {
+            String lotatt14 = StringUtils.isEmpty(invLotLocIdLotattVO.getLotatt14())?"":invLotLocIdLotattVO.getLotatt14();
+            if (!lotatt14.equals(orderNo) || StringUtils.isEmpty(lotatt14)) {
+                return AjaxResult.error("托盘已经存在不是此出库单备货的库存!");
+            }
+        }
+        return AjaxResult.success();
+    }
 }
 }

+ 22 - 1
warewms-ams/src/main/java/com/ruoyi/ams/order/service/IWmsDocOrderHeaderService.java

@@ -1,5 +1,6 @@
 package com.ruoyi.ams.order.service;
 package com.ruoyi.ams.order.service;
 
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.List;
 
 
 import com.ruoyi.ams.erp.domain.ErpOrderList;
 import com.ruoyi.ams.erp.domain.ErpOrderList;
@@ -290,10 +291,30 @@ public interface IWmsDocOrderHeaderService {
     AjaxResult modifyTheTallyStatusInTheWarehouse(String orderNo, Long locationId, String palletNo);
     AjaxResult modifyTheTallyStatusInTheWarehouse(String orderNo, Long locationId, String palletNo);
 
 
     /**
     /**
-     * 修改备货回库完成状态
+     * 修改备货单备货状态
      *
      *
      * @return
      * @return
      */
      */
     AjaxResult modifystockCompletionStatus(String palletNo);
     AjaxResult modifystockCompletionStatus(String palletNo);
 
 
+    /**
+     * 修改备货单备货状态
+     *
+     * @param orderNo
+     * @param sku
+     * @param qty
+     * @return
+     */
+    AjaxResult modifystockCompletionStatus(String orderNo, String sku, BigDecimal qty);
+
+    /**
+     * 入库备货修改备货单备货状态
+     *
+     * @param orderNo
+     * @param sku
+     * @param qty
+     * @return
+     */
+    AjaxResult modifystockCompletionStatusAsn(String orderNo, String sku, BigDecimal qty);
+
 }
 }

+ 129 - 5
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/WmsDocOrderHeaderServiceImpl.java

@@ -1392,24 +1392,31 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
                 // 明细
                 // 明细
                 List<WmsDocOrderDetails> wmsDocOrderDetails = wmsDocOrderDetailsMapper.selectWmsDocOrderDetailsByOrderNo(orderNo);
                 List<WmsDocOrderDetails> wmsDocOrderDetails = wmsDocOrderDetailsMapper.selectWmsDocOrderDetailsByOrderNo(orderNo);
                 for (WmsDocOrderDetails wmsDocOrderDetail : wmsDocOrderDetails) {
                 for (WmsDocOrderDetails wmsDocOrderDetail : wmsDocOrderDetails) {
+                    // 部分分配,完全分配
                     if (wmsDocOrderDetail.getLineStatus().equals(Constant.ORDER_STS.STS10.getValue())
                     if (wmsDocOrderDetail.getLineStatus().equals(Constant.ORDER_STS.STS10.getValue())
-                            || wmsDocOrderDetail.getLineStatus().equals(Constant.ORDER_STS.STS20.getValue())
-                            || wmsDocOrderDetail.getLineStatus().equals(Constant.ORDER_STS.STS22.getValue())) {
+                            || wmsDocOrderDetail.getLineStatus().equals(Constant.ORDER_STS.STS20.getValue())) {
                         if (sku.equals(wmsDocOrderDetail.getSku())) {
                         if (sku.equals(wmsDocOrderDetail.getSku())) {
+                            // 多少未备货的
                             BigDecimal toQty = wmsDocOrderDetail.getQtyAllocated().subtract(wmsDocOrderDetail.getQtySoftAllocated());
                             BigDecimal toQty = wmsDocOrderDetail.getQtyAllocated().subtract(wmsDocOrderDetail.getQtySoftAllocated());
+                            if (toQty.compareTo(BigDecimal.ZERO) == 0) {
+                                continue;
+                            }
                             WmsDocOrderDetails detailsUpdate = new WmsDocOrderDetails();
                             WmsDocOrderDetails detailsUpdate = new WmsDocOrderDetails();
                             detailsUpdate.setOrderNo(wmsDocOrderDetail.getOrderNo());
                             detailsUpdate.setOrderNo(wmsDocOrderDetail.getOrderNo());
                             detailsUpdate.setOrderLineNo(wmsDocOrderDetail.getOrderLineNo());
                             detailsUpdate.setOrderLineNo(wmsDocOrderDetail.getOrderLineNo());
                             if (qty.compareTo(toQty) == 0) {
                             if (qty.compareTo(toQty) == 0) {
                                 detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtyAllocated());
                                 detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtyAllocated());
-                                detailsUpdate.setLineStatus(Constant.ORDER_STS.STS23.getValue());
+                                if(wmsDocOrderDetail.getLineStatus().equals(Constant.ORDER_STS.STS20.getValue())) {
+                                    detailsUpdate.setLineStatus(Constant.ORDER_STS.STS23.getValue());
+                                }
                             } else if (qty.compareTo(toQty) == 1) {
                             } else if (qty.compareTo(toQty) == 1) {
                                 qty = qty.subtract(toQty);
                                 qty = qty.subtract(toQty);
                                 detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtyAllocated());
                                 detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtyAllocated());
-                                detailsUpdate.setLineStatus(Constant.ORDER_STS.STS23.getValue());
+                                if(wmsDocOrderDetail.getLineStatus().equals(Constant.ORDER_STS.STS20.getValue())) {
+                                    detailsUpdate.setLineStatus(Constant.ORDER_STS.STS23.getValue());
+                                }
                             } else {
                             } else {
                                 detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtySoftAllocated().add(qty));
                                 detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtySoftAllocated().add(qty));
-                                detailsUpdate.setLineStatus(Constant.ORDER_STS.STS22.getValue());
                             }
                             }
                             wmsDocOrderDetailsMapper.updateWmsDocOrderDetails(detailsUpdate);
                             wmsDocOrderDetailsMapper.updateWmsDocOrderDetails(detailsUpdate);
                             //修改头单状态
                             //修改头单状态
@@ -1434,4 +1441,121 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         }
         }
         return AjaxResult.success();
         return AjaxResult.success();
     }
     }
+
+
+    public AjaxResult modifystockCompletionStatus(String orderNo, String sku, BigDecimal qty) {
+        WmsDocOrderHeader docOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
+        // 明细
+        List<WmsDocOrderDetails> wmsDocOrderDetails = wmsDocOrderDetailsMapper.selectWmsDocOrderDetailsByOrderNo(orderNo);
+        for (WmsDocOrderDetails wmsDocOrderDetail : wmsDocOrderDetails) {
+            // 部分分配,完全分配
+            if (wmsDocOrderDetail.getLineStatus().equals(Constant.ORDER_STS.STS10.getValue())
+                    || wmsDocOrderDetail.getLineStatus().equals(Constant.ORDER_STS.STS20.getValue())) {
+                if (sku.equals(wmsDocOrderDetail.getSku())) {
+                    // 多少未备货的
+                    BigDecimal toQty = wmsDocOrderDetail.getQtyAllocated().subtract(wmsDocOrderDetail.getQtySoftAllocated());
+                    if (toQty.compareTo(BigDecimal.ZERO) == 0) {
+                        continue;
+                    }
+                    WmsDocOrderDetails detailsUpdate = new WmsDocOrderDetails();
+                    detailsUpdate.setOrderNo(wmsDocOrderDetail.getOrderNo());
+                    detailsUpdate.setOrderLineNo(wmsDocOrderDetail.getOrderLineNo());
+                    if (qty.compareTo(toQty) == 0) {
+                        detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtyAllocated());
+                        if(wmsDocOrderDetail.getLineStatus().equals(Constant.ORDER_STS.STS20.getValue())) {
+                            detailsUpdate.setLineStatus(Constant.ORDER_STS.STS23.getValue());
+                        }
+                    } else if (qty.compareTo(toQty) == 1) {
+                        qty = qty.subtract(toQty);
+                        detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtyAllocated());
+                        if(wmsDocOrderDetail.getLineStatus().equals(Constant.ORDER_STS.STS20.getValue())) {
+                            detailsUpdate.setLineStatus(Constant.ORDER_STS.STS23.getValue());
+                        }
+                    } else {
+                        detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtySoftAllocated().add(qty));
+                    }
+                    wmsDocOrderDetailsMapper.updateWmsDocOrderDetails(detailsUpdate);
+                    //修改头单状态
+                    String soStatus = Constant.ORDER_STS.STS23.getValue();
+                    List<WmsDocOrderDetails> wmsDocOrderDetailsList = wmsDocOrderDetailsMapper.selectWmsDocOrderDetailsByOrderNo(orderNo);
+                    for (WmsDocOrderDetails d : wmsDocOrderDetailsList) {
+                        if (!d.getLineStatus().equals(Constant.ORDER_STS.STS23.getValue())) {
+                            soStatus = Constant.ORDER_STS.STS22.getValue();
+                            break;
+                        }
+                    }
+                    WmsDocOrderHeader headerUpdate = new WmsDocOrderHeader();
+                    headerUpdate.setOrderNo(orderNo);
+                    headerUpdate.setOrderStatus(soStatus);
+                    headerUpdate.setUpdateTime(new Date());
+                    wmsDocOrderHeaderMapper.updateWmsDocOrderHeader(headerUpdate);
+                }
+            }
+        }
+
+        return AjaxResult.success();
+    }
+
+    public AjaxResult modifystockCompletionStatusAsn(String orderNo, String sku, BigDecimal qty) {
+        WmsDocOrderHeader docOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
+        // 明细
+        List<WmsDocOrderDetails> wmsDocOrderDetails = wmsDocOrderDetailsMapper.selectWmsDocOrderDetailsByOrderNo(orderNo);
+        for (WmsDocOrderDetails wmsDocOrderDetail : wmsDocOrderDetails) {
+            // 创建状态,部分分配
+            if (wmsDocOrderDetail.getLineStatus().equals(Constant.ORDER_STS.STS00.getValue())
+                    || wmsDocOrderDetail.getLineStatus().equals(Constant.ORDER_STS.STS10.getValue())) {
+                if (sku.equals(wmsDocOrderDetail.getSku())) {
+                    // 多少未分配的
+                    BigDecimal toQty = wmsDocOrderDetail.getQtyOrdered().subtract(wmsDocOrderDetail.getQtyAllocated());
+                    WmsDocOrderDetails detailsUpdate = new WmsDocOrderDetails();
+                    detailsUpdate.setOrderNo(wmsDocOrderDetail.getOrderNo());
+                    detailsUpdate.setOrderLineNo(wmsDocOrderDetail.getOrderLineNo());
+                    // 完全分配
+                    if (qty.compareTo(toQty) == 0) {
+                        detailsUpdate.setQtyAllocated(wmsDocOrderDetail.getQtyAllocated().add(qty));
+                        detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtySoftAllocated().add(qty));
+                        // 如果分配数和备货数一样,备货完成
+                        if (detailsUpdate.getQtyAllocated().compareTo(detailsUpdate.getQtySoftAllocated()) == 0) {
+                            detailsUpdate.setLineStatus(Constant.ORDER_STS.STS23.getValue());
+                        }else {
+                            detailsUpdate.setLineStatus(Constant.ORDER_STS.STS20.getValue());
+                        }
+                     // 完全分配
+                    } else if (qty.compareTo(toQty) == 1) {
+                        qty = qty.subtract(toQty);
+                        detailsUpdate.setQtyAllocated(wmsDocOrderDetail.getQtyAllocated().add(toQty));
+                        detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtySoftAllocated().add(toQty));
+                        // 如果分配数和备货数一样,备货完成
+                        if (detailsUpdate.getQtyAllocated().compareTo(detailsUpdate.getQtySoftAllocated()) == 0) {
+                            detailsUpdate.setLineStatus(Constant.ORDER_STS.STS23.getValue());
+                        }else {
+                            detailsUpdate.setLineStatus(Constant.ORDER_STS.STS20.getValue());
+                        }
+                       // 部分分配
+                    } else {
+                        detailsUpdate.setQtyAllocated(wmsDocOrderDetail.getQtyAllocated().add(qty));
+                        detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtySoftAllocated().add(qty));
+                        detailsUpdate.setLineStatus(Constant.ORDER_STS.STS10.getValue());
+                    }
+                    wmsDocOrderDetailsMapper.updateWmsDocOrderDetails(detailsUpdate);
+                    //修改头单状态
+                    String soStatus = Constant.ORDER_STS.STS23.getValue();
+                    List<WmsDocOrderDetails> wmsDocOrderDetailsList = wmsDocOrderDetailsMapper.selectWmsDocOrderDetailsByOrderNo(orderNo);
+                    for (WmsDocOrderDetails d : wmsDocOrderDetailsList) {
+                        if (!d.getLineStatus().equals(Constant.ORDER_STS.STS23.getValue())) {
+                            soStatus = Constant.ORDER_STS.STS22.getValue();
+                            break;
+                        }
+                    }
+                    WmsDocOrderHeader headerUpdate = new WmsDocOrderHeader();
+                    headerUpdate.setOrderNo(orderNo);
+                    headerUpdate.setOrderStatus(soStatus);
+                    headerUpdate.setUpdateTime(new Date());
+                    wmsDocOrderHeaderMapper.updateWmsDocOrderHeader(headerUpdate);
+                }
+            }
+        }
+
+        return AjaxResult.success();
+    }
 }
 }

+ 1 - 0
warewms-ams/src/main/java/com/ruoyi/ams/task/service/impl/WcsTaskServiceImpl.java

@@ -223,6 +223,7 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
                 break;
                 break;
             // 回库 (托盘)
             // 回库 (托盘)
             case "9":
             case "9":
+                // 修改备货单完成状态
                 wmsDocOrderHeaderService.modifystockCompletionStatus(wcsTask.getExt5());
                 wmsDocOrderHeaderService.modifystockCompletionStatus(wcsTask.getExt5());
                 break;
                 break;
             default:
             default:

File diff suppressed because it is too large
+ 30 - 3
warewms-ams/src/main/resources/mapper/docOrder/WmsDocOrderHeaderMapper.xml