From 3dc164dc1ff1d08d29ec7ea5beabaf93a300a70b Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期四, 09 一月 2025 09:55:07 +0800
Subject: [PATCH] 辅料仓功能添加(空箱入库,空箱出库,AGV任务完成,组盘入库,拣选入库,入平库),WMS前端界面优化

---
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs         |   23 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs                   |  180 ++++++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/OutLockStockStatusEnum.cs              |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs                   |    4 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs              |    6 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/PalletTypeEnum.cs                     |    5 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs                 |    1 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs                          |   19 
 代码管理/淮安PDA/pages/stash/InEmpty.vue                                                         |   99 +++
 代码管理/淮安PDA/pages/stash/raworderboxing.vue                                                  |  195 +++---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService_Pick.cs         |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs        |   26 +
 代码管理/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue                             |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs                  |   94 +++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs             |   20 
 代码管理/淮安PDA/pages/stash/receiveorderoutbound.vue                                            |    1 
 /dev/null                                                                                  |  522 --------------------
 代码管理/淮安PDA/pages/stash/AGVFinish.vue                                                       |   92 +++
 代码管理/淮安PDA/pages.json                                                                      |   21 
 代码管理/淮安PDA/pages/stash/OutEmpty.vue                                                        |   98 +++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs |   12 
 代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue                             |    4 
 代码管理/淮安PDA/pages/stash/pickingMat.vue                                                      |   21 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs                        |    8 
 24 files changed, 809 insertions(+), 649 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs"
index f7a2020..eacf3b7 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs"
@@ -29,6 +29,29 @@
             _taskService = taskService;
             _taskRepository = taskRepository;
         }
+        [HttpPost, HttpGet, Route("AGVFinish"), AllowAnonymous]
+        public WebResponseContent AGVFinish(string barcode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                var task = _taskRepository.QueryFirst(x => x.PalletCode == barcode);
+                if (task == null) throw new Exception($"鏈壘鍒颁换鍔�,鎵樼洏鍙枫�恵barcode}銆�");
+                AgvUpdateDTO updateDTO = new AgvUpdateDTO()
+                {
+                    TaskCode = task.AgvTaskNum,
+                    Method = "end"
+                };
+                var agvResponseContent = CtuCallback(updateDTO);
+                if (agvResponseContent.Code == "1") throw new Exception(agvResponseContent.Message);
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
 
         #region 瀹夊叏淇″彿鐢宠
         /// <summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue"
index ac92e4e..b4a0e42 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue"
@@ -21,7 +21,7 @@
     const table = ref({
       key: "id",
       footer: "Foots",
-      cnName: "鍏ュ簱鍗�",
+      cnName: "閲囪喘鍗�",
       name: "purchaseOrder",
       url: "/PurchaseOrder/",
       sortName: "id",
@@ -176,7 +176,7 @@
       },
     ]);
     const detail = ref({
-      cnName: "鍏ュ簱鍗曟槑缁�",
+      cnName: "閲囪喘鍗曟槑缁�",
       table: "InboundOrderDetail",
       columns: [
         {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
index fdb2428..0b94c04 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
@@ -141,7 +141,7 @@
         type: "string",
         width: 120,
         align: "left",
-        bind: { key: "outStockStatus", data: [] },
+        bind: { key: "stockStatusEmun", data: [] },
       },
       {
         field: "creater",
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/PalletTypeEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/PalletTypeEnum.cs"
index acd2a2b..f9a2413 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/PalletTypeEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/PalletTypeEnum.cs"
@@ -8,6 +8,11 @@
 {
     public enum PalletTypeEnum
     {
+        /// <summary>
+        /// 绌虹
+        /// </summary>
+        Empty = -1,
+
         None = 0,
 
         /// <summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/OutLockStockStatusEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/OutLockStockStatusEnum.cs"
index a7f410a..01dbf7c 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/OutLockStockStatusEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/OutLockStockStatusEnum.cs"
@@ -18,6 +18,9 @@
         [Description("鍑哄簱瀹屾垚")]
         鍑哄簱瀹屾垚 = 2,
 
+        [Description("鎷i�夊畬鎴�")]
+        鎷i�夊畬鎴� = 3,
+
         [Description("鎾ら攢")]
         鎾ら攢 = 99
     }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs"
index 7969fb7..0f88297 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs"
@@ -20,6 +20,7 @@
         WebResponseContent GetInboundOrders(SaveModel saveModel);
         WebResponseContent MaterielGroup(int inboundOrderId, string palletCode, string serNum);
 
+        WebResponseContent InPinKu(string inboundOrderId,int warehouseId, List<string> serNums);
         WebResponseContent MaterielGroup(string palletCode, int Initiallife, int warehouseId, List<string> serNums);
 
         WebResponseContent FeedbackInboundOrder(int id);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
index 4f777b0..ffe18b8 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
@@ -51,6 +51,13 @@
         /// <returns></returns>
         //WebResponseContent RequestInboundTask(string palletCode, string stationCode);
         WebResponseContent RequestInboundTask(SaveModel saveModel);
+        /// <summary>
+        /// 绌虹鍏ュ簱
+        /// </summary>
+        /// <param name="barcode"></param>
+        /// <param name="address"></param>
+        /// <returns></returns>
+        WebResponseContent InEmpty(string barcode, string address, int WarehouseId);
 
         /// <summary>
         /// WCS鐢宠鍏ュ簱
@@ -128,5 +135,6 @@
         /// <param name="id"></param>
         /// <returns></returns>
         WebResponseContent Outbound(int id);
+        WebResponseContent OutEmpty(int qty, string address, int WarehouseId);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
index f9b7fd5..9c7ded2 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
@@ -253,6 +253,168 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+
+
+        /// <summary>
+        /// 鍏ュ钩搴擄紝鐩存帴娣诲姞搴撳瓨
+        /// </summary>
+        /// <param name="warehouseId"></param>
+        /// <param name="serNums"></param>
+        /// <returns></returns>
+        public WebResponseContent InPinKu(string inboundOrderId, int warehouseId, List<string> serNums)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseId == warehouseId);
+                if (warehouse == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒拌浠撳簱淇℃伅");
+                }
+                Dt_InboundOrder inboundOrder = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == inboundOrderId && x.WarehouseId == warehouse.WarehouseId).Includes(x => x.Details).First();
+                if (inboundOrder == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟淇℃伅");
+                }
+                if (inboundOrder.Details == null || inboundOrder.Details.Count <= 0)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅");
+                }
+
+                //鍏ュ簱鏄庣粏鍘熷畬鎴愭暟閲�
+                int oldCount = inboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count;
+
+                Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First();
+                if (receiveOrder == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鏀惰揣鍗�");
+                }
+                if (receiveOrder.Details == null || receiveOrder.Details.Count <= 0)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鏀惰揣鍗曟槑缁�");
+                }
+
+                List<string> purchaseOrderNos = receiveOrder.Details.Select(x => x.PurchaseOrderNo).ToList();
+
+                List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNums);
+
+                if (models.Select(x => x.MaterielCode).Distinct().Count() > 1)
+                {
+                    return WebResponseContent.Instance.Error($"鐗╂枡涓嶅彲娣锋斁");
+                }
+
+                string materielCode = models.FirstOrDefault()?.MaterielCode ?? "";
+                Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode);
+                if (materielInfo == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�");
+                }
+
+                List<Dt_InboundOrderDetail> inboundOrderDetails = inboundOrder.Details.Where(x => x.MaterielCode == materielCode).ToList();
+
+                if (inboundOrderDetails == null || inboundOrderDetails.Count <= 0)
+                {
+                    return WebResponseContent.Instance.Error($"鏈湪鍏ュ簱鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欎俊鎭�");
+                }
+                foreach (var model in models)
+                {
+                    if (!inboundOrderDetails.Any(x => x.BatchNo == model.LotNo))
+                        return WebResponseContent.Instance.Error($"鏈湪鍏ュ簱鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欐壒娆°�恵model.LotNo}銆�");
+                }
+                if (receiveOrder.Details.FirstOrDefault(x => x.MaterielCode == materielCode) == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈湪鏀惰揣鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欎俊鎭�");
+                }
+                float beforeQuantity = 0;
+                Dt_StockInfo stockInfo = new Dt_StockInfo()
+                {
+                    PalletCode = DateTime.Now.ToString("yyyyMMddHHmmss"),
+                    StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(),
+                    WarehouseId = inboundOrder.WarehouseId,
+                    PalletType = PalletTypeEnum.SmallPallet.ObjToInt(),
+                    LocationCode = "骞冲簱浣�",
+                    Details = new List<Dt_StockInfoDetail>()
+                };
+
+                List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>();
+                List<int> detailKeys = new List<int>();
+                foreach (var model in models)
+                {
+                    if (purchaseOrderNos.FirstOrDefault(x => x == model.PurchaseOrderNo) == null)
+                    {
+                        return WebResponseContent.Instance.Error($"鏈湪鏀惰揣鍗曟槑缁嗕腑鎵惧埌璇ラ噰璐崟");
+                    }
+
+                    Dt_InboundOrderDetail? notGroupDetail = inboundOrderDetails.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt() && x.OrderQuantity == model.Quantity && !detailKeys.Contains(x.Id) && x.OrderQuantity > x.ReceiptQuantity).FirstOrDefault();
+
+                    if (notGroupDetail == null)
+                    {
+                        return WebResponseContent.Instance.Error($"璇ョ墿鏂欏湪璇ュ叆搴撳崟涓凡鍏ㄩ儴缁勭洏瀹屾垚");
+                    }
+                    detailKeys.Add(notGroupDetail.Id);
+
+                    Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
+                    {
+                        BatchNo = model.LotNo,
+                        MaterielCode = materielInfo.MaterielCode,
+                        MaterielName = materielInfo.MaterielName,
+                        OrderNo = inboundOrder.InboundOrderNo,
+                        SerialNumber = model.SerialNumber,
+                        StockQuantity = model.Quantity,
+                        OutboundQuantity = 0,
+                        Unit = materielInfo.MaterielUnit,
+                        Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(),
+                        ProductionDate = model.ProductionDate,
+                        EffectiveDate = model.EffectiveDate,
+                        InboundOrderRowNo = notGroupDetail.RowNo,
+                    };
+
+                    if (stockInfo.Id > 0)
+                    {
+                        stockInfoDetail.StockId = stockInfo.Id;
+                    }
+                    stockInfo.Details.Add(stockInfoDetail);
+
+                    stockInfoDetails.Add(stockInfoDetail);
+
+                    notGroupDetail.ReceiptQuantity = model.Quantity;
+                    notGroupDetail.OverInQuantity = model.Quantity;
+                    notGroupDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+                }
+
+                //鍏ュ簱鏄庣粏鏂板瀹屾垚鏁伴噺
+                int newCount = inboundOrderDetails.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count;
+                if (inboundOrder.Details.Count == (newCount + oldCount))
+                {
+                    inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt();
+                }
+                else
+                    inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱涓�.ObjToInt();
+                float totalQuantity = stockInfo.Details.Sum(x => x.StockQuantity);
+
+                _unitOfWorkManage.BeginTran();
+                if (stockInfo.Id == 0)
+                {
+                    _stockRepository.StockInfoRepository.Db.InsertNav(stockInfo).Include(x => x.Details).ExecuteCommand();
+                }
+                else
+                {
+                    _stockRepository.StockInfoRepository.Db.UpdateNav(stockInfo).Include(x => x.Details, new UpdateNavOptions() { OneToManyInsertOrUpdate = true }).ExecuteCommand();
+                }
+                _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetails);
+                _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder);
+                _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.Inbound);
+                _unitOfWorkManage.CommitTran();
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+
         /// <summary>
         /// 缁勭洏
         /// </summary>
@@ -273,7 +435,7 @@
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒拌浠撳簱淇℃伅");
                 }
-                
+
                 Dt_InboundOrder inboundOrder = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == orderNo && x.WarehouseId == warehouse.WarehouseId).Includes(x => x.Details).First();
                 if (inboundOrder == null)
                 {
@@ -342,20 +504,7 @@
                         return WebResponseContent.Instance.Error($"鎵樼洏鍙烽噸澶�");
                     }
                     beforeQuantity = stockInfo.Details.Sum(x => x.StockQuantity);
-                }
-
-                if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString())
-                {
-                    stockInfo.Remark = Initiallife.ToString();
-                    if (palletCode.Substring(0, 1) == "6")
-                    {
-                        stockInfo.PalletType = PalletTypeEnum.MediumPallet.ObjToInt();
-                    }
-                    else
-                    {
-                        stockInfo.PalletType = PalletTypeEnum.LargestPallet.ObjToInt();
-                    }
-                }
+                };
 
                 List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>();
                 List<int> detailKeys = new List<int>();
@@ -436,6 +585,7 @@
             return content;
         }
 
+
         public WebResponseContent MaterielGroup(string palletCode, int Initiallife, int warehouseId, List<string> serNums)
         {
             WebResponseContent content = new WebResponseContent();
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs"
index ab94fc4..9f97d1b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs"
@@ -92,13 +92,13 @@
                 Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrder.Details.FirstOrDefault(x => x.MaterielCode == model.MaterielCode && (x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt() || x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.Receiving.ObjToInt()));
                 if (purchaseOrderDetail == null)
                 {
-                    return WebResponseContent.Instance.Error($"璇ユ槑缁嗘敹璐у凡瀹屾垚");
+                    return WebResponseContent.Instance.Error($"璇ラ噰璐崟鏄庣粏鏀惰揣宸插畬鎴�");
                 }
                 //鍒ゆ柇鏄惁瀛樺湪瀵瑰簲閲囪喘鏄庣粏鐨勬敹璐ф槑缁�
                 Dt_ReceiveOrderDetail? detail = receiveOrder.Details.FirstOrDefault(x => x.PurchaseOrderNo == model.PurchaseOrderNo && x.PurchaseOrderDetailRowNo == purchaseOrderDetail.RowNo);
                 if (detail != null && detail.ReceivedQuantity == purchaseOrderDetail.PurchaseDetailQuantity)
                 {
-                    return WebResponseContent.Instance.Error($"璇ユ槑缁嗗凡鏀惰揣");
+                    return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏄庣粏宸叉敹璐�");
                 }
 
                 lock (_rowNoLocker)
@@ -116,13 +116,21 @@
                         {
                             purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt();
                         }
-                        float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty) + model.Quantity;
-                        _unitOfWorkManage.BeginTran();
+                        else
+                        {
+                            purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Receiving.ObjToInt();
+                        }
+                        float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty); //+ model.Quantity;
                         if (purchaseOrder.OrderQuantity == sumQty)
                         {
                             purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Received.ObjToInt();
-                            _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder);
                         }
+                        else
+                        {
+                            purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Receiving.ObjToInt();
+                        }
+                        _unitOfWorkManage.BeginTran();
+                        _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder);
                         BaseDal.UpdateData(detail);
                         _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail);
                         _unitOfWorkManage.CommitTran();
@@ -174,7 +182,7 @@
                         {
                             purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt();
                         }
-                        float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty) + model.Quantity;
+                        float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty);// + model.Quantity;
                         _unitOfWorkManage.BeginTran();
                         BaseDal.AddData(receiveOrderDetail);
                         if (purchaseOrder.OrderQuantity == sumQty)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs"
index 42e77bf..88a2d16 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs"
@@ -151,8 +151,10 @@
                 receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Completed.ObjToInt();
                 receiveOrder.UploadStatus = WhetherEnum.True.ObjToInt();
                 BaseDal.UpdateData(receiveOrder);
+                //鍒涘缓鍏ュ簱鍗�
+                CreateInboundOrder(orderId);
                 //鏀惰揣鎺ㄩ�佽嚦ERP 娴嬭瘯娉ㄩ噴
