package product import ( logger "eta/eta_mini_ht_api/common/component/log" "eta/eta_mini_ht_api/common/exception" "eta/eta_mini_ht_api/common/utils/page" "eta/eta_mini_ht_api/controllers" productService "eta/eta_mini_ht_api/service/product" "eta/eta_mini_ht_api/service/user" ) var ( productMap = map[string]bool{ "audio": true, "video": true, "media": true, "report": true, "package": true, } ) type ProductController struct { controllers.ListController } // GetProductInfo 获取商品信息 // @Summary 获取商品信息 // @Description 获取商品信息 // @Success 200 {object} controllers.BaseResponse // @router /getProductInfo [get] func (p *ProductController) GetProductInfo(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) return } p.SuccessResult("获取商品详情成功", productInfo, result) 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) } switch productInfo.Type { case "audio", "video": productInfo.MediaId = productInfo.SourceId case "report": productInfo.ReportId = productInfo.SourceId } productList, err := productService.GetRelatePackage(productInfo) productList = append(productList, productInfo) if err != nil { p.FailedResult("获取关联套餐信息失败", result) return } p.SuccessResult("获取关联套餐信息成功", productList, result) return }) } // ProductSearch 获取商品信息 // @Summary 获取商品信息 // @Description 获取商品信息 // @Success 200 {object} controllers.BaseResponse // @router /productSearch [get] func (p *ProductController) ProductSearch(productType, key string, isSignal bool) { controllers.Wrap(&p.BaseController, func() (result *controllers.WrapData, err error) { result = p.InitWrapData("搜索产品信息失败") //userInfo := p.Data["user"].(user.User) if !productMap[productType] { err = exception.New(exception.ProductTypeError) p.FailedResult("搜索产品信息失败", result) return } var productList []productService.ProductDTO pageRes := page.Page{ Current: p.PageInfo.Current, PageSize: p.PageInfo.PageSize, } //pageRes.Total, pageRes.LatestId = productService.RangeProductList(isSignal) if p.PageInfo.LatestId == 0 { p.PageInfo.LatestId = pageRes.LatestId p.PageInfo.Total = pageRes.Total } else { pageRes.LatestId = p.PageInfo.LatestId pageRes.Total = p.PageInfo.Total } pageRes.TotalPage = page.TotalPages(pageRes.Total, pageRes.PageSize) //if isSignal { // productList, err = productService.ProductSearch(key, userInfo.Id, p.PageInfo) //} else { // productList, err = productService.PackageSearch(key, userInfo.Id) //} if err != nil { p.FailedResult("搜索产品信息失败", result) return } p.SuccessResult("搜索产品信息成功", productList, result) return }) } // ProductList 产品列表 // @Summary 产品列表 // @Description 产品列表 // @Success 200 {object} controllers.BaseResponse // @router /ProductList [get] func (p *ProductController) ProductList(productType string, permissionIds string) { controllers.Wrap(&p.BaseController, func() (result *controllers.WrapData, err error) { result = p.InitWrapData("分页查询产品列表失败") userInfo := p.Data["user"].(user.User) if !productMap[productType] { err = exception.New(exception.ProductTypeError) p.FailedResult("分页查询产品列表失败", result) return } permissionIdList, err := p.TransPermissionIds(permissionIds) if err != nil { logger.Error("品种列表解析错误:%v", err) p.FailedResult("分页查询产品列表失败", result) err = exception.New(exception.GetProductListFailed) return } pageRes := page.Page{ Current: p.PageInfo.Current, PageSize: p.PageInfo.PageSize, } var productIds []int pageRes.Total, pageRes.LatestId, productIds = productService.GetProductListByProductType(productType, permissionIdList, userInfo.Id) if p.PageInfo.LatestId == 0 { p.PageInfo.LatestId = pageRes.LatestId p.PageInfo.Total = pageRes.Total } else { pageRes.LatestId = p.PageInfo.LatestId pageRes.Total = p.PageInfo.Total } pageRes.TotalPage = page.TotalPages(pageRes.Total, pageRes.PageSize) list, err := productService.ProductList(productIds, userInfo.Id, p.PageInfo) productList := new(page.PageResult) productList.Data = list productList.Page = pageRes p.SuccessResult("分页查询产品列表成功", productList, result) return }) }