Exemple #1
0
        /// <summary>
        /// 获取当前钉钉用户信息
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="corpId"></param>
        /// <param name="corpSecret"></param>
        /// <returns></returns>
        public async Task <DingDingUser> GetCurrentDDUserInfoAsync(string userId)
        {
            DingDingUser user = null;

            if (!string.IsNullOrEmpty(userId))
            {
                var token = await GetAccessTokenAsync();

                var userInfo = await GetUserInfoAsync(token, userId);

                if (userInfo != null)
                {
                    var depart = await GetDepartmentInfoByIdAsync(token, userInfo.department?.First());

                    user = new DingDingUser
                    {
                        UserId      = userInfo.userid,
                        Email       = userInfo.email,
                        UserName    = userInfo.name,
                        Departments = new[] { depart?.Name },
                        DepartIds   = new[] { depart?.Id.ToString() },
                    };
                }
            }

            return(user);
        }
        private async Task <DingDingUser> GetCurrentDDUserInfoAsync(string userId)
        {
            DingDingUser user = null;

            if (!string.IsNullOrEmpty(userId))
            {
                var key       = $"dduser_{userId}";
                var keyValues = await _redis.HMGetAsync(key, DingDingUser.GetFields());

                user = keyValues.GetUserInfoFromDictionary();
                if (string.IsNullOrWhiteSpace(user?.UserId) || string.IsNullOrWhiteSpace(user?.UserName))
                {
                    user = await _ddHelper.GetCurrentDDUserInfoAsync(userId);

                    if (user != null)
                    {
                        await _redis.HMSetAsync(key, user.ToKeyValues());
                    }
                }
            }
            return(user);
        }
        private List <long> GetCurrentDDUserDepartIds(DingDingUser ddUser, long?parentId = null)
        {
            var result = new List <long>();

            if (ddUser != null)
            {
                var departments =  // parentId.HasValue ? _departService.Find(d => d.Id == parentId.Value) :
                                  _departService.Find(o => ddUser.Departments.Any(d => d == o.DepartName));
                if (departments != null)
                {
                    result.AddRange(departments.Select(o => o.Id).ToList());
                    //foreach (var department in departments)
                    //{
                    //    if (department.ParentId != null)
                    //    {
                    //        result.AddRange(GetCurrentDDUserDepartIds(ddUser, department.ParentId));
                    //    }
                    //}
                }
            }
            return(result);
        }
 public void SetCurrentDingDingUser(DingDingUser user)
 {
     _ddUser = user;
 }