wangxinhui
2025-02-28 f947d43adfe6a204b6afe920ce88a30d78015f1d
板料优化,成品流程,测试架...
已删除5个文件
已修改24个文件
已添加20个文件
1568 ■■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/336a7528-2578-4f8c-8fc8-17a205348f74.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/5ba3c6c3-45c6-476a-ba4d-7e36c7c7a528.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9db99863-dd5d-4ea4-9436-cf86369c513c.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/read.lock 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/ConveyorLineJob_BC.cs 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/RGVJob_BC.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/StackerCraneJob_BC.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/测试架仓/StackerCraneJob_CSJ.cs 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/outbound/mesOutboundOrder.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/1835396e-ee0b-4003-b5af-b6427288d0f6.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/2a6737f2-ed15-4243-99f4-32f56eae41df.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/736d9a07-7f63-4075-b18a-3910cc852c4c.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/959c0d1d-18db-48d3-9271-1d227e7b7a7a.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/b0f7d90e-1d2b-41fa-bdc4-6751c11f6ed9.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/cf4c8fbf-fed0-45af-ba6f-76a403b97252.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e78f7dca-bb67-4a49-94e2-a0a1a362cc32.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/f0ca51ef-0959-4f1b-a1f1-0807e03664dc.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/read.lock 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/PalletCodeInfoService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_BC.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationStatusEnum.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpProOutOrderDTO.cs 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpProductScrappedOrderDTO.cs 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpProductSpecifyVerDTO.cs 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpProductTransferOrderDTO.cs 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpProductWarehousingOrderDTO.cs 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/MesResponseContent.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPMaintainIssueModel.cs 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPMaterialSaleReturnModel.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPProInboundModel.cs 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPProOutOrderModel.cs 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPProductCheckModel.cs 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPScrapSheetModel.cs 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPStockCheckModel.cs 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesOutboundOrderService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/336a7528-2578-4f8c-8fc8-17a205348f74.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/5ba3c6c3-45c6-476a-ba4d-7e36c7c7a528.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9db99863-dd5d-4ea4-9436-cf86369c513c.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/read.lock
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs
@@ -19,6 +19,12 @@
        New = 100,
        /// <summary>
        /// æå‡æœºæ‰§è¡Œä¸­
        /// </summary>
        [Description("提升机执行中")]
        HT_Executing = 110,
        /// <summary>
        /// å †åž›æœºå¾…执行
        /// </summary>
        [Description("堆垛机待执行")]
@@ -106,10 +112,6 @@
        /// </summary>
        [Description("任务异常")]
        Exception = 990,
        /// <summary>
        /// æå‡æœºæ‰§è¡Œä¸­
        /// </summary>
        [Description("提升机执行中")]
        HT_Executing = 110,
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs
@@ -91,6 +91,12 @@
        MesMatReturn = 560,
        /// <summary>
        /// MES空托退料
        /// </summary>
        [Description("MES空托退料")]
        MesPalletReturn = 580,
        /// <summary>
        /// è°ƒæ‹¨å…¥åº“
        /// </summary>
        [Description("调拨入库")]
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -260,5 +260,9 @@
        /// <param name="PodBerthAndMat"></param>
        /// <returns></returns>
        WebResponseContent AgvPodBerthAndMat(AgvPodBerthAndMatDTO agvPodModel, APIEnum PodBerthAndMat = APIEnum.Agv_CSJPodBerthAndMat);
        /// <summary>
        /// //判断移库货位任务是否已存在,如存在先执行
        /// </summary>
        Dt_Task QueryStackerExistTask(string PalletCode,string locationCode);
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -16,6 +16,7 @@
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using AutoMapper;
using HslCommunication.Enthernet;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using SqlSugar;
@@ -65,6 +66,7 @@
        private Dictionary<string, OrderByType> _taskOrderBy = new()
            {
                {nameof(Dt_Task.Grade),OrderByType.Desc },
                {nameof(Dt_Task.TaskNum),OrderByType.Asc},
                {nameof(Dt_Task.CreateDate),OrderByType.Asc},
            };
