From e8f93aed2da0f96fe78ea6a21c245922e6528c46 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 10 Jul 2019 17:25:48 +0800 Subject: [PATCH] =?UTF-8?q?-=20GetActStoreSkuInfo=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E5=95=86=E5=93=81=E4=BF=A1=E6=81=AF=E6=97=B6=E4=B8=8D=E6=8A=A5?= =?UTF-8?q?=E9=94=99=20-=20=E4=B8=8D=E5=AD=98=E5=82=A8=E7=A9=BA=E7=9A=84?= =?UTF-8?q?=E9=A5=BF=E7=99=BE=E7=BD=91=E9=A1=B5=E6=B4=BB=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/act/act.go | 118 +++++++++++++++++---- business/model/dao/act.go | 3 +- business/partner/purchase/ebai/act_page.go | 6 +- controllers/act.go | 22 ++++ routers/commentsRouter_controllers.go | 9 ++ 5 files changed, 132 insertions(+), 26 deletions(-) diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index 2644774e3..bd7b30644 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -435,6 +435,10 @@ func vendorActInfo2Model(ctx *jxcontext.Context, db *dao.DaoDB, act2 *model.Act2 func (a *ActManager) CreateActFromVendor(ctx *jxcontext.Context, act2 *model.Act2, actStoreSku []*model.ActStoreSku2) (actID int, err error) { globals.SugarLogger.Debugf("CreateActFromVendor vendorID:%d, vendorActID:%s", act2.VendorID, act2.VendorActID) db := dao.GetDB() + return createActFromVendor(ctx, db, act2, actStoreSku) +} + +func createActFromVendor(ctx *jxcontext.Context, db *dao.DaoDB, act2 *model.Act2, actStoreSku []*model.ActStoreSku2) (actID int, err error) { dao.Begin(db) defer func() { if r := recover(); r != nil { @@ -500,9 +504,9 @@ func GetActStoreSkuInfo(ctx *jxcontext.Context, actID int, vendorIDs []int) (act if err != nil { return nil, err } - if len(actStoreSkuMap) == 0 { - return nil, fmt.Errorf("不能找到活动:%d", actID) - } + // if len(actStoreSkuMap) == 0 { + // return nil, fmt.Errorf("不能找到活动:%d", actID) + // } for _, v := range actStoreSkuMap { actStoreSkuList = append(actStoreSkuList, v...) } @@ -654,24 +658,94 @@ func SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITask, actID int, vendor return hint, err } -func RefreshPageAct(ctx *jxcontext.Context, vendorIDs []int, createdFrom time.Time, isAsync bool) (hint string, err error) { - // db := dao.GetDB() - // task := tasksch.NewParallelTask("RefreshPageAct", nil, ctx, - // func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - // vendorID := batchItemList[0].(int) - // if handler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformPageActHandler); handler != nil { - // actList, err2 := handler.GetPageActList(ctx, createdFrom) - // if err = err2; err != nil { - // return nil, err - // } - // actInfo, err2 := dao.QueryActs(db, 0, 0, -1, "", vendorID, []int{model.ActStatusCreated}, []int{model.ActCreateTypeSpider}, - // nil, 0, 0, 0, utils.DefaultTimeValue, utils.DefaultTimeValue, createdFrom, utils.DefaultTimeValue) - // if err = err2; err != nil { - // return nil, err - // } - // // var - // } - // return retVal, err - // }, vendorIDs) +func RefreshPageActs(ctx *jxcontext.Context, vendorIDs []int, createdFrom time.Time, isAsync bool) (hint string, err error) { + task := tasksch.NewParallelTask("RefreshPageActs", nil, ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + vendorID := batchItemList[0].(int) + if handler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformPageActHandler); handler != nil { + db := dao.GetDB() + actList, err2 := handler.GetPageActList(ctx, createdFrom) + globals.SugarLogger.Debug(utils.Format4Output(actList, false)) + if err = err2; err != nil { + return nil, err + } + actInfo, err2 := dao.QueryActs(db, 0, 0, -1, "", vendorID, nil, []int{model.ActCreateTypeSpider}, + nil, 0, 0, 0, utils.DefaultTimeValue, utils.DefaultTimeValue, createdFrom, utils.DefaultTimeValue) + if err = err2; err != nil { + return nil, err + } + localActMap := make(map[string]*dao.ActVendorInfo) + for _, v := range actInfo.Data { + if v.VendorList[0].VendorActID != "" { + localActMap[v.VendorList[0].VendorActID] = v + } + } + var needAddActList []*model.Act2 + var needUpdateActList []*model.Act + for _, v := range actList { + localAct := localActMap[v.VendorActID] + if localAct == nil { + if v.Status == model.ActStatusCreated { + needAddActList = append(needAddActList, v) + } + } else if v.Status != localAct.Status { + localAct.Status = v.Status + needUpdateActList = append(needUpdateActList, &localAct.Act) + } + } + subTask := tasksch.NewParallelTask("RefreshPageAct Sub", nil, ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + act2 := batchItemList[0].(*model.Act2) + actStoreSkuList, err := handler.GetPageActSkuList(ctx, act2.VendorActID) + if err == nil { + retVal = actStoreSkuList + } + return retVal, err + }, needAddActList) + tasksch.AddChild(task, subTask).Run() + + skuList, err2 := subTask.GetResult(0) + if err = err2; err != nil { + return nil, err + } + needAddActSkuMap := make(map[string][]*model.ActStoreSku2) + for _, v := range skuList { + actStoreSku := v.(*model.ActStoreSku2) + needAddActSkuMap[actStoreSku.VendorActID] = append(needAddActSkuMap[actStoreSku.VendorActID], actStoreSku) + } + + dao.Begin(db) + defer func() { + if r := recover(); r != nil || err != nil { + dao.Rollback(db) + if r != nil { + panic(r) + } + } + }() + + for _, v := range needAddActList { + if len(needAddActSkuMap[v.VendorActID]) > 0 { + if _, err = createActFromVendor(ctx, db, v, needAddActSkuMap[v.VendorActID]); err != nil { + return nil, err + } + } + } + for _, v := range needUpdateActList { + if _, err = dao.UpdateEntity(db, v, model.FieldStatus); err != nil { + return nil, err + } + } + dao.Commit(db) + } + return retVal, err + }, vendorIDs) + tasksch.HandleTask(task, nil, true).Run() + if !isAsync { + hint = "1" + _, err = task.GetResult(0) + } else { + hint = task.GetID() + } return hint, err } diff --git a/business/model/dao/act.go b/business/model/dao/act.go index f2adc122e..5c4d99586 100644 --- a/business/model/dao/act.go +++ b/business/model/dao/act.go @@ -138,7 +138,8 @@ func GetActStoreSkuVendorInfo(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs return actStoreSkuMap, err } -func QueryActs(db *DaoDB, actID int, offset, pageSize int, keyword string, vendorID int, statusList, actTypeList, createTypeList []int, storeID, skuID, cityCode int, beginAt, endAt, createdAtFrom, createdAtTo time.Time) (pagedInfo *PagedActListInfo, err error) { +func QueryActs(db *DaoDB, actID int, offset, pageSize int, keyword string, vendorID int, statusList, actTypeList, createTypeList []int, + storeID, skuID, cityCode int, beginAt, endAt, createdAtFrom, createdAtTo time.Time) (pagedInfo *PagedActListInfo, err error) { if actID == 0 && utils.IsTimeZero(createdAtFrom) && utils.IsTimeZero(beginAt) { return nil, fmt.Errorf("actID,createdAtFrom和beginAt中,至少要指定一个条件") } diff --git a/business/partner/purchase/ebai/act_page.go b/business/partner/purchase/ebai/act_page.go index 35bb7a12d..9d77cd344 100644 --- a/business/partner/purchase/ebai/act_page.go +++ b/business/partner/purchase/ebai/act_page.go @@ -40,8 +40,8 @@ func ebaiPageActStatus2Jx(status int) int { func (c *PurchaseHandler) GetPageActList(ctx *jxcontext.Context, createdFrom time.Time) (actList []*model.Act2, err error) { var typeAndStatusList []*tShowStatusAndTypeInfo for _, showStatus := range []int{ - ebaiapi.PageActivityStatusWaiting, - ebaiapi.PageActivityStatusOnGoing, + ebaiapi.PageActivityShowStatusWaiting, + ebaiapi.PageActivityShowStatusOnGoing, // ebaiapi.PageActivityStatusEnded, } { for _, activityType := range []int{ @@ -81,7 +81,7 @@ func (c *PurchaseHandler) GetPageActList(ctx *jxcontext.Context, createdFrom tim BeginAt: utils.Timestamp2Time(ebaiAct.StartTime), EndAt: utils.Timestamp2Time(ebaiAct.EndTime), VendorMask: model.GetVendorMask(model.VendorIDEBAI), - LimitUser: 1, + LimitCount: 1, }, VendorID: model.VendorIDEBAI, VendorActID: ebaiAct.ActivityID, diff --git a/controllers/act.go b/controllers/act.go index 6893f202a..05a1fef11 100644 --- a/controllers/act.go +++ b/controllers/act.go @@ -246,3 +246,25 @@ func (c *ActController) UpdateActStoreSkuBind() { return retVal, "", err }) } + +// @Title 添加SKU活动商品 +// @Description 添加SKU活动商品 +// @Param token header string true "认证token" +// @Param vendorIDs formData string true "厂商ID列表" +// @Param createdFrom formData string true "创建开始日期" +// @Param isAsync formData bool false "是否异步" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /RefreshPageActs [put] +func (c *ActController) RefreshPageActs() { + c.callRefreshPageActs(func(params *tActRefreshPageActsParams) (retVal interface{}, errCode string, err error) { + timeList, err := jxutils.BatchStr2Time(params.CreatedFrom) + if err == nil { + var vendorIDs []int + if err = jxutils.Strings2Objs(params.VendorIDs, &vendorIDs); err == nil { + retVal, err = act.RefreshPageActs(params.Ctx, vendorIDs, timeList[0], params.IsAsync) + } + } + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 192506af4..b02df5e59 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -52,6 +52,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ActController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ActController"], + beego.ControllerComments{ + Method: "RefreshPageActs", + Router: `/RefreshPageActs`, + AllowHTTPMethods: []string{"put"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ActController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ActController"], beego.ControllerComments{ Method: "SyncAct",