private bool CheckTag(GetAppInfoResult appInfo, int AccountMangageID, IList <int> selectedTagIds, IEnumerable <string> allAssignedUsers, CheckResult checkResult)
        {
            if (!selectedTagIds.Any())
            {
                return(true);
            }

            var needTags = selectedTagIds.Select(selectedTagId => new TagEntity {
                TagId = selectedTagId, TagMember = WeChatCommonService.GetTagMembers(selectedTagId, int.Parse(appInfo.agentid))
            }).ToList();

            //needTags.Select(x => new { TagId = x.Key, TagMember = x.Value }).ToList();

            var needUsers = needTags.SelectMany(x => x.TagMember.userlist.Select(y => y.userid)).ToList();

            var needParties = WeChatCommonService.GetSubDepartments(needTags.SelectMany(x => x.TagMember.partylist).ToList(), AccountMangageID).ToList();

            needUsers.AddRange(WeChatCommonService.lstUser(AccountMangageID).Where(x => needParties.Any(y => x.department.Any(z => z == y.id))).Select(x => x.userid).ToList());

            var errorUsers = needUsers.Where(x => allAssignedUsers.Any(y => x == y)).ToList();

            var errorTags = needTags.Where(x => errorUsers.Any(y => x.TagMember.userlist.Any(z => z.userid == y))).Select(x => x.TagId).ToList();

            if (!errorTags.Any())
            {
                return(true);
            }

            checkResult.ErrorTags = GetErrorTags(errorTags, AccountMangageID);
            return(false);
        }
Ejemplo n.º 2
0
        public ConfigedInfo(GetAppInfoResult appInfo)
        {
            Dictionary    = new Dictionary <int, GetTagMemberResult>();
            AppInfoResult = appInfo;

            AssignedDepartmentIds = (appInfo.allow_partys == null || appInfo.allow_partys.partyid == null || !appInfo.allow_partys.partyid.Any()) ? new List <int>() : appInfo.allow_partys.partyid.ToList();

            AssignedUserIds = (appInfo.allow_userinfos == null || appInfo.allow_userinfos.user == null || !appInfo.allow_userinfos.user.Any()) ? new List <string>() : appInfo.allow_userinfos.user.Select(x => x.userid).ToList();

            //append depart and user of tag
            var tagIds = (appInfo.allow_tags == null || appInfo.allow_tags.tagid == null || !appInfo.allow_tags.tagid.Any()) ? new List <int>() : appInfo.allow_tags.tagid.ToList();

            foreach (var tagId in tagIds)
            {
                var memberResult = WeChatCommonService.GetTagMembers(tagId, int.Parse(appInfo.agentid));

                AssignedDepartmentIds.AddRange(memberResult.partylist);

                AssignedUserIds.AddRange(memberResult.userlist.Select(x => x.userid).ToList());

                Dictionary.Add(tagId, memberResult);
            }

            var subDepartments = WeChatCommonService.GetSubDepartments(AssignedDepartmentIds.Distinct().ToList()).ToList();

            AssignedUserIds.AddRange(WeChatCommonService.lstUser.Where(x => x.department.Any(y => subDepartments.Any(d => d.id == y))).Select(x => x.userid).ToList());

            AssignedUserIds = AssignedUserIds.Distinct().ToList();
        }
