wei
2021-06-02 e13a9980ce617db1394a76944186c5d5bd595d5d
HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs
@@ -3,31 +3,54 @@
using HDL_ON.Entity;
using HDL_ON.UI.CSS;
using System.Collections.Generic;
using HDL_ON.DAL.Server;
using HDL_ON.UI.UI2.EnvironmentalScience;
namespace HDL_ON.UI
{
    public class EnvironmentalSensorPage : FrameLayout
    public partial class EnvironmentalSensorPage : FrameLayout
    {
        EnvironmentalSensorPage bodyView;
        FrameLayout showDataTypeView;
        Button btnShowHistroyData_Day;
        Button btnShowHistroyData_Week;
        Button btnShowHistroyData_Month;
        Sensor sensor;
        FrameLayout historyDataView;
        MyEchartsViewOn myEchartsView;
        Sensor sensorTemp = new Sensor();
        Function function;
        List<Function> showFunctions;
        /// <summary>
        /// 当前查询类型
        /// </summary>
        string curQueryType = "hour";
        List<uint> tipColorList = new List<uint>()
        {
            0xFF80AEFF,0xFFFFD154,0xFFFF9D54,0xFFFE6A6A,0xFFB183C3,0xFFADE764,
        };
        public EnvironmentalSensorPage(Sensor ss)
        List<string> tipColorStringList = new List<string>()
        {
            "#80AEFF","#FFD154","#FF9D54","#FE6A6A","#B183C3","#ADE764",
        };
        public EnvironmentalSensorPage(Function ss)
        {
            bodyView = this;
            sensor = ss;
            function = ss;
            showFunctions = new List<Function>();
            showFunctions.Add(ss);
        }
        public void LoadPage()
        {
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            VerticalScrolViewLayout contentView = new VerticalScrolViewLayout()
@@ -44,7 +67,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,
@@ -53,7 +76,7 @@
            contentView.AddChidren(diagramView);
            #region 选择数据日期范围
            FrameLayout showDataTypeView = new FrameLayout()
            showDataTypeView = new FrameLayout()
            {
                X = Application.GetRealWidth(183),
                Y = Application.GetRealHeight(12),
@@ -63,7 +86,7 @@
            };
            diagramView.AddChidren(showDataTypeView);
            Button btnShowHistroyData_Day = new Button()
            btnShowHistroyData_Day = new Button()
            {
                Width = Application.GetRealWidth(48),
                TextAlignment = TextAlignment.Center,
@@ -75,7 +98,7 @@
            };
            showDataTypeView.AddChidren(btnShowHistroyData_Day);
            Button btnShowHistroyData_Week = new Button()
            btnShowHistroyData_Week = new Button()
            {
                X = Application.GetRealWidth(48),
                Width = Application.GetRealWidth(48),
@@ -87,8 +110,7 @@
            };
            showDataTypeView.AddChidren(btnShowHistroyData_Week);
            Button btnShowHistroyData_Month = new Button()
            btnShowHistroyData_Month = new Button()
            {
                X = Application.GetRealWidth(48 * 2),
                Width = Application.GetRealWidth(48),
@@ -96,13 +118,12 @@
                TextColor = CSS_Color.PromptingColor2,
                SelectedTextColor = CSS_Color.MainColor,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                TextID = StringId.month,
                Text = DateTime.Now.Month.ToString() + Language.StringByID(StringId.month),
            };
            showDataTypeView.AddChidren(btnShowHistroyData_Month);
            #endregion
            FrameLayout historyDataView = new FrameLayout()
            historyDataView = new FrameLayout()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(52),
@@ -111,51 +132,15 @@
            };
            diagramView.AddChidren(historyDataView);
            List<string> xStrings = new List<string>() ;
            List<string> yStrings = new List<string>();
            Random random = new Random();
            for (int i = 0; i < 24; i++)
            {
                xStrings.Add(i.ToString());
            myEchartsView = new MyEchartsViewOn();
                switch (sensor.functionType)
                {
                    case FunctionType.PM10:
                        yStrings.Add( Math.Round(random.NextDouble() * 130, 0).ToString());
                        break;
                    case FunctionType.PM25:
                        yStrings.Add( Math.Round(random.NextDouble() * 130, 0).ToString());
                        break;
                    //case FunctionType.Noise:
                    //    break;
                    case FunctionType.WindPower:
                        break;
                    case FunctionType.CO2:
                        yStrings.Add( Math.Round(random.NextDouble() * 6000, 0).ToString());
                        break;
                    case FunctionType.Temp:
                        yStrings.Add( Math.Round(random.NextDouble() * 40, 0).ToString());
                        break;
                    case FunctionType.TVOC:
                        yStrings.Add( Math.Round(random.NextDouble() * 10, 1).ToString());
                        break;
                    case FunctionType.Humidity:
                        yStrings.Add( Math.Round(random.NextDouble() * 100, 0).ToString());
                        break;
                }
            }
            MyEchartsView myEchartsView = new MyEchartsView();
            historyDataView.AddChidren(myEchartsView);
            myEchartsView.Show(sensor.name, xStrings.ToArray(), yStrings.ToArray());
            #region 底部等级提示
            HorizontalScrolViewLayout tipValuesView = new HorizontalScrolViewLayout()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(348),
                Y = Application.GetRealWidth(348),
                Width = Application.GetRealWidth(303),
                Height = Application.GetRealHeight(30),
            };
@@ -180,12 +165,11 @@
            };
            diagramView.AddChidren(tipTextView);
            switch (sensor.functionType)
            switch (function.spk)
            {
                case FunctionType.PM10:
                case FunctionType.PM25:
                    tipValuesView.AddChidren(new Button() {
                case SPK.SensorPm25:
                    tipValuesView.AddChidren(new Button()
                    {
                        Width = Application.GetRealWidth(101),
                        Text = "35",
                        TextAlignment = TextAlignment.Center,
@@ -241,21 +225,17 @@
                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
                    });
                    break;
                //case FunctionType.PM25:
                    //_intervalValue.Add("0 ~ 35");
                    //_intervalValue.Add("36 ~ 75");
                    //_intervalValue.Add("76 ~ 115");
                    //_intervalValue.Add("115 ~");
                    //_levelTextList.Add(StringId.Great);
                    //_levelTextList.Add(StringId.Good);
                    //_levelTextList.Add(StringId.MildPollution);
                    //_levelTextList.Add(StringId.HeavyPollution);
                    //break;
                //case FunctionType.Noise:
                //    break;
                case FunctionType.WindPower:
                    break;
                case FunctionType.CO2:
                //case SPK.SensorPm25:
                //_intervalValue.Add("0 ~ 35");
                //_intervalValue.Add("36 ~ 75");
                //_intervalValue.Add("76 ~ 115");
                //_intervalValue.Add("115 ~");
                //_levelTextList.Add(StringId.Great);
                //_levelTextList.Add(StringId.Good);
                //_levelTextList.Add(StringId.MildPollution);
                //_levelTextList.Add(StringId.HeavyPollution);
                //break;
                case SPK.SensorCO2:
                    tipValuesView.AddChidren(new Button()
                    {
                        Width = Application.GetRealWidth(101),
@@ -313,7 +293,7 @@
                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
                    });
                    break;
                case FunctionType.Temp:
                case SPK.SensorTemperature:
                    tipValuesView.AddChidren(new Button()
                    {
                        Width = Application.GetRealWidth(50),
@@ -380,7 +360,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,
@@ -433,7 +413,7 @@
                    //_levelTextList.Add(StringId.);
                    //_levelTextList.Add(StringId.ExtremeHeat);
                    break;
                case FunctionType.TVOC:
                case SPK.SensorTVOC:
                    tipValuesView.AddChidren(new Button()
                    {
                        Width = Application.GetRealWidth(101),
@@ -491,11 +471,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,
@@ -503,7 +483,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,
@@ -511,7 +491,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,
@@ -519,7 +499,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,
@@ -527,7 +507,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,
@@ -545,7 +525,7 @@
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(343),
                Height = Application.GetRealWidth(100),
                BackgroundColor= CSS_Color.MainBackgroundColor,
                BackgroundColor = CSS_Color.MainBackgroundColor,
                Radius = (uint)Application.GetRealWidth(12),
                BorderColor = 0x00000000,
                BorderWidth = 0,
@@ -574,13 +554,12 @@
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.TextFontSize,
                Text = sensor.name,
                Text = function.name,
                IsBold = true,
            };
            selfInfoView.AddChidren(btnSeltSensorName);
           Button btnFromFoorAndRoom = new Button()
            Button btnFromFoorAndRoom = new Button()
            {
                X = Application.GetRealWidth(16),
                Y = btnSeltSensorName.Bottom,
@@ -589,7 +568,7 @@
                TextColor = CSS_Color.PromptingColor1,
                TextAlignment = TextAlignment.CenterLeft,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                Text = sensor.GetRoomListName()
                Text = function.GetRoomListName()
            };
            selfInfoView.AddChidren(btnFromFoorAndRoom);
@@ -616,7 +595,8 @@
            };
            selfInfoView.AddChidren(btnSeltSensorValue);
            var btnShowData = new Button()
            Button btnShowData;
            btnShowData = new Button()
            {
                X = Application.GetRealWidth(291),
                Y = Application.GetRealWidth(62),
@@ -624,17 +604,35 @@
                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)
            //    {
            //        if (!showSensors.Contains(sensor))
            //        {
            //            showSensors.Add(sensor);
            //        }
            //    }
            //    else
            //    {
            //        if (showSensors.Contains(sensor))
            //        {
            //            showSensors.Remove(sensor);
            //        }
            //    }
            //    LoadMothed_GetSensorHistoryData();
            //};
            btnSetting.MouseUpEventHandler = (sender, e) =>
            {
                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;
@@ -646,17 +644,16 @@
            bool initTitleButton = true;
            foreach (var tempSensor in DB_ResidenceData.residenceData.functionList.sensorsEnvironmentalScience)
            foreach (var tempSensor in FunctionList.List.GetEnvirSensorsList())
            {
                if(tempSensor.sid == sensor.sid)
                if (tempSensor.sid == function.sid)
                {
                    continue;
                }
                if(tempSensor.functionType != sensor.functionType)
                if (tempSensor.spk != function.spk)
                {
                    continue;
                }
                contentView.ScrollEnabled = true;
                if (initTitleButton)
@@ -710,11 +707,10 @@
                    TextAlignment = TextAlignment.CenterLeft,
                    TextColor = CSS_Color.FirstLevelTitleColor,
                    TextSize = CSS_FontSize.TextFontSize,
                    Text = sensor.name,
                    Text = function.name,
                    IsBold = true,
                };
                otherInfoView.AddChidren(btnSensorName);
                Button btnFromFoorAndRoom1 = new Button()
                {
@@ -774,20 +770,162 @@
                    SelectedImagePath = "FunctionIcon/EnvironmentalScience/DiagramIconOn.png",
                };
                otherInfoView.AddChidren(btnShowData1);
                btnShowData1.MouseUpEventHandler = (sender, e) => {
                    btnShowData1.IsSelected = !btnShowData1.IsSelected;
                    if (btnShowData1.IsSelected)
                    {
                        if (!showFunctions.Contains(function))
                        {
                            showFunctions.Add(function);
                        }
                    }
                    else
                    {
                        if (showFunctions.Contains(function))
                        {
                            showFunctions.Remove(function);
                        }
                    }
                    LoadMothed_GetSensorHistoryData();
                };
                #endregion
            }
            #endregion
            new TopViewDiv(bodyView, Language.StringByID(sensorTemp.GetFunctionTypeNameId(function.spk))).LoadTopView();
            new TopViewDiv(bodyView, Language.StringByID(sensor.functionTypeNameId)).LoadTopView();
            LoadMothed_GetSensorHistoryData();
            LoadEvent_ChangeSensorHistoryShowType();
        }
    }
}
    //------------
    public partial class EnvironmentalSensorPage
    {
        /// <summary>
        /// 读取传感器历史数据
        /// </summary>
        void LoadMothed_GetSensorHistoryData( )
        {
            var loadPage = new Loading() {
                LodingBackgroundColor = 0x88888888,
            };
            historyDataView.AddChidren(loadPage);
            new System.Threading.Thread(() =>
            {
                try
                {
                    Application.RunOnMainThread(() => {
                        loadPage.Start(Language.StringByID(StringId.PleaseWait));
                    });
                    int i = 0;
                    var ebl = new EchartsOption_BrokenLine();
                    string yDataString = "";
                    foreach (var sr in FunctionList.List.GetEnvirSensorsList())
                    {
                        if (sr.spk != function.spk)
                        {
                            continue;
                        }
                        if (showFunctions.Find((obj) => obj.sid == sr.sid) == null)
                        {
                            i++;
                            continue;
                        }
                        var sensorType = sr.spk.Split(".")[1];
                        var revertObj = new HttpServerRequest().GetSensorHistory(curQueryType, sr.deviceId,"value");
                        if (revertObj != null)
                        {
                            if (revertObj.Code == StateCode.SUCCESS)
                            {
                                var revertData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<EnvironmentalSensorHistor>>(revertObj.Data.ToString());
                                if (i == 0)
                                {
                                    List<string> vs = new List<string>();
                                    foreach(var data in revertData)
                                    {
                                        vs.Add(data.fieldName);
                                    }
                                    ebl.InitXdataText(vs);
                                }
                                yDataString += ebl.InitYdataText(sr.name, revertData, tipColorStringList[i]);
                            }
                        }
                        i++;
                    }
                    Application.RunOnMainThread(() =>
                    {
                        myEchartsView.ShowWithOption(ebl.InitOption());
                    });
                }
                catch (Exception ex)
                {
                    MainPage.Log($"sensor history error : {ex.Message}");
                }
                finally
                {
                    Application.RunOnMainThread(() => {
                        loadPage.Hide();
                    });
                }
            })
            { IsBackground = true }.Start();
        }
        void LoadEvent_ChangeSensorHistoryShowType()
        {
            btnShowHistroyData_Day.MouseUpEventHandler = (sender, e) =>
            {
                showDataTypeView.BackgroundImagePath = "FunctionIcon/EnvironmentalScience/SensorHistoryBg1.png";
                btnShowHistroyData_Day.IsSelected = true;
                btnShowHistroyData_Month.IsSelected = false;
                btnShowHistroyData_Week.IsSelected = false;
                curQueryType = "hour";
                LoadMothed_GetSensorHistoryData();
            };
            btnShowHistroyData_Month.MouseUpEventHandler = (sender, e) =>
            {
                showDataTypeView.BackgroundImagePath = "FunctionIcon/EnvironmentalScience/SensorHistoryBg3.png";
                btnShowHistroyData_Day.IsSelected = false;
                btnShowHistroyData_Month.IsSelected = true;
                btnShowHistroyData_Week.IsSelected = false;
                curQueryType = "month";
                LoadMothed_GetSensorHistoryData();
            };
            btnShowHistroyData_Week.MouseUpEventHandler = (sender, e) =>
            {
                showDataTypeView.BackgroundImagePath = "FunctionIcon/EnvironmentalScience/SensorHistoryBg2.png";
                btnShowHistroyData_Day.IsSelected = false;
                btnShowHistroyData_Month.IsSelected = false;
                btnShowHistroyData_Week.IsSelected = true;
                curQueryType = "week";
                LoadMothed_GetSensorHistoryData();
            };
        }
    }
    public class EnvironmentalSensorHistor
    {
        /// <summary>
        /// </summary>
        public string fieldName { get; set; }
        /// <summary>
        /// </summary>
        public string fieldValue { get; set; }
    }
}