Files
jx-callback/controllers/cms_sku.go
richboo111 802f04bd28 mt sku
2023-08-30 15:06:19 +08:00

968 lines
43 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package controllers
import (
"strings"
"time"
"git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm"
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
"git.rosy.net.cn/jx-callback/business/jxstore/misc"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/business/partner/purchase/tiktok_store"
"git.rosy.net.cn/jx-callback/globals"
"github.com/astaxie/beego/server/web"
)
type SkuController struct {
web.Controller
}
// @Title 得到厂商商品类别
// @Description 得到厂商商品类别区别于商家SKU类别
// @Param token header string true "认证token"
// @Param vendorID query int true "厂商ID"
// @Param parentID query string false "父ID-1表示所有缺省为空"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetVendorCategories [get]
func (c *SkuController) GetVendorCategories() {
c.callGetVendorCategories(func(params *tSkuGetVendorCategoriesParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.GetVendorCategories(params.Ctx, params.VendorID, params.ParentID)
return retVal, "", err
})
}
// @Title 得到厂商商品类别2
// @Description 得到厂商商品类别2区别于商家SKU类别
// @Param token header string true "认证token"
// @Param vendorID query int true "厂商ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetVendorCategoriesWithMap [get]
func (c *SkuController) GetVendorCategoriesWithMap() {
c.callGetVendorCategoriesWithMap(func(params *tSkuGetVendorCategoriesWithMapParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.GetVendorCategoriesWithMap(params.Ctx, params.VendorID)
return retVal, "", err
})
}
// @Title 得到商品类别
// @Description 得到商品类别区别于厂商家SKU类别
// @Param token header string false "认证token"
// @Param parentID query int false "父ID-1表示所有缺省为-1"
// @Param isExd query bool false "是否要查饿鲜达分类"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetCategories [get]
func (c *SkuController) GetCategories() {
c.callGetCategories(func(params *tSkuGetCategoriesParams) (retVal interface{}, errCode string, err error) {
if c.GetString("parentID") == "" {
params.ParentID = -1
}
retVal, err = cms.GetCategories(params.Ctx, params.ParentID, params.IsExd)
return retVal, "", err
})
}
// @Title 新增商品类别
// @Description 新增商品类别区别于厂商家SKU类别
// @Param token header string true "认证token"
// @Param payload formData string true "json数据skuCategory对象()"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /AddCategory [post]
func (c *SkuController) AddCategory() {
c.callAddCategory(func(params *tSkuAddCategoryParams) (retVal interface{}, errCode string, err error) {
cat := &model.SkuCategory{}
if err = utils.UnmarshalUseNumber([]byte(params.Payload), cat); err == nil {
retVal, err = cms.AddCategory(params.Ctx, cat, params.Ctx.GetUserName())
}
return retVal, "", err
})
}
// @Title 修改商品类别
// @Description 修改商品类别区别于厂商家SKU类别
// @Param token header string true "认证token"
// @Param categoryID formData int true "类别IDpayload中的相应字段会被忽略"
// @Param payload formData string true "json数据skuCategory对象()"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateCategory [put]
func (c *SkuController) UpdateCategory() {
c.callUpdateCategory(func(params *tSkuUpdateCategoryParams) (retVal interface{}, errCode string, err error) {
payload := make(map[string]interface{})
if err = utils.UnmarshalUseNumber([]byte(params.Payload), &payload); err == nil {
retVal, err = cms.UpdateCategory(params.Ctx, params.CategoryID, payload, params.Ctx.GetUserName())
}
return retVal, "", err
})
}
// @Title 商品类别重排序
// @Description 商品类别重排序区别于厂商家SKU类别
// @Param token header string true "认证token"
// @Param categoryID formData int true "父ID"
// @Param categoryIDs formData string true "同一父类别下的所有子类别ID列表([1,2,3,4])"
// @Param isExd query bool false "是否要查饿鲜达分类"
// @Param onlySort query int false "1-仅仅排序/其他就是排序加同步分类"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /ReorderCategories [put]
func (c *SkuController) ReorderCategories() {
c.callReorderCategories(func(params *tSkuReorderCategoriesParams) (retVal interface{}, errCode string, err error) {
var idList []int
if err = utils.UnmarshalUseNumber([]byte(params.CategoryIDs), &idList); err == nil {
err = cms.ReorderCategories(params.Ctx, params.CategoryID, idList, params.Ctx.GetUserName(), params.IsExd, params.OnlySort)
}
return retVal, "", err
})
}
// @Title 删除商品类别
// @Description 删除商品类别,只有无商品且无子类别的才能删除
// @Param token header string true "认证token"
// @Param categoryID query int true "商品类别ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /DeleteCategory [delete]
func (c *SkuController) DeleteCategory() {
c.callDeleteCategory(func(params *tSkuDeleteCategoryParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.DeleteCategory(params.Ctx, params.CategoryID, params.Ctx.GetUserName())
return retVal, "", err
})
}
// @Title 同步商家SKU类别
// @Description 同步商家SKU类别
// @Param token header string true "认证token"
// @Param categoryID query int true "SKU类别ID, -1表示所有"
// @Param isAsync query bool false "是否异步"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /SyncCategory [put]
func (c *SkuController) SyncCategory() {
c.callSyncCategory(func(params *tSkuSyncCategoryParams) (retVal interface{}, errCode string, err error) {
db := dao.GetDB()
retVal, err = cms.CurVendorSync.SyncCategory(params.Ctx, db, params.CategoryID, params.IsAsync, params.Ctx.GetUserName())
return retVal, "", err
})
}
// @Title 得到商品信息
// @Description 得到商品信息,如下条件之间是与的关系
// @Param token header string true "认证token"
// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)"
// @Param nameIDs query string false "SkuName IDs列表"
// @Param skuIDs query string false "Sku ID列表"
// @Param vendorSkuIDs query string false "厂商SKU ID列表"
// @Param name query string false "商品名称(不要求完全一致)"
// @Param prefix query string false "商品前缀(不要求完全一致)"
// @Param placeCond query string false "查询地点的条件如果此字段没有设置placeCode与isGlobal无效andor指的是placeCodeisGlobal这两个条件间的关系这组条件与其它条件都是与的关系"
// @Param placeCode query int false "可售地点Code"
// @Param isGlobal query bool false "是否全球可售"
// @Param categoryID query int false "商品名所属类别ID"
// @Param skuCategoryID query int false "商品所属类别ID"
// @Param unit query string false "商品单位"
// @Param isSpu query bool false "是否是SPU"
// @Param isExd query bool false "是否是饿鲜达商品"
// @Param fromStatus query int false "查询起始状态0下架1正常"
// @Param toStatus query int false "查询起始状态0下架1正常"
// @Param offset query int false "门店列表起始序号以0开始缺省为0"
// @Param pageSize query int false "门店列表页大小缺省为50-1表示全部"
// @Param isBySku query bool false "是否将sku拆开缺省为false"
// @Param isQueryMidPrice query bool false "是否查询中位价缺省为false"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetSkuNames [get,post]
func (c *SkuController) GetSkuNames() {
c.callGetSkuNames(func(params *tSkuGetSkuNamesParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.GetSkuNames(params.Ctx, params.Keyword, params.IsBySku, params.IsQueryMidPrice, params.MapData, params.Offset, params.PageSize)
return retVal, "", err
})
}
// @Title 新增商品名(及商品)信息
// @Description 新增商品名(及商品)信息
// @Param token header string true "认证token"
// @Param payload formData string true "json数据SkuNameExt对象()可传Skus及Places"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /AddSkuName [post]
func (c *SkuController) AddSkuName() {
c.callAddSkuName(func(params *tSkuAddSkuNameParams) (retVal interface{}, errCode string, err error) {
skuName := &model.SkuNameExt{}
if err = utils.UnmarshalUseNumber([]byte(params.Payload), skuName); err == nil {
retVal, err = cms.AddSkuName(params.Ctx, skuName, params.Ctx.GetUserName())
}
return retVal, "", err
})
}
// @Title 修改商品名信息
// @Description 修改商品名信息注意如果Places没有变动不要传此字段否则会导致不必要的删除与新增
// @Param token header string true "认证token"
// @Param nameID formData int true "需要修改的商品名IDpayload中的相应数据会被忽略"
// @Param payload formData string true "json数据SkuNameExt对象()Skus无效, Places有效"
// @Param isExd formData bool fasle "是否要修改饿鲜达商品"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateSkuName [put]
func (c *SkuController) UpdateSkuName() {
c.callUpdateSkuName(func(params *tSkuUpdateSkuNameParams) (retVal interface{}, errCode string, err error) {
// var payload map[string]interface{}
// dummySkuName := &model.SkuName{}
payload := make(map[string]interface{})
if err = utils.UnmarshalUseNumber([]byte(params.Payload), &payload); err == nil {
delete(payload, "exPrefix")
delete(payload, "exPrefixBegin")
delete(payload, "exPrefixEnd")
delete(payload, "imgWaterMark")
delete(payload, "exVendorID")
retVal, err = cms.UpdateSkuName(params.Ctx, params.NameID, payload, params.IsExd)
}
return retVal, "", err
})
}
// @Title 仅修改商品图片
// @Description 仅在本地数据库修改商品图片
// @Param token header string true "认证token"`
// @Param skuID formData int true "商品名ID"
// @Param payload formData string true "商品图片"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateSkuImg [put]
func (c *SkuController) UpdateSkuImg() {
c.callUpdateSkuImg(func(params *tSkuUpdateSkuImgParams) (retVal interface{}, errCode string, err error) {
payload := make(map[string]interface{})
if err = utils.UnmarshalUseNumber([]byte(params.Payload), &payload); err == nil {
retVal, err = cms.UpdateSkuImg(params.Ctx, params.SkuID, payload)
}
return retVal, "", nil
})
}
// @Title 删除商品名
// @Description 此前商品名下的所有商品也会被级连删除
// @Param token header string true "认证token"
// @Param nameID query int true "商品名ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /DeleteSkuName [delete]
func (c *SkuController) DeleteSkuName() {
c.callDeleteSkuName(func(params *tSkuDeleteSkuNameParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.DeleteSkuName(params.Ctx, params.NameID, params.Ctx.GetUserName())
return retVal, "", err
})
}
// @Title 新增商品
// @Description 新增商品
// @Param token header string true "认证token"
// @Param nameID formData int true "商品名ID, playload中的相应字段会被忽略"
// @Param payload formData string true "json数据Sku对象()"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /AddSku [post]
func (c *SkuController) AddSku() {
c.callAddSku(func(params *tSkuAddSkuParams) (retVal interface{}, errCode string, err error) {
sku := &model.Sku{}
if err = utils.UnmarshalUseNumber([]byte(params.Payload), sku); err == nil {
retVal, err = cms.AddSku(params.Ctx, params.NameID, sku, params.Ctx.GetUserName())
}
return retVal, "", err
})
}
// @Title 修改商品信息
// @Description 修改商品信息
// @Param token header string true "认证token"
// @Param skuID formData int true "需要修改的商品名IDpayload中的相应数据会被忽略"
// @Param payload formData string true "json数据Sku对象"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateSku [put]
func (c *SkuController) UpdateSku() {
c.callUpdateSku(func(params *tSkuUpdateSkuParams) (retVal interface{}, errCode string, err error) {
payload := make(map[string]interface{})
if err = utils.UnmarshalUseNumber([]byte(params.Payload), &payload); err == nil {
retVal, err = cms.UpdateSku(params.Ctx, params.SkuID, payload)
}
return retVal, "", err
})
}
// @Title 删除商品
// @Description 删除商品
// @Param token header string true "认证token"
// @Param skuID query int true "商品ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /DeleteSku [delete]
func (c *SkuController) DeleteSku() {
c.callDeleteSku(func(params *tSkuDeleteSkuParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.DeleteSku(params.Ctx, params.SkuID, params.Ctx.GetUserName())
return retVal, "", err
})
}
// @Title 新增商品名可售地点绑定(不推荐使用)
// @Description 新增商品名可售地点绑定(不推荐使用)
// @Param token header string true "认证token"
// @Param nameID formData int true "商品名ID"
// @Param placeCode formData int true "地点代码"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /AddSkuNamePlace [post]
func (c *SkuController) AddSkuNamePlace() {
c.callAddSkuNamePlace(func(params *tSkuAddSkuNamePlaceParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.AddSkuNamePlace(params.Ctx, params.NameID, params.PlaceCode, params.Ctx.GetUserName())
return retVal, "", err
})
}
// @Title 删除商品名可售地点绑定(不推荐使用)
// @Description 删除商品名可售地点绑定(不推荐使用)
// @Param token header string true "认证token"
// @Param nameID query int true "商品名ID"
// @Param placeCode query int true "地点代码"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /DeleteSkuNamePlace [delete]
func (c *SkuController) DeleteSkuNamePlace() {
c.callDeleteSkuNamePlace(func(params *tSkuDeleteSkuNamePlaceParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.DeleteSkuNamePlace(params.Ctx, params.NameID, params.PlaceCode, params.Ctx.GetUserName())
return retVal, "", err
})
}
// // @Title 远程查询厂商SKU信息
// // @Description 远程查询厂商SKU信息这个是实时调用API远程查询不推荐使用
// // @Param token header string true "认证token"
// // @Param vendorSkuID query string true "sku ID"
// // @Param vendorID query int true "门店所属的厂商ID"
// // @Param vendorOrgCode query string false "厂商内组织代码"
// // @Success 200 {object} controllers.CallResult
// // @Failure 200 {object} controllers.CallResult
// // @router /GetVendorSku [get]
// func (c *SkuController) GetVendorSku() {
// c.callGetVendorSku(func(params *tSkuGetVendorSkuParams) (retVal interface{}, errCode string, err error) {
// retVal, err = cms.GetVendorSku(params.Ctx, params.VendorID, params.VendorOrgCode, params.VendorSkuID)
// return retVal, "", err
// })
// }
// @Title 同步商家SKU
// @Description 同步商家SKU
// @Param token header string true "认证token"
// @Param nameID formData int true "name ID, -1表示所有"
// @Param skuID formData int true "sku ID, -1表示所有"
// @Param isAsync formData bool false "是否异步"
// @Param isContinueWhenError formData bool false "单个同步失败是否继续缺省false"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /SyncSku [put]
func (c *SkuController) SyncSku() {
c.callSyncSku(func(params *tSkuSyncSkuParams) (retVal interface{}, errCode string, err error) {
db := dao.GetDB()
retVal, err = cms.CurVendorSync.SyncSku(params.Ctx, db, params.NameID, params.SkuID, params.IsAsync, params.IsContinueWhenError, params.Ctx.GetUserName())
return retVal, "", err
})
}
// @Title 获取敏感词列表
// @Description 获取敏感词列表
// @Param token header string true "认证token"
// @Param vendorID query int false "VendorID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetSensitiveWordList [get]
func (c *SkuController) GetSensitiveWordList() {
c.callGetSensitiveWordList(func(params *tSkuGetSensitiveWordListParams) (retVal interface{}, errCode string, err error) {
sensitiveWordList, err := dao.GetSensitiveWordList(params.VendorID)
var wordList []string
for _, value := range sensitiveWordList {
wordList = append(wordList, value.Word)
}
retVal = wordList
return retVal, "", err
})
}
// @Title 插入敏感词列表
// @Description 插入敏感词列表
// @Param token header string true "认证token"
// @Param word formData string true "关键词名字"
// @Param vendorID formData int false "VendorID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /InsertSensitiveWord [post]
func (c *SkuController) InsertSensitiveWord() {
c.callInsertSensitiveWord(func(params *tSkuInsertSensitiveWordParams) (retVal interface{}, errCode string, err error) {
err = dao.InsertSensitiveWord(params.Word, params.VendorID, params.Ctx.GetUserName())
return retVal, "", err
})
}
// @Title 修改敏感词列表
// @Description 修改敏感词列表
// @Param token header string true "认证token"
// @Param word formData string true "关键词名字"
// @Param vendorID formData int false "VendorID"
// @Param ID formData int false "关键词ID"
// @Param Status formData int false "状态0为修改默认1为删除"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateSensitiveWord [put]
func (c *SkuController) UpdateSensitiveWord() {
c.callUpdateSensitiveWord(func(params *tSkuUpdateSensitiveWordParams) (retVal interface{}, errCode string, err error) {
//word := &model.SensitiveWord{
// VendorID: params.VendorID,
// Word: params.Word,
//}
words, err := dao.GetSensitiveWordList(params.VendorID)
word := words[0]
word.Word = params.Word
if params.ID != 0 {
word.ModelIDCULD.ID = params.ID
}
if params.Status == 1 {
retVal, err = dao.DeleteSensitiveWord(word, params.ID, params.Ctx.GetUserName(), params.VendorID)
} else {
retVal, err = dao.UpdateSensitiveWord(word, params.VendorID, params.ID, params.Ctx.GetUserName())
}
return retVal, "", err
})
}
// @Title 子分类下商品的重排序
// @Description 子分类下商品的重排序
// @Param token header string true "认证token"
// @Param catID formData int true "商品子分类"
// @Param skuIDs formData string true "商品子分类下商品列表"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /SortCategorySkus [post]
func (c *SkuController) SortCategorySkus() {
c.callSortCategorySkus(func(params *tSkuSortCategorySkusParams) (retVal interface{}, errCode string, err error) {
var skuIDList []int
if err = jxutils.Strings2Objs(params.SkuIDs, &skuIDList); err == nil {
err = cms.SortCategorySkus(params.Ctx, params.CatID, skuIDList)
}
return retVal, "", err
})
}
// @Title 按照当前城市近30天销量排序显示本店价格附近5公里平均价格差评数量本店销量情况本市总销量
// @Description 按照当前城市近30天销量排序显示本店价格附近5公里平均价格差评数量本店销量情况本市总销量
// @Param token header string true "认证token"
// @Param storeID query int true "京西门店ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetStoreSkuSalesInfo [get]
func (c *SkuController) GetStoreSkuSalesInfo() {
c.callGetStoreSkuSalesInfo(func(params *tSkuGetStoreSkuSalesInfoParams) (retVal interface{}, errCode string, err error) {
retVal, err = misc.GetStoreSkuSalesInfo(params.Ctx, params.StoreID)
return retVal, "", err
})
}
// @Title 根据名字查询京东商品UPC信息
// @Description 根据名字查询京东商品UPC信息
// @Param token header string true "认证token"
// @Param name query string false "商品名"
// @Param upcCode query string false "upcCode,不支持模糊"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetJdUpcCodeByName [get]
func (c *SkuController) GetJdUpcCodeByName() {
c.callGetJdUpcCodeByName(func(params *tSkuGetJdUpcCodeByNameParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.GetJdUpcCodeByName(params.Ctx, params.Name, params.UpcCode)
return retVal, "", err
})
}
// @Title 批量设置商品额外前缀
// @Description 批量设置商品额外前缀
// @Param token header string true "认证token"
// @Param nameIDs formData string true "商品nameIDs"
// @Param exPrefix formData string false "商品额外前缀"
// @Param fromDate formData string true "生效开始时间,格式 2006-01-01 "
// @Param toDate formData string true "生效结束时间,格式 2006-01-01 "
// @Param imgWaterMark formData string false "商品水印图"
// @Param vendorID formData int true "平台ID"
// @Param isAsync formData bool false "是否异步"
// @Param isContinueWhenError formData bool false "单个同步失败是否继续缺省false"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateSkuNamesExPrefix [put]
func (c *SkuController) UpdateSkuNamesExPrefix() {
c.callUpdateSkuNamesExPrefix(func(params *tSkuUpdateSkuNamesExPrefixParams) (retVal interface{}, errCode string, err error) {
var skuIDList []int
if err = jxutils.Strings2Objs(params.NameIDs, &skuIDList); err == nil {
retVal, err = cms.UpdateSkuNamesExPrefix(params.Ctx, skuIDList, params.ImgWaterMark, params.VendorID, params.ExPrefix, params.FromDate, params.ToDate, params.IsAsync, params.IsContinueWhenError)
}
return retVal, "", err
})
}
// @Title 合并饿鲜达商品库(必须要在饿鲜达系统中先导入商品)
// @Description 合并饿鲜达商品库(必须要在饿鲜达系统中先导入商品)
// @Param token header string true "认证token"
// @Param isAsync formData bool false "是否异步"
// @Param isContinueWhenError formData bool false "单个同步失败是否继续缺省false"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /SumExianDaDepot [put]
func (c *SkuController) SumExianDaDepot() {
c.callSumExianDaDepot(func(params *tSkuSumExianDaDepotParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.SumExianDaDepot(params.Ctx, params.IsAsync, params.IsContinueWhenError)
return retVal, "", err
})
}
// @Title 根据饿百上已经分类的商品刷新京西库中饿鲜达商品分类
// @Description 根据饿百上已经分类的商品刷新京西库中饿鲜达商品分类
// @Param token header string true "认证token"
// @Param isAsync formData bool false "是否异步"
// @Param isContinueWhenError formData bool false "单个同步失败是否继续缺省false"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateExianDaSkuCategory [put]
func (c *SkuController) UpdateExianDaSkuCategory() {
c.callUpdateExianDaSkuCategory(func(params *tSkuUpdateExianDaSkuCategoryParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.UpdateExianDaSkuCategory(params.Ctx, params.IsAsync, params.IsContinueWhenError)
return retVal, "", err
})
}
// @Title 根据Excel创建标品
// @Description 根据Excel创建标品
// @Param token header string true "认证token"
// @Param categroyID formData int true "分类ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /CreateUpcSkuByExcel [post]
func (c *SkuController) CreateUpcSkuByExcel() {
c.callCreateUpcSkuByExcel(func(params *tSkuCreateUpcSkuByExcelParams) (retVal interface{}, errCode string, err error) {
r := c.Ctx.Request
files := r.MultipartForm.File["userfiles"]
retVal, err = cms.CreateUpcSkuByExcel(params.Ctx, files, params.CategroyID)
return retVal, "", err
})
}
// @Title 恢复被删除的京东商品库
// @Description
// @Param token header string true "认证token"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /RefreshJdDepot [post]
func (c *SkuController) RefreshJdDepot() {
c.callRefreshJdDepot(func(params *tSkuRefreshJdDepotParams) (retVal interface{}, errCode string, err error) {
err = cms.RefreshJdDepot(params.Ctx)
return retVal, "", err
})
}
// @Title 批量设置商品额外信息
// @Description 批量设置商品额外信息
// @Param token header string true "认证token"
// @Param nameIDs formData string true "商品nameIDs"
// @Param exPrefix formData string false "商品额外前缀"
// @Param fromDate formData string true "生效开始时间,格式 2006-01-01 "
// @Param toDate formData string true "生效结束时间,格式 2006-01-01 "
// @Param imgWaterMark formData string false "商品水印图"
// @Param brandID formData int false "品牌ID"
// @Param vendorID formData int true "平台ID"
// @Param vendorOrgCode formData string true "平台账号"
// @Param isAsync formData bool false "是否异步"
// @Param isContinueWhenError formData bool false "单个同步失败是否继续缺省false"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateSkuExinfoMap [put]
func (c *SkuController) UpdateSkuExinfoMap() {
c.callUpdateSkuExinfoMap(func(params *tSkuUpdateSkuExinfoMapParams) (retVal interface{}, errCode string, err error) {
var skuIDList []int
if err = jxutils.Strings2Objs(params.NameIDs, &skuIDList); err == nil {
retVal, err = cms.UpdateSkuExinfoMap(params.Ctx, skuIDList, params.ImgWaterMark, params.BrandID, params.VendorID, params.VendorOrgCode, params.ExPrefix, params.FromDate, params.ToDate, params.IsAsync, params.IsContinueWhenError)
}
return retVal, "", err
})
}
// @Title 得到平台类别
// @Description 得到平台类别
// @Param token header string true "认证token"
// @Param parentID query int false "父ID"
// @Param level query int false "分类等级"
// @Param vendorOrgCode query string true "账号ID"
// @Param vendorID query int true "平台ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetVendorCategoryMap [get]
func (c *SkuController) GetVendorCategoryMap() {
c.callGetVendorCategoryMap(func(params *tSkuGetVendorCategoryMapParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.GetVendorCategoryMap(params.Ctx, params.ParentID, params.Level, params.VendorID, params.VendorOrgCode)
return retVal, "", err
})
}
// @Title 新增平台类别
// @Description 新增平台类别
// @Param token header string true "认证token"
// @Param vendorID formData int true "平台ID"
// @Param vendorOrgCode formData string true "账号ID"
// @Param categroyID formData int false "京西分类id"
// @Param level formData int true "分类级别"
// @Param parentID formData int true "分类父ID"
// @Param vendorCategoryName formData string true "类别name"
// @Param vendorCategorySeq formData int true "类别序号"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /AddVendorCategoryMap [post]
func (c *SkuController) AddVendorCategoryMap() {
c.callAddVendorCategoryMap(func(params *tSkuAddVendorCategoryMapParams) (retVal interface{}, errCode string, err error) {
vendorCategoryMap := &model.VendorCategoryMap{
VendorID: params.VendorID,
VendorOrgCode: params.VendorOrgCode,
CategoryID: params.CategroyID,
VendorCategoryName: params.VendorCategoryName,
VendorCategorySeq: params.VendorCategorySeq,
Level: params.Level,
ParentID: params.ParentID,
}
retVal, err = cms.AddVendorCategoryMap(params.Ctx, vendorCategoryMap)
return retVal, "", err
})
}
// @Title 修改平台类别
// @Description 修改平台类别
// @Param token header string true "认证token"
// @Param ID formData int true "记录ID"
// @Param categoryID formData int false "京西分类id"
// @Param vendorCategoryName formData string false "类别name"
// @Param level formData int true "分类级别"
// @Param parentID formData int true "分类父ID"
// @Param isDelete formData bool false "是否是删除操作默认false"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateVendorCategoryMap [put]
func (c *SkuController) UpdateVendorCategoryMap() {
c.callUpdateVendorCategoryMap(func(params *tSkuUpdateVendorCategoryMapParams) (retVal interface{}, errCode string, err error) {
vendorCategoryMap := &model.VendorCategoryMap{
CategoryID: params.CategoryID,
VendorCategoryName: params.VendorCategoryName,
Level: params.Level,
ParentID: params.ParentID,
}
retVal, err = cms.UpdateVendorCategoryMap(params.Ctx, params.ID, vendorCategoryMap, params.IsDelete)
return retVal, "", err
})
}
// @Title 平台类别重排序
// @Description 平台类别重排序
// @Param token header string true "认证token"
// @Param categoryID formData int true "父ID"
// @Param vendorID formData int true "平台ID"
// @Param vendorOrgCode formData string true "账号ID"
// @Param categoryIDs formData string true "同一父类别下的所有子类别ID列表([1,2,3,4])"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /ReorderVendorCategories [put]
func (c *SkuController) ReorderVendorCategories() {
c.callReorderVendorCategories(func(params *tSkuReorderVendorCategoriesParams) (retVal interface{}, errCode string, err error) {
var idList []int
if err = utils.UnmarshalUseNumber([]byte(params.CategoryIDs), &idList); err == nil {
err = cms.ReorderVendorCategories(params.Ctx, params.CategoryID, params.VendorID, params.VendorOrgCode, idList)
}
return retVal, "", err
})
}
// @Title 复制平台类别
// @Description 复制平台类别
// @Param token header string true "认证token"
// @Param fromVendorOrgCode formData int true "源平台ID"
// @Param vendorID formData int true "平台ID"
// @Param toVendorOrgCodes formData string true "目标平台的IDs"
// @Param categoryIDs formData string false "原平台的分类IDs,不传代表整个复制"
// @Param isAsync formData bool false "是否异步操作"
// @Param isContinueWhenError formData bool false "单个同步失败是否继续缺省false"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /CopyVendorCategories [put]
func (c *SkuController) CopyVendorCategories() {
c.callCopyVendorCategories(func(params *tSkuCopyVendorCategoriesParams) (retVal interface{}, errCode string, err error) {
return retVal, "", err
})
}
// @Title 平台分类读取门店分类
// @Description 平台分类读取门店分类
// @Param token header string true "认证token"
// @Param vendorOrgCode formData string true "账号ID"
// @Param vendorID formData int true "平台ID"
// @Param storeID formData int true "门店ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /LoadStoreVendorCategories [post]
func (c *SkuController) LoadStoreVendorCategories() {
c.callLoadStoreVendorCategories(func(params *tSkuLoadStoreVendorCategoriesParams) (retVal interface{}, errCode string, err error) {
err = cms.LoadStoreVendorCategories(params.Ctx, params.VendorOrgCode, params.VendorID, params.StoreID)
return retVal, "", err
})
}
// @Title 刷新没图的商品
// @Description 刷新没图的商品
// @Param token header string true "认证token"
// @Param skuNameID formData int false "门店ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /RefreshNoImgSku [post]
func (c *SkuController) RefreshNoImgSku() {
c.callRefreshNoImgSku(func(params *tSkuRefreshNoImgSkuParams) (retVal interface{}, errCode string, err error) {
err = cms.RefreshNoImgSku(params.Ctx, params.SkuNameID)
return retVal, "", err
})
}
// @Title 得到商品信息2
// @Description 得到商品信息2
// @Param token header string true "认证token"
// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)"
// @Param nameIDs query string false "SkuName IDs列表"
// @Param skuIDs query string false "Sku ID列表"
// @Param categoryID query int false "商品名所属类别ID"
// @Param status query int false "查询起始状态0下架1正常, -1全部"
// @Param isBySku query bool false "是否将sku拆开缺省为false"
// @Param bestSeller query int false "是否为畅销品[0-不是/1-是]"
// @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 /GetSkuNamesNew [get]
func (c *SkuController) GetSkuNamesNew() {
c.callGetSkuNamesNew(func(params *tSkuGetSkuNamesNewParams) (retVal interface{}, errCode string, err error) {
var skuIDs, skuNameIDs []int
if err = jxutils.Strings2Objs(params.SkuIDs, &skuIDs, params.NameIDs, &skuNameIDs); err == nil {
retVal, err = cms.GetSkuNamesNew(params.Ctx, params.Keyword, skuIDs, skuNameIDs, params.CategoryID, params.Status, params.IsBySku, params.Offset, params.PageSize, params.BestSeller)
}
return retVal, "", err
})
}
// @Title 设置商品为热销/取消热销商品
// @Description 设置商品为热销/取消热销商品
// @Param token header string true "认证token"
// @Param skuNameId query string true "商品nameId,多个用逗号分割"
// @Param bestSeller query int true "是否为热销[0不是/1是]"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /SetSkuBestSeller [post]
func (c *SkuController) SetSkuBestSeller() {
c.callSetSkuBestSeller(func(params *tSkuSetSkuBestSellerParams) (retVal interface{}, errCode string, err error) {
nameIds := strings.Split(params.SkuNameId, ",")
err = cms.SetSkuNameSeller(utils.StringSlice2Int64(nameIds), params.BestSeller)
return nil, "", err
})
}
// @Title 根据分类id获取平台属性值
// @Description 根据分类id获取平台属性值
// @Param token header string true "认证token"
// @Param categoryId query int64 false "抖音分类id"
// @Param vendorOrgCode query string false "默认的平台id(现在是测试门店id/后面改成京西的id)"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetTiktokCategoryValue [get]
func (c *SkuController) GetTiktokCategoryValue() {
c.callGetTiktokCategoryValue(func(params *tSkuGetTiktokCategoryValueParams) (interface{}, string, error) {
data, err := tiktok_store.GetProductFormatNew(int64(params.CategoryId), params.VendorOrgCode)
return data, "", err
})
}
// @Title 根据美团分类id获取平台属性值
// @Description 根据美团分类id获取平台属性值
// @Param token header string true "认证token"
// @Param appOrgCode query string true "美团app"
// @Param categoryId query int64 true "美团类目id"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetMTCategoryAttrList [get]
func (c *SkuController) GetMTCategoryAttrList() {
c.callGetMTCategoryAttrList(func(params *tSkuGetMTCategoryAttrListParams) (interface{}, string, error) {
data, err := mtwm.GetCategoryAttrList(params.AppOrgCode, params.CategoryId)
return data, "", err
})
}
// @Title 根据美团属性id 查询特殊属性(品牌、产地)
// @Description 根据美团属性id 查询特殊属性(品牌、产地)
// @Param token header string true "认证token"
// @Param appOrgCode query string true "美团app"
// @Param attrId query int64 true "属性id"
// @Param keyword query string true "属性值的关键词"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetMTCategoryAttrValueList [get]
func (c *SkuController) GetMTCategoryAttrValueList() {
c.callGetMTCategoryAttrValueList(func(params *tSkuGetMTCategoryAttrValueListParams) (interface{}, string, error) {
data, err := mtwm.GetCategoryAttrValueList(params.AppOrgCode, params.Keyword, params.AttrId)
return data, "", err
})
}
// @Title 更新美团到京东分类映射
// @Description 更新美团到京东分类映射
// @Param token header string true "认证token"
// @Param mtCatID formData string true "美团分类ID"
// @Param jdCatID formData string true "京东分类ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateMtCatToJd [post]
func (c *SkuController) UpdateMtCatToJd() {
c.callUpdateMtCatToJd(func(params *tSkuUpdateMtCatToJdParams) (retVal interface{}, errCode string, err error) {
err = cms.UpdateMtCatToJd(params.Ctx, params.MtCatID, params.JdCatID)
return retVal, "", err
})
}
// SyncTiktokMainSkuToLocalSku 同步抖店商品主商品id和本地商品id映射关系
// @Title 同步抖店商品主商品id和本地商品id映射关系
// @Description 同步抖店商品主商品id和本地商品id映射关系
// @Param token header string true "认证token"
// @Param startTime query int64 true "同步商品开始时间戳"
// @Param endTime query int64 true "同步商品结束时间戳"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /SyncTiktokMainSkuToLocalSku [post]
func (c *SkuController) SyncTiktokMainSkuToLocalSku() {
c.callSyncTiktokMainSkuToLocalSku(func(params *tSkuSyncTiktokMainSkuToLocalSkuParams) (interface{}, string, error) {
var checkStatus = []int64{2, 3, 7}
var errs = make([]error, 0)
for _, v := range checkStatus {
err := cms.SyncTiktokMainIdToLocal(params.Ctx, &tiktok_store.MainSku{
AppOrgCode: "",
CheckStatus: v,
StartTime: int64(params.StartTime),
EndTime: int64(params.EndTime),
Page: 0,
PageSize: 0,
})
errs = append(errs, err)
}
return errs, "", errs[0]
})
}
// @Title 批量设置美团商品进货价
// @Description 批量设置美团商品进货价
// @Param token header string true "认证token"
// @Param payload formData string true "json数据SpuData对象()"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /BatchSetRestockingPrice [post]
func (c *SkuController) BatchSetRestockingPrice() {
c.callBatchSetRestockingPrice(func(params *tSkuBatchSetRestockingPriceParams) (interface{}, string, error) {
payload := make(map[string][]mtwmapi.SpuData)
if err := utils.UnmarshalUseNumber([]byte(params.Payload), &payload); err == nil {
err = cms.BatchSetRestockingPrice(params.Ctx, payload)
}
return nil, "", nil
})
}
type CategoryList struct {
DdId string `json:"dd_id"`
Id int `json:"id"`
NameId int `json:"name_id"`
StoreId int `json:"store_id"`
}
// @Title 抖店商品类目修改
// @Description 抖店商品类目修改
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateTiktokCategory [post]
func (c *SkuController) UpdateTiktokCategory() {
c.callUpdateTiktokCategory(func(params *tSkuUpdateTiktokCategoryParams) (interface{}, string, error) {
var page int64 = 50
var pageSize int64 = 100
var count int64 = 0
for {
data1, total := tiktok_store.GetProductAuditList("57939570", page, pageSize)
ddIDList := make([]string, 0, 0)
skuList := make([]CategoryList, 0, 0)
data2 := make(map[string]string, 0)
db := dao.GetDB()
for k, v := range data1 {
vendorCatgory, _ := cms.GetVendorCategoriesByName(14, v)
if vendorCatgory == nil || vendorCatgory.VendorCategoryID == "" {
continue
}
ddIDList = append(ddIDList, k)
data2[k] = vendorCatgory.VendorCategoryID
}
sql := " SELECT b.dd_id,b.store_id,s.id,s.name_id FROM store_sku_bind b INNER JOIN sku s ON b.sku_id = s.id AND s.deleted_at = ? WHERE b.dd_id IN (" + dao.GenQuestionMarks(len(ddIDList)) + ") AND b.deleted_at = ?"
param := []interface{}{utils.DefaultTimeValue, ddIDList, utils.DefaultTimeValue}
if err := dao.GetRows(db, &skuList, sql, param...); err != nil {
return nil, "", err
}
for _, v := range skuList {
count++
item := &model.SkuVendorCategoryMap{
ModelIDCULD: model.ModelIDCULD{
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
DeletedAt: utils.DefaultTimeValue,
LastOperator: "18981810340",
},
NameID: v.NameId,
VendorID: model.VendorIDDD,
}
item.VendorCategoryID = data2[v.DdId]
skuVendorCategoryMap := &model.SkuVendorCategoryMap{}
if err := dao.GetRow(db, skuVendorCategoryMap, `SELECT * FROM sku_vendor_category_map WHERE name_id = ? AND vendor_id = ? AND deleted_at = ?`, []interface{}{v.NameId, model.VendorIDDD, utils.DefaultTimeValue}); err != nil {
globals.SugarLogger.Errorf("get row err : %v", err)
}
if skuVendorCategoryMap != nil && skuVendorCategoryMap.ID > 0 {
if _, err := dao.UpdateEntity(db, skuVendorCategoryMap, "VendorCategoryID"); err != nil {
globals.SugarLogger.Errorf("update err : %v", err)
}
} else {
if err := dao.CreateEntity(db, item); err != nil {
globals.SugarLogger.Errorf("create err : %v", err)
}
}
go func() {
time.Sleep(500 * time.Millisecond)
hit, err := cms.CurVendorSync.SyncStoresSkus(params.Ctx, nil, 0, db, []int{14}, []int{v.StoreId}, []int{v.Id}, true, false, true)
globals.SugarLogger.Debugf("hit:%s err: %v", hit, err)
}()
}
if page*pageSize < total {
page++
} else {
break
}
}
return count, "", nil
})
}