feat:完善信息

This commit is contained in:
henry
2021-10-18 11:57:12 +08:00
parent 282448ab6e
commit fdda4b0209
6 changed files with 316 additions and 0 deletions

View File

@ -55,6 +55,19 @@ type (
DemandBenefit string `json:"demand_benefit" form:"demand_benefit"` // 效益
Status int `json:"status" form:"status"`
}
// topicForm 课题参数
topicForm struct {
Title string `json:"title" form:"title" binding:"required"`
Emcee string `json:"emcee" form:"emcee" binding:"required"`
Mechanism string `json:"mechanism" form:"mechanism" binding:"required"`
Code string `json:"code" form:"code" binding:"required"`
BeginAt string `json:"begin_at" form:"begin_at" binding:"required"`
FinishAt string `json:"finish_at" form:"finish_at" binding:"required"`
Amount float64 `json:"amount" form:"amount" binding:"required"`
Source int `json:"source" form:"source" binding:"required"`
Kind int `json:"kind" form:"kind" binding:"required"`
Keywords []string `json:"keywords" form:"keywords"`
}
)
func (a *Technology) Paper(c *gin.Context) {
@ -268,3 +281,71 @@ func (a *Technology) DemandDelete(c *gin.Context) {
Delete(form.Convert())
api.APIResponse(err)(c)
}
func (a *Technology) Topic(c *gin.Context) {
form := &struct {
Status int `json:"status" form:"status"`
api.PageForm
}{}
if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c)
return
}
data, err := technology2.NewTopic()(api.GetSession()(c).(*service.SessionEnterprise), api.GetLocal()(c).(string)).
List(form.Status, form.Page, form.PageSize)
api.APIResponse(err, data)(c)
}
func (a *Technology) TopicDetail(c *gin.Context) {
form := new(api.IDStringForm)
if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c)
return
}
data, err := technology2.NewTopic()(api.GetSession()(c).(*service.SessionEnterprise), api.GetLocal()(c).(string)).
Detail(form.Convert())
api.APIResponse(err, data)(c)
}
func (a *Technology) TopicAdd(c *gin.Context) {
form := new(topicForm)
if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c)
return
}
err := technology2.NewTopic()(api.GetSession()(c).(*service.SessionEnterprise), api.GetLocal()(c).(string)).
Form(&technology2.TopicParams{Title: form.Title, Emcee: form.Emcee, Mechanism: form.Mechanism, Code: form.Code,
BeginAt: form.BeginAt, FinishAt: form.FinishAt, Amount: form.Amount, Source: form.Source, Kind: form.Kind,
Keywords: form.Keywords})
api.APIResponse(err)(c)
}
func (a *Technology) TopicEdit(c *gin.Context) {
form := &struct {
api.IDStringForm
topicForm
}{}
if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c)
return
}
err := technology2.NewTopic()(api.GetSession()(c).(*service.SessionEnterprise), api.GetLocal()(c).(string)).
Form(&technology2.TopicParams{ID: form.Convert(), Title: form.Title, Emcee: form.Emcee, Mechanism: form.Mechanism,
Code: form.Code, BeginAt: form.BeginAt, FinishAt: form.FinishAt, Amount: form.Amount, Source: form.Source,
Kind: form.Kind, Keywords: form.Keywords})
api.APIResponse(err)(c)
}
func (a *Technology) TopicDelete(c *gin.Context) {
form := new(api.IDStringForm)
if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c)
return
}
err := technology2.NewTopic()(api.GetSession()(c).(*service.SessionEnterprise), api.GetLocal()(c).(string)).
Delete(form.Convert())
api.APIResponse(err)(c)
}

View File

