예제 #1
0
        // функция для обновления свойств в списке точек
        void PointPropertyChangedEventHandler(object sender, PropertyChangedEventArgs args)
        {
            var bi = sender as IBalanceItem;

            if (bi == null)
            {
                return;
            }
            IHierarchicalEmcosPoint point = point = _pointsCollection.Where((p) => p.Id == bi.Id).FirstOrDefault();

            if (point != null)
            {
                switch (args.PropertyName)
                {
                case "Description":
                    point.Description = bi.Description;
                    break;

                case "Id":
                    point.Id = bi.Id;
                    break;

                case "Code":
                    point.Code = bi.Code;
                    break;

                case "Name":
                    point.Name = bi.Name;
                    break;
                }
            }
        }
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            IHierarchicalEmcosPoint point = value as IHierarchicalEmcosPoint;

            if (point == null)
            {
                return(DependencyProperty.UnsetValue);
            }

            if (point.IsGroup && point.HasChildren == false)
            {
                return(123.45);
            }

            string param = parameter.ToString();

            switch (param)
            {
            case "PlusEnergy":
                break;

            case "MinusEnergy":
                break;


            case "DirectedEnergyCorrection":
                break;

            case "ValueStatus":
                break;


            case "Unbalance":
                break;

            case "PercentageOfUnbalance":
                break;

            case "Description":
                break;

            case "Correction":
                break;

            case "ExcessUnbalance":
                break;

            case "MaximumAllowableUnbalance":
                break;

            // подсказка при неравенстве суммы данных за сутки и за месяц
            case "DifferenceBetweenDailySumAndMonthToolTip":
                break;

            default:
                break;
            }

            return(DependencyProperty.UnsetValue);
        }
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            IHierarchicalEmcosPoint point = value as IHierarchicalEmcosPoint;

            if (point == null)
            {
                return(DependencyProperty.UnsetValue);
            }
            string param = parameter.ToString();

            switch (param)
            {
            // имеется ли корректировка данных
            case "DirectedEnergyHasCorrection":

                return(Visibility.Visible);

            // получены данные не за все сутки
            case "DirectedEnergyNotFullData":
                return(Visibility.Visible);

            // данные за месяц не равны сумме суточных
            case "MonthAndSumDaysNotEqual":
                return(Visibility.Visible);
            }

            throw new NotImplementedException();
        }
예제 #4
0
        private async Task <IList <IHierarchicalEmcosPoint> > FillPointsTree(IHierarchicalEmcosPoint point)
        {
            var    table = _emcosWebServiceClient.GetPointInfo("PSDTU_SERVER", point.Id.ToString());
            string data  = await EmcosSiteWrapper.Instance.GetAPointsAsync(point.Id.ToString());

            IList <IHierarchicalEmcosPoint> list = (String.IsNullOrEmpty(data)) ? new List <IHierarchicalEmcosPoint>() : ParsePointsList(data, point);

            if (list != null && list.Count > 0)
            {
                for (int i = 0; i < list.Count; i++)
                {
                    if (list[i].IsGroup)
                    {
                        IList <IHierarchicalEmcosPoint> childs = await FillPointsTree(list[i]);

                        foreach (var child in childs)
                        {
                            list[i].Children.Add(child);
                        }
                        _index++;
                        if (_index > maxItemsCount)
                        {
                            throw new OverflowException("Превышено максимальное количество элементов в дереве - " + maxItemsCount);
                        }
                    }
                }
            }
            return(list);
        }
예제 #5
0
        private async Task <IList <IHierarchicalEmcosPoint> > FillPointsTree(IHierarchicalEmcosPoint point)
        {
            var table = _emcosWebServiceClient.GetGRInfo("PSDTU_SERVER", point.Id.ToString());

            string data = await EmcosSiteWrapper.Instance.ExecuteFunction(EmcosSiteWrapper.Instance.GetAPointsAsync, point.Id.ToString());

            IList <IHierarchicalEmcosPoint> list = (String.IsNullOrEmpty(data)) ? new List <IHierarchicalEmcosPoint>() : ParsePointsList(data, point);

            if (list != null && list.Count > 0)
            {
                for (int i = 0; i < list.Count; i++)
                {
                    EmcosSiteWrapperApp.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background, new System.Threading.ThreadStart(delegate { }));
                    if (list[i].ElementType == ElementTypes.GROUP)
                    {
                        IList <IHierarchicalEmcosPoint> childs = await FillPointsTree(list[i]);

                        foreach (var child in childs)
                        {
                            list[i].Children.Add(child);
                        }
                        _index++;
                        if (_index > maxItemsCount)
                        {
                            throw new OverflowException("Превышено максимальное количество элементов в дереве - " + maxItemsCount);
                        }
                    }
                }
            }
            return(list);
        }
예제 #6
0
 public EmcosPointWithValue(IHierarchicalEmcosPoint point) : this()
 {
     this.Id          = point.Id;
     this.Name        = point.Name;
     this.Code        = point.Code;
     this.TypeCode    = point.TypeCode;
     this.EcpName     = point.EcpName;
     this.ElementType = point.ElementType;
 }
예제 #7
0
 public TreeModel(IHierarchicalEmcosPoint point) : this()
 {
     Init(point);
     if (point.Children != null)
     {
         foreach (var item in point.Children)
         {
             Children.Add(new TreeModel(item));
         }
     }
 }
예제 #8
0
        private void AddToFlatItemsList(IHierarchicalEmcosPoint item)
        {
            FlatItemsList.Add(item);

            if (item.Children != null)
            {
                foreach (var child in item.Children)
                {
                    AddToFlatItemsList((IHierarchicalEmcosPoint)child);
                }
            }
        }
