浏览代码

优化AGV任务完成回调出入库单单据状态

k 2 年之前
父节点
当前提交
6b3fd0f5ed

+ 2 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/pda/PdaController.java

@@ -221,6 +221,8 @@ public class PdaController {
                 agvCallDTO.setLocationFrom(lform.getLocationFrom());
                 agvCallDTO.setLocationTo(lform.getLocationTo());
                 agvCallDTO.setId(lform.getId());
+                agvCallDTO.setPalletNo(lform.getPalletNo());
+                agvCallDTO.setTaskType(lineCallForm.getFlowId().toString());
             }
             AgvCallItemDTO agvCallItemDTO = new AgvCallItemDTO();
             agvCallItemDTO.setWarehouseId(1L);

+ 7 - 0
warewms-ams/src/main/java/com/ruoyi/ams/asn/service/IWmsDocAsnHeaderService.java

@@ -202,4 +202,11 @@ public interface IWmsDocAsnHeaderService {
      * 在erp_barcodes中插入入库单扫描记录,其实是关联批次插入数据
      */
     AjaxResult synchronizeErpBarcodeList(String asnNo);
+
+    /**
+     * 修改入库单完成状态
+     *
+     * @return
+     */
+    AjaxResult modifyReceiptDocCompletionStatus(String palletNo);
 }

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

@@ -559,92 +559,6 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
             //更新托盘库存到起始库位
             invLotLocIdMapper.updateInvLotLocIdToByLotnum(inv.getLotnum(), inv.getSku(), inv.getCustomerId(), inv.getLocationId()
                     , locationTo.getId());
-
-            // 回库不修改入库单据
-            if (flowId == Constant.FLOW_ID_RSO) {
-                // 修改备货状态
-                if (StringUtils.isNotEmpty(invLotAtt.getLotatt14())) {
-                    String orderNo = invLotAtt.getLotatt14();
-                    WmsDocOrderHeader docOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
-                    if (docOrderHeader == null || !docOrderHeader.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())) {
-                        continue;
-                    }
-                    String sku = inv.getSku();
-                    BigDecimal qty = inv.getQty();
-                    // 明细
-                    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())
-                                || wmsDocOrderDetail.getLineStatus().equals(Constant.ORDER_STS.STS22.getValue())) {
-                            if (sku.equals(wmsDocOrderDetail.getSku())) {
-                                BigDecimal toQty = wmsDocOrderDetail.getQtyAllocated().subtract(wmsDocOrderDetail.getQtySoftAllocated());
-                                WmsDocOrderDetails detailsUpdate = new WmsDocOrderDetails();
-                                detailsUpdate.setOrderNo(wmsDocOrderDetail.getOrderNo());
-                                detailsUpdate.setOrderLineNo(wmsDocOrderDetail.getOrderLineNo());
-                                if (qty.compareTo(toQty) == 0) {
-                                    detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtyAllocated());
-                                    detailsUpdate.setLineStatus(Constant.ORDER_STS.STS23.getValue());
-                                } else if (qty.compareTo(toQty) == 1) {
-                                    qty = qty.subtract(toQty);
-                                    detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtyAllocated());
-                                    detailsUpdate.setLineStatus(Constant.ORDER_STS.STS23.getValue());
-                                } else {
-                                    detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtySoftAllocated().add(qty));
-                                    detailsUpdate.setLineStatus(Constant.ORDER_STS.STS22.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.setUpdateBy(loginUser.getUsername());
-                                headerUpdate.setUpdateTime(new Date());
-                                wmsDocOrderHeaderMapper.updateWmsDocOrderHeader(headerUpdate);
-                            }
-                        }
-                    }
-
-                }
-                continue;
-            }
-
-            // 修改入库单状态
-            WmsDocAsnDetails query = new WmsDocAsnDetails();
-            query.setAsnNo(invLotAtt.getLotatt08());
-            query.setSku(invLotAtt.getSku());
-            List<WmsDocAsnDetails> detailsList = wmsDocAsnDetailsMapper.selectWmsDocAsnDetailsList(query);
-            if (detailsList != null && detailsList.size() > 0) {
-                for (WmsDocAsnDetails de : detailsList) {
-                    de.setLineStatus(Constant.ASN_STS.STS60.getValue());
-                    wmsDocAsnDetailsMapper.updateWmsDocAsnDetails(de);
-                }
-            }
-            //修改头单状态
-            String asnStatus = Constant.ASN_STS.STS99.getValue();
-            WmsDocAsnDetails detailsQuery = new WmsDocAsnDetails();
-            detailsQuery.setAsnNo(invLotAtt.getLotatt08());
-            List<WmsDocAsnDetails> detailsCheckList = wmsDocAsnDetailsMapper.selectWmsDocAsnDetailsList(detailsQuery);
-            for (WmsDocAsnDetails d : detailsCheckList) {
-                if (!d.getLineStatus().equals(Constant.ASN_STS.STS60.getValue())) {
-                    asnStatus = Constant.ASN_STS.STS50.getValue();
-                    break;
-                }
-            }
-            WmsDocAsnHeader headerUpdate = new WmsDocAsnHeader();
-            headerUpdate.setAsnNo(invLotAtt.getLotatt08());
-            headerUpdate.setAsnStatus(asnStatus);
-            headerUpdate.setUpdateBy(loginUser.getUsername());
-            headerUpdate.setUpdateTime(new Date());
-            wmsDocAsnHeaderMapper.updateWmsDocAsnHeader(headerUpdate);
         }
 
         if (locationTo != null) {
@@ -924,4 +838,45 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
 
         return AjaxResult.success("入库-条码扫描记录表插入成功");
     }