@@ -198,7 +200,12 @@
                                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())
                            else if (item.TaskType == TaskTypeEnum.MesPalletReturn.ObjToInt() && router.IsEnd)
                            {
                                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")))
                            {
                                task.NextAddress = router.NextPosi;
                                task.DeviceCode = stationManger.StackerCraneCode;
@@ -813,5 +820,12 @@
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// //判断移库货位任务是否已存在,如存在先执行
        /// </summary>
        public Dt_Task QueryStackerExistTask(string PalletCode, string locationCode)
        {
            return BaseDal.QueryFirst(x => x.PalletCode == PalletCode && x.SourceAddress == locationCode && x.TaskState == (int)TaskStatusEnum.SC_Execute);
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/°å²Ä²Ö/ConveyorLineJob_BC.cs
@@ -106,13 +106,16 @@
                                Dt_Task task = _taskRepository.QueryFirst(x => x.CurrentAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) /*&& x.DeviceCode == item.StationDeviceCode*/ && (x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.WarehouseId == warehouseDevice.WarehouseId);
                                if (task != null && conveyorLineInfoWrite.Spare2 == 0 && conveyorLineStatus.Goods)
                                {
                                    List<string> stations = _routerExtension.GetEndPoint(item.StationCode, TaskTypeEnum.Inbound.ObjToInt()).Select(x => x.NextPosi).ToList();
                                    WebResponseContent responseContent = _taskService.RequestWMSAssignRoadway(stations, task.TaskNum, conveyorLineInfoRead.Spare2);
                                    if (responseContent.Status)
                                    {
                                    //List<string> stations = _routerExtension.GetEndPoint(item.StationCode, TaskTypeEnum.Inbound.ObjToInt()).Select(x => x.NextPosi).ToList();
                                    ////分配巷道
                                    //WebResponseContent responseContent = _taskService.RequestWMSAssignRoadway(stations, task.TaskNum, conveyorLineInfoRead.Spare2);
                                    //if (responseContent.Status)
                                    //{
                                    //    device.SetValue(W_ConveyorLineDB.Spare2, 1, item.StationCode);
                                    //    _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: item.StationDeviceCode, roadwayNo: responseContent.Data.ToString() ?? "");
                                    //}
                                        device.SetValue(W_ConveyorLineDB.Spare2, 1, item.StationCode);
                                        _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: item.StationDeviceCode, roadwayNo: responseContent.Data.ToString() ?? "");
                                    }
                                    _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: item.StationDeviceCode);
                                }
                                else
                                {
@@ -132,6 +135,17 @@
                                    Dt_Task task = _taskRepository.QueryFirst(x => x.CurrentAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.DeviceCode == item.StationDeviceCode && (x.TaskState == TaskStatusEnum.Line_Execute.ObjToInt()) && x.PalletCode == conveyorLineInfoRead.Barcode && x.WarehouseId == warehouseDevice.WarehouseId);
                                    if (task != null)
                                    {
                                        List<string> stations = _routerExtension.GetEndPoint(item.StationCode, TaskTypeEnum.Inbound.ObjToInt()).Select(x => x.NextPosi).ToList();
                                        //分配巷道
                                        if (stations.Count>1)
                                        {
                                            WebResponseContent responseContent = _taskService.RequestWMSAssignRoadway(stations, task.TaskNum, conveyorLineInfoRead.Spare2);
                                            if (responseContent.Status)
                                            {
                                                _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, roadwayNo: responseContent.Data.ToString() ?? "");
                                            }
                                        }
                                        device.SetValue(W_ConveyorLineDB.Spare2, 0, item.StationCode);
                                        string currentAddress = task.CurrentAddress;
@@ -173,13 +187,22 @@
                                        else
                                        {
                                            //task.NextAddress可能是router.NextPosi
                                            device.SetValue(W_ConveyorLineDB.EndPos, task.NextAddress, item.StationCode);
                                            nextAddress = router.NextPosi;
                                            device.SetValue(W_ConveyorLineDB.EndPos, router.NextPosi, item.StationCode);
                                        }
                                        device.SetValue(W_ConveyorLineDB.TaskNum, task.TaskNum, item.StationCode);
                                        device.SetValue(W_ConveyorLineDB.StartPos, task.CurrentAddress, item.StationCode);
                                        device.SetValue(W_ConveyorLineDB.Spare1, ConveyorWorkTypeEnum.Outbound.ObjToInt(), item.StationCode);
                                        device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
                                        if (router.IsEnd)
                                        {
                                        _taskService.UpdateTask(task, taskState, currentAddress: currentAddress, nextAddress: nextAddress, targetAddress: targetAddress, deviceCode: deviceCode);
                                        }
                                        else
                                        {
                                            _taskService.UpdateTask(task, taskState, nextAddress: nextAddress);
                                        }
                                    }
                                    else
                                    {
@@ -187,10 +210,11 @@
                                    }
                                    #endregion
                                }
                                else//生产退库
                                else//生产退库 //换巷道入库
                                {
                                    #region ç”Ÿäº§é€€åº“,带任务号查询任务
                                    Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.TaskNum && x.NextAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.WarehouseId == warehouseDevice.WarehouseId); // å¸¦ä»»åŠ¡å·æŸ¥è¯¢ä»»åŠ¡
                                    Dt_Task taskIn = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.TaskNum && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.DeviceCode == item.StationDeviceCode && x.NextAddress == item.StationCode && x.WarehouseId == warehouseDevice.WarehouseId && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt()); // å¸¦ä»»åŠ¡å·æŸ¥è¯¢ä»»åŠ¡
                                    if (task != null)
                                    {
                                        List<string> stations = _routerExtension.GetEndPoint(item.StationCode, TaskTypeEnum.Inbound.ObjToInt()).Select(x => x.NextPosi).ToList();
@@ -252,6 +276,50 @@
                                        }
                                       
                                    }
                                    if (taskIn!=null)
                                    {
                                        string currentAddress = taskIn.CurrentAddress;
                                        string nextAddress = taskIn.NextAddress;
                                        string targetAddress = taskIn.TargetAddress;
                                        string deviceCode = taskIn.DeviceCode;
                                        TaskStatusEnum taskState = (TaskStatusEnum)taskIn.TaskState;
                                        List<Dt_Router> routers = _routerService.QueryNextRoutes(item.StationCode, taskIn.Roadway, taskIn.TaskType);
                                        Dt_Router? router = routers.FirstOrDefault();
                                        if (routers == null || routers.Count == 0 || router == null)
                                        {
                                            WriteError(item.StationName, $"未找到对应路由信息,设备编号:{item.StationCode},任务号:{taskIn.TaskNum}");
                                            continue;
                                        }
                                        if (routers.Count > 1)
                                        {
                                            WriteError(item.StationName, $"路由信息配置错误,设备编号:{item.StationCode},任务号:{taskIn.TaskNum}");
                                            continue;
                                        }
                                        if (router.IsEnd)
                                        {
                                            string? targetLoca = _taskService.RequestAssignLocationByHeight(taskIn.TaskNum, taskIn.Roadway, conveyorLineInfoRead.Spare2);
                                            if (!string.IsNullOrEmpty(targetLoca))
                                            {
                                                currentAddress = item.StackerCraneStationCode;
                                                targetAddress = targetLoca;
                                                nextAddress = targetLoca;
                                                taskState = TaskStatusEnum.SC_Execute;
                                                deviceCode = item.StackerCraneCode;
                                                device.SetValue(W_ConveyorLineDB.EndPos, taskIn.CurrentAddress, item.StationCode);
                                            }
                                            else
                                            {
                                                WriteError(item.StationName, $"请求分配货位失败,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                                continue;
                                            }
                                        }
                                        device.SetValue(W_ConveyorLineDB.TaskNum, taskIn.TaskNum, item.StationCode);
                                        device.SetValue(W_ConveyorLineDB.StartPos, taskIn.CurrentAddress, item.StationCode);
                                        device.SetValue(W_ConveyorLineDB.Spare1, ConveyorWorkTypeEnum.Outbound.ObjToInt(), item.StationCode);
                                        device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
                                        _taskService.UpdateTask(taskIn, taskState, currentAddress: currentAddress, nextAddress: nextAddress, targetAddress: targetAddress, deviceCode: deviceCode);
                                    }
                                    #endregion
                                }
                            }
@@ -272,6 +340,10 @@
                                    device.SetValue(W_ConveyorLineDB.Spare1, ConveyorWorkTypeEnum.Outbound.ObjToInt(), item.StationCode);
                                    device.SetValue(W_ConveyorLineDB.STB, true, item.StationCode);
                                }
                                else //调拨使用
                                {
                                    device.SetValue(W_ConveyorLineDB.STB, true, item.StationCode);
                                }
                                //{
                                //    task = _taskRepository.QueryFirst(x => x.CurrentAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && string.IsNullOrEmpty(x.DeviceCode) && x.TaskState == TaskStatusEnum.New.ObjToInt() && x.WarehouseId == warehouseDevice.WarehouseId);
                                //    if (task != null)
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/°å²Ä²Ö/RGVJob_BC.cs
@@ -145,6 +145,11 @@
                            }
                            else if (!conveyorLineSignalRead.STB && conveyorLineSignalWrite.ACK && !conveyorLineStatus.Alarm)
                            {
                                Dt_Task task = _taskRepository.QueryFirst(x => x.PalletCode == conveyorLineInfoRead.Barcode);
                                if (task!=null && task.TaskType==TaskTypeEnum.MesPalletReturn.ObjToInt())
                                {
                                    _taskService.TaskCompleted(task.TaskNum);
                                }
                                device.SetValue(W_ConveyorLineDB.ACK, false, item.StationCode);
                            }
                        }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/°å²Ä²Ö/StackerCraneJob_BC.cs
@@ -200,7 +200,7 @@
                        }
                        else
                        {
                            _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: stationManger.StationDeviceCode, currentAddress: stationManger.StationCode, nextAddress: router.NextPosi, targetAddress: "1102");
                            _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: stationManger.StationDeviceCode, currentAddress: stationManger.StationCode, nextAddress: "1102", targetAddress: "1102");
                        }
                        
                    }
@@ -336,6 +336,14 @@
                else
                {
                    Dt_Task reloTask = _mapper.Map<Dt_Task>(taskDTO);
                    //判断移库货位任务是否已存在,如存在先执行
                    Dt_Task existTask = _taskService.QueryStackerExistTask(reloTask.PalletCode, reloTask.SourceAddress);
                    if (existTask != null)
                    {
                        return existTask;
                    }
                    else
                    {
                    reloTask.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
                    reloTask.CurrentAddress = taskDTO.SourceAddress;
                    reloTask.NextAddress = taskDTO.TargetAddress;
@@ -343,6 +351,7 @@
                    reloTask.TaskType = TaskTypeEnum.Relocation.ObjToInt();
                    int taskId = _taskRepository.AddData(reloTask);
                    reloTask.TaskId = taskId;
                    }
                    return reloTask;
                }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/²âÊԼܲÖ/StackerCraneJob_CSJ.cs
