feat:完善项目信息

This commit is contained in:
henry
2022-01-11 10:41:46 +08:00
parent 6712feec35
commit 7cab0fb354
24 changed files with 188 additions and 169 deletions

View File

@ -1,3 +1,7 @@
# SciencesServer # SciencesServer
中科元系统管理 中科元系统管理
### 迁移数据
./SciencesServer init -H 192.168.0.188 -P 3306 -d sciences -u appuser -p ABCabc01

View File

@ -4,7 +4,6 @@ import (
"SciencesServer/app/api/admin/controller/manage" "SciencesServer/app/api/admin/controller/manage"
"SciencesServer/app/basic/api" "SciencesServer/app/basic/api"
"SciencesServer/app/basic/config" "SciencesServer/app/basic/config"
"SciencesServer/app/service"
"SciencesServer/app/session" "SciencesServer/app/session"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
@ -51,7 +50,7 @@ func (*Manage) Expert(c *gin.Context) {
api.APIFailure(err.(error))(c) api.APIFailure(err.(error))(c)
return return
} }
data, err := manage.NewInstance()(api.GetSession()(c).(*service.Session), api.GetTenantID()(c).(string)). data, err := manage.NewInstance()(api.GetSession()(c).(*session.Admin), api.GetTenantID()(c).(string)).
Expert(form.Name, form.Status, form.Page, form.PageSize) Expert(form.Name, form.Status, form.Page, form.PageSize)
api.APIResponse(err, data) api.APIResponse(err, data)
} }

View File

