private static void PreExchangeForAdvance(ExchangeRecord score, List <Airline> firstairline, List <Airline> secondairline)
        {
            //时间测试(起飞关系不能乱,等于也不可以,防止前后航班关系错乱)
            var TakeoffAfterThisTime = secondairline[score.secondIndex - 1].ModifiedEndTime.AddMinutes(Utility.StayAtAirPortMinutes);
            var AddTime = TakeoffAfterThisTime.Subtract(firstairline[score.firstIndex].ModifiedStartTime);

            if (AddTime.TotalMinutes > 0)
            {
                //尝试是否能够将first整体后移
                for (int i = score.firstIndex; i < firstairline.Count; i++)
                {
                    firstairline[i].ModifiedStartTime += AddTime;
                }
            }

            TakeoffAfterThisTime = firstairline[score.firstIndex - 1].ModifiedEndTime.AddMinutes(Utility.StayAtAirPortMinutes);
            AddTime = TakeoffAfterThisTime.Subtract(secondairline[score.secondIndex].ModifiedStartTime);
            if (AddTime.TotalMinutes > 0)
            {
                //尝试是否能够将first整体后移
                for (int i = score.secondIndex; i < secondairline.Count; i++)
                {
                    secondairline[i].ModifiedStartTime += AddTime;
                }
            }
        }
        //ищем подходящий нам банк в соответствии с настройками
        private static Bank findRequestedBank()
        {
            List <ExchangeRecord> requestedCurrencyRecords = (from rec in db.ExchangeRecords.Include("Bank")
                                                              where rec.CurrencyType.Id == Settings.Currency.Id
                                                              select rec).ToList();


            ExchangeRecord requestedRecord = (from rec in requestedCurrencyRecords
                                              where Settings.Profitable ?
                                              (
                                                  Settings.Sell ?
                                                  rec.Sell == requestedCurrencyRecords.Min(r => r.Sell)
                                                                              :
                                                  rec.Buy == requestedCurrencyRecords.Max(r => r.Buy)
                                              )
                                                                        :
                                              (
                                                  Settings.Sell ?
                                                  rec.Sell == requestedCurrencyRecords.Max(r => r.Sell)
                                                                              :
                                                  rec.Buy == requestedCurrencyRecords.Min(r => r.Buy)
                                              )
                                              &&
                                              rec.CurrencyType.Id == Settings.Currency.Id
                                              select rec).FirstOrDefault();

            return(requestedRecord.Bank);
        }
        //проверяем актуальность курсов валют, пытаемся найти любую запись с сегодяшней датой
        public static bool currenciesExchangeIsRelevant()
        {
            ExchangeRecord checkRecord = findExchangeRecord(db.Banks.FirstOrDefault(), db.Currencies.FirstOrDefault(), DateTime.Now);

            if (checkRecord == null)
            {
                return(false);
            }

            return(true);
        }
Exemple #4
0
 /// <inheritdoc />
 public bool Upsert(ExchangeRecord record)
 {
     try
     {
         m_Records.InsertOne(record);
         return(true);
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
         return(false);
     }
 }
        public static List <BankMark> getBankDepartmentsMarks(PointLatLng userLocation, int radius)
        {
            List <BankMark> marks = new List <BankMark>();

            List <BankDepartment> requestedDepartments;

            if (Settings.AllBanks)
            {
                requestedDepartments = db.Departments.Include("Bank").ToList();
            }
            else
            {
                Bank requestedBank = findRequestedBank();

                requestedDepartments = (from dep in db.Departments.Include("Bank")
                                        where dep.Bank.Id == requestedBank.Id
                                        select dep).ToList();
            }

            foreach (BankDepartment department in requestedDepartments)
            {
                if (distance(department.getPointLatLng(), userLocation) > radius)
                {
                    continue;
                }

                ExchangeRecord record = findExchangeRecord(department.Bank, Settings.Currency, DateTime.Now.Date);

                if (record == null)
                {
                    continue;
                }

                marks.Add(new BankMark()
                {
                    Title = department.Bank.Name + "\n" + (Settings.Sell ? "Продажа" : "Покупка") + "\n" +
                            record.CurrencyType.Code.ToUpper() + "      " + (Settings.Sell ? record.Buy : record.Sell) + "\n",
                    Location = new PointLatLng(department.LocationLat, department.LocationLng)
                });
            }

            return(marks);
        }
