Bläddra i källkod

过滤下架产品

kobe6258 4 månader sedan
förälder
incheckning
7f1d528c9d

+ 0 - 44
domian/report/eta_report_service.go

@@ -73,50 +73,6 @@ func GetETAReportIdsByPermissionIdsWithRiskLevel(permissionIds []int) (orgIds []
 		orgIds = append(orgIds, report.OrgID)
 	}
 	return
-	//}
-	////根据riskLevel过滤ids
-	//var ids []int
-	//for _, report := range reports {
-	//	ids = append(ids, report.ID)
-	//}
-	//var productList []productDao.MerchantProduct
-	////现加入没有产品的报告
-	//productList, err = productDao.GetProductListBySourceIds(ids, true, productDao.Report)
-	//for _, report := range reports {
-	//	find := false
-	//	for _, product := range productList {
-	//		if product.SourceID == report.ID {
-	//			find = true
-	//			break
-	//		}
-	//	}
-	//	if !find {
-	//		orgIds = append(orgIds, report.OrgID)
-	//	}
-	//
-	//}
-	//riskNum, err := config.ParseRiskLevel(riskLevel)
-	//if err != nil {
-	//	logger.Error("解析风险等级失败:%v", err)
-	//	return
-	//}
-	////再把符合风险等级的产品报告加入
-	////productList, err = productDao.GetProductListBySourceIds(ids, productDao.Report)
-	//for _, report := range reports {
-	//	for _, product := range productList {
-	//		if product.SourceID == report.ID {
-	//			pdRiskNum, pdErr := config.ParseRiskLevel(product.RiskLevel)
-	//			if pdErr != nil {
-	//				logger.Error("解析产品风险等级失败:%v,产品id:%v", pdErr, product.ID)
-	//				continue
-	//			}
-	//			if pdRiskNum <= riskNum && product.SaleStatus == "on_sale" {
-	//				orgIds = append(orgIds, report.OrgID)
-	//			}
-	//		}
-	//	}
-	//}
-	//return
 }
 func GetETAReport(id int) (detail ETAReportDTO, err error) {
 	report, err := eta.GetETAReportById(id)

+ 89 - 26
domian/report/report_service.go

@@ -27,6 +27,7 @@ import (
 	"math/rand"
 	"strconv"
 	"strings"
+	"sync"
 	"time"
 )
 
@@ -830,18 +831,35 @@ func GetListByCondition[T any](column string, ids []T) (dtoList []ReportDTO, err
 func GetReportByIdListByOrgIds(orgIds map[string][]int) (ids []int, err error) {
 	return reportDao.GetReportIdListByOrgIds(orgIds)
 }
+func getHtOrgIds(permissionIds []int) (htOrgIds []int, err error) {
+	return GetHTReportIdsByPermissionIdsWithRiskLevel(permissionIds)
+}
 
+func getEtaOrgIds(permissionIds []int) (htOrgIds []int, err error) {
+	return GetETAReportIdsByPermissionIdsWithRiskLevel(permissionIds)
+}
 func GetTotalPageCountByPermissionIds(permissionIds []int) (total int64, latestId int64, ids map[string][]int, disCardReportIds []int) {
-	htOrgIds, err := GetHTReportIdsByPermissionIdsWithRiskLevel(permissionIds)
-	if err != nil {
-		logger.Error("品种筛选ht报告id失败:%v", err)
-		htOrgIds = []int{}
-	}
-	etaOrgIds, err := GetETAReportIdsByPermissionIdsWithRiskLevel(permissionIds)
-	if err != nil {
-		logger.Error("品种筛选eta报告id失败:%v", err)
-		etaOrgIds = []int{}
-	}
+	var wg sync.WaitGroup
+	wg.Add(2)
+	var htOrgIds []int
+	var etaOrgIds []int
+	go func() {
+		defer wg.Done()
+		var err error
+		htOrgIds, err = getHtOrgIds(permissionIds)
+		if err != nil {
+			logger.Error("品种筛选ht报告id失败:%v", err)
+		}
+	}()
+	go func() {
+		defer wg.Done()
+		var err error
+		etaOrgIds, err = getEtaOrgIds(permissionIds)
+		if err != nil {
+			logger.Error("品种筛选eta报告id失败:%v", err)
+		}
+	}()
+	wg.Wait()
 	totalCol := int64(len(etaOrgIds) + len(htOrgIds))
 	if totalCol == 0 {
 		latestId = 0
@@ -859,34 +877,67 @@ func GetTotalPageCountByPermissionIds(permissionIds []int) (total int64, latestI
 		ids["HT"] = htOrgIds
 	}
 	//获取一下下架的报告产品
-	var offSaleProducts []merchantDao.MerchantProduct
-	offSaleProducts, err = merchantDao.GetOffSaleProducts([]merchantDao.MerchantProductType{merchantDao.Report, merchantDao.Package})
+	offSaleProducts, err := merchantDao.GetOffSaleProducts([]merchantDao.MerchantProductType{merchantDao.Report, merchantDao.Package})
 	if err != nil {
 		logger.Error("获取下架的报告产品失败:%v", err)
 		return
 	}
+	var ProductPermissionIds []int
 	for _, product := range offSaleProducts {
 		if product.Type == "package" {
-			permission, permissionErr := permissionDao.PermissionsByPermissionId(product.SourceID)
-			if permissionErr != nil {
-				logger.Error("获取权限信息失败[permissionId:%d]", product.SourceID)
-				continue
-			}
-			classifyIds, classifyErr := permissionDao.GetClassifyIdsByPermissionIds([]int{permission.PermissionId})
-			if classifyErr != nil {
-				logger.Error("获取ETA报告分类id失败:%v", err)
-			}
-			disCardIds, _ := reportDao.GetHiddenReportIds(classifyIds, permission.Name)
-			if len(disCardIds) > 0 {
-				disCardReportIds = append(disCardReportIds, disCardIds...)
-			}
+			ProductPermissionIds = append(ProductPermissionIds, product.SourceID)
 		}
 		if product.Type == "report" {
 			disCardReportIds = append(disCardReportIds, product.SourceID)
 		}
 	}
-	disCardReportIds = uniqueArray(disCardReportIds)
+	wg.Add(2)
+	var permissionNames []string
+	var classifyIds []int
+	go func() {
+		defer wg.Done()
+		var permissionErr error
+		permissionNames, permissionErr = GetPermissionNamesByPermissionIds(ProductPermissionIds)
+		if permissionErr != nil {
+			logger.Error("获取ETA品种名称失败:%v", err)
+		}
+	}()
+	go func() {
+		defer wg.Done()
+		var classifyErr error
+		classifyIds, classifyErr = permissionDao.GetClassifyIdsByPermissionIds(ProductPermissionIds)
+		if classifyErr != nil {
+			logger.Error("获取ETA报告分类id失败:%v", err)
+		}
+	}()
+	wg.Wait()
+	disCardIds, _ := reportDao.GetHiddenReportIds(classifyIds, permissionNames)
+	if len(disCardIds) > 0 {
+		disCardReportIds = append(disCardReportIds, disCardIds...)
+	}
 	//对数据去重
+	disCardReportIds = uniqueArray(disCardReportIds)
+	//获取报告中还包含上架套餐的id
+	if len(disCardReportIds) > 0 {
+		reportIdsSalePackage, _ := merchantDao.GetOnSalePackageIds(disCardReportIds)
+		reportIdsSaleProduct, _ := merchantDao.GetOnSaleReportIds(disCardReportIds)
+		showReportMap := make(map[int]bool)
+		for _, reportId := range reportIdsSalePackage {
+			showReportMap[reportId] = true
+		}
+		for _, reportId := range reportIdsSaleProduct {
+			showReportMap[reportId] = true
+		}
+		var filterDisCardReportIds []int
+		for _, id := range disCardReportIds {
+			if _, ok := showReportMap[id]; !ok {
+				filterDisCardReportIds = append(filterDisCardReportIds, id)
+			}
+		}
+		disCardReportIds = filterDisCardReportIds
+	}
+
+	//获取这些id的产品
 	total, latestId, err = reportDao.GetMaxIdByPermissionIds(ids, disCardReportIds)
 	if err != nil {
 		logger.Error("获取筛选报告的最大记录和记录数失败:%v", err)
@@ -894,6 +945,18 @@ func GetTotalPageCountByPermissionIds(permissionIds []int) (total int64, latestI
 	}
 	return
 }
+
+type etaReport struct {
+	Id            int   `json:"id"`
+	ClassifyId    int   `json:"classifyId"`
+	PermissionIds []int `json:"permissionIds"`
+}
+type htReport struct {
+	Id           int    `json:"id"`
+	PlateName    string `json:"plateName"`
+	PermissionId []int  `json:"permissionId"`
+}
+
 func uniqueArray(arr []int) []int {
 	uniqueMap := make(map[int]bool)
 	var result []int

+ 2 - 0
main.go

@@ -44,6 +44,8 @@ func main() {
 		initThirdPartyAccessToken()
 		//初始化商户信息
 		initMerchant(htConfig.GetMerchantId())
+		//初始化上架产品
+
 	}()
 	logger.Info("初始化成功")
 	web.Run()

+ 59 - 0
models/merchant/merchant_product.go

@@ -236,3 +236,62 @@ func GetOffSaleProducts(query []MerchantProductType) (list []MerchantProduct, er
 	return
 
 }
+
+func GetOnSalePackageIds(ids []int) (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 permission_classify_mapping pcm ON r.classify_id = pcm.classify_id
+      LEFT JOIN merchant_products mp ON mp.source_id = pcm.permission_id 
+      AND mp.type = 'package' 
+      AND mp.sale_status = 'on_sale' 
+    WHERE
+      mp.id IS NOT NULL and mp.id in ?
+    UNION ALL
+    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
+      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 GetOnSaleReportIds(ids []int) (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 = 'report' 
+      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, ids).Scan(&sourceIds).Error
+	return
+}

+ 3 - 3
models/report/report.go

@@ -405,14 +405,14 @@ select cpm.permission_id from reports  r LEFT JOIN (SELECT classify_id,permissio
 	return
 }
 
-func GetHiddenReportIds(classifyIds []int, plateName string) (reportIds []int, err error) {
+func GetHiddenReportIds(classifyIds []int, plateNames []string) (reportIds []int, err error) {
 	db := models.Main()
 	exc := db.Model(&Report{}).Select("id")
 	if len(classifyIds) > 0 {
 		exc.Where("(source='ETA' and classify_id in ?)", classifyIds)
 	}
-	if plateName != "" {
-		exc.Or("(source='HT' and plate_name = ?)", plateName)
+	if len(plateNames) > 0 {
+		exc.Or("(source='HT' and plate_name in ?)", plateNames)
 	}
 	err = exc.Scan(&reportIds).Error
 	return