wangxinhui
2 天以前 225d11e2ddaa55d1d482201cb4d89c9486cdba69
更新代码
已修改33个文件
已添加1个文件
1208 ■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGV_CSJExtend.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/干膜仓/ConveyorLineJob_GM.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/RGVJob_BC.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/StackerCraneJob_BC.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/config/buttons.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/stock/stockView.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/Index.vue 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/charts/AssembleDist.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/check/inspectOrder.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_GM.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/TakeStockStatusEnum.cs 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundRepository.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundRepository.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderService.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Check/Dt_CheckOrder.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrder.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrderDetail.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/stash/InspectIn.vue 612 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/stash/boxing.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/stash/raworderboxing.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/stash/receiveorderoutbound.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs
@@ -14,31 +14,37 @@
        /// </summary>
        [Description("领料出库")]
        Outbound = 100,
        /// <summary>
        /// ç›˜ç‚¹å‡ºåº“
        /// </summary>
        [Description("盘点出库")]
        OutInventory = 110,
        /// <summary>
        /// åˆ†æ‹£å‡ºåº“
        /// </summary>
        [Description("分拣出库")]
        OutPick = 120,
        /// <summary>
        /// è´¨æ£€å‡ºåº“
        /// </summary>
        [Description("质检出库")]
        OutQuality = 130,
        /// <summary>
        /// ç©ºç®±å‡ºåº“
        /// </summary>
        [Description("空箱出库")]
        OutEmpty = 140,
        /// <summary>
        /// è°ƒæ‹¨å‡ºåº“
        /// </summary>
        [Description("调拨出库")]
        OutAllocate = 150,
        /// <summary>
        /// MES出库
        /// </summary>
@@ -61,16 +67,19 @@
        /// </summary>
        [Description("成品出库")]
        OutProduct = 230,
        /// <summary>
        /// æˆå“å¯„售出库
        /// </summary>
        [Description("成品寄售出库")]
        OutSendProduct = 240,
        /// <summary>
        /// æˆå“MES出库/提库
        /// æˆå“MES提库
        /// </summary>
        [Description("成品MES提库")]
        OutMesRworkProduct = 250,
        /// <summary>
        /// é˜²ç„Šå‰æ´¾å·¥å°ä»¶
        /// </summary>
@@ -82,6 +91,7 @@
        /// </summary>
        [Description("防焊前派工大件")]
        MaskOutNoticeLarge = 265,
        /// <summary>
        /// é˜²ç„Šåˆ°çº¿è¾¹å°ä»¶
        /// </summary>
@@ -93,21 +103,25 @@
        /// </summary>
        [Description("防焊到线边大件")]
        MaskOutLarge = 275,
        /// <summary>
        /// é‡‡è´­å…¥åº“
        /// </summary>
        [Description("采购入库")]
        Inbound = 510,
        /// <summary>
        /// ç›˜ç‚¹å…¥åº“
        /// </summary>
        [Description("盘点入库")]
        InInventory = 520,
        /// <summary>
        /// åˆ†æ‹£å…¥åº“
        /// </summary>
        [Description("分拣入库")]
        InPick = 530,
        /// <summary>
        /// è´¨æ£€å…¥åº“
        /// </summary>
@@ -127,6 +141,12 @@
        MesMatReturn = 560,
        /// <summary>
        /// è°ƒæ‹¨å…¥åº“
        /// </summary>
        [Description("调拨入库")]
        InAllocate = 570,
        /// <summary>
        /// MES大空托退料
        /// </summary>
        [Description("MES大空托退料")]