예제 #9
0
 private void ProcessPointsToFloatCollection(IHierarchicalEmcosPoint point, ref IList <IHierarchicalEmcosPoint> collection)
 {
     if (point == null)
     {
         return;
     }
     collection.Add(point);
     if (point.Children != null)
     {
         foreach (Model.EmcosPoint child in point.Children)
         {
             ProcessPointsToFloatCollection(child, ref collection);
         }
     }
 }
예제 #10
0
 private void Init(IHierarchicalEmcosPoint point)
 {
     this.Point = point;
 }
예제 #11
0
        private IList <IHierarchicalEmcosPoint> ParsePointsList(string data, IHierarchicalEmcosPoint parent)
        {
            var records = Utils.ParseRecords(data);

            if (records == null)
            {
                return(new List <IHierarchicalEmcosPoint>());
            }

            var list = new List <Model.IEmcosElement>();

            foreach (var nvc in records)
            {
                Emcos.Model.IEmcosElement element;
                if (nvc.Get("Type") == "POINT")
                {
                    element = new Model.EmcosPointElement();
                }
                else
                {
                    element = new Model.EmcosGrElement();
                }

                for (int i = 0; i < nvc.Count; i++)
                {
                    #region  азбор полей
                    int intValue = 0;
                    switch (nvc.GetKey(i))
                    {
                    case "GR_ID":
                    case "POINT_ID":
                        int.TryParse(nvc[i], out intValue);
                        element.Id = intValue;
                        break;

                    case "GR_NAME":
                    case "POINT_NAME":
                        element.Name = nvc[i];
                        break;

                    case "ECP_NAME":
                        Model.EmcosPointElement pe = (element as Model.EmcosPointElement);
                        pe.EcpName = nvc[i];
                        break;

                    case "TYPE":
                        Model.ElementTypes type;
                        if (Enum.TryParse <Model.ElementTypes>(nvc[i], out type) == false)
                        {
                            type = Model.ElementTypes.GROUP;
                        }
                        element.Type = type;
                        break;

                    case "GR_TYPE_CODE":
                    case "POINT_TYPE_CODE":
                        element.TypeCode = nvc[i];
                        break;
                    }
                    #endregion
                }
                list.Add(element);
            }
            IList <IHierarchicalEmcosPoint> points = list.Select(i => new EmcosPoint
            {
                Id   = i.Id,
                Name = i.Name,
                //IsGroup = i.Type == Model.ElementTypes.GROUP,
                TypeCode    = i.TypeCode,
                EcpName     = i is Model.EmcosPointElement ? (i as Model.EmcosPointElement).EcpName : String.Empty,
                ElementType = i.Type,
                IsChecked   = false,
                Parent      = parent
            }).ToList <IHierarchicalEmcosPoint>();
            return(points);
        }
예제 #12
0
        private async Task LoadPointsFromServiceAsync()
        {
            const string ErrorMessage = "Получение списка точек от сервиса - ошибка:\n{0}";
            IDialog      dialog       = null;

            try
            {
                dialog = _window.DialogWaitingScreen("Получение данных ...", indeterminate: true, mode: TMPApplication.WpfDialogs.DialogMode.Cancel);
                dialog.Show();
                var source = await FillPointsTree(_rootEmcosGroup);

                if (source.Count == 0)
                {
                    dialog.Close();
                    _window.ShowDialogWarning("Список пуст!", TITLE);
                    EmcosPointsFromSite = null;
                }
                else
                {
                    dialog.Caption = "Создание модели";
                    EmcosSiteWrapperApp.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background, new System.Threading.ThreadStart(delegate { }));

                    EmcosPointsFromSite = new HierarchicalEmcosPointCollection(null, source);
                    dialog.Caption      = "Поиск изменений";
                    EmcosSiteWrapperApp.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background, new System.Threading.ThreadStart(delegate { }));

                    // поиск новых точек
                    void checkNewItems(IEnumerable <IHierarchicalEmcosPoint> sourcePoints, IEnumerable <IHierarchicalEmcosPoint> destinationPoints)
                    {
                        foreach (var point in sourcePoints)
                        {
                            IHierarchicalEmcosPoint p = destinationPoints.Where(i => i.Id == point.Id).FirstOrDefault();
                            if (p == null)
                            {
                                point.Tag = "NEW";
                            }
                            else
                            {
                                point.Tag = null;
                                if (point.HasChildren)
                                {
                                    checkNewItems(point.Children, p.Children);
                                }
                            }
                        }
                    }
                    checkNewItems(EmcosPointsFromSite, EmcosPoints);

                    // поиск удаленных точек
                    void checkDeletedItems(IEnumerable <IHierarchicalEmcosPoint> sourcePoints, IEnumerable <IHierarchicalEmcosPoint> destinationPoints)
                    {
                        foreach (var point in sourcePoints)
                        {
                            IHierarchicalEmcosPoint p = destinationPoints.Where(i => i.Id == point.Id).FirstOrDefault();
                            if (p == null)
                            {
                                point.Tag = "DELETED";
                            }
                            else
                            {
                                point.Tag = null;
                                if (point.HasChildren)
                                {
                                    checkDeletedItems(point.Children, p.Children);
                                }
                            }
                        }
                    }
                    checkDeletedItems(EmcosPoints, EmcosPointsFromSite);

                    dialog.Close();
                }
            }
            catch (Exception ex)
            {
                EmcosSiteWrapperApp.Log("Получение списка точек от сервиса - ошибка");
                if (dialog != null)
                {
                    dialog.Close();
                }
                _window.ShowDialogError(String.Format(ErrorMessage, EmcosSiteWrapperApp.GetExceptionDetails(ex)));
            }
        }