diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index dff48f294..7b9d16948 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -264,6 +264,125 @@ var ( } ) +func GetStoresSkusForStore(ctx *jxcontext.Context, storeID int, isFocus, isAct bool, keyword string, categoryID, status, offset, pageSize int) (skuNamesInfo *dao.StoreSkuNamesInfo, err error) { + //权限 + if permission.IsRoled(ctx) { + if storeIDsMap, err := permission.GetUserStoresResultMap(ctx.GetUserID()); err == nil { + if storeIDsMap[storeID] == 0 { + return skuNamesInfo, err + } + } + } + var ( + sqlParams []interface{} + db = dao.GetDB() + SkuNames []*dao.StoreSkuNameExt + ) + sql := ` + SELECT SQL_CALC_FOUND_ROWS a.*, c.store_id + FROM sku_name a + LEFT JOIN sku b ON b.name_id = a.id AND b.status = ? AND b.deleted_at = ? + JOIN store d ON d.deleted_at = ? AND d.id = ? + ` + sqlParams = append(sqlParams, + model.SkuStatusNormal, utils.DefaultTimeValue, + utils.DefaultTimeValue, storeID, + ) + if isFocus { + sql += ` + LEFT + ` + } + sql += ` + JOIN store_sku_bind c ON c.sku_id = b.id AND c.deleted_at = ? AND c.store_id = d.id + ` + sqlParams = append(sqlParams, utils.DefaultTimeValue) + if status != -1 { + sql += " AND c.status = ?" + sqlParams = append(sqlParams, status) + } + sql += ` + LEFT JOIN sku_category d ON d.id = c.category_id AND d.deleted_at = ? + ` + if categoryID != 0 { + sql += " AND d.id = ?" + sqlParams = append(sqlParams, categoryID) + } + if isAct { + sql += ` + JOIN ( + SELECT t2.store_id, t2.sku_id, + MIN(IF(t3.actual_act_price <= 0, NULL, t3.actual_act_price)) actual_act_price, /*non-zero min value*/ + MIN(IF(t2.earning_price <= 0, NULL, t2.earning_price)) earning_price /*non-zero min value*/ + FROM act t1 + JOIN act_store_sku t2 ON t2.act_id = t1.id AND t2.deleted_at = ? + JOIN act_store_sku_map t3 ON t3.bind_id = t2.id AND t3.act_id = t1.id AND (t3.sync_status & ? = 0 OR t1.type = ?) + JOIN act_map t4 ON t4.act_id = t1.id AND t4.vendor_id = t3.vendor_id AND t4.deleted_at = ? AND (t4.sync_status & ? = 0 OR t1.type = ?) + WHERE t1.deleted_at = ? AND t1.status = ? AND NOT (t1.begin_at > ? OR t1.end_at < ?) + AND t2.store_id = ? + GROUP BY 1,2 + ) ta ON ta.store_id = d.id AND ta.sku_id = b.id + ` + sqlParams = append(sqlParams, + utils.DefaultTimeValue, + model.SyncFlagNewMask, + model.ActSkuFake, + utils.DefaultTimeValue, + model.SyncFlagNewMask, + model.ActSkuFake, + utils.DefaultTimeValue, + model.ActStatusCreated, + time.Now(), + time.Now(), + storeID, + ) + } + sql += ` + WHERE a.deleted_at = ? AND a.status = ? + ` + sqlParams = append(sqlParams, + utils.DefaultTimeValue, model.SkuStatusNormal, + ) + + if keyword != "" { + sql += " AND a.name LIKE ?" + sqlParams = append(sqlParams, "%"+keyword+"%") + } + sql += ` + LIMIT ? OFFSET ? + ` + pageSize = jxutils.FormalizePageSize(pageSize) + offset = jxutils.FormalizePageOffset(offset) + sqlParams = append(sqlParams, pageSize, offset) + dao.Begin(db) + defer dao.Commit(db) + if err = dao.GetRows(db, &SkuNames, sql, sqlParams...); err == nil { + skuNamesInfo.TotalCount = dao.GetLastTotalRowCount(db) + for _, v := range SkuNames { + var skus []*dao.StoreSkuExt + sql := ` + SELECT * FROM sku WHERE deleted_at = ? AND name_id = ? + ` + sqlParams := []interface{}{utils.DefaultTimeValue, v.ID} + if err = dao.GetRows(db, &skus, sql, sqlParams); err == nil { + v.Skus = skus + } + } + skuNamesInfo.SkuNames = SkuNames + if err == nil { + if isFocus { + if err == nil { + storeIDs, skuIDs := GetStoreAndSkuIDsFromInfo(skuNamesInfo) + err = dao.UpdateActPrice4StoreSkuNameNew(db, storeIDs, skuIDs, skuNamesInfo, -1) + } + } else { + err = updateUnitPrice4StoreSkuNameNew(db, skuNamesInfo) + } + } + } + return skuNamesInfo, err +} + func GetStoreSkus(ctx *jxcontext.Context, storeID int, skuIDs []int, isFocus bool, keyword string, isBySku, isAct bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *dao.StoreSkuNamesInfo, err error) { return GetStoresSkus(ctx, []int{storeID}, skuIDs, nil, isFocus, false, 0, keyword, isBySku, isAct, params, offset, pageSize) } diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index b5828e5cc..c8a76ad69 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -944,28 +944,20 @@ func (c *StoreSkuController) GetVendorStoreSkus() { // @Title 得到商家商品信息 // @Description 得到商家商品信息,如下条件之间是与的关系。对于没有认领的商品,按城市限制。但对于已经认领的商品就不限制了,因为已经在平台上可售,可以操作(改价等等) // @Param token header string false "认证token" -// @Param storeIDs query string false "门店ID" +// @Param storeID query int true "门店ID" // @Param isFocus query bool true "是否已关注(认领)" // @Param keyword query string false "查询关键字(可以为空,为空表示不限制)" -// @Param name query string false "商品名称(不要求完全一致)" // @Param categoryID query int false "商品所属类别ID" -// @Param fromStatus query int false "查询起始状态(0:不可售,1:可售)" -// @Param toStatus query int false "查询结束状态(0:不可售,1:可售)" +// @Param status query int false "查询起始状态(0:不可售,1:可售,-1 全部)" // @Param offset query int false "门店列表起始序号(以0开始,缺省为0)" // @Param pageSize query int false "门店列表页大小(缺省为50,-1表示全部)" -// @Param isBySku query bool false "是否按SKU分拆" // @Param isAct query bool false "是否活动商品(包括正常活动与补贴)" -// @Param actVendorID query int false "要得到哪个平台的活动信息(缺省不限制,非零最小值)" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /GetStoresSkusForStore [get] func (c *StoreSkuController) GetStoresSkusForStore() { - // c.callGetStoresSkus(func(params *tStoreSkuGetStoresSkusParams) (retVal interface{}, errCode string, err error) { - // var storeIDs, skuIDs []int - // var upcs []string - // if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.SkuIDs, &skuIDs, params.Upcs, &upcs); err == nil { - // retVal, err = cms.GetStoresSkus(params.Ctx, storeIDs, skuIDs, upcs, params.IsFocus, params.IsHighPrice, params.PriceType, params.Keyword, params.IsBySku, params.IsAct, params.MapData, params.Offset, params.PageSize) - // } - // return retVal, "", err - // }) + c.callGetStoresSkusForStore(func(params *tStoreSkuGetStoresSkusForStoreParams) (retVal interface{}, errCode string, err error) { + retVal, err = cms.GetStoresSkusForStore(params.Ctx, params.StoreID, params.IsFocus, params.IsAct, params.Keyword, params.CategoryID, params.Status, params.Offset, params.PageSize) + return retVal, "", err + }) }