2021-01-08 15:37:32 +08:00
|
|
|
|
package model
|
2020-09-01 10:34:11 +08:00
|
|
|
|
|
|
|
|
|
|
import (
|
2021-04-16 15:10:07 +08:00
|
|
|
|
"mayfly-go/base/global"
|
2020-09-01 10:34:11 +08:00
|
|
|
|
"strconv"
|
2021-04-16 15:10:07 +08:00
|
|
|
|
|
2020-09-01 10:34:11 +08:00
|
|
|
|
"strings"
|
|
|
|
|
|
"time"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
type Model struct {
|
2021-04-16 15:10:07 +08:00
|
|
|
|
Id uint64 `json:"id"`
|
|
|
|
|
|
CreateTime *time.Time `json:"createTime"`
|
|
|
|
|
|
CreatorId uint64 `json:"creatorId"`
|
|
|
|
|
|
Creator string `json:"creator"`
|
|
|
|
|
|
UpdateTime *time.Time `json:"updateTime"`
|
|
|
|
|
|
ModifierId uint64 `json:"modifierId"`
|
|
|
|
|
|
Modifier string `json:"modifier"`
|
2021-01-08 15:37:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 设置基础信息. 如创建时间,修改时间,创建者,修改者信息
|
2021-04-16 15:10:07 +08:00
|
|
|
|
func (m *Model) SetBaseInfo(account *LoginAccount) {
|
2021-01-08 15:37:32 +08:00
|
|
|
|
nowTime := time.Now()
|
|
|
|
|
|
isCreate := m.Id == 0
|
|
|
|
|
|
if isCreate {
|
|
|
|
|
|
m.CreateTime = &nowTime
|
|
|
|
|
|
}
|
|
|
|
|
|
m.UpdateTime = &nowTime
|
|
|
|
|
|
|
|
|
|
|
|
if account == nil {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
id := account.Id
|
|
|
|
|
|
name := account.Username
|
|
|
|
|
|
if isCreate {
|
|
|
|
|
|
m.CreatorId = id
|
|
|
|
|
|
m.Creator = name
|
|
|
|
|
|
}
|
|
|
|
|
|
m.Modifier = name
|
|
|
|
|
|
m.ModifierId = id
|
2020-09-01 10:34:11 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-01-08 15:37:32 +08:00
|
|
|
|
// 根据id获取实体对象。model需为指针类型(需要将查询出来的值赋值给model)
|
|
|
|
|
|
//
|
|
|
|
|
|
// 若error不为nil则为不存在该记录
|
|
|
|
|
|
func GetById(model interface{}, id uint64, cols ...string) error {
|
2021-04-21 10:22:09 +08:00
|
|
|
|
return global.Db.Select(cols).Where("id = ?", id).First(model).Error
|
2021-01-08 15:37:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 根据id更新model,更新字段为model中不为空的值,即int类型不为0,ptr类型不为nil这类字段值
|
2021-04-16 15:10:07 +08:00
|
|
|
|
func UpdateById(model interface{}) error {
|
|
|
|
|
|
return global.Db.Model(model).Updates(model).Error
|
2021-01-08 15:37:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 根据id删除model
|
2021-04-16 15:10:07 +08:00
|
|
|
|
func DeleteById(model interface{}, id uint64) error {
|
2021-05-08 18:00:33 +08:00
|
|
|
|
return global.Db.Delete(model, "id = ?", id).Error
|
2021-01-08 15:37:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 插入model
|
2021-04-16 15:10:07 +08:00
|
|
|
|
func Insert(model interface{}) error {
|
|
|
|
|
|
return global.Db.Create(model).Error
|
2021-01-08 15:37:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取满足model中不为空的字段值条件的所有数据.
|
|
|
|
|
|
//
|
2021-04-16 15:10:07 +08:00
|
|
|
|
// @param list为数组类型 如 var users []*User,可指定为非model结构体,即只包含需要返回的字段结构体
|
|
|
|
|
|
func ListBy(model interface{}, list interface{}, cols ...string) {
|
2021-04-21 10:22:09 +08:00
|
|
|
|
global.Db.Model(model).Select(cols).Where(model).Find(list)
|
2021-01-08 15:37:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取满足model中不为空的字段值条件的单个对象。model需为指针类型(需要将查询出来的值赋值给model)
|
|
|
|
|
|
//
|
|
|
|
|
|
// 若 error不为nil,则为不存在该记录
|
2021-04-16 15:10:07 +08:00
|
|
|
|
func GetBy(model interface{}, cols ...string) error {
|
2021-04-21 10:22:09 +08:00
|
|
|
|
return global.Db.Select(cols).Where(model).First(model).Error
|
2021-04-16 15:10:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取满足conditionModel中不为空的字段值条件的单个对象。model需为指针类型(需要将查询出来的值赋值给model)
|
|
|
|
|
|
// @param toModel 需要查询的字段
|
|
|
|
|
|
// 若 error不为nil,则为不存在该记录
|
|
|
|
|
|
func GetByConditionTo(conditionModel interface{}, toModel interface{}) error {
|
2021-04-21 10:22:09 +08:00
|
|
|
|
return global.Db.Model(conditionModel).Where(conditionModel).First(toModel).Error
|
2021-01-08 15:37:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-01 10:34:11 +08:00
|
|
|
|
// 获取分页结果
|
2021-04-16 15:10:07 +08:00
|
|
|
|
func GetPage(pageParam *PageParam, conditionModel interface{}, toModels interface{}, orderBy ...string) PageResult {
|
|
|
|
|
|
var count int64
|
2021-04-21 10:22:09 +08:00
|
|
|
|
global.Db.Model(conditionModel).Where(conditionModel).Count(&count)
|
2020-09-01 10:34:11 +08:00
|
|
|
|
if count == 0 {
|
2021-04-16 15:10:07 +08:00
|
|
|
|
return PageResult{Total: 0, List: []string{}}
|
|
|
|
|
|
}
|
|
|
|
|
|
page := pageParam.PageNum
|
|
|
|
|
|
pageSize := pageParam.PageSize
|
|
|
|
|
|
var orderByStr string
|
|
|
|
|
|
if orderBy == nil {
|
|
|
|
|
|
orderByStr = "id desc"
|
|
|
|
|
|
} else {
|
|
|
|
|
|
orderByStr = strings.Join(orderBy, ",")
|
2020-09-01 10:34:11 +08:00
|
|
|
|
}
|
2021-04-21 10:22:09 +08:00
|
|
|
|
global.Db.Model(conditionModel).Where(conditionModel).Order(orderByStr).Limit(pageSize).Offset((page - 1) * pageSize).Find(toModels)
|
2020-09-01 10:34:11 +08:00
|
|
|
|
return PageResult{Total: count, List: toModels}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 根据sql获取分页对象
|
2021-04-16 15:10:07 +08:00
|
|
|
|
func GetPageBySql(sql string, param *PageParam, toModel interface{}, args ...interface{}) PageResult {
|
|
|
|
|
|
db := global.Db
|
2020-09-01 10:34:11 +08:00
|
|
|
|
selectIndex := strings.Index(sql, "SELECT ") + 7
|
|
|
|
|
|
fromIndex := strings.Index(sql, " FROM")
|
|
|
|
|
|
selectCol := sql[selectIndex:fromIndex]
|
|
|
|
|
|
countSql := strings.Replace(sql, selectCol, "COUNT(*) AS total ", 1)
|
|
|
|
|
|
// 查询count
|
2021-04-16 15:10:07 +08:00
|
|
|
|
var count int
|
|
|
|
|
|
db.Raw(countSql, args...).Scan(&count)
|
|
|
|
|
|
if count == 0 {
|
|
|
|
|
|
return PageResult{Total: 0, List: []string{}}
|
2020-09-01 10:34:11 +08:00
|
|
|
|
}
|
|
|
|
|
|
// 分页查询
|
|
|
|
|
|
limitSql := sql + " LIMIT " + strconv.Itoa(param.PageNum-1) + ", " + strconv.Itoa(param.PageSize)
|
2021-04-16 15:10:07 +08:00
|
|
|
|
db.Raw(limitSql).Scan(toModel)
|
|
|
|
|
|
return PageResult{Total: int64(count), List: toModel}
|
2020-09-01 10:34:11 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-04-16 15:10:07 +08:00
|
|
|
|
func GetListBySql(sql string, params ...interface{}) []map[string]interface{} {
|
|
|
|
|
|
var maps []map[string]interface{}
|
|
|
|
|
|
global.Db.Raw(sql, params).Scan(&maps)
|
|
|
|
|
|
return maps
|
2020-09-01 10:34:11 +08:00
|
|
|
|
}
|