-                _invokeERPService.InvokeMatReceiveApi(receiveModel);
+                //_invokeERPService.InvokeMatReceiveApi(receiveModel);
                 return WebResponseContent.Instance.OK();
             }
             catch (Exception ex)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs"
index 5f7d14d..e5d85bc 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs"
@@ -94,6 +94,10 @@
                 var palletCode = saveModel.MainData["barcode"].ToString();
                 var warehouseId = saveModel.MainData["warehouseId"].ObjToInt();
                 Dt_StockInfo stockInfo = BaseDal.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode && x.WarehouseId == warehouseId).Includes(x => x.Details).First();
+                if (stockInfo.StockStatus != StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt())
+                {
+                    throw new Exception($"璇ユ墭鐩樿繕鏈嚭搴撳畬鎴�");
+                }
                 if (stockInfo == null)
                 {
                     throw new Exception($"鏈壘鍒板簱瀛樹俊鎭�");
@@ -103,7 +107,7 @@
                 {
                     throw new Exception($"鏈壘鍒板簱瀛樿鎯�");
                 }
-                List<Dt_OutStockLockInfo> stockLockInfos = BaseDal.QueryData(x => x.StockId == stockInfo.Id&&x.Status< OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt());
+                List<Dt_OutStockLockInfo> stockLockInfos = BaseDal.QueryData(x => x.StockId == stockInfo.Id && x.Status == OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt());
                 return stockLockInfos;
             }
             catch (Exception ex)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService_Pick.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService_Pick.cs"
index e5e22ed..59ae7a4 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService_Pick.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService_Pick.cs"
@@ -39,7 +39,7 @@
                 List<Dt_OutStockLockInfo> outStockLockInfos = Repository.QueryData(x => x.PalletCode == palletCode);
                 for (int i = 0; i < outStockLockInfos.Count; i++)
                 {
-                    outStockLockInfos[i].Status = OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
+                    outStockLockInfos[i].Status = OutLockStockStatusEnum.鎷i�夊畬鎴�.ObjToInt();
                 }
                 List<Dt_StockInfoDetail> beforeDetaile = stockInfo.Details.GroupBy(x => x.MaterielCode).Select(x => new Dt_StockInfoDetail { MaterielCode = x.Key, StockQuantity = x.Sum(v => v.StockQuantity) }).ToList();
 
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
index 3dedb60..7115035 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
@@ -16,6 +16,7 @@
 #endregion << 鐗� 鏈� 娉� 閲� >>
 
 using AutoMapper;
+using Microsoft.AspNetCore.Mvc.ApiExplorer;
 using Newtonsoft.Json;
 using SqlSugar;
 using System.Reflection.Emit;
@@ -118,6 +119,24 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+        /// <summary>
+        /// 鏀捐揣瀹屾垚
+        /// </summary>
+        /// <param name="code"></param>
+        /// <returns></returns>
+        public WebResponseContent PutFinish(string code)
+        {
+            try
+            {
+                string response = HttpHelper.Post("http://127.0.0.1:9281/api/CTU_AGV/PutFinish", code);
+
+                return JsonConvert.DeserializeObject<WebResponseContent>(response) ?? WebResponseContent.Instance.Error("杩斿洖閿欒");
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
 
         /// <summary>
         /// 鍏ュ簱浠诲姟瀹屾垚
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
index 664fc0a..965b256 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
@@ -1,4 +1,6 @@
-锘縰sing System;
+锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
+using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -109,7 +111,96 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+        /// <summary>
+        /// 鍏ョ┖绠�
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent InEmpty(string barcode, string address, int WarehouseId)
+        {
+            try
+            {
+                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == WarehouseId);
+                if (warehouse == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒板簱鍖�");
+                }
+                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == barcode && x.StockStatus != StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt());
+                if (stockInfo != null) throw new Exception($"鎵樼洏鍙峰凡瀛樺湪");
+                stockInfo = new Dt_StockInfo()
+                {
+                    PalletCode = barcode,
+                    StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt(),
+                    WarehouseId = WarehouseId,
+                    PalletType = PalletTypeEnum.Empty.ObjToInt(),
+                    Details = new List<Dt_StockInfoDetail>()
+                };
+                Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.WarehouseId == WarehouseId);
+                if (locationInfo == null) return WebResponseContent.Instance.Error($"鏈壘鍒板綋鍓嶅簱鍖鸿揣浣嶄俊鎭�");
+                locationInfo = _basicService.LocationInfoService.AssignLocation(locationInfo.RoadwayNo, (PalletTypeEnum)stockInfo.PalletType, stockInfo.WarehouseId);
+                if (locationInfo == null)
+                {
+                    return WebResponseContent.Instance.Error($"璐т綅鍒嗛厤澶辫触,鏈壘鍒板彲鍒嗛厤璐т綅");
+                }
 
+                Dt_Task newTask = new Dt_Task()
+                {
+                    CurrentAddress = address,
+                    Grade = 0,
+                    NextAddress = locationInfo.LocationCode,
+                    PalletCode = barcode,
+                    Roadway = locationInfo.RoadwayNo,
+                    SourceAddress = address,
+                    TargetAddress = locationInfo.LocationCode,
+                    TaskType = TaskTypeEnum.Inbound.ObjToInt(),
+                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
+                    WarehouseId = stockInfo.WarehouseId,
+                    PalletType = stockInfo.PalletType
+                };
+
+                _unitOfWorkManage.BeginTran();
+                int taskId = BaseDal.AddData(newTask);
+                newTask.TaskId = taskId;
+                _stockRepository.StockInfoRepository.AddData(stockInfo);
+                _unitOfWorkManage.CommitTran();
+                PushTasksToWCS(new List<Dt_Task> { newTask });
+                PutFinish(address);
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+        public WebResponseContent OutEmpty(int qty, string address, int WarehouseId)
+        {
+            try
+            {
+                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == WarehouseId);
+                if (warehouse == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒板簱鍖�");
+                }
+                var stockInfos = _stockRepository.StockInfoRepository.QueryData(x => x.WarehouseId == WarehouseId && x.PalletType == PalletTypeEnum.Empty.ObjToInt() && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(), qty, nameof(Dt_StockInfo.CreateDate));
+                if (stockInfos == null) return WebResponseContent.Instance.Error($"{warehouse.WarehouseName}鏈壘鍒扮┖绠卞簱瀛�");
+                if (stockInfos.Count < qty) return WebResponseContent.Instance.Error($"{warehouse.WarehouseName}绌虹搴撳瓨涓嶈冻,搴撳瓨鏁般�恵stockInfos.Count}銆�");
+                List<Dt_Task> tasks = GetTasks(stockInfos);
+                stockInfos.ForEach(x =>
+                {
+                    x.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt();
+                });
+                _unitOfWorkManage.BeginTran();
+                BaseDal.AddData(tasks);
+                _stockRepository.StockInfoRepository.UpdateData(stockInfos);
+                _unitOfWorkManage.CommitTran();
+                PushTasksToWCS(tasks);
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
         public WebResponseContent DeviceRequestInboundTask(string stationCode, string roadwayNo, string palletCode)
         {
             try
@@ -179,6 +270,7 @@
                 WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask);
 
                 PushTasksToWCS(new List<Dt_Task> { newTask });
+                if (newTask.WarehouseId == 5) PutFinish(stationCode);
                 return WebResponseContent.Instance.OK(data: wMSTaskDTO);
             }
             catch (Exception ex)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs"
index 4e353d1..9f64e5f 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs"
@@ -30,6 +30,18 @@
         }
 
         /// <summary>
+        /// 鍏ュ钩搴�
+        /// </summary>
+        /// <param name="orderNo"></param>
+        /// <param name="warehouseId"></param>
+        /// <param name="serNums"></param>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("InPinKu")]
+        public WebResponseContent InPinKu(string orderNo, int warehouseId, [FromBody] List<string> serNums)
+        {
+            return Service.InPinKu(orderNo, warehouseId, serNums);
+        }
+        /// <summary>
         /// 鍗曚釜鐗╂枡鐮佺粍鐩�
         /// </summary>
         /// <param name="inboundOrderId"></param>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
