xm
2021-12-01 6d73bf6e816570291865674bef8bce8972e4de3f
HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs
@@ -4,6 +4,7 @@
using HDL_ON.UI.CSS;
using System.Collections.Generic;
using HDL_ON.DAL.Server;
using HDL_ON.UI.UI2.EnvironmentalScience;
namespace HDL_ON.UI
{
@@ -21,13 +22,15 @@
        MyEchartsViewOn myEchartsView;
        Sensor sensor;
        Sensor sensorTemp = new Sensor();
        List<Sensor> showSensors;
        Function function;
        List<Function> showFunctions;
        List<Function> sensorList;
        /// <summary>
        /// 当前查询类型
        /// </summary>
        QueryType curQueryType = QueryType.NowDay;
        string curQueryType = "hour";
        List<uint> tipColorList = new List<uint>()
        {
@@ -39,12 +42,23 @@
            "#80AEFF","#FFD154","#FF9D54","#FE6A6A","#B183C3","#ADE764",
        };
        public EnvironmentalSensorPage(Sensor ss)
        public EnvironmentalSensorPage(Function ss)
        {
            bodyView = this;
            sensor = ss;
            showSensors = new List<Sensor>();
            showSensors.Add(ss);
            function = ss;
            showFunctions = new List<Function>();
            showFunctions.Add(ss);
            sensorList = FunctionList.List.GetEnvirSensorsList();
        }
        public EnvironmentalSensorPage(Function ss,List<Function> functions)
        {
            bodyView = this;
            function = ss;
            sensorList = functions;
            showFunctions = new List<Function>();
            showFunctions.Add(ss);
        }
        public void LoadPage()
@@ -65,7 +79,7 @@
            {
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(343),
                Height = Application.GetRealHeight(420),
                Height = Application.GetRealWidth(420),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                Radius = (uint)Application.GetRealWidth(12),
                BorderColor = 0x00000000,
@@ -116,7 +130,7 @@
                TextColor = CSS_Color.PromptingColor2,
                SelectedTextColor = CSS_Color.MainColor,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                Text = DateTime.Now.Month.ToString() + Language.StringByID(StringId.month),
                Text = Language.StringByID(StringId.month),//DateTime.Now.Month.ToString() +
            };
            showDataTypeView.AddChidren(btnShowHistroyData_Month);
            #endregion
@@ -126,7 +140,7 @@
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(52),
                Width = Application.GetRealWidth(343 - 32),
                Height = Application.GetRealHeight(270),
                Height = Application.GetRealWidth(270),
            };
            diagramView.AddChidren(historyDataView);
@@ -138,7 +152,7 @@
            HorizontalScrolViewLayout tipValuesView = new HorizontalScrolViewLayout()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(348),
                Y = Application.GetRealWidth(348),
                Width = Application.GetRealWidth(303),
                Height = Application.GetRealHeight(30),
            };