@@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Components.Routing;
using AutoMapper;
using Microsoft.AspNetCore.Components.Routing;
using Newtonsoft.Json;
using Quartz;
using System;
@@ -14,6 +15,7 @@
using WIDESEAWCS_Core.Caches;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
@@ -31,6 +33,7 @@
    [DisallowConcurrentExecution]
    public class StackerCraneJob_CSJ : JobBase, IJob
    {
        private readonly IMapper _mapper;
        private readonly ICacheService _cacheService;
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
@@ -39,7 +42,7 @@
        private readonly IStationMangerRepository _stationMangerRepository;
        private List<Dt_ApiInfo> apiInfos;
        public StackerCraneJob_CSJ(ITaskService taskService, ICacheService cacheService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository)
        public StackerCraneJob_CSJ(ITaskService taskService, ICacheService cacheService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository, IMapper mapper)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
@@ -47,6 +50,7 @@
            _routerService = routerService;
            _stationMangerRepository = stationMangerRepository;
            _cacheService = cacheService;
            _mapper = mapper;
            string? apiInfoStr = _cacheService.Get("apiInfos");
            if (!string.IsNullOrEmpty(apiInfoStr))
@@ -231,7 +235,57 @@
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"未找到WMS移库判断接口");
                    return null;
                }
                HttpHelper.Post($"{url}?taskNum={task.TaskNum}&locationCode={task.NextAddress}", "");//todo è°ƒç”¨WMS任务完成方法
                string response = HttpHelper.Post($"{url}?taskNum={task.TaskNum}&locationCode={task.CurrentAddress}", "");//todo è°ƒç”¨WMS任务完成方法
                if (string.IsNullOrEmpty(response))
                {
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"移库接口调用错误");
                    WriteError(commonStackerCrane.DeviceCode, $"移库接口调用错误");
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"移库接口调用错误");
                    return null;
                }
                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(response);
                if (responseContent == null || !responseContent.Status)
                {
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"移库接口调用错误");
                    WriteError(commonStackerCrane.DeviceCode, $"移库接口调用错误");
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"移库接口调用错误");
                    return null;
                }
                WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.Serialize());
                if (taskDTO == null)
                {
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"移库接口调用错误");
                    WriteError(commonStackerCrane.DeviceCode, $"移库接口调用错误");
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"移库接口调用错误");
                    return null;
                }
                if (task.TaskNum == taskDTO.TaskNum)
                {
                    return task;
                }
                else
                {
                    Dt_Task reloTask = _mapper.Map<Dt_Task>(taskDTO);
                    //判断移库货位任务是否已存在,如存在先执行
                    Dt_Task existTask = _taskService.QueryStackerExistTask(reloTask.PalletCode, reloTask.SourceAddress);
                    if (existTask != null)
                    {
                        return existTask;
                    }
                    else
                    {
                        reloTask.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
                        reloTask.CurrentAddress = taskDTO.SourceAddress;
                        reloTask.NextAddress = taskDTO.TargetAddress;
                        reloTask.DeviceCode = task.DeviceCode;
                        reloTask.TaskType = TaskTypeEnum.Relocation.ObjToInt();
                        int taskId = _taskRepository.AddData(reloTask);
                        reloTask.TaskId = taskId;
                    }
                    return reloTask;
                }
            }
            return task;
@@ -244,7 +298,7 @@
        /// <returns>如果未被占用,返回传入的任务信息,否则,返回null</returns>
        private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
        {
            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.NextAddress && x.StackerCraneCode == task.DeviceCode);
            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => (x.StationCode == task.NextAddress || x.StackerCraneStationCode == task.NextAddress) && x.StackerCraneCode == task.DeviceCode);
            if (stationManger != null)
            {
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/outbound/mesOutboundOrder.vue
@@ -34,12 +34,14 @@
      ]);
      const searchFormFields = ref({
        orderNo: "",
        taskNo:"",
        materialCode: "",
        batchNo: "",
      });
      const searchFormOptions = ref([
        [
          { title: "单据编号", field: "orderNo", type:"like" },
          { title: "MES任务单号", field: "taskNo", type:"like" },
          { title: "物料编号", field: "materialCode" ,type:"like"},
          { title: "批次号", field: "batchNo" ,type:"like"},
        ],
@@ -71,7 +73,7 @@
        },
        {
          field: "taskNo",
          title: "任务单号",
          title: "MES任务单号",
          type: "string",
          width: 150,
          align: "left",
@@ -154,6 +156,14 @@
          type: "string",
          width: 100,
          align: "left",
          hidden: true
        },
        {
          field: "createDate",
          title: "创建时间",
          type: "datetime",
          width: 160,
          align: "left",
        },
        {
          field: "width",
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/1835396e-ee0b-4003-b5af-b6427288d0f6.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/2a6737f2-ed15-4243-99f4-32f56eae41df.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/736d9a07-7f63-4075-b18a-3910cc852c4c.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/959c0d1d-18db-48d3-9271-1d227e7b7a7a.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/b0f7d90e-1d2b-41fa-bdc4-6751c11f6ed9.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/cf4c8fbf-fed0-45af-ba6f-76a403b97252.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e78f7dca-bb67-4a49-94e2-a0a1a362cc32.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/f0ca51ef-0959-4f1b-a1f1-0807e03664dc.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/read.lock
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/PalletCodeInfoService.cs
@@ -104,7 +104,7 @@
                    List<Dt_PalletCodeInfo> palletCodeInfos = new List<Dt_PalletCodeInfo>();
                    int serialNo = 0;
                    DateTime now = DateTime.Now;
                    Dt_PalletCodeInfo palletCodeInfo = BaseDal.QueryFirst(x => x.WarehouseId == warehouseId, new Dictionary<string, OrderByType> { { nameof(Dt_PalletCodeInfo.SerialNo), OrderByType.Desc } });
                    Dt_PalletCodeInfo palletCodeInfo = BaseDal.QueryFirst(x => x.WarehouseId == warehouseId && x.PalletTypeId==palletTypeId, new Dictionary<string, OrderByType> { { nameof(Dt_PalletCodeInfo.SerialNo), OrderByType.Desc } });
                    if (palletCodeInfo != null && palletCodeInfo.CreateDate.Year == now.Year && palletCodeInfo.CreateDate.Month == now.Month && palletCodeInfo.CreateDate.Day == now.Day)
                    {
                        serialNo = palletCodeInfo.SerialNo + 1;
@@ -123,7 +123,7 @@
                            SerialNo = serialNo,
                            PalletCode = palletTypeInfo.CodeStartStr + now.ToString("yyyyMMdd") + serialNo.ToString().PadLeft(3, '0'),
                            PalletType = 1,
                            PalletTypeId = 0,
                            PalletTypeId = palletTypeId,
                            WarehouseId = warehouseId,
                            Status = 0,
                            Size = 0
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_BC.cs
@@ -108,6 +108,15 @@
                    {
                        Dt_LocationInfo definedTypeEmptyLocation = definedTypeEmptyLocations[i];
                        Dt_LocationInfo? locationInfo = GetUsableLocation_BC(locationInfos, definedTypeEmptyLocation, palletType, palletTypeInfo);
                        //判断货位两深及以上是否存在出库锁定货位
                        if (locationInfo?.Depth == 1)
                        {
                            Dt_LocationInfo? IsBebusyLocation = locationInfos.Where(x => x.Row == (locationInfo?.Row == 2 ? locationInfo?.Row - 1 : locationInfo?.Row + 1) && x.Column==locationInfo?.Column && x.Layer== locationInfo?.Layer).FirstOrDefault();
                            if (IsBebusyLocation!=null && (IsBebusyLocation.LocationStatus<LocationStatusEnum.InStock.ObjToInt()))
                            {
                                continue;
                            }
                        }
                        if (locationInfo != null)
                        {
                            locationCaches_BC.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
@@ -123,11 +132,20 @@
                            undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Column % 2 == 1).ToList();
                        else
                            undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Column % 2 == 0).ToList();
                    }
                    for (int i = 0; i < undefinedTypeEmptyLocations.Count; i++)
                    {
                        Dt_LocationInfo undefinedTypeEmptyLocation = undefinedTypeEmptyLocations[i];
                        Dt_LocationInfo? locationInfo = GetUsableLocation_BC(locationInfos, undefinedTypeEmptyLocation, palletType, palletTypeInfo);
                            //判断货位两深及以上是否存在出库锁定货位
                            if (locationInfo?.Depth == 1)
                            {
                                Dt_LocationInfo? IsBebusyLocation = locationInfos.Where(x => x.Row == (locationInfo?.Row == 2 ? locationInfo?.Row - 1 : locationInfo?.Row + 1) && x.Column == locationInfo?.Column && x.Layer == locationInfo?.Layer).FirstOrDefault();
                                if (IsBebusyLocation != null && (IsBebusyLocation.LocationStatus < LocationStatusEnum.InStock.ObjToInt()))
                                {
                                    continue;
                                }
                            }
                        if (locationInfo != null)
                        {
                            //UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, locationInfo.WarehouseId);
@@ -136,6 +154,8 @@
                        }
                    }
                }
                }
                return null;
            }
        }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs
