123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- package merchant
- import (
- "errors"
- logger "eta/eta_mini_ht_api/common/component/log"
- "eta/eta_mini_ht_api/common/utils/page"
- stringUtils "eta/eta_mini_ht_api/common/utils/string"
- reportDomain "eta/eta_mini_ht_api/domian/report"
- merchantDao "eta/eta_mini_ht_api/models/merchant"
- "gorm.io/gorm"
- "strings"
- "sync/atomic"
- "time"
- )
- var (
- typeTransfer = map[merchantDao.MerchantProductType]string{
- merchantDao.Report: "单篇报告",
- merchantDao.Video: "单个视频",
- merchantDao.Audio: "单个音频",
- merchantDao.Package: "套餐",
- }
- typeKindTransfer = map[string]merchantDao.MerchantProductType{
- "report": merchantDao.Report,
- "video": merchantDao.Video,
- "audio": merchantDao.Audio,
- "package": merchantDao.Package,
- }
- )
- type MerchantProductDTO struct {
- Id int
- Title string
- CoverSrc int
- CoverUrl string
- Description string
- Price string
- ProductTile string
- RiskLevel string
- Type string
- TypeCN string
- IsPermanent bool
- ValidDays int
- SaleStatus string
- SourceId int
- CreatedTime time.Time
- Deleted bool
- }
- func GetMerchantProductById(id int) (productDTO MerchantProductDTO, err error) {
- product, err := merchantDao.GetMerchantProductById(id)
- if err != nil {
- if errors.Is(err, gorm.ErrRecordNotFound) {
- logger.Error("商品信息不存在[productId:%d]", id)
- } else {
- logger.Error("获取商品信息失败[productId:%d],err:", id, err)
- }
- }
- productDTO = convertToDTO(product)
- return
- }
- func convertToDTO(product merchantDao.MerchantProduct) MerchantProductDTO {
- return MerchantProductDTO{
- Id: product.Id,
- Title: product.Title,
- CoverSrc: product.CoverSrc,
- CoverUrl: product.CoverUrl,
- Description: product.Description,
- ProductTile: product.Title,
- Price: product.Price,
- RiskLevel: product.RiskLevel,
- Type: string(product.Type),
- TypeCN: typeTransfer[product.Type],
- IsPermanent: product.IsPermanent,
- ValidDays: product.ValidDays,
- SourceId: product.SourceId,
- SaleStatus: string(product.SaleStatus),
- CreatedTime: product.CreatedTime,
- Deleted: product.Deleted > 0,
- }
- }
- func GetProductBySourceId(id int, productType merchantDao.MerchantProductType) (product MerchantProductDTO, err error) {
- productDao, err := merchantDao.GetMerchantProductBySourceId(id, productType)
- if err != nil {
- if errors.Is(err, gorm.ErrRecordNotFound) {
- logger.Error("商品信息不存在[sourceId:%d,type:%v]", id, productType)
- } else {
- logger.Error("获取商品信息失败[sourceId:%d,type:%v],err:%v", id, productType, err)
- }
- return
- }
- product = convertToDTO(productDao)
- return
- }
- func GetProductListBySourceIds(ids []int, productType string) (productDTOS []MerchantProductDTO, err error) {
- productList, err := merchantDao.GetProductListBySourceIds(ids, true, 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
- }
- func GetProductListByProductType(productType string) (list []MerchantProductDTO, err error) {
- productList, err := merchantDao.GetProductListByProductType(typeKindTransfer[productType], true)
- for _, product := range productList {
- productDTO := convertToDTO(product)
- list = append(list, productDTO)
- }
- return
- }
- func GetProductPageByProductType(productIds []int, info page.PageInfo) (dtoList []MerchantProductDTO, err error) {
- offset := page.StartIndex(info.Current, info.PageSize)
- productList, err := merchantDao.GetProductPageByProductType(productIds, info.LatestId, offset, info.PageSize)
- if err != nil {
- logger.Error("获取商品列表失败[productIds:%v,pageInfo:%v],err:%v", productIds, info, err)
- return
- }
- for _, productInfo := range productList {
- productDTO := convertToDTO(productInfo)
- dtoList = append(dtoList, productDTO)
- }
- return
- }
- func GetProductByProductType() (productIdMap map[string][]int, err error) {
- productIdStrMap, err := merchantDao.GetProductByProductType()
- if err != nil {
- logger.Error("根据类型分类获取商品ID失败,err:%v", err)
- return
- }
- productIdMap = make(map[string][]int, len(productIdStrMap))
- for productType, productIds := range productIdStrMap {
- idStr := strings.Split(productIds, ",")
- productIdMap[productType], _ = stringUtils.StringToIntSlice(idStr)
- }
- return
- }
- func LatestId() (latestId int64) {
- return merchantDao.LatestId()
- }
- func ProductListBySort(isSignal bool, list []reportDomain.ProductSearchDTO, weightMap map[int]*atomic.Int32, info page.PageInfo) (productDTOS []MerchantProductDTO, err error) {
- offset := page.StartIndex(info.Current, info.PageSize)
- var productList []merchantDao.MerchantProduct
- if isSignal {
- var searchList []merchantDao.ProductDTO
- for _, product := range list {
- searchList = append(searchList, merchantDao.ProductDTO{
- SourceId: product.SourceId,
- SourceType: product.SourceType,
- Score: product.Score,
- })
- }
- productList, err = merchantDao.ProductListBySort(searchList, info.LatestId, offset, info.PageSize)
- if err != nil {
- return
- }
- } else {
- productList, err = merchantDao.PackageListBySort(weightMap, info.LatestId, offset, info.PageSize)
- if err != nil {
- return
- }
- }
- for _, productInfo := range productList {
- productDTOS = append(productDTOS, convertToDTO(productInfo))
- }
- return
- }
- func GetOffSaleProducts(productTypeList []string) (dtoList []MerchantProductDTO, err error) {
- var productTypeQuery []merchantDao.MerchantProductType
- for _, productType := range productTypeList {
- productTypeQuery = append(productTypeQuery, typeKindTransfer[productType])
- }
- list, err := merchantDao.GetOffSaleProducts(productTypeQuery)
- for _, product := range list {
- dtoList = append(dtoList, convertToDTO(product))
- }
- return
- }
|