184 lines
6.8 KiB
Go
184 lines
6.8 KiB
Go
package jd
|
|
|
|
import (
|
|
"time"
|
|
|
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
|
|
|
"git.rosy.net.cn/jx-callback/globals"
|
|
"git.rosy.net.cn/jx-callback/globals/api"
|
|
|
|
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
|
"git.rosy.net.cn/baseapi/utils"
|
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
|
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
|
"git.rosy.net.cn/jx-callback/business/model"
|
|
)
|
|
|
|
func CreatePromotionInfos(promotionType int, name string, beginDate, endDate time.Time, outInfoId, advertising, traceId string) (infoId int64, err error) {
|
|
if globals.EnableJdStoreWrite {
|
|
if promotionType == model.ActSkuDirectDown {
|
|
return api.JdAPI.CreatePromotionInfosSingle(name, beginDate, endDate, outInfoId, advertising, traceId)
|
|
} else {
|
|
return api.JdAPI.CreatePromotionInfosLimitTime(name, beginDate, endDate, outInfoId, advertising, traceId)
|
|
}
|
|
} else {
|
|
infoId = jxutils.GenFakeID()
|
|
}
|
|
return infoId, err
|
|
}
|
|
|
|
func CreatePromotionRules(promotionType int, infoId int64, outInfoId string, limitDevice, limitPin, limitCount, limitDaily int, traceId string) (err error) {
|
|
if globals.EnableJdStoreWrite {
|
|
if promotionType == model.ActSkuDirectDown {
|
|
return api.JdAPI.CreatePromotionRulesSingle(infoId, outInfoId, limitDevice, limitPin, limitCount, limitDaily, traceId)
|
|
} else {
|
|
return api.JdAPI.CreatePromotionRulesLimitTime(infoId, outInfoId, limitDevice, limitPin, limitCount, limitDaily, traceId)
|
|
}
|
|
}
|
|
return err
|
|
}
|
|
|
|
func CreatePromotionSku(promotionType int, infoId int64, outInfoId string, skus []*jdapi.PromotionSku, traceId string) (skusResult []*jdapi.PromotionSku, err error) {
|
|
if globals.EnableJdStoreWrite {
|
|
if promotionType == model.ActSkuDirectDown {
|
|
return api.JdAPI.CreatePromotionSkuSingle(infoId, outInfoId, skus, traceId)
|
|
} else {
|
|
return api.JdAPI.CreatePromotionSkuLimitTime(infoId, outInfoId, skus, traceId)
|
|
}
|
|
}
|
|
return skusResult, err
|
|
}
|
|
|
|
func CancelPromotionSku(promotionType int, infoId int64, outInfoId string, skus []*jdapi.PromotionSku, traceId string) (err error) {
|
|
if globals.EnableJdStoreWrite {
|
|
if promotionType == model.ActSkuDirectDown {
|
|
return api.JdAPI.CancelPromotionSkuSingle(infoId, outInfoId, skus, traceId)
|
|
} else {
|
|
return api.JdAPI.CancelPromotionSkuLimitTime(infoId, outInfoId, skus, traceId)
|
|
}
|
|
}
|
|
return err
|
|
}
|
|
|
|
func ConfirmPromotion(promotionType int, infoId int64, outInfoId, traceId string) (err error) {
|
|
if globals.EnableJdStoreWrite {
|
|
if promotionType == model.ActSkuDirectDown {
|
|
return api.JdAPI.ConfirmPromotionSingle(infoId, outInfoId, traceId)
|
|
} else {
|
|
return api.JdAPI.ConfirmPromotionLimitTime(infoId, outInfoId, traceId)
|
|
}
|
|
}
|
|
return err
|
|
}
|
|
|
|
func CancelPromotion(promotionType int, infoId int64, outInfoId, traceId string) (err error) {
|
|
if globals.EnableJdStoreWrite {
|
|
if promotionType == model.ActSkuDirectDown {
|
|
return api.JdAPI.CancelPromotionSingle(infoId, outInfoId, traceId)
|
|
} else {
|
|
return api.JdAPI.CancelPromotionLimitTime(infoId, outInfoId, traceId)
|
|
}
|
|
}
|
|
return err
|
|
}
|
|
|
|
func AdjustPromotionTime(promotionType int, infoId int64, outInfoId string, endDate time.Time, traceId string) (err error) {
|
|
if globals.EnableJdStoreWrite {
|
|
if promotionType == model.ActSkuDirectDown {
|
|
return api.JdAPI.AdjustPromotionTimeSingle(infoId, outInfoId, endDate, traceId)
|
|
} else {
|
|
return api.JdAPI.AdjustPromotionTimeLimitTime(infoId, outInfoId, endDate, traceId)
|
|
}
|
|
}
|
|
return err
|
|
}
|
|
|
|
func AdjustPromotionSku(promotionType int, infoId int64, outInfoId string, skus []*jdapi.PromotionSku, traceId string) (skusResult []*jdapi.PromotionSku, err error) {
|
|
if globals.EnableJdStoreWrite {
|
|
if promotionType == model.ActSkuDirectDown {
|
|
return api.JdAPI.AdjustPromotionSkuSingle(infoId, outInfoId, skus, traceId)
|
|
} else {
|
|
return api.JdAPI.AdjustPromotionSkuLimitTime(infoId, outInfoId, skus, traceId)
|
|
}
|
|
}
|
|
return skusResult, err
|
|
}
|
|
|
|
func getTraceID(ctx *jxcontext.Context) (traceID string) {
|
|
traceID = ctx.GetUserName() + utils.GetUUID()
|
|
return traceID
|
|
}
|
|
|
|
func storeSku2Jd(actStoreSku []*model.ActStoreSku2, handler func(syncStatus int) bool) (jdActStoreSku []*jdapi.PromotionSku) {
|
|
for _, v := range actStoreSku {
|
|
if handler(v.SyncStatus) {
|
|
jdActStoreSku = append(jdActStoreSku, &jdapi.PromotionSku{
|
|
StationNo: utils.Str2Int64(v.VendorStoreID),
|
|
SkuID: utils.Str2Int64(v.VendorSkuID),
|
|
PromotionPrice: v.ActPrice,
|
|
// LimitSkuCount:0,
|
|
})
|
|
}
|
|
}
|
|
return jdActStoreSku
|
|
}
|
|
|
|
func (c *PurchaseHandler) CreateAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreMap []*model.ActStore2, actStoreSku []*model.ActStoreSku2) (err error) {
|
|
traceID := getTraceID(ctx)
|
|
if act.Type < model.ActOrderBegin {
|
|
outInfoID := utils.Int2Str(act.ID)
|
|
infoID, err2 := CreatePromotionInfos(act.Type, act.Name, act.BeginAt, act.EndAt, outInfoID, act.Advertising, traceID)
|
|
if err = err2; err == nil {
|
|
act.VendorActID = utils.Int64ToStr(infoID)
|
|
if err = CreatePromotionRules(act.Type, infoID, "", act.LimitDevice, act.LimitPin, act.LimitCount, act.LimitDaily, traceID); err == nil {
|
|
if _, err = CreatePromotionSku(act.Type, infoID, "", storeSku2Jd(actStoreSku, model.IsSyncStatusNeedCreate), traceID); err == nil {
|
|
err = ConfirmPromotion(act.Type, infoID, "", traceID)
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (c *PurchaseHandler) UpdateAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreMap2Remove, actStoreMap2Add, actStoreMap2Update []*model.ActStore2, actStoreSku []*model.ActStoreSku2) (err error) {
|
|
traceID := getTraceID(ctx)
|
|
if act.Type < model.ActOrderBegin {
|
|
outInfoID := utils.Int2Str(act.ID)
|
|
if !utils.IsTimeZero(act.EndAt) {
|
|
if err = AdjustPromotionTime(act.Type, 0, outInfoID, act.EndAt, traceID); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if toBeDeleted := storeSku2Jd(actStoreSku, model.IsSyncStatusNeedDelete); len(toBeDeleted) > 0 {
|
|
if err = CancelPromotionSku(act.Type, 0, outInfoID, toBeDeleted, traceID); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
// if toBeAdded := storeSku2Jd(actStoreSku, model.IsSyncStatusNeedDelete); len(toBeAdded) > 0 {
|
|
// if _, err = CreatePromotionSku(act.Type, 0, outInfoID, toBeAdded, traceID); err != nil {
|
|
// return err
|
|
// }
|
|
// }
|
|
// if toBeUpdated := storeSku2Jd(actStoreSku, model.IsSyncStatusNeedDelete); len(toBeUpdated) > 0 {
|
|
// if _, err = AdjustPromotionSku(act.Type, 0, outInfoID, toBeUpdated, traceID); err != nil {
|
|
// return err
|
|
// }
|
|
// }
|
|
} else {
|
|
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (c *PurchaseHandler) CancelAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actStoreMap []*model.ActStore2, actStoreSku []*model.ActStoreSku2) (err error) {
|
|
traceID := getTraceID(ctx)
|
|
if act.Type < model.ActOrderBegin {
|
|
outInfoID := utils.Int2Str(act.ID)
|
|
err = CancelPromotion(act.Type, 0, outInfoID, traceID)
|
|
}
|
|
return err
|
|
}
|