@@ -137,24 +157,6 @@
        /// </summary>
        [Description("MES小空托退料")]
        MesPalletSmallReturn = 585,
        /// <summary>
        /// è°ƒæ‹¨å…¥åº“
        /// </summary>
        [Description("调拨入库")]
        InAllocate = 570,
        /// <summary>
        /// çº¿è¾¹ä»“入库
        /// </summary>
        [Description("线边仓入库")]
        InboundXB = 580,
        /// <summary>
        /// æœºå°å…¥åº“
        /// </summary>
        [Description("机台入库")]
        InboundJT = 590,
        /// <summary>
        /// ç©ºç®±å…¥åº“
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs
@@ -255,7 +255,8 @@
                                WebResponseContent content = _taskService.AgvBoxApplyPass(boxApplyPassDTO);
                                if (content.Status && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                                {
                                    _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
                                    task.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
                                    _taskRepository.UpdateData(task);
                                }
                                else
                                {
@@ -332,7 +333,8 @@
                            WebResponseContent content = _taskService.AgvBoxApplyPass(boxApplyPassDTO);
                            if (content.Status && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                            {
                                _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
                                task.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
                                _taskRepository.UpdateData(task);
                            }
                            else
                            {
@@ -356,7 +358,8 @@
                        }
                        else if(task.TaskType == TaskTypeEnum.OutProduct.ObjToInt())
                        {
                            _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
                            task.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
                            _taskRepository.UpdateData(task);
                        }
                        break;
                    default:
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -196,9 +196,12 @@
            {
                bool flag = false;
                List<Dt_Task> tasks = new List<Dt_Task>();
                List<Dt_Task> tasksOld= BaseDal.QueryData();
                List<Dt_Router> routersAll = _routerRepository.QueryData();
                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData();
                foreach (var item in taskDTOs)
                {
                    if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode) != null)
                    if (tasksOld.FirstOrDefault(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode) != null)
                    {
                        flag = true;
                        continue;
@@ -213,13 +216,13 @@
                    TaskTypeGroup taskTypeGroup = item.TaskType.GetTaskTypeGroup();
                    if (string.IsNullOrEmpty(item.AGVArea))
                    {
                        Dt_StationManger stationManger;
                        Dt_StationManger? stationManger;
                        if (taskTypeGroup == TaskTypeGroup.InboundGroup)
                        {
                            stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == item.SourceAddress || x.StationDeviceCode == item.SourceAddress);
                            stationManger = stationMangers.FirstOrDefault(x => x.StationCode == item.SourceAddress || x.StationDeviceCode == item.SourceAddress);
                            if (stationManger==null && task.TaskType==TaskTypeEnum.InProduct.ObjToInt())
                            {
                                stationManger = _stationMangerRepository.QueryFirst(x => x.StackerCraneCode==task.SourceAddress);
                                stationManger = stationMangers.FirstOrDefault(x => x.StackerCraneCode==task.SourceAddress);
                                //转换成品仓起点站台
                                item.SourceAddress = stationManger.StationCode;
                                task.CurrentAddress = stationManger.StationCode;
@@ -228,14 +231,14 @@
                        }
                        else
                        {
                            stationManger = _stationMangerRepository.QueryFirst(x => x.StackerCraneCode == item.RoadWay || x.Remark==item.RoadWay);
                            stationManger = stationMangers.FirstOrDefault(x => x.StackerCraneCode == item.RoadWay || x.Remark==item.RoadWay);
                        }
                        if (stationManger == null)
                        {
                            return WebResponseContent.Instance.Error($"未找到站台配置信息");
                        }
                        List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && (item.SourceAddress == x.StartPosi || item.RoadWay == x.StartPosi /*|| item.RoadWay == x.ChildPosiDeviceCode || item.RoadWay == x.ChildPosi*/));
                        List<Dt_Router> routers = routersAll.Where(x => x.InOutType == item.TaskType && (item.SourceAddress == x.StartPosi || item.RoadWay == x.StartPosi /*|| item.RoadWay == x.ChildPosiDeviceCode || item.RoadWay == x.ChildPosi*/)).ToList();
                        router = routers.FirstOrDefault();
                        if (router == null)
                        {
@@ -263,7 +266,7 @@
                            {
                                task.NextAddress = router.NextPosi;
                                task.DeviceCode = stationManger.StackerCraneCode;
                                if (item.TaskType == TaskTypeEnum.MesOutbound.ObjToInt() && task.TargetAddress== "SCUTL-001")
                                if (item.TaskType == TaskTypeEnum.MesOutbound.ObjToInt() && (task.TargetAddress== "SCUTL-001" || task.TargetAddress == "SCUTL-002" || task.TargetAddress == "SCUTL_04-001"))
                                {
                                    task.TaskState = TaskStatusEnum.MesPending.ObjToInt();
                                }
@@ -305,7 +308,7 @@
                        {
                            if (item.RoadWay=="AGV_CP")
                            {
                                Dt_Router routerSelect = _routerRepository.QueryFirst(x => x.InOutType == item.TaskType && item.RoadWay == x.StartPosi && x.NextPosi==item.TargetAddress);
                                Dt_Router? routerSelect = routersAll.FirstOrDefault(x => x.InOutType == item.TaskType && item.RoadWay == x.StartPosi && x.NextPosi==item.TargetAddress);
                                if (routerSelect != null)
                                {
                                    task.NextAddress = routerSelect.NextPosi;
@@ -338,7 +341,7 @@
                        if (taskTypeGroup == TaskTypeGroup.OutbondGroup)
                        {
                            task.AgvTaskNum = item.AGVArea + DateTime.Now.ToString("yyyyMMdd") + item.TaskNum;
                            List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && item.AGVArea == x.NextPosi);
                            List<Dt_Router> routers = routersAll.Where(x => x.InOutType == item.TaskType && item.AGVArea == x.NextPosi).ToList();
                            if (routers.FirstOrDefault() == null)
                            {
                                return WebResponseContent.Instance.Error($"未找到路由配置信息");
@@ -361,13 +364,13 @@
                            {
                                task.AgvTaskNum = item.AGVArea + DateTime.Now.ToString("yyyyMMdd") + item.TaskNum;
                            }
                            List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && item.AGVArea == x.StartPosi);
                            List<Dt_Router> routers = routersAll.Where(x => x.InOutType == item.TaskType && item.AGVArea == x.StartPosi).ToList();
                            if (routers.FirstOrDefault() == null)
                            {
                                return WebResponseContent.Instance.Error($"未找到路由配置信息");
                            }
                            router = routers.FirstOrDefault();
                            Dt_StationManger? stationManger = _stationMangerRepository.QueryData(x => true).FirstOrDefault(x=>x.StationCode== router?.NextPosi);
                            Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x=>x.StationCode== router?.NextPosi);
                            if (stationManger == null)
                            {
                                return WebResponseContent.Instance.Error($"未找到站台配置信息");
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGV_CSJExtend.cs
@@ -204,14 +204,6 @@
                    {
                        return TaskType == TaskTypeEnum.ProductionReturn.ObjToInt() ? "23" : "24";
                    }
                case "AGV_ZH":
                    {
                        if (TaskType == TaskTypeEnum.InboundXB.ObjToInt())
                            return "20";
                        else if (TaskType == TaskTypeEnum.InboundJT.ObjToInt())
                            return "21";
                        else return "22";
                    }
                default:
                    throw new Exception($"设备编号错误");
            }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/¸ÉĤ²Ö/ConveyorLineJob_GM.cs
@@ -93,6 +93,7 @@
                        ConveyorLineSignal conveyorLineSignalWrite = conveyorLineInfoWrite.Signal.ByteToBoolObject<ConveyorLineSignal>();
                        if (item.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt())
                        {
                            //干膜入库站台交互
                            if (conveyorLineSignalRead.STB && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !conveyorLineSignalWrite.ACK)
                            {
                                string boxcode = device.GetValue<R_ConveyorLineDB, string>(R_ConveyorLineDB.Boxcode, item.StationCode);
@@ -169,6 +170,7 @@
                            }
                            else
                            {
                                //干膜出库站台交互
                                if (!conveyorLineSignalWrite.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Goods)
                                {
                                    Dt_Task task = _taskRepository.QueryFirst(x => x.CurrentAddress == item.StationCode && x.TaskState == TaskStatusEnum.Line_Execute.ObjToInt() && x.DeviceCode == item.StationDeviceCode);
@@ -197,6 +199,7 @@
                                }
                                else if (conveyorLineSignalWrite.STB && conveyorLineSignalRead.ACK && conveyorLineStatus.Goods)
                                {
                                    //完成干膜出库任务
                                    _taskService.TaskCompleted(conveyorLineInfoWrite.TaskNum);
                                    device.SetValue(W_ConveyorLineDB.STB, false, item.StationCode);
                                }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/°å²Ä²Ö/RGVJob_BC.cs
@@ -169,8 +169,8 @@
                            }
                        }
                        //允许放行一号开料口出库任务
                        bool outAllow = device.Communicator.Read<bool>("DB14.4.6");
                        if (outAllow)
                        bool outAllowLine1 = device.Communicator.Read<bool>("DB14.4.6");
                        if (outAllowLine1)
                        {
                            Dt_Task taskExcuting = _taskRepository.QueryFirst(x => x.WarehouseId== warehouseDevice.WarehouseId && (x.TargetAddress== "SCUTL-001" || x.TargetAddress == "1101")
                            && (x.TaskState==TaskStatusEnum.SC_Execute.ObjToInt() || x.TaskState == TaskStatusEnum.SC_Executing.ObjToInt() 
@@ -183,6 +183,36 @@
                                WriteDebug($"一号开料口放行任务", $"任务号{taskExecute.TaskNum}");
                            }
                        }
                        //允许放行二号开料口出库任务
                        bool outAllowLine2 = device.Communicator.Read<bool>("DB14.12.6");
                        if (outAllowLine2)
                        {
                            Dt_Task taskExcuting = _taskRepository.QueryFirst(x => x.WarehouseId == warehouseDevice.WarehouseId && (x.TargetAddress == "SCUTL-002" || x.TargetAddress == "1103")
                            && (x.TaskState == TaskStatusEnum.SC_Execute.ObjToInt() || x.TaskState == TaskStatusEnum.SC_Executing.ObjToInt()
                            || x.TaskState == TaskStatusEnum.Line_Execute.ObjToInt() || x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt()));
                            Dt_Task? taskExecute = _taskRepository.QueryData(x => x.WarehouseId == warehouseDevice.WarehouseId && x.TargetAddress == "SCUTL-002"
                            && x.TaskState == TaskStatusEnum.MesPending.ObjToInt()).OrderByDescending(x => x.Grade).ThenBy(x => x.TaskNum).ThenBy(x => x.CreateDate).FirstOrDefault();
                            if (taskExcuting == null && taskExecute != null)
                            {
                                _taskService.UpdateTask(taskExecute, TaskStatusEnum.SC_Execute);
                                WriteDebug($"二号开料口放行任务", $"任务号{taskExecute.TaskNum}");
                            }
                        }
                        //允许放行手动开料口出库任务
                        bool outAllowMusual = device.Communicator.Read<bool>("DB14.4.7");
                        if (outAllowMusual)
                        {
                            Dt_Task taskExcuting = _taskRepository.QueryFirst(x => x.WarehouseId == warehouseDevice.WarehouseId && (x.TargetAddress == "SCUTL_04-001" || x.TargetAddress == "1102")
                            && (x.TaskState == TaskStatusEnum.SC_Execute.ObjToInt() || x.TaskState == TaskStatusEnum.SC_Executing.ObjToInt()
                            || x.TaskState == TaskStatusEnum.Line_Execute.ObjToInt() || x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt()));
                            Dt_Task? taskExecute = _taskRepository.QueryData(x => x.WarehouseId == warehouseDevice.WarehouseId && x.TargetAddress == "SCUTL_04-001"
                            && x.TaskState == TaskStatusEnum.MesPending.ObjToInt()).OrderByDescending(x => x.Grade).ThenBy(x => x.TaskNum).ThenBy(x => x.CreateDate).FirstOrDefault();
                            if (taskExcuting == null && taskExecute != null)
                            {
                                _taskService.UpdateTask(taskExecute, TaskStatusEnum.SC_Execute);
                                WriteDebug($"手动开料口放行任务", $"任务号{taskExecute.TaskNum}");
                            }
                        }
                    }
                    else
                    {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/°å²Ä²Ö/StackerCraneJob_BC.cs
@@ -196,15 +196,15 @@
                                return WebResponseContent.Instance.Error($"未找到路由信息,{task.NextAddress}");
                            }
                        }
                        if (task.TargetAddress.Contains("SCUTL-001"))
                        if (task.TargetAddress.Contains("SCUTL-001")) //自动一线
                        {
                            _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: stationManger.StationDeviceCode, currentAddress: stationManger.StationCode, nextAddress: router.NextPosi, targetAddress: router.NextPosi);
                        }
                        else if (task.TargetAddress.Contains("SCUTL-002"))
                        else if (task.TargetAddress.Contains("SCUTL-002")) //自动二线
                        {
                            _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: stationManger.StationDeviceCode, currentAddress: stationManger.StationCode, nextAddress: "1103", targetAddress: "1103");
                        }
                        else
                        else //手动线
                        {
                            _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: stationManger.StationDeviceCode, currentAddress: stationManger.StationCode, nextAddress: "1102", targetAddress: "1102");
                        }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/config/buttons.js
@@ -200,6 +200,15 @@
    onClick: function () {
    }
},
{
    name: "选定库存盘点",
    icon: '',
    class: '',
    value: 'SelectStockTake',
    type: 'success',
    onClick: function () {
    }
},
]
export default buttons
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/stock/stockView.js
@@ -20,22 +20,19 @@
    //下面这些方法可以保留也可以删除
    onInit() {
      
      // let InOrder = this.buttons.find(x => x.value == 'StockOutbound');
      // if (InOrder) {
      //   InOrder.onClick = function () {
      //     let rows = this.$refs.table.getSelected();
      //     if (rows.length == 0) return this.$error("请选择数据!");
      //     if (rows.length > 1) return this.$error("请选择单条数据!");
      //     var keys = rows.map(x => { return x.stockId });
      //     this.http
      //       .post("api/Task/Outbound?id="+keys[0], null, "数据处理中")
      //       .then((x) => {
      //         if (!x.status) return this.$message.error(x.message);
      //         this.$message.success("操作成功");
      //         this.refresh();
      //       });
      //   }
      // }
      let SelectTake = this.buttons.find(x => x.value == 'SelectStockTake');
      if (SelectTake) {
        SelectTake.onClick = function () {
          let stockViews = this.$refs.table.getSelected();
          this.http
            .post("api/Task/TakeOutbound",stockViews, "数据处理中")
            .then((x) => {
              if (!x.status) return this.$message.error(x.message);
              this.$message.success("操作成功");
              this.refresh();
            });
        }
      }
      this.columns.forEach(column => {
        if (column.field == 'materielCode') {
          column.formatter = (row) => {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/Index.vue
@@ -324,24 +324,24 @@
      });
    };
    const createSocket = (url) => {
      // åˆ›å»ºWebSocket连接
      //"ws://127.0.0.1:9295/admin"
      client = new WebSocket(url);
    // const createSocket = (url) => {
    //   // åˆ›å»ºWebSocket连接
    //   //"ws://127.0.0.1:9295/admin"
    //   client = new WebSocket(url);
      client.onopen = function () {
        client.onmessage = handleMessage;
        store.commit("setWebsocket", client);
        console.log("WebSocket è¿žæŽ¥æˆåŠŸ");
      };
    //   client.onopen = function () {
    //     client.onmessage = handleMessage;
    //     store.commit("setWebsocket", client);
    //     console.log("WebSocket è¿žæŽ¥æˆåŠŸ");
    //   };
      client.onclose = function () {
        console.log("WebSocket è¿žæŽ¥å…³é—­");
        setTimeout(createSocket, 10000);
      };
      //监听socket错误信息
      client.onerror = function () {};
    };
    //   client.onclose = function () {
    //     console.log("WebSocket è¿žæŽ¥å…³é—­");
    //     setTimeout(createSocket, 10000);
    //   };
    //   //监听socket错误信息
    //   client.onerror = function () {};
    // };
    const changeTheme = (name) => {
      if (theme.value != name) {
@@ -606,7 +606,7 @@
        }
      }
      createSocket("ws://127.0.0.1:9296/" + _userInfo.userName);
      // createSocket("ws://127.0.0.1:9296/" + _userInfo.userName);
      Object.assign(_config.$tabs, { open: open, close: close });
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/charts/AssembleDist.vue
@@ -131,7 +131,7 @@
    calendar: {
      left: "center",
      top: 49,
      cellSize: [70, 70],
      cellSize: [100, 70],
      orient: "vertical",
      dayLabel: {
        firstDay: 1,
@@ -140,7 +140,7 @@
      monthLabel: {
        formatter: "{M}月",
      },
      range: "2025-05",
      range: dayjs().format('YYYY-MM'),
      yearLabel: {
        show: false,
      },
@@ -152,7 +152,7 @@
        symbolSize(params) {
          //核心2
          if (params[0] === dayjs().format('YYYY-MM-DD')) {
            return 70; //当前日期高亮 å®½åº¦é«˜åº¦è®¾ç½®æˆå’Œå•元格宽度高度一样
            return [100, 70]; //当前日期高亮 å®½åº¦é«˜åº¦è®¾ç½®æˆå’Œå•元格宽度高度一样
          } else {
            return 1;
          }
@@ -313,7 +313,7 @@
    calendar: {
      left: "center",
      top: 49,
      cellSize: [70, 70],
      cellSize: [100, 70],
      orient: "vertical",
      dayLabel: {
        firstDay: 1,
@@ -334,7 +334,7 @@
        symbolSize(params) {
          //核心2
          if (params[0] === dayjs().format('YYYY-MM-DD')) {
            return 70; //当前日期高亮 å®½åº¦é«˜åº¦è®¾ç½®æˆå’Œå•元格宽度高度一样
            return [100, 70]; //当前日期高亮 å®½åº¦é«˜åº¦è®¾ç½®æˆå’Œå•元格宽度高度一样
          } else {
            return 1;
          }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/check/inspectOrder.vue
@@ -81,7 +81,6 @@
          width: 150,
          hidden: true,
          readonly: true,
          require: true,
          align: "left",
        },
        {
@@ -89,7 +88,6 @@
          title: "检验单号",
          type: "string",
          width: 180,
          require: true,
          align: "left",
        },
        {
@@ -105,7 +103,6 @@
          title: "送检单号",
          type: "string",
          width: 180,
          require: true,
          align: "left",
        },
        {
@@ -118,19 +115,17 @@
        },
        //    {field:'auditStatus',title:'审批状态',type:'int',width:110,require:true,align:'left'},
        {
          field: "receiveDetailRowNo",
          title: "送检明细行",
          field: "orderPalletCode",
          title: "送检托盘",
          type: "int",
          width: 100,
          require: true,
          width: 140,
          align: "left",
        },
        {
          field: "materielCode",
          title: "物料编号",
          type: "string",
          width: 110,
          require: true,
          width: 100,
          align: "left",
        },
        {
@@ -146,14 +141,13 @@
          title: "批次号",
          type: "string",
          width: 150,
          require: true,
          align: "left",
        },
        {
          field: "checkOrderStatus",
          title: "质检单状态",
          type: "string",
          width: 110,
          width: 100,
          require: true,
          align: "left",
          bind: { key: "checkOrderStatusEnum", data: [] },
@@ -173,11 +167,24 @@
          align: "left",
        },
        {
          field: "defectedQuantity",
          title: "特采数量",
          type: "float",
          width: 110,
          align: "left",
        },
        {
          field: "scrappedQuantity",
          title: "报废数量",
          type: "float",
          width: 110,
          align: "left",
        },
        {
          field: "receivedQuantity",
          title: "检验总数",
          type: "float",
          width: 110,
          require: true,
          align: "left",
        },
        {
@@ -224,7 +231,6 @@
          title: "创建时间",
          type: "datetime",
          width: 180,
          require: true,
          align: "left",
        },
        //    {field:'modifier',title:'修改人',type:'string',width:100,align:'left'},
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_GM.cs
@@ -62,17 +62,17 @@
                    if (mathCurrentRow <= maxDepth)
                    {
                        locationInfos = locationInfos.Where(x => x.Row - Convert.ToInt32(Math.Ceiling(x.Row / maxDepth / 2.0)) * maxDepth * 2 <= maxDepth).ToList();
                        if (beRelocation.Row> maxDepth)
                        if (beRelocation.Row <= maxDepth)
                        {
                            locationInfos = locationInfos.Where(x=>x.Row>maxDepth).ToList();
                            locationInfos = locationInfos.Where(x=>x.Row <= maxDepth).ToList();
                        }
                    }
                    else
                    {
                        locationInfos = locationInfos.Where(x => x.Row - Convert.ToInt32(Math.Ceiling(x.Row / maxDepth / 2.0)) * maxDepth * 2 > maxDepth).ToList();
                        if (beRelocation.Row <= maxDepth)
                        if (beRelocation.Row > maxDepth)
                        {
                            locationInfos = locationInfos.Where(x => x.Row <= maxDepth).ToList();
                            locationInfos = locationInfos.Where(x => x.Row > maxDepth).ToList();
                        }
                    }
                }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs
@@ -206,7 +206,8 @@
                    {
                        return content.Error($"数量超出");
                    }
                    if (checkResult.Result == InspectResultEnum.Return.ToString())//退货
                    //判断检验结果
                    if (checkResult.Result == InspectResultEnum.Return.ToString())
                    {
                        checkOrder.DefectedNote = checkResult.Note;
                        checkOrder.ReturnQuantity += checkResult.Quantity;
@@ -248,8 +249,9 @@
                            }
                            else if(checkResult.Quantity< item.StockQuantity)
                            {
                                checkResult.Quantity = 0;
                                item.StockQuantity -= checkResult.Quantity;
                                item.OutboundQuantity = 0;
                                checkResult.Quantity = 0;
                                stockInfoDetails.Add(item);
                            }
                            else if (checkResult.Quantity >= item.StockQuantity)
@@ -287,6 +289,7 @@
                    checkOrder.QualifiedQuantity = checkOrder.ReceivedQuantity;
                }
                checkOrder.CheckUserName = App.User.UserName;
                List<Dt_StockInfoDetail> initialStockDetails = stockInfo.Details.Where(x=> !(stockInfoDetails.Select(v=>v.Id).ToList()).Contains(x.Id)).ToList();
                _unitOfWorkManage.BeginTran();
                if (checkOrderResult != null)
@@ -298,6 +301,14 @@
                {
                    _stockRepository.StockInfoDetailRepository.UpdateData(stockInfoDetails);
                }
                if (initialStockDetails.Count>0)
                {
                    initialStockDetails.ForEach(x =>
                    {
                        x.OutboundQuantity = 0;
                    });
                    _stockRepository.StockInfoDetailRepository.UpdateData(initialStockDetails);
                }
                if (DelStockDetails.Count>0)
                {
                    _stockRepository.StockInfoDetailRepository.DeleteAndMoveIntoHty(DelStockDetails, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/TakeStockStatusEnum.cs
@@ -13,21 +13,50 @@
    public enum TakeStockStatusEnum
    {
        /// <summary>
        /// æœªé€€æ–™
        /// æœªç›˜ç‚¹
        /// </summary>
        [Description("未盘点")]
        NotTake = 0,
        æœªç›˜ç‚¹ = 0,
        /// <summary>
        /// é€€æ–™ä¸­
        /// ç›˜ç‚¹ä¸­
        /// </summary>
        [Description("盘点中")]
        Taking = 1,
        ç›˜ç‚¹ä¸­ = 1,
        /// <summary>
        /// é€€æ–™å®Œæˆ
        /// ç›˜ç‚¹å®Œæˆ
        /// </summary>
        [Description("盘点完成")]
        Taked = 2
        ç›˜ç‚¹å®Œæˆ = 2
    }
    /// <summary>
    /// ç›˜ç‚¹çŠ¶æ€
    /// </summary>
    public enum TakeStockDetailStatusEnum
    {
        /// <summary>
        /// æœªç›˜ç‚¹
        /// </summary>
        [Description("未盘点")]
        æœªç›˜ç‚¹ = 0,
        /// <summary>
        /// ç›˜ç‚¹ä¸­
        /// </summary>
        [Description("盘点出库中")]
        ç›˜ç‚¹å‡ºåº“中 = 1,
        /// <summary>
        /// ç›˜ç‚¹å‡ºåº“完成
        /// </summary>
        [Description("盘点出库完成")]
        ç›˜ç‚¹å‡ºåº“完成 = 2,
        /// <summary>
        /// ç›˜ç‚¹å®Œæˆ
        /// </summary>
        [Description("盘点完成")]
        ç›˜ç‚¹å®Œæˆ = 3
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundRepository.cs
@@ -24,5 +24,7 @@
        IReturnOrderDetailRepository ReturnOrderDetailRepository { get; }
        IMesProInOrderRepository MesProInOrderRepository { get; }
        IMesProInOrderDetailRepository MesProInOrderDetailRepository { get; }
        ITakeStockOrderRepository TakeStockOrderRepository { get; }
        ITakeStockOrderDetailRepository TakeStockOrderDetailRepository { get; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -66,6 +66,10 @@
        //WebResponseContent RequestInboundTask(string palletCode, string stationCode);
        WebResponseContent RequestInboundTask(SaveModel saveModel);
        /// <summary>
        /// æŸ¥è¯¢è´¨æ£€æ•°é‡
        /// </summary>
        WebResponseContent InQualityConfirm(string palletCode);
        /// <summary>
        /// ç©ºç®±å…¥åº“
        /// </summary>
        /// <param name="barcode"></param>
@@ -209,6 +213,7 @@
        /// <param name="id"></param>
        /// <returns></returns>
        WebResponseContent Outbound(int id);
        WebResponseContent TakeOutbound(List<StockViewDTO> stockViews);
        /// <summary>
        /// ç‰©æ–™å‡ºåº“,WMS同步出库物料批次至MES
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundRepository.cs
@@ -25,7 +25,11 @@
        public IMesProInOrderRepository MesProInOrderRepository { get; }
        public IMesProInOrderDetailRepository MesProInOrderDetailRepository { get; }
        public InboundRepository(IInboundOrderDetailRepository inboundOrderDetailRepository, IInboundOrderRepository inboundOrderRepository, IReceiveOrderDetailRepository receiveOrderDetailRepository, IReceiveOrderRepository receiveOrderRepository, IPurchaseOrderDetailRepository purchaseOrderDetailRepository, IPurchaseOrderRepository purchaseOrderRepository, IReturnOrderRepository returnOrderRepository, IReturnOrderDetailRepository returnOrderDetailRepository, IMesProInOrderRepository mesProInOrderRepository, IMesProInOrderDetailRepository mesProInOrderDetailRepository)
        public ITakeStockOrderRepository TakeStockOrderRepository { get; }
        public ITakeStockOrderDetailRepository TakeStockOrderDetailRepository { get; }
        public InboundRepository(IInboundOrderDetailRepository inboundOrderDetailRepository, IInboundOrderRepository inboundOrderRepository, IReceiveOrderDetailRepository receiveOrderDetailRepository, IReceiveOrderRepository receiveOrderRepository, IPurchaseOrderDetailRepository purchaseOrderDetailRepository, IPurchaseOrderRepository purchaseOrderRepository, IReturnOrderRepository returnOrderRepository, IReturnOrderDetailRepository returnOrderDetailRepository, IMesProInOrderRepository mesProInOrderRepository, IMesProInOrderDetailRepository mesProInOrderDetailRepository, ITakeStockOrderRepository takeStockOrderRepository, ITakeStockOrderDetailRepository takeStockOrderDetailRepository)
        {
            InboundOrderDetailRepository = inboundOrderDetailRepository;
            InboundOrderRepository = inboundOrderRepository;
@@ -37,6 +41,8 @@
            ReturnOrderDetailRepository = returnOrderDetailRepository;
            MesProInOrderRepository = mesProInOrderRepository;
            MesProInOrderDetailRepository = mesProInOrderDetailRepository;
            TakeStockOrderRepository = takeStockOrderRepository;
            TakeStockOrderDetailRepository = takeStockOrderDetailRepository;
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs
@@ -75,8 +75,7 @@
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == receiveOrder.WarehouseId);
                MatSerNumAnalysisModel model = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNum);
                Dt_SupplierInfo supplierInfo = _supplierInfoRepository.QueryFirst(x => x.SupplierCode == receiveOrder.SuppliersId);
                //收货增加批次卡控
                //查询收货明细是否有存在同一个批次
                //收货增加批次卡控,查询收货明细是否有存在同一个批次
                Dt_ReceiveOrderDetail receiveOrderDetailOld = _inboundRepository.ReceiveOrderDetailRepository.QueryFirst(x => x.LotNo == model.LotNo && x.MaterielCode == model.MaterielCode);
                Dt_ReceiveOrder? receiveOrderOld = null;
                if (receiveOrderDetailOld!=null)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderService.cs
@@ -56,7 +56,7 @@
                    }
                }
            }
            saveModel.MainData.Add(nameof(Dt_TakeStockOrder.TakeStockStatus).FirstLetterToLower(), TakeStockStatusEnum.NotTake.ObjToInt());
            saveModel.MainData.Add(nameof(Dt_TakeStockOrder.TakeStockStatus).FirstLetterToLower(), TakeStockStatusEnum.未盘点.ObjToInt());
            return base.AddData(saveModel); 
        }
        /// <summary>
@@ -74,11 +74,11 @@
                List<Dt_TakeStockOrder> takeStockOrders = new List<Dt_TakeStockOrder>();
                if (string.IsNullOrEmpty(orderNo))
                {
                    takeStockOrders = Db.Queryable<Dt_TakeStockOrder>().Where(x => x.TakeStockStatus < TakeStockStatusEnum.Taked.ObjToInt() && x.WarehouseId == warehouseId).ToPageList(pageNo, 5);
                    takeStockOrders = Db.Queryable<Dt_TakeStockOrder>().Where(x => x.TakeStockStatus < TakeStockStatusEnum.盘点完成.ObjToInt() && x.WarehouseId == warehouseId).ToPageList(pageNo, 5);
                }
                else
                {
                    takeStockOrders = Db.Queryable<Dt_TakeStockOrder>().Where(x => (x.OrderNo.Contains(orderNo) && x.TakeStockStatus < TakeStockStatusEnum.Taked.ObjToInt() && x.WarehouseId == warehouseId)).ToPageList(pageNo, 5);
                    takeStockOrders = Db.Queryable<Dt_TakeStockOrder>().Where(x => (x.OrderNo.Contains(orderNo) && x.TakeStockStatus < TakeStockStatusEnum.盘点完成.ObjToInt() && x.WarehouseId == warehouseId)).ToPageList(pageNo, 5);
                }
                content.OK(data: takeStockOrders);
            }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Check/Dt_CheckOrder.cs
@@ -138,6 +138,11 @@
        [SugarColumn(IsNullable = true, ColumnDescription = "检验单类型")]
        public int OrderType { get; set; }
        /// <summary>
        /// æ£€éªŒæ‰˜ç›˜
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "检验托盘")]
        public string OrderPalletCode { get; set; }
        /// <summary>
        /// è´¨æ£€ç»“æžœ
        /// </summary>
        [Navigate(NavigateType.OneToMany, nameof(Dt_CheckOrderResult.CheckOrderId), nameof(CheckOrderId))]
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrder.cs
@@ -50,7 +50,7 @@
        /// <summary>
        /// ç›˜ç‚¹æ˜Žç»†
        /// </summary>
        [PropertyValidate("退料单明细", NotNullAndEmpty = true), Navigate(NavigateType.OneToMany, nameof(Dt_TakeStockOrderDetail.TakeStockId), nameof(Id))]
        [PropertyValidate("盘点明细", NotNullAndEmpty = true), Navigate(NavigateType.OneToMany, nameof(Dt_TakeStockOrderDetail.TakeStockId), nameof(Id))]
        public List<Dt_TakeStockOrderDetail> Details { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrderDetail.cs
@@ -23,7 +23,7 @@
        /// <summary>
        /// ç›˜ç‚¹å•主键
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "退料单主键")]
        [SugarColumn(IsNullable = false, ColumnDescription = "盘点单主键")]
        public int TakeStockId { get; set; }
        /// <summary>
@@ -51,6 +51,24 @@
        public string MaterielSpec { get; set; }
        /// <summary>
        /// åŽŸä»“ä½
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "原仓位")]
        public string LocationCode { get; set; }
        /// <summary>
        /// ç›˜ç‚¹æ‰˜ç›˜
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "盘点托盘")]
        public string TakePalletCode { get; set; }
        /// <summary>
        /// ç›˜ç‚¹æ˜Žç»†çŠ¶æ€
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "盘点明细状态")]
        public int TakeDetalStatus { get; set; }
        /// <summary>
        /// å•位
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "单位")]
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs
@@ -1187,13 +1187,14 @@
                    case "inspectAcceptEnum":
                        {
                            List<object> data = new List<object>();
                            {
                                Type type = typeof(InspectAcceptEnum);
                                List<int> enums = Enum.GetValues(typeof(InspectAcceptEnum)).Cast<int>().ToList();
                                List<string> enumNames = Enum.GetNames(typeof(InspectAcceptEnum)).ToList();
                                int index = 0;
                                foreach (var item in enums)
                                foreach (var item in enumNames)
                                {
                                    FieldInfo? fieldInfo = typeof(InspectAcceptEnum).GetField(((InspectAcceptEnum)item).ToString());
                                    FieldInfo? fieldInfo = typeof(InspectAcceptEnum).GetField((item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
@@ -1236,6 +1237,32 @@
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "takeStockDetailStatusEnum":
                        {
                            List<object> data = new List<object>();
                            {
                                Type type = typeof(TakeStockDetailStatusEnum);
                                List<int> enums = Enum.GetValues(typeof(TakeStockDetailStatusEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(TakeStockDetailStatusEnum).GetField(((TakeStockDetailStatusEnum)item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
                                        data.Add(new { key = item.ToString(), value = description.Description });
                                    }
                                    else
                                    {
                                        data.Add(new { key = item.ToString(), value = item.ToString() });
                                    }
                                    index++;
                                }
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                }
                return result;
            }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -691,7 +691,8 @@
                                        ReceivedQuantity = item.OriginalQuantity,
                                        OrderType = CheckTypeEnum.InspectCheck.ObjToInt(),
                                        ReceiveOrderNo = outboundOrder.OrderNo,
                                        LotNo= item.BatchNo,
                                        OrderPalletCode= item.PalletCode,
                                        LotNo = item.BatchNo,
                                        Result = CheckAcceptEnum.NotCheckAccept.ToString(),
                                        QualifiedQuantity = 0,
                                        ReceiveDetailRowNo = item.Id,
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs
@@ -16,6 +16,7 @@
using WIDESEA_Common.TaskEnum;
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_DTO;
using WIDESEA_DTO.MES;
@@ -60,7 +61,7 @@
                {
                    return WebResponseContent.Instance.Error($"未找到组盘信息");
                }
                if (stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.手动组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.拣选完成.ObjToInt())
                if (stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.手动组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.拣选完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.送检完成.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"该托盘状态不正确,不可申请入库");
                }
@@ -134,6 +135,11 @@
                        stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt();
                        newTask.TaskType = TaskTypeEnum.InPick.ObjToInt();
                    }
                    else if (stockInfo.StockStatus == StockStatusEmun.送检完成.ObjToInt())
                    {
                        stockInfo.StockStatus = StockStatusEmun.手动组盘入库确认.ObjToInt();
                        newTask.TaskType = TaskTypeEnum.InQuality.ObjToInt();
                    }
                    else
                    {
                        stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt();
@@ -162,7 +168,52 @@
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// æŸ¥è¯¢è´¨æ£€æ•°é‡
        /// </summary>
        /// <param name="palletCode">托盘号</param>
        /// <returns></returns>
        public WebResponseContent InQualityConfirm(string palletCode)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(palletCode);
                if (stockInfo == null)
                {
                    return content.Error($"未找到该托盘库存信息");
                }
                if (stockInfo.Details.Count<=0)
                {
                    return content.Error($"该托盘库存明细为空");
                }
                if (stockInfo.StockStatus != StockStatusEmun.送检完成.ObjToInt())
                {
                    return content.Error($"该托盘还未送检出库完成");
                }
                Dt_OutStockLockInfo? outStockLockInfo = _outboundRepository.OutboundStockLockInfoRepository.QueryData(x => x.PalletCode == palletCode && x.Status == OutLockStockStatusEnum.出库完成.ObjToInt() && x.OrderType== OutOrderTypeEnum.Quality.ObjToInt()).OrderByDescending(x=>x.Id).FirstOrDefault();
                if (outStockLockInfo != null)
                {
                    //获取对应检验单
                    Dt_CheckOrder checkOrder = _checkOrderRepository.QueryFirst(x=>x.ReceiveDetailRowNo== outStockLockInfo.Id && x.CheckOrderStatus==CheckOrderStatusEnum.Checked.ObjToInt());
                    if (checkOrder == null)
                    {
                        return content.Error($"该托盘送检信息未检");
                    }
                    content.OK("成功", data:new { stockInfo.Details.FirstOrDefault()?.MaterielCode,checkOrder.ReceivedQuantity,checkOrder.ScrappedQuantity,checkOrder.DefectedQuantity,checkOrder.QualifiedQuantity,stockQuantity= stockInfo.Details.Sum(x=>x.StockQuantity) }) ;
                }
                else
                {
                    content.Error("该托盘送检出库详情不存在");
                }
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// å…¥ç©ºç®±
        /// </summary>
@@ -374,7 +425,7 @@
                {
                    return WebResponseContent.Instance.Error($"未找到组盘信息");
                }
                if (stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.手动组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.出库完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.拣选完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.退库.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES退库.ObjToInt())
                if (stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.手动组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.出库完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.拣选完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.退库.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES退库.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.送检完成.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"该托盘状态不正确,不可申请入库");
                }
@@ -434,6 +485,11 @@
                else if (stockInfo.StockStatus == StockStatusEmun.拣选完成.ObjToInt())
                {
                    newTask.TaskType = TaskTypeEnum.InPick.ObjToInt();
                }
                else if (stockInfo.StockStatus == StockStatusEmun.送检完成.ObjToInt())
                {
                    stockInfo.StockStatus = StockStatusEmun.手动组盘入库确认.ObjToInt();
                    newTask.TaskType = TaskTypeEnum.InQuality.ObjToInt();
                }
                else
                {
@@ -523,8 +579,9 @@
                }
                else if (stockInfo.StockStatus == StockStatusEmun.MES空托退库.ObjToInt())
                {
                    Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x=>x.WarehouseId==stockInfo.WarehouseId && x.PalletType==stockInfo.PalletType);
                    //todo å°æ‰˜ç›˜æš‚时未启用
                    if (stockInfo.PalletType == PalletTypeEnum.MediumPallet.ObjToInt())
                    if (palletTypeInfo.LocaitonCount==2)
                    {
                        newTask.TaskType = TaskTypeEnum.MesPalletLargeReturn.ObjToInt();
                    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs
@@ -20,6 +20,7 @@
using WIDESEA_Core.CodeConfigEnum;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_DTO.ERP;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
namespace WIDESEA_TaskInfoService
{
@@ -78,6 +79,102 @@
            return content;
        }
        /// <summary>
        /// é€‰å®šåº“存生成盘点单出库
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public WebResponseContent TakeOutbound(List<StockViewDTO> stockViews)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                if (stockViews.Select(x=>x.WarehouseId).Distinct().Count()>=2)
                {
                    return content.Error($"请选择同一仓库库存进行盘点");
                }
                List<int> ids = stockViews.Select(x => x.StockId).ToList();
                //获取库存
                List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => ids.Contains(x.Id)).Includes(x => x.Details).ToList();
                if (stockInfos.Count!= stockViews.Count)
                {
                    StockViewDTO? stockViewDTO = stockViews.FirstOrDefault(x=> !stockInfos.Select(x=>x.PalletCode).ToList().Contains(x.PalletCode));
                    return content.Error($"未找到{stockViewDTO?.PalletCode}库存");
                }
                //获取货位
                List<string> locStrs = stockInfos.Select(x => x.LocationCode).ToList();
                List<Dt_LocationInfo> locationInfos =_basicRepository.LocationInfoRepository.QueryData(x=> locStrs.Contains(x.LocationCode));
                if (stockInfos.Count != locationInfos.Count)
                {
                    string? locStr = locStrs.FirstOrDefault(x=> !locationInfos.Select(x => x.LocationCode).ToList().Contains(x));
                    return content.Error($"未找到{locStr}货位数据");
                }
                Dt_TakeStockOrder takeStockOrder = new Dt_TakeStockOrder()
                {
                    WarehouseId = stockInfos.FirstOrDefault().WarehouseId,
                    TakeStockStatus = TakeStockStatusEnum.盘点中.ObjToInt(),
                    Details = new List<Dt_TakeStockOrderDetail>()
                };
                foreach (var item in stockInfos)
                {
                    if (item.Details.Count<=0)
                    {
                        return content.Error($"未找到{item.PalletCode}库存明细数据");
                    }
                    Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x=>x.LocationCode==item.LocationCode);
                    if (locationInfo != null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && item.StockStatus == StockStatusEmun.入库完成.ObjToInt())
                    {
                        //创建明细
                        Dt_TakeStockOrderDetail takeStockOrderDetail = new Dt_TakeStockOrderDetail()
                        {
                            MaterielCode= item.Details.FirstOrDefault().MaterielCode,
                            MaterielName=item.Details.FirstOrDefault().MaterielName ?? "无物料名称",
                            BatchNo=item.Details.FirstOrDefault().BatchNo,
                            MaterielSpec=item.Details.FirstOrDefault().MaterielSpec ?? "无物料规格",
                            LocationCode=item.LocationCode,
                            TakePalletCode=item.PalletCode,
                            TakeDetalStatus=TakeStockDetailStatusEnum.盘点出库中.ObjToInt(),
                            Unit=item.Details.FirstOrDefault().Unit ?? "无单位",
                            SysQty=item.Details.Sum(x=>x.StockQuantity),
                            Qty=0
                        };
                        takeStockOrder.Details.Add(takeStockOrderDetail);
                    }
                    else
                    {
                        content.Error($"货位或库存状态不满足出库条件");
                    }
                }
                List<Dt_Task> tasks = GetTasks(stockInfos, TaskTypeEnum.OutInventory);
                if (tasks == null || tasks.Count <= 0)
                {
                    return content.Error($"生成任务失败");
                }
                stockInfos.ForEach(x =>
                {
                    x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                });
                LocationStatusEnum locationStatus = LocationStatusEnum.Lock;
                _unitOfWorkManage.BeginTran();
                //更新库存状态
                _stockRepository.StockInfoRepository.UpdateData(stockInfos);
                _inboundRepository.TakeStockOrderRepository.Db.InsertNav(takeStockOrder).Include(x=>x.Details).ExecuteCommand();
                //新建任务
                BaseDal.AddData(tasks);
                //加入货位变动记录
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, locationStatus, LocationChangeType.OutboundAssignLocation, "", tasks?.Select(x => x.TaskNum).ToList());
                _basicService.LocationInfoService.Repository.UpdateLocationStatus(locationInfos, locationStatus);
                _unitOfWorkManage.CommitTran();
                PushTasksToWCS(tasks);
                content.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// ç”Ÿæˆæˆå“å‡ºåº“任务
        /// </summary>
        /// <param name="ProOutNo">出库订单号</param>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -42,7 +42,14 @@
        {
            return Service.RequestInboundTask(saveModel);
        }
        /// <summary>
        /// æŸ¥è¯¢è´¨æ£€æ•°é‡
        /// </summary>
        [HttpPost, HttpGet, Route("InQualityConfirm"), AllowAnonymous]
        public WebResponseContent InQualityConfirm(string palletCode)
        {
            return Service.InQualityConfirm(palletCode);
        }
        /// <summary>
        /// ç©ºç®±å…¥åº“
        /// </summary>
@@ -385,5 +392,13 @@
        {
            return Service.GetZHMesMaterialLot(materialLot);
        }
        /// <summary>
        /// é€‰å®šåº“存生成盘点单出库
        /// </summary>
        [HttpPost, Route("TakeOutbound"), AllowAnonymous]
        public WebResponseContent TakeOutbound([FromBody] List<StockViewDTO> stockViews)
        {
            return Service.TakeOutbound(stockViews);
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
@@ -6,7 +6,7 @@
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "dics": "inOrderType,outOrderType,inboundState,createType,enableEnum,enableStatusEnum,locationStatusEnum,locationTypeEnum,taskTypeEnum,taskStatusEnum,outboundStatusEnum,orderDetailStatusEnum,stockStatusEmun,stockChangeType,outStockStatus,receiveOrderTypeEnum,authorityScope,authorityScopes,locationChangeType,warehouses,suppliers,taskType,receiveStatus,purchaseType,purchaseOrderStatus,printStatus,returnStatus,returnType,outLockStockStatusEnum,checkOrderStatusEnum,checkUploadEnum,checkAcceptEnum,proStockAttributeEnum,materielSourceTypeEnum,materielTypeEnum,customerOutRuleEnum,proScrapStatusEnum,checkTypeEnum,inspectAcceptEnum,inspectResultEnum",
  "dics": "inOrderType,outOrderType,inboundState,createType,enableEnum,enableStatusEnum,locationStatusEnum,locationTypeEnum,taskTypeEnum,taskStatusEnum,outboundStatusEnum,orderDetailStatusEnum,stockStatusEmun,stockChangeType,outStockStatus,receiveOrderTypeEnum,authorityScope,authorityScopes,locationChangeType,warehouses,suppliers,taskType,receiveStatus,purchaseType,purchaseOrderStatus,printStatus,returnStatus,returnType,outLockStockStatusEnum,checkOrderStatusEnum,checkUploadEnum,checkAcceptEnum,proStockAttributeEnum,materielSourceTypeEnum,materielTypeEnum,customerOutRuleEnum,proScrapStatusEnum,checkTypeEnum,inspectAcceptEnum,inspectResultEnum,takeStockDetailStatusEnum",
  "AllowedHosts": "*",
  "ConnectionStringsEncryption": false,
  "MainDB": "DB_WIDESEA", //当前项目的主库,所对应的连接字符串的Enabled必须为true
´úÂë¹ÜÀí/»´°²PDA/pages.json
@@ -65,6 +65,13 @@
            }
        },
        {
            "path": "pages/stash/InspectIn",
            "style": {
                "navigationBarTitleText": "送检入库",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/stash/AGVFinish",
            "style": {
                "navigationBarTitleText": "AGV完成",
´úÂë¹ÜÀí/»´°²PDA/pages/stash/InspectIn.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,612 @@
<template>
    <view>
        <uni-segmented-control style="margin-top: 15rpx;" :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="barcode" @input="barcodeInput" />
                        </uni-forms-item>
                        <uni-forms-item label="内箱标签:">
                            <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>
                            <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 === 0" 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' @confirm="inputChangebarcode" />
                        </uni-forms-item>
                        <uni-forms-item label="地址条码">
                            <uni-easyinput type="text" v-model="address" :disabled="addressdisabled"
                                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 class="uni-content" v-if="checkStockInfo" style="width: 500rpx; margin: 0px auto;">
                        <view class="uni-title-sub uni-ellipsis-2" style="font-size: 16px;">物料编号:{{checkStockInfo.materielCode}}</view>
                        <view class="uni-note" style="font-size: 16px;">检验数量:{{checkStockInfo.receivedQuantity}}</view>
                        <view class="uni-note" style="font-size: 16px;">报废数量:{{checkStockInfo.scrappedQuantity}}</view>
                        <view class="uni-note" style="font-size: 16px;">特采数量:{{checkStockInfo.defectedQuantity}}</view>
                        <view class="uni-note" style="font-size: 16px;">合格数量:{{checkStockInfo.qualifiedQuantity}}</view>
                        <view class="uni-note" style="font-size: 16px;">库存数量:{{checkStockInfo.stockQuantity}}</view>
                    </view>
                </view>
            </view>
            <view v-if="current === 1" class="headerstyle">
                <view class="itemstyle">
                    <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="pksubmit" 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 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">采购单号:{{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>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    const innerAudioContext = uni.createInnerAudioContext();
    export default {
        data() {
            return {
                items: ['入库'], //, '单据信息', '解盘'
                current: 0,
                matTotal: [],
                matInfos: [],
                orderNo: "",
                label: "",
                orderInfo: [],
                focus: false,
                pkfocus: false,
                barcode: "",
                materSn: "",
                Initiallife: 1000,
                sns: [],
                sn: "",
                addressFocus: false,
                inboundBarcode: "",
                address: "",
                check: true,
                value: "",
                matInfo: [],
                value2: "",
                matTotals: [],
                warehouseId: "",
                Test: false,
                Testlabel: "",
                Testplaceholder: "",
                Testcheck: false,
                Summmary: 0,
                stockInfoDetail: [],
                addressdisabled: false,
                pksns: [],
                pkmaterSn: "",
                pkmatInfos: [],
                checkStockInfo:null
            }
        },
        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) { //油墨仓库区ID
                this.Test = true;
                this.Testlabel = "数量:";
                this.Testplaceholder = "请输入数量";
                this.Initiallife = 16;
            } else if (this.warehouseId == 5) { //辅料仓库区ID
                this.address = "8005";
                this.items.push("入平库");
                this.items[1] = "入立库";
                this.address = "8005";
            } else if (this.warehouseId == 3) { //辅料仓库区ID
                this.address = "1011";
                this.addressdisabled = true;
            }
            this.label = "单据编号:" + this.orderNo;
            this.getData();
        },
        methods: {
            // voiceSpeech(src) {
            //     innerAudioContext.src = src; // '../../static/success.mp3';
            //     innerAudioContext.play();
            // },
            //wms入平库
            pksubmit() {
                if (this.pkmatInfos.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: 'error'
                    })
                    return;
                }
                this.$u.post('/api/InboundOrder/WMSInPinKu?warehouseId=' + this.warehouseId, this
                    .pksns).then(res => {
                    debugger
                    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"
                        })
                    }
                })
            },
            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.status) {
                                    this.$refs.uToast.show({
                                        title: res.message,
                                        type: "error"
                                    })
                                    // setTimeout(() => {
                                    //     this.voiceSpeech('../../static/fail.mp3');
                                    // }, 100);
                                    return;
                                }
                                // setTimeout(() => {
                                //     this.voiceSpeech('../../static/success.mp3');
                                // }, 100);
                                return;
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                                // setTimeout(() => {
                                //     this.voiceSpeech('../../static/fail.mp3');
                                // }, 100);
                            }
                        })
                    }
                })
            },
            //解盘
            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('解盘成功!')
                        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 || this.warehouseId == 3) {
                        if (this.sns.length > 0) {
                            this.sns = [];
                        }
                    }
                    if (this.materSn != "") {
                        this.focus = false;
                        if (this.warehouseId == 11) {
                            this.materSn = this.materSn.replace(/,SC.*/, '');
                        }
                        if (this.materSn.split(',').length != 6) {
                            this.materSn = "";
                            return;
                        }
                        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 || this.warehouseId ==
                                    3) {
                                    if (this.matInfos.length > 0) {
                                        this.matInfos = [];
                                    }
                                }
                                this.matInfos.push(res.data);
                                if (!res.status) {
                                    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) {
                        this.inboundBarcode = "";
                        if (this.warehouseId != 5 && this.warehouseId != 3) this.address = "";
                        this.checkStockInfo=null;
                        setTimeout(() => {
                            this.addressFocus = false;
                            this.$refs.uToast.show({
                                title: "成功",
                                type: "success"
                            })
                        }, 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;
                    }
                })
                this.$nextTick(function(x) {
                    if (this.inboundBarcode != '') {
                        this.$u.post('/api/Task/InQualityConfirm?palletCode='+this.inboundBarcode, {}).then(res => {
                            // this.stockInfo = [];
                            this.checkStockInfo=null;
                            if (res.status) {
                                // this.stockInfo = res.data,
                                this.checkStockInfo = res.data;
                            } else {
                                this.inboundBarcode='';
                                this.$refs.uToast.show({
                                    // title: "未找到托盘信息",
                                    title: res.message,
                                    type: "error"
                                })
                            }
                        })
                    }
                })
            },
            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) { //油墨仓库区ID
                    this.sn = this.sns[0];
                    for (var i = 0; i < this.Initiallife - 1; i++) {
                        this.sns.push(this.sn);
                    }
                }
                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>
