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 }; //// 更改获取货位的信息 这里要写一个循环 //List outboundTask_temp = Dt_taskinfoRepository.Instance.Find(x => x.task_tolocationid == "10301" || x.task_endstation == "10301"); //if (outboundTask_temp != null) //{ // string temp_layer = ""; // foreach (var item in outboundTask_temp) // { // } //} 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 outboundTask = Dt_taskinfoRepository.Instance.Find(r => ((r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString()) // && (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()); List outboundTask = Dt_taskinfoRepository.Instance.Find(r => ((r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString()) && (r.task_state == TaskState.TaskState_RGV_Received.ToString() || r.task_state == TaskState.TaskState_RGV_Finished.ToString())) || r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString()); //List outboundTask = Dt_taskinfoRepository.Instance.Find(r =>(r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString() || r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString()) //&& (r.task_state != TaskState.TaskState_Create.ToString())); //if (outboundTask.Count < 3) //{ // int crtacount = 3 - outboundTask.Count; // List outboundcCrteateTask = Dt_taskinfoRepository.Instance.Find(r => r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString() //&& r.task_state == TaskState.TaskState_Create.ToString()).OrderBy(r=>r.task_createtime).Take(crtacount).ToList(); // outboundTask.AddRange(outboundcCrteateTask); //} if (null != outboundTask && outboundTask.Count > 0) { List fromStation = outboundTask.Where(r=>r.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString()).Select(r => r.task_fromlocationid).ToList(); fromStation.AddRange(outboundTask.Where(r => r.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString()).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 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; } throw new Exception("暂无货位可分配"); } } }