Exemple #6
0
    void Query()
    {
        try
        {
            GameServer server = ServerDropDownList.SelectedGameServer;
            if (server == null)
            {
                LabelOpMsg.Text = string.Format(StringDef.MsgCannotBeNone, StringDef.GameServer);
                return;
            }
            if (!server.IsConnected)
            {
                LabelOpMsg.Text = StringDef.NoConnectionAlert;
                return;
            }
            ArrayList     paramList       = new ArrayList();
            StringBuilder searchCondition = new StringBuilder();
            searchCondition.AppendFormat("WHERE {0}={1}", FS2TableString.LogFieldLogEvent, LogEvent.ExchangeItem);

            string itemName = TextBoxInputItemName.Text.Trim();
            if (itemName.Length != 0)
            {
                searchCondition.AppendFormat(" AND {0} LIKE '?'", FS2TableString.LogFieldLogData);
                if (CheckBoxItemName.Checked)
                {
                    paramList.Add(string.Format("%“{0}”%", itemName));
                }
                else
                {
                    paramList.Add(string.Format("%“%{0}%”%", itemName));
                }
            }

            string giverName = TextBoxInputGiver.Text.Trim();
            if (giverName.Length != 0)
            {
                if (CheckBoxGiver.Checked)
                {
                    searchCondition.AppendFormat(" AND {0} IN ({1})", FS2TableString.LogFieldLogKey1,
                                                 string.Format("SELECT {0} FROM {1} WHERE {2}='?'", FS2TableString.RolesfirstFieldGUID,
                                                               FS2TableString.RolesfirstTableName, FS2TableString.RolesfirstFieldRoleName));
                }
                else
                {
                    searchCondition.AppendFormat(" AND {0} IN ({1})", FS2TableString.LogFieldLogKey1,
                                                 string.Format("SELECT {0} FROM {1} WHERE {2} LIKE '%?%'", FS2TableString.RolesfirstFieldGUID,
                                                               FS2TableString.RolesfirstTableName, FS2TableString.RolesfirstFieldRoleName));
                }
                paramList.Add(giverName);
            }

            string receiverName = TextBoxInputReceiver.Text.Trim();
            if (receiverName.Length != 0)
            {
                if (CheckBoxReceiver.Checked)
                {
                    searchCondition.AppendFormat(" AND {0} IN ({1})", FS2TableString.LogFieldLogKey3,
                                                 string.Format("SELECT {0} FROM {1} WHERE {2} = '?'", FS2TableString.RolesfirstFieldGUID,
                                                               FS2TableString.RolesfirstTableName, FS2TableString.RolesfirstFieldRoleName));
                }
                else
                {
                    searchCondition.AppendFormat(" AND {0} IN ({1})", FS2TableString.LogFieldLogKey3,
                                                 string.Format("SELECT {0} FROM {1} WHERE {2} LIKE '%?%'", FS2TableString.RolesfirstFieldGUID,
                                                               FS2TableString.RolesfirstTableName, FS2TableString.RolesfirstFieldRoleName));
                }
                paramList.Add(receiverName);
            }

            _start = StartDate.SelectedDate;
            if (_start == DateTime.MinValue)
            {
                LabelOpMsg.Text = StringDef.ParameterInputError;
                return;
            }
            _end = EndDate.SelectedDate;
            if (_end == DateTime.MinValue)
            {
                LabelOpMsg.Text = StringDef.ParameterInputError;
                return;
            }
            searchCondition.Append(string.Format(" AND {0}>='{1}' AND {0}<'{2}'", FS2TableString.LogFieldLogTime, _start.ToString("yyyy-MM-dd HH:mm:ss"), _end.ToString("yyyy-MM-dd HH:mm:ss")));

            string baseCmdString = string.Format("SELECT LogKey1,LogKey3,LogData,LogTime FROM {0} {1}",
                                                 "{0}", searchCondition.ToString());
            string addTableCmdString;
            WebUtil.AddTableNameToCmd(CurrentUser.Id, server, baseCmdString, paramList, _start, _end, out addTableCmdString, out paramList);
            if (addTableCmdString.Length == 0)
            {
                //
                return;
            }

            string     cmdString = "SELECT LogKey1,LogKey3,LogData,LogTime FROM ({0}) AS A ORDER BY LogTime";
            SqlCommand cmd       = new SqlCommand(string.Format(cmdString, addTableCmdString), paramList.ToArray());
            SqlResult  result    = WebUtil.QueryGameServerDb(CurrentUser.Id, server, cmd);
            if (result != null && result.Success)
            {
                result.SetFieldType(new SqlDataType[] {
                    SqlDataType.String,
                    SqlDataType.String,
                    SqlDataType.Blob,
                    SqlDataType.DateTime
                });

                object[]  record       = null;
                ArrayList infos        = new ArrayList();
                ArrayList roleGuidList = new ArrayList();

                while ((record = result.ReadRecord()) != null)
                {
                    ExchangeRecord info = new ExchangeRecord();

                    info.giverGuid = record[0] as string;
                    if (info.giverGuid != null && !roleGuidList.Contains(info.giverGuid))
                    {
                        roleGuidList.Add(info.giverGuid);
                    }
                    info.receiverGuid = record[1] as string;
                    if (info.receiverGuid != null && !roleGuidList.Contains(info.receiverGuid))
                    {
                        roleGuidList.Add(info.receiverGuid);
                    }
                    info.time = (DateTime)record[3];

                    string blobData = Encoding.Default.GetString((byte[])record[2]);
                    blobData = blobData.Replace("“", "\"");
                    blobData = blobData.Replace("”", "\"");
                    string[] blobDataSplit = blobData.Split('\"');
                    info.itemName = blobDataSplit[3];

                    infos.Add(info);
                }

                if (infos.Count == 0)
                {
                    //没有查询到信息
                    LabelOpMsg.Text     = StringDef.NoMatchingRecord;
                    PanelResult.Visible = false;
                }
                else
                {
                    PanelResult.Visible       = true;
                    DataGridResult.DataSource = CreateDataSource(infos, GetRoleGuid(roleGuidList));
                    DataGridResult.DataBind();
                }
            }
            else
            {
                if (result == null)
                {
                    LabelOpMsg.Text = StringDef.QueryTimeOut;
                }
                else
                {
                    LabelOpMsg.Text = StringDef.OperationFail;
                }
                PanelResult.Visible = false;
            }
        }
        catch (Exception ex)
        {
            PanelResult.Visible = false;
            LabelOpMsg.Text     = ex.Message;
        }
    }
