Browse Source

后台功能管理

huangyan 9 months ago
parent
commit
3f696b4e5c

+ 17 - 0
app/controller/applyCap.go

@@ -86,5 +86,22 @@ func DeleteApplyCap(c *gin.Context) {
 		return
 	}
 	e.ResponseSuccess(c, nil)
+}
+
+// GetCapDetailByCapID 根据capID获取应用能力详情
+func GetCapDetailByCapID(c *gin.Context) {
+	capid := c.Query("capid")
+	validate := validator.New()
+	err := validate.Var(capid, "required")
+	if err != nil {
+		e.ResponseWithMsg(c, e.PleaseCheckTherRquiredFields, e.PleaseCheckTherRquiredFields.GetMsg())
+		return
+	}
+	id, rescode := Capabilities.GetCapabilitiesById(capid)
+	if rescode != e.SUCCESS {
+		e.ResponseWithMsg(c, rescode, rescode.GetMsg())
+		return
+	}
+	e.ResponseSuccess(c, id)
 
 }

+ 58 - 12
app/controller/capabilities.go

@@ -2,6 +2,7 @@ package controller
 
 import (
 	"github.com/gin-gonic/gin"
+	"github.com/go-playground/validator/v10"
 	"project_management/app/e"
 	"project_management/app/model"
 	"project_management/app/services"
@@ -12,32 +13,41 @@ var Capabilities services.Capabilities = &model.Capabilities{}
 
 // GetCapabilities 获取所有能力
 func GetCapabilities(c *gin.Context) {
-	var params unity.QueryPageParams
+	var params unity.CapQueryPageParams
 	var capabilities model.Capabilities
-	_, _, role := unity.GetUId(c)
 	if err := c.ShouldBindJSON(&params); err != nil {
 		e.ResponseWithMsg(c, e.JSONParsingFailed, e.JSONParsingFailed.GetMsg())
 		return
 	}
 	queryCond := "cap_name like ?"
 	params.Query = "%" + params.Query + "%"
-	if role == "admin" {
-		result, total, err := Capabilities.AdminGetCapabilitiesList(params, capabilities, queryCond)
-		if err != nil {
-			e.ResponseWithMsg(c, e.PaginationFailed, e.PaginationFailed.GetMsg())
-			return
-		}
-		e.ResPonsePage(c, result, total, params)
-		return
-	}
 	result, total, err := Capabilities.GetCapabilitiesList(params, capabilities, queryCond)
 	if err != nil {
 		e.ResponseWithMsg(c, e.PaginationFailed, e.PaginationFailed.GetMsg())
 		return
 	} else {
-		e.ResPonsePage(c, result, total, params)
+		e.CapResPonsePage(c, result, total, params)
+		return
+	}
+}
+
+// AdminGetCapabilities 管理员获取所有功能列表
+func AdminGetCapabilities(c *gin.Context) {
+	var params unity.QueryPageParams
+	var capabilities model.Capabilities
+	if err := c.ShouldBindJSON(&params); err != nil {
+		e.ResponseWithMsg(c, e.JSONParsingFailed, e.JSONParsingFailed.GetMsg())
 		return
 	}
+	queryCond := "cap_name like ?"
+	params.Query = "%" + params.Query + "%"
+	result, total, err := Capabilities.AdminGetCapabilitiesList(params, capabilities, queryCond)
+	if err != nil {
+		e.ResponseWithMsg(c, e.PaginationFailed, e.PaginationFailed.GetMsg())
+		return
+	}
+	e.ResPonsePage(c, result, total, params)
+	return
 }
 
 // AdminAddGetCapabilities 添加能力
@@ -59,3 +69,39 @@ func AdminAddGetCapabilities(c *gin.Context) {
 	}
 	e.ResponseWithMsg(c, addCapabilities, addCapabilities.GetMsg())
 }
