| | |
| | | { |
| | | public partial class CommonFunction |
| | | { |
| | | private readonly static object _locker = new object(); |
| | | |
| | | public static List<LocationCache> locationCaches = new List<LocationCache>(); |
| | | |
| | | public class LocationCache |
| | | { |
| | | public string LocationCode { get; set; } |
| | | |
| | | public DateTime DateTime { get; set; } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ç»å
¥åºè¯·æ±åé
è´§ä½ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static Dt_locationinfo GetEmptyLocationAction(int? Gznumber = 0) |
| | | { |
| | | lock (_locker) |
| | | { |
| | | List<LocationCache> removeItems = locationCaches.Where(x => (DateTime.Now - x.DateTime).TotalMinutes > 5).ToList();//æ¥è¯¢æ·»å éæåéè¶
è¿10åéçè´§ä½ |
| | | int count = removeItems.Count; |
| | | for (int i = 0; i < count; i++) |
| | | { |
| | | locationCaches.Remove(removeItems[i]);//ç§»é¤æ¥è¯¢æ·»å éæåéè¶
è¿5åéçè´§ä½ |
| | | } |
| | | |
| | | List<string> lockLocations = locationCaches.Select(x => x.LocationCode).ToList(); |
| | | |
| | | |
| | | |
| | | List<string> locationId = new List<string>(); |
| | | //åºåºä»»å¡ |
| | | List<Dt_taskinfo> currentTask = Dt_taskinfoRepository.Instance.Find(r => r.task_type.Contains("Out")); |
| | |
| | | } |
| | | else if (Gznumber == 2) |
| | | { |
| | | List<Dt_taskinfo> outbound = Dt_taskinfoRepository.Instance.Find(x => |
| | | x.task_beginstation == "90101" |
| | | ); |
| | | List<Dt_taskinfo> outbound = Dt_taskinfoRepository.Instance.Find(x => x.task_beginstation == "90101"); |
| | | foreach (var item in outbound) |
| | | { |
| | | string[] location = item.task_tolocationid.Split('-'); |
| | |
| | | } |
| | | else |
| | | { |
| | | List<Dt_taskinfo> inboundTask = Dt_taskinfoRepository.Instance.Find(r => r.task_type.Contains("Inbound")); |
| | | 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]); |
| | | LogRecord.WriteLog((int)LogEnum.InBound, $"åé
任塿¶ï¼æå
¥åºä»»å¡éè¦å é¤çå±ï¼{layer}ï¼å½åå±è´§ä½ç¼å·ï¼{item.ToJson()},å½åç°æä»»å¡{inboundTask.ToJson()}"); |
| | | listLayer.Remove(layer); |
| | | throw new Exception("è·ååºä½ç±»åä¸å¹é
"); |
| | | } |
| | | } |
| | | } |
| | | List<Dt_taskinfo> 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()); |
| | | |
| | | if (null != outboundTask && outboundTask.Count > 0) |
| | | { |
| | | List<string> 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]); |
| | | LogRecord.WriteLog((int)LogEnum.InBound, $"åé
任塿¶ï¼æå
¥åºä»»å¡éè¦å é¤çå±ï¼{layer}ï¼å½åå±è´§ä½ç¼å·ï¼{item.ToJson()},å½åç°æä»»å¡{outboundTask.ToJson()}"); |
| | | listLayer.Remove(layer); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | List<int> rgvLayer = new List<int>(); |
| | | WebResponseContent resultcontent = RGVAPIInvokeGetRgvInfo.GetRgvInfo(); |
| | |
| | | } |
| | | |
| | | |
| | | List<Dt_locationinfo> LocationList = Dt_locationinfoRepository.Instance.Find(x => x.location_state == LocationState.LocationState_Empty.ToString() |
| | | && !x.location_islocked && !lockLocations.Contains(x.location_id)); |
| | | |
| | | |
| | | |
| | | if (locationId.Count > 0) |
| | | { |
| | | //ä¼å
åé
ç©¿æ¢è½¦çå± |
| | | 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) && !locationId.Contains(x.location_id)).OrderBy(x => x.location_layer) |
| | | locationinfo = LocationList.Where(x => rgvLayer.Contains(x.location_layer) && !locationId.Contains(x.location_id)).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) && !locationId.Contains(x.location_id)).OrderBy(x => x.location_layer) |
| | | locationinfo = LocationList.Where(x => listLayer.Contains(x.location_layer) && !locationId.Contains(x.location_id)).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) && !locationId.Contains(x.location_id)).OrderBy(x => x.location_layer) |
| | | locationinfo = LocationList.Where(x => listLayer.Contains(x.location_layer) && !locationId.Contains(x.location_id)).OrderBy(x => x.location_layer) |
| | | .ThenBy(x => x.location_column).FirstOrDefault(); |
| | | |
| | | if (null != locationinfo) |
| | | { |
| | | locationCaches.Add(new LocationCache { DateTime = DateTime.Now, LocationCode = locationinfo.location_id }); |
| | | 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(); |
| | | locationinfo = LocationList.Where(x => 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(); |
| | | locationinfo = LocationList.Where(x => 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(); |
| | | locationinfo = LocationList.Where(x => listLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer).ThenBy(x => x.location_column).FirstOrDefault(); |
| | | |
| | | if (null != locationinfo) |
| | | { |
| | | locationCaches.Add(new LocationCache { DateTime = DateTime.Now, LocationCode = locationinfo.location_id }); |
| | | return locationinfo; |
| | | } |
| | | } |
| | | |
| | | if (locationinfo == null) |
| | | { |
| | | 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(); |
| | | locationinfo = LocationList.Where(x => listLayer.Contains(x.location_layer)).OrderBy(x => x.location_layer).ThenBy(x => x.location_column).FirstOrDefault(); |
| | | if (null != locationinfo) |
| | | { |
| | | locationCaches.Add(new LocationCache { DateTime = DateTime.Now, LocationCode = locationinfo.location_id }); |
| | | return locationinfo; |
| | | } |
| | | |
| | | } |
| | | throw new Exception("ææ è´§ä½å¯åé
"); |
| | | } |
| | | } |
| | | } |
| | | } |