´úÂë¹ÜÀí/»´°²PDA/pages/stash/boxing.vue
@@ -8,11 +8,11 @@
                    <uni-forms label-width="180">
                        <uni-forms-item label="托盘条码:">
                            <uni-easyinput type="text" placeholder="请扫描托盘条码" ref='midInput' :focus="!focus"
                                v-model="barcode" @input="barcodeInput" />
                                v-model="barcode" @confirm="barcodeInput" />
                        </uni-forms-item>
                        <uni-forms-item label="内箱标签:">
                            <uni-easyinput type="text" placeholder="请扫描内箱标签" ref='midInput' :focus="focus"
                                v-model="materSn" @input="snInput" />
                                v-model="materSn" @confirm="snInput" />
                        </uni-forms-item>
                        <uni-forms-item :label="Testlabel" v-if="Test">
                            <uni-easyinput type="text" :placeholder="Testplaceholder" ref='midInput'
@@ -61,7 +61,7 @@
                    <uni-forms label-width="120">
                        <uni-forms-item label="托盘条码">
                            <uni-easyinput type="text" :focus="!addressFocus" v-model="inboundBarcode"
                                placeholder="请扫描托盘条码" ref='midInput' @input="inputChangebarcode" />
                                placeholder="请扫描托盘条码" ref='midInput' @confirm="inputChangebarcode" />
                        </uni-forms-item>
                        <uni-forms-item label="地址条码">
                            <uni-easyinput type="text" v-model="address" :disabled="addressdisabled"
