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 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/basic/api"
"SciencesServer/app/basic/config"
"SciencesServer/app/service"
"SciencesServer/app/session"
"github.com/gin-gonic/gin"
)
@ -51,7 +50,7 @@ func (*Manage) Expert(c *gin.Context) {
api.APIFailure(err.(error))(c)
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)
api.APIResponse(err, data)
}

View File

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

View File

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

View File

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

View File

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

View File

@ -17,12 +17,13 @@ type ServiceInnovateInfo struct {
Title string `json:"title"`
TenantName string `json:"tenant_name"`
KindTitle string `json:"kind_title"`
Sort int `json:"sort"`
CreatedAt time.Time `json:"created_at"`
}
func (m *ServiceInnovate) Innovate(page, pageSize int, count *int64, where ...*model.ModelWhere) ([]*ServiceInnovateInfo, error) {
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").
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())).

View File

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

View File

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

View File

@ -4,17 +4,17 @@ import (
"SciencesServer/app/api/website/model"
config2 "SciencesServer/app/basic/config"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/service"
"SciencesServer/app/session"
"SciencesServer/config"
"SciencesServer/utils"
"strings"
)
type Index struct {
*service.Session
*session.Enterprise
}
type IndexHandle func(session *service.Session) *Index
type IndexHandle func(session *session.Enterprise) *Index
type (
// 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
}
@ -293,9 +344,9 @@ func (c *Index) Instance() (*InstanceInfo, error) {
}
func NewIndex() IndexHandle {
return func(session *service.Session) *Index {
return func(session *session.Enterprise) *Index {
return &Index{
Session: session,
session,
}
}
}

View File

@ -12,10 +12,10 @@ import (
// Innovate 创新服务
type Innovate struct {
*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 (
// InnovateInfo 创新服务信息
@ -39,7 +39,7 @@ type (
)
// 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()
out := make([]*model2.ServiceInnovate, 0)
@ -109,10 +109,10 @@ func (c *Innovate) Detail(id uint64) (*InnovateDetailInfo, error) {
}
func NewInnovate() InnovateHandle {
return func(session *session.Enterprise, local string) *Innovate {
return func(session *session.Enterprise, tenantID uint64) *Innovate {
return &Innovate{
Enterprise: session,
local: local,
tenantID: tenantID,
}
}
}

View File

@ -14,17 +14,17 @@ import (
// SolutionCase 解决方案案例
type SolutionCase struct {
*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 (
// SolutionCaseInfo 基本信息
SolutionCaseInfo struct {
ID string `json:"id"`
MarkID uint64 `json:"-"`
Kind model2.ServiceSolutionCaseKind `json:"kind"`
Mode model2.ServiceSolutionCaseMode `json:"mode"`
Title string `json:"title"`
Image string `json:"image"`
Children []*SolutionCaseBasic `json:"children"`
@ -48,7 +48,7 @@ type (
// Instance 服务解决方案案例
func (c *SolutionCase) Instance() ([]*SolutionCaseInfo, error) {
mServiceSolutionCase := model.NewServiceSolutionCase()
out, err := mServiceSolutionCase.SolutionCase(2)
out, err := mServiceSolutionCase.SolutionCase(6)
if err != nil {
return nil, err
@ -72,7 +72,7 @@ func (c *SolutionCase) Instance() ([]*SolutionCaseInfo, error) {
}
if !isExist {
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),
Children: []*SolutionCaseBasic{detail},
})
@ -82,17 +82,17 @@ func (c *SolutionCase) Instance() ([]*SolutionCaseInfo, error) {
}
// List 列表信息
func (c *SolutionCase) List(id uint64, page, pageSize int) (*controller.ReturnPages, error) {
mServiceSolutionCaseDetail := model.NewServiceSolutionCaseDetail()
func (c *SolutionCase) List(kindID uint64, page, pageSize int) (*controller.ReturnPages, error) {
mServiceSolutionCase := model.NewServiceSolutionCase()
out := make([]*model2.ServiceSolutionCaseDetail, 0)
out := make([]*model2.ServiceSolutionCase, 0)
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,
&model2.ModelWhereOrder{
Where: model2.NewWhere("solution_case_id", id),
Where: model2.NewWhere("kind_id", kindID),
Order: model2.NewOrder("sort", model2.OrderModeToDesc),
}, &model2.ModelWhereOrder{
Order: model2.NewOrder("id", model2.OrderModeToDesc),
@ -114,36 +114,37 @@ func (c *SolutionCase) List(id uint64, page, pageSize int) (*controller.ReturnPa
// Detail 详细信息
func (c *SolutionCase) Detail(id uint64) (*SolutionCaseDetail, error) {
mServiceSolutionCaseDetail := model.NewServiceSolutionCaseDetail()
mServiceSolutionCaseDetail.ID = id
mServiceSolutionCase := model.NewServiceSolutionCase()
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 {
return nil, err
} else if !isExist {
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(),
})
return &SolutionCaseDetail{
SolutionCaseBasic: SolutionCaseBasic{
ID: mServiceSolutionCaseDetail.GetEncodeID(),
Title: mServiceSolutionCaseDetail.Title,
Image: mServiceSolutionCaseDetail.Image.Analysis(config.SettingInfo.Domain),
Description: mServiceSolutionCaseDetail.Description,
ID: mServiceSolutionCase.GetEncodeID(),
Title: mServiceSolutionCase.Title,
Image: mServiceSolutionCase.Image.Analysis(config.SettingInfo.Domain),
Description: mServiceSolutionCase.Description,
},
Visits: mServiceSolutionCaseDetail.Visits,
Content: mServiceSolutionCaseDetail.Content,
CreatedAt: mServiceSolutionCaseDetail.CreatedAt,
Visits: mServiceSolutionCase.Visits,
Content: mServiceSolutionCase.Content,
CreatedAt: mServiceSolutionCase.CreatedAt,
}, nil
}
func NewSolutionCase() SolutionCaseHandle {
return func(session *session.Enterprise, local string) *SolutionCase {
return func(session *session.Enterprise, tenantID uint64) *SolutionCase {
return &SolutionCase{
Enterprise: session,
local: local,
tenantID: tenantID,
}
}
}

View File

@ -13,7 +13,7 @@ type ServiceSolutionCase struct {
// ServiceSolutionCaseInfo 解决方案案例信息
type ServiceSolutionCaseInfo struct {
model.Model
Kind model.ServiceSolutionCaseKind `json:"kind"`
Mode model.ServiceSolutionCaseMode `json:"mode"`
Title string `json:"title"`
model.Image
DetailID uint64 `json:"detail_id"`
@ -23,19 +23,37 @@ type ServiceSolutionCaseInfo struct {
}
// SolutionCase 解决方案案例信息
func (m *ServiceSolutionCase) SolutionCase(limit int) ([]*ServiceSolutionCaseInfo, error) {
mServiceSolutionCaseDetail := model.NewServiceSolutionCaseDetail()
func (m *ServiceSolutionCase) SolutionCase(limit int, where ...*model.ModelWhere) ([]*ServiceSolutionCaseInfo, error) {
//mServiceSolutionCaseKind := model.NewServiceSolutionCaseKind()
db := orm.GetDB().Table(m.TableName()+" AS s").
Select("s.id", "s.kind", "s.image",
// db := orm.GetDB().Table(m.TableName()+" AS s").
// 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").
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`,
mServiceSolutionCaseDetail.TableName(), mServiceSolutionCaseDetail.TableName(), model.DeleteStatusForNot, limit, model.DeleteStatusForNot)).
Where("s.is_deleted = ?", model.DeleteStatusForNot).
Order("s.sort " + model.OrderModeToDesc)
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.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 ASC, a.id DESC) AS d ON k.id = d.kind_id`,
m.TableName(), m.TableName(), model.DeleteStatusForNot, limit, model.DeleteStatusForNot)).
Where("k.is_deleted = ?", model.DeleteStatusForNot).
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)
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 {
return func(c *gin.Context) interface{} {
_, isExist := c.Get(config.ContentForTenantID)
//value
value, isExist := c.Get(config.ContentForTenantID)
if !isExist {
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.NewTechnologyProject()}, &synchronized{iModel: model.NewTechnologyTopic()},
&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.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 (
"SciencesServer/utils"
"encoding/json"
"fmt"
)
// Tenant 租户数据信息
@ -12,6 +13,10 @@ type Tenant struct {
Domain string `json:"domain"`
}
func (this *Tenant) IDToString() string {
return fmt.Sprintf("%d", this.ID)
}
func (this *Tenant) MarshalBinary() ([]byte, error) {
return json.Marshal(this)
}

View File

@ -2,6 +2,7 @@ package serve
import (
"SciencesServer/app"
"SciencesServer/app/session"
"SciencesServer/config"
"SciencesServer/cron"
"SciencesServer/router"
@ -81,13 +82,18 @@ func run() {
},
}).Init()),
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
}
// 解析信息
out := new(session.Tenant)
_ = out.UnmarshalBinary([]byte(_cache))
return true, func(r *http.Request) {
r.Header.Set("", value)
r.Header.Set(config.ContentForTenantID, out.IDToString())
}
}),
).Run()

View File

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

View File

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