wei
2021-08-27 eda3fb873e59544ff36301b51e05aef64f87b0f9
HDL_ON/UI/UI2/4-PersonalCenter/MemberManagement/MemberFunctionPermissionPageBLL.cs
@@ -1,4 +1,6 @@
using System;
using System.Collections.Generic;
using System.Threading;
using HDL_ON.DAL;
using HDL_ON.DAL.Server;
using HDL_ON.Entity;
@@ -10,63 +12,329 @@
        void LoadEventList()
        {
            LoadEvent_AllSharedDataChange();
            LoadEvent_OptionClick();
        }
        /// <summary>
        /// 底部操作按钮点击事件
        /// </summary>
        void LoadEvent_OptionClick()
        {
            btnOption.MouseUpEventHandler = (sender, e) =>
            {
                Action action = () =>
                {
                    UploadShareDeviceList();
                };
                //是否需要保存
                new PublicAssmebly().TipOptionMsg(StringId.Tip, StringId.IfNeedToSave, action);
                //if (titleId == StringId.PermissionToUse)//从个人中心进入单独分享
                //{
                //    Action action = () =>
                //    {
                //        UploadShareDeviceList();
                //    };
                //    //是否需要保存
                //    new PublicAssmebly().TipOptionMsg(StringId.Tip, StringId.IfNeedToSave, action);
                //}
                //else
                //{
                //    //var sharedBytes = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(funs_New));
                //    //2020-12-01 屏蔽页面
                //    //var page = new ChooseShareMemberTargetListPage(funs_New, memberInfo);
                //    //MainPage.BasePageView.AddChidren(page);
                //    //page.LoadPage();
                //    //MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                //}
            };
        }
        /// <summary>
        /// 管理设备分享
        /// 2020-12-08 1.增加分享设备的时候,判断当前房间分享设备总数,从而决定是否需要增加或者移除房间分享
        /// </summary>
        void UploadShareDeviceList()
        {
            new Thread(() =>
            {
                try
                {
                    bool result = false;
                    Action act = () => { };
                    Application.RunOnMainThread(() =>
                    {
                        act = new PublicAssmebly().TipLoadingMsgDialog(Language.StringByID(StringId.SavingPleaseWait));
                    });
                    //2020-12-22 屏蔽房间分享管理
                    //if (!string.IsNullOrEmpty(roomId))
                    //{
                    //    //如果房间ID不为空,管理房间
                    //    ManageRoomSharing();
                    //}
                    //2.批量删除分享
                    var deleteShareObj = new DeleteShareObj()
                    {
                        shareDatas = funs_Del,
                        homeId = DB_ResidenceData.Instance.CurrentRegion.id,
                    };
                    LoadMethod_DelSharedData(deleteShareObj);
                    //3.批量上传
                    var funs_NeedAdd = new List<ShareData>();
                    foreach (var f in funs_RoomAll)
                    {
                        var sd = curResidenceShareData.Find((obj) => obj.shareTypeId == f.shareTypeId);
                        //如果该功能已经分享,不用分享
                        if (null == sd)
                        {
                            funs_NeedAdd.Add(f);
                        }
                    }
                    //3.1 提交请求
                    List<string> childAccountIds = new List<string>();
                    childAccountIds.Add(memberInfo.childAccountId);
                    var addShareObj = new AddShareObj()
                    {
                        shareDatas = funs_NeedAdd,
                        childAccountIds = childAccountIds,
                        homeId = DB_ResidenceData.Instance.CurrentRegion.id,
                    };
                    result = LoadMethod_AddShareData(addShareObj);
                    if (!result)
                    {
                        Application.RunOnMainThread(() =>
                        {
                            new PublicAssmebly().TipMsgAutoClose(Language.StringByID(StringId.FunctionSharingFailed), true);
                        });
                    }
                    Application.RunOnMainThread(() =>
                    {
                        act();
                    });
                    if (result)
                    {
                        //4.1管理最终的分享列表
                        var funs_final = new List<ShareData>();
                        funs_final.AddRange(curResidenceShareData);
                        //4.2移除删除的
                        foreach (var share_d in funs_Del)
                        {
                            var sd = funs_final.Find((obj) => obj.shareTypeId == share_d.shareTypeId);
                            //如果该功能已经分享,不用分享
                            if (null != sd)
                            {
                                funs_final.Remove(share_d);
                            }
                        }
                        //4.3添加新增的
                        funs_final.AddRange(funs_NeedAdd);
                        Application.RunOnMainThread(() =>
                        {
                            new PublicAssmebly().TipMsgAutoClose(Language.StringByID(StringId.FunctionSharingSucceeded), true);
                            memberInfo.CurResidenceShareData = funs_final;
                        });
                        Thread.Sleep(1600);
                        Application.RunOnMainThread(() =>
                        {
                            MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
                            refreshAction?.Invoke();
                        });
                    }
                }
                catch { }
                finally
                {
                }
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
        /// 新增共享数据点击事件
        /// </summary>
        bool LoadMethod_AddShareData(AddShareObj ssdd)
        {
            //增加共享数据目录
            var responePack = new HttpServerRequest().AddShareData(ssdd);
            if (responePack.Code != StateCode.SUCCESS)
            {
                return false;
            }
            else
            {
                return true;
                //var responeObj = Newtonsoft.Json.JsonConvert.DeserializeObject<ShareData>(responePack.Data.ToString());
                //ssdd.id = responeObj.id;
                //// 更新共享数据
                //return EditShareData(ssdd);
            }
        }
        /// <summary>
        /// 更新共享数据点击事件
        /// 删除共享数据点击事件
        /// </summary>
        void LoadEvent_EditShareData()
        /// <param name="function"></param>
        bool LoadMethod_DelSharedData(DeleteShareObj sd)
        {
            if (memberInfo.CurShareData.ShareName == "")
            var responePack = new HttpServerRequest().DeleteShareData(sd);
            if (responePack.Code != StateCode.SUCCESS)
            {
                var ssdd = new ShareData();
                ssdd.ShareName = DB_ResidenceData.residenceData.residecenInfo.RegionID;
                ssdd.HouseDistributedMark = DB_ResidenceData.residenceData.residecenInfo.RegionID;
                ssdd.ShareDataBytes = CommonPage.MyEncodingUTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(funs));
                ssdd.SubAccountDistributedMark = memberInfo.SubAccountDistributedMark;
                ResponsePack responePack = new HttpServerRequest().AddShareData(ssdd);
                if (responePack.StateCode.ToUpper() != "SUCCESS")
                return false;
            }
            else
            {
                return true;
            }
        }
        /// <summary>
        /// 管理房间分享操作
        /// funs_New 大于1分享房间
        /// </summary>
        bool ManageRoomSharing()
        {
            bool success = false;
            //1.管理最终属于房间的分享
            if (funs_RoomAll != null && funs_RoomAll.Count > 0)
            {
                //最终属于房间的分享大于0
                success = ShareRoom();
                if (success)
                {
                    new PublicAssmebly().TipMsgAutoClose(Language.StringByID(StringId.OperationFailed), true);
                    return;
                    Utlis.WriteLine("添加房间分享成功");
                }
                else
                {
                    ssdd.DistributedMark = responePack.ResponseData.ToString();
                    Utlis.WriteLine("添加房间分享失败");
                }
                memberInfo.CurShareData = ssdd;
            }
            else
            {
                UpdataShareData();
                success = DeleteShareRoom();
                if (success)
                {
                    Utlis.WriteLine("删除房间分享成功");
                }
                else
                {
                    Utlis.WriteLine("删除房间分享失败");
                }
            }
            return success;
        }
        /// <summary>
        /// 分享房间
        /// </summary>
        /// <returns></returns>
        bool ShareRoom()
        {
            var roomList = new List<ShareData>();
            roomList.Add(new ShareData()
            {
                shareType = ShareType.ROOM.ToString(),
                shareTypeId = roomId
            });
            List<string> childAccountIds = new List<string>();
            childAccountIds.Add(memberInfo.childAccountId);
            var addShareObj = new AddShareObj()
            {
                childAccountIds = childAccountIds,
                homeId = DB_ResidenceData.Instance.CurrentRegion.id,
                shareDatas = roomList
            };
            var responePack = new HttpServerRequest().AddShareData(addShareObj);
            if (responePack.Code != StateCode.SUCCESS)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        /// <summary>
        /// 更新共享数据
        /// 删除房间分享
        /// </summary>
        void UpdataShareData()
        /// <returns></returns>
        bool DeleteShareRoom()
        {
            ResponsePack responePack = new HttpServerRequest().EditShareData(memberInfo.CurShareData);
            if (responePack.StateCode.ToUpper() == "SUCCESS")
            var roomList = new List<ShareData>();
            roomList.Add(new ShareData()
            {
                new PublicAssmebly().TipMsgAutoClose(Language.StringByID(StringId.SavedSuccessfully), true);
                shareType = ShareType.ROOM.ToString(),
                shareTypeId = roomId
            });
            var deleteShareObj = new DeleteShareObj()
            {
                shareDatas = roomList,
                homeId = DB_ResidenceData.Instance.CurrentRegion.id,
            };
            var responePack = new HttpServerRequest().DeleteShareData(deleteShareObj);
            if (responePack.Code != StateCode.SUCCESS)
            {
                return false;
            }
            else
            {
                new PublicAssmebly().TipMsgAutoClose(Language.StringByID(StringId.OperationFailed), true);
                return true;
            }
        }
        void LoadEvent_SharedDataChange(Button btnChoose, Button btn2, FrameLayout btn3, Entity.Function function)
        /// <summary>
        /// LoadMethod_SharedDataChange
        /// </summary>
        /// <param name="btnChoose"></param>
        /// <param name="btn2"></param>
        /// <param name="btn3"></param>
        /// <param name="function"></param>
        void LoadMethod_SharedDataChange(Button btnChoose, Button btn2, FrameLayout btn3, RoomData roomData)
        {
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                btnChoose.IsSelected = !btnChoose.IsSelected;
                var sd = curResidenceShareData.Find((obj) => obj.shareTypeId == roomData.shareTypeId);
                if (btnChoose.IsSelected)
                {
                    try
                    {
                        funs.Add(function);
                        if (null != sd)
                        {
                            if (!funs_RoomAll.Contains(sd))
                            {
                                funs_RoomAll.Add(sd);
                            }
                            if (funs_Del.Contains(sd))
                            {
                                funs_Del.Remove(sd);
                            }
                        }
                        else
                        {
                            var newSd = new ShareData();
                            newSd.shareTypeId = roomData.shareTypeId;
                            newSd.shareType = roomData.shareType;
                            funs_RoomAll.Add(newSd);
                        }
                        btnChooseAll.IsSelected = true;
                        foreach (var f in roomFunctionOrSceneList)
                        {
                            if (funs_RoomAll.Find((obj) => obj.shareTypeId == f.shareTypeId) == null)
                            {
                                btnChooseAll.IsSelected = false;
                                break;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
@@ -75,7 +343,20 @@
                }
                else
                {
                    funs.Remove(function);
                    var onFuns = funs_RoomAll.Find((obj) => obj.shareTypeId == roomData.shareTypeId);
                    if (funs_RoomAll.Contains(onFuns))
                    {
                        funs_RoomAll.Remove(onFuns);
                    }
                    if (null != sd)
                    {
                        if (!funs_Del.Contains(sd))
                        {
                            funs_Del.Add(sd);
                        }
                    }
                    btnChooseAll.IsSelected = false;
                }
            };
            btnChoose.MouseUpEventHandler = eventHandler;
@@ -83,23 +364,45 @@
            btn3.MouseUpEventHandler = eventHandler;
        }
        /// <summary>
        /// 全选按钮点击事件
        /// </summary>
        void LoadEvent_AllSharedDataChange()
        {
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                btnChooseAll.IsSelected = !btnChooseAll.IsSelected;
                funs.Clear();
                funs = new System.Collections.Generic.List<Function>();
                funs_Del = new List<ShareData>();
                funs_RoomAll = new List<ShareData>();
                if (btnChooseAll.IsSelected)
                {
                    funs.AddRange( room.functions);
                    foreach (var f in roomFunctionOrSceneList)
                    {
                        var ssdd = new ShareData();
                        ssdd.shareTypeId = f.shareTypeId;
                        ssdd.shareType = f.shareType;
                        funs_RoomAll.Add(ssdd);
                    }
                }
                LoadFunctionRow();
                else
                {
                    foreach (var f in roomFunctionOrSceneList)
                    {
                        var sd = curResidenceShareData.Find((obj) => obj.shareTypeId == f.shareTypeId);
                        if (sd != null)
                        {
                            funs_Del.Add(sd);
                        }
                    }
                }
                LoadFunctionRow(funs_RoomAll);
            };
            btnChooseAll.MouseUpEventHandler = eventHandler;
            allRoomView.MouseUpEventHandler = eventHandler;
        }
    }
}