@@ -105,7 +105,7 @@
                    <uni-forms label-width="180">
                        <uni-forms-item label="内箱标签:">
                            <uni-easyinput type="text" placeholder="请扫描内箱标签" ref='midInput' :focus="pkfocus"
                                v-model="pkmaterSn" @input="pksnInput" />
                                v-model="pkmaterSn" @confirm="pksnInput" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="pksubmit" type="primary" size="default" style="margin-top: 2%;">入平库</button>
´úÂë¹ÜÀí/»´°²PDA/pages/stash/raworderboxing.vue
@@ -10,11 +10,11 @@
                        </uni-forms-item>
                        <uni-forms-item label="托盘条码:">
                            <uni-easyinput type="text" placeholder="请扫描托盘条码" ref='midInput' :focus="!focus"
                                v-model="barcode" @input="barcodeInput" />
                                v-model="barcode" @confirm="barcodeInput" />
                        </uni-forms-item>
                        <uni-forms-item label="内箱标签:">
                            <uni-easyinput type="text" placeholder="请扫描内箱标签" ref='midInput' :focus="focus"
                                v-model="materSn" @input="snInput" />
                                v-model="materSn" @confirm="snInput" />
                        </uni-forms-item>
                        <uni-forms-item :label="Testlabel" v-if="Test">