@ -0,0 +1,152 @@
package technology
import (
"SciencesServer/app/api/enterprise/model"
"SciencesServer/app/api/manage/controller"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/service"
"SciencesServer/utils"
"errors"
"time"
)
type Topic struct {
*service.SessionEnterprise
local string
}
type TopicHandle func(enterprise *service.SessionEnterprise, local string) *Topic
type (
// TopicInfo 课题信息
TopicInfo struct {
ID string `json:"id"`
Title string `json:"title"`
Kind model2.TechnologyTopicKind `json:"kind"`
Keywords []string `json:"keywords"`
CreatedAt time.Time `json:"created_at"`
}
// TopicDetailInfo 课题详细信息
TopicDetailInfo struct {
ID string `json:"id"`
*model2.TechnologyTopic
Keywords []string `json:"keywords"`
}
// TopicParams 课题参数信息
TopicParams struct {
ID uint64
Title, Emcee, Mechanism, Code, BeginAt, FinishAt string
Amount float64
Source, Kind int
Keywords []string
}
)
// List 列表信息
func (c *Topic) List(status int, page, pageSize int) (*controller.ReturnPages, error) {
mTechnologyTopic := model.NewTechnologyTopic()
where := []*model2.ModelWhereOrder{&model2.ModelWhereOrder{
Where: model2.NewWhere("status", status),
Order: model2.NewOrder("id", model2.OrderModeToDesc),
}, &model2.ModelWhereOrder{Where: model2.NewWhere("uid", c.ManageUID)}}
var count int64
out := make([]*model2.TechnologyTopic, 0)
if err := model2.PagesFields(mTechnologyTopic.TechnologyTopic, &out, []string{"id", "title", "kind", "keyword", "created_at"},
page, pageSize, &count, where...); err != nil {
return nil, err
}
list := make([]*TopicInfo, 0)
for _, v := range out {
list = append(list, &TopicInfo{
ID: v.GetEncodeID(), Title: v.Title, Kind: v.Kind, Keywords: v.GetKeywordAttribute(),
CreatedAt: v.CreatedAt,
})
}
return &controller.ReturnPages{Data: list, Count: count}, nil
}
// Detail 详细信息
func (c *Topic) Detail(id uint64) (*TopicDetailInfo, error) {
mTechnologyTopic := model.NewTechnologyTopic()
mTechnologyTopic.ID = id
isExist, err := model2.First(mTechnologyTopic.TechnologyTopic)
if err != nil {
return nil, err
} else if !isExist {
return nil, errors.New("操作错误,课题信息不存在")
}
return &TopicDetailInfo{
ID: mTechnologyTopic.GetEncodeID(), TechnologyTopic: mTechnologyTopic.TechnologyTopic,
Keywords: mTechnologyTopic.GetKeywordAttribute(),
}, nil
}
// Form 数据处理
func (c *Topic) Form(params *TopicParams) error {
mTechnologyTopic := model.NewTechnologyTopic()
if params.ID > 0 {
mTechnologyTopic.ID = params.ID
isExist, err := model2.FirstField(mTechnologyTopic.TechnologyTopic, []string{"id", "uid", "status"})
if err != nil {
return err
} else if !isExist {
return errors.New("操作错误,课题信息不存在")
} else if mTechnologyTopic.UID != c.ManageUID {
return errors.New("无权限操作")
}
}
mTechnologyTopic.Title = params.Title
mTechnologyTopic.Emcee = params.Emcee
mTechnologyTopic.Mechanism = params.Mechanism
mTechnologyTopic.Code = params.Code
mTechnologyTopic.Amount = params.Amount
mTechnologyTopic.Source = model2.TechnologyTopicSource(params.Source)
mTechnologyTopic.Kind = model2.TechnologyTopicKind(params.Kind)
mTechnologyTopic.SetKeywordAttribute(params.Keywords)
mTechnologyTopic.BeginAt = utils.DataTimeToDate(params.BeginAt)
mTechnologyTopic.FinishAt = utils.DataTimeToDate(params.FinishAt)
if mTechnologyTopic.ID > 0 {
mTechnologyTopic.UpdatedAt = time.Now()
return model2.Updates(mTechnologyTopic.TechnologyTopic, mTechnologyTopic.TechnologyTopic)
}
mTechnologyTopic.TenantID = c.TenantID
mTechnologyTopic.Local.Local = c.local
mTechnologyTopic.UID = c.ManageUID
return model2.Create(mTechnologyTopic.TechnologyTopic)
}
// Delete 删除处理
func (c *Topic) Delete(id uint64) error {
mTechnologyTopic := model.NewTechnologyTopic()
mTechnologyTopic.ID = id
isExist, err := model2.FirstField(mTechnologyTopic.TechnologyTopic, []string{"id", "uid", "status"})
if err != nil {
return err
} else if !isExist {
return errors.New("操作错误,课题信息不存在")
} else if mTechnologyTopic.UID != c.ManageUID {
return errors.New("无权限操作")
}
return model2.Delete(mTechnologyTopic.TechnologyTopic)
}
func NewTopic() TopicHandle {
return func(enterprise *service.SessionEnterprise, local string) *Topic {
return &Topic{
SessionEnterprise: enterprise,
local: local,
}
}
}

