Browse Source

1.备货单出库释放校验库存是否有未分配的(更新备货造成的)
2.更新备货流程初始化 -- init

k 2 years ago
parent
commit
cd789f67c7

+ 9 - 4
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/pda/PdaController.java

@@ -376,7 +376,7 @@ public class PdaController {
      * @param stockingListForm
      * @return
      */
-    @GetMapping("/docAsn/stockingDetailList")
+    @PostMapping("/docAsn/stockingDetailList")
     public AjaxResult stockingDetailList(@RequestBody StockingListForm stockingListForm) {
         // ERP号转换为wms系统入库单号ASNNO
         List<String> asnNoList = wmsDocAsnHeaderService.changeErpNoToAsnNo(stockingListForm.getAsnNoList());
@@ -638,9 +638,9 @@ public class PdaController {
     }
 
     /**
-     * PDA库位释放
+     * PDA库位释放
      * 1.将出库位库存移动到分拣区
-     * 2.将出库位库存直接删除(备货单完成)
+     * 2.移库出来的库存不可操作
      */
     @PostMapping("/base/locationRelease")
     public AjaxResult locationRelease(@RequestBody BasLocationForm basLocationForm) {
@@ -648,12 +648,17 @@ public class PdaController {
     }
 
     /**
-     * PDA线边库位出库
+     * PDA备货出库释放
      * 1.删除备货库存
      * 2.修改出库单状态
      */
     @PostMapping("/base/locationReleaseLine")
     public AjaxResult locationReleaseLine(@RequestBody LineReleaseFrom lineReleaseFrom) {
+        String orderNo = wmsDocOrderHeaderService.changeErpNoToOrderNo(lineReleaseFrom.getOrderNo());
+        if (StringUtils.isEmpty(orderNo)) {
+            return AjaxResult.error("请扫描正确的出库单号");
+        }
+        lineReleaseFrom.setOrderNo(orderNo);
         return invLotLocIdService.locationReleaseLine(lineReleaseFrom);
     }
     //endregion

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

@@ -711,7 +711,7 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
         return null;
     }
 
-    @Transactional
+    @Transactional(propagation = Propagation.REQUIRES_NEW)
     @Override
     public AjaxResult addOrUpdateErp(List<ErpOrderList> erpOrderList) {
         String asnNo = "";
@@ -738,7 +738,7 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
             details.setExpectedQty(erpOrder.getQty());  //数量
             details.setExpectedQtyEach(erpOrder.getQty());
             details.setCreateTime(new Date());
-            details.setCreateBy(erpOrder.getCreateUser());
+            details.setCreateBy("ERP");
             details.setdEdi04(erpOrder.getVaild());         //单据状态
             details.setdEdi05(erpOrder.getStockId());       //仓库编号
             details.setdEdi06(erpOrder.getOrderState());    //是否扫描完成

+ 22 - 9
warewms-ams/src/main/java/com/ruoyi/ams/erp/service/impl/SyncServiceImpl.java

@@ -77,14 +77,14 @@ public class SyncServiceImpl implements ISyncService {
     }
 
     @Override
-    public void syncSku()  {
+    public void syncSku() {
         // 品号基础表
         List<JSONObject> list = (List<JSONObject>) redisTemplate.opsForValue().get("erpProOb");
         if (list != null && list.size() > 0) {
             for (JSONObject jsonObject : list) {
                 BaseSkuType skuType = baseSkuTypeService.selectBaseSkuTypeByRemark(jsonObject.getString("imaType"));
                 if (skuType == null) {
-                  log.error("ERP同步表-物料类型不存在:"+jsonObject.getString("imaType"));
+                    log.error("ERP同步表-物料类型不存在:" + jsonObject.getString("imaType"));
                     return;
                 }
                 BaseSku baseSku = new BaseSku();
@@ -118,11 +118,14 @@ public class SyncServiceImpl implements ISyncService {
         }
     }
 
-    @Transactional
     @Override
     public void syncOrderList() {
         // ERP需求单
         List<JSONObject> list = (List<JSONObject>) redisTemplate.opsForValue().get("erpOrderList");
+        List<JSONObject> list_failed = (List<JSONObject>) redisTemplate.opsForValue().get("erpOrderList_failed");
+        if (list_failed != null && list_failed.size() > 0) {
+            list.addAll(list_failed);
+        }
         if (list != null && list.size() > 0) {
             Map<String, List<ErpOrderList>> inmap = new HashMap<>();
             Map<String, List<ErpOrderList>> outmap = new HashMap<>();
@@ -130,7 +133,7 @@ public class SyncServiceImpl implements ISyncService {
                 ErpOrderList erpOrderList = JSON.parseObject(code.toJSONString(), ErpOrderList.class);
                 if (erpOrderList.getInout().equals("1")) {
                     List<ErpOrderList> current;
-                    if (inmap.get(erpOrderList.getOrderName()) != null ) {
+                    if (inmap.get(erpOrderList.getOrderName()) != null) {
                         current = inmap.get(erpOrderList.getOrderName());
                     } else {
                         current = new ArrayList<>();
@@ -148,13 +151,23 @@ public class SyncServiceImpl implements ISyncService {
                     outmap.put(erpOrderList.getOrderName(), current);
                 }
             }
+            List<ErpOrderList> erpOrderList_failed = new ArrayList<>();
             for (Map.Entry<String, List<ErpOrderList>> entry : inmap.entrySet()) {
                 AjaxResult ajaxResult = wmsDocAsnHeaderService.addOrUpdateErp(entry.getValue());
+                if (!ajaxResult.isSuccess()) {
+                    log.error("ERP同步表插入入库单失败:" + ajaxResult.getMsg() + "!" + JSON.toJSONString(entry.getValue()));
+                    erpOrderList_failed.addAll(entry.getValue());
+                }
             }
             for (Map.Entry<String, List<ErpOrderList>> entry : outmap.entrySet()) {
                 AjaxResult ajaxResult = wmsDocOrderHeaderService.addOrUpdateErp(entry.getValue());
+                if (!ajaxResult.isSuccess()) {
+                    log.error("ERP同步表插入出库单失败:" + ajaxResult.getMsg() + "!" + JSON.toJSONString(entry.getValue()));
+                    erpOrderList_failed.addAll(entry.getValue());
+                }
             }
             redisTemplate.delete("erpOrderList");
+            redisTemplate.opsForValue().set("erpOrderList_failed", JSON.toJSONString(erpOrderList_failed));
         }
     }
 
@@ -186,13 +199,13 @@ public class SyncServiceImpl implements ISyncService {
             // 查出所有明细
             List<WmsDocAsnDetails> wmsDocAsnDetails1 = wmsDocAsnDetailsService.selectWmsDocAsnDetailsList(wmsDocAsnDetails);
             // 循环明细调updateErpOrderStatus方法 setOrderState setOrderName setOrderNo
-            for (WmsDocAsnDetails wmsDocAsnDetails2:wmsDocAsnDetails1) {
+            for (WmsDocAsnDetails wmsDocAsnDetails2 : wmsDocAsnDetails1) {
                 ErpOrderList erpOrderList = new ErpOrderList();
                 erpOrderList.setOrderNo(Integer.parseInt(wmsDocAsnDetails2.getdEdi07()));
                 erpOrderList.setOrderName(wmsDocAsnHeader1.getAsnReference1());
                 erpOrderList.setOrderState("2");
                 boolean b = updateErpOrderStatus(erpOrderList);
-                if (b){
+                if (b) {
                     wmsDocAsnHeader1.setEdiSendFlag("Y");
                     wmsDocAsnHeaderService.updateWmsDocAsnHeader(wmsDocAsnHeader1);
                 }
@@ -216,18 +229,18 @@ public class SyncServiceImpl implements ISyncService {
             WmsDocOrderDetails wmsDocOrderDetails = new WmsDocOrderDetails();
             wmsDocOrderDetails.setOrderNo(orderNo);
             List<WmsDocOrderDetails> list = wmsDocOrderDetailsService.selectWmsDocOrderDetailsList(wmsDocOrderDetails);
-            for (WmsDocOrderDetails wmsDocOrderDetails1:list) {
+            for (WmsDocOrderDetails wmsDocOrderDetails1 : list) {
                 ErpOrderList erpOrderList = new ErpOrderList();
                 erpOrderList.setOrderNo(Integer.parseInt(wmsDocOrderDetails1.getdEdi07()));
                 erpOrderList.setOrderName(wmsDocOrderHeader1.getSoReference1());
                 erpOrderList.setOrderState("2");
                 boolean b = updateErpOrderStatus(erpOrderList);
                 // 成功之后修改edi_send_flag为Y
-                if (b){
+                if (b) {
                     wmsDocOrderHeader1.setEdiSendFlag("Y");
                     wmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader1);
+                }
             }
         }
     }
 }
-}

+ 31 - 12
warewms-ams/src/main/java/com/ruoyi/ams/inv/service/impl/InvLotLocIdServiceImpl.java

@@ -394,7 +394,7 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
 
     @Transactional
     @Override
-    public AjaxResult clear(Long locationId,String palletNo, Long warehouseId, String updateBy) {
+    public AjaxResult clear(Long locationId, String palletNo, Long warehouseId, String updateBy) {
         InvLocIdSearchFrom invLocIdSearchFrom = new InvLocIdSearchFrom();
         invLocIdSearchFrom.setLocationId(locationId.toString());
         invLocIdSearchFrom.setLotatt07(palletNo);
@@ -899,19 +899,23 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
                 && StringUtils.isNotEmpty(invLotLocIdLotattVO.getLotatt14())) {
             WmsDocOrderHeader wmsDocOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(invLotLocIdLotattVO.getLotatt14());
             if (!wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS23.getValue())
-                    && !wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS98.getValue())) {
+                    && !wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS98.getValue())
+                    && !wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS99.getValue())) {
+
                 return AjaxResult.error("备货单还未备货完成,不可直接出库!" + invLotLocIdLotattVO.getLotatt14());
             }
-            // 修改备货单出库状态
-            wmsDocOrderHeaderService.modifyAssignmentStockTaskStatusComplete(invLotLocIdLotattVO.getLotatt14()
-                    , baseLocationInfo.getId(), invLotLocIdLotattVO.getLotatt07(), true);
-            // 清除库存
-            return invLotLocIdService.clear(baseLocationInfo.getId().toString(), Constant.WAREHOUSE_ID, "PDA");
+            return AjaxResult.error("备货库存库位释放请用【PDA备货库位释放】功能");
+//            // 修改备货单出库状态
+//            wmsDocOrderHeaderService.modifyAssignmentStockTaskStatusComplete(invLotLocIdLotattVO.getLotatt14()
+//                    , baseLocationInfo.getId(), invLotLocIdLotattVO.getLotatt07(), true);
+//            // 清除库存
+//            return invLotLocIdService.clear(baseLocationInfo.getId().toString(), Constant.WAREHOUSE_ID, "PDA");
 
         }
         if (StringUtils.isEmpty(invLotLocIdLotattVO.getLotatt15())) {
             // 说明是移库,直接删除库存
-            return invLotLocIdService.clear(baseLocationInfo.getId().toString(), Constant.WAREHOUSE_ID, "PDA");
+            return AjaxResult.error("移库暂时不支持释放!");
+//            return invLotLocIdService.clear(baseLocationInfo.getId().toString(), Constant.WAREHOUSE_ID, "PDA");
         }
         String lotatt15 = invLotLocIdLotattVO.getLotatt15();
         WmsDocOrderHeader wmsDocOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(lotatt15);
@@ -933,19 +937,34 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         }
         for (InvLotLocIdLotattVO locIdLotattVO : invLotLocIdLotattVOList) {
             if (StringUtils.isEmpty(locIdLotattVO.getLotatt14())) {
-                return AjaxResult.error("线边仓不是备货库存不可出库!");
+                return AjaxResult.error("不是备货库存不可出库!");
             }
             orderNo = locIdLotattVO.getLotatt14();
             locationId = locIdLotattVO.getLocationId();
         }
         WmsDocOrderHeader wmsDocOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
+        // 校验传入的出库单号和托盘绑定库存的出库单号是否一致
+        if (!wmsDocOrderHeader.getOrderNo().equals(lineReleaseFrom.getOrderNo())) {
+            return AjaxResult.error("托盘号对应的出库单号应该为:" + wmsDocOrderHeader.getSoReference1());
+        }
         if (!wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())) {
-            return AjaxResult.success("线边仓库单据类型位备货单才可出库!");
+            return AjaxResult.success("单据类型为备货单才可出库!");
+        }
+        if (!wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS23.getValue())
+                && !wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS98.getValue())
+                && !wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS99.getValue())) {
+            return AjaxResult.error("备货单还未备货完成,不可直接出库!" + orderNo);
+        }
+        // 判断是否有更新备货造成的未分配数量
+        for (InvLotLocIdLotattVO locIdLotattVO : invLotLocIdLotattVOList) {
+            if (locIdLotattVO.getQty().compareTo(locIdLotattVO.getQtyallocated()) != 0) {
+                return AjaxResult.error("托盘有库存不属于当前备货单,不可操作出库!");
+            }
         }
-        // 修改出库单状态
+            // 修改出库单状态
         wmsDocOrderHeaderService.modifyAssignmentStockTaskStatusComplete(orderNo, locationId, palletNo, true);
         // 清除库存
-        invLotLocIdService.clear(locationId.toString(), Constant.WAREHOUSE_ID, "PDA");
+        invLotLocIdService.clear(locationId, palletNo, Constant.WAREHOUSE_ID, "PDA");
         return AjaxResult.success("托盘出库成功!" + palletNo);
     }
 

+ 4 - 0
warewms-ams/src/main/java/com/ruoyi/ams/order/form/LineReleaseFrom.java

@@ -14,4 +14,8 @@ public class LineReleaseFrom {
      * 托盘号
      */
     private String palletNo;
+    /**
+     * 出库单号
+     */
+    private String orderNo;
 }

+ 26 - 0
warewms-ams/src/main/java/com/ruoyi/ams/order/service/UpdateOrderStockingProcess.java

@@ -0,0 +1,26 @@
+package com.ruoyi.ams.order.service;
+
+import com.ruoyi.ams.erp.domain.ErpOrderList;
+import com.ruoyi.common.core.domain.AjaxResult;
+
+import java.util.List;
+
+/**
+ * 更新备货流程
+ *
+ * @author jwk
+ * @date 2023-04-4
+ */
+public interface UpdateOrderStockingProcess {
+
+
+    /**
+     * 更新备货流程
+     *
+     * @param erpOrderList
+     * @return
+     */
+    AjaxResult startExecution(List<ErpOrderList> erpOrderList);
+
+
+}

+ 43 - 0
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/UpdateOrderStockingProcessImpl.java

@@ -0,0 +1,43 @@
+package com.ruoyi.ams.order.service.impl;
+
+import com.ruoyi.ams.erp.domain.ErpOrderList;
+import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
+import com.ruoyi.ams.order.service.IWmsDocOrderDetailsService;
+import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
+import com.ruoyi.ams.order.service.UpdateOrderStockingProcess;
+import com.ruoyi.base.constant.Constant;
+import com.ruoyi.common.core.domain.AjaxResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 更新备货流程
+ *
+ * @author jwk
+ * @date 2023-04-4
+ */
+@Slf4j
+@Service
+public class UpdateOrderStockingProcessImpl implements UpdateOrderStockingProcess {
+
+    @Autowired
+    private IWmsDocOrderHeaderService wmsDocOrderHeaderService;
+    @Autowired
+    private IWmsDocOrderDetailsService iWmsDocOrderDetailsService;
+
+
+    @Override
+    public AjaxResult startExecution(List<ErpOrderList> erpOrderList) {
+        String erpName = erpOrderList.get(0).getOrderName();
+        WmsDocOrderHeader header = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByErpNo(erpName);
+        if (header.getOrderStatus().equals(Constant.ORDER_STS.STS98.getValue())
+                || header.getOrderStatus().equals(Constant.ORDER_STS.STS99.getValue())) {
+            log.error("出库单状态为已经出库!不可更新备货!" + header.getOrderNo());
+        }
+
+        return null;
+    }
+}

+ 83 - 66
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/WmsDocOrderHeaderServiceImpl.java

@@ -31,6 +31,7 @@ import com.ruoyi.ams.order.mapper.WmsDocOrderDetailsMapper;
 import com.ruoyi.ams.order.mapper.WmsDocOrderHeaderMapper;
 import com.ruoyi.ams.order.service.IActAllocationDetailsService;
 import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
+import com.ruoyi.ams.order.service.UpdateOrderStockingProcess;
 import com.ruoyi.ams.order.vo.CheckOutVO;
 import com.ruoyi.ams.order.vo.PickingListVO;
 import com.ruoyi.ams.order.vo.StockOrderVO;
@@ -108,6 +109,8 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
     private IWmsDocAsnHeaderService iWmsDocAsnHeaderService;
     @Autowired
     private IBaseSkuService baseSkuService;
+    @Autowired
+    private UpdateOrderStockingProcess updateOrderStockingProcess;
 
     /**
      * 查询出库单头
@@ -827,7 +830,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         }
         for (String orderNo : orderNoList) {
             WmsDocOrderHeader wmsDocOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
-            // 胖蛋是备货单
+            // 判断是备货单
             boolean isBh = wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYP.BH.getValue());
             InvLocIdSearchFrom invLocIdSearchFrom = new InvLocIdSearchFrom();
             if (isBh) {
@@ -1006,7 +1009,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         if (type == 3) {
             int num = endLotattVO.getQty().intValue() - endLotattVO.getQtyallocated().intValue();
             if (toQty.intValue() != num) {
-                return AjaxResult.error("备货库存中存在未分配数量,必须先操未分配数:" + num);
+                return AjaxResult.error("备货库存中需要操作的数量应该为:" + num);
             }
             endLotattVO.setLotatt14("");
         }
@@ -1116,6 +1119,11 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
      * @return
      */
     private int judgmentOfGroupPlateType(InvLotLocIdLotattVO locIdLotattVO) {
+        // 为空说明是备货出库,但是已经更新备货了
+        if (StringUtils.isEmpty(locIdLotattVO.getLotatt15())
+                &&StringUtils.isNotEmpty(locIdLotattVO.getLotatt14())) {
+            return 3;
+        }
         String lotatt15 = locIdLotattVO.getLotatt15();
         WmsDocOrderHeader wmsDocOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(lotatt15);
         if (wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())
@@ -1123,14 +1131,14 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
             return 1;
         }
         if (wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYP.LH.getValue())
-                && StringUtils.isNotEmpty(locIdLotattVO.getLotatt14())) {
-            return 2;
-        }
-        if (wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())
                 && StringUtils.isNotEmpty(locIdLotattVO.getLotatt14())
-                && new BigDecimal(locIdLotattVO.getQtyallocated()).compareTo(new BigDecimal(locIdLotattVO.getQty())) == 0) {
+                && new BigDecimal(locIdLotattVO.getQtyallocated()).compareTo(new BigDecimal(locIdLotattVO.getQty())) != 0) {
             return 3;
         }