+
+// AdminUpdateCapabilities 更新能力
+func AdminUpdateCapabilities(c *gin.Context) {
+	var capabilities model.Capabilities
+	if err := c.ShouldBindJSON(&capabilities); err != nil {
+		e.ResponseWithMsg(c, e.JSONParsingFailed, e.JSONParsingFailed.GetMsg())
+		return
+	}
+	validate := validator.New()
+	if err := validate.Struct(capabilities); err != nil {
+		e.ResponseWithMsg(c, e.PleaseCheckTherRquiredFields, e.PleaseCheckTherRquiredFields.GetMsg())
+		return
+	}
+	updateCapabilities := Capabilities.UpdateCapabilities(capabilities)
+	if updateCapabilities == e.SUCCESS {
+		e.ResponseSuccess(c, nil)
+		return
+	}
+	e.ResponseWithMsg(c, updateCapabilities, updateCapabilities.GetMsg())
+}
+
+// AdminDeleteCap 删除功能
+func AdminDeleteCap(c *gin.Context) {
+	capid := c.Query("capid")
+	err := validator.New().Var(capid, "required")
+	if err != nil {
+		e.ResponseWithMsg(c, e.PleaseCheckTherRquiredFields, e.PleaseCheckTherRquiredFields.GetMsg())
+		return
+	}
+	capabilities := Capabilities.DeleteCapabilities(capid)
+	if capabilities == e.SUCCESS {
+		e.ResponseSuccess(c, nil)
+		return
+	}
+	e.ResponseWithMsg(c, capabilities, capabilities.GetMsg())
+}

+ 12 - 0
app/e/R.go

@@ -45,3 +45,15 @@ func ResPonsePage(c *gin.Context, data interface{}, total int64, params unity.Qu
 		},
 	})
 }
+func CapResPonsePage(c *gin.Context, data interface{}, total int64, params unity.CapQueryPageParams) {
+	c.JSON(http.StatusOK, &R{
+		Code:    SUCCESS,
+		Message: SUCCESS.GetMsg(),
+		Data: gin.H{
+			"result":    data,
+			"total":     total,
+			"current":   params.Page,
+			"page_size": params.Size,
+		},
+	})
+}

+ 1 - 1
app/e/code_msg.go