@@ -163,9 +177,9 @@
            };
            diagramView.AddChidren(tipTextView);
            switch (sensor.functionType)
            switch (function.spk)
            {
                case FunctionType.PM25:
                case SPK.SensorPm25:
                    tipValuesView.AddChidren(new Button()
                    {
                        Width = Application.GetRealWidth(101),
@@ -223,7 +237,7 @@
                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
                    });
                    break;
                //case FunctionType.PM25:
                //case SPK.SensorPm25:
                //_intervalValue.Add("0 ~ 35");
                //_intervalValue.Add("36 ~ 75");
                //_intervalValue.Add("76 ~ 115");
@@ -233,7 +247,7 @@
                //_levelTextList.Add(StringId.MildPollution);
                //_levelTextList.Add(StringId.HeavyPollution);
                //break;
                case FunctionType.CO2:
                case SPK.SensorCO2:
                    tipValuesView.AddChidren(new Button()
                    {
                        Width = Application.GetRealWidth(101),
@@ -291,7 +305,7 @@
                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
                    });
                    break;
                case FunctionType.Temp:
                case SPK.SensorTemperature:
                    tipValuesView.AddChidren(new Button()
                    {
                        Width = Application.GetRealWidth(50),
@@ -358,7 +372,7 @@
                    tipTextView.AddChidren(new Button()
                    {
                        Width = Application.GetRealWidth(43),
                        TextID = StringId.ExtremelyCold,
                        TextID = StringId.SlightlyCold,
                        TextAlignment = TextAlignment.Center,
                        TextColor = CSS_Color.FirstLevelTitleColor,
                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
@@ -411,7 +425,7 @@
                    //_levelTextList.Add(StringId.);
                    //_levelTextList.Add(StringId.ExtremeHeat);
                    break;
                case FunctionType.TVOC:
                case SPK.SensorTVOC:
                    tipValuesView.AddChidren(new Button()
                    {
                        Width = Application.GetRealWidth(101),
@@ -469,11 +483,11 @@
                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
                    });
                    break;
                case FunctionType.Humidity:
                case SPK.SensorHumidity:
                    tipValuesView.AddChidren(new Button()
                    {
                        Width = Application.GetRealWidth(151),
                        Text = "70",
                        Text = "40%",
                        TextAlignment = TextAlignment.Center,
                        TextColor = CSS_Color.FirstLevelTitleColor,
                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
@@ -481,7 +495,7 @@
                    tipValuesView.AddChidren(new Button()
                    {
                        Width = Application.GetRealWidth(151),
                        Text = "40",
                        Text = "70%",
                        TextAlignment = TextAlignment.Center,
                        TextColor = CSS_Color.FirstLevelTitleColor,
                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
@@ -489,7 +503,7 @@
                    tipTextView.AddChidren(new Button()
                    {
                        Width = Application.GetRealWidth(101),
                        TextID = StringId.SensorReferenceTVOCTipLevel1,
                        TextID = StringId.SensorReferenceHumidityTipLevel1,
                        TextAlignment = TextAlignment.Center,
                        TextColor = CSS_Color.FirstLevelTitleColor,
                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
@@ -497,7 +511,7 @@
                    tipTextView.AddChidren(new Button()
                    {
                        Width = Application.GetRealWidth(101),
                        TextID = StringId.SensorReferenceTVOCTipLevel2,
                        TextID = StringId.SensorReferenceHumidityTipLevel2,
                        TextAlignment = TextAlignment.Center,
                        TextColor = CSS_Color.FirstLevelTitleColor,
                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
@@ -505,7 +519,7 @@
                    tipTextView.AddChidren(new Button()
                    {
                        Width = Application.GetRealWidth(101),
                        TextID = StringId.SensorReferenceTVOCTipLevel3,
                        TextID = StringId.SensorReferenceHumidityTipLevel3,
                        TextAlignment = TextAlignment.Center,
                        TextColor = CSS_Color.FirstLevelTitleColor,
                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
@@ -552,7 +566,7 @@
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.TextFontSize,
                Text = sensor.name,
                Text = function.name,
                IsBold = true,
            };
            selfInfoView.AddChidren(btnSeltSensorName);
@@ -566,7 +580,7 @@
                TextColor = CSS_Color.PromptingColor1,
                TextAlignment = TextAlignment.CenterLeft,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                Text = sensor.GetRoomListName()
                Text = function.GetRoomListName()
            };
            selfInfoView.AddChidren(btnFromFoorAndRoom);
@@ -593,18 +607,18 @@
            };
            selfInfoView.AddChidren(btnSeltSensorValue);
            Button btnShowData;
            btnShowData = new Button()
            {
                X = Application.GetRealWidth(291),
                Y = Application.GetRealWidth(62),
                Width = Application.GetMinRealAverage(32),
                Height = Application.GetMinRealAverage(32),
                UnSelectedImagePath = "FunctionIcon/EnvironmentalScience/DiagramIcon.png",
                SelectedImagePath = "FunctionIcon/EnvironmentalScience/DiagramIconOn.png",
                IsSelected = true,
            };
            selfInfoView.AddChidren(btnShowData);
            //Button btnShowData;
            //btnShowData = new Button()
            //{
            //    X = Application.GetRealWidth(291),
            //    Y = Application.GetRealWidth(62),
            //    Width = Application.GetMinRealAverage(32),
            //    Height = Application.GetMinRealAverage(32),
            //    UnSelectedImagePath = "FunctionIcon/EnvironmentalScience/DiagramIcon.png",
            //    SelectedImagePath = "FunctionIcon/EnvironmentalScience/DiagramIconOn.png",
            //    IsSelected = true,
            //};
            //selfInfoView.AddChidren(btnShowData);
            //btnShowData.MouseUpEventHandler = (sender, e) => {
            //    btnShowData.IsSelected = !btnShowData.IsSelected;
            //    if(btnShowData.IsSelected)
@@ -628,9 +642,9 @@
            {
                Action backAction = () =>
                {
                    btnSeltSensorName.Text = sensor.name;
                    btnSeltSensorName.Text = function.name;
                };
                var infoView = new FunctionBaseInfoSetPage(sensor, backAction);
                var infoView = new FunctionBaseInfoSetPage(function, backAction);
                MainPage.BasePageView.AddChidren(infoView);
                infoView.LoadPage();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
@@ -642,13 +656,14 @@
            bool initTitleButton = true;
            foreach (var tempSensor in FunctionList.List.sensorsEnvironmentalScience)
            foreach (var tempSensor in sensorList)
            {
                if (tempSensor.sid == sensor.sid)
                if (tempSensor.sid == function.sid)
                {
                    continue;
                }
                if (tempSensor.functionType != sensor.functionType)
                if (tempSensor.spk != function.spk)
                {
                    continue;
                }
@@ -673,7 +688,7 @@
                #region 其它传感器信息栏
                FrameLayout otherInfoView = new FrameLayout()
                {
                    Gravity = Gravity.CenterVertical,
                    Gravity = Gravity.CenterHorizontal,
                    Width = Application.GetRealWidth(343),
                    Height = Application.GetRealWidth(100),
                    BackgroundColor = CSS_Color.MainBackgroundColor,
@@ -705,7 +720,7 @@
                    TextAlignment = TextAlignment.CenterLeft,
                    TextColor = CSS_Color.FirstLevelTitleColor,
                    TextSize = CSS_FontSize.TextFontSize,
                    Text = sensor.name,
                    Text = function.name,
                    IsBold = true,
                };
                otherInfoView.AddChidren(btnSensorName);
@@ -737,7 +752,11 @@
                {
                    Action backAction = () =>
                    {
                        btnSeltSensorName.Text = tempSensor.name;
                        MainPage.Log("45678i");
                        Application.RunOnMainThread(() =>
                        {
                            btnSeltSensorName.Text = tempSensor.name;
                        });
                    };
                    var infoView = new FunctionBaseInfoSetPage(tempSensor, backAction);
                    MainPage.BasePageView.AddChidren(infoView);
@@ -772,25 +791,30 @@
                    btnShowData1.IsSelected = !btnShowData1.IsSelected;
                    if (btnShowData1.IsSelected)
                    {
                        if (!showSensors.Contains(sensor))
                        if (!showFunctions.Contains(tempSensor))
                        {
                            showSensors.Add(sensor);
                            showFunctions.Add(tempSensor);
                        }
                    }
                    else
                    {
                        if (showSensors.Contains(sensor))
                        if (showFunctions.Contains(tempSensor))
                        {
                            showSensors.Remove(sensor);
                            showFunctions.Remove(tempSensor);
                        }
                    }
                    LoadMothed_GetSensorHistoryData();
                };
                #endregion
                contentView.AddChidren(new Button()
                {
                    Height = Application.GetRealHeight(12),
                });
            }
            #endregion
            new TopViewDiv(bodyView, Language.StringByID(sensor.functionTypeNameId)).LoadTopView();
            new TopViewDiv(bodyView, Language.StringByID(sensorTemp.GetFunctionTypeNameId(function.spk))).LoadTopView();
            LoadMothed_GetSensorHistoryData();
            LoadEvent_ChangeSensorHistoryShowType();
@@ -801,23 +825,11 @@
    //------------
    public partial class EnvironmentalSensorPage
    {
       public  enum QueryType
        {
            NowDay = 0,//当天
            NowMonth = 1,//指定月
            NowYear = 2,//今年
            LatelySevenDay = 3//最近七天
        }
        /// <summary>
        /// 读取传感器历史数据
        /// </summary>
        void LoadMothed_GetSensorHistoryData()
        void LoadMothed_GetSensorHistoryData( )
        {
            string echartRootJsonString;
            EchartsOption echartRootJson = new EchartsOption();
            var seriesList = new List<EchartSeriesItem>();
            echartRootJson.xAxis.data = new List<string>();
            var loadPage = new Loading() {
                LodingBackgroundColor = 0x88888888,
            };
@@ -830,161 +842,57 @@
                    Application.RunOnMainThread(() => {
                        loadPage.Start(Language.StringByID(StringId.PleaseWait));
                    });
                    var curMonth = 0;
                    if(curQueryType == QueryType.NowMonth)
                    {
                        curMonth = DateTime.Now.Month;
                    }
                    int i = 0;
//#if DEBUG
//                    var sItem = new EchartSeriesItem
//                    {
//                        name = sensor.GetRoomListName(),
//                        data = new List<int>(),
//                        lineStyle = new EchartLineStyle()
//                        {
//                            color = tipColorStringList[i],
//#if __IOS__
//                            width = 5,
//#elif __ANDROID__
//                                        width = 2,
//#endif
//                        },
//                    };
//                    Random random = new Random();
//                    double level = 0.0;
//                    int countddd = 24;
//                    for (int j = 0; j < countddd; j++)
//                    {
//                        switch (sensor.functionType)
//                        {
//                            case FunctionType.PM25:
//                                level = Math.Round(random.NextDouble() * 130, 0);
//                                break;
//                            case FunctionType.CO2:
//                                level = Math.Round(random.NextDouble() * 6000, 0);
//                                break;
//                            case FunctionType.Temp:
//                                level = Math.Round(random.NextDouble() * 40, 0);
//                                break;
//                            case FunctionType.TVOC:
//                                level = Math.Round(random.NextDouble() * 10, 1);
//                                break;
//                            case FunctionType.Humidity:
//                                level = Math.Round(random.NextDouble() * 100, 0);
//                                break;
//                        }
//                        sItem.data.Add((int)level);
//                    }
//                        seriesList.Add(sItem);
//                    echartRootJson.series = seriesList;
//#if __IOS__
//                    echartRootJson.xAxis.axisLabel.fontSize = 22;
//                    echartRootJson.yAxis.axisLabel.fontSize = 22;
//#else
//                    echartRootJson.xAxis.axisLabel.fontSize = 8;
//                    echartRootJson.yAxis.axisLabel.fontSize = 8;
//#endif
//                    echartRootJsonString = Newtonsoft.Json.JsonConvert.SerializeObject(echartRootJson);
//                    Application.RunOnMainThread(() =>
//                    {
//                        myEchartsView.ShowWithOptionJsonString(echartRootJsonString);
//                    });
//#endif
                    var ebl = new EchartsOption_BrokenLine();
                    foreach (var sr in FunctionList.List.sensorsEnvironmentalScience)
                    string yDataString = "";
                    foreach (var sr in showFunctions)
                    {
                        if (sr.functionType != sensor.functionType)
                        if (sr.spk != function.spk)
                        {
                            continue;
                        }
                        if (showSensors.Find((obj) => obj.sid == sr.sid) == null)
                        if (showFunctions.Find((obj) => obj.sid == sr.sid) == null)
                        {
                            i++;
                            continue;
                        }
                        var revertObj = new HttpServerRequest().GetSensorHistory(sr.bus.SubnetID, sr.bus.DeviceID,
                               5, (int)(sr.functionType) % 256, (int)curQueryType, sr.bus.LoopId, curMonth,
                               DB_ResidenceData.Instance.residenceGatewayMAC);
                        var sensorType = sr.spk.Split(".")[1];
                        var queryType = sr.GetAttrState("spk").ToString();
                        if(queryType == "0")
                        {
                            queryType = "value";
                        }
                        var revertObj = new HttpServerRequest().GetSensorHistory(curQueryType, sr.deviceId, queryType);
                        if (revertObj != null)
                        {
                            if (revertObj.StateCode == StateCode.SUCCESS)
                            if (revertObj.Code == StateCode.SUCCESS)
                            {
                                var revertData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SensorPushHistoryRes>>(revertObj.ResponseData.ToString());
                                var revertData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<EnvironmentalSensorHistor>>(revertObj.Data.ToString());
                                var sItem = new EchartSeriesItem
                                if (i == 0)
                                {
                                    name = sr.GetRoomListName(),
                                    data = new List<int>(),
                                    lineStyle = new EchartLineStyle()
                                    List<string> vs = new List<string>();
                                    foreach(var data in revertData)
                                    {
                                        color = tipColorStringList[i],
#if __IOS__
                                        width = 5,
#elif __ANDROID__
                                        width = 2,
#endif
                                    },
                                };
                                int ass = 0;
                                for (int j = 0; j < revertData.Count; j++)
                                {
                                    if (curQueryType == QueryType.NowMonth && revertData[j].CreatedOnUtc.Day > DateTime.Now.Day)
                                    {
                                        continue;
                                        vs.Add(data.fieldName);
                                    }
                                    if (revertData[j].TargetValue.ToString() != "NaN")
                                    {
                                        ass = Convert.ToInt32(revertData[j].TargetValue);
                                    }
                                    else
                                    {
                                        ass = 0;
                                    }
                                    sItem.data.Add(ass);
                                    switch (curQueryType)
                                    {
                                        case QueryType.NowDay:
                                            echartRootJson.xAxis.data.Add(revertData[j].CreatedOnUtc.Hour.ToString());
                                            break;
                                        case QueryType.LatelySevenDay:
                                            echartRootJson.xAxis.data.Add(System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(revertData[j].CreatedOnUtc.DayOfWeek));
                                            break;
                                        case QueryType.NowMonth:
                                            echartRootJson.xAxis.data.Add(revertData[j].CreatedOnUtc.Day.ToString());
                                            break;
                                    }
                                    ebl.InitXdataText(vs);
                                }
                                seriesList.Add(sItem);
                            }
                            else
                            {
                                Application.RunOnMainThread(() =>
                                {
                                    new PublicAssmebly().TipMsgAutoClose(Language.StringByID(StringId.GetSensorHistoryFailed), true);
                                });
                                yDataString += ebl.InitYdataText(sr.name, revertData, tipColorStringList[i]);
                            }
                        }
                        i++;
                    }
                    echartRootJson.series = seriesList;
#if __IOS__
                    echartRootJson.xAxis.axisLabel.fontSize = 22;
                    echartRootJson.yAxis.axisLabel.fontSize = 22;
#else
                    echartRootJson.xAxis.axisLabel.fontSize = 8;
                    echartRootJson.yAxis.axisLabel.fontSize = 8;
#endif
                    echartRootJsonString = Newtonsoft.Json.JsonConvert.SerializeObject(echartRootJson);
                    Application.RunOnMainThread(() =>
                    {
                        myEchartsView.ShowWithOptionJsonString(echartRootJsonString);
                        myEchartsView.ShowWithOption(ebl.InitOption());
                    });
                }
@@ -1010,7 +918,7 @@
                btnShowHistroyData_Day.IsSelected = true;
                btnShowHistroyData_Month.IsSelected = false;
                btnShowHistroyData_Week.IsSelected = false;
                curQueryType = QueryType.NowDay;
                curQueryType = "hour";
                LoadMothed_GetSensorHistoryData();
            };
@@ -1020,7 +928,7 @@
                btnShowHistroyData_Day.IsSelected = false;
                btnShowHistroyData_Month.IsSelected = true;
                btnShowHistroyData_Week.IsSelected = false;
                curQueryType = QueryType.NowMonth;
                curQueryType = "month";
                LoadMothed_GetSensorHistoryData();
            };
            btnShowHistroyData_Week.MouseUpEventHandler = (sender, e) =>
@@ -1029,29 +937,23 @@
                btnShowHistroyData_Day.IsSelected = false;
                btnShowHistroyData_Month.IsSelected = false;
                btnShowHistroyData_Week.IsSelected = true;
                curQueryType = QueryType.LatelySevenDay;
                curQueryType = "week";
                LoadMothed_GetSensorHistoryData();
            };
        }
        void LoadEvent_SwitchOtherRoomSensorData()
        {
        }
    }
    public class SensorPushHistoryRes
    public class EnvironmentalSensorHistor
    {
        /// <summary>
        /// </summary>
        public string fieldName { get; set; }
        /// <summary>
        /// 实际目标值
        /// </summary>
        public float TargetValue { get; set; }
        /// <summary>
        /// 查询的时间集群
        /// </summary>
        public DateTime CreatedOnUtc { get; set; }
        public string fieldValue { get; set; }
    }
}