- RefreshJdStoreSkuStock
This commit is contained in:
@@ -48,7 +48,9 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
defSearchDays = 7
|
||||
defSearchDays = 7
|
||||
stockRefreshGap = 1 * time.Minute
|
||||
userName = "jdpromotion"
|
||||
)
|
||||
|
||||
type SkuPrice struct {
|
||||
@@ -171,18 +173,27 @@ func init() {
|
||||
func scheduleDailyRoutine() {
|
||||
executeTime := utils.GetCurDate().Add(24*time.Hour + 5*time.Minute) // 凌晨00:05执行
|
||||
duration := executeTime.Sub(time.Now())
|
||||
if duration > 1*time.Hour {
|
||||
UpdateJdPromotionStatus()
|
||||
}
|
||||
// globals.SugarLogger.Debug(duration)
|
||||
time.AfterFunc(duration, func() {
|
||||
UpdateJdPromotionStatus()
|
||||
RefreshJdLockStoreSku()
|
||||
scheduleDailyRoutine()
|
||||
})
|
||||
}
|
||||
|
||||
func scheduleRoutine() {
|
||||
time.AfterFunc(stockRefreshGap, func() {
|
||||
RefreshJdLockStoreSku()
|
||||
RefreshJdStoreSkuStock()
|
||||
scheduleRoutine()
|
||||
})
|
||||
}
|
||||
|
||||
func Init() {
|
||||
UpdateJdPromotionStatus()
|
||||
RefreshJdLockStoreSku()
|
||||
scheduleDailyRoutine()
|
||||
scheduleRoutine()
|
||||
}
|
||||
|
||||
func CreateJdPromotion(ctx *jxcontext.Context, isIDJd bool, isAsync bool, params *PromotionParams, userName string) (hint string, err error) {
|
||||
@@ -602,7 +613,7 @@ func CancelJdPromotion(ctx *jxcontext.Context, promotionID int) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
// 每晚凌晨运行一次
|
||||
// 每一段时间运行一次
|
||||
func RefreshJdLockStoreSku() (err error) {
|
||||
sql := `
|
||||
SELECT t1.end_at, t22.vendor_store_id, t32.jd_id, t3.*
|
||||
@@ -611,7 +622,7 @@ func RefreshJdLockStoreSku() (err error) {
|
||||
JOIN store_map t22 ON t2.store_id = t22.store_id AND t22.vendor_id = ? AND t22.deleted_at = ?
|
||||
JOIN promotion_sku t3 ON t1.id = t3.promotion_id
|
||||
JOIN sku t32 ON t3.sku_id = t32.id
|
||||
WHERE t1.deleted_at = ? AND t1.vendor_id = ? AND t1.status = ? AND (t1.beginAt <= ? AND t1.endAt >= ?)
|
||||
WHERE t1.deleted_at = ? AND t1.vendor_id = ? AND t1.status = ? AND (t1.begin_at <= ? AND t1.end_at >= ?)
|
||||
`
|
||||
nowDate := utils.GetCurDate()
|
||||
sqlParams := []interface{}{
|
||||
@@ -626,11 +637,76 @@ func RefreshJdLockStoreSku() (err error) {
|
||||
var promotionItemList []*tPromotionItemInfo
|
||||
db := dao.GetDB()
|
||||
if err = dao.GetRows(db, &promotionItemList, sql, sqlParams...); err != nil {
|
||||
if !dao.IsNoRowsError(err) {
|
||||
globals.SugarLogger.Warnf("RefreshJdLockStoreSku GetRows failed with error:%v", err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
return RefreshJdPromotionItemListLockStatus(promotionItemList)
|
||||
}
|
||||
|
||||
func RefreshJdStoreSkuStock() (err error) {
|
||||
sql := `
|
||||
SELECT t4.store_id, t4.sku_id
|
||||
FROM promotion t1
|
||||
JOIN promotion_store t2 ON t1.id = t2.promotion_id
|
||||
JOIN store_map t22 ON t2.store_id = t22.store_id AND t22.vendor_id = ? AND t22.deleted_at = ?
|
||||
JOIN promotion_sku t3 ON t1.id = t3.promotion_id AND t3.is_lock = 1
|
||||
JOIN store_sku_bind t4 ON t2.store_id = t4.store_id AND t3.sku_id = t4.sku_id AND t4.deleted_at = ?
|
||||
WHERE t3.is_lock = 1 AND t1.deleted_at = ? AND t1.vendor_id = ? AND t1.status = ? AND (t1.beginAt <= ? AND t1.endAt >= ?)
|
||||
GROUP BY 1,2
|
||||
ORDER BY 1,2
|
||||
`
|
||||
nowDate := utils.GetCurDate()
|
||||
sqlParams := []interface{}{
|
||||
model.VendorIDJD,
|
||||
utils.DefaultTimeValue,
|
||||
utils.DefaultTimeValue,
|
||||
utils.DefaultTimeValue,
|
||||
model.VendorIDJD,
|
||||
model.PromotionStatusRemoteCreated,
|
||||
nowDate,
|
||||
nowDate,
|
||||
}
|
||||
var promotionItemList []*tPromotionItemInfo
|
||||
db := dao.GetDB()
|
||||
if err = dao.GetRows(db, &promotionItemList, sql, sqlParams...); err != nil {
|
||||
if !dao.IsNoRowsError(err) {
|
||||
globals.SugarLogger.Warnf("RefreshJdStoreSkuStock GetRows failed with error:%v", err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
if len(promotionItemList) > 0 {
|
||||
task := tasksch.NewParallelTask("RefreshJdStoreSkuStock", tasksch.NewParallelConfig().SetBatchSize(jdapi.MaxStoreSkuBatchSize).SetIsContinueWhenError(true), "schedule", func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
stockList := make([]*jdapi.SkuStock, 0)
|
||||
stationNo := batchItemList[0].(*tPromotionItemInfo).JdStoreID
|
||||
for _, v := range batchItemList {
|
||||
promotionItem := v.(*tPromotionItemInfo)
|
||||
if promotionItem.JdStoreID != stationNo {
|
||||
_, err = api.JdAPI.BatchUpdateCurrentQtys("", stationNo, stockList, userName)
|
||||
if err != nil {
|
||||
globals.SugarLogger.Warnf("RefreshJdStoreSkuStock BatchUpdateCurrentQtys failed with error:%v", err)
|
||||
}
|
||||
stockList = make([]*jdapi.SkuStock, 0)
|
||||
stationNo = promotionItem.JdStoreID
|
||||
}
|
||||
stockList = append(stockList, &jdapi.SkuStock{
|
||||
OutSkuId: utils.Int2Str(promotionItem.SkuID),
|
||||
StockQty: model.MaxStoreSkuStockQty,
|
||||
})
|
||||
}
|
||||
_, err = api.JdAPI.BatchUpdateCurrentQtys("", stationNo, stockList, userName)
|
||||
if err != nil {
|
||||
globals.SugarLogger.Warnf("RefreshJdStoreSkuStock BatchUpdateCurrentQtys failed with error:%v", err)
|
||||
}
|
||||
return nil, err
|
||||
}, promotionItemList)
|
||||
task.Run()
|
||||
_, err = task.GetResult(0)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// 每晚凌晨运行一次
|
||||
func UpdateJdPromotionStatus() (num int64, err error) {
|
||||
sql := `
|
||||
@@ -710,7 +786,7 @@ func OnStoreStockMsg(msg *jdapi.CallbackStoreStockMsg) (retVal *jdapi.CallbackRe
|
||||
}
|
||||
_, err = api.JdAPI.BatchUpdateVendibility("", msg.StationNo, []*jdapi.StockVendibility{
|
||||
vendibility,
|
||||
}, "prevent")
|
||||
}, userName)
|
||||
}
|
||||
if !msg.Have {
|
||||
stock := &jdapi.SkuStock{
|
||||
@@ -719,7 +795,7 @@ func OnStoreStockMsg(msg *jdapi.CallbackStoreStockMsg) (retVal *jdapi.CallbackRe
|
||||
}
|
||||
_, err = api.JdAPI.BatchUpdateCurrentQtys("", msg.StationNo, []*jdapi.SkuStock{
|
||||
stock,
|
||||
}, "prevent")
|
||||
}, userName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user