@@ -61,7 +61,7 @@ var MsgFlags = map[Rescode]string{
 	TokenIsExpired:               "Token 过期",
 	TokenIsFaild:                 "Token 生成失败",
 	TheUserIsEmpty:               "用户为空",
-	Repeat:                       "应用名重复",
+	Repeat:                       "重复命名",
 	AddAppUserFail:               "添加用户失败",
 	RegistrationFailed:           "注册失败",
 	TheSystemCannotBeRegistered:  "该系统未开放注册",

+ 3 - 1
app/middleware/admin_middleware.go

@@ -5,13 +5,15 @@ import (
 	"github.com/gin-gonic/gin"
 	"project_management/app/e"
 	"project_management/nats"
+	"strings"
 	"time"
 )
 
 func AdminMiddleware() gin.HandlerFunc {
 	return func(c *gin.Context) {
 		header := c.GetHeader("Authorization")
-		request, err := nats.Nats.Request("login_token_validation", []byte(header), 3*time.Second)
+		split := strings.Split(header, ":")
+		request, err := nats.Nats.Request("login_token_validation", []byte(split[1]), 3*time.Second)
 		if err != nil {
 			e.ResponseWithMsg(c, e.TokenIsInvalid, e.TokenIsInvalid.GetMsg())
 		} else {

+ 9 - 0
app/model/apply.go

@@ -49,6 +49,7 @@ type ApplyCapabilities struct {
 func (lo LoginMethod) Value() (driver.Value, error) {
 	return json.Marshal(lo)
 }
+
 func (fn *LoginMethod) Scan(src interface{}) error {
 	if src == nil {
 		*fn = make(LoginMethod, 0)
@@ -118,6 +119,9 @@ func (a Apply) GetApplyById(appid string) (Apply, error) {
 		return Apply{}, tx.Error
 	}
 	if tx.RowsAffected > 0 {
+		if a.LoginMethod == nil {
+			a.LoginMethod = LoginMethod{}
+		}
 		return a, nil
 	}
 	return Apply{}, nil
@@ -217,6 +221,11 @@ func (a Apply) GetApplyList(params unity.QueryPageParams, apply Apply, queryCond
 		Find(&result).Error; err != nil {
 		return nil, 0, err
 	}
+	for i, _ := range result {
+		if result[i].LoginMethod == nil {
+			result[i].LoginMethod = LoginMethod{}
+		}
+	}
 	return result, total, nil
 }
 

+ 19 - 2
app/model/applyCap.go

@@ -2,6 +2,7 @@ package model
 
 import (
 	"errors"
+	"gorm.io/gorm"
 	"project_management/app/e"
 	"project_management/global"
 	"project_management/utils"
@@ -19,11 +20,14 @@ type ApplyCap struct {
 
 }
 
+// DeleteApplyCAp 删除应用能力
 func (a ApplyCap) DeleteApplyCAp(applycap ApplyCapabilities) e.Rescode {
 	//TODO implement me
 	tableName := "appcap_" + applycap.AppID
 	tx := global.DBLink.Table(tableName).Where("cap_id = ?", applycap.CapID).Delete(ApplyCap{})
-	if tx.Error != nil {
+	update := global.DBLink.Table(Capabilities{}.TableName()).Where("cap_id = ?", applycap.CapID).Update("count", gorm.Expr("count - ?", 1))
+
+	if tx.Error != nil || update.Error != nil {
 		return e.DELETEFAIL
 	}
 	if tx.RowsAffected > 0 {
@@ -32,9 +36,16 @@ func (a ApplyCap) DeleteApplyCAp(applycap ApplyCapabilities) e.Rescode {
 	return e.DELETEFAIL
 }
 
+// UpDateApplyCap 更新应用能力
 func (a ApplyCap) UpDateApplyCap(applycap ApplyCap) e.Rescode {
 	//TODO implement me
 	tableName := "appcap_" + applycap.AppId
+	if applycap.CapName != "" {
+		first := global.DBLink.Table(tableName).Where("cap_name = ?", applycap.CapName).First(&a)
+		if first.RowsAffected > 0 {
+			return e.Repeat
+		}
+	}
 	tx := global.DBLink.Table(tableName).Where("cap_id = ?", applycap.CapId).Updates(applycap)
 	if tx.Error != nil {
 		return e.UPDATEFAIL
@@ -45,6 +56,7 @@ func (a ApplyCap) UpDateApplyCap(applycap ApplyCap) e.Rescode {
 	return e.UPDATEFAIL
 }
 
+// ApplyCapList 获取应用能力列表
 func (a ApplyCap) ApplyCapList(appid string) ([]ApplyCap, error) {
 	//TODO implement me
 	tableName := "appcap_" + appid
@@ -61,6 +73,7 @@ func (a ApplyCap) ApplyCapList(appid string) ([]ApplyCap, error) {
 	return applycap, errors.New(e.FINDFAIL.GetMsg())
 }
 
+// ApplyAddCap 添加应用能力
 func (a ApplyCap) ApplyAddCap(applycap ApplyCapabilities) e.Rescode {
 	//TODO implement me
 	var caps Capabilities
@@ -78,8 +91,12 @@ func (a ApplyCap) ApplyAddCap(applycap ApplyCapabilities) e.Rescode {
 	a.AppId = applycap.AppID
 	a.PcIsShow = 1
 	a.MobileIsShow = 1
+	var maxsort int
+	global.DBLink.Table(tableName).Select("MAX(sort)").Scan(&maxsort)
+	a.Sort = maxsort + 1
 	create := global.DBLink.Table(tableName).Create(&a)
-	if create.Error != nil {
+	update := global.DBLink.Table(Capabilities{}.TableName()).Where("cap_id = ?", applycap.CapID).Update("count", gorm.Expr("count + ?", 1))
+	if create.Error != nil || update.Error != nil {
 		return e.INSERTFAIL
 	}
 	return e.SUCCESS

+ 64 - 10
app/model/capabilities.go

@@ -19,9 +19,9 @@ type Capabilities struct {
 	CapUrl         string  `gorm:"type:varchar(255);" json:"cap_url"`                       // 应用地址
 	Price          float64 `gorm:"type:decimal(10,5);" json:"price"`                        //价格
 	Count          int64   `gorm:"type:int;" json:"count"`                                  // 使用数量
-	PcIsShow       int     `gorm:"type:int;" json:"pc_is_show"`                             // 是否pc端显示
-	MobileIsShow   int     `gorm:"type:int;" json:"mobile_is_show"`                         // 是否移动端显示
+	IsAdd          int     `gorm:"type:int;" json:"is_add"`                                 // 是否添加 1已添加
 }
+
 type CapabilitiesApply struct {
 	utils.BaseModel
 	CapId string `gorm:"type:varchar(50);" json:"cap_id"` // 功能id
@@ -36,6 +36,8 @@ type CapabilitiesDto struct {
 func (c Capabilities) TableName() string {
 	return "capabilities"
 }
+
+// AddCapabilities 添加应用
 func (c Capabilities) AddCapabilities(capabilities Capabilities) e.Rescode {
 	//TODO implement me
 
@@ -53,8 +55,10 @@ func (c Capabilities) AddCapabilities(capabilities Capabilities) e.Rescode {
 	return e.INSERTFAIL
 }
 
-func (c Capabilities) GetCapabilitiesList(params unity.QueryPageParams, capabilities Capabilities, queryCond interface{}) (result []Capabilities, total int64, err error) {
+// GetCapabilitiesList 获取应用列表
+func (c Capabilities) GetCapabilitiesList(params unity.CapQueryPageParams, capabilities Capabilities, queryCond interface{}) (result []Capabilities, total int64, err error) {
 	//TODO implement me
+
 	query := global.DBLink.Table(capabilities.TableName())
 	if params.Query != "%%" {
 		query = query.Where(queryCond, params.Query)
@@ -62,15 +66,35 @@ func (c Capabilities) GetCapabilitiesList(params unity.QueryPageParams, capabili
 	if params.State != "" {
 		query = query.Where("state=?", params.State)
 	}
-	if err = query.Count(&total).Error; err != nil {
+	if err = query.Where("state=?", 1).Count(&total).Error; err != nil {
 		return nil, 0, err
 	}
 	offset := (params.Page - 1) * params.Size
-	if err = query.Offset(offset).Limit(params.Size).Order(params.Desc).Find(&result).Error; err != nil {
+	if err = query.Where("state=?", 1).Offset(offset).Limit(params.Size).Order(params.Desc).Find(&result).Error; err != nil {
 		return nil, 0, err
 	}
+	tablename := "appcap_" + params.AppId
+	var appcap []ApplyCap
+	tx := global.DBLink.Table(tablename).Select("cap_id").Find(&appcap)
+	if tx.Error != nil {
+		if strings.Contains(tx.Error.Error(), "Error 1146 (42S02)") {
+			return result, total, nil
+		}
+		return nil, 0, tx.Error
+	}
+	capIdsMap := make(map[string]bool) // 假设cap_id类型为uint
+	for _, app := range appcap {
+		capIdsMap[app.CapId] = true
+	}
+	for i, _ := range result {
+		if _, exists := capIdsMap[result[i].CapId]; exists {
+			result[i].IsAdd = 1
+		}
+	}
 	return result, total, nil
 }
+
+// AdminGetCapabilitiesList 管理员获取应用列表
 func (c Capabilities) AdminGetCapabilitiesList(params unity.QueryPageParams, capabilities Capabilities, queryCond interface{}) (result []CapabilitiesDto, total int64, err error) {
 	//TODO implement me
 	query := global.DBLink.Table(capabilities.TableName())
@@ -87,14 +111,44 @@ func (c Capabilities) AdminGetCapabilitiesList(params unity.QueryPageParams, cap
 	if err = query.Offset(offset).Limit(params.Size).Order(params.Desc).Find(&result).Error; err != nil {
 		return nil, 0, err
 	}
-	//for i, _ := range result {
-	//
-	//}
 	return result, total, nil
 }
-func (c Capabilities) GetCapabilitiesById(id string) (Capabilities, error) {
+
+// GetCapabilitiesById 根据id获取应用信息
+func (c Capabilities) GetCapabilitiesById(id string) (Capabilities, e.Rescode) {
+	//TODO implement me
+	tx := global.DBLink.Table(c.TableName()).Select("cap_name", "image", "cap_id", "cap_description", "state", "cap_url", "price").Where("cap_id = ?", id).First(&c)
+	if tx.Error != nil {
+		return c, e.FINDFAIL
+	}
+	if tx.RowsAffected > 0 {
+		return c, e.SUCCESS
+	}
+	return c, e.FINDFAIL
+}
+
+// UpdateCapabilities 更新应用信息
+func (c Capabilities) UpdateCapabilities(capabilities Capabilities) e.Rescode {
+	//TODO implement me
+	tx := global.DBLink.Table(c.TableName()).Where("cap_id = ?", capabilities.CapId).Updates(&capabilities)
+	if tx.Error != nil {
+		return e.UPDATEFAIL
+	}
+	if tx.RowsAffected > 0 {
+		return e.SUCCESS
+	}
+	return e.UPDATEFAIL
+}
+func (c Capabilities) DeleteCapabilities(capid string) e.Rescode {
 	//TODO implement me
-	panic("implement me")
+	tx := global.DBLink.Table(c.TableName()).Where("cap_id = ?", capid).Delete(&Capabilities{})
+	if tx.Error != nil {
+		return e.DELETEFAIL
+	}
+	if tx.RowsAffected > 0 {
+		return e.SUCCESS
+	}
+	return e.DELETEFAIL
 }
 
 // CapIdISRepeat 检查CapId是否重复

+ 1 - 0
app/routers/applyCap.go

@@ -11,4 +11,5 @@ func ApplyCapRouter(r *gin.Engine) {
 	group.GET("/apply/cap", controller.GetApplyCapList)
 	group.PUT("/apply/cap", controller.UpDateApplyCap)
 	group.DELETE("/apply/cap", controller.DeleteApplyCap)
+	group.GET("/apply/cap/detail", controller.GetCapDetailByCapID)
 }

+ 5 - 1
app/routers/capabilities.go

@@ -3,10 +3,14 @@ package routers
 import (
 	"github.com/gin-gonic/gin"
 	"project_management/app/controller"
+	middlewares "project_management/app/middleware"
 )
 
 func CapabilitiesRoutes(r *gin.Engine) {
 	group := r.Group("/api")
 	group.POST("/capabilitiesall", controller.GetCapabilities)
-	group.POST("/capabilities", controller.AdminAddGetCapabilities)
+	group.POST("/admincapabilities", controller.AdminGetCapabilities).Use(middlewares.AdminMiddleware())
+	group.POST("/capabilities", controller.AdminAddGetCapabilities).Use(middlewares.AdminMiddleware())
+	group.PUT("/capabilities", controller.AdminUpdateCapabilities).Use(middlewares.AdminMiddleware())
+	group.DELETE("/capabilities", controller.AdminDeleteCap).Use(middlewares.AdminMiddleware())
 }

+ 4 - 2
app/services/capabilities.go

@@ -8,7 +8,9 @@ import (
 
 type Capabilities interface {
 	AddCapabilities(capabilities model.Capabilities) e.Rescode
-	GetCapabilitiesList(params unity.QueryPageParams, capabilities model.Capabilities, queryCond interface{}) (result []model.Capabilities, total int64, err error)
+	GetCapabilitiesList(params unity.CapQueryPageParams, capabilities model.Capabilities, queryCond interface{}) (result []model.Capabilities, total int64, err error)
 	AdminGetCapabilitiesList(params unity.QueryPageParams, capabilities model.Capabilities, queryCond interface{}) (result []model.CapabilitiesDto, total int64, err error)
-	GetCapabilitiesById(id string) (model.Capabilities, error)
+	GetCapabilitiesById(capid string) (model.Capabilities, e.Rescode)
+	UpdateCapabilities(capabilities model.Capabilities) e.Rescode
+	DeleteCapabilities(capid string) e.Rescode
 }

+ 8 - 0
unity/unity.go

@@ -17,6 +17,14 @@ type QueryPageParams struct {
 	Desc  string `json:"desc" form:"desc"`
 	State string `json:"state" form:"state"`
 }
+type CapQueryPageParams struct {
+	Page  int    `json:"page" form:"page"`
+	Size  int    `json:"size" form:"size"`
+	AppId string `json:"app_id" form:"app_id"`
+	Query string `json:"query" form:"query"`
+	Desc  string `json:"desc" form:"desc"`
+	State string `json:"state" form:"state"`
+}
 
 // Paginate 使用给定的DB连接执行分页查询
 func Paginate[T any](params PageParams, model T) (result []T, total int64, current int, err error) {