From fc9f6588cc4e8473dd46cfa5aefc8f46b9e6d877 Mon Sep 17 00:00:00 2001 From: wucongxing <815046773@qq.com> Date: Fri, 22 Dec 2023 16:22:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9=E5=95=86?= =?UTF-8?q?=E5=93=81=E7=8A=B6=E6=80=81=EF=BC=88=E4=B8=8A/=E4=B8=8B?= =?UTF-8?q?=E6=9E=B6=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/controller/product.go | 39 +++++++++++++++++++++++++++++++++++++ api/dao/product.go | 5 +++++ api/requests/product.go | 8 ++++++++ api/router/router.go | 3 +++ api/service/product.go | 41 ++++++++++++++++++++++++++++++++++++++- 5 files changed, 95 insertions(+), 1 deletion(-) diff --git a/api/controller/product.go b/api/controller/product.go index f80005c..0bd9604 100644 --- a/api/controller/product.go +++ b/api/controller/product.go @@ -229,3 +229,42 @@ func (r *Product) PutProduct(c *gin.Context) { responses.Ok(c) } + +// PutProductStatus 修改商品状态(上/下架) +func (r *Product) PutProductStatus(c *gin.Context) { + productRequest := requests.ProductRequest{} + req := productRequest.PutProductStatus + if err := c.ShouldBind(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + id := c.Param("product_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + productId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 业务处理 + productService := service.ProductService{} + _, err = productService.PutProductStatus(productId, req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.Ok(c) +} diff --git a/api/dao/product.go b/api/dao/product.go index 205de1b..f0523ac 100644 --- a/api/dao/product.go +++ b/api/dao/product.go @@ -105,6 +105,11 @@ func (r *ProductDao) GetProductPageSearch(req requests.GetProductPage, page, pag query = query.Where("product_type = ?", req.ProductType) } + // 商品状态 + if req.ProductStatus != nil { + query = query.Where("product_status = ?", req.ProductStatus) + } + // 平台商品id if req.ProductPlatformId != "" { query = query.Where("product_platform_id = ?", req.ProductPlatformId) diff --git a/api/requests/product.go b/api/requests/product.go index a2f7fbc..85d1a2c 100644 --- a/api/requests/product.go +++ b/api/requests/product.go @@ -5,6 +5,7 @@ type ProductRequest struct { GetProductPage // 获取系统商品列表-分页 AddProduct // 新增商品 PutProduct // 修改商品 + PutProductStatus // 修改商品状态(上/下架) } // GetPlatformProductPage 获取平台商品列表-分页 @@ -33,6 +34,7 @@ type GetProductPage struct { LicenseNumber string `json:"license_number" form:"license_number" label:"批准文号"` // 批准文号 Manufacturer string `json:"manufacturer" form:"manufacturer" label:"生产厂家"` // 生产厂家 ProductRemarks string `json:"product_remarks" form:"product_remarks" label:"商品备注"` // 商品备注 + ProductStatus *int `json:"product_status" form:"product_status" label:"商品状态"` // 商品状态(1:正常 2:下架) } // AddProduct 新增商品 @@ -55,6 +57,7 @@ type AddProduct struct { FrequencyUse string `json:"frequency_use" form:"frequency_use" label:"使用频率" validate:"required"` // 使用频率(例:1天3次) AvailableDays float64 `json:"available_days" form:"available_days" label:"可用天数" validate:"required"` // 可用天数(3) ProductRemarks string `json:"product_remarks" form:"product_remarks" label:"商品备注" validate:"required"` // 商品备注 + ProductStatus *int `json:"product_status" form:"product_status" label:"商品状态" validate:"required oneof=1 2"` // 商品状态(1:正常 2:下架) } // PutProduct 修改商品 @@ -68,3 +71,8 @@ type PutProduct struct { AvailableDays float64 `json:"available_days" form:"available_days" label:"可用天数" validate:"required"` // 可用天数(3) ProductRemarks string `json:"product_remarks" form:"product_remarks" label:"商品备注" validate:"required"` // 商品备注 } + +// PutProductStatus 修改商品状态(上/下架) +type PutProductStatus struct { + ProductStatus *int `json:"product_status" form:"product_status" label:"商品状态" validate:"required oneof=1 2"` // 商品状态(1:正常 2:下架) +} diff --git a/api/router/router.go b/api/router/router.go index b6be38d..bec8fea 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -667,6 +667,9 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 修改商品 productGroup.PUT("/:product_id", api.Product.PutProduct) + // 修改商品状态(上/下架) + productGroup.PUT("/status/:product_id", api.Product.PutProductStatus) + // 平台商品 platformGroup := productGroup.Group("/platform") { diff --git a/api/service/product.go b/api/service/product.go index 7c498ab..1efa458 100644 --- a/api/service/product.go +++ b/api/service/product.go @@ -97,6 +97,7 @@ func (r *ProductService) AddProduct(userId string, req requests.AddProduct) (boo // 新增商品表 product := &model.Product{ ProductPlatformId: productPlatform.ProductPlatformId, + ProductStatus: *req.ProductStatus, ProductName: req.ProductName, CommonName: req.CommonName, ProductPrice: req.ProductPrice, @@ -159,7 +160,7 @@ func (r *ProductService) AddProduct(userId string, req requests.AddProduct) (boo return true, nil } -// PutProduct 修改医生 +// PutProduct 修改商品 func (r *ProductService) PutProduct(productId int64, req requests.PutProduct) (bool, error) { // 获取商品数据 productDao := dao.ProductDao{} @@ -233,3 +234,41 @@ func (r *ProductService) PutProduct(productId int64, req requests.PutProduct) (b tx.Commit() return true, nil } + +// PutProductStatus 修改商品状态(上/下架) +func (r *ProductService) PutProductStatus(productId int64, req requests.PutProductStatus) (bool, error) { + // 获取商品数据 + productDao := dao.ProductDao{} + product, err := productDao.GetProductById(productId) + if err != nil || product == nil { + return false, errors.New("商品数据错误") + } + + if product.ProductStatus == *req.ProductStatus { + return true, nil + } + + // 商品数据 + productData := make(map[string]interface{}) // 医生数据 + productData["product_status"] = req.ProductStatus + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + // 修改商品数据 + if len(productData) != 0 { + err = productDao.EditProductByUserId(tx, productId, productData) + if err != nil { + tx.Rollback() + return false, errors.New("操作失败") + } + } + + tx.Commit() + return true, nil +}