Exemple #1
0
        private string GetDepartment(int id)
        {
            if (ConfigGlobal.WeChatActive && id > 0)
            {
                var client = new WeChatUserClient();

                var result = client.GetDepartmentList(id);

                // { "errcode": 0, "errmsg": "ok", "department": [ { "id": 2, "name": "广州研发中心", "parentid": 1, "order": 10 },
                //{ "id": 3, "name": "邮箱产品部",  "parentid": 2, "order": 40 } ]}

                if (!string.IsNullOrEmpty(result))
                {
                    var json = JToken.Parse(result);

                    if (json["errcode"] != null && json["errmsg"] != null &&
                        json["errcode"].Value <int>() == 0 && json["errmsg"].Value <string>() == "ok" &&
                        json["department"] != null)
                    {
                        var departments = json["department"].Value <JArray>();

                        if (departments != null && departments.Count > 0)
                        {
                            var d = departments.FirstOrDefault(x => x["id"].Value <int>() == id);

                            if (d != null)
                            {
                                return(d["name"].Value <string>());
                            }
                        }
                    }
                }
            }

            return(string.Empty);
        }
Exemple #2
0
        public User SyncUserWithWeChat(string userId, string deviceId = null)
        {
            // 调用Wechat接口,凭userid获取通讯录成员信息
            var client = new WeChatUserClient();
            var result = client.GetUser(userId);

            if (!string.IsNullOrEmpty(result))
            {
                var json = JToken.Parse(result);

                if (json["errcode"] != null && json["errmsg"] != null &&
                    json["errcode"].Value <int>() == 0 && json["errmsg"].Value <string>() == "ok")
                {
                    var user = new User
                    {
                        Password   = Encrypt.GetMd5Hash("shsict"),
                        Email      = string.Empty,
                        Role       = UserRoleEnum.Employee,
                        CreateDate = DateTime.Now,
                        IsActive   = true
                    };

                    var userWeChat = new UserWeChat();

                    // user: { "errcode":0,"errmsg":"ok","userid":"cyrano","name":"陈继麟","department":[17],"position":"技术工程师","mobile":"13818059707",
                    // "gender":"1","avatar":"http:\/\/shp.qpic.cn\/bizmp\/sfQa6NT594TUfQ42suia698Kz8KNY8eNmeogXYCNQicsaicnCMy5I1mfQ\/","status":1,"extattr":{"attrs":[]}}

                    // { "UserId":"xudanfu1015","DeviceId":"c90af29b945abf19b1a3cace63ac9d45"}
                    // user: { "errcode":0,"errmsg":"ok","userid":"xudanfu1015","name":"徐旦复","department":[34],"position":"系统开发主任","mobile":"13482045112",
                    // "gender":"1","avatar":"http:\/\/shp.qpic.cn\/bizmp\/sfQa6NT594Qm6CnIQicHUTLTDCib0QlmdrlfI3GIsLxknRhBYc7JFb2Q\/","status":1,
                    // "extattr":{"attrs":[{"name":"班组","value":"信息技术组"},{"name":"出生年月","value":"198509"},{"name":"政治面貌","value":"中共党员"},{"name":"工号","value":"1015"},{"name":"座机","value":""},{"name":"英文名","value":"xudanfu"}]}}

                    // 获得微信用户的扩展属性
                    var extattr = json["extattr"].Value <JToken>();
                    var attrs   = extattr?["attrs"].Value <JArray>();

                    var userdict = new Dictionary <string, string>();

                    if (attrs?.Count > 0)
                    {
                        foreach (var kvp in attrs)
                        {
                            userdict.Add(kvp["name"].Value <string>(), kvp["value"].Value <string>());
                        }
                    }

                    using (IDapperHelper dapper = DapperHelper.GetInstance())
                    {
                        var trans = dapper.BeginTransaction();

                        try
                        {
                            using (IRepository repo = new Repository())
                            {
                                // 通过userid,从数据库中获取对应用户
                                if (json["userid"] != null && repo.Any <User>(x => x.UserName == json["userid"].Value <string>()))
                                {
                                    user = repo.Single <User>(x => x.UserName == json["userid"].Value <string>());
                                }


                                #region 封装 User 实例

                                user.UserName     = json["userid"] != null ? json["userid"].Value <string>() : string.Empty;
                                user.EmployeeName = json["name"] != null ? json["name"].Value <string>() : string.Empty;
                                user.EmployeeNo   = userdict.ContainsKey("工号") && userdict["工号"] != null ? userdict["工号"] : string.Empty;

                                if (json["department"]?.Value <JArray>() != null && json["department"].Value <JArray>().Count > 0)
                                {
                                    user.Department = GetDepartment(json["department"].Value <JArray>()[0].Value <int>());
                                }
                                else
                                {
                                    user.Department = string.Empty;
                                }

                                user.Team          = userdict.ContainsKey("班组") && userdict["班组"] != null ? userdict["班组"] : string.Empty;
                                user.Position      = json["position"] != null ? json["position"].Value <string>() : string.Empty;
                                user.Mobile        = json["mobile"] != null ? json["mobile"].Value <string>() : string.Empty;
                                user.IsApproved    = json["status"]?.Value <bool>() ?? true;
                                user.LastLoginDate = DateTime.Now;

                                user.Remark = json.ToString();

                                repo.Save(user, out var key);

                                #endregion

                                #region 封装 UserWeChat 实例

                                userWeChat.ID                = (Guid)key;
                                userWeChat.UserName          = json["userid"] != null ? json["userid"].Value <string>() : string.Empty;
                                userWeChat.LastAuthorizeDate = DateTime.Now;
                                userWeChat.Gender            = json["gender"]?.Value <short>() ?? -1;
                                userWeChat.Avatar            = json["avatar"] != null ? json["avatar"].Value <string>() : string.Empty;

                                if (!string.IsNullOrEmpty(deviceId))
                                {
                                    userWeChat.DeviceId = deviceId;
                                }

                                repo.Save(userWeChat, out key);

                                #endregion

                                trans.Commit();

                                return(user);
                            }
                        }
                        catch
                        {
                            trans.Rollback();
                        }
                    }
                }
            }

            return(null);
        }