@ -5,19 +5,19 @@ import (
"SciencesServer/app/basic/config" "SciencesServer/app/basic/config"
"SciencesServer/app/basic/controller" "SciencesServer/app/basic/controller"
model2 "SciencesServer/app/common/model" model2 "SciencesServer/app/common/model"
"SciencesServer/app/service" "SciencesServer/app/session"
"gorm.io/gorm" "gorm.io/gorm"
"strings" "strings"
"time" "time"
) )
type Instance struct { type Instance struct {
*service.Session *session.Admin
gorm.Model gorm.Model
local string local string
} }
type InstanceHandle func(session *service.Session, local string) *Instance type InstanceHandle func(session *session.Admin, local string) *Instance
type ( type (
// InstanceForExpert 专家信息 // InstanceForExpert 专家信息
@ -87,10 +87,10 @@ func (c *Instance) Expert(name string, status int, page, pageSize int) (*control
} }
func NewInstance() InstanceHandle { func NewInstance() InstanceHandle {
return func(session *service.Session, local string) *Instance { return func(session *session.Admin, local string) *Instance {
return &Instance{ return &Instance{
Session: session, Admin: session,
local: local, local: local,
} }
} }
} }

View File

@ -266,6 +266,6 @@ func (c *Innovate) KindDelete(id uint64) error {
func NewInnovate() InnovateHandle { func NewInnovate() InnovateHandle {
return func(admin *session.Admin) *Innovate { return func(admin *session.Admin) *Innovate {
return &Innovate{} return &Innovate{admin}
} }
} }

View File

@ -27,6 +27,7 @@ type (
InstanceInfo struct { InstanceInfo struct {
ID string `json:"id"` ID string `json:"id"`
*model2.SysTenant *model2.SysTenant
Area string `json:"area"`
} }
// InstanceSelectInfo 租户筛选信息 // InstanceSelectInfo 租户筛选信息
InstanceSelectInfo struct { InstanceSelectInfo struct {
@ -66,6 +67,7 @@ func (c *Instance) Index(name string, page, pageSize int) (*controller.ReturnPag
list = append(list, &InstanceInfo{ list = append(list, &InstanceInfo{
ID: v.GetEncodeID(), ID: v.GetEncodeID(),
SysTenant: v, SysTenant: v,
Area: v.FormatBasic(),
}) })
} }
return &controller.ReturnPages{Data: list, Count: count}, nil return &controller.ReturnPages{Data: list, Count: count}, nil

View File

@ -38,11 +38,12 @@ type (
} }
// InstanceUserInfo 用户信息 // InstanceUserInfo 用户信息
InstanceUserInfo struct { InstanceUserInfo struct {
UID string `json:"uid"` UID string `json:"uid"`
Avatar string `json:"avatar"` Avatar string `json:"avatar"`
Name string `json:"name"` Name string `json:"name"`
Email string `json:"email"` Email string `json:"email"`
Mobile string `json:"mobile"` Mobile string `json:"mobile"`
IsSuper bool `json:"is_super"` // 总后台
} }
// InstanceDepartmentInfo 部门信息 // InstanceDepartmentInfo 部门信息
InstanceDepartmentInfo struct { InstanceDepartmentInfo struct {
@ -136,7 +137,7 @@ func (c *Instance) Info() (*InstanceUserInfo, error) {
} }
return &InstanceUserInfo{ return &InstanceUserInfo{
UID: mSysUser.UUIDString(), Avatar: mSysUser.Avatar, Name: mSysUser.Name, UID: mSysUser.UUIDString(), Avatar: mSysUser.Avatar, Name: mSysUser.Name,
Email: mSysUser.Email, Mobile: mSysUser.Mobile, Email: mSysUser.Email, Mobile: mSysUser.Mobile, IsSuper: c.TenantID <= 0,
}, nil }, nil
} }

View File

@ -17,12 +17,13 @@ type ServiceInnovateInfo struct {
Title string `json:"title"` Title string `json:"title"`
TenantName string `json:"tenant_name"` TenantName string `json:"tenant_name"`
KindTitle string `json:"kind_title"` KindTitle string `json:"kind_title"`
Sort int `json:"sort"`
CreatedAt time.Time `json:"created_at"` CreatedAt time.Time `json:"created_at"`
} }
func (m *ServiceInnovate) Innovate(page, pageSize int, count *int64, where ...*model.ModelWhere) ([]*ServiceInnovateInfo, error) { func (m *ServiceInnovate) Innovate(page, pageSize int, count *int64, where ...*model.ModelWhere) ([]*ServiceInnovateInfo, error) {
db := orm.GetDB().Table(m.TableName()+" AS i"). db := orm.GetDB().Table(m.TableName()+" AS i").
Select("i.id", "i.title", "t.name AS tenant_name", "k.title AS kind_title", "i.created_at", Select("i.id", "i.title", "t.name AS tenant_name", "k.title AS kind_title", "i.sort", "i.created_at",
"t.province", "t.city"). "t.province", "t.city").
Joins(fmt.Sprintf("LEFT JOIN %s AS t ON i.tenant_id = t.id", model.NewSysTenant().TableName())). Joins(fmt.Sprintf("LEFT JOIN %s AS t ON i.tenant_id = t.id", model.NewSysTenant().TableName())).
Joins(fmt.Sprintf("LEFT JOIN %s AS k ON i.kind = k.id", model.NewServiceInnovateKind().TableName())). Joins(fmt.Sprintf("LEFT JOIN %s AS k ON i.kind = k.id", model.NewServiceInnovateKind().TableName())).

View File

@ -0,0 +1,3 @@
package api
type basic struct{}

View File

@ -3,26 +3,28 @@ package api
import ( import (
"SciencesServer/app/api/website/controller/service" "SciencesServer/app/api/website/controller/service"
"SciencesServer/app/basic/api" "SciencesServer/app/basic/api"
"SciencesServer/app/session"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
type Service struct{} type Service struct{}
func (*Service) SolutionCase(c *gin.Context) { func (*Service) SolutionCase(c *gin.Context) {
data, err := service.NewSolutionCase()(nil, "").Instance() data, err := service.NewSolutionCase()(nil, 0).Instance()
api.APIResponse(err, data)(c) api.APIResponse(err, data)(c)
} }
func (*Service) SolutionCaseList(c *gin.Context) { func (*Service) SolutionCaseList(c *gin.Context) {
form := &struct { form := &struct {
api.IDStringForm KindID string `json:"kind_id" form:"kind_id"`
api.PageForm api.PageForm
}{} }{}
if err := api.Bind(form)(c); err != nil { if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c) api.APIFailure(err.(error))(c)
return return
} }
data, err := service.NewSolutionCase()(nil, "").List(form.Convert(), form.Page, form.PageSize) data, err := service.NewSolutionCase()(nil, 0).List((&api.IDStringForm{ID: form.KindID}).Convert(),
form.Page, form.PageSize)
api.APIResponse(err, data)(c) api.APIResponse(err, data)(c)
} }
@ -33,26 +35,28 @@ func (*Service) SolutionCaseDetail(c *gin.Context) {
api.APIFailure(err.(error))(c) api.APIFailure(err.(error))(c)
return return
} }
data, err := service.NewSolutionCase()(nil, "").Detail(form.Convert()) data, err := service.NewSolutionCase()(api.GetSession()(c).(*session.Enterprise),
api.GetTenantID()(c).(uint64)).Detail(form.Convert())
api.APIResponse(err, data)(c) api.APIResponse(err, data)(c)
} }
func (*Service) Innovate(c *gin.Context) { func (*Service) Innovate(c *gin.Context) {
form := &struct { form := &struct {
Kind int `json:"kind" form:"kind"` KindID string `json:"kind_id" form:"kind_id"`
Title string `json:"title" form:"title"` Title string `json:"title" form:"title"`
api.PageForm api.PageForm
}{} }{}
if err := api.Bind(form)(c); err != nil { if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c) api.APIFailure(err.(error))(c)
return return
} }
data, err := service.NewInnovate()(nil, "").Instance(form.Kind, form.Title, form.Page, form.PageSize) data, err := service.NewInnovate()(nil, 0).Instance((&api.IDStringForm{ID: form.KindID}).Convert(),
form.Title, form.Page, form.PageSize)
api.APIResponse(err, data)(c) api.APIResponse(err, data)(c)
} }
func (*Service) InnovateKind(c *gin.Context) { func (*Service) InnovateKind(c *gin.Context) {
data, err := service.NewInnovate()(nil, "").Kind() data, err := service.NewInnovate()(nil, 0).Kind()
api.APIResponse(err, data)(c) api.APIResponse(err, data)(c)
} }
@ -63,6 +67,6 @@ func (*Service) InnovateDetail(c *gin.Context) {
api.APIFailure(err.(error))(c) api.APIFailure(err.(error))(c)
return return
} }
data, err := service.NewInnovate()(nil, "").Detail(form.Convert()) data, err := service.NewInnovate()(nil, 0).Detail(form.Convert())
api.APIResponse(err, data)(c) api.APIResponse(err, data)(c)
} }

