实验StoreSkuAct

This commit is contained in:
gazebo
2020-01-16 10:47:06 +08:00
parent b94a1dd520
commit 88748b4d99
12 changed files with 409 additions and 126 deletions

View File

@@ -326,6 +326,7 @@ func isSkuLockTimeValid(sku *dao.StoreSkuSyncInfo) bool {
}
func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag int, isFull bool, vendorID, storeID int, nameIDs, skuIDs, excludeSkuIDs []int, useVendorPriceDirectly, isContinueWhenError bool) (err error) {
globals.SugarLogger.Debugf("syncStoreSkuNew causeFlag:%d", causeFlag)
db := dao.GetDB()
storeDetail, err := dao.GetStoreDetail(db, storeID, vendorID)
if err != nil {
@@ -606,6 +607,9 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
case 6:
if len(priceList) > 0 {
_, err = putils.FreeBatchStoreSkuInfo("更新门店商品价格", func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) {
if isNeedHandleAct(causeFlag) {
cancelStoreSkuActs(ctx, task, vendorID, storeDetail.VendorOrgCode, storeID, vendorStoreID, batchedStoreSkuList)
}
var failedList []*partner.StoreSkuInfoWithErr
failedList, err = storeSkuHandler.UpdateStoreSkusPrice(ctx, storeDetail.VendorOrgCode, storeID, vendorStoreID, batchedStoreSkuList)
if len(failedList) > 0 {
@@ -615,6 +619,9 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
if len(successList) > 0 {
updateStoreSku(dao.GetDB(), vendorID, bareSku2Sync(successList), model.SyncFlagPriceMask)
}
if isNeedHandleAct(causeFlag) {
createStoreSkuActs(ctx, task, vendorID, storeDetail.VendorOrgCode, storeID, vendorStoreID, batchedStoreSkuList)
}
return nil, len(successList), err
}, ctx, task, priceList, storeSkuHandler.GetStoreSkusBatchSize(partner.FuncUpdateStoreSkusPrice), isContinueWhenError2)
}
@@ -649,6 +656,10 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
return err
}
func isNeedHandleAct(causeFlag int) bool {
return globals.IsStoreSkuAct && (causeFlag&model.SyncFlagPriceMask != 0)
}
func checkRemoteCatExist(outRemoteCatMap map[string]int, localCatMap map[string]*dao.SkuStoreCatInfo, remoteCatList []*partner.BareCategoryInfo) (cat2Delete []*partner.BareCategoryInfo) {
for _, v := range remoteCatList {
localCat := localCatMap[v.VendorCatID]
@@ -931,3 +942,117 @@ func GetVendorSkuIDList(l []*partner.StoreSkuInfoWithErr) (vendorSkuIDs []string
}
return vendorSkuIDs2
}
func skuAct2Update(storeSkuAct *model.StoreSkuAct, isCreateAct bool) (item *dao.KVUpdateItem) {
storeSkuAct.SyncStatus = 0
if !isCreateAct {
storeSkuAct.VendorActID = ""
}
kvs := map[string]interface{}{
"VendorActID": storeSkuAct.VendorActID,
"VendorActPrice": storeSkuAct.VendorActPrice,
"SyncStatus": storeSkuAct.SyncStatus,
}
item = &dao.KVUpdateItem{
Item: storeSkuAct,
KVs: kvs,
}
return item
}
func updateStoreSkuAct(db *dao.DaoDB, vendorID int, storeSkuActList []*model.StoreSkuAct, isCreateAct bool) (num int64, err error) {
if len(storeSkuActList) > 0 {
updateItemList := make([]*dao.KVUpdateItem, len(storeSkuActList))
for k, v := range storeSkuActList {
updateItemList[k] = skuAct2Update(v, isCreateAct)
}
num, err = dao.BatchUpdateEntityByKV(db, updateItemList)
}
return num, err
}
func bareSku2StoreSkuAct(storeSkuActMap map[int]*model.StoreSkuAct, storeSkuList []*partner.StoreSkuInfo) (storeSkuActList []*model.StoreSkuAct) {
for _, v := range storeSkuList {
storeSkuAct := storeSkuActMap[v.SkuID]
storeSkuAct.VendorActID = v.VendorActID
storeSkuAct.VendorActPrice = v.ActPrice
storeSkuActList = append(storeSkuActList, storeSkuAct)
}
return storeSkuActList
}
func parseStoreSkuActList(isCreateAct bool, storeSkuList []*partner.StoreSkuInfo, storeSkuActList []*model.StoreSkuAct) (outStoreSkuList []*partner.StoreSkuInfo, storeSkuActMap map[int]*model.StoreSkuAct) {
storeSkuMap := make(map[int]*partner.StoreSkuInfo)
for _, v := range storeSkuList {
storeSkuMap[v.SkuID] = v
}
storeSkuActMap = make(map[int]*model.StoreSkuAct)
for _, v := range storeSkuActList {
if isCreateAct && v.VendorActID == "" && v.ActPercentage > 0 ||
!isCreateAct && v.VendorActID != "" {
storeSku := storeSkuMap[v.SkuID]
if isCreateAct {
storeSku.ActPrice = int64(jxutils.CaculateSkuVendorPrice(int(storeSku.VendorPrice), v.ActPercentage, 0))
} else {
storeSku.VendorActID = v.VendorActID
}
outStoreSkuList = append(outStoreSkuList, storeSku)
storeSkuActMap[v.SkuID] = v
}
}
return outStoreSkuList, storeSkuActMap
}
func createStoreSkuActs(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID int, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) {
globals.SugarLogger.Debugf("createStoreSkuActs vendorID:%d, storeID:%d, storeSkuList:%s", vendorID, storeID, utils.Format4Output(storeSkuList, true))
skuIDs := putils.StoreSkuList2IDs(storeSkuList)
db := dao.GetDB()
storeSkuActList, err := dao.GetStoresSkusAct(db, []int{storeID}, skuIDs, []int{vendorID}, 1, 0)
if err == nil {
storeSkuList2, storeSkuActMap := parseStoreSkuActList(true, storeSkuList, storeSkuActList)
if len(storeSkuList2) > 0 {
storeSkuHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformStoreSkuHandler)
_, err = putils.FreeBatchStoreSkuInfo(fmt.Sprintf("创建门店%d直降活动", storeID), func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) {
var failedList []*partner.StoreSkuInfoWithErr
failedList, err = storeSkuHandler.CreateStoreSkusAct(ctx, vendorOrgCode, storeID, vendorStoreID, batchedStoreSkuList)
if len(failedList) > 0 {
task.AddFailedList(failedList)
}
successList := putils.UnselectStoreSkuListByVendorSkuIDs(batchedStoreSkuList, GetVendorSkuIDList(failedList))
if len(successList) > 0 {
updateStoreSkuAct(dao.GetDB(), vendorID, bareSku2StoreSkuAct(storeSkuActMap, successList), true)
}
return nil, len(successList), err
}, ctx, parentTask, storeSkuList2, storeSkuHandler.GetStoreSkusBatchSize(partner.FuncCancelActs), true)
}
}
return err
}
func cancelStoreSkuActs(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID int, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) {
globals.SugarLogger.Debugf("cancelStoreSkuActs vendorID:%d, storeID:%d, storeSkuList:%s", vendorID, storeID, utils.Format4Output(storeSkuList, true))
skuIDs := putils.StoreSkuList2IDs(storeSkuList)
db := dao.GetDB()
storeSkuActList, err := dao.GetStoresSkusAct(db, []int{storeID}, skuIDs, []int{vendorID}, 0, 0)
if err == nil {
storeSkuList2, storeSkuActMap := parseStoreSkuActList(false, storeSkuList, storeSkuActList)
if len(storeSkuList2) > 0 {
storeSkuHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformStoreSkuHandler)
_, err = putils.FreeBatchStoreSkuInfo(fmt.Sprintf("取消门店%d直降活动", storeID), func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) {
var failedList []*partner.StoreSkuInfoWithErr
failedList, err = storeSkuHandler.CancelActs(ctx, vendorOrgCode, storeID, vendorStoreID, batchedStoreSkuList)
if len(failedList) > 0 {
task.AddFailedList(failedList)
}
successList := putils.UnselectStoreSkuListByVendorSkuIDs(batchedStoreSkuList, GetVendorSkuIDList(failedList))
if len(successList) > 0 {
updateStoreSkuAct(dao.GetDB(), vendorID, bareSku2StoreSkuAct(storeSkuActMap, successList), false)
}
return nil, len(successList), err
}, ctx, parentTask, storeSkuList2, storeSkuHandler.GetStoreSkusBatchSize(partner.FuncCancelActs), true)
}
}
return err
}