发表于: 2018-03-14 23:52:51
1 461
今天完成的事情:
1.由于用户签到的逻辑较为复杂,今天做了一下测试。
方案:用户的签到记录分出单独一张表:
record_sigin字段解释,“2018,03,0000000000000100000000000000000” 31为0或1 表示最长1月记录,0为未签到,1为签到。
如果年份或者月份不同,直接刷新字段记录。
年份和月份相同的情况下记录本月所有签到记录。
select * from user_sigin where u_id =#{uid}
if(记录为空) (第一次签到)
新添加一条数据,累计签到次数,最高连续签到次数,连续签到次数 逆袭逗,全部设为1.
if(不为空)(有签到记录)
if(年份或者月份不匹配)
重置record_sigin字段为当前年月日. 连续签到次数为1,最高连续签到不变(保留以前记录),逆袭逗+1,累计签到+1.
if(同年同月(yyyy,mm).
if(不连续(昨日记录为0))
if(连续签到《=最高连续签到) 今日记录改为1, 连续签到设为1. 逆袭逗+1.累计签到+1。 最高连续保留原来数据。
if(连续签到》最高签到) 今日记录改为1,连续签到设为1, .逆袭逗+1.,累计签到+1。 最高连续保留原来数据。
if(连续)(昨日记录为1)
if(连续签到==1)今日记录改为1,连续签到+1,最高签到==连续签到,逆袭逗+2.累计签到+1.
if(1《n《5)今天记录改为1,连续签到+1,最高签到==连续签到,逆袭逗+n+1,累计签到+1
if(n》=5)今天记录改为1,连续签到+1,最高签到==连续签到,逆袭逗+5,累计签到+1.
遇到的问题:
这个方案判断逻辑复杂,if嵌套比较多,代码可读性差,字符串处理麻烦,但是每个用户只需要记录一条数据,不需要数据库做计算。
还有一个方案请教了师兄,每条签到记录都往数据库写入一条,累计签到==记录条数,根据create_at字段可以选出本月的签到记录,最高签到和连续签到写在user表中,每次插入新签到记录,判断是否连续,更新最高签到和连续签到的值。 这个方案逻辑较简单,但是数据库持续增长,查询的时候需要数据库做排序等计算。
今天把方案1的代码写的差不多了,明天做个测试,如果测试没有为题的话就是用方案1,如果测试问题较多,bug难处理则转为2方案。
收获:
1.字符串的处理熟练了一截,学习了StringBuilder类的使用,replace,insert,subString几个方法。
明天的计划:
1.把签到的问题搞定。
2.根据接口文档细化方案文档。
评论