Пример #1
0
        public GetTagMemberResult WX_GetTagMember(int tagid)
        {
            GetTagMemberResult Ret = new GetTagMemberResult();

            if (Qyinfo.IsUseWX == "Y")
            {
                Ret = MailListApi.GetTagMember(GetToken(), tagid);
            }
            return(Ret);
        }
        public ActionResult GetNewUserList(string tagname, string clientId)
        {
            if (!VerifyNewParam("tagname", clientId, _signCheckService))
            {
                return(ErrMsg());
            }
            GetTagMemberResult tagMemberResult = new GetTagMemberResult();
            var strToken = GetToken();
            var tag      = WeChatCommonService.lstTag.FirstOrDefault(x => x.tagname == tagname);
            int tagid    = tag != null?Convert.ToInt32(tag.tagid) : 0;


            if (tagid != 0)
            {
                tagMemberResult = MailListApi.GetTagMember(strToken, tagid);
            }

            if (tagMemberResult != null && tagMemberResult.userlist != null)
            {
                var ids = tagMemberResult.userlist.Select(x => x.userid).ToList();

                var userInfo = WeChatCommonService.lstUser.Where(x => ids.Any(y => x.userid == y)).Select(x => new
                {
                    userid = x.userid,
                    name   = x.name,
                    avatar = x.avatar,
                    status = x.status,
                    email  = x.email
                }).ToList();

                var strJson1 = Newtonsoft.Json.JsonConvert.SerializeObject(new
                {
                    message = "",
                    success = true,
                    item    = new
                    {
                        userInfo
                    }
                });
                return(Content(strJson1, "application/json"));
            }
            else
            {
                return(Json(new
                {
                    message = "标签不存在或者标签中无成员!",
                    success = false
                }, JsonRequestBehavior.AllowGet));
            }
        }
        public ActionResult GetUserList(string clientid, string tagname)
        {
            if (!string.IsNullOrEmpty(clientid))
            {
                var clientUrl = _clientDataService.Repository.Entities.Where(x => x.ClientId == clientid && x.ClientName == tagname).Select(x => x.ClientCallBackUrl).FirstOrDefault();

                if (string.IsNullOrEmpty(clientUrl))
                {
                    throw new ArgumentException(@"clientid 不正确!", clientid);
                }
            }
            GetTagMemberResult tagMemberResult = new GetTagMemberResult();
            var strToken = GetToken();
            var taglist  = WeChatCommonService.lstTag.Where(x => x.tagname == tagname);
            int tagid    = taglist.FirstOrDefault() != null?Convert.ToInt32(taglist.FirstOrDefault().tagid) : 0;


            if (tagid != 0)
            {
                tagMemberResult = MailListApi.GetTagMember(strToken, tagid);
            }

            if (tagMemberResult != null)
            {
                var strJson = Newtonsoft.Json.JsonConvert.SerializeObject(new
                {
                    message = "",
                    success = true,
                    item    = new
                    {
                        tagMemberResult.userlist
                    }
                });

                return(Content(strJson, "application/json"));
            }
            else
            {
                return(Json(new
                {
                    message = "标签不存在!",
                    success = false
                }, JsonRequestBehavior.AllowGet));
            }
        }
