Prechádzať zdrojové kódy

修改DingDingBind是否激活的类型,添加获取人数接口,添加依据传输的数据更新和删除权限接口,完善依据钉钉UserID查询钉钉用户信息接口

Li 3 rokov pred
rodič
commit
93c9965cc8

+ 1 - 1
TEAMModeBI/Controllers/BIHome/HomeStatisController.cs

@@ -34,7 +34,7 @@ namespace TEAMModeBI.Controllers.BIHome
         /// <param name="jsonElement"></param>
         /// <returns></returns>
         [ProducesDefaultResponseType]
-        [HttpPost("numberpeople")]
+        [HttpPost("get-numberpeople")]
         public async Task<IActionResult> NumberPeople(JsonElement jsonElement)  
         {
             if (!jsonElement.TryGetProperty("schooolId", out JsonElement schoolId)) return BadRequest();

+ 138 - 63
TEAMModeBI/Controllers/BISchool/BatchSchoolController.cs

@@ -31,6 +31,138 @@ namespace TEAMModeBI.Controllers.BISchool
             _option = option?.Value;
         }
 
+        /// <summary>
+        /// 获取BI权限列表
+        /// </summary>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("get-teacher-authoritybilist")]
+        public async Task<IActionResult> GetAuthorityBIList() 
+        {
+            Dictionary<string, object> dic = new Dictionary<string, object> { { "PartitionKey", "authority-bi" } };
+            List<Authority> authorityBIList = await _azureStorage.FindListByDict<Authority>(dic);
+
+            return Ok(new { authorityBIList });
+        }
+        
+        /// <summary>
+        /// 通过教师的id和学校的code查询权限
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("get-teacherroles")]
+        public async Task<IActionResult> GetTeacherRoles(JsonElement jsonElement)
+        {
+            try
+            {
+                if (!jsonElement.TryGetProperty("id", out JsonElement id)) return Ok(new { state = 1, message = "参数错误!" });
+                if (!jsonElement.TryGetProperty("schoolcode", out JsonElement schoolcode)) return Ok(new { state = 1, message = "参数错误!" });
+
+                var client = _azureCosmos.GetCosmosClient();
+                string sqltxt = $"select * from c where c.id='{id}'";
+
+                List<string> roles = new List<string>();//角色列表
+                List<string> permissions = new List<string>();//权限列表
+
+                var schoolRoles = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{id}", new PartitionKey($"Teacher-{schoolcode}"));
+                if (schoolRoles.Status == 200)
+                {
+                    using var json = await JsonDocument.ParseAsync(schoolRoles.ContentStream);
+                    if (json.RootElement.TryGetProperty("roles", out JsonElement _roles) && _roles.ValueKind != JsonValueKind.Null)
+                    {
+                        foreach (var obj in _roles.EnumerateArray())
+                        {
+                            roles.Add(obj.GetString());
+                        }
+                    }
+                    if (json.RootElement.TryGetProperty("permissions", out JsonElement _permissions) && _permissions.ValueKind != JsonValueKind.Null)
+                    {
+                        foreach (var obj in _permissions.EnumerateArray())
+                        {
+                            permissions.Add(obj.GetString());
+                        }
+                    }
+                }
+
+                return Ok(new { state = 200, roles = roles, permissions = permissions });
+            }
+            catch (Exception ex)
+            {
+                await _dingDing.SendBotMsg($"BI,{_option.Location},batchchool/get-quitstaff \n{ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
+                return BadRequest();
+
+            }
+        }
+
+        /// <summary>
+        /// 依据传输的数据更新和删除权限
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("get-permissions")]
+        public async Task<IActionResult> SetSchoolPermissions(JsonElement jsonElement) 
+        {
+            try
+            {
+                if (!jsonElement.TryGetProperty("ids", out JsonElement ids)) return Ok(new { state = 1, message = "ids参数错误!" });
+                if (!jsonElement.TryGetProperty("school_code", out JsonElement school_code)) return Ok(new { state = 1, message = "school_code参数错误!" });
+                if (!jsonElement.TryGetProperty("mode", out JsonElement mode)) return Ok(new { state = 1, message = "mode参数错误!" });     //del删除权限  up更新权限
+                if (!jsonElement.TryGetProperty("paramPower", out JsonElement paramPower)) return Ok(new { state = 1, message = "paramPower参数错误!" });
+
+                List<reoleds> havepower = new List<reoleds>(); //已存在的权限
+                var client = _azureCosmos.GetCosmosClient();
+                
+                //更新權限
+                foreach (var id in ids.EnumerateArray())
+                {
+                    SchoolTeacher st = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<SchoolTeacher>($"{id}", new PartitionKey($"Teacher-{school_code}"));
+
+                    if (mode.GetString().Equals("del"))
+                    {
+                        foreach (var pm in paramPower.EnumerateArray())
+                        {
+                            var bools = st.permissions.Find(x => x.Equals($"{pm}"));
+                            if (!string.IsNullOrEmpty($"{bools}"))
+                            {
+                                st.permissions.RemoveAll(x => x.Equals($"{bools}"));
+                            }
+                        }
+                    }
+                    else if (mode.GetString().Equals("up"))
+                    {
+                        var stes = st.roles.Find(x => x.Equals("assistant"));
+                        if (string.IsNullOrEmpty($"{stes}"))
+                        {
+                            st.roles.Add("assistant");
+                        }
+                        foreach (var pm in paramPower.EnumerateArray())
+                        {
+                            var bools = st.permissions.Find(x => x.Equals($"{pm}"));
+                            if (!string.IsNullOrEmpty($"{bools}"))
+                            {
+                                havepower.Add(new reoleds { ID = id.GetString(), relos = bools });
+                            }
+                            else
+                            {
+                                st.permissions.Add(pm.GetString());
+                            }
+                        }
+                    }
+                    else { return Ok(new { state = 1, message = "mode参数错误!" });  }
+                    await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<SchoolTeacher>(st, id.GetString(), new PartitionKey($"Teacher-{school_code}"));
+                }
+                return Ok(new { state = 200, havepower = havepower });
+            }
+            catch (Exception ex)
+            {
+                await _dingDing.SendBotMsg($"BI,{_option.Location},batchchool/get-quitstaff \n{ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
+                return BadRequest();
+            }
+        }
+
+
         /// <summary>
         /// 批量创校  --完成带测验
         /// </summary>
@@ -38,7 +170,7 @@ namespace TEAMModeBI.Controllers.BISchool
         /// <returns></returns>
         [ProducesDefaultResponseType]
         [HttpPost("batchUpsert")]
-        public async Task<IActionResult> batchUpsert(School school,string number)
+        public async Task<IActionResult> batchUpsert(School school, string number)
         {
             List<School> school_list = new List<School>();
             //创建多个学校
@@ -75,7 +207,7 @@ namespace TEAMModeBI.Controllers.BISchool
                 {
                     school.code = "Base";
                     school.id = $"{school.id}_{i}";
-                    school = await schoolContainer.CreateItemAsync(school,new PartitionKey($"Base"));
+                    school = await schoolContainer.CreateItemAsync(school, new PartitionKey($"Base"));
                 }
             }
 
@@ -115,69 +247,12 @@ namespace TEAMModeBI.Controllers.BISchool
         }
 
 
