Files
jx-callback/business/partner/purchase/jd/act.go
gazebo 7f44446390 - up
2019-06-21 11:02:16 +08:00

280 lines
9.8 KiB
Go

package jd
import (
"time"
"git.rosy.net.cn/jx-callback/business/partner"
"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"
)
type LogicUpdateInfo struct {
Item interface{}
KVs map[string]interface{}
Condition map[string]interface{}
}
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) {
if act.Type < model.ActOrderBegin {
act.VendorActID, err = createSkuAct(ctx, act, actStoreSku)
} else {
}
return err
}
func createSkuAct(ctx *jxcontext.Context, act *model.Act2, actStoreSku []*model.ActStoreSku2) (vendorActID string, err error) {
traceID := getTraceID(ctx)
outInfoID := ""
if act.VendorActID == "" {
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 {
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)
}
}
}
return vendorActID, err
}
func cancelSkuActSkus(ctx *jxcontext.Context, actType int, vendorActID string, actStoreSku []*model.ActStoreSku2) (err error) {
if skuList := storeSku2Jd(actStoreSku, model.IsSyncStatusNeedDelete); len(skuList) > 0 {
err = CancelPromotionSku(actType, utils.Str2Int64(vendorActID), "", skuList, getTraceID(ctx))
}
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) {
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
}
func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actStoreList []*model.ActStore2, actStoreSkuList []*model.ActStoreSku2) (err error) {
traceID := getTraceID(ctx)
actStoreMap := partner.SplitActStore(actStoreList)
actStoreSkuMap := partner.SplitActStoreSku(actStoreSkuList)
var actStoreSkuList4Create, actStoreSkuList4Delete []*model.ActStoreSku2
var okList []*LogicUpdateInfo
for _, actStore := range actStoreMap {
for _, actStoreSku := range actStoreSkuMap[actStore.StoreID] {
if model.IsSyncStatusNeedCreate(actStoreSku.SyncStatus) {
if actStore.VendorActID == "" {
actStoreSkuList4Create = append(actStoreSkuList4Create, actStoreSku)
} else {
if actStoreSku.VendorActID, err = createSkuAct(ctx, act, []*model.ActStoreSku2{actStoreSku}); err != nil {
return err
}
okList = append(okList, &LogicUpdateInfo{
Item: partner.ActStoreSku2ActStoreSkuMap(actStoreSku),
KVs: map[string]interface{}{
model.FieldSyncStatus: 0,
model.FieldVendorActID: actStoreSku.VendorActID,
},
})
}
} else if model.IsSyncStatusNeedDelete(actStoreSku.SyncStatus) {
if actStoreSku.VendorActID == "" {
actStoreSkuList4Delete = append(actStoreSkuList4Delete, actStoreSku)
} else {
if err = CancelPromotion(act.Type, utils.Str2Int64(actStoreSku.VendorActID), "", traceID); err != nil {
return err
}
okList = append(okList, &LogicUpdateInfo{
Item: partner.ActStoreSku2ActStoreSkuMap(actStoreSku),
KVs: map[string]interface{}{
model.FieldSyncStatus: 0,
model.FieldDeletedAt: time.Now(),
},
})
}
}
}
if actStore.VendorActID != "" {
if model.IsSyncStatusDelete(actStore.SyncStatus) {
if err = CancelPromotion(act.Type, utils.Str2Int64(actStore.VendorActID), "", traceID); err != nil {
return err
}
okList = append(okList, &LogicUpdateInfo{
Item: partner.ActStore2ActStoreMap(actStore),
KVs: map[string]interface{}{
model.FieldSyncStatus: 0,
model.FieldDeletedAt: time.Now(),
},
})
} else if len(actStoreSkuList4Delete) > 0 {
if err = cancelSkuActSkus(ctx, act.Type, actStore.VendorActID, actStoreSkuList4Delete); err != nil {
return err
}
}
for _, v := range actStoreSkuList4Delete {
okList = append(okList, &LogicUpdateInfo{
Item: partner.ActStoreSku2ActStoreSkuMap(v),
KVs: map[string]interface{}{
model.FieldSyncStatus: 0,
model.FieldDeletedAt: time.Now(),
},
})
}
actStoreSkuList4Delete = nil
}
if act.VendorActID != "" {
if len(actStoreSkuList4Create) > 0 {
if actStore.VendorActID, err = createSkuAct(ctx, act, actStoreSkuList4Create); err != nil {
return err
}
okList = append(okList, &LogicUpdateInfo{
Item: partner.ActStore2ActStoreMap(actStore),
KVs: map[string]interface{}{
model.FieldSyncStatus: 0,
},
})
for _, v := range actStoreSkuList4Create {
okList = append(okList, &LogicUpdateInfo{
Item: partner.ActStoreSku2ActStoreSkuMap(v),
KVs: map[string]interface{}{
model.FieldSyncStatus: 0,
},
})
}
actStoreSkuList4Create = nil
}
}
}
// db := dao.GetDB()
return err
}