- RefreshJdStoreSkuStock
This commit is contained in:
@@ -49,6 +49,8 @@ const (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
defSearchDays = 7
|
defSearchDays = 7
|
||||||
|
stockRefreshGap = 1 * time.Minute
|
||||||
|
userName = "jdpromotion"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SkuPrice struct {
|
type SkuPrice struct {
|
||||||
@@ -171,18 +173,27 @@ func init() {
|
|||||||
func scheduleDailyRoutine() {
|
func scheduleDailyRoutine() {
|
||||||
executeTime := utils.GetCurDate().Add(24*time.Hour + 5*time.Minute) // 凌晨00:05执行
|
executeTime := utils.GetCurDate().Add(24*time.Hour + 5*time.Minute) // 凌晨00:05执行
|
||||||
duration := executeTime.Sub(time.Now())
|
duration := executeTime.Sub(time.Now())
|
||||||
|
if duration > 1*time.Hour {
|
||||||
|
UpdateJdPromotionStatus()
|
||||||
|
}
|
||||||
// globals.SugarLogger.Debug(duration)
|
// globals.SugarLogger.Debug(duration)
|
||||||
time.AfterFunc(duration, func() {
|
time.AfterFunc(duration, func() {
|
||||||
UpdateJdPromotionStatus()
|
UpdateJdPromotionStatus()
|
||||||
RefreshJdLockStoreSku()
|
|
||||||
scheduleDailyRoutine()
|
scheduleDailyRoutine()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func Init() {
|
func scheduleRoutine() {
|
||||||
UpdateJdPromotionStatus()
|
time.AfterFunc(stockRefreshGap, func() {
|
||||||
RefreshJdLockStoreSku()
|
RefreshJdLockStoreSku()
|
||||||
|
RefreshJdStoreSkuStock()
|
||||||
|
scheduleRoutine()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func Init() {
|
||||||
scheduleDailyRoutine()
|
scheduleDailyRoutine()
|
||||||
|
scheduleRoutine()
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateJdPromotion(ctx *jxcontext.Context, isIDJd bool, isAsync bool, params *PromotionParams, userName string) (hint string, err error) {
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 每晚凌晨运行一次
|
// 每一段时间运行一次
|
||||||
func RefreshJdLockStoreSku() (err error) {
|
func RefreshJdLockStoreSku() (err error) {
|
||||||
sql := `
|
sql := `
|
||||||
SELECT t1.end_at, t22.vendor_store_id, t32.jd_id, t3.*
|
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 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 promotion_sku t3 ON t1.id = t3.promotion_id
|
||||||
JOIN sku t32 ON t3.sku_id = t32.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()
|
nowDate := utils.GetCurDate()
|
||||||
sqlParams := []interface{}{
|
sqlParams := []interface{}{
|
||||||
@@ -626,11 +637,76 @@ func RefreshJdLockStoreSku() (err error) {
|
|||||||
var promotionItemList []*tPromotionItemInfo
|
var promotionItemList []*tPromotionItemInfo
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
if err = dao.GetRows(db, &promotionItemList, sql, sqlParams...); err != nil {
|
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 err
|
||||||
}
|
}
|
||||||
return RefreshJdPromotionItemListLockStatus(promotionItemList)
|
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) {
|
func UpdateJdPromotionStatus() (num int64, err error) {
|
||||||
sql := `
|
sql := `
|
||||||
@@ -710,7 +786,7 @@ func OnStoreStockMsg(msg *jdapi.CallbackStoreStockMsg) (retVal *jdapi.CallbackRe
|
|||||||
}
|
}
|
||||||
_, err = api.JdAPI.BatchUpdateVendibility("", msg.StationNo, []*jdapi.StockVendibility{
|
_, err = api.JdAPI.BatchUpdateVendibility("", msg.StationNo, []*jdapi.StockVendibility{
|
||||||
vendibility,
|
vendibility,
|
||||||
}, "prevent")
|
}, userName)
|
||||||
}
|
}
|
||||||
if !msg.Have {
|
if !msg.Have {
|
||||||
stock := &jdapi.SkuStock{
|
stock := &jdapi.SkuStock{
|
||||||
@@ -719,7 +795,7 @@ func OnStoreStockMsg(msg *jdapi.CallbackStoreStockMsg) (retVal *jdapi.CallbackRe
|
|||||||
}
|
}
|
||||||
_, err = api.JdAPI.BatchUpdateCurrentQtys("", msg.StationNo, []*jdapi.SkuStock{
|
_, err = api.JdAPI.BatchUpdateCurrentQtys("", msg.StationNo, []*jdapi.SkuStock{
|
||||||
stock,
|
stock,
|
||||||
}, "prevent")
|
}, userName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user