Example #1
0
        public IActionResult Type(string id, [FromQuery] bool?includeRetire, AircraftModel model)
        {
            id = id?.ToUpper();

            string typeName;

            typeName = _context.Type.AsNoTracking().FirstOrDefault(p => p.TypeCode == id)?.TypeName;

            model.Title   = typeName ?? "all";
            model.TableId = id ?? "all";
            model.api     = "/api/type/" + id;

            //全機退役かどうか確認
            int operatingCount = _context.AircraftView.AsNoTracking().Where(p => p.TypeCode == id && p.OperationCode != OperationCode.RETIRE_UNREGISTERED).Count();

            if (operatingCount == 0 && !includeRetire.HasValue)
            {
                //全機退役済みなら強制的に退役済みを表示
                model.IncludeRetire = true;
                model.IsAllRetire   = true;
            }
            else
            {
                model.IncludeRetire = includeRetire.HasValue ? includeRetire.Value : false;
            }

            model.IsAdmin = CookieUtil.IsAdmin(HttpContext);

            return(View("~/Views/Aircraft/index.cshtml", model));
        }
Example #2
0
        public IActionResult Error()
        {
            var            ex    = HttpContext.Features.Get <IExceptionHandlerPathFeature>().Error;
            ErrorViewModel model = new ErrorViewModel {
                RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier
            };

            model.IsAdmin = CookieUtil.IsAdmin(HttpContext);
            model.Ex      = ex;

            LineUtil.PushMe($"【エラー発生】\n" +
                            $"{ex.ToString().Split(Environment.NewLine)[0]}\n" +
                            $"{ex.ToString().Split(Environment.NewLine)[1]}", HttpClientManager.GetInstance());

            Log log = new Log
            {
                LogDate     = DateTime.Now
                , LogType   = LogType.EXCEPTION
                , LogDetail = ex.ToString()
                , UserId    = CookieUtil.IsAdmin(HttpContext).ToString()
            };

            _context.Log.Add(log);
            _context.SaveChanges();

            return(View(model));
        }
Example #3
0
        public IActionResult WorkingCheck(int?interval)
        {
            if (!CookieUtil.IsAdmin(HttpContext))
            {
                return(NotFound());
            }

            if (jafleet.WorkingCheck.Processing)
            {
                LineUtil.PushMe("WorkingCheck 二重起動を検出", HttpClientManager.GetInstance());
                return(Content("Now Processing!!"));
            }

            _ = Task.Run(() =>
            {
                using (var serviceScope = _services.CreateScope())
                {
                    IEnumerable <AircraftView> targetReg;
                    using (var context = serviceScope.ServiceProvider.GetService <jafleetContext>())
                    {
#if DEBUG
                        targetReg = context.AircraftView.Where(a => a.RegistrationNumber == "JA26LR").AsNoTracking().ToArray();
#else
                        targetReg = context.AircraftView.Where(a => a.OperationCode != OperationCode.RETIRE_UNREGISTERED).AsNoTracking().ToArray().OrderBy(r => Guid.NewGuid());
#endif
                        var check = new WorkingCheck(targetReg, interval ?? 15);
                        _         = check.ExecuteCheckAsync();
                    }
                }
            });

            return(Content("WorkingCheck Launch!"));
        }
Example #4
0
        public IActionResult Airline(string id, string id2, [FromQuery] bool includeRetire, AircraftModel model)
        {
            id  = id?.ToUpper();
            id2 = id2?.ToUpper();

            string airlineName;

            airlineName = _context.Airline.AsNoTracking().FirstOrDefault(p => p.AirlineCode == id)?.AirlineNameJpShort;

            model.Title   = airlineName ?? "all";
            model.TableId = id ?? "all";
            model.api     = "/api/airline/" + id;
            if (!string.IsNullOrEmpty(id2))
            {
                var typeName = MasterManager.Type.Where(p => p.TypeCode == id2).FirstOrDefault()?.TypeName;
                if (!string.IsNullOrEmpty(typeName))
                {
                    model.Title += ("・" + typeName);
                    model.api   += ("/" + id2);
                }
            }

            model.IncludeRetire = includeRetire;
            model.IsAdmin       = CookieUtil.IsAdmin(HttpContext);

            return(View("~/Views/Aircraft/index.cshtml", model));
        }
