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); }
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(); }
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); }
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)); })); }
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); }
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); }
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)); }