using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Comm; using WIDESEA_Comm.LogInfo; using WIDESEA_Core.EFDbContext; using WIDESEA_Entity.DomainModels; using WIDESEA_WMS.IRepositories; using WIDESEA_WMS.Repositories; using static System.Collections.Specialized.BitVector32; namespace WIDESEA_WMS.Common { public class GetStation { /// /// 当前库位同一行是否存在入库占用 /// true:是 false:否 /// /// /// public static bool InBusyStation(string StationCode) { bool OK = false; try { VOLContext Context = new VOLContext(); Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); var station = stationinfoRepository.Find(x => x.stationCode == StationCode).FirstOrDefault(); OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.location_state == LocationStateEnum.InBusy.ToString()).Any(); } catch (Exception ex) { } return OK; } /// /// 当前库位同一行是否存在出库占用 /// true:是 false:否 /// /// /// public static bool OutBusyStation(string StationCode) { bool OK = false; try { VOLContext Context = new VOLContext(); Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); var station = stationinfoRepository.Find(x => x.stationCode == StationCode).FirstOrDefault(); OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.location_state == LocationStateEnum.OutBusy.ToString()).Any(); } catch (Exception ex) { } return OK; } /// /// 当前库位外边的货位是否都为空 /// true:否 false:是 /// /// /// public static bool QueueStation(string StationCode) { bool OK = false; try { VOLContext Context = new VOLContext(); Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); var station = stationinfoRepository.Find(x => x.stationCode == StationCode).FirstOrDefault(); if (station.area == "10" || station.area == "11") { OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column < station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any(); } else { OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column > station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any(); } } catch (Exception ex) { } return OK; } /// /// 找可入库空托位 /// public static void EmptyStation() { try { VOLContext Context = new VOLContext(); Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); Idt_agvtaskRepository agvtaskService = new dt_agvtaskRepository(Context); var Stations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.quantity == 5 && x.enable).ToList(); foreach (var Station in Stations) { var area = Station.tray_type == "SmallTray" ? "11" : "10"; } } catch (Exception ex) { } } /// /// 查找当前行可入库空货位 /// /// /// /// public static dt_stationinfo Station(dt_stationinfo EmptyStation, Idt_stationinfoRepository stationinfoRepository) { dt_stationinfo stationinfo = null; try { if (stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.location_state.Contains("Busy")).Any()) return stationinfo; stationinfo = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.quantity > 0 && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); if (stationinfo != null) if (stationinfo.quantity < 5) return stationinfo; stationinfo = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.column).FirstOrDefault(); } catch (Exception ex) { } return stationinfo; } /// /// 空托可入库货位 /// /// /// public static dt_stationinfo EmptyPalletStation1(string area) { dt_stationinfo stationinfo = null; try { VOLContext Context = new VOLContext(); Idt_agvtaskRepository agvtaskService = new dt_agvtaskRepository(Context); Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); #region 空托库区占用入AB库区 if (stationinfoRepository.Find(x => x.area == area && x.enable && x.location_state == LocationStateEnum.Busy.ToString()).Any() || stationinfoRepository.Find(x => x.stationCode == "A01001001" && x.quantity == 5 && x.location_state == LocationStateEnum.Stroge.ToString()).Any()) { #region 查找AB库可入空托空货位 if (area == "11") { #region MyRegion var EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3") && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderByDescending(x => x.area).ThenByDescending(x => x.line).ThenByDescending(x => x.column).FirstOrDefault(); #endregion if (EmptyStation == null) EmptyStation = stationinfoRepository.Find(x => x.location_state == LocationStateEnum.Busy.ToString() && (x.area == "2" || x.area == "3") && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderByDescending(x => x.area).ThenByDescending(x => x.line).ThenByDescending(x => x.column).FirstOrDefault(); #region 查找库区2和库区3的空托货位 if (EmptyStation != null) { stationinfo = Station(EmptyStation, stationinfoRepository); if (stationinfo != null) if (!QueueStation(stationinfo.stationCode)) return stationinfo; EmptyStation = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); if (EmptyStation.quantity != 5) return null; } #endregion #region 未找到空托货位或当前行已满,寻找新的一行 stationinfo = stationinfoRepository.Find(x => x.column == 2 && x.area == "3" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.line).FirstOrDefault(); if (stationinfo == null) stationinfo = stationinfoRepository.Find(x => x.column == 1 && x.area == "2" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.line).FirstOrDefault(); #endregion } #endregion } else { stationinfo = stationinfoRepository.Find(x => x.area == area && x.quantity > 0 && x.enable).OrderBy(x => x.column).FirstOrDefault(); if (stationinfo != null) if (!QueueStation(stationinfo.stationCode) && stationinfo.quantity < 5) return stationinfo; stationinfo = stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); } #endregion #region 空托库区满后入AB库区 //#region 查找AB库可入空托空货位 //if (area == "11" && stationinfoRepository.Find(x => x.stationCode == "A01001001" && x.quantity == 5 && x.location_state == LocationStateEnum.Stroge.ToString()).Any()) //{ // #region MyRegion // var EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3") && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderByDescending(x => x.area).ThenByDescending(x => x.line).ThenByDescending(x => x.column).FirstOrDefault(); // #endregion // if (EmptyStation == null) // EmptyStation = stationinfoRepository.Find(x => x.location_state == LocationStateEnum.Busy.ToString() && (x.area == "2" || x.area == "3") && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderByDescending(x => x.area).ThenByDescending(x => x.line).ThenByDescending(x => x.column).FirstOrDefault(); // #region 查找库区2和库区3的空托货位 // //var EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3") // // && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderByDescending(x => x.lastUpdateTime).FirstOrDefault(); // if (EmptyStation != null) // { // stationinfo = Station(EmptyStation, stationinfoRepository); // if (stationinfo != null) // if (!QueueStation(stationinfo.stationCode)) return stationinfo; // EmptyStation = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); // if (EmptyStation.quantity != 5) return null; // } // #endregion // #region 未找到空托货位或当前行已满,寻找新的一行 // stationinfo = stationinfoRepository.Find(x => x.column == 2 && x.area == "3" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.line).FirstOrDefault(); // if (stationinfo == null) // stationinfo = stationinfoRepository.Find(x => x.column == 1 && x.area == "2" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.line).FirstOrDefault(); // #endregion //} //#endregion //#region 查找空托库区 //else //{ // if (stationinfoRepository.Find(x => x.area == area && x.enable && x.location_state == LocationStateEnum.Busy.ToString()).Any()) return stationinfo; // stationinfo = stationinfoRepository.Find(x => x.area == area && x.quantity > 0 && x.enable).OrderBy(x => x.column).FirstOrDefault(); // if (stationinfo != null) // if (!QueueStation(stationinfo.stationCode) && stationinfo.quantity < 5) return stationinfo; // stationinfo = stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); //} //#endregion #endregion #region 查看当前空货位后是否存在有料 if (stationinfo != null) if (GetStation.QueueStation(stationinfo.stationCode)) stationinfo = null; #endregion #region 判断当前货位是否存在任务 if (stationinfo != null) if (agvtaskService.Find(x => x.agv_toaddress == stationinfo.stationCode).Any()) stationinfo = null; #endregion } catch (Exception ex) { throw; } return stationinfo; } /// /// 空托可入库货位 /// /// /// public static dt_stationinfo EmptyPalletStation(string area) { dt_stationinfo stationinfo = null; try { VOLContext Context = new VOLContext(); Idt_agvtaskRepository agvtaskService = new dt_agvtaskRepository(Context); Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); #region 查找空托盘库区 if (stationinfoRepository.Find(x => x.stationCode == "A01001001" && x.quantity == 5 && x.location_state == LocationStateEnum.Stroge.ToString()).Any()) { var EmptyStation = stationinfoRepository.Find(x => x.stationCode == "C01005002" && x.location_state == LocationStateEnum.Empty.ToString()).FirstOrDefault(); if (EmptyStation != null) { if (!stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state != LocationStateEnum.Empty.ToString()).Any()) return EmptyStation; } EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.stationCode == "C01005002" && x.location_state == "Stroge" && x.tray_status == "EmptyTray" && x.enable).FirstOrDefault(); if (EmptyStation != null) stationinfo = Station(EmptyStation, stationinfoRepository); if (stationinfo != null) return stationinfo; EmptyStation = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); if (EmptyStation.quantity == 5) { EmptyStation = stationinfoRepository.Find(x => x.stationCode == "C01004002" && x.location_state == LocationStateEnum.Empty.ToString()).FirstOrDefault(); if (EmptyStation != null) { if (!stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state != LocationStateEnum.Empty.ToString()).Any()) return EmptyStation; } EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.stationCode == "C01004002" && x.location_state == "Stroge" && x.tray_status == "EmptyTray" && x.enable).FirstOrDefault(); if (EmptyStation != null) stationinfo = Station(EmptyStation, stationinfoRepository); } } else { if (stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Busy.ToString()).Any()) return stationinfo; stationinfo = stationinfoRepository.Find(x => x.area == area && x.quantity > 0 && x.enable).OrderBy(x => x.column).FirstOrDefault(); if (stationinfo != null) if (stationinfo.quantity < 5) return stationinfo; stationinfo = stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); } #endregion #region 判断当前货位是否存在任务 if (stationinfo != null) if (agvtaskService.Find(x => /*x.agv_fromaddress == stationinfo.stationCode ||*/ x.agv_toaddress == stationinfo.stationCode).Any()) stationinfo = null; #endregion } catch (Exception ex) { throw; } return stationinfo; } } }