|
|
|
|
@@ -3,6 +3,9 @@ package jd
|
|
|
|
|
import (
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
|
|
|
|
"git.rosy.net.cn/jx-callback/business/partner"
|
|
|
|
|
|
|
|
|
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
|
|
|
|
|
|
|
|
|
"git.rosy.net.cn/jx-callback/globals"
|
|
|
|
|
@@ -15,6 +18,12 @@ import (
|
|
|
|
|
"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 {
|
|
|
|
|
@@ -124,60 +133,131 @@ func storeSku2Jd(actStoreSku []*model.ActStoreSku2, handler func(syncStatus int)
|
|
|
|
|
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)
|
|
|
|
|
func (c *PurchaseHandler) CreateAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreSku []*model.ActStoreSku2) (err error) {
|
|
|
|
|
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)
|
|
|
|
|
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 {
|
|
|
|
|
if err = ConfirmPromotion(act.Type, infoID, "", traceID); err == nil {
|
|
|
|
|
for _, v := range actStoreSku {
|
|
|
|
|
v.VendorActID = vendorActID
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
}
|
|
|
|
|
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) {
|
|
|
|
|
traceID := getTraceID(ctx)
|
|
|
|
|
func cancelSkuAct(ctx *jxcontext.Context, actType int, vendorActID string) (err error) {
|
|
|
|
|
err = CancelPromotion(actType, utils.Str2Int64(vendorActID), "", getTraceID(ctx))
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *PurchaseHandler) UpdateAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreSku []*model.ActStoreSku2) (err error) {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *PurchaseHandler) CancelAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actStoreSku []*model.ActStoreSku2) (err error) {
|
|
|
|
|
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 {
|
|
|
|
|
|
|
|
|
|
err = CancelPromotion(act.Type, 0, outInfoID, getTraceID(ctx))
|
|
|
|
|
}
|
|
|
|
|
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)
|
|
|
|
|
func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreSkuList []*model.ActStoreSku2) (err error) {
|
|
|
|
|
globals.SugarLogger.Debugf("jd SyncAct, actID:%d", act.ID)
|
|
|
|
|
vendorActInfoMap := make(map[string][]*model.ActStoreSku2)
|
|
|
|
|
deleteActInfoMap := make(map[string][]*model.ActStoreSku2)
|
|
|
|
|
var actStoreSkuList4Create []*model.ActStoreSku2
|
|
|
|
|
var updateItems []*dao.KVUpdateItem
|
|
|
|
|
|
|
|
|
|
actStoreSkuMap := partner.SplitActStoreSku(actStoreSkuList)
|
|
|
|
|
for storeID := range actStoreSkuMap {
|
|
|
|
|
for _, actStoreSku := range actStoreSkuMap[storeID] {
|
|
|
|
|
vendorActInfoMap[actStoreSku.VendorActID] = append(vendorActInfoMap[actStoreSku.VendorActID], actStoreSku)
|
|
|
|
|
if model.IsSyncStatusNeedCreate(actStoreSku.SyncStatus) {
|
|
|
|
|
actStoreSkuList4Create = append(actStoreSkuList4Create, actStoreSku)
|
|
|
|
|
} else if model.IsSyncStatusNeedDelete(actStoreSku.SyncStatus) {
|
|
|
|
|
vendorActID := actStoreSku.VendorActID
|
|
|
|
|
if vendorActID == "" {
|
|
|
|
|
vendorActID = act.VendorActID
|
|
|
|
|
}
|
|
|
|
|
deleteActInfoMap[vendorActID] = append(deleteActInfoMap[vendorActID], actStoreSku)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
err = func() (err error) {
|
|
|
|
|
if model.IsSyncStatusNeedCreate(act.SyncStatus) {
|
|
|
|
|
if act.VendorActID, err = createSkuAct(ctx, act, actStoreSkuList4Create); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
updateItems = append(updateItems, partner.ActStoreSku2Update(actStoreSkuList4Create, model.SyncFlagNewMask)...)
|
|
|
|
|
updateItems = append(updateItems, partner.Act2Update(act, model.SyncFlagNewMask))
|
|
|
|
|
} else if model.IsSyncStatusNeedDelete(act.SyncStatus) {
|
|
|
|
|
for vendorActID := range vendorActInfoMap {
|
|
|
|
|
if vendorActID != "" {
|
|
|
|
|
if err = cancelSkuAct(ctx, act.Type, vendorActID); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for _, actStoreSkuList := range vendorActInfoMap {
|
|
|
|
|
updateItems = append(updateItems, partner.ActStoreSku2Update(actStoreSkuList, model.SyncFlagDeletedMask)...)
|
|
|
|
|
}
|
|
|
|
|
updateItems = append(updateItems, partner.Act2Update(act, model.SyncFlagDeletedMask))
|
|
|
|
|
} else if model.IsSyncStatusNeedUpdate(act.SyncStatus) {
|
|
|
|
|
// globals.SugarLogger.Debug(utils.Format4Output(updateItems, false))
|
|
|
|
|
for vendorActID := range deleteActInfoMap {
|
|
|
|
|
if vendorActID != "" {
|
|
|
|
|
if len(vendorActInfoMap[vendorActID]) == len(deleteActInfoMap[vendorActID]) {
|
|
|
|
|
err = cancelSkuAct(ctx, act.Type, vendorActID)
|
|
|
|
|
} else {
|
|
|
|
|
err = cancelSkuActSkus(ctx, act.Type, vendorActID, deleteActInfoMap[vendorActID])
|
|
|
|
|
}
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
updateItems = append(updateItems, partner.ActStoreSku2Update(deleteActInfoMap[vendorActID], model.SyncFlagDeletedMask)...)
|
|
|
|
|
}
|
|
|
|
|
if len(actStoreSkuList4Create) > 0 {
|
|
|
|
|
if _, err = createSkuAct(ctx, act, actStoreSkuList4Create); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
updateItems = append(updateItems, partner.ActStoreSku2Update(actStoreSkuList4Create, model.SyncFlagNewMask)...)
|
|
|
|
|
}
|
|
|
|
|
updateItems = append(updateItems, partner.Act2Update(act, model.SyncFlagModifiedMask))
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}()
|
|
|
|
|
db := dao.GetDB()
|
|
|
|
|
_, err2 := dao.BatchUpdateEntityByKV(db, updateItems)
|
|
|
|
|
if err == nil {
|
|
|
|
|
err = err2
|
|
|
|
|
}
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|