Ejemplo n.º 3
0
        public JsonResult GetSubDepartment(string id, string departlist)
        {
            //从缓存中读取DepartmentList
            var Id = 0;

            if (!string.IsNullOrEmpty(id))
            {
                Id = int.Parse(id);
            }
            var subdepartList = WeChatCommonService.GetSubDepartments(Id).ToList();
            var listReturn    = EasyUITreeData.GetTreeData(subdepartList, "id", "name", "parentid");

            listReturn.ForEach(a =>
            {
                a.state = "closed";
            });

            if (!string.IsNullOrEmpty(departlist))
            {
                var departids = departlist.Split('|');
                EasyUITreeData.SetChecked <string>(departids.ToList(), listReturn);
            }

            return(Json(listReturn, JsonRequestBehavior.AllowGet));
        }
        private bool CheckDepartment(GetAppInfoResult appInfo, IList <int> selectedDepartmentIds, CheckResult checkResult, int AccountMangageID)
        {
            //直接分配给应用
            var assignedDepartmentIds = appInfo.allow_partys.partyid.ToList();

            var underTagDepartmentIDs = tagMemberdDictionary.Select(x => x.Value).SelectMany(x => x.partylist).ToList();

            assignedDepartmentIds.AddRange(underTagDepartmentIDs);

            //TODO:调整
            if (!assignedDepartmentIds.Any())
            {
                if (!selectedDepartmentIds.Any())
                {
                    return(true);
                }

                checkResult.ErrorDepartments = GetErrorDepartments(selectedDepartmentIds, AccountMangageID);

                return(false);
            }

            var departments = WeChatCommonService.GetSubDepartments(assignedDepartmentIds.Distinct().ToList(), AccountMangageID).ToList();

            #region hiddlen
            //var allowUsers = WeChatCommonService.lstUser.Where(x => x.department.Any(y => departments.Any(z => z.id == y))).ToList();

            //var needUsers = WeChatCommonService.lstUser.Where(x => x.department.Any(y => selectedDepartmentIds.Any(s => s == y))).ToList();

            //var errorUsers = needUsers.Where(x => allowUsers.All(u => x.userid != u.userid)).ToList();

            //if (!errorUsers.Any())
            //{
            //    return true;
            //}

            //var errorDepartments = WeChatCommonService.lstDepartment.Where(x => errorUsers.SelectMany(y => y.department).Any(z => z == x.id)).ToList();

            //var errorDepartmentIds = selectedDepartmentIds.Where(x => WeChatCommonService.GetSubDepartments(x).Any(y => errorDepartments.Any(z => z.id == y.id))).ToList();

            //if (!errorDepartmentIds.Any()) return true;
            #endregion

            var errorDepartmentIds = selectedDepartmentIds.Where(x => departments.All(y => x != y.id)).ToList();

            if (!errorDepartmentIds.Any())
            {
                return(true);
            }

            checkResult.ErrorDepartments = GetErrorDepartments(errorDepartmentIds, AccountMangageID);

            return(false);
        }
Ejemplo n.º 5
0
        public void GetSubDepartments()
        {
            var appInfo = WeChatCommonService.GetAppInfo(14);

            if (!appInfo.allow_partys.partyid.Any())
            {
                return;
            }

            var departments = WeChatCommonService.GetSubDepartments(appInfo.allow_partys.partyid);

            Assert.IsTrue(departments.Count() == 5);
        }
        private static bool FindTargetMember(IEnumerable <int> tagIds, string userId, int appId)
        {
            log.Debug("current user id:{0}", userId);
            var user = WeChatCommonService.lstUser.First(x => x.userid.Equals(userId, StringComparison.InvariantCultureIgnoreCase));

            return(tagIds.Any(tagId =>
            {
                var tagMembers = GetTagMembers(tagId, appId);
                //log.Debug("members under current tag id:{0}", tagId);
                //tagMembers.ForEach(m => log.Debug("member id:{0},name:{1}", m.userid, m.name));
                var subDepartments = WeChatCommonService.GetSubDepartments(tagMembers.partylist);
                return tagMembers.userlist.Any(x => x.userid.Equals(userId, StringComparison.InvariantCultureIgnoreCase)) || subDepartments.Any(y => user.department.Any(d => y.id == d));
            }));
        }
