饿鲜达商品库合并

This commit is contained in:
苏尹岚
2020-02-20 17:36:39 +08:00
parent ae862fd7a6
commit ab744bc6fb
3 changed files with 156 additions and 73 deletions

View File

@@ -3,6 +3,8 @@ package cms
import ( import (
"errors" "errors"
"fmt" "fmt"
"io"
"mime/multipart"
"strconv" "strconv"
"strings" "strings"
"time" "time"
@@ -1475,14 +1477,28 @@ func DeleteSkuNameExPrefixOverdue(db *dao.DaoDB) (err error) {
return err return err
} }
func SumExianDaDepot(ctx *jxcontext.Context) (err error) { func SumExianDaDepot(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) {
db := dao.GetDB() db := dao.GetDB()
result, err := api.EbaiAPI.GetExianDaSkuDepot("") results, err := api.EbaiAPI.GetExianDaSkuDepot("")
for _, v := range result { taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
switch step {
case 0:
for _, v := range results {
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 err return result, err
} }
skuNameExt := &model.SkuName{}
sql2 := `
SELECT a.*
FROM sku_name a
JOIN sku b ON b.name_id = a.id
WHERE a.upc = ?
`
sqlParams2 := []interface{}{
skus.UpcIds,
}
dao.GetRow(db, skuNameExt, sql2, sqlParams2)
dao.Begin(db) dao.Begin(db)
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
@@ -1491,11 +1507,31 @@ func SumExianDaDepot(ctx *jxcontext.Context) (err error) {
} }
}() }()
prefix, _, _, specUnit, unit, specQuality := jxutils.SplitSkuName(v.GoodsName) prefix, _, _, specUnit, unit, specQuality := jxutils.SplitSkuName(v.GoodsName)
//京西库中存在此商品
if skuNameExt.ID != 0 {
if skuNameExt.Name != v.GoodsName {
skuNameExt.Name = v.GoodsName
_, err = dao.UpdateEntity(db, skuNameExt, "Name")
if err != nil {
dao.Rollback(db)
return result, err
}
}
} else {
skuCat := &model.SkuCategory{}
sql := `
SELECT *
FROM sku_category
WHERE ebai_category_id = ?
`
sqlParams := []interface{}{
skus.CategoryIDThird,
}
dao.GetRow(db, skuCat, sql, sqlParams)
skuName := &model.SkuName{ skuName := &model.SkuName{
Prefix: prefix, Prefix: prefix,
Name: v.GoodsName, Name: v.GoodsName,
CategoryID: skus.CategoryIDThird, IsGlobal: model.YES,
IsGlobal: 1,
Unit: unit, Unit: unit,
SpecQuality: specQuality, SpecQuality: specQuality,
SpecUnit: specUnit, SpecUnit: specUnit,
@@ -1504,11 +1540,16 @@ func SumExianDaDepot(ctx *jxcontext.Context) (err error) {
Upc: &v.UpcID, Upc: &v.UpcID,
Status: model.SkuStatusNormal, Status: model.SkuStatusNormal,
} }
if skuCat.ID != 0 {
skuName.CategoryID = skuCat.ID
} else {
skuName.CategoryID = -1 //默认给了个分类
}
dao.WrapAddIDCULDEntity(skuName, ctx.GetUserName()) dao.WrapAddIDCULDEntity(skuName, ctx.GetUserName())
err = dao.CreateEntity(db, skuName) err = dao.CreateEntity(db, skuName)
if err != nil { if err != nil {
dao.Rollback(db) dao.Rollback(db)
return err return result, err
} }
sku := &model.Sku{ sku := &model.Sku{
NameID: skuName.ID, NameID: skuName.ID,
@@ -1523,11 +1564,40 @@ func SumExianDaDepot(ctx *jxcontext.Context) (err error) {
err = dao.CreateEntity(db, sku) err = dao.CreateEntity(db, sku)
if err != nil { if err != nil {
dao.Rollback(db) dao.Rollback(db)
return err return result, err
}
} }
dao.Commit(db) dao.Commit(db)
} }
return err case 1:
//刷新分类
skus := &model.SkuAndName{}
sql := `
SELECT b.*, a.name, a.category_id real_category_id
FROM sku_name a
JOIN sku b ON b.name_id = a.id
WHERE b.exd_sku_id <> ''
AND a.deleted_at = ?
AND b.deleted_at = ?
AND a.category_id = -1
`
sqlParams := []interface{}{
utils.DefaultTimeValue, utils.DefaultTimeValue,
}
err = dao.GetRows(db, skus, sql, sqlParams)
}
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
} }
func CopyEbaiSkuPriceToJx(ctx *jxcontext.Context, baiduShopID string) (err error) { func CopyEbaiSkuPriceToJx(ctx *jxcontext.Context, baiduShopID string) (err error) {
@@ -1586,7 +1656,18 @@ func CopyEbaiStoreSkusToJx(ctx *jxcontext.Context, baiduShopID string, storeID i
return err return err
} }
func AddExdSkuByExcel(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { 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 ( var (
db = dao.GetDB() db = dao.GetDB()
skuMap = make(map[string]string) skuMap = make(map[string]string)
@@ -1594,8 +1675,8 @@ func AddExdSkuByExcel(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:
xlsx, err := excelize.OpenFile("111.xlsx") // xlsx, err := excelize.OpenFile("111.xlsx")
// xlsx, err := excelize.OpenReader(reader) xlsx, err := excelize.OpenReader(reader)
if err != nil { if err != nil {
return result, err return result, err
} }
@@ -1620,11 +1701,13 @@ func AddExdSkuByExcel(ctx *jxcontext.Context, isAsync, isContinueWhenError bool)
} }
case 1: case 1:
for k, _ := range skuMap { for k, _ := range skuMap {
fmt.Println(k, skuMap[k])
result, err := api.EbaiAPI.GetExianDaSkuDepot(k) result, err := api.EbaiAPI.GetExianDaSkuDepot(k)
if err != nil { if err != nil {
return result, err return result, err
} }
if len(result) == 0 {
continue
}
exdSku := result[0] exdSku := result[0]
skus, err := api.EbaiAPI.GetExianDaSku(utils.Str2Int64(exdSku.ElemeGoodsID)) skus, err := api.EbaiAPI.GetExianDaSku(utils.Str2Int64(exdSku.ElemeGoodsID))
skuName := &model.SkuName{} skuName := &model.SkuName{}
@@ -1647,7 +1730,7 @@ func AddExdSkuByExcel(ctx *jxcontext.Context, isAsync, isContinueWhenError bool)
} }
}() }()
//表示京西库中已存在此饿鲜达商品,再判断更不更新名字 //表示京西库中已存在此饿鲜达商品,再判断更不更新名字
if skuName != nil { if skuName.ID != 0 {
if skuName.Name != skuMap[k] { if skuName.Name != skuMap[k] {
skuName.Name = skuMap[k] skuName.Name = skuMap[k]
_, err = dao.UpdateEntity(db, skuName, "Name") _, err = dao.UpdateEntity(db, skuName, "Name")
@@ -1659,10 +1742,19 @@ func AddExdSkuByExcel(ctx *jxcontext.Context, isAsync, isContinueWhenError bool)
} else { } else {
//插入 //插入
prefix, _, _, specUnit, unit, specQuality := jxutils.SplitSkuName(exdSku.GoodsName) 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{ skuName2 := &model.SkuName{
Prefix: prefix, Prefix: prefix,
Name: skuMap[k], Name: skuMap[k],
CategoryID: skus.CategoryIDThird,
IsGlobal: 1, IsGlobal: 1,
Unit: unit, Unit: unit,
SpecQuality: specQuality, SpecQuality: specQuality,
@@ -1672,6 +1764,11 @@ func AddExdSkuByExcel(ctx *jxcontext.Context, isAsync, isContinueWhenError bool)
Upc: &k, Upc: &k,
Status: model.SkuStatusNormal, Status: model.SkuStatusNormal,
} }
if skuCat.ID != 0 {
skuName2.CategoryID = skuCat.ID
} else {
skuName2.CategoryID = skus.CategoryIDThird
}
dao.WrapAddIDCULDEntity(skuName2, ctx.GetUserName()) dao.WrapAddIDCULDEntity(skuName2, ctx.GetUserName())
err = dao.CreateEntity(db, skuName2) err = dao.CreateEntity(db, skuName2)
if err != nil { if err != nil {

View File

@@ -250,6 +250,7 @@ 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

@@ -423,12 +423,14 @@ func (c *SkuController) UpdateSkuNamesExPrefix() {
// @Title 合并饿鲜达商品库 // @Title 合并饿鲜达商品库
// @Description 合并饿鲜达商品库 // @Description 合并饿鲜达商品库
// @Param token header string true "认证token" // @Param token header string true "认证token"
// @Param isAsync formData bool false "是否异步"
// @Param isContinueWhenError formData bool false "单个同步失败是否继续缺省false"
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult
// @router /SumExianDaDepot [put] // @router /SumExianDaDepot [put]
func (c *SkuController) SumExianDaDepot() { func (c *SkuController) SumExianDaDepot() {
c.callSumExianDaDepot(func(params *tSkuSumExianDaDepotParams) (retVal interface{}, errCode string, err error) { c.callSumExianDaDepot(func(params *tSkuSumExianDaDepotParams) (retVal interface{}, errCode string, err error) {
err = cms.SumExianDaDepot(params.Ctx) retVal, err = cms.SumExianDaDepot(params.Ctx, params.IsAsync, params.IsContinueWhenError)
return retVal, "", err return retVal, "", err
}) })
} }
@@ -461,20 +463,3 @@ func (c *SkuController) CopyEbaiStoreSkusToJx() {
return retVal, "", err return retVal, "", err
}) })
} }
// @Title 通过Excel创建饿鲜达商品必须先要在饿鲜达系统中创建
// @Description 通过Excel创建饿鲜达商品必须先要在饿鲜达系统中创建
// @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 /AddExdSkuByExcel [post]
func (c *SkuController) AddExdSkuByExcel() {
c.callAddExdSkuByExcel(func(params *tSkuAddExdSkuByExcelParams) (retVal interface{}, errCode string, err error) {
// r := c.Ctx.Request
// files := r.MultipartForm.File["userfiles"]
retVal, err = cms.AddExdSkuByExcel(params.Ctx, params.IsAsync, params.IsContinueWhenError)
return retVal, "", err
})
}