コード例 #1
0
 protected void Page_Load(object sender, EventArgs e)
 {
     using (VendingModelContainer dc = new VendingModelContainer())
     {
         try
         {
             DateTime     dt           = DateTime.Now;
             CryptoHelper ch           = new CryptoHelper();
             long         cdt          = Convert.ToInt64(dt.ToString("yyyyMMddHHmmss"));
             string       cdtstr       = dt.ToString("dd.MM.yyyy HH:mm:ss");
             var          waterdevices = dc.WaterDevices;
             //считываем запрос
             string encryptedrequest       = Request.Form["Request"];
             string signature              = Request.Form["Signature"];
             string encryptedaeskey        = Request.Form["AData"];
             string encryptediv            = Request.Form["BData"];
             var    devicestable           = dc.WaterDevices;
             WaterDeviceTelemetry logentry = null;
             bool signcorrect              = ch.DecryptVerifyDeviceLog(encryptedrequest, signature, encryptedaeskey, encryptediv, out logentry);
             if (signcorrect)
             {
                 logentry.DateTime    = cdt;
                 logentry.DateTimeStr = cdtstr;
                 var telemetrytable = dc.WaterDeviceTelemetry;
                 var statetable     = dc.WaterDeviceState;
                 try
                 {
                     WaterDeviceState tmpstate = statetable.Where(x => x.WaterDeviceID == logentry.WaterDeviceID).First();
                     dc.Entry(tmpstate).CurrentValues.SetValues(logentry);
                 }
                 catch
                 {
                     var tmpstate = (WaterDeviceState)logentry;
                     statetable.Add(tmpstate);
                 }
                 telemetrytable.Add(logentry);
                 dc.SaveChanges();
             }
         }
         catch /*(Exception ex)*/
         {
         }
         finally
         {
         }
     }
 }