+
+    @Override
+    public AjaxResult modifyReceiptDocCompletionStatus(String palletNo) {
+        //获取库存当前的托盘位置
+        InvLotAtt lotAtt = new InvLotAtt();
+        lotAtt.setLotatt07(palletNo);
+        List<InvLotLocId> invLotLocIdList = invLotLocIdService.queryInvByInvLotatt(lotAtt);
+        for (InvLotLocId inv : invLotLocIdList) {
+
+            InvLotAtt invLotAtt = invLotAttService.selectInvLotAttByLotnum(inv.getLotnum());
+
+            // 修改入库单状态
+            WmsDocAsnDetails query = new WmsDocAsnDetails();
+            query.setAsnNo(invLotAtt.getLotatt08());
+            query.setSku(invLotAtt.getSku());
+            List<WmsDocAsnDetails> detailsList = wmsDocAsnDetailsMapper.selectWmsDocAsnDetailsList(query);
+            if (detailsList != null && detailsList.size() > 0) {
+                for (WmsDocAsnDetails de : detailsList) {
+                    de.setLineStatus(Constant.ASN_STS.STS60.getValue());
+                    wmsDocAsnDetailsMapper.updateWmsDocAsnDetails(de);
+                }
+            }
+            //修改头单状态
+            String asnStatus = Constant.ASN_STS.STS99.getValue();
+            WmsDocAsnDetails detailsQuery = new WmsDocAsnDetails();
+            detailsQuery.setAsnNo(invLotAtt.getLotatt08());
+            List<WmsDocAsnDetails> detailsCheckList = wmsDocAsnDetailsMapper.selectWmsDocAsnDetailsList(detailsQuery);
+            for (WmsDocAsnDetails d : detailsCheckList) {
+                if (!d.getLineStatus().equals(Constant.ASN_STS.STS60.getValue())) {
+                    asnStatus = Constant.ASN_STS.STS50.getValue();
+                    break;
+                }
+            }
+            WmsDocAsnHeader headerUpdate = new WmsDocAsnHeader();
+            headerUpdate.setAsnNo(invLotAtt.getLotatt08());
+            headerUpdate.setAsnStatus(asnStatus);
+            headerUpdate.setUpdateTime(new Date());
+            wmsDocAsnHeaderMapper.updateWmsDocAsnHeader(headerUpdate);
+        }
+        return AjaxResult.success();
+    }
 }

+ 3 - 0
warewms-ams/src/main/java/com/ruoyi/ams/business/BusinessServiceImpl.java

