Merge remote-tracking branch 'origin/mark' into su

This commit is contained in:
苏尹岚
2020-01-07 11:04:54 +08:00
57 changed files with 2348 additions and 934 deletions

View File

@@ -13,6 +13,7 @@ import (
"git.rosy.net.cn/baseapi/platformapi/jdapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/baseapi/utils/errlist"
"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"
@@ -39,6 +40,12 @@ var (
actMap jxutils.SyncMapWithTimeout
)
// 是否按单一门店商品维度创建活动
func isCreateTypeSingleStoreSku() bool {
return false
// return !globals.IsProductEnv()
}
func splitPromotionSku(skus []*jdapi.PromotionSku, maxCount int) (skusList [][]*jdapi.PromotionSku) {
for {
skusLen := len(skus)
@@ -213,18 +220,35 @@ func createSkuAct(ctx *jxcontext.Context, act *model.Act2, actStoreSku []*model.
return vendorActID, err
}
func cancelSkuActSkus(ctx *jxcontext.Context, vendorOrgCode string, actType int, vendorActID string, actStoreSku []*model.ActStoreSku2) (err error) {
func proxyCreateSkuAct(ctx *jxcontext.Context, act *model.Act2, actStoreSku []*model.ActStoreSku2) (vendorActID string, err error) {
if isCreateTypeSingleStoreSku() && len(actStoreSku) > 1 {
errList := errlist.New()
vendorActID := act.VendorActID
act.VendorActID = "placeholder"
for _, v := range actStoreSku {
_, err := createSkuAct(ctx, act, []*model.ActStoreSku2{v})
errList.AddErr(err)
}
act.VendorActID = vendorActID
err = errList.GetErrListAsOne()
} else {
vendorActID, err = createSkuAct(ctx, act, actStoreSku)
}
return vendorActID, err
}
func cancelSkuActSkus(ctx *jxcontext.Context, act *model.Act2, vendorActID string, actStoreSku []*model.ActStoreSku2) (err error) {
if vendorActID != "" {
if skuList := storeSku2Jd(actStoreSku, model.IsSyncStatusNeedDelete); len(skuList) > 0 {
err = CancelPromotionSku(vendorOrgCode, actType, utils.Str2Int64(vendorActID), "", skuList, ctx.GetTrackInfo())
err = CancelPromotionSku(act.VendorOrgCode, act.Type, utils.Str2Int64(vendorActID), "", skuList, ctx.GetTrackInfo())
}
}
return err
}
func cancelSkuAct(ctx *jxcontext.Context, vendorOrgCode string, actType int, vendorActID string) (err error) {
func cancelSkuAct(ctx *jxcontext.Context, act *model.Act2, vendorActID string) (err error) {
if vendorActID != "" {
err = CancelPromotion(vendorOrgCode, actType, utils.Str2Int64(vendorActID), "", ctx.GetTrackInfo())
err = CancelPromotion(act.VendorOrgCode, act.Type, utils.Str2Int64(vendorActID), "", ctx.GetTrackInfo())
}
return err
}
@@ -237,67 +261,80 @@ func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITa
var updateItems []*dao.KVUpdateItem
actStoreSkuMap := partner.SplitActStoreSku(actStoreSkuList)
actSkuCount := 0
toDelActSkuCount := 0
for storeID := range actStoreSkuMap {
for _, actStoreSku := range actStoreSkuMap[storeID] {
vendorActInfoMap[actStoreSku.VendorActID] = append(vendorActInfoMap[actStoreSku.VendorActID], actStoreSku)
vendorActID := actStoreSku.VendorActID
if vendorActID == "" {
vendorActID = act.VendorActID
}
actSkuCount++
vendorActInfoMap[vendorActID] = append(vendorActInfoMap[vendorActID], actStoreSku)
if model.IsSyncStatusDelete(actStoreSku.SyncStatus) {
vendorActID := actStoreSku.VendorActID
if vendorActID == "" {
vendorActID = act.VendorActID
}
toDelActSkuCount++
deleteActInfoMap[vendorActID] = append(deleteActInfoMap[vendorActID], actStoreSku)
} else if model.IsSyncStatusNew(actStoreSku.SyncStatus) {
actStoreSkuList4Create = append(actStoreSkuList4Create, actStoreSku)
}
}
}
// 如果是全删,直接添加删除(即取消)标志
if actSkuCount == toDelActSkuCount {
act.SyncStatus |= model.SyncFlagDeletedMask
}
db := dao.GetDB()
err = func() (err error) {
if model.IsSyncStatusDelete(act.SyncStatus) {
errList := errlist.New()
for vendorActID := range vendorActInfoMap {
if vendorActID != "" {
if err = cancelSkuAct(ctx, act.VendorOrgCode, act.Type, vendorActID); err != nil {
return err
if err = cancelSkuAct(ctx, act, vendorActID); err == nil {
updateItems = append(updateItems, partner.ActStoreSku2Update(ctx, vendorActInfoMap[vendorActID], model.SyncFlagModifiedMask)...)
} else {
errList.AddErr(err)
}
}
}
for _, actStoreSkuList := range vendorActInfoMap {
updateItems = append(updateItems, partner.ActStoreSku2Update(ctx, actStoreSkuList, model.SyncFlagModifiedMask)...)
if err = errList.GetErrListAsOne(); err == nil {
updateItems = append(updateItems, partner.Act2Update(ctx, act, model.SyncFlagModifiedMask))
}
updateItems = append(updateItems, partner.Act2Update(ctx, act, model.SyncFlagModifiedMask))
} else if model.IsSyncStatusNew(act.SyncStatus) {
if act.VendorActID, err = createSkuAct(ctx, act, actStoreSkuList4Create); err != nil {
if act.VendorActID, err = proxyCreateSkuAct(ctx, act, actStoreSkuList4Create); err == nil {
updateItems = append(updateItems, partner.ActStoreSku2Update(ctx, actStoreSkuList4Create, model.SyncFlagNewMask)...)
updateItems = append(updateItems, partner.Act2Update(ctx, act, model.SyncFlagNewMask))
} else {
if act.VendorActID != "" {
actMap := partner.Act2ActMap(act)
dao.UpdateEntity(db, actMap, "VendorActID")
dao.UpdateEntity(db, actMap, model.FieldVendorActID)
}
return err
}
updateItems = append(updateItems, partner.ActStoreSku2Update(ctx, actStoreSkuList4Create, model.SyncFlagNewMask)...)
updateItems = append(updateItems, partner.Act2Update(ctx, act, model.SyncFlagNewMask))
} else if model.IsSyncStatusUpdate(act.SyncStatus) {
// globals.SugarLogger.Debug(utils.Format4Output(updateItems, false))
errList := errlist.New()
if len(actStoreSkuList4Create) > 0 {
if _, err = createSkuAct(ctx, act, actStoreSkuList4Create); err != nil {
return err
if _, err = proxyCreateSkuAct(ctx, act, actStoreSkuList4Create); err == nil {
updateItems = append(updateItems, partner.ActStoreSku2Update(ctx, actStoreSkuList4Create, model.SyncFlagNewMask)...)
} else {
errList.AddErr(err)
}
updateItems = append(updateItems, partner.ActStoreSku2Update(ctx, actStoreSkuList4Create, model.SyncFlagNewMask)...)
}
for vendorActID := range deleteActInfoMap {
if vendorActID != "" {
if len(vendorActInfoMap[vendorActID]) == len(deleteActInfoMap[vendorActID]) {
// todo 如果这个取消导致了整活动被取消的话,怎么设置京西活动的状态
err = cancelSkuAct(ctx, act.VendorOrgCode, act.Type, vendorActID)
err = cancelSkuAct(ctx, act, vendorActID)
} else {
err = cancelSkuActSkus(ctx, act.VendorOrgCode, act.Type, vendorActID, deleteActInfoMap[vendorActID])
err = cancelSkuActSkus(ctx, act, vendorActID, deleteActInfoMap[vendorActID])
}
if err != nil {
return err
if err == nil {
updateItems = append(updateItems, partner.ActStoreSku2Update(ctx, deleteActInfoMap[vendorActID], model.SyncFlagDeletedMask)...)
} else {
errList.AddErr(err)
}
} else {
updateItems = append(updateItems, partner.ActStoreSku2Update(ctx, deleteActInfoMap[vendorActID], model.SyncFlagDeletedMask)...)
}
updateItems = append(updateItems, partner.ActStoreSku2Update(ctx, deleteActInfoMap[vendorActID], model.SyncFlagDeletedMask)...)
}
if err == nil {
if err = errList.GetErrListAsOne(); err == nil {
updateItems = append(updateItems, partner.Act2Update(ctx, act, model.SyncFlagModifiedMask))
}
}

View File

@@ -152,6 +152,7 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
} else {
storeParams.StationName = jxutils.ComposeStoreName(store.Name, model.VendorIDJD)
}
storeParams.StationName = utils.LimitUTF8StringLen(storeParams.StationName, jdapi.MaxStoreNameLen)
}
if store.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreAddress) != 0 {
storeParams.StationAddress = store.Address