Merge remote-tracking branch 'origin/jdshop' into qidongsheng

This commit is contained in:
qidongsheng
2020-07-02 13:36:44 +08:00
5 changed files with 129 additions and 125 deletions

View File

@@ -3983,11 +3983,7 @@ func BackUpStoreSkuBind(ctx *jxcontext.Context, isAsync, isContinueWhenError boo
storeSkuBindHis := &model.StoreSkuBindHistory{ storeSkuBindHis := &model.StoreSkuBindHistory{
SnapshotAt: snapshotAt.AddDate(0, 0, -2), SnapshotAt: snapshotAt.AddDate(0, 0, -2),
} }
storeSkuBindHis2 := &model.StoreSkuBindHistory{
SnapshotAt: snapshotAt,
}
dao.DeleteEntity(db, storeSkuBindHis, "SnapshotAt") dao.DeleteEntity(db, storeSkuBindHis, "SnapshotAt")
dao.DeleteEntity(db, storeSkuBindHis2, "SnapshotAt")
storeList, err := dao.GetStoreList(db, nil, nil, nil, nil, "") storeList, err := dao.GetStoreList(db, nil, nil, nil, nil, "")
task := tasksch.NewParallelTask("BackUpStoreSkuBind", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, task := tasksch.NewParallelTask("BackUpStoreSkuBind", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {

View File

@@ -955,14 +955,14 @@ func (v *VendorSync) SyncStoreSkusFromYb(ctx *jxcontext.Context, storeIDs []int,
func syncStoreSkusFromYb(ctx *jxcontext.Context, storeID, vendorID int, vendorStoreID string, isAsync, isContinueWhenError bool) (hint string, err error) { func syncStoreSkusFromYb(ctx *jxcontext.Context, storeID, vendorID int, vendorStoreID string, isAsync, isContinueWhenError bool) (hint string, err error) {
var ( var (
db = dao.GetDB() db = dao.GetDB()
localSkuMap = make(map[string]*dao.StoreSkuSyncInfo) localSkuMap = make(map[string]*dao.StoreSkuSyncInfo)
vendorSkuMap = make(map[string]*partner.SkuNameInfo) vendorSkuMap = make(map[string]*partner.SkuNameInfo)
skuBindInfosDel []*StoreSkuBindInfo // skuBindInfosDel []*StoreSkuBindInfo
skuBindInfosUpt []*StoreSkuBindInfo // skuBindInfosUpt []*StoreSkuBindInfo
addList []*partner.SkuNameInfo addList []*partner.SkuNameInfo
updateList []*partner.SkuNameInfo updateList []*partner.SkuNameInfo
deleteList []*dao.StoreSkuSyncInfo deleteList []*dao.StoreSkuSyncInfo
) )
handler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler) handler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler)
@@ -992,101 +992,102 @@ func syncStoreSkusFromYb(ctx *jxcontext.Context, storeID, vendorID int, vendorSt
deleteList = append(deleteList, v) deleteList = append(deleteList, v)
} }
} }
// fmt.Println("remoteSkuList", len(remoteSkuList)) fmt.Println("remoteSkuList", len(remoteSkuList))
// fmt.Println("addList", len(addList)) fmt.Println("addList", len(addList))
// fmt.Println("updateList", len(updateList)) fmt.Println("updateList", utils.Format4Output(updateList, false))
taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { fmt.Println("deleteList", utils.Format4Output(deleteList, false))
store, _ := dao.GetStoreDetail(db, storeID, vendorID) // taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
switch step { // store, _ := dao.GetStoreDetail(db, storeID, vendorID)
case 0: // switch step {
if len(addList) > 0 { // case 0:
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { // if len(addList) > 0 {
var ( // taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
v = batchItemList[0].(*partner.SkuNameInfo) // var (
upc = v.YbBarCode // v = batchItemList[0].(*partner.SkuNameInfo)
) // upc = v.YbBarCode
err = AddSkuNameByUpc(ctx, upc, store, v) // )
if err != nil { // err = AddSkuNameByUpc(ctx, upc, store, v)
task.AddFailedList(putils.GetErrMsg2FailedSingleList(nil, err, storeID, model.VendorChineseNames[vendorID], "根据upc创建京西商品")) // if err != nil {
} // task.AddFailedList(putils.GetErrMsg2FailedSingleList(nil, err, storeID, model.VendorChineseNames[vendorID], "根据upc创建京西商品"))
return retVal, err // }
} // return retVal, err
taskParallel := tasksch.NewParallelTask("创建商品", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, taskFunc, addList) // }
tasksch.HandleTask(taskParallel, task, true).Run() // taskParallel := tasksch.NewParallelTask("创建商品", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, taskFunc, addList)
_, err = taskParallel.GetResult(0) // tasksch.HandleTask(taskParallel, task, true).Run()
} // _, err = taskParallel.GetResult(0)
case 1: // }
if len(deleteList) > 0 { // case 1:
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { // if len(deleteList) > 0 {
var ( // taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
v = batchItemList[0].(*dao.StoreSkuSyncInfo) // var (
) // v = batchItemList[0].(*dao.StoreSkuSyncInfo)
skuBindInfo := &StoreSkuBindInfo{ // )
NameID: v.NameID, // skuBindInfo := &StoreSkuBindInfo{
IsFocus: -1, // NameID: v.NameID,
} // IsFocus: -1,
retVal = []*StoreSkuBindInfo{skuBindInfo} // }
return retVal, err // retVal = []*StoreSkuBindInfo{skuBindInfo}
} // return retVal, err
taskParallel := tasksch.NewParallelTask("删除商品", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, taskFunc, deleteList) // }
tasksch.HandleTask(taskParallel, task, true).Run() // taskParallel := tasksch.NewParallelTask("删除商品", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, taskFunc, deleteList)
resultDel, _ := taskParallel.GetResult(0) // tasksch.HandleTask(taskParallel, task, true).Run()
for _, v := range resultDel { // resultDel, _ := taskParallel.GetResult(0)
skuBindInfosDel = append(skuBindInfosDel, v.(*StoreSkuBindInfo)) // for _, v := range resultDel {
} // skuBindInfosDel = append(skuBindInfosDel, v.(*StoreSkuBindInfo))
_, err = updateStoresSkusWithoutSync(ctx, db, []int{storeID}, skuBindInfosDel, false, false) // }
} // _, err = updateStoresSkusWithoutSync(ctx, db, []int{storeID}, skuBindInfosDel, false, false)
case 2: // }
if len(updateList) > 0 { // case 2:
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { // if len(updateList) > 0 {
var ( // taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
v = batchItemList[0].(*partner.SkuNameInfo) // var (
skuBindInfo = &StoreSkuBindInfo{} // v = batchItemList[0].(*partner.SkuNameInfo)
storeSkus []*dao.StoreSkuExt // skuBindInfo = &StoreSkuBindInfo{}
pricePercentagePack []*model.PricePercentageItem // storeSkus []*dao.StoreSkuExt
) // pricePercentagePack []*model.PricePercentageItem
sql := ` // )
SELECT a.*, c.id name_id // sql := `
FROM store_sku_bind a // SELECT a.*, c.id name_id
JOIN sku b ON a.sku_id = b.id // FROM store_sku_bind a
JOIN sku_name c ON c.id = b.name_id // JOIN sku b ON a.sku_id = b.id
WHERE a.store_id = ? AND a.yb_id = ? AND a.deleted_at = ? // JOIN sku_name c ON c.id = b.name_id
` // WHERE a.store_id = ? AND a.yb_id = ? AND a.deleted_at = ?
sqlParams := []interface{}{storeID, v.SkuList[0].VendorSkuID, utils.DefaultTimeValue} // `
err = dao.GetRows(db, &storeSkus, sql, sqlParams) // sqlParams := []interface{}{storeID, v.SkuList[0].VendorSkuID, utils.DefaultTimeValue}
if len(storeSkus) > 0 { // err = dao.GetRows(db, &storeSkus, sql, sqlParams)
if storeSkus[0].YbPrice != int(v.SkuList[0].VendorPrice) { // if len(storeSkus) > 0 {
err = jxutils.Strings2Objs(store.PricePercentagePackStr, &pricePercentagePack) // if storeSkus[0].YbPrice != int(v.SkuList[0].VendorPrice) {
skuBindInfo.UnitPrice = jxutils.CaculateJxPriceByPricePack(pricePercentagePack, 0, int(v.SkuList[0].VendorPrice)) // err = jxutils.Strings2Objs(store.PricePercentagePackStr, &pricePercentagePack)
} // skuBindInfo.UnitPrice = jxutils.CaculateJxPriceByPricePack(pricePercentagePack, 0, int(v.SkuList[0].VendorPrice))
} else { // }
return retVal, fmt.Errorf("未查询到门店商品yb_id [%v]", v.SkuList[0].VendorSkuID) // } else {
} // return retVal, fmt.Errorf("未查询到门店商品yb_id [%v]", v.SkuList[0].VendorSkuID)
if v.SkuList[0].Stock < 1 { // }
skuBindInfo.IsSale = model.StoreSkuBindStatusDontSale // if v.SkuList[0].Stock < 1 {
} else { // skuBindInfo.IsSale = model.StoreSkuBindStatusDontSale
skuBindInfo.IsSale = model.StoreSkuBindStatusNormal // } else {
} // skuBindInfo.IsSale = model.StoreSkuBindStatusNormal
skuBindInfo.NameID = storeSkus[0].NameID // }
retVal = []*StoreSkuBindInfo{skuBindInfo} // skuBindInfo.NameID = storeSkus[0].NameID
return retVal, err // retVal = []*StoreSkuBindInfo{skuBindInfo}
} // return retVal, err
taskParallel := tasksch.NewParallelTask("更新商品价格和库存", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, taskFunc, updateList) // }
tasksch.HandleTask(taskParallel, task, true).Run() // taskParallel := tasksch.NewParallelTask("更新商品价格和库存", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, taskFunc, updateList)
resultUpt, _ := taskParallel.GetResult(0) // tasksch.HandleTask(taskParallel, task, true).Run()
for _, v := range resultUpt { // resultUpt, _ := taskParallel.GetResult(0)
skuBindInfosUpt = append(skuBindInfosUpt, v.(*StoreSkuBindInfo)) // for _, v := range resultUpt {
} // skuBindInfosUpt = append(skuBindInfosUpt, v.(*StoreSkuBindInfo))
_, err = updateStoresSkusWithoutSync(ctx, db, []int{storeID}, skuBindInfosUpt, false, false) // }
} // _, err = updateStoresSkusWithoutSync(ctx, db, []int{storeID}, skuBindInfosUpt, false, false)
case 3: // }
_, err = CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{0, 1, 3}, nil, false, nil, nil, 0, true, true) // case 3:
} // _, err = CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{0, 1, 3}, nil, false, nil, nil, 0, true, true)
return result, err // }
} // return result, err
taskSeq := tasksch.NewSeqTask2("同步银豹商品到京西", ctx, true, taskSeqFunc, 3) // }
tasksch.HandleTask(taskSeq, nil, true).Run() // taskSeq := tasksch.NewSeqTask2("同步银豹商品到京西", ctx, true, taskSeqFunc, 3)
hint = taskSeq.GetID() // tasksch.HandleTask(taskSeq, nil, true).Run()
// hint = taskSeq.GetID()
return hint, err return hint, err
} }
@@ -1118,9 +1119,13 @@ func syncJdsStoreStock(ctx *jxcontext.Context, db *dao.DaoDB, storeSkus []*model
stock = 9999 stock = 9999
} }
storeSku2, _ := dao.GetStoresSkusInfo(db, []int{storeMap.StoreID}, []int{storeSku.SkuID}) storeSku2, _ := dao.GetStoresSkusInfo(db, []int{storeMap.StoreID}, []int{storeSku.SkuID})
if storeSku.JdsID != 0 && len(storeSku2) > 0 { if storeSku.JdsID != 0 {
if storeSku.Status != storeSku2[0].Status && storeMap.VendorStoreID != "" { if len(storeSku2) > 0 {
err = api.JdShopAPI.UpdateSkuSiteStock(storeSku.JdsID, stock, utils.Str2Int(storeMap.VendorStoreID)) if storeSku.Status != storeSku2[0].Status && storeMap.VendorStoreID != "" {
err = api.JdShopAPI.UpdateSkuSiteStock(storeSku.JdsID, stock, utils.Str2Int(storeMap.VendorStoreID))
}
} else {
err = api.JdShopAPI.UpdateSkuSiteStock(storeSku.JdsID, 0, utils.Str2Int(storeMap.VendorStoreID))
} }
} }
} }

