zoukankan      html  css  js  c++  java
  • ASP.NET MVC5+EF6+EasyUI 后台管理系统(73)-微信公众平台开发-消息管理

    前言

    回顾上一节,我们熟悉的了解了消息的请求和响应,这一节我们来建立数据库的表,表的设计蛮复杂

    你也可以按自己所分析的情形结构来建表

    必须非常熟悉表的结果才能运用这张表,这表表的情形涵盖比较多

    思维导图

    我这个人比较喜欢用思维导图来分析和表达一些模型:

     

    表结构

    根据思维导图,我们可以建立的表可以是3张表:消息表,规则表,类型表

    消息表:实际的消息

    规则表:文本、图文、语音等

    类型表:文本、图文、语音(默认回复,订阅回复)

    也可以是两张表:规制表,消息表(+一个类型字段)

    我这里只设计一张表:消息表(+一个规则字段+一个类型字段)

    设计表结构与个人的平时习惯有关系,我还是喜欢简单的东西,别为了设计而去专门设计,这样只会增加系统的复杂度

    复制代码
    CREATE TABLE [dbo].[WC_MessageResponse](
        [Id] [varchar](50) NOT NULL,              --主键        
        [OfficalAccountId] [varchar](50) NULL,    --所属公众号
        [MessageRule] [int] NULL,                 --消息规则(枚举)
        [Category] [int] NULL,                    --类型(枚举)
        [MatchKey] [varchar](1000) NULL,          --关键字
        [TextContent] [varchar](max) NULL,        --文本内容
        [ImgTextContext] [varchar](max) NULL,     --图文文本内容
        [ImgTextUrl] [varchar](1000) NULL,        --图文图片URL
        [ImgTextLink] [varchar](1000) NULL,       --图文图片超链接
        [MeidaUrl] [varchar](1000) NULL,          --语音URL
        [MeidaLink] [varchar](1000) NULL,         --语音超链接
        [Enable] [bit] NOT NULL,                  --是否启用
        [IsDefault] [bit] NOT NULL,               --是否默认
        [Remark] [varchar](2000) NULL,            --说明
        [Sort] [int] NOT NULL,                    --排序
        [CreateTime] [datetime] NOT NULL,         --创建时间
        [CreateBy] [varchar](50) NOT NULL,        --创建人
        [ModifyTime] [datetime] NOT NULL,         --修改时间
        [ModifyBy] [varchar](50) NULL,            --修改人
     CONSTRAINT [PK_WC_MessageResponse] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    GO
    
    SET ANSI_PADDING OFF
    GO
    
    ALTER TABLE [dbo].[WC_MessageResponse]  WITH CHECK ADD  CONSTRAINT [FK_WC_MessageResponse_WC_OfficalAcconts] FOREIGN KEY([OfficalAccountId])
    REFERENCES [dbo].[WC_OfficalAccounts] ([Id])
    ON DELETE CASCADE
    GO
    
    ALTER TABLE [dbo].[WC_MessageResponse] CHECK CONSTRAINT [FK_WC_MessageResponse_WC_OfficalAcconts]
    GO
    复制代码

    表对应了两个枚举和关联主表公众号管理的主表

     公众号管理在70节

    对应的枚举

    复制代码
     public enum WeChatReplyCategory
        {
            //文本
            Text =1,
            //图文
            Image =2,
            //语音
            Voice =3,
            //相等,用于回复关键字
            Equal=4,
            //包含,用于回复关键字
            Contain = 5
        }
    
        public enum WeChatRequestRuleEnum
        {
            /// <summary>
            /// 默认回复,没有处理的
            /// </summary>
            Default =0,
            /// <summary>
            /// 关注回复
            /// </summary>
            Subscriber =1,
            /// <summary>
            /// 文本回复
            /// </summary>
            Text =2,
            /// <summary>
            /// 图片回复
            /// </summary>
            Image =3,
            /// <summary>
            /// 语音回复
            /// </summary>
            Voice =4,
            /// <summary>
            /// 视频回复
            /// </summary>
            Video =5,
            /// <summary>
            /// 超链接回复
            /// </summary>
            Link =6,
            /// <summary>
            /// LBS位置回复
            /// </summary>
            Location =7,
        }
    复制代码

    枚举其实对应就是我省掉的其余两张表

    到这里,相信表的设计已经非常清晰

    后台代码

    增删改查非常普通,主要关注点在前端,前端处理提交的消息中,必须包含规则,类型,来指定消息的最终表达

     Controller
     BLL
     DAL

    DAL层有必要来说明一下

    默认回复和关注回复有3种类型:文本,图文,语音(但是只能有一种,所以有IsDefault字段来表明执行哪种回复)所以这两个规则必须另外处理,且看DAL的代码执行的SQL语句便明白。

    所以我们尽情的设计前端吧!

    前端如何设计?

    我们来看一个思维导图:

     

    前端完整代码

     View Code

    利用前端的思维导图,来快速理解前端代码,和应用于实际

    总结

    消息的管理是非常有技巧的一件事

    1.消息在没有任务回复的情况 下,我们应该启用默认回复,要不用户会得不到回应,丢失体验

    2.关键字的设计一般是一环扣一环,是有引导作用的

       比如:关键字:(我要)   回复: 按1加入获得礼品一份,按2直接获得50元

        关键字:(1)       回复: 按3获得铁观音茶一份,按4获得普洱茶

        关键字:(3或4)  回复:请回复您的地址和电话及收件人

       这样我们将获得系统与用户之间的完整对话,当然我们也要对用户最后的信息进行处理

    参考代码:https://yunpan.cn/cM9ffkutawueD  访问密码 2f0d

  • 相关阅读:
    Mybatis中selectKey源码分析
    Mybatis 基于注解Mapper源码分析
    MyBatis的二级缓存以及装饰器模式运用
    ConcurrentSkipListMap源码分析
    CopyOnWriteArrayList源码分析
    InnoDB 单列索引与多列索引
    Java 线程池源码分析
    JDK8 ReentrantReadWriteLock源码分析
    关于lombok的坑
    on duplicate key update 的用法说明(解决批量操作数据,有就更新,没有就新增)mybatis批量操作数据更新和添加
  • 原文地址:https://www.cnblogs.com/syg1/p/5870886.html
Copyright © 2011-2022 走看看