示例#1
0
        protected override bool Execute(CodeActivityContext context)
        {
            DateTime dt = new DateTime(Year.Get(context), Month.Get(context), 1);

            try
            {
                TI_ChanelType ti = new TI_ChanelType
                {
                    ChannelType    = ChannelType.Get(context),
                    TI_ID          = TiId.Get(context),
                    DataSourceType = null
                };

                SectionIntegralComplexResults result =
                    ARM_Service.GroupTP_GetActConsumptionPowerTi(ti, ExcelAdapterType, dt, 2, ".", IsReadCalculatedValues.Get(context), isExportAllIncludetTi.Get(context), false, null, WcfTimeOut.Get(context));
                if (!string.IsNullOrEmpty(result.Errors.ToString()))
                {
                    Error.Set(context, result.Errors.ToString());
                }
                else
                {
                    SendEmail(context, CompressUtility.DecompressGZip(result.Document));
                }
            }
            catch (Exception ex)
            {
                Error.Set(context, ex.Message);
                if (!HideException.Get(context))
                {
                    throw ex;
                }
            }

            return(string.IsNullOrEmpty(Error.Get(context)));
        }
示例#2
0
        protected override bool Execute(CodeActivityContext context)
        {
            DateTime dt = new DateTime(Year.Get(context), Month.Get(context), 1);

            try
            {
                ID_TypeHierarchy idHierarchy = new ID_TypeHierarchy();
                idHierarchy.ID            = ID.Get(context);
                idHierarchy.TypeHierarchy = HierarchyType;

                SectionIntegralComplexResults result =
                    ARM_Service.GroupTP_GetActConsumptionPower(idHierarchy, GroupTPPowerReportMode, null,
                                                               TypeOfMeasuring, ExcelAdapterType, dt,
                                                               2, ".", IsReadCalculatedValues.Get(context), IncludeAllTI.Get(context), false, null, null, WcfTimeOut.Get(context));
                if (!string.IsNullOrEmpty(result.Errors.ToString()) && (result.Document == null || result.Document.Length == 0))
                {
                    Error.Set(context, result.Errors.ToString());
                }
                else
                {
                    SendEmail(context, CompressUtility.DecompressGZip(result.Document));
                }
            }
            catch (Exception ex)
            {
                Error.Set(context, ex.Message);
                if (!HideException.Get(context))
                {
                    throw ex;
                }
            }

            return(string.IsNullOrEmpty(Error.Get(context)));
        }
        private XlsFileExBase InitBalanceFreeHierarchy(string balanceUn, out bool isHeaderFormed)
        {
            isHeaderFormed = false;
            if (_balanceCalculated == null)
            {
                return(null);
            }

            BalanceFreeHierarchyCalculatedResult balanceCalculatedResult;

            if (!_balanceCalculated.CalculatedValues.TryGetValue(balanceUn, out balanceCalculatedResult))
            {
                return(null);
            }

            var header = FreeHierarchyFactory.BL_GetBalanceHeader(balanceUn);
            var ms     = header == null ? null : header.Item2;

            XlsFileExBase xls;
            var           decompressed = CompressUtility.DecompressGZip(ms);

            if (decompressed != null)
            {
                isHeaderFormed = true;
                try
                {
                    xls = new XlsFileExBase(decompressed, true);
                }
                catch (Exception ex)
                {
                    _errors.Append(ex.Message);
                    xls = new XlsFileExBase(1, TExcelFileFormat.v2010, true);
                    xls.OptionsPrecisionAsDisplayed = _setPercisionAsDisplayed;
                }
            }
            else
            {
                xls = new XlsFileExBase(1, TExcelFileFormat.v2013, true);
                xls.NewFile(1, TExcelFileFormat.v2013);
            }


            Init(xls);

            if (balanceCalculatedResult != null)
            {
                if (string.IsNullOrEmpty(balanceCalculatedResult.DocumentName))
                {
                    xls.SheetName = "Документ от " + DateTime.Today.ToShortDateString() + " " + DateTime.Now.ToShortTimeString();
                }
                else
                {
                    xls.SheetName = balanceCalculatedResult.DocumentName;
                }
            }

            xls.OptionsPrecisionAsDisplayed = _setPercisionAsDisplayed;

            return(xls);
        }
        protected override bool Execute(CodeActivityContext context)
        {
            try
            {
                var balanceFreeHierarchyUNs = new List <string> {
                    BalanceId.Get(context)
                };

                var balanceResult = ARM_Service.BL_GetFreeHierarchyBalanceResult(balanceFreeHierarchyUNs,
                                                                                 StartDateTime.Get(context),
                                                                                 EndDateTime.Get(context),
                                                                                 null,
                                                                                 TExportExcelAdapterType.toXLSx, true,
                                                                                 DiscreteType, EnumUnitDigit.Kilo, false,
                                                                                 EnumUnitDigit.Kilo, true, false, 3, 3, false, false, false);

                if (balanceResult != null)
                {
                    if (balanceResult.CalculatedValues == null || balanceResult.CalculatedValues.Count == 0)
                    {
                        throw new Exception("Документ не сформирован. Неверный идентификатор или баланс удален.");
                    }

                    var calculatedResult = balanceResult.CalculatedValues.First().Value;

                    if (calculatedResult.CompressedDoc == null)
                    {
                        throw new Exception("Документ пуст. Ошибка формирования");
                    }

                    var ms = new MemoryStream();

                    CompressUtility.DecompressGZip(calculatedResult.CompressedDoc).CopyTo(ms);
                    ms.Position = 0;
                    Document.Set(context, ms);
                }
            }

            catch (Exception ex)
            {
                Error.Set(context, ex.Message);
                if (!HideException.Get(context))
                {
                    throw ex;
                }
            }

            return(string.IsNullOrEmpty(Error.Get(context)));
        }
