合并饿鲜达商品库并刷新分类

This commit is contained in:
苏尹岚
2020-02-21 13:30:34 +08:00
parent 1088d9c50f
commit f98dae15f9
5 changed files with 109 additions and 205 deletions

View File

@@ -3,13 +3,11 @@ package cms
import ( import (
"errors" "errors"
"fmt" "fmt"
"io"
"mime/multipart"
"strconv" "strconv"
"strings" "strings"
"time" "time"
"github.com/360EntSecGroup-Skylar/excelize" "git.rosy.net.cn/baseapi/platformapi/ebaiapi"
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
@@ -1483,7 +1481,8 @@ func SumExianDaDepot(ctx *jxcontext.Context, isAsync, isContinueWhenError bool)
taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
switch step { switch step {
case 0: case 0:
for _, v := range results { taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
v := batchItemList[0].(*ebaiapi.ExianDaSkus)
skus, err := api.EbaiAPI.GetExianDaSku(utils.Str2Int64(v.ElemeGoodsID)) skus, err := api.EbaiAPI.GetExianDaSku(utils.Str2Int64(v.ElemeGoodsID))
if err != nil { if err != nil {
return result, err return result, err
@@ -1509,8 +1508,20 @@ func SumExianDaDepot(ctx *jxcontext.Context, isAsync, isContinueWhenError bool)
prefix, _, _, specUnit, unit, specQuality := jxutils.SplitSkuName(v.GoodsName) prefix, _, _, specUnit, unit, specQuality := jxutils.SplitSkuName(v.GoodsName)
//京西库中存在此商品 //京西库中存在此商品
if skuNameExt.ID != 0 { if skuNameExt.ID != 0 {
var flag = false
if skuNameExt.Name != v.GoodsName { if skuNameExt.Name != v.GoodsName {
skuNameExt.Name = v.GoodsName skuNameExt.Name = v.GoodsName
skuNameExt.Prefix = prefix
skuNameExt.SpecUnit = specUnit
skuNameExt.Unit = unit
skuNameExt.SpecQuality = specQuality
flag = true
}
if skuNameExt.Img != v.ImageURL {
skuNameExt.Img = v.ImageURL
flag = true
}
if flag {
_, err = dao.UpdateEntity(db, skuNameExt, "Name") _, err = dao.UpdateEntity(db, skuNameExt, "Name")
if err != nil { if err != nil {
dao.Rollback(db) dao.Rollback(db)
@@ -1543,7 +1554,7 @@ func SumExianDaDepot(ctx *jxcontext.Context, isAsync, isContinueWhenError bool)
if skuCat.ID != 0 { if skuCat.ID != 0 {
skuName.CategoryID = skuCat.ID skuName.CategoryID = skuCat.ID
} else { } else {
skuName.CategoryID = -1 //默认给了个分类 skuName.CategoryID = 35 //默认给了个分类
} }
dao.WrapAddIDCULDEntity(skuName, ctx.GetUserName()) dao.WrapAddIDCULDEntity(skuName, ctx.GetUserName())
err = dao.CreateEntity(db, skuName) err = dao.CreateEntity(db, skuName)
@@ -1568,24 +1579,66 @@ func SumExianDaDepot(ctx *jxcontext.Context, isAsync, isContinueWhenError bool)
} }
} }
dao.Commit(db) dao.Commit(db)
return retVal, err
} }
taskParallel := tasksch.NewParallelTask("更新京西上饿鲜达商品库", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, taskFunc, results)
tasksch.HandleTask(taskParallel, task, true).Run()
_, err = taskParallel.GetResult(0)
case 1: case 1:
//刷新分类 //刷新分类
skus := &model.SkuAndName{} var skus []*model.SkuName
sql := ` sql := `
SELECT b.*, a.name, a.category_id real_category_id SELECT a.*
FROM sku_name a FROM sku_name a
JOIN sku b ON b.name_id = a.id JOIN sku b ON b.name_id = a.id
WHERE b.exd_sku_id <> '' WHERE b.exd_sku_id <> ''
AND a.deleted_at = ? AND a.deleted_at = ?
AND b.deleted_at = ? AND b.deleted_at = ?
AND a.category_id = -1 AND a.category_id = 35
` `
sqlParams := []interface{}{ sqlParams := []interface{}{
utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue,
} }
err = dao.GetRows(db, &skus, sql, sqlParams) err = dao.GetRows(db, &skus, sql, sqlParams...)
taskFunc2 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
v := batchItemList[0].(*model.SkuName)
skuList, err := api.EbaiAPI.GetEbaiDepotSku(ebaiapi.EbaiWholeCountryStore, *v.Upc)
if err != nil || len(skuList) == 0 {
return retVal, err
}
sku, err := api.EbaiAPI.GetEbaiSku(skuList[0].UpcID, ebaiapi.EbaiWholeCountryStore)
if err != nil || sku == nil {
return retVal, err
}
skuCat := &model.SkuCategory{}
sql := `
SELECT *
FROM sku_category
WHERE exd_name like ?
`
sqlParams := []interface{}{
"%" + sku.CustomCatName + "%",
}
err = dao.GetRow(db, skuCat, sql, sqlParams)
dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db)
panic(r)
}
}()
v.CategoryID = skuCat.ID
_, err = dao.UpdateEntity(db, v, "CategoryID")
if err != nil {
dao.Rollback(db)
return retVal, err
}
dao.Commit(db)
return retVal, err
}
taskParallel2 := tasksch.NewParallelTask("更新京西上饿鲜达商品分类", tasksch.NewParallelConfig().SetParallelCount(parallelCount), ctx, taskFunc2, skus)
tasksch.HandleTask(taskParallel2, task, true).Run()
_, err = taskParallel2.GetResult(0)
} }
return result, err return result, err
} }
@@ -1630,179 +1683,33 @@ func CopyEbaiSkuPriceToJx(ctx *jxcontext.Context, baiduShopID string) (err error
return err return err
} }
func CopyEbaiStoreSkusToJx(ctx *jxcontext.Context, baiduShopID string, storeID int) (err error) { type Tmp struct {
db := dao.GetDB() CatID int
var storeSkuBindInfo []*StoreSkuBindInfo Name string
skuList, err := api.EbaiAPI.PageGetSkuList(utils.Str2Int64(baiduShopID)) }
for _, v := range skuList {
var skuName model.SkuName func SearchExianDaDepot(ctx *jxcontext.Context) (err error) {
sql2 := ` var resultIns []interface{}
SELECT * FROM sku_name WHERE upc = ? var skuMap = make(map[int]string)
` results, err := api.EbaiAPI.GetExianDaSkuDepot("")
sqlParams2 := []interface{}{ task := tasksch.NewParallelTask("SearchExianDaDepot", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx,
v["upc"].(string), func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
} v := batchItemList[0].(*ebaiapi.ExianDaSkus)
dao.GetRow(db, &skuName, sql2, sqlParams2) tmp := &Tmp{}
skuBindInfo := &StoreSkuBindInfo{ skus, _ := api.EbaiAPI.GetExianDaSku(utils.Str2Int64(v.ElemeGoodsID))
StoreID: storeID, tmp.CatID = skus.CategoryIDThird
NameID: skuName.ID, tmp.Name = skus.CategoryText
UnitPrice: skuName.Price, retVal = []*Tmp{tmp}
IsFocus: 1, return retVal, err
IsSale: 1, }, results)
} tasksch.HandleTask(task, nil, true).Run()
storeSkuBindInfo = append(storeSkuBindInfo, skuBindInfo) resultIns, err = task.GetResult(0)
for _, v := range resultIns {
tmp := v.(*Tmp)
skuMap[tmp.CatID] = tmp.Name
}
for k, _ := range skuMap {
fmt.Println(k, skuMap[k])
} }
UpdateStoresSkusByBind(ctx, nil, storeSkuBindInfo, true, true)
return err return err
} }
func AddExdSkuByExcel(ctx *jxcontext.Context, files []*multipart.FileHeader, isAsync, isContinueWhenError bool) (hint string, err error) {
if len(files) == 0 {
return "", errors.New("没有文件上传!")
}
fileHeader := files[0]
file, err := fileHeader.Open()
hint, err = AddExdSkuByExcelBin(ctx, file, isAsync, isContinueWhenError)
file.Close()
return hint, err
}
func AddExdSkuByExcelBin(ctx *jxcontext.Context, reader io.Reader, isAsync, isContinueWhenError bool) (hint string, err error) {
var (
db = dao.GetDB()
skuMap = make(map[string]string)
)
taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
switch step {
case 0:
// xlsx, err := excelize.OpenFile("111.xlsx")
xlsx, err := excelize.OpenReader(reader)
if err != nil {
return result, err
}
rows, _ := xlsx.GetRows(xlsx.GetSheetName(1))
for rowNum, row := range rows {
if rowNum < 2 {
continue
}
var (
name string
upc string
)
for k, cell := range row {
if k == 2 {
name = cell
}
if k == 7 {
upc = cell
}
}
skuMap[upc] = name
}
case 1:
for k, _ := range skuMap {
result, err := api.EbaiAPI.GetExianDaSkuDepot(k)
if err != nil {
return result, err
}
if len(result) == 0 {
continue
}
exdSku := result[0]
skus, err := api.EbaiAPI.GetExianDaSku(utils.Str2Int64(exdSku.ElemeGoodsID))
skuName := &model.SkuName{}
sql2 := `
SELECT a.*
FROM sku_name a
JOIN sku b ON b.name_id = a.id
WHERE a.upc = ?
AND b.exd_sku_id <> ''
`
sqlParams2 := []interface{}{
k,
}
dao.GetRow(db, skuName, sql2, sqlParams2)
dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db)
panic(r)
}
}()
//表示京西库中已存在此饿鲜达商品,再判断更不更新名字
if skuName.ID != 0 {
if skuName.Name != skuMap[k] {
skuName.Name = skuMap[k]
_, err = dao.UpdateEntity(db, skuName, "Name")
if err != nil {
dao.Rollback(db)
return result, err
}
}
} else {
//插入
prefix, _, _, specUnit, unit, specQuality := jxutils.SplitSkuName(exdSku.GoodsName)
skuCat := &model.SkuCategory{}
sql := `
SELECT *
FROM sku_category
WHERE ebai_category_id = ?
`
sqlParams := []interface{}{
skus.CategoryIDThird,
}
dao.GetRow(db, skuCat, sql, sqlParams)
skuName2 := &model.SkuName{
Prefix: prefix,
Name: skuMap[k],
IsGlobal: 1,
Unit: unit,
SpecQuality: specQuality,
SpecUnit: specUnit,
Price: 100,
Img: exdSku.ImageURL,
Upc: &k,
Status: model.SkuStatusNormal,
}
if skuCat.ID != 0 {
skuName2.CategoryID = skuCat.ID
} else {
skuName2.CategoryID = skus.CategoryIDThird
}
dao.WrapAddIDCULDEntity(skuName2, ctx.GetUserName())
err = dao.CreateEntity(db, skuName2)
if err != nil {
dao.Rollback(db)
return result, err
}
sku := &model.Sku{
NameID: skuName2.ID,
SpecQuality: specQuality,
SpecUnit: specUnit,
Weight: int(utils.Str2Int64(skus.Weight)),
Status: model.SkuStatusNormal,
ExdSkuID: exdSku.ElemeGoodsID,
ExdCategoryThirdID: skus.CategoryIDThird,
}
dao.WrapAddIDCULDEntity(sku, ctx.GetUserName())
err = dao.CreateEntity(db, sku)
if err != nil {
dao.Rollback(db)
return result, err
}
}
dao.Commit(db)
}
}
return result, err
}
taskSeq := tasksch.NewSeqTask2("创建饿鲜达商品", ctx, isContinueWhenError, taskSeqFunc, 2)
tasksch.HandleTask(taskSeq, nil, true).Run()
if !isAsync {
_, err = taskSeq.GetResult(0)
hint = "1"
} else {
hint = taskSeq.GetID()
}
return hint, err
}

