wei
2020-12-23 263401d40b2d9d2c1b36a24f33d45c5cb7192518
HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
old mode 100644 new mode 100755
@@ -15,13 +15,19 @@
            for (int i = 0; i < Logic.currlogic.input.Count; i++)
            {
                Input inputCondition = Logic.currlogic.input[i];
                if (inputCondition == null)
                {
                    //防止有的空对象;
                    //正常情况下不会该现象;
                    continue;
                }
                ///各种条件的View
                LogicView.AddOutputInputView inputView = new LogicView.AddOutputInputView();
                inputView.FLayoutView(viewLayout);
                ///记录条件类型
                inputView.btnClick.Name = inputCondition.condition_type;
                ///记录条件索引
                inputView.btnClick.Tag = i;
                inputView.btnClick.Tag = inputCondition.sid;
                ///条件状态数组
                List<Dictionary<string, string>> dicList = inputCondition.condition as List<Dictionary<string, string>>;
                //显示条件各种类型状态
@@ -29,7 +35,7 @@
                {
                    case "1":
                        {
                            inputView.btnIcon.UnSelectedImagePath = "LogicIcon/timecondition.png";
                            inputView.btnIcon.UnSelectedImagePath = "LogicIcon/time.png";
                            foreach (var dic in dicList)
                            {
                                string value = dic["value"];
@@ -40,7 +46,7 @@
                        break;
                    case "2":
                        {
                            inputView.btnIcon.UnSelectedImagePath = "LogicIcon/timecondition.png";
                            inputView.btnIcon.UnSelectedImagePath = "LogicIcon/time.png";
                            foreach (var dic in dicList)
                            {
                                string value = dic["value"];
@@ -67,12 +73,12 @@
                                case FunctionType.Dimmer:
                                case FunctionType.RGB:
                                case FunctionType.RGBW:
                                case FunctionType.CCT:
                                case FunctionType.ColorTemperature:
                                case FunctionType.Relay:
                                //窗帘
                                case FunctionType.Curtain:
                                case FunctionType.RollerCurtain:
                                case FunctionType.TrietexCurtain:
                                case FunctionType.RollingShutter:
                                case FunctionType.MotorCurtain:
                                //空调
                                case FunctionType.AC:
                                //地热
@@ -104,7 +110,19 @@
                {
                    Button button = (Button)sen;
                    //找到当前编辑的索引
                    int indexVulae = int.Parse(inputView.btnClick.Tag.ToString());
                    int indexVulae = 0;
                    for (int index = 0; index < Logic.currlogic.input.Count; index++)
                    {
                        Input input = Logic.currlogic.input[index];
                        if (input.sid == inputView.btnClick.Tag.ToString())
                        {
                            //用户可能删除数据,使列表索引发生改变;
                            //通过唯一sid重新查找到索引且更新索引值
                            indexVulae = index;
                            break;
                        }
                    }
                    //标记编辑状态
                    bool edit = true;
                    switch (button.Name)
@@ -131,7 +149,6 @@
                                timeTpye.TimeHorizon(fLayout, edit, indexVulae);
                            }
                            break;
                        case "3":
                            {
                                //用sid找到设备;
@@ -162,20 +179,26 @@
        /// <param name="viewLayout">上下滑动控件</param>
        public static void OutputTarget(FrameLayout thisView, VerticalScrolViewLayout viewLayout)
        {
            for (int i = 0; i < Logic.currlogic.output.Count; i++)
            for (int i = 0; i < Logic.currlogic.output.Count; i++)
            {
                Output outputTarget = Logic.currlogic.output[i];
                if (outputTarget == null)
                {
                    //防止有的空对象;
                    //正常情况下不会该现象;
                    continue;
                }
                ///各种条件的View
                LogicView.AddOutputInputView targetView = new LogicView.AddOutputInputView();
                targetView.FLayoutView(viewLayout);
                ///记录条件类型
                targetView.btnClick.Name = outputTarget.target_type;
                ///记录条件索引
                targetView.btnClick.Tag = i;
                targetView.btnClick.Tag = outputTarget.sid;
                ///条件状态数组
                List<Dictionary<string, string>> dicList = outputTarget.status as List<Dictionary<string, string>>;
                //显示条件各种类型状态
                //显示输出条件各种类型状态
                switch (outputTarget.target_type)
                {
                    case "1":
@@ -195,9 +218,9 @@
                            {
                                case FunctionType.Relay:
                                    {//开关灯
                                        foreach (var dic in dicList)
                                        {
                                            string value = dic["value"];
                                            if (value == "on")
                                            {
@@ -212,43 +235,36 @@
                                        targetView.btnState.Text = stateStr;
                                    }
                                    break;
                                case FunctionType.RGB:
                                case FunctionType.RGBW:
                                case FunctionType.ColorTemperature:
                                case FunctionType.Dimmer:
                                    {
                                        bool _if = false;
                                        foreach (var dic in dicList)
                                        string on_off = GetKeyValue("on_off", dicList);
                                        string brightness = GetKeyValue("brightness", dicList);
                                        if (on_off == "on" && brightness != "")
                                        {
                                            if (dic["key"] == "on_off")
                                            {
                                                string value = dic["value"];
                                                if (value == "on")
                                                {
                                                    targetView.btnState.Text = Language.StringByID(StringId.onLogic);
                                                    _if = false;
                                                }
                                                else
                                                {
                                                    targetView.btnState.Text = Language.StringByID(StringId.offLogic);
                                                    _if = true;
                                                }
                                            }
                                            stateStr = Language.StringByID(StringId.onLogic) + brightness + "%";
                                        }
                                        foreach (var dic in dicList)
                                        else if (on_off == "on")
                                        {
                                            if (dic["key"] == "brightness")
                                            {
                                                string value = dic["value"];
                                                if (!_if)
                                                {
                                                    targetView.btnState.Text += value;
                                                }
                                            }
                                            stateStr = Language.StringByID(StringId.onLogic);
                                        }
                                        else if (on_off == "off")
                                        {
                                            stateStr = Language.StringByID(StringId.offLogic);
                                        }
                                        else if (brightness != "")
                                        {
                                            stateStr = brightness + "%";
                                        }
                                        targetView.btnState.Text = stateStr;
                                    }
                                    break;
                                case FunctionType.Curtain:
                                    {//开关灯
                                case FunctionType.MotorCurtain:
                                case FunctionType.RollingShutter:
                                    {
                                        foreach (var dic in dicList)
                                        {
                                            string value = dic["value"];
@@ -274,6 +290,199 @@
                                        targetView.btnState.Text = stateStr;
                                    }
                                    break;
                                case FunctionType.AC: {
                                        string on_off = GetKeyValue("on_off", dicList);
                                        string set_temp = GetKeyValue("set_temp", dicList);
                                        string mode = GetKeyValue("mode", dicList);
                                        string fan = GetKeyValue("fan", dicList);
                                        if (on_off != "") {
                                            switch (on_off)
                                            {
                                                case "on":
                                                    {
                                                        stateStr = Language.StringByID(StringId.onLogic)+",";
                                                    }
                                                    break;
                                                case "off":
                                                    {
                                                        stateStr = Language.StringByID(StringId.offLogic) + ",";
                                                    }
                                                    break;
                                            }
                                        }
                                        if (set_temp != "")
                                        {
                                            stateStr += set_temp + "℃,";
                                        }
                                        if (mode != "")
                                        {
                                            switch (mode)
                                            {
                                                case "cool":
                                                    {
                                                        stateStr += Language.StringByID(StringId.coolLogic)+",";
                                                    }
                                                    break;
                                                case "heat":
                                                    {
                                                        stateStr += Language.StringByID(StringId.heatingLogic) + ",";
                                                    }
                                                    break;
                                                case "auto":
                                                    {
                                                        stateStr += Language.StringByID(StringId.autoLogic) + ",";
                                                    }
                                                    break;
                                                case "dry":
                                                    {
                                                        stateStr += Language.StringByID(StringId.dehumidifyLogic) + ",";
                                                    }
                                                    break;
                                            }
                                        }
                                        if (fan != "")
                                        {
                                            switch (fan)
                                            {
                                                case "high":
                                                    {
                                                        stateStr += Language.StringByID(StringId.HighWindSpeed)+",";
                                                    }
                                                    break;
                                                case "medium":
                                                    {
                                                        stateStr += Language.StringByID(StringId.MiddleWindSpeed) + ",";
                                                    }
                                                    break;
                                                case "low":
                                                    {
                                                        stateStr += Language.StringByID(StringId.LowWindSpeed) + ",";
                                                    }
                                                    break;
                                                case "auto":
                                                    {
                                                        stateStr += Language.StringByID(StringId.Auto) + ",";
                                                    }
                                                    break;
                                            }
                                        }
                                        if (on_off != "" && on_off == "off")
                                        {
                                            targetView.btnState.Text = Language.StringByID(StringId.offLogic);
                                        }
                                        else {
                                            targetView.btnState.Text = stateStr.TrimEnd(',');
                                        }
                                    }
                                    break;
                                case FunctionType.FloorHeating:
                                    {
                                        string on_off = GetKeyValue("on_off", dicList);
                                        string set_temp = GetKeyValue("set_temp", dicList);
                                        string mode = GetKeyValue("mode", dicList);
                                        if (on_off != "")
                                        {
                                            switch (on_off)
                                            {
                                                case "on":
                                                    {
                                                        stateStr = Language.StringByID(StringId.onLogic) + ",";
                                                    }
                                                    break;
                                                case "off":
                                                    {
                                                        stateStr = Language.StringByID(StringId.offLogic) + ",";
                                                    }
                                                    break;
                                            }
                                        }
                                        if (set_temp != "")
                                        {
                                            stateStr += set_temp + "℃,";
                                        }
                                        if (mode != "")
                                        {
                                            switch (mode)
                                            {
                                                case "day":
                                                    {
                                                        stateStr += Language.StringByID(StringId.dayMode)+",";
                                                    }
                                                    break;
                                                case "night":
                                                    {
                                                        stateStr += Language.StringByID(StringId.nightMode) + ",";
                                                    }
                                                    break;
                                                case "away":
                                                    {
                                                        stateStr += Language.StringByID(StringId.leaveMode) + ",";
                                                    }
                                                    break;
                                                case "normal":
                                                    {
                                                        stateStr += Language.StringByID(StringId.ordinaryMode) + ",";
                                                    }
                                                    break;
                                                case "timer":
                                                    {
                                                        stateStr += Language.StringByID(StringId.timeMode) + ",";
                                                    }
                                                    break;
                                            }
                                            switch (mode)
                                            {
                                                case "cool":
                                                    {
                                                        stateStr += Language.StringByID(StringId.coolLogic) + ",";
                                                    }
                                                    break;
                                                case "heat":
                                                    {
                                                        stateStr += Language.StringByID(StringId.heatingLogic) + ",";
                                                    }
                                                    break;
                                                case "auto":
                                                    {
                                                        stateStr += Language.StringByID(StringId.autoLogic) + ",";
                                                    }
                                                    break;
                                                case "dry":
                                                    {
                                                        stateStr += Language.StringByID(StringId.dehumidifyLogic) + ",";
                                                    }
                                                    break;
                                            }
                                        }
                                        if (on_off != "" && on_off == "off")
                                        {
                                            targetView.btnState.Text =Language.StringByID(StringId.offLogic);
                                        }
                                        else
                                        {
                                            targetView.btnState.Text = stateStr.TrimEnd(',');
                                        }
                                    }
                                    break;
                            }
                        }
                        break;
@@ -293,7 +502,7 @@
                            foreach (var dic in dicList)
                            {
                                string value = dic["value"];
                                targetView.btnText.Text =value;
                                targetView.btnText.Text = value;
                            }
                        }
                        break;
@@ -303,7 +512,18 @@
                {
                    Button button = (Button)sen;
                    //找到当前编辑的索引
                    int indexVulae = int.Parse(targetView.btnClick.Tag.ToString());
                    int indexVulae =0;
                    for (int index = 0; index < Logic.currlogic.output.Count; index++)
                    {
                        Output target = Logic.currlogic.output[index];
                        if (target.sid == targetView.btnClick.Tag.ToString())
                        {
                            //用户可能删除数据,使列表索引发生改变;
                            //通过唯一sid重新查找到索引且更新索引值
                            indexVulae = index;
                            break;
                        }
                    }
                    //标记编辑状态
                    bool edit = true;
                    switch (button.Name)
@@ -329,7 +549,7 @@
                                AddTarget addTarget = new AddTarget();
                                addTarget.Delayed(fLayout, edit, indexVulae);
                            }
                            break;
                    }
@@ -342,6 +562,447 @@
                };
            }
        }
        /// <summary>
        /// 显示编辑之前的设备状态
        /// </summary>
        /// <param name="device">编辑设备</param>
        /// <param name="button1">显示Btn</param>
        /// <param name="button2">显示Btn</param>
        /// <param name="button3">显示Btn</param>
        /// <param name="button4">显示Btn</param>
        public static void EditState(Entity.Function device, List<Dictionary<string, string>> dicList, Button button1, Button button2, Button button3, Button button4)
        {
            switch (device.functionType)
            {
                //开关灯光
                case FunctionType.Relay:
                    {
                        foreach (var dic in dicList)
                        {
                            string value = dic["value"];
                            if (value == "on")
                            {
                                button1.Text = Language.StringByID(StringId.onLogic);
                            }
                            else
                            {
                                button1.Text = Language.StringByID(StringId.offLogic);
                            }
                        }
                    }
                    break;
                case FunctionType.Dimmer:
                case FunctionType.RGB:
                case FunctionType.RGBW:
                case FunctionType.ColorTemperature:
                    {
                        foreach (var dic in dicList)
                        {
                            string value = dic["value"];
                            switch (dic["key"])
                            {
                                case "on_off":
                                    {
                                        if (value == "on")
                                        {
                                            button1.Text = Language.StringByID(StringId.onLogic);
                                        }
                                        else
                                        {
                                            button1.Text = Language.StringByID(StringId.offLogic);
                                        }
                                    }
                                    break;
                                case "brightness":
                                    {
                                        button2.Text = value + "%";
                                    }
                                    break;
                            }
                        }
                    }
                    break;
                case FunctionType.Curtain:
                case FunctionType.MotorCurtain:
                case FunctionType.RollingShutter:
                    {
                        foreach (var dic in dicList)
                        {
                            string value = dic["value"];
                            switch (value)
                            {
                                case "on":
                                    {
                                        button1.Text = Language.StringByID(StringId.onLogic);
                                    }
                                    break;
                                case "off":
                                    {
                                        button1.Text = Language.StringByID(StringId.offLogic);
                                    }
                                    break;
                                case "stop":
                                    {
                                        button1.Text = Language.StringByID(StringId.stop);
                                    }
                                    break;
                            }
                        }
                    }
                    break;
                case FunctionType.AC:
                    {
                        foreach (var dic in dicList)
                        {
                            string value = dic["value"];
                            switch (dic["key"])
                            {
                                case "on_off":
                                    {
                                        switch (value)
                                        {
                                            case "on":
                                                {
                                                    button1.Text = Language.StringByID(StringId.onLogic);
                                                }
                                                break;
                                            case "off":
                                                {
                                                    button1.Text = Language.StringByID(StringId.offLogic);
                                                }
                                                break;
                                        }
                                    }
                                    break;
                                case "set_temp":
                                    {
                                        button2.Text = value + "℃";
                                    }
                                    break;
                                case "mode":
                                    {
                                        switch (value)
                                        {
                                            case "cool":
                                                {
                                                    button3.Text = Language.StringByID(StringId.coolLogic);
                                                }
                                                break;
                                            case "heat":
                                                {
                                                    button3.Text = Language.StringByID(StringId.heatingLogic);
                                                }
                                                break;
                                            case "auto":
                                                {
                                                    button3.Text = Language.StringByID(StringId.autoLogic);
                                                }
                                                break;
                                            case "dry":
                                                {
                                                    button3.Text = Language.StringByID(StringId.dehumidifyLogic);
                                                }
                                                break;
                                        }
                                    }
                                    break;
                                case "fan":
                                    {
                                        switch (value)
                                        {
                                            case "high":
                                                {
                                                    button4.Text = Language.StringByID(StringId.HighWindSpeed);
                                                }
                                                break;
                                            case "medium":
                                                {
                                                    button4.Text = Language.StringByID(StringId.MiddleWindSpeed);
                                                }
                                                break;
                                            case "low":
                                                {
                                                    button4.Text = Language.StringByID(StringId.LowWindSpeed);
                                                }
                                                break;
                                            case "auto":
                                                {
                                                    button4.Text = Language.StringByID(StringId.Auto);
                                                }
                                                break;
                                        }
                                    }
                                    break;
                            }
                        }
                    }
                    break;
                case FunctionType.FloorHeating:
                    {
                        foreach (var dic in dicList)
                        {
                            string value = dic["value"];
                            switch (dic["key"])
                            {
                                case "on_off":
                                    {
                                        switch (value)
                                        {
                                            case "on":
                                                {
                                                    button1.Text = Language.StringByID(StringId.onLogic);
                                                }
                                                break;
                                            case "off":
                                                {
                                                    button1.Text = Language.StringByID(StringId.offLogic);
                                                }
                                                break;
                                        }
                                    }
                                    break;
                                case "set_temp":
                                    {
                                        button2.Text = value + "℃";
                                    }
                                    break;
                                case "mode":
                                    {
                                        switch (value)
                                        {
                                            case "day":
                                                {
                                                    button3.Text = Language.StringByID(StringId.dayMode);
                                                }
                                                break;
                                            case "night":
                                                {
                                                    button3.Text = Language.StringByID(StringId.nightMode);
                                                }
                                                break;
                                            case "away":
                                                {
                                                    button3.Text = Language.StringByID(StringId.leaveMode);
                                                }
                                                break;
                                            case "normal":
                                                {
                                                    button3.Text = Language.StringByID(StringId.ordinaryMode);
                                                }
                                                break;
                                            case "timer":
                                                {
                                                    button3.Text = Language.StringByID(StringId.timeMode);
                                                }
                                                break;
                                        }
                                    }
                                    break;
                            }
                        }
                    }
                    break;
            }
        }
        /// <summary>
        /// 获取value键值
        /// </summary>
        /// <param name="keyValue"></param>
        /// <param name="dicList"></param>
        /// <returns></returns>
        public static string GetKeyValue(string keyValue, List<Dictionary<string, string>> dicList)
        {
            string valueStr = "";
            foreach (var dic in dicList)
            {
                if (dic["key"] == keyValue)
                {
                    valueStr = dic["value"];
                    break;
                }
            }
            return valueStr;
        }
        /// <summary>
        ///获取自动化名称
        /// </summary>
        /// <returns> 新建自动化命名规则</returns>
        public static string GetLogicName(Logic logic)
        {
            string name = "";
            try
            {
                //默认取第一个条件
                Input inputCondition = logic.input[0];
                //显示条件各种类型状态
                switch (inputCondition.condition_type)
                {
                    case "1":
                        {
                            name = Language.StringByID(StringId.hour) + "-";
                        }
                        break;
                    case "2":
                        {
                            name = Language.StringByID(StringId.timeHorizon) + "-";
                        }
                        break;
                    case "3":
                        {
                            //用sid找到设备;
                            var device = LogicMethod.GetDevice(inputCondition.sid);
                            name = device.name + "-";
                        }
                        break;
                }
                //默认取第一个目标
                Output outputTarget = logic.output[0];
                List<Dictionary<string, string>> dicList = outputTarget.status as List<Dictionary<string, string>>;
                //显示输出条件各种类型状态
                switch (outputTarget.target_type)
                {
                    case "1":
                        {
                            //用sid找到设备;
                            var device = LogicMethod.GetDevice(outputTarget.sid);
                            //显示设备名称
                            name += device.name;
                            string stateStr = "";
                            //区别不同设备,显示不同设备状态
                            switch (device.functionType)
                            {
                                case FunctionType.Relay:
                                    {//开关灯
                                        foreach (var dic in dicList)
                                        {
                                            string value = dic["value"];
                                            if (value == "on")
                                            {
                                                stateStr = Language.StringByID(StringId.onLogic);
                                            }
                                            else
                                            {
                                                stateStr = Language.StringByID(StringId.offLogic);
                                            }
                                        }
                                    }
                                    break;
                                case FunctionType.RGB:
                                case FunctionType.RGBW:
                                case FunctionType.ColorTemperature:
                                case FunctionType.Dimmer:
                                    {
                                        string on_off = InpOrOutLogicMethod.GetKeyValue("on_off", dicList);
                                        string brightness = InpOrOutLogicMethod.GetKeyValue("brightness", dicList);
                                        if (on_off == "on" && brightness != "")
                                        {
                                            stateStr = Language.StringByID(StringId.onLogic) + brightness + "%";
                                        }
                                        else if (on_off == "on")
                                        {
                                            stateStr = Language.StringByID(StringId.onLogic);
                                        }
                                        else if (on_off == "off")
                                        {
                                            stateStr = Language.StringByID(StringId.offLogic);
                                        }
                                        else if (brightness != "")
                                        {
                                            stateStr = brightness + "%";
                                        }
                                    }
                                    break;
                                case FunctionType.Curtain:
                                case FunctionType.MotorCurtain:
                                case FunctionType.RollingShutter:
                                    {
                                        foreach (var dic in dicList)
                                        {
                                            string value = dic["value"];
                                            switch (value)
                                            {
                                                case "on":
                                                    {
                                                        stateStr = Language.StringByID(StringId.onLogic);
                                                    }
                                                    break;
                                                case "off":
                                                    {
                                                        stateStr = Language.StringByID(StringId.offLogic);
                                                    }
                                                    break;
                                                case "stop":
                                                    {
                                                        stateStr = Language.StringByID(StringId.stop);
                                                    }
                                                    break;
                                            }
                                        }
                                    }
                                    break;
                                case FunctionType.AC:
                                case FunctionType.FloorHeating:
                                    {
                                        foreach (var dic in dicList)
                                        {
                                            string value = dic["value"];
                                            if (value == "on")
                                            {
                                                stateStr = Language.StringByID(StringId.onLogic);
                                            }
                                            else if (value == "off")
                                            {
                                                stateStr = Language.StringByID(StringId.offLogic);
                                            }
                                        }
                                    }
                                    break;
                            }
                            name += stateStr;
                        }
                        break;
                    case "2":
                        {
                            //用sid找到场景;
                            var scene = LogicMethod.GetSecne(outputTarget.sid);
                            name += scene.name;
                        }
                        break;
                }
            }
            catch { }
            return name;
        }
    }
}