@@ -493,6 +493,9 @@ public class BusinessServiceImpl implements IBusinessService {
             wcsTask.setTaskType(Constant.TASK_TYPE.FORWARD.getValue());
             wcsTask.setExt8(token.toString());
             wcsTask.setExt7(flowConfigHeaderVO.getId().toString());
+            wcsTask.setExt6(agvCallDTO.getOrderNo());
+            wcsTask.setExt5(agvCallDTO.getPalletNo());
+            wcsTask.setExt4(agvCallDTO.getTaskType());// 任务类型
             wcsTask.setExtParam(agvCallDTO.getExtParam());
             wcsTaskList.add(wcsTask);
             businessService.addTask(wcsTask);

+ 18 - 0
warewms-ams/src/main/java/com/ruoyi/ams/config/domain/dto/AgvCallDTO.java

@@ -14,6 +14,8 @@ public class AgvCallDTO {
     private Long warehouseId;
     private List<AgvCallItemDTO> agvCallItemDTOList = new ArrayList<>();
     private String extParam;
+    private String orderNo;
+    private String taskType;
 
     public Long getId() {
         return id;
@@ -70,4 +72,20 @@ public class AgvCallDTO {
     public void setExtParam(String extParam) {
         this.extParam = extParam;
     }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public String getTaskType() {
+        return taskType;
+    }
+
+    public void setTaskType(String taskType) {
+        this.taskType = taskType;
+    }
 }

+ 7 - 0
warewms-ams/src/main/java/com/ruoyi/ams/order/service/IActAllocationDetailsService.java

@@ -137,4 +137,11 @@ public interface IActAllocationDetailsService {
      * @param palletNo
      */
     void updateAllocationDetailsLocationIdByPalletNo(String locationId, String palletNo);
+
+    /**
+     * 修改分配任务为完成
+     *
+     * @return
+     */
+    AjaxResult modifyAssignmentTaskStatus(String orderNo,Long locationId,String palletNo);
 }

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

@@ -169,7 +169,7 @@ public interface IWmsDocOrderHeaderService {
     List<CheckOutVO> checkOutList(List<String> orderNoList);
 
     /**
-     * 分拣出库
+     * 物料拉动
      *
      * @return
      */
@@ -281,4 +281,19 @@ public interface IWmsDocOrderHeaderService {
      * 在erp_barcodes中插入出库单扫描记录,其实是关联批次插入数据
      */
     AjaxResult synchronizeErpBarcodeList(String orderNo);
+
+    /**
+     * 修改库内理货为完成
+     *
+     * @return
+     */
+    AjaxResult modifyTheTallyStatusInTheWarehouse(String orderNo, Long locationId, String palletNo);
+
+    /**
+     * 修改备货回库完成状态
+     *
+     * @return
+     */
+    AjaxResult modifystockCompletionStatus(String palletNo);
+
 }

+ 17 - 0
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/ActAllocationDetailsServiceImpl.java

@@ -228,4 +228,21 @@ public class ActAllocationDetailsServiceImpl implements IActAllocationDetailsSer
     public void updateAllocationDetailsLocationIdByPalletNo(String locationId, String palletNo) {
         actAllocationDetailsMapper.updateAllocationDetailsLocationIdByPalletNo(locationId, palletNo);
     }
+
+    @Override
+    public AjaxResult modifyAssignmentTaskStatus(String orderNo,Long locationId,String palletNo) {
+        ActAllocationDetailsFrom actAllocationQuery = new ActAllocationDetailsFrom();
+        actAllocationQuery.setOrderNo(orderNo);
+        actAllocationQuery.setLocationId(locationId);
+        actAllocationQuery.setLotatt07(palletNo);
+        actAllocationQuery.setStatus(Constant.ORDER_STS.STS20.getValue());
+        List<ActAllocationDetailsFrom> actAllocationDetailsFromList = this.selectActAllocationDetailsInvLotAttList(actAllocationQuery);
+        for (ActAllocationDetailsFrom allocationDetails : actAllocationDetailsFromList) {
+            ActAllocationDetails allocationDetailsUpdate = new ActAllocationDetails();
+            allocationDetailsUpdate.setAllocationId(allocationDetails.getAllocationId());
+            allocationDetailsUpdate.setStatus(Constant.ORDER_STS.STS21.getValue());
+            this.updateActAllocationDetails(allocationDetailsUpdate);
+        }
+        return AjaxResult.success();
+    }
 }

+ 118 - 60
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/WmsDocOrderHeaderServiceImpl.java

@@ -1,5 +1,7 @@
 package com.ruoyi.ams.order.service.impl;
 
+import com.ruoyi.ams.asn.domain.WmsDocAsnDetails;
+import com.ruoyi.ams.asn.domain.WmsDocAsnHeader;
 import com.ruoyi.ams.box.domain.WmsBoxInfo;
 import com.ruoyi.ams.box.mapper.WmsBoxInfoMapper;
 import com.ruoyi.ams.box.service.IWmsBoxInfoService;
@@ -20,6 +22,7 @@ import com.ruoyi.ams.inv.domain.vo.InvLotLocIdLotattVO;
 import com.ruoyi.ams.inv.mapper.InvLotAttMapper;
 import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
 import com.ruoyi.ams.inv.service.IActTransactionLogService;
+import com.ruoyi.ams.inv.service.IInvLotAttService;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
 import com.ruoyi.ams.order.domain.ActAllocationDetails;
 import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
@@ -96,6 +99,8 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
     private IBaseLocationInfoService baseLocationInfoService;
     @Autowired
     private IErpBarcodesService erpBarcodesService;
+    @Autowired
+    private IInvLotAttService invLotAttService;
 
     /**
      * 查询出库单头
@@ -683,6 +688,8 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
     @Transactional(propagation = Propagation.REQUIRES_NEW)
     @Override
     public AjaxResult doCheckout(CheckOutInfoForm check) {
+        String orderNo = check.getOrderNo();
+        String palletNo = check.getPalletNo();
         //生成任务呼叫到接驳位
         BaseLocationInfo baseLocationInfo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(check.getLocationNo(), Constant.WAREHOUSE_ID);
         FlowConfigHeaderVO flowConfigHeaderVO = flowConfigHeaderService.selectFlowConfigHeaderById(6L);
@@ -690,73 +697,16 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         agvCallDTO.setId(flowConfigHeaderVO.getId());
         agvCallDTO.setLocationFrom(baseLocationInfo.getId().toString());
         agvCallDTO.setLocationTo(null);
-        agvCallDTO.setPalletNo(check.getPalletNo());
+        agvCallDTO.setPalletNo(palletNo);
         agvCallDTO.setWarehouseId(Constant.WAREHOUSE_ID);
         // 参数内容过长无法添加
         agvCallDTO.setExtParam("");
+        agvCallDTO.setOrderNo(orderNo);
+        agvCallDTO.setTaskType(Constant.FLOW_ID_SO + "");
         AjaxResult result = businessService.agvCall(flowConfigHeaderVO, agvCallDTO);
         if ((int) result.get(AjaxResult.CODE_TAG) == 500) {
             throw new ServiceException("任务生成失败:" + result.getMsg() + ",库位:" + baseLocationInfo.getLocationNo());
         }
-
-        // 将分配明细由分配完成改为任务生成
-        ActAllocationDetails actAllocationDetails = new ActAllocationDetails();
-        actAllocationDetails.setOrderNo(check.getOrderNo());
-        actAllocationDetails.setLocationId(baseLocationInfo.getId());
-        actAllocationDetails.setStatus(Constant.ORDER_STS.STS20.getValue());
-        List<ActAllocationDetails> actAllocationDetailsList = actAllocationDetailsService.selectActAllocationDetailsList(actAllocationDetails);
-        for (ActAllocationDetails allocationDetails : actAllocationDetailsList) {
-            ActAllocationDetails allocationDetailsUpdate = new ActAllocationDetails();
-            allocationDetailsUpdate.setAllocationId(allocationDetails.getAllocationId());
-            allocationDetailsUpdate.setStatus(Constant.ORDER_STS.STS21.getValue());
-            actAllocationDetailsService.updateActAllocationDetails(allocationDetailsUpdate);
-        }
-        // 库内理货 修改出库单为完成
-        WmsDocOrderHeader header = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(check.getOrderNo());
-        if (header != null && header.getOrderType().equals(Constant.ORDER_TYP.LH.getValue())) {
-            WmsDocOrderHeader docOrderHeader = new WmsDocOrderHeader();
-            docOrderHeader.setOrderNo(check.getOrderNo());
-            docOrderHeader.setOrderStatus(Constant.ORDER_STS.STS99.getValue());
-            wmsDocOrderHeaderMapper.updateWmsDocOrderHeader(docOrderHeader);
-            // 明细
-            List<WmsDocOrderDetails> wmsDocOrderDetailsList = wmsDocOrderDetailsMapper.selectWmsDocOrderDetailsByOrderNo(header.getOrderNo());
-            for (WmsDocOrderDetails d : wmsDocOrderDetailsList) {
-                WmsDocOrderDetails wmsDocOrderDetails = new WmsDocOrderDetails();
-                wmsDocOrderDetails.setOrderNo(d.getOrderNo());
-                wmsDocOrderDetails.setOrderLineNo(d.getOrderLineNo());
-                wmsDocOrderDetails.setLineStatus(Constant.ORDER_STS.STS99.getValue());
-                wmsDocOrderDetailsMapper.updateWmsDocOrderDetails(wmsDocOrderDetails);
-            }
-            // todo 分配明细为拣货完成
-        }
-        // 备货 修改出库单为备货状态
-//            if (header != null && header.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())) {
-//                if (!header.getOrderStatus().equals(Constant.ORDER_STS.STS23)) {
-//                    continue;
-//                }
-//                // 是否已经生成分配明细
-//                ActAllocationDetails allocationDetailsQuery = new ActAllocationDetails();
-//                allocationDetailsQuery.setOrderNo(header.getOrderNo());
-//                allocationDetailsQuery.setStatus(Constant.ORDER_STS.STS20.getValue());
-//                List<ActAllocationDetails> allocationDetails = actAllocationDetailsService.selectActAllocationDetailsList(allocationDetailsQuery);
-//                if (allocationDetails.size() > 1) {
-//                    continue;
-//                }
-//                WmsDocOrderHeader docOrderHeader = new WmsDocOrderHeader();
-//                docOrderHeader.setOrderNo(check.getOrderNo());
-//                docOrderHeader.setOrderStatus(Constant.ORDER_STS.STS99.getValue());
-//                wmsDocOrderHeaderMapper.updateWmsDocOrderHeader(docOrderHeader);
-//                // 明细
-//                List<WmsDocOrderDetails> wmsDocOrderDetailsList = wmsDocOrderDetailsMapper.selectWmsDocOrderDetailsByOrderNo(header.getOrderNo());
-//                for (WmsDocOrderDetails d : wmsDocOrderDetailsList) {
-//                    WmsDocOrderDetails wmsDocOrderDetails = new WmsDocOrderDetails();
-//                    wmsDocOrderDetails.setOrderNo(d.getOrderNo());
-//                    wmsDocOrderDetails.setOrderLineNo(d.getOrderLineNo());
-//                    wmsDocOrderDetails.setLineStatus(Constant.ORDER_STS.STS99.getValue());
-//                    wmsDocOrderDetailsMapper.updateWmsDocOrderDetails(wmsDocOrderDetails);
-//                }
-//            }
-
         return AjaxResult.success("操作成功");
     }
 
@@ -1332,4 +1282,112 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         }
         return AjaxResult.success("出库-条码扫描记录表插入成功");
     }
+
+    @Override
+    public AjaxResult modifyTheTallyStatusInTheWarehouse(String orderNo,Long locationId,String palletNo) {
+        WmsDocOrderHeader header = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
+        if (header != null && header.getOrderType().equals(Constant.ORDER_TYP.LH.getValue())) {
+            // 分配明细为拣货完成
+            ActAllocationDetailsFrom actAllocationQuery = new ActAllocationDetailsFrom();
+            actAllocationQuery.setOrderNo(orderNo);
+            actAllocationQuery.setLocationId(locationId);
+            actAllocationQuery.setLotatt07(palletNo);
+            actAllocationQuery.setStatus(Constant.ORDER_STS.STS20.getValue());
+            List<ActAllocationDetailsFrom> actAllocationDetailsFromList = actAllocationDetailsService.selectActAllocationDetailsInvLotAttList(actAllocationQuery);
+            for (ActAllocationDetailsFrom allocationDetails : actAllocationDetailsFromList) {
+                ActAllocationDetails allocationDetailsUpdate = new ActAllocationDetails();
+                allocationDetailsUpdate.setAllocationId(allocationDetails.getAllocationId());
+                allocationDetailsUpdate.setStatus(Constant.ORDER_STS.STS30.getValue());
+                actAllocationDetailsService.updateActAllocationDetails(allocationDetailsUpdate);
+                // 出库单明细改为完成
+                WmsDocOrderDetails wmsDocOrderDetails = wmsDocOrderDetailsMapper.selectWmsDocOrderDetailsByNoLineNo(allocationDetails.getOrderNo(), allocationDetails.getLineNo());
+                WmsDocOrderDetails wmsDocOrderDetailsUpdate = new WmsDocOrderDetails();
+                wmsDocOrderDetailsUpdate.setOrderNo(wmsDocOrderDetails.getOrderNo());
+                wmsDocOrderDetailsUpdate.setOrderLineNo(wmsDocOrderDetails.getOrderLineNo());
+                wmsDocOrderDetailsUpdate.setLineStatus(Constant.ORDER_STS.STS99.getValue());
+                wmsDocOrderDetailsMapper.updateWmsDocOrderDetails(wmsDocOrderDetailsUpdate);
+            }
+            // 出库单头
+            String orderSts = Constant.ORDER_STS.STS99.getValue();
+            WmsDocOrderHeader wmsDocOrderHeader = new WmsDocOrderHeader();
+            wmsDocOrderHeader.setOrderNo(orderNo);
+            List<WmsDocOrderDetails> wmsDocOrderDetailsList = wmsDocOrderDetailsMapper.selectWmsDocOrderDetailsByOrderNo(orderNo);
+            for (WmsDocOrderDetails details : wmsDocOrderDetailsList) {
+                if (!details.getLineStatus().equals(Constant.ORDER_STS.STS99.getValue())) {
+                    orderSts = Constant.ORDER_STS.STS98.getValue();
+                    break;
+                }
+            }
+            wmsDocOrderHeader.setOrderStatus(orderSts);
+            wmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader);
+
+        }
+        return AjaxResult.success();
+    }
+
+    @Override
+    public AjaxResult modifystockCompletionStatus(String palletNo) {
+        //获取库存当前的托盘位置
+        InvLotAtt lotAtt = new InvLotAtt();
+        lotAtt.setLotatt07(palletNo);
+        List<InvLotLocId> invLotLocIdList = invLotLocIdService.queryInvByInvLotatt(lotAtt);
+        for (InvLotLocId inv : invLotLocIdList) {
+
+            InvLotAtt invLotAtt = invLotAttService.selectInvLotAttByLotnum(inv.getLotnum());
+            invLotAtt.setLotatt12("Y");
+            invLotAttService.updateInvLotAtt(invLotAtt);
+            // 修改备货状态
+            if (StringUtils.isNotEmpty(invLotAtt.getLotatt14())) {
+                String orderNo = invLotAtt.getLotatt14();
+                WmsDocOrderHeader docOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
+                if (docOrderHeader == null || !docOrderHeader.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())) {
+                    continue;
+                }
+                String sku = inv.getSku();
+                BigDecimal qty = inv.getQty();
+                // 明细
+                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())
+                            || wmsDocOrderDetail.getLineStatus().equals(Constant.ORDER_STS.STS22.getValue())) {
+                        if (sku.equals(wmsDocOrderDetail.getSku())) {
+                            BigDecimal toQty = wmsDocOrderDetail.getQtyAllocated().subtract(wmsDocOrderDetail.getQtySoftAllocated());
+                            WmsDocOrderDetails detailsUpdate = new WmsDocOrderDetails();
+                            detailsUpdate.setOrderNo(wmsDocOrderDetail.getOrderNo());
+                            detailsUpdate.setOrderLineNo(wmsDocOrderDetail.getOrderLineNo());
+                            if (qty.compareTo(toQty) == 0) {
+                                detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtyAllocated());
+                                detailsUpdate.setLineStatus(Constant.ORDER_STS.STS23.getValue());
+                            } else if (qty.compareTo(toQty) == 1) {
+                                qty = qty.subtract(toQty);
+                                detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtyAllocated());
+                                detailsUpdate.setLineStatus(Constant.ORDER_STS.STS23.getValue());
+                            } else {
+                                detailsUpdate.setQtySoftAllocated(wmsDocOrderDetail.getQtySoftAllocated().add(qty));
+                                detailsUpdate.setLineStatus(Constant.ORDER_STS.STS22.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();
+    }
 }

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

@@ -7,6 +7,7 @@ import java.util.List;
 import com.ruoyi.ams.agv.ndc.domain.AmsTask;
 import com.ruoyi.ams.agv.ndc.entity.CallbackResult;
 import com.ruoyi.ams.agv.ndc.service.IAmsTaskService;
+import com.ruoyi.ams.asn.service.IWmsDocAsnHeaderService;
 import com.ruoyi.ams.box.service.IWmsBoxInfoService;
 import com.ruoyi.ams.config.domain.FlowConfigEvent;
 import com.ruoyi.ams.config.service.IFlowConfigEventService;
@@ -15,6 +16,8 @@ import com.ruoyi.ams.inv.domain.InvLotLocId;
 import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
 import com.ruoyi.ams.inv.service.IInvLotAttService;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
+import com.ruoyi.ams.order.service.IActAllocationDetailsService;
+import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
 import com.ruoyi.ams.task.dto.WcsTaskLocationDTO;
 import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.domain.BaseLocationInfo;
@@ -61,6 +64,12 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
     private IInvLotAttService iInvLotAttService;
     @Autowired
     private IAmsTaskService iAmsTaskService;
+    @Autowired
+    private IActAllocationDetailsService actAllocationDetailsService;
+    @Autowired
+    private IWmsDocOrderHeaderService wmsDocOrderHeaderService;
+    @Autowired
+    private IWmsDocAsnHeaderService iWmsDocAsnHeaderService;
 
     //任务状态翻译
     private String codeConvert(int code) {
@@ -177,16 +186,45 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
 
     }
 
+    /**
+     * AGV任务完成回调
+     *
+     * @param wcsTask
+     */
     @Transactional
     @Override
     public void callBackTaskComplete(WcsTask wcsTask) {
+        if (StringUtils.isEmpty(wcsTask.getExt5())) {
+            wcsTask.setExt5("9999");
+        }
+        switch (wcsTask.getExt4()) {
+            // 入库 (托盘)
+            case "5":
+                // 修改
+                iWmsDocAsnHeaderService.modifyReceiptDocCompletionStatus(wcsTask.getExt5());
+                break;
+            // 出库 (托盘,出库单号)
+            case "6":
+                // 修改分配明细为任务完成
+                actAllocationDetailsService.modifyAssignmentTaskStatus(wcsTask.getExt6()
+                        ,Long.valueOf(wcsTask.getLocationFrom()), wcsTask.getExt5());
+                // 修改库内理货为任务完成
+                wmsDocOrderHeaderService.modifyTheTallyStatusInTheWarehouse(wcsTask.getExt6()
+                        ,Long.valueOf(wcsTask.getLocationFrom()), wcsTask.getExt5());
+                break;
+            // 回库 (托盘)
+            case "9":
+                wmsDocOrderHeaderService.modifystockCompletionStatus(wcsTask.getExt5());
+                break;
+            default:
+                break;
+        }
 
         if (!StringUtils.isEmpty(wcsTask.getLocationFrom()) && !StringUtils.isEmpty(wcsTask.getLocationTo())) {
             //更新托盘绑定关系
             wmsBoxInfoService.updateLocationBind(Long.parseLong(wcsTask.getLocationFrom()), Long.parseLong(wcsTask.getLocationTo()), null);
         }
 
-//        this.eventCallBack("543", wcsTask);
     }
 
     @Transactional

+ 4 - 0
warewms-base/src/main/java/com/ruoyi/base/constant/Constant.java

@@ -212,6 +212,10 @@ public class Constant {
          * 取消
          */
         STS90("90"),
+        /**
+         * 部分完成
+         */
+        STS98("98"),
         /**
          * 关闭
          */