case-api/api/dao/Case.go

215 lines
5.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package dao
import (
"case-api/api/model"
"case-api/api/requests"
"case-api/global"
"gorm.io/gorm"
"gorm.io/gorm/clause"
"time"
)
type CaseDao struct {
}
// GetCaseById 获取数据-id
func (r *CaseDao) GetCaseById(caseId int64) (m *model.Case, err error) {
err = global.Db.First(&m, caseId).Error
if err != nil {
return nil, err
}
return m, nil
}
// GetCasePreloadById 获取数据-加载全部关联-id
func (r *CaseDao) GetCasePreloadById(caseId int64) (m *model.Case, err error) {
err = global.Db.Preload(clause.Associations).First(&m, caseId).Error
if err != nil {
return nil, err
}
return m, nil
}
// DeleteCase 删除
func (r *CaseDao) DeleteCase(tx *gorm.DB, maps interface{}) error {
err := tx.Where(maps).Delete(&model.Case{}).Error
if err != nil {
return err
}
return nil
}
// DeleteCaseById 删除-id
func (r *CaseDao) DeleteCaseById(tx *gorm.DB, caseId int64) error {
if err := tx.Delete(&model.Case{}, caseId).Error; err != nil {
return err
}
return nil
}
// EditCase 修改
func (r *CaseDao) EditCase(tx *gorm.DB, maps interface{}, data interface{}) error {
err := tx.Model(&model.Case{}).Where(maps).Updates(data).Error
if err != nil {
return err
}
return nil
}
// EditCaseById 修改-id
func (r *CaseDao) EditCaseById(tx *gorm.DB, caseId int64, data interface{}) error {
err := tx.Model(&model.Case{}).Where("case_id = ?", caseId).Updates(data).Error
if err != nil {
return err
}
return nil
}
// GetCaseList 获取列表
func (r *CaseDao) GetCaseList(maps interface{}) (m []*model.Case, err error) {
err = global.Db.Where(maps).Find(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// GetCaseCount 获取数量
func (r *CaseDao) GetCaseCount(maps interface{}) (total int64, err error) {
err = global.Db.Model(&model.Case{}).Where(maps).Count(&total).Error
if err != nil {
return 0, err
}
return total, nil
}
// GetCaseListRand 获取列表-随机
func (r *CaseDao) GetCaseListRand(maps interface{}, limit int) (m []*model.Case, err error) {
err = global.Db.Where(maps).Order("rand()").Limit(limit).Find(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// AddCase 新增
func (r *CaseDao) AddCase(tx *gorm.DB, model *model.Case) (*model.Case, error) {
if err := tx.Create(model).Error; err != nil {
return nil, err
}
return model, nil
}
// GetCase 获取
func (r *CaseDao) GetCase(maps interface{}) (m *model.Case, err error) {
err = global.Db.Where(maps).First(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// GetCaseFormPastDay 获取过去天数是否有更新
func (r *CaseDao) GetCaseFormPastDay(maps interface{}, createdAt time.Time) (m *model.Case, err error) {
err = global.Db.Where(maps).
Where("created_at > ?", createdAt.Format("2006-01-02 15:04:05")).
First(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// GetCasePageSearch 获取列表-分页
func (r *CaseDao) GetCasePageSearch(req requests.GetCasePage, page, pageSize int) (m []*model.Case, total int64, err error) {
var totalRecords int64
// 构建查询条件
query := global.Db.Model(&model.Case{})
query = query.Where("project_id = ?", req.ProjectId)
// 项目
projectSubQuery := global.Db.Model(&model.Project{}).
//Where("project.project_id = case.project_id").
Where("project.project_id = ?", req.ProjectId).
Where("project.project_status = ?", 1)
query = query.Where("EXISTS (?)", projectSubQuery)
query = query.Where("case_status = ?", 1)
// 搜索关键字
if req.Keyword != "" {
keyword := "%" + req.Keyword + "%" //
// 病例名称
orQuery := global.Db.Model(&model.Case{}).Or("case_name LIKE ?", keyword)
// 作者
orQuery = orQuery.Or("case_author LIKE ?", keyword)
// 执行
query = query.Where(orQuery)
}
// 是否已参与0:全部 1:已参与 2:未参与)
if req.IsTakePart == 1 {
var userIds []int64
global.Db.Model(&model.User{}).
Select("user_id").
Where("mobile_encryption = (SELECT mobile_encryption FROM user WHERE user_id = ?)", req.UserId).
Find(&userIds)
caseUserSubQuery := global.Db.Model(&model.CaseUser{}).
Where("case_user.user_id IN (?)", userIds)
query = query.Where("EXISTS (?)", caseUserSubQuery)
}
if req.IsTakePart == 2 {
var userIds []int64
global.Db.Model(&model.User{}).
Select("user_id").
Where("mobile_encryption = (SELECT mobile_encryption FROM user WHERE user_id = ?)", req.UserId).
Find(&userIds)
caseUserSubQuery := global.Db.Model(&model.CaseUser{}).
Where("case_user.user_id IN (?)", userIds)
query = query.Where("NOT EXISTS (?)", caseUserSubQuery)
}
// 排序
query = query.Order("created_at desc")
// 查询总数量
if err = query.Count(&totalRecords).Error; err != nil {
return nil, 0, err
}
err = query.Scopes(model.Paginate(page, pageSize)).Find(&m).Error
if err != nil {
return nil, 0, err
}
return m, totalRecords, nil
}
// Inc 自增
func (r *CaseDao) Inc(tx *gorm.DB, caseId int64, field string, numeral int) error {
err := tx.Model(&model.Case{}).Where("case_id = ?", caseId).UpdateColumn(field, gorm.Expr(field+" + ?", numeral)).Error
if err != nil {
return err
}
return nil
}
// Dec 自减
func (r *CaseDao) Dec(tx *gorm.DB, caseId int64, field string, numeral int) error {
err := tx.Model(&model.Case{}).Where("case_id = ?", caseId).UpdateColumn(field, gorm.Expr(field+" - ?", numeral)).Error
if err != nil {
return err
}
return nil
}