按活动要求强制刷新商品平台价
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/baseapi/utils/errlist"
|
||||
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/partner"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
@@ -937,3 +938,101 @@ func DeleteSkusFromAct(ctx *jxcontext.Context, vendorID int, skuIDs []int, isAsy
|
||||
}
|
||||
return hint, err
|
||||
}
|
||||
|
||||
func ForceUpdateVendorPrice(ctx *jxcontext.Context, vendorID int, actType int, storeSkuList []*ActStoreSkuParam, isAsync bool) (hint string, err error) {
|
||||
var wrongSkuList []*ActStoreSkuParam
|
||||
var storeSkuBindList []*model.StoreSkuBind
|
||||
|
||||
db := dao.GetDB()
|
||||
errList := errlist.New()
|
||||
for _, v := range storeSkuList {
|
||||
storeSkuBind := &model.StoreSkuBind{
|
||||
StoreID: v.StoreID,
|
||||
SkuID: v.SkuID,
|
||||
}
|
||||
storeSkuBind.DeletedAt = utils.DefaultTimeValue
|
||||
if err = dao.GetEntity(db, storeSkuBind, model.FieldStoreID, model.FieldSkuID, model.FieldDeletedAt); err == nil {
|
||||
if v.VendorPrice != 0 {
|
||||
if err2 := checkDiscountValidation(actType, float64(v.ActualActPrice)*100/float64(v.VendorPrice)); err2 != nil {
|
||||
v.ErrMsg = err2.Error()
|
||||
wrongSkuList = append(wrongSkuList, v)
|
||||
storeSkuBind = nil
|
||||
}
|
||||
} else {
|
||||
vendorPrice := dao.GetStoreSkuBindVendorPrice(storeSkuBind, vendorID)
|
||||
if checkDiscountValidation(actType, float64(v.ActualActPrice)*100/float64(vendorPrice)) != nil {
|
||||
if actType == model.ActSkuSecKill {
|
||||
vendorPrice = int(v.ActualActPrice)*100/maxDiscount4SkuSecKill + 10
|
||||
} else if actType == model.ActSkuDirectDown {
|
||||
vendorPrice = int(v.ActualActPrice) + 10
|
||||
}
|
||||
dao.SetStoreSkuBindVendorPrice(storeSkuBind, vendorID, vendorPrice)
|
||||
if vendorID != model.VendorIDJX {
|
||||
dao.SetStoreSkuBindSyncStatus(storeSkuBind, vendorID, dao.GetStoreSkuBindSyncStatus(storeSkuBind, vendorID)|model.SyncFlagPriceMask)
|
||||
}
|
||||
storeSkuBind.LastOperator = ctx.GetUserName()
|
||||
}
|
||||
}
|
||||
if storeSkuBind != nil {
|
||||
storeSkuBindList = append(storeSkuBindList, storeSkuBind)
|
||||
}
|
||||
} else {
|
||||
errList.AddErr(err)
|
||||
}
|
||||
}
|
||||
if err = errList.GetErrListAsOne(); err != nil {
|
||||
return "", err
|
||||
}
|
||||
if len(wrongSkuList) > 0 {
|
||||
return "", jsonerr.New(wrongSkuList, model.ErrCodeJsonActPriceTooLarger)
|
||||
}
|
||||
|
||||
storeVendorIDMap := make(map[int]string)
|
||||
storeSkuIDMap := make(map[int][]int)
|
||||
|
||||
task := tasksch.NewSeqTask2(fmt.Sprintf("强制刷新门店商品%s平台价", model.VendorChineseNames[vendorID]), ctx, false,
|
||||
func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
||||
switch step {
|
||||
case 0:
|
||||
errList := errlist.New()
|
||||
for _, storeSkuBind := range storeSkuBindList {
|
||||
if _, err2 := dao.UpdateEntity(db, storeSkuBind); err2 == nil {
|
||||
if storeVendorIDMap[storeSkuBind.StoreID] == "" {
|
||||
if storeDetail, err2 := dao.GetStoreDetail(db, storeSkuBind.StoreID, vendorID); err2 == nil {
|
||||
storeVendorIDMap[storeSkuBind.StoreID] = storeDetail.VendorStoreID
|
||||
}
|
||||
}
|
||||
storeSkuIDMap[storeSkuBind.StoreID] = append(storeSkuIDMap[storeSkuBind.StoreID], storeSkuBind.SkuID)
|
||||
errList.AddErr(err2)
|
||||
}
|
||||
}
|
||||
err = errList.GetErrListAsOne()
|
||||
case 1:
|
||||
if vendorID != model.VendorIDJX && len(storeVendorIDMap) > 0 {
|
||||
var storeIDs []int
|
||||
for storeID := range storeVendorIDMap {
|
||||
storeIDs = append(storeIDs, storeID)
|
||||
}
|
||||
subTask := tasksch.NewParallelTask("同步平台价格", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
storeID := batchItemList[0].(int)
|
||||
_, err = cms.SyncStoreSkuNew2(ctx, task, vendorID, storeID, storeVendorIDMap[storeID], nil, storeSkuIDMap[storeID], nil, true, false, true)
|
||||
return retVal, err
|
||||
}, storeIDs)
|
||||
tasksch.HandleTask(subTask, task, true).Run()
|
||||
_, err = subTask.GetResult(0)
|
||||
}
|
||||
}
|
||||
return result, err
|
||||
}, 2)
|
||||
tasksch.HandleTask(task, nil, true).Run()
|
||||
if isAsync {
|
||||
hint = task.GetID()
|
||||
} else {
|
||||
_, err2 := task.GetResult(0)
|
||||
if err = err2; err == nil {
|
||||
hint = utils.Int2Str(1)
|
||||
}
|
||||
}
|
||||
return hint, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user