Example #5
0
        /// <summary>
        /// 初期アクション
        /// </summary>
        /// <param name="model"></param>
        /// <param name="sc"></param>
        /// <returns></returns>
        public IActionResult Index(SearchModel model, [FromQuery] string sc)
        {
            model.IsAdmin = CookieUtil.IsAdmin(HttpContext);

            model.AirlineList    = MasterManager.AllAirline;
            model.TypeDetailList = MasterManager.TypeDetailGroup;
            model.OperationList  = MasterManager.Operation;
            model.WiFiList       = MasterManager.Wifi;

            if (!string.IsNullOrEmpty(sc))
            {
                //GETパラメーターで検索条件キーが指定されたら
                //保存されている検索条件を取得
                var sce = _context.SearchCondition.AsNoTracking().Where(e => e.SearchConditionKey == sc).FirstOrDefault();
                if (sce != null)
                {
                    //取得したjsonから復元
                    var scm = JsonConvert.DeserializeObject <SearchConditionInModel>(sce.SearchConditionJson, new JsonSerializerSettings {
                        DefaultValueHandling = DefaultValueHandling.Populate
                    });
                    //modelにコピー
                    Mapper.Map(scm, model);
                    model.IsDirect = true;
                }
            }

            return(View(model));
        }
Example #6
0
 public IActionResult Index()
 {
     if (!CookieUtil.IsAdmin(HttpContext))
     {
         return(NotFound());
     }
     return(Content("OK!"));
 }
Example #7
0
        public IActionResult Index(AircraftModel model)
        {
            model.Title   = "all";
            model.TableId = "all";
            model.api     = "/api/airlinegroup/";

            model.IsAdmin = CookieUtil.IsAdmin(HttpContext);

            return(View("~/Views/Aircraft/index.cshtml", model));
        }
Example #8
0
        public async Task Invoke(HttpContext httpContext)
        {
            bool      loggingTarget = !EXCLUDE_LIST.Any(s => httpContext.Request.Path.Value.ToUpper().Contains(s));
            AccessLog log           = null;

            if (loggingTarget)
            {
                log = new AccessLog
                {
                    RequestTime = DateTime.Now
                    ,
                    RequestIp = httpContext.Request.Headers?["X-Forwarded-For"].FirstOrDefault() != null ?
                                httpContext.Request.Headers["X-Forwarded-For"].First().Split(",")[0] : httpContext.Connection.RemoteIpAddress.MapToIPv4().ToString()
                    ,
                    RequestPath = httpContext.Request.Path
                    ,
                    RequestQuery = httpContext.Request.QueryString.ToString() != string.Empty ? httpContext.Request.QueryString.ToString() : null
                    ,
                    RequestCookies = httpContext.Request.Cookies.Count != 0 ? string.Concat(httpContext.Request.Cookies) : null
                    ,
                    UserAgent = httpContext.Request.Headers["User-Agent"].FirstOrDefault()
                    ,
                    Referer = httpContext.Request.Headers["Referer"].FirstOrDefault()
                    ,
                    IsAdmin = CookieUtil.IsAdmin(httpContext)
                };
            }
            Stopwatch sw = null;

            if (loggingTarget)
            {
                sw = new Stopwatch(); sw.Start();
            }
            await _next(httpContext);

            if (loggingTarget && log != null)
            {
                sw.Stop();
                log.ResponseCode = httpContext.Response.StatusCode;
                _ = Task.Run(() =>
                {
                    log.ResponseTime = sw.ElapsedMilliseconds;
                    try
                    {
                        log.RequestHostname = Dns.GetHostEntry(log.RequestIp).HostName;
                    }
                    catch { }
                    using var serviceScope = _services.CreateScope();
                    using var context      = serviceScope.ServiceProvider.GetService <jafleetContext>();
                    context.AccessLog.Add(log);
                    context.SaveChanges();
                });
            }
        }