示例#5
0
        protected override bool Execute(CodeActivityContext context)
        {
            SectionIntegralComplexResults Res;

            try
            {
                //TODO часовой пояс
                Res = ARM_Service.SIA_GetSectionIntegralActExcelDocumentWithATSCode(
                    SectionID.Get(context),
                    StartDateTime.Get(context),
                    DataSourceType,
                    DiscreteType,
                    IsPower,
                    IsEnabledRChannel,
                    BusRelation,
                    IsAllocateCA,
                    IsOffsetFromMoscowEnbledForDrums,
                    IsFilterPSEnabled,
                    IsReadCalculatedValues,
                    IsClosedPeriod, null);

                if (Res.Document != null)
                {
                    Res.Document.Position = 0;
                    MemoryStream ms = CompressUtility.DecompressGZip(Res.Document);
                    ms.Position = 0;
                    Document.Set(context, ms);
                }

                if (Res.Errors != null)
                {
                    Error.Set(context, Res.Errors.ToString());
                }
            }

            catch (Exception ex)
            {
                Error.Set(context, ex.Message);
                if (!HideException.Get(context))
                {
                    throw ex;
                }
            }
            return(string.IsNullOrEmpty(Error.Get(context)));
        }
        protected override bool Execute(CodeActivityContext context)
        {
            try
            {
                var res = ARM_Service.BPS_GetBalansPSResultAndHtmlDocument2(BalanceId.Get(context),
                                                                            StartDateTime.Get(context),
                                                                            EndDateTime.Get(context),
                                                                            DiscreteType,                     //.Get(context),
                                                                            DataSourceType,                   //.Get(context),
                                                                            isPower,                          //.Get(context),
                                                                            isOffsetFromMoscowEnbledForDrums, //.Get(context),
                                                                            IsPowerEquipmentEnabled, 7, null, false);

                if (res.Errors != null)
                {
                    Error.Set(context, res.Errors.ToString());
                }

                var ms = CompressUtility.DecompressGZip(res.HTMLDocument);

                if (ms != null)
                {
                    ms.Position = 0;
                    Document.Set(context, ms);
                }

                IsHasUnbalanceValue.Set(context, !res.IsHasUnbalanceValue);
            }

            catch (Exception ex)
            {
                if (!HideException.Get(context))
                {
                    throw ex;
                }
            }

            return(true);
        }
