wangxinhui
4 天以前 9ec715d2deb18a269dd49c48da91a36632d08c81
最新代码上传,优化功能等
已修改47个文件
已添加21个文件
2810 ■■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP仓/ConveyorLineJob_PP.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP仓/TSJConveyorLineJob_PP.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/干膜仓/ConveyorLineJob_GM.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/阻焊仓/GroundStationJob_ZH.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/api/http.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/check/extend/checkResult.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/check/extend/inspectResult.vue 243 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/check/extend/inspectResultInfo.vue 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/check/inspectOrder.js 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/inbound/receiveOrder.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/erpProScrapSheet.js 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/PPStockSelect.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/mesPPCutOutOrderDetail.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/mesPPoutOrderDetail.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/outboundOrder.js 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/router/viewGird.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/check/checkOrder.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/check/inspectOrder.vue 336 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/outbound/erpProScrapSheet.vue 266 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_CSJ.cs 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_GM.cs 78 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_ZH.cs 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderService.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/WIDESEA_CheckService.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/CheckTypeEnum.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/CheckOrderEnum.cs 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/InboundOrderMenu.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/ProScrapSheetStatusEnum.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/RuleCodeEnum.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/ERPService/InvokeERPService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/IERPService/IInvokeERPService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPInspectModel.cs 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ICheckService/ICheckOrderResultService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ICheckService/ICheckOrderService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IErpProScrapSheetDetailRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IErpProScrapSheetRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IErpProScrapSheetDetailService.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IErpProScrapSheetService.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProOutOrderService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Check/Dt_CheckOrder.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Check/Dt_CheckOrderResult.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ErpProScrapSheet.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ErpProScrapSheetDetail.cs 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/ErpProScrapSheetDetailRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/ErpProScrapSheetRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ErpProScrapSheetDetailService.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ErpProScrapSheetService.cs 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WIDESEA_TaskInfoService.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Check/CheckOrderResultController.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ErpProScrapSheetController.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ErpProScrapSheetDetailController.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ProOutOrderController.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs
@@ -115,13 +115,14 @@
                }
                if (task.PalletCode!= agvCallbackBox.ContainerCode)
                {
                    string Address = task.CurrentAddress switch
                    string Address = task?.CurrentAddress switch
                    {
                        "5206" => "5105",
                        "5212" => "5111",
                        "5218" => "5117",
                        "8005" => "8001",
                        "5135" => "5236",
                        _ => throw new Exception("未找到地址信息"),
                    };
                    AgvCTUCancelDTO agvCTUCancel=new AgvCTUCancelDTO()
                    {
@@ -172,12 +173,7 @@
            {
                if (agvUpdateModel == null) throw new Exception("未获取到请求参数");
                agvResponseContent.ReqCode = agvUpdateModel.ReqCode;
                var task = _taskRepository.QueryFirst(x => agvUpdateModel.TaskCode == x.AgvTaskNum);
                //是否存在输送线体待AGV搬运任务
                var taskExecutes = _taskRepository.QueryData(x => x.NextAddress == task.CurrentAddress && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt() && x.TaskType == TaskTypeEnum.InProduct.ObjToInt());
                var taskExecutesFL = _taskRepository.QueryData(x => x.TaskState == TaskStatusEnum.New.ObjToInt() &&  x.DeviceCode=="AGV_FL" && !string.IsNullOrEmpty(x.DeviceCode));
                if (task == null) throw new Exception($"未找到任务,任务号【{agvUpdateModel.TaskCode}】");
                var task = _taskRepository.QueryFirst(x => agvUpdateModel.TaskCode == x.AgvTaskNum) ?? throw new Exception($"未找到任务,任务号【{agvUpdateModel.TaskCode}】");
                switch (agvUpdateModel.Method.ToUpper())
                {
                    case "END":
@@ -190,27 +186,16 @@
                        //更改成品入库AGV取货任务状态
                        if (task.TaskType == TaskTypeEnum.InProduct.ObjToInt() || task.TaskType == TaskTypeEnum.InProductBack.ObjToInt())
                        {
                            //for (int i = 0; i < 100; i++)
                            //{
                            //    task.TaskState = TaskStatusEnum.AGV_WaitToExecute.ObjToInt();
                            //    task.Remark = task.TaskState.ToString();
                            //    _taskRepository.UpdateData(task);
                            //    var taskOk = _taskRepository.QueryFirst(x => agvUpdateModel.TaskCode == x.AgvTaskNum);
                            //    if (taskOk.TaskState==TaskStatusEnum.AGV_WaitToExecute.ObjToInt() || taskOk.Remark.Contains("320"))
                            //    {
                            //        agvResponseContent.Code = "0";
                            //        agvResponseContent.Message = ""+i;
                            //        break;
                            //    }
                            //}
                            //是否存在输送线体待AGV搬运任务
                            var taskExecutes = _taskRepository.QueryData(x => x.NextAddress == task.CurrentAddress && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt() && x.TaskType == TaskTypeEnum.InProduct.ObjToInt());
                            if (taskExecutes.Count > 0)
                            {
                                string address = task.CurrentAddress switch
                                {
                                    "5206" => "5105",
                                    "5212" => "5111",
                                    "5218" => "5117",
                                    "5218" => "5117"
                                };
                                //调用AGV预调度接口
                                AgvScheduleTaskDTO agvScheduleTask = new AgvScheduleTaskDTO()
@@ -288,13 +273,14 @@
                        else //更改辅料取货
                        {
                            //是否存在输送线体待AGV搬运任务
                            var taskExecutesFL = _taskRepository.QueryData(x => x.TaskState == TaskStatusEnum.New.ObjToInt() && x.DeviceCode == "AGV_FL" && !string.IsNullOrEmpty(x.DeviceCode));
                            if (taskExecutesFL.Count > 0)
                            {
                                //调用AGV预调度接口
                                AgvScheduleTaskDTO agvScheduleTask = new AgvScheduleTaskDTO()
                                {
                                    PositionCode = "8001",
                                    NextTask = "90",
                                    NextTask = "60",
                                    UseableLayers = "1",
                                    CacheCount = "1",
                                    Update = "0",
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -259,7 +259,7 @@
                                task.NextAddress = router.NextPosi;
                                task.DeviceCode = router.ChildPosi;
                            }
                            else if (item.TaskType == TaskTypeEnum.MesOutbound.ObjToInt() || item.TaskType == TaskTypeEnum.MesHandOutbound.ObjToInt() || item.TaskType == TaskTypeEnum.MesHandPickOutbound.ObjToInt() || (item.TaskType == TaskTypeEnum.OutAllocate.ObjToInt() && item.RoadWay.Contains("BC")))
                            else if (item.TaskType == TaskTypeEnum.MesOutbound.ObjToInt() || item.TaskType == TaskTypeEnum.MesHandOutbound.ObjToInt() || item.TaskType == TaskTypeEnum.MesHandPickOutbound.ObjToInt() || ((item.TaskType == TaskTypeEnum.OutAllocate.ObjToInt() || item.TaskType == TaskTypeEnum.OutQuality.ObjToInt() || item.TaskType == TaskTypeEnum.OutInventory.ObjToInt()) && item.RoadWay.Contains("BC")))
                            {
                                task.NextAddress = router.NextPosi;
                                task.DeviceCode = stationManger.StackerCraneCode;
@@ -290,6 +290,10 @@
                                {
                                    task.DeviceCode = stationManger.StationDeviceCode;
                                    task.AgvTaskNum = task.Roadway + DateTime.Now.ToString("yyyyMMdd") + item.TaskNum;
                                }
                                else if (item.RoadWay.Contains("PP") && taskTypeGroup == TaskTypeGroup.OutbondGroup)
                                {
                                    task.DeviceCode = router.StartPosi;
                                }
                                else
                                {
@@ -342,7 +346,14 @@
                            router = routers.FirstOrDefault();
                            task.NextAddress = router?.StartPosi ?? "";
                            task.DeviceCode = item.RoadWay;
                            task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
                            if (item.RoadWay.Contains("ZH"))
                            {
                                task.TaskState = TaskStatusEnum.New.ObjToInt();
                            }
                            else
                            {
                                task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
                            }
                        }
                        else
                        {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP²Ö/ConveyorLineJob_PP.cs
@@ -77,20 +77,12 @@
                                if (!string.IsNullOrEmpty(boxcode))
                                {
                                    string sc = device.Communicator.Read<string>("DB900.580.0");
                                    string sc = device.Communicator.Read<string>("DB900.578.0");
                                    WriteError(device.DeviceName, $"读取值:{boxcode},对比{sc}");
                                    string boxEndCode = "";
                                    if (boxcode.LastIndexOf(",PO:") >= 0)
                                    {
                                        boxEndCode = "M" + boxcode.Substring(0, boxcode.LastIndexOf(",PO:")) + sc.Substring(sc.IndexOf(",PO:")).Replace("\0", "");
                                    }
                                    else if (boxcode.LastIndexOf(",PO") > 0)
                                    {
                                        boxEndCode = "M" + boxcode.Substring(0, boxcode.LastIndexOf(",PO")) + sc.Substring(sc.IndexOf("PO:")).Replace("\0", "");
                                    }
                                    else if (boxcode.LastIndexOf(",P") > 0)
                                    {
                                        boxEndCode = "M" + boxcode.Substring(0, boxcode.LastIndexOf(",P")) + sc.Substring(sc.IndexOf("PO:")).Replace("\0", "");
                                    }
                                    //入库申请任务
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP²Ö/TSJConveyorLineJob_PP.cs
@@ -115,7 +115,7 @@
                                Dt_Task task = _taskRepository.QueryFirst(x => _taskService.TaskOutboundTypes.Contains(x.TaskType) && x.DeviceCode == item.StackerCraneCode && x.TaskState == TaskStatusEnum.New.ObjToInt() && string.IsNullOrEmpty(x.TargetAddress) && !string.IsNullOrEmpty(x.NextAddress));
                                if (task != null)
                                {
                                    _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, nextAddress: item.StationCode, deviceCode: item.StackerCraneCode, targetAddress: item.StationCode);
                                    _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, nextAddress: item.StackerCraneStationCode, deviceCode: item.StackerCraneCode, targetAddress: item.StationCode);
                                }
                            }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/¸ÉĤ²Ö/ConveyorLineJob_GM.cs
@@ -99,20 +99,12 @@
                                
                                if (!string.IsNullOrEmpty(boxcode))
                                {
                                    string sc = device.Communicator.Read<string>("DB900.508.0");
                                    string sc = device.Communicator.Read<string>("DB900.478.0");
                                    WriteError(device.DeviceName, $"读取值:{boxcode},对比{sc}");
                                    string boxEndCode = "";
                                    if (boxcode.LastIndexOf(",SC:") >=0)
                                    if (boxcode.LastIndexOf(",PO:") >=0)
                                    {
                                        boxEndCode = "M"+ boxcode.Substring(0,boxcode.LastIndexOf(",SC:")) + sc.Substring(sc.IndexOf(",SC:")).Replace("\0", "");
                                    }
                                    else if (boxcode.LastIndexOf(",SC") > 0)
                                    {
                                        boxEndCode = "M" + boxcode.Substring(0, boxcode.LastIndexOf(",SC")) + sc.Substring(sc.IndexOf("SC:")).Replace("\0", "");
                                    }
                                    else if (boxcode.LastIndexOf(",S") > 0)
                                    {
                                        boxEndCode = "M" + boxcode.Substring(0, boxcode.LastIndexOf(",S")) + sc.Substring(sc.IndexOf("SC:")).Replace("\0", "");
                                        boxEndCode = "M"+ boxcode.Substring(0,boxcode.LastIndexOf(",PO:")) + sc.Substring(sc.IndexOf(",PO:")).Replace("\0", "");
                                    }
                                    //入库申请任务
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/×躸²Ö/GroundStationJob_ZH.cs
@@ -70,10 +70,10 @@
                            ////判断AGV任务完成,后写给地面站取货完成
                            //device.SetValue(GroundStationDBName.W_TakeRequest, false, item.StationCode);
                            //device.SetValue(GroundStationDBName.W_TakeFinish, false, item.StationCode);
                            Dt_Task task = _taskRepository.QueryFirst(x => x.DeviceCode == item.StackerCraneCode && x.TaskState == TaskStatusEnum.SC_Execute.ObjToInt() && string.IsNullOrEmpty(x.NextAddress));
                            Dt_Task task = _taskRepository.QueryFirst(x => x.DeviceCode == item.StackerCraneCode && x.TaskState == TaskStatusEnum.New.ObjToInt() && x.NextAddress==item.StationCode);
                            if (task != null && isCanPut && !isCanTake && !putRequest && !putFinish && !takeRequest && !takeFinish)
                            {
                                _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, nextAddress: item.StationCode);
                                _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, nextAddress: item.StackerCraneStationCode);
                            }
                        }
                        if (item.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt())
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/api/http.js
@@ -3,7 +3,7 @@
// import {getCurrentInstance} from 'vue'
import { useRouter, useRoute } from 'vue-router'
const router = useRouter();
axios.defaults.timeout = 50000;
axios.defaults.timeout = 60000;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
import { ElLoading as Loading, ElMessage as Message } from 'element-plus';
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/check/extend/checkResult.vue
@@ -166,7 +166,6 @@
      this.formFields.checkCount = this.rowData.receivedQuantity;
      //sampleCount保留两位小数
      this.formFields.sampleCount = (this.rowData.receivedQuantity/10).toFixed(2);
      console.log(this.rowData);
    },
    onModelClose() {
      this.$refs.form.reset();
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/check/extend/inspectResult.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,243 @@
<template>
    <vol-box
      :lazy="true"
      v-model="model"
      :show-fullscreen="false"
      title="检验"
      :width="550"
      :padding="5"
      :onModelClose="onModelClose"
    >
      <div style="width: 520px; margin-left: 0px" :style="height + 'px'">
        <div style="text-align: center; margin-top: 10px"></div>
        <vol-form
          ref="form"
          :loadKey="true"
          :formFields="formFields"
          :formRules="formRules"
        >
        </vol-form>
      </div>
      <template #footer>
        <div>
          <el-button type="primary" size="small" @click="IsCheck">确认</el-button>
          <el-button type="default" size="small" @click="closeModel"
            >关闭</el-button
          >
        </div>
      </template>
    </vol-box>
  </template>
    <script>
  import VolBox from "@/components/basic/VolBox.vue";
  import VolForm from "@/components/basic/VolForm.vue";
  //这里使用的vue2语法,也可以写成vue3语法
  export default {
    components: { "vol-box": VolBox, "vol-form": VolForm },
    methods: {},
    data() {
      return {
        model: false,
        height: 200,
        rowData: null, //当前行的数据
        //表单数据
        formFields: {
          accpetVal: null, //设置单选框默认值
          isReturn: null,
          decimalVal: null,
          Remark: null,
          defectCode: null,
          checkCount: null,
          sampleCount: null
        },
        formRules: [
          [
            {
              data: [
                { key: 1, value: "接受" },
                { key: 2, value: "不接受" },
                { key: 3, value: "特采接受" },
              ], //loadKey设置为true,会根据dataKey从后台的下拉框数据源中自动加载数据
              title: "是否接受",
              filter: true,
              //  required: true, //设置为必选项
              field: "accpetVal",
              type: "select",
              labelWidth: 80,
              validator: (rule, val) => {
                if (!val) {
                  return "请选择是否接受";
                }
              },
              onChange: (val, option) => {
                var select = option.find((x) => x.key == val)?.value;
                if (select == "接受") {
                  this.$Message.success(select);
                } else if (select == "不接受" || select == "特采接受") {
                  this.formFields.isReturn =1;
                  this.formRules[2][0].hidden = false;
                  this.formRules[2][0].required = true;
                  this.formRules[2][1].hidden = false;
                  this.formRules[2][1].required = true;
                  this.formRules[3][0].hidden = false;
                  this.$Message.error(select);
                } else {
                  this.$Message.warning("请选择是否接受");
                }
              },
            },
          ],
          [
            {
              title: "是否检数",
              field: "isReturn",
              data: [],
              required: false,
              type: "switch",
              onChange: (val) => {
                if (val == 1) {
                  this.formRules[2][0].hidden = false;
                  this.formRules[2][0].required = true;
                  this.formRules[2][1].hidden = false;
                  this.formRules[2][1].required = true;
                  this.formRules[3][0].hidden = false;
                } else {
                  this.formRules[2][0].hidden = true;
                  this.formRules[2][0].required = false;
                  this.formRules[2][1].hidden = true;
                  this.formRules[2][1].required = false;
                  this.formRules[3][0].hidden = true;
                }
              },
            },
          ],
          [
            {
              type: "select",
              title: "缺陷代码",
              required: false,
              hidden: true,
              placeholder: "缺陷代码",
              field: "defectCode",
              data: [{key:'WMSReturn',value:'WMS品质退货'},{key:'0223',value:'WMS报废'},{key:'4529',value:'WMS特采'}]
            },
            {
              type: "decimal",
              title: "数量",
              required: false,
              hidden: true,
              placeholder: "数量",
              field: "decimalVal",
            },
          ],
          [
            {
              title: "备注",
              required: false,
              hidden: true,
              field: "Remark",
              placeholder: "备注",
              min: 1,
              max: 3,
              type: "textarea",
              colSize: 12, //设置宽度100%
            },
          ],
          [
            {
              title: "检验数量",
              field: "checkCount",
              type: "label",
              inputStyle: { color: "#000000" }, //自定义样式,其他的input也生效
            },
            {
              title: "抽样数量",
              field: "sampleCount",
              type: "label",
              inputStyle: { color: "#e6a23c" }, //自定义样式,其他的input也生效
            },
          ],
        ],
      };
    },
    methods: {
      open(res) {
        this.model = true;
        this.rowData = res[0];
        this.formFields.checkCount = this.rowData.receivedQuantity;
        //sampleCount保留两位小数
        this.formFields.sampleCount = (this.rowData.receivedQuantity/10).toFixed(2);
      },
      onModelClose() {
        this.$refs.form.reset();
        this.model = false;
        this.formRules[2][0].hidden = true;
        this.formRules[2][0].required = false;
        this.formRules[2][1].hidden = true;
        this.formRules[2][1].required = false;
        this.formRules[3][0].hidden = true;
      },
      closeModel() {
        this.$refs.form.reset();
        this.model = false;
        this.formRules[2][0].hidden = true;
        this.formRules[2][0].required = false;
        this.formRules[2][1].hidden = true;
        this.formRules[2][1].required = false;
        this.formRules[3][0].hidden = true;
      },
      IsCheck() {
        //获取accpetVal的值
        this.$refs.form.validate(() => {
          var requestData = null;
          if (this.formFields.isReturn == 1) {
            var ResultInfo="";
            if(this.formFields.defectCode == "WMSReturn") {
                ResultInfo="Return";
            }else if(this.formFields.defectCode == "0223") {
                ResultInfo="Scrapped";
            }else if(this.formFields.defectCode == "4529") {
                ResultInfo="Defect";
            }
            requestData = {
              checkOrderId: this.rowData.checkOrderId,
              defectCode: this.formFields.defectCode,
              quantity: this.formFields.decimalVal,
              note: this.formFields.Remark,
              result: ResultInfo,
              sampleCount: this.formFields.sampleCount,
            };
          }
          this.http
            .post(
              "/api/CheckOrderResult/CommitInspectResult?checkOrderId=" +
                this.rowData.checkOrderId +
                "&isAccept=" +
                this.formFields.accpetVal,
              requestData ? requestData : {},
              "请求中"
            )
            .then((x) => {
              if (x.status) {
                this.$refs.form.reset();
                this.model = false;
                this.formRules[2][0].hidden = true;
                this.formRules[2][0].required = false;
                this.formRules[3][0].hidden = true;
                this.$Message.success("提交成功");
                this.$parent.refresh();
              } else {
                this.$Message.error(x.message);
              }
            });
        });
      },
    },
  };
  </script>
  <style>
  /* éšè—å…¨å±æ”¾å¤§æŒ‰é’® */
  .el-icon-full-screen {
    display: none;
  }
  </style>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/check/extend/inspectResultInfo.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
<template>
    <!-- å¼¹å‡ºæ¡†ä¸€ -->
    <vol-box :lazy="true" v-model="model1" title="检验信息" :width="500" :padding="5" :onModelClose="onModelClose">
        <div style="height:350px;">
            <div style="width:450px;margin: 10px auto;">
                <el-descriptions column="1">
                    <el-descriptions-item label="检验结果:">
                        <el-tag size="small" :type="!model1Rows?'success':'error'">
                            {{!model1Rows?"合格":"报废" }}
                        </el-tag>
                    </el-descriptions-item>
                    <el-descriptions-item :label="!model1Rows?'':'缺陷代码:'" >
                        {{!model1Rows?"":model1Rows.defectCode}}
                    </el-descriptions-item>
                    <el-descriptions-item :label="!model1Rows?'':'检验数量:'">
                        {{!model1Rows?"":model1Rows.checkquantity}}
                    </el-descriptions-item>
                    <el-descriptions-item :label="!model1Rows?'':'抽样数量:'">
                        {{!model1Rows?"":model1Rows.sampleCount}}
                    </el-descriptions-item>
                    <el-descriptions-item :label="!model1Rows?'':'报废数量:'">
                        {{!model1Rows?"":model1Rows.quantity}}
                    </el-descriptions-item>
                    <el-descriptions-item :label="!model1Rows?'':'检验员工:'">
                        {{!model1Rows?"":model1Rows.creater}}
                    </el-descriptions-item>
                    <el-descriptions-item :label="!model1Rows?'':'检验备注:'">
                        {{!model1Rows?"":model1Rows.note}}
                    </el-descriptions-item>
                </el-descriptions>
            </div>
        </div>
        <template #footer>
            <div>
                <!-- <el-button type="primary" plain size="small" @click="callParent">调用生成(父)页面对象</el-button> -->
                <!-- <el-button type="primary" size="small" @click="closeModel1">确认</el-button> -->
                <el-button type="default" size="small" @click="model1 = false">关闭</el-button>
            </div>
        </template>
    </vol-box>
</template>
<script>
import VolBox from '@/components/basic/VolBox.vue';
//这里使用的vue2语法,也可以写成vue3语法
export default {
    components: { 'vol-box': VolBox },
    methods: {},
    data() {
        return {
            model1: false,
            model1Rows: null,
        };
    },
    methods: {
        open(info) { //弹出框1
            this.model1Rows = info;
            this.model1 = true;
            console.log(info);
        },
        closeModel1() {
            this.model1 = false;
            this.model1Rows=null;
        },
        // callParent() {
        //     this.$emit('parentCall', $parent => {
        //         //$parent就是生成页面的对象,比如可以调用页面刷新,可获取的属性与方法见【生成页面文档】,$parent.xxx直接调用
        //         //调用刷新
        //         $parent.search();
        //         //获取所有选中的行数据
        //         // $parent.getSelectRows();
        //         this.$message.success('调用了刷新')
        //     })
        // },
        onModelClose() {
            this.model1 = false;
            this.model1Rows=null;
        }
    }
};
</script>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/check/inspectOrder.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,137 @@
/*****************************************************************************************
**  Author:jxx 2022
**  QQ:283591387
**完整文档见:http://v2.volcore.xyz/document/api ã€ä»£ç ç”Ÿæˆé¡µé¢ViewGrid】
**常用示例见:http://v2.volcore.xyz/document/vueDev
**后台操作见:http://v2.volcore.xyz/document/netCoreDev
*****************************************************************************************/
//此js文件是用来自定义扩展业务代码,可以扩展一些自定义页面或者重新配置生成的代码
import gridBody from './extend/inspectResult.vue'
import gridHeader from './extend/inspectResultInfo.vue'
let extension = {
  components: {
    //查询界面扩展组件
    gridHeader: gridHeader,
    gridBody: gridBody,
    gridFooter: '',
    //新建、编辑弹出框扩展组件
    modelHeader: '',
    modelBody: '',
    modelFooter: ''
  },
  tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
  buttons: { view: [], box: [], detail: [] }, //扩展的按钮
  methods: {
     //下面这些方法可以保留也可以删除
    onInit() {  //框架初始化配置前,
        //示例:在按钮的最前面添加一个按钮
        //   this.buttons.unshift({  //也可以用push或者splice方法来修改buttons数组
        //     name: '按钮', //按钮名称
        //     icon: 'el-icon-document', //按钮图标vue2版本见iview文档icon,vue3版本见element ui文档icon(注意不是element puls文档)
        //     type: 'primary', //按钮样式vue2版本见iview文档button,vue3版本见element ui文档button
        //     onClick: function () {
        //       this.$Message.success('点击了按钮');
        //     }
        //   });
        this.columns.push({
          title: '操作',
          field: '操作',
          width: 120,
          align: 'center',
          render: (h, { row, column, index }) => {
            if  ( row.checkOrderStatus == 0 ) {
              return (
                <div>
                  <el-button
                    onClick={($e) => {
                          this.$refs.gridBody.open([row],true);
                    }}
                    type="primary"
                    plain
                    size="small"
                    style="height:26px; padding: 10px !important;"
                  >
                    å®¡æ ¸
                  </el-button>
                </div>
              )
              }
              if ( row.checkOrderStatus == 1 ) {
                return (
                  <div>
                    <el-button
                      onClick={($e) => {
                        this.http
                          .post("api/CheckOrderResult/GetCheckResultInfo?checkId="+row.checkOrderId, "数据处理中...")
                          .then((x) => {
                            if (x.status) {
                                if (x.data) {
                                  x.data.checkquantity=row.receivedQuantity
                                }
                                this.$refs.gridHeader.open(x.data);
                            } else {
                              return this.$error(x.message);
                            }
                        });
                      }}
                      type="primary"
                      plain
                      size="small"
                      style="height:26px; padding: 10px !important;"
                    >
                      æ£€éªŒä¿¡æ¯
                    </el-button>
                  </div>
                )
              }
            }
        });
        this.columns.forEach(x=>{
          //设置title列固定
          if (x.field=='操作') {
            x.fixed = 'right';
              // x.align="center"//设置文本居中
          }
      })
        //示例:设置修改新建、编辑弹出框字段标签的长度
        // this.boxOptions.labelWidth = 150;
    },
    onInited() {
      //框架初始化配置后
      //如果要配置明细表,在此方法操作
      //this.detailOptions.columns.forEach(column=>{ });
    },
    searchBefore(param) {
      //界面查询前,可以给param.wheres添加查询参数
      //返回false,则不会执行查询
      return true;
    },
    searchAfter(result) {
      //查询后,result返回的查询数据,可以在显示到表格前处理表格的值
      return true;
    },
    addBefore(formData) {
      //新建保存前formData为对象,包括明细表,可以给给表单设置值,自己输出看formData的值
      return true;
    },
    updateBefore(formData) {
      //编辑保存前formData为对象,包括明细表、删除行的Id
      return true;
    },
    rowClick({ row, column, event }) {
      //查询界面点击行事件
      // this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
    },
    modelOpenAfter(row) {
      //点击编辑、新建按钮弹出框后,可以在此处写逻辑,如,从后台获取数据
      //(1)判断是编辑还是新建操作: this.currentAction=='Add';
      //(2)给弹出框设置默认值
      //(3)this.editFormFields.字段='xxx';
      //如果需要给下拉框设置默认值,请遍历this.editFormOptions找到字段配置对应data属性的key值
      //看不懂就把输出看:console.log(this.editFormOptions)
    }
  }
};
export default extension;
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/inbound/receiveOrder.js
@@ -58,6 +58,13 @@
              // x.numberLength = 4;
          }
        });
        // this.boxButtons.forEach((btn) => {
        //     if (btn.name == '保 å­˜') {
        //         btn.hidden = true;
        //         //或者设置只读
        //         //btn.readonly=true;
        //     }
        // });
    },
    searchBefore(param) {
      //界面查询前,可以给param.wheres添加查询参数
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/outbound/erpProScrapSheet.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,125 @@
//此js文件是用来自定义扩展业务代码,可以扩展一些自定义页面或者重新配置生成的代码
import gridBody from './extend/MesOutOrderDetail.vue'
import gridHeader from './extend/addMesOutOrder.vue'
let extension = {
  components: {
    //查询界面扩展组件
    gridHeader: gridHeader,
    gridBody: gridBody,
    gridFooter: '',
    //新建、编辑弹出框扩展组件
    modelHeader: '',
    modelBody: '',
    modelFooter: ''
  },
  tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
  buttons: { view: [], box: [], detail: [] }, //扩展的按钮
  methods: {
    //下面这些方法可以保留也可以删除
    onInit() {
        this.columns.push({
            field: '操作',
            title: '操作',
            width: 120,
            fixed: 'right',
            align: 'center',
            formatter: (row) => {
                return (
                    '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">核准报废</i>'
                );
            },
            click: (row) => {
                this.$refs.gridBody.open(row);
            }
        });
    //   let addButton = this.buttons.find(item => item.value == 'Add');
    //   if (addButton) {
    //     addButton.onClick = () => {
    //       this.$refs.gridHeader.open();
    //     }
    //   }
    //   let executeOutbound = this.buttons.find(item => item.value == 'ExecuteOutbound');
    //   if (executeOutbound) {
    //     executeOutbound.onClick = () => {
    //       let rows = this.$refs.table.getSelected();
    //       if (rows.length == 0) return this.$error("请选择数据!");
    //       if (rows.length > 1) return this.$error("请选择一条数据!");
    //       var param = rows[0].taskNum;
    //       this.http
    //         .post("api/Task/HandSubstrateOut?orderId=" + rows[0].id, null, "数据处理中...")
    //         .then((x) => {
    //           if (x.status) {
    //             this.$Message.success('数据处理成功.');
    //             this.refresh();
    //           } else {
    //             return this.$error(x.message);
    //           }
    //         });
    //     }
    //   }
    //   //扩展页面初始化操作
    //   this.columns.push({
    //     field: '操作',
    //     title: '操作',
    //     width: 90,
    //     fixed: 'right',
    //     align: 'center',
    //     formatter: (row) => {
    //       return (
    //         '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">查看明细</i>'
    //       );
    //     },
    //     click: (row) => {
    //       this.$refs.gridBody.open(row);
    //     }
    //   });
    },
    onInited() {
      //框架初始化配置后
      //如果要配置明细表,在此方法操作
      //this.detailOptions.columns.forEach(column=>{ });
      const isAdd=this.currentAction=='Update';//判断是否为新建操作
    },
    searchBefore(param) {
      //界面查询前,可以给param.wheres添加查询参数
      //返回false,则不会执行查询
      return true;
    },
    searchAfter(result) {
      //查询后,result返回的查询数据,可以在显示到表格前处理表格的值
      return true;
    },
    addBefore(formData) {
      //新建保存前formData为对象,包括明细表,可以给给表单设置值,自己输出看formData的值
      return true;
    },
    updateBefore(formData) {
      //编辑保存前formData为对象,包括明细表、删除行的Id
      return true;
    },
    rowClick({ row, column, event }) {
      //查询界面点击行事件
      this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
    },
    modelOpenAfter(row) {
   //隐藏明细表按钮
    this.detailOptions.buttons.forEach((btn) => {
        if (btn.name == '导入') {
            btn.hidden = true;
            //或者设置只读
            //btn.readonly=true;
        }
    });
      //点击编辑、新建按钮弹出框后,可以在此处写逻辑,如,从后台获取数据
      //(1)判断是编辑还是新建操作: this.currentAction=='Add';
      //(2)给弹出框设置默认值
      //(3)this.editFormFields.字段='xxx';
      //如果需要给下拉框设置默认值,请遍历this.editFormOptions找到字段配置对应data属性的key值
      //看不懂就把输出看:console.log(this.editFormOptions)
    }
  }
};
export default extension;
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/PPStockSelect.vue
@@ -95,9 +95,9 @@
        <el-button type="primary" size="small" @click="outbound"
          >直接出库</el-button
        >
        <el-button type="primary" size="small" @click="lockStock"
        <!-- <el-button type="primary" size="small" @click="lockStock"
          >锁定库存</el-button
        >
        > -->
        <el-button type="danger" size="small" @click="showDetialBox = false"
          >关闭</el-button
        >
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue
@@ -95,9 +95,9 @@
        <el-button type="primary" size="small" @click="outbound"
          >直接出库</el-button
        >
        <el-button type="primary" size="small" @click="lockStock"
        <!-- <el-button type="primary" size="small" @click="lockStock"
          >锁定库存</el-button
        >
        > -->
        <el-button type="danger" size="small" @click="showDetialBox = false"
          >关闭</el-button
        >
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/mesPPCutOutOrderDetail.vue
@@ -14,13 +14,13 @@
              <span>已选中 {{ selection.length }} é¡¹</span>
            </el-col>
            <el-col :span="8">
              <el-link
              <!-- <el-link
                type="primary"
                size="small"
                style="float: right; height: 20px"
                @click="lockstocks"
                >锁定库存</el-link
              >
              > -->
              <el-link
                type="primary"
                size="small"
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/mesPPoutOrderDetail.vue
@@ -14,13 +14,13 @@
              <span>已选中 {{ selection.length }} é¡¹</span>
            </el-col>
            <el-col :span="8">
              <el-link
              <!-- <el-link
                type="primary"
                size="small"
                style="float: right; height: 20px"
                @click="lockstocks"
                >锁定库存</el-link
              >
              > -->
              <el-link
                type="primary"
                size="small"
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue
@@ -14,13 +14,13 @@
              <span>已选中 {{ selection.length }} é¡¹</span>
            </el-col>
            <el-col :span="8">
              <el-link
              <!-- <el-link
                type="primary"
                size="small"
                style="float: right; height: 20px"
                @click="lockstocks"
                >锁定库存</el-link
              >
              > -->
              <el-link
                type="primary"
                size="small"
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/outbound/outboundOrder.js
@@ -19,20 +19,20 @@
      onInit() {  
        //扩展页面初始化操作
        this.columns.push({
          field: '操作',
          title: '操作',
          width: 90,
          fixed: 'right',
          align: 'center',
          formatter: (row) => {
              return (
                  '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">查看明细</i>'
              );
          },
          click: (row) => {
              this.$refs.gridBody.open(row);
          }
      });
            field: '操作',
            title: '操作',
            width: 90,
            fixed: 'right',
            align: 'center',
            formatter: (row) => {
                return (
                    '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">查看明细</i>'
                );
            },
            click: (row) => {
                this.$refs.gridBody.open(row);
            }
        });
      },
      onInited() {
        //框架初始化配置后
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/router/viewGird.js
@@ -292,6 +292,16 @@
    path: '/erpProInOrder',
    name: 'erpProInOrder',
    component: () => import('@/views/inbound/erpProInOrder.vue')
  },
  {
    path: '/erpProScrapSheet',
    name: 'erpProScrapSheet',
    component: () => import('@/views/outbound/erpProScrapSheet.vue')
  },
  {
    path: '/inspectOrder',
    name: 'inspectOrder',
    component: () => import('@/views/check/inspectOrder.vue')
  }
]
export default viewgird
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/check/checkOrder.vue
@@ -38,6 +38,7 @@
      receiveOrderNo: "",
      checkOrderStatus: "",
      auditStatus: "",
      orderType: "0",
    });
    const searchFormOptions = ref([
      [
@@ -92,6 +93,14 @@
        align: "left",
      },
      {
        field: "orderType",
        title: "检验单类型",
        type: "string",
        width: 120,
        align: "left",
        bind: { key: "checkTypeEnum", data: [] },
      },
      {
        field: "receiveOrderNo",
        title: "收货单号",
        type: "string",
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/check/inspectOrder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,336 @@
<!--
*Author:jxx
 *Contact:283591387@qq.com
 *代码由框架生成,任何更改都可能导致被代码生成器覆盖
 *业务请在@/extension/widesea_wcs/order/Dt_CheckOrder.js此处编写
 -->
 <template>
    <view-grid
      ref="grid"
      :columns="columns"
      :detail="detail"
      :editFormFields="editFormFields"
      :editFormOptions="editFormOptions"
      :searchFormFields="searchFormFields"
      :searchFormOptions="searchFormOptions"
      :table="table"
      :extend="extend"
    >
    </view-grid>
  </template>
  <script>
  import extend from "@/extension/check/inspectOrder.js";
  import { ref, defineComponent } from "vue";
  export default defineComponent({
    setup() {
      const table = ref({
        key: "checkOrderId",
        footer: "Foots",
        cnName: "送检单",
        name: "checkOrder",
        url: "/CheckOrder/",
        sortName: "checkOrderId",
      });
      const editFormFields = ref({});
      const editFormOptions = ref([]);
      const searchFormFields = ref({
        checkOrderNo: "",
        receiveOrderNo: "",
        checkOrderStatus: "",
        auditStatus: "",
        orderType: "1",
      });
      const searchFormOptions = ref([
        [
          { title: "检验单号", field: "checkOrderNo", type: "like" },
          { title: "送检单号", field: "receiveOrderNo", type: "like" },
          {
            title: "质检单状态",
            field: "checkOrderStatus",
            type: "select",
            dataKey: "checkOrderStatusEnum",
            data: [],
          },
        ],
        [
          { title: "物料编号", field: "materielCode", type: "like" },
          { title: "物料批次", field: "lotNo", type: "like" },
          {
            title: "检验结果",
            field: "result",
            type: "select",
            dataKey: "inspectAcceptEnum",
            data: [],
          },
        ],
        [
          {
            title: "上传状态",
            field: "UploadStatus",
            type: "select",
            dataKey: "checkUploadEnum",
            data: [],
          },
        ],
      ]);
      const columns = ref([
        {
          field: "checkOrderId",
          title: "主键",
          type: "int",
          width: 150,
          hidden: true,
          readonly: true,
          require: true,
          align: "left",
        },
        {
          field: "checkOrderNo",
          title: "检验单号",
          type: "string",
          width: 180,
          require: true,
          align: "left",
        },
        {
          field: "orderType",
          title: "检验单类型",
          type: "string",
          width: 120,
          align: "left",
          bind: { key: "checkTypeEnum", data: [] },
        },
        {
          field: "receiveOrderNo",
          title: "送检单号",
          type: "string",
          width: 180,
          require: true,
          align: "left",
        },
        {
          field: "warehouseId",
          title: "仓库",
          type: "string",
          width: 90,
          align: "left",
          bind: { key: "warehouses", data: [] },
        },
        //    {field:'auditStatus',title:'审批状态',type:'int',width:110,require:true,align:'left'},
        {
          field: "receiveDetailRowNo",
          title: "送检明细行",
          type: "int",
          width: 100,
          require: true,
          align: "left",
        },
        {
          field: "materielCode",
          title: "物料编号",
          type: "string",
          width: 110,
          require: true,
          align: "left",
        },
        {
          field: "materielSpec",
          title: "物料规格",
          type: "select",
          type: "string",
          width: 160,
          align: "left",
        },
        {
          field: "lotNo",
          title: "批次号",
          type: "string",
          width: 150,
          require: true,
          align: "left",
        },
        {
          field: "checkOrderStatus",
          title: "质检单状态",
          type: "string",
          width: 110,
          require: true,
          align: "left",
          bind: { key: "checkOrderStatusEnum", data: [] },
        },
        {
          field: "qualifiedQuantity",
          title: "合格数量",
          type: "float",
          width: 110,
          align: "left",
        },
        {
          field: "returnQuantity",
          title: "退货数量",
          type: "float",
          width: 110,
          align: "left",
        },
        {
          field: "receivedQuantity",
          title: "检验总数",
          type: "float",
          width: 110,
          require: true,
          align: "left",
        },
        {
          field: "unit",
          title: "单位",
          type: "string",
          width: 90,
          align: "left",
        },
        {
          field: "result",
          title: "检验判断",
          type: "string",
          width: 120,
          align: "left",
          bind: { key: "inspectAcceptEnum", data: [] },
        },
        {
          field: "uploadStatus",
          title: "上传状态",
          type: "string",
          width: 100,
          align: "left",
          bind: { key: "checkUploadEnum", data: [] },
        },
        //    {field:'defectedNote',title:'特采说明',type:'string',width:110,align:'left'},
        {
          field: "checkUserName",
          title: "检验人",
          type: "string",
          width: 110,
          align: "left",
        },
        // {
        //   field: "creater",
        //   title: "创建者",
        //   type: "string",
        //   width: 110,
        //   require: true,
        //   align: "left",
        // },
        {
          field: "createDate",
          title: "创建时间",
          type: "datetime",
          width: 180,
          require: true,
          align: "left",
        },
        //    {field:'modifier',title:'修改人',type:'string',width:100,align:'left'},
        //    {field:'modifyDate',title:'修改日期',type:'datetime',width:150,align:'left',sort:true}
      ]);
      const detail = ref({
        cnName: "检验结果",
        table: "CheckOrderResult",
        columns: [
          {
            field: "id",
            title: "主键",
            type: "int",
            width: 110,
            hidden: true,
            readonly: true,
            require: true,
            align: "left",
          },
          {
            field: "checkOrderId",
            title: "检验单主键",
            type: "int",
            width: 110,
            require: true,
            align: "left",
            sort: true,
          },
          {
            field: "defectCode",
            title: "缺陷代码",
            type: "string",
            width: 110,
            require: true,
            align: "left",
          },
          {
            field: "result",
            title: "检验结果",
            type: "string",
            width: 110,
            require: true,
            align: "left",
          },
          {
            field: "quantity",
            title: "数量",
            type: "float",
            width: 110,
            require: true,
            align: "left",
          },
          {
            field: "note",
            title: "备注",
            type: "string",
            width: 220,
            align: "left",
          },
          {
            field: "creater",
            title: "创建者",
            type: "string",
            width: 110,
            require: true,
            align: "left",
          },
          {
            field: "createDate",
            title: "创建时间",
            type: "datetime",
            width: 150,
            require: true,
            align: "left",
            sort: true,
          },
          {
            field: "modifier",
            title: "修改人",
            type: "string",
            width: 100,
            align: "left",
          },
          {
            field: "modifyDate",
            title: "修改日期",
            type: "datetime",
            width: 150,
            align: "left",
            sort: true,
          },
        ],
        sortName: "id",
        key: "id",
      });
      return {
        table,
        extend,
        editFormFields,
        editFormOptions,
        searchFormFields,
        searchFormOptions,
        columns,
        detail,
      };
    },
  });
  </script>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/outbound/erpProScrapSheet.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,266 @@
<template>
    <view-grid
      ref="grid"
      :columns="columns"
      :detail="detail"
      :editFormFields="editFormFields"
      :editFormOptions="editFormOptions"
      :searchFormFields="searchFormFields"
      :searchFormOptions="searchFormOptions"
      :table="table"
      :extend="extend"
    >
    </view-grid>
  </template>
    <script>
  import extend from "@/extension/outbound/erpProScrapSheet.js";
  import { ref, defineComponent } from "vue";
  export default defineComponent({
    setup() {
      const table = ref({
        key: "id",
        footer: "Foots",
        cnName: "成品超期报废单",
        name: "erpProScrapSheet",
        url: "/erpProScrapSheet/",
        sortName: "id",
      });
      const editFormFields = ref({
        warehouseId:"",
        proScrapSheetOrderNo:""
      });
      const editFormOptions = ref([
        [
        {
          title: "所属仓库",
          required: true,
          field: "warehouseId",
          type: "select",
          dataKey: "warehouses",
          data: [],
        },
        {
          field: "proScrapSheetOrderNo",
          title: "单据编号",
          type: "string",
          readonly: "true",
        },
        ],
      ]);
      const searchFormFields = ref({
        proScrapSheetOrderNo: "",
      });
      const searchFormOptions = ref([
        [
          { title: "单据编号", field: "proScrapSheetOrderNo", type:"like" },
          {
            title: "报废状态", field: "proScrapStatus", type: "select",
            dataKey: "outboundStatusEnum",
            data: []
          },
        ],
      ]);
      const columns = ref([
      {
          field: "id",
          title: "Id",
          type: "int",
          width: 90,
          hidden: true,
          readonly: true,
          align: "left",
        },
        {
          field: "warehouseId",
          title: "所属仓库",
          type: "string",
          width: 80,
          align: "left",
          bind: { key: "warehouses", data: [] },
        },
        {
          field: "proScrapSheetOrderNo",
          title: "单据编号",
          type: "string",
          width: 150,
          align: "left",
          link: true,
        },
        {
          field: "proScrapStatus",
          title: "报废状态",
          type: "string",
          width: 150,
          align: "left",
          bind: { key: "proScrapStatusEnum", data: [] },
        },
        {
            field: "creater",
            title: "创建人",
            type: "string",
            width: 90,
            align: "left",
        },
        {
            field: "createDate",
            title: "创建时间",
            type: "datetime",
            width: 160,
            align: "left",
        },
        {
          field: "remark",
          title: "备注",
          type: "string",
          width: 90,
          align: "left",
        }
        // {
        //   field: "OrderStatus",
        //   title: "单据数量",
        //   type: "string",
        //   width: 90,
        //   align: "left",
        //   bind: { key: "orderDetailStatusEnum", data: [] }
        // },
      ]);
      const detail = ref({
      cnName: "成品报废单明细",
      table: "erpProScrapSheetDetail",
      columns: [
            {
            field: "id",
            title: "Id",
            type: "int",
            width: 90,
            hidden: true,
            readonly: true,
            require: true,
            align: "left",
            },
            {
                field: "proScrapSheetId",
                title: "成品报废单主键",
                type: "string",
                width: 90,
                align: "left",
                hidden: true,
            },
            {
                field: "scrapProCode",
                title: "产品编码",
                type: "string",
                width: 180,
                align: "left",
                edit: { type: "string" },
                required: true,
            },
            {
                field: "scrapProVersion",
                title: "报废版本",
                type: "string",
                width: 130,
                align: "left",
                edit: { type: "string" },
                required: true,
            },
            {
                field: "scrapProLotNo",
                title: "批次号",
                type: "decimal",
                width: 130,
                align: "left",
                edit: { type: "string" },
                required: true,
            },
            {
                field: "scrapSETQty",
                title: "报废SET数量",
                type: "string",
                width: 120,
                align: "left",
                edit: { type: "number" },
                required: true,
            },
            {
                field: "scrapPcsQty",
                title: "报废PCS数",
                type: "string",
                width: 120,
                align: "left",
                edit: { type: "number" },
                required: true,
            },
            {
                field: "xSetQty",
                title: "XSet数",
                type: "int",
                width: 120,
                hidden: true,
                // edit: { type: "number",keep: false  },
                align: "left",
            },
            {
                field: "xPcsQty",
                title: "XPcs数",
                type: "string",
                width: 120,
                hidden: true,
                // edit: { type: "number",keep: false },
                align: "left",
            },
            {
                field: "overScrapSETQty",
                title: "已报废SET数",
                type: "int",
                width: 120,
                hidden: true,
                // edit: { type: "number",keep: false  },
                align: "left",
            },
            {
                field: "overScrapPcsQty",
                title: "已报废PCS数",
                type: "string",
                width: 120,
                hidden: true,
                // edit: { type: "number",keep: false },
                align: "left",
            },
            {
                field: "scrapProDetailStatus",
                title: "订单明细状态",
                type: "string",
                width: 130,
                align: "left",
                hidden: true,
                // edit: { type: "number",},
                bind: { key: "orderDetailStatusEnum", data: [] },
            },
            {
                field: "remark",
                title: "备注",
                type: "string",
                width: 120,
                edit: { type: "text",},
                align: "left",
            },
        ],
        sortName: "id",
        key: "id",
        });
      return {
        table,
        extend,
        editFormFields,
        editFormOptions,
        searchFormFields,
        searchFormOptions,
        columns,
        detail,
      };
    },
  });
  </script>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_CSJ.cs
@@ -57,6 +57,8 @@
                List<string> lockLocationCodes = locationCaches_CSJ.Select(x => x.LocationCode).ToList();
                List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == roadwayNo);
                //获取所有的货位
                List<Dt_LocationInfo> locationInfoDepth = Repository.QueryData(x => x.RoadwayNo == roadwayNo);
                if (locationInfos == null || locationInfos.Count == 0)
                {
                    throw new Exception($"未找到该巷道的货位信息,巷道号:{roadwayNo}");
@@ -101,6 +103,57 @@
                        Dt_LocationInfo? locationInfo = GetUsableLocation_CSJ(locationInfos, undefinedTypeEmptyLocation, palletType);
                        if (locationInfo != null)
                        {
                            if (locationInfo.Depth < locationInfoDepth.Max(x => x.Depth))
                            {
                                Dt_LocationInfo? locationInfoExist = null;
                                int Column = locationInfo.Column;
                                if (locationInfo.Row < locationInfoDepth.Max(x => x.Depth))
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (palletTypeInfo.LocaitonCount==2 ? (locationInfo.Row - 2): (locationInfo.Row - 1)) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                else
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (palletTypeInfo.LocaitonCount == 2 ? (locationInfo.Row + 2) : (locationInfo.Row + 1)) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                //获取深位货位类型
                                if (locationInfoExist == null)
                                {
                                    continue;
                                }
                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                {
                                    continue;
                                }
                            }
                            else
                            {
                                Dt_LocationInfo? locationInfoExist = null;
                                int Column = locationInfo.Column;
                                if (locationInfo.Row % locationInfoDepth.Max(x => x.Depth)==0)
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (palletTypeInfo.LocaitonCount == 2 ? (locationInfo.Row - 2) : (locationInfo.Row - 1)) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                else
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (palletTypeInfo.LocaitonCount == 2 ? (locationInfo.Row + 2) : (locationInfo.Row + 1)) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                //获取深位货位类型
                                if (locationInfoExist == null)
                                {
                                    continue;
                                }
                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                {
                                    continue;
                                }
                                if (locationInfoExist.LocationStatus != LocationStatusEnum.Free.ObjToInt() || locationInfoExist.EnableStatus != EnableStatusEnum.Normal.ObjToInt())
                                {
                                    continue;
                                }
                            }
                            locationCaches_CSJ.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                            return locationInfo;
                        }
@@ -114,6 +167,56 @@
                        Dt_LocationInfo? locationInfo = GetUsableLocation_CSJ(locationInfos, definedTypeEmptyLocation, palletType);
                        if (locationInfo != null)
                        {
                            if (locationInfo.Depth < locationInfoDepth.Max(x => x.Depth))
                            {
                                Dt_LocationInfo? locationInfoExist = null;
                                int Column = locationInfo.Column;
                                if (locationInfo.Row < locationInfoDepth.Max(x => x.Depth))
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (palletTypeInfo.LocaitonCount == 2 ? (locationInfo.Row - 2) : (locationInfo.Row - 1)) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                else
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (palletTypeInfo.LocaitonCount == 2 ? (locationInfo.Row + 2) : (locationInfo.Row + 1)) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                //获取深位货位类型
                                if (locationInfoExist == null)
                                {
                                    continue;
                                }
                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                {
                                    continue;
                                }
                            }
                            else
                            {
                                Dt_LocationInfo? locationInfoExist = null;
                                int Column = locationInfo.Column;
                                if (locationInfo.Row % locationInfoDepth.Max(x => x.Depth) == 0)
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (palletTypeInfo.LocaitonCount == 2 ? (locationInfo.Row - 2) : (locationInfo.Row - 1)) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                else
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (palletTypeInfo.LocaitonCount == 2 ? (locationInfo.Row + 2) : (locationInfo.Row + 1)) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                //获取深位货位类型
                                if (locationInfoExist == null)
                                {
                                    continue;
                                }
                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                {
                                    continue;
                                }
                                if (locationInfoExist.LocationStatus != LocationStatusEnum.Free.ObjToInt() || locationInfoExist.EnableStatus != EnableStatusEnum.Normal.ObjToInt())
                                {
                                    continue;
                                }
                            }
                            locationCaches_CSJ.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                            return locationInfo;
                        }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_GM.cs
@@ -43,8 +43,8 @@
                List<string> lockLocationCodes = locationCaches_GM.Select(x => x.LocationCode).ToList();
                List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == roadwayNo);
                //获取所有二深位货位数据
                List<Dt_LocationInfo> locationInfoDepth = Repository.QueryData(x => x.RoadwayNo == roadwayNo && x.Depth== locationInfos.Max(v=>v.Depth));
                //获取所有货位数据
                List<Dt_LocationInfo> locationInfoDepth = Repository.QueryData(x => x.RoadwayNo == roadwayNo);
                if (locationInfos == null || locationInfos.Count == 0)
                {
                    throw new Exception($"未找到该巷道的货位信息,巷道号:{roadwayNo}");
@@ -93,7 +93,7 @@
                        Dt_LocationInfo? locationInfo = GetUsableLocation_GM(locationInfos, definedTypeEmptyLocation, palletType, palletTypeInfo);
                        if (locationInfo != null)
                        {
                            if (locationInfo.Depth<locationInfoDepth.Max(x=>x.Depth) && palletTypeInfo.LocaitonCount<2)
                            if (locationInfo.Depth<locationInfoDepth.Max(x=>x.Depth))
                            {
                                Dt_LocationInfo? locationInfoExist = null;
                                int Column = locationInfo.Column;
@@ -103,11 +103,11 @@
                                }
                                if (locationInfo.Row - locationInfo.Depth == locationInfo.Depth)
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row-1) && x.Column== Column && x.Layer==locationInfo.Layer && x.LocationStatus==LocationStatusEnum.InStock.ObjToInt());
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row-1) && x.Column== Column && x.Layer==locationInfo.Layer);
                                }
                                else
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row + 1) && x.Column == Column && x.Layer == locationInfo.Layer && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt());
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row + 1) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                //获取深位货位类型
                                if (locationInfoExist==null)
