前言
繼上一篇簽到任務之后呢, 就有朋友讓我寫一下任務積分的領取和使用, 以及回收; 其實前面兩種都不難, 就只是積分的加減而已, 真正麻煩的是回收, 有回收的話你就需要考慮到每筆積分存在多種狀態(tài)的可能了;
結構設計
明細表(mysql)
記錄積分的每一筆獲取, 消耗的回收的記錄, 并且回收會依據(jù)里面的過期時間和回收狀態(tài)來處理;
Id uint `gorm:"column:id;primary_key;auto_increment;" json:"-"`
StreamNumber string `gorm:"column:stream_number;type:varchar(20);COMMENT:'流水號'" json:"streamNumber"`
UserId string `gorm:"column:user_id;type:varchar(20);index;COMMENT:'用戶ID'" json:"userId"`
TaskId string `gorm:"column:task_id;type:varchar(50);comment:'任務id'" json:"taskId"`
StreamType int `gorm:"column:stream_type;type:tinyint(1);comment:'明細類型 1獲取2消耗3回收'" json:"streamType"`
IntegralNum int64 `gorm:"column:integral_num;type:int(11);default:'0';comment:'積分數(shù)量'" json:"integralNum"`
IntegralSource int `gorm:"column:integral_source;type:tinyint(1);comment:'積分來源去向'" json:"integralSource"`
OutTime int64 `gorm:"column:out_time;type:bigint(20);comment:'過期時間';" json:"outTime"`
RecoveryState int `gorm:"column:recovery_state;type:tinyint(1);comment:'回收狀態(tài) 1已處理2未處理'" json:"recoveryState"`
....相關業(yè)務字段
用戶任務狀態(tài)表(mysql)
維護用戶的任務狀態(tài), 避免任務重復完成, 以及會有多階段任務的情況
Id uint `gorm:"column:id;primary_key;auto_increment;" json:"id"`
UserId string `gorm:"column:user_id;type:varchar(20);unique_index:idx_user_task;COMMENT:'用戶ID'"`
TaskId string `gorm:"column:task_id;type:varchar(50);unique_index:idx_user_task;comment:'任務id'"`
TaskState int `gorm:"column:task_state;type:tinyint(1);comment:'任務狀態(tài)'"`
....相關業(yè)務字段
用戶積分key(redis)
積分為了保證性能用redis的hash進行存儲, 每個用戶一個key, 維護可用積分, 可用相關的流水以及總領取積分數(shù)的狀態(tài);
IntegralInfo struct {
Available int64 `json:"available"` // 可用
AvailableStream []*IntegralItem `json:"availableStream"` // 可用流水
Total int64 `json:"total"` // 總領取
}
IntegralItem struct {
StreamId uint `json:"streamId"` // 流水Id
TaskId string `json:"taskId"` // 任務Id
Available int64 `json:"available"` // 可用
OutTime int64 `json:"outTime"` // 過期時間
}
領取功能
需求
- 任務完成領取積分;
- 關聯(lián)用戶任務狀態(tài);
- 添加用戶積分及同步流水;
- 記錄用戶總領取數(shù);
流程圖
消耗功能
需求
- 允許多端多點同時進行積分使用;
- 實時進行抵扣, 不允許后置;
- 刪除redis中無效的可用流水;
- 不影響當前的性能;
流程圖
回收功能
需求
- 定時回收過期積分;
- 如果一筆領取的積分部分被消耗, 則回收剩余積分;
- 在回收前使用的不用回收;
流程圖
文章來源:http://www.zghlxwxcb.cn/news/detail-481098.html
結語
積分功能應該是很多APP都會做的一個功能了, 領取消耗很簡單, 但是再加上回收的話就比較復雜了, 何況在不能后置使用的情況下還要保證性能, 這個就值得我們思考如何更有效的實現(xiàn)功能, 那么, 如果在此基礎上再加上凍結, 解凍及消耗呢?文章來源地址http://www.zghlxwxcb.cn/news/detail-481098.html
到了這里,關于手摸手教你寫任務中心-積分領取&消耗&回收的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!