From c1758443caa7ba714ca6d4e3bb7672df3e77a395 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83=E4=BF=8A=E6=88=90?= Date: Tue, 17 Oct 2023 16:14:39 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/apis/basic/category.go | 63 ++++++++++++++++++++++-- app/admin/models/category.go | 83 ++++++++++++++++++++------------ app/admin/models/common/scope.go | 2 +- app/admin/models/supplier.go | 9 ++-- 4 files changed, 115 insertions(+), 42 deletions(-) diff --git a/app/admin/apis/basic/category.go b/app/admin/apis/basic/category.go index 90d2cdd..273ff9e 100644 --- a/app/admin/apis/basic/category.go +++ b/app/admin/apis/basic/category.go @@ -11,8 +11,8 @@ import ( ) type CreateCategoryRequest struct { - Name string `json:"name" validate:"required"` //名称 - ParentId uint32 `json:"parent_id"` //父分类id + Name string `json:"name" validate:"required"` //名称 + Pid uint32 `json:"pid"` //父分类id } // CreateCategory 创建分类 @@ -40,7 +40,7 @@ func CreateCategory(c *gin.Context) { category := models.Category{ Name: req.Name, Display: 1, - Pid: req.ParentId, + Pid: req.Pid, CooperativeBusinessId: middleware.GetCooperativeBusinessId(c), } @@ -53,3 +53,60 @@ func CreateCategory(c *gin.Context) { app.OK(c, nil, "ok") } + +type UpdateCategoryRequest struct { + CreateCategoryRequest + Id uint32 `json:"id" validate:"required"` //分类id +} + +// UpdateCategory 编辑分类 +// @Summary 编辑分类 +// @Tags 商品分类 +// @Produce json +// @Accept json +// @Param request body UpdateCategoryRequest true "商品分类编辑模型" +// @Success 200 {object} app.Response +// @Router /api/v1/category/update [post] +func UpdateCategory(c *gin.Context) { + req := new(UpdateCategoryRequest) + + if err := c.ShouldBindJSON(req); err != nil { + app.Error(c, 400, err, err.Error()) + return + } + + err := tools.Validate(req) + if err != nil { + app.Error(c, 400, err, err.Error()) + return + } + + old, err := models.GetCategoryById(req.Id) + if err != nil { + app.Error(c, 500, err, err.Error()) + logger.Error("GetCategoryById err", logger.Field("req", req), logger.Field("err", err)) + return + } + + var category = models.Category{ + Name: req.Name, + Pid: req.Pid, + } + if old.Pid != category.Pid { + category.Number, err = models.GenerateNumber(old.CooperativeBusinessId, req.Pid) + if err != nil { + app.Error(c, 500, err, err.Error()) + logger.Error("GenerateNumber err", logger.Field("req", req), logger.Field("err", err)) + return + } + } + + err = orm.Eloquent.Model(category).Updates(category).Error + if err != nil { + app.Error(c, 500, err, "更新失败") + logger.Error("GenerateNumber err", logger.Field("category", category), logger.Field("err", err)) + return + } + + app.OK(c, nil, "ok") +} diff --git a/app/admin/models/category.go b/app/admin/models/category.go index 85fb64c..d8c8fa5 100644 --- a/app/admin/models/category.go +++ b/app/admin/models/category.go @@ -3,6 +3,7 @@ package models import ( "fmt" "go-admin/app/admin/models/common" + orm "go-admin/common/global" "gorm.io/gorm" ) @@ -22,39 +23,57 @@ func (c *Category) TableName() string { func (c *Category) BeforeCreate(tx *gorm.DB) error { if c.Number == "" { - var count int64 - var err error - if c.Pid == 0 { - err = tx.Model(c). - Unscoped(). - Scopes(common.ScopeCooperativeBusiness(c.CooperativeBusinessId)). - Where("pid", ""). - Count(&count). - Error - if err != nil { - return err - } - c.Number = fmt.Sprintf("%03d", count) - } else { - var parent Category - err = tx. - Scopes(common.ScopeCooperativeBusiness(c.CooperativeBusinessId)). - Where("id", c.Pid). - First(&parent).Error - if err != nil { - return err - } - err = tx.Model(c). - Unscoped(). - Scopes(common.ScopeCooperativeBusiness(c.CooperativeBusinessId)). - Where("pid", c.Pid). - Count(&count). - Error - if err != nil { - return err - } - c.Number = fmt.Sprintf("%s%03d", parent.Number, count) + n, err := GenerateNumber(c.CooperativeBusinessId, c.Pid) + if err != nil { + return err } + c.Number = n } return nil } + +// GenerateNumber 生成分类编码 +func GenerateNumber(cid uint32, pid uint32) (string, error) { + m := orm.Eloquent.Model(Category{}) + var count int64 + var err error + if pid == 0 { + err = m.Scopes(common.ScopeBusiness(cid)). + Where("pid", 0). + Count(&count). + Error + if err != nil { + return "", err + } + return fmt.Sprintf("%03d", count), nil + } else { + var parent Category + err = m. + Scopes(common.ScopeBusiness(cid)). + Where("id", pid). + First(&parent).Error + if err != nil { + return "", err + } + err = m. + Unscoped(). + Scopes(common.ScopeBusiness(cid)). + Where("pid", pid). + Count(&count). + Error + if err != nil { + return "", err + } + return fmt.Sprintf("%s%03d", parent.Number, count), nil + } +} + +func GetCategoryById(id uint32) (*Category, error) { + var c *Category + err := orm.Eloquent.Model(c).Where("id", id).First(c).Error + if err != nil { + return nil, err + } + + return c, nil +} diff --git a/app/admin/models/common/scope.go b/app/admin/models/common/scope.go index ec6a2af..b2db2a0 100644 --- a/app/admin/models/common/scope.go +++ b/app/admin/models/common/scope.go @@ -2,7 +2,7 @@ package common import "gorm.io/gorm" -func ScopeCooperativeBusiness(id uint32) func(db *gorm.DB) *gorm.DB { +func ScopeBusiness(id uint32) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { return db.Where("cooperative_business_id = ?", id) } diff --git a/app/admin/models/supplier.go b/app/admin/models/supplier.go index 9b0dc6e..6ad11ad 100644 --- a/app/admin/models/supplier.go +++ b/app/admin/models/supplier.go @@ -39,7 +39,7 @@ func (s *Supplier) BeforeCreate(tx *gorm.DB) error { var count int64 err := tx.Table(s.TableName()). Unscoped(). - Scopes(common.ScopeCooperativeBusiness(s.CooperativeBusinessId)). + Scopes(common.ScopeBusiness(s.CooperativeBusinessId)). Count(&count).Error if err != nil { logger.Error("get supplier count failed", logger.Field("err", err), logger.Field("s", s)) @@ -67,12 +67,9 @@ func GetSupplier(req GetSupplierRequest) ([]*Supplier, error) { m = m.Where("number = ?", req.Number) } - m = m.Scopes(common.ScopeCooperativeBusiness(req.CooperativeBusinessId)) + m = m.Scopes(common.ScopeBusiness(req.CooperativeBusinessId)) - err := m. - Order("created_at desc"). - Find(&list). - Error + err := m.Order("created_at desc").Find(&list).Error if err != nil { logger.Error("get supplier list err", logger.Field("err", err), logger.Field("req", req)) return nil, err