package meeting import ( "dashoo.cn/micro_libary/request" "errors" "github.com/gogf/gf/util/gconv" "lims_adapter/common" "lims_adapter/dao" "lims_adapter/model" "lims_adapter/service" ) // Service 会议室服务 type Service struct { Dao *dao.MeetingDao Tenant string } // NewSrv 服务初始化 func NewSrv(tenant string) Service { return Service{Dao: dao.NewMeetingDao(tenant), Tenant: tenant} } // List 会议室列表 func (m Service) List(req model.ListReq) ([]model.Meeting, int, error) { entityModel := m.Dao.M if req.Entity != nil { entity := new(model.MeetingReq) gconv.Struct(req.Entity, entity) if entity.Name != "" { entityModel = entityModel.WhereLike(m.Dao.Columns.Name, "%"+entity.Name+"%") } if entity.Code != "" { entityModel = entityModel.WhereLike(m.Dao.Columns.Code, "%"+entity.Code+"%") } if entity.Scale != 0 { entityModel = entityModel.Where(m.Dao.Columns.Scale, entity.Scale) } if entity.Location != "" { entityModel = entityModel.WhereLike(m.Dao.Columns.Location, "%"+entity.Location+"%") } } total, err := entityModel.Count() if err != nil { return nil, 0, err } if total == 0 { return nil, 0, nil } if req.Value != "" { entityModel = entityModel.Order(common.Snake2Orm(model.Meeting{}, req.Value), req.Type) } else { entityModel = entityModel.Order(service.DefaultSortField) } res, err := entityModel.Page(req.Current, req.Size).FindAll() if err != nil { return nil, 0, err } if res.IsEmpty() { return nil, 0, nil } list := make([]model.Meeting, 0) res.Structs(&list) return list, total, nil } func (m Service) Add(userInfo request.UserInfo, req model.MeetingReq) error { entity := new(model.Meeting) // 唯一校验 count, err := m.Dao.M.Fields(m.Dao.Columns.Id).Where(m.Dao.Columns.Name, req.Name).FindCount() if err != nil { return err } if count > 0 { return service.NameExistsErr } count, err = m.Dao.M.Fields(m.Dao.Columns.Id).Where(m.Dao.Columns.Code, req.Code).FindCount() if err != nil { return err } if count > 0 { return service.CodeExistsErr } gconv.Struct(req, entity) service.SetCreate(&userInfo, entity) _, err = m.Dao.M.Insert(entity) if err != nil { return err } return nil } func (m Service) Update(userInfo request.UserInfo, req model.MeetingReq) error { entity := new(model.Meeting) // 唯一校验 count, err := m.Dao.M.Fields(m.Dao.Columns.Id). Where(m.Dao.Columns.Name, req.Name).WhereNot(m.Dao.Columns.Id, req.Id). FindCount() if err != nil { return err } if count > 0 { return service.NameExistsErr } count, err = m.Dao.M.Fields(m.Dao.Columns.Id). Where(m.Dao.Columns.Code, req.Code).WhereNot(m.Dao.Columns.Id, req.Id). FindCount() if err != nil { return err } if count > 0 { return service.CodeExistsErr } gconv.Struct(req, entity) service.SetCreate(&userInfo, entity) _, err = m.Dao.M.WherePri(req.Id).Update(entity) if err != nil { return err } return nil } func (m Service) Get(id int) (*model.Meeting, error) { return m.Dao.WherePri(id).FindOne() } func (m Service) Delete(id int) error { // 判断是否有预约 exist, err := m.Dao.DB.Model("meeting_reservation").Where("EntityId", id). Where("Status", 1).Count() if err != nil { return err } if exist > 0 { return errors.New("当前存在正在预约的记录,请取消预约后重试!") } tx, err := m.Dao.DB.Begin() if err != nil { return err } _, err = m.Dao.WherePri(id).Delete() if err != nil { tx.Rollback() return err } _, err = m.Dao.DB.Model("meeting_reservation").Where("EntityId", id).Delete() if err != nil { tx.Rollback() return err } return tx.Commit() } // Exists 校验是否存在 func (m Service) Exists(id int) error { exist, err := m.Dao.M.WherePri(m.Dao.Columns.Id, id).Count() if err != nil { return err } if exist <= 0 { return errors.New("当前会议室不存在,请刷新后重试") } return nil } func (m Service) ShortList() ([]model.ShortMeeting, error) { list := make([]model.ShortMeeting, 0) res, err := m.Dao.M.Order(m.Dao.Columns.Sort, "DESC, ", m.Dao.Columns.CreatedAt, "DESC").FindAll() if err != nil { return nil, err } if res.IsEmpty() { return nil, nil } res.Structs(&list) return list, nil }