Пример #4
0
        /// <summary>
        /// 更新标签
        /// </summary>
        /// <param name="QyID"></param>
        private void ReFreshTag(string QyID)
        {
            GetTagListResult result = null;

            try
            {
                result = MailListApi.GetTagList(GetAccessToken(QyID));
            }
            catch (Exception ex)
            {
                LogWriter.Error(ex, string.Format("获取QyID为{0}的标签失败", QyID));
                result = MailListApi.GetTagList(GetAccessToken(QyID, true));
            }
            if (result.errcode != ReturnCode_QY.请求成功)
            {
                LogWriter.Info(string.Format("获取QyID为{0}的标签失败,原因:{1}", QyID, result.errmsg));
                throw new Exception(string.Format("获取QyID为{0}的标签失败,原因:{1}", QyID, result.errmsg));
            }
            var oldtags = entities.Set <QyTags>().Where(c => c.QyID == QyID).ToList();
            var users   = entities.Set <QyUser>().Where(c => c.QyID == QyID).ToList();
            var departs = entities.Set <QyDepart>().Where(c => c.QyID == QyID).ToList();

            for (int i = 0; i < users.Count(); i++)
            {
                users[i].TagIDs = "";
            }
            for (int i = 0; i < departs.Count(); i++)
            {
                departs[i].TagIDs = "";
            }
            //新增
            foreach (var add in result.taglist.Where(c => !oldtags.Select(d => d.TagID).Contains(c.tagid)))
            {
                QyTags qt = new QyTags();
                qt.ID    = FormulaHelper.CreateGuid();
                qt.QyID  = QyID;
                qt.TagID = add.tagid;
                qt.Name  = add.tagname;
                entities.Set <QyTags>().Add(qt);

                GetTagMemberResult addresult = null;
                try
                {
                    addresult = MailListApi.GetTagMember(GetAccessToken(QyID), int.Parse(add.tagid));
                }
                catch (Exception ex)
                {
                    LogWriter.Error(ex, string.Format("获取QyID为{0}的标签成员失败", QyID));
                    addresult = MailListApi.GetTagMember(GetAccessToken(QyID, true), int.Parse(add.tagid));
                }
                if (addresult.errcode != ReturnCode_QY.请求成功)
                {
                    LogWriter.Info(string.Format("获取QyID为{0}的标签成员失败,原因:{1}", QyID, result.errmsg));
                    throw new Exception(string.Format("获取QyID为{0}的标签成员失败,原因:{1}", QyID, result.errmsg));
                }
                if (addresult.userlist != null)
                {
                    var tagusers = users.Where(c => addresult.userlist.Select(d => d.userid).Contains(c.UserID)).ToList();
                    for (int i = 0; i < tagusers.Count(); i++)
                    {
                        tagusers[i].TagIDs += tagusers[i].TagIDs == "" ? qt.ID : ("," + qt.ID);
                    }
                }
                if (addresult.partylist != null)
                {
                    var tagdeparts = departs.Where(c => addresult.partylist.Contains(c.DepartID.Value)).ToList();
                    for (int i = 0; i < tagdeparts.Count(); i++)
                    {
                        tagdeparts[i].TagIDs += tagdeparts[i].TagIDs == "" ? qt.ID : ("," + qt.ID);
                    }
                }
            }
            //修改
            foreach (var update in oldtags.Where(c => result.taglist.Select(d => d.tagid).Contains(c.TagID)))
            {
                var item = result.taglist.Where(c => c.tagid == update.TagID).FirstOrDefault();
                update.TagID = item.tagid;
                update.Name  = item.tagname;


                GetTagMemberResult updateresult = null;
                try
                {
                    updateresult = MailListApi.GetTagMember(GetAccessToken(QyID), int.Parse(item.tagid));
                }
                catch (Exception ex)
                {
                    LogWriter.Error(ex, string.Format("获取QyID为{0}的标签成员失败", QyID));
                    updateresult = MailListApi.GetTagMember(GetAccessToken(QyID, true), int.Parse(item.tagid));
                }
                if (updateresult.errcode != ReturnCode_QY.请求成功)
                {
                    LogWriter.Info(string.Format("获取QyID为{0}的标签成员失败,原因:{1}", QyID, result.errmsg));
                    throw new Exception(string.Format("获取QyID为{0}的标签成员失败,原因:{1}", QyID, result.errmsg));
                }
                if (updateresult.userlist != null)
                {
                    var tagusers = users.Where(c => updateresult.userlist.Select(d => d.userid).Contains(c.UserID)).ToList();
                    for (int i = 0; i < tagusers.Count(); i++)
                    {
                        tagusers[i].TagIDs += tagusers[i].TagIDs == "" ? update.ID : ("," + update.ID);
                    }
                }
                if (updateresult.partylist != null)
                {
                    var tagdeparts = departs.Where(c => updateresult.partylist.Contains(c.DepartID.Value)).ToList();
                    for (int i = 0; i < tagdeparts.Count(); i++)
                    {
                        tagdeparts[i].TagIDs += tagdeparts[i].TagIDs == "" ? update.ID : ("," + update.ID);
                    }
                }
            }
            //删除
            foreach (var delete in oldtags.Where(c => !result.taglist.Select(d => d.tagid).Contains(c.TagID)))
            {
                var relateusers = entities.Set <QyUser>().Where(c => c.TagIDs.Contains(delete.ID)).ToList();
                for (int i = 0; i < relateusers.Count(); i++)
                {
                    var oldchildtags = relateusers[i].TagIDs.Split(',').ToList();
                    oldchildtags.Remove(delete.ID);
                    relateusers[i].TagIDs = string.Join(",", oldchildtags);
                }
                entities.Set <QyTags>().Remove(delete);
            }
            entities.SaveChanges();
        }
