public IActionResult GetAll([FromQuery] UnitQueryFilter filters) { var units = _unitService.GetUnits(filters); var unitsDto = _mapper.Map <IEnumerable <UnitsHubDto> >(units); var metadata = new Metadata { TotalCount = units.TotalCount, PageSize = units.PageSize, CurrentPage = units.CurrentPage, TotalPages = units.TotalPages, HasNextPage = units.HasNextPage, HasPreviousPage = units.HasPreviousPage, NextPageUrl = _uriService.GetPaginationUri(Url.RouteUrl(nameof(GetAll))).ToString(), PreviousPageUrl = _uriService.GetPaginationUri(Url.RouteUrl(nameof(GetAll))).ToString() }; var response = new ApiResponse <IEnumerable <UnitsHubDto> >(unitsDto) { Meta = metadata }; return(Ok(response)); }
public PagedList <Unit> GetUnits(UnitQueryFilter filters) { filters.PageNumber = filters.PageNumber == 0 ? _paginationOptions.DefaultPageNumber : filters.PageNumber; filters.PageSize = filters.PageSize == 0 ? _paginationOptions.DefaultPageSize : filters.PageSize; var units = _unitOfWork.UnitRepository.GetAll().ToList(); if (!String.IsNullOrEmpty(filters.Name)) { units = units.Where(x => x.Name.ToLower().Contains(filters.Name.ToLower())).ToList(); } if (filters.OrganizationId.HasValue) { units = units.Where(x => x.Facility.OrganizationId == filters.OrganizationId.Value).ToList(); } if (filters.FacilityId.HasValue) { units = units.Where(x => x.FacilityId == filters.FacilityId).ToList(); } if (filters.SuinNumber.HasValue) { units = units.Where(x => x.Suin == filters.SuinNumber.Value).ToList(); } if (filters.Health.HasValue) { units = units.Where(x => x.SystemStatus.OrderByDescending(y => y.Date).FirstOrDefault().Health == filters.Health.Value).ToList(); } var pagedUnits = PagedList <Unit> .Create(units, filters.PageNumber, filters.PageSize); return(pagedUnits); }
//艦娘タブの初期化 public void Init() { if (!(this.FindForm() as WeifenLuo.WinFormsUI.Docking.DockContent).IsHandleCreated) { return; } //変数の設定 label_unit_num = new Label[] { label_unit_num_1, label_unit_num_2, label_unit_num_3 }; label_unit_time = new Label[] { label_unit_time_1, label_unit_time_2, label_unit_time_3, label_unit_time_4 }; //メニューアイテムの作成 MenuItemQuery = new ToolStripMenuItem[8][]; foreach (int i in Enumerable.Range(0, MenuItemQuery.Length)) MenuItemQuery[i] = new ToolStripMenuItem[KancolleInfoUnitList.QueriesMax / MenuItemQuery.Length]; foreach(int i in Enumerable.Range(0, KancolleInfoUnitList.QueriesMax)) { ToolStripMenuItem item = new ToolStripMenuItem() { Text = string.Format("({0})", i), Tag = i, }; MenuItemQuery[i / MenuItemQuery[0].Length][i % MenuItemQuery[0].Length] = item; } toolStripMenuItem_q1.DropDownItems.AddRange(MenuItemQuery[0]); toolStripMenuItem_q2.DropDownItems.AddRange(MenuItemQuery[1]); toolStripMenuItem_q3.DropDownItems.AddRange(MenuItemQuery[2]); toolStripMenuItem_q4.DropDownItems.AddRange(MenuItemQuery[3]); toolStripMenuItem_q5.DropDownItems.AddRange(MenuItemQuery[4]); toolStripMenuItem_q6.DropDownItems.AddRange(MenuItemQuery[5]); toolStripMenuItem_q7.DropDownItems.AddRange(MenuItemQuery[6]); toolStripMenuItem_q8.DropDownItems.AddRange(MenuItemQuery[7]); //自動更新 toolStripMenuItem_autorefresh.Click += new EventHandler(toolStripMenuItem_autorefresh_Click); if(!Config.TabKanmusuAutoRefreshDisable) toolStripMenuItem_autorefresh.PerformClick(); //クエリの初期化 UsingQuery = new UnitQuery(); //フィルターの初期化 UsingFilter = new UnitQueryFilter(); InitFinished = true; }
//フィルタリング(入渠時間計算用) private static bool Filtering(ApiShip oship, UnitQueryFilter filter) { //入渠時間が一定以上か bool ndock_timeover = filter.NotShowOverThresholdHour && TimeSpan.FromMilliseconds(oship.api_ndock_time).TotalHours >= filter.ThresholdHour; //小破以上か var hpcond = oship.GetHPCondition(false, false, Config.BucketHPRatio, APIGetMember.SlotItemsDictionary) & ~HPCondition.EraseFlagsMagicNumber; bool small_damage = filter.NotShowSmallDamage && ((int)hpcond <= (int)HPCondition.SmallDamage); return (!ndock_timeover) && (!small_damage); }
// public static void RefreshRepairTime(System.Windows.Forms.Label[] label_num, System.Windows.Forms.Label[] label_repair, IEnumerable<ApiShip> queried, UnitQueryFilter filter) { if (queried == null || queried.Count() == 0) return; //入渠時間の計算 //クエリのさらなる絞り込み var query_ndock = from s in queried where Filtering(s, filter) select s; //入渠時間の合計 long sum_bath = 0; foreach (ApiShip s in query_ndock) sum_bath += s.api_ndock_time; //出力アイテム TimeSpan[] result = new TimeSpan[4]; result[0] = TimeSpan.FromMilliseconds(sum_bath); result[1] = TimeSpan.FromMilliseconds(sum_bath / 2); result[2] = TimeSpan.FromMilliseconds(sum_bath / 3); result[3] = TimeSpan.FromMilliseconds(sum_bath / 4); //入渠時間のセット for (int i = 0; i < result.Length; i++) { CallBacks.SetLabelText(label_repair[i], TimeSpanToString(result[i])); } }
//実行 public static void DoIt(System.Windows.Forms.Label[] label_num, System.Windows.Forms.Label[] label_repair, System.Windows.Forms.ListView listview, IEnumerable<ApiShip> queried, UnitQueryFilter filter) { //メインかどうかのフラグ bool mainflag = label_num != null && label_repair != null; if (APIPort.ShipsDictionary == null || (!mainflag && queried == null)) return; //艦隊配置のID var fleetassignships = from d in APIPort.DeckPorts from s in d.api_ship where s != -1 select s; //リストビューのアイテムの取得 int n = queried.Count(); string[][] item_str = new string[n][]; int cnt = 0; foreach(var s in queried) { bool assign_flag; if (filter.NotShowStar) assign_flag = false; else assign_flag = Enumerable.Contains(fleetassignships, s.api_id); item_str[cnt] = ToListViewItem(s, assign_flag); cnt++; } //リストビューのアイテムの更新 SetListViewItems(listview, item_str, queried); //ラベルがNULLの場合はここで終わり if (!mainflag) return; //キラキラの艦数 var query_cond = from s in queried where s.api_cond >= 50 select s; CallBacks.SetLabelText(label_num[0], query_cond.Count().ToString()); //中破以上の艦数 var conditions = queried.Select(x => x.GetHPCondition(false, false, Config.BucketHPRatio, APIGetMember.SlotItemsDictionary) & ~HPCondition.EraseFlagsMagicNumber); var query_middleover = conditions.Where(x => (x == HPCondition.HeavyDamage || x == HPCondition.MiddleDamage)); CallBacks.SetLabelText(label_num[1], query_middleover.Count().ToString()); //小破の艦数 var query_small = conditions.Where(x => x == HPCondition.SmallDamage); CallBacks.SetLabelText(label_num[2], query_small.Count().ToString()); //件数 //入渠時間の計算 RefreshRepairTime(label_num, label_repair, queried, filter); }