|
|
|
|
@@ -1010,27 +1010,12 @@ func createStoreSkuActs(ctx *jxcontext.Context, parentTask tasksch.ITask, vendor
|
|
|
|
|
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, 0, []int{storeID}, skuIDs, []int{vendorID}, 1, 0)
|
|
|
|
|
storeSkuActList, err := dao.GetStoresSkusAct(db, 0, false, []int{storeID}, skuIDs, []int{vendorID}, false, 1, 0)
|
|
|
|
|
if err == nil {
|
|
|
|
|
storeSkuList2, storeSkuActMap := parseStoreSkuActList(true, storeSkuList, storeSkuActList)
|
|
|
|
|
if len(storeSkuList2) > 0 {
|
|
|
|
|
if isChangePrice {
|
|
|
|
|
time.Sleep(1 * time.Second) // 改价后马上建活动可能失败
|
|
|
|
|
}
|
|
|
|
|
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.UnselectStoreSkuListBySkuIDs(batchedStoreSkuList, putils.StoreSkuInfoWithErrList2SkuIDs(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)
|
|
|
|
|
if isChangePrice && vendorID == model.VendorIDJD {
|
|
|
|
|
time.Sleep(1 * time.Second) // 改价后马上建活动可能失败
|
|
|
|
|
}
|
|
|
|
|
err = createStoreSkuActs2(ctx, parentTask, vendorID, vendorOrgCode, storeID, vendorStoreID, storeSkuList, storeSkuActList)
|
|
|
|
|
}
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
@@ -1039,27 +1024,154 @@ func cancelStoreSkuActs(ctx *jxcontext.Context, parentTask tasksch.ITask, vendor
|
|
|
|
|
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, 0, []int{storeID}, skuIDs, []int{vendorID}, 0, 0)
|
|
|
|
|
storeSkuActList, err := dao.GetStoresSkusAct(db, 0, false, []int{storeID}, skuIDs, []int{vendorID}, true, 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.UnselectStoreSkuListBySkuIDs(batchedStoreSkuList, putils.StoreSkuInfoWithErrList2SkuIDs(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)
|
|
|
|
|
if isChangePrice && vendorID == model.VendorIDJD {
|
|
|
|
|
time.Sleep(1 * time.Second) // 取消活动后马上改价可能失败
|
|
|
|
|
}
|
|
|
|
|
err = cancelStoreSkuActs2(ctx, parentTask, vendorID, vendorOrgCode, storeID, vendorStoreID, storeSkuList, storeSkuActList)
|
|
|
|
|
if err == nil && isChangePrice && vendorID == model.VendorIDJD {
|
|
|
|
|
time.Sleep(1 * time.Second) // 取消活动后马上改价可能失败
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func createStoreSkuActs2(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID int, vendorOrgCode string, storeID int, vendorStoreID string,
|
|
|
|
|
storeSkuList []*partner.StoreSkuInfo, storeSkuActList []*model.StoreSkuAct) (err error) {
|
|
|
|
|
globals.SugarLogger.Debugf("createStoreSkuActs vendorID:%d, storeID:%d, storeSkuList:%s", vendorID, storeID, utils.Format4Output(storeSkuList, true))
|
|
|
|
|
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.UnselectStoreSkuListBySkuIDs(batchedStoreSkuList, putils.StoreSkuInfoWithErrList2SkuIDs(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 cancelStoreSkuActs2(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID int, vendorOrgCode string, storeID int, vendorStoreID string,
|
|
|
|
|
storeSkuList []*partner.StoreSkuInfo, storeSkuActList []*model.StoreSkuAct) (err error) {
|
|
|
|
|
globals.SugarLogger.Debugf("cancelStoreSkuActs vendorID:%d, storeID:%d, storeSkuList:%s", vendorID, storeID, utils.Format4Output(storeSkuList, true))
|
|
|
|
|
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.UnselectStoreSkuListBySkuIDs(batchedStoreSkuList, putils.StoreSkuInfoWithErrList2SkuIDs(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
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func SyncStoreSkuBindAct(ctx *jxcontext.Context, parentTask tasksch.ITask, isCreate bool, hintActID int, storeIDs, skuIDs []int) (err error) {
|
|
|
|
|
db := dao.GetDB()
|
|
|
|
|
var mustHaveVendorActID bool
|
|
|
|
|
var minActPercentage int
|
|
|
|
|
if isCreate {
|
|
|
|
|
mustHaveVendorActID = false
|
|
|
|
|
minActPercentage = 1
|
|
|
|
|
} else {
|
|
|
|
|
mustHaveVendorActID = true
|
|
|
|
|
minActPercentage = 0
|
|
|
|
|
}
|
|
|
|
|
storeSkuActList, err := dao.GetStoresSkusAct(db, hintActID, true, storeIDs, skuIDs, nil, mustHaveVendorActID, minActPercentage, 0)
|
|
|
|
|
if err != nil || len(storeSkuActList) == 0 {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
storeMap := make(map[int]int)
|
|
|
|
|
skuMap := make(map[int]int)
|
|
|
|
|
storeVendorMap := make(map[int]map[int]int)
|
|
|
|
|
storeSkuActMap := make(map[int]map[int][]*model.StoreSkuAct)
|
|
|
|
|
for _, v := range storeSkuActList {
|
|
|
|
|
storeMap[v.StoreID] = 1
|
|
|
|
|
skuMap[v.SkuID] = 1
|
|
|
|
|
|
|
|
|
|
if storeVendorMap[v.StoreID] == nil {
|
|
|
|
|
storeVendorMap[v.StoreID] = make(map[int]int)
|
|
|
|
|
}
|
|
|
|
|
storeVendorMap[v.StoreID][v.VendorID] = 1
|
|
|
|
|
|
|
|
|
|
if storeSkuActMap[v.StoreID] == nil {
|
|
|
|
|
storeSkuActMap[v.StoreID] = make(map[int][]*model.StoreSkuAct)
|
|
|
|
|
}
|
|
|
|
|
storeSkuActMap[v.StoreID][v.VendorID] = append(storeSkuActMap[v.StoreID][v.VendorID], v)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
storeIDs = jxutils.IntMap2List(storeMap)
|
|
|
|
|
storeSkuList, err := dao.GetStoresSkusInfo(db, storeIDs, jxutils.IntMap2List(skuMap))
|
|
|
|
|
if err != nil || len(storeSkuList) == 0 {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
storeSkuMap := make(map[int]map[int][]*partner.StoreSkuInfo)
|
|
|
|
|
for _, v := range storeSkuList {
|
|
|
|
|
if storeSkuMap[v.StoreID] == nil {
|
|
|
|
|
storeSkuMap[v.StoreID] = make(map[int][]*partner.StoreSkuInfo)
|
|
|
|
|
}
|
|
|
|
|
for vendorID := range storeVendorMap[v.StoreID] {
|
|
|
|
|
storeSku := &partner.StoreSkuInfo{
|
|
|
|
|
SkuID: v.SkuID,
|
|
|
|
|
VendorPrice: int64(dao.GetStoreSkuBindVendorPrice(v, vendorID)),
|
|
|
|
|
}
|
|
|
|
|
storeSkuMap[v.StoreID][vendorID] = append(storeSkuMap[v.StoreID][vendorID], storeSku)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
task := tasksch.NewParallelTask("处理门店商品绑定活动", nil, ctx,
|
|
|
|
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
|
|
|
storeID := batchItemList[0].(int)
|
|
|
|
|
vendorIDs := jxutils.IntMap2List(storeVendorMap[storeID])
|
|
|
|
|
subTask := tasksch.NewParallelTask(fmt.Sprintf("处理门店商品绑定活动门店:%d", storeID), nil, ctx,
|
|
|
|
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
|
|
|
vendorID := batchItemList[0].(int)
|
|
|
|
|
storeDetail, err := dao.GetStoreDetail(db, storeID, vendorID)
|
|
|
|
|
if err == nil {
|
|
|
|
|
if isCreate {
|
|
|
|
|
err = createStoreSkuActs2(ctx, task, vendorID, storeDetail.VendorOrgCode, storeID, storeDetail.VendorStoreID, storeSkuMap[storeID][vendorID], storeSkuActMap[storeID][vendorID])
|
|
|
|
|
} else {
|
|
|
|
|
err = cancelStoreSkuActs2(ctx, task, vendorID, storeDetail.VendorOrgCode, storeID, storeDetail.VendorStoreID, storeSkuMap[storeID][vendorID], storeSkuActMap[storeID][vendorID])
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return retVal, err
|
|
|
|
|
}, vendorIDs)
|
|
|
|
|
tasksch.HandleTask(subTask, task, true).Run()
|
|
|
|
|
_, err = subTask.GetResult(0)
|
|
|
|
|
return retVal, err
|
|
|
|
|
}, storeIDs)
|
|
|
|
|
tasksch.HandleTask(task, parentTask, true).Run()
|
|
|
|
|
_, err = task.GetResult(0)
|
|
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func FullSyncStoreSkuBindAct(ctx *jxcontext.Context, parentTask tasksch.ITask, hintActID int, storeIDs, skuIDs []int) (err error) {
|
|
|
|
|
task := tasksch.NewParallelTask("同步门店商品绑定活动", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx,
|
|
|
|
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
|
|
|
step := batchItemList[0]
|
|
|
|
|
switch step {
|
|
|
|
|
case 0:
|
|
|
|
|
err = SyncStoreSkuBindAct(ctx, task, false, hintActID, storeIDs, skuIDs)
|
|
|
|
|
case 1:
|
|
|
|
|
err = SyncStoreSkuBindAct(ctx, task, true, hintActID, storeIDs, skuIDs)
|
|
|
|
|
}
|
|
|
|
|
return retVal, err
|
|
|
|
|
}, []int{0, 1})
|
|
|
|
|
tasksch.HandleTask(task, parentTask, true).Run()
|
|
|
|
|
_, err = task.GetResult(0)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|