@@ -69,7 +69,7 @@
                    <uni-forms label-width="120">
                        <uni-forms-item label="托盘条码">
                            <uni-easyinput type="text" :focus="!addressFocus" v-model="inboundBarcode"
                                placeholder="请扫描托盘条码" ref='midInput' @input="inputChangebarcode" />
                                placeholder="请扫描托盘条码" ref='midInput' @confirm="inputChangebarcode" />
                        </uni-forms-item>
                        <uni-forms-item label="地址条码">
                            <uni-easyinput type="text" v-model="address" :disabled="addressdisabled"
@@ -107,7 +107,7 @@
                    <uni-forms label-width="180">
                        <uni-forms-item label="内箱标签:">
                            <uni-easyinput type="text" placeholder="请扫描内箱标签" ref='midInput' :focus="!pkfocus"
                                v-model="pkmaterSn" @input="pksnInput" />
                                v-model="pkmaterSn" @confirm="pksnInput" />
                        </uni-forms-item>
                        <uni-forms-item>
´úÂë¹ÜÀí/»´°²PDA/pages/stash/receiveorderoutbound.vue
@@ -9,7 +9,7 @@
                    <!-- <uni-forms-item label="单据类型:生产领料单" style="margin-top: -20px;"></uni-forms-item> -->
                    <uni-forms-item label="内箱码:" style="margin-top: -20px;">
                        <uni-easyinput type="text" placeholder="请扫描内箱码" ref='midInput' :focus="!focus"
                            v-model="innerCode" @input="innercodeInput" />
                            v-model="innerCode" @confirm="innercodeInput" />
                    </uni-forms-item>
                    <uni-forms-item :label="PurchaseOrderNo" style="margin-top: -20px;"></uni-forms-item>
                    <uni-forms-item :label="matCode" style="margin-top: -20px;"></uni-forms-item>