product.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. package service
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/lin-jim-leon/kuaishou"
  6. "strconv"
  7. "youngee_b_api/consts"
  8. "youngee_b_api/db"
  9. "youngee_b_api/model/gorm_model"
  10. "youngee_b_api/model/http_model"
  11. )
  12. var Product *product
  13. type product struct {
  14. }
  15. func (*product) Create(ctx context.Context, newProduct http_model.CreateProductRequest, enterpriseID string) (*http_model.CreateProductData, error) {
  16. product := gorm_model.YounggeeProduct{
  17. ProductName: newProduct.ProductName,
  18. ProductType: newProduct.ProductType,
  19. ShopAddress: newProduct.ShopAddress,
  20. ProductPrice: newProduct.ProductPrice,
  21. ProductDetail: newProduct.ProductDetail,
  22. ProductUrl: newProduct.ProductUrl,
  23. EnterpriseID: enterpriseID,
  24. BrandName: newProduct.BrandName,
  25. }
  26. productID, err := db.CreateProduct(ctx, product)
  27. if err != nil {
  28. return nil, err
  29. }
  30. if newProduct.ProductPhotos != nil {
  31. productPhotos := []gorm_model.YounggeeProductPhoto{}
  32. for _, photo := range newProduct.ProductPhotos {
  33. productPhoto := gorm_model.YounggeeProductPhoto{
  34. PhotoUrl: photo.PhotoUrl,
  35. PhotoUid: photo.PhotoUid,
  36. Symbol: photo.Symbol,
  37. ProductID: *productID,
  38. }
  39. productPhotos = append(productPhotos, productPhoto)
  40. }
  41. err = db.CreateProductPhoto(ctx, productPhotos)
  42. if err != nil {
  43. return nil, err
  44. }
  45. }
  46. res := &http_model.CreateProductData{
  47. ProductID: *productID,
  48. }
  49. return res, nil
  50. }
  51. func (*product) Update(ctx context.Context, newProduct http_model.CreateProductRequest, enterpriseID string) (*http_model.CreateProductData, error) {
  52. fmt.Println("newProduct.ProductUrl", newProduct.ProductUrl)
  53. product := gorm_model.YounggeeProduct{
  54. ProductID: newProduct.ProductId,
  55. ProductName: newProduct.ProductName,
  56. ProductType: newProduct.ProductType,
  57. ShopAddress: newProduct.ShopAddress,
  58. ProductPrice: newProduct.ProductPrice,
  59. ProductDetail: newProduct.ProductDetail,
  60. ProductUrl: newProduct.ProductUrl,
  61. EnterpriseID: enterpriseID,
  62. BrandName: newProduct.BrandName,
  63. }
  64. productID, err := db.UpdateProduct(ctx, product)
  65. if err != nil {
  66. return nil, err
  67. }
  68. // 删除该商品之前的所有图片
  69. err = db.DeleteProductPhotoByProductID(ctx, *productID)
  70. if err != nil {
  71. return nil, err
  72. }
  73. if newProduct.ProductPhotos != nil {
  74. // 新增图片
  75. var productPhotos []gorm_model.YounggeeProductPhoto
  76. for _, photo := range newProduct.ProductPhotos {
  77. productPhoto := gorm_model.YounggeeProductPhoto{
  78. PhotoUrl: photo.PhotoUrl,
  79. PhotoUid: photo.PhotoUid,
  80. Symbol: photo.Symbol,
  81. ProductID: *productID,
  82. }
  83. productPhotos = append(productPhotos, productPhoto)
  84. }
  85. err = db.CreateProductPhoto(ctx, productPhotos)
  86. if err != nil {
  87. return nil, err
  88. }
  89. }
  90. res := &http_model.CreateProductData{
  91. ProductID: *productID,
  92. }
  93. return res, nil
  94. }
  95. func (*product) FindAll(ctx context.Context, enterpriseID string) (*http_model.FindAllProductData, error) {
  96. products, err := db.GetProductByEnterpriseID(ctx, enterpriseID)
  97. if err != nil {
  98. // 数据库查询error
  99. return nil, err
  100. }
  101. findAllProductData := http_model.FindAllProductData{}
  102. for _, product := range products {
  103. productData := http_model.ProductInfo{
  104. ProductID: product.ProductID,
  105. BrandName: product.BrandName,
  106. ProductName: product.ProductName,
  107. ProductType: consts.GetProjectTypes(product.ProductType),
  108. }
  109. findAllProductData.ProductInfos = append(findAllProductData.ProductInfos, productData)
  110. }
  111. return &findAllProductData, nil
  112. }
  113. func (*product) FindByID(ctx context.Context, productID int64) (*http_model.FindProductData, error) {
  114. product, err := db.GetProductByID(ctx, productID)
  115. if err != nil {
  116. return nil, err
  117. }
  118. if product == nil {
  119. return nil, nil
  120. }
  121. productPhotos, err := db.GetProductPhotoByProductID(ctx, productID)
  122. if err != nil {
  123. return nil, err
  124. }
  125. findProductData := http_model.FindProductData{
  126. ProductID: product.ProductID,
  127. ProductName: product.ProductName,
  128. ProductType: product.ProductType,
  129. ShopAddress: product.ShopAddress,
  130. ProductPrice: product.ProductPrice,
  131. ProductDetail: product.ProductDetail,
  132. ProductUrl: product.ProductUrl,
  133. EnterpriseID: product.EnterpriseID,
  134. BrandName: product.BrandName,
  135. }
  136. for _, photo := range productPhotos {
  137. productPhoto := http_model.ProductPhoto{
  138. PhotoUrl: photo.PhotoUrl,
  139. PhotoUid: photo.PhotoUid,
  140. Symbol: photo.Symbol,
  141. }
  142. findProductData.ProductPhotos = append(findProductData.ProductPhotos, productPhoto)
  143. }
  144. return &findProductData, nil
  145. }
  146. func (*product) FindByName(ctx context.Context, brandName string, productName string) (*int64, error) {
  147. productID, err := db.GetProductIDByName(ctx, brandName, productName)
  148. if err != nil {
  149. return nil, err
  150. }
  151. return productID, nil
  152. }
  153. func (*product) GetAllProduct(ctx context.Context, req *http_model.GetAllProductRequest, enterpriseID string) (*http_model.ProjectBriefInfoPreview, error) {
  154. ProjectBriefInfo, total, err := db.GetAllProduct(ctx, req, enterpriseID)
  155. if err != nil {
  156. return nil, err
  157. }
  158. ProjectBriefInfoPreview := new(http_model.ProjectBriefInfoPreview)
  159. ProjectBriefInfoPreview.ProjectBriefInfo = ProjectBriefInfo
  160. ProjectBriefInfoPreview.Total = strconv.FormatInt(total, 10)
  161. return ProjectBriefInfoPreview, nil
  162. }
  163. // QueryKuaishouProduct 通过快手商品ID从SDK拉取快手商品信息
  164. func (*product) QueryKuaishouProduct(ctx context.Context, newKuaishouProduct http_model.FindKuaishouProductRequest) (*http_model.FindKuaishouProductData, error) {
  165. AccessToken := "ChFvYXV0aC5hY2Nlc3NUb2tlbhJgpNyhn_OyOXO-hSkJDAmlssr8lCAzT0CePeh-9-NyQEK3quECYOVm40RG0ppGMSnV0xq-_hlLrO7BoBOj-ai75oD4hzJ1QDNWChUhEZaXWwv9BtHAPp4Hioa08mw3ZiakGhI3fO2jrXtNfq7z9Xoxtovjx-YiINfD-RUDsg0A2tscTHxuBVd4yaWdtWWbN9QNeaTOLf31KAUwAQ"
  166. appKey := "ks651333097154138217"
  167. signSecret := "bf6393dce0a2b669ee348bebb837b0da"
  168. kuaishouProduct, err := kuaishou.Queryselectiondetail(appKey, signSecret, AccessToken, newKuaishouProduct.ItemList)
  169. if err != nil {
  170. return nil, err
  171. }
  172. fmt.Println("kuaishouProduct: ", kuaishouProduct)
  173. findKuaishouProductData := http_model.FindKuaishouProductData{
  174. ProductName: kuaishouProduct.ItemList[0].ItemTitle,
  175. ProductPrice: float64(kuaishouProduct.ItemList[0].ItemPrice) * 0.01,
  176. ExclusiveCommission: float64(kuaishouProduct.ItemList[0].CommissionRate) * 0.1,
  177. CommissionPrice: float64(kuaishouProduct.ItemList[0].ProfitAmount) * 0.01,
  178. KuaishouMainPhoto: kuaishouProduct.ItemList[0].ItemImgURL,
  179. KuaishouCarousePhotoList: kuaishouProduct.ItemList[0].ItemGalleryURLs,
  180. KuaishouDetailPhotoList: kuaishouProduct.ItemList[0].ItemDescURLs,
  181. MerchantSoldCountThirtyDays: kuaishouProduct.ItemList[0].MerchantSoldCountThirtyDays,
  182. KuaishouProductId: kuaishouProduct.ItemList[0].ItemID,
  183. }
  184. // print("kuaoshou_product: ", findKuaishouProductData.ProductName)
  185. return &findKuaishouProductData, err
  186. }