index ab095ee..e63682a 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
@@ -43,6 +43,30 @@
             return Service.RequestInboundTask(saveModel);
         }
 
+        /// <summary>
+        /// 绌虹鍏ュ簱
+        /// </summary>
+        /// <param name="barcode">鎵樼洏鍙�</param>
+        /// <param name="address">鍦板潃</param>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("InEmpty"), AllowAnonymous]
+        public WebResponseContent InEmpty(string barcode, string address, int WarehouseId)
+        {
+            return Service.InEmpty(barcode, address, WarehouseId);
+        }
+
+        /// <summary>
+        /// 绌虹鍑哄簱
+        /// </summary>
+        /// <param name="qty">鏁伴噺</param>
+        /// <param name="address">鍦板潃</param>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("OutEmpty"), AllowAnonymous]
+        public WebResponseContent OutEmpty(int qty, string address, int WarehouseId)
+        {
+            return Service.OutEmpty(qty, address, WarehouseId);
+        }
+
         [HttpPost, HttpGet, Route("DeviceRequestInboundTask"), AllowAnonymous]
         public WebResponseContent DeviceRequestInboundTask(string stationCode, string roadwayNo, string palletCode)
         {
@@ -79,7 +103,7 @@
         /// <param name="stockSelectViews"></param>
         /// <returns></returns>
         [HttpPost, HttpGet, Route("GenerateOutboundTask"), AllowAnonymous]
-        public WebResponseContent GenerateOutboundTask(int orderDetailId, [FromBody]List<StockSelectViewDTO> stockSelectViews)
+        public WebResponseContent GenerateOutboundTask(int orderDetailId, [FromBody] List<StockSelectViewDTO> stockSelectViews)
         {
             return Service.GenerateOutboundTask(orderDetailId, stockSelectViews);
         }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages.json" "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages.json"
index cfd92e1..2db61c0 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages.json"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages.json"
@@ -52,6 +52,27 @@
 			}
 		},
 		{
+			"path": "pages/stash/AGVFinish",
+			"style": {
+				"navigationBarTitleText": "AGV瀹屾垚",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/stash/InEmpty",
+			"style": {
+				"navigationBarTitleText": "绌虹鍏ュ簱",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/stash/OutEmpty",
+			"style": {
+				"navigationBarTitleText": "绌虹鍑哄簱",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
 			"path": "pages/stash/pickingMat",
 			"style": {
 				"navigationBarTitleText": "鎷i��",
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/AGVFinish.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/AGVFinish.vue"
new file mode 100644
index 0000000..ba5b96f
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/AGVFinish.vue"
@@ -0,0 +1,92 @@
+<template>
+	<view>
+		<view class="itemstyle">
+			<uni-forms label-width="180">
+				<uni-forms-item label="鎵樼洏鏉$爜:">
+					<uni-easyinput type="text" placeholder="璇锋壂鎻忔墭鐩樻潯鐮�" ref='midInput' :focus="!focus" v-model="barcode"
+						@input="barcodeInput" />
+				</uni-forms-item>
+				<uni-forms-item>
+					<button @click="AGVFinish" type="primary" size="default" style="margin-top: 2%;">纭瀹屾垚</button>
+				</uni-forms-item>
+			</uni-forms>
+		</view>
+		<u-toast ref="uToast" />
+	</view>
+</template>
+
+<script>
+	const innerAudioContext = uni.createInnerAudioContext();
+	export default {
+		data() {
+			return {
+				focus: false,
+				barcode: "",
+			}
+		},
+		onShow() {},
+		onLoad(res) {
+			this.focus = false;
+		},
+		methods: {
+			voiceSpeech(src) {
+				innerAudioContext.src = src; // '../../static/success.mp3';
+				innerAudioContext.play();
+			},
+			barcodeInput() {
+				this.$nextTick(function(x) {
+					if (this.barcode.length > 0) {
+						this.focus = true;
+					}
+				})
+			},
+			AGVFinish() {
+				if (this.barcode == "") {
+					this.$refs.uToast.show({
+						title: "璇锋壂鎻忔墭鐩樼爜",
+						type: 'error'
+					})
+					return;
+				}
+				this.$u.post('http://127.0.0.1:9291/api/CTU_AGV/AGVFinish?&barcode=' + this.barcode).then(
+					res => {
+						if (res.status) {
+							this.$refs.uToast.show({
+								title: "瀹屾垚鎴愬姛",
+								type: "success"
+							})
+							this.barcode = "";
+						} else {
+							this.$refs.uToast.show({
+								title: res.message,
+								type: "error"
+							})
+						}
+					})
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import '@/common/uni-ui.scss';
+
+	.content {
+		display: flex;
+		height: 150px;
+	}
+
+	.content-text {
+		font-size: 14px;
+		color: #666;
+	}
+
+	.itemstyle {
+		margin-top: 30px;
+		margin-left: 5%;
+	}
+
+	.headerstyle {
+		width: 90%;
+	}
+</style>
\ No newline at end of file
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/InEmpty.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/InEmpty.vue"
new file mode 100644
index 0000000..eaf7329
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/InEmpty.vue"
@@ -0,0 +1,99 @@
+<template>
+	<view>
+		<view class="itemstyle">
+			<uni-forms label-width="180">
+				<uni-forms-item label="鎵樼洏鏉$爜:">
+					<uni-easyinput type="text" placeholder="璇锋壂鎻忔墭鐩樻潯鐮�" ref='midInput' :focus="!focus" v-model="barcode"
+						@input="barcodeInput" />
+				</uni-forms-item>
+				<uni-forms-item>
+					<button @click="InEmpty" type="primary" size="default" style="margin-top: 2%;">绌虹鍏ュ簱</button>
+				</uni-forms-item>
+			</uni-forms>
+		</view>
+		<u-toast ref="uToast" />
+	</view>
+</template>
+
+<script>
+	const innerAudioContext = uni.createInnerAudioContext();
+	export default {
+		data() {
+			return {
+				focus: false,
+				barcode: "",
+				address: "",
+				WarehouseId: ""
+			}
+		},
+		onShow() {},
+		onLoad(res) {
+			this.WarehouseId = res.warehouseId;
+			this.focus = false;
+			if (res.warehouseId == 5) {
+				this.address = "8005";
+			}
+		},
+		methods: {
+			voiceSpeech(src) {
+				innerAudioContext.src = src; // '../../static/success.mp3';
+				innerAudioContext.play();
+			},
+			barcodeInput() {
+				this.$nextTick(function(x) {
+					if (this.barcode.length > 0) {
+						this.focus = true;
+					}
+				})
+			},
+			InEmpty() {
+				if (this.barcode == "") {
+					this.$refs.uToast.show({
+						title: "璇锋壂鎻忔墭鐩樼爜",
+						type: 'error'
+					})
+					return;
+				}
+				this.$u.post('/api/Task/InEmpty?barcode=' + this.barcode + '&address=' + this.address + '&WarehouseId=' +
+					this.WarehouseId).then(
+					res => {
+						if (res.status) {
+							this.$refs.uToast.show({
+								title: "鎴愬姛",
+								type: "success"
+							})
+							this.barcode = "";
+						} else {
+							this.$refs.uToast.show({
+								title: res.message,
+								type: "error"
+							})
+						}
+					})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import '@/common/uni-ui.scss';
+
+	.content {
+		display: flex;
+		height: 150px;
+	}
+
+	.content-text {
+		font-size: 14px;
+		color: #666;
+	}
+
+	.itemstyle {
+		margin-top: 30px;
+		margin-left: 5%;
+	}
+
+	.headerstyle {
+		width: 90%;
+	}
+</style>
\ No newline at end of file
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/InPinku.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/InPinku.vue"
deleted file mode 100644
index 34a0abe..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/InPinku.vue"
+++ /dev/null
@@ -1,522 +0,0 @@
-<template>
-	<view>
-		<uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
-		</uni-segmented-control>
-		<view class="content">
-			<view v-if="current === 0" class="headerstyle">
-				<view class="itemstyle">
-					<uni-forms label-width="180">
-						<uni-forms-item label="鍐呯鏍囩:">
-							<uni-easyinput type="text" placeholder="璇锋壂鎻忓唴绠辨爣绛�" ref='midInput' :focus="focus"
-								v-model="materSn" @input="snInput" />
-						</uni-forms-item>
-						<uni-forms-item>
-							<button @click="submit" type="primary" size="default" style="margin-top: 2%;">鍏ュ钩搴�</button>
-						</uni-forms-item>
-					</uni-forms>
-					<uni-list>
-						<uni-list-item direction="column" v-for="(item,index) in matInfos" :key="index">
-							<template v-slot:body>
-								<view class="uni-list-box">
-									<uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
-										@click="deleteList(index)">
-									</uni-icons>
-									<view class="uni-content">
-										<view class="uni-title-sub uni-ellipsis-2">閲囪喘鍗曞彿锛歿{item.purchaseOrderNo}}</view>
-										<view class="uni-note">鐗╂枡缂栫爜锛歿{item.materielCode}}</view>
-										<view class="uni-note">鎵规鍙凤細{{item.lotNo}}</view>
-										<view class="uni-note">鏁伴噺锛歿{item.quantity}}</view>
-										<view class="uni-note">鐢熶骇鏃ユ湡锛歿{item.productionDate}}</view>
-										<view class="uni-note">鏈夋晥鏈燂細{{item.effectiveDate}}</view>
-									</view>
-								</view>
-							</template>
-						</uni-list-item>
-					</uni-list>
-				</view>
-			</view>
-			<view v-if="current === 1" class="headerstyle">
-				<view class="itemstyle">
-					<uni-forms label-width="120">
-						<uni-forms-item label="鎵樼洏鏉$爜">
-							<uni-easyinput type="text" :focus="!addressFocus" v-model="inboundBarcode"
-								placeholder="璇锋壂鎻忔墭鐩樻潯鐮�" ref='midInput' @input="inputChangebarcode" />
-						</uni-forms-item>
-						<uni-forms-item label="鍦板潃鏉$爜">
-							<uni-easyinput type="text" v-model="address" placeholder="璇锋壂鎻忓湴鍧�鏉$爜" ref='midInput'
-								:focus="addressFocus" />
-						</uni-forms-item>
-						<uni-forms-item>
-							<button @click="inbound" type="primary" size="default" style="margin-top: 2%;">鍏ュ簱纭</button>
-						</uni-forms-item>
-					</uni-forms>
-				</view>
-			</view>
-			<view v-if="current === 2" class="headerstyle">
-				<view class="itemstyle">
-					<uni-list :border="true">
-						<uni-list-item direction="column" v-for="(item,index) in orderInfo" :key="index">
-							<template v-slot:body>
-								<view class="uni-list-box">
-									<view class="uni-content">
-										<view style="font-size: 18px;">鍗曟嵁鍙凤細{{orderNo}}</view>
-										<view style="font-size: 18px;">鐗╂枡缂栫爜锛歿{item.materielCode}}</view>
-										<!-- <view style="font-size: 18px;">鐗╂枡鍚嶇О锛歿{item.matName}}</view> -->
-										<view style="font-size: 18px;">鏁伴噺锛歿{item.orderQuantity}}</view>
-										<view style="font-size: 18px;">鍗曚綅锛歿{item.unit}}</view>
-										<view style="font-size: 18px;">缁勭洏鏁伴噺锛歿{item.receiptQuantity}}</view>
-									</view>
-								</view>
-							</template>
-						</uni-list-item>
-					</uni-list>
-				</view>
-			</view>
-			<view v-if="current === 3" class="headerstyle">
-				<view class="itemstyle">
-					<uni-forms label-width="120">
-						<uni-forms-item>
-							<uni-easyinput type="text" @input="releaseboxInput" v-model="value" placeholder="璇锋壂鐮�"
-								ref='midInput' :focus="true" />
-						</uni-forms-item>
-						<uni-forms-item>
-							<button @click="releasebox" type="primary" size="default">瑙g洏</button>
-						</uni-forms-item>
-					</uni-forms>
-					<uni-list>
-						<uni-list-item direction="column" v-if="value2">
-							<template v-slot:body>
-								<view class="uni-list-box">
-									<view class="uni-content">
-										<view class="uni-title-sub uni-ellipsis-2">鎵樼洏鍙凤細{{value2}}</view>
-									</view>
-								</view>
-							</template>
-						</uni-list-item>
-						<uni-list-item direction="column" v-for="item in matTotal" :key="item.matCode">
-							<template v-slot:body>
-								<view class="uni-list-box">
-									<view class="uni-content">
-										<view class="uni-title-sub uni-ellipsis-2">鐗╂枡缂栫爜锛歿{item.matCode}}</view>
-										<view class="uni-title-sub uni-ellipsis-2">鏁伴噺锛歿{item.matQuantity}}</view>
-									</view>
-								</view>
-							</template>
-						</uni-list-item>
-
-						<uni-list-item direction="column" v-for="(item,index) in matInfo" :key="index">
-							<template v-slot:body>
-								<view class="uni-list-box">
-									<view class="uni-content">
-										<view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
-											鐗╂枡缂栫爜锛歿{item.matCode}}
-										</view>
-										<view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
-											鐗╂枡鍚嶇О锛歿{item.matName}}
-										</view>
-										<view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
-											鏁伴噺锛歿{item.matQty}}
-										</view>
-									</view>
-								</view>
-							</template>
-						</uni-list-item>
-					</uni-list>
-				</view>
-			</view>
-		</view>
-		<u-toast ref="uToast" />
-	</view>
-</template>
-
-<script>
-	const innerAudioContext = uni.createInnerAudioContext();
-	export default {
-		data() {
-			return {
-				items: ['鍏ュ钩搴�'], //, '鍏ュ簱', '鍗曟嵁淇℃伅', '瑙g洏'
-				current: 0,
-				matTotal: [],
-				matInfos: [],
-				orderNo: "",
-				label: "",
-				orderInfo: [],
-				focus: false,
-				barcode: "",
-				materSn: "",
-				Initiallife: 1000,
-				sns: [],
-				sn: "",
-				addressFocus: false,
-				inboundBarcode: "",
-				address: "",
-				check: true,
-				value: "",
-				matInfo: [],
-				value2: "",
-				matTotals: [],
-				warehouseId: "",
-				Test: false,
-				Testlabel: "",
-				Testplaceholder: "",
-				Testcheck: false,
-			}
-		},
-		onShow() {},
-		onLoad(res) {
-			this.focus = false;
-			this.addressFocus = false;
-			this.orderNo = res.orderNo;
-			this.warehouseId = res.warehouseId;
-			if (this.warehouseId == 6) { //娴嬭瘯鏋朵粨搴撳尯ID
-				this.Test = true;
-				this.Testlabel = "鍒濆瀵垮懡:";
-				this.Testplaceholder = "璇疯緭鍏ュ垵濮嬪鍛�";
-			} else if (this.warehouseId == 2) { //娌瑰ⅷ浠撳簱鍖篒D
-				this.Test = true;
-				this.Testlabel = "鏁伴噺:";
-				this.Testplaceholder = "璇疯緭鍏ユ暟閲�";
-				this.Initiallife = 16;
-			} else if (this.warehouseId == 5) { //杈呮枡浠撳簱鍖篒D
-				this.address = "8005";
-			}
-			this.label = "鍗曟嵁缂栧彿锛�" + this.orderNo;
-			this.getData();
-		},
-		methods: {
-			voiceSpeech(src) {
-				innerAudioContext.src = src; // '../../static/success.mp3';
-				innerAudioContext.play();
-			},
-			//瑙g洏
-			releasebox() {
-				if (this.value.length == 0) {
-					this.$refs.uToast.show({
-						title: "璇锋壂鐮�",
-						type: "error"
-					})
-					return;
-				}
-				var param;
-				var matInfo = this.value.split('|');
-				if (matInfo.length == 7) {
-					param = {
-						MainData: {
-							"innerCode": this.value
-						}
-					}
-				} else {
-					param = {
-						MainData: {
-							"barcode": this.value
-						}
-					}
-				}
-				this.$u.post('/api/StockOperate/ReleaseAllBox', param).then(resdt => {
-					if (resdt.status) {
-						uni.$showMsg('瑙g洏鎴愬姛!')
-						this.value = "";
-						this.matInfo = [];
-						this.matTotals = [];
-						this.value2 = "";
-					} else {
-						this.$refs.uToast.show({
-							title: resdt.message,
-							type: "error"
-						})
-					}
-				})
-			},
-			releaseboxInput() {
-				this.$nextTick(() => {
-					if (this.value.length == 0) {
-						return;
-					}
-					var matInfo = this.value.split('|');
-					this.matInfo = [];
-					if (matInfo.length == 7) {
-						this.$u.post('/api/StockOperate/GetStockInfoByInnerCode', {
-							MainData: {
-								"innerCode": this.value
-							}
-						}).then(res => {
-							if (res.status) {
-								this.matInfo = res.data.stockInfo;
-								this.matTotals = res.data.stockTotal;
-								this.value2 = res.data.barcode;
-							} else {
-								this.$refs.uToast.show({
-									title: res.message,
-									type: "error"
-								})
-							}
-						})
-					} else {
-						this.$u.post('/api/StockOperate/GetStockInfoByBarcode', {
-							MainData: {
-								"barcode": this.value
-							}
-						}).then(res => {
-							if (res.status) {
-								this.matInfo = res.data.stockInfo;
-								this.matTotals = res.data.stockTotal;
-								this.value2 = res.data.barcode;
-							} else {
-								this.$refs.uToast.show({
-									title: res.message,
-									type: "error"
-								})
-							}
-						})
-					}
-				})
-			},
-
-			updateFocus() {
-				debugger
-				this.$nextTick(() => {
-					this.materSn = '';
-					if (!this.focus) {
-						this.focus = true;
-					}
-				});
-			},
-			barcodeFocus() {
-				debugger
-				this.barcode = '';
-				if (this.focus) {
-					this.focus = false;
-				}
-			},
-			getData() {
-				var postData = {
-					MainData: {
-						orderNo: this.orderNo
-					},
-				}
-				this.$u.post('/api/InboundOrderDetail/GetInboundOrderDetails', postData).then((res) => {
-					if (res.status) {
-						this.orderInfo = res.data;
-						if (this.orderInfo.length > 3) {
-							this.loadVisible = true;
-						}
-					}
-				})
-			},
-			onClickItem(e) {
-				this.focus = false;
-				this.addressFocus = false;
-				if (this.current !== e.currentIndex) {
-					this.current = e.currentIndex;
-					if (this.current == 2) {
-						this.getData();
-					}
-				}
-			},
-			barcodeInput() {
-				this.$nextTick(function(x) {
-					if (this.barcode.length > 0) {
-						// if (this.barcode.substring(0, 1) == 'A' || this.barcode.substring(0, 2) == 'TP') {
-						this.focus = true;
-						// } else {
-						// 	this.$refs.uToast.show({
-						// 		title: "鎵爜閿欒,璇锋壂鎻忔墭鐩樼爜",
-						// 		type: "error"
-						// 	})
-						// }
-					}
-				})
-			},
-			snInput() {
-				this.$nextTick(() => {
-					if (this.warehouseId == 6 || this.warehouseId == 2) {
-						if (this.sns.length > 0) {
-							this.sns = [];
-						}
-					}
-					if (this.materSn != "") {
-						this.focus = false;
-						var matSn = this.materSn;
-						setTimeout(() => {
-							this.materSn = "";
-						}, 10);
-						this.$u.post('/api/MaterielInfo/CodeAnalysis?serNum=' + matSn, {}).then((res) => {
-							this.Testcheck = false;
-							if (res.status) {
-								this.sns.push(res.data.serialNumber);
-								if (this.warehouseId == 6 || this.warehouseId == 2) {
-									if (this.matInfos.length > 0) {
-										this.matInfos = [];
-									}
-								}
-								this.matInfos.push(res.data);
-								if (res.message) {
-									this.$refs.uToast.show({
-										title: res.message,
-										type: "error"
-									})
-									setTimeout(() => {
-										this.voiceSpeech('../../static/fail.mp3');
-									}, 100);
-									return;
-								}
-								setTimeout(() => {
-									this.voiceSpeech('../../static/success.mp3');
-								}, 100);
-							} else {
-								this.$refs.uToast.show({
-									title: res.message,
-									type: "error"
-								})
-								setTimeout(() => {
-									this.voiceSpeech('../../static/fail.mp3');
-								}, 100);
-							}
-						})
-					}
-				})
-			},
-			inbound() {
-				if (this.inboundBarcode == "") {
-					this.$refs.uToast.show({
-						title: "璇锋壂鎻忔墭鐩樻潯鐮�",
-						type: "error"
-					})
-					return;
-				}
-				if (this.address == "") {
-					this.$refs.uToast.show({
-						title: "璇锋壂鎻忓湴鍧�鏉$爜",
-						type: "error"
-					})
-					return;
-				}
-				var postData = {
-					MainData: {
-						"barcode": this.inboundBarcode,
-						"startPoint": this.address,
-						"warehouseId": this.warehouseId
-					}
-				}
-				this.$u.post('/api/Task/RequestInboundTask', postData).then(res => {
-					if (res.status) {
-						uni.$showMsg(res.message);
-						this.inboundBarcode = "";
-						this.address = "";
-						setTimeout(() => {
-							this.addressFocus = false;
-						}, 200);
-					} else {
-						this.$refs.uToast.show({
-							title: res.message,
-							type: "error"
-						})
-					}
-				}).catch(err => {
-					this.$refs.uToast.show({
-						title: err.message,
-						type: "error"
-					})
-				})
-			},
-			inputChangebarcode() {
-				this.addressFocus = false;
-				this.$nextTick(function(x) {
-					if (this.inboundBarcode != '') {
-						this.addressFocus = true;
-					}
-				})
-			},
-			deleteList(res) {
-				this.matInfos.splice(res, 1);
-				this.sns.splice(res, 1);
-			},
-			submit() {
-				if (this.barcode == "") {
-					this.$refs.uToast.show({
-						title: "璇锋壂鎻忔墭鐩樻潯鐮�",
-						type: 'error'
-					})
-					return;
-				}
-				if (this.matInfos.length == 0) {
-					this.$refs.uToast.show({
-						title: "璇锋壂鎻忓唴绠辨爣绛�",
-						type: 'error'
-					})
-					return;
-				}
-				if (this.Test) {
-					if (!this.Testcheck) {
-						this.Testcheck = true;
-						if (this.warehouseId == 2) {
-							this.$refs.uToast.show({
-								title: "璇风‘璁ゆ暟閲�",
-								type: 'error'
-							})
-						} else if (this.warehouseId == 6) {
-							this.$refs.uToast.show({
-								title: "璇风‘璁ゅ垵濮嬪鍛�",
-								type: 'error'
-							})
-						}
-						return;
-					}
-				}
-				if (this.warehouseId == 2) { //娌瑰ⅷ浠撳簱鍖篒D
-					this.sn = this.sns[0];
-					debugger
-					for (var i = 0; i < this.Initiallife - 1; i++) {
-						this.sns.push(this.sn);
-					}
-				}
-				debugger
-				let url = 'palletCode=' + this.barcode + '&initiallife=' + this.Initiallife + '&warehouseId=' + this
-					.warehouseId;
-
-				this.$u.post('/api/InboundOrder/ManualMaterielGroup?' + url, this.sns).then(res => {
-					this.Testcheck = false;
-					if (res.status) {
-						this.$refs.uToast.show({
-							title: "缁勭洏鎴愬姛",
-							type: "success"
-						})
-						this.focus = false;
-						this.barcode = "";
-						this.matInfos = [];
-						this.sns = [];
-						this.matTotal = [];
-					} else {
-						this.$refs.uToast.show({
-							title: res.message,
-							type: "error"
-						})
-					}
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	@import '@/common/uni-ui.scss';
-
-	.content {
-		display: flex;
-		height: 150px;
-	}
-
-	.content-text {
-		font-size: 14px;
-		color: #666;
-	}
-
-	.itemstyle {
-		margin-top: 30px;
-		margin-left: 5%;
-	}
-
-	.headerstyle {
-		width: 90%;
-	}
-</style>
\ No newline at end of file
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/OutEmpty.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/OutEmpty.vue"
new file mode 100644
index 0000000..29b279b
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/OutEmpty.vue"
@@ -0,0 +1,98 @@
+<template>
+	<view>
+		<view class="itemstyle">
+			<uni-forms label-width="180">
+				<uni-forms-item label="鏁伴噺:">
+					<uni-easyinput type="text" placeholder="璇疯緭鍏ユ暟閲�" ref='midInput' :focus="!focus" v-model="qty"
+						@input="barcodeInput" />
+				</uni-forms-item>
+				<uni-forms-item>
+					<button @click="OutEmpty" type="primary" size="default" style="margin-top: 2%;">绌虹鍑哄簱</button>
+				</uni-forms-item>
+			</uni-forms>
+		</view>
+		<u-toast ref="uToast" />
+	</view>
+</template>
+
+<script>
+	const innerAudioContext = uni.createInnerAudioContext();
+	export default {
+		data() {
+			return {
+				focus: false,
+				qty: "",
+				address: "",
+			}
+		},
+		onShow() {},
+		onLoad(res) {
+			this.WarehouseId = res.warehouseId;
+			this.focus = false;
+			if (res.warehouseId == 5) {
+				this.address = "8001";
+			}
+		},
+		methods: {
+			voiceSpeech(src) {
+				innerAudioContext.src = src; // '../../static/success.mp3';
+				innerAudioContext.play();
+			},
+			barcodeInput() {
+				// this.$nextTick(function(x) {
+				// 	if (this.barcode.length > 0) {
+				// 		this.focus = true;
+				// 	}
+				// })
+			},
+			OutEmpty() {
+				if (this.qty == "") {
+					this.$refs.uToast.show({
+						title: "璇疯緭鍏ユ暟閲�",
+						type: 'error'
+					})
+					return;
+				}
+				this.$u.post('/api/Task/OutEmpty?qty=' + this.qty + '&address=' + this.address + '&WarehouseId=' +
+					this.WarehouseId).then(
+					res => {
+						if (res.status) {
+							this.$refs.uToast.show({
+								title: "鎴愬姛",
+								type: "success"
+							})
+							this.qty = "";
+						} else {
+							this.$refs.uToast.show({
+								title: res.message,
+								type: "error"
+							})
+						}
+					})
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import '@/common/uni-ui.scss';
+
+	.content {
+		display: flex;
+		height: 150px;
+	}
+
+	.content-text {
+		font-size: 14px;
+		color: #666;
+	}
+
+	.itemstyle {
+		margin-top: 30px;
+		margin-left: 5%;
+	}
+
+	.headerstyle {
+		width: 90%;
+	}
+</style>
\ No newline at end of file
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/pickingMat.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/pickingMat.vue"
index bcc6231..22087ea 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/pickingMat.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/pickingMat.vue"
@@ -185,6 +185,10 @@
 				}
 				this.$u.post('/api/OutStockLockInfo/MaterialPick?palletCode=' + this.barcode, {}).then(res => {
 					if (res.status) {
+						if(this.warehouseId==5){
+							this.Finish("8005");
+						}
+						
 						uni.$showMsg('鎷i�夋垚鍔�!')
 						this.barcode = "";
 						this.matInfos = [];
@@ -196,6 +200,23 @@
 					}
 				})
 			},
+			Finish(code){
+				this.$u.post('http://127.0.0.1:9291/api/CTU_AGV/PutFinish?&code=' + code).then(
+					res => {
+						if (res.status) {
+							// this.$refs.uToast.show({
+							// 	title: "瀹屾垚鎴愬姛",
+							// 	type: "success"
+							// })
+							// this.barcode = "";
+						} else {
+							// this.$refs.uToast.show({
+							// 	title: res.message,
+							// 	type: "error"
+							// })
+						}
+					})
+			},
 			inputChange(e) {
 				this.$nextTick(() => {
 					this.istrue = false;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/raworderboxing.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/raworderboxing.vue"
index 94cbf35..4aa1134 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/raworderboxing.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/raworderboxing.vue"
@@ -16,12 +16,12 @@
 							<uni-easyinput type="text" placeholder="璇锋壂鎻忓唴绠辨爣绛�" ref='midInput' :focus="focus"
 								v-model="materSn" @input="snInput" />
 						</uni-forms-item>
-						
+
 						<uni-forms-item :label="Testlabel" v-if="Test">
 							<uni-easyinput type="text" :placeholder="Testplaceholder" ref='midInput'
 								v-model="Initiallife" />
 						</uni-forms-item>
-						
+
 						<!-- <uni-forms-item>
 							<checkbox checked="check">鏄惁婊$洏</checkbox>
 						</uni-forms-item> -->
@@ -99,49 +99,29 @@
 			</view>
 			<view v-if="current === 3" class="headerstyle">
 				<view class="itemstyle">
-					<uni-forms label-width="120">
-						<uni-forms-item>
-							<uni-easyinput type="text" @input="releaseboxInput" v-model="value" placeholder="璇锋壂鐮�"
-								ref='midInput' :focus="true" />
+					<uni-forms label-width="180">
+						<uni-forms-item label="鍐呯鏍囩:">
+							<uni-easyinput type="text" placeholder="璇锋壂鎻忓唴绠辨爣绛�" ref='midInput' :focus="pkfocus"
+								v-model="pkmaterSn" @input="pksnInput" />
 						</uni-forms-item>
 						<uni-forms-item>
-							<button @click="releasebox" type="primary" size="default">瑙g洏</button>
+							<button @click="pksubmit" type="primary" size="default" style="margin-top: 2%;">鍏ュ钩搴�</button>
 						</uni-forms-item>
 					</uni-forms>
 					<uni-list>
-						<uni-list-item direction="column" v-if="value2">
+						<uni-list-item direction="column" v-for="(item,index) in pkmatInfos" :key="index">
 							<template v-slot:body>
 								<view class="uni-list-box">
+									<uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
+										@click="pkdeleteList(index)">
+									</uni-icons>
 									<view class="uni-content">
-										<view class="uni-title-sub uni-ellipsis-2">鎵樼洏鍙凤細{{value2}}</view>
-									</view>
-								</view>
-							</template>
-						</uni-list-item>
-						<uni-list-item direction="column" v-for="item in matTotal" :key="item.matCode">
-							<template v-slot:body>
-								<view class="uni-list-box">
-									<view class="uni-content">
-										<view class="uni-title-sub uni-ellipsis-2">鐗╂枡缂栫爜锛歿{item.matCode}}</view>
-										<view class="uni-title-sub uni-ellipsis-2">鏁伴噺锛歿{item.matQuantity}}</view>
-									</view>
-								</view>
-							</template>
-						</uni-list-item>
-
-						<uni-list-item direction="column" v-for="(item,index) in matInfo" :key="index">
-							<template v-slot:body>
-								<view class="uni-list-box">
-									<view class="uni-content">
-										<view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
-											鐗╂枡缂栫爜锛歿{item.matCode}}
-										</view>
-										<view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
-											鐗╂枡鍚嶇О锛歿{item.matName}}
-										</view>
-										<view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
-											鏁伴噺锛歿{item.matQty}}
-										</view>
+										<view class="uni-title-sub uni-ellipsis-2">閲囪喘鍗曞彿锛歿{item.purchaseOrderNo}}</view>
+										<view class="uni-note">鐗╂枡缂栫爜锛歿{item.materielCode}}</view>
+										<view class="uni-note">鎵规鍙凤細{{item.lotNo}}</view>
+										<view class="uni-note">鏁伴噺锛歿{item.quantity}}</view>
+										<view class="uni-note">鐢熶骇鏃ユ湡锛歿{item.productionDate}}</view>
+										<view class="uni-note">鏈夋晥鏈燂細{{item.effectiveDate}}</view>
 									</view>
 								</view>
 							</template>
