/ 闲敲棋子 / 近期项目总结

近期项目总结

2012-12-09 posted in [学习笔记]

背景:

对现有的某汽车项目进行改造,把原有写死在业务逻辑里的上下行信息做成可配置的。同时增加项目配置、活动配置、互动配置,用户管理等功能。

实现功能:

互动配置:新增活动后,进行互动行为的配置(需支持多级互动)。

可以把互动行为的配置理解成一个短信问答题的建立:

首先发送一条下行:

诚邀您参加xx有奖问答活动,第一题:请问1+1=? A.1 B.2 C.3 D.不知道...

根据上行判断下一个应该发的信息内容:例

回复B 发下行:第二题,请问2+2=?  A.1 B.2 C.3 D.不知道... 

如果接到上行 A\C\D则发下行:

感谢您的参与

挺简单的一个流程,对于一个活动有一个互动配置。据此,设计表如下:

autoId Mo Mt actId pid
id 上行内容 下行内容 所属活动ID 父ID

读取互动配置,与现有上行处理相结合,匹配下行信息,并根据配置进行下发。

首先, 上行信息包括:spNumber\手机号\流水号\时间. 下行表结构则可根据需求定制.

上行表结构:

id msgId spNumber mobile subtime content
ID 流水号 上行号 手机号 上行时间 上行内容

因为上行无法匹配下行,只能在spNumber里增加5位扩展活动标示

则下行表结构:

id msgId spNumber mobile subtime status node actId content batch
ID 流水号 下行号 手机号 下行时间 发送结果 节点id 活动id 下行内容 批次号

由此,可通过spNumber+手机号取到上行所属活动, 默认匹配最近一条下行, 通过节点id与互动表中活动的pid匹配, 得到互动数据. 既进行到哪层互动环节.

问题: 如果一次下行,对应多次上行时无法对用户上行进行定义.

解决方案: 增加多选功能, 或者增加重置流程代码(例:回复return 从第一条开始回答问题) 待讨论…

至此,可以把互动配置理解成一个森林, 通过actId可找到具体某棵树. 再通过node找到流程进行到树的哪个节点.

定时扫描活动表,到达活动开始时间后对参与活动的用户进行分批次短信下发。

新建活动时, 指定活动开始时间, 发送人群, 每次发送人数, 补发频率等.

活动表结构:

id name startDate sendtime endDate count reSend status creatTime
id 活动名称 开始日期 发送时间 结束日期 每次发送人数 补发频率(间隔第1\2\5天未回复补发) 活动状态(0-未发布;1-已发布未开始;2-进行中;3-活动结束) 活动建立日期

定时任务,每天扫描活动表, 把状态为1并且开始日期等于当前日期的活动id筛选出来, 根据活动id, 找到发送人群(手机号), 批量插入待发送表中. 同时把活动状态更新为 2-进行中.

待发送表结构:

id actId mobile sendtime batch subtime
id 活动id 手机号 发送时间 发送批次 插入时间

每小时扫描活动表, 选出活动状态为2 的活动id 和每次发送人数. 扫描待发送表, 根据活动id\发送时间(小时)等于当前系统时间, 选出发送手机号, 根据每次发送人数进行排序并发送. 发送结果存入下行表中. 发完一条在待发送表中删除一条记录.

对于已到达结束日期的活动:

  1. 在每天扫描活动表时, 选出活动状态为进行中,并且活动结束日期等于当前日期的活动,将其状态改为3-活动结束. 并在待发送表中删除该活动id.

  2. 每小时扫描待发送表时,若某活动id的待发送列表为空(当前活动用户已发完),则更新该活动id的活动状态为已结束.

  3. 手动停止活动时, 删除待发送列表.

定时对未回复用户,根据活动配置信息进行补发。

  1. 每小时扫描活动表, 选出活动状态为2-进行中的活动id, 扫描下行表中有且只有node为活动根id的用户(可认为未回复), 找到首次下行至当前时间未回复并且时间间隔等于配置的补发频率 的用户手机号. 存入待发送表中. 标示发送批次为首次下发至当前日期间隔天数, 进行接下来的发送.

  2. 存在问题: 刚存进待发送列表中,这个小时就可能发不了了…

  3. 解决方案: 写在一个类里, 先扫描补发信息, 存待发送, 再扫描待发送列表进行发送…

难点 & 总结:

  1. 上下行无法匹配, spNumber如果固定的话不知道回复的是哪条下行. 解决方案根据时间找到最近一条的下行进行匹配. 问题是同一条下行多次上行会出现问题. (尤其是多级互动)

    感觉这种情况应该不会出现太多, 在手机短信的TL里, 实际上默认回复行为也是根据最近一条下行的回复. 因为并不存在类似微博的”回复”现象. 而领导要求多条回复都要匹配这种需求就像是大牛曾经说过的”伪需求”. 既不能考虑放弃这部分变态用户, 也不能要求产品提供比较合理的问答设置的情况下, 要么把spNumber写成随机的(感觉用户体验很不好),要么增加多选项. 现在我还在坚持固定spNumbner…

  2. 对于活动开始的触发和定时批量发送短信,以及补发.

    开始想想觉得挺难的, 后来把表结构和思路整理了一下, 虽然觉得还是挺难的, 但是至少想出了解决方案. 其他的具体开发的时候再说吧…