View File

@ -0,0 +1,11 @@
package model
import "SciencesServer/app/common/model"
type TechnologyTopic struct {
*model.TechnologyTopic
}
func NewTechnologyTopic() *TechnologyTopic {
return &TechnologyTopic{model.NewTechnologyTopic()}
}

View File

@ -0,0 +1,63 @@
package model
import (
"SciencesServer/utils"
"time"
)
// TechnologyTopic 技术课题数据模型
type TechnologyTopic struct {
Model
ModelTenant
Local
UID uint64 `gorm:"column:uid;type:int;default:0;comment:用户uuid" json:"-"`
Title string `gorm:"column:title;type:varchar(100);default:null;comment:名称" json:"title"`
Code string `gorm:"column:code;type:varchar(30);default:null;comment:编号" json:"code"`
Emcee string `gorm:"column:emcee;type:varchar(30);default:null;comment:主持人" json:"emcee"`
Mechanism string `gorm:"column:mechanism;type:varchar(30);default:null;comment:机构" json:"mechanism"`
Keyword string `gorm:"column:keyword;type:varchar(255);default:null;comment:关键词" json:"-"`
Amount float64 `gorm:"column:amount;decimal(10,2);default:0;comment:经费" json:"amount"`
Source TechnologyTopicSource `gorm:"column:source;type:tinyint(1);default:0comment:来源" json:"source"`
Kind TechnologyTopicKind `gorm:"column:kind;type:tinyint(1);default:0comment:类型" json:"kind"`
BeginAt time.Time `gorm:"column:begin_at;type:datetime;not null;comment:开始时间" json:"begin_at"`
FinishAt time.Time `gorm:"column:finish_at;type:datetime;not null;comment:结束时间" json:"finish_at"`
ModelDeleted
ModelAt
}
// TechnologyTopicSource 技术课题资助来源
type TechnologyTopicSource int
const (
// TechnologyTopicSourceForCity 市级
TechnologyTopicSourceForCity TechnologyTopicSource = iota + 1
// TechnologyTopicSourceForProvince 省级
TechnologyTopicSourceForProvince
// TechnologyTopicSourceForCountry 国家级
TechnologyTopicSourceForCountry
)
// TechnologyTopicKind 技术课题类型
type TechnologyTopicKind int
const (
//TechnologyTopicKindFor
)
func (m *TechnologyTopic) TableName() string {
return m.NewTableName("technology_topic")
}
func (m *TechnologyTopic) GetKeywordAttribute() []string {
keywords := make([]string, 0)
_ = utils.FromJSON(m.Keyword, &keywords)
return keywords
}
func (m *TechnologyTopic) SetKeywordAttribute(keywords []string) {
m.Keyword = utils.AnyToJSON(keywords)
}
func NewTechnologyTopic() *TechnologyTopic {
return &TechnologyTopic{}
}

View File

@ -142,5 +142,9 @@ func registerEnterpriseAPI(app *gin.Engine) {
technology.POST("/demand/add", _api.DemandAdd)
technology.POST("/demand/edit", _api.DemandEdit)
technology.POST("/demand/delete", _api.DemandDelete)
technology.POST("/topic", _api.Topic)
technology.POST("/topic/add", _api.TopicAdd)
technology.POST("/topic/edit", _api.TopicEdit)
technology.POST("/topic/delete", _api.TopicDelete)
}
}

5
serve/es/serve.go Normal file
View File

@ -0,0 +1,5 @@
package es
func Set() {
esClient.Search()
}