- RefreshJdStoreSkuStock

This commit is contained in:
gazebo
2018-11-07 09:24:18 +08:00
parent 96c6c52571
commit 25a31efa06

View File

@@ -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)
}
}
}