From 1e4700057bdf16db320ba2c7cd270ab916844dff Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 10 Dec 2019 14:17:05 +0800 Subject: [PATCH] =?UTF-8?q?ActMap=E6=B7=BB=E5=8A=A0VendorOrgCode=20?= =?UTF-8?q?=E4=BA=AC=E4=B8=9C=E6=B4=BB=E5=8A=A8=E4=BE=9D=E8=B5=96VendorOrg?= =?UTF-8?q?Code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/act/act.go | 9 +-- business/jxstore/cms/store_sku.go | 2 +- business/jxutils/jxutils_act_test.go | 2 +- business/model/act.go | 8 ++- business/model/dao/act.go | 13 +++-- business/partner/purchase/jd/act.go | 83 ++++++++++++++-------------- controllers/act.go | 3 +- 7 files changed, 63 insertions(+), 57 deletions(-) diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index fb817a1a3..fd11e3907 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -115,7 +115,7 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Ac if !(len(vendorIDs) == 1 && vendorIDs[0] == model.VendorIDJD || act.Type == model.ActSkuFake) { effectActStoreSkuList, err := dao.GetEffectiveActStoreSkuInfo(db, 0, vendorIDs, storeIDs, skuIDs, act.BeginAt, act.EndAt) if err != nil { - globals.SugarLogger.Errorf("updateActPrice4StoreSkuNameNew can not get sku promotion info for error:%v", err) + globals.SugarLogger.Errorf("GetEffectiveActStoreSkuInfo can not get sku promotion info for error:%v", err) return nil, nil, nil, err } if len(effectActStoreSkuList) > 0 { @@ -402,7 +402,7 @@ func PreCreateAct(ctx *jxcontext.Context, act *model.Act, vendorIDs []int, actRu return preCreateActInfo, nil } -func CreateAct(ctx *jxcontext.Context, act *model.Act, vendorIDs []int, actRules []*ActOrderRuleParam, actStoreSku []*ActStoreSkuParam, isAsync bool) (hint string, err error) { +func CreateAct(ctx *jxcontext.Context, act *model.Act, vendorIDs []int, vendorOrgCode string, actRules []*ActOrderRuleParam, actStoreSku []*ActStoreSkuParam, isAsync bool) (hint string, err error) { if err = checkActValidation(act, vendorIDs); err != nil { return "", err } @@ -437,8 +437,9 @@ func CreateAct(ctx *jxcontext.Context, act *model.Act, vendorIDs []int, actRules var actMapList []*model.ActMap for _, vendorID := range validVendorIDs { actMap := &model.ActMap{ - ActID: act.ID, - VendorID: vendorID, + ActID: act.ID, + VendorID: vendorID, + VendorOrgCode: vendorOrgCode, } if !(vendorID == model.VendorIDJX || act.Type == model.ActSkuFake) { actMap.SyncStatus = model.SyncFlagNewMask diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 85152f771..6327dc996 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -565,7 +565,7 @@ func updateActPrice4StoreSkuNameNew(db *dao.DaoDB, storeIDs, skuIDs []int, skuNa } actStoreSkuList, err := dao.GetEffectiveActStoreSkuInfo(db, 0, vendorIDs, storeIDs, skuIDs, time.Now(), time.Now()) if err != nil { - globals.SugarLogger.Errorf("updateActPrice4StoreSkuNameNew can not get sku promotion info for error:%v", err) + globals.SugarLogger.Errorf("GetEffectiveActStoreSkuInfo can not get sku promotion info for error:%v", err) return err } actStoreSkuMap4Act := jxutils.NewActStoreSkuMap(actStoreSkuList, true) diff --git a/business/jxutils/jxutils_act_test.go b/business/jxutils/jxutils_act_test.go index 19b36010d..79d4d1577 100644 --- a/business/jxutils/jxutils_act_test.go +++ b/business/jxutils/jxutils_act_test.go @@ -14,6 +14,6 @@ func TestGetActStoreSku(t *testing.T) { if err != nil { t.Fatal(err) } - storeSkuMap := NewActStoreSkuMap(actStoreSkuList, false) + storeSkuMap := jxutils.NewActStoreSkuMap(actStoreSkuList, false) t.Log(storeSkuMap.GetActStoreSku(1, 2, 3)) } diff --git a/business/model/act.go b/business/model/act.go index c644314fd..b4bfeee86 100644 --- a/business/model/act.go +++ b/business/model/act.go @@ -78,8 +78,9 @@ func (*Act) TableUnique() [][]string { type ActMap struct { ModelIDCULD - ActID int `orm:"column(act_id)" json:"actID"` - VendorID int `orm:"column(vendor_id)" json:"vendorID"` + ActID int `orm:"column(act_id)" json:"actID"` + VendorID int `orm:"column(vendor_id)" json:"vendorID"` + VendorOrgCode string `orm:"size(32)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空 VendorActID string `orm:"column(vendor_act_id);size(48)" json:"vendorActID"` SyncStatus int8 `orm:"default(2)" json:"syncStatus"` @@ -104,7 +105,8 @@ type Act2 struct { MapID int `orm:"column(map_id)"` Act - VendorID int `orm:"column(vendor_id)" json:"vendorID"` + VendorID int `orm:"column(vendor_id)" json:"vendorID"` + VendorOrgCode string `orm:"size(32)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空 VendorActID string `orm:"column(vendor_act_id);size(48)" json:"vendorActID"` SyncStatus int8 `orm:"default(2)" json:"syncStatus"` diff --git a/business/model/dao/act.go b/business/model/dao/act.go index 4b524e839..62981ba55 100644 --- a/business/model/dao/act.go +++ b/business/model/dao/act.go @@ -12,10 +12,11 @@ import ( ) type ActMapPureInfo struct { - VendorID int `orm:"column(vendor_id)" json:"vendorID"` - VendorActID string `orm:"column(vendor_act_id);size(48)" json:"vendorActID"` - SyncStatus int `orm:"default(2)" json:"syncStatus"` - Remark string `orm:"column(map_remark)" json:"remark"` + VendorID int `orm:"column(vendor_id)" json:"vendorID"` + VendorOrgCode string `orm:"size(32)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空 + VendorActID string `orm:"column(vendor_act_id);size(48)" json:"vendorActID"` + SyncStatus int `orm:"default(2)" json:"syncStatus"` + Remark string `orm:"column(map_remark)" json:"remark"` } type ActVendorInfo struct { @@ -41,7 +42,7 @@ func GetActVendorInfo(db *DaoDB, actID int, vendorIDs []int) (actMap map[int]*mo } sql := fmt.Sprintf(` SELECT t1.*, - t2.id map_id, t2.vendor_id, t2.vendor_act_id, t2.sync_status + t2.id map_id, t2.vendor_id, t2.vendor_org_code, t2.vendor_act_id, t2.sync_status FROM act t1 %s JOIN act_map t2 ON t2.act_id = t1.id AND t2.deleted_at = ?`, leftOrEmpty) sqlParams := []interface{}{ @@ -307,7 +308,7 @@ func QueryActs(db *DaoDB, actID int, offset, pageSize int, syncStatus int, keywo sql = ` SELECT t1.*, - t2.id map_id, t2.vendor_id, t2.vendor_act_id, t2.sync_status, t2.remark map_remark + t2.id map_id, t2.vendor_id, t2.vendor_org_code, t2.vendor_act_id, t2.sync_status, t2.remark map_remark FROM act t1 LEFT JOIN act_map t2 ON t2.act_id = t1.id AND t2.deleted_at = ? WHERE t1.id IN (` + GenQuestionMarks(len(idList)) + `) diff --git a/business/partner/purchase/jd/act.go b/business/partner/purchase/jd/act.go index b5377b58c..613ce32d2 100644 --- a/business/partner/purchase/jd/act.go +++ b/business/partner/purchase/jd/act.go @@ -65,12 +65,12 @@ func jdSkuActStatus2Jx(jdActState int) int { return jdSkuActStatusMap[jdActState] } -func CreatePromotionInfos(promotionType int, name string, beginDate, endDate time.Time, outInfoId, advertising, traceId string) (infoId int64, err error) { +func CreatePromotionInfos(vendorOrgCode string, promotionType int, name string, beginDate, endDate time.Time, outInfoId, advertising, traceId string) (infoId int64, err error) { if globals.EnableJdStoreWrite { if promotionType == model.ActSkuDirectDown { - infoId, err = getAPI("").CreatePromotionInfosSingle(name, beginDate, endDate, outInfoId, advertising, traceId) + infoId, err = getAPI(vendorOrgCode).CreatePromotionInfosSingle(name, beginDate, endDate, outInfoId, advertising, traceId) } else { - infoId, err = getAPI("").CreatePromotionInfosLimitTime(name, beginDate, endDate, outInfoId, advertising, traceId) + infoId, err = getAPI(vendorOrgCode).CreatePromotionInfosLimitTime(name, beginDate, endDate, outInfoId, advertising, traceId) } } else { infoId = jxutils.GenFakeID() @@ -81,26 +81,26 @@ func CreatePromotionInfos(promotionType int, name string, beginDate, endDate tim return infoId, err } -func CreatePromotionRules(promotionType int, infoId int64, outInfoId string, limitDevice, limitPin, limitCount, limitDaily int, traceId string) (err error) { +func CreatePromotionRules(vendorOrgCode string, promotionType int, infoId int64, outInfoId string, limitDevice, limitPin, limitCount, limitDaily int, traceId string) (err error) { if globals.EnableJdStoreWrite { if promotionType == model.ActSkuDirectDown { - err = getAPI("").CreatePromotionRulesSingle(infoId, outInfoId, limitDevice, limitPin, limitCount, limitDaily, traceId) + err = getAPI(vendorOrgCode).CreatePromotionRulesSingle(infoId, outInfoId, limitDevice, limitPin, limitCount, limitDaily, traceId) } else { - err = getAPI("").CreatePromotionRulesLimitTime(infoId, outInfoId, limitDevice, limitPin, limitCount, limitDaily, traceId) + err = getAPI(vendorOrgCode).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) { +func CreatePromotionSku(vendorOrgCode string, promotionType int, infoId int64, outInfoId string, skus []*jdapi.PromotionSku, traceId string) (skusResult []*jdapi.PromotionSku, err error) { if globals.EnableJdStoreWrite { for _, batchSkus := range splitPromotionSku(skus, jdapi.MaxPromotionSkuCount) { var tmpSkusResult []*jdapi.PromotionSku var tmpErr error if promotionType == model.ActSkuDirectDown { - tmpSkusResult, tmpErr = getAPI("").CreatePromotionSkuSingle(infoId, outInfoId, batchSkus, traceId) + tmpSkusResult, tmpErr = getAPI(vendorOrgCode).CreatePromotionSkuSingle(infoId, outInfoId, batchSkus, traceId) } else { - tmpSkusResult, tmpErr = getAPI("").CreatePromotionSkuLimitTime(infoId, outInfoId, batchSkus, traceId) + tmpSkusResult, tmpErr = getAPI(vendorOrgCode).CreatePromotionSkuLimitTime(infoId, outInfoId, batchSkus, traceId) } if err = tmpErr; err != nil { break @@ -111,14 +111,14 @@ func CreatePromotionSku(promotionType int, infoId int64, outInfoId string, skus return skusResult, err } -func CancelPromotionSku(promotionType int, infoId int64, outInfoId string, skus []*jdapi.PromotionSku, traceId string) (err error) { +func CancelPromotionSku(vendorOrgCode string, promotionType int, infoId int64, outInfoId string, skus []*jdapi.PromotionSku, traceId string) (err error) { if globals.EnableJdStoreWrite { for _, batchSkus := range splitPromotionSku(skus, jdapi.MaxPromotionSkuCount) { var tmpErr error if promotionType == model.ActSkuDirectDown { - tmpErr = getAPI("").CancelPromotionSkuSingle(infoId, outInfoId, batchSkus, traceId) + tmpErr = getAPI(vendorOrgCode).CancelPromotionSkuSingle(infoId, outInfoId, batchSkus, traceId) } else { - tmpErr = getAPI("").CancelPromotionSkuLimitTime(infoId, outInfoId, batchSkus, traceId) + tmpErr = getAPI(vendorOrgCode).CancelPromotionSkuLimitTime(infoId, outInfoId, batchSkus, traceId) } if err = tmpErr; err != nil { break @@ -128,45 +128,45 @@ func CancelPromotionSku(promotionType int, infoId int64, outInfoId string, skus return err } -func ConfirmPromotion(promotionType int, infoId int64, outInfoId, traceId string) (err error) { +func ConfirmPromotion(vendorOrgCode string, promotionType int, infoId int64, outInfoId, traceId string) (err error) { if globals.EnableJdStoreWrite { if promotionType == model.ActSkuDirectDown { - return getAPI("").ConfirmPromotionSingle(infoId, outInfoId, traceId) + return getAPI(vendorOrgCode).ConfirmPromotionSingle(infoId, outInfoId, traceId) } else { - return getAPI("").ConfirmPromotionLimitTime(infoId, outInfoId, traceId) + return getAPI(vendorOrgCode).ConfirmPromotionLimitTime(infoId, outInfoId, traceId) } } return err } -func CancelPromotion(promotionType int, infoId int64, outInfoId, traceId string) (err error) { +func CancelPromotion(vendorOrgCode string, promotionType int, infoId int64, outInfoId, traceId string) (err error) { if globals.EnableJdStoreWrite { if promotionType == model.ActSkuDirectDown { - err = getAPI("").CancelPromotionSingle(infoId, outInfoId, traceId) + err = getAPI(vendorOrgCode).CancelPromotionSingle(infoId, outInfoId, traceId) } else { - err = getAPI("").CancelPromotionLimitTime(infoId, outInfoId, traceId) + err = getAPI(vendorOrgCode).CancelPromotionLimitTime(infoId, outInfoId, traceId) } } return err } -func AdjustPromotionTime(promotionType int, infoId int64, outInfoId string, endDate time.Time, traceId string) (err error) { +func AdjustPromotionTime(vendorOrgCode string, promotionType int, infoId int64, outInfoId string, endDate time.Time, traceId string) (err error) { if globals.EnableJdStoreWrite { if promotionType == model.ActSkuDirectDown { - err = getAPI("").AdjustPromotionTimeSingle(infoId, outInfoId, endDate, traceId) + err = getAPI(vendorOrgCode).AdjustPromotionTimeSingle(infoId, outInfoId, endDate, traceId) } else { - err = getAPI("").AdjustPromotionTimeLimitTime(infoId, outInfoId, endDate, traceId) + err = getAPI(vendorOrgCode).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) { +func AdjustPromotionSku(vendorOrgCode string, promotionType int, infoId int64, outInfoId string, skus []*jdapi.PromotionSku, traceId string) (skusResult []*jdapi.PromotionSku, err error) { if globals.EnableJdStoreWrite { if promotionType == model.ActSkuDirectDown { - skusResult, err = getAPI("").AdjustPromotionSkuSingle(infoId, outInfoId, skus, traceId) + skusResult, err = getAPI(vendorOrgCode).AdjustPromotionSkuSingle(infoId, outInfoId, skus, traceId) } else { - skusResult, err = getAPI("").AdjustPromotionSkuLimitTime(infoId, outInfoId, skus, traceId) + skusResult, err = getAPI(vendorOrgCode).AdjustPromotionSkuLimitTime(infoId, outInfoId, skus, traceId) } } return skusResult, err @@ -194,12 +194,12 @@ func createSkuAct(ctx *jxcontext.Context, act *model.Act2, actStoreSku []*model. if act.VendorActID == "" { outInfoID = utils.Int2Str(act.ID) } - infoID, err2 := CreatePromotionInfos(act.Type, act.GetRealActName(), act.BeginAt, act.EndAt, outInfoID, act.Advertising, traceInfo) + infoID, err2 := CreatePromotionInfos(act.VendorOrgCode, act.Type, act.GetRealActName(), act.BeginAt, act.EndAt, outInfoID, act.Advertising, traceInfo) if err = err2; err == nil { vendorActID = utils.Int64ToStr(infoID) - if err = CreatePromotionRules(act.Type, infoID, "", act.LimitUser, act.LimitUser, act.LimitCount, 1, traceInfo); err == nil { - if _, err = CreatePromotionSku(act.Type, infoID, utils.Int2Str(act.ID), storeSku2Jd(actStoreSku, model.IsSyncStatusNeedCreate), traceInfo); err == nil { - if err = ConfirmPromotion(act.Type, infoID, "", traceInfo); err == nil { + if err = CreatePromotionRules(act.VendorOrgCode, act.Type, infoID, "", act.LimitUser, act.LimitUser, act.LimitCount, 1, traceInfo); err == nil { + if _, err = CreatePromotionSku(act.VendorOrgCode, act.Type, infoID, utils.Int2Str(act.ID), storeSku2Jd(actStoreSku, model.IsSyncStatusNeedCreate), traceInfo); err == nil { + if err = ConfirmPromotion(act.VendorOrgCode, act.Type, infoID, "", traceInfo); err == nil { for _, v := range actStoreSku { v.VendorActID = vendorActID } @@ -207,24 +207,24 @@ func createSkuAct(ctx *jxcontext.Context, act *model.Act2, actStoreSku []*model. } } if err != nil { - CancelPromotion(act.Type, infoID, "", traceInfo) + CancelPromotion(act.VendorOrgCode, act.Type, infoID, "", traceInfo) } } return vendorActID, err } -func cancelSkuActSkus(ctx *jxcontext.Context, actType int, vendorActID string, actStoreSku []*model.ActStoreSku2) (err error) { +func cancelSkuActSkus(ctx *jxcontext.Context, vendorOrgCode string, actType int, vendorActID string, actStoreSku []*model.ActStoreSku2) (err error) { if vendorActID != "" { if skuList := storeSku2Jd(actStoreSku, model.IsSyncStatusNeedDelete); len(skuList) > 0 { - err = CancelPromotionSku(actType, utils.Str2Int64(vendorActID), "", skuList, ctx.GetTrackInfo()) + err = CancelPromotionSku(vendorOrgCode, actType, utils.Str2Int64(vendorActID), "", skuList, ctx.GetTrackInfo()) } } return err } -func cancelSkuAct(ctx *jxcontext.Context, actType int, vendorActID string) (err error) { +func cancelSkuAct(ctx *jxcontext.Context, vendorOrgCode string, actType int, vendorActID string) (err error) { if vendorActID != "" { - err = CancelPromotion(actType, utils.Str2Int64(vendorActID), "", ctx.GetTrackInfo()) + err = CancelPromotion(vendorOrgCode, actType, utils.Str2Int64(vendorActID), "", ctx.GetTrackInfo()) } return err } @@ -256,7 +256,7 @@ func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITa if model.IsSyncStatusDelete(act.SyncStatus) { for vendorActID := range vendorActInfoMap { if vendorActID != "" { - if err = cancelSkuAct(ctx, act.Type, vendorActID); err != nil { + if err = cancelSkuAct(ctx, act.VendorOrgCode, act.Type, vendorActID); err != nil { return err } } @@ -287,9 +287,9 @@ func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITa if vendorActID != "" { if len(vendorActInfoMap[vendorActID]) == len(deleteActInfoMap[vendorActID]) { // todo 如果这个取消导致了整活动被取消的话,怎么设置京西活动的状态 - err = cancelSkuAct(ctx, act.Type, vendorActID) + err = cancelSkuAct(ctx, act.VendorOrgCode, act.Type, vendorActID) } else { - err = cancelSkuActSkus(ctx, act.Type, vendorActID, deleteActInfoMap[vendorActID]) + err = cancelSkuActSkus(ctx, act.VendorOrgCode, act.Type, vendorActID, deleteActInfoMap[vendorActID]) } if err != nil { return err @@ -325,7 +325,7 @@ func (c *PurchaseHandler) onActMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.C if _, ok := actMap.Load(intPromotionID); !ok { utils.CallFuncAsync(func() { if !partner.CurActManager.IsVendorActExist(jxcontext.AdminCtx, promotionID, model.VendorIDJD) { - act, actStoreSkuList, err := getActFromJD(promotionID) + act, actStoreSkuList, err := getActFromJD(appKey2OrgCode(msg.AppKey), promotionID) if err == nil && len(actStoreSkuList) > 0 { _, err = partner.CurActManager.CreateActFromVendor(jxcontext.AdminCtx, act, actStoreSkuList) } @@ -341,8 +341,8 @@ func (c *PurchaseHandler) onActMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.C return retVal } -func getActFromJD(promotionID string) (act *model.Act2, actStoreSkuList []*model.ActStoreSku2, err error) { - result, err := getAPI("").QueryPromotionInfo(utils.Str2Int64(promotionID)) +func getActFromJD(vendorOrgCode, promotionID string) (act *model.Act2, actStoreSkuList []*model.ActStoreSku2, err error) { + result, err := getAPI(vendorOrgCode).QueryPromotionInfo(utils.Str2Int64(promotionID)) if err == nil && len(result.SkuResultList) > 0 { act = &model.Act2{ Act: model.Act{ @@ -357,8 +357,9 @@ func getActFromJD(promotionID string) (act *model.Act2, actStoreSkuList []*model LimitDaily: result.SkuResultList[0].LimitDaily, LimitCount: 1, }, - VendorID: model.VendorIDJD, - VendorActID: promotionID, + VendorID: model.VendorIDJD, + VendorOrgCode: vendorOrgCode, + VendorActID: promotionID, } if utils.IsTimeZero(act.BeginAt) { act.BeginAt = result.BeginTime.GoTime() diff --git a/controllers/act.go b/controllers/act.go index 9163a28fb..d1f88fb30 100644 --- a/controllers/act.go +++ b/controllers/act.go @@ -68,6 +68,7 @@ func (c *ActController) PreCreateAct() { // @Param name formData string true "活动名,必须唯一(所以名子上最好带上日期)" // @Param type formData int true "活动类型,3:直降,4:秒杀(美团当前不支持秒杀)" // @Param vendorIDs formData string true "厂商ID,当前只支持,京东:0,京西(用于记录活动信息):99" +// @Param vendorOrgCode formData string false "厂商内组织代码" // @Param beginAt formData string true "开始日期" // @Param endAt formData string true "结束日期" // @Param pricePercentage formData int true "活动价格比例" @@ -104,7 +105,7 @@ func (c *ActController) CreateAct() { Advertising: params.Advertising, Remark: params.Remark, } - retVal, err = act.CreateAct(params.Ctx, actObj, vendorIDs, nil, actStoreSkuList, params.IsAsync) + retVal, err = act.CreateAct(params.Ctx, actObj, vendorIDs, params.VendorOrgCode, nil, actStoreSkuList, params.IsAsync) } } return retVal, "", err