@@ -115,11 +115,38 @@
                                    continue;
                                }
                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                if (palletTypeInfoDepth == null)
                                if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                {
                                    continue;
                                }
                                if (palletTypeInfoDepth.LocaitonCount==2 && palletTypeInfo.LocaitonCount==1)
                            }
                            else
                            {
                                Dt_LocationInfo? locationInfoExist = null;
                                int Column = locationInfo.Column;
                                if (Column % 2 == 0)
                                {
                                    Column -= 1;
                                }
                                if (locationInfo.Row % 2 == 0)
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row - 1) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                else
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row + 1) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                //获取深位货位类型
                                if (locationInfoExist == null)
                                {
                                    continue;
                                }
                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                {
                                    continue;
                                }
                                if (locationInfoExist.LocationStatus!=LocationStatusEnum.Free.ObjToInt() || locationInfoExist.EnableStatus!= EnableStatusEnum.Normal.ObjToInt())
                                {
                                    continue;
                                }
@@ -144,7 +171,7 @@
                        Dt_LocationInfo? locationInfo = GetUsableLocation_GM(locationInfos, undefinedTypeEmptyLocation, palletType, palletTypeInfo);
                        if (locationInfo != null)
                        {
                            if (locationInfo.Depth < locationInfoDepth.Max(x => x.Depth) && palletTypeInfo.LocaitonCount < 2)
                            if (locationInfo.Depth < locationInfoDepth.Max(x => x.Depth))
                            {
                                Dt_LocationInfo? locationInfoExist = null;
                                int Column = locationInfo.Column;
@@ -154,11 +181,11 @@
                                }
                                if (locationInfo.Row - locationInfo.Depth == locationInfo.Depth)
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row - 1) && x.Column == Column && x.Layer == locationInfo.Layer && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt());
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row - 1) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                else
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row + 1) && x.Column == Column && x.Layer == locationInfo.Layer && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt());
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row + 1) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                //获取深位货位类型
                                if (locationInfoExist == null)
