Commit bafa0a57e391a412e87bc3d6b8ffb507775f1c14

Authored by 陆恒
1 parent 6a23c091

任务与成就相关接口

src/HttpServer/jsonconf/jsonconf.go
... ... @@ -16,7 +16,7 @@ type AchieveDesc struct {
16 16 Task string `json:"task"`
17 17 Num int `json:"num"`
18 18 Reward []int `json:"reward"`
19   -
  19 + TaskType int `json:"type"`
20 20 }
21 21  
22 22 type LevelDesc struct {
... ...
src/HttpServer/logic/constdef.go
1 1 package logic
2 2  
3   -//任务成就类型枚举
4   -var (
  3 +//任务成就类型枚举 协议上报用
  4 +const (
5 5 TASKTYPE_PASSLEVEL = 1 //表示通过x关卡
6 6 TASKTYPE_GETREDBAG = 2 //领取x次红包
7 7 TASKTYPE_WATCHADS = 3 //3表示观看x次广告
... ... @@ -9,6 +9,39 @@ var (
9 9 TASKTYPE_USEITEM = 5 //5表示使用x次道具
10 10 )
11 11  
  12 +
  13 +//任务类型 对应表
  14 +const (
  15 + DAILY_TASKTYPE_LOGIN =1 //1 每日登录
  16 + DAILY_TASKTYPE_GETGUANCNT = 2 //提取存钱罐
  17 + DAILY_TASKTYPE_PASSLEVEL = 3 //近日通过关
  18 + DAILY_TASKTYPE_USEITEM = 4 //使用道具数
  19 + DAILY_TASKTYPE_GETREDBAG = 5 //领取红包次数
  20 + DAILY_TASKTYPE_GETGUANGOLD = 6 //收取金币x枚
  21 + DAILY_TASKTYPE_ONLINEMIN = 7 //在线分钟数
  22 +)
  23 +
  24 +//成就类型 对应表
  25 +const (
  26 + ACHIEVETYPE_WATCHADDS = 1 //累计观看广告次数
  27 + ACHIEVETYPE_USERLV = 2 //人物等级
  28 + ACHIEVETYPE_KILLSTAR = 3 //累计消除星星数
  29 + ACHIEVETYPE_GETGUANCNT = 4 //累计存钱罐提取
  30 + ACHIEVETYPE_USEITEMCNT = 5 //累计道具使用
  31 +
  32 +)
  33 +
  34 +//奖励类型枚举
  35 +const (
  36 + REWARDTYPE_STAR = 1 //星星
  37 + REWARDTYPE_CHUI =2
  38 + REWARDTYPE_SHUA = 3
  39 + REWARDTYPE_SWAP = 4
  40 + REWARDTYPE_ELIMITE = 5
  41 + REWARDTYPE_EXP = 6
  42 + REWARDTYPE_GOLD = 7
  43 +)
  44 +
12 45 var (
13 46 WETCHATAPPID="wx572a2a5ec4538f33"
14 47 WETCHATSERCRT = "b31e2e7406af88fe7395cd178bdb64fc"
... ...
src/HttpServer/logic/datadef.go
... ... @@ -122,8 +122,54 @@ type UpdatetaskResp struct {
122 122 Message string `json:"message"`
123 123 }
124 124  
  125 +
  126 +type QuerytaskinfoReq struct {
  127 + Tasktype int `json:"tasktype"`
  128 +}
  129 +
  130 +type QuerytaskinfoResp struct {
  131 + Code int `json:"code"`
  132 + Message string `json:"message"`
  133 + Data TaskList `json:"data"`
  134 +}
  135 +
  136 +
  137 +
  138 +type GettaskrewardReq struct {
  139 + Tasktype int `json:"tasktype"`
  140 + Taskid int `json:"taskid"`
  141 + Gameid string `json:"gameid"`
  142 + Channel string `json:"channel"`
  143 +}
  144 +
  145 +type GettaskrewardData struct {
  146 + Lv int `json:"lv"`
  147 + Rewardstar int `json:"rewardstar"`
  148 + Chuiitem int `json:"chuiitem"`
  149 + Shuaitem int `json:"shuaitem"`
  150 + Swapitem int `json:"swapitem"`
  151 + Eliminitem int `json:"eliminitem"`
  152 + Goldnum int `json:"goldnum"`
  153 +}
  154 +type GettaskrewardResp struct {
  155 + Code int `json:"code"`
  156 + Message string `json:"message"`
  157 + Data GettaskrewardData `json:"data"`
  158 +}
  159 +
  160 +
125 161 //**********************************************************************************************************
126 162  
  163 +type TaskListDesc struct {
  164 + Taskid int `json:"tasktype"`
  165 + Taskstatus int `json:"taskstatus"`
  166 + Taskprogress int `json:"taskprogress"`
  167 +}
  168 +
  169 +type TaskList struct {
  170 + Taskdata []TaskListDesc `json:"taskdata"`
  171 +}
  172 +
127 173 //其中提取次数和当日登陆在userdata中记录
128 174 type TaskInfo struct {
129 175 OnlineMin int //在线分钟数
... ...
src/HttpServer/logic/errordef.go
... ... @@ -16,4 +16,7 @@ const (
16 16 ERROR_WITHDRAWLVLIMIT =11 //提现等级不够
17 17 ERROR_WITHDRAWONLYONE =12 //新人专享只能提取一次
18 18 ERROR_PRENOTFINISH =13 //前置档位未提现
  19 + ERROR_TASKCANNOTGET =14 //当前任务未完成或已领取
  20 + ERROR_TASKID_WRONG =15 //当前任务id错误
  21 + ERROR_TASKPRE_NOTGET =16 //前置任务还未领取
19 22 )
20 23 \ No newline at end of file
... ...
src/HttpServer/logic/function.go
... ... @@ -6,11 +6,26 @@ import (
6 6 "common/logger"
7 7 "common/redis"
8 8 "encoding/json"
  9 + "errors"
9 10 "net/http"
  11 + "sort"
10 12 "strconv"
11 13 "time"
12 14 )
13 15  
  16 +func (v *TaskList) Len() int {
  17 + return len(v.Taskdata)
  18 +}
  19 +
  20 +func (v *TaskList) Swap(i, j int) {
  21 + v.Taskdata[i], v.Taskdata[j] = v.Taskdata[j], v.Taskdata[i]
  22 +}
  23 +
  24 +func (v *TaskList) Less(i, j int) bool {
  25 + return v.Taskdata[i].Taskstatus > v.Taskdata[j].Taskstatus
  26 +}
  27 +
  28 +
14 29 func SetHeader(w http.ResponseWriter) {
15 30 w.Header().Set("Access-Control-Allow-Origin", "*") //允许访问所有域
16 31 w.Header().Set("Content-Type", "application/json")
... ... @@ -44,6 +59,346 @@ func GetUserInfo(uuid int) (*UserData,error) {
44 59 return &tmp,nil
45 60 }
46 61  
  62 +func GetUserLvConfig(lv int) *jsonconf.LevelDesc {
  63 + for _,val := range jsonconf.GetJsonConf().LevelConfig {
  64 + if lv == val.Level {
  65 + return &val
  66 + }
  67 + }
  68 + return nil
  69 +}
  70 +
  71 +func GetTaskConfig(taskid int) *jsonconf.AchieveDesc {
  72 + for _,val := range jsonconf.GetJsonConf().TaskConfig {
  73 + if val.Id == taskid {
  74 + return &val
  75 + }
  76 + }
  77 + return nil
  78 +}
  79 +
  80 +func GetAchieveConfig(taskid int) *jsonconf.AchieveDesc {
  81 + for _,val := range jsonconf.GetJsonConf().AchieventConfig {
  82 + if val.Id == taskid {
  83 + return &val
  84 + }
  85 + }
  86 + return nil
  87 +}
  88 +
  89 +func (uinfo *UserData) CalcTaskList(list *TaskList) {
  90 +
  91 + for k,val := range list.Taskdata {
  92 + //未完成的才做判断
  93 + if val.Taskstatus != 1 {
  94 + continue
  95 + }
  96 + cfg := GetTaskConfig(val.Taskid)
  97 + if cfg == nil {
  98 + logger.Error("CalcTaskList GetTaskConfig failed id=%v",val.Taskid)
  99 + continue
  100 + }
  101 +
  102 +
  103 + if cfg.TaskType == DAILY_TASKTYPE_LOGIN {
  104 + nowloginday := time.Now().Day()
  105 + lasttime := time.Unix(int64(uinfo.LastLoginTime), 0)
  106 + lastloginday := lasttime.Day()
  107 +
  108 + if nowloginday == lastloginday && val.Taskstatus == 1{
  109 + list.Taskdata[k].Taskprogress = 1
  110 + list.Taskdata[k].Taskstatus = 2
  111 + }
  112 + }else if cfg.TaskType == DAILY_TASKTYPE_GETGUANCNT {
  113 + list.Taskdata[k].Taskprogress = uinfo.GetFromGuanCnt
  114 + //当日提取存钱罐次数
  115 + if uinfo.GetFromGuanCnt >= cfg.Num {
  116 + list.Taskdata[k].Taskstatus = 2
  117 + }
  118 + }else if cfg.TaskType == DAILY_TASKTYPE_PASSLEVEL {
  119 + list.Taskdata[k].Taskprogress = uinfo.Task.PassLevel
  120 + if uinfo.Task.PassLevel >= cfg.Num {
  121 + list.Taskdata[k].Taskstatus = 2
  122 + }
  123 + }else if cfg.TaskType == DAILY_TASKTYPE_USEITEM {
  124 + list.Taskdata[k].Taskprogress = uinfo.Task.UseItemCnt
  125 + if uinfo.Task.UseItemCnt >= cfg.Num {
  126 + list.Taskdata[k].Taskstatus = 2
  127 + }
  128 + } else if cfg.TaskType == DAILY_TASKTYPE_GETREDBAG {
  129 + list.Taskdata[k].Taskprogress = uinfo.Task.GetRedbagCnt
  130 + if uinfo.Task.GetRedbagCnt >= cfg.Num {
  131 + list.Taskdata[k].Taskstatus = 2
  132 + }
  133 + }else if cfg.TaskType == DAILY_TASKTYPE_GETGUANGOLD {
  134 + list.Taskdata[k].Taskprogress = uinfo.Task.GetGuanGold
  135 + if uinfo.Task.GetGuanGold >= cfg.Num {
  136 + list.Taskdata[k].Taskstatus = 2
  137 + }
  138 + }else if cfg.TaskType == DAILY_TASKTYPE_ONLINEMIN {
  139 + list.Taskdata[k].Taskprogress = uinfo.Task.OnlineMin
  140 + if uinfo.Task.OnlineMin >= cfg.Num {
  141 + list.Taskdata[k].Taskstatus = 2
  142 + }
  143 + }
  144 +
  145 + }
  146 +
  147 + //需要保存到redis
  148 + SaveTaskInfo(uinfo.Userid,1,list)
  149 +
  150 + //排序
  151 + sort.Sort(list)
  152 +}
  153 +
  154 +func (uinfo *UserData) CalcAchieveProgress(ttype int) int {
  155 + rtval := 0
  156 + switch ttype {
  157 + case ACHIEVETYPE_WATCHADDS:
  158 + rtval = uinfo.Achieve.WatchAdsCnt
  159 + case ACHIEVETYPE_USERLV:
  160 + rtval = uinfo.Lv
  161 + case ACHIEVETYPE_KILLSTAR:
  162 + rtval = uinfo.Achieve.KillStar
  163 + case ACHIEVETYPE_GETGUANCNT:
  164 + rtval = uinfo.Achieve.SumGetGuan
  165 + case ACHIEVETYPE_USEITEMCNT:
  166 + rtval = uinfo.Achieve.SumUseItemCnt
  167 + default:
  168 + logger.Error("CalcAchieveProgress type wrong ttype=%v",ttype)
  169 + }
  170 +
  171 + return rtval
  172 +}
  173 +
  174 +//成就返回的是新的成就列表
  175 +func (uinfo *UserData) CalcAchieveList(list *TaskList) *TaskList{
  176 + newlist := new(TaskList)
  177 + curtype := -1 //记录当前类型
  178 +
  179 + //第一遍首先将所有进度设置为正确的状态
  180 + for k,val := range list.Taskdata {
  181 + cfg := GetAchieveConfig(val.Taskid)
  182 + if cfg == nil {
  183 + logger.Error("CalcAchieveList GetTaskConfig failed id=%v",val.Taskid)
  184 + continue
  185 + }
  186 +
  187 + list.Taskdata[k].Taskprogress =uinfo.CalcAchieveProgress(cfg.TaskType)
  188 + switch cfg.TaskType {
  189 + case ACHIEVETYPE_WATCHADDS:
  190 + if uinfo.Achieve.WatchAdsCnt >= cfg.Num {
  191 + list.Taskdata[k].Taskstatus = 2
  192 + }
  193 + case ACHIEVETYPE_USERLV:
  194 + if uinfo.Lv >= cfg.Num {
  195 + list.Taskdata[k].Taskstatus = 2
  196 + }
  197 + case ACHIEVETYPE_KILLSTAR:
  198 + if uinfo.Achieve.KillStar >= cfg.Num {
  199 + list.Taskdata[k].Taskstatus = 2
  200 + }
  201 + case ACHIEVETYPE_GETGUANCNT:
  202 + if uinfo.Achieve.SumGetGuan >= cfg.Num {
  203 + list.Taskdata[k].Taskstatus = 2
  204 + }
  205 + case ACHIEVETYPE_USEITEMCNT:
  206 + if uinfo.Achieve.SumUseItemCnt >= cfg.Num {
  207 + list.Taskdata[k].Taskstatus = 2
  208 + }
  209 + default:
  210 + logger.Error("CalcAchieveProgress type wrong ttype=%v",cfg.TaskType)
  211 + }
  212 + }
  213 +
  214 +
  215 + for k,val := range list.Taskdata {
  216 +
  217 + cfg := GetAchieveConfig(val.Taskid)
  218 + if cfg == nil {
  219 + logger.Error("CalcAchieveList GetTaskConfig failed id=%v",val.Taskid)
  220 + continue
  221 + }
  222 +
  223 + if val.Taskstatus == 2 {
  224 + //未领取已完成 只需要加入第一种
  225 + if curtype == cfg.TaskType {
  226 + continue
  227 + }else {
  228 + //将类型加入返回列表
  229 + newlist.Taskdata = append(newlist.Taskdata,list.Taskdata[k])
  230 + curtype = cfg.TaskType
  231 + }
  232 + }else if val.Taskstatus == 1 {
  233 + //未完成 不做处理
  234 + }else {
  235 + //已领取 需要判断一下是否最后一项
  236 + if k!= len(list.Taskdata)-1 {
  237 + //不是最后一条数据
  238 + nextcfg := GetAchieveConfig(list.Taskdata[k+1].Taskid)
  239 + if nextcfg!=nil {
  240 + if nextcfg.TaskType != cfg.TaskType {
  241 + //下面一天不是此类型了
  242 + newlist.Taskdata = append(newlist.Taskdata,list.Taskdata[k])
  243 + curtype = cfg.TaskType
  244 + }
  245 + }
  246 +
  247 + } else {
  248 + //最后一条 加入
  249 + newlist.Taskdata = append(newlist.Taskdata,list.Taskdata[k])
  250 + curtype = cfg.TaskType
  251 + }
  252 + }
  253 +
  254 +
  255 + }
  256 +
  257 + //保存旧的列表
  258 + SaveTaskInfo(uinfo.Userid,2,list)
  259 +
  260 + //将返回的列表排序
  261 + sort.Sort(newlist)
  262 + return newlist
  263 +}
  264 +
  265 +func SaveTaskInfo(uuid ,tasktype int,list *TaskList) error {
  266 + savestr,err := json.Marshal(list)
  267 + if err != nil {
  268 + logger.Error("SaveTaskInfo err =%v",err)
  269 + return err
  270 + }
  271 +
  272 + if tasktype == 1 {
  273 + err = redishandler.GetRedisClient().HSet(redis.USER_TASKINFO_LIST,strconv.Itoa(uuid),string(savestr))
  274 + }else if tasktype == 2 {
  275 + err = redishandler.GetRedisClient().HSet(redis.USER_ACHIEVEMENTINFO_LIST,strconv.Itoa(uuid),string(savestr))
  276 + }else {
  277 + logger.Error("tasktype invalid")
  278 + return errors.New("tasktype invalid")
  279 + }
  280 + return err
  281 +}
  282 +
  283 +func GetTaskInfo(uuid ,tasktype int) (*TaskList,error) {
  284 + var data string
  285 + var err error
  286 + if tasktype == 1 {
  287 + data,err = redishandler.GetRedisClient().HGet(redis.USER_TASKINFO_LIST,strconv.Itoa(uuid))
  288 + }else if tasktype == 2 {
  289 + data,err = redishandler.GetRedisClient().HGet(redis.USER_ACHIEVEMENTINFO_LIST,strconv.Itoa(uuid))
  290 + }else {
  291 + logger.Error("tasktype invalid")
  292 + return nil,errors.New("tasktype invalid")
  293 + }
  294 +
  295 + var list TaskList
  296 + err = json.Unmarshal([]byte(data),&list)
  297 + if err != nil {
  298 + logger.Error("GetTaskInfo err=%v",err)
  299 + return nil,err
  300 + }
  301 +
  302 + return &list,err
  303 +}
  304 +
  305 +//处理领取任务
  306 +func (uinfo *UserData) HandleGetTaskReward(req *GettaskrewardReq,resp *GettaskrewardResp,list *TaskList) error {
  307 + isfind := false
  308 + index := -1
  309 + var taskdesc *TaskListDesc
  310 + for k,val := range list.Taskdata {
  311 + if val.Taskid == req.Taskid {
  312 + isfind = true
  313 + index = k
  314 + taskdesc = &val
  315 + break
  316 + }
  317 + }
  318 +
  319 + if isfind && taskdesc != nil && index != -1{
  320 + if taskdesc.Taskstatus != 2 {
  321 + //状态不是可领取状态 无法领取
  322 + resp.Code = ERROR_TASKCANNOTGET
  323 + resp.Message = "当前任务未完成或已领取"
  324 + return errors.New("当前任务未完成或已领取")
  325 + }
  326 +
  327 + //状态对的情况 如果是成就下需要判断前置条件是否被
  328 + if req.Tasktype == 2 && index > 0 {
  329 + if list.Taskdata[index-1].Taskstatus != 0 {
  330 + resp.Code = ERROR_TASKPRE_NOTGET
  331 + resp.Message = "前置任务还未领取"
  332 + return errors.New("当前任务未完成或已领取")
  333 + }
  334 + }
  335 + }else {
  336 + resp.Code = ERROR_TASKID_WRONG
  337 + resp.Message = "当前任务id错误"
  338 + return errors.New("当前任务id错误")
  339 + }
  340 +
  341 + cfg := GetTaskConfig(taskdesc.Taskid)
  342 + if cfg == nil || len (cfg.Reward) < 2{
  343 + resp.Code = ERROR_SRV_ERROR
  344 + resp.Message = "网络错误"
  345 + return errors.New("获取配置失败")
  346 + }
  347 +
  348 + //将状态置位已领取
  349 + list.Taskdata[index].Taskstatus = 0
  350 + //发奖励
  351 + sub := len(cfg.Reward) / 2
  352 + for i:=0;i<sub;i++ {
  353 + rtype := cfg.Reward[i*2]
  354 + rnum := cfg.Reward[i*2+1]
  355 + r1,r2,r3,r4,r5,r6 :=uinfo.RewardUser(rtype,rnum,req.Gameid,req.Channel)
  356 + if resp.Data.Lv != r1 {
  357 + resp.Data.Lv = r1
  358 + }
  359 + resp.Data.Rewardstar += r2
  360 + resp.Data.Chuiitem += r3
  361 + resp.Data.Shuaitem += r4
  362 + resp.Data.Swapitem += r5
  363 + resp.Data.Eliminitem += r6
  364 +
  365 + }
  366 +
  367 + return nil
  368 +}
  369 +
  370 +func (uinfo *UserData) RewardUser(rtype int,num int,gameid string,channel string) (int,int,int,int,int,int){
  371 + switch rtype {
  372 + case REWARDTYPE_STAR:
  373 + return 0,num,0,0,0,0
  374 + case REWARDTYPE_CHUI:
  375 + return 0,0,num,0,0,0
  376 + case REWARDTYPE_SHUA:
  377 + return 0,0,0,num,0,0
  378 + case REWARDTYPE_SWAP:
  379 + return 0,0,0,0,num,0
  380 + case REWARDTYPE_ELIMITE:
  381 + return 0,0,0,0,0,num
  382 + case REWARDTYPE_EXP:
  383 + isup := uinfo.AddUserExp(num)
  384 + if isup {
  385 + return uinfo.Lv,0,0,0,0,0
  386 + }else {
  387 + return 0,0,0,0,0,0
  388 + }
  389 + case REWARDTYPE_GOLD:
  390 + _,err :=AddCoinToSdk(uinfo.Userid,num,gameid,channel,100)
  391 + if err != nil {
  392 + logger.Error("RewardUser failer err=%v",err)
  393 + }
  394 + //uinfo.RealGold =
  395 + uinfo.RealGold += num
  396 + default:
  397 + return 0, 0, 0, 0, 0, 0
  398 + }
  399 + return 0, 0, 0, 0, 0, 0
  400 +}
  401 +
47 402 func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) error{
48 403  
49 404 var initdata UserData
... ... @@ -80,10 +435,52 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) error{
80 435 resp.Data.Walletgold = initdata.RealGold
81 436  
82 437 err := SaveUserInfo(&initdata)
  438 + if err != nil {
  439 + logger.Error("InitUserInfo err=%v",err)
  440 + return err
  441 + }
  442 +
  443 + //初始化一下玩家的任务与成就数据数据
  444 + err = InitTaskAndAchievement(uuid)
83 445  
84 446 return err
85 447 }
86 448  
  449 +func InitTaskAndAchievement(uuid int) error{
  450 + //先初始化任务
  451 + tasklist := new(TaskList)
  452 + for _,val := range jsonconf.GetJsonConf().TaskConfig {
  453 + var tmp TaskListDesc
  454 + tmp.Taskstatus = 1
  455 + tmp.Taskid = val.Id
  456 + tmp.Taskprogress = 0
  457 + tasklist.Taskdata = append(tasklist.Taskdata,tmp)
  458 + }
  459 +
  460 + err := SaveTaskInfo(uuid,1,tasklist)
  461 + if err != nil {
  462 + logger.Error("InitTaskAndAchievement err=%v",err)
  463 + return err
  464 + }
  465 +
  466 + achievelist := new(TaskList)
  467 + for _,val := range jsonconf.GetJsonConf().AchieventConfig {
  468 + var tmp TaskListDesc
  469 + tmp.Taskstatus = 1
  470 + tmp.Taskid = val.Id
  471 + tmp.Taskprogress = 0
  472 + tasklist.Taskdata = append(tasklist.Taskdata,tmp)
  473 + }
  474 +
  475 + err = SaveTaskInfo(uuid,2,achievelist)
  476 + if err != nil {
  477 + logger.Error("InitTaskAndAchievement err=%v",err)
  478 + return err
  479 + }
  480 +
  481 + return nil
  482 +}
  483 +
87 484 //计算当日可提取次数
88 485 func (u *UserData) CalcTotalCnt() int {
89 486 maxtime := 0
... ... @@ -247,6 +644,44 @@ func AddWithDrawList(uuid int,data *WithDrawRecord) error {
247 644  
248 645 }
249 646  
  647 +//返回是否升级
  648 +func (uinfo* UserData) AddUserExp(num int) bool {
  649 + totalexp := num
  650 + isup := false
  651 + for {
  652 + lvcfg := GetUserLvConfig(uinfo.Lv)
  653 + if lvcfg == nil {
  654 + logger.Error("AddUserExp fail lv=%v",uinfo.Lv)
  655 + break
  656 + }
  657 + //判断下是否满级了
  658 + nexcfg := GetUserLvConfig(uinfo.Lv+1)
  659 + if nexcfg == nil {
  660 + //已经满级了
  661 + uinfo.Exp += totalexp
  662 + break
  663 + }
  664 +
  665 + //计算一下当前升级需要剩下的
  666 +
  667 + needexp := lvcfg.Exp - uinfo.Exp
  668 + if totalexp < needexp {
  669 + //不够升级的
  670 + uinfo.Exp += totalexp
  671 + break
  672 + }else {
  673 + //够升级的 升一级
  674 + uinfo.Lv ++
  675 + isup = true
  676 + totalexp -= needexp
  677 + uinfo.Exp = 0
  678 + continue
  679 + }
  680 + }
  681 +
  682 + return isup
  683 +}
  684 +
250 685 func AddCoinToSdk(uuid int,goldnum int,gameid string,channel string,atype int) (int,error) {
251 686 //暂时先不对接 接口调通遗憾对接后台
252 687 return 0,nil
... ...
src/HttpServer/logic/httpserver.go
... ... @@ -47,13 +47,59 @@ func startServerHttpServe() {
47 47 http.HandleFunc("/eliminatestar/getcash", Getcash) //提现
48 48 http.HandleFunc("/eliminatestar/getcashrecord", Getcashrecord) //提现记录列表
49 49 http.HandleFunc("/eliminatestar/onlinentf", Onlinentf) //在线通知
50   - http.HandleFunc("/eliminatestar/updatetaskandachieve", Updatetaskandachieve) //在线通知
  50 + http.HandleFunc("/eliminatestar/updatetaskandachieve", Updatetaskandachieve) //上报任务事件进度
  51 + http.HandleFunc("/eliminatestar/querytaskinfo", Querytaskinfo) //拉取任务或者成就列表
  52 + http.HandleFunc("/eliminatestar/gettaskreward", Gettaskreward) //领取任务或者成就奖励
51 53  
52 54  
53 55 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil)
54 56 CheckErr(err)
55 57 }
56 58  
  59 +
  60 +func Gettaskreward(w http.ResponseWriter, r *http.Request) {
  61 +
  62 + Uuid := 0
  63 + if len(r.Header) > 0 {
  64 + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid"))
  65 + }
  66 +
  67 + if Uuid == 0 {
  68 + SetHeader(w)
  69 + //logger.Error("Uuid is nil!")
  70 + return
  71 + }
  72 + result, _ := ioutil.ReadAll(r.Body)
  73 + r.Body.Close()
  74 +
  75 + s := string(result)
  76 + logger.Info("Gettaskreward , body:%v,uuid=%v", s, Uuid)
  77 +
  78 + HandlerGettaskreward(w, s, Uuid)
  79 +}
  80 +
  81 +func Querytaskinfo(w http.ResponseWriter, r *http.Request) {
  82 +
  83 + Uuid := 0
  84 + if len(r.Header) > 0 {
  85 + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid"))
  86 + }
  87 +
  88 + if Uuid == 0 {
  89 + SetHeader(w)
  90 + //logger.Error("Uuid is nil!")
  91 + return
  92 + }
  93 + result, _ := ioutil.ReadAll(r.Body)
  94 + r.Body.Close()
  95 +
  96 + s := string(result)
  97 + logger.Info("Querytaskinfo , body:%v,uuid=%v", s, Uuid)
  98 +
  99 + HandlerQuerytaskinfo(w, s, Uuid)
  100 +}
  101 +
  102 +
57 103 func Updatetaskandachieve(w http.ResponseWriter, r *http.Request) {
58 104  
59 105 Uuid := 0
... ...
src/HttpServer/logic/logic.go
... ... @@ -202,6 +202,126 @@ func HandlerGetcash(w http.ResponseWriter, data string, uuid int) {
202 202  
203 203 }
204 204  
  205 +
  206 +
  207 +func HandlerGettaskreward(w http.ResponseWriter, data string, uuid int) {
  208 + SetHeader(w)
  209 + var resp GettaskrewardResp
  210 + resp.Code = 0
  211 + var rdata GettaskrewardReq
  212 + err := json.Unmarshal([]byte(data), &rdata)
  213 + for {
  214 + if err != nil {
  215 + logger.Info("json decode HandlerGettaskreward data failed:%v,for:%v", err, data)
  216 + resp.Message = "网络错误"
  217 + resp.Code = ERROR_JSONUNMASH_ERROR
  218 + break
  219 + }
  220 + uinfo,err := GetUserInfo(uuid)
  221 + if err != nil || uinfo == nil{
  222 + logger.Error("redis failed err=%v", err)
  223 + resp.Message = "服务器错误"
  224 + resp.Code = ERROR_SRV_ERROR
  225 + break
  226 + }
  227 +
  228 + //需要先计算出任务或者成就
  229 + var tasklist *TaskList
  230 + //先查询一下当前的任务数据
  231 + tasklist,err = GetTaskInfo(uuid,rdata.Tasktype)
  232 + if err != nil || tasklist==nil{
  233 + logger.Error("GetTaskInfo failed err=%v", err)
  234 + resp.Message = "服务器错误"
  235 + resp.Code = ERROR_SRV_ERROR
  236 + break
  237 + }
  238 +
  239 +
  240 + err = uinfo.HandleGetTaskReward(&rdata,&resp,tasklist)
  241 + if err != nil {
  242 + logger.Error("HandleGetTaskReward failed err=%v", err)
  243 + resp.Message = "服务器错误"
  244 + resp.Code = ERROR_SRV_ERROR
  245 + break
  246 + }
  247 +
  248 + //保存数据
  249 + SaveUserInfo(uinfo)
  250 + SaveTaskInfo(uinfo.Userid,rdata.Tasktype,tasklist)
  251 +
  252 + resp.Code = ERROR_OK
  253 + break
  254 + }
  255 +
  256 + //回包
  257 + respstr, _ := json.Marshal(&resp)
  258 + fmt.Fprint(w, string(respstr))
  259 +
  260 +}
  261 +
  262 +
  263 +
  264 +func HandlerQuerytaskinfo(w http.ResponseWriter, data string, uuid int) {
  265 + SetHeader(w)
  266 + var resp QuerytaskinfoResp
  267 + resp.Code = 0
  268 + var rdata QuerytaskinfoReq
  269 + err := json.Unmarshal([]byte(data), &rdata)
  270 + for {
  271 + if err != nil {
  272 + logger.Info("json decode HandlerQuerytaskinfo data failed:%v,for:%v", err, data)
  273 + resp.Message = "网络错误"
  274 + resp.Code = ERROR_JSONUNMASH_ERROR
  275 + break
  276 + }
  277 + uinfo,err := GetUserInfo(uuid)
  278 + if err != nil || uinfo == nil{
  279 + logger.Error("redis failed err=%v", err)
  280 + resp.Message = "服务器错误"
  281 + resp.Code = ERROR_SRV_ERROR
  282 + break
  283 + }
  284 +
  285 + //需要先计算出任务或者成就
  286 + var tasklist *TaskList
  287 + //先查询一下当前的任务数据
  288 + tasklist,err = GetTaskInfo(uuid,rdata.Tasktype)
  289 + if err != nil || tasklist==nil{
  290 + logger.Error("redis failed err=%v", err)
  291 + resp.Message = "服务器错误"
  292 + resp.Code = ERROR_SRV_ERROR
  293 + break
  294 + }
  295 +
  296 +
  297 +
  298 + if rdata.Tasktype == 1 {
  299 + uinfo.CalcTaskList(tasklist)
  300 + }else if rdata.Tasktype == 2 {
  301 + tasklist = uinfo.CalcAchieveList(tasklist)
  302 + }else {
  303 + uinfo.CalcTaskList(tasklist)
  304 + }
  305 +
  306 + if tasklist == nil {
  307 + logger.Error("redis failed err=%v", err)
  308 + resp.Message = "服务器错误"
  309 + resp.Code = ERROR_SRV_ERROR
  310 + break
  311 + }
  312 +
  313 + resp.Data.Taskdata = append(resp.Data.Taskdata,tasklist.Taskdata...)
  314 +
  315 + resp.Code = ERROR_OK
  316 + break
  317 + }
  318 +
  319 + //回包
  320 + respstr, _ := json.Marshal(&resp)
  321 + fmt.Fprint(w, string(respstr))
  322 +
  323 +}
  324 +
205 325 func HandlerUpdatetaskandachieve(w http.ResponseWriter, data string, uuid int) {
206 326 SetHeader(w)
207 327 var resp UpdatetaskResp
... ... @@ -368,6 +488,7 @@ func HandlerDrawguangold(w http.ResponseWriter, data string, uuid int) {
368 488 }
369 489  
370 490 uinfo.GetFromGuanCnt ++
  491 + uinfo.Achieve.SumGetGuan ++
371 492 //
372 493 mcfg := jsonconf.GetMoneyBoxCfg(uinfo.Lv)
373 494 if mcfg==nil {
... ... @@ -451,6 +572,7 @@ func HandlerGetguangold(w http.ResponseWriter, data string, uuid int) {
451 572 }
452 573  
453 574 resp.Data.Guangold = uinfo.GuanGold
  575 + uinfo.Task.GetGuanGold += rdata.Goldnum
454 576  
455 577 SaveUserInfo(uinfo)
456 578  
... ...
src/common/redis/def.go
... ... @@ -3,5 +3,7 @@ package redis
3 3 const (
4 4 USER_DATA_KEY = "STARSTAR_USER_DATA_KEY" //玩家数据
5 5 USER_WITHDRAW_RECORDLIST = "STARSTAR_USER_WITHDRAW_RECORDLIST" //玩家提现记录
  6 + USER_TASKINFO_LIST = "STARSTAR_USER_TASKINFO_LIST" //任务列表数据缓存
  7 + USER_ACHIEVEMENTINFO_LIST = "STARSTAR_USER_ACHIEVEMENTINFO_LIST" //成就列表数据缓存
6 8  
7 9 )
... ...