派遣优化

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(
t.MainType,
"weekreceive",
&pb.DispatchWeekReciveReq{},
&pb.DispatchWeekReciveReq{
Idx: 1,
},
); err != nil {
logrus.Error(err)
return

View File

@ -21,7 +21,7 @@ func (a *apiComp) Autoreceive(session comm.IUserSession, req *pb.DispatchAutoRec
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 {
@ -29,6 +29,19 @@ func (a *apiComp) Autoreceive(session comm.IUserSession, req *pb.DispatchAutoRec
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)
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) {
d := a.module.modelDispatch.getDBDispatch(session.GetUserId())
if d == nil {
code = pb.ErrorCode_DataNotFound
return
}
rsp := &pb.DispatchNoticeResp{}
if len(d.Nb.Tasks) == 0 {
rsp.Dispatch = a.module.modelDispatch.initDispatch(session.GetUserId(), d)
} else {
a.module.modelDispatch.updateNotice(session.GetUserId(),d)
a.module.modelDispatch.updateNotice(session.GetUserId(), d)
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())
if d == nil {
code = pb.ErrorCode_DBError
code = pb.ErrorCode_DataNotFound
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 {
@ -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 {
gd, err := a.module.configure.getDispatchTaskConf(t.TaskId)
if err != nil {

View File

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

View File

@ -3,6 +3,7 @@ package dispatch
import (
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go_dreamfactory/sys/configure"
@ -42,7 +43,6 @@ func (this *modelDispatch) initDispatch(uid string, dispatch *pb.DBDispatch) *pb
freeCount := this.module.configure.GetGlobalConf().DispatchFreecheck
ticketCount := this.module.configure.GetGlobalConf().DispatchNumoftimes
refreshCount := this.module.configure.GetGlobalConf().DispatchRefreshtimes
dis := &pb.DBDispatch{
Uid: uid,
Ticket: ticketCount,
@ -50,7 +50,6 @@ func (this *modelDispatch) initDispatch(uid string, dispatch *pb.DBDispatch) *pb
Lv: 1, //公告初始升级
FreeCount: freeCount,
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) {
// 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 {
dispatch.Nb.Lv = 1
}
@ -178,33 +169,21 @@ func (this *modelDispatch) taskRandom(uid string, dispatch *pb.DBDispatch) (task
}
} else {
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:]...)
//追加一条随机任务
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 {
tasks = append(tasks, v)
}
i--
randCount++
} else {
tasks = append(tasks, tasks[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)
// 任务截至时间
leftTime := configure.Now().Unix() + int64(taskConf.Tasktime)
return &pb.DispatchTask{
TaskId: int32(taskId),
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
for i, v := range tasks {
var randCount int
for i := 0; i < len(tasks); i++ {
//替换状态是完成的任务
if v.Status == 2 {
if taskId != v.TaskId {
if tasks[i].Status == 2 {
if taskId != tasks[i].TaskId {
continue
}
oldTaskIds = append(oldTaskIds, tasks[i])
//删除
tasks = append(tasks[:i], tasks[i+1:]...)
i--
tasks = append(tasks, this.addRandomTask(uid, dispatch))
} else {
tasks = append(tasks, v)
randCount++
}
}
for i := 0; i < randCount; i++ {
tasks = append(tasks, this.addRandomTask(uid, dispatch))
}
return
}
// 替换所有完成的任务
func (this *modelDispatch) replaceFinishedTask(uid string, dispatch *pb.DBDispatch) (tasks []*pb.DispatchTask) {
randomTaskIds := this.getTasksWeight(uid, dispatch.Nb.Lv)
func (this *modelDispatch) replaceFinishedTask(uid string, dispatch *pb.DBDispatch) (tasks []*pb.DispatchTask, oldtasks []*pb.DispatchTask) {
var randCount int
for i, v := range dispatch.Nb.Tasks {
//替换状态是完成的任务
if v.Status == 2 {
//删除
oldtasks = append(oldtasks, v)
dispatch.Nb.Tasks = append(dispatch.Nb.Tasks[:i], dispatch.Nb.Tasks[i+1:]...)
i--
//追加一条随机任务
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,
})
randCount++
} else {
tasks = append(tasks, v)
}
}
for i := 0; i < randCount; i++ {
tasks = append(tasks, this.addRandomTask(uid, dispatch))
}
return
}
@ -384,9 +343,6 @@ func (this *modelDispatch) dispatch(uid string, taskId int32, heroIds []string,
}
}
//周任务数累加
disp.Nb.WeekCount++
update := map[string]interface{}{
"nb": disp.Nb,
"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 {
for i, v := range dispatch.Nb.Tasks {
if v.Status == 0 {
//判断到期时间
if v.Duration != 0 && v.Duration <= 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() {
var randCount int
for i := 0; i < len(dispatch.Nb.Tasks); i++ {
if dispatch.Nb.Tasks[i].Status == 1 {
if dispatch.Nb.Tasks[i].LeftTime != 0 &&
dispatch.Nb.Tasks[i].LeftTime <= configure.Now().Unix() {
//更改次任务状态为
v.Status = 2 //任务结束
v.LeftTime = 0
dispatch.Nb.Tasks[i].Status = 2 //任务结束
dispatch.Nb.Tasks[i].LeftTime = 0
//升级
conf, err := this.module.configure.getDispatchLvConf(dispatch.Nb.Lv)
if err != nil {
@ -460,7 +406,33 @@ func (this *modelDispatch) updateNotice(uid string, dispatch *pb.DBDispatch) err
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)
}
// 更新周任务状态
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)
}