View File

@@ -152,11 +152,12 @@ var (
} }
ZXCityCodeMap = map[int]string{ ZXCityCodeMap = map[int]string{
310100: "上海市", 310100: "上海市",
110100: "北京市", 110100: "北京市",
120100: "天津市", 120100: "天津市",
440300: "深圳市", 440300: "深圳市",
500100: "重庆市", 500100: "重庆市",
9441900: "东莞",
} }
PrinterVendorInfo = map[int][]string{ PrinterVendorInfo = map[int][]string{

View File

@@ -105,7 +105,7 @@ func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName stri
if createEntityStoreParam.AddCode == 0 { if createEntityStoreParam.AddCode == 0 {
createEntityStoreParam.AddCode = store.JdCode createEntityStoreParam.AddCode = store.JdCode
} }
//证明这个店可能隶属直辖市 //证明这个店可能隶属直辖市或者东莞
if model.ZXCityCodeMap[store.CityCode] != "" { if model.ZXCityCodeMap[store.CityCode] != "" {
result, _ := api.AutonaviAPI.GetCoordinateAreaInfo(jxutils.IntCoordinate2Standard(store.Lng), jxutils.IntCoordinate2Standard(store.Lat)) result, _ := api.AutonaviAPI.GetCoordinateAreaInfo(jxutils.IntCoordinate2Standard(store.Lng), jxutils.IntCoordinate2Standard(store.Lat))
if result["regeocode"] != nil { if result["regeocode"] != nil {

View File

@@ -38,15 +38,17 @@ func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, v
result, err = api.YinBaoAPI.AddProductInfo(buildProductInfoParam(storeSku)) result, err = api.YinBaoAPI.AddProductInfo(buildProductInfoParam(storeSku))
} }
if err != nil { if err != nil {
// if strings.Contains(err.Error(), addErr1) { if strings.Contains(err.Error(), addErr1) {
// queryProductByBarcodeResult, err := api.YinBaoAPI.QueryProductByBarcodes([]string{storeSku.YbBarCode}) queryProductByBarcodeResult, err := api.YinBaoAPI.QueryProductByBarcodes([]string{storeSku.YbBarCode})
// if err != nil && len(queryProductByBarcodeResult) > 0 { if err != nil && len(queryProductByBarcodeResult) > 0 {
// if queryProductByBarcodeResult[0].Enable == model.SkuStatusDeleted { if queryProductByBarcodeResult[0].Enable == model.SkuStatusDeleted {
// api.YinBaoAPI.SaveProduct(userId, keyword, saveProductParam) api.YinBaoAPI.BatchUpdateProductEnable(vendorStoreID, utils.Int64ToStr(queryProductByBarcodeResult[0].UID), model.SkuStatusNormal)
// } storeSku.VendorSkuID = utils.Int64ToStr(queryProductByBarcodeResult[0].UID)
// } }
// } }
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDYB], "创建商品") } else {
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDYB], "创建商品")
}
} else { } else {
storeSku.VendorSkuID = utils.Int64ToStr(result.UID) storeSku.VendorSkuID = utils.Int64ToStr(result.UID)
err = uploadYbImage(vendorStoreID, storeSku.YbBarCode, storeSku.Img) err = uploadYbImage(vendorStoreID, storeSku.YbBarCode, storeSku.Img)