-        /// <summary>
-        /// 获取BI权限列表
-        /// </summary>
-        /// <returns></returns>
-        [ProducesDefaultResponseType]
-        [HttpPost("get-teacher-authoritybilist")]
-        public async Task<IActionResult> GetAuthorityBIList() 
-        {
-            Dictionary<string, object> dic = new Dictionary<string, object> { { "PartitionKey", "authority-bi" } };
-            List<Authority> authorityBIList = await _azureStorage.FindListByDict<Authority>(dic);
 
-            return Ok(new { authorityBIList });
-        }
-        
-        /// <summary>
-        /// 通过教师的id和学校的code查询权限
-        /// </summary>
-        /// <param name="jsonElement"></param>
-        /// <returns></returns>
-        [ProducesDefaultResponseType]
-        [HttpPost("get-teacherroles")]
-        public async Task<IActionResult> GetTeacherRoles(JsonElement jsonElement)
-        {
-            try
-            {
-                if (!jsonElement.TryGetProperty("id", out JsonElement id)) return Ok(new { state = 1, message = "参数错误!" });
-                if (!jsonElement.TryGetProperty("schoolcode", out JsonElement schoolcode)) return Ok(new { state = 1, message = "参数错误!" });
-
-                var client = _azureCosmos.GetCosmosClient();
-                string sqltxt = $"select * from c where c.id='{id}'";
-
-                List<string> roles = new List<string>();//角色列表
-                List<string> permissions = new List<string>();//权限列表
-
-                var schoolRoles = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{id}", new PartitionKey($"Teacher-{schoolcode}"));
-                if (schoolRoles.Status == 200)
-                {
-                    using var json = await JsonDocument.ParseAsync(schoolRoles.ContentStream);
-                    if (json.RootElement.TryGetProperty("roles", out JsonElement _roles) && _roles.ValueKind != JsonValueKind.Null)
-                    {
-                        foreach (var obj in _roles.EnumerateArray())
-                        {
-                            roles.Add(obj.GetString());
-                        }
-                    }
-                    if (json.RootElement.TryGetProperty("permissions", out JsonElement _permissions) && _permissions.ValueKind != JsonValueKind.Null)
-                    {
-                        foreach (var obj in _permissions.EnumerateArray())
-                        {
-                            permissions.Add(obj.GetString());
-                        }
-                    }
-                }
-
-                return Ok(new { state = 200, roles = roles, permissions = permissions });
-            }
-            catch (Exception ex)
-            {
-                await _dingDing.SendBotMsg($"BI,{_option.Location},batchchool/get-quitstaff \n{ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
-                return BadRequest();
-
-            }
 
+        public record reoleds() 
+        {
+            public string ID { get; set; }
+            public string relos { get; set; }
         }
 
 

+ 109 - 34
TEAMModeBI/Controllers/DingDingStruc/DDStructController.cs

@@ -12,8 +12,8 @@ using System.Text.Json;
 using System.Threading.Tasks;
 using TEAMModelOS.Models;
 using TEAMModelOS.SDK.DI;
+using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models.Service;
-using static DingTalk.Api.Response.OapiV2UserGetResponse;
 using static TEAMModelOS.SDK.Models.Teacher;
 
 namespace TEAMModeBI.Controllers.DingDingStruc
@@ -30,6 +30,7 @@ namespace TEAMModeBI.Controllers.DingDingStruc
         //钉钉提示信息
         private readonly DingDing _dingDing;
         private readonly Option _option;
+        string type = "ddteammodel";
 
         public DDStructController(IConfiguration configuration, AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, DingDing dingDing, IOptionsSnapshot<Option> option, CoreAPIHttpService aoreAPIHttpService)
         {
@@ -313,9 +314,8 @@ namespace TEAMModeBI.Controllers.DingDingStruc
             }
         }
 
-
         /// <summary>
-        /// 依据用ID查询用户信息
+        /// 依据钉钉UserID查询钉钉用户信息
         /// </summary>
         /// <param name="jsonElement"></param>
         /// <returns></returns>
@@ -325,10 +325,8 @@ namespace TEAMModeBI.Controllers.DingDingStruc
         {
             try
             {
-                jsonElement.TryGetProperty("userid", out JsonElement userId); //return Ok(new { state = 1, message = "参数错误!" });
-                jsonElement.TryGetProperty("userids", out JsonElement userIds);
-
-
+                if (!jsonElement.TryGetProperty("userids", out JsonElement userIds)) return Ok(new { state = 1, message = "参数问题" });
+                List<DingDingBind> userInfos = new List<DingDingBind>();
 
                 string appKey = _configuration["DingDingAuth:appKey"];
                 string appSecret = _configuration["DingDingAuth:appSecret"];
@@ -347,34 +345,113 @@ namespace TEAMModeBI.Controllers.DingDingStruc
 
                 //access_token的有效期为7200秒(2小时),有效期内重复获取会返回相同结果并自动续期,过期后获取会返回新的access_token
                 string access_token = response.AccessToken;
-
                 IDingTalkClient userInfoClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
-                OapiV2UserGetRequest reqUserInfo = new OapiV2UserGetRequest() { Userid = $"{userId}", Language = "zh_CN" };
-                //foreach (var tempid in ) 
-                //{
-                
-                //}
-                OapiV2UserGetResponse rspUserInfo = userInfoClient.Execute(reqUserInfo, access_token);
-                //var userInfo = "";
-                if (rspUserInfo.Result != null)
-                {
-                    UserGetResponseDomain userGetResponseDomain = new UserGetResponseDomain();
-                    userGetResponseDomain = rspUserInfo.Result;
-
-                    //var userInfo = rspUserInfo.Result;
-                    //DingDingBind ddbind = new DingDingBind();
-                    //ddbind.userid = rspUserInfo.Result.Userid;
-                    //ddbind.unionid = rspUserInfo.Result.Unionid;
-                    //ddbind.name = rspUserInfo.Result.Name;
-                    //ddbind.title = rspUserInfo.Result.Title;
-                    //ddbind.deptIdList = rspUserInfo.Result.DeptIdList;
-
-                    return Ok(new { state = 200,userInfo= userGetResponseDomain });
-                }
-                else
+
+                if (!string.IsNullOrEmpty($"{userIds}"))
                 {
-                    return Ok(new { state = 2,message="访问失败!" });
+                    List<string> str_userids = userIds.ToObject<List<string>>();
+                    foreach (var tempid in str_userids)
+                    {
+                        OapiV2UserGetRequest reqUserInfo = new OapiV2UserGetRequest() { Userid = $"{tempid}", Language = "zh_CN" };                        
+                        OapiV2UserGetResponse rspUserInfo = userInfoClient.Execute(reqUserInfo, access_token);
+                        if (rspUserInfo.Result != null)
+                        {
+                            var DDbind = rspUserInfo.Result;
+
+                            List<DeptOrderDomain> deptOrderDomain_List = new List<DeptOrderDomain>();
+                            if (DDbind.DeptOrderList != null)
+                            {
+                                foreach (var temp in DDbind.DeptOrderList)
+                                {
+                                    DeptOrderDomain deptOrderDomain = new DeptOrderDomain();
+                                    deptOrderDomain.deptId = temp.DeptId;
+                                    deptOrderDomain.order = temp.Order;
+                                    deptOrderDomain_List.Add(deptOrderDomain);
+                                }
+                            }
+                            List<DeptPositionDomain> deptPositionDomain_List = new List<DeptPositionDomain>();
+                            if (DDbind.DeptPositionList != null)
+                            {
+                                foreach (var temp in DDbind.DeptPositionList)
+                                {
+                                    DeptPositionDomain deptPositionDomain = new DeptPositionDomain();
+                                    deptPositionDomain.deptId = temp.DeptId;
+                                    deptPositionDomain.isMain = temp.IsMain;
+                                    deptPositionDomain.title = temp.Title;
+                                    deptPositionDomain.workPlace = temp.WorkPlace;
+                                    deptPositionDomain_List.Add(deptPositionDomain);
+                                }
+                            }
+                            List<DeptLeaderDomain> deptLeaderDomain_List = new List<DeptLeaderDomain>();
+                            if (DDbind.LeaderInDept != null)
+                            {
+                                foreach (var temp in DDbind.LeaderInDept)
+                                {
+                                    DeptLeaderDomain deptLeaderDomain = new DeptLeaderDomain();
+                                    deptLeaderDomain.deptId = temp.DeptId;
+                                    deptLeaderDomain.leader = temp.Leader;
+                                    deptLeaderDomain_List.Add(deptLeaderDomain);
+                                }
+                            }
+                            List<UserRoleDomain> userRoleDomain_list = new List<UserRoleDomain>();
+                            if (DDbind.RoleList != null)
+                            {
+                                foreach (var temp in DDbind.RoleList)
+                                {
+                                    UserRoleDomain userRoleDomain = new UserRoleDomain();
+                                    userRoleDomain.groupName = temp.GroupName;
+                                    userRoleDomain.id = temp.Id;
+                                    userRoleDomain.name = temp.Name;
+                                    userRoleDomain_list.Add(userRoleDomain);
+                                }
+                            }
+                            UnionEmpExtDomain unionEmpExtDomain = new UnionEmpExtDomain();
+                            if (DDbind.UnionEmpExt != null)
+                            {
+                                unionEmpExtDomain.corpId = DDbind.UnionEmpExt.CorpId;
+                                List<UnionEmpMapVoDomain> unionEmpMapVoDomain_list = new List<UnionEmpMapVoDomain>();
+                                if (DDbind.UnionEmpExt.UnionEmpMapList != null)
+                                {
+                                    foreach (var temp in DDbind.UnionEmpExt.UnionEmpMapList)
+                                    {
+                                        UnionEmpMapVoDomain unionEmpMapVoDomain = new UnionEmpMapVoDomain();
+                                        unionEmpMapVoDomain.corpId = temp.CorpId;
+                                        unionEmpMapVoDomain.userid = temp.Userid;
+                                        unionEmpMapVoDomain_list.Add(unionEmpMapVoDomain);
+                                    }
+                                }
+                                unionEmpExtDomain.unionEmpMapList = unionEmpMapVoDomain_list;
+                                unionEmpExtDomain.userid = DDbind.UnionEmpExt.Userid;
+                            }
+                            DingDingBind ddbind = new DingDingBind
+                            {
+                                type = type,
+                                active = DDbind.Active,
+                                admin = DDbind.Admin,
+                                avatar = DDbind.Avatar,
+                                boss = DDbind.Boss,
+                                deptIdList = DDbind.DeptIdList,
+                                deptOrderList = deptOrderDomain_List,//DDbind.DeptOrderList?.ToJsonString().ToObject<List<DeptOrderDomain>>(),
+                                deptPositionList = deptPositionDomain_List, //DDbind.DeptPositionList,
+                                jobNumber = DDbind.JobNumber,
+                                leaderInDept = deptLeaderDomain_List,//DDbind.LeaderInDept,
+                                managerUserid = DDbind.ManagerUserid,
+                                mobile = DDbind.Mobile,
+                                roleList = userRoleDomain_list,//DDbind.RoleList,
+                                senior = DDbind.Senior,
+                                title = DDbind.Title,
+                                unionEmpExt = unionEmpExtDomain,//DDbind.UnionEmpExt,
+                                name = DDbind.Name,
+                                unionid = DDbind.Unionid,
+                                userid = DDbind.Userid,
+                            };
+                            userInfos.Add(ddbind);
+                        }
+                        else return Ok(new { state = 2, message = "访问失败!" });
+                    }
                 }
+
+                return Ok(new { state = 200, userInfos = userInfos });
             }
             catch (Exception ex)
             {
@@ -383,8 +460,6 @@ namespace TEAMModeBI.Controllers.DingDingStruc
             }
         }
 
-
-
         public record DeptInfo 
         {
             /// <summary>

+ 2 - 119
TEAMModeBI/Controllers/LoginController.cs

@@ -270,7 +270,7 @@ namespace TEAMModeBI.Controllers
                 DingDingbinds dingDingBind = new DingDingbinds
                 {
                     type = type,
-                    active = DDbind.Avatar,
+                    active = DDbind.Active,
                     admin = DDbind.Admin,
                     avatar = DDbind.Avatar,
                     boss = DDbind.Boss,
@@ -969,7 +969,7 @@ namespace TEAMModeBI.Controllers
             /// <summary>
             /// 是否激活
             /// </summary>
-            public string active { get; set; }
+            public bool active { get; set; }
 
             /// <summary>
             /// 是否管理员
@@ -1058,123 +1058,6 @@ namespace TEAMModeBI.Controllers
             public string userid { get; set; }
         }
 
-
-        /// <summary>
-        /// 员工在对应的部门中的排序的数据结构
-        /// </summary>
-        //public record DeptOrderDomain
-        //{
-        //    /// <summary>
-        //    /// 部门id
-        //    /// </summary>
-        //    public long deptId { get; set; }
-
-        //    /// <summary>
-        //    /// 员工在部门中的排序。
-        //    /// </summary>
-        //    public long order { get; set; }
-        //}
-
-        ///// <summary>
-        ///// 任职信息数据结构
-        ///// </summary>
-        //public record DeptPositionDomain
-        //{
-        //    /// <summary>
-        //    /// 部门ID
-        //    /// </summary>
-        //    public long deptId { get; set; }
-
-        //    /// <summary>
-        //    /// 是否是主任职
-        //    /// </summary>
-        //    public bool isMain { get; set; }
-
-        //    /// <summary>
-        //    /// 部门内职位
-        //    /// </summary>
-        //    public string title { get; set; }
-
-        //    /// <summary>
-        //    /// 部门内工作地
-        //    /// </summary>
-        //    public string workPlace { get; set; }
-        //}
-
-        ///// <summary>
-        ///// 员工在对应的部门中是否领导 数据结构
-        ///// </summary>
-        //public record DeptLeaderDomain
-        //{
-        //    /// <summary>
-        //    /// 部门id
-        //    /// </summary>
-        //    public long deptId { get; set; }
-
-        //    /// <summary>
-        //    /// 是否领导
-        //    /// </summary>
-        //    public bool leader { get; set; }
-        //}
-
-        ///// <summary>
-        ///// 角色列表 数据结构
-        ///// </summary>
-        //public record UserRoleDomain
-        //{
-        //    /// <summary>
-        //    /// 角色组名称
-        //    /// </summary>
-        //    public string groupName { get; set; }
-
-        //    /// <summary>
-        //    /// 角色id
-        //    /// </summary>
-        //    public long id { get; set; }
-
-        //    /// <summary>
-        //    /// 角色名称
-        //    /// </summary>
-        //    public string name { get; set; }
-        //}
-
-        ///// <summary>
-        ///// 关联信息 数据结构
-        ///// </summary>
-        //public record UnionEmpExtDomain
-        //{
-        //    /// <summary>
-        //    /// 企业ID
-        //    /// </summary>
-        //    public string corpId { get; set; }
-
-        //    /// <summary>
-        //    /// 关联映射关系
-        //    /// </summary>
-        //    public List<UnionEmpMapVoDomain> unionEmpMapList { get; set; }
-
-        //    /// <summary>
-        //    /// 员工id
-        //    /// </summary>
-        //    public string userid { get; set; }
-        //}
-
-        ///// <summary>
-        ///// 关联映射关系
-        ///// </summary>
-        //public record UnionEmpMapVoDomain
-        //{
-        //    /// <summary>
-        //    /// 企业id
-        //    /// </summary>
-        //    public string corpId { get; set; }
-
-        //    /// <summary>
-        //    /// 用户id
-        //    /// </summary>
-        //    public string userid { get; set; }
-        //}
-
         public record TmdidImplicit
         {
             public string id_token { get; set; }

+ 1 - 1
TEAMModelOS.SDK/Models/Cosmos/Teacher/Teacher.cs

@@ -58,7 +58,7 @@ namespace TEAMModelOS.SDK.Models
             /// <summary>
             /// 是否激活
             /// </summary>
-            public string active { get; set; }
+            public bool active { get; set; }
 
             /// <summary>
             /// 是否管理员