package dao import ( "errors" "micro-document/api/members" "micro-document/internel/model" "micro-document/pkg/db" "time" "gorm.io/gorm" ) type membersDao struct{} var MembersDao = new(membersDao) func (membersDao) AddMember(req *members.AddMemberReq) (err error) { err = db.DocDB.Model(&model.Members{}).Create(&model.Members{ Uuid: req.Uuid, Name: req.Name, Brief: req.Brief, Introduction: req.Introduction, Operator: req.Operator, OperatorID: req.OperatorId, }).Error if err != nil { return errors.New("新增成员失败") } //同步增加成员管理,委员会,董事会信息 err = db.DocDB.Model(&model.Management{}).Create(&model.Management{ Uuid: req.Uuid, Name: req.Name, Brief: req.Brief, Introduction: req.Introduction, }).Error if err != nil { return errors.New("新增成员管理失败") } err = db.DocDB.Model(&model.BoardOfDirectors{}).Create(&model.BoardOfDirectors{ Uuid: req.Uuid, Name: req.Name, Brief: req.Brief, Introduction: req.Introduction, }).Error if err != nil { return errors.New("新增董事会失败") } err = db.DocDB.Model(&model.CommitteeAppointments{}).Create(&model.CommitteeAppointments{ Uuid: req.Uuid, Name: req.Name, }).Error if err != nil { return errors.New("新增委员会失败") } return } func (membersDao) EditMember(req *members.EditMemberReq) (err error) { err = db.DocDB.Model(&model.Members{}).Where("uuid = ?", req.Uuid).Updates(&model.Members{ Name: req.Name, Brief: req.Brief, Introduction: req.Introduction, Sort: req.Sort, Operator: req.Operator, OperatorID: req.OperatorId, UpdatedAt: time.Now(), }).Error return } func (membersDao) DeleteMember(req *members.DeleteMemberReq) (err error) { return db.DocDB.Transaction(func(tx *gorm.DB) error { // 检查所有相关记录的状态 if err := checkAllStatus(tx, req.Uuid); err != nil { return err } // 删除所有相关记录 if err := deleteAllRecords(tx, req.Uuid); err != nil { return err } return nil }) } // 检查所有记录状态 func checkAllStatus(tx *gorm.DB, uuid string) error { tables := []struct { model interface{} name string }{ {&model.Management{}, "成员管理"}, {&model.BoardOfDirectors{}, "董事会"}, {&model.CommitteeAppointments{}, "委员会"}, } for _, table := range tables { var count int64 err := tx.Model(table.model).Where("uuid = ? AND status = ?", uuid, 1).Count(&count).Error if err != nil { return errors.New("查询" + table.name + "失败") } if count > 0 { return errors.New("该" + table.name + "已上架,不允许删除") } } return nil } // 删除所有记录 func deleteAllRecords(tx *gorm.DB, uuid string) error { tables := []struct { model interface{} name string }{ {&model.Members{}, "成员"}, {&model.Management{}, "成员管理"}, {&model.BoardOfDirectors{}, "董事会"}, {&model.CommitteeAppointments{}, "委员会"}, } for _, table := range tables { err := tx.Model(table.model).Where("uuid = ?", uuid).Delete(table.model).Error if err != nil { return errors.New("删除" + table.name + "失败") } } return nil } func (membersDao) GetMemberList(req *members.GetMemberListReq) (data []model.Members, total int64, err error) { dbQuery := db.DocDB.Model(&model.Members{}) if req.Filterate != nil { if req.Filterate.Name != "" { dbQuery = dbQuery.Where("name like ?", "%"+req.Filterate.Name+"%") } } //数据查询 dbQuery.Count(&total) err = dbQuery.Scopes(db.Pagination(req.Page, req.PageSize)).Find(&data).Error if err != nil { return } return } // 通过uuid查询成员管理 func (membersDao) GetManagementByUuid(uuid string) (management model.Management, err error) { management = model.Management{} err = db.DocDB.Model(&model.Management{}).Where("uuid = ?", uuid).First(&management).Error if err != nil { return } return } // 通过uuid查询董事会 func (membersDao) GetBoardOfDirectorsByUuid(uuid string) (boardOfDirectors model.BoardOfDirectors, err error) { boardOfDirectors = model.BoardOfDirectors{} err = db.DocDB.Model(&model.BoardOfDirectors{}).Where("uuid = ?", uuid).First(&boardOfDirectors).Error if err != nil { return } return } // 通过uuid查询委员会 func (membersDao) GetCommitteeAppointmentsByUuid(uuid string) (committeeAppointments model.CommitteeAppointments, err error) { committeeAppointments = model.CommitteeAppointments{} err = db.DocDB.Model(&model.CommitteeAppointments{}).Where("uuid = ?", uuid).First(&committeeAppointments).Error if err != nil { return } return } // 编辑成员管理 func (membersDao) EditManagement(req *members.EditManagementReq) (err error) { err = db.DocDB.Model(&model.Management{}).Where("uuid = ?", req.Uuid).Updates(&model.Management{ Name: req.Name, Image: req.Image, Status: req.Status, Brief: req.Brief, Introduction: req.Introduction, IsSetting: 1, }).Error if err != nil { return errors.New("编辑成员管理失败") } //更新主表操作人员信息和时间 err = db.DocDB.Model(&model.Members{}).Where("uuid = ?", req.Uuid).Updates(&model.Members{ Operator: req.Operator, OperatorID: req.OperatorId, UpdatedAt: time.Now(), }).Error if err != nil { return errors.New("更新操作人员信息和时间失败") } return } // 编辑董事会 func (membersDao) EditBoardOfDirectors(req *members.EditBoardOfDirectorsReq) (err error) { err = db.DocDB.Model(&model.BoardOfDirectors{}).Where("uuid = ?", req.Uuid).Updates(&model.BoardOfDirectors{ Name: req.Name, Status: req.Status, Brief: req.Brief, Introduction: req.Introduction, IsSetting: 1, }).Error if err != nil { return errors.New("编辑董事会失败") } //更新主表操作人员信息和时间 err = db.DocDB.Model(&model.Members{}).Where("uuid = ?", req.Uuid).Updates(&model.Members{ Operator: req.Operator, OperatorID: req.OperatorId, UpdatedAt: time.Now(), }).Error if err != nil { return errors.New("更新操作人员信息和时间失败") } return } // 编辑委员会 func (membersDao) EditCommitteeAppointments(req *members.EditCommitteeAppointmentsReq) (err error) { err = db.DocDB.Model(&model.CommitteeAppointments{}).Where("uuid = ?", req.Uuid).Updates(&model.CommitteeAppointments{ Name: req.Name, Status: req.Status, AuditCommittee: req.AuditCommittee, CompensationCommittee: req.CompensationCommittee, NominatingCommittee: req.NominatingCommittee, IsSetting: 1, }).Error if err != nil { return errors.New("编辑委员会失败") } //更新主表操作人员信息和时间 err = db.DocDB.Model(&model.Members{}).Where("uuid = ?", req.Uuid).Updates(&model.Members{ Operator: req.Operator, OperatorID: req.OperatorId, UpdatedAt: time.Now(), }).Error if err != nil { return errors.New("更新操作人员信息和时间失败") } return }