123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- package service
- import (
- "context"
- "fmt"
- "github.com/lin-jim-leon/kuaishou"
- "math/rand"
- "strconv"
- "strings"
- "time"
- "youngee_b_api/consts"
- "youngee_b_api/db"
- "youngee_b_api/model/gorm_model"
- "youngee_b_api/model/http_model"
- )
- var Product *product
- type product struct {
- }
- func (*product) Create(ctx context.Context, newProduct http_model.CreateProductRequest, enterpriseID string) (*http_model.CreateProductData, error) {
- product := gorm_model.YounggeeProduct{
- ProductName: newProduct.ProductName,
- ProductType: newProduct.ProductType,
- ShopAddress: newProduct.ShopAddress,
- ProductPrice: newProduct.ProductPrice,
- ProductDetail: newProduct.ProductDetail,
- ProductUrl: newProduct.ProductUrl,
- EnterpriseID: enterpriseID,
- BrandName: newProduct.BrandName,
- }
- productID, err := db.CreateProduct(ctx, product)
- if err != nil {
- return nil, err
- }
- if newProduct.ProductPhotos != nil {
- productPhotos := []gorm_model.YounggeeProductPhoto{}
- for _, photo := range newProduct.ProductPhotos {
- productPhoto := gorm_model.YounggeeProductPhoto{
- PhotoUrl: photo.PhotoUrl,
- PhotoUid: photo.PhotoUid,
- Symbol: photo.Symbol,
- ProductID: *productID,
- }
- productPhotos = append(productPhotos, productPhoto)
- }
- err = db.CreateProductPhoto(ctx, productPhotos)
- if err != nil {
- return nil, err
- }
- }
- res := &http_model.CreateProductData{
- ProductID: *productID,
- }
- return res, nil
- }
- func (*product) Update(ctx context.Context, newProduct http_model.CreateProductRequest, enterpriseID string) (*http_model.CreateProductData, error) {
- fmt.Println("newProduct.ProductUrl", newProduct.ProductUrl)
- product := gorm_model.YounggeeProduct{
- ProductID: newProduct.ProductId,
- ProductName: newProduct.ProductName,
- ProductType: newProduct.ProductType,
- ShopAddress: newProduct.ShopAddress,
- ProductPrice: newProduct.ProductPrice,
- ProductDetail: newProduct.ProductDetail,
- ProductUrl: newProduct.ProductUrl,
- EnterpriseID: enterpriseID,
- BrandName: newProduct.BrandName,
- }
- productID, err := db.UpdateProduct(ctx, product)
- if err != nil {
- return nil, err
- }
- // 删除该商品之前的所有图片
- err = db.DeleteProductPhotoByProductID(ctx, *productID)
- if err != nil {
- return nil, err
- }
- if newProduct.ProductPhotos != nil {
- // 新增图片
- var productPhotos []gorm_model.YounggeeProductPhoto
- for _, photo := range newProduct.ProductPhotos {
- productPhoto := gorm_model.YounggeeProductPhoto{
- PhotoUrl: photo.PhotoUrl,
- PhotoUid: photo.PhotoUid,
- Symbol: photo.Symbol,
- ProductID: *productID,
- }
- productPhotos = append(productPhotos, productPhoto)
- }
- err = db.CreateProductPhoto(ctx, productPhotos)
- if err != nil {
- return nil, err
- }
- }
- res := &http_model.CreateProductData{
- ProductID: *productID,
- }
- return res, nil
- }
- func (*product) FindAll(ctx context.Context, enterpriseID string) (*http_model.FindAllProductData, error) {
- products, err := db.GetProductByEnterpriseID(ctx, enterpriseID)
- if err != nil {
- // 数据库查询error
- return nil, err
- }
- findAllProductData := http_model.FindAllProductData{}
- for _, product := range products {
- productData := http_model.ProductInfo{
- ProductID: product.ProductID,
- BrandName: product.BrandName,
- ProductName: product.ProductName,
- ProductType: consts.GetProjectTypes(product.ProductType),
- }
- findAllProductData.ProductInfos = append(findAllProductData.ProductInfos, productData)
- }
- return &findAllProductData, nil
- }
- func (*product) FindByID(ctx context.Context, productID int64) (*http_model.FindProductData, error) {
- product, err := db.GetProductByID(ctx, productID)
- if err != nil {
- return nil, err
- }
- if product == nil {
- return nil, nil
- }
- productPhotos, err := db.GetProductPhotoByProductID(ctx, productID)
- if err != nil {
- return nil, err
- }
- findProductData := http_model.FindProductData{
- ProductID: product.ProductID,
- ProductName: product.ProductName,
- ProductType: product.ProductType,
- ShopAddress: product.ShopAddress,
- ProductPrice: product.ProductPrice,
- ProductDetail: product.ProductDetail,
- ProductUrl: product.ProductUrl,
- EnterpriseID: product.EnterpriseID,
- BrandName: product.BrandName,
- }
- for _, photo := range productPhotos {
- productPhoto := http_model.ProductPhoto{
- PhotoUrl: photo.PhotoUrl,
- PhotoUid: photo.PhotoUid,
- Symbol: photo.Symbol,
- }
- findProductData.ProductPhotos = append(findProductData.ProductPhotos, productPhoto)
- }
- return &findProductData, nil
- }
- func (*product) FindByName(ctx context.Context, brandName string, productName string) (*int64, error) {
- productID, err := db.GetProductIDByName(ctx, brandName, productName)
- if err != nil {
- return nil, err
- }
- return productID, nil
- }
- func (*product) GetAllProduct(ctx context.Context, req *http_model.GetAllProductRequest, enterpriseID string) (*http_model.ProjectBriefInfoPreview, error) {
- ProjectBriefInfo, total, err := db.GetAllProduct(ctx, req, enterpriseID)
- if err != nil {
- return nil, err
- }
- ProjectBriefInfoPreview := new(http_model.ProjectBriefInfoPreview)
- ProjectBriefInfoPreview.ProjectBriefInfo = ProjectBriefInfo
- ProjectBriefInfoPreview.Total = strconv.FormatInt(total, 10)
- return ProjectBriefInfoPreview, nil
- }
- // QueryKuaishouProduct 通过快手商品ID从SDK拉取快手商品信息
- func (*product) QueryKuaishouProduct(ctx context.Context, newKuaishouProduct http_model.FindKuaishouProductRequest) (*http_model.FindKuaishouProductData, error) {
- appKey := "ks651333097154138217"
- signSecret := "bf6393dce0a2b669ee348bebb837b0da"
- //var SignSecret string = "dBt0rVRhTpUqcrOYGGpv0A"
- // 1. 拿到快手的AccessToken
- kuaishouUserInfo, userErr := db.FindUserInfoByOpenId(ctx, "f1b0d3a11c24fcde14bf5724d0d1cdfc")
- if userErr != nil {
- return nil, userErr
- }
- // 2. 可能需要刷新Token
- //newAccessToken, Tokenerr := kuaishou.RefreshAccessToken(kuaishouUserInfo.RefreshToken, appKey, SignSecret)
- //if Tokenerr != nil {
- // return nil, Tokenerr
- //}
- //fmt.Println(newAccessToken.AccessToken)
- // 3. 查找对应的快手商品
- kuaishouProduct, err := kuaishou.Queryselectiondetail(appKey, signSecret, kuaishouUserInfo.AccessToken, newKuaishouProduct.ItemList)
- if err != nil {
- fmt.Println("快手错误信息: ", err)
- return nil, err
- }
- // 4. 组织返回数据
- findKuaishouProductData := http_model.FindKuaishouProductData{
- ProductName: kuaishouProduct.ItemList[0].ItemTitle,
- ProductPrice: float64(kuaishouProduct.ItemList[0].ItemPrice) * 0.01,
- ExclusiveCommission: float64(kuaishouProduct.ItemList[0].CommissionRate) * 0.1,
- CommissionPrice: float64(kuaishouProduct.ItemList[0].ProfitAmount) * 0.01,
- KuaishouMainPhoto: kuaishouProduct.ItemList[0].ItemImgURL,
- KuaishouCarousePhotoList: kuaishouProduct.ItemList[0].ItemGalleryURLs,
- KuaishouDetailPhotoList: kuaishouProduct.ItemList[0].ItemDescURLs,
- MerchantSoldCountThirtyDays: kuaishouProduct.ItemList[0].MerchantSoldCountThirtyDays,
- KuaishouProductId: kuaishouProduct.ItemList[0].ItemID,
- }
- // 5. 图片数据结构化
- // 5.1. 主图
- var currProductMainPhoto *http_model.ProductPhoto
- rand.Seed(time.Now().UnixNano())
- currLastIndex := strings.LastIndex(findKuaishouProductData.KuaishouMainPhoto, "/")
- var currDesiredFileName string
- if currLastIndex != -1 {
- currDesiredFileName = findKuaishouProductData.KuaishouMainPhoto[currLastIndex+1:]
- } else {
- currDesiredFileName = "FileNotFound"
- }
- currProductMainPhoto = &http_model.ProductPhoto{
- PhotoUrl: findKuaishouProductData.KuaishouMainPhoto,
- Name: currDesiredFileName,
- PhotoUid: generateRandomString(10),
- Symbol: 1,
- }
- findKuaishouProductData.ProductPhotos = append(findKuaishouProductData.ProductPhotos, currProductMainPhoto)
- // 5.2. 轮播图
- for _, url := range findKuaishouProductData.KuaishouCarousePhotoList {
- var currProductPhoto *http_model.ProductPhoto
- rand.Seed(time.Now().UnixNano())
- lastIndex := strings.LastIndex(url, "/")
- var desiredFileName string
- if lastIndex != -1 {
- desiredFileName = url[lastIndex+1:]
- } else {
- desiredFileName = "FileNotFound"
- }
- currProductPhoto = &http_model.ProductPhoto{
- PhotoUrl: url,
- Name: desiredFileName,
- PhotoUid: generateRandomString(10),
- Symbol: 2,
- }
- findKuaishouProductData.ProductPhotos = append(findKuaishouProductData.ProductPhotos, currProductPhoto)
- }
- // 5.3. 详情图
- for _, url := range findKuaishouProductData.KuaishouDetailPhotoList {
- var currProductPhoto *http_model.ProductPhoto
- rand.Seed(time.Now().UnixNano())
- lastIndex := strings.LastIndex(url, "/")
- var desiredFileName string
- if lastIndex != -1 {
- desiredFileName = url[lastIndex+1:]
- } else {
- desiredFileName = "FileNotFound"
- }
- currProductPhoto = &http_model.ProductPhoto{
- PhotoUrl: url,
- Name: desiredFileName,
- PhotoUid: generateRandomString(10),
- Symbol: 4,
- }
- findKuaishouProductData.ProductPhotos = append(findKuaishouProductData.ProductPhotos, currProductPhoto)
- }
- return &findKuaishouProductData, err
- }
- const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
- var seededRand *rand.Rand = rand.New(rand.NewSource(time.Now().UnixNano()))
- func generateRandomString(length int) string {
- b := make([]byte, length)
- for i := range b {
- b[i] = charset[seededRand.Intn(len(charset))]
- }
- return string(b)
- }
- /*
- type T struct {
- CreatedAt time.Time `json:"CreatedAt"`
- UpdatedAt time.Time `json:"UpdatedAt"`
- ProductUrl string `json:"ProductUrl"`
- SalesCount string `json:"SalesCount"`
- ProductId int `json:"product_id"`
- ProductName string `json:"ProductName"`
- ProductType int `json:"ProductType"`
- EnterpriseID string `json:"EnterpriseID"`
- ProductPrice int `json:"ProductPrice"`
- SubAccountID int `json:"SubAccountID"`
- ProductDetail string `json:"ProductDetail"`
- CommissionPrice int `json:"CommissionPrice"`
- ProductCategory string `json:"ProductCategory"`
- PublicCommission int `json:"PublicCommission"`
- KuaishouProductId string `json:"KuaishouProductId"`
- ExclusiveCommission int `json:"ExclusiveCommission"`
- }
- type T struct {
- Symbol int `json:"Symbol"`
- StoreID int `json:"StoreID"`
- PhotoUid string `json:"PhotoUid"`
- PhotoUrl string `json:"PhotoUrl"`
- CreatedAt time.Time `json:"CreatedAt"`
- ProductID int `json:"ProductID"`
- TeamBuyingID int `json:"TeamBuyingID"`
- ProductPhotoID int `json:"ProductPhotoID"`
- ProductPhotoType int `json:"ProductPhotoType"`
- }
- */
|