- GetActStoreSkuInfo没有商品信息时不报错

- 不存储空的饿百网页活动
This commit is contained in:
gazebo
2019-07-10 17:25:48 +08:00
parent 2a00388711
commit e8f93aed2d
5 changed files with 132 additions and 26 deletions

View File

@@ -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
}

View File

@@ -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中至少要指定一个条件")
}

View File

@@ -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,

View File

@@ -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
})
}

View File

@@ -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",