有个给小孩子上语文课的外部合作项目,里面有个成就墙的功能。类似于玩游戏,玩到什么程度可以获得成就。

成就分为3种课程类型,比如语文、朗读、音频。每种类型有4个成就,比如上了20、40、80、120节课分别获得什么成就。

建一张用户获得成就的表。里面有两个重要的字段:课程类型,成就类型。设置这两个字段是为了减少sql查询,如果不是这么做,就需要查询3*4次,检查是否完成对应的成就。有这两个字段后,就可以根据课程类型,查已经获得的最大成就类型,默认小的成就都已经获得。sql语句如下:

1
select type, max(achieve_type) achieve_type from achievement_wall where customer_id = ? group by type

然后在内存中处理就行了。

每个课程类别的成就都只能获得一次,所以需要设置唯一索引

每次完成一节课后,计算是否已经获得某个成就

上线前对用户已经学习的课做数据订正,记录已经获得的成就

这块属于外部合作项目中的一部分,我们这边是语文课,合作方还用了其他合作方的英语课,用户在pad上课。需要读取我们这边的数据,所以需要调用我们的登录接口,用这边的身份读写数据