Commit a8ff01a5 authored by zhengyaoqiu's avatar zhengyaoqiu

feat(colorway): 商品上传接口

parent e7f4c5d6
...@@ -17,6 +17,46 @@ type ColorSpu struct { ...@@ -17,6 +17,46 @@ type ColorSpu struct {
type ColorSpus []ColorSpu type ColorSpus []ColorSpu
func (receiver ColorSpus) GetSkus() Skus {
var skus Skus
for _, spu := range receiver {
skus = append(skus, spu.Skus...)
}
return skus
}
func (receiver ColorSpus) GetImages() Images {
var images Images
for _, spu := range receiver {
images = append(images, spu.Images...)
}
return images
}
func (receiver ColorSpus) GetCompleteStyleNumbers() []string {
var completeStyleNumbers []string
for _, spu := range receiver {
completeStyleNumbers = append(completeStyleNumbers, spu.CompleteSpuStyleNumber)
}
return completeStyleNumbers
}
func (receiver ColorSpus) GetColorCodes() []string {
var colorCodes []string
for _, spu := range receiver {
colorCodes = append(colorCodes, spu.ColorCode)
}
return colorCodes
}
func (receiver ColorSpus) GetStyles() [][]interface{} {
var styles [][]interface{}
for _, spu := range receiver {
styles = append(styles, []interface{}{spu.CompleteSpuStyleNumber, spu.ColorCode})
}
return styles
}
type Color struct { type Color struct {
Id string `gorm:"size:50; not null"` Id string `gorm:"size:50; not null"`
Name string `gorm:"size:50; not null"` Name string `gorm:"size:50; not null"`
......
...@@ -27,6 +27,62 @@ type CompleteSpu struct { ...@@ -27,6 +27,62 @@ type CompleteSpu struct {
type CompleteSpus []CompleteSpu type CompleteSpus []CompleteSpu
func (receiver CompleteSpus) GetColorSpus() ColorSpus {
var colorSpus ColorSpus
for _, spu := range receiver {
colorSpus = append(colorSpus, spu.ColorSpus...)
}
return colorSpus
}
func (receiver CompleteSpus) GetCompositions() Compositions {
var compositions Compositions
for _, spu := range receiver {
compositions = append(compositions, spu.Compositions...)
}
return compositions
}
func (receiver CompleteSpus) GetModels() Models {
var models Models
for _, spu := range receiver {
models = append(models, spu.Models...)
}
return models
}
func (receiver CompleteSpus) GetFits() Fits {
var fits Fits
for _, spu := range receiver {
fits = append(fits, spu.Fits...)
}
return fits
}
func (receiver CompleteSpus) GetStyleNumbers() []string {
var styleNumbers []string
for _, spu := range receiver {
styleNumbers = append(styleNumbers, spu.StyleNumber)
}
return styleNumbers
}
func (receiver CompleteSpus) GetGenders() Genders {
var genders Genders
for _, spu := range receiver {
genders = append(genders, spu.Genders...)
}
return genders
}
func (receiver CompleteSpus) GetCategories() Categories {
var categories Categories
for _, spu := range receiver {
categories = append(categories, spu.Categories...)
}
return categories
}
type Title struct { type Title struct {
En string `gorm:"size:100"` En string `gorm:"size:100"`
Cn string `gorm:"size:100"` Cn string `gorm:"size:100"`
......
...@@ -6,7 +6,7 @@ type Image struct { ...@@ -6,7 +6,7 @@ type Image struct {
gorm.Model gorm.Model
ColorSpuStyleNumber string `gorm:"index:style; size:50; not null"` ColorSpuStyleNumber string `gorm:"index:style; size:50; not null"`
ColorSpuColorCode string `gorm:"index:style; size:50; not null"` ColorSpuColorCode string `gorm:"index:style; size:50; not null"`
Url string `gorm:"size:256"` Url string `gorm:"uniqueIndex; size:256"`
} }
type Images []Image type Images []Image
...@@ -6,8 +6,8 @@ type Sku struct { ...@@ -6,8 +6,8 @@ type Sku struct {
gorm.Model gorm.Model
Pc3SkuId string `gorm:"uniqueIndex; not null; size:24"` Pc3SkuId string `gorm:"uniqueIndex; not null; size:24"`
Pc3ProductId string `gorm:"not null; size:24"` Pc3ProductId string `gorm:"not null; size:24"`
ColorSpuStyleNumber string `gorm:"size:50; not null"` ColorSpuStyleNumber string `gorm:"index: style; size:50; not null"`
ColorSpuColorCode string `gorm:"size:50; not null"` ColorSpuColorCode string `gorm:"index: style; size:50; not null"`
SourceId string `gorm:"size:50; not null"` SourceId string `gorm:"size:50; not null"`
SiteId string `gorm:"size:50; not null"` SiteId string `gorm:"size:50; not null"`
Size string `gorm:"size:50; not null"` Size string `gorm:"size:50; not null"`
......
...@@ -3,10 +3,12 @@ package repository ...@@ -3,10 +3,12 @@ package repository
import ( import (
"git.chillcy.com/golang/colorway/internal/pkg/database/model" "git.chillcy.com/golang/colorway/internal/pkg/database/model"
"gorm.io/gorm" "gorm.io/gorm"
"gorm.io/gorm/clause"
) )
type CompleteSpuInterface interface { type CompleteSpuInterface interface {
BaseInterface BaseInterface
UpsertCompleteSpus(completeSpus model.CompleteSpus) error
} }
type CompleteSpu struct { type CompleteSpu struct {
...@@ -18,3 +20,69 @@ func NewCompleteSpu(db *gorm.DB) *CompleteSpu { ...@@ -18,3 +20,69 @@ func NewCompleteSpu(db *gorm.DB) *CompleteSpu {
Base: NewBase[model.CompleteSpu](db), Base: NewBase[model.CompleteSpu](db),
} }
} }
func (receiver *CompleteSpu) UpsertCompleteSpus(completeSpus model.CompleteSpus) error {
return receiver.db.Transaction(func(db *gorm.DB) error {
return upsertCompleteSpus(db, completeSpus)
})
}
func upsertCompleteSpus(db *gorm.DB, completeSpus model.CompleteSpus) error {
// upsert completeSpus
result := db.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "style_number"}},
DoUpdates: clause.AssignmentColumns([]string{"style_number", "title_cn", "title_en", "description", "season", "brand_id", "care", "made_in", "hs_code", "info_select"}),
}).Create(&completeSpus)
if result.Error != nil {
return result.Error
}
for _, spu := range completeSpus {
err := upsertCompleteSpu(db, spu)
if err != nil {
return err
}
}
return nil
}
func upsertCompleteSpu(db *gorm.DB, completeSpu model.CompleteSpu) error {
// 处理关联关系
err := db.Model(&completeSpu).Association("ColorSpus").Replace(completeSpu.ColorSpus)
if err != nil {
return err
}
for _, colorSpu := range completeSpu.ColorSpus {
err = db.Model(&colorSpu).Association("Skus").Replace(colorSpu.Skus)
if err != nil {
return err
}
err = db.Model(&colorSpu).Association("Images").Replace(colorSpu.Images)
if err != nil {
return err
}
}
err = db.Model(&completeSpu).Association("Compositions").Replace(completeSpu.Compositions)
if err != nil {
return err
}
err = db.Model(&completeSpu).Association("Models").Replace(completeSpu.Models)
if err != nil {
return err
}
err = db.Model(&completeSpu).Association("Fits").Replace(completeSpu.Fits)
if err != nil {
return err
}
err = db.Model(&completeSpu).Association("Genders").Replace(completeSpu.Genders)
if err != nil {
return err
}
err = db.Model(&completeSpu).Association("Categories").Replace(completeSpu.Categories)
if err != nil {
return err
}
return nil
}
...@@ -3,8 +3,6 @@ package productlogic ...@@ -3,8 +3,6 @@ package productlogic
import ( import (
"context" "context"
"git.chillcy.com/golang/chillcy/project/pc4/pkg/rpc/client/product" "git.chillcy.com/golang/chillcy/project/pc4/pkg/rpc/client/product"
"log"
"git.chillcy.com/golang/colorway/internal/rpc/internal/svc" "git.chillcy.com/golang/colorway/internal/rpc/internal/svc"
"git.chillcy.com/golang/colorway/internal/rpc/pb/colorway" "git.chillcy.com/golang/colorway/internal/rpc/pb/colorway"
...@@ -33,6 +31,9 @@ func (l *UploadLogic) Upload(in *colorway.ProductUploadRequest) (*colorway.Produ ...@@ -33,6 +31,9 @@ func (l *UploadLogic) Upload(in *colorway.ProductUploadRequest) (*colorway.Produ
return nil, err return nil, err
} }
completeSpus := l.svcCtx.SpuConvert.Convert(productList.GetDesignerProducts()) completeSpus := l.svcCtx.SpuConvert.Convert(productList.GetDesignerProducts())
log.Println(completeSpus) err = l.svcCtx.DatabaseManager.CompleteSpuRepository.UpsertCompleteSpus(completeSpus)
if err != nil {
return nil, err
}
return &colorway.ProductUploadResponse{}, nil return &colorway.ProductUploadResponse{}, nil
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment