Преглед на файлове

pda出库流程测试->分配测试->出库执行 + bug修改+代码完善。

k преди 2 години
родител
ревизия
0a9e9d2d3c

+ 71 - 70
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/pda/PdaController.java

@@ -95,6 +95,53 @@ public class PdaController {
 
     /*************************************************入库-START****************************************************/
 
+    /**
+     * 入库码盘
+     *
+     * @param stockForm
+     * @return
+     */
+    @PostMapping("/docAsn/stock")
+    @Log(title = "码盘", businessType = BusinessType.INSERT)
+    public AjaxResult stock(@RequestBody StockForm stockForm) {
+        if (stockForm.getStockTag().equals("Y") && StringUtils.isEmpty(stockForm.getOrderNo())) {
+            return AjaxResult.error("码盘备货必须输入出库单号");
+        }
+        return wmsDocAsnHeaderService.doStock(stockForm);
+    }
+
+    /**
+     * 条码检测
+     *
+     * @param snCheckForm
+     * @return 根据入库单和条码查询出未码盘的信息,入库单数量-已码盘数量
+     */
+    @PostMapping("/docAsn/snCheck")
+    public AjaxResult snCheck(@Validated @RequestBody SnCheckForm snCheckForm) {
+        CodeSkuRelationshipVO codeSkuRelationshipVO = wmsDocAsnHeaderService.searchSn(snCheckForm);
+        return AjaxResult.success(codeSkuRelationshipVO);
+    }
+
+    /**
+     * PDA上架
+     *
+     * @param paForm
+     * @return
+     */
+    @PostMapping("/docAsn/doPa")
+    public AjaxResult doPa(@RequestBody PaForm paForm) {
+        if (StringUtils.isEmpty(paForm.getPalletNo())) {
+            return AjaxResult.error("托盘号不能为空");
+        }
+        if (StringUtils.isEmpty(paForm.getLocationFrom())) {
+            return AjaxResult.error("起始库位不能为空");
+        }
+        if (StringUtils.isEmpty(paForm.getLocationTo())) {
+            return AjaxResult.error("目标库位不能为空");
+        }
+        return wmsDocAsnHeaderService.doPa(paForm);
+    }
+
     /**
      * 物料拉动通用
      *
@@ -165,53 +212,6 @@ public class PdaController {
         return businessService.agvCall(flowConfigHeaderVO, list);
     }
 
-    /**
-     * 入库码盘
-     *
-     * @param stockForm
-     * @return
-     */
-    @PostMapping("/docAsn/stock")
-    @Log(title = "码盘", businessType = BusinessType.INSERT)
-    public AjaxResult stock(@RequestBody StockForm stockForm) {
-        if (stockForm.getStockTag().equals("Y") && StringUtils.isEmpty(stockForm.getOrderNo())) {
-            return AjaxResult.error("码盘备货必须输入出库单号");
-        }
-        return wmsDocAsnHeaderService.doStock(stockForm);
-    }
-
-    /**
-     * 条码检测
-     *
-     * @param snCheckForm
-     * @return 根据入库单和条码查询出未码盘的信息,入库单数量-已码盘数量
-     */
-    @PostMapping("/docAsn/snCheck")
-    public AjaxResult snCheck(@Validated @RequestBody SnCheckForm snCheckForm) {
-        CodeSkuRelationshipVO codeSkuRelationshipVO = wmsDocAsnHeaderService.searchSn(snCheckForm);
-        return AjaxResult.success(codeSkuRelationshipVO);
-    }
-
-    /**
-     * PDA上架
-     *
-     * @param paForm
-     * @return
-     */
-    @PostMapping("/docAsn/doPa")
-    public AjaxResult doPa(@RequestBody PaForm paForm) {
-        if (StringUtils.isEmpty(paForm.getPalletNo())) {
-            return AjaxResult.error("托盘号不能为空");
-        }
-        if (StringUtils.isEmpty(paForm.getLocationFrom())) {
-            return AjaxResult.error("起始库位不能为空");
-        }
-        if (StringUtils.isEmpty(paForm.getLocationTo())) {
-            return AjaxResult.error("目标库位不能为空");
-        }
-        return wmsDocAsnHeaderService.doPa(paForm);
-    }
-
     /**
      * 查询备货绑定
      *
@@ -299,6 +299,30 @@ public class PdaController {
 
     /*************************************************出库-START****************************************************/
 
+    /**
+     * 出库单分配
+     *
+     * @return
+     */
+    @PostMapping("/docOrder/doAllocation")
+    public AjaxResult doAllocation(@RequestParam String orderNos) {
+        List<String> orderList = JSONArray.parseArray(orderNos, String.class);
+        return wmsDocOrderHeaderService.doAllocation(orderList);
+    }
+
+    /**
+     * 查询出库分配列表
+     *
+     * @return
+     */
+    @GetMapping("/docOrder/checkOutList")
+    public AjaxResult checkOutList(@RequestParam String orderNos) {
+        List<String> orderList = JSONArray.parseArray(orderNos, String.class);
+        // 查询出库分配列表
+        List<CheckOutVO> checkOutVOList = wmsDocOrderHeaderService.checkOutList(orderList);
+        return AjaxResult.success(checkOutVOList);
+    }
+
     /**
      * 物料拉动(出库)
      *
@@ -331,29 +355,6 @@ public class PdaController {
         return wmsDocOrderHeaderService.arrangeStock(arrangeStockForm);
     }
 
-    /**
-     * 出库单分配
-     *
-     * @return
-     */
-    @PostMapping("/docOrder/doAllocation")
-    public AjaxResult doAllocation(@RequestParam String orderNos) {
-        List<String> orderList = JSONArray.parseArray(orderNos, String.class);
-        return wmsDocOrderHeaderService.doAllocation(orderList);
-    }
-
-    /**
-     * 出库列表
-     *
-     * @return
-     */
-    @GetMapping("/docOrder/checkOutList")
-    public AjaxResult checkOutList(@RequestParam String orderNos) {
-        List<String> orderList = JSONArray.parseArray(orderNos, String.class);
-        List<CheckOutVO> checkOutVOList = wmsDocOrderHeaderService.checkOutList(orderList);
-        return AjaxResult.success(checkOutVOList);
-    }
-
     /**
      * 分拣明细查询
      *

+ 30 - 16
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/WmsDocOrderHeaderServiceImpl.java

@@ -208,6 +208,9 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         if (orderHeader == null) {
             return AjaxResult.error("没有查询到订单");
         }
+        if (!orderHeader.getOrderStatus().equals("00")) {
+            return AjaxResult.error("库单为创建状态才可以分配");
+        }
         boolean isbf = false;
         boolean isAllocation = false;
         BigDecimal total = BigDecimal.ZERO;
@@ -229,9 +232,13 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
             }
         }
         if (isbf) {
+            orderHeader.setOrderStatus("10");
+            wmsDocOrderHeaderService.updateWmsDocOrderHeader(orderHeader);
             return AjaxResult.success("部分分配");
         }
         if (isAllocation) {
+            orderHeader.setOrderStatus("20");
+            wmsDocOrderHeaderService.updateWmsDocOrderHeader(orderHeader);
             return AjaxResult.success("分配成功");
         } else {
             return AjaxResult.error("分配失败,没有可用的库存");
@@ -250,12 +257,17 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
     @Transactional
     @Override
     public AjaxResult doAllocationDetails(WmsDocOrderHeader header, WmsDocOrderDetails details) {
+        if (!details.getLineStatus().equals("00")) {
+            return AjaxResult.error("出库明细为创建状态才可以分配!");
+        }
         LotattDTO lotattDTO = new LotattDTO();
         if (!StringUtils.isEmpty(header.getUserdefine1())) {
             //如果备货的只能查询属于该出库单的库存
             lotattDTO.setLotatt14(header.getOrderNo());
         }
         List<InvLotLocId> invList = invLotLocIdService.queryInvOrderBy(details.getLotnum(), details.getSku(), details.getLocation(), Constant.CUSTOMER_ID, lotattDTO);
+        // 原始订单数
+        BigDecimal originalOrderQty = details.getQtyOrdered();
         //库存可分配数小于订单数
         BigDecimal orderQty = details.getQtyOrdered();
         //判断总数是否足够分配
@@ -265,7 +277,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         }
         for (InvLotLocId inv : invList) {
             if (orderQty.doubleValue() == 0) {
-                return AjaxResult.success("分配完成");
+                return AjaxResult.success("分配完成",originalOrderQty);
             }
             //可以叫料且合格的库存
             InvLotAtt lotAtt = invLotAttMapper.selectInvLotAttByLotnum(inv.getLotnum());
@@ -285,12 +297,12 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
                             orderQty = orderQty.subtract(allocatedQty);
                             //修改出库单状态
                             details.setQtyAllocated(details.getQtyAllocated().add(allocatedQty));
-                            details.setQtyAllocatedEach(details.getQtyAllocatedEach().add(allocatedQty));
+                            details.setQtyAllocatedEach(details.getQtyAllocated());
                             details.setLineStatus("20");
                             wmsDocOrderDetailsMapper.updateWmsDocOrderDetails(details);
 
-                            header.setOrderStatus("10");
-                            wmsDocOrderHeaderService.updateWmsDocOrderHeader(header);
+//                            header.setOrderStatus("10");
+//                            wmsDocOrderHeaderService.updateWmsDocOrderHeader(header);
                             //生成分配明细
                             actAllocationDetailsService.addActAllocationDetails(inv.getLotnum(), inv.getLocationId(), allocatedQty, details, "20");
                         } else {
@@ -310,12 +322,13 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
                             details.setQtyAllocatedEach(details.getQtyAllocatedEach().add(allocatedQty));
                             wmsDocOrderDetailsMapper.updateWmsDocOrderDetails(details);
 
-                            header.setOrderStatus("20");
-                            wmsDocOrderHeaderService.updateWmsDocOrderHeader(header);
+//                            header.setOrderStatus("20");
+//                            wmsDocOrderHeaderService.updateWmsDocOrderHeader(header);
                             //生成分配明细
-                            return actAllocationDetailsService.addActAllocationDetails(inv.getLotnum(), inv.getLocationId(), allocatedQty, details, "20");
+                            actAllocationDetailsService.addActAllocationDetails(inv.getLotnum(), inv.getLocationId(), allocatedQty, details, "20");
+                            return AjaxResult.success("分配完成",originalOrderQty);
                         } else {
-                            return AjaxResult.error("占用库存分配数失败");
+                            throw new ServiceException("占用库存分配数失败");
                         }
                     } else {
                         BigDecimal currentQty = orderQty;
@@ -327,19 +340,20 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
                             details.setLineStatus("20");
                             details.setQtyAllocated(details.getQtyAllocated().add(currentQty));
                             wmsDocOrderDetailsMapper.updateWmsDocOrderDetails(details);
-                            header.setOrderStatus("20");
-                            wmsDocOrderHeaderService.updateWmsDocOrderHeader(header);
+//                            header.setOrderStatus("20");
+//                            wmsDocOrderHeaderService.updateWmsDocOrderHeader(header);
                             //生成分配明细
-                            return actAllocationDetailsService.addActAllocationDetails(inv.getLotnum(), inv.getLocationId(), currentQty, details, "10");
+                            actAllocationDetailsService.addActAllocationDetails(inv.getLotnum(), inv.getLocationId(), currentQty, details, "10");
+                            return AjaxResult.success("分配完成",originalOrderQty);
+
                         } else {
-                            return AjaxResult.error("占用库存分配数失败");
+                            throw new ServiceException("占用库存分配数失败");
                         }
                     }
                 }
             }
-            //}
         }
-        return AjaxResult.error("库存数不足,无法分配");
+        return AjaxResult.success("库存数不足,部分分配",originalOrderQty.subtract(orderQty));
     }
 
     @Override
@@ -416,10 +430,9 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
     @Transactional
     @Override
     public AjaxResult doCheckout(CheckOutForm checkOutForm) {
-        //TODO 待实现
         for (CheckOutInfoForm check : checkOutForm.getCheckOutInfoFormList()) {
 
-            //TODO 生成任务呼叫到接驳位
+            //生成任务呼叫到接驳位
             BaseLocationInfo baseLocationInfo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(check.getLocationNo(), Constant.WAREHOUSE_ID);
             FlowConfigHeaderVO flowConfigHeaderVO = flowConfigHeaderService.selectFlowConfigHeaderById(6L);
             AgvCallDTO agvCallDTO = new AgvCallDTO();
@@ -501,6 +514,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
             long lineNo = wmsDocOrderHeaderMapper.selectLineNo(wmsDocOrderDetails.getOrderNo());
             wmsDocOrderDetails.setOrderLineNo(BigDecimal.valueOf(lineNo + 1));
             wmsDocOrderDetails.setQtyOrderedEach(wmsDocOrderDetails.getQtyOrdered());
+            wmsDocOrderDetails.setQtyAllocatedEach(wmsDocOrderDetails.getQtyAllocated());
         }
         return wmsDocOrderDetailsMapper.insertWmsDocOrderDetails(wmsDocOrderDetails);
     }