View File

@ -4,17 +4,17 @@ import (
"SciencesServer/app/api/website/model" "SciencesServer/app/api/website/model"
config2 "SciencesServer/app/basic/config" config2 "SciencesServer/app/basic/config"
model2 "SciencesServer/app/common/model" model2 "SciencesServer/app/common/model"
"SciencesServer/app/service" "SciencesServer/app/session"
"SciencesServer/config" "SciencesServer/config"
"SciencesServer/utils" "SciencesServer/utils"
"strings" "strings"
) )
type Index struct { type Index struct {
*service.Session *session.Enterprise
} }
type IndexHandle func(session *service.Session) *Index type IndexHandle func(session *session.Enterprise) *Index
type ( type (
// InstanceInfo 首页信息 // InstanceInfo 首页信息
@ -218,7 +218,58 @@ func (c *Index) DistributionExpert(province, city string) (map[string]*InstanceD
}, },
}, },
} }
_out["630000"] = &InstanceDistributionDetailInfo{
Code: "630000",
Name: "青海省",
Count: 1200,
Industry: nil,
Children: map[string]*InstanceDistributionDetailInfo{
"630200": &InstanceDistributionDetailInfo{
Code: "630200",
Name: "海东市",
Count: 1200,
Industry: nil,
Children: nil,
},
},
}
_out["230000"] = &InstanceDistributionDetailInfo{
Code: "230000",
Name: "黑龙江",
Count: 6000,
Industry: nil,
Children: map[string]*InstanceDistributionDetailInfo{
"230100": &InstanceDistributionDetailInfo{
Code: "230100",
Name: "哈尔滨市",
Count: 3000,
Industry: nil,
Children: nil,
},
"230200": &InstanceDistributionDetailInfo{
Code: "230200",
Name: "齐齐哈尔市",
Count: 3000,
Industry: nil,
Children: nil,
},
},
}
_out["330000"] = &InstanceDistributionDetailInfo{
Code: "330000",
Name: "浙江省",
Count: 5000,
Industry: nil,
Children: map[string]*InstanceDistributionDetailInfo{
"330100": &InstanceDistributionDetailInfo{
Code: "330100",
Name: "杭州市",
Count: 5000,
Industry: nil,
Children: nil,
},
},
}
return _out, nil return _out, nil
} }
@ -293,9 +344,9 @@ func (c *Index) Instance() (*InstanceInfo, error) {
} }
func NewIndex() IndexHandle { func NewIndex() IndexHandle {
return func(session *service.Session) *Index { return func(session *session.Enterprise) *Index {
return &Index{ return &Index{
Session: session, session,
} }
} }
} }