@@ -166,11 +193,38 @@
                                    continue;
                                }
                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                if (palletTypeInfoDepth == null)
                                if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                {
                                    continue;
                                }
                                if (palletTypeInfoDepth.LocaitonCount == 2)
                            }
                            else
                            {
                                Dt_LocationInfo? locationInfoExist = null;
                                int Column = locationInfo.Column;
                                if (Column % 2 == 0)
                                {
                                    Column -= 1;
                                }
                                if (locationInfo.Row % 2 == 0)
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row - 1) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                else
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row + 1) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                //获取深位货位类型
                                if (locationInfoExist == null)
                                {
                                    continue;
                                }
                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                {
                                    continue;
                                }
                                if (locationInfoExist.LocationStatus != LocationStatusEnum.Free.ObjToInt() || locationInfoExist.EnableStatus != EnableStatusEnum.Normal.ObjToInt())
                                {
                                    continue;
                                }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_ZH.cs
@@ -43,6 +43,8 @@
                List<string> lockLocationCodes = locationCaches_ZH.Select(x => x.LocationCode).ToList();
                List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == roadwayNo);
                //获取所有货位数据
                List<Dt_LocationInfo> locationInfoDepth = Repository.QueryData(x => x.RoadwayNo == roadwayNo);
                if (locationInfos == null || locationInfos.Count == 0)
                {
                    throw new Exception($"未找到该巷道的货位信息,巷道号:{roadwayNo}");
@@ -87,6 +89,56 @@
                        Dt_LocationInfo? locationInfo = GetUsableLocation_ZH(locationInfos, undefinedTypeEmptyLocation, palletType);
                        if (locationInfo != null)
                        {
                            if (locationInfo.Depth < locationInfoDepth.Max(x => x.Depth))
                            {
                                Dt_LocationInfo? locationInfoExist = null;
                                int Column = locationInfo.Column;
                                if (locationInfo.Row - locationInfo.Depth == locationInfo.Depth)
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row - 1) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                else
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row + 1) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                //获取深位货位类型
                                if (locationInfoExist == null)
                                {
                                    continue;
                                }
                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                {
                                    continue;
                                }
                            }
                            else
                            {
                                Dt_LocationInfo? locationInfoExist = null;
                                int Column = locationInfo.Column;
                                if (locationInfo.Row % 2 == 0)
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row - 1) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                else
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row + 1) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                //获取深位货位类型
                                if (locationInfoExist == null)
                                {
                                    continue;
                                }
                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                {
                                    continue;
                                }
                                if (locationInfoExist.LocationStatus != LocationStatusEnum.Free.ObjToInt() || locationInfoExist.EnableStatus != EnableStatusEnum.Normal.ObjToInt())
                                {
                                    continue;
                                }
                            }
                            locationCaches_ZH.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                            return locationInfo;
                        }