示例#7
0
        protected override bool Execute(CodeActivityContext context)
        {
            SectionIntegralResults Res;

            try
            {
                Res = ARM_Service.SIA_GetFlowBalanceReport(
                    SectionID.Get(context),
                    TExportExcelAdapterType.toXLS,
                    StartDateTime.Get(context),
                    DataSourceType,
                    BusRelation,
                    true,
                    false, null, true, true, null);

                if (Res.CompressedDoc != null)
                {
                    Res.CompressedDoc.Position = 0;
                    MemoryStream ms = CompressUtility.DecompressGZip(Res.CompressedDoc);
                    ms.Position = 0;
                    Document.Set(context, ms);
                }

                if (Res.Errors != null)
                {
                    Error.Set(context, Res.Errors.ToString());
                }
            }

            catch (Exception ex)
            {
                Error.Set(context, ex.Message);
                if (!HideException.Get(context))
                {
                    throw ex;
                }
            }
            return(string.IsNullOrEmpty(Error.Get(context)));
        }
        protected override bool Execute(System.Activities.CodeActivityContext context)
        {
            Error.Set(context, null);

            if (string.IsNullOrEmpty(Args))
            {
                Error.Set(context, "Не определены объекты для которых будет сформирован отчет");
                return(false);
            }

            MultiPsSelectedArgs args;

            try
            {
                args = Args.DeserializeFromString <MultiPsSelectedArgs>();
            }
            catch (Exception ex)
            {
                Error.Set(context, "Ошибка преобразования параметров " + ex.Message);
                return(false);
            }

            args.DtStart = StartDateTime.Get(context); //Начальная дата
            args.DtEnd   = EndDateTime.Get(context);   //Конечная дата
            var reportUn = Report_id.Get(context);

            var businessObjectName = string.Empty; //Определяем какой бизнес объект используется в отчете

            try
            {
                try
                {
                    if (!string.IsNullOrEmpty(reportUn))
                    {
                        businessObjectName = ServiceFactory.StimulReportInvokeSync <string>("GetUsedBusinessObjectsNames", reportUn);
                    }
                }
                catch (Exception ex)
                {
                    Error.Set(context, "Ошибка запроса бизнес модели отчета " + ex.Message);
                    return(false);
                }

                BusinessObjectHelper.BuildBusinessObjectsParams(businessObjectName, args);

                var errs       = new StringBuilder();
                var compressed = StimulReportsProcedures.LoadDocument(Report_id.Get(context), errs, args, ReportFormat, args.TimeZoneId);
                if (errs.Length > 0)
                {
                    Error.Set(context, errs.ToString());
                }


                if (compressed == null)
                {
                    Error.Set(context, "Ошибка загрузки документа");
                    return(false);
                }

                SendEmail(context, CompressUtility.DecompressGZip(compressed));
            }
            catch (Exception ex)
            {
                Error.Set(context, ex.Message);
                if (!HideException.Get(context))
                {
                    throw ex;
                }
            }

            return(string.IsNullOrEmpty(Error.Get(context)));
        }
