From 4c484a62808dde18095f7d68d199480cf58dc2b3 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 14 Aug 2019 11:12:33 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=8E=BB=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=8C=E4=B8=BB=E8=A6=81=E6=98=AFpromotion?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/cms.go | 2 - business/jxstore/cms/store_sku.go | 6 +- business/jxstore/promotion/jd_promotion.go | 1111 ----------------- .../jxstore/promotion/jd_promotion_test.go | 15 - business/jxstore/promotion/promotion.go | 89 -- business/jxstore/tempop/tempop.go | 292 +++-- business/model/dao/promotion.go | 59 - business/model/legacymodel2/jdorder.go | 18 - business/model/promotion.go | 86 -- controllers/jd_callback.go | 10 +- controllers/promotion.go | 214 ---- controllers/temp_op.go | 64 +- globals/beegodb/beegodb.go | 1 - globals/globals.go | 2 - main.go | 2 - routers/commentsRouter_controllers.go | 81 -- routers/router.go | 5 - 17 files changed, 179 insertions(+), 1878 deletions(-) delete mode 100644 business/jxstore/promotion/jd_promotion.go delete mode 100644 business/jxstore/promotion/jd_promotion_test.go delete mode 100644 business/jxstore/promotion/promotion.go delete mode 100644 business/model/dao/promotion.go delete mode 100644 business/model/legacymodel2/jdorder.go delete mode 100644 business/model/promotion.go delete mode 100644 controllers/promotion.go diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index 9fea2f071..c2fe56f6d 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -73,8 +73,6 @@ func InitServiceInfo(version string, buildTime time.Time, gitCommit string) { "vendorName": model.VendorChineseNames, "orderStatus": model.OrderStatusName, "waybillStatus": model.WaybillStatusName, - // "bankName": model.BankName, - "promotionStatusName": model.PromotionStatusName, "orderTypeName": model.OrderTypeName, "taskStatusName": tasksch.TaskStatusName, "opRequestTypeName": model.RequestTypeName, diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 75dc56fea..7769ca8a2 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -433,11 +433,7 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bo storeIDs, skuIDs = GetStoreAndSkuIDsFromInfo(skuNamesInfo) } beginTime := time.Now() - if globals.EnableNewAct { - err = updateActPrice4StoreSkuNameNew(db, storeIDs, skuIDs, skuNamesInfo) - } else { - // err = updateActPrice4StoreSkuName(db, storeIDs, skuIDs, skuNamesInfo) - } + err = updateActPrice4StoreSkuNameNew(db, storeIDs, skuIDs, skuNamesInfo) globals.SugarLogger.Debugf("GetStoresSkusNew updateActPrice4StoreSkuName:%v", time.Now().Sub(beginTime)) if !isFocus { err = updateUnitPrice4StoreSkuNameNew(db, skuNamesInfo) diff --git a/business/jxstore/promotion/jd_promotion.go b/business/jxstore/promotion/jd_promotion.go deleted file mode 100644 index 8a65a36ed..000000000 --- a/business/jxstore/promotion/jd_promotion.go +++ /dev/null @@ -1,1111 +0,0 @@ -package promotion - -import ( - "encoding/gob" - "errors" - "fmt" - "strings" - "time" - - "git.rosy.net.cn/baseapi/platformapi/jdapi" - "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/jxutils" - "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" - "git.rosy.net.cn/jx-callback/business/jxutils/storeskulock" - "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" - "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/business/model/dao" - "git.rosy.net.cn/jx-callback/globals" - "git.rosy.net.cn/jx-callback/globals/api" -) - -const ( - PromotionTypeNormal = 1 - PromotionTypeDirectDown = 3 - PromotionTypeLimitedTime = 4 -) - -const ( - PriceTypePrice = 1 // 绝对价格 - PriceTypePercentage = 2 // 百分比 -) - -const ( - PromotionLimitedTimeMinPercentage = 79 -) - -const ( - colSkuIDIndex = 0 - colSkuPriceIndex = 3 - colNameIndex = 5 - colStoreIDIndex = 6 - colBeginAtIndex = 9 - colEndAtIndex = 10 -) - -const ( - DefaultLimitSkuCount = 100 - MaxPromotionSkuCount = jdapi.MaxPromotionSkuCount -) - -const ( - defSearchDays = 7 - stockRefreshGap = 5 * time.Minute - userName = "jdpromotion" -) - -const ( - keyPromotionSource = "promotionSource" - keyPromotionStatus = "promotionStatus" - keyLimitDevice = "limitDevice" - keyLimitPin = "limitPin" - keyLimitCount = "limitCount" - keyLimitDaily = "limitDaily" -) -const ( - PromotionSourceOpenPlatform = "开放平台" -) - -type SkuPrice struct { - SkuID int `json:"skuID"` - PriceType int `json:"priceType"` - Price int `json:"price"` // 分,这个不是单价,是这个sku的活动价 - LimitSkuCount int `json:"limitSkuCount"` - IsLock int8 `json:"isLock"` - - EarningPrice int `json:"earningPrice"` // 活动商品设置,结算给门店老板的钱 -} - -type tPromotionItemInfo struct { - SkuID int `orm:"column(sku_id)"` - IsLock int8 // 是否锁定门店商品信息 - EndAt time.Time - JdStoreID string `orm:"column(vendor_store_id)"` - JdSkuID int64 `orm:"column(jd_id)"` -} - -type tSimpleStore struct { - StoreID int `orm:"column(store_id)" json:"storeID"` - Name string `orm:"column(name)" json:"name"` -} - -type PromotionParams struct { - Name string - Advertising string - Type int - BeginAt time.Time - EndAt time.Time - StoreIDs []int - SkuPrices []*SkuPrice -} - -type tStoreSkuBindExt struct { - model.StoreSkuBind - JdSkuID int64 `orm:"column(jd_id)"` - VendorStoreID string `orm:"column(vendor_store_id)"` -} - -type tPromotionInfo struct { - model.Promotion - StoreStr string `orm:"column(store_str)" json:"-"` - SkuPriceStr string `orm:"column(sku_price_str)" json:"-"` - Stores []*tSimpleStore `orm:"-" json:"stores"` - SkuPrices []*SkuPrice `orm:"-" json:"skuPrices"` -} - -var ( - ErrEmptySkus = errors.New("空sku或指定的SKU没有被门店认领,请检查") -) - -var ( - jd2jxPromotionStatusMap = map[int]int{ - jdapi.PromotionStateNotConfirm: model.PromotionStatusRemoteCreated, - jdapi.PromotionStateConfirmed: model.PromotionStatusRemoteCreated, - jdapi.PromotionStateCanceled: model.PromotionStatusCanceled, - jdapi.PromotionStateEnded: model.PromotionStatusEnded, - } -) - -var ( - ErrLimitDeviceIsInvalid = errors.New("必须指定一个limitCount,当limitPin或limitDevice不都为0时") -) - -type JdPromotionHandler interface { - CreatePromotionInfos(name string, beginDate, endDate time.Time, outInfoId, advertising string) (infoId int64, err error) - CreatePromotionRules(infoId int64, outInfoId string, limitDevice, limitPin, limitCount, limitDaily int) (err error) - CreatePromotionSku(infoId int64, outInfoId string, skus []*jdapi.PromotionSku) (skusResult []*jdapi.PromotionSku, err error) - ConfirmPromotion(infoId int64, outInfoId string) (err error) - CancelPromotion(infoId int64, outInfoId string) (err error) -} - -type JdDirectDownHandler struct { -} - -func (p *JdDirectDownHandler) CreatePromotionInfos(name string, beginDate, endDate time.Time, outInfoId, advertising string) (infoId int64, err error) { - return api.JdAPI.CreatePromotionInfosSingle(name, beginDate, endDate, outInfoId, advertising, "") -} -func (p *JdDirectDownHandler) CreatePromotionRules(infoId int64, outInfoId string, limitDevice, limitPin, limitCount, limitDaily int) (err error) { - return api.JdAPI.CreatePromotionRulesSingle(infoId, outInfoId, limitDevice, limitPin, limitCount, limitDaily, "") -} -func (p *JdDirectDownHandler) CreatePromotionSku(infoId int64, outInfoId string, skus []*jdapi.PromotionSku) (skusResult []*jdapi.PromotionSku, err error) { - return api.JdAPI.CreatePromotionSkuSingle(infoId, outInfoId, skus, "") -} -func (p *JdDirectDownHandler) ConfirmPromotion(infoId int64, outInfoId string) (err error) { - return api.JdAPI.ConfirmPromotionSingle(infoId, outInfoId, "") -} -func (p *JdDirectDownHandler) CancelPromotion(infoId int64, outInfoId string) (err error) { - return api.JdAPI.CancelPromotionSingle(infoId, outInfoId, "") -} - -type JdLimitedTimeHandler struct { -} - -func (p *JdLimitedTimeHandler) CreatePromotionInfos(name string, beginDate, endDate time.Time, outInfoId, advertising string) (infoId int64, err error) { - return api.JdAPI.CreatePromotionInfosLimitTime(name, beginDate, endDate, outInfoId, advertising, "") -} -func (p *JdLimitedTimeHandler) CreatePromotionRules(infoId int64, outInfoId string, limitDevice, limitPin, limitCount, limitDaily int) (err error) { - return api.JdAPI.CreatePromotionRulesLimitTime(infoId, outInfoId, limitDevice, limitPin, limitCount, limitDaily, "") -} -func (p *JdLimitedTimeHandler) CreatePromotionSku(infoId int64, outInfoId string, skus []*jdapi.PromotionSku) (skusResult []*jdapi.PromotionSku, err error) { - return api.JdAPI.CreatePromotionSkuLimitTime(infoId, outInfoId, skus, "") -} -func (p *JdLimitedTimeHandler) ConfirmPromotion(infoId int64, outInfoId string) (err error) { - return api.JdAPI.ConfirmPromotionLimitTime(infoId, outInfoId, "") -} -func (p *JdLimitedTimeHandler) CancelPromotion(infoId int64, outInfoId string) (err error) { - return api.JdAPI.CancelPromotionLimitTime(infoId, outInfoId, "") -} - -type JdNullHandler struct { -} - -func (p *JdNullHandler) CreatePromotionInfos(name string, beginDate, endDate time.Time, outInfoId, advertising string) (infoId int64, err error) { - return jxutils.GenFakeID(), nil -} -func (p *JdNullHandler) CreatePromotionRules(infoId int64, outInfoId string, limitDevice, limitPin, limitCount, limitDaily int) (err error) { - return nil -} -func (p *JdNullHandler) CreatePromotionSku(infoId int64, outInfoId string, skus []*jdapi.PromotionSku) (skusResult []*jdapi.PromotionSku, err error) { - return nil, nil -} -func (p *JdNullHandler) ConfirmPromotion(infoId int64, outInfoId string) (err error) { - return nil -} -func (p *JdNullHandler) CancelPromotion(infoId int64, outInfoId string) (err error) { - return nil -} - -func init() { - gob.Register(&PromotionParams{}) - gob.Register([]*SkuPrice{}) -} - -func scheduleDailyRoutine(isFirst bool) { - executeTime := utils.GetCurDate().Add(24*time.Hour + 5*time.Minute) // 凌晨00:05执行 - duration := executeTime.Sub(time.Now()) - if isFirst && duration > 1*time.Hour { - UpdateJdPromotionStatus() - } - // globals.SugarLogger.Debug(duration) - utils.AfterFuncWithRecover(duration, func() { - UpdateJdPromotionStatus() - scheduleDailyRoutine(false) - }) -} - -func scheduleRoutine(isFirst bool) { - if isFirst { - utils.CallFuncAsync(func() { - RefreshJdLockStoreSku() - RefreshJdStoreSkuStock(0, nil) - }) - } - utils.AfterFuncWithRecover(stockRefreshGap, func() { - RefreshJdLockStoreSku() - RefreshJdStoreSkuStock(0, nil) - scheduleRoutine(false) - }) -} - -func Init() { - scheduleDailyRoutine(true) - // scheduleRoutine(true) -} - -func CreateJdPromotion(ctx *jxcontext.Context, vendorID int, isIDJd bool, isAsync, isContinueWhenError bool, vendorPromotionID string, params *PromotionParams, mapData map[string]interface{}) (hint string, err error) { - if vendorID != model.VendorIDJD && vendorID != model.VendorIDJX { - return "", fmt.Errorf("当前只支持京西与京东活动") - } - if vendorPromotionID != "" && len(vendorPromotionID) != len("14863853") { - return "", fmt.Errorf("%s看起来不像是一个有效的京东活动ID,请仔细检查一下", vendorPromotionID) - } - if len(params.SkuPrices) == 0 { - return "", ErrEmptySkus - } - limitDaily := 1 - if limitDaily2, ok := mapData[keyLimitDaily]; ok { - limitDaily = jxutils.Int2OneZero(limitDaily2.(int)) - } - limitPin := 1 - if limitPin2, ok := mapData[keyLimitPin]; ok { - limitPin = jxutils.Int2OneZero(limitPin2.(int)) - } - limitDevice := 1 - if limitDevice2, ok := mapData[keyLimitDevice]; ok { - limitDevice = jxutils.Int2OneZero(limitDevice2.(int)) - } - limitCount := 1 - if limitCount2, ok := mapData[keyLimitCount]; ok { - limitCount = limitCount2.(int) - } - if (limitDevice == 1 || limitPin == 1) && limitCount == 0 { - return "", ErrLimitDeviceIsInvalid - } - - userName := ctx.GetUserName() - db := dao.GetDB() - modifyPricesList := make(map[int][]*jdapi.SkuPriceInfo) - promotionPrices := make([]*jdapi.PromotionSku, len(params.StoreIDs)*len(params.SkuPrices)) - var jxStoreIDs []int - promotion := &model.Promotion{ - Name: params.Name, - Advertising: params.Advertising, - VendorID: vendorID, - Type: params.Type, - Status: model.PromotionStatusLocalCreated, - LimitDevice: int8(limitDevice), - LimitPin: int8(limitPin), - LimitCount: limitCount, - LimitDaily: int8(limitDaily), - BeginAt: params.BeginAt, - EndAt: params.EndAt, - CreateType: model.PromotionCreateTypeByJX, - Source: PromotionSourceOpenPlatform, - } - - skuIDs := make([]int, len(params.SkuPrices)) - skuPriceMap := make(map[int64]*SkuPrice) - for k, v := range params.SkuPrices { - skuIDs[k] = v.SkuID - skuPriceMap[int64(v.SkuID)] = v - } - if len(skuIDs) == 0 { - return "", fmt.Errorf("商品列表为空") - } - if vendorID == model.VendorIDJX { - conflictPromotion, err2 := dao.GetPromotionSkuPriceMap(db, model.VendorIDJX, params.StoreIDs, skuIDs, promotion.BeginAt, promotion.EndAt) - if err = err2; err != nil { - return "", err - } - if len(conflictPromotion) > 0 { - return "", fmt.Errorf("有冲突配置:%s", utils.Format4Output(conflictPromotion, false)) - } - } - if vendorPromotionID == "" { - if vendorID == model.VendorIDJD { - sql := ` - SELECT t1.*, t2.jd_id, t3.vendor_store_id - FROM store_sku_bind t1 - JOIN sku t2 ON t1.sku_id = t2.id - JOIN store_map t3 ON t1.store_id = t3.store_id AND t3.vendor_id = ? AND t3.deleted_at = ? - WHERE t1.deleted_at = ? - ` - sqlParam := []interface{}{ - model.VendorIDJD, - utils.DefaultTimeValue, - utils.DefaultTimeValue, - skuIDs, - } - if isIDJd { - sql += " AND t2.jd_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ") AND t3.vendor_store_id = ?" - } else { - sql += " AND t1.sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ") AND t1.store_id = ?" - } - - errMsg := "" - index := 0 - for _, storeID := range params.StoreIDs { - var skuBinds []*tStoreSkuBindExt - if err = dao.GetRows(db, &skuBinds, sql, append(sqlParam, storeID)...); err != nil { - return "", err - } - for k, skuBind := range skuBinds { - if k == 0 { - jxStoreIDs = append(jxStoreIDs, skuBind.StoreID) - } - mapSkuID := int64(skuBind.SkuID) - if isIDJd { - mapSkuID = skuBind.JdSkuID - } - promotionSkuPrice := skuPriceMap[mapSkuID] - if promotionSkuPrice.PriceType == PriceTypePercentage { - promotionSkuPrice.Price = skuBind.Price * promotionSkuPrice.Price / 100 - } - if vendorID != model.VendorIDJX && promotionSkuPrice.Price >= skuBind.Price { - errMsg += fmt.Sprintf("活动价大于等于原价,storeID:%d, skuID:%d\n", skuBind.StoreID, skuBind.SkuID) - } - if promotionSkuPrice.LimitSkuCount <= 0 { - promotionSkuPrice.LimitSkuCount = DefaultLimitSkuCount - } - if errMsg == "" { - if params.Type == PromotionTypeLimitedTime { - if skuBind.Price*PromotionLimitedTimeMinPercentage/100 < promotionSkuPrice.Price { - modifyPricesList[skuBind.StoreID] = append(modifyPricesList[skuBind.StoreID], &jdapi.SkuPriceInfo{ - OutSkuId: utils.Int2Str(skuBind.SkuID), - Price: promotionSkuPrice.Price*100/PromotionLimitedTimeMinPercentage + 5, - }) - } - } - promotionPrices[index] = &jdapi.PromotionSku{ - StationNo: utils.Str2Int64(skuBind.VendorStoreID), - SkuID: skuBind.JdSkuID, - PromotionPrice: int64(promotionSkuPrice.Price), - LimitSkuCount: promotionSkuPrice.LimitSkuCount, - } - index++ - } - } - } - if errMsg != "" { - return "", errors.New(errMsg) - } - promotionPrices = promotionPrices[:index] - if len(promotionPrices) == 0 { - return "", ErrEmptySkus - } - } else { - promotion.Status = model.PromotionStatusRemoteCreated - } - } else { - promotion.VendorPromotionID = vendorPromotionID - promotion.CreateType = model.PromotionCreateTypeByVendor - if status, ok := mapData[keyPromotionStatus]; ok { - promotion.Status = status.(int) - } else { - promotion.Status = model.PromotionStatusRemoteCreated - } - if source, ok := mapData[keyPromotionSource]; ok { - promotion.Source = source.(string) - } - } - - dao.WrapAddIDCULDEntity(promotion, userName) - // if promotion.Params, err = refutil.SerializeData(params); err != nil { - // return "", err - // } - // promotion.Params = string(utils.MustMarshal(params)) - dao.Begin(db) - defer func() { - dao.Rollback(db) - }() - - if err = dao.CreateEntity(db, promotion); err != nil { - return "", err - } - - for _, storeID := range params.StoreIDs { - promotionStore := &model.PromotionStore{ - PromotionID: promotion.ID, - StoreID: storeID, - } - dao.WrapAddIDCULDEntity(promotionStore, ctx.GetUserName()) - if err = dao.CreateEntity(db, promotionStore); err != nil { - return "", err - } - } - for _, skuPrice := range params.SkuPrices { - promotionSku := &model.PromotionSku{ - PromotionID: promotion.ID, - SkuID: skuPrice.SkuID, - PriceType: skuPrice.PriceType, - Price: skuPrice.Price, - LimitSkuCount: skuPrice.LimitSkuCount, - IsLock: skuPrice.IsLock, - EarningPrice: skuPrice.EarningPrice, - } - dao.WrapAddIDCULDEntity(promotionSku, ctx.GetUserName()) - if err = dao.CreateEntity(db, promotionSku); err != nil { - return "", err - } - } - - if vendorID != model.VendorIDJX && vendorPromotionID == "" { - promotionHandler := getPromotionHander(params.Type) - if promotionHandler == nil { - return "", errors.New("非法的活动类型") - } - infoId, err2 := promotionHandler.CreatePromotionInfos(params.Name, params.BeginAt, params.EndAt, utils.Int2Str(promotion.ID), params.Advertising) - if err = err2; err != nil { - return "", err - } - promotion.VendorPromotionID = utils.Int64ToStr(infoId) - if _, err = dao.UpdateEntity(db, promotion); err != nil { - return "", err - } - dao.Commit(db) - - rootTask := tasksch.NewSeqTask("CreateJdPromotion", ctx, - func(task *tasksch.SeqTask, step int, params2 ...interface{}) (result interface{}, err error) { - if step == 0 { - task1 := tasksch.NewParallelTask("CreateJdPromotion update sku price", nil, ctx, - func(t *tasksch.ParallelTask, batchItemList []interface{}, params2 ...interface{}) (retVal interface{}, err error) { - storeID := batchItemList[0].(int) - modifyPricesList := jxutils.SplitSlice(modifyPricesList[storeID], jdapi.MaxStoreSkuBatchSize) - for _, modifyPrices := range modifyPricesList { - modifyPrices2 := make([]*jdapi.SkuPriceInfo, len(modifyPrices)) - for k, v := range modifyPrices { - modifyPrices2[k] = v.(*jdapi.SkuPriceInfo) - } - if globals.EnableJdStoreWrite { - if _, err = api.JdAPI.UpdateVendorStationPrice(ctx.GetTrackInfo(), utils.Int2Str(storeID), "", modifyPrices2); err != nil { - return nil, err - } - } - } - return nil, nil - }, jxStoreIDs) - task.AddChild(task1).Run() - _, err = task1.GetResult(0) - } else if step == 1 { - err = promotionHandler.CreatePromotionRules(infoId, "", limitDevice, limitPin, limitCount, limitDaily) - } else if step == 2 { - task2 := tasksch.NewParallelTask("CreateJdPromotion CreatePromotionSku", tasksch.NewParallelConfig().SetBatchSize(MaxPromotionSkuCount).SetIsContinueWhenError(isContinueWhenError), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params2 ...interface{}) (retVal interface{}, err error) { - skus := make([]*jdapi.PromotionSku, len(batchItemList)) - for k, v := range batchItemList { - skus[k] = v.(*jdapi.PromotionSku) - } - _, err = promotionHandler.CreatePromotionSku(infoId, "", skus) - return nil, err - }, promotionPrices) - task.AddChild(task2).Run() - _, err = task2.GetResult(0) - if isContinueWhenError && err != nil { // todo isContinueWhenError为true时,强制忽略此步的错误 - err = nil - } - } else if step == 3 { - err = promotionHandler.ConfirmPromotion(infoId, "") - if err == nil { - db := dao.GetDB() - if _, err = dao.UpdateEntityLogically(db, promotion, map[string]interface{}{ - model.FieldStatus: model.PromotionStatusRemoteCreated, - }, ctx.GetUserName(), nil); err == nil { - RefreshJdPromotionLockStatus(ctx, promotion.ID) - } - } - } - if err != nil { - db := dao.GetDB() - dao.UpdateEntityLogically(db, promotion, map[string]interface{}{ - model.FieldStatus: model.PromotionStatusRemoteFailed, - model.FieldRemark: err.Error(), - }, ctx.GetUserName(), nil) - } - return nil, err - }, 4) - tasksch.HandleTask(rootTask, nil, true).Run() - if !isAsync { - _, err = rootTask.GetResult(0) - } - hint = rootTask.ID - } else { - dao.Commit(db) - } - return hint, err -} - -func GetJdPromotions(ctx *jxcontext.Context, keyword string, params map[string]interface{}, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) { - sql := ` - SELECT SQL_CALC_FOUND_ROWS - t1.id, - t1.created_at, - t1.updated_at, - t1.last_operator, - t1.vendor_id, - t1.name, - t1.type, - t1.status, - t1.vendor_promotion_id, - t1.begin_at, - t1.end_at, - t1.advertising, - CONCAT("[", GROUP_CONCAT(DISTINCT CONCAT('{"storeID":', t2.store_id, ', "name":"', REPLACE(REPLACE(t22.name, '\t', ''), '"', ''), '"}')), "]") store_str, - CONCAT("[", GROUP_CONCAT(DISTINCT CONCAT('{"skuID":', t3.sku_id, ', "priceType":', t3.price_type, ', "price":', t3.price, - ', "limitSkuCount":', t3.limit_sku_count, ', "isLock":', t3.is_lock, ', "earningPrice":', t3.earning_price, '}')), "]") sku_price_str - FROM promotion t1 - JOIN promotion_store t2 ON t1.id = t2.promotion_id - JOIN store t22 ON t2.store_id = t22.id - JOIN promotion_sku t3 ON t1.id = t3.promotion_id - WHERE t1.deleted_at = ? - ` - sqlParams := []interface{}{ - utils.DefaultTimeValue, - } - if keyword != "" { - keywordLike := "%" + keyword + "%" - sql += " AND ( t1.name LIKE ?" - sqlParams = append(sqlParams, keywordLike) - keywordInt := utils.Str2Int64WithDefault(keyword, 0) - if keywordInt > 0 { - sql += ` - OR t1.id = ? OR t1.vendor_promotion_id = ? - OR (SELECT COUNT(*) FROM promotion_store tt1 WHERE tt1.promotion_id = t1.id AND tt1.store_id = ?) > 0 - OR (SELECT COUNT(*) FROM promotion_sku tt1 WHERE tt1.promotion_id = t1.id AND tt1.sku_id = ?) > 0 - ` - sqlParams = append(sqlParams, keywordInt, keywordInt, keywordInt, keywordInt) - } - sql += ")" - } - if params["vendorID"] != nil { - sql += " AND t1.vendor_id = ?" - sqlParams = append(sqlParams, params["vendorID"].(int)) - } - if params["promotionID"] != nil { - sql += " AND t1.id = ?" - sqlParams = append(sqlParams, params["promotionID"].(int)) - } - if params["vendorPromotionID"] != nil { - sql += " AND t1.vendor_promotion_id = ?" - sqlParams = append(sqlParams, params["vendorPromotionID"].(string)) - } - if params["name"] != nil { - sql += " AND t1.name LIKE ?" - sqlParams = append(sqlParams, "%"+params["name"].(string)+"%") - } - if params["beginAt"] != nil { - sql += " AND t1.begin_at <= ?" - beginAt, err2 := utils.TryStr2Time(params["beginAt"].(string)) - if err = err2; err != nil { - return nil, err - } - sqlParams = append(sqlParams, beginAt) - } - if params["endAt"] != nil { - sql += " AND t1.end_at >= ?" - endAt, err2 := utils.TryStr2Time(params["endAt"].(string)) - if err = err2; err != nil { - return nil, err - } - sqlParams = append(sqlParams, endAt) - } - days := defSearchDays - if params["days"] != nil { - days = params["days"].(int) - } - sql += " AND t1.created_at >= ?" - sqlParams = append(sqlParams, time.Now().Add(-time.Duration(days)*24*time.Hour)) - if params["type"] != nil { - sql += " AND t1.type = ?" - sqlParams = append(sqlParams, params["type"].(int)) - } - if params["storeID"] != nil || params["cityCode"] != nil { - sql += " AND (SELECT COUNT(*) FROM promotion_store tt1 " - if params["cityCode"] != nil { - sql += " JOIN store st ON st.id = tt1.store_id AND st.city_code = ?" - sqlParams = append(sqlParams, params["cityCode"].(int)) - } - sql += " WHERE tt1.promotion_id = t1.id" - if params["storeID"] != nil { - sql += " AND tt1.store_id = ?" - sqlParams = append(sqlParams, params["storeID"].(int)) - } - sql += ") > 0" - } - if params["skuID"] != nil { - sql += " AND (SELECT COUNT(*) FROM promotion_sku tt1 WHERE tt1.promotion_id = t1.id AND tt1.sku_id = ?) > 0" - sqlParams = append(sqlParams, params["skuID"].(int)) - } - sql += ` - GROUP BY - 1,2,3,4,5,6,7,8,9,10,11,12 - ORDER BY t1.id DESC - LIMIT ? OFFSET ? - ` - pageSize = jxutils.FormalizePageSize(pageSize) - if offset < 0 { - offset = 0 - } - sqlParams = append(sqlParams, pageSize, offset) - - db := dao.GetDB() - dao.Begin(db) - defer func() { - dao.Rollback(db) - if r := recover(); r != nil { - panic(r) - } - }() - // globals.SugarLogger.Debug(utils.Format4Output(sqlParams, false)) - // globals.SugarLogger.Debug(sql) - var promotionList []*tPromotionInfo - if err = dao.GetRows(db, &promotionList, sql, sqlParams...); err == nil { - pagedInfo = &model.PagedInfo{ - TotalCount: dao.GetLastTotalRowCount(db), - Data: promotionList, - } - dao.Commit(db) - for _, v := range promotionList { - if v.StoreStr != "" { - if err = utils.UnmarshalUseNumber([]byte(v.StoreStr), &v.Stores); err != nil { - return nil, err - } - } - if v.SkuPriceStr != "" { - if err = utils.UnmarshalUseNumber([]byte(v.SkuPriceStr), &v.SkuPrices); err != nil { - return nil, err - } - } - } - } else { - dao.Rollback(db) - } - return pagedInfo, err -} - -func CancelJdPromotion(ctx *jxcontext.Context, promotionID int) (err error) { - globals.SugarLogger.Debug("CancelJdPromotion promotionID:%d", promotionID) - - db := dao.GetDB() - promotion := &model.Promotion{} - promotion.ID = promotionID - if err = dao.GetEntity(db, promotion); err != nil { - return err - } - if promotion.Status == model.PromotionStatusCanceled { - return errors.New("当前状态已经是取消") - } - if promotion.Status == model.PromotionStatusRemoteCreated { - if promotion.VendorPromotionID != "" { - promotionHandler := getPromotionHander(promotion.Type) - if promotionHandler == nil { - return errors.New("非法的活动类型") - } - if err = promotionHandler.CancelPromotion(utils.Str2Int64(promotion.VendorPromotionID), ""); err != nil { - return err - } - } - } - if _, err = dao.UpdateEntityLogically(db, promotion, map[string]interface{}{ - "Status": model.PromotionStatusCanceled, - }, ctx.GetUserName(), nil); err == nil { - // RefreshJdPromotionLockStatus(ctx, promotionID) - } - return err -} - -// 每一段时间运行一次 -func RefreshJdLockStoreSku() (err error) { - globals.SugarLogger.Debug("RefreshJdLockStoreSku") - - sql := ` - SELECT t22.vendor_store_id, t3.sku_id, t32.jd_id, MAX(t3.is_lock) is_lock, MAX(t1.end_at) end_at - FROM promotion t1 - JOIN promotion_store t2 ON t1.id = t2.promotion_id - JOIN store_map t22 ON t2.store_id = t22.store_id AND t22.vendor_id = ? AND t22.deleted_at = ? - JOIN promotion_sku t3 ON t1.id = t3.promotion_id AND t3.is_lock = 1 - JOIN sku t32 ON t3.sku_id = t32.id - WHERE t1.deleted_at = ? AND t1.vendor_id = ? AND t1.status = ? AND (t1.begin_at <= ? AND t1.end_at >= ?) - GROUP BY 1,2,3 - ` - nowDate := time.Now() - sqlParams := []interface{}{ - model.VendorIDJD, - utils.DefaultTimeValue, - utils.DefaultTimeValue, - model.VendorIDJD, - model.PromotionStatusRemoteCreated, - nowDate, - nowDate, - } - var promotionItemList []*tPromotionItemInfo - db := dao.GetDB() - if err = dao.GetRows(db, &promotionItemList, sql, sqlParams...); err != nil { - if !dao.IsNoRowsError(err) { - globals.SugarLogger.Warnf("RefreshJdLockStoreSku GetRows failed with error:%v", err) - } - return err - } - storeskulock.ClearJdStoreSkuLock() - return RefreshJdPromotionItemListLockStatus(promotionItemList) -} - -func RefreshJdStoreSkuStock(promotionID int, skuIDs []int) (err error) { - globals.SugarLogger.Debugf("RefreshJdStoreSkuStock promotionID:%d", promotionID) - - sql := ` - SELECT t22.vendor_store_id, t3.sku_id, t32.jd_id, MAX(t3.is_lock) is_lock, MAX(t1.end_at) end_at - FROM promotion t1 - JOIN promotion_store t2 ON t1.id = t2.promotion_id - JOIN store_map t22 ON t2.store_id = t22.store_id AND t22.vendor_id = ? AND t22.deleted_at = ? - JOIN promotion_sku t3 ON t1.id = t3.promotion_id AND t3.is_lock = 1 - JOIN sku t32 ON t3.sku_id = t32.id - JOIN store_sku_bind t4 ON t2.store_id = t4.store_id AND t3.sku_id = t4.sku_id AND t4.deleted_at = ? - WHERE t1.deleted_at = ? AND t1.vendor_id = ? AND t1.status = ? AND (t1.begin_at <= ? AND t1.end_at >= ?) - ` - nowDate := time.Now() - sqlParams := []interface{}{ - model.VendorIDJD, - utils.DefaultTimeValue, - utils.DefaultTimeValue, - utils.DefaultTimeValue, - model.VendorIDJD, - model.PromotionStatusRemoteCreated, - nowDate, - nowDate, - } - if promotionID != 0 { - sql += " AND t1.id = ?" - sqlParams = append(sqlParams, promotionID) - } - if len(skuIDs) > 0 { - sql += " AND t3.sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")" - sqlParams = append(sqlParams, skuIDs) - } - sql += ` - GROUP BY 1,2,3 - ORDER BY 1,2,3 - ` - var promotionItemList []*tPromotionItemInfo - db := dao.GetDB() - if err = dao.GetRows(db, &promotionItemList, sql, sqlParams...); err != nil { - if !dao.IsNoRowsError(err) { - globals.SugarLogger.Warnf("RefreshJdStoreSkuStock GetRows failed with error:%v", err) - } - return err - } - globals.SugarLogger.Debugf("RefreshJdStoreSkuStock promotionID:%d, len(promotionItemList)=%d", promotionID, len(promotionItemList)) - if len(promotionItemList) > 0 { - task := tasksch.NewParallelTask("RefreshJdStoreSkuStock", tasksch.NewParallelConfig().SetBatchSize(jdapi.MaxStoreSkuBatchSize).SetIsContinueWhenError(true), jxcontext.AdminCtx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - stockList := make([]*jdapi.SkuStock, 0) - stationNo := batchItemList[0].(*tPromotionItemInfo).JdStoreID - for _, v := range batchItemList { - promotionItem := v.(*tPromotionItemInfo) - if promotionItem.JdStoreID != stationNo { - // globals.SugarLogger.Debugf("RefreshJdStoreSkuStock BatchUpdateCurrentQtys stationNo:%s, stockList:%s", stationNo, utils.Format4Output(stockList, false)) - _, err = api.JdAPI.BatchUpdateCurrentQtys("", "", stationNo, stockList, userName) - if err != nil { - globals.SugarLogger.Warnf("RefreshJdStoreSkuStock BatchUpdateCurrentQtys failed with error:%v", err) - } - stockList = make([]*jdapi.SkuStock, 0) - stationNo = promotionItem.JdStoreID - } - stockList = append(stockList, &jdapi.SkuStock{ - OutSkuId: utils.Int2Str(promotionItem.SkuID), - StockQty: model.MaxStoreSkuStockQty, - }) - } - // globals.SugarLogger.Debugf("RefreshJdStoreSkuStock BatchUpdateCurrentQtys stationNo:%s, stockList:%s", stationNo, utils.Format4Output(stockList, false)) - _, err = api.JdAPI.BatchUpdateCurrentQtys("", "", stationNo, stockList, userName) - if err != nil { - globals.SugarLogger.Warnf("RefreshJdStoreSkuStock BatchUpdateCurrentQtys failed with error:%v", err) - } - return nil, err - }, promotionItemList) - task.Run() - _, err = task.GetResult(0) - } - return err -} - -// 每晚凌晨运行一次 -func UpdateJdPromotionStatus() (num int64, err error) { - sql := ` - UPDATE promotion t1 - SET t1.status = ? - WHERE t1.deleted_at = ? AND t1.vendor_id IN (?, ?) AND t1.status = ? AND t1.end_at < ? - ` - nowDate := utils.GetCurDate() - sqlParams := []interface{}{ - model.PromotionStatusEnded, - utils.DefaultTimeValue, - []int{model.VendorIDJX, model.VendorIDJD}, - model.PromotionStatusRemoteCreated, - nowDate, - } - db := dao.GetDB() - return dao.ExecuteSQL(db, sql, sqlParams...) -} - -func RefreshJdPromotionItemListLockStatus(promotionItemList []*tPromotionItemInfo) (err error) { - globals.SugarLogger.Debugf("RefreshJdPromotionItemListLockStatus len(promotionItemList):%d", len(promotionItemList)) - if len(promotionItemList) > 0 { - expire := promotionItemList[0].EndAt.Add(24 * time.Hour) - for _, item := range promotionItemList { - if item.IsLock != 0 { - storeskulock.LockJdStoreSku(item.JdStoreID, item.JdSkuID, expire) - } else { - storeskulock.UnlockJdStoreSku(item.JdStoreID, item.JdSkuID) - } - } - } - return err -} - -func RefreshJdPromotionLockStatus(ctx *jxcontext.Context, promotionID int) (err error) { - globals.SugarLogger.Debugf("RefreshJdPromotionLockStatus promotionID:%d", promotionID) - - sql := ` - SELECT t22.vendor_store_id, t3.sku_id, t32.jd_id, IF(t1.begin_at <= ? AND t1.end_at >= ? AND t1.status = ?, t3.is_lock, 0) is_lock, t1.end_at - FROM promotion t1 - JOIN promotion_store t2 ON t1.id = t2.promotion_id - JOIN store_map t22 ON t2.store_id = t22.store_id AND t22.vendor_id = ? AND t22.deleted_at = ? - JOIN promotion_sku t3 ON t1.id = t3.promotion_id - JOIN sku t32 ON t3.sku_id = t32.id - WHERE t1.id = ? - ` - nowDate := time.Now() - sqlParams := []interface{}{ - nowDate, - nowDate, - model.PromotionStatusRemoteCreated, - model.VendorIDJD, - utils.DefaultTimeValue, - promotionID, - } - var promotionItemList []*tPromotionItemInfo - db := dao.GetDB() - // globals.SugarLogger.Debug(sql) - // globals.SugarLogger.Debug(utils.Format4Output(sqlParams, false)) - if err = dao.GetRows(db, &promotionItemList, sql, sqlParams...); err != nil { - return err - } - return RefreshJdPromotionItemListLockStatus(promotionItemList) -} - -func LockPromotionSkus(ctx *jxcontext.Context, promotionID int, isLock int, skuIDs []int) (num int64, err error) { - globals.SugarLogger.Debugf("begin LockPromotionSkus promotionID:%d, isLock:%d, skuIDs:%v", promotionID, isLock, skuIDs) - if isLock != 0 { - isLock = 1 - } - - sql := ` - UPDATE promotion_sku t1 - SET t1.is_lock = ? - WHERE t1.promotion_id = ? - ` - sqlParams := []interface{}{ - isLock, - promotionID, - } - if len(skuIDs) > 0 { - sql += " AND t1.sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")" - sqlParams = append(sqlParams, skuIDs) - } - db := dao.GetDB() - num, err = dao.ExecuteSQL(db, sql, sqlParams...) - if err == nil { - if isLock != 0 { - if err = UpdatePromotionStatusFromRemote(ctx, promotionID); err != nil { - return 0, err - } - } - RefreshJdPromotionLockStatus(ctx, promotionID) - if isLock != 0 { - // RefreshJdStoreSkuStock(promotionID, skuIDs) 这里比较耗时,实时更新意义也不大,留到定时任务自动处理 - } - } - globals.SugarLogger.Debugf("end LockPromotionSkus promotionID:%d, isLock:%d, skuIDs:%v", promotionID, isLock, skuIDs) - return num, err -} - -func UpdatePromotionSkusEarningPrice(ctx *jxcontext.Context, promotionID int, skuPriceList []*SkuPrice) (num int64, err error) { - db := dao.GetDB() - dao.Begin(db) - defer func() { - if r := recover(); r != nil || err != nil { - dao.Rollback(db) - if r != nil { - panic(r) - } - } - }() - for _, v := range skuPriceList { - var tmpNum int64 - if tmpNum, err = dao.UpdateEntityLogically(db, &model.PromotionSku{}, map[string]interface{}{ - "EarningPrice": v.EarningPrice, - }, ctx.GetUserName(), map[string]interface{}{ - "PromotionID": promotionID, - model.FieldSkuID: v.SkuID, - model.FieldDeletedAt: utils.DefaultTimeValue, - }); err != nil { - return 0, err - } - num += tmpNum - } - dao.Commit(db) - return num, err -} - -func OnStoreStockMsg(msg *jdapi.CallbackStoreStockMsg) (retVal *jdapi.CallbackResponse) { - var err error - // globals.SugarLogger.Debugf("OnStoreStockMsg IsJdStoreSkuLocked:%t", storeskulock.IsJdStoreSkuLocked(msg.StationNo, msg.SkuId)) - if (msg.Vendibility == 1 || !msg.Have) && storeskulock.IsJdStoreSkuLocked(msg.StationNo, msg.SkuId) { - globals.SugarLogger.Debugf("OnStoreStockMsg msg:%s", utils.Format4Output(msg, false)) - db := dao.GetDB() - sku := &model.Sku{} - sku.JdID = msg.SkuId - if err = dao.GetEntity(db, sku, model.FieldJdID); err == nil { - utils.CallFuncAsync(func() { - if msg.Vendibility == 1 { - vendibility := &jdapi.StockVendibility{ - OutSkuId: utils.Int2Str(sku.ID), - DoSale: true, - } - _, err = api.JdAPI.BatchUpdateVendibility("", "", msg.StationNo, []*jdapi.StockVendibility{ - vendibility, - }, userName) - } - if !msg.Have { - stock := &jdapi.SkuStock{ - OutSkuId: utils.Int2Str(sku.ID), - StockQty: model.MaxStoreSkuStockQty, - } - _, err = api.JdAPI.BatchUpdateCurrentQtys("", "", msg.StationNo, []*jdapi.SkuStock{ - stock, - }, userName) - } - }) - } - } - return jdapi.Err2CallbackResponse(err, "") -} - -func OnNewPromotionMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) { - return createLocalPromotionFromRemote(utils.Str2Int64(msg.BillID)) -} - -func createLocalPromotionFromRemote(promotionInfoId int64) (retVal *jdapi.CallbackResponse) { - utils.CallFuncAsync(func() { - result, err := api.JdAPI.QueryPromotionInfo(promotionInfoId) - if err == nil { - db := dao.GetDB() - promotion := &model.Promotion{ - VendorPromotionID: utils.Int64ToStr(promotionInfoId), - } - if err = dao.GetEntity(db, promotion, "VendorPromotionID"); dao.IsNoRowsError(err) { - storeIDMap := make(map[int64]int) - skuIDMap := make(map[int64]int) - skuMap := make(map[int64]*jdapi.PromotionLspQuerySkuResult) - // 注意,这样处理可能是有问题,我们假定的是门店信息与SKU信息的叉乘 - for _, v := range result.SkuResultList { - storeIDMap[v.StationNo] = 1 - skuIDMap[v.SkuID] = 1 - skuMap[v.SkuID] = v - } - jdStoreIDs := make([]string, len(storeIDMap)) - index := 0 - for k := range storeIDMap { - jdStoreIDs[index] = utils.Int64ToStr(k) - index++ - } - jdSkuIDs := jxutils.Int64Map2List(skuIDMap) - - var skuList []*model.Sku - var storeMapList []*model.StoreMap - if err = dao.GetRows(db, &storeMapList, ` - SELECT * - FROM store_map - WHERE vendor_id = ? AND deleted_at = ? AND vendor_store_id IN (`+ - dao.GenQuestionMarks(len(jdStoreIDs))+")", - model.VendorIDJD, utils.DefaultTimeValue, jdStoreIDs); err != nil { - globals.SugarLogger.Warnf("createLocalPromotionFromRemote get storeMapList failed with error:%v", err) - return - } - if err = dao.GetRows(db, &skuList, ` - SELECT * - FROM sku - WHERE jd_id IN (`+ - dao.GenQuestionMarks(len(jdSkuIDs))+")", - jdSkuIDs); err != nil { - globals.SugarLogger.Warnf("createLocalPromotionFromRemote get skuList failed with error:%v", err) - return - } - jxStoreIDs := make([]int, len(storeMapList)) - for k, v := range storeMapList { - jxStoreIDs[k] = v.StoreID - } - priceList := make([]*SkuPrice, len(skuList)) - var skuResult *jdapi.PromotionLspQuerySkuResult - for k, v := range skuList { - skuResult = skuMap[v.JdID] - priceList[k] = &SkuPrice{ - SkuID: v.ID, - PriceType: PriceTypePrice, - Price: skuResult.PromotionPrice, - LimitSkuCount: 0, - IsLock: 0, - } - } - // globals.SugarLogger.Debugf("jxStoreIDs:%s", utils.Format4Output(jxStoreIDs, false)) - // globals.SugarLogger.Debugf("priceList:%s", utils.Format4Output(priceList, false)) - source := strings.Trim(result.Source, "来源") - promotionParams := &PromotionParams{ - Name: source + "-" + utils.Int64ToStr(result.PromotionInfoID), - Advertising: "", - Type: result.PromotionType, - BeginAt: result.BeginTime.GoTime(), - EndAt: result.EndTime.GoTime(), - StoreIDs: jxStoreIDs, - SkuPrices: priceList, - } - mapData := map[string]interface{}{ - keyPromotionStatus: jd2jxPromotionStatusMap[result.PromotionState], - keyPromotionSource: source, - } - if skuResult != nil { - mapData[keyLimitDaily] = skuResult.LimitDaily - mapData[keyLimitDevice] = skuResult.LimitDevice - mapData[keyLimitPin] = skuResult.LimitPin - } - _, err = CreateJdPromotion(jxcontext.AdminCtx, model.VendorIDJD, false, true, false, utils.Int64ToStr(promotionInfoId), promotionParams, mapData) - if dao.IsDuplicateError(err) || err == ErrLimitDeviceIsInvalid { - err = nil - } - } - } - }) - return jdapi.Err2CallbackResponse(nil, "") -} - -func UpdatePromotionStatusFromRemote(ctx *jxcontext.Context, promotionID int) (err error) { - globals.SugarLogger.Debugf("UpdatePromotionStatusFromRemote promotionID:%d", promotionID) - - db := dao.GetDB() - promotion := &model.Promotion{} - promotion.ID = promotionID - if err = dao.GetEntity(db, promotion); err != nil { - return err - } - result, err := api.JdAPI.QueryPromotionInfo(utils.Str2Int64(promotion.VendorPromotionID)) - if err != nil { - return err - } - newStatus := jd2jxPromotionStatusMap[result.PromotionState] - if newStatus != promotion.Status { - _, err = dao.UpdateEntityLogically(db, promotion, map[string]interface{}{ - model.FieldStatus: newStatus, - }, ctx.GetUserName(), nil) - } - return err -} - -func excelStr2Time(timeStr string) (tm time.Time, err error) { - return time.ParseInLocation("2006年1月2日15点4分5秒", timeStr, time.Local) -} - -func getPromotionHander(promotionType int) JdPromotionHandler { - var promotionHandler JdPromotionHandler - if promotionType == PromotionTypeDirectDown { - promotionHandler = &JdDirectDownHandler{} - } else if promotionType == PromotionTypeLimitedTime { - promotionHandler = &JdLimitedTimeHandler{} - } else { - // panic(fmt.Sprintf("unknown promotion type:%d", promotionType)) - return nil - } - if !globals.EnableJdStoreWrite { - promotionHandler = &JdNullHandler{} - } - return promotionHandler -} diff --git a/business/jxstore/promotion/jd_promotion_test.go b/business/jxstore/promotion/jd_promotion_test.go deleted file mode 100644 index 02d20be92..000000000 --- a/business/jxstore/promotion/jd_promotion_test.go +++ /dev/null @@ -1,15 +0,0 @@ -package promotion - -import ( - "testing" - - "git.rosy.net.cn/jx-callback/globals/testinit" -) - -func init() { - testinit.Init() -} - -func TestCreateLocalPromotionFromRemote(t *testing.T) { - t.Log(createLocalPromotionFromRemote(14510904)) -} diff --git a/business/jxstore/promotion/promotion.go b/business/jxstore/promotion/promotion.go deleted file mode 100644 index a7aa37f1e..000000000 --- a/business/jxstore/promotion/promotion.go +++ /dev/null @@ -1,89 +0,0 @@ -package promotion - -import ( - "strings" - "time" - - "github.com/KenmyZhang/aliyun-communicate" - - "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/dao" - "git.rosy.net.cn/jx-callback/globals" -) - -const ( - DefGoodsOrderDays = 60 - MaxBatchSize = 500 -) - -type tMobileInfo struct { - Mobile string -} - -func SendAdvertingByGoodsOrder(ctx *jxcontext.Context, advertising string, days int, isAsync bool, userName string) (hint string, err error) { - globals.SugarLogger.Debugf("SendAdvertingByGoodsOrder advertising:%s, days:%d, isAsync:%t, userName:%s", advertising, days, isAsync, userName) - - if days == 0 { - days = DefGoodsOrderDays - } - sqlParams := []interface{}{} - sql1 := ` - SELECT IF(t1.consignee_mobile2 <> '', t1.consignee_mobile2, t1.consignee_mobile) mobile - FROM goods_order t1 - LEFT JOIN black_client t2 ON IF(t1.consignee_mobile2 <> '', t1.consignee_mobile2, t1.consignee_mobile) = t2.mobile - WHERE IF(t1.consignee_mobile2 <> '', t1.consignee_mobile2, t1.consignee_mobile) <> '' AND t2.id IS NULL AND LENGTH(IF(t1.consignee_mobile2 <> '', t1.consignee_mobile2, t1.consignee_mobile)) = 11 AND LEFT(IF(t1.consignee_mobile2 <> '', t1.consignee_mobile2, t1.consignee_mobile), 1) = '1' - ` - sql2 := ` - SELECT buyer_mobile mobile - FROM jxorder t1 - LEFT JOIN black_client t2 ON t1.buyer_mobile = t2.mobile - WHERE buyer_mobile IS NOT NULL AND buyer_mobile <> '' AND t2.id IS NULL AND LENGTH(buyer_mobile) = 11 AND LEFT(buyer_mobile, 1) = '1' - ` - if days > 0 { - sql1 += " AND order_created_at > ?" - sql2 += " AND order_start_time > ?" - daysTime := time.Now().Add(-time.Duration(days) * 24 * time.Hour) - sqlParams = append(sqlParams, daysTime, daysTime) - } - - var mobiles []*tMobileInfo - db := dao.GetDB() - if err = dao.GetRows(db, &mobiles, sql1+" UNION DISTINCT "+sql2, sqlParams...); err != nil { - return "", err - } - index := 0 - mobileNumbers := make([]string, len(mobiles)) - for _, v := range mobiles { - if v.Mobile[:1] == "1" && strings.Index(v.Mobile, ",") == -1 { - mobileNumbers[index] = v.Mobile - index++ - } - } - mobileNumbers = mobileNumbers[:index] - mobileNumbers = append(mobileNumbers, "18180948107") - - smsClient := aliyunsmsclient.New("http://dysmsapi.aliyuncs.com/") - task := tasksch.NewParallelTask("SendAdvertingByGoodsOrder", tasksch.NewParallelConfig().SetBatchSize(MaxBatchSize), ctx, - func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - numbers := make([]string, len(batchItemList)) - for k, v := range batchItemList { - numbers[k] = v.(string) - } - numberStr := strings.Join(numbers, ",") - _, err = smsClient.Execute(globals.AliKey, globals.AliSecret, numberStr, "京西菜市", "SMS_109345355", string(utils.MustMarshal(map[string]interface{}{ - "code": "code", - }))) - if err != nil { - globals.SugarLogger.Infof("SendAdvertingByGoodsOrder numbers:%s failed with error:%v", numberStr, err) - } - return nil, err - }, mobileNumbers) - tasksch.HandleTask(task, nil, true).Run() - - if !isAsync { - _, err = task.GetResult(0) - } - return task.ID, err -} diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index 8a9f86597..e669f8850 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -2,9 +2,7 @@ package tempop import ( "fmt" - "math" "regexp" - "strings" "sync" "time" @@ -13,7 +11,6 @@ import ( "git.rosy.net.cn/baseapi/platformapi/jdapi" "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/jxcallback/orderman" "git.rosy.net.cn/jx-callback/business/jxstore/cms" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" @@ -21,7 +18,6 @@ import ( "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/model/legacymodel" - "git.rosy.net.cn/jx-callback/business/model/legacymodel2" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/business/partner/purchase/ebai" "git.rosy.net.cn/jx-callback/globals" @@ -284,79 +280,79 @@ func Change2JDSPU4Store(ctx *jxcontext.Context, storeIDs []int, step int, isAsyn return hint, err } -func TransferLegacyJdOrder(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { - sqlBatchCount := 1000 - rootTask := tasksch.NewSeqTask("TransferLegacyJdOrder", ctx, - func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { - sql := ` - SELECT t1.* - FROM jdorder t1 - LEFT JOIN goods_order_original t2 ON t2.vendor_order_id = t1.vendor_order_id - WHERE t2.id IS NULL AND LENGTH(t1.data) > 10 AND t1.cityname = 'all' - ORDER BY t1.orderstatustime - LIMIT ? - ` - db := dao.GetDB() - var jdOrderList []*legacymodel2.Jdorder - if err = dao.GetRows(db, &jdOrderList, sql, sqlBatchCount); err != nil { - return nil, err - } - if len(jdOrderList) > 0 { - task := tasksch.NewParallelTask("TransferLegacyJdOrder2", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError).SetBatchSize(40), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - var orderDetailList []*model.GoodsOrderOriginal - for _, v := range batchItemList { - jdOrder := v.(*legacymodel2.Jdorder) - var detail map[string]interface{} - if err = utils.UnmarshalUseNumber([]byte(strings.Replace(strings.Replace(jdOrder.Data, "\n", "", -1), "\r", "", -1)), &detail); err != nil { - return nil, err - } - resultList := detail["result"].(map[string]interface{})["resultList"].([]interface{}) - if len(resultList) > 0 { - originalData := resultList[0].(map[string]interface{}) - orgCode := originalData["orgCode"].(string) - if orgCode == "320406" { - orderPurchaseTime := utils.Interface2String(originalData["orderPurchaseTime"]) - if orderPurchaseTime == "" { - globals.SugarLogger.Debugf("TransferLegacyJdOrder abnormal order:%s", jdOrder.VendorOrderID) - orderPurchaseTime = utils.Interface2String(originalData["orderStartTime"]) - } - if orderPurchaseTime != "" { - orderDetail := &model.GoodsOrderOriginal{ - VendorOrderID: jdOrder.VendorOrderID, - VendorID: model.VendorIDJD, - AccountNo: orgCode, - OrderCreatedAt: utils.Str2Time(orderPurchaseTime), - OriginalData: string(utils.MustMarshal(originalData)), - } - orderDetailList = append(orderDetailList, orderDetail) - } else { - globals.SugarLogger.Debugf("TransferLegacyJdOrder abnormal2 order:%s", jdOrder.VendorOrderID) - } - } - } - } - if len(orderDetailList) > 0 { - err = dao.CreateMultiEntities(db, orderDetailList) - } - return nil, err - }, jdOrderList) - // rootTask.AddChild(task).Run() - task.Run() - _, err = task.GetResult(0) - } else { - rootTask.Cancel() - } - return nil, err - }, math.MaxInt32) - tasksch.ManageTask(rootTask).Run() - if !isAsync { - _, err = rootTask.GetResult(0) - } else { - hint = rootTask.ID - } - return hint, err -} +// func TransferLegacyJdOrder(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { +// sqlBatchCount := 1000 +// rootTask := tasksch.NewSeqTask("TransferLegacyJdOrder", ctx, +// func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { +// sql := ` +// SELECT t1.* +// FROM jdorder t1 +// LEFT JOIN goods_order_original t2 ON t2.vendor_order_id = t1.vendor_order_id +// WHERE t2.id IS NULL AND LENGTH(t1.data) > 10 AND t1.cityname = 'all' +// ORDER BY t1.orderstatustime +// LIMIT ? +// ` +// db := dao.GetDB() +// var jdOrderList []*legacymodel2.Jdorder +// if err = dao.GetRows(db, &jdOrderList, sql, sqlBatchCount); err != nil { +// return nil, err +// } +// if len(jdOrderList) > 0 { +// task := tasksch.NewParallelTask("TransferLegacyJdOrder2", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError).SetBatchSize(40), ctx, +// func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { +// var orderDetailList []*model.GoodsOrderOriginal +// for _, v := range batchItemList { +// jdOrder := v.(*legacymodel2.Jdorder) +// var detail map[string]interface{} +// if err = utils.UnmarshalUseNumber([]byte(strings.Replace(strings.Replace(jdOrder.Data, "\n", "", -1), "\r", "", -1)), &detail); err != nil { +// return nil, err +// } +// resultList := detail["result"].(map[string]interface{})["resultList"].([]interface{}) +// if len(resultList) > 0 { +// originalData := resultList[0].(map[string]interface{}) +// orgCode := originalData["orgCode"].(string) +// if orgCode == "320406" { +// orderPurchaseTime := utils.Interface2String(originalData["orderPurchaseTime"]) +// if orderPurchaseTime == "" { +// globals.SugarLogger.Debugf("TransferLegacyJdOrder abnormal order:%s", jdOrder.VendorOrderID) +// orderPurchaseTime = utils.Interface2String(originalData["orderStartTime"]) +// } +// if orderPurchaseTime != "" { +// orderDetail := &model.GoodsOrderOriginal{ +// VendorOrderID: jdOrder.VendorOrderID, +// VendorID: model.VendorIDJD, +// AccountNo: orgCode, +// OrderCreatedAt: utils.Str2Time(orderPurchaseTime), +// OriginalData: string(utils.MustMarshal(originalData)), +// } +// orderDetailList = append(orderDetailList, orderDetail) +// } else { +// globals.SugarLogger.Debugf("TransferLegacyJdOrder abnormal2 order:%s", jdOrder.VendorOrderID) +// } +// } +// } +// } +// if len(orderDetailList) > 0 { +// err = dao.CreateMultiEntities(db, orderDetailList) +// } +// return nil, err +// }, jdOrderList) +// // rootTask.AddChild(task).Run() +// task.Run() +// _, err = task.GetResult(0) +// } else { +// rootTask.Cancel() +// } +// return nil, err +// }, math.MaxInt32) +// tasksch.ManageTask(rootTask).Run() +// if !isAsync { +// _, err = rootTask.GetResult(0) +// } else { +// hint = rootTask.ID +// } +// return hint, err +// } func TransferLegacyElmOrder(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { // sqlBatchCount := 1000 @@ -595,77 +591,77 @@ type GoodsOrderOriginalEx struct { OrderStatus int } -func CreateOrderFromOriginal(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { - sqlBatchCount := 5000 - rootTask := tasksch.NewSeqTask("CreateOrderFromOriginal", ctx, - func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { - sql := ` - SELECT t1.*, t3.order_status - FROM goods_order_original t1 - LEFT JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id - LEFT JOIN jxorder t3 ON t3.order_id = t1.vendor_order_id - WHERE t2.id IS NULL - LIMIT ?; - ` - db := dao.GetDB() - var orderList []*GoodsOrderOriginalEx - if err = dao.GetRows(db, &orderList, sql, sqlBatchCount); err != nil { - return nil, err - } - if len(orderList) > 0 { - task := tasksch.NewParallelTask("CreateOrderFromOriginal", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError).SetParallelCount(1), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - orderOriginal := batchItemList[0].(*GoodsOrderOriginalEx) - globals.SugarLogger.Debugf("CreateOrderFromOriginal processing orderID:%s", orderOriginal.VendorOrderID) - if handler := partner.GetPurchasePlatformFromVendorID(orderOriginal.VendorID); handler != nil { - var detail map[string]interface{} - if err = utils.UnmarshalUseNumber([]byte(strings.Replace(strings.Replace(orderOriginal.OriginalData, "\n", "", -1), "\r", "", -1)), &detail); err != nil { - globals.SugarLogger.Debugf("CreateOrderFromOriginal abnormal orderID:%s, error:%v", orderOriginal.VendorOrderID, err) - return nil, err - } - order := handler.Map2Order(detail) - if order.Status < model.OrderStatusEndBegin { - if orderOriginal.OrderStatus == 3 { - order.Status = model.OrderStatusFinished - } else if orderOriginal.OrderStatus == 7 { - order.Status = model.OrderStatusCanceled - } else { - order2, err2 := handler.GetOrder(order.VendorOrderID) - if err = err2; err == nil { - order.Status = order2.Status - } else { - err = nil // ignore get status error - } - } - } - if err == nil { - if _, err = orderman.FixedOrderManager.SaveOrder(order, false, dao.GetDB()); err != nil { - globals.SugarLogger.Debugf("CreateOrderFromOriginal abnormal orderID:%s, error:%v", orderOriginal.VendorOrderID, err) - } - } else { - globals.SugarLogger.Debugf("CreateOrderFromOriginal abnormal orderID:%s, error:%v", orderOriginal.VendorOrderID, err) - } - } else { - globals.SugarLogger.Debugf("CreateOrderFromOriginal abnormal orderID:%s", orderOriginal.VendorOrderID) - } - return nil, err - }, orderList) - // rootTask.AddChild(task).Run() - task.Run() - _, err = task.GetResult(0) - } else { - rootTask.Cancel() - } - return nil, err - }, math.MaxInt32) - tasksch.ManageTask(rootTask).Run() - if !isAsync { - _, err = rootTask.GetResult(0) - } else { - hint = rootTask.ID - } - return hint, err -} +// func CreateOrderFromOriginal(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { +// sqlBatchCount := 5000 +// rootTask := tasksch.NewSeqTask("CreateOrderFromOriginal", ctx, +// func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { +// sql := ` +// SELECT t1.*, t3.order_status +// FROM goods_order_original t1 +// LEFT JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id +// LEFT JOIN jxorder t3 ON t3.order_id = t1.vendor_order_id +// WHERE t2.id IS NULL +// LIMIT ?; +// ` +// db := dao.GetDB() +// var orderList []*GoodsOrderOriginalEx +// if err = dao.GetRows(db, &orderList, sql, sqlBatchCount); err != nil { +// return nil, err +// } +// if len(orderList) > 0 { +// task := tasksch.NewParallelTask("CreateOrderFromOriginal", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError).SetParallelCount(1), ctx, +// func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { +// orderOriginal := batchItemList[0].(*GoodsOrderOriginalEx) +// globals.SugarLogger.Debugf("CreateOrderFromOriginal processing orderID:%s", orderOriginal.VendorOrderID) +// if handler := partner.GetPurchasePlatformFromVendorID(orderOriginal.VendorID); handler != nil { +// var detail map[string]interface{} +// if err = utils.UnmarshalUseNumber([]byte(strings.Replace(strings.Replace(orderOriginal.OriginalData, "\n", "", -1), "\r", "", -1)), &detail); err != nil { +// globals.SugarLogger.Debugf("CreateOrderFromOriginal abnormal orderID:%s, error:%v", orderOriginal.VendorOrderID, err) +// return nil, err +// } +// order := handler.Map2Order(detail) +// if order.Status < model.OrderStatusEndBegin { +// if orderOriginal.OrderStatus == 3 { +// order.Status = model.OrderStatusFinished +// } else if orderOriginal.OrderStatus == 7 { +// order.Status = model.OrderStatusCanceled +// } else { +// order2, err2 := handler.GetOrder(order.VendorOrderID) +// if err = err2; err == nil { +// order.Status = order2.Status +// } else { +// err = nil // ignore get status error +// } +// } +// } +// if err == nil { +// if _, err = orderman.FixedOrderManager.SaveOrder(order, false, dao.GetDB()); err != nil { +// globals.SugarLogger.Debugf("CreateOrderFromOriginal abnormal orderID:%s, error:%v", orderOriginal.VendorOrderID, err) +// } +// } else { +// globals.SugarLogger.Debugf("CreateOrderFromOriginal abnormal orderID:%s, error:%v", orderOriginal.VendorOrderID, err) +// } +// } else { +// globals.SugarLogger.Debugf("CreateOrderFromOriginal abnormal orderID:%s", orderOriginal.VendorOrderID) +// } +// return nil, err +// }, orderList) +// // rootTask.AddChild(task).Run() +// task.Run() +// _, err = task.GetResult(0) +// } else { +// rootTask.Cancel() +// } +// return nil, err +// }, math.MaxInt32) +// tasksch.ManageTask(rootTask).Run() +// if !isAsync { +// _, err = rootTask.GetResult(0) +// } else { +// hint = rootTask.ID +// } +// return hint, err +// } func TransformJdSpu2Sku(ctx *jxcontext.Context, skuNameIDs []int, count int, isAsync, isContinueWhenError bool) (hint string, err error) { sql := ` diff --git a/business/model/dao/promotion.go b/business/model/dao/promotion.go deleted file mode 100644 index 2f5793c62..000000000 --- a/business/model/dao/promotion.go +++ /dev/null @@ -1,59 +0,0 @@ -package dao - -import ( - "time" - - "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/model" -) - -type PromotionStoreSku struct { - model.PromotionSku - StoreID int `orm:"column(store_id)" json:"storeID"` -} - -func GenSkuPriceMapKey(storeID, skuID int) (key int64) { - return int64(storeID)*1000000 + int64(skuID) -} - -func GetPromotionSkuPriceMap(db *DaoDB, vendorID int, storeIDs, skuIDs []int, fromTime, toTime time.Time) (skuPriceMap map[int64]*PromotionStoreSku, err error) { - sql := ` - SELECT t2.store_id, t3.* - FROM promotion t1 - JOIN promotion_store t2 ON t2.promotion_id = t1.id - JOIN promotion_sku t3 ON t3.promotion_id = t1.id - WHERE t1.deleted_at = ? AND t1.vendor_id = ? AND NOT (t1.begin_at > ? OR t1.end_at < ?) AND (t1.status = ? OR t1.status = ?)` - sqlParams := []interface{}{ - utils.DefaultTimeValue, - vendorID, - toTime, - fromTime, - model.PromotionStatusRemoteCreated, - } - if vendorID == model.VendorIDJX { - sqlParams = append(sqlParams, model.PromotionStatusLocalCreated) - } else { - sqlParams = append(sqlParams, model.PromotionStatusRemoteCreated) - } - if len(storeIDs) > 0 { - sql += " AND t2.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")" - sqlParams = append(sqlParams, storeIDs) - } - if len(skuIDs) > 0 { - sql += " AND t3.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")" - sqlParams = append(sqlParams, skuIDs) - } - sql += " ORDER BY t2.store_id, t3.sku_id, t3.price" - var skuPriceList []*PromotionStoreSku - if err = GetRows(db, &skuPriceList, sql, sqlParams...); err != nil { - return nil, err - } - skuPriceMap = make(map[int64]*PromotionStoreSku) - for _, v := range skuPriceList { - index := GenSkuPriceMapKey(v.StoreID, v.SkuID) - if true /*skuPriceMap[index] == nil || v.EarningPrice < skuPriceMap[index].EarningPrice*/ { - skuPriceMap[index] = v - } - } - return skuPriceMap, err -} diff --git a/business/model/legacymodel2/jdorder.go b/business/model/legacymodel2/jdorder.go deleted file mode 100644 index 874e8057a..000000000 --- a/business/model/legacymodel2/jdorder.go +++ /dev/null @@ -1,18 +0,0 @@ -package legacymodel2 - -type Jdorder struct { - Id int `orm:"column(id);auto"` - Code string `orm:"column(code);size(2);null"` - Msg string `orm:"column(msg);size(100);null"` - Data string `orm:"column(data);null"` - Success int8 `orm:"column(success);null"` - Jdorderid int64 `orm:"column(jdorderid);null;unique"` - VendorOrderID string `orm:"column(vendor_order_id);size(48);unique" json:"vendorOrderID"` - Cityname string `orm:"column(cityname);size(20);null"` - Orderstatus int `orm:"column(orderstatus);null"` - Orderstatustime string `orm:"column(orderstatustime);size(50);null;index"` -} - -func (t *Jdorder) TableName() string { - return "jdorder" -} diff --git a/business/model/promotion.go b/business/model/promotion.go deleted file mode 100644 index ca4037cc3..000000000 --- a/business/model/promotion.go +++ /dev/null @@ -1,86 +0,0 @@ -package model - -import ( - "time" -) - -const ( - PromotionStatusLocalCreated = 0 // 本地成功创建, - PromotionStatusRemoteFailed = 1 // 远程创建失败, - PromotionStatusRemoteCreated = 2 // 远程成功创建, - PromotionStatusCanceled = 3 // 被显示取消 - PromotionStatusEnded = 4 // 已经超过活动时间,且被显示置为结束 -) - -const ( - PromotionCreateTypeByJX = 0 - PromotionCreateTypeByVendor = 1 -) - -var ( - PromotionStatusName = map[int]string{ - PromotionStatusLocalCreated: "未确认", - PromotionStatusRemoteFailed: "失败", - PromotionStatusRemoteCreated: "正常", - PromotionStatusCanceled: "取消", - PromotionStatusEnded: "结束", - } -) - -type Promotion struct { - ModelIDCULD - - VendorID int `orm:"column(vendor_id)" json:"vendorID"` - Name string `orm:"size(64)" json:"name"` - Advertising string `orm:"size(255)" json:"advertising"` - Type int `json:"type"` - Status int `json:"status"` - LimitDevice int8 `json:"limitDevice"` - LimitPin int8 `json:"limitPin"` - LimitDaily int8 `json:"limitDaily"` - LimitCount int `json:"limitCount"` - Source string `orm:"size(255)" json:"source"` - CreateType int8 `json:"createType"` - VendorPromotionID string `orm:"size(64);column(vendor_promotion_id);index" json:"vendorPromotionID"` - BeginAt time.Time `orm:"type(datetime);index" json:"beginAt"` - EndAt time.Time `orm:"type(datetime);index" json:"endAt"` - Remark string `orm:"type(text)" json:"-"` -} - -func (*Promotion) TableUnique() [][]string { - return [][]string{ - []string{"Name", "VendorID", "Type", "DeletedAt"}, - } -} - -type PromotionStore struct { - ModelIDCULD - - PromotionID int `orm:"column(promotion_id)" json:"promotionID"` - StoreID int `orm:"column(store_id)" json:"storeID"` -} - -func (*PromotionStore) TableUnique() [][]string { - return [][]string{ - []string{"PromotionID", "StoreID", "DeletedAt"}, - } -} - -type PromotionSku struct { - ModelIDCULD - - PromotionID int `orm:"column(promotion_id)" json:"promotionID"` - SkuID int `orm:"column(sku_id)" json:"skuID"` - PriceType int `json:"priceType"` - Price int `json:"price"` // 分,活动价,这个不是单价 - LimitSkuCount int `json:"limitSkuCount"` - IsLock int8 `json:"isLock"` // 是否锁定门店商品信息 - - EarningPrice int `json:"earningPrice"` // 活动商品设置,结算给门店老板的钱 -} - -func (*PromotionSku) TableUnique() [][]string { - return [][]string{ - []string{"PromotionID", "SkuID", "DeletedAt"}, - } -} diff --git a/controllers/jd_callback.go b/controllers/jd_callback.go index 8d48ed9cf..3aa5f753b 100644 --- a/controllers/jd_callback.go +++ b/controllers/jd_callback.go @@ -7,7 +7,6 @@ import ( "git.rosy.net.cn/baseapi/platformapi/jdapi" "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/jxstore/promotion" "git.rosy.net.cn/jx-callback/business/partner/purchase/jd" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" @@ -110,10 +109,9 @@ func (c *DjswController) Token() { func (c *DjswController) StockIsHave() { // globals.SugarLogger.Info(string(c.Ctx.Input.RequestBody)) if c.Ctx.Input.Method() == http.MethodPost { - obj, callbackResponse := api.JdAPI.GetStoreStockCallbackMsg(getUsefulRequest(c.Ctx)) + _, callbackResponse := api.JdAPI.GetStoreStockCallbackMsg(getUsefulRequest(c.Ctx)) if callbackResponse == nil { // globals.SugarLogger.Debugf("StockIsHave, obj:%s", utils.Format4Output(obj, false)) - callbackResponse = promotion.OnStoreStockMsg(obj) } c.Data["json"] = c.transferResponse("StockIsHave", callbackResponse) c.ServeJSON() @@ -126,11 +124,7 @@ func (c *DjswController) SinglePromoteCreate() { if c.Ctx.Input.Method() == http.MethodPost { obj, callbackResponse := api.JdAPI.GetOrderCallbackMsg(getUsefulRequest(c.Ctx)) if callbackResponse == nil { - if globals.EnableNewAct { - callbackResponse = jd.OnActMsg(obj) - } else { - callbackResponse = promotion.OnNewPromotionMsg(obj) - } + callbackResponse = jd.OnActMsg(obj) } c.Data["json"] = c.transferResponse("SinglePromoteCreate", callbackResponse) c.ServeJSON() diff --git a/controllers/promotion.go b/controllers/promotion.go deleted file mode 100644 index 4ab210f7d..000000000 --- a/controllers/promotion.go +++ /dev/null @@ -1,214 +0,0 @@ -package controllers - -import ( - "fmt" - - "git.rosy.net.cn/jx-callback/business/jxutils" - "git.rosy.net.cn/jx-callback/globals" - - "github.com/astaxie/beego" - - "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/jxstore/promotion" -) - -type PromotionController struct { - beego.Controller -} - -// @Title 创建活动 -// @Description 创建活动 -// @Param token header string true "认证token" -// @Param vendorID formData int true "厂商ID,当前只支持,京东:0,京西(用于记录活动信息):99" -// @Param name formData string true "活动名,必须唯一(所以名子上最好带上日期)" -// @Param beginAt formData string true "开始日期" -// @Param endAt formData string true "结束日期" -// @Param type formData int true "活动类型,3:直降,4:限时抢购" -// @Param storeIDs formData string true "json数据,storeID列表[1,2,3]" -// @Param skuPrices formData string true "json数据,价格信息列表" -// @Param limitDaily formData int false "是否按日0-不限,1-限购 (限时抢需填)" -// @Param limitDevice formData int false "是否设备限购0-不限,1-限购" -// @Param limitPin formData int false "是否账号限购0-不限,1-限购" -// @Param limitCount formData int false "限购件数 0-不限,如账号限购、设备限购有一个为1,则限购件数必须大于0的整数" -// @Param isAsync formData bool false "是否异步,缺省否(暂时只支持同步)" -// @Param isContinueWhenError formData bool false "单个广告失败是否继续,缺省false" -// @Param advertising formData string false "广告语" -// @Param vendorPromotionID formData string false "厂商活动id,设置此字段表示关联京东活动,并不会真正去创建" -// @Success 200 {object} controllers.CallResult -// @Failure 200 {object} controllers.CallResult -// @router /CreatePromotion [post] -func (c *PromotionController) CreatePromotion() { - c.callCreatePromotion(func(params *tPromotionCreatePromotionParams) (retVal interface{}, errCode string, err error) { - if globals.EnableNewAct { - if true { //params.VendorID == model.VendorIDJD { - return retVal, "", fmt.Errorf("请使用新版活动管理创建活动") - } - } - beginAt, err := utils.TryStr2Time(params.BeginAt) - if err != nil { - return retVal, "", err - } - endAt, err := utils.TryStr2Time(params.EndAt) - if err != nil { - return retVal, "", err - } - promotionParams := &promotion.PromotionParams{ - Name: params.Name, - BeginAt: beginAt, - EndAt: endAt, - Type: params.Type, - Advertising: params.Advertising, - } - if err = utils.UnmarshalUseNumber([]byte(params.StoreIDs), &promotionParams.StoreIDs); err == nil { - if err = utils.UnmarshalUseNumber([]byte(params.SkuPrices), &promotionParams.SkuPrices); err == nil { - retVal, err = promotion.CreateJdPromotion(params.Ctx, params.VendorID, false, params.IsAsync, params.IsContinueWhenError, params.VendorPromotionID, promotionParams, params.MapData) - } - } - return retVal, "", err - }) -} - -// @Param token header string true "认证token" - -// // @Title 发送文件给门店 -// // @Description 发送文件给门店,调用GET方法得到浏览器端参考的上传HTML实现,userfiles -// // @Param type formData int true "活动类型,3:直降,4:限时抢购" -// // @Param isAsync formData bool false "是否异常,缺省否(暂时只支持同步)" -// // @Success 200 {object} controllers.CallResult -// // @Failure 200 {object} controllers.CallResult -// // @router /CreatePromotionByExcel [post,get] -// func (c *PromotionController) CreatePromotionByExcel() { -// if c.Ctx.Input.IsGet() { -// w := c.Ctx.ResponseWriter -// // 上传页面 -// w.Header().Add("Content-Type", "text/html") -// w.WriteHeader(200) -// html := ` -//
-// Send this file: -// -// -// -//
-// ` -// io.WriteString(w, html) -// } else if c.Ctx.Input.IsPost() { -// c.callCreatePromotionByExcel(func(params *tPromotionCreatePromotionByExcelParams) (retVal interface{}, errCode string, err error) { -// r := c.Ctx.Request -// files := r.MultipartForm.File["userfile"] -// retVal, err = promotion.CreatePromotionByExcel(params.Ctx, params.IsAsync, params.Type, files[0], "userName") //params.Ctx.GetUserName()) -// return retVal, "", err -// }) -// } -// } - -// @Title 根据历史订单信息发送活动消息 -// @Description 根据历史订单信息发送活动消息 -// @Param token header string true "认证token" -// @Param advertising formData string true "广告语" -// @Param days formData int false "多少天以内订单数据中的用户(-1:全部,0:60天,缺省0)" -// @Param isAsync formData bool false "是否异步,缺省否" -// @Success 200 {object} controllers.CallResult -// @Failure 200 {object} controllers.CallResult -// @router /SendAdvertingByGoodsOrder [post] -func (c *PromotionController) SendAdvertingByGoodsOrder() { - c.callSendAdvertingByGoodsOrder(func(params *tPromotionSendAdvertingByGoodsOrderParams) (retVal interface{}, errCode string, err error) { - retVal, err = promotion.SendAdvertingByGoodsOrder(params.Ctx, params.Advertising, params.Days, params.IsAsync, params.Ctx.GetUserName()) - return retVal, "", err - }) -} - -// @Title 查询活动 -// @Description 查询活动 -// @Param token header string true "认证token" -// @Param keyword query string false "关键字" -// @Param vendorID query int false "厂商ID,当前只支持京东:0 " -// @Param promotionID query int false "活动id" -// @Param vendorPromotionID query string false "厂商活动id" -// @Param days query int false "多少天内创建的,缺省7天" -// @Param name query string false "活动名,不完全匹配" -// @Param cityCode query int false "活动门店所属城市code" -// @Param beginAt query string false "开始日期,包括" -// @Param endAt query string false "结束日期,包括" -// @Param type query int false "活动类型,3:直降,4:限时抢购" -// @Param storeID query int false "包含门店" -// @Param skuID query int false "包含sku" -// @Param offset query int false "活动列表起始序号(以0开始,缺省为0)" -// @Param pageSize query int false "活动列表页大小(缺省为50,-1表示全部)" -// @Success 200 {object} controllers.CallResult -// @Failure 200 {object} controllers.CallResult -// @router /GetPromotions [get] -func (c *PromotionController) GetPromotions() { - c.callGetPromotions(func(params *tPromotionGetPromotionsParams) (retVal interface{}, errCode string, err error) { - retVal, err = promotion.GetJdPromotions(params.Ctx, params.Keyword, params.MapData, params.Offset, params.PageSize) - return retVal, "", err - }) -} - -// @Title 取消活动 -// @Description 取消活动 -// @Param token header string true "认证token" -// @Param promotionID formData int true "活动id" -// @Success 200 {object} controllers.CallResult -// @Failure 200 {object} controllers.CallResult -// @router /CancelPromotion [put] -func (c *PromotionController) CancelPromotion() { - c.callCancelPromotion(func(params *tPromotionCancelPromotionParams) (retVal interface{}, errCode string, err error) { - err = promotion.CancelJdPromotion(params.Ctx, params.PromotionID) - return retVal, "", err - }) -} - -// @Title 锁定解锁活动SKU -// @Description 锁定解锁活动SKU -// @Param token header string true "认证token" -// @Param promotionID formData int true "活动id" -// @Param isLock formData int true "锁定标志,0:不锁定,1:锁定" -// @Param skuIDs formData string false "缺省全部" -// @Success 200 {object} controllers.CallResult -// @Failure 200 {object} controllers.CallResult -// @router /LockPromotionSkus [put] -func (c *PromotionController) LockPromotionSkus() { - c.callLockPromotionSkus(func(params *tPromotionLockPromotionSkusParams) (retVal interface{}, errCode string, err error) { - var skuIDs []int - if params.SkuIDs != "" { - if err = utils.UnmarshalUseNumber([]byte(params.SkuIDs), &skuIDs); err != nil { - return retVal, "", err - } - } - retVal, err = promotion.LockPromotionSkus(params.Ctx, params.PromotionID, params.IsLock, skuIDs) - return retVal, "", err - }) -} - -// @Title 修改活动商品门店结算价 -// @Description 修改活动商品门店结算价 -// @Param token header string true "认证token" -// @Param promotionID formData int true "活动id" -// @Param skuPrices formData string true "json数据,价格信息列表(只有EarningPrice有效)" -// @Success 200 {object} controllers.CallResult -// @Failure 200 {object} controllers.CallResult -// @router /UpdatePromotionSkusEarningPrice [put] -func (c *PromotionController) UpdatePromotionSkusEarningPrice() { - c.callUpdatePromotionSkusEarningPrice(func(params *tPromotionUpdatePromotionSkusEarningPriceParams) (retVal interface{}, errCode string, err error) { - var skuPriceList []*promotion.SkuPrice - if err = jxutils.Strings2Objs(params.SkuPrices, &skuPriceList); err == nil { - retVal, err = promotion.UpdatePromotionSkusEarningPrice(params.Ctx, params.PromotionID, skuPriceList) - } - return retVal, "", err - }) -} - -// @Title 从远程更新活动状态 -// @Description 从远程更新活动状态 -// @Param token header string true "认证token" -// @Param promotionID formData int true "活动id" -// @Success 200 {object} controllers.CallResult -// @Failure 200 {object} controllers.CallResult -// @router /RefreshPromotionStatus [put] -func (c *PromotionController) RefreshPromotionStatus() { - c.callRefreshPromotionStatus(func(params *tPromotionRefreshPromotionStatusParams) (retVal interface{}, errCode string, err error) { - err = promotion.UpdatePromotionStatusFromRemote(params.Ctx, params.PromotionID) - return retVal, "", err - }) -} diff --git a/controllers/temp_op.go b/controllers/temp_op.go index 4ef339976..8403e5c19 100644 --- a/controllers/temp_op.go +++ b/controllers/temp_op.go @@ -3,6 +3,8 @@ package controllers import ( "git.rosy.net.cn/baseapi/platformapi/ebaiapi" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxstore/cms" + "git.rosy.net.cn/jx-callback/business/jxstore/misc" "git.rosy.net.cn/jx-callback/business/jxstore/tempop" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" @@ -10,8 +12,6 @@ import ( "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/globals/api" "github.com/astaxie/beego" - "git.rosy.net.cn/jx-callback/business/jxstore/misc" - "git.rosy.net.cn/jx-callback/business/jxstore/cms" ) type TempOpController struct { @@ -54,35 +54,35 @@ func (c *InitDataController) Change2JDSPU4Store() { }) } -// @Title 将遗留JD订单合并 -// @Description 将遗留JD订单合并 -// @Param token header string true "认证token" -// @Param isAsync formData bool false "是否异步操作" -// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" -// @Success 200 {object} controllers.CallResult -// @Failure 200 {object} controllers.CallResult -// @router /TransferLegacyJdOrder [post] -func (c *InitDataController) TransferLegacyJdOrder() { - c.callTransferLegacyJdOrder(func(params *tInitdataTransferLegacyJdOrderParams) (retVal interface{}, errCode string, err error) { - retVal, err = tempop.TransferLegacyJdOrder(params.Ctx, params.IsAsync, params.IsContinueWhenError) - return retVal, "", err - }) -} +// // @Title 将遗留JD订单合并 +// // @Description 将遗留JD订单合并 +// // @Param token header string true "认证token" +// // @Param isAsync formData bool false "是否异步操作" +// // @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" +// // @Success 200 {object} controllers.CallResult +// // @Failure 200 {object} controllers.CallResult +// // @router /TransferLegacyJdOrder [post] +// func (c *InitDataController) TransferLegacyJdOrder() { +// c.callTransferLegacyJdOrder(func(params *tInitdataTransferLegacyJdOrderParams) (retVal interface{}, errCode string, err error) { +// retVal, err = tempop.TransferLegacyJdOrder(params.Ctx, params.IsAsync, params.IsContinueWhenError) +// return retVal, "", err +// }) +// } -// @Title 将goods_order中缺失的订单从goods_order_original中恢复 -// @Description 将goods_order中缺失的订单从goods_order_original中恢复 -// @Param token header string true "认证token" -// @Param isAsync formData bool false "是否异步操作" -// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" -// @Success 200 {object} controllers.CallResult -// @Failure 200 {object} controllers.CallResult -// @router /CreateOrderFromOriginal [post] -func (c *InitDataController) CreateOrderFromOriginal() { - c.callCreateOrderFromOriginal(func(params *tInitdataCreateOrderFromOriginalParams) (retVal interface{}, errCode string, err error) { - retVal, err = tempop.CreateOrderFromOriginal(params.Ctx, params.IsAsync, params.IsContinueWhenError) - return retVal, "", err - }) -} +// // @Title 将goods_order中缺失的订单从goods_order_original中恢复 +// // @Description 将goods_order中缺失的订单从goods_order_original中恢复 +// // @Param token header string true "认证token" +// // @Param isAsync formData bool false "是否异步操作" +// // @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" +// // @Success 200 {object} controllers.CallResult +// // @Failure 200 {object} controllers.CallResult +// // @router /CreateOrderFromOriginal [post] +// func (c *InitDataController) CreateOrderFromOriginal() { +// c.callCreateOrderFromOriginal(func(params *tInitdataCreateOrderFromOriginalParams) (retVal interface{}, errCode string, err error) { +// retVal, err = tempop.CreateOrderFromOriginal(params.Ctx, params.IsAsync, params.IsContinueWhenError) +// return retVal, "", err +// }) +// } // @Title 拉取京东订单补齐本地 // @Description 拉取京东订单补齐本地 @@ -277,7 +277,7 @@ func (c *TempOpController) TestIt() { // @Title 开启或结束所有平台商店的额外时间 // @Description 开启或结束所有平台商店的额外时间,并且修改所有商品库存为0或99999(开启:0 , 结束:99999) // @Param token header string true "认证token" -// @Param vendorIDs formData string false "运营商ID列表(美团1 饿百3)" +// @Param vendorIDs formData string false "运营商ID列表(美团1 饿百3)" // @Param storeIDs formData string false "京西门店ID列表" // @Param startOrEndStore formData bool true "开启或结束" // @Param startTime formData int false "开始营业时间(格式:930代表早上9点30分)" @@ -301,7 +301,7 @@ func (c *TempOpController) TestStartOrEndOpStore() { // @Title 京西平台和其他平台商品的对比 // @Description 京西平台和其他平台商品的对比 // @Param token header string true "认证token" -// @Param vendorIDs formData string false "运营商ID列表(京东0 美团1 饿百3)" +// @Param vendorIDs formData string false "运营商ID列表(京东0 美团1 饿百3)" // @Param storeIDs formData string false "京西门店ID列表" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult diff --git a/globals/beegodb/beegodb.go b/globals/beegodb/beegodb.go index e47be78e5..66eeb6f52 100644 --- a/globals/beegodb/beegodb.go +++ b/globals/beegodb/beegodb.go @@ -34,7 +34,6 @@ func Init() { orm.RegisterModel(&model.SkuCategory{}) // orm.RegisterModel(&model.DurableTask{}, &model.DurableTaskItem{}) - orm.RegisterModel(&model.Promotion{}, &model.PromotionStore{}, &model.PromotionSku{}) orm.RegisterModel(&model.AuthBind{}, &model.User{}) orm.RegisterModel(&model.PageShop{}) diff --git a/globals/globals.go b/globals/globals.go index e02174f9f..8621cbc43 100644 --- a/globals/globals.go +++ b/globals/globals.go @@ -44,7 +44,6 @@ var ( StoreName string - EnableNewAct bool EnableWXAuth2 bool ) @@ -88,7 +87,6 @@ func Init() { StoreName = beego.AppConfig.DefaultString("storeName", "京西菜市") - EnableNewAct = true EnableWXAuth2 = beego.BConfig.RunMode == "beta" } diff --git a/main.go b/main.go index 635de768e..7eb1dccde 100644 --- a/main.go +++ b/main.go @@ -12,7 +12,6 @@ import ( "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler/defsch" // 导入缺省订单调度器 "git.rosy.net.cn/jx-callback/business/jxstore/cms" "git.rosy.net.cn/jx-callback/business/jxstore/misc" - "git.rosy.net.cn/jx-callback/business/jxstore/promotion" "git.rosy.net.cn/jx-callback/business/jxutils/tasks" "git.rosy.net.cn/jx-callback/business/partner/purchase/ebai" "git.rosy.net.cn/jx-callback/globals" @@ -57,7 +56,6 @@ func Init() { buildTime = buildTime.Local() } cms.InitServiceInfo(Version, buildTime, GitCommit) - promotion.Init() if globals.IsProductEnv() { ebai.CurPurchaseHandler.StartRefreshComment() diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 5922d559b..8fd2aa156 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -493,15 +493,6 @@ func init() { Filters: nil, Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"], - beego.ControllerComments{ - Method: "CreateOrderFromOriginal", - Router: `/CreateOrderFromOriginal`, - AllowHTTPMethods: []string{"post"}, - MethodParams: param.Make(), - Filters: nil, - Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"], beego.ControllerComments{ Method: "DeleteWrongSpu", @@ -565,15 +556,6 @@ func init() { Filters: nil, Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"], - beego.ControllerComments{ - Method: "TransferLegacyJdOrder", - Router: `/TransferLegacyJdOrder`, - AllowHTTPMethods: []string{"post"}, - MethodParams: param.Make(), - Filters: nil, - Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"], beego.ControllerComments{ Method: "TransformJdSpu2Sku", @@ -988,69 +970,6 @@ func init() { Filters: nil, Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PromotionController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PromotionController"], - beego.ControllerComments{ - Method: "CancelPromotion", - Router: `/CancelPromotion`, - AllowHTTPMethods: []string{"put"}, - MethodParams: param.Make(), - Filters: nil, - Params: nil}) - - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PromotionController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PromotionController"], - beego.ControllerComments{ - Method: "CreatePromotion", - Router: `/CreatePromotion`, - AllowHTTPMethods: []string{"post"}, - MethodParams: param.Make(), - Filters: nil, - Params: nil}) - - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PromotionController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PromotionController"], - beego.ControllerComments{ - Method: "GetPromotions", - Router: `/GetPromotions`, - AllowHTTPMethods: []string{"get"}, - MethodParams: param.Make(), - Filters: nil, - Params: nil}) - - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PromotionController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PromotionController"], - beego.ControllerComments{ - Method: "LockPromotionSkus", - Router: `/LockPromotionSkus`, - AllowHTTPMethods: []string{"put"}, - MethodParams: param.Make(), - Filters: nil, - Params: nil}) - - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PromotionController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PromotionController"], - beego.ControllerComments{ - Method: "RefreshPromotionStatus", - Router: `/RefreshPromotionStatus`, - AllowHTTPMethods: []string{"put"}, - MethodParams: param.Make(), - Filters: nil, - Params: nil}) - - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PromotionController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PromotionController"], - beego.ControllerComments{ - Method: "SendAdvertingByGoodsOrder", - Router: `/SendAdvertingByGoodsOrder`, - AllowHTTPMethods: []string{"post"}, - MethodParams: param.Make(), - Filters: nil, - Params: nil}) - - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PromotionController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:PromotionController"], - beego.ControllerComments{ - Method: "UpdatePromotionSkusEarningPrice", - Router: `/UpdatePromotionSkusEarningPrice`, - AllowHTTPMethods: []string{"put"}, - MethodParams: param.Make(), - Filters: nil, - Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], beego.ControllerComments{ Method: "AddCategory", diff --git a/routers/router.go b/routers/router.go index 5d589b3c8..3fc31abb3 100644 --- a/routers/router.go +++ b/routers/router.go @@ -61,11 +61,6 @@ func init() { &controllers.FinancialController{}, ), ), - beego.NSNamespace("/promotion", - beego.NSInclude( - &controllers.PromotionController{}, - ), - ), beego.NSNamespace("/sync", beego.NSInclude( &controllers.SyncController{},