@@ -100,6 +152,57 @@
                        Dt_LocationInfo? locationInfo = GetUsableLocation_ZH(locationInfos, definedTypeEmptyLocation, palletType);
                        if (locationInfo != null)
                        {
                            if (locationInfo.Depth < locationInfoDepth.Max(x => x.Depth))
                            {
                                Dt_LocationInfo? locationInfoExist = null;
                                int Column = locationInfo.Column;
                                if (locationInfo.Row - locationInfo.Depth == locationInfo.Depth)
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row - 1) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                else
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row + 1) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                //获取深位货位类型
                                if (locationInfoExist == null)
                                {
                                    continue;
                                }
                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                {
                                    continue;
                                }
                            }
                            else
                            {
                                Dt_LocationInfo? locationInfoExist = null;
                                int Column = locationInfo.Column;
                                if (locationInfo.Row % 2 == 0)
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row - 1) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                else
                                {
                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row + 1) && x.Column == Column && x.Layer == locationInfo.Layer);
                                }
                                //获取深位货位类型
                                if (locationInfoExist == null)
                                {
                                    continue;
                                }
                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                {
                                    continue;
                                }
                                if (locationInfoExist.LocationStatus != LocationStatusEnum.Free.ObjToInt() || locationInfoExist.EnableStatus != EnableStatusEnum.Normal.ObjToInt())
                                {
                                    continue;
                                }
                            }
                            locationCaches_ZH.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                            return locationInfo;
                        }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs
@@ -334,7 +334,14 @@
                    Dt_LocationInfo? nearLocation;
                    if (palletTypeInfo.IsOdd)
                    {
                        nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1);
                        if (warehouse.WarehouseCode==WarehouseEnum.HA154.ToString())
                        {
                            nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column - 1);
                        }
                        else
                        {
                            nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1);
                        }
                    }
                    else
                    {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs
@@ -4,14 +4,18 @@
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_IApprovalRepository;
using WIDESEA_ICheckRepository;
using WIDESEA_ICheckService;
using WIDESEA_IInboundRepository;
using WIDESEA_IOutboundRepository;
using WIDESEA_IStockRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_CheckService
@@ -24,7 +28,9 @@
        private readonly ICheckOrderService _checkOrderService;
        private readonly IPurchaseOrderRepository _purchaseOrderRepository;
        private readonly IPurchaseOrderDetailRepository _purchaseOrderDetailRepository;
        public CheckOrderResultService(ICheckOrderResultRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, ICheckOrderRepository checkOrderRepository, IReceiveOrderRepository receiveOrderRepository, ICheckOrderService checkOrderService, IPurchaseOrderRepository purchaseOrderRepository, IPurchaseOrderDetailRepository purchaseOrderDetailRepository) : base(BaseDal)
        private readonly IOutboundRepository _outboundRepository;
        private readonly IStockRepository _stockRepository;
        public CheckOrderResultService(ICheckOrderResultRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, ICheckOrderRepository checkOrderRepository, IReceiveOrderRepository receiveOrderRepository, ICheckOrderService checkOrderService, IPurchaseOrderRepository purchaseOrderRepository, IPurchaseOrderDetailRepository purchaseOrderDetailRepository, IOutboundRepository outboundRepository, IStockRepository stockRepository) : base(BaseDal)
        {
            _checkOrderRepository = checkOrderRepository;
            _unitOfWorkManage = unitOfWorkManage;
@@ -32,6 +38,8 @@
            _checkOrderService = checkOrderService;
            _purchaseOrderRepository = purchaseOrderRepository;
            _purchaseOrderDetailRepository = purchaseOrderDetailRepository;
            _outboundRepository = outboundRepository;
            _stockRepository = stockRepository;
        }
        /// <summary>
@@ -159,6 +167,164 @@
            return content;
        }
        /// <summary>
        /// æäº¤é€æ£€ç¡®è®¤ç»“æžœ
        /// </summary>
        /// <param name="checkOrderId"></param>
        /// <param name="checkResult"></param>
        /// <param name="IsAccept"></param>
        /// <returns></returns>
        public WebResponseContent CommitInspectResult(int checkOrderId, Dt_CheckOrderResult checkResult, int IsAccept = 0)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_CheckOrder checkOrder = _checkOrderRepository.QueryFirst(x => x.CheckOrderId == checkOrderId);
                //获取质检单对应的收货单
                if (checkOrder == null)
                {
                    return content.Error($"未找到该质检单");
                }
                Dt_OutboundOrder outboundOrder = _outboundRepository.OutboundOrderRepository.Db.Queryable<Dt_OutboundOrder>().Where(x => x.OrderNo == checkOrder.ReceiveOrderNo).Includes(x => x.Details).First();
                if (outboundOrder.OrderStatus != OutOrderStatusEnum.出库完成.ObjToInt())
                {
                    return content.Error($"{outboundOrder.OrderNo}送检单出库未完成无法质检");
                }
                if (checkOrder.CheckOrderStatus == CheckOrderStatusEnum.Checked.ObjToInt())
                {
                    return content.Error($"该单据已经检验完成");
                }
                Dt_CheckOrderResult? checkOrderResult = null;
                //获取库存
                Dt_OutStockLockInfo outStockLockInfo = _outboundRepository.OutboundStockLockInfoRepository.QueryFirst(x => x.Id == checkOrder.ReceiveDetailRowNo) ?? throw new Exception("未找到送检单详情");
                Dt_StockInfo? stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>()
                    .Where(x => x.PalletCode == outStockLockInfo.PalletCode && x.StockStatus == StockStatusEmun.送检完成.ObjToInt()).Includes(x => x.Details).First() ?? throw new Exception("未找到送检单对应库存数据");
                List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>();
                List<Dt_StockInfoDetail> DelStockDetails =new List<Dt_StockInfoDetail>();
                if (checkResult.CheckOrderId != 0)
                {
                    if (checkResult.Quantity < 0 || checkResult.Quantity > checkOrder.ReceivedQuantity)
                    {
                        return content.Error($"数量超出");
                    }
                    if (checkResult.Result == InspectResultEnum.Return.ToString())//退货
                    {
                        checkOrder.DefectedNote = checkResult.Note;
                        checkOrder.ReturnQuantity += checkResult.Quantity;
                    }
                    else if(checkResult.Result == InspectResultEnum.Defect.ToString())
                    {
                        checkOrder.DefectedNote = checkResult.Note;
                        checkOrder.DefectedQuantity += checkResult.Quantity;
                    }
                    else if (checkResult.Result == InspectResultEnum.Scrapped.ToString())
                    {
                        checkOrder.DefectedNote = checkResult.Note;
                        checkOrder.ScrappedQuantity += checkResult.Quantity;
                    }
                    else
                    {
                        return content.Error($"未找到缺陷类型");
                    }
                    checkOrderResult = new Dt_CheckOrderResult()
                    {
                        Quantity = checkResult.Quantity,
                        CheckOrderId = checkOrderId,
                        DefectCode = checkResult.DefectCode,
                        Result = checkResult.Result,
                        Note = checkResult.Note,
                        SampleCount = checkResult.SampleCount,
                    };
                    if (Math.Round(checkResult.Quantity,2) == Math.Round(stockInfoDetails.Sum(x=>x.StockQuantity),2))
                    {
                        DelStockDetails = stockInfo.Details;
                    }
                    else
                    {
                        foreach (var item in stockInfo.Details)
                        {
                            if (checkResult.Quantity == 0)
                            {
                                break;
                            }
                            else if(checkResult.Quantity< item.StockQuantity)
                            {
                                checkResult.Quantity = 0;
                                item.StockQuantity -= checkResult.Quantity;
                                stockInfoDetails.Add(item);
                            }
                            else if (checkResult.Quantity >= item.StockQuantity)
                            {
                                checkResult.Quantity = (float)Math.Round((checkResult.Quantity-item.StockQuantity), 2);
                                DelStockDetails.Add(item);
                            }
                        }
                    }
                }
                if (IsAccept == InspectAcceptEnum.Accept.ObjToInt())
                {
                    checkOrder.Result = InspectAcceptEnum.Accept.ToString();
                }
                else if (IsAccept == InspectAcceptEnum.UnAccept.ObjToInt())
                {
                    checkOrder.Result = InspectAcceptEnum.UnAccept.ToString();
                }
                else if (IsAccept == InspectAcceptEnum.DefectAccept.ObjToInt())
                {
                    checkOrder.Result = InspectAcceptEnum.DefectAccept.ToString();
                }
                else
                {
                    return content.Error("未找到检验类型");
                }
                checkOrder.CheckOrderStatus = CheckOrderStatusEnum.Checked.ObjToInt();
                if (checkOrderResult != null)
                {
                    checkOrder.QualifiedQuantity = checkOrder.ReceivedQuantity - checkOrderResult.Quantity;
                }
                else
                {
                    checkOrder.QualifiedQuantity = checkOrder.ReceivedQuantity;
                }
                checkOrder.CheckUserName = App.User.UserName;
                _unitOfWorkManage.BeginTran();
                if (checkOrderResult != null)
                {
                    BaseDal.AddData(checkOrderResult);
                }
                //清除库存数量
                if (stockInfoDetails.Count>0)
                {
                    _stockRepository.StockInfoDetailRepository.UpdateData(stockInfoDetails);
                }
                if (DelStockDetails.Count>0)
                {
                    _stockRepository.StockInfoDetailRepository.DeleteAndMoveIntoHty(DelStockDetails, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                }
                if (DelStockDetails.Count==stockInfo.Details.Count)
                {
                    _stockRepository.StockInfoRepository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                }
                //ERP上报
                WebResponseContent responseContent = _checkOrderService.FeedbackInspectResult(checkOrder, checkOrderResult != null ? new List<Dt_CheckOrderResult> { checkOrderResult } : new List<Dt_CheckOrderResult>());
                if (!responseContent.Status)
                {
                    throw new Exception(responseContent.Message);
                }
                checkOrder.UploadStatus = CheckUploadEnum.UploadOk.ObjToInt();
                _checkOrderRepository.UpdateData(checkOrder);
                _unitOfWorkManage.CommitTran();
                content.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return content.Error($"{ex.Message}");
            }
            return content;
        }
        /// <summary>
        /// èŽ·å–æ£€éªŒä¿¡æ¯
        /// </summary>
        public WebResponseContent GetCheckResultInfo(int checkId)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderService.cs
