更新
This commit is contained in:
1 parent
5718a00e31
commit
1850ac640e
226 files changed
+37772
-12071
No files matched your search
@@ -9,7 +9,7 @@ import (
|
||||
"time"
|
||||
|
||||
"server/models"
|
||||
"server/pkg/jwtutil"
|
||||
"server/pkg/identity"
|
||||
"server/services"
|
||||
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
@@ -32,6 +32,18 @@ func (c *PlatformTenantPackageController) jsonErr(httpStatus, bizCode int, msg s
|
||||
_ = c.ServeJSON()
|
||||
}
|
||||
|
||||
// requirePlatform 套餐与配额是平台侧经营数据,全部路由都挂在 /platform 下。
|
||||
// 此前每个方法各自解析令牌、且没有一个判端——租户令牌即可改自己的套餐上限和
|
||||
// 用户数配额,等于把计费开关交给了付费方。失败时已写好响应,调用方必须立即 return。
|
||||
func (c *PlatformTenantPackageController) requirePlatform() bool {
|
||||
if _, err := identity.Claims(c.Ctx.Request.Header.Get("Authorization"), identity.EndPlatform); err != nil {
|
||||
code := identity.Status(err)
|
||||
c.jsonErr(code, code, err.Error())
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (c *PlatformTenantPackageController) jsonOK(data interface{}, msg string) {
|
||||
if msg == "" {
|
||||
msg = "success"
|
||||
@@ -46,22 +58,11 @@ func (c *PlatformTenantPackageController) jsonOK(data interface{}, msg string) {
|
||||
|
||||
// currentOperator 解析当前平台账号名(用于增购记录留痕;取不到时返回空串,不阻断请求)
|
||||
func (c *PlatformTenantPackageController) currentOperator() string {
|
||||
auth := c.Ctx.Request.Header.Get("Authorization")
|
||||
if auth == "" {
|
||||
return ""
|
||||
}
|
||||
parts := strings.SplitN(auth, " ", 2)
|
||||
if len(parts) != 2 || parts[0] != "Bearer" {
|
||||
return ""
|
||||
}
|
||||
claims, err := jwtutil.ParseToken(parts[1])
|
||||
claims, err := identity.Claims(c.Ctx.Request.Header.Get("Authorization"), identity.EndPlatform)
|
||||
if err != nil || claims == nil {
|
||||
return ""
|
||||
}
|
||||
if strings.TrimSpace(claims.Username) != "" {
|
||||
return claims.Username
|
||||
}
|
||||
return ""
|
||||
return strings.TrimSpace(claims.Username)
|
||||
}
|
||||
|
||||
func (c *PlatformTenantPackageController) readBody(target interface{}) bool {
|
||||
@@ -144,6 +145,9 @@ func loadPackageModules(packageIDs []uint64) map[uint64][]tenantPackageModuleIte
|
||||
|
||||
// GetPackageList GET /platform/tenantPackage/list
|
||||
func (c *PlatformTenantPackageController) GetPackageList() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
keyword := strings.TrimSpace(c.GetString("keyword"))
|
||||
status := strings.TrimSpace(c.GetString("status"))
|
||||
|
||||
@@ -220,6 +224,9 @@ func moduleCodes(items []tenantPackageModuleItem) []string {
|
||||
|
||||
// GetPackageSelectList GET /platform/tenantPackage/select/list
|
||||
func (c *PlatformTenantPackageController) GetPackageSelectList() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
var rows []models.SystemTenantPackage
|
||||
_, err := models.Orm.QueryTable(new(models.SystemTenantPackage)).
|
||||
Filter("delete_time__isnull", true).
|
||||
@@ -262,6 +269,9 @@ func (c *PlatformTenantPackageController) GetPackageSelectList() {
|
||||
|
||||
// GetPackageDetail GET /platform/tenantPackage/detail/:id
|
||||
func (c *PlatformTenantPackageController) GetPackageDetail() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
id := parseUint64Param(c.Ctx.Input.Param(":id"))
|
||||
if id == 0 {
|
||||
c.jsonErr(400, 400, "参数错误")
|
||||
@@ -285,11 +295,17 @@ func (c *PlatformTenantPackageController) GetPackageDetail() {
|
||||
// GetPurchaseURL GET /platform/tenantPackage/purchaseUrl
|
||||
// 套餐购买链接:租户端未开通功能卡片「购买」按钮的跳转地址
|
||||
func (c *PlatformTenantPackageController) GetPurchaseURL() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
c.jsonOK(map[string]interface{}{"purchase_url": services.GetPackagePurchaseURL()}, "获取成功")
|
||||
}
|
||||
|
||||
// SavePurchaseURL POST /platform/tenantPackage/purchaseUrl
|
||||
func (c *PlatformTenantPackageController) SavePurchaseURL() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
var p struct {
|
||||
PurchaseURL string `json:"purchase_url"`
|
||||
}
|
||||
@@ -306,6 +322,9 @@ func (c *PlatformTenantPackageController) SavePurchaseURL() {
|
||||
// GetModuleOptions GET /platform/tenantPackage/moduleOptions
|
||||
// 可加入套餐的功能模块清单(取 yz_system_modules 中启用且未删除的模块)
|
||||
func (c *PlatformTenantPackageController) GetModuleOptions() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
var rows []models.SystemModules
|
||||
_, err := models.Orm.QueryTable(new(models.SystemModules)).
|
||||
Filter("delete_time__isnull", true).
|
||||
@@ -372,6 +391,9 @@ func savePackageModules(packageID uint64, modules []string) error {
|
||||
|
||||
// CreatePackage POST /platform/tenantPackage/create
|
||||
func (c *PlatformTenantPackageController) CreatePackage() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
var p tenantPackagePayload
|
||||
if !c.readBody(&p) {
|
||||
return
|
||||
@@ -435,6 +457,9 @@ func (c *PlatformTenantPackageController) CreatePackage() {
|
||||
|
||||
// EditPackage POST /platform/tenantPackage/edit/:id
|
||||
func (c *PlatformTenantPackageController) EditPackage() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
id := parseUint64Param(c.Ctx.Input.Param(":id"))
|
||||
if id == 0 {
|
||||
c.jsonErr(400, 400, "参数错误")
|
||||
@@ -543,6 +568,9 @@ func clearOtherDefaultPackages(keepID uint64) {
|
||||
// DeletePackage DELETE /platform/tenantPackage/delete/:id(软删)
|
||||
// 注意:基础套餐(code=basic)为系统内置兜底套餐(套餐到期自动降级目标),任何情况下不允许删除。
|
||||
func (c *PlatformTenantPackageController) DeletePackage() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
id := parseUint64Param(c.Ctx.Input.Param(":id"))
|
||||
if id == 0 {
|
||||
c.jsonErr(400, 400, "参数错误")
|
||||
@@ -606,6 +634,9 @@ type quotaPackagePayload struct {
|
||||
|
||||
// GetQuotaPackageList GET /platform/tenantQuotaPackage/list
|
||||
func (c *PlatformTenantPackageController) GetQuotaPackageList() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
onlyEnabled := c.GetString("enabled") == "1"
|
||||
qs := models.Orm.QueryTable(new(models.SystemTenantUserQuotaPackage)).Filter("delete_time__isnull", true)
|
||||
if onlyEnabled {
|
||||
@@ -621,6 +652,9 @@ func (c *PlatformTenantPackageController) GetQuotaPackageList() {
|
||||
|
||||
// CreateQuotaPackage POST /platform/tenantQuotaPackage/create
|
||||
func (c *PlatformTenantPackageController) CreateQuotaPackage() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
var p quotaPackagePayload
|
||||
if !c.readBody(&p) {
|
||||
return
|
||||
@@ -654,6 +688,9 @@ func (c *PlatformTenantPackageController) CreateQuotaPackage() {
|
||||
|
||||
// EditQuotaPackage POST /platform/tenantQuotaPackage/edit/:id
|
||||
func (c *PlatformTenantPackageController) EditQuotaPackage() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
id := parseUint64Param(c.Ctx.Input.Param(":id"))
|
||||
if id == 0 {
|
||||
c.jsonErr(400, 400, "参数错误")
|
||||
@@ -703,6 +740,9 @@ func (c *PlatformTenantPackageController) EditQuotaPackage() {
|
||||
|
||||
// DeleteQuotaPackage DELETE /platform/tenantQuotaPackage/delete/:id(软删)
|
||||
func (c *PlatformTenantPackageController) DeleteQuotaPackage() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
id := parseUint64Param(c.Ctx.Input.Param(":id"))
|
||||
if id == 0 {
|
||||
c.jsonErr(400, 400, "参数错误")
|
||||
@@ -735,6 +775,9 @@ type setTenantPackagePayload struct {
|
||||
// SetTenantPackage POST /platform/tenant/setPackage
|
||||
// 为租户绑定套餐;sync_quota 为 true(默认)时按套餐包含用户数与现有上限取较大值同步。
|
||||
func (c *PlatformTenantPackageController) SetTenantPackage() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
var p setTenantPackagePayload
|
||||
if !c.readBody(&p) {
|
||||
return
|
||||
@@ -758,6 +801,9 @@ func (c *PlatformTenantPackageController) SetTenantPackage() {
|
||||
// GetTenantQuotaInfo GET /platform/tenant/quotaInfo?tid=1
|
||||
// 返回租户套餐、用户数使用情况、可增购规格与单价
|
||||
func (c *PlatformTenantPackageController) GetTenantQuotaInfo() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
tid, _ := c.GetUint64("tid")
|
||||
if tid == 0 {
|
||||
c.jsonErr(400, 400, "tid 不能为空")
|
||||
@@ -916,6 +962,9 @@ type rechargeQuotaPayload struct {
|
||||
// RechargeTenantQuota POST /platform/tenant/rechargeQuota
|
||||
// 用户数增购:单个增购(单价 x 人数)或 按加购套餐(如 5人/500元)
|
||||
func (c *PlatformTenantPackageController) RechargeTenantQuota() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
var p rechargeQuotaPayload
|
||||
if !c.readBody(&p) {
|
||||
return
|
||||
@@ -1001,6 +1050,9 @@ func (c *PlatformTenantPackageController) RechargeTenantQuota() {
|
||||
|
||||
// GetQuotaOrders GET /platform/tenant/quotaOrders?tid=1
|
||||
func (c *PlatformTenantPackageController) GetQuotaOrders() {
|
||||
if !c.requirePlatform() {
|
||||
return
|
||||
}
|
||||
tid, _ := c.GetUint64("tid")
|
||||
if tid == 0 {
|
||||
c.jsonErr(400, 400, "tid 不能为空")
|
||||
|
||||
Reference in new issue
Block a user