派遣优化

This commit is contained in:
wh_zcy 2023-03-03 16:29:48 +08:00
parent db587b9198
commit f01af25de3
7 changed files with 127 additions and 102 deletions

View File

@ -138,7 +138,9 @@ func (d *DispatchView) CreateView(t *model.TestCase) fyne.CanvasObject {
if err := service.GetPttService().SendToClient( if err := service.GetPttService().SendToClient(
t.MainType, t.MainType,
"weekreceive", "weekreceive",
&pb.DispatchWeekReciveReq{}, &pb.DispatchWeekReciveReq{
Idx: 1,
},
); err != nil { ); err != nil {
logrus.Error(err) logrus.Error(err)
return return

View File

@ -21,7 +21,7 @@ func (a *apiComp) Autoreceive(session comm.IUserSession, req *pb.DispatchAutoRec
return return
} }
tasks := a.module.modelDispatch.replaceFinishedTask(session.GetUserId(), d) tasks, oldTasks := a.module.modelDispatch.replaceFinishedTask(session.GetUserId(), d)
//更新公告任务 //更新公告任务
if err := a.module.modelDispatch.updateTasks(session.GetUserId(), d.Nb, tasks); err != nil { if err := a.module.modelDispatch.updateTasks(session.GetUserId(), d.Nb, tasks); err != nil {
@ -29,6 +29,19 @@ func (a *apiComp) Autoreceive(session comm.IUserSession, req *pb.DispatchAutoRec
return return
} }
//奖励
for _, t := range oldTasks {
gd, err := a.module.configure.getDispatchTaskConf(t.TaskId)
if err != nil {
break
}
a.module.DispenseRes(session, gd.Reward, true)
if t.Exaward {
a.module.DispenseRes(session, gd.Rewardex, true)
}
}
session.SendMsg(string(a.module.GetType()), "autoreceive", rsp) session.SendMsg(string(a.module.GetType()), "autoreceive", rsp)
return return
} }

View File

@ -15,13 +15,16 @@ func (a *apiComp) NoticeCheck(session comm.IUserSession, req *pb.DispatchNoticeR
func (a *apiComp) Notice(session comm.IUserSession, req *pb.DispatchNoticeReq) (code pb.ErrorCode, data proto.Message) { func (a *apiComp) Notice(session comm.IUserSession, req *pb.DispatchNoticeReq) (code pb.ErrorCode, data proto.Message) {
d := a.module.modelDispatch.getDBDispatch(session.GetUserId()) d := a.module.modelDispatch.getDBDispatch(session.GetUserId())
if d == nil {
code = pb.ErrorCode_DataNotFound
return
}
rsp := &pb.DispatchNoticeResp{} rsp := &pb.DispatchNoticeResp{}
if len(d.Nb.Tasks) == 0 { if len(d.Nb.Tasks) == 0 {
rsp.Dispatch = a.module.modelDispatch.initDispatch(session.GetUserId(), d) rsp.Dispatch = a.module.modelDispatch.initDispatch(session.GetUserId(), d)
} else { } else {
a.module.modelDispatch.updateNotice(session.GetUserId(),d) a.module.modelDispatch.updateNotice(session.GetUserId(), d)
rsp.Dispatch = d.Nb rsp.Dispatch = d.Nb
} }

View File

@ -23,11 +23,11 @@ func (a *apiComp) Receive(session comm.IUserSession, req *pb.DispatchReceiveReq)
} }
d := a.module.modelDispatch.getDBDispatch(session.GetUserId()) d := a.module.modelDispatch.getDBDispatch(session.GetUserId())
if d == nil { if d == nil {
code = pb.ErrorCode_DBError code = pb.ErrorCode_DataNotFound
return return
} }
tasks := a.module.modelDispatch.replaceTask(session.GetUserId(), req.TaskId, d) tasks, oldTaskIds := a.module.modelDispatch.replaceTask(session.GetUserId(), req.TaskId, d)
//更新公告任务 //更新公告任务
if err := a.module.modelDispatch.updateTasks(session.GetUserId(), d.Nb, tasks); err != nil { if err := a.module.modelDispatch.updateTasks(session.GetUserId(), d.Nb, tasks); err != nil {
@ -36,7 +36,7 @@ func (a *apiComp) Receive(session comm.IUserSession, req *pb.DispatchReceiveReq)
} }
//奖励 //奖励
for _, t := range d.Nb.Tasks { for _, t := range oldTaskIds {
if t.TaskId == req.TaskId { if t.TaskId == req.TaskId {
gd, err := a.module.configure.getDispatchTaskConf(t.TaskId) gd, err := a.module.configure.getDispatchTaskConf(t.TaskId)
if err != nil { if err != nil {

View File

@ -36,12 +36,18 @@ func (a *apiComp) Refresh(session comm.IUserSession, req *pb.DispatchRefreshReq)
return return
} }
} else { } else {
refreshCount := a.module.configure.GetGlobalConf().DispatchRefreshtimes
if d.Nb.RefreshCount >= refreshCount {
code = pb.ErrorCode_DispatchRefreshMax
return
}
//消耗金币 //消耗金币
money := a.module.configure.GetGlobalConf().DispatchCheckmoney money := a.module.configure.GetGlobalConf().DispatchCheckmoney
if code = a.module.CheckRes(session, []*cfg.Gameatn{money}); code != pb.ErrorCode_Success { if code = a.module.CheckRes(session, []*cfg.Gameatn{money}); code != pb.ErrorCode_Success {
return return
} }
if code = a.module.DispenseRes(session, []*cfg.Gameatn{money}, true); code != pb.ErrorCode_Success {
if code = a.module.ConsumeRes(session, []*cfg.Gameatn{money}, true); code != pb.ErrorCode_Success {
return return
} }
if err := a.module.modelDispatch.updateRefreshCount(session.GetUserId(), d.Nb); err != nil { if err := a.module.modelDispatch.updateRefreshCount(session.GetUserId(), d.Nb); err != nil {
@ -57,6 +63,7 @@ func (a *apiComp) Refresh(session comm.IUserSession, req *pb.DispatchRefreshReq)
return return
} }
a.module.Debug("刷新", log.Field{Key: "taskIds", Value: taskIds})
//更新公告任务 //更新公告任务
if err := a.module.modelDispatch.updateTasks(session.GetUserId(), d.Nb, taskIds); err != nil { if err := a.module.modelDispatch.updateTasks(session.GetUserId(), d.Nb, taskIds); err != nil {
a.module.Debug("更新公告失败", log.Field{Key: "uid", Value: session.GetUserId()}) a.module.Debug("更新公告失败", log.Field{Key: "uid", Value: session.GetUserId()})

View File

@ -8,13 +8,41 @@ import (
) )
func (a *apiComp) WeekreceiveCheck(session comm.IUserSession, req *pb.DispatchWeekReciveReq) (code pb.ErrorCode) { func (a *apiComp) WeekreceiveCheck(session comm.IUserSession, req *pb.DispatchWeekReciveReq) (code pb.ErrorCode) {
if req.Idx == 0 {
code = pb.ErrorCode_ReqParameterError
}
return return
} }
func (a *apiComp) Weekreceive(session comm.IUserSession, req *pb.DispatchWeekReciveReq) (code pb.ErrorCode, data proto.Message) { func (a *apiComp) Weekreceive(session comm.IUserSession, req *pb.DispatchWeekReciveReq) (code pb.ErrorCode, data proto.Message) {
if code = a.WeekreceiveCheck(session, req); code != pb.ErrorCode_Success {
return
}
rsp := &pb.DispatchWeekReciveResp{} rsp := &pb.DispatchWeekReciveResp{}
d := a.module.modelDispatch.getDBDispatch(session.GetUserId())
if d == nil {
code = pb.ErrorCode_DataNotFound
return
}
//派发奖励
wr := a.module.configure.GetGlobalConf().DispatchWeektaskreward
for i, v := range wr {
if req.Idx == int32(i+1) {
if d.Nb.WeekCount >= v.N {
//更新周任务状态
if err := a.module.modelDispatch.updateWeekstatus(session.GetUserId(), req.Idx, d.Nb); err != nil {
code = pb.ErrorCode_DBError
return
}
a.module.DispenseRes(session, v.G, true)
rsp.Idx = req.Idx
break
}
}
}
session.SendMsg(string(a.module.GetType()), "weekreceive", rsp) session.SendMsg(string(a.module.GetType()), "weekreceive", rsp)
return return
} }

View File

@ -3,6 +3,7 @@ package dispatch
import ( import (
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/lego/core" "go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/modules" "go_dreamfactory/modules"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/sys/configure" "go_dreamfactory/sys/configure"
@ -42,15 +43,13 @@ func (this *modelDispatch) initDispatch(uid string, dispatch *pb.DBDispatch) *pb
freeCount := this.module.configure.GetGlobalConf().DispatchFreecheck freeCount := this.module.configure.GetGlobalConf().DispatchFreecheck
ticketCount := this.module.configure.GetGlobalConf().DispatchNumoftimes ticketCount := this.module.configure.GetGlobalConf().DispatchNumoftimes
refreshCount := this.module.configure.GetGlobalConf().DispatchRefreshtimes
dis := &pb.DBDispatch{ dis := &pb.DBDispatch{
Uid: uid, Uid: uid,
Ticket: ticketCount, Ticket: ticketCount,
Nb: &pb.Noticeboard{ Nb: &pb.Noticeboard{
Lv: 1, //公告初始升级 Lv: 1, //公告初始升级
FreeCount: freeCount, FreeCount: freeCount,
Tasks: tasks, Tasks: tasks,
RefreshCount: refreshCount,
}, },
} }
@ -120,14 +119,6 @@ func (this *modelDispatch) getTasksWeight(uid string, noticeLv int32) []int32 {
// 随机任务 // 随机任务
func (this *modelDispatch) taskRandom(uid string, dispatch *pb.DBDispatch) (tasks []*pb.DispatchTask, err error) { func (this *modelDispatch) taskRandom(uid string, dispatch *pb.DBDispatch) (tasks []*pb.DispatchTask, err error) {
// dispatch := this.getDBDispatch(uid)
// if dispatch == nil {
// return nil, errors.New("no data")
// }
// if dispatch.Nb == nil {
// return nil, errors.New("notice is nil")
// }
if dispatch.Nb.Lv == 0 { if dispatch.Nb.Lv == 0 {
dispatch.Nb.Lv = 1 dispatch.Nb.Lv = 1
} }
@ -178,33 +169,21 @@ func (this *modelDispatch) taskRandom(uid string, dispatch *pb.DBDispatch) (task
} }
} else { } else {
tasks = dispatch.Nb.Tasks tasks = dispatch.Nb.Tasks
for i, v := range tasks { var randCount int
for i := 0; i < len(tasks); i++ {
//只随机未接取的任务 //只随机未接取的任务
if v.Status == 0 { if tasks[i].Status == 0 {
//删除 //删除
tasks = append(tasks[:i], tasks[i+1:]...) tasks = append(tasks[:i], tasks[i+1:]...)
i--
//追加一条随机任务 randCount++
ids := utils.RandomNumbers(1, len(tIds), 1)
if len(ids) <= 0 {
continue
}
taskId := ids[0]
taskConf, err := this.module.configure.getDispatchTaskConf(v.TaskId)
if err != nil {
continue
}
//公告持续截至时间
duration := configure.Now().Unix() + int64(taskConf.Taskcd)
tasks = append(tasks, &pb.DispatchTask{
TaskId: int32(taskId),
Duration: duration,
})
} else { } else {
tasks = append(tasks, v) tasks = append(tasks, tasks[i])
} }
i-- }
//追加随机
for i := 0; i < randCount; i++ {
tasks = append(tasks, this.addRandomTask(uid, dispatch))
} }
} }
@ -226,76 +205,56 @@ func (this *modelDispatch) addRandomTask(uid string, dispatch *pb.DBDispatch) *p
//公告持续截至时间 //公告持续截至时间
duration := configure.Now().Unix() + int64(taskConf.Taskcd) duration := configure.Now().Unix() + int64(taskConf.Taskcd)
// 任务截至时间
leftTime := configure.Now().Unix() + int64(taskConf.Tasktime)
return &pb.DispatchTask{ return &pb.DispatchTask{
TaskId: int32(taskId), TaskId: int32(taskId),
Duration: duration, Duration: duration,
LeftTime: leftTime,
} }
} }
// 替换指定的已完成任务 // 替换指定的已完成任务
func (this *modelDispatch) replaceTask(uid string, taskId int32, dispatch *pb.DBDispatch) (tasks []*pb.DispatchTask) { func (this *modelDispatch) replaceTask(uid string, taskId int32, dispatch *pb.DBDispatch) (tasks []*pb.DispatchTask, oldTaskIds []*pb.DispatchTask) {
tasks = dispatch.Nb.Tasks tasks = dispatch.Nb.Tasks
for i, v := range tasks { var randCount int
for i := 0; i < len(tasks); i++ {
//替换状态是完成的任务 //替换状态是完成的任务
if v.Status == 2 { if tasks[i].Status == 2 {
if taskId != v.TaskId { if taskId != tasks[i].TaskId {
continue continue
} }
oldTaskIds = append(oldTaskIds, tasks[i])
//删除 //删除
tasks = append(tasks[:i], tasks[i+1:]...) tasks = append(tasks[:i], tasks[i+1:]...)
i-- i--
randCount++
tasks = append(tasks, this.addRandomTask(uid, dispatch))
} else {
tasks = append(tasks, v)
} }
} }
for i := 0; i < randCount; i++ {
tasks = append(tasks, this.addRandomTask(uid, dispatch))
}
return return
} }
// 替换所有完成的任务 // 替换所有完成的任务
func (this *modelDispatch) replaceFinishedTask(uid string, dispatch *pb.DBDispatch) (tasks []*pb.DispatchTask) { func (this *modelDispatch) replaceFinishedTask(uid string, dispatch *pb.DBDispatch) (tasks []*pb.DispatchTask, oldtasks []*pb.DispatchTask) {
var randCount int
randomTaskIds := this.getTasksWeight(uid, dispatch.Nb.Lv)
for i, v := range dispatch.Nb.Tasks { for i, v := range dispatch.Nb.Tasks {
//替换状态是完成的任务 //替换状态是完成的任务
if v.Status == 2 { if v.Status == 2 {
//删除 //删除
oldtasks = append(oldtasks, v)
dispatch.Nb.Tasks = append(dispatch.Nb.Tasks[:i], dispatch.Nb.Tasks[i+1:]...) dispatch.Nb.Tasks = append(dispatch.Nb.Tasks[:i], dispatch.Nb.Tasks[i+1:]...)
i-- i--
randCount++
//追加一条随机任务
ids := utils.RandomNumbers(1, len(randomTaskIds), 1)
if len(ids) <= 0 {
continue
}
taskId := ids[0]
taskConf, err := this.module.configure.getDispatchTaskConf(v.TaskId)
if err != nil {
continue
}
//公告持续截至时间
duration := configure.Now().Unix() + int64(taskConf.Taskcd)
// 任务截至时间
leftTime := configure.Now().Unix() + int64(taskConf.Tasktime)
tasks = append(tasks, &pb.DispatchTask{
TaskId: int32(taskId),
Duration: duration,
LeftTime: leftTime,
})
} else { } else {
tasks = append(tasks, v) tasks = append(tasks, v)
} }
} }
for i := 0; i < randCount; i++ {
tasks = append(tasks, this.addRandomTask(uid, dispatch))
}
return return
} }
@ -384,9 +343,6 @@ func (this *modelDispatch) dispatch(uid string, taskId int32, heroIds []string,
} }
} }
//周任务数累加
disp.Nb.WeekCount++
update := map[string]interface{}{ update := map[string]interface{}{
"nb": disp.Nb, "nb": disp.Nb,
"ticket": disp.Ticket - 1, "ticket": disp.Ticket - 1,
@ -429,24 +385,14 @@ func (this *modelDispatch) updateTasks(uid string, noticeboard *pb.Noticeboard,
// 更新公告栏任务 // 更新公告栏任务
func (this *modelDispatch) updateNotice(uid string, dispatch *pb.DBDispatch) error { func (this *modelDispatch) updateNotice(uid string, dispatch *pb.DBDispatch) error {
for i, v := range dispatch.Nb.Tasks { var randCount int
if v.Status == 0 { for i := 0; i < len(dispatch.Nb.Tasks); i++ {
//判断到期时间 if dispatch.Nb.Tasks[i].Status == 1 {
if v.Duration != 0 && v.Duration <= configure.Now().Unix() { if dispatch.Nb.Tasks[i].LeftTime != 0 &&
//替换到期任务 dispatch.Nb.Tasks[i].LeftTime <= configure.Now().Unix() {
// dispatch.Nb.Tasks = this.replaceTask(uid, v.TaskId, dispatch)
dispatch.Nb.Tasks = append(dispatch.Nb.Tasks[:i], dispatch.Nb.Tasks[i+1:]...)
i--
//补一条
dispatch.Nb.Tasks = append(dispatch.Nb.Tasks, this.addRandomTask(uid, dispatch))
}
}
if v.Status == 1 {
if v.LeftTime != 0 && v.LeftTime <= configure.Now().Unix() {
//更改次任务状态为 //更改次任务状态为
v.Status = 2 //任务结束 dispatch.Nb.Tasks[i].Status = 2 //任务结束
v.LeftTime = 0 dispatch.Nb.Tasks[i].LeftTime = 0
//升级 //升级
conf, err := this.module.configure.getDispatchLvConf(dispatch.Nb.Lv) conf, err := this.module.configure.getDispatchLvConf(dispatch.Nb.Lv)
if err != nil { if err != nil {
@ -460,7 +406,33 @@ func (this *modelDispatch) updateNotice(uid string, dispatch *pb.DBDispatch) err
dispatch.Nb.WeekCount++ dispatch.Nb.WeekCount++
} }
} }
if dispatch.Nb.Tasks[i].Status == 0 {
this.module.Debug("uid", log.Field{Key: "duration", Value: dispatch.Nb.Tasks[i].Duration},
log.Field{Key: "now", Value: configure.Now().Unix()})
//判断到期时间
if dispatch.Nb.Tasks[i].Duration != 0 &&
dispatch.Nb.Tasks[i].Duration <= configure.Now().Unix() {
//替换到期任务
dispatch.Nb.Tasks = append(dispatch.Nb.Tasks[:i], dispatch.Nb.Tasks[i+1:]...)
i--
randCount++
}
}
}
for i := 0; i < randCount; i++ {
dispatch.Nb.Tasks = append(dispatch.Nb.Tasks, this.addRandomTask(uid, dispatch))
} }
return this.updateTasks(uid, dispatch.Nb, dispatch.Nb.Tasks) return this.updateTasks(uid, dispatch.Nb, dispatch.Nb.Tasks)
} }
// 更新周任务状态
func (this *modelDispatch) updateWeekstatus(uid string, idx int32, noticeboard *pb.Noticeboard) error {
noticeboard.WeekReceived = append(noticeboard.WeekReceived, idx)
update := map[string]interface{}{
"nb": noticeboard,
}
return this.Change(uid, update)
}