浏览代码

过滤下架产品

kobe6258 4 月之前
父节点
当前提交
8c3b27b021

+ 3 - 2
controllers/web_hook/htfutures_trade_controller.go

@@ -78,15 +78,16 @@ func (h *HTFuturesTradeController) InformRefundResult() {
 		s := new(ss)
 		h.GetPostParams(s)
 		if s.Success {
-			flow, RefundErr := orderService.DealRefund(s.TradeOrderNo, orderService.RefundSuccess)
+			productOrder, RefundErr := orderService.DealRefund(s.TradeOrderNo, orderService.RefundSuccess)
 			if RefundErr != nil {
 				logger.Error("退款订单处理失败: %v", err)
 				err = exception.NewWithException(exception.RefundDealFail, err.Error())
 				h.FailedResult("退款订单处理失败", result)
 				return
 			}
+
 			//处理退款订单
-			_ = product.CloseProduct(s.User, flow.ProductOrderNo)
+			_ = product.CloseProduct(productOrder)
 		} else {
 			_, RefundErr := orderService.DealRefund(s.TradeOrderNo, orderService.RefundFail)
 			if RefundErr != nil {

+ 60 - 28
domian/media/media_service.go

@@ -14,6 +14,7 @@ import (
 	configDao "eta/eta_mini_ht_api/models/config"
 	"eta/eta_mini_ht_api/models/image"
 	mediaDao "eta/eta_mini_ht_api/models/media"
+	merchantDao "eta/eta_mini_ht_api/models/merchant"
 	productDao "eta/eta_mini_ht_api/models/merchant"
 	configService "eta/eta_mini_ht_api/service/config"
 	"sort"
@@ -34,7 +35,13 @@ const (
 )
 
 var (
-	sortField = []string{"_score:desc"}
+	sortField       = []string{"_score:desc"}
+	transProductMap = map[string]merchantDao.MerchantProductType{
+		"report":  merchantDao.Report,
+		"video":   merchantDao.Video,
+		"audio":   merchantDao.Audio,
+		"package": merchantDao.Package,
+	}
 )
 
 func elastic() *es.ESClient {
@@ -130,54 +137,66 @@ func SearchMaxMediaId(mediaType string, key string) (total int64, latestId int64
 }
 func GetMediaPermissionMappingByPermissionIds(mediaType string, permissionIds []int, riskLevel string) (total int64, latestId int64, ids []int, mappingPdRisk string) {
 	//获取一下下架的报告产品
-	var offSaleProducts []merchantService.MerchantProductDTO
-	offSaleProducts, err := merchantService.GetOffSaleProducts([]string{"report", "package"})
+	var offSaleProducts []merchantDao.MerchantProduct
+	offSaleProducts, err := merchantDao.GetOffSaleProducts([]merchantDao.MerchantProductType{transProductMap[mediaType], merchantDao.Package})
 	var disCardMediaIds []int
-	var disCardPermissionIds []int
 	var filterPermissionIds []int
+	var ProductPermissionIds []int
 	var filterIds []int
 	if err != nil {
 		logger.Error("获取下架的报告产品失败:%v", err)
 	} else {
 		for _, product := range offSaleProducts {
 			if product.Type == "package" {
-				disCardPermissionIds = append(disCardPermissionIds, product.SourceId)
+				ProductPermissionIds = append(ProductPermissionIds, product.SourceId)
 			}
-			if product.Type == "audio" || product.Type == "video" {
+			if product.Type == transProductMap[mediaType] {
 				disCardMediaIds = append(disCardMediaIds, product.SourceId)
 			}
 		}
 	}
-	for _, permissionId := range permissionIds {
-		find := false
-		for _, disCardPermissionId := range disCardPermissionIds {
-			if permissionId == disCardPermissionId {
-				find = true
-				break
-			}
-		}
-		if !find {
-			filterPermissionIds = append(filterPermissionIds, permissionId)
+	if len(ProductPermissionIds) > 0 {
+		var disCardIds []int
+		disCardIds, err = mediaDao.GetMediaPermissionMappingByPermissionId(mediaType, filterPermissionIds)
+		if len(disCardMediaIds) > 0 {
+			disCardMediaIds = append(disCardMediaIds, disCardIds...)
 		}
 	}
+	//对数据去重
+	disCardMediaIds = uniqueArray(disCardMediaIds)
 	ids, err = mediaDao.GetMediaPermissionMappingByPermissionId(mediaType, filterPermissionIds)
 	if err != nil {
 		logger.Error("获取配置品种的媒体列表信息失败:%v", err)
 		return 0, 0, ids, riskLevel
 	}
-	for _, mediaId := range ids {
-		find := false
-		for _, discardMediaId := range disCardMediaIds {
-			if mediaId == discardMediaId {
-				find = true
-				break
+	//获取媒体中还包含上架套餐的id
+	if len(disCardMediaIds) > 0 {
+		reportIdsSalePackage, _ := merchantDao.GetMediaOnSalePackageIds(disCardMediaIds, transProductMap[mediaType])
+		reportIdsSaleProduct, _ := merchantDao.GetOnSaleMediaIds(disCardMediaIds, transProductMap[mediaType])
+		showReportMap := make(map[int]bool)
+		disCardMap := make(map[int]bool)
+		for _, reportId := range reportIdsSalePackage {
+			showReportMap[reportId] = true
+		}
+		for _, reportId := range reportIdsSaleProduct {
+			showReportMap[reportId] = true
+		}
+		var filterDisCardReportIds []int
+		for _, id := range disCardMediaIds {
+			if _, ok := showReportMap[id]; !ok {
+				filterDisCardReportIds = append(filterDisCardReportIds, id)
+				disCardMap[id] = true
 			}
 		}
-		if !find {
-			filterIds = append(filterIds, mediaId)
+		disCardMediaIds = filterDisCardReportIds
+		var cardReportIds []int
+		for _, id := range filterIds {
+			if _, ok := disCardMap[id]; !ok {
+				cardReportIds = append(cardReportIds, id)
+			}
 		}
+		filterIds = cardReportIds
 	}
-
 	if len(filterIds) > 0 {
 		sort.Slice(filterIds, func(i, j int) bool {
 			return filterIds[i] > filterIds[j]
@@ -186,6 +205,19 @@ func GetMediaPermissionMappingByPermissionIds(mediaType string, permissionIds []
 	}
 	return 0, 0, []int{}, riskLevel
 }
+func uniqueArray(arr []int) []int {
+	uniqueMap := make(map[int]bool)
+	var result []int
+
+	for _, value := range arr {
+		if _, exists := uniqueMap[value]; !exists {
+			uniqueMap[value] = true
+			result = append(result, value)
+		}
+	}
+
+	return result
+}
 func GetAnalystMediaPermissionMappingByPermissionIds(mediaType string, permissionIds []int, analystId int, mappingRiskLevel string) (total int64, latestId int64, ids []int, riskLevel string) {
 	ids, err := mediaDao.GetMediaPermissionMappingByPermissionId(mediaType, permissionIds)
 	if err != nil {
@@ -238,7 +270,7 @@ func GetAnalystMediaPermissionMappingByPermissionIds(mediaType string, permissio
 		for _, mediaId := range ids {
 			find := false
 			for _, product := range productList {
-				if product.SourceID == mediaId {
+				if product.SourceId == mediaId {
 					find = true
 					break
 				}
@@ -255,10 +287,10 @@ func GetAnalystMediaPermissionMappingByPermissionIds(mediaType string, permissio
 		//再把符合风险等级的产品加入
 		for _, mediaId := range ids {
 			for _, product := range productList {
-				if product.SourceID == mediaId {
+				if product.SourceId == mediaId {
 					pdRiskNum, pdErr := configService.ParseRiskLevel(product.RiskLevel)
 					if pdErr != nil {
-						logger.Error("解析产品风险等级失败:%v,产品id:%v", pdErr, product.ID)
+						logger.Error("解析产品风险等级失败:%v,产品id:%v", pdErr, product.Id)
 						continue
 					}
 					if pdRiskNum <= riskNum && product.SaleStatus == productDao.OnSale {

+ 2 - 2
domian/merchant/merchant_product.go

@@ -60,7 +60,7 @@ func GetMerchantProductById(id int) (productDTO MerchantProductDTO, err error) {
 }
 func convertToDTO(product merchantDao.MerchantProduct) MerchantProductDTO {
 	return MerchantProductDTO{
-		Id:          product.ID,
+		Id:          product.Id,
 		Title:       product.Title,
 		CoverSrc:    product.CoverSrc,
 		CoverUrl:    product.CoverUrl,
@@ -72,7 +72,7 @@ func convertToDTO(product merchantDao.MerchantProduct) MerchantProductDTO {
 		TypeCN:      typeTransfer[product.Type],
 		IsPermanent: product.IsPermanent,
 		ValidDays:   product.ValidDays,
-		SourceId:    product.SourceID,
+		SourceId:    product.SourceId,
 		SaleStatus:  string(product.SaleStatus),
 		CreatedTime: product.CreatedTime,
 	}

+ 10 - 4
domian/order/trade_order.go

@@ -179,15 +179,14 @@ func createRefundMetaInfo(sysUserId int, productOrderNo string, flag string) (er
 	return message.CreateMetaInfo(metaInfo)
 }
 
-func DealRefund(refundOrderNo string, flag string) (dto RefundDealFlowDTO, err error) {
+func DealRefund(refundOrderNo string, flag string) (productOrderDTO ProductOrderDTO, err error) {
 	flow, err := order.GetRefundFlow(refundOrderNo)
 	if err != nil {
 		logger.Error("获取退款流水失败%v,退款订单:%s", err, refundOrderNo)
 		return
 	}
-	dto = convertRefundDTO(flow)
 	//处理退款订单
-	TradeOrder, err := order.GetTradeOrderByNo(flow.RefundOrderNo, order.PaymentTypeRefund)
+	tradeOrder, err := order.GetTradeOrderByNo(flow.RefundOrderNo, order.PaymentTypeRefund)
 	if err != nil {
 		logger.Error("获取退款订单失败%v,退款订单:%s", err, refundOrderNo)
 		return
@@ -196,11 +195,18 @@ func DealRefund(refundOrderNo string, flag string) (dto RefundDealFlowDTO, err e
 	if flag == RefundSuccess {
 		isSuccess = true
 	}
-	err = order.DealRefundOrder(TradeOrder, isSuccess)
+	err = order.DealRefundOrder(tradeOrder, isSuccess)
 	if err != nil {
 		logger.Error("处理退款结果失败%v,退款订单:%s", err, refundOrderNo)
 		return
 	}
+	var productOrder order.ProductOrder
+	productOrder, err = order.GetOrderByOrderNo(tradeOrder.ProductOrderID)
+	if err != nil {
+		logger.Error("获取产品订单失败%v,退款订单:%s", err, refundOrderNo)
+		return
+	}
+	productOrderDTO = ConvertProductOrderDTO(productOrder)
 	_ = createRefundMetaInfo(flow.OperatorUserID, flow.ProductOrderNo, flag)
 	return
 }

+ 6 - 6
domian/report/report_service.go

@@ -215,10 +215,10 @@ func GetTotalPageCountByAnalyst(analyst string, permissionIds []int) (total int6
 	var ProductPermissionIds []int
 	for _, product := range offSaleProducts {
 		if product.Type == "package" {
-			ProductPermissionIds = append(ProductPermissionIds, product.SourceID)
+			ProductPermissionIds = append(ProductPermissionIds, product.SourceId)
 		}
 		if product.Type == "report" {
-			disCardReportIds = append(disCardReportIds, product.SourceID)
+			disCardReportIds = append(disCardReportIds, product.SourceId)
 		}
 	}
 	if len(ProductPermissionIds) > 0 {
@@ -251,7 +251,7 @@ func GetTotalPageCountByAnalyst(analyst string, permissionIds []int) (total int6
 	disCardReportIds = uniqueArray(disCardReportIds)
 	//获取报告中还包含上架套餐的id
 	if len(disCardReportIds) > 0 {
-		reportIdsSalePackage, _ := merchantDao.GetOnSalePackageIds(disCardReportIds)
+		reportIdsSalePackage, _ := merchantDao.GetReportOnSalePackageIds(disCardReportIds)
 		reportIdsSaleProduct, _ := merchantDao.GetOnSaleReportIds(disCardReportIds)
 		showReportMap := make(map[int]bool)
 		disCardMap := make(map[int]bool)
@@ -929,10 +929,10 @@ func GetTotalPageCountByPermissionIds(permissionIds []int) (total int64, latestI
 	var ProductPermissionIds []int
 	for _, product := range offSaleProducts {
 		if product.Type == "package" {
-			ProductPermissionIds = append(ProductPermissionIds, product.SourceID)
+			ProductPermissionIds = append(ProductPermissionIds, product.SourceId)
 		}
 		if product.Type == "report" {
-			disCardReportIds = append(disCardReportIds, product.SourceID)
+			disCardReportIds = append(disCardReportIds, product.SourceId)
 		}
 	}
 	if len(ProductPermissionIds) > 0 {
@@ -966,7 +966,7 @@ func GetTotalPageCountByPermissionIds(permissionIds []int) (total int64, latestI
 	disCardReportIds = uniqueArray(disCardReportIds)
 	//获取报告中还包含上架套餐的id
 	if len(disCardReportIds) > 0 {
-		reportIdsSalePackage, _ := merchantDao.GetOnSalePackageIds(disCardReportIds)
+		reportIdsSalePackage, _ := merchantDao.GetReportOnSalePackageIds(disCardReportIds)
 		reportIdsSaleProduct, _ := merchantDao.GetOnSaleReportIds(disCardReportIds)
 		showReportMap := make(map[int]bool)
 		for _, reportId := range reportIdsSalePackage {

+ 50 - 6
models/merchant/merchant_product.go

@@ -29,8 +29,8 @@ const (
 
 // MerchantProduct 商户产品信息结构体
 type MerchantProduct struct {
-	ID          int                 `gorm:"column:id;primary_key;autoIncrement;comment:主键"`
-	SourceID    int                 `gorm:"column:source_id;type:int(11);comment:单品或者套餐对应的主键"`
+	Id          int                 `gorm:"column:id;primary_key;autoIncrement;comment:主键"`
+	SourceId    int                 `gorm:"column:source_id;type:int(11);comment:单品或者套餐对应的主键"`
 	Title       string              `gorm:"column:title;type:varchar(255);comment:标题"`
 	CoverSrc    int                 `gorm:"column:cover_src;type:int(11);comment:封面图片资源库id"`
 	CoverUrl    string              `gorm:"column:cover_url;type:varchar(255);comment:封面图片url"`
@@ -237,7 +237,7 @@ func GetOffSaleProducts(query []MerchantProductType) (list []MerchantProduct, er
 
 }
 
-func GetOnSalePackageIds(ids []int) (sourceIds []int, err error) {
+func GetReportOnSalePackageIds(ids []int) (sourceIds []int, err error) {
 	sql := `SELECT
   a.id
 #   GROUP_CONCAT( a.product_id ) product_ids
@@ -260,8 +260,34 @@ FROM
     #  mp.id AS product_id
     FROM
       reports r
-      LEFT JOIN permissions p ON r.plate_name = p.
-      NAME LEFT JOIN merchant_products mp ON mp.source_id = p.permission_id 
+      LEFT JOIN permissions p ON r.plate_name = p.NAME
+      LEFT JOIN merchant_products mp ON mp.source_id = p.permission_id 
+      AND mp.type = 'package' 
+      AND mp.sale_status = 'on_sale' 
+    WHERE
+      mp.id IS NOT NULL  and mp.id in ?
+  ) a where a.id in ?
+GROUP BY
+  a.id 
+ORDER BY
+  a.id`
+	db := models.Main()
+	err = db.Raw(sql, ids, ids).Scan(&sourceIds).Error
+	return
+}
+func GetMediaOnSalePackageIds(ids []int, productType MerchantProductType) (sourceIds []int, err error) {
+	sql := `SELECT
+  a.id
+#   GROUP_CONCAT( a.product_id ) product_ids
+FROM
+  (
+    SELECT
+      r.id
+    #  mp.id AS product_id
+    FROM
+      reports r
+      LEFT JOIN permissions p ON r.plate_name = p.NAME 
+      LEFT JOIN merchant_products mp ON mp.source_id = p.permission_id 
       AND mp.type = 'package' 
       AND mp.sale_status = 'on_sale' 
     WHERE
@@ -275,7 +301,6 @@ ORDER BY
 	err = db.Raw(sql, ids, ids).Scan(&sourceIds).Error
 	return
 }
-
 func GetOnSaleReportIds(ids []int) (sourceIds []int, err error) {
 	sql := `SELECT
       r.id
@@ -295,3 +320,22 @@ ORDER BY
 	err = db.Raw(sql, ids).Scan(&sourceIds).Error
 	return
 }
+func GetOnSaleMediaIds(ids []int, productType MerchantProductType) (sourceIds []int, err error) {
+	sql := `SELECT
+      r.id
+      #GROUP_CONCAT( mp.id ) AS  product_ids 
+    FROM
+      reports r
+      LEFT JOIN merchant_products mp ON mp.source_id = r.id
+      AND mp.type = ?
+      AND mp.sale_status = 'on_sale' 
+    WHERE
+      mp.id IS NOT NULL and mp.id in ?
+GROUP BY
+  r.id 
+ORDER BY
+  r.id`
+	db := models.Main()
+	err = db.Raw(sql, productType, ids).Scan(&sourceIds).Error
+	return
+}

+ 2 - 8
service/product/product_service.go

@@ -16,7 +16,6 @@ import (
 	merchantDao "eta/eta_mini_ht_api/models/merchant"
 	configService "eta/eta_mini_ht_api/service/config"
 	mediaService "eta/eta_mini_ht_api/service/media"
-	"eta/eta_mini_ht_api/service/order"
 	reportService "eta/eta_mini_ht_api/service/report"
 	userService "eta/eta_mini_ht_api/service/user"
 	"fmt"
@@ -173,18 +172,13 @@ func OpenProduct(productOrder orderDomain.ProductOrderDTO) (err error) {
 }
 
 // CloseProduct  退款关闭套餐
-func CloseProduct(templateUserId int, productOrderNo string) (err error) {
-	productOrder, err := order.GetProductOrderByUser(templateUserId, productOrderNo)
-	if err != nil {
-		logger.Error("获取产品订单信息失败:%v", err)
-		return
-	}
+func CloseProduct(productOrder orderDomain.ProductOrderDTO) (err error) {
 	product, err := merchantService.GetMerchantProductById(productOrder.ProductID)
 	if err != nil {
 		logger.Error("获取产品信息失败:%v", err)
 		return
 	}
-	return merchantService.CloseProduct(templateUserId, productOrderNo, product)
+	return merchantService.CloseProduct(productOrder.TemplateUserID, productOrder.OrderID, product)
 }
 
 // 过期产品