diff --git a/app/api/enterprise/api/manage.go b/app/api/enterprise/api/manage.go new file mode 100644 index 0000000..fb8f1dd --- /dev/null +++ b/app/api/enterprise/api/manage.go @@ -0,0 +1,102 @@ +package api + +import ( + "SciencesServer/app/api/enterprise/controller/manage" + "SciencesServer/app/basic/api" + "SciencesServer/app/session" + "github.com/gin-gonic/gin" +) + +type Manage struct{} + +type ( + // enterpriseForm 企业信息 + enterpriseForm struct { + Mode int `json:"mode" form:"mode" binding:"required"` + Title string `json:"title" form:"title" binding:"required"` + Name string `json:"name" form:"name"` + Mobile string `json:"mobile" form:"mobile"` + Content string `json:"content" form:"content"` + Papers []string `json:"papers" form:"papers"` + Patents []string `json:"patents" form:"patents"` + } +) + +func (a *enterpriseForm) paperInfo() []uint64 { + out := make([]uint64, 0) + obj := new(api.IDStringForm) + + for _, v := range a.Papers { + obj.ID = v + out = append(out, obj.Convert()) + } + return out +} + +func (a *enterpriseForm) PatentInfo() []uint64 { + out := make([]uint64, 0) + obj := new(api.IDStringForm) + + for _, v := range a.Patents { + obj.ID = v + out = append(out, obj.Convert()) + } + return out +} + +func (*Manage) Enterprise(c *gin.Context) { + form := &struct { + Mode int `json:"mode" form:"mode" binding:"required"` + Title string `json:"title" form:"title"` + api.PageForm + }{} + if err := api.Bind(form)(c); err != nil { + api.APIFailure(err.(error))(c) + return + } + data, err := manage.NewEnterprise()(api.GetSession()(c).(*session.Enterprise), api.GetLocal()(c).(string)). + List(form.Mode, form.Title, form.Page, form.PageSize) + api.APIResponse(err, data)(c) +} + +func (*Manage) EnterpriseAdd(c *gin.Context) { + form := new(enterpriseForm) + + if err := api.Bind(form)(c); err != nil { + api.APIFailure(err.(error))(c) + return + } + err := manage.NewEnterprise()(api.GetSession()(c).(*session.Enterprise), api.GetLocal()(c).(string)). + Form(&manage.EnterpriseParams{Mode: form.Mode, Title: form.Title, Name: form.Name, Mobile: form.Mobile, + Papers: form.paperInfo(), Patents: form.PatentInfo(), Content: form.Content, + }) + api.APIResponse(err)(c) +} + +func (*Manage) EnterpriseEdit(c *gin.Context) { + form := &struct { + api.IDStringForm + enterpriseForm + }{} + if err := api.Bind(form)(c); err != nil { + api.APIFailure(err.(error))(c) + return + } + err := manage.NewEnterprise()(api.GetSession()(c).(*session.Enterprise), api.GetLocal()(c).(string)). + Form(&manage.EnterpriseParams{ID: form.Convert(), Mode: form.Mode, Title: form.Title, Name: form.Name, + Mobile: form.Mobile, Papers: form.paperInfo(), Patents: form.PatentInfo(), Content: form.Content, + }) + api.APIResponse(err)(c) +} + +func (*Manage) EnterpriseDelete(c *gin.Context) { + form := new(api.IDStringForm) + + if err := api.Bind(form)(c); err != nil { + api.APIFailure(err.(error))(c) + return + } + err := manage.NewEnterprise()(api.GetSession()(c).(*session.Enterprise), api.GetLocal()(c).(string)). + Delete(form.Convert()) + api.APIResponse(err)(c) +} diff --git a/app/api/enterprise/controller/manage/enterprise.go b/app/api/enterprise/controller/manage/enterprise.go new file mode 100644 index 0000000..8dccb34 --- /dev/null +++ b/app/api/enterprise/controller/manage/enterprise.go @@ -0,0 +1,126 @@ +package manage + +import ( + "SciencesServer/app/api/enterprise/model" + "SciencesServer/app/basic/controller" + model2 "SciencesServer/app/common/model" + "SciencesServer/app/session" + "errors" +) + +// Enterprise 企业管理信息 +type Enterprise struct { + *session.Enterprise + local string +} + +type EnterpriseHandle func(session *session.Enterprise, local string) *Enterprise + +type ( + // EnterpriseInfo 企业信息 + EnterpriseInfo struct { + ID string `json:"id"` + *model.UserCooperateEnterpriseInfo + Papers []string `json:"papers"` + Patents []string `json:"patents"` + } + // EnterpriseParams 企业参数信息 + EnterpriseParams struct { + ID uint64 + Mode int + Title, Name, Mobile string + Papers, Patents []uint64 + Content string + } +) + +// List 列表信息 +func (c *Enterprise) List(mode int, title string, page, pageSize int) (*controller.ReturnPages, error) { + mUserCooperateEnterprise := model.NewUserCooperateEnterprise() + + where := []*model2.ModelWhere{ + model2.NewWhere("mode", mode), + model2.NewWhere("local", c.local), + model2.NewWhere("uid", c.UID), + } + if title != "" { + where = append(where, model2.NewWhereLike("title", title)) + } + var count int64 + + out, err := mUserCooperateEnterprise.Enterprise(page, pageSize, &count, where...) + + if err != nil { + return nil, err + } + list := make([]*EnterpriseInfo, 0) + + for _, v := range out { + list = append(list, &EnterpriseInfo{ + ID: v.GetEncodeID(), + UserCooperateEnterpriseInfo: v, + Papers: v.GetPaperAttribute(), + Patents: v.GetPatentAttribute(), + }) + } + return &controller.ReturnPages{Data: list, Count: count}, nil +} + +// Form 数据操作 +func (c *Enterprise) Form(params *EnterpriseParams) error { + mUserCooperateEnterprise := model.NewUserCooperateEnterprise() + + if params.ID > 0 { + mUserCooperateEnterprise.ID = params.ID + + isExist, err := model2.FirstField(mUserCooperateEnterprise.UserCooperateEnterprise, []string{"id", "uid", "created_at"}) + + if err != nil { + return err + } else if !isExist { + return errors.New("操作错误,企业信息不存在或已被删除") + } else if mUserCooperateEnterprise.UID != c.UID { + return errors.New("无权限操作") + } + } + mUserCooperateEnterprise.Title = params.Title + mUserCooperateEnterprise.Mode = model2.UserCooperateEnterpriseMode(params.Mode) + // 已合作信息 + if mUserCooperateEnterprise.Mode == model2.UserCooperateEnterpriseModeForCooperateAlready { + mUserCooperateEnterprise.SetPaperAttribute(params.Papers) + mUserCooperateEnterprise.SetPatentAttribute(params.Patents) + // 想合作信息 + } else if mUserCooperateEnterprise.Mode == model2.UserCooperateEnterpriseModeForCooperateToWant { + mUserCooperateEnterprise.Name = params.Name + mUserCooperateEnterprise.Mobile = params.Mobile + mUserCooperateEnterprise.Content = params.Content + } + if mUserCooperateEnterprise.ID > 0 { + return model2.Updates(mUserCooperateEnterprise.UserCooperateEnterprise, mUserCooperateEnterprise.UserCooperateEnterprise) + } + return model2.Create(mUserCooperateEnterprise.UserCooperateEnterprise) +} + +// Delete 删除操作 +func (c *Enterprise) Delete(id uint64) error { + mUserCooperateEnterprise := model.NewUserCooperateEnterprise() + + mUserCooperateEnterprise.ID = id + + isExist, err := model2.FirstField(mUserCooperateEnterprise.UserCooperateEnterprise, []string{"id", "uid", "created_at"}) + + if err != nil { + return err + } else if !isExist { + return errors.New("操作错误,企业信息不存在或已被删除") + } else if mUserCooperateEnterprise.UID != c.UID { + return errors.New("无权限操作") + } + return model2.Delete(mUserCooperateEnterprise.UserCooperateEnterprise) +} + +func NewEnterprise() EnterpriseHandle { + return func(session *session.Enterprise, local string) *Enterprise { + return &Enterprise{Enterprise: session, local: local} + } +} diff --git a/app/api/enterprise/controller/service/demand.go b/app/api/enterprise/controller/service/demand.go index 5ebec51..2a2dd4d 100644 --- a/app/api/enterprise/controller/service/demand.go +++ b/app/api/enterprise/controller/service/demand.go @@ -77,7 +77,7 @@ func (c *Demand) Detail(id uint64) (*DemandInfo, error) { if err != nil { return nil, err } else if !isExist { - return nil, errors.New("操作错误,需求信息不存在或已删除") + return nil, errors.New("操作错误,需求信息不存在或已被删除") } else if mServiceDemand.UID != c.UID { return nil, errors.New("无权限操作") } @@ -98,7 +98,7 @@ func (c *Demand) Form(params *DemandParams) error { if isExist, err := model2.FirstField(mServiceDemand.ServiceDemand, []string{"id", "uid", "status", "created_at"}); err != nil { return err } else if !isExist { - return errors.New("操作错误,需求信息不存在或已删除") + return errors.New("操作错误,需求信息不存在或已被删除") } else if mServiceDemand.UID != c.UID { return errors.New("无权限操作") } else if mServiceDemand.Status != model2.ServiceDemandStatusForDraft { @@ -133,7 +133,7 @@ func (c *Demand) Delete(id uint64) error { if isExist, err := model2.FirstField(mServiceDemand.ServiceDemand, []string{"id", "uid"}); err != nil { return err } else if !isExist { - return errors.New("操作错误,需求信息不存在或已删除") + return errors.New("操作错误,需求信息不存在或已被删除") } else if mServiceDemand.UID != c.UID { return errors.New("无权限操作") } diff --git a/app/api/enterprise/controller/technology/demand.go b/app/api/enterprise/controller/technology/demand.go index cbf6d5c..70502c5 100644 --- a/app/api/enterprise/controller/technology/demand.go +++ b/app/api/enterprise/controller/technology/demand.go @@ -116,7 +116,7 @@ func (c *Demand) Form(params *DemandParams) error { if err != nil { return err } else if !isExist { - return errors.New("操作错误,需求信息不存在或已删除") + return errors.New("操作错误,需求信息不存在或已被删除") } else if mTechnologyDemand.UID != c.UID { return errors.New("无权限操作") } else if mTechnologyDemand.Status != model2.TechnologyDemandStatusForRefuse && diff --git a/app/api/enterprise/controller/technology/paper.go b/app/api/enterprise/controller/technology/paper.go index 7411af0..e201e33 100644 --- a/app/api/enterprise/controller/technology/paper.go +++ b/app/api/enterprise/controller/technology/paper.go @@ -70,7 +70,7 @@ func (c *Paper) Form(params *PaperParams) error { return err } else if !isExist { return errors.New("当前论文信息不存在") - } else if mTechnologyPaper.MUid != c.ManageUID { + } else if mTechnologyPaper.UID != c.UID { return errors.New("无权限操作") } } @@ -83,8 +83,7 @@ func (c *Paper) Form(params *PaperParams) error { mTechnologyPaper.Remark = params.Remark if params.ID <= 0 { - mTechnologyPaper.TenantID = c.TenantID - mTechnologyPaper.MUid = c.ManageUID + mTechnologyPaper.UID = c.UID mTechnologyPaper.Local.Local = c.local return model2.Create(mTechnologyPaper.TechnologyPaper) } @@ -104,7 +103,7 @@ func (c *Paper) Delete(id uint64) error { if err != nil { return err } else if count <= 0 { - return errors.New("当前论文信息不存在") + return errors.New("操作错误,当前论文信息不存在或已被删除") } if err = model2.Delete(mTechnologyPaper.TechnologyPaper); err != nil { return err diff --git a/app/api/enterprise/model/manage_enterprise.go b/app/api/enterprise/model/manage_enterprise.go new file mode 100644 index 0000000..0658c7d --- /dev/null +++ b/app/api/enterprise/model/manage_enterprise.go @@ -0,0 +1,11 @@ +package model + +import "SciencesServer/app/common/model" + +type ManageEnterprise struct { + *model.ManageEnterprise +} + +func NewManageEnterprise() *ManageEnterprise { + return &ManageEnterprise{model.NewManageEnterprise()} +} diff --git a/app/api/enterprise/model/user_cooperate_enterprise.go b/app/api/enterprise/model/user_cooperate_enterprise.go new file mode 100644 index 0000000..b678518 --- /dev/null +++ b/app/api/enterprise/model/user_cooperate_enterprise.go @@ -0,0 +1,45 @@ +package model + +import ( + "SciencesServer/app/common/model" + "SciencesServer/serve/orm" +) + +type UserCooperateEnterprise struct { + *model.UserCooperateEnterprise +} + +// UserCooperateEnterpriseInfo 用户企业关联信息 +type UserCooperateEnterpriseInfo struct { + *model.UserCooperateEnterprise + PaperTitle string `json:"paper_title"` + PatentTitle string `json:"patent_title"` +} + +// Enterprise 企业信息 +func (m *UserCooperateEnterprise) Enterprise(page, pageSize int, count *int64, where ...*model.ModelWhere) ([]*UserCooperateEnterpriseInfo, error) { + db := orm.GetDB().Table(m.TableName()+" AS u"). + Select("u.*", + "(SELECT GROUP_CONCAT(t_p.title) FROM (SELECT id, title FROM technology_paper) AS t_p WHERE FIND_IN_SET(t_p.id, u.paper)) AS paper_title", + "(SELECT GROUP_CONCAT(s_p.title) FROM (SELECT id, title FROM sys_patent) AS s_p WHERE FIND_IN_SET(s_p.id, u.patent)) AS patent_title"). + Where("u.is_deleted = ?", model.DeleteStatusForNot) + + out := make([]*UserCooperateEnterpriseInfo, 0) + + if len(where) > 0 { + for _, v := range where { + db = db.Where(v.Condition, v.Value) + } + } + if err := db.Count(count).Error; err != nil { + return nil, err + } + if err := db.Order("u.id " + model.OrderModeToDesc).Offset((page - 1) * pageSize).Limit(pageSize).Scan(&out).Error; err != nil { + return nil, err + } + return out, nil +} + +func NewUserCooperateEnterprise() *UserCooperateEnterprise { + return &UserCooperateEnterprise{model.NewUserCooperateEnterprise()} +} diff --git a/app/basic/api/upload.go b/app/basic/api/upload.go index 2eccb31..9a0475e 100644 --- a/app/basic/api/upload.go +++ b/app/basic/api/upload.go @@ -3,6 +3,7 @@ package api import ( "SciencesServer/config" "SciencesServer/lib" + "SciencesServer/utils" "strings" "github.com/gin-gonic/gin" @@ -53,8 +54,9 @@ func (a *Upload) Upload(c *gin.Context) { resp := new(lib.UploadHandle) if resp, err = lib.Upload(config.SystemConfig[config.UploadPath].(string), - strings.Split(config.SystemConfig[config.UploadExt].(string), ","), config.SystemConfig[config.UploadSize].(int64), - config.SystemConfig[config.UploadRename].(int) > 0).Handle()(file, config.SettingInfo.Domain); err != nil { + strings.Split(config.SystemConfig[config.UploadExt].(string), ","), + utils.StringToInt64(config.SystemConfig[config.UploadSize].(string)), + true).Handle()(file, config.SettingInfo.Domain); err != nil { APIFailure(err)(c) return } diff --git a/app/common/model/manage_enterprise.go b/app/common/model/manage_enterprise.go new file mode 100644 index 0000000..b784e9f --- /dev/null +++ b/app/common/model/manage_enterprise.go @@ -0,0 +1,20 @@ +package model + +// ManageEnterprise 企业管理数据模型 +type ManageEnterprise struct { + Model + Title string `gorm:"column:title;type:varchar(30);default:null;comment:企业名称" json:"title"` + Name string `gorm:"column:name;type:varchar(50);default:null;comment:企业联系人" json:"name"` + Mobile string `gorm:"column:mobile;type:varchar(15);default:null;comment:企业联系方式" json:"mobile"` + Area + ModelDeleted + ModelAt +} + +func (m *ManageEnterprise) TableName() string { + return "manage_enterprise" +} + +func NewManageEnterprise() *ManageEnterprise { + return &ManageEnterprise{} +} diff --git a/app/common/model/technology_paper.go b/app/common/model/technology_paper.go index d70942c..f2e26d0 100644 --- a/app/common/model/technology_paper.go +++ b/app/common/model/technology_paper.go @@ -8,9 +8,8 @@ import ( // TechnologyPaper 科技论文数据模型 type TechnologyPaper struct { Model - ModelTenant Local - MUid uint64 `gorm:"column:m_uid;type:int;default:0;comment:用户manage_uuid" json:"-"` + 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"` Ext string `gorm:"column:ext;type:varchar(30);default:null;comment:引用格式" json:"ext"` Author string `gorm:"column:author;type:varchar(100);default:null;comment:作者" json:"author"` diff --git a/app/common/model/user_cooperate_enterprise.go b/app/common/model/user_cooperate_enterprise.go new file mode 100644 index 0000000..6463f5f --- /dev/null +++ b/app/common/model/user_cooperate_enterprise.go @@ -0,0 +1,77 @@ +package model + +import ( + "SciencesServer/utils" + "fmt" + "strings" +) + +// UserCooperateEnterprise 用户企业数据模型管理 +type UserCooperateEnterprise struct { + Model + Local + UID uint64 `gorm:"column:uid;type:int;default:0;comment:用户uuid" json:"-"` + Mode UserCooperateEnterpriseMode `gorm:"column:mode;type:int;default:0;comment:合作模式(1:已合作,2:想合作)" json:"mode"` + Title string `gorm:"column:title;type:varchar(30);default:null;comment:企业名称" json:"title"` + Name string `gorm:"column:name;type:varchar(50);default:null;comment:企业联系人" json:"name"` + Mobile string `gorm:"column:mobile;type:varchar(15);default:null;comment:企业联系方式" json:"mobile"` + Paper string `gorm:"column:paper;type:varchar(255);default:null;comment:论文信息" json:"-"` + Patent string `gorm:"column:patent;type:varchar(255);default:null;comment:专利信息" json:"-"` + Content string `gorm:"column:content;type:varchar(255);default:null;comment:合作内容" json:"content"` + ModelDeleted + ModelAt +} + +// UserCooperateEnterpriseMode 用户企业合作模式 +type UserCooperateEnterpriseMode int + +const ( + // UserCooperateEnterpriseModeForCooperateAlready 已合作 + UserCooperateEnterpriseModeForCooperateAlready UserCooperateEnterpriseMode = iota + 1 + // UserCooperateEnterpriseModeForCooperateToWant 想合作 + UserCooperateEnterpriseModeForCooperateToWant +) + +func (m *UserCooperateEnterprise) TableName() string { + return "user_cooperate_enterprise" +} + +func (m *UserCooperateEnterprise) GetPaperAttribute() []string { + out := make([]string, 0) + + for _, v := range strings.Split(m.Paper, ",") { + out = append(out, (&Model{ID: utils.StringToUnit64(v)}).GetEncodeID()) + } + return out +} + +func (m *UserCooperateEnterprise) SetPaperAttribute(value []uint64) { + out := make([]string, 0) + + for _, v := range value { + out = append(out, fmt.Sprintf("%d", v)) + } + m.Paper = strings.Join(out, ",") +} + +func (m *UserCooperateEnterprise) GetPatentAttribute() []string { + out := make([]string, 0) + + for _, v := range strings.Split(m.Patent, ",") { + out = append(out, (&Model{ID: utils.StringToUnit64(v)}).GetEncodeID()) + } + return out +} + +func (m *UserCooperateEnterprise) SetPatentAttribute(value []uint64) { + out := make([]string, 0) + + for _, v := range value { + out = append(out, fmt.Sprintf("%d", v)) + } + m.Patent = strings.Join(out, ",") +} + +func NewUserCooperateEnterprise() *UserCooperateEnterprise { + return &UserCooperateEnterprise{} +} diff --git a/config.yaml b/config.yaml index 43147f8..ca09a3f 100644 --- a/config.yaml +++ b/config.yaml @@ -1,6 +1,6 @@ name: 中科元 # domain 域名 -domain: http://192.168.0.153:8030 +domain: http://192.168.0.144:8000 # token有效时间(秒) token_effect_time: 604800 # multiple_login 多地登录 diff --git a/router/address.go b/router/address.go index 60fef0e..bdbd494 100644 --- a/router/address.go +++ b/router/address.go @@ -201,6 +201,15 @@ func registerEnterpriseAPI(app *gin.Engine) { serviceV1.POST("/demand/edit", _api.DemandEdit) serviceV1.POST("/demand/delete", _api.DemandDelete) } + // Manage 管理信息 + manageV1 := v1.Group("/manage") + { + _api := new(api2.Manage) + manageV1.POST("/enterprise", _api.Enterprise) + manageV1.POST("/enterprise/add", _api.EnterpriseAdd) + manageV1.POST("/enterprise/edit", _api.EnterpriseEdit) + manageV1.POST("/enterprise/delete", _api.EnterpriseDelete) + } // Identity 身份信息 identityV1 := v1.Group("/config") {