master
howell 4 years ago
parent 85f0ecda64
commit c0765f1534

@ -185,7 +185,7 @@ const (
ConfigJCookAppKey = "5372e576b288430e41057bbb66c34d40"
ConfigJCookAppSecret = "7aa6b89426f8fba6b95969331eb62f06"
ConfigJCookAppChannelID = 1010246
ConfigJCookUrl = "http://120.55.167.78:8091/api/v1/open/"
ConfigJCookUrl = "http://jcook.com.cn/api/v1/open/"
ConfigJCookMqUser = "jcook11595979048443904"
ConfigJCookMqPwd = "aGZ0R6"
ConfigJCookMqHost = "120.55.167.78"

@ -41,7 +41,7 @@ func SetupMysql() {
} else {
c = &MysqlConfig{
Dsn: "db_recook_super:sduEb9MTSiqhweXGpxa0@tcp(112.124.200.206:3306)/db_recook?timeout=3s&readTimeout=3s&writeTimeout=3s&parseTime=true&loc=Local&charset=utf8mb4,utf8",
Dsn: "root:@Cywnulls123@tcp(127.0.0.1:3306)/db_recook?timeout=3s&readTimeout=3s&writeTimeout=3s&parseTime=true&loc=Local&charset=utf8mb4,utf8",
Idle: 10,
Active: 500,
}
@ -95,9 +95,9 @@ func SetupNewMysql() {
}
} else {
err := mysql2.InitMysql(&mysql2.DbConfig{
Username: "db_recook_super",
Password: "sduEb9MTSiqhweXGpxa0",
Host: "112.124.200.206",
Username: "root",
Password: "@Cywnulls123",
Host: "127.0.0.1",
Port: 3306,
Extend: "timeout=3s&readTimeout=3s&writeTimeout=3s&parseTime=true&loc=Local&charset=utf8mb4,utf8\n",
LogLevel: 4,

@ -68,6 +68,9 @@ func SyncAllSku() {
var page uint = 1
var size uint = 20
//if err := SyncPageData(page, size, cate); err != nil {
// fmt.Println(err)
//}
for {
if err := SyncPageData(page, size, cate); err != nil {
if err == empty {
@ -95,21 +98,21 @@ func SyncPageData(page, size uint, categories []RecookJCookCategory) error {
if len(skuEntries.Entries) == 0 {
return empty
}
gs := make([]goods.RecookGoodsInfoModel, 0)
gsk := make([]goods.RecookGoodsSkuModel, 0)
//gs := make([]goods.RecookGoodsInfoModel, 0)
//gsk := make([]goods.RecookGoodsSkuModel, 0)
skuMap := make(map[uint]jcook.SkuInfo)
skuDetailMap := make(map[uint]*jcook.SkuDetailResp)
mp := make([]goods.RecookGoodsMainPhotoModel, 0)
dp := make([]goods.RecookGoodsDetailPhotoModel, 0)
attr := make([]goods.RecookGoodsAttributeModel, 0)
invoice := make([]goods.RecookSkuInvoiceModel, 0)
attrMap := make(map[uint]goods.RecookGoodsAttributeModel)
//skuDetailMap := make(map[uint]*jcook.SkuDetailResp)
//mp := make([]goods.RecookGoodsMainPhotoModel, 0)
//dp := make([]goods.RecookGoodsDetailPhotoModel, 0)
//attr := make([]goods.RecookGoodsAttributeModel, 0)
//invoice := make([]goods.RecookSkuInvoiceModel, 0)
//attrMap := make(map[uint]goods.RecookGoodsAttributeModel)
do := downloader.New(nil, "/jcook", 10)
do.Start()
//do := downloader.New(nil, "/jcook", 10)
//do.Start()
if e := mysql2.Db.Transaction(func(tx *gorm.DB) error {
for _, v := range skuEntries.Entries {
var t goods.RecookGoodsInfoModel
var t goods.RecookGoodsSkuModel
if v.Kind == 0 || v.BrandName == "" {
continue
}
@ -126,7 +129,7 @@ func SyncPageData(page, size uint, categories []RecookJCookCategory) error {
if rCate == "" {
continue
}
tx.First(&t, "third_party_id = ? AND third_party_type = 3", v.SkuID)
tx.First(&t, "third_party_sku_id = ? AND third_party_type = 3", v.SkuID)
if t.Id > 0 {
continue
}
@ -161,44 +164,10 @@ func SyncPageData(page, size uint, categories []RecookJCookCategory) error {
return err
}
}
var vendorID uint = 1800
if v.Kind == 2 {
vendorID = 2000
}
var status uint = 0
if v.Status && v.Yn {
status = 1
}
gs = append(gs, goods.RecookGoodsInfoModel{
BrandID: bt.Id,
VendorID: vendorID,
GoodsName: v.SkuName,
Description: "",
Material: "",
Weight: decimal.Zero,
Hash: tools.GenerateGoodsHashSign(),
IsJoinTeamPerformance: 1,
CreatedAt: formatime.NewSecondNow(),
UpdatedAt: formatime.NewSecondNow(),
ThirdPartyId: v.SkuID,
ThirdPartyType: goods.RecookGoodsInfoJCook,
FirstCategoryID: first.Id,
SecondCategoryID: second.Id,
JCookPublishStatus: status,
})
if err := tx.Model(bt).Update("goods_count", gorm.Expr("goods_count + 1")).Error; err != nil {
log.Println(err.Error())
return err
}
}
if len(gs) == 0 {
return nil
}
if err := tx.Create(&gs).Error; err != nil {
log.Println(err.Error())
return err
if len(skuMap) == 0 {
return nil
}
ids := make([]uint, 0)
@ -206,155 +175,225 @@ func SyncPageData(page, size uint, categories []RecookJCookCategory) error {
ids = append(ids, k)
}
rq := jcook.SkuDetailReq{
rq := jcook.SkuBrotherReq{
SkuIDSet: ids,
}
var res []jcook.SkuDetailResp
if err := c.Exec(rq, &res); err != nil {
var bes []jcook.SkuBrotherResp
if err := c.Exec(rq, &bes); err != nil {
return err
}
for vi, v := range res {
skuDetailMap[v.SkuDetailBase.SkuID] = &res[vi]
}
for _, v := range gs {
color := skuDetailMap[v.ThirdPartyId].SkuDetailBase.Color
if strings.TrimSpace(color) == ""{
color = "标准"
for _, v := range bes {
var res []jcook.SkuDetailResp
rq2 := jcook.SkuDetailReq{
SkuIDSet: v.BrotherSkuIDs,
}
t := goods.RecookGoodsAttributeModel{
GoodsId: v.Id,
Name: "规格",
Value: color,
if err := c.Exec(rq2, &res); err != nil {
return err
}
attr = append(attr, t)
}
if err := tx.Create(&attr).Error; err != nil {
log.Println(err.Error())
return err
}
for _, v := range attr {
attrMap[v.GoodsId] = v
}
for _, v := range gs {
raw := skuMap[v.ThirdPartyId].MainPhoto
do.AddTask(raw)
color := skuDetailMap[v.ThirdPartyId].SkuDetailBase.Color
if strings.TrimSpace(color) == ""{
color = "标准"
}
gsk = append(gsk, goods.RecookGoodsSkuModel{
GoodsId: v.Id,
Name: color,
CombineId: strconv.Itoa(int(attrMap[v.Id].Id)),
PicURL: do.GetPath(raw),
Code: skuMap[v.ThirdPartyId].UpcCode,
PurchasePrice: skuMap[v.ThirdPartyId].SupplyPrice,
OriginalPrice: skuMap[v.ThirdPartyId].SupplyPrice,
ControlPrice: skuMap[v.ThirdPartyId].SupplyPrice,
ThirdPartySkuId: strconv.Itoa(int(v.ThirdPartyId)),
ThirdPartyType: goods.RecookGoodsInfoJCook,
})
if len(skuDetailMap[v.ThirdPartyId].Images) == 1 {
skuDetailMap[v.ThirdPartyId].Images = append(skuDetailMap[v.ThirdPartyId].Images, jcook.SkuImage{
Url: skuDetailMap[v.ThirdPartyId].Images[0].Url,
IsPrimer: false,
OrderSort: 1,
})
var gs1 goods.RecookGoodsInfoModel
VendorID := 1800
rCate := ""
for _, cate := range categories {
if res[0].SkuDetailBase.CategoryThirdName == cate.JCookCategory {
rCate = cate.RecookCategory
break
}
}
for ki, k := range skuDetailMap[v.ThirdPartyId].Images {
do.AddTask(k.Url)
master := 0
if k.IsPrimer {
master = 1
var second goods.RecookGoodsCategoryModel
tx.First(&second, "name = ? AND parent_id <> 0", rCate)
var first goods.RecookGoodsCategoryModel
tx.First(&first, "id = ?", second.ParentId)
name := res[0].SkuDetailBase.SkuName
name = strings.Replace(name, res[0].SkuDetailBase.Color, "", -1)
name = strings.Replace(name, res[0].SkuDetailBase.Size, "", -1)
name = strings.Replace(name, res[0].SkuDetailBase.Model, "", -1)
weight := res[0].SkuDetailBase.Weight
var bt goods.RecookGoodsBrandModel
tx.First(&bt, "name = ?", res[0].SkuDetailBase.BrandName)
gsk1 := make(map[uint]goods.RecookGoodsSkuModel)
skuAttrMap := make(map[uint][]string)
for _, j := range res {
if j.SkuDetailBase.Kind == 2 {
VendorID = 2000
}
mp = append(mp, goods.RecookGoodsMainPhotoModel{
GoodsId: v.Id,
Url: do.GetPath(k.Url),
IsMaster: master,
Name: "api",
OrderNo: ki,
Width: 0,
Height: 0,
})
var t1 goods.RecookGoodsSkuModel
tx.First(&t1, "third_party_sku_id = ? AND third_party_type = 3", j.SkuDetailBase.SkuID)
if t1.Id > 0 {
mysql2.Db.First(&gs1, "id = ?", t1.GoodsId)
} else {
name1 := strings.Trim(strings.Join([]string{j.SkuDetailBase.Color, j.SkuDetailBase.Size}, "+"), "+")
if j.SkuDetailBase.Color != "" {
skuAttrMap[j.SkuDetailBase.SkuID] = append(skuAttrMap[j.SkuDetailBase.SkuID], j.SkuDetailBase.Color)
}
if j.SkuDetailBase.Size != "" {
skuAttrMap[j.SkuDetailBase.SkuID] = append(skuAttrMap[j.SkuDetailBase.SkuID], j.SkuDetailBase.Size)
}
if len(skuAttrMap[j.SkuDetailBase.SkuID]) == 0 {
skuAttrMap[j.SkuDetailBase.SkuID] = append(skuAttrMap[j.SkuDetailBase.SkuID], "")
}
if len(name) == 0 {
name1 = "标准"
}
gsk1[j.SkuDetailBase.SkuID] = goods.RecookGoodsSkuModel{
GoodsId: 0,
Name: name1,
CombineId: "",
PicURL: j.SkuDetailBase.MainPhoto,
Code: j.SkuDetailBase.UpcCode,
PurchasePrice: j.SkuDetailBase.SupplyPrice,
OriginalPrice: j.SkuDetailBase.GuidePrice,
DiscountPrice: decimal.Zero,
CommissionRate: decimal.Zero,
Commission: decimal.Zero,
ControlPrice: j.SkuDetailBase.SupplyPrice,
SalesVolume: 0,
Inventory: 0,
SalesVolumeInc: 0,
Coupon: decimal.Decimal{},
GoodsNum: "",
BmSkuId: "",
BmShopId: "",
ThirdPartySkuId: strconv.Itoa(int(j.SkuDetailBase.SkuID)),
ThirdPartyType: 3,
TMallPrice: "",
TMallUrl: "",
JdPrice: "",
JdUrl: "",
GysSkuID: 0,
}
}
}
if len(gsk1) == 0 {
continue
}
if gs1.Id == 0 {
gs1 = goods.RecookGoodsInfoModel{
BrandID: bt.Id,
VendorID: uint(VendorID),
GoodsName: name,
Description: "",
Material: "",
FirstCategoryID: first.Id,
SecondCategoryID: second.Depth,
PublishStatus: 0,
FreightID: 0,
Weight: decimal.NewFromFloat(weight),
Hash: tools.GenerateGoodsHashSign(),
IsJoinTeamPerformance: 0,
CreatedAt: formatime.NewSecondNow(),
UpdatedAt: formatime.NewSecondNow(),
JCookPublishStatus: 1,
}
reg := regexp.MustCompile("background-image:url\\((?s:(.*?))\\)|src=\"(?s:(.*?))\"")
result := reg.FindAllStringSubmatch(skuDetailMap[v.ThirdPartyId].BigInfo.PcWDis, -1)
for ki, k := range result {
kt := k[1]
if len(strings.TrimSpace(kt)) == 0 {
if len(k) > 2 {
kt = k[2]
if err := tx.Create(&gs1).Error; err != nil {
return err
}
image := make([]goods.RecookGoodsMainPhotoModel, 00)
dp := make([]goods.RecookGoodsDetailPhotoModel, 00)
for index, img := range res[0].Images {
master := 0
image = append(image, goods.RecookGoodsMainPhotoModel{
GoodsId: gs1.Id,
Url: img.Url,
IsMaster: master,
Name: "api",
OrderNo: index,
Width: 0,
Height: 0,
})
if img.IsPrimer {
master = 1
image = append(image, goods.RecookGoodsMainPhotoModel{
GoodsId: gs1.Id,
Url: img.Url,
IsMaster: 0,
Name: "api",
OrderNo: index,
Width: 0,
Height: 0,
})
}
}
if len(strings.TrimSpace(kt)) == 0 {
continue
if err := tx.Create(&image).Error; err != nil {
return err
}
kt = strings.Trim(kt, "\\")
if !strings.HasPrefix(kt, "http") && !strings.HasPrefix(kt, "https") {
kt = "http:" + kt
reg := regexp.MustCompile("background-image:url\\((?s:(.*?))\\)|src=\"(?s:(.*?))\"")
result := reg.FindAllStringSubmatch(res[0].BigInfo.PcWDis, -1)
for ki, k := range result {
kt := k[1]
if len(strings.TrimSpace(kt)) == 0 {
if len(k) > 2 {
kt = k[2]
}
}
if len(strings.TrimSpace(kt)) == 0 {
continue
}
kt = strings.Trim(kt, "\\")
if !strings.HasPrefix(kt, "http") && !strings.HasPrefix(kt, "https") {
kt = "http:" + kt
}
dp = append(dp, goods.RecookGoodsDetailPhotoModel{
GoodsID: gs1.Id,
Url: kt,
Name: "api",
OrderNo: ki,
Width: 0,
Height: 0,
})
}
if err := tx.Create(&dp).Error; err != nil {
return err
}
do.AddTask(kt)
dp = append(dp, goods.RecookGoodsDetailPhotoModel{
GoodsID: v.Id,
Url: do.GetPath(kt),
Name: "api",
OrderNo: ki,
Width: 0,
Height: 0,
})
}
}
if err := tx.Create(&gsk).Error; err != nil {
log.Println(err.Error())
return err
}
for _, v := range gsk {
c1, _ := strconv.ParseUint(v.ThirdPartySkuId, 10, 64)
source := skuDetailMap[uint(c1)]
invoice = append(invoice, goods.RecookSkuInvoiceModel{
SkuId: v.Id,
GoodsId: v.GoodsId,
GoodsName: "jcook商品",
TaxSn: "0000001",
TaxName: "jcook商品",
Unit: source.SkuDetailBase.Unit,
TaxRate: decimal.NewFromInt(9),
PlatformRate: decimal.NewFromInt(9),
DeductionRate: decimal.NewFromInt(9),
CreatedAt: formatime.NewSecondNow(),
UpdatedAt: formatime.NewSecondNow(),
})
}
if len(mp) > 0 {
if err := tx.Create(&mp).Error; err != nil {
log.Println(err.Error())
return err
attrMap := make(map[uint][]goods.RecookGoodsAttributeModel)
for k, attr := range skuAttrMap {
data1 := make([]goods.RecookGoodsAttributeModel, 0)
for index, a := range attr {
aName := "规格"
if index == 1 {
aName = "尺寸"
}
aValue := a
if aValue == "" {
aValue = "标准"
}
data1 = append(data1, goods.RecookGoodsAttributeModel{
GoodsId: gs1.Id,
Name: aName,
Value: aValue,
})
attrMap[k] = data1
}
if err := tx.Create(&data1).Error; err != nil {
return err
}
}
}
if len(dp) > 0 {
if err := tx.Create(&dp).Error; err != nil {
log.Println(err.Error())
return err
data := make([]goods.RecookGoodsSkuModel, 0)
for _, value := range gsk1 {
idStr := make([]string, 0)
id, _ := strconv.Atoi(value.ThirdPartySkuId)
for _, a1 := range attrMap[uint(id)] {
idStr = append(idStr, strconv.Itoa(int(a1.Id)))
}
value.GoodsId = gs1.Id
value.CombineId = strings.Join(idStr, ",")
data = append(data, value)
}
}
if len(invoice) > 0 {
if err := tx.Create(&invoice).Error; err != nil {
log.Println(err.Error())
if err := tx.Create(&data).Error; err != nil {
return err
}
}
}
return nil
}); e != nil {
return e
}
do.Wait()
return nil
}

@ -208,6 +208,7 @@ type SkuDetailBase struct {
ShelfLife string `json:"shelf_life"`
Delivery string `json:"delivery"`
PlaceOfProduction string `json:"place_of_production"`
UpcCode string `json:"upc_code"`
Length float64 `json:"length"`
Width float64 `json:"width"`
Height float64 `json:"height"`
@ -246,6 +247,18 @@ func (o SkuDetailReq) GetApiName() string {
return "sku/detail"
}
type SkuBrotherReq struct {
SkuIDSet []uint `json:"sku_id_set"`
}
type SkuBrotherResp struct {
BrotherSkuIDs []uint `json:"brother_sku_ids"`
}
func (o SkuBrotherReq) GetApiName() string {
return "sku/brother"
}
type SkuPriceReq struct {
SkuIDSet []uint `json:"sku_id_set"`
}

Loading…
Cancel
Save