feat:完善项目信息

This commit is contained in:
henry
2022-01-19 10:59:43 +08:00
parent 26a3205c08
commit 86fa9cd853
9 changed files with 281 additions and 60 deletions

View File

@ -45,6 +45,7 @@ func (*Activity) Form(c *gin.Context) {
api.TenantIDStringForm
api.ImageForm
Title string `json:"title" form:"title" binding:"required"`
Description string `json:"description" form:"description" binding:"required"`
Content string `json:"content" form:"content" binding:"required"`
Contact string `json:"contact" form:"contact" binding:"required"`
ContactMobile string `json:"contact_mobile" form:"contact_mobile"`
@ -67,7 +68,7 @@ func (*Activity) Form(c *gin.Context) {
err := activity.NewInstance()(api.GetSession()(c).(*session.Admin)).Form(&activity.InstanceParams{
ID: form.IDStringForm.Convert(), ApplyID: (&api.IDStringForm{ID: form.ApplyID}).Convert(),
TenantID: form.TenantIDStringForm.Convert(), Title: form.Title, Contact: form.Contact, ContactMobile: form.ContactMobile,
Image: form.FilterImageURL(), Content: form.Content, BeginAt: form.BeginAt, FinishAt: form.FinishAt,
Image: form.FilterImageURL(), Description: form.Description, Content: form.Content, BeginAt: form.BeginAt, FinishAt: form.FinishAt,
JoinDeadline: form.JoinDeadline, Area: form.Area, Industrys: form.Industrys, Amount: form.Amount,
MaxNumber: form.MaxNumber, NotifyCrowd: form.NotifyCrowd, IsHome: form.IsHome, Sort: form.Sort, Status: form.Status,
})

View File

@ -25,7 +25,31 @@ func (a *manageExamineForm) handle(session *session.Admin, params map[string]int
}
func (*Manage) Company(c *gin.Context) {
form := &struct {
api.TenantIDStringForm
Name string `json:"name" form:"name"`
ExamineStatus int `json:"examine_status" form:"examine_status"`
api.PageForm
}{}
if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c)
return
}
data, err := manage.NewInstance()(api.GetSession()(c).(*session.Admin), api.GetTenantID()(c).(uint64)).
Company(form.Convert(), form.Name, form.ExamineStatus, form.Page, form.PageSize)
api.APIResponse(err, data)(c)
}
func (*Manage) CompanyDetail(c *gin.Context) {
form := new(api.IDStringForm)
if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c)
return
}
data, err := manage.NewInstance()(api.GetSession()(c).(*session.Admin), api.GetTenantID()(c).(uint64)).
CompanyDetail(form.Convert())
api.APIResponse(err, data)(c)
}
func (*Manage) CompanyExamine(c *gin.Context) {
@ -38,16 +62,15 @@ func (*Manage) CompanyExamine(c *gin.Context) {
return
}
form.Identity = config.TenantUserIdentityForCompany
err := form.handle(api.GetSession()(c).(*session.Admin), map[string]interface{}{
"kind": form.Kind,
})
api.APIResponse(err)
err := form.handle(api.GetSession()(c).(*session.Admin), map[string]interface{}{"kind": form.Kind})
api.APIResponse(err)(c)
}
func (*Manage) Expert(c *gin.Context) {
form := &struct {
Name string `json:"name" form:"name"`
Status int `json:"status" form:"status"`
api.TenantIDStringForm
Name string `json:"name" form:"name"`
ExamineStatus int `json:"examine_status" form:"examine_status"`
api.PageForm
}{}
if err := api.Bind(form)(c); err != nil {
@ -55,8 +78,20 @@ func (*Manage) Expert(c *gin.Context) {
return
}
data, err := manage.NewInstance()(api.GetSession()(c).(*session.Admin), api.GetTenantID()(c).(uint64)).
Expert(form.Name, form.Status, form.Page, form.PageSize)
api.APIResponse(err, data)
Expert(form.Convert(), form.Name, form.ExamineStatus, form.Page, form.PageSize)
api.APIResponse(err, data)(c)
}
func (*Manage) ExpertDetail(c *gin.Context) {
form := new(api.IDStringForm)
if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c)
return
}
data, err := manage.NewInstance()(api.GetSession()(c).(*session.Admin), api.GetTenantID()(c).(uint64)).
ExpertDetail(form.Convert())
api.APIResponse(err, data)(c)
}
func (*Manage) ExpertExamine(c *gin.Context) {
@ -68,7 +103,7 @@ func (*Manage) ExpertExamine(c *gin.Context) {
}
form.Identity = config.TenantUserIdentityForExpert
err := form.handle(api.GetSession()(c).(*session.Admin), nil)
api.APIResponse(err)
api.APIResponse(err)(c)
}
func (*Manage) Laboratory(c *gin.Context) {
@ -84,7 +119,7 @@ func (*Manage) LaboratoryExamine(c *gin.Context) {
}
form.Identity = config.TenantUserIdentityForLaboratory
err := form.handle(api.GetSession()(c).(*session.Admin), nil)
api.APIResponse(err)
api.APIResponse(err)(c)
}
func (*Manage) Research(c *gin.Context) {
@ -100,7 +135,7 @@ func (*Manage) ResearchExamine(c *gin.Context) {
}
form.Identity = config.TenantUserIdentityForResearch
err := form.handle(api.GetSession()(c).(*session.Admin), nil)
api.APIResponse(err)
api.APIResponse(err)(c)
}
func (*Manage) Agent(c *gin.Context) {
@ -116,5 +151,5 @@ func (*Manage) AgentExamine(c *gin.Context) {
}
form.Identity = config.TenantUserIdentityForAgent
err := form.handle(api.GetSession()(c).(*session.Admin), nil)
api.APIResponse(err)
api.APIResponse(err)(c)
}