コード例 #2
0
    private void FillTablesWithData()
    {
        List <string> warnlist = new List <string>()
        {
        };

        using (VendingModelContainer dc = new VendingModelContainer())
        {
            using (var dbContextTransaction = dc.Database.BeginTransaction())
            {
                try
                {
                    try
                    {
                        if (globalmenuitemhandler.Value != "sales")
                        {
                            salesinfopanel.Visible = false;
                        }
                        if (globalmenuitemhandler.Value != "devcontrol")
                        {
                            vmcpanel.Visible = false;
                        }
                        switch (globalmenuitemhandler.Value)
                        {
                        case "devinfo":
                        {
                            deviceinfopanel.Visible = true;
                            break;
                        }

                        case "cash":
                        {
                            cashinfopanel.Visible = true;
                            break;
                        }

                        case "devcontrol":
                        {
                            vmcpanel.Visible = true;
                            break;
                        }

                        case "devsettings":
                        {
                            devicesettingspanel.Visible = true;
                            break;
                        }

                        case "devcomponents":
                        {
                            devcomponentspanel.Visible = true;
                            break;
                        }
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.SystemLog(Request.UserHostAddress, "Ошибка: " + ex.Message, ex.InnerException?.Message, User.Identity.Name);
                    }
                    //если пришла информация об успешном выполнении операции, показываем сообщение что все заебись
                    if (successheadertext.Length > 5 && successmsgtext.Length > 5)
                    {
                        successheader.Text   = successheadertext;
                        successmsg.Text      = successmsgtext;
                        successpanel.Visible = true;
                    }
                    //инициализируем переменные и считываем объекты из БД
                    Accounts tmpacc = dc.Accounts.First(x => x.UserID == HttpContext.Current.User.Identity.Name && x.Valid && !x.Suspended);
                    if (tmpacc.TOTPSecret == "")
                    {
                        warnlist.Add("Не настроена двухфакторная авторизация. Управление устройством невозможно.");
                    }
                    WaterDevices         tmpdev  = dc.WaterDevices.First(x => x.ID == wvdid && x.AccountID == tmpacc.ID && x.Valid);
                    WaterDeviceTelemetry tmptele = dc.WaterDeviceTelemetry.Where(x => x.WaterDeviceID == wvdid).OrderByDescending(y => y.DateTime).First();
                    //если связи с устройством нет, показываем предупреждение
                    DateTime lastlogdt = DateTime.ParseExact(tmptele.DateTime.ToString(), "yyyyMMddHHmmss",
                                                             System.Globalization.CultureInfo.InvariantCulture);
                    lastseendatetimelabel.Text = tmptele.DateTimeStr;
                    if (lastlogdt.AddMinutes(5) < DateTime.Now)
                    {
                        timeoutwarnpanel.Visible = true;
                    }
                    else
                    {
                    }
                    DateTime cdt     = DateTime.Now;
                    long     cdtlong = Convert.ToInt64(cdt.ToString("yyyyMMddHHmmss"));
                    string   cdtstr  = cdt.ToString("dd.MM.yyyy HH:mm:ss");
                    if (salesinfopanel.Visible)
                    {
                        //заполняем таблицу продаж
                        salestable.Rows.Clear();
                        var watersales = dc.WaterSales.Where(x => x.WaterDeviceID == tmpdev.ID).OrderByDescending(y => y.ID).Take(100);
                        foreach (var item in watersales)
                        {
                            TableRow newtablerow = new TableRow
                            {
                                HorizontalAlign = HorizontalAlign.Center,
                                VerticalAlign   = VerticalAlign.Middle
                            };
                            TableCell datetimecell = new TableCell
                            {
                                Width = 125,
                                Text  = item.EndDateTimeString
                            };
                            TableCell qtycell = new TableCell
                            {
                                Width = 99,
                                Text  = item.Quantity.ToString("N2")
                            };
                            TableCell totalcell = new TableCell
                            {
                                Width = 99,
                                Text  = (item.Quantity * item.PRICE_PER_ITEM_MDE / 100).ToString("N2")
                            };
                            TableCell usercashcell = new TableCell
                            {
                                Width = 99,
                                Text  = item.UserCash.ToString("N2")
                            };
                            TableCell changecell = new TableCell
                            {
                                Width = 99,
                                Text  = (item.ActualChangeDispensed - item.ChangeActualDiff).ToString("N2")
                            };
                            TableCell actchangecell = new TableCell
                            {
                                Width = 99,
                                Text  = item.ActualChangeDispensed.ToString("N2")
                            };
                            TableCell stageandreceiptcell = new TableCell
                            {
                                Width = 120,
                                Text  = item.StageNumber.ToString() + " \\ " + item.ReceiptNumber.ToString()
                            };
                            newtablerow.Cells.AddRange(new TableCell[] { datetimecell, qtycell, totalcell, usercashcell, changecell, actchangecell, stageandreceiptcell });
                            salestable.Rows.Add(newtablerow);
                        }
                        //Заполняем графики данными
                        DateTime last24hstart   = cdt.AddDays(-1);
                        DateTime lastmonthstart = cdt.AddMonths(-1).Date;
                        DateTime lastyearstart  = cdt.AddYears(-1).Date;
                        long     start24h       = Convert.ToInt64(last24hstart.ToString("yyyyMMddHHmmss"));
                        long     startmonth     = Convert.ToInt64(lastmonthstart.ToString("yyyyMMddHHmmss"));
                        long     startyear      = Convert.ToInt64(lastyearstart.ToString("yyyyMMddHHmmss"));
                        saleslast24hchart.ChartAreas[0].AxisX.Minimum        = Convert.ToDouble(last24hstart.ToOADate());
                        saleslast24hchart.ChartAreas[0].AxisX.Maximum        = Convert.ToDouble(cdt.ToOADate());
                        saleslastmonthchartdaily.ChartAreas[0].AxisX.Minimum = Convert.ToDouble(lastmonthstart.ToOADate());
                        saleslastmonthchartdaily.ChartAreas[0].AxisX.Maximum = Convert.ToDouble(cdt.AddDays(1).Date.ToOADate());
                        saleslastyearweekly.ChartAreas[0].AxisX.Minimum      = Convert.ToDouble(lastyearstart.ToOADate());
                        saleslastyearweekly.ChartAreas[0].AxisX.Maximum      = Convert.ToDouble(cdt.AddDays(1).Date.ToOADate());
                        saleslast24hchart.Series[0].Points.Clear();
                        saleslastmonthchartdaily.Series[0].Points.Clear();
                        saleslastyearweekly.Series[0].Points.Clear();
                        var last24hwatersales = dc.WaterSales.Where(x => x.WaterDeviceID == tmpdev.ID && x.EndDateTime > start24h).OrderBy(y => y.ID);
                        foreach (var item in last24hwatersales)
                        {
                            DateTime saledt = DateTime.ParseExact(item.EndDateTime.ToString(), "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
                            double   total  = ((double)(item.Quantity) * item.PRICE_PER_ITEM_MDE / 100 - (double)(item.ChangeActualDiff));
                            saleslast24hchart.Series[0].Points.AddXY(saledt, total);
                        }
                        var lastmonthwatersales = dc.WaterSales.Where(x => x.WaterDeviceID == tmpdev.ID && x.EndDateTime > startmonth).OrderBy(y => y.ID);
                        foreach (var item in lastmonthwatersales)
                        {
                            DateTime saledt = DateTime.ParseExact(item.EndDateTime.ToString(), "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
                            double   total  = ((double)(item.Quantity) * item.PRICE_PER_ITEM_MDE / 100 - (double)(item.ChangeActualDiff));
                            saleslastmonthchartdaily.Series[0].Points.AddXY(saledt, total);
                        }
                        var lastyearwatersales = dc.WaterSales.Where(x => x.WaterDeviceID == tmpdev.ID && x.EndDateTime > startyear).OrderBy(y => y.ID);
                        foreach (var item in lastyearwatersales)
                        {
                            DateTime saledt = DateTime.ParseExact(item.EndDateTime.ToString(), "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
                            double   total  = ((double)(item.Quantity) * item.PRICE_PER_ITEM_MDE / 100 - (double)(item.ChangeActualDiff));
                            saleslastyearweekly.Series[0].Points.AddXY(saledt, total);
                        }
                    }
                    //если есть неисполненные команды устройству, отсылка новых команд невозможна, кнопки надо заблокировать
                    bool pendingcommands = (dc.WaterDeviceCommands.Where(x => x.WaterDeviceID == tmpdev.ID && x.RequestedDatetime == 0).Count() > 0);
                    devmodecb.Enabled           = (!pendingcommands && !changedevmodetotpbox.Visible && tmpacc.TOTPSecret != "");
                    changedevmodebutton.Enabled = (devmodecb.Enabled && devmodecb.SelectedIndex > 0);
                    if (pendingcommands)
                    {
                        changedevmodemsg.Text = "Отмените предыдущую команду или дождитесь ее выполнения";
                        pendingcommand.Text   = dc.WaterDeviceCommands.Where(x => x.WaterDeviceID == tmpdev.ID && x.RequestedDatetime == 0).First().Command;
                    }
                    pendingcmdwarnpanel.Visible = pendingcommands;
                    ccsumcell.Text = tmptele.CCSum.ToString("N2");
                    cbsumcell.Text = tmptele.CBCount.ToString() + "\\" + tmptele.CBSum.ToString("N2");
                    basumcell.Text = tmptele.BABillsCount.ToString() + "\\" + tmptele.BASum.ToString("N2");
                    if (tmpdev.LocationAddress == "" || tmpdev.LocationLatitude == 0 || tmpdev.LocationLongtitude == 0)
                    {
                        warnlist.Add("Не указан адрес установки");
                    }
                    if (!tmptele.KKTPrinterConnected)
                    {
                        warnlist.Add("Принтер чеков не найден");
                    }
                    if (tmptele.KKTPrinterPaperEmpty)
                    {
                        warnlist.Add("Принтер чеков: кончилась бумага");
                    }
                    if (tmptele.KKTPrinterNonRecoverableError)
                    {
                        warnlist.Add("Принтер чеков: критическая ошибка");
                    }
                    if (tmptele.KKTPrinterCutterError)
                    {
                        warnlist.Add("Принтер чеков: ошибка отрезчика");
                    }
                    if (tmptele.KKTPrinterOverHeated)
                    {
                        warnlist.Add("Принтер чеков: перегрев");
                    }
                    if (tmptele.KKTPrinterPaperJammed)
                    {
                        warnlist.Add("Принтер чеков: замятие бумаги");
                    }
                    if (tmptele.KKTPrinterPaperEnding)
                    {
                        warnlist.Add("Принтер чеков: бумага кончается");
                    }
                    if (tmptele.KKTStageOver24h)
                    {
                        warnlist.Add("Длительность смены превысила 24 часа");
                    }
                    if (tmptele.VMCMode == "4" || tmptele.VMCMode == "5")
                    {
                        warnlist.Add("Режим продаж неактивен");
                    }
                    if (tmptele.IncassoSum > 3000)
                    {
                        warnlist.Add("Рекомендуется проведение инкасации (сумма больше 3000)");
                    }
                    if (tmptele.BABillsCount > 300)
                    {
                        warnlist.Add("Рекомендуется проведение инкасации (купюроприемник близок к заполнению)");
                    }
                    if (tmptele.CC10RURCount < 20 || tmptele.CC5RURCount < 20 || tmptele.CC2RURCount < 20 || tmptele.CC1RURCount < 20)
                    {
                        warnlist.Add("Монетоприемник недостаточно заполнен");
                    }
                    if (tmptele.WaterTempCelsius < 4)
                    {
                        warnlist.Add("Критически низкая температура воды");
                    }
                    inboxtempcell.Text = tmptele.InboxTempCelsius.ToString("N2");
                    if (tmptele.InboxTempCelsius > 50)
                    {
                        warnlist.Add("Критически высокая температура устройства, возможны сбои в работе");
                    }
                    ambienttempcell.Text = tmptele.AmbientTempCelsius.ToString("N2");
                    ambienthumcell.Text  = tmptele.AmbientRelativeHumidity.ToString("N2");
                    if (tmptele.AmbientRelativeHumidity > 70)
                    {
                        warnlist.Add("Критически высокая влажность внутри торгового автомата");
                    }
                    waterlevelcell.Text = tmptele.WaterLevelPercent.ToString();
                    if (tmptele.WaterLevelPercent < 20)
                    {
                        warnlist.Add("Низкий уровень воды");
                    }
                    if (tmptele.MDBInitStep != 5)
                    {
                        warnlist.Add("Устройства приема наличных не готовы");
                    }
                    if (deviceinfopanel.Visible)
                    {
                        //заполняем таблицу информации об устройстве
                        regdtcell.Text           = tmpdev.RegistrationDateTimeStr;
                        addresslink.Text         = tmpdev.LocationAddress;
                        addresslink.NavigateUrl  = "/User/ChangeDeviceAddress.aspx?wvdid=" + wvdid.ToString();
                        devproductnamecell.Text  = tmpdev.ProductName;
                        devcontactphonecell.Text = tmpdev.CustomerServiceContactPhone;
                        taxsystemtypecell.Text   = tmpdev.TaxSystemType.ToString();
                        devpricecell.Text        = tmpdev.PRICE_PER_ITEM_MDE.ToString();
                        totalhourscell.Text      = tmptele.TotalHoursWorked.ToString("N2");
                        wccell.Text = tmptele.TotalLitersDIspensed.ToString("N2");
                        lastseendatetimecell.Text = tmptele.DateTimeStr;
                        vmcmodecell.Text          = tmptele.VMCMode;
                        softversioncell.Text      = tmptele.ProgramVersion;
                    }
                    if (cashinfopanel.Visible)
                    {
                        //заполняем таблицу текущих итогов
                        devtotalsum.Text = (tmptele.CCSum + tmptele.IncassoSum).ToString("N2");
                        incassocell.Text = tmptele.IncassoSum.ToString("N2");
                        //заполняем таблицу состояния монетоприемника
                        cc10cell.Text = tmptele.CC10RURCount.ToString();
                        cc5cell.Text  = tmptele.CC5RURCount.ToString();
                        cc2cell.Text  = tmptele.CC2RURCount.ToString();
                        cc1cell.Text  = tmptele.CC1RURCount.ToString();
                        //заполняем таблицу инкассаций
                        last100incassotable.Rows.Clear();
                        var waterincassos = dc.WaterDeviceIncasso.Where(x => x.WaterDeviceID == tmpdev.ID).OrderByDescending(y => y.ID).Take(100);
                        foreach (var item in waterincassos)
                        {
                            TableRow newtablerow = new TableRow
                            {
                                HorizontalAlign = HorizontalAlign.Center,
                                VerticalAlign   = VerticalAlign.Middle
                            };
                            TableCell datetimecell = new TableCell
                            {
                                Width = 200,
                                Text  = item.IncassoDatetimeStr
                            };
                            TableCell cashboxcoins = new TableCell
                            {
                                Width = 275,
                                Text  = item.IncassoCashboxCoins.ToString() + "\\" + item.IncassoCashboxSum.ToString("N2")
                            };
                            TableCell babillscell = new TableCell
                            {
                                Width = 275,
                                Text  = item.IncassoBABills.ToString() + "\\" + item.IncassoBASum.ToString("N2")
                            };
                            newtablerow.Cells.AddRange(new TableCell[] { datetimecell, cashboxcoins, babillscell });
                            last100incassotable.Rows.Add(newtablerow);
                        }
                        //если таблица не пустая, показываем ее
                        last100incassodiv.Visible = (last100incassotable.Rows.Count > 0);
                    }
                    if (devicesettingspanel.Visible)
                    {
                        //заполняем таблицу индивидуальных настроек
                        rcptprodnamecell.Text          = tmpdev.ProductName;
                        phonecell.Text                 = tmpdev.CustomerServiceContactPhone;
                        pricecell.Text                 = tmpdev.PRICE_PER_ITEM_MDE.ToString();
                        taxsystemcell.Text             = tmpdev.TaxSystemType.ToString();
                        tankheigthcell.Text            = tmpdev.WaterTankHeigthcm.ToString();
                        watersensoraddresscell.Text    = String.Join(String.Empty, Array.ConvertAll(tmpdev.WaterTempSensorAddress, x => x.ToString("X2")));
                        usekktcell.SelectedValue       = tmpdev.UseKKT ? "1" : "0";
                        devicesettingsversioncell.Text = tmpdev.SettingsVersion.ToString();
                    }
                    if (devcomponentspanel.Visible)
                    {
                        //заполняем таблицу периферийных устройств
                        watertempcell.Text = tmptele.WaterTempCelsius.ToString("N2");
                        string heaterstatestring   = "Нет";
                        string xtltstatestring     = "Нет";
                        string fillpumpstatestring = "Нет";
                        if (tmptele.IsHeaterOn)
                        {
                            heaterstatestring = "Да";
                        }
                        if (tmptele.IsExternalLightOn)
                        {
                            xtltstatestring = "Да";
                        }
                        if (tmptele.IsFillPumpSocketActive)
                        {
                            fillpumpstatestring = "Да";
                        }
                        heateroncell.Text     = heaterstatestring;
                        xtltoncell.Text       = xtltstatestring;
                        fillpumponcell.Text   = fillpumpstatestring;
                        kktmfgnumbercell.Text = tmptele.KKTMfgNumber;
                        kktmodecell.Text      = BitConverter.ToString(new byte[] { (byte)tmptele.KKTCurrentMode });
                        string kktstageopenedstr    = "Нет";
                        string kktstageover24hstr   = "Нет";
                        string kktprnconnectedstr   = "Нет";
                        string kktprnpaperemptystr  = "Нет";
                        string kktprnctirerrorstr   = "Нет";
                        string kktprncuttererrorstr = "Нет";
                        string kktprnoverheatstr    = "Нет";
                        string kktprnpaperjammedstr = "Нет";
                        string kktprnpaperendingstr = "Нет";
                        string kktreceiptopenedstr  = "Нет";
                        if (tmptele.KKTPrinterConnected)
                        {
                            kktprnconnectedstr = "Да";
                        }
                        if (tmptele.KKTPrinterPaperEmpty)
                        {
                            kktprnpaperemptystr = "Да";
                        }
                        if (tmptele.KKTPrinterNonRecoverableError)
                        {
                            kktprnctirerrorstr = "Да";
                        }
                        if (tmptele.KKTPrinterCutterError)
                        {
                            kktprncuttererrorstr = "Да";
                        }
                        if (tmptele.KKTPrinterOverHeated)
                        {
                            kktprnoverheatstr = "Да";
                        }
                        if (tmptele.KKTPrinterPaperJammed)
                        {
                            kktprnpaperjammedstr = "Да";
                        }
                        if (tmptele.KKTPrinterPaperEnding)
                        {
                            kktprnpaperendingstr = "Да";
                        }
                        if (tmptele.KKTStageOpened)
                        {
                            kktstageopenedstr = "Да";
                        }
                        if (tmptele.KKTStageOver24h)
                        {
                            kktstageover24hstr = "Да";
                        }
                        if (tmptele.KKTReceiptOpened)
                        {
                            kktreceiptopenedstr = "Да";
                        }
                        kktstageopenedcell.Text         = kktstageopenedstr;
                        kktstageover24hcell.Text        = kktstageover24hstr;
                        kktprinterconnectedcell.Text    = kktprnconnectedstr;
                        kktprinterpaperemptycell.Text   = kktprnpaperemptystr;
                        kktprinterpaperendingcell.Text  = kktprnpaperendingstr;
                        kktprintercuttererrorcell.Text  = kktprncuttererrorstr;
                        kktprinteroverheatcell.Text     = kktprnoverheatstr;
                        kktprinterpaperjammedcell.Text  = kktprnpaperjammedstr;
                        kktprintererrorcell.Text        = kktprnctirerrorstr;
                        kktstagenumbercell.Text         = tmptele.KKTStageNumber;
                        kktsreceiptopenedcell.Text      = kktreceiptopenedstr;
                        kktstagecloseddatetimecell.Text = tmptele.LastStageClosedDateTimeStr;
                        kktnextreceiptnumbercell.Text   = tmptele.KKTReceiptNextNumber.ToString();
                        mdbinitstepcell.Text            = tmptele.MDBInitStep.ToString();
                    }
                }
                catch (Exception ex)
                {
                    Logger.SystemLog(Request.UserHostAddress, "Ошибка: " + ex.Message, ex.InnerException?.Message, User.Identity.Name);
                }
                finally
                {
                    warnpanel.Controls.Clear();
                    if (warnlist.Count > 0)
                    {
                        Label caplabel = new Label();
                        caplabel.Text      = "Предупреждения: ";
                        caplabel.Font.Bold = true;
                        caplabel.Font.Name = "Arial";
                        caplabel.Font.Size = 14;
                        caplabel.ForeColor = System.Drawing.Color.Black;
                        warnpanel.Controls.Add(caplabel);
                        warnpanel.Controls.Add(new LiteralControl("<br>"));
                        foreach (var item in warnlist)
                        {
                            Label newlabel = new Label();
                            newlabel.Text      = item;
                            newlabel.Font.Bold = true;
                            newlabel.Font.Name = "Arial";
                            newlabel.Font.Size = 13;
                            newlabel.ForeColor = System.Drawing.Color.Black;
                            warnpanel.Controls.Add(newlabel);
                            warnpanel.Controls.Add(new LiteralControl("<br>"));
                        }
                        devwarningpanel.Visible = true;
                    }
                    if (globalmenuitemhandler != null)
                    {
                    }
                }
            }
        }
    }
コード例 #3
0
    protected void AccountMenu_MenuItemClick(object sender, MenuEventArgs e)
    {
        globalmenuitemhandler = e.Item;
        if (globalmenuitemhandler.Value != "licence")
        {
            licpanel.Visible = false;
        }
        switch (globalmenuitemhandler.Value)
        {
        case "licence":
        {
            licpanel.Visible = true;
            break;
        }

        case "mydevlist":
        {
            using (VendingModelContainer dc = new VendingModelContainer())
            {
                Accounts            tmpacc     = dc.Accounts.First(x => x.UserID == HttpContext.Current.User.Identity.Name);
                List <WaterDevices> tmpdevlist = dc.WaterDevices.Where(x => x.AccountID == tmpacc.ID).ToList();
                for (int i = 0; i < tmpdevlist.Count; i++)
                {
                    try
                    {
                        WaterDevices         tmpdev          = tmpdevlist[i];
                        WaterDeviceTelemetry tmpdevtelemetry = dc.WaterDeviceTelemetry.Where(x => x.WaterDeviceID == tmpdev.ID).OrderByDescending(y => y.DateTime).First();
                        TableRow             devtablerow     = new TableRow();
                        if (i % 2 == 1)
                        {
                            devtablerow.BackColor = System.Drawing.Color.FromArgb(0x53, 0x00, 0xA6);
                        }
                        else
                        {
                            devtablerow.BackColor = System.Drawing.Color.FromArgb(0x00, 0x00, 0x99);
                        }
                        devtablerow.Height = 60;
                        TableCell devidcell = new TableCell();
                        devidcell.Width           = 100;
                        devidcell.Height          = 60;
                        devidcell.HorizontalAlign = HorizontalAlign.Center;
                        devidcell.VerticalAlign   = VerticalAlign.Middle;
                        devidcell.Text            = "<a href=\"/User/WaterDeviceInfo.aspx?wvdid=" + tmpdev.ID.ToString() + "\">" + tmpdev.ID.ToString() + "</a>";
                        TableCell adresscell = new TableCell();
                        adresscell.Width           = 390;
                        adresscell.Height          = 60;
                        adresscell.HorizontalAlign = HorizontalAlign.Center;
                        adresscell.VerticalAlign   = VerticalAlign.Middle;
                        adresscell.Text            = tmpdev.LocationAddress;
                        TableCell onlinecell = new TableCell();
                        onlinecell.Width           = 60;
                        onlinecell.Height          = 60;
                        onlinecell.HorizontalAlign = HorizontalAlign.Center;
                        onlinecell.VerticalAlign   = VerticalAlign.Middle;
                        DateTime lastlogdt = DateTime.ParseExact(tmpdevtelemetry.DateTime.ToString(), "yyyyMMddHHmmss",
                                                                 System.Globalization.CultureInfo.InvariantCulture);
                        if (lastlogdt.AddMinutes(5) < DateTime.Now)
                        {
                            onlinecell.Text = string.Format("<img src=\"/images/disconnected-64.png\" />");
                        }
                        else
                        {
                            onlinecell.Text = string.Format("<img src='/images/connected-64.png' />");
                        }
                        TableCell statuscell = new TableCell();
                        statuscell.Width           = 70;
                        statuscell.Height          = 60;
                        statuscell.HorizontalAlign = HorizontalAlign.Center;
                        statuscell.VerticalAlign   = VerticalAlign.Middle;
                        if (tmpdevtelemetry.KKTPrinterNonRecoverableError || tmpdevtelemetry.KKTPrinterPaperEnding || tmpdevtelemetry.KKTPrinterPaperJammed ||
                            tmpdevtelemetry.KKTPrinterPaperEmpty || tmpdevtelemetry.KKTPrinterCutterError || tmpdevtelemetry.KKTStageOver24h || tmpdevtelemetry.WaterLevelPercent < 20 ||
                            tmpdevtelemetry.BABillsCount > 300 || tmpdevtelemetry.WaterTempCelsius < 4 || tmpdevtelemetry.CC10RURCount < 20 || tmpdevtelemetry.CC5RURCount < 20 ||
                            tmpdevtelemetry.CC2RURCount < 20 || tmpdevtelemetry.CC1RURCount < 20 || tmpdevtelemetry.VMCMode != "1" || tmpdevtelemetry.MDBInitStep != 5 || tmpdevtelemetry.KKTCurrentMode != 1)
                        {
                            statuscell.Text = string.Format("<img src=\"/images/warning.png\" />");
                        }
                        else
                        {
                            statuscell.Text = string.Format("<img src='/images/OK.png' />");
                        }
                        TableCell incassosumcell = new TableCell();
                        incassosumcell.Width           = 120;
                        incassosumcell.Height          = 60;
                        incassosumcell.HorizontalAlign = HorizontalAlign.Center;
                        incassosumcell.VerticalAlign   = VerticalAlign.Middle;
                        incassosumcell.Text            = tmpdevtelemetry.IncassoSum.ToString();
                        TableCell totalsumcell = new TableCell();
                        totalsumcell.Width           = 120;
                        totalsumcell.Height          = 60;
                        totalsumcell.HorizontalAlign = HorizontalAlign.Center;
                        totalsumcell.VerticalAlign   = VerticalAlign.Middle;
                        totalsumcell.Text            = (tmpdevtelemetry.IncassoSum + tmpdevtelemetry.CCSum).ToString();
                        devtablerow.Cells.AddRange(new TableCell[] { devidcell, adresscell, onlinecell, statuscell, incassosumcell, totalsumcell });
                        devlist.Rows.Add(devtablerow);
                    }
                    catch (Exception ex)
                    {
                        Logger.SystemLog(Request.UserHostAddress, "Ошибка: " + ex.Message, ex.InnerException?.Message, User.Identity.Name);
                    }
                }
            }
            devlistpanel.Visible = true;
            break;
        }

        case "exit":
        {
            //vmcpanel.Visible = true;
            FormsAuthentication.SignOut();
            using (VendingModelContainer dc = new VendingModelContainer())
            {
                try
                {
                    Accounts tmpacc = dc.Accounts.First(x => x.UserID == HttpContext.Current.User.Identity.Name);
                    Logger.AccountLog(Request.UserHostAddress, "Выход из системы", "", tmpacc.ID);
                    Logger.SystemLog(Request.UserHostAddress, "Выход из системы", tmpacc.UserID, "Server");
                }
                catch (Exception ex)
                {
                    Logger.SystemLog(Request.UserHostAddress, "Ошибка: " + ex.Message, ex.InnerException?.Message, User.Identity.Name);
                }
            }
            Response.Redirect("~/Login.aspx");
            break;
        }
        }
    }
コード例 #4
0
    public bool DecryptVerifyDeviceLog(string encryptedrequest, string signature, string adata, string bdata, out WaterDeviceTelemetry outlogentry)
    {
        byte[] encryptedrequestbytes = Convert.FromBase64String(encryptedrequest);
        byte[] signaturebytes        = Convert.FromBase64String(signature);
        byte[] encryptedaeskeybytes  = Convert.FromBase64String(adata);
        byte[] encryptedivbytes      = Convert.FromBase64String(bdata);
        bool   signcorrect           = false;

        try
        {
            //инициализируем криптодвижок для расшифровки
            CspParameters cspParams = new CspParameters
            {
                ProviderType = 1
            };
            RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(cspParams);
            rsaProvider.ImportCspBlob(PrivateKey);
            //расшифровываем симметричный ключ и вектор инициализации
            byte[] AESKeyBytes = rsaProvider.Decrypt(encryptedaeskeybytes, false);
            byte[] AESIVBytes  = rsaProvider.Decrypt(encryptedivbytes, false);
            AesCryptoServiceProvider AESProv = new AesCryptoServiceProvider
            {
                Mode    = CipherMode.CBC,
                Padding = PaddingMode.PKCS7,
                KeySize = 128,
                Key     = AESKeyBytes,
                IV      = AESIVBytes
            };
            //расшифровываем запрос
            string       plaintext    = "";
            MemoryStream memoryStream = null;
            try
            {
                memoryStream = new MemoryStream(encryptedrequestbytes);
                using (CryptoStream cryptoStream = new CryptoStream(memoryStream, AESProv.CreateDecryptor(), CryptoStreamMode.Read))
                {
                    plaintext = new StreamReader(cryptoStream, Encoding.UTF8).ReadToEnd();
                }
            }
            finally
            {
                if (memoryStream != null)
                {
                    memoryStream.Dispose();
                }
            }
            WaterDeviceTelemetry tmplog = Deserialize <WaterDeviceTelemetry>(plaintext);
            //инициализируем криптодвижок для проверки подписи присланных данных
            rsaProvider = new RSACryptoServiceProvider();
            using (VendingModelContainer dc = new VendingModelContainer())
            {
                var devicestable = dc.WaterDevices;
                rsaProvider.ImportCspBlob(devicestable.First(x => x.ID == tmplog.WaterDeviceID).PublicKey);
            }
            signcorrect = rsaProvider.VerifyData(Encoding.UTF8.GetBytes(plaintext), CryptoConfig.MapNameToOID("SHA512"), signaturebytes);
            outlogentry = tmplog;
        }
        catch
        {
            outlogentry = null;
        }
        return(signcorrect);
    }