Browse Source

增加套餐筛选

kobe6258 4 months ago
parent
commit
2c9029e1a2

+ 2 - 0
common/exception/exc_enums.go

@@ -144,6 +144,7 @@ const (
 	ProductErrorCode int = iota + 100000
 	ProductOffSale
 	ProductTypeError
+	ProductGetFailed
 )
 const (
 	PaymentErrCode int = iota + 110000
@@ -252,6 +253,7 @@ var ErrorMap = map[int]string{
 	//product
 	ProductOffSale:   "商品已下架",
 	ProductTypeError: "非法的产品类型",
+	ProductGetFailed: "获取商品信息失败",
 	//支付
 	CreatePaymentOrderFailed: "创建支付订单失败",
 	PaymentProcessingError:   "支付订单处理中",

+ 33 - 0
controllers/product/product_controller.go

@@ -32,3 +32,36 @@ func (p *ProductController) GetProductInfo(productId int) {
 		return
 	})
 }
+
+// RelatePackage  获取商品信息
+// @Summary 获取商品信息
+// @Description 获取商品信息
+// @Success 200 {object} controllers.BaseResponse
+// @router /relatePackage [get]
+func (p *ProductController) RelatePackage(productId int) {
+	controllers.Wrap(&p.BaseController, func() (result *controllers.WrapData, err error) {
+		result = p.InitWrapData("获取关联套餐信息失败")
+		if productId <= 0 {
+			err = exception.New(exception.IllegalProductId)
+			p.FailedResult("获取关联套餐信息失败", result)
+			return
+		}
+		productInfo, err := productService.GetProductInfoById(productId)
+		if err != nil {
+			p.FailedResult("获取关联套餐信息失败", result)
+			err = exception.New(exception.ProductTypeError)
+			return
+		}
+		if productInfo.Type == "package" {
+			p.FailedResult("该商品为套餐,无法获取想关联套餐商品", result)
+			err = exception.New(exception.ProductTypeError)
+		}
+		productList, err := productService.GetRelatePackage(productInfo)
+		if err != nil {
+			p.FailedResult("获取关联套餐信息失败", result)
+			return
+		}
+		p.SuccessResult("获取关联套餐信息成功", productList, result)
+		return
+	})
+}

+ 19 - 0
domian/merchant/merchant_product.go

@@ -15,6 +15,12 @@ var (
 		merchantDao.Audio:   "单个音频",
 		merchantDao.Package: "套餐",
 	}
+	typeKindTransfer = map[string]merchantDao.MerchantProductType{
+		"report":  merchantDao.Report,
+		"video":   merchantDao.Video,
+		"audio":   merchantDao.Audio,
+		"package": merchantDao.Package,
+	}
 )
 
 type MerchantProductDTO struct {
@@ -75,3 +81,16 @@ func GetProductBySourceId(id int, productType merchantDao.MerchantProductType) (
 	product = convertToDTO(productDao)
 	return
 }
+
+func GetProductListBySourceIds(ids []int, productType string) (productDTOS []MerchantProductDTO, err error) {
+	productList, err := merchantDao.GetProductListBySourceIds(ids, typeKindTransfer[productType])
+	if err != nil {
+		logger.Error("获取商品列表失败[sourceIds:%v,type:%v],err:%v", ids, productType, err)
+		return
+	}
+	for _, product := range productList {
+		productDTO := convertToDTO(product)
+		productDTOS = append(productDTOS, productDTO)
+	}
+	return
+}

+ 5 - 0
models/merchant/merchant_product.go

@@ -1,6 +1,7 @@
 package merchant
 
 import (
+	"errors"
 	"eta/eta_mini_ht_api/models"
 	"github.com/shopspring/decimal"
 	"gorm.io/gorm"
@@ -77,6 +78,10 @@ func GetMerchantProductBySourceId(sourceId int, productType ...MerchantProductTy
 
 func GetProductListBySourceIds(ids []int, productType ...MerchantProductType) (productList []MerchantProduct, err error) {
 	db := models.Main()
+	if productType == nil {
+		err = errors.New("productType参数不能为空")
+		return
+	}
 	if len(productType) > 0 {
 		if len(productType) == 1 {
 			err = db.Select(sourceIdColumn).Where("source_id in ? and type = ? and deleted =? ", ids, productType[0], false).Find(&productList).Error

+ 11 - 0
routers/commentsRouter.go

@@ -143,6 +143,17 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/product:ProductController"] = append(beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/product:ProductController"],
+        beego.ControllerComments{
+            Method: "RelatePackage",
+            Router: `/relatePackage`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(
+				param.New("productId"),
+			),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/report:ReportController"] = append(beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/report:ReportController"],
         beego.ControllerComments{
             Method: "Count",

+ 32 - 1
service/product/product_service.go

@@ -24,6 +24,7 @@ type ProductDTO struct {
 	Type        string
 	BeginDate   string
 	EndDate     string
+	SourceId    int
 }
 
 func GetProductRiskLevel(product merchantService.MerchantProductDTO) (riskLevel string, err error) {
@@ -100,6 +101,7 @@ func convertToProductDTO(product merchantService.MerchantProductDTO) (productDTO
 		Type:        product.Type,
 		BeginDate:   beginDate.Format(time.DateOnly),
 		EndDate:     endDate.Format(time.DateOnly),
+		SourceId:    product.SourceId,
 	}
 	return
 }
@@ -136,4 +138,33 @@ func CloseProduct(templateUserId int, productOrderNo string) (err error) {
 
 //过期产品(套餐)
 
-//退款关闭套餐
+// 退款关闭套餐
+func GetRelatePackage(info ProductDTO) (prodList []merchantService.MerchantProductDTO, err error) {
+	switch info.Type {
+	case "audio", "video":
+		permissionIds, permissionErr := media.GetMediaPermissionMappingByMedia(info.Type, info.SourceId)
+		if permissionErr != nil {
+			logger.Error("获取媒体品种信息失败:%v", err)
+			return
+		}
+		return merchantService.GetProductListBySourceIds(permissionIds, "package")
+	case "report":
+		reportInfo, reportErr := reportService.GetReportById(info.SourceId)
+		if reportErr != nil {
+			logger.Error("获取报告信息失败:%v", err)
+			return
+		}
+		permissions := reportService.GetReportSecondPermissionsById(reportInfo.OrgId, reportInfo.Source)
+		var permissionIds []int
+		if len(permissions) > 0 {
+			for _, permission := range permissions {
+				permissionIds = append(permissionIds, permission.PermissionId)
+			}
+			permissionIds = append(permissionIds, permissions[0].PermissionId)
+		}
+		return merchantService.GetProductListBySourceIds(permissionIds, "package")
+	default:
+		err = exception.New(exception.ProductTypeError)
+		return
+	}
+}