using System; using System.Collections.Generic; using System.Linq; using System.Text; using WIDESEA.Common; using WIDESEA.Core.Utilities; using WIDESEA.Entity.DomainModels; using WIDESEA.Services.Repositories; using WIDESEA_Entity.CustomModels.RGVModel; using WIDESEA_Services.Services.APIInvoke.RGV; using static WIDESEA_Entity.CustomModels.RGVModel.RgvDeviceStatusModel; namespace WIDESEA.Services.Services { public partial class CommonFunction { /// /// 给入库请求分配货位 /// /// public static Dt_locationinfo GetEmptyLocationAction() { List locationId = new List(); //出库任务 List currentTask = Dt_taskinfoRepository.Instance.Find(r => r.task_type.Contains("Out")); if (null != currentTask && currentTask.Count > 0) locationId = currentTask.Select(r => r.task_fromlocationid).ToList(); //入库任务 Dt_locationinfo locationinfo = null; List inboundTask = Dt_taskinfoRepository.Instance.Find(r => r.task_type.Contains("Inbound")); List listLayer = new List() { 1, 2, 3, 4, 5, 6, 7, 8 }; if (null != inboundTask && inboundTask.Count > 0) { foreach (var item in inboundTask) { //如果取货完成,可以分配 if (string.IsNullOrEmpty(item.task_bak_2) || !"2".Equals(item.task_bak_2)) { string[] location = item.task_tolocationid.Split('-'); //获取当前有任务的层 int layer = int.Parse(location[0]); listLayer.Remove(layer); } } //List fromStation = inboundTask.Select(r => r.task_tolocationid).ToList(); //foreach (var item in fromStation) //{ // string[] location = item.Split('-'); // //获取当前有任务的层 // int layer = int.Parse(location[0]); // listLayer.Remove(layer); //} } List outboundTask = Dt_taskinfoRepository.Instance.Find(r => (r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString() && //r.task_type.Contains("Out") && (r.task_state.Equals(TaskState.TaskState_RGV_Received.ToString()) || r.task_state.Equals(TaskState.TaskState_RGV_Finished.ToString()))) || r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString()); if (null != outboundTask && outboundTask.Count > 0) { List fromStation = outboundTask.Select(r => r.task_fromlocationid).ToList(); foreach (var item in fromStation) { string[] location = item.Split('-'); //获取当前有任务的层 int layer = int.Parse(location[0]); listLayer.Remove(layer); } } List rgvLayer = new List(); WebResponseContent resultcontent = RGVAPIInvokeGetRgvInfo.GetRgvInfo(); if (resultcontent.Status) { RgvDeviceStatusModel rgvData = (RgvDeviceStatusModel)resultcontent.Data; //0离线 1正常 2故障 for (int i = 0; i < rgvData.data.Count(); i++) { Info _info = rgvData.data[i]; if (_info.status == 1 && listLayer.Contains(_info.layer)) { rgvLayer.Add(_info.layer); } } } if (locationId.Count > 0) { //优先分配穿梭车的层 if (rgvLayer.Count > 0) { locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString() && !locationId.Contains(x.location_id) && !x.location_islocked && rgvLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer) .ThenBy(x => x.location_column).FirstOrDefault(); if (null != locationinfo) return locationinfo; else locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString() && !locationId.Contains(x.location_id) && !x.location_islocked && listLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer) .ThenBy(x => x.location_column).FirstOrDefault(); } else locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString() && !locationId.Contains(x.location_id) && !x.location_islocked && listLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer) .ThenBy(x => x.location_column).FirstOrDefault(); if (null != locationinfo) return locationinfo; } else { if (rgvLayer.Count > 0) { locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString() && !x.location_islocked && rgvLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer).ThenBy(x => x.location_column).FirstOrDefault(); if (null != locationinfo) return locationinfo; else locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString() && !x.location_islocked && listLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer).ThenBy(x => x.location_column).FirstOrDefault(); } else locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString() && !x.location_islocked && listLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer).ThenBy(x => x.location_column).FirstOrDefault(); if (null != locationinfo) return locationinfo; } //Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString() && //!locationId.Contains(x.location_id) && !x.location_islocked).OrderBy(x => x.location_layer).ThenBy(x => x.location_column).FirstOrDefault(); //if (null != locationinfo) // return locationinfo; throw new Exception("暂无货位可分配"); } } }