product.go 6.7 KB

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