Ejemplo n.º 7
0
        public Result <CheckResult> Verify(ConfigedInfo appInfo, TargetInfoObject targetInfo, Result <CheckResult> result)
        {
            base.Init(result);

            if (targetInfo.Departments == null || !targetInfo.Departments.Any())
            {
                if (result.Status == 0)
                {
                    result.Status = 200;
                }
                result.Data.Success.ToDepartments = new List <Desc>();
                return(result);
            }

            if (!appInfo.AssignedDepartmentIds.Any())
            {
                result.Status = 99;
                result.Data.Error.ErrorDepartments = targetInfo.Departments.ConvertDepartmentIdToObject();
                return(result);
            }

            var allAssignedDepartments = WeChatCommonService.GetSubDepartments(appInfo.AssignedDepartmentIds);

            var errorDepartments = targetInfo.Departments.Where(depart => allAssignedDepartments.All(x => x.id != depart)).ToList();

            if (errorDepartments.Any())
            {
                result.Status = 99;
            }
            else
            {
                if (result.Status == 0)
                {
                    result.Status = 200;
                }

                result.Data.Success.ToDepartments = targetInfo.Departments.ConvertDepartmentIdToObject();
                return(result);
            }

            var successDepartments = targetInfo.Departments.Where(x => errorDepartments.All(y => x != y)).ToList();

            result.Data.Error.ErrorDepartments = errorDepartments.ConvertDepartmentIdToObject();

            result.Data.Success.ToDepartments = successDepartments.ConvertDepartmentIdToObject();

            return(result);
        }
Ejemplo n.º 8
0
        protected virtual void HandlerResult(Result <CheckResult> result, ConfigedInfo appInfo, object entity)
        {
            if (result.Status == 200)
            {
                return;
            }

            var errorDepartments = new List <Desc>();
            var errorTags        = new List <Desc>();

            var targetInfo = (TargetInfoObject)entity;

            var selectedDepartmentIds = targetInfo.Departments;

            //1. find out department from error departments ,that does not select
            //2.
            var errorInfo = result.Data.Error;

            #region
            if (errorInfo.ErrorDepartments != null && errorInfo.ErrorDepartments.Any())
            {
                var errorDepartmentIdsUnderSelected = selectedDepartmentIds.Where(x =>
                {
                    var subDepartments = WeChatCommonService.GetSubDepartments(x);
                    return(subDepartments.Any(y => errorInfo.ErrorDepartments.Any(z => y.id == z.Id)));
                });

                errorDepartments.AddRange(errorDepartmentIdsUnderSelected.ConvertDepartmentIdToObject());

                var errorTagsFromDepartment = targetInfo.Tags.Where(tag =>
                {
                    var departmentsUnderSelectedTag = appInfo.Dictionary[tag].partylist;

                    if (errorInfo.ErrorDepartments.Any(x => WeChatCommonService.GetSubDepartments(departmentsUnderSelectedTag).Any(y => x.Id == y.id)))
                    {
                        return(true);
                    }
                    return(false);
                }).ToList();

                errorTags.AddRange(errorTagsFromDepartment.ConvertTagIdToObject());
            }
            #endregion
        }
        private bool CheckVisualRange(int AccountMangageID, GetAppInfoResult appInfo, out IList <string> allAssignedUsers, Action func = null)
        {
            allAssignedUsers = null;

            var isConfig = appInfo.allow_partys.partyid.Any() || appInfo.allow_tags.tagid.Any() || appInfo.allow_userinfos.user.Any();

            if (!isConfig)
            {
                return(false);
            }

            if (func != null)
            {
                func();
            }

            //TODO:获取直接配置的用户信息
            var assignedUsers = appInfo.allow_userinfos.user.Select(x => x.userid).ToList();

            var departments = appInfo.allow_partys.partyid.ToList();

            foreach (var tagInfo in tagMemberdDictionary.Values)
            {
                //user under tag
                assignedUsers.AddRange(tagInfo.userlist.Select(x => x.userid).ToList());

                departments.AddRange(tagInfo.partylist);
            }

            var subDepartments = WeChatCommonService.GetSubDepartments(departments.Distinct().ToList(), AccountMangageID).ToList();

            //TODO:获取部门下的人
            assignedUsers.AddRange(WeChatCommonService.lstUser(AccountMangageID).Where(x => x.department.Any(y => subDepartments.Any(d => d.id == y))).Select(x => x.userid).ToList());

            allAssignedUsers = assignedUsers.Distinct().ToList();

            return(true);
        }
