product.go 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  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. appKey := "ks651333097154138217"
  166. signSecret := "bf6393dce0a2b669ee348bebb837b0da"
  167. //var SignSecret string = "dBt0rVRhTpUqcrOYGGpv0A"
  168. // 1. 拿到快手的AccessToken
  169. kuaishouUserInfo, userErr := db.FindUserInfoByTalentId(ctx, "214300313")
  170. if userErr != nil {
  171. return nil, userErr
  172. }
  173. fmt.Println(kuaishouUserInfo.Gender)
  174. // 2. 可能需要刷新Token
  175. //newAccessToken, Tokenerr := kuaishou.RefreshAccessToken(kuaishouUserInfo.RefreshToken, appKey, SignSecret)
  176. //if Tokenerr != nil {
  177. // return nil, Tokenerr
  178. //}
  179. //fmt.Println(newAccessToken.AccessToken)
  180. // 3. 查找对应的快手商品
  181. kuaishouProduct, err := kuaishou.Queryselectiondetail(appKey, signSecret, "ChFvYXV0aC5hY2Nlc3NUb2tlbhJgl2DZPM2ZSVHLUoU-t4425Bznh2b2QjIJkTjxF5tY6XYfjJ9X0bG4sB9W5if90iC22glyHe7ZbOQ22ndVHCKgCgYEc7QXN0w-lHlTCnKLsKmh1u46gZ0ivhHqf0QEQcLrGhLiICkHPKJFr7JGeErh7m5jzagiIKZOZcTU8A6KIgJoqCLbADf7fRlv7aYWcwEdfjGl6T8YKAUwAQ", newKuaishouProduct.ItemList)
  182. if err != nil {
  183. fmt.Println("快手错误信息: ", err)
  184. return nil, err
  185. }
  186. // 4. 组织返回数据
  187. findKuaishouProductData := http_model.FindKuaishouProductData{
  188. ProductName: kuaishouProduct.ItemList[0].ItemTitle,
  189. ProductPrice: float64(kuaishouProduct.ItemList[0].ItemPrice) * 0.01,
  190. ExclusiveCommission: float64(kuaishouProduct.ItemList[0].CommissionRate) * 0.1,
  191. CommissionPrice: float64(kuaishouProduct.ItemList[0].ProfitAmount) * 0.01,
  192. KuaishouMainPhoto: kuaishouProduct.ItemList[0].ItemImgURL,
  193. KuaishouCarousePhotoList: kuaishouProduct.ItemList[0].ItemGalleryURLs,
  194. KuaishouDetailPhotoList: kuaishouProduct.ItemList[0].ItemDescURLs,
  195. MerchantSoldCountThirtyDays: kuaishouProduct.ItemList[0].MerchantSoldCountThirtyDays,
  196. KuaishouProductId: kuaishouProduct.ItemList[0].ItemID,
  197. }
  198. return &findKuaishouProductData, err
  199. }
  200. /*
  201. type T struct {
  202. CreatedAt time.Time `json:"CreatedAt"`
  203. UpdatedAt time.Time `json:"UpdatedAt"`
  204. ProductUrl string `json:"ProductUrl"`
  205. SalesCount string `json:"SalesCount"`
  206. ProductId int `json:"product_id"`
  207. ProductName string `json:"ProductName"`
  208. ProductType int `json:"ProductType"`
  209. EnterpriseID string `json:"EnterpriseID"`
  210. ProductPrice int `json:"ProductPrice"`
  211. SubAccountID int `json:"SubAccountID"`
  212. ProductDetail string `json:"ProductDetail"`
  213. CommissionPrice int `json:"CommissionPrice"`
  214. ProductCategory string `json:"ProductCategory"`
  215. PublicCommission int `json:"PublicCommission"`
  216. KuaishouProductId string `json:"KuaishouProductId"`
  217. ExclusiveCommission int `json:"ExclusiveCommission"`
  218. }
  219. type T struct {
  220. Symbol int `json:"Symbol"`
  221. StoreID int `json:"StoreID"`
  222. PhotoUid string `json:"PhotoUid"`
  223. PhotoUrl string `json:"PhotoUrl"`
  224. CreatedAt time.Time `json:"CreatedAt"`
  225. ProductID int `json:"ProductID"`
  226. TeamBuyingID int `json:"TeamBuyingID"`
  227. ProductPhotoID int `json:"ProductPhotoID"`
  228. ProductPhotoType int `json:"ProductPhotoType"`
  229. }
  230. */