goweb: https://gitee.com/ichub/goweb/settings#index
接口
package generaliface
import (
"gitee.com/ichub/goweb/common/pagemsg/page"
"github.com/jinzhu/gorm"
)
type DaoIface[P int32 | int64 | string, E IBaseModel[P]] interface {
Insert(entity *E) (P, error)
DeleteById(pkey P) error
Save(entity *E) (P, error)
Update(entity *E) (P, error)
UpdateNotNull(pkey P, maps map[string]any) (P, error)
UpdateMap(pkey int64, maps map[string]interface{}) (P, error)
FindById(pkey P) (entity *E, found bool, err error)
FindByIds(pks string) (*[]E, error)
Query() *page.PageResult
Count() (int, error)
GetDB() *gorm.DB
}
package generaliface
type IBaseModel[P int32 | int64 | string] interface {
PkeyName() string
PkeyValue() P
TableName() string
}
basedao
package basedao
import (
"gitee.com/ichub/goconfig/common/base/basedto"
"gitee.com/ichub/goconfig/common/base/basemodel"
"gitee.com/ichub/goconfig/common/dbcontent"
"gitee.com/ichub/goweb/basemodel/baseiface"
"gitee.com/ichub/goweb/common/pagemsg/page"
"github.com/jinzhu/gorm"
"github.com/sirupsen/logrus"
"time"
)
type BaseDao[P int32 | int64 | string, E baseiface.IBaseModel[P]] struct {
basedto.BaseEntitySingle
*page.PageRequest
}
func NewBaseDao[P int32 | int64 | string, E baseiface.IBaseModel[P]]() *BaseDao[P, E] {
return &BaseDao[P, E]{
PageRequest: page.FindBeanPageRequest(),
}
}
func (this *BaseDao[P, E]) GetDB() *gorm.DB {
var db, err = dbcontent.GetDB()
if err != nil {
logrus.Error(err)
return nil
}
return db
}
func (this *BaseDao[P, E]) Insert(entity *E) (P, error) {
panic("implement me")
}
func (this *BaseDao[P, E]) DeleteById(pkey P) error {
var entity E
err := this.GetDB().Where(entity.PkeyName()+"=?", pkey).Delete(&entity).Error
return err
}
func (this *BaseDao[P, E]) Save(entity *E) (P, error) {
err := this.GetDB().Model(entity).Where((*entity).PkeyName()+"=?", (*entity).PkeyValue()).
Save(entity).Error
if err != nil {
logrus.Error(err.Error())
return (*entity).PkeyValue(), err
}
return (*entity).PkeyValue(), err
}
func (this *BaseDao[P, E]) Update(entity *E) (P, error) {
err := this.GetDB().Model(entity).Where((*entity).PkeyName()+"=?", (*entity).PkeyValue()).Updates(entity).Error
if err != nil {
logrus.Error(err.Error())
return (*entity).PkeyValue(), err
}
return (*entity).PkeyValue(), err
}
func (this *BaseDao[P, E]) UpdateNotNull(pkey P, maps map[string]interface{}) (P, error) {
//TODO implement me
panic("implement me")
}
func (this *BaseDao[P, E]) UpdateMap(pkey int64, maps map[string]interface{}) (P, error) {
//TODO implement me
panic("implement me")
}
func (this *BaseDao[P, E]) FindById(pkey P) (*E, bool, error) {
var entity = new(E)
db := this.GetDB().First(entity, pkey)
return entity, db.RecordNotFound(), db.Error
}
func (this *BaseDao[P, E]) FindByIds(pks string) (*[]E, error) {
var entity = new(E)
this.PageRequest.In((*entity).PkeyName(), []any{pks})
return nil, nil
}
func (this *BaseDao[P, E]) Query() *page.PageResult {
return this.PageRequest.Query(new(E), &[]E{})
}
func (this *BaseDao[P, E]) Count() (int, error) {
return this.PageRequest.Count(new(E))
}
func (this *BaseDao[E, P]) formatTime(sec int64) string {
timeLayout := "2006-01-02 15:04:05"
datetime := time.Unix(sec, 0).Format(timeLayout)
return datetime
}
func (this *BaseDao[P, E]) formatDate(sec int64) string {
timeLayout := "2006-01-02"
datetime := time.Unix(sec, 0).Format(timeLayout)
return datetime
}
func (this *BaseDao[E, P]) localTimeFormat(ptime time.Time) string {
timeLayout := "2006-01-02 15:04:05"
return ptime.Format(timeLayout)
}
func (this *BaseDao[E, P]) localTimeUTCFormat(ptime time.Time) string {
timeLayout := "2006-01-02 15:04:05"
return ptime.UTC().Format(timeLayout)
}
func (this *BaseDao[E, P]) localDateFormat(localDateInt basemodel.LocalDateInt) string {
timeLayout := "2006-01-02"
datetime := localDateInt.Time.Format(timeLayout)
return datetime
}
func (this *BaseDao[E, P]) localDatetimeFormat(localTimeInt basemodel.LocalTimeInt) string {
timeLayout := "2006-01-02 15:04:05"
datetime := localTimeInt.Time.Format(timeLayout)
return datetime
}
service
package baseservice
/*
@Title 文件名称: SysDeptDao.go
@Description 描述: DAO层SysDeptDao
@Author 作者: leijianming@163.com 时间(2024-01-24 17:15:32)
@Update 作者: leijianming@163.com 时间(2024-01-24 17:15:32)
*/
import (
"gitee.com/ichub/goweb/basemodel/basedao"
"gitee.com/ichub/goweb/basemodel/basedto"
)
type SysDeptService struct {
*basedao.BaseDao[int64, *basedto.SysDept]
}
func NewSysDeptService() *SysDeptService {
return &SysDeptService{
BaseDao: basedao.NewBaseDao[int64, *basedto.SysDept](),
}
}
entity
package basedto /* @Title 文件名称: SysDept.gomodel @Description 描述: 实体SysDept @Author 作者: leijianming@163.com 时间(2024-01-24 17:15:32) @Update 作者: leijianming@163.com 时间(2024-01-24 17:15:32) */ import ( "encoding/json" "fmt" "gitee.com/ichub/goconfig/common/base/basemodel" "github.com/jinzhu/gorm" "time" _ "time" ) /* 指定扩展结结构,单独存文件。生成时不会覆盖: */ //type SysDeptBase struct {ModelBase} /* 部门表 */ type SysDept struct { /* 部门id */ DeptId int64 `gorm:"column:dept_id;type:bigint(20);PRIMARY_KEY;comment:'部门id'" json:"dept_id,string"` /* 父部门id */ ParentId int64 `gorm:"column:parent_id;type:bigint(20);comment:'父部门id';default:0" json:"parent_id,string"` /* 祖级列表 */ Ancestors string `gorm:"column:ancestors;type:varchar(50);comment:'祖级列表'" json:"ancestors"` /* 部门名称 */ DeptName string `gorm:"column:dept_name;type:varchar(30);comment:'部门名称'" json:"dept_name"` /* 显示顺序 */ OrderNum int32 `gorm:"column:order_num;type:int(4);comment:'显示顺序';default:0" json:"order_nm"` /* 负责人 */ Leader string `gorm:"column:leader;type:varchar(20);comment:'负责人'" json:"leader"` /* 联系电话 */ Phone string `gorm:"column:phone;type:varchar(11);comment:'联系电话'" json:"phone"` /* 邮箱 */ Email string `gorm:"column:email;type:varchar(50);comment:'邮箱'" json:"email"` /* 部门状态(0正常 1停用) */ Status string `gorm:"column:status;type:char(1);comment:'部门状态(0正常 1停用)';default:\'0\'" json:"status"` /* 删除标志(0代表存在 2代表删除) */ DelFlag string `gorm:"column:del_flag;type:char(1);comment:'删除标志(0代表存在 2代表删除)';default:\'0\'" json:"del_flag"` /* 创建者 */ CreateBy string `gorm:"column:create_by;type:varchar(64);comment:'创建者'" json:"create_by"` /* 创建时间 */ CreateTime time.Time `gorm:"column:create_time;type:datetime;comment:'创建时间'" json:"create_time"` /* 更新者 */ UpdateBy string `gorm:"column:update_by;type:varchar(64);comment:'更新者'" json:"update_by"` /* 更新时间 */ UpdateTime time.Time `gorm:"column:update_time;type:datetime;comment:'更新时间'" json:"-"` } func NewSysDept() *SysDept { return &SysDept{} } /* gorm默认生成的表名是结构名+'s',所以必须以结构方法指定! */ func (entity *SysDept) TableName() string { return "sys_dept" } func (entity *SysDept) PkeyName() string { return "dept_id" } func (entity *SysDept) PkeyValue() int64 { return entity.DeptId }
testcase
func Test001(t *testing.T) { var s = NewSysDeptService() s.PageSize = 2 s.Query() logrus.Error(s) }
结果:
{
"code": 200,
"msg": "成功",
"page_size": 2,
"current": 1,
"total": 10,
"data": [
{
"dept_id": "100",
"parent_id": "0",
"ancestors": "0",
"dept_name": "若依科技",
"order_nm": 0,
"leader": "若依",
"phone": "15888888888",
"email": "ry@qq.com",
"status": "0",
"del_flag": "0",
"create_by": "admin",
"create_time": "2022-05-11T20:38:20+08:00",
"update_by": ""
},
{
"dept_id": "101",
"parent_id": "100",
"ancestors": "0,100",
"dept_name": "深圳总公司",
"order_nm": 1,
"leader": "若依",
"phone": "15888888888",
"email": "ry@qq.com",
"status": "0",
"del_flag": "0",
"create_by": "admin",
"create_time": "2022-05-11T20:38:20+08:00",
"update_by": ""
}
]
}