Ver código fonte

PDA备货反拣出库

k 1 ano atrás
pai
commit
d00efdc9ad

+ 20 - 3
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/pda/PdaController.java

@@ -235,9 +235,9 @@ public class PdaController {
             if (flowConfigHeaderVO.getFlowType().equals("ASN")) {
                 PaForm paForm = new PaForm();
                 paForm.setPalletNo(lform.getPalletNo());
-                if(lineCallForm.getFlowId().intValue() == 5) {
+                if (lineCallForm.getFlowId().intValue() == 5) {
                     paForm.setLocationFrom(Constant.LOC_STAGE_CACHE.toString());
-                }else {
+                } else {
                     paForm.setLocationFrom(Constant.LOC_SORTATION_CACHE.toString());
                 }
                 paForm.setLocationTo(lform.getLocationFrom());
@@ -416,7 +416,7 @@ public class PdaController {
             stockingDetail.setQty(wmsDocAsnDetails.getExpectedQty().toString());
             if (wmsDocAsnDetails.getReceivedQty().compareTo(BigDecimal.ZERO) == 0) {
                 stockingDetail.setReceivingQty("0");
-            }else {
+            } else {
                 stockingDetail.setReceivingQty(wmsDocAsnDetails.getReceivedQty().toString());
             }
             stockingDetailList.add(stockingDetail);
@@ -522,6 +522,23 @@ public class PdaController {
         return AjaxResult.success(checkOutVOList);
     }
 
+    /**
+     * PDA备货反拣出库
+     * 查询备货单所有托盘上有不属于当前备货库存的托盘
+     *
+     * @return
+     */
+    @GetMapping("/docOrder/checkOutListBhGx")
+    public AjaxResult checkOutListBhGx(@RequestParam String orderNos) {
+        List<String> orderList = JSONArray.parseArray(orderNos, String.class);
+        List<String> orderNoList = wmsDocOrderHeaderService.changeErpNoToOrderNo(orderList);
+        if (orderNoList.size() == 0) {
+            return AjaxResult.error("请扫描正确的出库单号");
+        }
+        List<CheckOutVO> checkOutVOList = wmsDocOrderHeaderService.checkOutListBhGx(orderNoList);
+        return AjaxResult.success(checkOutVOList);
+    }
+
     /**
      * 物料拉动(出库)
      *

+ 19 - 0
warewms-ams/src/main/java/com/ruoyi/ams/order/service/IWmsDocOrderHeaderService.java

@@ -4,6 +4,7 @@ import java.math.BigDecimal;
 import java.util.List;
 
 import com.ruoyi.ams.erp.domain.ErpOrderList;
+import com.ruoyi.ams.inv.domain.vo.InvLotLocIdLotattVO;
 import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
 import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
 import com.ruoyi.ams.order.form.*;
@@ -187,6 +188,15 @@ public interface IWmsDocOrderHeaderService {
      */
     List<CheckOutVO> checkOutListBh(List<String> orderNoList);
 
+    /**
+     * PDA备货反拣出库
+     * 查询备货单所有托盘上有不属于当前备货库存的托盘
+     *
+     * @param orderNoList
+     * @return
+     */
+    List<CheckOutVO> checkOutListBhGx(List<String> orderNoList);
+
     /**
      * 物料拉动
      *
@@ -256,6 +266,15 @@ public interface IWmsDocOrderHeaderService {
      */
     AjaxResult invTally(InvTallyForm invTallyForm);
 
+    /**
+     * 库内理货单生成(PDA备货反拣出库)
+     *
+     * @param invLotLocIdLotattVOList
+     * @param orderNoBh
+     * @return
+     */
+    AjaxResult invTally(List<InvLotLocIdLotattVO> invLotLocIdLotattVOList, String orderNoBh);
+
     /**
      * 取消订单
      *

+ 94 - 2
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/WmsDocOrderHeaderServiceImpl.java

@@ -895,6 +895,58 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         return endCheckOutVOList;
     }
 
+    @Override
+    public List<CheckOutVO> checkOutListBhGx(List<String> orderNoList) {
+        List<CheckOutVO> endCheckOutVOList = new ArrayList<>();
+        Set<String> locationSet = new HashSet<>();
+        for (String orderNo : orderNoList) {
+            WmsDocOrderHeader wmsDocOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
+            if (!wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())) {
+                log.error("出库单类型必须为备货!" + wmsDocOrderHeader.getSoReference1());
+                return endCheckOutVOList;
+            }
+        }
+        for (String orderNo : orderNoList) {
+            WmsDocOrderHeader wmsDocOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
+            Set<String> pallets = new HashSet<>();
+            InvLocIdSearchFrom invLocIdSearchFrom = new InvLocIdSearchFrom();
+            invLocIdSearchFrom.setLotatt14(orderNo);
+            List<InvLotLocIdLotattVO> invLotLocIdLotattVOList = invLotLocIdService.selectInvLocIdLotattList(invLocIdSearchFrom);
+            for (InvLotLocIdLotattVO invLotLocIdLotattVO : invLotLocIdLotattVOList) {
+                pallets.add(invLotLocIdLotattVO.getLotatt07());
+            }
+            // 生成理货单的库存
+            List<InvLotLocIdLotattVO> endLocIdLotattVOList = new ArrayList<>();
+            for (String pallet : pallets) {
+                InvLocIdSearchFrom invLocIdSearch = new InvLocIdSearchFrom();
+                invLocIdSearchFrom.setLotatt07(pallet);
+                List<InvLotLocIdLotattVO> invLotLocIdLotattList = invLotLocIdService.selectInvLocIdLotattList(invLocIdSearch);
+                for (InvLotLocIdLotattVO v : invLotLocIdLotattList) {
+                    // 库存数量和分配数量不相等 或者 库存绑定备货单位空 代表更新备货减少影响到的托盘
+                    if (v.getQty().compareTo(v.getQtyallocated()) != 0 || StringUtils.isEmpty(v.getLotatt14())) {
+                        // 出库托盘需要位空闲,有货状态并且托盘在仓储区
+                        if (v.getStockStatus().equals(Constant.STOCK_STATUS.STOCK00.getValue())
+                                && v.getIsEmpty().equals(Constant.IS_YES.N.name())
+                                && v.getZoneId().equals(Constant.ZONE_TYPE.ZONE_INV.getValue().toString())) {
+                            if (!locationSet.contains(v.getLocationNo())) {
+                                CheckOutVO checkOutVO = new CheckOutVO();
+                                checkOutVO.setOrderNo(wmsDocOrderHeader.getSoReference1());
+                                checkOutVO.setLocationNo(v.getLocationNo());
+                                checkOutVO.setPalletNo(v.getLotatt07());
+                                endCheckOutVOList.add(checkOutVO);
+                                locationSet.add(v.getLocationNo());
+                            }
+                            endLocIdLotattVOList.add(v);
+                        }
+                    }
+                }
+            }
+            // 生成理货单
+            wmsDocOrderHeaderService.invTally(endLocIdLotattVOList, orderNo);
+        }
+        return endCheckOutVOList;
+    }
+
     @Transactional(propagation = Propagation.REQUIRES_NEW)
     @Override
     public AjaxResult doCheckout(CheckOutInfoForm check) {
@@ -1164,7 +1216,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
     private int judgmentOfGroupPlateType(InvLotLocIdLotattVO locIdLotattVO) {
         // 为空说明是备货出库,但是被更新备货流程改变了分配数
         if (StringUtils.isEmpty(locIdLotattVO.getLotatt15())
-                &&StringUtils.isNotEmpty(locIdLotattVO.getLotatt14())) {
+                && StringUtils.isNotEmpty(locIdLotattVO.getLotatt14())) {
             return 3;
         }
         if (StringUtils.isEmpty(locIdLotattVO.getLotatt15())) {
@@ -1491,7 +1543,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
             // 满托不可理货
             if (StringUtils.isNotEmpty(locIdLotattVO.getIsFull())
                     && locIdLotattVO.getIsFull().equals(Constant.IS_YES.Y.getValue())) {
-                return AjaxResult.error("不可选择满托物料!库位号:" + locIdLotattVO.getLocationNo());
+//                return AjaxResult.error("不可选择满托物料!库位号:" + locIdLotattVO.getLocationNo());
             }
             // 已经分配的库存不可理货
             if (StringUtils.isNotEmpty(locIdLotattVO.getLotatt15())) {
@@ -1549,6 +1601,46 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         return AjaxResult.success("操作成功");
     }
 
+    @Transactional
+    @Override
+    public AjaxResult invTally(List<InvLotLocIdLotattVO> invLotLocIdLotattVOList, String orderNoBh) {
+        List<InvLotLocIdLotattVO> endInvList = new ArrayList<>(); //最终操作的库存
+        // 校验
+        for (InvLotLocIdLotattVO invLotLocIdLotattVO : invLotLocIdLotattVOList) {
+            endInvList.add(invLotLocIdLotattVO);
+        }
+        if (endInvList.size() == 0) {
+            return AjaxResult.error("可操作库存条数为0!");
+        }
+        // 判断之前是否已经生成
+        String orderNo = "";
+        WmsDocOrderHeader wmsDocOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByErpNo(orderNoBh);
+        if (wmsDocOrderHeader == null) {
+            //生成出库单
+            LoginUser loginUser = SecurityUtils.getLoginUser();
+            orderNo = idSequenceUtils.generateId("ORDERNO");
+            WmsDocOrderHeader header = new WmsDocOrderHeader();
+            header.setCustomerId(Constant.CUSTOMER_ID);
+            header.setOrderType(Constant.ORDER_TYP.LH.getValue());
+            header.setOrderStatus(Constant.ORDER_STS.STS20.getValue());
+            header.setSoReference1(orderNoBh);
+            header.setCreateBy(loginUser.getUsername());
+            header.setCreateTime(new Date());
+            header.setRemark("PDA备货反拣货出库生成的库内理货单,此单据没有明细!");
+            int result = wmsDocOrderHeaderService.insertWmsDocOrderHeader(header, orderNo);
+            if (result <= 0) {
+                return AjaxResult.error("生成出库单头失败!");
+            }
+        } else {
+            orderNo = wmsDocOrderHeader.getOrderNo();
+        }
+        for (InvLotLocIdLotattVO inv : endInvList) {
+            //库位对应所有库存lotatt15记录分配出库单号
+            invLotLocIdService.updateLotatt15ByLocationId(inv.getLocationId().toString(), orderNo);
+        }
+        return AjaxResult.success("操作成功");
+    }
+
     @Transactional
     @Override
     public AjaxResult cancelOrder(WmsDocOrderHeader header) {