diff --git a/modules/gourmet/api_createorder.go b/modules/gourmet/api_createorder.go index f1cae9bc8..753b8b39b 100644 --- a/modules/gourmet/api_createorder.go +++ b/modules/gourmet/api_createorder.go @@ -24,8 +24,9 @@ func (this *apiComp) CreateOrder(session comm.IUserSession, req *pb.GourmetCreat var ( res []*cfg.Gameatn costTime int32 + szTime map[int32]int32 // 记录每个类型的订单耗时 key 是技能组type value 订单耗时 ) - + szTime = make(map[int32]int32, 0) code = this.CreateOrderCheck(session, req) if code != pb.ErrorCode_Success { return // 参数校验失败直接返回 @@ -35,18 +36,44 @@ func (this *apiComp) CreateOrder(session comm.IUserSession, req *pb.GourmetCreat code = pb.ErrorCode_DBError return } + // 记录每个食材耗时 + for k, v := range _gourmet.Skill { + var _time int32 + // 计算出需要的时间 + _skillCfg := this.module.configure.GetGourmetConfigData(k, v) + _time += _skillCfg.Needtime + // 高效制作技能 + for k, v := range _gourmet.SpecialSkill { + specalSkill := this.module.configure.GetGourmetConfigData(k, v) + _time += specalSkill.Needtime + } + szTime[k] = _time + } + if !utils.IsToday(_gourmet.Ctime) { // 跨天了 + _gourmet.Ctime = time.Now().Unix() + _gourmet.OrderCostTime = 0 + } for _, order := range req.Order { if order.FoodCount == 0 { continue } - foodtype := order.FoodType - // 获取技能等级 - skillLv := _gourmet.Skill[foodtype] - // 计算出需要的时间 - _skillCfg := this.module.configure.GetGourmetConfigData(foodtype, skillLv) - costTime += _skillCfg.Needtime * order.FoodCount + if v, ok := szTime[order.FoodType]; ok { + costTime += v * order.FoodCount + } } + + // 校验时间 + cfgCom := this.module.configure.GetGlobalConf() // 获取总的下单时长 + if cfgCom == nil { + return + } + _gourmet.OrderCostTime += costTime + if cfgCom.Gourmet < _gourmet.OrderCostTime { // 大于总时长是不允许的 + code = pb.ErrorCode_GourmetMoreOrderTime + return + } + if _gourmet.Foods == nil { // 队列数据为nil 直接将订单数据给ta _gourmet.Foods = req.Order } else { @@ -64,49 +91,42 @@ func (this *apiComp) CreateOrder(session comm.IUserSession, req *pb.GourmetCreat } } } - - if _gourmet.CookingFood == nil || (_gourmet.CookingFood != nil && _gourmet.CookingFood.ETime == 0) { - if _gourmet.Ctime == 0 { - _gourmet.Ctime = time.Now().Unix() - } - if !utils.IsToday(_gourmet.Ctime) { - _gourmet.Ctime = time.Now().Unix() - _gourmet.OrderCostTime = 0 - } - for _, v := range _gourmet.Foods { - if v.FoodCount > 0 { - v.FoodCount-- - // 获取生产时间 - _skillCfg := this.module.configure.GetGourmetConfigData(v.FoodType, _gourmet.Skill[v.FoodType]) - _gourmet.CookingFood = &pb.Cooking{ - FoodType: v.FoodType, - ETime: time.Now().Unix() + int64(_skillCfg.Needtime), - STime: time.Now().Unix() - int64(_skillCfg.Needtime), - } - break - } - } - - } - // 計算耗時 + // 重新计算时间 for _, v := range _gourmet.Foods { - if v.FoodCount > 0 { - _skillCfg := this.module.configure.GetGourmetConfigData(v.FoodType, _gourmet.Skill[v.FoodType]) - v.CookTime = _skillCfg.Needtime * v.FoodCount + if v.FoodCount == 0 { + continue + } + if v1, ok := szTime[v.FoodType]; ok { + v.CookTime = v1 * v.FoodCount + costTime += v.CookTime } } if _gourmet.CookingFood != nil && _gourmet.CookingFood.ETime == 0 { _gourmet.CookingFood = nil } - // 获取总的下单时长 - cfgCom := this.module.configure.GetGlobalConf() - if cfgCom == nil { - return - } - if cfgCom.Gourmet < _gourmet.OrderCostTime+costTime { // 大于总时长是不允许的 - code = pb.ErrorCode_GourmetMoreOrderTime - return + if _gourmet.CookingFood == nil { + if _gourmet.Ctime == 0 { + _gourmet.Ctime = time.Now().Unix() + } + + for _, v := range _gourmet.Foods { + if v.FoodCount > 0 { + v.FoodCount-- + v.CookTime = v.FoodCount * szTime[v.FoodType] + // 获取生产时间 + _gourmet.CookingFood = &pb.Cooking{ + FoodType: v.FoodType, + ETime: time.Now().Unix() + int64(szTime[v.FoodType]), + STime: time.Now().Unix(), + } + if v.FoodCount == 0 { + v.CookTime = 0 + } + break + } + } } + if code = this.module.ConsumeRes(session, res, true); code != pb.ErrorCode_Success { // 消耗校验 return } @@ -114,11 +134,13 @@ func (this *apiComp) CreateOrder(session comm.IUserSession, req *pb.GourmetCreat if code = this.module.DispenseRes(session, res, true); code != pb.ErrorCode_Success { // 真正消耗 return } + // 校验通过 写数据 mapData := make(map[string]interface{}, 0) mapData["foods"] = _gourmet.Foods mapData["orderCostTime"] = _gourmet.OrderCostTime mapData["cookingFood"] = _gourmet.CookingFood // 正在做的 + mapData["ctime"] = _gourmet.Ctime code = this.module.ModifyGourmetData(session.GetUserId(), mapData) session.SendMsg(string(this.module.GetType()), GourmetCreateOrderResp, &pb.GourmetCreateOrderResp{Data: _gourmet}) diff --git a/modules/gourmet/api_foodskilllv.go b/modules/gourmet/api_foodskilllv.go index 57405422e..aacd31ed9 100644 --- a/modules/gourmet/api_foodskilllv.go +++ b/modules/gourmet/api_foodskilllv.go @@ -48,10 +48,6 @@ func (this *apiComp) SkillLV(session comm.IUserSession, req *pb.GourmetSkillLvRe } _skillCfg := this.module.configure.GetGourmetConfigData(req.SkillType, skilllv) // 获取技能配置 - // code = this.module.CheckRes(session, _skillCfg.Consume) // 消耗检测 - // if code != pb.ErrorCode_Success { - // return - // } code = this.module.ConsumeRes(session, _skillCfg.SkillConsume, true) // 消耗检测 if code != pb.ErrorCode_Success { return diff --git a/modules/gourmet/api_getlist.go b/modules/gourmet/api_getlist.go index 10d194f6b..239deb20d 100644 --- a/modules/gourmet/api_getlist.go +++ b/modules/gourmet/api_getlist.go @@ -3,6 +3,7 @@ package gourmet import ( "go_dreamfactory/comm" "go_dreamfactory/pb" + "time" "google.golang.org/protobuf/proto" ) @@ -25,6 +26,9 @@ func (this *apiComp) GetList(session comm.IUserSession, req *pb.GourmetGetListRe code = pb.ErrorCode_DBError return } + if _gourmet.Ctime == 0 { + _gourmet.Ctime = time.Now().Unix() + } // 计算订单信息 this.module.modelGourmet.CalculationGourmet(session.GetUserId(), _gourmet) session.SendMsg(string(this.module.GetType()), GourmetGetListResp, &pb.GourmetGetListResp{Data: _gourmet}) diff --git a/modules/gourmet/model_gourmet.go b/modules/gourmet/model_gourmet.go index 896dc1239..88d8c9e1b 100644 --- a/modules/gourmet/model_gourmet.go +++ b/modules/gourmet/model_gourmet.go @@ -70,8 +70,27 @@ func (this *modelGourmet) CalculationGourmet(uid string, gourmet *pb.DBGourmet) bCooking bool costTime int32 curTime int32 + szTime map[int32]int32 ) mapData := make(map[string]interface{}, 0) + szTime = make(map[int32]int32, 0) + // 记录每个食材耗时 + for k, v := range gourmet.Skill { + var _time int32 + // 计算出需要的时间 + _skillCfg := this.module.configure.GetGourmetConfigData(k, v) + _time += _skillCfg.Needtime + // 高效制作技能 + for k, v := range gourmet.SpecialSkill { + specalSkill := this.module.configure.GetGourmetConfigData(k, v) + _time += specalSkill.Needtime + } + szTime[k] = _time + } + if !utils.IsToday(gourmet.Ctime) { + gourmet.Ctime = time.Now().Unix() + } + if gourmet.CookingFood != nil && gourmet.CookingFood.ETime > 0 { costTime = int32(time.Now().Unix() - gourmet.CookingFood.ETime) // 当前过去的时间 if costTime < 0 { // 没有完成 不做处理 @@ -81,38 +100,26 @@ func (this *modelGourmet) CalculationGourmet(uid string, gourmet *pb.DBGourmet) if gourmet.CookingFood == nil { gourmet.CookingFood = &pb.Cooking{} } + for _, order := range gourmet.Foods { if order.FoodCount == 0 { continue } foodtype := order.FoodType - // 获取技能等级 - skillLv := gourmet.Skill[foodtype] - + skillLv := gourmet.Skill[foodtype] // 获取技能等级 // 计算出需要的时间 - _skillCfg := this.module.configure.GetGourmetConfigData(foodtype, skillLv) // 技能配置表 _gourmetcfg := this.module.configure.GetGourmetConfigData(foodtype, skillLv) // 美食家配置表 for i := 0; i < int(order.FoodCount); i++ { - curTime += _skillCfg.Needtime - // 判断是不是第二天 - if gourmet.CookingFood.ETime == 0 { - gourmet.CookingFood.ETime = time.Now().Unix() - } - if !utils.IsToday(gourmet.CookingFood.ETime + int64(curTime)) { // 判断是不是今天 - // 跨天了 - gourmet.CookingFood.ETime = gourmet.CookingFood.ETime + int64(curTime) // 设置下单的时间 - gourmet.Ctime = gourmet.CookingFood.ETime // 设置创建订单时间 - gourmet.OrderCostTime = 0 // 清空当天的订单时长 - } + curTime += szTime[order.FoodType] order.FoodCount-- - gourmet.Items = this.module.configure.GetMultipleDropReward(_gourmetcfg.Using, _gourmetcfg.Propsgroup, gourmet.Items) // 获取掉落奖励 - + if order.FoodCount == 0 { + order.CookTime = 0 + } if curTime > costTime { - gourmet.OrderCostTime += int32(curTime - costTime) // 转时间戳 gourmet.CookingFood.FoodType = order.FoodType gourmet.CookingFood.ETime = time.Now().Unix() + int64(curTime-costTime) - gourmet.CookingFood.STime = time.Now().Unix() - int64(curTime-costTime) + gourmet.CookingFood.STime = gourmet.CookingFood.ETime - int64(szTime[order.FoodType]) bCooking = true // 记录下订单时间 @@ -120,15 +127,13 @@ func (this *modelGourmet) CalculationGourmet(uid string, gourmet *pb.DBGourmet) mapData["ctime"] = gourmet.Ctime break } - gourmet.OrderCostTime += curTime + gourmet.Items = this.module.configure.GetMultipleDropReward(_gourmetcfg.Using, _gourmetcfg.Propsgroup, gourmet.Items) // 获取掉落奖励 } + if bCooking { // 分配了正在製作的食物 break } } - if !bCooking { // 经过计算没有烹饪食物的时候 - gourmet.CookingFood = nil - } // 保存信息 mapData["foods"] = gourmet.Foods @@ -140,16 +145,21 @@ func (this *modelGourmet) CalculationGourmet(uid string, gourmet *pb.DBGourmet) // 技能等级提高了 重新计算订单时间(只对订单中数据有影响) func (this *modelGourmet) CalculationGourmetbySkiiLv(uid string, gourmet *pb.DBGourmet, skillType int32, skilllv int32) { mapData := make(map[string]interface{}, 0) + var totalTime int32 for _, v := range gourmet.Foods { if v.FoodCount > 0 && v.FoodType == skillType { _skillCfg := this.module.configure.GetGourmetConfigData(skillType, skilllv) if _skillCfg != nil { - v.CookTime = _skillCfg.Needtime * v.FoodCount + totalTime += _skillCfg.Needtime * v.FoodCount + v.CookTime += totalTime mapData["foods"] = gourmet.Foods } break } } + // 总时间也减少了 + gourmet.OrderCostTime += totalTime + mapData["orderCostTime"] = gourmet.OrderCostTime mapData["skill"] = gourmet.Skill this.module.ModifyGourmetData(uid, mapData) } @@ -157,11 +167,13 @@ func (this *modelGourmet) CalculationGourmetbySkiiLv(uid string, gourmet *pb.DBG // 升级高效制作技能重计算时间消耗 func (this *modelGourmet) CalculationSpecialSkillLv(uid string, gourmet *pb.DBGourmet, skillType int32, skilllv int32) { mapData := make(map[string]interface{}, 0) + var totalTime int32 for _, v := range gourmet.Foods { if v.FoodCount > 0 { _skillCfg := this.module.configure.GetGourmetConfigData(skillType, skilllv) if _skillCfg != nil { - v.CookTime += _skillCfg.Needtime * v.FoodCount + totalTime += _skillCfg.Needtime * v.FoodCount + v.CookTime += totalTime if v.CookTime < 0 { // 担心配置错误 为负数情况 所以这里做下判断 v.CookTime = 0 } @@ -169,6 +181,9 @@ func (this *modelGourmet) CalculationSpecialSkillLv(uid string, gourmet *pb.DBGo } } } + // 总时间也减少了 + gourmet.OrderCostTime += totalTime + mapData["orderCostTime"] = gourmet.OrderCostTime mapData["specialSkill"] = gourmet.SpecialSkill this.module.ModifyGourmetData(uid, mapData) } diff --git a/utils/time.go b/utils/time.go index e5ab49307..5c4a22562 100644 --- a/utils/time.go +++ b/utils/time.go @@ -18,3 +18,13 @@ func IsAfterWeek(d int64) bool { } return now.Sub(tt) >= time.Hour*24*7 } + +// 获取0点时间戳 +func GetZeroTime() int64 { + + currentTime := time.Now() + + startTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 0, 0, 0, 0, currentTime.Location()) + + return startTime.Unix() +}