307 lines
16 KiB
Go
307 lines
16 KiB
Go
package controllers
|
||
|
||
import (
|
||
"fmt"
|
||
"math"
|
||
"time"
|
||
|
||
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
|
||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||
"github.com/astaxie/beego"
|
||
)
|
||
|
||
type StoreSkuController struct {
|
||
beego.Controller
|
||
}
|
||
|
||
// @Title 得到商家商品信息
|
||
// @Description 得到商家商品信息,如下条件之间是与的关系。对于没有认领的商品,按城市限制。但对于已经认领的商品就不限制了,因为已经在平台上可售,可以操作(改价等等)
|
||
// @Param token header string true "认证token"
|
||
// @Param storeID query int true "门店ID"
|
||
// @Param isFocus query bool true "是否已关注(认领)"
|
||
// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)"
|
||
// @Param nameID query int false "SkuName ID"
|
||
// @Param nameIDs query string false "SkuName ID列表对象"
|
||
// @Param skuID query int false "Sku ID"
|
||
// @Param skuIDs query string false "Sku ID列表对象"
|
||
// @Param name query string false "商品名称(不要求完全一致)"
|
||
// @Param prefix query string false "商品前缀(不要求完全一致)"
|
||
// @Param categoryID query int false "商品所属类别ID"
|
||
// @Param unit query string false "商品单位"
|
||
// @Param jdID query int false "商品京东ID"
|
||
// @Param fromStatus query int false "查询起始状态(0:不可售,1:可售)"
|
||
// @Param toStatus query int false "查询结束状态(0:不可售,1:可售)"
|
||
// @Param stFromTime query string false "统计SKU开始时间"
|
||
// @Param stToTime query string false "统计SKU结束时间"
|
||
// @Param stFromCount query int false "统计SKU,结果集起始数量(包括)"
|
||
// @Param stToCount query int false "统计SKU,结果集结束数量(包括)"
|
||
// @Param isGetOpRequest query bool false "是否返回相应的待审核变动请求,缺省为false不返回"
|
||
// @Param offset query int false "门店列表起始序号(以0开始,缺省为0)"
|
||
// @Param pageSize query int false "门店列表页大小(缺省为50,-1表示全部)"
|
||
// @Param isBySku query bool false "是否按SKU分拆"
|
||
// @Success 200 {object} controllers.CallResult
|
||
// @Failure 200 {object} controllers.CallResult
|
||
// @router /GetStoreSkus [get]
|
||
func (c *StoreSkuController) GetStoreSkus() {
|
||
c.callGetStoreSkus(func(params *tStoreSkuGetStoreSkusParams) (retVal interface{}, errCode string, err error) {
|
||
retVal, err = cms.GetStoreSkus(params.Ctx, params.StoreID, params.IsFocus, params.Keyword, params.IsBySku, params.MapData, params.Offset, params.PageSize)
|
||
return retVal, "", err
|
||
})
|
||
}
|
||
|
||
// @Title 得到商家商品信息
|
||
// @Description 得到商家商品信息,如下条件之间是与的关系。对于没有认领的商品,按城市限制。但对于已经认领的商品就不限制了,因为已经在平台上可售,可以操作(改价等等)
|
||
// @Param token header string true "认证token"
|
||
// @Param storeIDs query string true "门店ID"
|
||
// @Param isFocus query bool true "是否已关注(认领)"
|
||
// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)"
|
||
// @Param nameIDs query string false "SkuName ID列表对象"
|
||
// @Param skuIDs query string false "Sku ID列表对象"
|
||
// @Param name query string false "商品名称(不要求完全一致)"
|
||
// @Param prefix query string false "商品前缀(不要求完全一致)"
|
||
// @Param categoryID query int false "商品所属类别ID"
|
||
// @Param unit query string false "商品单位"
|
||
// @Param jdID query int false "商品京东ID"
|
||
// @Param fromStatus query int false "查询起始状态(0:不可售,1:可售)"
|
||
// @Param toStatus query int false "查询结束状态(0:不可售,1:可售)"
|
||
// @Param stFromTime query string false "统计SKU开始时间"
|
||
// @Param stToTime query string false "统计SKU结束时间"
|
||
// @Param stFromCount query int false "统计SKU,结果集起始数量(包括)"
|
||
// @Param stToCount query int false "统计SKU,结果集结束数量(包括)"
|
||
// @Param isGetOpRequest query bool false "是否返回相应的待审核变动请求,缺省为false不返回"
|
||
// @Param offset query int false "门店列表起始序号(以0开始,缺省为0)"
|
||
// @Param pageSize query int false "门店列表页大小(缺省为50,-1表示全部)"
|
||
// @Param isBySku query bool false "是否按SKU分拆"
|
||
// @Success 200 {object} controllers.CallResult
|
||
// @Failure 200 {object} controllers.CallResult
|
||
// @router /GetStoresSkus [get]
|
||
func (c *StoreSkuController) GetStoresSkus() {
|
||
c.callGetStoresSkus(func(params *tStoreSkuGetStoresSkusParams) (retVal interface{}, errCode string, err error) {
|
||
var storeIDs []int
|
||
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs); err == nil {
|
||
retVal, err = cms.GetStoresSkus(params.Ctx, storeIDs, params.IsFocus, params.Keyword, params.IsBySku, params.MapData, params.Offset, params.PageSize)
|
||
}
|
||
return retVal, "", err
|
||
})
|
||
}
|
||
|
||
// @Title 修改商家商品绑定
|
||
// @Description 修改商家商品绑定,请换用UpdateStoresSkus
|
||
// @Param token header string true "认证token"
|
||
// @Param storeID formData int true 门店ID"
|
||
// @Param payload formData string true "json数据,StoreSkuBindInfo对象"
|
||
// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false"
|
||
// @Param isAsync formData bool false "是否异步操作"
|
||
// @Success 200 {object} controllers.CallResult
|
||
// @Failure 200 {object} controllers.CallResult
|
||
// @router /UpdateStoreSku [put]
|
||
func (c *StoreSkuController) UpdateStoreSku() {
|
||
c.callUpdateStoreSku(func(params *tStoreSkuUpdateStoreSkuParams) (retVal interface{}, errCode string, err error) {
|
||
var skuBindInfo cms.StoreSkuBindInfo
|
||
if err = jxutils.Strings2Objs(params.Payload, &skuBindInfo); err == nil {
|
||
retVal, err = cms.UpdateStoreSku(params.Ctx, params.StoreID, &skuBindInfo, params.IsAsync, params.IsContinueWhenError)
|
||
}
|
||
return retVal, "", err
|
||
})
|
||
}
|
||
|
||
// @Title 批量修改商家商品绑定
|
||
// @Description 批量修改商家商品绑定,请换用UpdateStoresSkus
|
||
// @Param token header string true "认证token"
|
||
// @Param storeID formData int true "门店ID"
|
||
// @Param payload formData string true "json数据,StoreSkuBindInfo对象数组"
|
||
// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false"
|
||
// @Param isAsync formData bool false "是否异步操作"
|
||
// @Success 200 {object} controllers.CallResult
|
||
// @Failure 200 {object} controllers.CallResult
|
||
// @router /UpdateStoreSkus [put]
|
||
func (c *StoreSkuController) UpdateStoreSkus() {
|
||
c.callUpdateStoreSkus(func(params *tStoreSkuUpdateStoreSkusParams) (retVal interface{}, errCode string, err error) {
|
||
var skuBindInfos []*cms.StoreSkuBindInfo
|
||
if err = jxutils.Strings2Objs(params.Payload, &skuBindInfos); err == nil {
|
||
retVal, err = cms.UpdateStoreSkus(params.Ctx, params.StoreID, skuBindInfos, params.IsAsync, params.IsContinueWhenError)
|
||
}
|
||
return retVal, "", err
|
||
})
|
||
}
|
||
|
||
// @Title 同步商家商品信息
|
||
// @Description 同步商家商品信息
|
||
// @Param token header string true "认证token"
|
||
// @Param storeIDs formData string true "门店ID列表"
|
||
// @Param vendorIDs formData string true "厂商ID列表"
|
||
// @Param skuIDs formData string false "SKU ID列表,缺省为全部"
|
||
// @Param isForce formData bool false "是否强制(设置修改标志)"
|
||
// @Param isAsync formData bool true "是否异步操作"
|
||
// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false"
|
||
// @Success 200 {object} controllers.CallResult
|
||
// @Failure 200 {object} controllers.CallResult
|
||
// @router /SyncStoresSkus [put]
|
||
func (c *StoreSkuController) SyncStoresSkus() {
|
||
c.callSyncStoresSkus(func(params *tStoreSkuSyncStoresSkusParams) (retVal interface{}, errCode string, err error) {
|
||
db := dao.GetDB()
|
||
var storeIDs, skuIDs, vendorIDs []int
|
||
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.SkuIDs, &skuIDs, params.VendorIDs, &vendorIDs); err != nil {
|
||
return retVal, "", err
|
||
}
|
||
retVal, err = cms.CurVendorSync.SyncStoresSkus(params.Ctx, db, vendorIDs, storeIDs, skuIDs, params.IsForce, params.IsAsync, params.IsContinueWhenError)
|
||
return retVal, "", err
|
||
})
|
||
}
|
||
|
||
// @Title 批量修改多商家商品绑定
|
||
// @Description 批量修改多商家商品绑定
|
||
// @Param token header string true "认证token"
|
||
// @Param storeIDs formData string true "门店ID列表"
|
||
// @Param payload formData string true "json数据,StoreSkuBindInfo对象数组"
|
||
// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false"
|
||
// @Param isAsync formData bool false "是否异步操作"
|
||
// @Success 200 {object} controllers.CallResult
|
||
// @Failure 200 {object} controllers.CallResult
|
||
// @router /UpdateStoresSkus [put]
|
||
func (c *StoreSkuController) UpdateStoresSkus() {
|
||
c.callUpdateStoresSkus(func(params *tStoreSkuUpdateStoresSkusParams) (retVal interface{}, errCode string, err error) {
|
||
var storeIDs []int
|
||
var skuBindInfos []*cms.StoreSkuBindInfo
|
||
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.Payload, &skuBindInfos); err != nil {
|
||
return retVal, "", err
|
||
}
|
||
retVal, err = cms.UpdateStoresSkus(params.Ctx, storeIDs, skuBindInfos, params.IsAsync, params.IsContinueWhenError)
|
||
return retVal, "", err
|
||
})
|
||
}
|
||
|
||
// @Title 拷贝门店SKU信息
|
||
// @Description 拷贝门店SKU信息(此函数当前只是本地数据操作,要同步到远端需要调用SyncStoresSkus)
|
||
// @Param token header string true "认证token"
|
||
// @Param fromStoreID formData int true "源门店ID"
|
||
// @Param toStoreID formData int true "目标门店ID"
|
||
// @Param copyMode formData string true "拷贝模式,fresh:目标门店数据全部清除后拷贝,update:确保指定的源数据全部拷贝,已有的忽略"
|
||
// @Param pricePercentage formData int false "价格调整百分比,缺省为100%"
|
||
// @Param categoryIDs formData string false "json数据,skuName所属的类别,[1,2,3]"
|
||
// @Param skuIDs formData string false "json数据,skuID列表,[1,2,3]"
|
||
// @Success 200 {object} controllers.CallResult
|
||
// @Failure 200 {object} controllers.CallResult
|
||
// @router /CopyStoreSkus [post]
|
||
func (c *StoreSkuController) CopyStoreSkus() {
|
||
c.callCopyStoreSkus(func(params *tStoreSkuCopyStoreSkusParams) (retVal interface{}, errCode string, err error) {
|
||
retVal, err = cms.CopyStoreSkus(params.Ctx, params.FromStoreID, params.ToStoreID, params.CopyMode, params.MapData, params.Ctx.GetUserName())
|
||
return retVal, "", err
|
||
})
|
||
}
|
||
|
||
// @Title 批量修改多商家商品可售状态
|
||
// @Description 批量修改多商家商品可售状态
|
||
// @Param token header string true "认证token"
|
||
// @Param storeIDs formData string true "门店ID列表"
|
||
// @Param payload formData string true "json数据,StoreSkuBindSkuInfo对象数组"
|
||
// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false"
|
||
// @Param isAsync formData bool false "是否异步操作"
|
||
// @Success 200 {object} controllers.CallResult
|
||
// @Failure 200 {object} controllers.CallResult
|
||
// @router /UpdateStoresSkusSale [put]
|
||
func (c *StoreSkuController) UpdateStoresSkusSale() {
|
||
c.callUpdateStoresSkusSale(func(params *tStoreSkuUpdateStoresSkusSaleParams) (retVal interface{}, errCode string, err error) {
|
||
var storeIDs []int
|
||
var skuBindSkuInfos []*cms.StoreSkuBindSkuInfo
|
||
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.Payload, &skuBindSkuInfos); err != nil {
|
||
return retVal, "", err
|
||
}
|
||
retVal, err = cms.UpdateStoresSkusSale(params.Ctx, storeIDs, skuBindSkuInfos, params.Ctx.GetUserName(), params.IsAsync, params.IsContinueWhenError)
|
||
return retVal, "", err
|
||
})
|
||
}
|
||
|
||
// @Title 得到商家商品销售情况
|
||
// @Description 得到商家商品销售情况
|
||
// @Param token header string true "认证token"
|
||
// @Param storeIDs query string true "门店ID列表"
|
||
// @Param skuIDs query string true "Sku ID列表"
|
||
// @Param stFromTime query string true "统计SKU开始时间"
|
||
// @Param stToTime query string false "统计SKU结束时间"
|
||
// @Param stFromCount query int false "统计SKU,结果集起始数量(包括)"
|
||
// @Param stToCount 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 /GetStoresSkusSaleInfo [get]
|
||
func (c *StoreSkuController) GetStoresSkusSaleInfo() {
|
||
c.callGetStoresSkusSaleInfo(func(params *tStoreSkuGetStoresSkusSaleInfoParams) (retVal interface{}, errCode string, err error) {
|
||
var (
|
||
storeIDs, skuIDs []int
|
||
timeList []time.Time
|
||
)
|
||
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.SkuIDs, &skuIDs); err != nil {
|
||
return retVal, "", err
|
||
}
|
||
if timeList, err = jxutils.BatchStr2Time(params.StFromTime, params.StToTime); err != nil {
|
||
return retVal, "", err
|
||
}
|
||
if params.MapData["stToToCount"] == nil {
|
||
params.StToCount = math.MaxInt32
|
||
}
|
||
retVal, err = cms.GetStoresSkusSaleInfo(params.Ctx, storeIDs, skuIDs, timeList[0], timeList[1], params.StFromCount, params.StToCount)
|
||
return retVal, "", err
|
||
})
|
||
}
|
||
|
||
// @Title 得到商家商品修改价格请求信息
|
||
// @Description 得到商家商品修改价格请求信息
|
||
// @Param token header string true "认证token"
|
||
// @Param fromTime query string false "申请开始时间"
|
||
// @Param toTime query string false "申请结束时间"
|
||
// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)"
|
||
// @Param storeIDs query string false "门店ID列表"
|
||
// @Param itemIDs query string false "id列表对象,当前指skuname id"
|
||
// @Param types query string false "类型列表对象"
|
||
// @Param statuss query string false "状态列表对象"
|
||
// @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 /GetStoreOpRequests [get]
|
||
func (c *StoreSkuController) GetStoreOpRequests() {
|
||
c.callGetStoreOpRequests(func(params *tStoreSkuGetStoreOpRequestsParams) (retVal interface{}, errCode string, err error) {
|
||
var (
|
||
timeList []time.Time
|
||
storeIDs, typeList, statusList, itemIDs []int
|
||
)
|
||
if timeList, err = jxutils.BatchStr2Time(params.FromTime, params.ToTime); err != nil {
|
||
return retVal, "", err
|
||
}
|
||
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.Types, &typeList, params.Statuss, &statusList, params.ItemIDs, &itemIDs); err != nil {
|
||
return retVal, "", err
|
||
}
|
||
retVal, err = cms.GetStoreOpRequests(params.Ctx, timeList[0], timeList[1], params.Keyword, storeIDs, itemIDs, typeList, statusList, params.Offset, params.PageSize)
|
||
return retVal, "", err
|
||
})
|
||
}
|
||
|
||
// @Title 处理商家商品价格申请
|
||
// @Description 处理商家商品价格申请
|
||
// @Param token header string true "认证token"
|
||
// @Param reqIDs formData string true "请求ID列表对象"
|
||
// @Param handleType formData int true "-1拒绝,1批准"
|
||
// @Param rejectReason formData string false "拒绝理由,拒绝时要求"
|
||
// @Success 200 {object} controllers.CallResult
|
||
// @Failure 200 {object} controllers.CallResult
|
||
// @router /HandleStoreOpRequest [put]
|
||
func (c *StoreSkuController) HandleStoreOpRequest() {
|
||
c.callHandleStoreOpRequest(func(params *tStoreSkuHandleStoreOpRequestParams) (retVal interface{}, errCode string, err error) {
|
||
var reqIDs []int
|
||
if err = jxutils.Strings2Objs(params.ReqIDs, &reqIDs); err != nil {
|
||
return retVal, "", err
|
||
}
|
||
if params.HandleType == 1 {
|
||
err = cms.AcceptStoreOpRequests(params.Ctx, reqIDs)
|
||
} else if params.HandleType == -1 {
|
||
err = cms.RejectStoreOpRequests(params.Ctx, reqIDs, params.RejectReason)
|
||
} else {
|
||
err = fmt.Errorf("handleType=%d是非法值", params.HandleType)
|
||
}
|
||
return retVal, "", err
|
||
})
|
||
}
|