增加功能报价
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -32,9 +33,12 @@ type tenantDTO struct {
|
||||
// 套餐与用户数配额
|
||||
PackageID uint64 `json:"package_id"`
|
||||
PackageName string `json:"package_name"`
|
||||
UserQuota int `json:"user_quota"`
|
||||
UserUsed int `json:"user_used"`
|
||||
Remark string `json:"remark"`
|
||||
// PackageExpireTime 套餐计费到期时间(NULL-永久有效);DaysRemaining 剩余天数
|
||||
PackageExpireTime *time.Time `json:"package_expire_time"`
|
||||
DaysRemaining int `json:"days_remaining"`
|
||||
UserQuota int `json:"user_quota"`
|
||||
UserUsed int `json:"user_used"`
|
||||
Remark string `json:"remark"`
|
||||
CreateTime *time.Time `json:"create_time,omitempty"`
|
||||
UpdateTime *time.Time `json:"update_time,omitempty"`
|
||||
DeleteTime *time.Time `json:"delete_time,omitempty"`
|
||||
@@ -82,6 +86,13 @@ func stringPtr(s string) *string {
|
||||
func toTenantDTO(t models.SystemTenant) tenantDTO {
|
||||
ct := t.CreateTime
|
||||
ut := t.UpdateTime
|
||||
daysRemaining := 0
|
||||
if t.PackageExpireTime != nil {
|
||||
daysRemaining = int(math.Ceil(time.Until(*t.PackageExpireTime).Hours() / 24))
|
||||
if daysRemaining < 0 {
|
||||
daysRemaining = 0
|
||||
}
|
||||
}
|
||||
return tenantDTO{
|
||||
ID: t.ID,
|
||||
TenantCode: t.TenantCode,
|
||||
@@ -93,6 +104,8 @@ func toTenantDTO(t models.SystemTenant) tenantDTO {
|
||||
Worktime: stringValue(t.Worktime),
|
||||
Status: t.Status,
|
||||
PackageID: t.PackageID,
|
||||
PackageExpireTime: t.PackageExpireTime,
|
||||
DaysRemaining: daysRemaining,
|
||||
UserQuota: t.UserQuota,
|
||||
Remark: stringValue(t.Remark),
|
||||
CreateTime: &ct,
|
||||
@@ -188,6 +201,11 @@ func (c *PlatformTenantController) GetTenantDetail() {
|
||||
|
||||
dto := toTenantDTO(t)
|
||||
if pkg, err := services.GetTenantPackage(t.ID); err == nil && pkg != nil {
|
||||
if pkg.ID != t.PackageID {
|
||||
// 套餐已因到期自动降级,原到期时间不再有效
|
||||
dto.PackageExpireTime = nil
|
||||
dto.DaysRemaining = 0
|
||||
}
|
||||
dto.PackageID = pkg.ID
|
||||
dto.PackageName = pkg.Name
|
||||
}
|
||||
@@ -293,7 +311,10 @@ func (c *PlatformTenantController) CreateTenant() {
|
||||
// 套餐与用户数上限:未指定套餐时使用默认套餐,用户数取其包含用户数(兜底 20)
|
||||
packageID := uint64(0)
|
||||
userQuota := services.DefaultTenantUserQuota
|
||||
if p.PackageID != nil && *p.PackageID > 0 {
|
||||
// 显式选择的套餐按套餐有效时长计费;未指定而兜底绑定默认套餐的不设置到期时间
|
||||
explicitPackage := p.PackageID != nil && *p.PackageID > 0
|
||||
var packageExpire *time.Time
|
||||
if explicitPackage {
|
||||
packageID = *p.PackageID
|
||||
}
|
||||
if packageID == 0 {
|
||||
@@ -309,8 +330,14 @@ func (c *PlatformTenantController) CreateTenant() {
|
||||
if err := models.Orm.QueryTable(new(models.SystemTenantPackage)).
|
||||
Filter("id", packageID).
|
||||
Filter("delete_time__isnull", true).
|
||||
One(&pkg); err == nil && pkg.UserQuota > 0 {
|
||||
userQuota = pkg.UserQuota
|
||||
One(&pkg); err == nil {
|
||||
if pkg.UserQuota > 0 {
|
||||
userQuota = pkg.UserQuota
|
||||
}
|
||||
if explicitPackage {
|
||||
e := services.PackageExpireFromNow(&pkg)
|
||||
packageExpire = &e
|
||||
}
|
||||
}
|
||||
}
|
||||
if p.UserQuota != nil && *p.UserQuota > 0 {
|
||||
@@ -321,17 +348,18 @@ func (c *PlatformTenantController) CreateTenant() {
|
||||
}
|
||||
|
||||
t := models.SystemTenant{
|
||||
TenantCode: p.TenantCode,
|
||||
TenantName: p.TenantName,
|
||||
ContactPerson: stringPtr(p.ContactPerson),
|
||||
ContactPhone: stringPtr(p.ContactPhone),
|
||||
ContactEmail: stringPtr(p.ContactEmail),
|
||||
Address: stringPtr(p.Address),
|
||||
Worktime: stringPtr(p.Worktime),
|
||||
Status: status,
|
||||
PackageID: packageID,
|
||||
UserQuota: userQuota,
|
||||
Remark: stringPtr(p.Remark),
|
||||
TenantCode: p.TenantCode,
|
||||
TenantName: p.TenantName,
|
||||
ContactPerson: stringPtr(p.ContactPerson),
|
||||
ContactPhone: stringPtr(p.ContactPhone),
|
||||
ContactEmail: stringPtr(p.ContactEmail),
|
||||
Address: stringPtr(p.Address),
|
||||
Worktime: stringPtr(p.Worktime),
|
||||
Status: status,
|
||||
PackageID: packageID,
|
||||
PackageExpireTime: packageExpire,
|
||||
UserQuota: userQuota,
|
||||
Remark: stringPtr(p.Remark),
|
||||
}
|
||||
|
||||
id, err := models.Orm.Insert(&t)
|
||||
@@ -381,17 +409,17 @@ func (c *PlatformTenantController) EditTenant() {
|
||||
if p.PackageID != nil {
|
||||
pkgID := *p.PackageID
|
||||
if pkgID > 0 {
|
||||
var pkg models.SystemTenantPackage
|
||||
if err := models.Orm.QueryTable(new(models.SystemTenantPackage)).
|
||||
Filter("id", pkgID).
|
||||
Filter("delete_time__isnull", true).
|
||||
One(&pkg); err != nil {
|
||||
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "套餐不存在"}
|
||||
// 套餐切换/续费:按套餐有效时长重新计费(同套餐未到期在原到期时间上顺延),不动用户数上限
|
||||
if _, err := services.ApplyPackageToTenant(id, pkgID, false); err != nil {
|
||||
c.Data["json"] = map[string]interface{}{"code": 400, "msg": err.Error()}
|
||||
_ = c.ServeJSON()
|
||||
return
|
||||
}
|
||||
} else {
|
||||
// 解绑套餐:回退未绑定状态(视为默认套餐),清除计费到期时间
|
||||
update["package_id"] = 0
|
||||
update["package_expire_time"] = nil
|
||||
}
|
||||
update["package_id"] = pkgID
|
||||
}
|
||||
if p.UserQuota != nil {
|
||||
// 用户数上限只增不减:不允许调低到当前已开用户数以下
|
||||
|
||||
Reference in New Issue
Block a user