实验StoreSkuAct
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user