go_dreamfactory/modules/smithy/model_task.go
2023-03-02 18:54:56 +08:00

82 lines
2.0 KiB
Go

package smithy
import (
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/x/bsonx"
)
type modelTask struct {
modules.MCompModel
module *Smithy
}
func (this *modelTask) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
this.TableName = string(comm.TableSmithyTask)
err = this.MCompModel.Init(service, module, comp, options)
this.module = module.(*Smithy)
this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{
Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}},
})
return
}
func (this *modelTask) getTaskRecord(uid string) (*pb.DBTujianTask, error) {
tt := &pb.DBTujianTask{}
if err := this.Get(uid, tt); err != nil {
return tt, err
}
return tt, nil
}
func (this *modelTask) updateTaskRecord(uid string, taskId int32) error {
if !this.checkTaskStatus(uid, taskId) {
return comm.NewCustomError(pb.ErrorCode_SmithyTaskNoFinished)
}
dt, err := this.getTaskRecord(uid)
if err != nil {
if err == mongo.ErrNoDocuments {
tj := &pb.DBTujianTask{Uid: uid}
tj.Tasks = append(tj.Tasks, &pb.TujianTask{TaskId: taskId, Received: 2})
return this.Add(uid, tj)
}
return err
}
if dt.Uid != "" {
for _, v := range dt.Tasks {
if v.TaskId == taskId {
// 已存在 重复领取
if v.Received == 2 {
return comm.NewCustomError(pb.ErrorCode_SmithyTaskReceived)
} else {
update := map[string]interface{}{
"received": 2,
}
if err := this.Change(uid, update); err != nil {
return err
}
}
}
}
}
return nil
}
// 检查任务状态
func (this *modelTask) checkTaskStatus(uid string, taskId int32) bool {
conf := this.module.configure.GetSmithyTask(taskId)
if conf == nil {
return false
}
if ec := this.module.ModuleRtask.CheckCondi(uid, conf.TypeId); ec != pb.ErrorCode_Success {
return false
}
return true
}