C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息

在前面几篇文章中,逐步从原有微信的API封装的基础上过渡到微信应用平台管理系统里面,逐步介绍管理系统中的微信数据的界面设计,以及相关的处理操作过程的逻辑和代码,希望从更高一个层次,向大家介绍微信的应用开发过程。本篇主要介绍在管理系统中,如何实现微信用户分组信息的同步操作。
其实微信能够风风火火的原因,主要就是因为有用户信息,所以同步并管理好微信账号的关注用户数据是非常重要的。有了微信用户的数据,你可以和你任何应用系统对接,实现系统-手机客户端的数据整合,还可以对用户进行营销管理,如发送用户感兴趣的产品消息、服务消息等,能够很好扩大企业的影响力和市场行为。
在较早之前的一篇随笔《C#开发微信门户及应用(5)--用户分组信息管理》,我曾经介绍了微信分组的各种底层的API封装操作,里面主要就是对微信提供API的.NET高级分组,对所有的信息交换,通过实体性进行数据交换,使得我们调用API来处理微信的各种事务更加方便,从而为微信应用平台的管理奠定基础。其中这篇文章介绍了所有微信分组管理的API封装过程,用户分组管理,包含下面几个方面的内容:
1)创建分组2) 查询所有分组3) 查询用户所在分组4) 修改分组名5) 移动用户分组

1、用户分组,在管理系统中的界面设计

针对以上微信分组的操作,我们可以在微信的应用管理系统里面,设计一个模块,用来管理微信的分组数据,在这个模块里面,可以创建分组,修改分组,查看分组等基础操作,还可以实现同步微信分组的操作,同步操作,主要就是把新增的分组信息添加到微信里面,修改的分组也在微信中实现修改功能,删除目前微信不支持,所以不用管了。最后,我们可以在此从微信服务器上,把修改后的数据同步下来,同步的时候为了避免对我们提交不成功的数据,我们需要对修改过的记录做好标识,这个就是我对整个同步操作的逻辑处理了。
在管理系统里面,对微信分组的列表管理界面设计如下所示。



创建分组的时候,我们只需要添加一个分组名称就可以了,界面设计也简单,但是我们把创建的ID统一设计为-1,作为未同步的新增标识。



编辑分组信息界面如下所示。当对分组进行编辑保存后,系统会记住那些修改过的分组就是了。

2、分组同步操作代码展示

为了更好实现分组同步的管理,我把分组的操作代码,封装在一个MVC的控制器的方法里面,页面代码通过Ajax调用就可以实现同步操作了,同步成功,或者失败,都会提示用户,让我们对其结果进行了解。
同步的时候,把本地新增的内容,在服务器上创建分组;把修改的的分组名称,在服务器上进行修改,然后进行同步列表处理,同步操作前,列表界面可能如下所示,有新增记录ID=-1的,也有修改后,记录修改标志的。


用户分组的同步按钮操作,是调用一个脚本代码就可以了,具体代码如下所示。

//绑定提交按钮的的点击事件
function BindSyncDataEvent() {
    $("#btnSyncData").click(function () {
        $.messager.confirm("提交确认", "您确认需要和微信服务器同步分组信息吗?", function (action) {
            if (action) {
                //提交数据
                $("#loading").show();

                $.ajax({
                    url: '/Group/SyncGroup',
                    type: 'post',
                    dataType: 'json',
                    success: function (data) {
                        if (data.Success) {
                            $("#grid").datagrid("reload");
                            $.messager.alert("提示", "同步成功");
                        }
                        else {
                            $.messager.alert("提示", "同步失败:" + data.ErrorMessage);
                        }
                    },
                    data: ''
                });

                $("#loading").fadeOut(500);
            }
        });
    });
}

其中上面红色部分就是通过Jquery调用的MVC的控制器方法,具体函数代码如下所示。

/// <summary>
/// 同步服务器的分组信息
/// </summary>
/// <returns></returns>
public ActionResult SyncGroup()
{
    string accessToken = GetAccessToken();
    CommonResult result = BLLFactory<Group>.Instance.SyncGroup(accessToken);
    return ToJsonContent(result);
}

从上面,我们没有看到太多的逻辑,为了方便我对他们进行了进一步的封装,把它放到了业务逻辑层进行处理了。具体我们看看它的代码逻辑吧,这里为了所有的数据库操作更加快捷和完整,使用了事务的操作,我把相关的代码贴出来,方便大家了解逻辑。

/// <summary>
/// 同步服务器的分组信息
/// </summary>
/// <returns></returns>
public CommonResult SyncGroup(string accessToken)
{
    CommonResult result = new CommonResult();

    try
    {
        IUserApi api = new UserApi();

        using (DbTransaction trans = baseDal.CreateTransaction())
        {
            //先把本地标志groupId = -1未上传的记录上传到服务器,然后进行本地更新
            string condition = string.Format("GroupID = '-1' ");
            List<GroupInfo> unSubmitList = base.Find(condition);
            foreach (GroupInfo info in unSubmitList)
            {
                GroupJson groupJson = api.CreateGroup(accessToken, info.Name);
                if (groupJson != null)
                {
                    info.GroupID = groupJson.id;
                    baseDal.Update(info, info.ID, trans);
                }
            }

            //把标志为修改状态的记录,在服务器上修改
            condition = string.Format("GroupID >=0 and Modified =1 ");
            List<GroupInfo> unModifyList = base.Find(condition);
            foreach (GroupInfo info in unModifyList)
            {
                CommonResult modifyed = api.UpdateGroupName(accessToken, info.GroupID, info.Name);
                if (modifyed != null && modifyed.Success)
                {
                    info.Modified = 0;//重置标志
                    baseDal.Update(info, info.ID, trans);
                }
            }    

            //删除具有删除标志的分组
            //condition = string.Format("GroupID >=100 and Deleted=1 ");
            //List<GroupInfo> unDeletedList = base.Find(condition);
            //foreach (GroupInfo info in unDeletedList)
            //{
            //    CommonResult deleted = api.DeleteGroup(accessToken, info.GroupID, info.Name);
            //    if (deleted != null && deleted.Success)
            //    {
            //        baseDal.Delete(info.ID, trans);
            //    }
            //}

            List<GroupJson> list = api.GetGroupList(accessToken);
            foreach (GroupJson info in list)
            {
                UpdateGroup(info, trans);
            }

            try
            {
                trans.Commit();
                result.Success = true;
            }
            catch 
            {
                trans.Rollback();
                throw;
            }                   
        }
    }
    catch (Exception ex)
    {
        result.ErrorMessage = ex.Message;
    }

    return result;
}

在Jquery同步的时候,我们为了避免等待时间过久而无法判断程序是否正常在工作,最好增加一个忙碌的提示操作,因为我们使用了Ajax调用,所以我们可以统一设置Ajax的忙碌和完成状态,具体设置代码如下所示。

//用来统一请求忙碌显示的设置
$.ajaxSetup({
    beforeSend: function () {
        $("#loading").show();
    },
    complete: function () {
        $("#loading").hide();
    }
});

如果感兴趣或者体验相关的微信功能,可以关注我的微信了解下。具体效果可以关注我的微信门户:广州爱奇迪,也可以扫描下面二维码进行关注了解。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,265评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,274评论 1 288
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,087评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,479评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,782评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,218评论 1 207
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,594评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,316评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,955评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,274评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,803评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,177评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,732评论 3 229
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,953评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,687评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,263评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,189评论 2 258

推荐阅读更多精彩内容