diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index 4f547caa3..4d68e5826 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -538,13 +538,25 @@ func QueryActs(ctx *jxcontext.Context, actID int, offset, pageSize int, keyword return dao.QueryActs(dao.GetDB(), actID, offset, pageSize, keyword, vendorID, statusList, actTypeList, createTypeList, storeID, skuID, cityCode, beginAt, endAt, createdAtFrom, createdAtTo) } -func GetActStoreSkuInfo(ctx *jxcontext.Context, actID int, vendorIDs []int) (actStoreSkuList []*model.ActStoreSku2, err error) { +func GetActStoreSkuInfo(ctx *jxcontext.Context, actID int, vendorIDs []int, keyword string, offset, pageSize int) (retVal interface{}, err error) { db := dao.GetDB() - actStoreSkuList, err = dao.GetActStoreSkuVendorList(db, actID, vendorIDs, nil, nil) + totalCount, actStoreSkuList, err := dao.GetActStoreSkuVendorList(db, actID, vendorIDs, nil, nil, keyword, offset, pageSize) if err != nil { return nil, err } - return actStoreSkuList, err + for _, v := range actStoreSkuList { + v.SkuName = jxutils.ComposeSkuName(v.Prefix, v.SkuNameName, v.Comment, v.Unit, v.SpecQuality, v.SpecUnit, 0) + } + if pageSize > 0 && pageSize != model.UnlimitedPageSize { + pagedInfo := &model.PagedInfo{ + TotalCount: totalCount, + Data: actStoreSkuList, + } + retVal = pagedInfo + } else { + retVal = actStoreSkuList + } + return retVal, err } func CancelAct(ctx *jxcontext.Context, actID int) (err error) { @@ -808,10 +820,11 @@ func DeleteSkusFromAct(ctx *jxcontext.Context, vendorID int, skuIDs []int, isAsy db := dao.GetDB() actMap := make(map[int]*model.Act) for _, skuID := range skuIDs { - pagedInfo, err2 := dao.QueryActs(db, 0, 0, -1, "", vendorID, []int{model.ActStatusCreated}, nil, nil, 0, skuID, 0, time.Now(), time.Now(), utils.DefaultTimeValue, utils.DefaultTimeValue) + pagedInfo, err2 := dao.QueryActs(db, 0, 0, -1, "", vendorID, []int{model.ActStatusCreated}, nil, nil, 0, skuID, 0, utils.DefaultTimeValue, utils.DefaultTimeValue, time.Now().Add(-24*30*3*time.Hour), utils.DefaultTimeValue) if err = err2; err != nil { return "", err } + globals.SugarLogger.Debug(utils.Format4Output(pagedInfo, false)) for _, v := range pagedInfo.Data { actMap[v.Act.ID] = &v.Act } @@ -827,7 +840,7 @@ func DeleteSkusFromAct(ctx *jxcontext.Context, vendorID int, skuIDs []int, isAsy task := tasksch.NewParallelTask("将SKU从所有活动中删除", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { actID := batchItemList[0].(int) - actStoreSkuList, err := dao.GetActStoreSkuVendorList(db, actID, []int{-1}, nil, skuIDs) + _, actStoreSkuList, err := dao.GetActStoreSkuVendorList(db, actID, []int{-1}, nil, skuIDs, "", 0, -1) if err == nil { // db := dao.GetDB() var deleteList []*ActStoreSkuParam diff --git a/business/jxutils/jxutils_cms.go b/business/jxutils/jxutils_cms.go index 2a78f02c9..da30c40d4 100644 --- a/business/jxutils/jxutils_cms.go +++ b/business/jxutils/jxutils_cms.go @@ -340,6 +340,10 @@ func FormalizePageSize(pageSize int) int { return dao.FormalizePageSize(pageSize) } +func FormalizePageOffset(pageSize int) int { + return dao.FormalizePageOffset(pageSize) +} + func FormalizeName(name string) string { return utils.TrimBlankChar(strings.Replace(strings.Replace(name, "\t", "", -1), "\"", "", -1)) } diff --git a/business/model/act.go b/business/model/act.go index 7ec305027..64021fb9d 100644 --- a/business/model/act.go +++ b/business/model/act.go @@ -191,4 +191,13 @@ type ActStoreSku2 struct { StoreName string `json:"storeName"` VendorSkuID string `orm:"column(vendor_sku_id)" json:"vendorSkuID"` + + SkuName string `json:"skuName"` + + Prefix string `json:"-"` + SkuNameName string `orm:"column(sku_name_name)" json:"-"` + Unit string `orm:"size(8)" json:"-"` + SpecQuality float32 `json:"-"` + SpecUnit string `json:"-"` + Comment string `json:"-"` } diff --git a/business/model/dao/act.go b/business/model/dao/act.go index 2fd6d9418..5c664d859 100644 --- a/business/model/dao/act.go +++ b/business/model/dao/act.go @@ -69,14 +69,18 @@ func GetActVendorInfo(db *DaoDB, actID int, vendorIDs []int) (actMap map[int]*mo return actMap, err } -func GetActStoreSkuVendorList(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs []int) (actStoreSkuList []*model.ActStoreSku2, err error) { +func GetActStoreSkuVendorList(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs []int, keyword string, offset, pageSize int) (totalCount int, actStoreSkuList []*model.ActStoreSku2, err error) { globals.SugarLogger.Debugf("GetActStoreSkuVendorList actID:%d", actID) + offset = FormalizePageOffset(offset) + pageSize = FormalizePageSize(pageSize) + leftOrEmpty := "" if len(vendorIDs) == 1 && vendorIDs[0] == -1 { leftOrEmpty = "LEFT" } sql := fmt.Sprintf(` - SELECT t1.*, + SELECT SQL_CALC_FOUND_ROWS + t1.*, t2.id map_id, t2.vendor_id, t2.vendor_act_id, t2.sync_status, t2.actual_act_price, t2.vendor_price, t3.vendor_store_id, CASE t2.vendor_id @@ -89,7 +93,9 @@ func GetActStoreSkuVendorList(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs ELSE '' END vendor_sku_id, - t6.name store_name + t4.comment, t4.spec_quality, t4.spec_unit, + t6.name store_name, + t7.name sku_name_name, t7.unit, t7.prefix FROM act_store_sku t1 %s JOIN act_store_sku_map t2 ON t2.act_id = ? AND t2.bind_id = t1.id AND t2.deleted_at = ?`, leftOrEmpty) sqlParams := []interface{}{ @@ -106,6 +112,7 @@ func GetActStoreSkuVendorList(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs JOIN sku t4 ON t4.id = t1.sku_id LEFT JOIN store_sku_bind t5 ON t5.sku_id = t1.sku_id AND t5.store_id = t1.store_id AND t5.deleted_at = ? LEFT JOIN store t6 ON t6.id = t1.store_id + JOIN sku_name t7 ON t7.id = t4.name_id WHERE t1.act_id = ? `, leftOrEmpty) sqlParams = append(sqlParams, @@ -113,6 +120,16 @@ func GetActStoreSkuVendorList(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs utils.DefaultTimeValue, actID, ) + if keyword != "" { + keywordLike := "%" + keyword + "%" + sql += " AND (t7.namke LIKE ? OR t6.name LIKE ?" + sqlParams = append(sqlParams, keywordLike, keywordLike) + if intKeyword := int(utils.Str2Int64WithDefault(keyword, 0)); intKeyword > 0 { + sql += " OR t1.sku_id = ? OR t1.store_id = ?" + sqlParams = append(sqlParams, intKeyword, intKeyword) + } + sql += ")" + } if leftOrEmpty != "" { sql += " AND t1.deleted_at = ?" sqlParams = append(sqlParams, utils.DefaultTimeValue) @@ -125,11 +142,17 @@ func GetActStoreSkuVendorList(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")" sqlParams = append(sqlParams, skuIDs) } - globals.SugarLogger.Debug(sql) - globals.SugarLogger.Debug(utils.Format4Output(sqlParams, false)) + sql += " LIMIT ? OFFSET ?;" + sqlParams = append(sqlParams, pageSize, offset) + // globals.SugarLogger.Debug(sql) + // globals.SugarLogger.Debug(utils.Format4Output(sqlParams, false)) // globals.SugarLogger.Debug(utils.Format4Output(actStoreSkuList, false)) - err = GetRows(db, &actStoreSkuList, sql, sqlParams...) - return actStoreSkuList, err + Begin(db) + defer Rollback(db) + if err = GetRows(db, &actStoreSkuList, sql, sqlParams...); err == nil { + totalCount = GetLastTotalRowCount(db) + } + return totalCount, actStoreSkuList, err } func GetActStoreSkuVendorInfo(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs []int) (actStoreSkuMap map[int][]*model.ActStoreSku2, err error) { @@ -137,7 +160,7 @@ func GetActStoreSkuVendorInfo(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs if len(vendorIDs) == 1 && vendorIDs[0] == -1 { leftOrEmpty = "LEFT" } - actStoreSkuList, err := GetActStoreSkuVendorList(db, actID, vendorIDs, storeIDs, skuIDs) + _, actStoreSkuList, err := GetActStoreSkuVendorList(db, actID, vendorIDs, storeIDs, skuIDs, "", 0, -1) if err == nil { actStoreSkuMap = make(map[int][]*model.ActStoreSku2) for _, v := range actStoreSkuList { diff --git a/controllers/act.go b/controllers/act.go index 88d3a6b40..d52f0c1b5 100644 --- a/controllers/act.go +++ b/controllers/act.go @@ -169,6 +169,9 @@ func (c *ActController) CancelAct() { // @Param token header string true "认证token" // @Param actID query int true "活动id" // @Param vendorIDs query string false "厂商ID列表" +// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)" +// @Param offset query int false "起始序号(以0开始,缺省为0)" +// @Param pageSize query int false "表页大小(缺省全部)" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /GetActStoreSkuInfo [get] @@ -176,7 +179,10 @@ func (c *ActController) GetActStoreSkuInfo() { c.callGetActStoreSkuInfo(func(params *tActGetActStoreSkuInfoParams) (retVal interface{}, errCode string, err error) { var vendorIDs []int if err = jxutils.Strings2Objs(params.VendorIDs, &vendorIDs); err == nil { - retVal, err = act.GetActStoreSkuInfo(params.Ctx, params.ActID, vendorIDs) + if params.PageSize == 0 { + params.PageSize = -1 + } + retVal, err = act.GetActStoreSkuInfo(params.Ctx, params.ActID, vendorIDs, params.Keyword, params.Offset, params.PageSize) } return retVal, "", err })