@@ -167,10 +147,12 @@
 				label: "",
 				orderInfo: [],
 				focus: false,
+				pkfocus:false,
 				barcode: "",
 				materSn: "",
 				Initiallife: 1000,
 				sns: [],
+				pksns:[],
 				addressFocus: false,
 				inboundBarcode: "",
 				address: "",
@@ -184,6 +166,8 @@
 				Testlabel: "",
 				Testplaceholder: "",
 				Testcheck: false,
+				pkmaterSn: "",
+				pkmatInfos: []
 			}
 		},
 		onShow() {},
@@ -201,6 +185,10 @@
 				this.Testlabel = "鏁伴噺:";
 				this.Testplaceholder = "璇疯緭鍏ユ暟閲�";
 				this.Initiallife = 16;
+			} else if (this.warehouseId == 5) { //杈呮枡
+				this.items.push("鍏ュ钩搴�");
+				this.items[1] = "鍏ョ珛搴�";
+				this.address = "8005";
 			}
 			this.label = "鍗曟嵁缂栧彿锛�" + this.orderNo;
 			this.getData();
@@ -360,91 +348,70 @@
 						this.$u.post('/api/MaterielInfo/CodeAnalysis?serNum=' + matSn, {}).then((res) => {
 							this.Testcheck = false;
 							if (res.status) {
-								// debugger
-								// this.matTotal.push({
-								// 	matCode: res.data.materielCode,
-								// 	matQuantity: parseInt(res.data.quantity)
-								// });
 								this.sns.push(res.data.serialNumber);
 
-								// this.matInfos.splice(0, this.matInfos.length);
 								this.matInfos.push(res.data);
 								if (res.message) {
 									this.$refs.uToast.show({
 										title: res.message,
 										type: "error"
 									})
-									// setTimeout(this.updateFocus,200);
 									setTimeout(() => {
 										this.voiceSpeech('../../static/fail.mp3');
 									}, 100);
 									return;
 								}
-								// setTimeout(this.updateFocus,200);
 								setTimeout(() => {
 									this.voiceSpeech('../../static/success.mp3');
 								}, 100);
 							} else {
-								// this.innerCode = "";
 								this.$refs.uToast.show({
 									title: res.message,
 									type: "error"
 								})
-								// setTimeout(this.updateFocus,200);
 								setTimeout(() => {
 									this.voiceSpeech('../../static/fail.mp3');
 								}, 100);
 							}
 						})