Пример #5
0
        /// <summary>
        /// Get the wechat users and save to database.
        /// </summary>
        /// <returns></returns>
        public static bool GetWechatUserToDB()
        {
            string        token   = AccessTokenContainer.TryGetToken(corpID, corpSecret);
            WechatContext context = new WechatContext();

            //todo: 清空现有用户数据

            //获取微信企业号内的用户架构信息
            Dictionary <string, List <Tag> > _userTags  = new Dictionary <string, List <Tag> >();
            Dictionary <int, List <Tag> >    _partyTags = new Dictionary <int, List <Tag> >();

            Dictionary <string, User> Users = new Dictionary <string, User>();

            //查找所有Tag并插入数据库
            GetTagListResult tagList = MailListApi.GetTagList(token);

            if (tagList != null && tagList.taglist != null && tagList.taglist.Count > 0)
            {
                foreach (var tag in tagList.taglist)
                {
                    int tagId = -1;
                    if (Int32.TryParse(tag.tagid, out tagId))
                    {
                        Tag tempTag = new Tag()
                        {
                            TagId = tagId, TagName = tag.tagname
                        };

                        GetTagMemberResult tagMemberResult = MailListApi.GetTagMember(token, tagId);
                        if (tagMemberResult != null && tagMemberResult.partylist != null && tagMemberResult.partylist.Length > 0)
                        {
                            foreach (int party in tagMemberResult.partylist)
                            {
                                if (!_partyTags.ContainsKey(party))
                                {
                                    _partyTags[party] = new List <Tag>();
                                }

                                _partyTags[party].Add(tempTag);
                            }
                        }

                        if (tagMemberResult != null && tagMemberResult.userlist != null && tagMemberResult.userlist.Count > 0)
                        {
                            foreach (var tagUser in tagMemberResult.userlist)
                            {
                                if (!_userTags.ContainsKey(tagUser.userid))
                                {
                                    _userTags[tagUser.userid] = new List <Tag>();
                                }

                                _userTags[tagUser.userid].Add(tempTag);
                            }
                        }

                        context.Tags.Add(tempTag);
                    }
                }
                context.SaveChanges();
            }

            //查找所有部门并插入数据库
            GetDepartmentListResult departmentList = MailListApi.GetDepartmentList(token);

            if (departmentList != null && departmentList.department != null)
            {
                foreach (var party in departmentList.department)
                {
                    var tempParty = new Party()
                    {
                        PartyId = party.id, Name = party.name, Order = party.order, ParentPartyId = party.parentid
                    };

                    //此处需要查询所有的Tag保存到库中
                    if (_partyTags.ContainsKey(party.id))
                    {
                        tempParty.PartyTags = _partyTags[party.id].Select(f => new PartyTag()
                        {
                            PartyId = tempParty.PartyId, TagId = f.TagId
                        }).ToList();
                    }

                    //根据部门查找所有用户并存入缓存
                    GetDepartmentMemberInfoResult memberInfos = MailListApi.GetDepartmentMemberInfo(token, party.id, 1, 0);
                    if (memberInfos != null && memberInfos.userlist != null && memberInfos.userlist.Count > 0)
                    {
                        foreach (var member in memberInfos.userlist)
                        {
                            if (!Users.ContainsKey(member.userid))
                            {
                                Users[member.userid] = new User()
                                {
                                    Avatar   = member.avatar,
                                    Email    = member.email,
                                    Gender   = member.gender,
                                    Mobile   = member.mobile,
                                    Name     = member.name,
                                    Position = member.position,
                                    Status   = member.status,
                                    UserId   = member.userid,
                                    Weixinid = member.weixinid,
                                    UserTags = (_userTags.ContainsKey(member.userid) && _userTags[member.userid].Count > 0) ? _userTags[member.userid].Select(f => new UserTag()
                                    {
                                        UserId = member.userid, TagId = f.TagId
                                    }).ToList() : null
                                };
                            }
                            Users[member.userid].UserPartys.Add(new UserParty()
                            {
                                PartyId = tempParty.PartyId, UserId = member.userid
                            });
                        }
                    }

                    context.Partys.Add(tempParty);
                }
                context.SaveChanges();
            }

            if (Users != null && Users.Count > 0)
            {
                foreach (var user in  Users.Values)
                {
                    context.Users.Add(user);
                }

                context.SaveChanges();
            }

            return(true);
        }