public ActionResult AllotUser(string OpenId, int UserId)
        {
            WX_UserManager bll   = new WX_UserManager();
            WX_User        user  = bll.GetByPK(OpenId);
            WX_User        user1 = new WX_User();

            EntityUntility.CopyProperty(user, user1);
            user1.UserId = UserId;
            return(Json(new WX_UserManager().Update(user1), JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// 查询未分配客服的用户
        /// </summary>
        /// <returns></returns>
        public ActionResult NewF(string AppId)
        {
            var info = new WX_UserManager().Where(s => s.AppId == AppId && s.UserId == null).Select(x => new
            {
                x.UserNick,
                x.OpenID,
                x.HeadImageUrl,
                x.City,
                x.Province
            });

            return(Json(info, JsonRequestBehavior.AllowGet));
        }
        public ActionResult ChangeGroup(string OpenId, int GroupId)
        {
            WX_UserManager bll  = new WX_UserManager();
            WX_User        user = bll.GetByPK(OpenId);

            user.GroupId = GroupId;
            var result = new ReturnResult()
            {
                ErrorMsg = "修改失败!",
                Result   = bll.Update(user)
            };

            return(Json(result, JsonRequestBehavior.AllowGet));
        }
        public ActionResult RemoveTag(string openId, int tagId)
        {
            JObject jo     = JObject.Parse(new UserService(WXAPP.AppId, WXAPP.AppSecret).RemoveTag(openId, tagId));
            var     result = new
            {
                errcode = jo["errcode"].ToString(),
                errmsg  = jo["errmsg"].ToString()
            };

            if (result.errcode.Equals("0"))
            {
                WX_UserManager manager = new WX_UserManager();
                manager.RemoveTag(manager.GetByPK(openId), tagId);
            }
            return(Json(result, JsonRequestBehavior.AllowGet));
        }
        public ActionResult AddTag(List <string> openId, int tagid)
        {
            JObject jo     = JObject.Parse(new UserService(WXAPP.AppId, WXAPP.AppSecret).AddTag(openId, tagid));
            var     result = new
            {
                errcode = jo["errcode"].ToString(),
                errmsg  = jo["errmsg"].ToString()
            };

            if (result.errcode.Equals("0"))
            {
                WX_UserManager manager = new WX_UserManager();
                foreach (var id in openId)
                {
                    manager.AddTag(manager.GetByPK(id), tagid);
                }
            }
            return(Json(result, JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// 新增标签到微信并在此标签下新增用户
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="tagName"></param>
        /// <returns></returns>
        public ActionResult AddTagAndUse(string AppId, string tagName, string OpenId)
        {
            WX_App     app  = new WX_AppManager().GetByPK(AppId);
            TagService ser  = new TagService(app.AppId, app.AppSecret);
            string     json = ser.Create(tagName);
            JObject    jo   = (JObject)JsonConvert.DeserializeObject(json);
            WX_UserTag tag  = new WX_UserTag()
            {
                AppId   = AppId,
                TagId   = (int)jo["tag"]["id"],
                TagName = jo["tag"]["name"].ToString(),
            };
            ReturnResult result = new ReturnResult()
            {
                Result = true
            };

            if (!new WX_UserTagManager().Add(tag))
            {
                result.Result   = false;
                result.ErrorMsg = "新增失败!";
            }
            else
            {
                List <string> openIdList = JsonConvert.DeserializeObject <List <string> >(OpenId);
                JObject       job        = JObject.Parse(new UserService(app.AppId, app.AppSecret).AddTag(openIdList, tag.TagId));
                var           Adresult   = new
                {
                    errcode = job["errcode"].ToString(),
                    errmsg  = job["errmsg"].ToString()
                };
                if (Adresult.errcode.Equals("0"))
                {
                    WX_UserManager manager = new WX_UserManager();
                    foreach (var id in openIdList)
                    {
                        manager.AddTag(manager.GetByPK(id), tag.TagId);
                    }
                }
            }
            return(Json(result, JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// 给用户添加标签
        /// </summary>
        /// <param name="openId"></param>
        /// <param name="tagid"></param>
        /// <returns></returns>
        public ActionResult AddTag(string OpenId, string AppId, int tagid = 0)
        {
            List <string> openIdList = JsonConvert.DeserializeObject <List <string> >(OpenId);

            var     Ap     = new WX_AppManager().GetByPK(AppId);
            JObject jo     = JObject.Parse(new UserService(Ap.AppId, Ap.AppSecret).AddTag(openIdList, tagid));
            var     result = new
            {
                errcode = jo["errcode"].ToString(),
                errmsg  = jo["errmsg"].ToString()
            };

            if (result.errcode.Equals("0"))
            {
                WX_UserManager manager = new WX_UserManager();
                foreach (var id in openIdList)
                {
                    manager.AddTag(manager.GetByPK(id), tagid);
                }
            }
            return(Json(result, JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// 查询指定用户个人信息
        /// </summary>
        /// <param name="OpenID"></param>
        /// <returns></returns>
        public ActionResult UserIDL(string OpenID)
        {
            var info = new WX_UserManager().Where(s => s.OpenID.Equals(OpenID)).Select(x => new
            {
                Tag = x.WX_UserTag.Select(s => new
                {
                    s.TagId,
                    s.TagName
                }),
                x.OpenID,
                x.UserName,
                x.UserNick,
                x.Province,
                x.City,
                x.Address,
                x.UserSex,
                x.HeadImageUrl,
                x.Telphone,
                x.Remark
            }).ToList();

            return(Json(info, JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// 获取所有本客服下的用户
        /// </summary>
        /// <param name="UserID"></param>
        /// <returns></returns>
        public ActionResult GetAllUserInfo(int UserID)
        {
            List <WX_User>          UserInfo = new WX_UserManager().Where(s => s.UserId == UserID && s.UserState != "退订").ToList(); //获取所有该客服下的用户
            List <GetCharSpellCode> UserCode = new List <GetCharSpellCode>();                                                       //存储所有用户以及首字母
            Dictionary <string, List <GetCharSpellCode> > Dic = new Dictionary <string, List <GetCharSpellCode> >();                //将用户以键值对的方式存储

            foreach (WX_User item in UserInfo)
            {
                GetCharSpellCode code = new GetCharSpellCode();
                if (item.UserName != null) //判断备注是否为空
                {
                    code.Code = GetInitialUtility.GetFirstPinYin(item.UserName);
                }
                else
                {
                    code.Code = GetInitialUtility.GetFirstPinYin(item.UserNick);
                }
                code.UserName     = item.UserName;
                code.UserNick     = item.UserNick;
                code.OpenID       = item.OpenID;
                code.HeadImageUrl = item.HeadImageUrl;
                UserCode.Add(code);                                                  //添加到集合
            }
            var list = UserCode.OrderBy(x => x.Code).Select(x => x.Code).Distinct(); //获取当前所有不同分组,去掉重复的部分

            foreach (var item in list)
            {
                if (!item.Equals("#"))
                {
                    var UCode = UserCode.OrderBy(x => x.Code).Where(s => s.Code.Equals(item)).ToList();
                    Dic.Add(item, UCode);
                }
            }
            Dic.Add("#", UserCode.Where(x => x.Code.Equals("#")).ToList());
            return(Json(Dic.ToList(), JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// 从服务器更新用户列表
        /// </summary>
        ///
        public ActionResult UpdateList()
        {
            ReturnResult   rs      = new ReturnResult();
            WX_UserManager manager = new WX_UserManager();
            UserService    ser     = new UserService(WXAPP.AppId, WXAPP.AppSecret);

            try
            {
                JToken jo   = JObject.Parse(ser.Get());
                var    list = new List <WX_User>();
                foreach (string i in jo["data"]["openid"].Children())
                {
                    string  json   = ser.Info(i);
                    JObject userJo = JObject.Parse(json);
                    if (userJo["subscribe"].ToString().Equals("0"))//已退订
                    {
                        manager.Update(new WX_User()
                        {
                            OpenID = i, UnSubscribeTime = DateTime.Now, UserState = "已退订"
                        });
                    }
                    else
                    {
                        WX_User user = new WX_User()
                        {
                            OpenID        = i,
                            AppId         = WXAPP.AppId,
                            UserNick      = userJo["nickname"].ToString(),
                            UserSex       = userJo["sex"].ToString().Equals("1") ? "男" : "女",
                            City          = userJo["city"].ToString(),
                            Province      = userJo["province"].ToString(),
                            Country       = userJo["country"].ToString(),
                            HeadImageUrl  = userJo["headimgurl"].ToString(),
                            SubscribeTime = DateTime_EX.GetDateTime(Convert.ToInt32(userJo["subscribe_time"])),
                            Remark        = userJo["remark"].ToString(),
                            //GroupId = Convert.ToInt32(userJo["groupid"]),
                            GroupId   = 0,
                            UserState = "正常",
                        };
                        WX_User info = manager.GetByPK(user.OpenID);
                        if (info == null)//新增
                        {
                            manager.Add(user);
                        }
                        else
                        {
                            manager.Update(user);
                        }
                        var r = manager.ClearTag(user);
                        foreach (var t in userJo["tagid_list"].Children())
                        {
                            manager.AddTag(user, Convert.ToInt32(t));
                        }
                    }
                }
            }
            catch (Exception e)
            {
                rs.Result   = false;
                rs.ErrorMsg = e.Message;
                return(Json(rs, JsonRequestBehavior.AllowGet));
            }
            return(Json(rs, JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// 分配客服
        /// </summary>
        /// <param name="OpenId"></param>
        /// <param name="UserId"></param>
        /// <returns></returns>
        public ActionResult UpNewF(string OpenId, int UserId)
        {
            var info = new WX_UserManager().UpUserId(OpenId, UserId);

            return(Json(info, JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// 修改指定用户个人信息
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public ActionResult UpUserIDL(WX_User user)
        {
            var info = new WX_UserManager().NewUpdate(user);

            return(Json(info, JsonRequestBehavior.AllowGet));
        }