Ejemplo n.º 10
0
        public ActionResult GetUserInfo()
        {
            string accessToken = GetToken();
            var    tags        = MailListApi.GetTagList(accessToken).taglist;
            var    empDetails  = MailListApi.GetDepartmentMemberInfo(accessToken, 1, 1, 0);

            // 更新这些人的tag为N
            foreach (var e in empDetails.userlist)
            {
                e.tags = new Dictionary <string, string>();
                foreach (var t in tags)
                {
                    e.tags[t.tagid] = "N";
                }
            }

            // 获取部门列表
            var departments = MailListApi.GetDepartmentList(accessToken);

            // 处理部门关系,暂定只有5层
            foreach (var dept in departments.department)
            {
                int level    = 1;
                int parentId = dept.parentid;
                while (parentId != 0)
                {
                    var parentDept = departments.department.Where(t => t.id == parentId).FirstOrDefault();
                    if (parentDept != null)
                    {
                        level++;
                        parentId = parentDept.parentid;
                    }
                }
                dept.level = level;
            }

            // 更新员工信息,把部门的名称填入
            foreach (var emp in empDetails.userlist)
            {
                // 如果有多个部门的话,只列出其中一个部门。
                if (emp.department.Count() >= 1)
                {
                    var dept = departments.department.Where(t => t.id == emp.department[0]).FirstOrDefault();
                    if (dept != null)
                    {
                        int level = dept.level;
                        while (level > 1)
                        {
                            emp.deptLvs[level] = dept.name;
                            dept = departments.department.Where(t => t.id == dept.parentid).FirstOrDefault();
                            level--;
                        }
                    }
                    if (emp.department.Count() > 1)
                    {
                        emp.name += "*";
                    }
                }
            }


            // 获取每个标签里的人
            foreach (var tagitem in tags)
            {
                var tagInfo  = MailListApi.GetTagMember(accessToken, int.Parse(tagitem.tagid));
                var tagUsers = tagInfo.userlist;
                //tagInfo.partylist;
                var departList = WeChatCommonService.GetSubDepartments(tagInfo.partylist).ToList();

                foreach (var u in tagUsers)
                {
                    var employee = empDetails.userlist.FirstOrDefault(a => a.userid == u.userid);
                    if (employee != null)
                    {
                        employee.tags[tagitem.tagid] = "Y";
                    }
                }


                // var u1 = u;
                var usersUnderCurrentDepartment =
                    WeChatCommonService.lstUserWithDeptTag.AsParallel()
                    .Where(x => x.department.Any(y => departList.Any(id => id.id == y))).Select(x => x.userid).ToList();

                var tagitem1 = tagitem;
                //var user = empDetails.userlist.AsParallel()
                //     .FirstOrDefault(x => x.tags[tagitem1.tagid] == "N" && usersUnderCurrentDepartment.Any(y => y == x.userid));
                //if (user != null)
                //{
                //    user.tags[tagitem.tagid] = "Y";
                //}

                Parallel.ForEach(empDetails.userlist, userItem =>
                {
                    if (userItem.tags[tagitem1.tagid] == "N" && usersUnderCurrentDepartment.Any(y => y == userItem.userid))
                    {
                        userItem.tags[tagitem1.tagid] = "Y";
                    }
                });
                //if (userWithDept != null)
                //{
                //    if (userWithDept.department.Any(x => departList.Any(y => x == y.id)))
                //    {
                //        // employee.tags[tagitem.tagid] = "Y";
                //    }
                //}
            }

            return(ExportToCSV(empDetails.userlist, tags));
        }