Exemple #7
0
 /// <inheritdoc />
 public ExchangeRecord SelectExchangeRecord(ExchangeRecord record) =>
 m_Records.FindSync(
     Builders <ExchangeRecord> .Filter.Eq("_id.date", record.Date) &
     Builders <ExchangeRecord> .Filter.Eq("_id.from", record.From) &
     Builders <ExchangeRecord> .Filter.Eq("_id.to", record.To)
     ).SingleOrDefault();
Exemple #8
0
    void Query()
    {
        try
        {
            GameServer server = ServerDropDownList.SelectedGameServer;
            if (server == null)
            {
                LabelOpMsg.Text = string.Format(StringDef.MsgCannotBeNone, StringDef.GameServer);
                return;
            }
            if (!server.IsConnected)
            {
                LabelOpMsg.Text = StringDef.NoConnectionAlert;
                return;
            }
            ArrayList paramList = new ArrayList();
            StringBuilder searchCondition = new StringBuilder();
            searchCondition.AppendFormat("WHERE {0}={1}",FS2TableString.LogFieldLogEvent,LogEvent.ExchangeItem);

            string itemName = TextBoxInputItemName.Text.Trim();
            if (itemName.Length != 0)
            {
                searchCondition.AppendFormat(" AND {0} LIKE '?'", FS2TableString.LogFieldLogData);
                if (CheckBoxItemName.Checked) 
                    paramList.Add(string.Format("%“{0}”%",itemName));
                else 
                    paramList.Add(string.Format("%“%{0}%”%",itemName));                        
            }

            string giverName = TextBoxInputGiver.Text.Trim();
            if (giverName.Length != 0)
            {
                if (CheckBoxGiver.Checked)
                {
                    searchCondition.AppendFormat(" AND {0} IN ({1})", FS2TableString.LogFieldLogKey1,
                        string.Format("SELECT {0} FROM {1} WHERE {2}='?'", FS2TableString.RolesfirstFieldGUID,
                        FS2TableString.RolesfirstTableName, FS2TableString.RolesfirstFieldRoleName));
                }
                else
                {
                    searchCondition.AppendFormat(" AND {0} IN ({1})", FS2TableString.LogFieldLogKey1,
                        string.Format("SELECT {0} FROM {1} WHERE {2} LIKE '%?%'", FS2TableString.RolesfirstFieldGUID,
                        FS2TableString.RolesfirstTableName, FS2TableString.RolesfirstFieldRoleName));
                }
                paramList.Add(giverName);
            }

            string receiverName = TextBoxInputReceiver.Text.Trim();
            if (receiverName.Length != 0)
            {
                if (CheckBoxReceiver.Checked)
                {
                    searchCondition.AppendFormat(" AND {0} IN ({1})", FS2TableString.LogFieldLogKey3,
                        string.Format("SELECT {0} FROM {1} WHERE {2} = '?'", FS2TableString.RolesfirstFieldGUID,
                        FS2TableString.RolesfirstTableName, FS2TableString.RolesfirstFieldRoleName));
                }
                else
                {
                    searchCondition.AppendFormat(" AND {0} IN ({1})", FS2TableString.LogFieldLogKey3,
                        string.Format("SELECT {0} FROM {1} WHERE {2} LIKE '%?%'", FS2TableString.RolesfirstFieldGUID,
                        FS2TableString.RolesfirstTableName, FS2TableString.RolesfirstFieldRoleName));
                }
                paramList.Add(receiverName);
            }

            _start = StartDate.SelectedDate;
            if (_start == DateTime.MinValue)
            {
                LabelOpMsg.Text = StringDef.ParameterInputError;
                return;
            }
            _end = EndDate.SelectedDate;
            if (_end == DateTime.MinValue)
            {
                LabelOpMsg.Text = StringDef.ParameterInputError;
                return;
            }
            searchCondition.Append(string.Format(" AND {0}>='{1}' AND {0}<'{2}'", FS2TableString.LogFieldLogTime, _start.ToString("yyyy-MM-dd HH:mm:ss"), _end.ToString("yyyy-MM-dd HH:mm:ss")));

            string baseCmdString = string.Format("SELECT LogKey1,LogKey3,LogData,LogTime FROM {0} {1}",
                "{0}", searchCondition.ToString());
            string addTableCmdString;
            WebUtil.AddTableNameToCmd(CurrentUser.Id, server, baseCmdString, paramList, _start, _end, out addTableCmdString, out paramList);
            if (addTableCmdString.Length == 0)
            {
                //
                return;
            }

            string cmdString = "SELECT LogKey1,LogKey3,LogData,LogTime FROM ({0}) AS A ORDER BY LogTime";
            SqlCommand cmd = new SqlCommand(string.Format(cmdString, addTableCmdString), paramList.ToArray());
            SqlResult result = WebUtil.QueryGameServerDb(CurrentUser.Id, server, cmd);
            if (result != null && result.Success)
            {
                result.SetFieldType(new SqlDataType[]{
                                    SqlDataType.String,
                                    SqlDataType.String,
                                    SqlDataType.Blob,
                                    SqlDataType.DateTime
                                    });

                object[] record = null;
                ArrayList infos = new ArrayList();
                ArrayList roleGuidList = new ArrayList();

                while ((record = result.ReadRecord()) != null)
                {
                    ExchangeRecord info = new ExchangeRecord();

                    info.giverGuid = record[0] as string;
                    if (info.giverGuid != null && !roleGuidList.Contains(info.giverGuid))
                        roleGuidList.Add(info.giverGuid);
                    info.receiverGuid = record[1] as string;
                    if (info.receiverGuid != null && !roleGuidList.Contains(info.receiverGuid))
                        roleGuidList.Add(info.receiverGuid);
                    info.time = (DateTime)record[3];

                    string blobData = Encoding.Default.GetString((byte[])record[2]);
                    blobData = blobData.Replace("“", "\"");
                    blobData = blobData.Replace("”", "\"");
                    string[] blobDataSplit = blobData.Split('\"');
                    info.itemName = blobDataSplit[3];

                    infos.Add(info);
                }

                if (infos.Count == 0)
                {
                    //没有查询到信息
                    LabelOpMsg.Text = StringDef.NoMatchingRecord;
                    PanelResult.Visible = false;
                }
                else
                {
                    PanelResult.Visible = true;
                    DataGridResult.DataSource = CreateDataSource(infos, GetRoleGuid(roleGuidList));
                    DataGridResult.DataBind();
                }
            }
            else
            {
                if (result == null)
                    LabelOpMsg.Text = StringDef.QueryTimeOut;
                else
                    LabelOpMsg.Text = StringDef.OperationFail;
                PanelResult.Visible = false;
            }            
        }
        catch (Exception ex)
        {
            PanelResult.Visible = false;
            LabelOpMsg.Text = ex.Message;
        }
    }
        static ExchangeRecord ExchangeEvaluateAdvance(string firstPlaneId, string secondPlandId)
        {
            ExchangeRecord Rtn = new ExchangeRecord();

            Rtn.DiffScore = 0;

            List <Airline> first  = Solution.PlaneIdAirlineDic[firstPlaneId];
            List <Airline> second = Solution.PlaneIdAirlineDic[secondPlandId];
            //测试一下当前分数:
            double FirstScore         = scoreDic[firstPlaneId];
            double SecondScore        = scoreDic[secondPlandId];
            var    TotalScore         = FirstScore + SecondScore;
            var    FirstTyphoonRange  = CoreAlgorithm.GetTyphoonRange(first);
            var    SecondTyphonnRange = CoreAlgorithm.GetTyphoonRange(second);

            for (int firstIdx = Math.Max(FirstTyphoonRange.StartIndex - 2, 2); firstIdx < FirstTyphoonRange.EndIndex; firstIdx++)
            {
                //首航班不调整
                if (firstIdx == 0)
                {
                    continue;
                }
                //是否存在无法降落的航班
                var firstAirline = first[firstIdx];

                //相同起飞机场的检查
                var FocusAirport = firstAirline.StartAirPort;
                for (int secondIdx = Math.Max(SecondTyphonnRange.StartIndex - 2, 2); secondIdx < SecondTyphonnRange.EndIndex; secondIdx++)
                {
                    //首航班不调整
                    if (secondIdx == 0)
                    {
                        continue;
                    }
                    var secondAirline = second[secondIdx];
                    if (secondAirline.StartAirPort != FocusAirport)
                    {
                        continue;
                    }
                    //联程不能换飞机(但是可以同时换两个)
                    if ((first[firstIdx].ComboAirline != null && !first[firstIdx].IsFirstCombinedVoyage) ||
                        second[secondIdx].ComboAirline != null && !second[secondIdx].IsFirstCombinedVoyage)
                    {
                        continue;
                    }

                    var FirstAirlineListClone  = Utility.DeepCopy(first);
                    var SecondAirlineListClone = Utility.DeepCopy(second);
                    //时间测试(起飞关系不能乱,等于也不可以,防止前后航班关系错乱)
                    var TakeoffAfterThisTime = SecondAirlineListClone[secondIdx - 1].ModifiedEndTime.AddMinutes(Utility.StayAtAirPortMinutes);
                    var AddTime = TakeoffAfterThisTime.Subtract(FirstAirlineListClone[firstIdx].ModifiedStartTime);
                    if (AddTime.TotalMinutes > 0)
                    {
                        //尝试是否能够将first整体后移
                        for (int i = firstIdx; i < first.Count; i++)
                        {
                            FirstAirlineListClone[i].ModifiedStartTime += AddTime;
                        }
                    }

                    TakeoffAfterThisTime = FirstAirlineListClone[firstIdx - 1].ModifiedEndTime.AddMinutes(Utility.StayAtAirPortMinutes);
                    AddTime = TakeoffAfterThisTime.Subtract(SecondAirlineListClone[secondIdx].ModifiedStartTime);
                    if (AddTime.TotalMinutes > 0)
                    {
                        //尝试是否能够将first整体后移
                        for (int i = secondIdx; i < second.Count; i++)
                        {
                            SecondAirlineListClone[i].ModifiedStartTime += AddTime;
                        }
                    }
                    if (!Exchange(FirstAirlineListClone, firstIdx, SecondAirlineListClone, secondIdx))
                    {
                        continue;
                    }
                    var FirstForTest  = new List <Airline>();
                    var SecondForTest = new List <Airline>();
                    foreach (var air in FirstAirlineListClone)
                    {
                        if (air.ModifiedPlaneID == firstPlaneId)
                        {
                            FirstForTest.Add(air);
                        }
                        else
                        {
                            SecondForTest.Add(air);
                        }
                    }
                    foreach (var air in SecondAirlineListClone)
                    {
                        if (air.ModifiedPlaneID == firstPlaneId)
                        {
                            FirstForTest.Add(air);
                        }
                        else
                        {
                            SecondForTest.Add(air);
                        }
                    }
                    //测试一下交换后分数
                    FirstForTest.Sort((x, y) => { return(x.ModifiedStartTime.CompareTo(y.ModifiedStartTime)); });
                    SecondForTest.Sort((x, y) => { return(x.ModifiedStartTime.CompareTo(y.ModifiedStartTime)); });
                    var FirstScoreAfter = Solution.FixAirline(FirstForTest, true).Score;
                    if (FirstScoreAfter == double.MaxValue)
                    {
                        continue;
                    }
                    var SecondScoreAfter = Solution.FixAirline(SecondForTest, true).Score;
                    if (SecondScoreAfter == double.MaxValue)
                    {
                        continue;
                    }
                    var TotalScoreAfter = FirstScoreAfter + SecondScoreAfter;
                    var Minius          = Math.Round(TotalScoreAfter, 0) - Math.Round(TotalScore, 0);
                    Rtn = new ExchangeRecord()
                    {
                        firstIndex    = firstIdx,
                        secondIndex   = secondIdx,
                        firstPlaneId  = firstPlaneId,
                        secondPlaneId = secondPlandId,
                        firstScore    = FirstScoreAfter,
                        secondScore   = SecondScoreAfter,
                        DiffScore     = Minius,
                    };
                    return(Rtn);
                }
            }
            return(Rtn);
        }