170 lines
3.4 KiB
Go
170 lines
3.4 KiB
Go
package mission
|
|
|
|
import (
|
|
"f5"
|
|
"main/common"
|
|
"main/constant"
|
|
"main/model"
|
|
"main/mt"
|
|
"main/service"
|
|
"main/vo"
|
|
"q5"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type MissionApi struct {
|
|
}
|
|
|
|
func (this *MissionApi) List(c *gin.Context) {
|
|
s := c.MustGet(constant.SESSION_KEY).(common.Session)
|
|
if s == nil {
|
|
return
|
|
}
|
|
rspObj := struct {
|
|
vo.BaseVo
|
|
Data []*vo.Mission `json:"data"`
|
|
}{}
|
|
|
|
rspObj.ErrCode, rspObj.ErrMsg = service.Task.List(s.GetAccountId(), &rspObj.Data)
|
|
c.JSON(200, rspObj)
|
|
}
|
|
|
|
func (this *MissionApi) UpdateTask(c *gin.Context) {
|
|
s := c.MustGet(constant.SESSION_KEY).(common.Session)
|
|
if s == nil {
|
|
return
|
|
}
|
|
reqJson := struct {
|
|
MissionId int32 `json:"mission_id"`
|
|
}{}
|
|
|
|
if err := c.ShouldBindJSON(&reqJson); err != nil {
|
|
f5.RspErr(c, 401, "params parse error")
|
|
return
|
|
}
|
|
|
|
rspObj := struct {
|
|
vo.BaseVo
|
|
Data []*vo.Mission `json:"data"`
|
|
}{}
|
|
|
|
task := new(model.Task)
|
|
err, found := task.Find(s.GetAccountId())
|
|
if err != nil || !found {
|
|
f5.RspErr(c, 500, "server internal error")
|
|
return
|
|
}
|
|
|
|
tasks := task.GetTaskItems()
|
|
if tasks == nil {
|
|
f5.RspErr(c, 401, "bad request")
|
|
return
|
|
}
|
|
|
|
taskitem, ok := tasks[reqJson.MissionId]
|
|
if !ok {
|
|
f5.RspErr(c, 401, "bad request")
|
|
return
|
|
}
|
|
|
|
taskMeta := mt.Table.Task.GetById(int64(taskitem.MissionId))
|
|
if taskMeta == nil {
|
|
f5.RspErr(c, 500, "server internal error")
|
|
return
|
|
}
|
|
|
|
if taskMeta.GetCondition() != constant.TASK_COND_FRONT ||
|
|
taskitem.Target <= taskitem.Current {
|
|
f5.RspErr(c, 401, "bad request")
|
|
return
|
|
}
|
|
|
|
taskitem.Target++
|
|
task.UpdateTasks(tasks)
|
|
|
|
for _, taskitem := range tasks {
|
|
missionVo := new(vo.Mission)
|
|
missionVo.FromModel(taskitem)
|
|
q5.AppendSlice(&rspObj.Data, missionVo)
|
|
}
|
|
|
|
c.JSON(200, rspObj)
|
|
}
|
|
|
|
func (this *MissionApi) ClaimTaskAward(c *gin.Context) {
|
|
s := c.MustGet(constant.SESSION_KEY).(common.Session)
|
|
if s == nil {
|
|
return
|
|
}
|
|
reqJson := struct {
|
|
MissionId int32 `json:"mission_id"`
|
|
}{}
|
|
|
|
if err := c.ShouldBindJSON(&reqJson); err != nil {
|
|
f5.RspErr(c, 401, "params parse error")
|
|
return
|
|
}
|
|
|
|
rspObj := struct {
|
|
vo.BaseVo
|
|
Data []*vo.Mission `json:"data"`
|
|
}{}
|
|
|
|
task := new(model.Task)
|
|
err, found := task.Find(s.GetAccountId())
|
|
if err != nil || !found {
|
|
f5.RspErr(c, 500, "server internal error")
|
|
return
|
|
}
|
|
|
|
tasks := task.GetTaskItems()
|
|
if tasks == nil {
|
|
f5.RspErr(c, 401, "bad request")
|
|
return
|
|
}
|
|
|
|
taskitem, ok := tasks[reqJson.MissionId]
|
|
if !ok || taskitem.Current != taskitem.Target {
|
|
f5.RspErr(c, 401, "bad request")
|
|
return
|
|
}
|
|
|
|
taskMeta := mt.Table.Task.GetById(int64(taskitem.MissionId))
|
|
if taskMeta == nil {
|
|
f5.RspErr(c, 500, "server internal error")
|
|
return
|
|
}
|
|
|
|
user := new(model.User)
|
|
nowTime := f5.GetApp().GetRealSeconds()
|
|
if err, found := user.Find(s.GetAccountId(), nowTime); err != nil {
|
|
f5.RspErr(c, 500, "server internal error1")
|
|
return
|
|
} else if !found {
|
|
f5.RspErr(c, 500, "server internal error2")
|
|
return
|
|
}
|
|
|
|
if taskMeta.GetRewardType() == constant.TASK_AWARD_SCORE {
|
|
user.AddScore(taskMeta.GetReward())
|
|
if service.Task.UpdateTaskProgress(s.GetAccountId(), constant.ITEM_TYPE_SCORE, taskMeta.GetReward(), &tasks) {
|
|
q5.AppendSlice(&rspObj.BaseVo.GetOrCreateSideEffect().Effects, "task")
|
|
}
|
|
rspObj.GetOrCreateAward().AddItem(constant.VIRTUAL_ITEM_SCORE, taskMeta.GetReward())
|
|
}
|
|
|
|
taskitem.Award = 1
|
|
task.UpdateTasks(tasks)
|
|
|
|
for _, taskitem := range tasks {
|
|
missionVo := new(vo.Mission)
|
|
missionVo.FromModel(taskitem)
|
|
q5.AppendSlice(&rspObj.Data, missionVo)
|
|
}
|
|
|
|
user.UpdateUserFields()
|
|
|
|
c.JSON(200, rspObj)
|
|
}
|