示例#9
0
        protected override bool Execute(CodeActivityContext context)
        {
            Error.Set(context, null);


            EnumGroupTPPowerReportMode?typecalc = null;

            if (GroupTPPowerReportMode == GroupTPPowerReportMode.OpenPeriod)
            {
                typecalc = EnumGroupTPPowerReportMode.OpenPeriod;
            }
            if (GroupTPPowerReportMode == GroupTPPowerReportMode.ClosedCurrPeriod)
            {
                typecalc = EnumGroupTPPowerReportMode.ClosedCurrPeriod;
            }
            if (GroupTPPowerReportMode == GroupTPPowerReportMode.ClosedNextPeriod)
            {
                typecalc = EnumGroupTPPowerReportMode.ClosedNextPeriod;
            }
            if (GroupTPPowerReportMode == GroupTPPowerReportMode.ClosedPrevPeriod)
            {
                typecalc = EnumGroupTPPowerReportMode.ClosedPrevPeriod;
            }



            string userName = UserName;//.Get(context);
            string userID   = null;

            if (string.IsNullOrEmpty(userName))
            {
                Error.Set(context, "Значение свойства 'Пользователь' не может быть пустым");
                return(false);
            }
            try
            {
                List <UserInfo> UList = ARM_Service.EXPL_Get_All_Users();
                foreach (UserInfo u in UList)
                {
                    if (u.UserName.ToLower(System.Globalization.CultureInfo.InvariantCulture) ==
                        userName.ToLower(System.Globalization.CultureInfo.InvariantCulture))
                    {
                        userID = u.User_ID;
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Error.Set(context, ex.Message);
                if (!HideException.Get(context))
                {
                    throw ex;
                }
            }

            if (!string.IsNullOrEmpty(Error.Get(context)))
            {
                return(false);
            }

            if (string.IsNullOrEmpty(userID))
            {
                Error.Set(context, "Не найден пользователь с именем '" + UserName + "'");
                return(false);
            }

            List <int> listIDs = ListIDs.Get(context);

            if (listIDs == null)
            {
                Error.Set(context, "Неопределен список идентификаторов");
                return(false);
            }

            List <ID_TypeHierarchy> idList = new List <ID_TypeHierarchy>();

            foreach (int id in listIDs)
            {
                ID_TypeHierarchy idTypeHier = new ID_TypeHierarchy();
                idTypeHier.ID            = id;
                idTypeHier.TypeHierarchy = TypeIDs;
                idList.Add(idTypeHier);
            }


            MemoryStream doc = null;

            try
            {
                SectionIntegralComplexResults res;
                if (ReportType == enumReportType.ReportReplacementOfMeters)
                {
                    //TODO часовой пояс
                    res = ARM_Service.Rep_ReplacementOfAccountingFacilities(idList, StartDateTime.Get(context),
                                                                            EndDateTime.Get(context), ReportType, typecalc, userName, null);
                }
                else
                {
                    //TODO часовой пояс
                    res = ARM_Service.REP_OverflowControl(idList, StartDateTime.Get(context),
                                                          EndDateTime.Get(context), ReportType, typecalc, userName, null, null, false, 3, ",", enumTimeDiscreteType.DBHours, null);
                }


                if (res.Document != null)
                {
                    res.Document.Position = 0;
                    var ms = CompressUtility.DecompressGZip(res.Document);
                    ms.Position = 0;
                    Document.Set(context, ms);
                    //File.WriteAllBytes(@"C:\12\test_SysRep.xls",ms.ToArray());
                }

                switch (res.AdapterType)
                {
                case TExportExcelAdapterType.toXLS:
                    FileExtention.Set(context, "xls");
                    break;

                case TExportExcelAdapterType.toXLSx:
                    FileExtention.Set(context, "xlsx");
                    break;

                case TExportExcelAdapterType.toHTML:
                    FileExtention.Set(context, "html");
                    break;

                case TExportExcelAdapterType.toPDF:
                    FileExtention.Set(context, "pdf");
                    break;
                }

                if (res.Errors != null)
                {
                    Error.Set(context, res.Errors.ToString());
                }
            }

            catch (Exception ex)
            {
                Error.Set(context, ex.Message);
                if (!HideException.Get(context))
                {
                    throw ex;
                }
            }

            return(string.IsNullOrEmpty(Error.Get(context)));
        }
        public static R BuildandWaitResult <R, P>(P groupTpWaiterParams, string methodName
                                                  , Action <string> onError, Action <double> incProgress = null
                                                  , CancellationToken?cancellationToken = null, Action <bool> setIndeterminat = null
                                                  )
            where R : class //Тип для результата
            where P : class //Тип для параметров
        {
            ProtoInitializer.InitProtobuf();

            int voidPacketLimit;

            var setting = EnumClientServiceDictionary.GetGlobalSettingsByName(RegistrySettings.FolderVisual, RegistrySettings.SettingVoidPacketLimit);

            if (setting == null || setting.Setting == null || !int.TryParse(setting.Setting, out voidPacketLimit) ||
                voidPacketLimit < 10) //Максимальное количество не ограничиваем
            {
                voidPacketLimit = 24001;
            }

            Guid loaderId;

            try
            {
                MemoryStream compressedParam;
                using (var ms = new MemoryStream())
                {
                    ProtoBuf.Serializer.Serialize(ms, groupTpWaiterParams);
                    ms.Position     = 0;
                    compressedParam = CompressUtility.CompressGZip(ms);
                }

                compressedParam.Position = 0;
                loaderId = ARM_Service.Builder_StartWait(compressedParam, methodName);
                Thread.Sleep(100);
            }
            catch (Exception ex)
            {
                if (onError != null)
                {
                    onError("Ошибка запуска построителя фак. мощности: " + ex.Message);
                }
                return(null);
            }

            var isLastPacket  = false;
            var voidCounter   = 0;
            var errCounter    = 0;
            var requestNumber = 0;
            var ca            = new List <byte>();

            var packetSize = 0.0; //Тут надо подумать как возвращать правильный размер, возможно никак

            do
            {
                if (cancellationToken.HasValue && cancellationToken.Value.IsCancellationRequested)
                {
                    ARM_Service.Builder_Cancel(loaderId);
                    break; //Отмена выполнения
                }

                try
                {
                    var packet = ServiceFactory.ArmServiceInvokeSync <BuilderPartResult>("Builder_GetNextPart", requestNumber, loaderId);
                    if (packet != null)
                    {
                        if (!string.IsNullOrEmpty(packet.Errors))
                        {
                            //Это критическая ошибка, продолжать нельзя
                            if (onError != null)
                            {
                                onError(packet.Errors);
                            }
                            break;
                        }

                        isLastPacket = packet.IsLastPacket;
                        if (isLastPacket)
                        {
                            break;
                        }

                        if (packet.Part != null && packet.Part.Length > 0)
                        {
                            //requestNumber++;
                            if (requestNumber == 0)
                            {
                                if (packet.PacketRemaining == 0)
                                {
                                    packetSize = 1;
                                }
                                else
                                {
                                    packetSize = 100 / (double)packet.PacketRemaining;
                                }

                                if (setIndeterminat != null)
                                {
                                    setIndeterminat(false);
                                }
                            }

                            ca.InsertRange(0, packet.Part.ToArray());
                            requestNumber++;

                            packet.Part.Close();
                            packet.Part.Dispose();

                            voidCounter = 0;

                            Thread.Sleep(10);
                        }
                        else
                        {
                            if (++voidCounter > voidPacketLimit)
                            {
                                isLastPacket = true;
                                if (onError != null)
                                {
                                    onError("ClientSideMultithreadBuilder: Превышен лимит ожидания пакетов");
                                }
                            }
                            else
                            {
                                Thread.Sleep(300);
                            }
                        }

                        errCounter = 0;
                    }
                    else
                    {
                        if (++errCounter > 50)
                        {
                            isLastPacket = true;
                            if (onError != null)
                            {
                                onError("ClientSideMultithreadBuilder: Превышен лимит пустых пакетов");
                            }
                        }

                        Thread.Sleep(5000);
                    }
                }
                catch (Exception ex)
                {
                    if (++errCounter > 6)
                    {
                        isLastPacket = true;
                        if (onError != null)
                        {
                            onError("ClientSideMultithreadBuilder: Сервер не отвечает");
                        }
                    }
                    else
                    {
                        if (onError != null)
                        {
                            onError(ex.Message);
                        }
                        Thread.Sleep(5000);
                    }
                }

                if (incProgress != null)
                {
                    incProgress(packetSize);
                }
            } while (!isLastPacket);

            var compressed = new MemoryStream(ca.ToArray());

            ca = null;

            R result = null;

            if (compressed.Length > 2)
            {
                try
                {
                    using (var ms = CompressUtility.DecompressGZip(compressed))
                    {
                        compressed.Close();
                        compressed.Dispose();

                        ms.Position = 0;
                        result      = ProtoBuf.Serializer.Deserialize <R>(ms);
                    }
                }
                catch (Exception ex)
                {
                    if (onError != null)
                    {
                        onError("ClientSideMultithreadBuilder: Ошибка обработки результата: " + ex.Message);
                    }
                }
            }

            GC.Collect();

            return(result);
        }
        public Task RunServerBuild(BackgroundWorker worker)
        {
            var parents = MonitoringAnalyseDict.Keys.ToList();

            try
            {
                //Запрос формирования данных
                ARM_Service_.Monit_GetArchive(_waiterId, parents, _selectedСhannels
                                              , DtStart, DtEnd, _maxValue, _selectedEvents, IsConcentratorsEnabled, _filterFlag);
                //Ждем формирования первых пакетов
                Thread.Sleep(1000);
            }
            catch (Exception ex)
            {
                Manager.UI.ShowMessage(ex.Message);
                return(null);
            }


            //if (_showTotalStatistic != null)
            //{
            //    _showTotalStatistic(request.StatisticInformation);
            //}

            _isRequestCompleted = false;
            //double packetSize = request.ProgressPercent;

            //if (request.Result != null && request.Result.Count > 0)
            //{
            //    _stackForBuildResult.PushRange(request.Result.ToArray());
            //    _progressBar.IncValue(packetSize);
            //}

            //Отмена выполнения
            if (worker.CancellationPending || _cancellationToken.IsCancellationRequested)
            {
                return(null);
            }

            //Запускаем построитель результатов
            var builderTask = Task.Factory.StartNew(BuildPacketResult, _cancellationToken);

            //Получение следующих пакетов
            bool isLastPacket = false;
            int  voidCounter  = 0;
            int  errCounter   = 0;
            bool isFirst      = true;
            TStatisticInformation statisticInformation = null;

            int requestNumber = 0;

            do
            {
                try
                {
                    if (_cancellationToken.IsCancellationRequested)
                    {
                        break;
                    }

                    var packet = ServiceFactory.ArmServiceInvokeSync <Tuple <bool, MemoryStream, string, TStatisticInformation, TMonitoringAnalyseResult> >("Monit_WaitArchives", requestNumber, _waiterId);
                    if (packet != null)
                    {
                        if (!string.IsNullOrEmpty(packet.Item3))
                        {
                            Manager.UI.ShowMessage(packet.Item3);
                        }

                        isLastPacket = packet.Item1;
                        if (isLastPacket)
                        {
                            statisticInformation = packet.Item4;
                            break;
                        }

                        if (packet.Item2 != null)
                        {
                            requestNumber++;
                            //var nextPart = packet.Item2.DecompressAndDeserialize<List<TMonitoringAnalyseResult>>();
                            var decomoressed = CompressUtility.DecompressGZip(packet.Item2);
                            decomoressed.Position = 0;
                            var nextPart = Serializer.Deserialize <List <TMonitoringAnalyseResult> >(decomoressed);
                            if (nextPart != null && nextPart.Count > 0)
                            {
                                _stackForBuildResult.PushRange(nextPart.ToArray());
                                voidCounter = 0;
                                _mres.Set();
                                if (isFirst)
                                {
                                    _progressBar.SetIndeterminat(false);
                                    isFirst = false;
                                }
                            }
                            else
                            {
                                Thread.Sleep(2000);
                            }
                        }
                        else
                        {
                            if (++voidCounter > 501)
                            {
                                isLastPacket = true;
                                Manager.UI.ShowMessage("MonitoringClientFactory: Превышен лимит ожидания пакетов");
                            }
                            else
                            {
                                Thread.Sleep(5000);
                            }
                        }
                    }
                    else
                    {
                        throw new Exception();
                    }

                    errCounter = 0;
                }
                catch (Exception ex)
                {
                    if (++errCounter > 6)
                    {
                        isLastPacket = true;
                        Manager.UI.ShowMessage("MonitoringClientFactory: Превышен лимит пустых пакетов");
                        _progressBar.SetIndeterminat(false);
                    }
                    else
                    {
                        Manager.UI.ShowMessage(ex.Message);
                        Thread.Sleep(1000);
                    }
                }
                Thread.Sleep(200);
            } while (!isLastPacket);

            if (statisticInformation != null && _showTotalStatistic != null)
            {
                _showTotalStatistic(statisticInformation);
            }

            _isRequestCompleted = true;
            _mres.Set();
            return(builderTask);
        }