Files
2022-01-11 10:41:46 +08:00

272 lines
7.5 KiB
Go

package service
import (
"SciencesServer/app/api/admin/model"
"SciencesServer/app/basic/controller"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/session"
"errors"
)
type Innovate struct {
*session.Admin
}
type InnovateHandle func(admin *session.Admin) *Innovate
type (
// InnovateInfo 服务信息
InnovateInfo struct {
ID string `json:"id"`
*model.ServiceInnovateInfo
Area string `json:"area"`
}
// InnovateDetail 服务详细信息
InnovateDetail struct {
ID string `json:"id"`
*model2.ServiceInnovate
KindID string `json:"kind_id"`
Tags []string `json:"tags"`
}
// InnovateParams 服务参数信息
InnovateParams struct {
ID, KindID uint64
Title, Content string
Tags []string
Sort int
}
// InnovateKindInfo 服务分类信息
InnovateKindInfo struct {
ID string `json:"id"`
*model.ServiceInnovateKindInfo
Area string `json:"area"`
}
// InnovateKindSelectInfo 服务分类筛选信息
InnovateKindSelectInfo struct {
ID string `json:"id"`
Title string `json:"title"`
}
// InnovateKindParams 服务分类参数信息
InnovateKindParams struct {
ID uint64
Title string
Sort int
}
)
// Instance 首页信息
func (c *Innovate) Instance(tenantID uint64, title string, kindID uint64, page, pageSize int) (*controller.ReturnPages, error) {
mServiceInnovate := model.NewServiceInnovate()
where := make([]*model2.ModelWhere, 0)
if c.TenantID > 0 {
where = append(where, model2.NewWhere("i.tenant_id", c.TenantID))
}
if tenantID > 0 {
where = append(where, model2.NewWhere("i.tenant_id", tenantID))
}
if title != "" {
where = append(where, model2.NewWhereLike("i.title", title))
}
if kindID > 0 {
where = append(where, model2.NewWhere("i.kind_id", kindID))
}
var count int64
out, err := mServiceInnovate.Innovate(page, pageSize, &count, where...)
if err != nil {
return nil, err
}
list := make([]*InnovateInfo, 0)
for _, v := range out {
list = append(list, &InnovateInfo{
ID: v.GetEncodeID(), ServiceInnovateInfo: v, Area: v.Area.FormatBasic(),
})
}
return &controller.ReturnPages{Data: list, Count: count}, nil
}
// Detail 详细信息
func (c *Innovate) Detail(id uint64) (*InnovateDetail, error) {
mServiceInnovate := model.NewServiceInnovate()
mServiceInnovate.ID = id
isExist, err := model2.First(mServiceInnovate.ServiceInnovate)
if err != nil {
return nil, err
} else if !isExist {
return nil, errors.New("操作错误,服务信息不存在或已被删除")
}
return &InnovateDetail{
ID: mServiceInnovate.GetEncodeID(),
ServiceInnovate: mServiceInnovate.ServiceInnovate,
KindID: (&model2.Model{ID: mServiceInnovate.KindID}).GetEncodeID(),
Tags: mServiceInnovate.GetTagAttribute(),
}, nil
}
// Form 数据操作
func (c *Innovate) Form(params *InnovateParams) error {
mServiceInnovate := model.NewServiceInnovate()
if params.ID > 0 {
mServiceInnovate.ID = params.ID
isExist, err := model2.FirstField(mServiceInnovate.ServiceInnovate, []string{"id", "tenant_id", "created_at"})
if err != nil {
return err
} else if !isExist {
return errors.New("操作错误,服务信息不存在或已被删除")
}
if c.TenantID > 0 && c.TenantID != mServiceInnovate.TenantID {
return errors.New("操作错误,无权限操作")
}
}
mServiceInnovate.KindID = params.KindID
mServiceInnovate.Title = params.Title
mServiceInnovate.Content = params.Content
mServiceInnovate.SetTagAttribute(params.Tags)
mServiceInnovate.Sort = params.Sort
if mServiceInnovate.ID > 0 {
return model2.Updates(mServiceInnovate.ServiceInnovate, mServiceInnovate.ServiceInnovate)
}
mServiceInnovate.TenantID = c.TenantID
return model2.Create(mServiceInnovate.ServiceInnovate)
}
// Delete 删除操作
func (c *Innovate) Delete(id uint64) error {
mServiceInnovate := model.NewServiceInnovate()
mServiceInnovate.ID = id
isExist, err := model2.FirstField(mServiceInnovate.ServiceInnovate, []string{"id", "tenant_id"})
if err != nil {
return err
} else if !isExist {
return errors.New("操作错误,服务信息不存在或已被删除")
}
if c.TenantID > 0 && c.TenantID != mServiceInnovate.TenantID {
return errors.New("操作错误,无权限操作")
}
return model2.Delete(mServiceInnovate.ServiceInnovate)
}
// Kind 分类信息
func (c *Innovate) Kind(tenantID uint64, title string, page, pageSize int) (*controller.ReturnPages, error) {
mServiceInnovateKind := model.NewServiceInnovateKind()
var count int64
where := make([]*model2.ModelWhere, 0)
if c.TenantID > 0 {
where = append(where, model2.NewWhere("k.tenant_id", c.TenantID))
}
if tenantID > 0 {
where = append(where, model2.NewWhere("k.tenant_id", tenantID))
}
if title != "" {
where = append(where, model2.NewWhereLike("k.title", title))
}
out, err := mServiceInnovateKind.Kind(page, pageSize, &count, where...)
if err != nil {
return nil, err
}
list := make([]*InnovateKindInfo, 0)
for _, v := range out {
list = append(list, &InnovateKindInfo{
ID: v.GetEncodeID(), ServiceInnovateKindInfo: v, Area: v.FormatBasic(),
})
}
return &controller.ReturnPages{Data: list, Count: count}, nil
}
// KindSelect 分类筛选信息
func (c *Innovate) KindSelect() ([]*InnovateKindSelectInfo, error) {
mServiceInnovateKind := model.NewServiceInnovateKind()
out := make([]*model2.ServiceInnovateKind, 0)
where := []*model2.ModelWhereOrder{&model2.ModelWhereOrder{
Where: model2.NewWhere("tenant_id", c.TenantID),
Order: model2.NewOrder("sort", model2.OrderModeToAsc),
}, &model2.ModelWhereOrder{
Order: model2.NewOrder("id", model2.OrderModeToDesc),
}}
if err := model2.ScanFields(mServiceInnovateKind.ServiceInnovateKind, &out, []string{"id", "title"}, where...); err != nil {
return nil, err
}
list := make([]*InnovateKindSelectInfo, 0)
for _, v := range out {
list = append(list, &InnovateKindSelectInfo{
ID: v.GetEncodeID(), Title: v.Title,
})
}
return list, nil
}
// KindForm 分类数据处理
func (c *Innovate) KindForm(params *InnovateKindParams) error {
mServiceInnovateKind := model.NewServiceInnovateKind()
if params.ID > 0 {
mServiceInnovateKind.ID = params.ID
isExist, err := model2.FirstField(mServiceInnovateKind.ServiceInnovateKind, []string{"id", "tenant_id", "created_at"})
if err != nil {
return err
} else if !isExist {
return errors.New("操作错误,服务分类信息不存在或已被删除")
}
if c.TenantID > 0 && c.TenantID != mServiceInnovateKind.TenantID {
return errors.New("操作错误,无权限操作")
}
}
mServiceInnovateKind.Title = params.Title
mServiceInnovateKind.Sort = params.Sort
if mServiceInnovateKind.ID > 0 {
return model2.Updates(mServiceInnovateKind.ServiceInnovateKind, mServiceInnovateKind.ServiceInnovateKind)
}
mServiceInnovateKind.TenantID = c.TenantID
return model2.Create(mServiceInnovateKind.ServiceInnovateKind)
}
// KindDelete 分类数据删除
func (c *Innovate) KindDelete(id uint64) error {
mServiceInnovateKind := model.NewServiceInnovateKind()
mServiceInnovateKind.ID = id
isExist, err := model2.FirstField(mServiceInnovateKind.ServiceInnovateKind, []string{"id", "tenant_id"})
if err != nil {
return err
} else if !isExist {
return errors.New("操作错误,服务分类信息不存在或已被删除")
}
if c.TenantID > 0 && c.TenantID != mServiceInnovateKind.TenantID {
return errors.New("操作错误,无权限操作")
}
return model2.Delete(mServiceInnovateKind.ServiceInnovateKind)
}
func NewInnovate() InnovateHandle {
return func(admin *session.Admin) *Innovate {
return &Innovate{admin}
}
}