Example #9
0
        public IActionResult Index(string id)
        {
            if (!CookieUtil.IsAdmin(HttpContext))
            {
                return(NotFound());
            }

            DateTime?targetDate = null;

            if (string.IsNullOrEmpty(id))
            {
                targetDate = DateTime.Now.Date;
            }
            else if (id.Length == 6)
            {
                DateTime outDate;
                id = "20" + id;
                DateTime.TryParseExact(id, "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out outDate);
                targetDate = outDate;
            }
            else if (id == "y")
            {
                targetDate = DateTime.Now.AddDays(-1).Date;
            }

            List <Log> logs = null;

            logs = _context.Log.AsNoTracking().Where(q => q.LogDateYyyyMmDd == targetDate.Value.ToString("yyyyMMdd") && q.IsAdmin == "0" && q.LogType != "8").OrderByDescending(q => q.LogId).ToList();

            var logScKeys = logs.Where(sc => sc.LogType == LogType.SEARCH).Select(scc => scc.LogDetail).Distinct();
            var scCache   = GetSearchConditionDisps(logScKeys);

            var retsb = new StringBuilder();

            foreach (var log in logs)
            {
                string logDetail;
                if (log.LogType == LogType.SEARCH)
                {
                    logDetail = scCache[log.LogDetail] + log.Additional;
                }
                else
                {
                    logDetail = log.LogDetail;
                }
                retsb.Append($"[{log.LogDate.Value.ToString("HH:mm:ss")}][{LogType.GetLogTypeName(log.LogType)}]{logDetail}{Environment.NewLine}");
            }

            string head = DateTime.Now.ToString($"--HH:mm:ss--{Environment.NewLine}");

            return(Content(head + retsb.ToString()));
        }
Example #10
0
        public IActionResult Index(string id, EditModel model, [FromQuery] bool nohead)
        {
            if (!CookieUtil.IsAdmin(HttpContext))
            {
                return(NotFound());
            }

            model.AirlineList    = MasterManager.AllAirline;
            model.TypeList       = MasterManager.Type;
            model.TypeDetailList = _context.TypeDetail.OrderBy(t => t.TypeDetailName).ToArray();
            model.OperationList  = MasterManager.Operation;
            model.WiFiList       = MasterManager.Wifi;
            model.NotUpdateDate  = true;
            model.NoHead         = nohead;

            if (string.IsNullOrEmpty(id))
            {
                model.Aircraft = new Aircraft();
                model.IsNew    = true;
            }
            else
            {
                model.Aircraft = _context.Aircraft.Where(p => p.RegistrationNumber == id.ToUpper()).FirstOrDefault();
            }

            if (model.Aircraft == null)
            {
                model.Aircraft = new Aircraft();
                model.Aircraft.RegistrationNumber = id.ToUpper();
                model.IsNew    = true;
                model.LinkPage = $"https://ja-fleet.noobow.me/AD/{id.ToUpper()}";
            }
            else
            {
                var av = _context.AircraftView.Find(id.ToUpper());
                model.LinkPage = $"https://ja-fleet.noobow.me/AD/{av.RegistrationNumber}";
            }
            var type = MasterManager.TypeDetailGroup.Where(td => td.TypeDetailId == model.Aircraft.TypeDetailId).FirstOrDefault()?.TypeCode;
            IEnumerable <SeatConfiguration> q = MasterManager.SeatConfiguration;

            if (!string.IsNullOrEmpty(model.Aircraft.Airline))
            {
                q = q.Where(sc => sc.Airline == model.Aircraft.Airline);
            }
            if (!string.IsNullOrEmpty(type))
            {
                q = q.Where(sc => sc.Type == type);
            }
            model.SeatConfigurationList = q.ToArray();

            return(View(model));
        }
        public IActionResult Index(string id, [FromQuery] bool nohead, [FromQuery] bool needback, AircraftDetailModel model)
        {
            model.Title    = id;
            model.TableId  = id;
            model.api      = "/api/aircraftwithhistory/" + id;
            model.IsDetail = true;

            model.NoHead   = nohead;
            model.IsAdmin  = CookieUtil.IsAdmin(HttpContext);
            model.Reg      = id;
            model.NeedBack = needback;

            model.AV         = _context.AircraftView.AsNoTracking().Where(av => av.RegistrationNumber == id).FirstOrDefault();
            model.OgImageUrl = (model.AV?.PhotoDirectUrl != null) ? $"https://cdn.jetphotos.com/full{model.AV?.PhotoDirectUrl}" : "https://ja-fleet.noobow.me/images/JA-Fleet_1_og.png";
            if (model.AV == null)
            {
                //存在しないレジが指定された場合はNotFound
                return(NotFound());
            }
            if (!nohead)
            {
                model.AirlineGroupNmae = _context.AirlineGroup.AsNoTracking().Where(ag => ag.AirlineGroupCode == model.AV.AirlineGroupCode).FirstOrDefault()?.AirlineGroupName;
            }

            //非同期でCookieは取得できなくなるので退避
            bool isAdmin = CookieUtil.IsAdmin(HttpContext);

            //ログは非同期で書き込み
            Task.Run(() =>
            {
                using (var serviceScope = _services.CreateScope())
                {
                    using (var context = serviceScope.ServiceProvider.GetService <jafleetContext>())
                    {
                        Log log = new Log
                        {
                            LogDate   = DateTime.Now,
                            LogType   = LogType.DETAIL,
                            LogDetail = id,
                            UserId    = isAdmin.ToString(),
                        };

                        context.Log.Add(log);
                        context.SaveChanges();
                    }
                }
            });

            return(View("~/Views/AircraftDetail/index.cshtml", model));
        }
Example #12
0
        public IActionResult Index()
        {
            //速くリダイレクトするため、ログの書き込みは非同期
            Task.Run(() => {
                using (var serviceScope = _services.CreateScope())
                {
                    using (var context = serviceScope.ServiceProvider.GetService <jafleetContext>())
                    {
                        var lineLinklog = new Log
                        {
                            LogType = LogType.LINE_LINK,
                            UserId  = CookieUtil.IsAdmin(HttpContext).ToString(),
                            LogDate = DateTime.Now
                        };

                        context.Log.Add(lineLinklog);
                        context.SaveChanges();
                    }
                }
            });
            return(Redirect("https://line.me/R/ti/p/BTy1CuBCzF"));
        }
Example #13
0
        /// <summary>
        /// 検索実行
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public IActionResult DoSearch(SearchModel model)
        {
            if (model.IsLoading && !model.IsDirect)
            {
                //初回ロードかつダイレクト指定ではない場合は空リストを返す
                return(Json(new SearchResult {
                    ResultList = new AircraftView[] { }, SearchConditionKey = string.Empty
                }));
            }
            AircraftView[] searchResult = null;
            var            regList      = new List <string>();

            String[] airline;
            int[]    typeDetail = new int[] { };
            String[] operation;
            String[] wifi;
            string   registrationDate;
            var      addSpecialLiveryReg = new List <string>();

            if (model.RegistrationNumber != null)
            {
                //|区切りで複数件を処理
                foreach (string r in model.RegistrationNumber.ToUpper().Split("|"))
                {
                    string reg = string.Empty;
                    if (!r.StartsWith("JA"))
                    {
                        //JAがついていなければ付加
                        reg = "JA";
                    }
                    reg = reg += r.ToUpper();
                    regList.Add(reg);
                }
            }

            //検索
            IQueryable <AircraftView> query = _context.AircraftView.AsNoTracking();

            if (!String.IsNullOrEmpty(model.Airline))
            {
                airline = model.Airline.Split("|");
                query   = query.Where(p => airline.Contains(p.Airline));
            }

            if (!String.IsNullOrEmpty(model.TypeDetail))
            {
                typeDetail = model.TypeDetail.Split("|").Select(t => Convert.ToInt32(t)).ToArray();
                query      = query.Where(p => typeDetail.Contains(p.TypeDetailId));
            }

            if (!String.IsNullOrEmpty(model.WiFiCode))
            {
                wifi  = model.WiFiCode.Split("|");
                query = query.Where(p => wifi.Contains(p.WifiCode));
            }

            if (!String.IsNullOrEmpty(model.RegistrationDate))
            {
                registrationDate = model.RegistrationDate;
                if (model.RegistrationSelection == "0")
                {
                    query = query.Where(p => p.RegisterDate.StartsWith(registrationDate));
                }
                else if (model.RegistrationSelection == "1")
                {
                    registrationDate += "zzz";
                    query             = query.Where(p => p.RegisterDate.CompareTo(registrationDate) <= 0);
                }
                else if (model.RegistrationSelection == "2")
                {
                    registrationDate += "   ";
                    query             = query.Where(p => p.RegisterDate.CompareTo(registrationDate) >= 0);
                }
            }

            if (!String.IsNullOrEmpty(model.OperationCode))
            {
                operation = model.OperationCode.Split("|");
                query     = query.Where(p => operation.Contains(p.OperationCode));
            }

            if (model.Remarks == "1")
            {
                query = query.Where(p => String.IsNullOrEmpty(p.Remarks));
            }
            else if (model.Remarks == "2")
            {
                query = query.Where(p => !String.IsNullOrEmpty(p.Remarks));
            }
            else if (model.Remarks == "3")
            {
                query = query.Where(p => p.Remarks.Contains(model.RemarksKeyword));
            }

            if (model.SpecialLivery == "1")
            {
                query = query.Where(p => String.IsNullOrEmpty(p.SpecialLivery));
            }
            else if (model.SpecialLivery == "2")
            {
                query = query.Where(p => !String.IsNullOrEmpty(p.SpecialLivery));
            }
            else if (model.SpecialLivery == "3")
            {
                query = query.Where(p => p.SpecialLivery.Contains(model.SpecialLiveryKeyword));
            }
            else if (model.SpecialLivery == "4")
            {
                //あり(履歴含む)
                //一旦履歴テーブルを検索して、履歴の中の該当のレジを取得
                addSpecialLiveryReg.AddRange(_context.AircraftHistory.Where(p => !String.IsNullOrEmpty(p.SpecialLivery)).Select(s => s.RegistrationNumber).Distinct().ToList());
                regList.AddRange(addSpecialLiveryReg);
                regList.AddRange(_context.Aircraft.Where(p => !String.IsNullOrEmpty(p.SpecialLivery)).Select(s => s.RegistrationNumber).Distinct().ToList());
            }
            else if (model.SpecialLivery == "5")
            {
                //キーワード指定(履歴含む)
                //一旦履歴テーブルを検索して、履歴の中の該当のレジを取得
                addSpecialLiveryReg.AddRange(_context.AircraftHistory.Where(p => p.SpecialLivery.Contains(model.SpecialLiveryKeyword)).Select(s => s.RegistrationNumber).Distinct().ToList());
                regList.AddRange(addSpecialLiveryReg);
                regList.AddRange(_context.Aircraft.Where(p => p.SpecialLivery.Contains(model.SpecialLiveryKeyword)).Select(s => s.RegistrationNumber).Distinct().ToList());
            }

            if (regList.Count == 1)
            {
                if (StringUtil.ContainsMetaCharacter(regList[0]))
                {
                    //メタ文字を含む場合正規表現検索
                    query = query.Where(a => Regex.IsMatch(a.RegistrationNumber, regList[0]));
                }
                else
                {
                    //含まない場合=検索
                    query = query.Where(a => a.RegistrationNumber == regList[0]);
                }
            }
            else if (regList.Count > 1)
            {
                //2件以上の場合は正規表現無効でIN検索
                query = query.Where(p => regList.Contains(p.RegistrationNumber));
            }

            searchResult = query.OrderBy(p => p.DisplayOrder).ToArray();

            //履歴から検索している場合、その旨追記
            foreach (var reg in addSpecialLiveryReg)
            {
                var addTarget = searchResult.Where(s => s.RegistrationNumber == reg).SingleOrDefault();
                if (addTarget != null)
                {
                    addTarget.SpecialLivery += "(履歴あり)";
                }
            }

            //検索条件保持用クラスにコピー
            var scm = new SearchConditionInModel();

            Mapper.Map(model, scm);

            //検索条件保持用クラスをJsonにシリアライズ
            string scjson = scm.ToString();
            string schash = HashUtil.CalcCRC32(scjson);
            //Cookieの値はここで退避しておかないと、↓のTask.Runではちゃんと取れなくなる
            bool isAdmin = CookieUtil.IsAdmin(HttpContext);

            //検索結果を速く返すためにログと検索条件のDB書き込みは非同期で行う
            Task.Run(() =>
            {
                using (var serviceScope = _services.CreateScope())
                {
                    using (var context = serviceScope.ServiceProvider.GetService <jafleetContext>())
                    {
                        //検索条件保存
                        var sc = context.SearchCondition.Where(e => e.SearchConditionKey == schash).FirstOrDefault();
                        if (sc == null)
                        {
                            sc = new SearchCondition
                            {
                                SearchConditionKey  = schash,
                                SearchConditionJson = scjson,
                                SearchCount         = 0
                            };

                            //検索回数、検索日時は管理者じゃないい場合のみ
                            if (!isAdmin)
                            {
                                sc.SearchCount     = 1;
                                sc.FirstSearchDate = DateTime.Now;
                                sc.LastSearchDate  = sc.FirstSearchDate;
                            }
                            context.SearchCondition.Add(sc);
                        }
                        else if (!isAdmin)
                        {
                            //管理者じゃない場合のみ検索回数、検索日時を更新
                            sc.SearchCount++;
                            sc.LastSearchDate = DateTime.Now;
                            if (sc.FirstSearchDate == null)
                            {
                                //初回の検索が管理者だった場合に初回検索日時がセットされてないのでここでセット
                                sc.FirstSearchDate = sc.LastSearchDate;
                            }
                        }

                        //ログ用にTypeDetailをIDからNAMEに置換
                        var scm2 = new SearchConditionInModel();
                        Mapper.Map(model, scm2);
                        var typeDetails = MasterManager.TypeDetailGroup.Where(td => typeDetail.Contains(td.TypeDetailId)).ToArray();
                        if (typeDetail.Count() > 0)
                        {
                            scm2.TypeDetail = string.Join("|", typeDetails.Select(td => td.TypeDetailName));
                        }
                        var scjson2 = scm2.ToString();

                        //ログ
                        Log log = new Log
                        {
                            LogDate    = DateTime.Now,
                            LogType    = LogType.SEARCH,
                            LogDetail  = schash,
                            Additional = $"{model.IsDirect},{searchResult.Length.ToString()}",
                            UserId     = isAdmin.ToString()
                        };
                        context.Log.Add(log);

                        context.SaveChanges();
                    }
                }
            });

            return(Json(new SearchResult {
                ResultList = searchResult, SearchConditionKey = schash
            }));
        }