@@ -189,6 +189,64 @@
            }
        }
        /// <summary>
        /// é€æ£€éªŒå®ŒæŽ¨é€ERP
        /// </summary>
        /// <param name="checkOrder"></param>
        /// <param name="checkOrderResults"></param>
        /// <returns></returns>
        public WebResponseContent FeedbackInspectResult(Dt_CheckOrder checkOrder, List<Dt_CheckOrderResult> checkOrderResults)
        {
            try
            {
                //增加个上传状态 è´¨æ£€å•结果
                List<ERPCheckResult> checkResults = new List<ERPCheckResult>();
                foreach (var item in checkOrderResults)
                {
                    ERPCheckResult checkResult = new ERPCheckResult()
                    {
                        DefectCode = item.DefectCode,
                        Note = item.Note,
                        Quantity = item.Quantity.ToString(),
                        Result = item.Result
                    };
                    checkResults.Add(checkResult);
                }
                ERPInspectModel model = new ERPInspectModel()
                {
                    Code = checkOrder.CheckOrderNo,
                    CompanyId = "HATC",
                    Result = checkOrder.Result,
                    CreatorCode = checkOrder.CheckUserName,
                    DefectedNote = checkOrder.DefectedNote,
                    MaterialsCode = checkOrder.MaterielCode,
                    PlantsId = "HA02",
                    QtyDefected = checkOrder.DefectedQuantity.GetValueOrDefault().ToString(),
                    QtyInspected = checkOrder.ReceivedQuantity.ToString(),
                    QtyQualified = checkOrder.QualifiedQuantity.GetValueOrDefault().ToString(),
                    QtyReturn = checkOrder.ReturnQuantity.GetValueOrDefault().ToString(),
                    QtyScrapped = checkOrder.ScrappedQuantity.GetValueOrDefault().ToString(),
                    Recheckcode = checkOrder.ReceiveOrderNo,
                    ReceiveDate = checkOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"),
                    TestDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    UniqueTag = checkOrder.CheckOrderId.ToString(),
                    Way = 1,
                    Details = checkResults
                };
                string response = _invokeERPService.InvokeInspectApi(model);
                ErpRequestContent requestContent = response.DeserializeObject<ErpRequestContent>();
                if (requestContent.res != 1)
                {
                    return WebResponseContent.Instance.Error(requestContent.Data);
                }
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// è´¨æ£€å®Œä¸ŠæŠ¥è‡³ERP
        /// </summary>
        /// <param name="id"></param>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/WIDESEA_CheckService.csproj
@@ -11,6 +11,7 @@
    <ProjectReference Include="..\WIDESEA_IApprovalRepository\WIDESEA_IApprovalRepository.csproj" />
    <ProjectReference Include="..\WIDESEA_ICheckService\WIDESEA_ICheckService.csproj" />
    <ProjectReference Include="..\WIDESEA_IInboundRepository\WIDESEA_IInboundRepository.csproj" />
    <ProjectReference Include="..\WIDESEA_IOutboundRepository\WIDESEA_IOutboundRepository.csproj" />
    <ProjectReference Include="..\WIDESEA_ISystemRepository\WIDESEA_ISystemRepository.csproj" />
  </ItemGroup>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/CommonEnum/CheckTypeEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Common.CommonEnum
{
    public enum CheckTypeEnum
    {
        /// <summary>
        /// æ¥æ–™æ£€éªŒå•
        /// </summary>
        [Description("来料检验单")]
        ReceiveCheck = 0,
        /// <summary>
        /// é€æ£€æ£€éªŒå•
        /// </summary>
        [Description("送检检验单")]
        InspectCheck = 1,
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/CheckOrderEnum.cs
@@ -40,6 +40,33 @@
        [Description("不接受")]
        UnAccept=2,
    }
    /// <summary>
    ///
    /// </summary>
    public enum InspectAcceptEnum
    {
        /// <summary>
        /// å¾…检确认
        /// </summary>
        [Description("待检确认")]
        NotCheckAccept = 0,
        /// <summary>
        /// æŽ¥å—
        /// </summary>
        [Description("接受")]
        Accept = 1,
        /// <summary>
        /// ä¸æŽ¥å—
        /// </summary>
        [Description("不接受")]
        UnAccept = 2,
        /// <summary>
        /// ç‰¹é‡‡æŽ¥å—
        /// </summary>
        [Description("特采接受")]
        DefectAccept = 3
    }
    public enum CheckResultEnum
    {
        /// <summary>
@@ -60,6 +87,26 @@
        //[Description("报废")]
        //Scrapped
    }
    public enum InspectResultEnum
    {
        /// <summary>
        /// é€€è´§
        /// </summary>
        [Description("退货")]
        Return,
        /// <summary>
        /// ç‰¹é‡‡
        /// </summary>
        [Description("特采")]
        Defect,
        /// <summary>
        /// æŠ¥åºŸ
        /// </summary>
        [Description("报废")]
        Scrapped
    }
    /// <summary>
    /// æ£€éªŒä¸Šä¼ çŠ¶æ€
    /// </summary>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/InboundOrderMenu.cs
@@ -93,7 +93,12 @@
        /// å®¢ä¾›å›žæ”¶
        /// </summary>
        [Description("客供回收")]
        CustomerRecovery=135
        CustomerRecovery=135,
        /// <summary>
        /// é€æ£€å…¥åº“单
        /// </summary>
        [Description("送检入库单")]
        Inspect = 140,
    }
    /// <summary>
    /// æˆå“å…¥åº“单据类型
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/ProScrapSheetStatusEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Common.OrderEnum
{
    public enum ProScrapSheetStatusEnum
    {
        /// <summary>
        /// å¾…核准
        /// </summary>
        [Description("待核准")]
        TOChecked,
        /// <summary>
        /// å·²æ ¸å‡†
        /// </summary>
        [Description("已核准")]
        Valid
        ///// <summary>
        ///// ç‰¹é‡‡
        ///// </summary>
        //[Description("特采")]
        //Defect,
        ///// <summary>
        ///// æŠ¥åºŸ
        ///// </summary>
        //[Description("报废")]
        //Scrapped
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs
@@ -59,6 +59,9 @@
        [Description("平库待发货")]
        å¹³åº“待发货 = 16,
        [Description("送检完成")]
        é€æ£€å®Œæˆ = 18,
        [Description("退库")]
        MES退库 = 21,
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/RuleCodeEnum.cs
@@ -64,6 +64,11 @@
        /// æˆå“å‡ºåº“单号编码规则
        /// </summary>
        [Description("成品出库单号编码规则")]
        ProOutCOdeRule
        ProOutCOdeRule,
        /// <summary>
        /// æˆå“æŠ¥åºŸå•号编码规则
        /// </summary>
        [Description("成品报废单号编码规则")]
        ProScrapSheetRule
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/ERPService/InvokeERPService.cs
@@ -72,6 +72,25 @@
        }
        /// <summary>
        /// ERP物料送检接口调用
        /// </summary>
        public string InvokeInspectApi(ERPInspectModel eRPInspectModel)
        {
            Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.InvokeErpApi.ToString());
            ERPBaseModel<ERPInspectModel> model = new ERPBaseModel<ERPInspectModel>()
            {
                Data = eRPInspectModel,
                Desc = "物料出仓检验单",
                Type = "toTCWMSOUTTest",
                SecurityCode = "TeChuang"
            };
            string request = JsonConvert.SerializeObject(model, settings);
            string response = HttpHelper.Post(apiInfo.ApiAddress, request);
            return response;
        }
        /// <summary>
        /// ERP物料入库单接口调用
        /// </summary>
        /// <param name="inboundModel"></param>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/IERPService/IInvokeERPService.cs
@@ -26,6 +26,10 @@
        /// <param name="checkModel"></param>
        /// <returns></returns>
        string InvokeCheckOrderApi(ERPCheckModel checkModel);
        /// <summary>
        /// ERP物料送检接口调用
        /// </summary>
        string InvokeInspectApi(ERPInspectModel eRPInspectModel);
        /// <summary>
        /// ERP物料入库单接口调用
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPInspectModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_External.Model
{
    /// <summary>
    /// è´¨æ£€å•回传ERP
    /// </summary>
    public class ERPInspectModel
    {
        /// <summary>
        /// æ“ä½œç±»åž‹
        /// </summary>
        public int Way { get; set; }
        /// <summary>
        /// ä¸»é”®å€¼
        /// </summary>
        public string UniqueTag { get; set; }
        /// <summary>
        /// æ£€éªŒå•号
        /// </summary>
        public string Code { get; set; }
        /// <summary>
        /// å…¬å¸ä»£å·
        /// </summary>
        public string CompanyId { get; set; } = "HATC";
        /// <summary>
        /// å·¥åŽ‚ä»£å·
        /// </summary>
        public string PlantsId { get; set; } = "HA02";
        /// <summary>
        /// é€æ£€å•号
        /// </summary>
        public string Recheckcode { get; set; }
        /// <summary>
        /// ç‰©æ–™ä»£ç 
        /// </summary>
        public string MaterialsCode { get; set; }
        /// <summary>
        /// æ”¶è´§æ—¥æœŸ
        /// </summary>
        public string ReceiveDate { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Note { get; set; }
        /// <summary>
        /// åˆæ ¼æ•°é‡
        /// </summary>
        public string QtyQualified { get; set; }
        /// <summary>
        /// ç‰¹é‡‡æ•°é‡
        /// </summary>
        public string QtyDefected { get; set; }
        /// <summary>
        /// é€€è´§æ•°é‡
        /// </summary>
        public string QtyReturn { get; set; }
        /// <summary>
        /// æŠ¥åºŸæ•°é‡
        /// </summary>
        public string QtyScrapped { get; set; }
        /// <summary>
        /// æ£€éªŒæ€»æ•°ï¼ˆé€æ£€æ•°é‡ï¼‰
        /// </summary>
        public string QtyInspected { get; set; }
        /// <summary>
        /// æ£€éªŒåˆ¤æ–­ç»“æžœ
        /// </summary>
        public string Result { get; set; }
        /// <summary>
        /// ç‰¹é‡‡è¯´æ˜Ž
        /// </summary>
        public string DefectedNote { get; set; }
        /// <summary>
        /// åˆ›å»ºäººä»£å·
        /// </summary>
        public string CreatorCode { get; set; }
        /// <summary>
        /// æ£€éªŒæ—¥æœŸ
        /// </summary>
        public string TestDate { get; set; }
        public List<ERPCheckResult> Details { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_ICheckService/ICheckOrderResultService.cs
@@ -19,6 +19,7 @@
        /// <param name="IsAccept">是否接受</param>
        /// <returns></returns>
        WebResponseContent CommitCheckResult(int checkOrderId, Dt_CheckOrderResult checkResult, int IsAccept = 0);
        WebResponseContent CommitInspectResult(int checkOrderId, Dt_CheckOrderResult checkResult, int IsAccept = 0);
        /// <summary>
        /// èŽ·å–æ£€éªŒä¿¡æ¯
        /// </summary>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_ICheckService/ICheckOrderService.cs
@@ -25,5 +25,6 @@
        /// <returns></returns>
        WebResponseContent FeedbackCheckResult(int id);
        WebResponseContent FeedbackCheckResult(Dt_CheckOrder checkOrder, List<Dt_CheckOrderResult> checkOrderResults);
        WebResponseContent FeedbackInspectResult(Dt_CheckOrder checkOrder, List<Dt_CheckOrderResult> checkOrderResults);
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IErpProScrapSheetDetailRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IOutboundRepository
{
    /// <summary>
    ///
    /// </summary>
    public interface IErpProScrapSheetDetailRepository : IRepository<Dt_ErpProScrapSheetDetail>
    {
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IErpProScrapSheetRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IOutboundRepository
{
    /// <summary>
    ///
    /// </summary>
    public interface IErpProScrapSheetRepository : IRepository<Dt_ErpProScrapSheet>
    {
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IErpProScrapSheetDetailService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseServices;
using WIDESEA_IOutboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IOutboundService
{
    public interface IErpProScrapSheetDetailService : IService<Dt_ErpProScrapSheetDetail>
    {
        IErpProScrapSheetDetailRepository Repository { get; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IErpProScrapSheetService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core;
using WIDESEA_IOutboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IOutboundService
{
    public interface IErpProScrapSheetService : IService<Dt_ErpProScrapSheet>
    {
        IErpProScrapSheetRepository Repository { get; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProOutOrderService.cs
@@ -44,7 +44,7 @@
        /// <summary>
        /// æŸ¥è¯¢ERP订单扣除库存数量
        /// </summary>
        Task <WebResponseContent> OutProErpSync(string outProOrderNo);
        WebResponseContent OutProErpSync(string outProOrderNo);
        /// <summary>
        /// å‡ºåº“单扫码同步ERP
        /// </summary>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs
@@ -183,6 +183,7 @@
                            if (materielInfo.IsCheck == WhetherEnum.True)
                            {
                                Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail);
                                checkOrder.OrderType = CheckTypeEnum.ReceiveCheck.ObjToInt();
                                checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo;
                                checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity;
                                checkOrder.ReceiveDetailRowNo = receiveOrderDetail.RowNo;
@@ -332,6 +333,7 @@
                        if (materielInfo.IsCheck == WhetherEnum.True)
                        {
                            Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail);
                            checkOrder.OrderType = CheckTypeEnum.ReceiveCheck.ObjToInt();
                            checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo;
                            checkOrder.Result = CheckAcceptEnum.NotCheckAccept.ToString();
                            checkOrder.QualifiedQuantity = 0;
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Check/Dt_CheckOrder.cs
@@ -34,9 +34,9 @@
        public string CheckOrderNo { get; set; }
        /// <summary>
        /// æ”¶è´§å•号
        /// æ”¶è´§å•号/送检出库单号
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "收货单号")]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "收货单号/送检出库单号")]
        public string ReceiveOrderNo { get; set; }
        /// <summary>
@@ -52,9 +52,9 @@
        public int AuditStatus { get; set; }
        /// <summary>
        /// æ”¶è´§å•明细行号
        /// æ”¶è´§å•明细行号/送检出库详情行号
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "收货单明细行号")]
        [SugarColumn(IsNullable = false, ColumnDescription = "收货单明细行号/送检出库详情行号")]
        public int ReceiveDetailRowNo { get; set; }
        /// <summary>
@@ -133,6 +133,11 @@
        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "单位")]
        public string Unit { get; set; }
        /// <summary>
        /// æ£€éªŒå•类型
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "检验单类型")]
        public int OrderType { get; set; }
        /// <summary>
        /// è´¨æ£€ç»“æžœ
        /// </summary>
        [Navigate(NavigateType.OneToMany, nameof(Dt_CheckOrderResult.CheckOrderId), nameof(CheckOrderId))]
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Check/Dt_CheckOrderResult.cs
@@ -39,14 +39,14 @@
        public string Result { get; set; }
        /// <summary>
        /// é€€è´§æ•°é‡
        /// æ•°é‡
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "数量")]
        public float Quantity { get; set; }
        /// <summary>
        /// æŠ½æ ·æ•°é‡
        /// </summary>
        [SugarColumn(IsNullable = false,  ColumnDescription = "数量")]
        [SugarColumn(IsNullable = false,  ColumnDescription = "抽样数量")]
        public float SampleCount { get; set; }
        /// <summary>
        /// å¤‡æ³¨
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ErpProScrapSheet.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Attributes;
using WIDESEA_Core.CodeConfigEnum;
using WIDESEA_Core.DB.Models;
namespace WIDESEA_Model.Models
{
    /// <summary>
    /// æˆå“æŠ¥åºŸå•
    /// </summary>
    [SugarTable(nameof(Dt_ErpProScrapSheet), "成品报废单")]
    public class Dt_ErpProScrapSheet : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        /// <summary>
        /// ä»“库主键
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "仓库主键")]
        public int WarehouseId { get; set; }
        /// <summary>
        /// å•据编号
        /// </summary>
        [CodeRule(RuleCodeEnum.ProScrapSheetRule)]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "单据编号")]
        public string ProScrapSheetOrderNo { get; set; }
        /// <summary>
        /// æŠ¥åºŸçŠ¶æ€<br/>
        /// å¾…核准<br/>
        /// å·²æ ¸å‡†<br/>
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "报废状态")]
        public string ProScrapStatus { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "备注")]
        public string Remark { get; set; }
        /// <summary>
        /// å‡ºåº“单明细
        /// </summary>
        [Navigate(NavigateType.OneToMany, nameof(Dt_ErpProScrapSheetDetail.ProScrapSheetId), nameof(Id))]
        public List<Dt_ErpProScrapSheetDetail> Details { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ErpProScrapSheetDetail.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.DB.Models;
namespace WIDESEA_Model.Models
{
    /// <summary>
    /// æˆå“æŠ¥åºŸå•明细
    /// </summary>
    [SugarTable(nameof(Dt_ErpProScrapSheetDetail), "成品报废单明细")]
    public class Dt_ErpProScrapSheetDetail : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        /// <summary>
        /// æˆå“æŠ¥åºŸå•主键
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "成品报废单主键")]
        public int ProScrapSheetId { get; set; }
        /// <summary>
        /// äº§å“ç¼–码
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "产品编码")]
        public string ScrapProCode { get; set; }
        /// <summary>
        /// æŠ¥åºŸç‰ˆæœ¬
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "版本")]
        public string ScrapProVersion { get; set; }
        /// <summary>
        /// æŠ¥åºŸæ‰¹æ¬¡å·
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "批次号")]
        public string ScrapProLotNo { get; set; }
        /// <summary>
        /// æŠ¥åºŸSET数量
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "报废SET数量")]
        public int ScrapSETQty { get; set; }
        /// <summary>
        /// æŠ¥åºŸPCS数
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "报废PCS数")]
        public int ScrapPcsQty { get; set; }
        /// <summary>
        /// å·²æŠ¥åºŸSET数量
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "已下报废SET数量")]
        public int OverScrapSETQty { get; set; }
        /// <summary>
        /// å·²æŠ¥åºŸPCS数
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "已下报废PCS数")]
        public int OverScrapPcsQty { get; set; }
        /// <summary>
        /// XSet数
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "XSet数")]
        public int XSetQty { get; set; }
        /// <summary>
        /// XPcs数
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "XPCS数")]
        public int XPcsQty { get; set; }
        /// <summary>
        /// æŠ¥åºŸæ˜Žç»†çŠ¶æ€
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "报废明细状态")]
        public int ScrapProDetailStatus { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "备注")]
        public string Remark { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/ErpProScrapSheetDetailRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_IOutboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_OutboundRepository
{
    public class ErpProScrapSheetDetailRepository : RepositoryBase<Dt_ErpProScrapSheetDetail>, IErpProScrapSheetDetailRepository
    {
        public ErpProScrapSheetDetailRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/ErpProScrapSheetRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_IOutboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_OutboundRepository
{
    public class ErpProScrapSheetRepository : RepositoryBase<Dt_ErpProScrapSheet>, IErpProScrapSheetRepository
    {
        public ErpProScrapSheetRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ErpProScrapSheetDetailService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_IOutboundRepository;
using WIDESEA_IOutboundService;
using WIDESEA_Model.Models;
namespace WIDESEA_OutboundService
{
    public partial class ErpProScrapSheetDetailService : ServiceBase<Dt_ErpProScrapSheetDetail, IErpProScrapSheetDetailRepository>, IErpProScrapSheetDetailService
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        public IErpProScrapSheetDetailRepository Repository => BaseDal;
        public ErpProScrapSheetDetailService(IErpProScrapSheetDetailRepository BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManage;
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ErpProScrapSheetService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.CommonEnum;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Helper;
using WIDESEA_IOutboundRepository;
using WIDESEA_IOutboundService;
using WIDESEA_Model.Models;
namespace WIDESEA_OutboundService
{
    public partial class ErpProScrapSheetService : ServiceBase<Dt_ErpProScrapSheet, IErpProScrapSheetRepository>, IErpProScrapSheetService
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        public IErpProScrapSheetRepository Repository => BaseDal;
        public ErpProScrapSheetService(IErpProScrapSheetRepository BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManage;
        }
        public override WebResponseContent AddData(SaveModel saveModel)
        {
            if (saveModel.MainData.ContainsKey(nameof(Dt_ErpProScrapSheet.ProScrapStatus).FirstLetterToLower()))
            {
                saveModel.MainData[nameof(Dt_ErpProScrapSheet.ProScrapStatus).FirstLetterToLower()] = ProScrapSheetStatusEnum.TOChecked.ObjToInt();
            }
            else
            {
                saveModel.MainData.Add(nameof(Dt_ErpProScrapSheet.ProScrapStatus).FirstLetterToLower(), ProScrapSheetStatusEnum.TOChecked.ObjToInt());
            }
            foreach (var item in saveModel.DetailData)
            {
                if (!item.ContainsKey(nameof(Dt_ErpProScrapSheetDetail.OverScrapSETQty).FirstLetterToLower()))
                {
                    item.Add(nameof(Dt_ErpProScrapSheetDetail.OverScrapSETQty).FirstLetterToLower(), 0);
                }
                if (!item.ContainsKey(nameof(Dt_ErpProScrapSheetDetail.OverScrapPcsQty).FirstLetterToLower()))
                {
                    item.Add(nameof(Dt_ErpProScrapSheetDetail.OverScrapPcsQty).FirstLetterToLower(), 0);
                }
                if (!item.ContainsKey(nameof(Dt_ErpProScrapSheetDetail.XSetQty).FirstLetterToLower()))
                {
                    item.Add(nameof(Dt_ErpProScrapSheetDetail.XSetQty).FirstLetterToLower(), 0);
                }
                if (!item.ContainsKey(nameof(Dt_ErpProScrapSheetDetail.XPcsQty).FirstLetterToLower()))
                {
                    item.Add(nameof(Dt_ErpProScrapSheetDetail.XPcsQty).FirstLetterToLower(), 0);
                }
                if (!item.ContainsKey(nameof(Dt_ErpProScrapSheetDetail.ScrapProDetailStatus).FirstLetterToLower()))
                {
                    item.Add(nameof(Dt_ErpProScrapSheetDetail.ScrapProDetailStatus).FirstLetterToLower(), OutOrderStatusEnum.出库中.ObjToInt());
                }
            }
            return base.AddData(saveModel);
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs
@@ -300,7 +300,11 @@
                    DelOutOrder(oldOutboundOrder);
                    return WebResponseContent.Instance.Error($"未找到该仓库信息");
                }
                if (materielInfo.WarehouseId!= materielInfo.WarehouseId)
                {
                    DelOutOrder(oldOutboundOrder);
                    return WebResponseContent.Instance.Error($"物料{materielInfo}不属于{warehouse.WarehouseName}");
                }
                if (model.Way == 1)
                {
                    if (oldOutboundOrder != null)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs
@@ -131,6 +131,7 @@
                            keyValuePairs.Add(item.SaleOrder, responseContent.Data[0].Endcustomer);
                        }
                    }
                    proOutOrderDetail.QtyPcs += proOutOrderDetail.SpareQty;
                    proOutOrderDetails.Add(proOutOrderDetail);
                }
                Dt_ProOutOrder  proOutOrder= new Dt_ProOutOrder()
@@ -717,7 +718,7 @@
        /// <summary>
        /// æŸ¥è¯¢ERP订单扣除库存数量
        /// </summary>
        public async Task<WebResponseContent> OutProErpSync(string outProOrderNo)
        public WebResponseContent OutProErpSync(string outProOrderNo)
        {
            WebResponseContent content = new WebResponseContent();
            try
@@ -726,52 +727,54 @@
                Dt_ProOutOrder proOutOrder = BaseDal.Db.Queryable<Dt_ProOutOrder>().Where(x=>x.ProOutOrderNo== outProOrderNo).Includes(x => x.Details).First();
                if (proOutOrder==null)
                {
                    return await Task.FromResult(content.Error($"未找到成品出库订单{outProOrderNo}"));
                    return content.Error($"未找到成品出库订单{outProOrderNo}");
                }
                if (proOutOrder.ProOrderStatus>=OutOrderStatusEnum.出库完成.ObjToInt())
                {
                    return await Task.FromResult(content.Error($"出库订单已完成或关闭"));
                    return content.Error($"出库订单已完成或关闭");
                }
                //调用erp出库订单库存查询接口
                string response = _invokeERPService.InvokeOutProErpSync(outProOrderNo);
                ErpOutProSyncResponseContent erpOutProSyncResponse= response.DeserializeObject<ErpOutProSyncResponseContent>();
                if (erpOutProSyncResponse.Code!=200)
                {
                    return await Task.FromResult(content.Error($"ERP出库订单查询接口调用失败,错误信息:{erpOutProSyncResponse.Msg}"));
                    return content.Error($"ERP出库订单查询接口调用失败,错误信息:{erpOutProSyncResponse.Msg}");
                }
                List<OutProStock> outProStocks = erpOutProSyncResponse.Data;
                if (outProStocks.Count<=0 || outProStocks==null)
                {
                    return await Task.FromResult(content.Error($"成品出库订单{outProOrderNo}ERP当前未有出库库存信息"));
                    return content.Error($"成品出库订单{outProOrderNo}ERP当前未有出库库存信息");
                }
                // éªŒè¯æ‰€æœ‰å‡ºåº“单号是否一致
                OutProStock? outExist = outProStocks.FirstOrDefault(x => x.ShippingNumber != outProOrderNo);
                if (outExist != null)
                {
                    return content.Error($"ERP返回了出库订单{outExist.ShippingNumber}库存信息");
                }
                //获取平库库区
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString());
                if (warehouse==null)
                {
                    return await Task.FromResult(content.Error("未找到库区信息"));
                    return content.Error("未找到库区信息");
                }
                var productCodes = outProStocks.Select(x => x.Partnum).Distinct().ToList();
                //获取所有平库库存
                List<Dt_ProStockInfo> proStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId).Includes(x => x.proStockInfoDetails).ToList();
                List<Dt_ProStockInfoDetail> proStockInfoDetails= new List<Dt_ProStockInfoDetail>();
                foreach (var item in proStockInfos)
                {
                    proStockInfoDetails.AddRange(item.proStockInfoDetails);
                }
                proStockInfoDetails = proStockInfoDetails.OrderBy(x => x.DateCode).ThenBy(x => x.CreateDate).ToList() ;
                List<Dt_ProStockInfoDetail> proStockInfoDetails = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo, Dt_ProStockInfoDetail>((master, detail) => master.Id == detail.ProStockId)
                .Where((master, detail) => master.WarehouseId == warehouse.WarehouseId && productCodes.Contains(detail.ProductCode))
                .Select((master, detail) => detail)
                .ToList();
                proStockInfoDetails = proStockInfoDetails.OrderBy(x => x.DateCode).ThenBy(x => x.CreateDate).ToList();
                List<Dt_ProStockInfo> delProStockInfos = new List<Dt_ProStockInfo>();
                List<Dt_ProStockInfoDetail> delStockInfoDetails = new List<Dt_ProStockInfoDetail>();
                foreach (var item in outProStocks)
                {
                    //查询库存记录
                    if (item.ShippingNumber != outProOrderNo)
                    {
                        return await Task.FromResult(content.Error($"ERP返回了出库订单{item.ShippingNumber}库存信息"));
                    }
                    //获取库存
                    List<Dt_ProStockInfoDetail> outStocks = proStockInfoDetails.Where(x=>x.ProductCode==item.Partnum).ToList();
                    if (outStocks.Count==0 || outStocks==null)
                    {
                        return await Task.FromResult(content.Error($"{item.Partnum}产品型号库存不存在"));
                        return content.Error($"{item.Partnum}产品型号库存不存在");
                    }
                    foreach (var itemOut in outStocks)
                    {
@@ -779,13 +782,9 @@
                        {
                            break;
                        }
                        Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.SaleOrder == item.SoNumber && x.PCode == item.Partnum) ?? throw new Exception($"出库单{proOutOrder.ProOutOrderNo}未找到销售订单{item.SoNumber}明细,请检查");
                        if (item.Quantity >= itemOut.StockPcsQty)
                        {
                            Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.SaleOrder == item.SoNumber && x.PCode == item.Partnum);
                            if (proOutOrderDetail == null)
                            {
                                return await Task.FromResult(content.Error($"出库单{proOutOrder.ProOutOrderNo}未找到销售订单{item.SoNumber}明细,请检查"));
                            }
                            //更新出库明细单数量
                            proOutOrderDetail.OverQtyPcs += itemOut.StockPcsQty;
                            item.Quantity -= (int)itemOut.StockPcsQty;
@@ -793,7 +792,7 @@
                            proStockInfoDetails.Remove(itemOut);
                            if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs)
                            {
                                return await Task.FromResult(content.Error($"出库单{proOutOrder.ProOutOrderNo}销售订单{item.SoNumber}数量溢出{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}"));
                                return content.Error($"出库单{proOutOrder.ProOutOrderNo}销售订单{item.SoNumber}数量溢出{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}");
                            }
                            if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
                            {
@@ -806,11 +805,7 @@
                        }
                        else if (item.Quantity < itemOut.StockPcsQty)
                        {
                            Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.SaleOrder == item.SoNumber && x.PCode == item.Partnum);
                            if (proOutOrderDetail == null)
                            {
                                return await Task.FromResult(content.Error($"出库单{proOutOrder.ProOutOrderNo}未找到销售订单{item.SoNumber}明细,请检查"));
                            }
                            //更新出库明细单数量
                            proOutOrderDetail.OverQtyPcs += item.Quantity;
                            item.Quantity -= item.Quantity;
@@ -819,7 +814,7 @@
                            itemOut.StockPcsQty -= item.Quantity;
                            if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs)
                            {
                                return await Task.FromResult(content.Error($"出库单{proOutOrder.ProOutOrderNo}销售订单{item.SoNumber}数量溢出{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}"));
                                return content.Error($"出库单{proOutOrder.ProOutOrderNo}销售订单{item.SoNumber}数量溢出{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}");
                            }
                            if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
                            {
@@ -839,7 +834,7 @@
                else
                {
                    Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.ProOrderDetailStatus <= OrderDetailStatusEnum.Over.ObjToInt());
                    return await Task.FromResult(content.Error($"{proOutOrderDetail?.SaleOrder}销售订单数量需出{proOutOrderDetail?.QtyPcs},可出{proOutOrderDetail?.OverQtyPcs}"));
                    return content.Error($"{proOutOrderDetail?.SaleOrder}销售订单数量需出{proOutOrderDetail?.QtyPcs},可出{proOutOrderDetail?.OverQtyPcs}");
                }
                //更新数据
                _unitOfWorkManage.BeginTran();
@@ -847,16 +842,16 @@
                {
                    _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(delStockInfoDetails, OperateTypeEnum.自动删除);
                }
                await _stockRepository.ProStockInfoDetailRepository.UpdateDataAsync(proStockInfoDetails);
                await BaseDal.UpdateDataAsync(proOutOrder);
                await _outboundRepository.ProOutOrderDetailRepository.UpdateDataAsync(proOutOrder.Details);
                _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails);
                BaseDal.UpdateData(proOutOrder);
                _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrder.Details);
                _unitOfWorkManage.CommitTran();
                return await Task.FromResult(content.OK());
                return content.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return await Task.FromResult(content.Error(ex.Message));
                return content.Error(ex.Message);
            }
        }
        /// <summary>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs
@@ -1130,6 +1130,112 @@
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "proScrapStatusEnum":
                        {
                            List<object> data = new List<object>();
                            {
                                Type type = typeof(ProScrapSheetStatusEnum);
                                List<int> enums = Enum.GetValues(typeof(ProScrapSheetStatusEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(ProScrapSheetStatusEnum).GetField(((ProScrapSheetStatusEnum)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;
                    case "checkTypeEnum":
                        {
                            List<object> data = new List<object>();
                            {
                                Type type = typeof(CheckTypeEnum);
                                List<int> enums = Enum.GetValues(typeof(CheckTypeEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(CheckTypeEnum).GetField(((CheckTypeEnum)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;
                    case "inspectAcceptEnum":
                        {
                            List<object> data = new List<object>();
                            {
                                Type type = typeof(InspectAcceptEnum);
                                List<int> enums = Enum.GetValues(typeof(InspectAcceptEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(InspectAcceptEnum).GetField(((InspectAcceptEnum)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;
                    case "inspectResultEnum":
                        {
                            List<object> data = new List<object>();
                            {
                                Type type = typeof(InspectResultEnum);
                                List<int> enums = Enum.GetValues(typeof(InspectResultEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(InspectResultEnum).GetField(((InspectResultEnum)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/MesTaskService.cs
@@ -130,11 +130,6 @@
                MesResponseContent responseContent = new MesResponseContent();
                try
                {
                    Dt_Task exsit = Repository.QueryFirst(x => x.TargetAddress == model.TargetAddressCode);
                    if (exsit != null)
                    {
                        return responseContent.Error($"目标地址重复");
                    }
                    Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA154.ToString());
                    //获取库存记录
@@ -210,11 +205,7 @@
                MesResponseContent responseContent = new MesResponseContent();
                try
                {
                    Dt_Task exsit = Repository.QueryFirst(x => x.TargetAddress == model.TargetAddressCode);
                    if (exsit != null)
                    {
                        return responseContent.Error($"目标地址重复");
                    }
                    Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA154.ToString());
                    //获取库存记录
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -41,6 +41,7 @@
using WIDESEA_External.Model;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
using WIDESEA_ICheckRepository;
using WIDESEA_IInboundRepository;
using WIDESEA_IInboundService;
using WIDESEA_IOutboundRepository;
@@ -75,6 +76,7 @@
        private readonly IOutboundRepository _outboundRepository;
        private readonly IProInStatisticsRepository _proInStatisticsRepository;
        private readonly IProInStatisticsService _proInStatisticsService;
        private readonly ICheckOrderRepository _checkOrderRepository;
        public ITaskRepository Repository => BaseDal;
        private Dictionary<string, OrderByType> _taskOrderBy = new()
@@ -87,7 +89,7 @@
        public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList();
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IOutboundService outboundService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IInboundRepository inboundRepository, IInboundOrderService inboundOrderService, IPalletTypeInfoRepository palletTypeInfoRepository, IOutProStockInfoRepository outProStockInfoRepository, IOutboundRepository outboundRepository, IProInStatisticsRepository proInStatisticsRepository, IProInStatisticsService proInStatisticsService) : base(BaseDal)
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IOutboundService outboundService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IInboundRepository inboundRepository, IInboundOrderService inboundOrderService, IPalletTypeInfoRepository palletTypeInfoRepository, IOutProStockInfoRepository outProStockInfoRepository, IOutboundRepository outboundRepository, IProInStatisticsRepository proInStatisticsRepository, IProInStatisticsService proInStatisticsService, ICheckOrderRepository checkOrderRepository) : base(BaseDal)
        {
            _mapper = mapper;
            _unitOfWorkManage = unitOfWorkManage;
@@ -106,6 +108,7 @@
            _outboundRepository = outboundRepository;
            _proInStatisticsRepository = proInStatisticsRepository;
            _proInStatisticsService = proInStatisticsService;
            _checkOrderRepository = checkOrderRepository;
        }
        /// <summary>
@@ -628,7 +631,9 @@
                List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
                List<Dt_MesOutboundOrder> mesOutboundOrders = new List<Dt_MesOutboundOrder>();
                List<Dt_MesPPOutboundOrder> mesPPOutboundOrders = new List<Dt_MesPPOutboundOrder>();
                if ((outStockLockInfos == null || outStockLockInfos.Count == 0) &&(warehouse.WarehouseCode != WarehouseEnum.HA64.ToString()|| warehouse.WarehouseCode != WarehouseEnum.HA154.ToString()) && (task.TaskType != TaskTypeEnum.OutEmpty.ObjToInt()))
                Dt_CheckOrder? checkOrder = null;
                Dt_OutboundOrder? outboundOrder = null;
                if ((outStockLockInfos == null || outStockLockInfos.Count == 0) && warehouse.WarehouseCode != WarehouseEnum.HA64.ToString() && warehouse.WarehouseCode != WarehouseEnum.HA154.ToString() && (task.TaskType != TaskTypeEnum.OutEmpty.ObjToInt()))
                {
                    return WebResponseContent.Instance.Error($"未找到出库详情信息");
                }
@@ -665,6 +670,7 @@
                        }
                        else
                        {
                            //获取出库单明细
                            Dt_OutboundOrderDetail outboundOrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == item.OrderDetailId);
                            if (outboundOrderDetail != null)
                            {
@@ -674,7 +680,32 @@
                                    outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                                }
                                outboundOrderDetails.Add(outboundOrderDetail);
                                //获取出库单
                                outboundOrder = _outboundRepository.OutboundOrderRepository.Db.Queryable<Dt_OutboundOrder>().Where(x => x.Id == outboundOrderDetail.OrderId).Includes(x => x.Details).First() ?? throw new Exception("未找到出库单");
                                if (task.TaskType == TaskTypeEnum.OutQuality.ObjToInt())
                                {
                                    Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x=>x.MaterielCode== outboundOrderDetail.MaterielCode);
                                    checkOrder = new Dt_CheckOrder
                                    {
                                        ReceivedQuantity = item.OriginalQuantity,
                                        OrderType = CheckTypeEnum.InspectCheck.ObjToInt(),
                                        ReceiveOrderNo = outboundOrder.OrderNo,
                                        LotNo= item.BatchNo,
                                        Result = CheckAcceptEnum.NotCheckAccept.ToString(),
                                        QualifiedQuantity = 0,
                                        ReceiveDetailRowNo = item.Id,
                                        WarehouseId = outboundOrder.WarehouseId,
                                        ScrappedQuantity = 0,
                                        MaterielCode=materielInfo.MaterielCode,
                                        MaterielSpec = materielInfo.MaterielSpec,
                                        Unit = materielInfo.MaterielUnit,
                                        ReturnQuantity = 0,
                                        DefectedQuantity = 0
                                    };
                                }
                            }
                        }
                        item.Status = OutLockStockStatusEnum.出库完成.ObjToInt();
                    }
@@ -684,12 +715,22 @@
                FeedBackWCSTaskCompleted(taskNum);
                _unitOfWorkManage.BeginTran();
                if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandPickOutbound.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandOutbound.ObjToInt())
                if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutQuality.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandPickOutbound.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandOutbound.ObjToInt())
                {
                    //处理出库详情
                    //处理出库详情以及库存状态
                    if (outboundOrderDetails.Count > 0)
                    {
                        _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
                        //更新出库单状态
                        if (task.TaskType == TaskTypeEnum.OutQuality.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt())
                        {
                            int detailCount = outboundOrderDetails.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count;
                            if ((outboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count + detailCount) == outboundOrder.Details.Count)
                            {
                                outboundOrder.OrderStatus = OutOrderStatusEnum.出库完成.ObjToInt();
                                _outboundRepository.OutboundOrderRepository.UpdateData(outboundOrder);
                            }
                        }
                    }
                    stockInfo.LocationCode = "";
                    stockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt();
@@ -701,15 +742,24 @@
                    {
                        stockInfo.StockLength = 0;
                    }
                    if (checkOrder!=null)
                    {
                        stockInfo.StockStatus = StockStatusEmun.送检完成.ObjToInt();
                        stockInfo.Details.ForEach(x =>
                        {
                            x.Status = StockStatusEmun.送检完成.ObjToInt();
                        });
                        _checkOrderRepository.AddData(checkOrder);
                    }
                    _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                    _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details);
                }
                else if (task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt())
                else if (task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt())//辅料空箱出库完成
                {
                    _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                }
                else if (task.TaskType == TaskTypeEnum.MesOutbound.ObjToInt())
                else if (task.TaskType == TaskTypeEnum.MesOutbound.ObjToInt())//板料Mes出库完成逻辑
                {
                    _outboundService.MesOutboundOrderService.Repository.UpdateData(mesOutboundOrders);
                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs
@@ -884,6 +884,15 @@
                    {
                        x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                    });
                    outboundOrderDetails.ForEach(x =>
                    {
                        x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                    });
                    Dt_OutboundOrder outboundOrder = _outboundRepository.OutboundOrderRepository.QueryFirst(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId);
                    if (outboundOrder.OrderStatus != OutOrderStatusEnum.出库中.ObjToInt())
                    {
                        _outboundRepository.OutboundOrderRepository.UpdateData(outboundOrder);
                    }
                    WebResponseContent content = _outboundService.OutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
                    if (!content.Status)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WIDESEA_TaskInfoService.csproj
@@ -9,6 +9,7 @@
  <ItemGroup>
    <ProjectReference Include="..\WIDESEA_External\WIDESEA_External.csproj" />
    <ProjectReference Include="..\WIDESEA_IBasicService\WIDESEA_IBasicService.csproj" />
    <ProjectReference Include="..\WIDESEA_ICheckRepository\WIDESEA_ICheckRepository.csproj" />
    <ProjectReference Include="..\WIDESEA_IInboundService\WIDESEA_IInboundService.csproj" />
    <ProjectReference Include="..\WIDESEA_IOutboundService\WIDESEA_IOutboundService.csproj" />
    <ProjectReference Include="..\WIDESEA_IRecordService\WIDESEA_IRecordService.csproj" />
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Check/CheckOrderResultController.cs
@@ -30,6 +30,17 @@
            return Service.CommitCheckResult(checkOrderId, checkResult, isAccept);
        }
        /// <summary>
        /// æäº¤é€æ£€ç»“æžœ
        /// </summary>
        /// <param name="checkOrderId"></param>
        /// <param name="checkResult"></param>
        /// <returns></returns>
        [HttpPost, Route("CommitInspectResult")]
        public WebResponseContent CommitInspectResult(int checkOrderId, [FromBody] Dt_CheckOrderResult checkResult, int isAccept = 0)
        {
            return Service.CommitInspectResult(checkOrderId, checkResult, isAccept);
        }
        /// <summary>
        /// èŽ·å–æ£€éªŒä¿¡æ¯
        /// </summary>
        /// <param name="checkId"></param>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs
@@ -233,11 +233,20 @@
        /// </summary>
        /// <returns></returns>
        [HttpPost, Route("InvokeCheckOrderApi"), AllowAnonymous]
        public string InvokeCheckOrderApi(ERPCheckModel checkModel)
        public string InvokeCheckOrderApi([FromBody] ERPCheckModel checkModel)
        {
            return _invokeERPService.InvokeCheckOrderApi(checkModel);
        }
        /// <summary>
        /// æŽ¨é€ERP物料送检
        /// </summary>
        /// <returns></returns>
        [HttpPost, Route("InvokeInspectApi"), AllowAnonymous]
        public string InvokeInspectApi([FromBody] ERPInspectModel eRPInspectModel)
        {
            return _invokeERPService.InvokeInspectApi(eRPInspectModel);
        }
        /// <summary>
        /// æŽ¨é€ERP入库
        /// </summary>
        /// <returns></returns>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ErpProScrapSheetController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Core.BaseController;
using WIDESEA_Core;
using WIDESEA_IOutboundService;
using WIDESEA_Model.Models;
namespace WIDESEA_WMSServer.Controllers.Outbound
{
    /// <summary>
    /// æˆå“æŠ¥åºŸå•
    /// </summary>
    [Route("api/ErpProScrapSheet")]
    [ApiController]
    public class ErpProScrapSheetController : ApiBaseController<IErpProScrapSheetService, Dt_ErpProScrapSheet>
    {
        public ErpProScrapSheetController(IErpProScrapSheetService service) : base(service)
        {
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ErpProScrapSheetDetailController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Core.BaseController;
using WIDESEA_IOutboundService;
using WIDESEA_Model.Models;
namespace WIDESEA_WMSServer.Controllers.Outbound
{
    /// <summary>
    /// æˆå“æŠ¥åºŸå•明细
    /// </summary>
    [Route("api/ErpProScrapSheetDetail")]
    [ApiController]
    public class ErpProScrapSheetDetailController : ApiBaseController<IErpProScrapSheetDetailService, Dt_ErpProScrapSheetDetail>
    {
        public ErpProScrapSheetDetailController(IErpProScrapSheetDetailService service) : base(service)
        {
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ProOutOrderController.cs
@@ -63,9 +63,9 @@
        /// æŸ¥è¯¢ERP订单扣除库存数量
        /// </summary>
        [HttpPost, HttpGet, Route("OutProErpSync")]
        public async Task<WebResponseContent> OutProErpSync(string outProOrderNo)
        public WebResponseContent OutProErpSync(string outProOrderNo)
        {
            return await Service.OutProErpSync(outProOrderNo);
            return Service.OutProErpSync(outProOrderNo);
        }
        /// <summary>
        /// å‡ºåº“单扫码同步ERP
´úÂë¹ÜÀí/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",
  "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",
  "AllowedHosts": "*",
  "ConnectionStringsEncryption": false,
  "MainDB": "DB_WIDESEA", //当前项目的主库,所对应的连接字符串的Enabled必须为true