View File

@ -37,9 +37,9 @@ type (
}
// InstanceParams 活动参数信息
InstanceParams struct {
ID, ApplyID, TenantID uint64
Title, Contact, ContactMobile, Image, Content string
BeginAt, FinishAt, JoinDeadline string
ID, ApplyID, TenantID uint64
Title, Contact, ContactMobile, Image, Description, Content string
BeginAt, FinishAt, JoinDeadline string
config.Area
Industrys []string
Amount float64
@ -157,6 +157,7 @@ func (c *Instance) Form(params *InstanceParams) error {
mActivityInstance.NotifyCrowd = params.NotifyCrowd
mActivityInstance.IsHome = params.IsHome
mActivityInstance.Sort = params.Sort
mActivityInstance.Description = params.Description
mActivityInstance.Content = params.Content
mActivityInstance.Status = model2.ActivityInstanceStatus(params.Status)

View File

@ -6,6 +6,7 @@ import (
"SciencesServer/app/basic/controller"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/session"
"errors"
"gorm.io/gorm"
"strings"
"time"
@ -20,40 +21,120 @@ type Instance struct {
type InstanceHandle func(session *session.Admin, tenantID uint64) *Instance
type (
// InstanceForCompany 公司企业信息
InstanceForCompany struct {
ID string `json:"id"`
*model.ManageCompanyInfo
Industrys []string `json:"industrys"`
Area string `json:"area"`
}
// InstanceForCompanyDetail 公司企业详细信息
InstanceForCompanyDetail struct {
ID string `json:"id"`
*model2.ManageCompany
Industrys []string `json:"industrys"`
Keywords []string `json:"keywords"`
Directions []string `json:"directions"`
Area string `json:"area"`
}
// InstanceForExpert 专家信息
InstanceForExpert struct {
ID string `json:"id"`
Name string `json:"name"`
Industry []string `json:"industry"`
ResearchName string `json:"research_name"`
LaboratoryName string `json:"laboratory_name"`
Address string `json:"address"`
CreatedAt time.Time `json:"created_at"`
ID string `json:"id"`
Name string `json:"name"`
Industrys []string `json:"industrys"`
ResearchName string `json:"research_name"`
LaboratoryName string `json:"laboratory_name"`
Address string `json:"address"`
ExamineStatus model2.ExamineStatusKind `json:"examine_status"`
CreatedAt time.Time `json:"created_at"`
Area string `json:"area"`
}
// InstanceForExpertDetail 专家详细信息
InstanceForExpertDetail struct {
ID string `json:"id"`
*model2.ManageExpert
Industrys []string `json:"industrys"`
Keywords []string `json:"keywords"`
Researchs []string `json:"researchs"`
Area string `json:"area"`
}
)
func (c *Instance) Company(name string, status int, page, pageSize int) {
// Company 公司企业信息
func (c *Instance) Company(tenantID uint64, name string, status int, page, pageSize int) (*controller.ReturnPages, error) {
mManageCompany := model.NewManageCompany()
where := make([]*model2.ModelWhere, 0)
if name != "" {
where = append(where, model2.NewWhereLike("name", name))
if c.TenantID > 0 {
where = append(where, model2.NewWhere("c.tenant_id", c.TenantID))
}
if tenantID > 0 {
where = append(where, model2.NewWhere("c.tenant_id", tenantID))
}
if name != "" {
where = append(where, model2.NewWhereLike("c.name", name))
}
if status > 0 {
where = append(where, model2.NewWhere("c.examine_status", status))
}
var count int64
mManageCompany.Companys(page, pageSize, &count)
out, err := mManageCompany.Companys(page, pageSize, &count)
if err != nil {
return nil, err
}
list := make([]*InstanceForCompany, 0)
for _, v := range out {
mManageCompany.Industry = v.Industry
list = append(list, &InstanceForCompany{
ID: v.GetEncodeID(), ManageCompanyInfo: v, Industrys: mManageCompany.GetIndustryAttribute(), Area: v.FormatBasic(),
})
}
return &controller.ReturnPages{Data: list, Count: count}, nil
}
// CompanyDetail 公司企业详细信息
func (c *Instance) CompanyDetail(id uint64) (*InstanceForCompanyDetail, error) {
mManageCompany := model.NewManageCompany()
out, err := mManageCompany.Company(id)
if err != nil {
return nil, err
} else if out.ManageCompany == nil {
return nil, errors.New("操作错误,公司企业信息不存在或已被删除")
}
return &InstanceForCompanyDetail{
ID: out.GetEncodeID(),
ManageCompany: out.ManageCompany,
Industrys: out.GetIndustryAttribute(),
Keywords: out.GetKeywordAttribute(),
Area: out.FormatBasic(),
}, nil
}
// Expert 专家信息
func (c *Instance) Expert(name string, status int, page, pageSize int) (*controller.ReturnPages, error) {
func (c *Instance) Expert(tenantID uint64, name string, examineStatus int, page, pageSize int) (*controller.ReturnPages, error) {
mManageExpert := model.NewManageExpert()
where := make([]*model2.ModelWhere, 0)
if c.TenantID > 0 {
where = append(where, model2.NewWhere("e.tenant_id", c.TenantID))
}
if tenantID > 0 {
where = append(where, model2.NewWhere("e.tenant_id", tenantID))
}
if name != "" {
where = append(where, model2.NewWhereLike("name", name))
where = append(where, model2.NewWhereLike("e.name", name))
}
if examineStatus > 0 {
where = append(where, model2.NewWhere("e.examine_status", examineStatus))
}
var count int64
@ -65,27 +146,41 @@ func (c *Instance) Expert(name string, status int, page, pageSize int) (*control
list := make([]*InstanceForExpert, 0)
for _, v := range out {
industry := make([]string, 0)
_industrys := make([]string, 0)
for _, v := range strings.Split(v.Industry, ";") {
industry = append(industry, config.GetIndustryInfo(v, "-", "/"))
_industrys = append(_industrys, config.GetIndustryInfo(v, "-", "/"))
}
// 研究机构,实验室
researchName := v.LaboratoryName
laboratoryName := ""
if v.LaboratoryName != "" {
researchName = v.ResearchName
laboratoryName = v.LaboratoryName
}
list = append(list, &InstanceForExpert{ID: v.GetEncodeID(), Name: v.Name, Industry: industry,
ResearchName: researchName, LaboratoryName: laboratoryName,
Address: v.FormatBasic(), CreatedAt: v.CreatedAt,
list = append(list, &InstanceForExpert{ID: v.GetEncodeID(), Name: v.Name, Industrys: _industrys,
ResearchName: v.ResearchName, LaboratoryName: v.LaboratoryName, ExamineStatus: v.ExamineStatus,
Address: v.FormatBasic(), CreatedAt: v.CreatedAt, Area: v.FormatBasic(),
})
}
return &controller.ReturnPages{Data: list, Count: count}, nil
}
// ExpertDetail 专家详细信息
func (*Instance) ExpertDetail(id uint64) (*InstanceForExpertDetail, error) {
mManageExpert := model.NewManageExpert()
out, err := mManageExpert.Expert(id)
if err != nil {
return nil, err
} else if out.ManageExpert == nil {
return nil, errors.New("操作错误,专家信息不存在或已被删除")
}
return &InstanceForExpertDetail{
ID: out.GetEncodeID(),
ManageExpert: out.ManageExpert,
Industrys: out.GetIndustryAttribute(),
Keywords: out.GetKeywordAttribute(),
Researchs: out.GetResearchAttribute(),
Area: out.FormatBasic(),
}, nil
}
func NewInstance() InstanceHandle {
return func(session *session.Admin, tenantID uint64) *Instance {
return &Instance{

View File

@ -2,16 +2,72 @@ package model
import (
"SciencesServer/app/common/model"
"SciencesServer/serve/orm"
"fmt"
"time"
)
type ManageCompany struct {
*model.ManageCompany
}
func (m *ManageCompany) Companys(page, pageSize int, count *int64, where ...*model.ModelWhere) {
type (
// ManageCompanyBasic 公司企业基本信息
ManageCompanyBasic struct {
*model.ManageCompany
model.Area
}
// ManageCompanyInfo 公司企业信息
ManageCompanyInfo struct {
model.Model
Kind model.ManageCompanyKind `json:"kind"`
Name string `json:"name"`
Code string `json:"code"`
Industry string `json:"industry"`
Address string `json:"address"`
*model.Examine
CreatedAt time.Time `json:"created_at"`
model.Area
}
)
// Company 公司企业信息
func (m *ManageCompany) Company(id uint64) (*ManageCompanyBasic, error) {
db := orm.GetDB().Table(m.TableName()+" AS c").
Select("c.*", "t.province", "t.city").
Joins(fmt.Sprintf("LEFT JOIN %s AS t ON c.tenant_id = t.id", model.NewSysTenant().TableName())).
Where("c.id = ?", id)
out := new(ManageCompanyBasic)
err := db.Scan(out).Error
return out, err
}
func (m *ManageCompany) Companys(page, pageSize int, count *int64, where ...*model.ModelWhere) ([]*ManageCompanyInfo, error) {
db := orm.GetDB().Table(m.TableName()+" AS c").
Select("c.id", "c.kind", "c.name", "c.code", "c.industry", "c.address", "c.examine_status", "c.created_at",
"t.province", "t.city").
Joins(fmt.Sprintf("LEFT JOIN %s AS t ON c.tenant_id = t.id", model.NewSysTenant().TableName())).
Where("c.is_deleted = ?", model.DeleteStatusForNot)
if len(where) > 0 {
for _, v := range where {
db = db.Where(v.Condition, v.Value)
}
}
out := make([]*ManageCompanyInfo, 0)
if err := db.Count(count).Error; err != nil {
return nil, err
}
if err := db.Order("c.id " + model.OrderModeToDesc).Offset((page - 1) * pageSize).Limit(pageSize).Scan(&out).Error; err != nil {
return nil, err
}
return out, nil
}
func NewManageCompany() *ManageCompany {
return &ManageCompany{}
return &ManageCompany{model.NewManageCompany()}
}

View File

@ -10,24 +10,45 @@ type ManageExpert struct {
*model.ManageExpert
}
type ManageExpertInfo struct {
*model.ManageExpert
Name string `json:"name"`
ResearchName string `json:"research_name"`
LaboratoryName string `json:"laboratory_name"`
type (
// ManageExpertBasic 专家基本信息
ManageExpertBasic struct {
*model.ManageExpert
model.Area
}
// ManageExpertInfo 专家信息
ManageExpertInfo struct {
*model.ManageExpert
Name string `json:"name"`
ResearchName string `json:"research_name"`
LaboratoryName string `json:"laboratory_name"`
model.Area
}
)
// Expert 专家信息
func (m *ManageExpert) Expert(id uint64) (*ManageExpertBasic, error) {
db := orm.GetDB().Table(m.TableName()+" AS e").
Select("e.*", "t.province", "t.city").
Joins(fmt.Sprintf("LEFT JOIN %s AS t ON e.tenant_id = t.id", model.NewSysTenant().TableName())).
Where("e.id = ?", id)
out := new(ManageExpertBasic)
err := db.Scan(out).Error
return out, err
}
// Experts 专家信息
func (m *ManageExpert) Experts(page, pageSize int, count *int64, where ...*model.ModelWhere) ([]*ManageExpertInfo, error) {
mUserInstance := model.NewUserInstance()
mSysTenant := model.NewSysTenant()
db := orm.GetDB().Table(m.TableName()+" AS e").
Select("e.*", "u.name", "l.name AS laboratory_name", "r.name AS research_name").
Joins(fmt.Sprintf("LEFT JOIN %s AS u ON e.uid = u.uuid", mUserInstance.TableName())).
Joins(fmt.Sprintf("LEFT JOIN %s AS l ON e.tenant_id = l.id", mSysTenant.TableName())).
Joins(fmt.Sprintf("LEFT JOIN %s AS r ON l.parent_id = r.id", mSysTenant.TableName())).
Where("")
Select("e.id", "e.name", "e.industry", "r.name AS research_name", "l.name AS laboratory_name",
"t.province", "t.city", "e.address", "e.created_at").
Joins(fmt.Sprintf("LEFT JOIN %s AS r ON e.research_id = r.id", model.NewManageResearch().TableName())).
Joins(fmt.Sprintf("LEFT JOIN %s AS l ON e.laboratory_id = l.id", model.NewManageLaboratory().TableName())).
Joins(fmt.Sprintf("LEFT JOIN %s AS t ON e.tenant_id = t.id", model.NewSysTenant().TableName())).
Where("e.is_deleted = ?", model.DeleteStatusForNot)
if len(where) > 0 {
for _, v := range where {
@ -39,6 +60,7 @@ func (m *ManageExpert) Experts(page, pageSize int, count *int64, where ...*model
if err := db.Count(count).Error; err != nil {
return nil, err
}
if err := db.Order("e.id " + model.OrderModeToDesc).Offset((page - 1) * pageSize).Limit(pageSize).Scan(&out).Error; err != nil {
return nil, err
}

View File

@ -85,7 +85,7 @@ const (
// Examine 审核状态
type Examine struct {
ExamineStatus ExamineStatusKind `gorm:"column:examine_status;type:tinyint(1);default:0;comment:审核状态(0:审核中,1:审核通过,2:审核拒绝)" json:"examine_status"`
ExamineStatus ExamineStatusKind `gorm:"column:examine_status;type:tinyint(1);default:0;comment:审核状态(1:审核中,2:审核通过,3:审核拒绝)" json:"examine_status"`
ExamineRemark string `gorm:"column:examine_remark;type:varchar(255);default:'';comment:审核备注" json:"examine_remark"`
ExamineAt time.Time `gorm:"column:examine_at;type:datetime;default:null;comment:审核时间" json:"examine_at"`
}
@ -95,7 +95,7 @@ type ExamineStatusKind int
const (
// ExamineStatusForOngoing 审核中
ExamineStatusForOngoing ExamineStatusKind = iota
ExamineStatusForOngoing ExamineStatusKind = iota + 1
// ExamineStatusForAgree 审核通过
ExamineStatusForAgree
// ExamineStatusForRefuse 审核拒绝

View File

@ -9,7 +9,7 @@ type SysNavigation struct {
Link string `gorm:"column:link;type:varchar(255);default:'';comment:访问地址" json:"link"`
IsTarget int `gorm:"column:is_target;type:tinyint(1);default:0;comment:是否新窗口打开01" json:"is_target"`
Sort int `gorm:"column:sort;type:tinyint(3);default:0;comment:排序,从小到小" json:"-"`
Status SysNavigationStatus `gorm:"column:status;type:tinyint(1);default:1;comment:状态" json:"-"`
Status SysNavigationStatus `gorm:"column:status;type:tinyint(1);default:1;comment:状态" json:"status"`
ModelDeleted
ModelAt
}

View File

@ -281,6 +281,17 @@ func registerAdminAPI(app *gin.Engine) {
role.POST("/auth", _api.Auth)
role.POST("/auth/bind", _api.AuthBind)
}
// Manage 项目管理
manage := v1.Group("/manage")
{
_api := new(api1.Manage)
manage.POST("/company", _api.Company)
manage.POST("/company/detail", _api.CompanyDetail)
manage.POST("/company/examine", _api.CompanyExamine)
manage.POST("/expert", _api.Expert)
manage.POST("/expert/detail", _api.ExpertDetail)
manage.POST("/expert/examine", _api.ExpertExamine)
}
// Service 服务管理
service := v1.Group("/service")
{