140 lines
4.1 KiB
Go
140 lines
4.1 KiB
Go
package technology
|
|
|
|
import (
|
|
"SciencesServer/app/api/enterprise/model"
|
|
"SciencesServer/app/basic/controller"
|
|
model2 "SciencesServer/app/common/model"
|
|
"SciencesServer/app/session"
|
|
"SciencesServer/utils"
|
|
"errors"
|
|
"time"
|
|
)
|
|
|
|
// Project 项目列表
|
|
type Project struct {
|
|
*session.Enterprise
|
|
tenantID uint64
|
|
}
|
|
|
|
type ProjectHandle func(session *session.Enterprise, tenantID uint64) *Project
|
|
|
|
type (
|
|
// ProjectInfo 产品信息
|
|
ProjectInfo struct {
|
|
ID string `json:"id"`
|
|
*model2.TechnologyProject
|
|
}
|
|
// ProjectParams 产品参数信息
|
|
ProjectParams struct {
|
|
ID uint64
|
|
Title, Kind, Source, Director, BeginAt, FinishAt string
|
|
Amount float64
|
|
Role int
|
|
}
|
|
)
|
|
|
|
// List 列表信息
|
|
func (c *Project) List(title string, page, pageSize int) (*controller.ReturnPages, error) {
|
|
mTechnologyProject := model.NewTechnologyProject()
|
|
|
|
where := []*model2.ModelWhereOrder{&model2.ModelWhereOrder{
|
|
Where: model2.NewWhere("uid", c.UID),
|
|
Order: model2.NewOrder("id", model2.OrderModeToDesc)}}
|
|
|
|
if title != "" {
|
|
where = append(where, &model2.ModelWhereOrder{Where: model2.NewWhere("title", title)})
|
|
}
|
|
var count int64
|
|
|
|
out := make([]*model2.TechnologyProject, 0)
|
|
|
|
if err := model2.Pages(mTechnologyProject.TechnologyProject, &out, page, pageSize, &count, where...); err != nil {
|
|
return nil, err
|
|
}
|
|
list := make([]*ProjectInfo, 0)
|
|
|
|
for _, v := range out {
|
|
list = append(list, &ProjectInfo{
|
|
ID: v.GetEncodeID(), TechnologyProject: v,
|
|
})
|
|
}
|
|
return &controller.ReturnPages{Data: list, Count: count}, nil
|
|
}
|
|
|
|
// Form 数据处理
|
|
func (c *Project) Form(params *ProjectParams) error {
|
|
mTechnologyProject := model.NewTechnologyProject()
|
|
|
|
if params.ID > 0 {
|
|
mTechnologyProject.ID = params.ID
|
|
|
|
isExist, err := model2.FirstField(mTechnologyProject.TechnologyProject, []string{"id", "uid"})
|
|
|
|
if err != nil {
|
|
return err
|
|
} else if !isExist {
|
|
return errors.New("操作错误,项目信息不存在或已被删除")
|
|
} else if mTechnologyProject.UID != c.UID {
|
|
return errors.New("无权限操作")
|
|
}
|
|
}
|
|
mTechnologyProject.Title = params.Title
|
|
mTechnologyProject.Amount = params.Amount
|
|
mTechnologyProject.Kind = params.Kind
|
|
mTechnologyProject.Role = model2.TechnologyProjectRole(params.Role)
|
|
mTechnologyProject.Source = params.Source
|
|
mTechnologyProject.Director = params.Director
|
|
mTechnologyProject.BeginAt = utils.DataTimeToDate(params.BeginAt)
|
|
mTechnologyProject.FinishAt = utils.DataTimeToDate(params.FinishAt)
|
|
|
|
if mTechnologyProject.ID > 0 {
|
|
return model2.Updates(mTechnologyProject.TechnologyProject, mTechnologyProject.TechnologyProject)
|
|
}
|
|
mTechnologyProject.TenantID = c.tenantID
|
|
mTechnologyProject.UID = c.UID
|
|
return model2.Create(mTechnologyProject.TechnologyProject)
|
|
}
|
|
|
|
// Shelf 上下架操作
|
|
func (c *Project) Shelf(id uint64, status int) error {
|
|
mTechnologyProject := model.NewTechnologyProject()
|
|
mTechnologyProject.ID = id
|
|
|
|
isExist, err := model2.FirstField(mTechnologyProject.TechnologyProject, []string{"id", "uid"})
|
|
|
|
if err != nil {
|
|
return err
|
|
} else if !isExist {
|
|
return errors.New("操作错误,项目信息不存在或已被删除")
|
|
} else if mTechnologyProject.UID != c.UID {
|
|
return errors.New("操作错误,无权限操作")
|
|
}
|
|
|
|
return model2.Updates(mTechnologyProject.TechnologyProject, map[string]interface{}{
|
|
"shelf_status": status, "updated_at": time.Now(),
|
|
})
|
|
}
|
|
|
|
// Delete 删除处理
|
|
func (c *Project) Delete(id uint64) error {
|
|
mTechnologyProject := model.NewTechnologyProject()
|
|
mTechnologyProject.ID = id
|
|
|
|
isExist, err := model2.FirstField(mTechnologyProject.TechnologyProject, []string{"id", "uid"})
|
|
|
|
if err != nil {
|
|
return err
|
|
} else if !isExist {
|
|
return errors.New("操作错误,项目信息不存在或已被删除")
|
|
} else if mTechnologyProject.UID != c.UID {
|
|
return errors.New("无权限操作")
|
|
}
|
|
return model2.Delete(mTechnologyProject.TechnologyProject)
|
|
}
|
|
|
|
func NewProject() ProjectHandle {
|
|
return func(session *session.Enterprise, tenantID uint64) *Project {
|
|
return &Project{Enterprise: session, tenantID: tenantID}
|
|
}
|
|
}
|