예제 #1
0
        /// <summary>
        /// 为对报表进行异常处理,进行一维正态分布分类
        /// </summary>
        /// <param name="device"></param>
        /// <returns></returns>
        public static RetDeviceTableData Gaussain(RetDeviceTableData device)
        {
            RetDeviceTableData deviceSplice = new RetDeviceTableData();

            if (device != null)
            {
                List <double>         data             = device.Data;
                List <string>         time             = device.Time;
                List <List <object> > anomCoordination = new List <List <object> >(); //实例化,用来接收异常点坐标,可以调取实例化方法
                List <List <object> > normCoordination = new List <List <object> >(); //实例化,用来接收正常点坐标,可以调取实例化方法
                //List<List<object>> allCoordination = new List<List<object>>();//实例化,用来接收所有点坐标,可以调取实例化方法
                var    average = data.Average();
                double variance;
                double sum    = 0;
                var    length = data.Count();
                foreach (var d in data)
                {
                    sum += (d - average) * (d - average);
                }
                variance = sum / length;
                for (var i = 0; i < data.Count(); i++)
                {
                    List <object> zuobiao = new List <object>();
                    if (data[i] > average + 2 * variance || data[i] < average - 2 * variance)//取一个合适的系数,这里取的2
                    {
                        zuobiao.Add(time[i]);
                        zuobiao.Add(data[i]);
                        anomCoordination.Add(zuobiao);
                    }
                    else
                    {
                        zuobiao.Add(time[i]);
                        zuobiao.Add(data[i]);
                        normCoordination.Add(zuobiao);
                    }
                    //allCoordination.Add(zuobiao);
                }
                deviceSplice.Data             = data;
                deviceSplice.Time             = time;
                deviceSplice.DeviceTableList  = device.DeviceTableList;
                deviceSplice.DeviceItemName   = device.DeviceItemName;
                deviceSplice.Unit             = device.Unit;
                deviceSplice.NormCoordination = normCoordination;
                deviceSplice.AnomCoordination = anomCoordination;
                //deviceSplice.AllCoordination = allCoordination;
                return(deviceSplice);//包含正常点坐标与异常点坐标
            }
            else
            {
                return(deviceSplice = null);
            }
        }
        public IHttpActionResult GetEnergyReportListData(EquipmentEnergyModel parameter)
        {
            RetDeviceTableData        info  = new RetDeviceTableData();
            List <RetDeviceTableList> table = new List <RetDeviceTableList>();

            if (parameter.Property != null)
            {
                int i = 0;
                for (; i < parameter.Property.Count; i++)
                {
                    DeviceDataModel model = new DeviceDataModel();
                    model.DeviceID            = parameter.Property[i].data[0];
                    model.DeviceItemID        = parameter.Property[i].data[1];
                    model.StartTime           = parameter.StartTime;
                    model.EndTime             = parameter.EndTime;
                    model.StatisticalInterval = parameter.StatisticalInterval;
                    model.IntervalUnit        = parameter.IntervalUnit;
                    model.GetTogetherType     = parameter.Type;
                    DeviceDataBLL data = new DeviceDataBLL();
                    var           get  = data.GetEnergyReportListData(model);
                    if (get.Data != null)
                    {
                        foreach (var item in get.Data.DeviceTableList)
                        {
                            table.Add(item);
                        }
                    }
                }
            }
            info.DeviceTableList = table.OrderByDescending(o => o.Time).ToList();
            ReturnItem <RetDeviceTableData> r = new ReturnItem <RetDeviceTableData>();

            r.Count = info.DeviceTableList.Count();
            r.Msg   = "设备数据获取成功";
            r.Code  = 0;
            r.Data  = info;
            return(InspurJson <RetDeviceTableData>(r));
        }
        public IHttpActionResult GetEquipmentReportListDataByHandl2(DeviceDataListModel2 model)
        {
            DeviceDataBLL      data      = new DeviceDataBLL();
            RetDeviceTableData tabledata = new RetDeviceTableData();
            ReturnItem <List <RetDeviceTableData> > retdata = new ReturnItem <List <RetDeviceTableData> >();
            DeviceDataModel datamodel = new DeviceDataModel()
            {
                EndTime             = model.EndTime,
                StartTime           = model.StartTime,
                GetTogetherType     = model.GetTogetherType,
                IntervalUnit        = model.IntervalUnit,
                StatisticalInterval = model.StatisticalInterval
            };

            Dictionary <string, string> itemIdToDeviceId = new Dictionary <string, string>(); //key为itemID,value为deviceId

            if (model.DeviceIDs != null || model.DeviceIDs.Count != 0)                        //获取参数中的所有设备对应的propertyLable属性
            {
                UserApi api     = new UserApi();
                var     userApi = api.GetUserInfoByToken();
                model.DeviceItemIDs = new List <string>();
                foreach (var id in model.DeviceIDs)
                {
                    var deviceid = Convert.ToInt32(id);
                    DeviceItemInfoModel parameter = new DeviceItemInfoModel();
                    parameter.OrgID    = userApi.Data.OrgID.ToString();
                    parameter.DeviceID = deviceid;

                    DeviceInfoBLL device  = new DeviceInfoBLL();
                    var           getitem = device.GetEquipmentItemsList(parameter);
                    if (getitem.Data != null)
                    {
                        var temp = getitem.Data;
                        foreach (var item in getitem.Data)
                        {
                            if (item.PropertyLabel == model.DeviceItemPropertyLabel)//如果是该PropertyLabel的,则放到参数里面
                            {
                                model.DeviceItemIDs.Add(item.ID);
                                itemIdToDeviceId.Add(item.ID, id);
                                break;
                            }
                        }
                    }
                    else
                    {
                        return(null);
                    }
                }
            }

            if (model.DeviceItemIDs != null && model.DeviceItemIDs.Count > 0)
            {
                var count = 0;
                List <RetDeviceTableList> listtabledata = new List <RetDeviceTableList>();
                List <string>             listtimedata  = new List <string>();
                List <List <object> >     listcordata   = new List <List <object> >();
                List <List <object> >     listanodata   = new List <List <object> >();
                List <List <object> >     listnordata   = new List <List <object> >();
                List <double>             listdatadata  = new List <double>();

                List <RetDeviceTableData> listdata = new List <RetDeviceTableData>();
                foreach (var item in model.DeviceItemIDs)
                {
                    RetDeviceTableData chartdata = new RetDeviceTableData();//图表数据
                    datamodel.DeviceItemID = item;
                    string id = "";
                    itemIdToDeviceId.TryGetValue(item, out id);
                    if (id == null || id == "")
                    {
                        retdata.Code = -1;
                        retdata.Msg  = "在Dictionary中获取deviceId失败";
                        retdata.Data = null;
                        return(InspurJson <List <RetDeviceTableData> >(retdata));
                    }
                    datamodel.DeviceID = id;
                    var get = data.GetEquipmentReportListDataByHandl(datamodel);
                    if (get != null && get.Data != null)
                    {
                        chartdata.AllCoordination  = get.Data.AllCoordination;
                        chartdata.AnomCoordination = get.Data.AnomCoordination;
                        chartdata.Data             = get.Data.Data;
                        chartdata.DeviceItemName   = get.Data.DeviceItemName;
                        chartdata.DeviceName       = get.Data.DeviceName;
                        chartdata.DeviceTableList  = get.Data.DeviceTableList;
                        chartdata.NormCoordination = get.Data.NormCoordination;
                        chartdata.Time             = get.Data.Time;
                        chartdata.Unit             = get.Data.Unit;
                        chartdata.type             = "2";
                        listdata.Add(chartdata);


                        if (get.Data.DeviceTableList != null)
                        {
                            foreach (var listitem in get.Data.DeviceTableList)
                            {
                                listtabledata.Add(listitem);
                            }
                        }
                        if (get.Data.Time != null)
                        {
                            foreach (var listtime in get.Data.Time)
                            {
                                listtimedata.Add(listtime);
                            }
                        }
                        if (get.Data.AllCoordination != null)
                        {
                            foreach (var cooitem in get.Data.AllCoordination)
                            {
                                listcordata.Add(cooitem);
                            }
                        }
                        if (get.Data.AnomCoordination != null)
                        {
                            foreach (var anoitem in get.Data.AnomCoordination)
                            {
                                listanodata.Add(anoitem);
                            }
                        }
                        if (get.Data.NormCoordination != null)
                        {
                            foreach (var noritem in get.Data.NormCoordination)
                            {
                                listnordata.Add(noritem);
                            }
                        }
                        if (get.Data.Data != null)
                        {
                            foreach (var dataitem in get.Data.Data)
                            {
                                listdatadata.Add(dataitem);
                            }
                        }
                        count       += get.Count;
                        retdata.Code = get.Code;
                        //retdata.Msg = get.Msg;
                        retdata.Msg = "wahahaaaaaaaaa";
                    }
                }
                tabledata.DeviceTableList  = listtabledata;
                tabledata.Time             = listtimedata;
                tabledata.AllCoordination  = listcordata;
                tabledata.AnomCoordination = listanodata;
                tabledata.NormCoordination = listnordata;
                tabledata.Data             = listdatadata;
                tabledata.type             = "1";

                listdata.Add(tabledata);//添加列表数据
                retdata.Data  = listdata;
                retdata.Count = count;
            }
            return(InspurJson <List <RetDeviceTableData> >(retdata));
        }
        public IHttpActionResult GetEquipmentReportListDataByHandl(DeviceDataListModel model)
        {
            DeviceDataBLL      data      = new DeviceDataBLL();
            RetDeviceTableData tabledata = new RetDeviceTableData();
            ReturnItem <List <RetDeviceTableData> > retdata = new ReturnItem <List <RetDeviceTableData> >();
            DeviceDataModel datamodel = new DeviceDataModel()
            {
                DeviceID            = model.DeviceID,
                EndTime             = model.EndTime,
                StartTime           = model.StartTime,
                GetTogetherType     = model.GetTogetherType,
                IntervalUnit        = model.IntervalUnit,
                StatisticalInterval = model.StatisticalInterval
            };

            if (model.DeviceItemIDs == null || model.DeviceItemIDs.Count == 0)//当前台不选属性时,将该设备所有的属性展示
            {
                UserApi api      = new UserApi();
                var     userApi  = api.GetUserInfoByToken();
                var     deviceid = 0;
                if (model.DeviceID != null && model.DeviceID != "")
                {
                    deviceid = Convert.ToInt32(model.DeviceID);
                }
                DeviceItemInfoModel parameter = new DeviceItemInfoModel();
                parameter.OrgID    = userApi.Data.OrgID.ToString();
                parameter.DeviceID = deviceid;

                DeviceInfoBLL device  = new DeviceInfoBLL();
                var           getitem = device.GetEquipmentItemsList(parameter);
                if (getitem.Data != null)
                {
                    foreach (var item in getitem.Data)
                    {
                        model.DeviceItemIDs.Add(item.ID);//核心语句
                    }
                }
                else
                {
                    return(null);
                }
            }

            if (model.DeviceItemIDs != null && model.DeviceItemIDs.Count > 0)
            {
                var count = 0;
                List <RetDeviceTableList> listtabledata = new List <RetDeviceTableList>();
                List <string>             listtimedata  = new List <string>();
                List <List <object> >     listcordata   = new List <List <object> >();
                List <List <object> >     listanodata   = new List <List <object> >();
                List <List <object> >     listnordata   = new List <List <object> >();
                List <double>             listdatadata  = new List <double>();

                List <RetDeviceTableData> listdata = new List <RetDeviceTableData>();
                foreach (var item in model.DeviceItemIDs)
                {
                    RetDeviceTableData chartdata = new RetDeviceTableData();//图表数据
                    datamodel.DeviceItemID = item;
                    var get = data.GetEquipmentReportListDataByHandl(datamodel);
                    if (get != null && get.Data != null)
                    {
                        chartdata.AllCoordination  = get.Data.AllCoordination;
                        chartdata.AnomCoordination = get.Data.AnomCoordination;
                        chartdata.Data             = get.Data.Data;
                        chartdata.DeviceItemName   = get.Data.DeviceItemName;
                        chartdata.DeviceName       = get.Data.DeviceName;
                        chartdata.DeviceTableList  = get.Data.DeviceTableList;
                        chartdata.NormCoordination = get.Data.NormCoordination;
                        chartdata.Time             = get.Data.Time;
                        chartdata.Unit             = get.Data.Unit;
                        chartdata.type             = "2";
                        listdata.Add(chartdata);


                        if (get.Data.DeviceTableList != null)
                        {
                            foreach (var listitem in get.Data.DeviceTableList)
                            {
                                listtabledata.Add(listitem);
                            }
                        }
                        if (get.Data.Time != null)
                        {
                            foreach (var listtime in get.Data.Time)
                            {
                                listtimedata.Add(listtime);
                            }
                        }
                        if (get.Data.AllCoordination != null)
                        {
                            foreach (var cooitem in get.Data.AllCoordination)
                            {
                                listcordata.Add(cooitem);
                            }
                        }
                        if (get.Data.AnomCoordination != null)
                        {
                            foreach (var anoitem in get.Data.AnomCoordination)
                            {
                                listanodata.Add(anoitem);
                            }
                        }
                        if (get.Data.NormCoordination != null)
                        {
                            foreach (var noritem in get.Data.NormCoordination)
                            {
                                listnordata.Add(noritem);
                            }
                        }
                        if (get.Data.Data != null)
                        {
                            foreach (var dataitem in get.Data.Data)
                            {
                                listdatadata.Add(dataitem);
                            }
                        }
                        count       += get.Count;
                        retdata.Code = get.Code;
                        retdata.Msg  = get.Msg;
                    }
                }
                tabledata.DeviceTableList  = listtabledata;
                tabledata.Time             = listtimedata;
                tabledata.AllCoordination  = listcordata;
                tabledata.AnomCoordination = listanodata;
                tabledata.NormCoordination = listnordata;
                tabledata.Data             = listdatadata;
                tabledata.type             = "1";

                listdata.Add(tabledata);//添加列表数据
                retdata.Data  = listdata;
                retdata.Count = count;
            }
            //else
            //{
            //    datamodel.DeviceItemID = model.DeviceItemIDs[0];
            //    var get = data.GetEquipmentReportListDataByHandl(datamodel);
            //    retdata = get;
            //}
            return(InspurJson <List <RetDeviceTableData> >(retdata));
        }