wangxinhui
2025-01-09 8348893d84ad8b5fbfca95fbb2ca8312ad689d64
Merge branch 'master' of http://115.159.85.185:8098/r/MeiRuiAn/HuaiAn
已删除1个文件
已修改20个文件
已添加3个文件
1441 ■■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/PalletTypeEnum.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/OutLockStockStatusEnum.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService_Pick.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages.json 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/stash/AGVFinish.vue 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/stash/InEmpty.vue 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/stash/InPinku.vue 522 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/stash/OutEmpty.vue 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/stash/pickingMat.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/stash/raworderboxing.vue 195 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/stash/receiveorderoutbound.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/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>
´úÂë¹ÜÀí/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: [
        {
´úÂë¹ÜÀí/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",
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/PalletTypeEnum.cs
@@ -8,6 +8,11 @@
{
    public enum PalletTypeEnum
    {
        /// <summary>
        /// ç©ºç®±
        /// </summary>
        Empty = -1,
        None = 0,
        /// <summary>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/OutLockStockStatusEnum.cs
@@ -18,6 +18,9 @@
        [Description("出库完成")]
        å‡ºåº“完成 = 2,
        [Description("拣选完成")]
        æ‹£é€‰å®Œæˆ = 3,
        [Description("撤销")]
        æ’¤é”€ = 99
    }
´úÂë¹ÜÀí/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);
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -63,6 +63,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申请入库
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs
@@ -255,6 +255,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>
@@ -440,6 +602,7 @@
            return content;
        }
        public WebResponseContent MaterielGroup(string palletCode, int Initiallife, int warehouseId, List<string> serNums)
        {
            WebResponseContent content = new WebResponseContent();
´úÂë¹ÜÀí/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)
´úÂë¹ÜÀí/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)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs
@@ -119,6 +119,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($"未找到库存信息");
@@ -128,7 +132,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)
´úÂë¹ÜÀí/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.拣选完成.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();
´úÂë¹ÜÀí/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;
@@ -120,6 +121,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>
        /// å…¥åº“任务完成
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs
@@ -1,4 +1,6 @@
using System;
using 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)
´úÂë¹ÜÀí/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>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -44,12 +44,29 @@
        }
        /// <summary>
        ///
        /// ç©ºç®±å…¥åº“
        /// </summary>
        /// <param name="stationCode"></param>
        /// <param name="roadwayNo"></param>
        /// <param name="palletCode"></param>
        /// <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)
        {
@@ -86,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);
        }
´úÂë¹ÜÀí/»´°²PDA/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": "拣选",
´úÂë¹ÜÀí/»´°²PDA/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>
´úÂë¹ÜÀí/»´°²PDA/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>
´úÂë¹ÜÀí/»´°²PDA/pages/stash/InPinku.vue
ÎļþÒÑɾ³ý
´úÂë¹ÜÀí/»´°²PDA/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>
´úÂë¹ÜÀí/»´°²PDA/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('拣选成功!')
                        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;
´úÂë¹ÜÀí/»´°²PDA/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">解盘</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({
´úÂë¹ÜÀí/»´°²PDA/pages/stash/receiveorderoutbound.vue
@@ -377,6 +377,7 @@
                            title: "确认收货成功",
                            type: "success"
                        })
                        this.orderInfo=[];
                        this.sns = "";
                    } else {
                        this.$refs.uToast.show({