- RefreshStoresSkuByVendor
This commit is contained in:
@@ -8,6 +8,10 @@ import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/partner"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxcallback/auth/weixin"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
@@ -1349,3 +1353,109 @@ func checkStoreExisting(db *dao.DaoDB, storeID int) (err error) {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func RefreshStoresSkuByVendor(ctx *jxcontext.Context, storeIDs []int, vendorID int, isAsync bool) (hint string, err error) {
|
||||
if vendorID != model.VendorIDJD {
|
||||
return "", fmt.Errorf("此功能当前只支持京东到家平台")
|
||||
}
|
||||
db := dao.GetDB()
|
||||
storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, model.StoreStatusAll)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if len(storeMapList) != len(storeIDs) {
|
||||
return "", fmt.Errorf("门店绑定信息不匹配,请确定门店绑定且只绑定了京东平台")
|
||||
}
|
||||
storeMap := make(map[int]*model.StoreMap)
|
||||
for _, v := range storeMapList {
|
||||
if v.VendorID != vendorID {
|
||||
return "", fmt.Errorf("门店%d绑定的不(只)是京东", v.StoreID)
|
||||
}
|
||||
storeMap[v.StoreID] = v
|
||||
}
|
||||
|
||||
handler := partner.GetPurchasePlatformFromVendorID(vendorID)
|
||||
var storeSkuList []*model.StoreSkuBind
|
||||
rootTask := tasksch.NewSeqTask(fmt.Sprintf("根据厂家门店商品信息相应刷新本地数据:%v", storeIDs), ctx,
|
||||
func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
||||
switch step {
|
||||
case 0:
|
||||
storeSkuList, err = handler.GetStoresSku(ctx, task, storeIDs)
|
||||
case 1:
|
||||
if len(storeSkuList) > 0 {
|
||||
var skuList []*model.SkuAndName
|
||||
skuList, err = dao.GetSkus(db, nil, nil, nil, nil)
|
||||
if err == nil {
|
||||
skuNameMap := make(map[int]*model.SkuName)
|
||||
skuMap := make(map[int]*model.SkuAndName)
|
||||
for _, sku := range skuList {
|
||||
if skuNameMap[sku.NameID] == nil {
|
||||
skuNameMap[sku.NameID] = &model.SkuName{
|
||||
Unit: sku.Unit,
|
||||
}
|
||||
}
|
||||
skuMap[sku.ID] = sku
|
||||
}
|
||||
for _, v := range storeSkuList {
|
||||
sku := skuMap[v.SkuID]
|
||||
skuName := skuNameMap[sku.NameID]
|
||||
if skuName.IsGlobal == 0 && (jxutils.IsSkuSpecial(sku.SpecQuality, sku.SpecUnit) || skuName.Unit != model.SpecialUnit) {
|
||||
skuName.Price = v.Price
|
||||
skuName.IsGlobal = 1 // 标准价
|
||||
}
|
||||
}
|
||||
for _, v := range storeSkuList {
|
||||
sku := skuMap[v.SkuID]
|
||||
skuName := skuNameMap[sku.NameID]
|
||||
if skuName.IsGlobal == 0 {
|
||||
if skuName.Price == 0 {
|
||||
skuName.Price = jxutils.CaculateUnitPrice(v.Price, sku.SpecQuality, sku.SpecUnit, skuName.Unit)
|
||||
} else {
|
||||
skuName.Price = (skuName.Price + jxutils.CaculateUnitPrice(v.Price, sku.SpecQuality, sku.SpecUnit, skuName.Unit)) / 2
|
||||
}
|
||||
}
|
||||
}
|
||||
for _, v := range storeSkuList {
|
||||
pricePercentage := int(storeMap[v.StoreID].PricePercentage)
|
||||
skuName := skuNameMap[skuMap[v.SkuID].NameID]
|
||||
v.Price = jxutils.CaculateSkuPriceFromVendor(v.Price, pricePercentage, 0)
|
||||
v.UnitPrice = jxutils.CaculateSkuPriceFromVendor(skuName.Price, pricePercentage, 0)
|
||||
dao.WrapAddIDCULDEntity(v, ctx.GetUserName())
|
||||
setStoreSkuBindStatus(v, model.SyncFlagNewMask)
|
||||
v.JdSyncStatus = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
case 2:
|
||||
if len(storeSkuList) > 0 {
|
||||
dao.Begin(db)
|
||||
defer func() {
|
||||
if r := recover(); r != nil || err != nil {
|
||||
dao.Rollback(db)
|
||||
if r != nil {
|
||||
panic(r)
|
||||
}
|
||||
}
|
||||
}()
|
||||
if _, err = dao.ExecuteSQL(db, `
|
||||
DELETE t1
|
||||
FROM store_sku_bind t1
|
||||
WHERE t1.store_id IN (
|
||||
`+dao.GenQuestionMarks(len(storeIDs))+")", storeIDs); err == nil {
|
||||
if err = dao.CreateMultiEntities(db, storeSkuList); err == nil {
|
||||
hint = utils.Int2Str(len(storeSkuList))
|
||||
dao.Commit(db)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil, err
|
||||
}, 3)
|
||||
tasksch.ManageTask(rootTask).Run()
|
||||
if isAsync {
|
||||
hint = rootTask.GetID()
|
||||
} else {
|
||||
_, err = rootTask.GetResult(0)
|
||||
}
|
||||
return hint, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user