@@ -341,9 +341,20 @@
                        nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column - 1);
                    }
                    if (location.RoadwayNo == "SC01_BC")
                    if (nearLocation!=null && location.RoadwayNo.Contains("BC"))
                    {
                        if (nearLocation?.LocationType == LocationTypeEnum.SmallPallet.ObjToInt())
                        {
                            nearLocation = null;
                        }
                    }
                    if (location.RoadwayNo == "SC01_BC" && palletType != PalletTypeEnum.SmallPallet.ObjToInt())
                    {
                        nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column - 1);
                        if (nearLocation?.LocationType == LocationTypeEnum.SmallPallet.ObjToInt())
                        {
                            nearLocation = null;
                        }
                    }
                    if (nearLocation != null)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/LocationEnum/LocationStatusEnum.cs
@@ -30,7 +30,7 @@
        InStockLock = 10,
        /// <summary>
        ///
        /// æœ‰è´§é”å®š
        /// </summary>
        [Description("空闲锁定")]
        FreeLock = 20,
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs
@@ -56,6 +56,9 @@
        [Description("退库")]
        MES退库 = 21,
        [Description("MES空托退库")]
        MES空托退库 = 22,
        [Description("组盘撤销")]
        ç»„盘撤销 = 99,
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs
@@ -100,6 +100,12 @@
        InAllocate = 570,
        /// <summary>
        /// MES空托退料
        /// </summary>
        [Description("MES空托退料")]
        MesPalletReturn = 580,
        /// <summary>
        /// ç©ºç®±å…¥åº“
        /// </summary>
        [Description("空箱入库")]
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpProOutOrderDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,107 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Attributes;
namespace WIDESEA_DTO.ERP
{
    /// <summary>
    /// æˆå“è®¢å•出库
    /// </summary>
    public class ErpProOutOrderDTO
    {
        /// <summary>
        /// æ“ä½œç±»åž‹<br/>
        /// 1:新增<br/>
        /// 2:修改<br/>
        /// 3:删除(删除只要明细行号和领料单号)
        /// </summary>
        [PropertyValidate("操作类型", NotNullAndEmpty = true, Check = new object[] { 1, 2, 3 })]
        public int Way { get; set; }
        /// <summary>
        /// å‡ºåº“订单号
        /// </summary>
        [PropertyValidate("出库订单号", NotNullAndEmpty = true)]
        public string OrderNo { get; set; }
        /// <summary>
        /// è®¢å•类型<br/>
        /// 1:出库单<br/>
        /// 2:寄售订单转仓<br/>
        /// </summary>
        [PropertyValidate("订单类型", NotNullAndEmpty = true, Check = new object[] { 1, 2})]
        public int OType { get; set; }
        /// <summary>
        /// è®¡åˆ’出货时间
        /// </summary>
        public string PlantShipDate { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Note { get; set; }
        /// <summary>
        /// è¯¦æƒ…
        /// </summary>
        public List<ErpProOutOrderDetailds> OrderDetails { get; set; }
    }
    /// <summary>
    /// è¯¦ç»†
    /// </summary>
    public class ErpProOutOrderDetailds
    {
        /// <summary>
        /// è¡Œå·
        /// </summary>
        public int RowId { get; set; }
        /// <summary>
        /// é”€å”®è®¢å•号
        /// </summary>
        public string SaleOrder { get; set; }
        /// <summary>
        /// å®¢æˆ·
        /// </summary>
        public string Customer { get; set; }
        /// <summary>
        /// å·¥åŽ‚
        /// </summary>
        public string FactoryCode { get; set; } = "HA02";
        /// <summary>
        /// äº§å“ç¼–码
        /// </summary>
        public string PCode { get; set; }
        /// <summary>
        /// äº§å“ç‰ˆæœ¬
        /// </summary>
        public string PVer { get; set; }
        /// <summary>
        /// äº§å“æ‰¹æ¬¡
        /// </summary>
        public string PLot { get; set; }
        /// <summary>
        /// äº§å“å‘¨æœŸ
        /// </summary>
        public int DateCode { get; set; }
        /// <summary>
        /// åˆæ ¼PCS数
        /// </summary>
        public float QtyPcs { get; set; }
        /// <summary>
        /// X板数
        /// </summary>
        public float XQty { get; set; }
        /// <summary>
        /// X板位
        /// </summary>
        public string XSite { get; set; }
        /// <summary>
        /// å•位
        /// </summary>
        public string Unit { get; set; }
        /// <summary>
        /// å¤‡å“æ•°
        /// </summary>
        public float SpareQty { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpProductScrappedOrderDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,90 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Attributes;
namespace WIDESEA_DTO.ERP
{
    /// <summary>
    /// æˆå“ä»“检报废单
    /// </summary>
    [ModelValidate]
    public class ErpProductScrappedOrderDTO
    {
        /// <summary>
        /// è®¢å•号
        /// </summary>
        [PropertyValidate("订单号", NotNullAndEmpty = true)]
        public string OrderNo { get; set; }
        /// <summary>
        /// äº§å“ç¼–码
        /// </summary>
        [PropertyValidate("产品编码", NotNullAndEmpty = true)]
        public string PCode { get; set; }
        /// <summary>
        /// äº§å“ç‰ˆæœ¬
        /// </summary>
        [PropertyValidate("产品版本", NotNullAndEmpty = true)]
        public string PVer { get; set; }
        /// <summary>
        /// äº§å“æ‰¹æ¬¡
        /// </summary>
        [PropertyValidate("产品批次", NotNullAndEmpty = true)]
        public string PLot { get; set; }
        /// <summary>
        /// äº§å“å‘¨æœŸ
        /// </summary>
        [PropertyValidate("产品周期")]
        public int DateCode { get; set; }
        /// <summary>
        /// ä»“库类型
        /// HA72=尾数仓、HA71=成品仓、HA73=研发仓
        /// </summary>
        [PropertyValidate("仓库类型", NotNullAndEmpty = true)]
        public string WaType { get; set; }
        /// <summary>
        /// åˆæ ¼PCS数
        /// </summary>
        [PropertyValidate("合格PCS数", NotNullAndEmpty = true)]
        public float QtyPcs { get; set; }
        /// <summary>
        /// X板数
        /// </summary>
        [PropertyValidate("X板数")]
        public float XQty { get; set; }
        /// <summary>
        /// X板位
        /// </summary>
        [PropertyValidate("X板位")]
        public string XSite { get; set; }
        /// <summary>
        /// å•位
        /// </summary>
        [PropertyValidate("单位", NotNullAndEmpty = true)]
        public string Unit { get; set; }
        /// <summary>
        /// å»ºå•日期
        /// yyyy-MM-dd
        /// </summary>
        [PropertyValidate("建单日期", NotNullAndEmpty = true)]
        public string OrderDate { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [PropertyValidate("备注")]
        public string Note { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpProductSpecifyVerDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Attributes;
namespace WIDESEA_DTO.ERP
{
    /// <summary>
    /// æˆå“é”€å”®æŒ‡æ´¾è¡¨
    /// </summary>
    [ModelValidate]
    public class ErpProductSpecifyVerDTO
    {
        /// <summary>
        /// è®¢å•号
        /// </summary>
        [PropertyValidate("订单号", NotNullAndEmpty = true)]
        public string OrderNo { get; set; }
        /// <summary>
        /// æ˜Žç»†è¡Œå·
        /// </summary>
        [PropertyValidate("明细行号", NotNullAndEmpty = true)]
        public int RowId { get; set; }
        /// <summary>
        /// äº§å“ç¼–码
        /// </summary>
        [PropertyValidate("产品编码", NotNullAndEmpty = true)]
        public string PCode { get; set; }
        /// <summary>
        /// äº§å“ç‰ˆæœ¬
        /// </summary>
        [PropertyValidate("产品版本", NotNullAndEmpty = true)]
        public string PVer { get; set; }
        /// <summary>
        /// äº§å“æ‰¹æ¬¡
        /// </summary>
        [PropertyValidate("产品批次", NotNullAndEmpty = true)]
        public string PLot { get; set; }
        /// <summary>
        /// äº§å“å‘¨æœŸ
        /// </summary>
        [PropertyValidate("产品周期")]
        public int DateCode { get; set; }
        /// <summary>
        /// ä»“库类型
        /// HA72=尾数仓、HA71=成品仓、HA73=研发仓
        /// </summary>
        [PropertyValidate("仓库类型", NotNullAndEmpty = true)]
        public string WaType { get; set; }
        /// <summary>
        /// åˆæ ¼PCS数
        /// </summary>
        [PropertyValidate("合格PCS数", NotNullAndEmpty = true)]
        public float QtyPcs { get; set; }
        /// <summary>
        /// æŒ‡æ´¾ç‰ˆæœ¬å·
        /// </summary>
        [PropertyValidate("指派版本号",NotNullAndEmpty =true)]
        public string Ver { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpProductTransferOrderDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Attributes;
namespace WIDESEA_DTO.ERP
{
    /// <summary>
    /// ç ”发成品调入成品仓表
    /// </summary>
    [ModelValidate]
    public class ErpProductTransferOrder
    {
        /// <summary>
        /// è°ƒæ‹¨å•号
        /// </summary>
        [PropertyValidate("调拨单号",NotNullAndEmpty =true)]
        public string TransferNo { get; set; }
        /// <summary>
        /// äº§å“ç¼–码
        /// </summary>
        [PropertyValidate("产品编码", NotNullAndEmpty = true)]
        public string PCode  { get; set; }
        /// <summary>
        /// äº§å“ç‰ˆæœ¬
        /// </summary>
        [PropertyValidate("产品版本", NotNullAndEmpty = true)]
        public string PVer { get; set; }
        /// <summary>
        /// äº§å“å‘¨æœŸ
        /// </summary>
        [PropertyValidate("产品周期")]
        public int DateCode { get; set; }
        /// <summary>
        /// åˆæ ¼PCS数
        /// </summary>
        [PropertyValidate("合格PCS数", NotNullAndEmpty = true)]
        public float QtyPcs { get; set; }
        /// <summary>
        /// X板数
        /// </summary>
        [PropertyValidate("X板数")]
        public float XQty { get; set; }
        /// <summary>
        /// X板位
        /// </summary>
        [PropertyValidate("X板位")]
        public int XSite { get; set; }
        /// <summary>
        /// å•位
        /// </summary>
        [PropertyValidate("单位",NotNullAndEmpty =true)]
        public string Unit { get; set; }
        /// <summary>
        /// å»ºå•日期
        /// yyyy-MM-dd
        /// </summary>
        [PropertyValidate("建单日期",NotNullAndEmpty =true)]
        public string OrderDate { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [PropertyValidate("备注")]
        public string Note { get; set; }
        /// <summary>
        /// é”€å”®è®¢å•号
        /// </summary>
        [PropertyValidate("销售订单号",NotNullAndEmpty =true)]
        public string SaleOrder { get; set; }
        /// <summary>
        /// å®¢æˆ·
        /// </summary>
        [PropertyValidate("客户", NotNullAndEmpty =true)]
        public string Customer { get; set; }
        /// <summary>
        /// å·¥åŽ‚
        /// </summary>
        [PropertyValidate("工厂", NotNullAndEmpty =true)]
        public string FactoryCode { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpProductWarehousingOrderDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,107 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Attributes;
namespace WIDESEA_DTO.ERP
{
    /// <summary>
    /// æˆå“è°ƒå…¥å¾…发货仓表
    /// </summary>
    [ModelValidate]
    public class ErpProductWarehousingOrderDTO
    {
        /// <summary>
        /// è°ƒæ‹¨å•号
        /// </summary>
        [PropertyValidate("调拨单号", NotNullAndEmpty = true)]
        public string TransferNo { get; set; }
        /// <summary>
        /// äº§å“ç¼–码
        /// </summary>
        [PropertyValidate("产品编码", NotNullAndEmpty = true)]
        public string PCode { get; set; }
        /// <summary>
        /// äº§å“ç‰ˆæœ¬
        /// </summary>
        [PropertyValidate("产品版本", NotNullAndEmpty = true)]
        public string PVer { get; set; }
        /// <summary>
        /// äº§å“æ‰¹æ¬¡
        /// </summary>
        [PropertyValidate("产品批次", NotNullAndEmpty = true)]
        public string PLot { get; set; }
        /// <summary>
        /// äº§å“å‘¨æœŸ
        /// </summary>
        [PropertyValidate("产品周期")]
        public int DateCode { get; set; }
        /// <summary>
        /// åˆæ ¼PCS数
        /// </summary>
        [PropertyValidate("合格PCS数", NotNullAndEmpty = true)]
        public float QtyPcs { get; set; }
        /// <summary>
        /// åŒ…装Set数
        /// </summary>
        [PropertyValidate("包装Set数", NotNullAndEmpty = true)]
        public float QtySet { get; set; }
        /// <summary>
        /// X板数
        /// </summary>
        [PropertyValidate("X板数")]
        public float XQty { get; set; }
        /// <summary>
        /// X板位
        /// </summary>
        [PropertyValidate("X板位")]
        public string XSite { get; set; }
        /// <summary>
        /// å•位
        /// </summary>
        [PropertyValidate("单位",NotNullAndEmpty =true)]
        public string Unit { get; set; }
        /// <summary>
        /// å»ºå•日期
        /// yyyy-MM-dd
        /// </summary>
        [PropertyValidate("建单日期",NotNullAndEmpty =true)]
        public string OrderDate { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [PropertyValidate("备注")]
        public string Note { get; set; }
        /// <summary>
        /// é”€å”®è®¢å•号
        /// </summary>
        [PropertyValidate("销售订单号", NotNullAndEmpty = true)]
        public string SaleOrder { get; set; }
        /// <summary>
        /// å®¢æˆ·
        /// </summary>
        [PropertyValidate("客户", NotNullAndEmpty = true)]
        public string Customer { get; set; }
        /// <summary>
        /// å·¥åŽ‚
        /// </summary>
        [PropertyValidate("工厂", NotNullAndEmpty = true)]
        public string FactoryCode { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/MesResponseContent.cs
@@ -28,26 +28,32 @@
        /// <summary>
        /// 
        /// </summary>
        public DateTime DataTime { get; set; }
        public string DataTime { get; set; }
        public static MesResponseContent Instance
        {
            get { return new MesResponseContent(); }
        }
        /// <summary>
        /// è¿”回
        /// </summary>
        public MesResponseContent OK(string message = null)
        {
            BSucc = true;
            StrCode = "0000";
            StrMsg = message == null ? "执行成功" : message;
            DataTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            return this;
        }
        /// <summary>
        /// è¿”回
        /// </summary>
        public MesResponseContent Error(string message = null)
        {
            BSucc = false;
            StrCode = "404";
            StrMsg = message == null ? "执行失败" : message;
            DataTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            return this;
        }
        public ContentMes Content { get; set; }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPMaintainIssueModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_External.Model
{
    /// <summary>
    /// ç»´ä¿®å‘料出库单
    /// </summary>
    public class ERPMaintainIssueModel
    {
        /// <summary>
        /// æ“ä½œç±»åž‹
        /// </summary>
        public int Way { get; set; }
        /// <summary>
        /// ä¸»å¥å€¼
        /// </summary>
        public int UniqueTag { get; set; }
        /// <summary>
        /// å‘料单号
        /// </summary>
        public string Code { get; set; }
        /// <summary>
        /// å‘料时间
        /// </summary>
        public string Createtime { get; set; }
        /// <summary>
        /// å‘料人员
        /// </summary>
        public string Createuser { get; set; }
        /// <summary>
        /// ä»“库编码
        /// </summary>
        public string WarehouseCode { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Remark { get; set; }
        /// <summary>
        ///
        /// </summary>
        public List<ERPItemlist> Itemlist { get; set; }
    }
    public class ERPItemlist
    {
        /// <summary>
        /// å‘料明细行号
        /// </summary>
        public int RowNo { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–码
        /// </summary>
        public string Material { get; set; }
        /// <summary>
        /// ç»´ä¿®å•号
        /// </summary>
        public string Pickno { get; set; }
        /// <summary>
        /// å‘料数量
        /// </summary>
        public string Issueqty { get; set; }
        /// <summary>
        ///
        /// </summary>
        public List<ERPBatchlist> Batchlist { get; set; }
    }
    public class ERPBatchlist {
        /// <summary>
        /// æ‰¹æ¬¡å·
        /// </summary>
        public string Lotno { get; set; }
        /// <summary>
        /// æ•°é‡
        /// </summary>
        public string Qty { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPMaterialSaleReturnModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_External.Model
{
    /// <summary>
    /// ç‰©æ–™é”€å”®é€€è´§å…¥åº“
    /// </summary>
    public class ERPMaterialSaleReturnModel
    {
        /// <summary>
        /// ç±»åž‹
        /// </summary>
        public string Way { get; set; }
        /// <summary>
        /// å•号
        /// </summary>
        public string Code { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPProInboundModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,127 @@
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 ERPProInboundModel
    {
        /// <summary>
        /// æ“ä½œç±»åž‹
        /// </summary>
        public int Way { get; set; }
        /// <summary>
        /// å…¥åº“单号
        /// </summary>
        public string Code { get; set; }
        /// <summary>
        /// åˆ›å»ºäººä»£ç 
        /// </summary>
        public string CreatorCode { get; set; }
        /// <summary>
        /// å…¬å¸ä»£ç 
        /// </summary>
        public string CompanyCode { get; set; } = "HATC";
        /// <summary>
        /// å·¥åŽ‚ä»£å·
        /// </summary>
        public string FactoryCode { get; set; } = "HA02";
        /// <summary>
        /// ä»“库代码
        /// </summary>
        public string WarehouseCode { get; set; }
        /// <summary>
        /// å‚¨ä½ä»£ç 
        /// </summary>
        public string LocationCode { get; set; }
        /// <summary>
        /// å…¥åº“日期
        /// </summary>
        public string StockDate { get; set; }
        /// <summary>
        /// å…¥åº“日期
        /// </summary>
        public string Remark { get; set; }
        /// <summary>
        /// å…¥åº“类型
        /// </summary>
        public string StockFormType { get; set; } = "Production";
        /// <summary>
        /// å…¥åº“明细
        /// </summary>
        public List<ERPProItemsItem> StockFormItems { get; set; }
    }
    /// <summary>
    /// å…¥åº“上报明细
    /// </summary>
    public class ERPProItemsItem
    {
        /// <summary>
        /// äº§å“ç¼–码
        /// </summary>
        public string PartNum { get; set; }
        /// <summary>
        /// äº§å“ç‰ˆæœ¬
        /// </summary>
        public string Rev { get; set; }
        /// <summary>
        /// å‘¨æœŸç 
        /// </summary>
        public string DateCode { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡(入库单号+成品编码+大小版本)mes生成
        /// </summary>
        public string BatchNumber { get; set; }
        /// <summary>
        /// å‰æ¿ä½ç½®
        /// </summary>
        public string XLocation { get; set; }
        /// <summary>
        /// å‰æ¿æ•°
        /// </summary>
        public float Xqty { get; set; }
        /// <summary>
        /// Pnl数量
        /// </summary>
        public float QtyPnl { get; set; }
        /// <summary>
        /// Set数量
        /// </summary>
        public float QtySet { get; set; }
        /// <summary>
        /// Pcs数量
        /// </summary>
        public float QtyPcs { get; set; }
        /// <summary>
        /// å·¥å•明细
        /// </summary>
        public List<ERPProListItem> WoList { get; set; }
    }
    /// <summary>
    /// å…¥åº“工单明细
    /// </summary>
    public class ERPProListItem
    {
        /// <summary>
        /// åˆ¶é€ è®¢å•
        /// </summary>
        public string moNumber { get; set; }
        /// <summary>
        /// å·¥å•
        /// </summary>
        public string WoNumber { get; set; }
        /// <summary>
        /// Pcs数量
        /// </summary>
        public float QtyPcs { get; set; }
        /// <summary>
        /// Set数量
        /// </summary>
        public float QtySet { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPProOutOrderModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
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 ERPProOutOrderModel
    {
        /// <summary>
        /// æ“ä½œç±»åž‹
        /// </summary>
        public int Way { get; set; }
        /// <summary>
        /// å‘料单号
        /// </summary>
        public string StockOutCode { get; set; }
        /// <summary>
        ///库存指派员代码
        /// </summary>
        public string ConfirmedUserNo { get; set; }
        /// <summary>
        /// å‡ºåº“人代码
        /// </summary>
        public string AssignUserNo { get; set; }
        /// <summary>
        /// é€è´§æ—¥æœŸ
        /// </summary>
        public string ShipDate { get; set; }
        /// <summary>
        /// ä»“库代码
        /// </summary>
        public string WarehouseCode { get; set; }
        /// <summary>
        /// è®¡åˆ’出货单号
        /// </summary>
        public string DeliverplanCode { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Remark { get; set; }
        /// <summary>
        /// æ˜Žç»†è¯¦æƒ…
        /// </summary>
        public List<StockOutItemsItem> StockOutItems { get; set; }
    }
    /// <summary>
    /// å‡ºåº“明细
    /// </summary>
    public class StockOutItemsItem
    {
        /// <summary>
        /// äº§å“ç¼–码
        /// </summary>
        public string PartNum { get; set; }
        /// <summary>
        /// ç‰ˆæœ¬
        /// </summary>
        public string Rev { get; set; }
        /// <summary>
        /// é”€å”®è®¢å•号
        /// </summary>
        public string SoNumber { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡å·
        /// </summary>
        public string BatchNumber { get; set; }
        /// <summary>
        /// å¤‡å“æ•°é‡
        /// </summary>
        public float QtyFree { get; set; }
        /// <summary>
        /// PCS数量
        /// </summary>
        public float QtyPcs { get; set; }
        /// <summary>
        /// åŒ…装SET数量
        /// </summary>
        public float QtySet { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPProductCheckModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,187 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_External.Model
{
    /// <summary>
    /// æˆå“é€æ£€
    /// </summary>
    public class ERPProductCheckModel
    {
        /// <summary>
        /// æ“ä½œç±»åž‹
        /// 1 æ–°å¢ž
        /// </summary>
        public int Way { get; set; }
        /// <summary>
        /// WMES主健值
        /// </summary>
        public string UniqueTag { get; set; }
        /// <summary>
        /// æ£€éªŒå•号
        /// </summary>
        public string Code { get; set; }
        /// <summary>
        /// å·¥åŽ‚ä»£å·
        /// </summary>
        public string PlantsCode { get; set; } = "HA02";
        /// <summary>
        /// é€æ£€å•号
        /// </summary>
        public string RecheckCode { get; set; }
        /// <summary>
        /// ç”Ÿäº§åž‹å·
        /// </summary>
        public string PartNum { get; set; }
        /// <summary>
        /// ç‰ˆæœ¬å·
        /// </summary>
        public string PartRev { get; set; }
        /// <summary>
        /// ä»“库代号
        /// "HA72尾数仓、 HA71成品仓、HA73研发仓"
        /// </summary>
        public string WarehouseCode { get; set; }
        /// <summary>
        /// å‚¨ä½ä»£å·
        ///"HA72尾数仓、 HA71成品仓、HA73研发仓"
        /// </summary>
        public string Location { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡å·
        /// </summary>
        public string LotNo { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Node { get; set; }
        /// <summary>
        /// åˆæ ¼PCS数量
        /// </summary>
        public int QtyPcs { get; set; }
        /// <summary>
        /// åˆæ ¼Set数量
        /// </summary>
        public int QtyArray { get; set; }
        /// <summary>
        /// åˆæ ¼PNL数量
        /// </summary>
        public int QtyPanel { get; set; }
        /// <summary>
        /// é€æ£€PCS数量
        /// </summary>
        public int QtyPcsRecieved { get; set; }
        /// <summary>
        /// é€æ£€Set数量
        /// </summary>
        public int QtyArrayRecieved { get; set; }
        /// <summary>
        /// é€æ£€PNL数量
        /// </summary>
        public int QtyPanelRecieved { get; set; }
        /// <summary>
        ///报废Pcs数量
        /// </summary>
        public int QtyPcsScrapped { get; set; }
        /// <summary>
        /// æŠ¥åºŸSet数量
        /// </summary>
        public int QtyArrayScrapped { get; set; }
        /// <summary>
        /// æŠ¥åºŸPNL数量
        /// </summary>
        public int QtyPanelScrapped { get; set; }
        /// <summary>
        ///抽检Pcs数量
        ///如无默认为0
        /// </summary>
        public int QtySample { get; set; }
        /// <summary>
        /// æŽ¥æ”¶æ—¥æœŸ
        /// æ ¼å¼ï¼šyyyy-MM-dd
        /// </summary>
        public string ReceiveDate { get; set; }
        /// <summary>
        /// åˆ›å»ºäººä»£å·
        /// </summary>
        public string CreatorCode { get; set; }
        /// <summary>
        /// æ£€éªŒæ—¥æœŸ
        /// æ ¼å¼ï¼šyyyy-MM-dd
        /// </summary>
        public string TestDate { get; set; }
        /// <summary>
        ///
        /// </summary>
        public List<ERPIqcItem> IqcItem { get; set; }
    }
    public class ERPIqcItem
    {
        /// <summary>
        /// ç¼ºé™·ä»£ç 
        /// </summary>
        public string DefectCode { get; set; }
        /// <summary>
        /// ç»“æžœ
        /// </summary>
        public string Result{ get; set; }
        /// <summary>
        /// æ£€éªŒæ—¥æœŸ
        /// </summary>
        public string TestDate { get; set; }
        /// <summary>
        /// PCS数量
        /// </summary>
        public string QtyPcs { get; set; }
        /// <summary>
        /// Set数量
        /// </summary>
        public string QtyArray { get; set; }
        /// <summary>
        /// PNL数量
        /// </summary>
        public string QtyPanel { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Node { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPScrapSheetModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,101 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_External.Model
{
    /// <summary>
    /// æˆå“æŠ¥åºŸ
    /// </summary>
    public class ERPScrapSheetModel
    {
        /// <summary>
        /// æ“ä½œç±»åž‹
        /// 1 æ–°å¢ž
        /// </summary>
        public int Way { get; set; }
        /// <summary>
        /// ä¸»å¥å€¼
        /// </summary>
        public string UniqueTag { get; set; }
        /// <summary>
        /// æŠ¥åºŸå•号
        /// </summary>
        public string Code { get; set; }
        /// <summary>
        /// æŠ¥åºŸçŠ¶æ€
        /// Valid å·²æ ¸å‡† ï¼ˆé»˜è®¤ï¼‰TOChecked å¾…核准
        /// </summary>
        public string Status { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¥æœŸ
        /// </summary>
        public string Createtime { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public string Createuser { get; set; }
        /// <summary>
        /// ä»“库
        /// "HA72尾数仓、 HA71成品仓、HA73研发仓"
        /// </summary>
        public string WarehouseCode { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Remark { get; set; }
        public List<ERPDataItem> DataItem { get; set; }
    }
    public class ERPDataItemSheet
    {
        /// <summary>
        /// ç”Ÿäº§ç¼–码
        /// </summary>
        public string PartNum { get; set; }
        /// <summary>
        /// ç‰ˆæœ¬
        /// </summary>
        public string PartRev { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Remark { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡å·
        /// </summary>
        public string Lotno { get; set; }
        /// <summary>
        /// æŠ¥åºŸSet数
        /// </summary>
        public int QtyOfArray { get; set; }
        /// <summary>
        /// æŠ¥åºŸPCS数
        /// </summary>
        public int QtyOfUnit { get; set; }
        /// <summary>
        /// æŠ¥åºŸå‰æ¿SET数
        /// </summary>
        public int QtyOfArray_Alloc { get; set; }
        /// <summary>
        /// æŠ¥åºŸå‰æ¿PCS数
        /// </summary>
        public int QtyOfUnit_Alloc { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPStockCheckModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,128 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_External.Model
{
    /// <summary>
    /// æˆå“ç›˜ç‚¹
    /// </summary>
    public class ERPStockCheckModel
    {
        /// <summary>
        /// æ“ä½œç±»åž‹
        /// 1 æ–°å¢ž
        /// </summary>
        public int Way { get; set; }
        /// <summary>
        /// ä¸»å¥å€¼
        /// </summary>
        public string UniqueTag { get; set; }
        /// <summary>
        /// å•据号
        /// </summary>
        public string Code { get; set; }
        /// <summary>
        /// ç›˜ç‚¹åç§°
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// è´¦æœŸå¼€å§‹æ—¶é—´
        /// 2023-01-01 æ ¼å¼
        /// </summary>
        public string FiscalPeriotime { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¥æœŸ
        /// </summary>
        public string Createtime { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public string Createuser { get; set; }
        /// <summary>
        /// ä»“库
        /// "HA72尾数仓、 HA71成品仓、HA73研发仓"
        /// </summary>
        public string WarehouseCode { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Remark { get; set; }
        /// <summary>
        ///
        /// </summary>
        public List<ERPDataItem> DataItem { get; set; }
    }
    public class ERPDataItem {
        /// <summary>
        /// å‚¨ä½ä»£å·
        /// </summary>
        public string Location { get; set; }
        /// <summary>
        /// ç”Ÿäº§ç¼–码
        /// </summary>
        public string PartNum { get; set; }
        /// <summary>
        /// ç‰ˆæœ¬
        /// </summary>
        public string PartRev { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Remark { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡
        /// </summary>
        public string Lotno { get; set; }
        /// <summary>
        /// ç›˜ç‚¹å‰æ¿å•元数
        /// å‰æ¿pcs数
        /// </summary>
        public int QtyOfUnit_Alloc { get; set; }
        /// <summary>
        /// ç›˜ç‚¹äº¤è´§æ¿æ•°
        /// å¥½æ¿Set数
        /// </summary>
        public int QtyOfArray { get; set; }
        /// <summary>
        /// ç›˜ç‚¹å•元数
        /// å¥½æ¿pcs数
        /// </summary>
        public int QtyOfUnit { get; set; }
        /// <summary>
        /// ç³»ç»Ÿåº“存单元数
        /// å¥½æ¿pcs数
        /// </summary>
        public int SysQtyOfUnit { get; set; }
        /// <summary>
        /// ç³»ç»Ÿåº“存板数
        ///好板Set数
        /// </summary>
        public int SysQtyOfArray { get; set; }
        /// <summary>
        /// ç³»ç»Ÿå‰æ¿åº“存单元数
        /// å‰æ¿pcs数
        /// </summary>
        public int SysQtyOfUnit_Alloc { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -248,7 +248,7 @@
        /// <param name="taskNum"></param>
        /// <param name="roadwayNos"></param>
        /// <returns></returns>
        WebResponseContent AssignRoadway(int taskNum, List<string> roadwayNos);
        WebResponseContent AssignRoadway(int taskNum, List<string> roadwayNos, int heightType);
        /// <summary>
        /// 
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesOutboundOrderService.cs
@@ -68,6 +68,7 @@
            }
            List<Dt_StockInfo> autoAssignStocks = _stockService.StockInfoService.GetOutboundStocks(stockInfos, mesOutboundOrder.MaterialCode, needQuantity, out float residueQuantity);
            mesOutboundOrder.LockQuantity += needQuantity - residueQuantity;
            autoAssignStocks.OrderBy(x => x.Details.FirstOrDefault()?.StockQuantity).ToList();
            outStocks.AddRange(autoAssignStocks);
            float assignQuantity = needQuantity - residueQuantity;
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs
@@ -4,6 +4,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.CommonEnum;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.StockEnum;
@@ -192,7 +193,7 @@
        /// <param name="taskNum">任务号</param>
        /// <param name="roadwayNos">巷道号</param>
        /// <returns></returns>
        public WebResponseContent AssignRoadway(int taskNum, List<string> roadwayNos)
        public WebResponseContent AssignRoadway(int taskNum, List<string> roadwayNos, int heightType)
        {
            try
            {
@@ -206,11 +207,29 @@
                {
                    return WebResponseContent.Instance.OK(data: task.TargetAddress);
                }
                List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                string roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
                bool IsBCS = task.PalletType == PalletTypeEnum.SmallPallet.ObjToInt();
                //获取每个巷道1-3层,4层,5层的货位
                List<LocationCount> locationCounts = new List<LocationCount>();
                if (heightType == 1)
                {
                    locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || (IsBCS ? false : x.LocationType == LocationTypeEnum.Undefined.ObjToInt())) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && (IsBCS ? !IsBCS : ("SC01_BC".Contains(x.RoadwayNo) ? x.Column % 2 == 0 : x.Column % 2 == 1)) && x.Layer <= 3 && roadwayNos.Contains(x.RoadwayNo)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                }
                else if(heightType == 2)
                {
                    locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || (IsBCS ? false : x.LocationType == LocationTypeEnum.Undefined.ObjToInt())) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && (IsBCS ? !IsBCS : ("SC01_BC".Contains(x.RoadwayNo) ? x.Column % 2 == 0 : x.Column % 2 == 1)) && x.Layer == 4 && roadwayNos.Contains(x.RoadwayNo)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                }
                else if(heightType == 3)
                {
                    locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || (IsBCS ? false : x.LocationType == LocationTypeEnum.Undefined.ObjToInt())) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && (IsBCS ? !IsBCS : ("SC01_BC".Contains(x.RoadwayNo) ? x.Column % 2 == 0 : x.Column % 2 == 1)) && x.Layer == 5 && roadwayNos.Contains(x.RoadwayNo)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                }
                string roadwayNo=string.Empty;
                foreach (var location in locationCounts.OrderBy(x => x.Count))
                {
                    if (location.Count == 1)
                        continue;
                    roadwayNo = location?.RoadwayNo ?? "";
                    break;
                }
                return !string.IsNullOrEmpty(roadwayNo) ? WebResponseContent.Instance.OK(data: roadwayNo) : WebResponseContent.Instance.Error("未找到可分配巷道");
            }
            catch (Exception ex)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs
@@ -462,7 +462,7 @@
                    OutboundQuantity = 0,
                    SerialNumber = stockInfoDetail_Hty?.SerialNumber ?? "0",
                    StockQuantity = model.Quantity,
                    Status = StockStatusEmun.MES退库.ObjToInt(),
                    Status = model.Quantity <= 0.0 ? StockStatusEmun.MES空托退库.ObjToInt() : StockStatusEmun.MES退库.ObjToInt(),
                    Unit = model.Unit
                };
                Dt_StockInfo stockInfo = new Dt_StockInfo()
@@ -470,8 +470,9 @@
                    PalletCode = model.CarrierCode,
                    PalletType = palletTypeInfo.PalletType,
                    WarehouseId = warehouse.WarehouseId,
                    StockStatus = StockStatusEmun.MES退库.ObjToInt(),
                    Details = new List<Dt_StockInfoDetail> { stockInfoDetail }
                    StockStatus = stockInfoDetail.StockQuantity<=0.0? StockStatusEmun.MES空托退库.ObjToInt():StockStatusEmun.MES退库.ObjToInt(),
                    Details = new List<Dt_StockInfoDetail> { stockInfoDetail },
                    Remark= stockInfoDetail.StockQuantity <= 0.0 ? StockStatusEmun.MES空托退库.ToString() : StockStatusEmun.MES退库.ToString()
                };
                //Dt_Task task = new Dt_Task()
                //{
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -180,7 +180,17 @@
                {
                    return WebResponseContent.Instance.Error($"未找到该托盘库存明细信息");
                }
                #region ç©ºæ‰˜é€€åº“
                if (task.TaskType == TaskTypeEnum.MesPalletReturn.ObjToInt())
                {
                    _unitOfWorkManage.BeginTran();
                    BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成);
                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                    _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                    _unitOfWorkManage.CommitTran();
                    return WebResponseContent.Instance.OK();
                }
                #endregion
                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
                if (locationInfo == null)
                {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs
@@ -396,7 +396,7 @@
                {
                    return WebResponseContent.Instance.Error($"未找到组盘信息");
                }
                if (stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.手动组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.出库完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.拣选完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.退库.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES退库.ObjToInt())
                if (stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.手动组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.出库完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.拣选完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.退库.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES退库.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES空托退库.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"该托盘状态不正确,不可申请入库");
                }
@@ -429,6 +429,12 @@
                {
                    newTask.TaskType = TaskTypeEnum.MesMatReturn.ObjToInt();
                }
                else if (stockInfo.StockStatus == StockStatusEmun.MES空托退库.ObjToInt())
                {
                    //todo æš‚时未启用
                    return WebResponseContent.Instance.Error($"空托未启用");
                    //newTask.TaskType = TaskTypeEnum.MesPalletReturn.ObjToInt();
                }
                else
                {
                    stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt();
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs
@@ -144,6 +144,14 @@
                (List<Dt_StockInfo>, Dt_OutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutboundOrderDetailService.AssignStockOutbound(outboundOrderDetail, stockSelectViews);
                if (result.Item1 != null && result.Item1.Count > 0)
                {
                    Dt_OutboundOrder outboundOrder = _outboundService.OutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetail.OrderId);
                    TaskTypeEnum typeEnum = outboundOrder.OrderType switch
                    {
                        (int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound,
                        (int)OutOrderTypeEnum.Allocate => TaskTypeEnum.OutAllocate,
                        (int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality,
                        _ => new TaskTypeEnum()
                    };
                    tasks = GetTasks(result.Item1, TaskTypeEnum.Outbound);
                    result.Item2.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                    result.Item3.ForEach(x =>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -266,9 +266,9 @@
        /// <param name="roadwayNos"></param>
        /// <returns></returns>
        [HttpPost, Route("AssignRoadway"), AllowAnonymous]
        public WebResponseContent AssignRoadway(int taskNum, [FromBody] List<string> roadwayNos)
        public WebResponseContent AssignRoadway(int taskNum, [FromBody] List<string> roadwayNos,int heightType)
        {
            return Service.AssignRoadway(taskNum, roadwayNos);
            return Service.AssignRoadway(taskNum, roadwayNos, heightType);
        }
        /// <summary>