package sociaty import ( "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/lego/sys/log" "go_dreamfactory/modules" "go_dreamfactory/pb" "go_dreamfactory/sys/configure" "sort" "strings" "go.mongodb.org/mongo-driver/mongo" ) type ModelSociatyLog struct { modules.MCompModel moduleSociaty *Sociaty service core.IService } func (this *ModelSociatyLog) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { this.TableName = comm.TableSociatyLog err = this.MCompModel.Init(service, module, comp, options) this.moduleSociaty = module.(*Sociaty) this.service = service return } // 记录日志 // tag 日志模板 sociatyId公会ID params 占位参数 func (this *ModelSociatyLog) addLog(tag Tag, sociatyId string, params ...string) error { var content string //日志 template switch tag { case Log_Add: content = string(Log_Add) count := strings.Count(content, "%s") if count != len(params) { return comm.NewCustomError(pb.ErrorCode_SociatyLogParams) } for i := 0; i < len(params); i++ { user := this.moduleSociaty.ModuleUser.GetUser(params[i]) if user != nil { content = strings.Replace(content, "%s", user.Name, 1) } } case Log_Quit: content = string(Log_Quit) count := strings.Count(content, "%s") if count != len(params) { return comm.NewCustomError(pb.ErrorCode_SociatyLogParams) } for i := 0; i < len(params); i++ { user := this.moduleSociaty.ModuleUser.GetUser(params[i]) if user != nil { content = strings.Replace(content, "%s", user.Name, 1) } } case Log_Job: content = string(Log_Job) count := strings.Count(content, "%s") if count != len(params) { return comm.NewCustomError(pb.ErrorCode_SociatyLogParams) } for i := 0; i < len(params); i++ { if i == 2 { var job string switch params[i] { case pb.SociatyJob_PRESIDENT.String(): job = "会长" case pb.SociatyJob_VICEPRESIDENT.String(): job = "副会长" case pb.SociatyJob_ADMIN.String(): job = "管理员" case pb.SociatyJob_MEMBER.String(): job = "成员" } content = strings.Replace(content, "%s", job, 1) } else { user := this.moduleSociaty.ModuleUser.GetUser(params[i]) if user != nil { content = strings.Replace(content, "%s", user.Name, 1) } } } case Log_Discharge: content = string(Log_Job) count := strings.Count(content, "%s") if count != len(params) { return comm.NewCustomError(pb.ErrorCode_SociatyLogParams) } for i := 0; i < len(params); i++ { user := this.moduleSociaty.ModuleUser.GetUser(params[i]) if user != nil { content = strings.Replace(content, "%s", params[i], 1) } } case Log_Upgrade: content = string(Log_Job) count := strings.Count(content, "%s") if count != len(params) { return comm.NewCustomError(pb.ErrorCode_SociatyLogParams) } for i := 0; i < len(params); i++ { content = strings.Replace(content, "%s", params[i], 1) } } if content != "" { log := &pb.DBSociatyLog{} if err := this.Get(sociatyId, log); err != nil { if err == mongo.ErrNoDocuments { var list []*pb.SociatyLog list = append(list, &pb.SociatyLog{ Content: content, Ctime: configure.Now().Unix(), }) err = this.Add(sociatyId, &pb.DBSociatyLog{ SociatyId: sociatyId, List: list, }) if err != nil { return err } return nil } return err } //update if log.List == nil { log.List = []*pb.SociatyLog{} } log.List = append(log.List, &pb.SociatyLog{ Content: content, Ctime: configure.Now().Unix(), }) update := map[string]interface{}{ "sociatyId": sociatyId, "list": log.List, } if err := this.Change(sociatyId, update); err != nil { return err } // 发消息到公会聊天 if module, err := this.service.GetModule(comm.ModuleChat); err == nil { if chat, ok := module.(comm.IChat); ok { chat.SendUnionChat(&pb.DBChat{ Channel: pb.ChatChannel_Union, Ctype: pb.ChatType_Text, UnionId: sociatyId, Content: content, }) } } } return nil } // 查询日志 func (this *ModelSociatyLog) logList(sociatyId string) (slist []*pb.SociatyLog) { sociatyLog := &pb.DBSociatyLog{} if err := this.Get(sociatyId, sociatyLog); err != nil { log.Error("公会日志列表", log.Field{Key: "sociatyId", Value: sociatyId}, log.Field{Key: "err", Value: err}) return nil } for _, l := range sociatyLog.List { slist = append(slist, &pb.SociatyLog{ Content: l.Content, Ctime: l.Ctime, }) } // 创建时间排序 降序 sort.SliceStable(slist, func(i, j int) bool { return slist[i].Ctime > slist[j].Ctime }) return } // 删除日志 func (this *ModelSociatyLog) logDelete(sociatyId string) error { return this.Del(sociatyId) }