You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.6 KiB
118 lines
3.6 KiB
package task
|
|
|
|
import (
|
|
"git.oa00.com/go/mysql"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/shopspring/decimal"
|
|
"log"
|
|
"recook/internal/v2/lib/supply"
|
|
manage "recook/internal/v2/model/third"
|
|
"strings"
|
|
)
|
|
|
|
type Supply struct {
|
|
}
|
|
|
|
// SyncAll @Title 同步所有数据
|
|
func (s *Supply) SyncAll(c *gin.Context) {
|
|
go s.Sync()
|
|
c.String(200, "suc")
|
|
}
|
|
|
|
// Sync @Title 同步数据
|
|
func (s *Supply) Sync() {
|
|
scrollId := ""
|
|
for true {
|
|
lists, err := supply.Api.Sku.Lists(supply.ArgsSkuLists{
|
|
ScrollId: scrollId,
|
|
Status: 1,
|
|
PageSize: 100,
|
|
})
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
if len(lists.List) == 0 {
|
|
return
|
|
}
|
|
scrollId = lists.ScrollId
|
|
var skuIds []uint
|
|
for _, skuItem := range lists.List {
|
|
skuIds = append(skuIds, skuItem.Id)
|
|
}
|
|
log.Println(lists, err)
|
|
|
|
details, err := supply.Api.Sku.Details(skuIds)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
var thirdPartySupplies, supplies []manage.RecookThirdPartySupply
|
|
|
|
mysql.Db.Where("supply_sku_id in ?", skuIds).Find(&supplies)
|
|
mSupply := map[uint]bool{}
|
|
for _, partySupply := range supplies {
|
|
mSupply[partySupply.SupplySkuId] = true
|
|
}
|
|
for _, skuInfo := range details {
|
|
if mSupply[skuInfo.Id] {
|
|
continue
|
|
}
|
|
// 分类处理
|
|
category := manage.RecookThirdPartySupplyCategory{
|
|
FirstCategoryName: skuInfo.FirstCategoryName,
|
|
SecondCategoryName: skuInfo.SecondCategoryName,
|
|
ThirdCategoryName: skuInfo.ThirdCategoryName,
|
|
}
|
|
mysql.Db.Where(&category).FirstOrCreate(&category)
|
|
thirdPartySupply := manage.RecookThirdPartySupply{
|
|
SupplySkuId: skuInfo.Id,
|
|
Name: skuInfo.Name,
|
|
BrandId: skuInfo.BrandId,
|
|
BrandName: skuInfo.BrandName,
|
|
ThirdPartySupplyCategoryId: category.Id,
|
|
FirstCategoryId: skuInfo.FirstCategoryId,
|
|
FirstCategoryName: skuInfo.FirstCategoryName,
|
|
SecondCategoryId: skuInfo.SecondCategoryId,
|
|
SecondCategoryName: skuInfo.SecondCategoryName,
|
|
ThirdCategoryId: skuInfo.ThirdCategoryId,
|
|
ThirdCategoryName: skuInfo.ThirdCategoryName,
|
|
Price: decimal.NewFromFloat(skuInfo.Price),
|
|
GuidePrice: decimal.NewFromFloat(skuInfo.GuidePrice),
|
|
ImgUrl: skuInfo.ImgUrl,
|
|
Profit: decimal.NewFromFloat(skuInfo.Profit),
|
|
Size: skuInfo.Size,
|
|
Color: skuInfo.Color,
|
|
Tax: skuInfo.Tax,
|
|
Unit: skuInfo.Unit,
|
|
UpcCode: skuInfo.UpcCode,
|
|
TaxName: skuInfo.TaxName,
|
|
TaxCode: skuInfo.TaxCode,
|
|
Content: skuInfo.Content,
|
|
Status: manage.RecookThirdPartySupplyStatusNone,
|
|
SupplyStatus: skuInfo.Status,
|
|
}
|
|
for _, skuImg := range skuInfo.Imgs {
|
|
thirdPartySupply.Imgs = append(thirdPartySupply.Imgs, manage.RecookThirdPartySupplyImg{
|
|
SupplySkuId: skuInfo.Id,
|
|
Path: skuImg.Path,
|
|
})
|
|
}
|
|
for _, specification := range skuInfo.Specifications {
|
|
for _, attribute := range specification.Attributes {
|
|
thirdPartySupply.Specifications = append(thirdPartySupply.Specifications, manage.RecookThirdPartySupplySpecification{
|
|
SupplySkuId: skuInfo.Id,
|
|
Name: attribute.Name,
|
|
Value: strings.Join(attribute.Value, ";"),
|
|
GroupName: specification.Name,
|
|
})
|
|
}
|
|
}
|
|
thirdPartySupplies = append(thirdPartySupplies, thirdPartySupply)
|
|
}
|
|
if len(thirdPartySupplies) > 0 {
|
|
mysql.Db.Create(&thirdPartySupplies)
|
|
}
|
|
}
|
|
}
|