增加backend的erp若干功能
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"server/models"
|
||||
"server/pkg/jwtutil"
|
||||
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
// BackendNotifyConfigController 租户用户通知配置控制器
|
||||
type BackendNotifyConfigController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
func (c *BackendNotifyConfigController) ncClaims() (*jwtutil.Claims, error) {
|
||||
auth := c.Ctx.Request.Header.Get("Authorization")
|
||||
if auth == "" {
|
||||
return nil, fmt.Errorf("未登录")
|
||||
}
|
||||
parts := strings.SplitN(auth, " ", 2)
|
||||
if len(parts) != 2 || parts[0] != "Bearer" {
|
||||
return nil, fmt.Errorf("认证信息格式错误")
|
||||
}
|
||||
claims, err := jwtutil.ParseToken(parts[1])
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("无效的token")
|
||||
}
|
||||
if claims.UserType != "backend" {
|
||||
return nil, fmt.Errorf("无权访问")
|
||||
}
|
||||
return claims, nil
|
||||
}
|
||||
|
||||
func (c *BackendNotifyConfigController) ncJsonErr(httpStatus, bizCode int, msg string) {
|
||||
c.Ctx.Output.SetStatus(httpStatus)
|
||||
c.Data["json"] = map[string]interface{}{"code": bizCode, "msg": msg}
|
||||
_ = c.ServeJSON()
|
||||
}
|
||||
|
||||
func (c *BackendNotifyConfigController) ncOk(data interface{}) {
|
||||
c.Data["json"] = map[string]interface{}{"code": 200, "msg": "success", "data": data}
|
||||
_ = c.ServeJSON()
|
||||
}
|
||||
|
||||
type notifyConfigPayload struct {
|
||||
Email string `json:"email"`
|
||||
Phone string `json:"phone"`
|
||||
BarkDeviceKey string `json:"bark_device_key"`
|
||||
BarkServerURL string `json:"bark_server_url"`
|
||||
}
|
||||
|
||||
// GetConfig GET /backend/notify-config
|
||||
// 获取当前登录用户的通知配置
|
||||
func (c *BackendNotifyConfigController) GetConfig() {
|
||||
claims, err := c.ncClaims()
|
||||
if err != nil {
|
||||
c.ncJsonErr(401, 401, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
cfg := models.GetBackendUserNotifyConfig(uint64(claims.TenantId), uint64(claims.UserID))
|
||||
if cfg == nil {
|
||||
// 未配置时返回空结构,前端可以直接展示空表单
|
||||
cfg = &models.BackendUserNotifyConfig{}
|
||||
}
|
||||
c.ncOk(cfg)
|
||||
}
|
||||
|
||||
// UpdateConfig PUT /backend/notify-config
|
||||
// 更新当前登录用户的通知配置(不存在则创建)
|
||||
func (c *BackendNotifyConfigController) UpdateConfig() {
|
||||
claims, err := c.ncClaims()
|
||||
if err != nil {
|
||||
c.ncJsonErr(401, 401, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
raw, err := io.ReadAll(c.Ctx.Request.Body)
|
||||
if err != nil {
|
||||
c.ncJsonErr(400, 400, "参数错误")
|
||||
return
|
||||
}
|
||||
var p notifyConfigPayload
|
||||
if err := json.Unmarshal(raw, &p); err != nil {
|
||||
c.ncJsonErr(400, 400, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
tid := uint64(claims.TenantId)
|
||||
uid := uint64(claims.UserID)
|
||||
now := time.Now()
|
||||
|
||||
cfg := models.GetBackendUserNotifyConfig(tid, uid)
|
||||
if cfg == nil {
|
||||
cfg = &models.BackendUserNotifyConfig{
|
||||
Tid: tid,
|
||||
UserID: uid,
|
||||
CreateTime: now,
|
||||
}
|
||||
}
|
||||
|
||||
cfg.Email = ncStrPtr(p.Email)
|
||||
cfg.Phone = ncStrPtr(p.Phone)
|
||||
cfg.BarkDeviceKey = ncStrPtr(p.BarkDeviceKey)
|
||||
cfg.BarkServerURL = ncStrPtr(p.BarkServerURL)
|
||||
cfg.UpdateTime = now
|
||||
|
||||
if cfg.ID == 0 {
|
||||
if _, err := models.Orm.Insert(cfg); err != nil {
|
||||
c.ncJsonErr(500, 500, "保存失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
} else {
|
||||
if _, err := models.Orm.Update(cfg, "Email", "Phone", "BarkDeviceKey", "BarkServerURL", "UpdateTime"); err != nil {
|
||||
c.ncJsonErr(500, 500, "更新失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
c.ncOk(nil)
|
||||
}
|
||||
|
||||
// ncStrPtr 字符串转指针,空字符串返回 nil
|
||||
func ncStrPtr(s string) *string {
|
||||
s = strings.TrimSpace(s)
|
||||
if s == "" {
|
||||
return nil
|
||||
}
|
||||
return &s
|
||||
}
|
||||
Reference in New Issue
Block a user