-
-
-						// var matInfo = matSn.split('|');
-
-						// if (matInfo.length == 7) {
-						// 	var matObj = {
-						// 		matCode: matInfo[1],
-						// 		matProductionDate: matInfo[3],
-						// 		matQty: matInfo[5],
-						// 		orderNo: matInfo[6],
-						// 		sn: matSn
-						// 	}
-						// 	var temp = this.matInfos.find(x => x.orderNo == matObj.orderNo);
-						// 	if (!temp) {
-						// 		var tmp = this.matTotal.find(x => x.matCode == matObj.matCode);
-						// 		if (!tmp) {
-						// 			this.matTotal.push({
-						// 				matCode: matObj.matCode,
-						// 				matQuantity: parseInt(matObj.matQty)
-						// 			})
-						// 		} else {
-						// 			tmp.matQuantity += parseInt(matObj.matQty);
-						// 		}
-						// 		this.sns.push(matSn);
-						// 		this.matInfos.push(matObj);
-						// 		setTimeout(this.updateFocus, 200);
-						// 		setTimeout(() => {
-						// 			this.voiceSpeech('../../static/success.mp3');
-						// 		}, 100);
-						// 	} else {
-						// 		this.$refs.uToast.show({
-						// 			title: "鎵爜閲嶅",
-						// 			type: "error"
-						// 		})
-						// 		setTimeout(this.updateFocus, 200);
-						// 		setTimeout(() => {
-						// 			this.voiceSpeech('../../static/fail.mp3');
-						// 		}, 100);
-						// 	}
-						// } else {
-						// 	this.$refs.uToast.show({
-						// 		title: "鎵爜閿欒,璇锋壂鎻忔纭唴绠辩爜",
-						// 		type: "error"
-						// 	})
-						// 	setTimeout(this.updateFocus, 200);
-						// 	setTimeout(() => {
-						// 		this.voiceSpeech('../../static/fail.mp3');
-						// 	}, 100);
-						// }
+					}
+				})
+			},
+			pksnInput() {
+				this.$nextTick(() => {
+					if (this.pkmaterSn != "") {
+						this.focus = false;
+						var matSn = this.pkmaterSn;
+						setTimeout(() => {
+							this.pkmaterSn = "";
+						}, 10);
+						this.$u.post('/api/MaterielInfo/CodeAnalysis?serNum=' + matSn, {}).then((res) => {
+							if (res.status) {
+								this.pksns.push(res.data.serialNumber);
+								this.pkmatInfos.push(res.data);
+								if (res.message) {
+									this.$refs.uToast.show({
+										title: res.message,
+										type: "error"
+									})
+									setTimeout(() => {
+										this.voiceSpeech('../../static/fail.mp3');
+									}, 100);
+									return;
+								}
+								setTimeout(() => {
+									this.voiceSpeech('../../static/success.mp3');
+								}, 100);
+							} else {
+								this.$refs.uToast.show({
+									title: res.message,
+									type: "error"
+								})
+								setTimeout(() => {
+									this.voiceSpeech('../../static/fail.mp3');
+								}, 100);
+							}
+						})
 					}
 				})
 			},