View File

@ -12,10 +12,10 @@ import (
// Innovate 创新服务 // Innovate 创新服务
type Innovate struct { type Innovate struct {
*session.Enterprise *session.Enterprise
local string tenantID uint64
} }
type InnovateHandle func(session *session.Enterprise, local string) *Innovate type InnovateHandle func(session *session.Enterprise, tenantID uint64) *Innovate
type ( type (
// InnovateInfo 创新服务信息 // InnovateInfo 创新服务信息
@ -39,7 +39,7 @@ type (
) )
// Instance 首页信息 // Instance 首页信息
func (c *Innovate) Instance(kind int, title string, page, pageSize int) (*controller.ReturnPages, error) { func (c *Innovate) Instance(kind uint64, title string, page, pageSize int) (*controller.ReturnPages, error) {
mServiceInnovate := model.NewServiceInnovate() mServiceInnovate := model.NewServiceInnovate()
out := make([]*model2.ServiceInnovate, 0) out := make([]*model2.ServiceInnovate, 0)
@ -109,10 +109,10 @@ func (c *Innovate) Detail(id uint64) (*InnovateDetailInfo, error) {
} }
func NewInnovate() InnovateHandle { func NewInnovate() InnovateHandle {
return func(session *session.Enterprise, local string) *Innovate { return func(session *session.Enterprise, tenantID uint64) *Innovate {
return &Innovate{ return &Innovate{
Enterprise: session, Enterprise: session,
local: local, tenantID: tenantID,
} }
} }
} }

View File

@ -14,17 +14,17 @@ import (
// SolutionCase 解决方案案例 // SolutionCase 解决方案案例
type SolutionCase struct { type SolutionCase struct {
*session.Enterprise *session.Enterprise
local string tenantID uint64
} }
type SolutionCaseHandle func(session *session.Enterprise, local string) *SolutionCase type SolutionCaseHandle func(session *session.Enterprise, tenantID uint64) *SolutionCase
type ( type (
// SolutionCaseInfo 基本信息 // SolutionCaseInfo 基本信息
SolutionCaseInfo struct { SolutionCaseInfo struct {
ID string `json:"id"` ID string `json:"id"`
MarkID uint64 `json:"-"` MarkID uint64 `json:"-"`
Kind model2.ServiceSolutionCaseKind `json:"kind"` Mode model2.ServiceSolutionCaseMode `json:"mode"`
Title string `json:"title"` Title string `json:"title"`
Image string `json:"image"` Image string `json:"image"`
Children []*SolutionCaseBasic `json:"children"` Children []*SolutionCaseBasic `json:"children"`
@ -48,7 +48,7 @@ type (
// Instance 服务解决方案案例 // Instance 服务解决方案案例
func (c *SolutionCase) Instance() ([]*SolutionCaseInfo, error) { func (c *SolutionCase) Instance() ([]*SolutionCaseInfo, error) {
mServiceSolutionCase := model.NewServiceSolutionCase() mServiceSolutionCase := model.NewServiceSolutionCase()
out, err := mServiceSolutionCase.SolutionCase(2) out, err := mServiceSolutionCase.SolutionCase(6)
if err != nil { if err != nil {
return nil, err return nil, err
@ -72,7 +72,7 @@ func (c *SolutionCase) Instance() ([]*SolutionCaseInfo, error) {
} }
if !isExist { if !isExist {
ret = append(ret, &SolutionCaseInfo{ ret = append(ret, &SolutionCaseInfo{
ID: v.GetEncodeID(), MarkID: v.ID, Kind: v.Kind, Title: v.Title, ID: v.GetEncodeID(), MarkID: v.ID, Mode: v.Mode, Title: v.Title,
Image: v.Image.Analysis(config.SettingInfo.Domain), Image: v.Image.Analysis(config.SettingInfo.Domain),
Children: []*SolutionCaseBasic{detail}, Children: []*SolutionCaseBasic{detail},
}) })
@ -82,17 +82,17 @@ func (c *SolutionCase) Instance() ([]*SolutionCaseInfo, error) {
} }
// List 列表信息 // List 列表信息
func (c *SolutionCase) List(id uint64, page, pageSize int) (*controller.ReturnPages, error) { func (c *SolutionCase) List(kindID uint64, page, pageSize int) (*controller.ReturnPages, error) {
mServiceSolutionCaseDetail := model.NewServiceSolutionCaseDetail() mServiceSolutionCase := model.NewServiceSolutionCase()
out := make([]*model2.ServiceSolutionCaseDetail, 0) out := make([]*model2.ServiceSolutionCase, 0)
var count int64 var count int64
err := model2.PagesFields(mServiceSolutionCaseDetail.ServiceSolutionCaseDetail, &out, []string{"id", "title", err := model2.PagesFields(mServiceSolutionCase.ServiceSolutionCase, &out, []string{"id", "title",
"image", "description"}, page, pageSize, &count, "image", "description"}, page, pageSize, &count,
&model2.ModelWhereOrder{ &model2.ModelWhereOrder{
Where: model2.NewWhere("solution_case_id", id), Where: model2.NewWhere("kind_id", kindID),
Order: model2.NewOrder("sort", model2.OrderModeToDesc), Order: model2.NewOrder("sort", model2.OrderModeToDesc),
}, &model2.ModelWhereOrder{ }, &model2.ModelWhereOrder{
Order: model2.NewOrder("id", model2.OrderModeToDesc), Order: model2.NewOrder("id", model2.OrderModeToDesc),
@ -114,36 +114,37 @@ func (c *SolutionCase) List(id uint64, page, pageSize int) (*controller.ReturnPa
// Detail 详细信息 // Detail 详细信息
func (c *SolutionCase) Detail(id uint64) (*SolutionCaseDetail, error) { func (c *SolutionCase) Detail(id uint64) (*SolutionCaseDetail, error) {
mServiceSolutionCaseDetail := model.NewServiceSolutionCaseDetail() mServiceSolutionCase := model.NewServiceSolutionCase()
mServiceSolutionCaseDetail.ID = id mServiceSolutionCase.ID = id
if isExist, err := model2.FirstField(mServiceSolutionCaseDetail.ServiceSolutionCaseDetail, []string{"id", "title", if isExist, err := model2.FirstField(mServiceSolutionCase.ServiceSolutionCase, []string{"id", "title",
"image", "description", "content", "visits", "created_at"}); err != nil { "image", "description", "content", "visits", "created_at"}); err != nil {
return nil, err return nil, err
} else if !isExist { } else if !isExist {
return nil, errors.New("操作错误,案例信息不存在或已被删除") return nil, errors.New("操作错误,案例信息不存在或已被删除")
} }
_ = model2.Updates(mServiceSolutionCaseDetail.ServiceSolutionCaseDetail, map[string]interface{}{
_ = model2.Updates(mServiceSolutionCase.ServiceSolutionCase, map[string]interface{}{
"visits": gorm.Expr("visits + ?", 1), "updated_at": time.Now(), "visits": gorm.Expr("visits + ?", 1), "updated_at": time.Now(),
}) })
return &SolutionCaseDetail{ return &SolutionCaseDetail{
SolutionCaseBasic: SolutionCaseBasic{ SolutionCaseBasic: SolutionCaseBasic{
ID: mServiceSolutionCaseDetail.GetEncodeID(), ID: mServiceSolutionCase.GetEncodeID(),
Title: mServiceSolutionCaseDetail.Title, Title: mServiceSolutionCase.Title,
Image: mServiceSolutionCaseDetail.Image.Analysis(config.SettingInfo.Domain), Image: mServiceSolutionCase.Image.Analysis(config.SettingInfo.Domain),
Description: mServiceSolutionCaseDetail.Description, Description: mServiceSolutionCase.Description,
}, },
Visits: mServiceSolutionCaseDetail.Visits, Visits: mServiceSolutionCase.Visits,
Content: mServiceSolutionCaseDetail.Content, Content: mServiceSolutionCase.Content,
CreatedAt: mServiceSolutionCaseDetail.CreatedAt, CreatedAt: mServiceSolutionCase.CreatedAt,
}, nil }, nil
} }
func NewSolutionCase() SolutionCaseHandle { func NewSolutionCase() SolutionCaseHandle {
return func(session *session.Enterprise, local string) *SolutionCase { return func(session *session.Enterprise, tenantID uint64) *SolutionCase {
return &SolutionCase{ return &SolutionCase{
Enterprise: session, Enterprise: session,
local: local, tenantID: tenantID,
} }
} }
} }

View File

@ -13,7 +13,7 @@ type ServiceSolutionCase struct {
// ServiceSolutionCaseInfo 解决方案案例信息 // ServiceSolutionCaseInfo 解决方案案例信息
type ServiceSolutionCaseInfo struct { type ServiceSolutionCaseInfo struct {
model.Model model.Model
Kind model.ServiceSolutionCaseKind `json:"kind"` Mode model.ServiceSolutionCaseMode `json:"mode"`
Title string `json:"title"` Title string `json:"title"`
model.Image model.Image
DetailID uint64 `json:"detail_id"` DetailID uint64 `json:"detail_id"`
@ -23,19 +23,37 @@ type ServiceSolutionCaseInfo struct {
} }
// SolutionCase 解决方案案例信息 // SolutionCase 解决方案案例信息
func (m *ServiceSolutionCase) SolutionCase(limit int) ([]*ServiceSolutionCaseInfo, error) { func (m *ServiceSolutionCase) SolutionCase(limit int, where ...*model.ModelWhere) ([]*ServiceSolutionCaseInfo, error) {
mServiceSolutionCaseDetail := model.NewServiceSolutionCaseDetail() //mServiceSolutionCaseKind := model.NewServiceSolutionCaseKind()
db := orm.GetDB().Table(m.TableName()+" AS s"). // db := orm.GetDB().Table(m.TableName()+" AS s").
Select("s.id", "s.kind", "s.image", // Select("s.id", "s.mode", "s.image",
// "d.id AS detail_id", "d.title AS detail_title", "d.image AS detail_image", "d.description AS detail_description").
// Joins(fmt.Sprintf(`INNER JOIN (SELECT id, solution_case_id, title, image, description FROM %s AS a WHERE
//(SELECT count( b.id ) FROM %s AS b WHERE a.solution_case_id = b.solution_case_id AND a.id < b.id AND b.is_deleted = %d) < %d
//AND a.is_deleted = %d ORDER BY a.sort DESC, a.id DESC) AS d ON s.id = d.solution_case_id`,
// mServiceSolutionCaseKind.TableName(), mServiceSolutionCaseKind.TableName(), model.DeleteStatusForNot, limit, model.DeleteStatusForNot)).
// Where("s.is_deleted = ?", model.DeleteStatusForNot).
// Order("s.sort " + model.OrderModeToDesc)
db := orm.GetDB().Table(model.NewServiceSolutionCaseKind().TableName()+" AS k").
Select("k.id AS id", "k.mode", "k.image AS image",
"d.id AS detail_id", "d.title AS detail_title", "d.image AS detail_image", "d.description AS detail_description"). "d.id AS detail_id", "d.title AS detail_title", "d.image AS detail_image", "d.description AS detail_description").
Joins(fmt.Sprintf(`INNER JOIN (SELECT id, solution_case_id, title, image, description FROM %s AS a WHERE Joins(fmt.Sprintf(`LEFT JOIN (SELECT id, kind_id, title, image, description, sort FROM %s AS a WHERE
(SELECT count( b.id ) FROM %s AS b WHERE a.solution_case_id = b.solution_case_id AND a.id < b.id AND b.is_deleted = %d) < %d (SELECT count( b.id ) FROM %s AS b WHERE a.kind_id = b.kind_id AND a.id < b.id AND b.is_deleted = %d) < %d
AND a.is_deleted = %d ORDER BY a.sort DESC, a.id DESC) AS d ON s.id = d.solution_case_id`, AND a.is_deleted = %d ORDER BY a.sort ASC, a.id DESC) AS d ON k.id = d.kind_id`,
mServiceSolutionCaseDetail.TableName(), mServiceSolutionCaseDetail.TableName(), model.DeleteStatusForNot, limit, model.DeleteStatusForNot)). m.TableName(), m.TableName(), model.DeleteStatusForNot, limit, model.DeleteStatusForNot)).
Where("s.is_deleted = ?", model.DeleteStatusForNot). Where("k.is_deleted = ?", model.DeleteStatusForNot).
Order("s.sort " + model.OrderModeToDesc) Order("k.mode " + model.OrderModeToAsc).
Order("k.sort " + model.OrderModeToAsc).
Order("k.id " + model.OrderModeToDesc).
Order("d.sort " + model.OrderModeToAsc)
if len(where) > 0 {
for _, v := range where {
db = db.Where(v.Condition, v.Value)
}
}
out := make([]*ServiceSolutionCaseInfo, 0) out := make([]*ServiceSolutionCaseInfo, 0)
err := db.Scan(&out).Error err := db.Scan(&out).Error

View File

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

View File

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

View File

@ -32,12 +32,12 @@ func GetSession() ApiHandle {
func GetTenantID() ApiHandle { func GetTenantID() ApiHandle {
return func(c *gin.Context) interface{} { return func(c *gin.Context) interface{} {
_, isExist := c.Get(config.ContentForTenantID) value, isExist := c.Get(config.ContentForTenantID)
//value
if !isExist { if !isExist {
return 0 return 0
} }
return uint64(0) return utils.StringToUnit64(value.(string))
} }
} }

View File

@ -137,7 +137,7 @@ func (this *Instance) Handle() {
&synchronized{iModel: model.NewTechnologyPaper()}, &synchronized{iModel: model.NewTechnologyProduct()}, &synchronized{iModel: model.NewTechnologyPaper()}, &synchronized{iModel: model.NewTechnologyProduct()},
&synchronized{iModel: model.NewTechnologyProject()}, &synchronized{iModel: model.NewTechnologyTopic()}, &synchronized{iModel: model.NewTechnologyProject()}, &synchronized{iModel: model.NewTechnologyTopic()},
&synchronized{iModel: model.NewServiceDocking()}, &synchronized{iModel: model.NewServiceMessage()}, &synchronized{iModel: model.NewServiceDocking()}, &synchronized{iModel: model.NewServiceMessage()},
&synchronized{iModel: model.NewServiceSolutionCase()}, &synchronized{iModel: model.NewServiceSolutionCaseDetail()}, &synchronized{iModel: model.NewServiceSolutionCase()}, &synchronized{iModel: model.NewServiceSolutionCaseKind()},
&synchronized{iModel: model.NewServiceInnovate()}, &synchronized{iModel: model.NewServiceInnovateKind()}, &synchronized{iModel: model.NewServiceInnovate()}, &synchronized{iModel: model.NewServiceInnovateKind()},
// 活动管理 // 活动管理
&synchronized{iModel: model.NewActivityInstance()}, &synchronized{iModel: model.NewActivityApply()}, &synchronized{iModel: model.NewActivityInstance()}, &synchronized{iModel: model.NewActivityApply()},

View File

@ -1,23 +0,0 @@
package model
// ServiceSolutionCaseDetail 服务解决案例数据模型
type ServiceSolutionCaseDetail struct {
Model
SolutionCaseID uint64 `json:"solution_case_id"`
Title string `gorm:"column:title;type:varchar(100);default:'';comment:标题" json:"title"`
Image
Description string `gorm:"column:description;type:varchar(255);comment:描述" json:"description"`
Content string `gorm:"column:content;type:text;comment:内容" json:"content"`
Visits int `gorm:"column:visits;type:int(6);default:0;comment:浏览数" json:"visits"`
Sort int `gorm:"column:sort;type:tinyint(3);default:0;comment:排序,数值越大,优先排序" json:"sort"`
ModelDeleted
ModelAt
}
func (m *ServiceSolutionCaseDetail) TableName() string {
return "service_solution_case_detail"
}
func NewServiceSolutionCaseDetail() *ServiceSolutionCaseDetail {
return &ServiceSolutionCaseDetail{}
}

View File

@ -1,54 +0,0 @@
package service
import (
"SciencesServer/utils"
"encoding/json"
)
type Session struct {
Token string `json:"token"` // token
UID uint64 `json:"uid"` // 唯一标识ID
TenantID uint64 `json:"tenant_id"` // 租户ID
Name string `json:"name"` // 名称
Mobile string `json:"mobile"` // 手机号码
IsAdmin bool `json:"is_admin"` // 是否超管
}
func (this *Session) MarshalBinary() ([]byte, error) {
return json.Marshal(this)
}
func (this *Session) UnmarshalBinary(data []byte) error {
return utils.FromJSONBytes(data, this)
}
func NewSession() *Session {
return &Session{}
}
// SessionEnterprise 企业用户
type SessionEnterprise struct {
UID uint64 `json:"uid"` // 唯一标识ID
TenantID uint64 `json:"tenant_id"` // 租户ID
Token string `json:"token"` // token
Name string `json:"name"` // 名称
Mobile string `json:"mobile"` // 手机号码
Identity int `json:"identity"` // 总身份信息
SelectIdentity int `json:"select_identity"` // 选中身份信息
}
func (this *SessionEnterprise) UIDToString() string {
return utils.UintToString(this.UID)
}
func (this *SessionEnterprise) MarshalBinary() ([]byte, error) {
return json.Marshal(this)
}
func (this *SessionEnterprise) UnmarshalBinary(data []byte) error {
return utils.FromJSONBytes(data, this)
}
func NewSessionEnterprise() *SessionEnterprise {
return &SessionEnterprise{}
}

View File

@ -3,6 +3,7 @@ package session
import ( import (
"SciencesServer/utils" "SciencesServer/utils"
"encoding/json" "encoding/json"
"fmt"
) )
// Tenant 租户数据信息 // Tenant 租户数据信息
@ -12,6 +13,10 @@ type Tenant struct {
Domain string `json:"domain"` Domain string `json:"domain"`
} }
func (this *Tenant) IDToString() string {
return fmt.Sprintf("%d", this.ID)
}
func (this *Tenant) MarshalBinary() ([]byte, error) { func (this *Tenant) MarshalBinary() ([]byte, error) {
return json.Marshal(this) return json.Marshal(this)
} }

View File

@ -2,6 +2,7 @@ package serve
import ( import (
"SciencesServer/app" "SciencesServer/app"
"SciencesServer/app/session"
"SciencesServer/config" "SciencesServer/config"
"SciencesServer/cron" "SciencesServer/cron"
"SciencesServer/router" "SciencesServer/router"
@ -81,13 +82,18 @@ func run() {
}, },
}).Init()), }).Init()),
web.WithFunction(func(src string) (bool, func(r *http.Request)) { web.WithFunction(func(src string) (bool, func(r *http.Request)) {
value, _ := cache.Cache.HGet(config.RedisKeyForTenant, src) // 安全域名
_cache, _ := cache.Cache.HGet(config.RedisKeyForTenant, src)
if value == "" { if _cache == "" {
return true, nil return true, nil
} }
// 解析信息
out := new(session.Tenant)
_ = out.UnmarshalBinary([]byte(_cache))
return true, func(r *http.Request) { return true, func(r *http.Request) {
r.Header.Set("", value) r.Header.Set(config.ContentForTenantID, out.IDToString())
} }
}), }),
).Run() ).Run()

View File

@ -3,6 +3,7 @@ package router
import ( import (
"SciencesServer/app/logic" "SciencesServer/app/logic"
"SciencesServer/app/service" "SciencesServer/app/service"
"SciencesServer/app/session"
"SciencesServer/config" "SciencesServer/config"
"SciencesServer/utils" "SciencesServer/utils"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@ -63,8 +64,8 @@ func NeedPermission(skipperURL ...SkipperURL) PermissionHandle {
c.Next() c.Next()
return return
} }
session, _ := c.Get(config.TokenForSession) value, _ := c.Get(config.TokenForSession)
_session := session.(*service.Session) _session := value.(*session.Admin)
if !_session.IsAdmin { if !_session.IsAdmin {
if _session.TenantID > 0 { if _session.TenantID > 0 {

View File

@ -41,7 +41,7 @@ func (this *Router) Init() *gin.Engine {
app.NoMethod(NoMethodHandler()) app.NoMethod(NoMethodHandler())
app.Use(LoggerHandle("log/gin.log", 3)) app.Use(LoggerHandle("log/gin.log", 3))
app.Use(TimeoutHandle(time.Second * 30)) app.Use(TimeoutHandle(time.Second * 30))
app.Use(RecoveryHandler()) //app.Use(RecoveryHandler())
app.Use(ContentAnalysisHandler()) app.Use(ContentAnalysisHandler())
if this.RateLimitConfig != nil { if this.RateLimitConfig != nil {