+        if (wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYP.LH.getValue())
+                && StringUtils.isNotEmpty(locIdLotattVO.getLotatt14())) {
+            return 2;
+        }
         if (wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYP.ZC.getValue())
                 && new BigDecimal(locIdLotattVO.getQtyallocated()).compareTo(BigDecimal.ZERO) == 0) {
             return 4;
@@ -1153,6 +1161,9 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
      * @return
      */
     private AjaxResult verifyThatDisksCanBeGrouped(InvLotLocIdLotattVO locIdLotattVO) {
+        if (StringUtils.isEmpty(locIdLotattVO.getLotatt15())) {
+            return AjaxResult.success();
+        }
         String lotatt15 = locIdLotattVO.getLotatt15();
         WmsDocOrderHeader wmsDocOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(lotatt15);
         if (wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())
@@ -1615,67 +1626,73 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         return codeSkuRelationshipSoVO;
     }
 
-    @Transactional
+    @Transactional(propagation = Propagation.REQUIRES_NEW)
     @Override
     public AjaxResult addOrUpdateErp(List<ErpOrderList> erpOrderList) {
-        String orderNo = "";
-//        String erpName = erpOrderList.get(0).getOrderName();
-//        WmsDocOrderHeader header = this.selectWmsDocOrderHeaderByErpNo(erpName);
-//        if (header != null && StringUtils.isNotEmpty(header.getOrderNo())) {
-//            orderNo = header.getOrderNo();
-//        } else {
-        orderNo = idSequenceUtils.generateId("ORDERNO");
-//        }
-        String erpOrderNo = "";
-        String erpOrderName = "";
-        int index = 1;
-        for (ErpOrderList erpOrder : erpOrderList) {
-            erpOrderName = erpOrder.getOrderName();
-            erpOrderNo = erpOrder.getOrderNo() + "";
-            WmsDocOrderDetails details = new WmsDocOrderDetails();
-            details.setOrderNo(orderNo);
-            details.setOrderLineNo(BigDecimal.valueOf(index));
-            details.setLineStatus("00");
-            details.setQtyOrdered(erpOrder.getQty());
-            details.setQtyOrderedEach(erpOrder.getQty());
-            details.setQtyAllocatedEach(BigDecimal.ZERO);
-            details.setQtyAllocated(BigDecimal.ZERO);
-            details.setQtySoftAllocated(BigDecimal.ZERO);
-            details.setQtySoftallocatedEach(BigDecimal.ZERO);
-            details.setCustomerId(Constant.CUSTOMER_ID);
-            details.setQtyShippedEach(BigDecimal.ZERO);
-            details.setQtyShipped(BigDecimal.ZERO);
-            details.setQtyPicked(BigDecimal.ZERO);
-            details.setQtyPickedEach(BigDecimal.ZERO);
-            details.setQtyPacked(BigDecimal.ZERO);
-            details.setQtyPackedEach(BigDecimal.ZERO);
-            details.setSku(erpOrder.getIma01());            //品号
-            details.setdEdi04(erpOrder.getVaild());         //单据状态
-            details.setdEdi05(erpOrder.getStockId());       //仓库编号
-            details.setdEdi06(erpOrder.getOrderState());    //是否扫描完成
-            details.setdEdi07(erpOrderNo);    //项次
-            details.setdEdi08(erpOrder.getOrderType());     //erp单据类型
-            details.setdEdi09(erpOrder.getInout());         //erp出入库类型
-            details.setLineStatus("00");
-            details.setCreateTime(new Date());
-            details.setCreateBy(erpOrder.getCreateUser());
-            wmsDocOrderDetailsMapper.insertWmsDocOrderDetails(details);
-            index++;
-        }
-        WmsDocOrderHeader orderHeader = new WmsDocOrderHeader();
-        orderHeader.setOrderNo(orderNo);            //erp单号
-        if (erpOrderList.get(0).getOrderType().equals("axmt620")) {
-            orderHeader.setOrderType(Constant.ORDER_TYP.BH.getValue());
-        } else {
-            orderHeader.setOrderType(Constant.ORDER_TYP.ZC.getValue());
-        }
-        orderHeader.setOrderStatus("00");
-        orderHeader.setCustomerId(Constant.CUSTOMER_ID);
-        orderHeader.setEdiSendFlag("N");
-        orderHeader.setSoReference1(erpOrderName);
-        orderHeader.setCreateTime(new Date());
-        orderHeader.setCreateBy("ERP");
-        wmsDocOrderHeaderMapper.insertWmsDocOrderHeader(orderHeader);
+        try {
+            String orderNo = "";
+            String erpName = erpOrderList.get(0).getOrderName();
+            WmsDocOrderHeader header = this.selectWmsDocOrderHeaderByErpNo(erpName);
+            if (header != null && StringUtils.isNotEmpty(header.getOrderNo())) {
+                // 更新备货业务
+                return updateOrderStockingProcess.startExecution(erpOrderList);
+            } else {
+                orderNo = idSequenceUtils.generateId("ORDERNO");
+            }
+            String erpOrderNo = "";
+            String erpOrderName = "";
+            int index = 1;
+            for (ErpOrderList erpOrder : erpOrderList) {
+                erpOrderName = erpOrder.getOrderName();
+                erpOrderNo = erpOrder.getOrderNo() + "";
+                WmsDocOrderDetails details = new WmsDocOrderDetails();
+                details.setOrderNo(orderNo);
+                details.setOrderLineNo(BigDecimal.valueOf(index));
+                details.setLineStatus("00");
+                details.setQtyOrdered(erpOrder.getQty());
+                details.setQtyOrderedEach(erpOrder.getQty());
+                details.setQtyAllocatedEach(BigDecimal.ZERO);
+                details.setQtyAllocated(BigDecimal.ZERO);
+                details.setQtySoftAllocated(BigDecimal.ZERO);
+                details.setQtySoftallocatedEach(BigDecimal.ZERO);
+                details.setCustomerId(Constant.CUSTOMER_ID);
+                details.setQtyShippedEach(BigDecimal.ZERO);
+                details.setQtyShipped(BigDecimal.ZERO);
+                details.setQtyPicked(BigDecimal.ZERO);
+                details.setQtyPickedEach(BigDecimal.ZERO);
+                details.setQtyPacked(BigDecimal.ZERO);
+                details.setQtyPackedEach(BigDecimal.ZERO);
+                details.setSku(erpOrder.getIma01());            //品号
+                details.setdEdi04(erpOrder.getVaild());         //单据状态
+                details.setdEdi05(erpOrder.getStockId());       //仓库编号
+                details.setdEdi06(erpOrder.getOrderState());    //是否扫描完成
+                details.setdEdi07(erpOrderNo);    //项次
+                details.setdEdi08(erpOrder.getOrderType());     //erp单据类型
+                details.setdEdi09(erpOrder.getInout());         //erp出入库类型
+                details.setLineStatus("00");
+                details.setCreateTime(new Date());
+                details.setCreateBy(erpOrder.getCreateUser());
+                wmsDocOrderDetailsMapper.insertWmsDocOrderDetails(details);
+                index++;
+            }
+            WmsDocOrderHeader orderHeader = new WmsDocOrderHeader();
+            orderHeader.setOrderNo(orderNo);            //erp单号
+            if (erpOrderList.get(0).getOrderType().equals("axmt620")) {
+                orderHeader.setOrderType(Constant.ORDER_TYP.BH.getValue());
+            } else {
+                orderHeader.setOrderType(Constant.ORDER_TYP.ZC.getValue());
+            }
+            orderHeader.setOrderStatus("00");
+            orderHeader.setCustomerId(Constant.CUSTOMER_ID);
+            orderHeader.setEdiSendFlag("N");
+            orderHeader.setSoReference1(erpOrderName);
+            orderHeader.setCreateTime(new Date());
+            orderHeader.setCreateBy("ERP");
+            wmsDocOrderHeaderMapper.insertWmsDocOrderHeader(orderHeader);
+        } catch (Exception e) {
+            log.error("ERP同步表插入出库单失败!", e);
+            return AjaxResult.error("ERP同步表插入出库单失败!" + e);
+        }
         return AjaxResult.success("");
     }