@@ -472,11 +439,14 @@
 				}
 				this.$u.post('/api/Task/RequestInboundTask', postData).then(res => {
 					if (res.status) {
-						uni.$showMsg(res.message);
 						this.inboundBarcode = "";
-						this.address = "";
+						if (this.warehouseId != 5) this.address = "";
 						setTimeout(() => {
 							this.addressFocus = false;
+							this.$refs.uToast.show({
+								title: "鎴愬姛",
+								type: "success"
+							})
 						}, 200);
 					} else {
 						this.$refs.uToast.show({
@@ -503,6 +473,35 @@
 				this.matInfos.splice(res, 1);
 				this.sns.splice(res, 1);
 			},
+			pkdeleteList(res) {
+				this.pkmatInfos.splice(res, 1);
+				this.pksns.splice(res, 1);
+			},
+			pksubmit(){
+				if (this.pkmatInfos.length == 0) {
+					this.$refs.uToast.show({
+						title: "璇锋壂鎻忓唴绠辨爣绛�",
+						type: 'error'
+					})
+					return;
+				}
+				this.$u.post('/api/InboundOrder/InPinKu?warehouseId=' + this.warehouseId+"&orderNo="+ this.orderNo, this.pksns).then(res => {
+					if (res.status) {
+						this.$refs.uToast.show({
+							title: "鍏ュ簱鎴愬姛",
+							type: "success"
+						})
+						this.focus = false;
+						this.pkmatInfos = [];
+						this.pksns = [];
+					} else {
+						this.$refs.uToast.show({
+							title: res.message,
+							type: "error"
+						})
+					}
+				})
+			},
 			submit() {
 				if (this.barcode == "") {
 					this.$refs.uToast.show({
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/receiveorderoutbound.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/receiveorderoutbound.vue"
index 525720a..ada9295 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/receiveorderoutbound.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/pages/stash/receiveorderoutbound.vue"
@@ -377,6 +377,7 @@
 							title: "纭鏀惰揣鎴愬姛",
 							type: "success"
 						})
+						this.orderInfo=[];
 						this.sns = "";
 					} else {
 						this.$refs.uToast.show({

--
Gitblit v1.9.3