View File

@@ -36,9 +36,9 @@ func AddOperateEvent(ctx *jxcontext.Context, accessUUID, jsonData string, errCod
apiFunction string apiFunction string
db = dao.GetDB() db = dao.GetDB()
) )
if ctx.GetRequest() == nil { // if ctx.GetRequest() == nil {
return nil // return nil
} // }
if apiFunctionSpec == "" { if apiFunctionSpec == "" {
url := ctx.GetRequest().URL.Path url := ctx.GetRequest().URL.Path
if url != "" { if url != "" {

View File

@@ -250,7 +250,6 @@ type SkuAndName struct {
ActPrice int `json:"actPrice"` ActPrice int `json:"actPrice"`
ActID int `orm:"column(act_id)" json:"actID"` ActID int `orm:"column(act_id)" json:"actID"`
ActType int `orm:"column(act_type)" json:"actType"` ActType int `orm:"column(act_type)" json:"actType"`
RealCategoryID int `orm:"column(real_category_id)" json:"realCategoryID"`
EarningPrice int `json:"earningPrice"` EarningPrice int `json:"earningPrice"`
EarningActID int `orm:"column(earning_act_id)" json:"earningActID"` EarningActID int `orm:"column(earning_act_id)" json:"earningActID"`

View File

@@ -449,17 +449,15 @@ func (c *SkuController) CopyEbaiSkuPriceToJx() {
}) })
} }
// @Title 复制饿鲜达的门店商品到京西对应门店 // @Title 合并饿鲜达商品库2
// @Description 复制饿鲜达的门店商品到京西对应门店 // @Description 合并饿鲜达商品库2
// @Param token header string true "认证token" // @Param token header string true "认证token"
// @Param baiduShopID formData string true "饿百店ID"
// @Param storeID formData int true "门店ID"
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult
// @router /CopyEbaiStoreSkusToJx [post] // @router /SearchExianDaDepot [post]
func (c *SkuController) CopyEbaiStoreSkusToJx() { func (c *SkuController) SearchExianDaDepot() {
c.callCopyEbaiStoreSkusToJx(func(params *tSkuCopyEbaiStoreSkusToJxParams) (retVal interface{}, errCode string, err error) { c.callSearchExianDaDepot(func(params *tSkuSearchExianDaDepotParams) (retVal interface{}, errCode string, err error) {
err = cms.CopyEbaiStoreSkusToJx(params.Ctx, params.BaiduShopID, params.StoreID) err = cms.SearchExianDaDepot(params.Ctx)
return retVal, "", err return retVal, "", err
}) })
} }

View File

@@ -1260,15 +1260,6 @@ func init() {
Filters: nil, Filters: nil,
Params: nil}) Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
beego.ControllerComments{
Method: "CopyEbaiStoreSkusToJx",
Router: `/CopyEbaiStoreSkusToJx`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
beego.ControllerComments{ beego.ControllerComments{
Method: "DeleteCategory", Method: "DeleteCategory",
@@ -1368,6 +1359,15 @@ func init() {
Filters: nil, Filters: nil,
Params: nil}) Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
beego.ControllerComments{
Method: "SearchExianDaDepot",
Router: `/SearchExianDaDepot`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
beego.ControllerComments{ beego.ControllerComments{
Method: "SortCategorySkus", Method: "SortCategorySkus",