根据excel创建标品
This commit is contained in:
@@ -9,10 +9,13 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/dingdingapi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
|
||||
"github.com/360EntSecGroup-Skylar/excelize"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/ddmsg"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/excel"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
||||
@@ -35,6 +38,15 @@ type SkuNamesInfo struct {
|
||||
SkuNames []*model.SkuNameExt `json:"skuNames"`
|
||||
}
|
||||
|
||||
type CreateUpcSkuByExcelErr struct {
|
||||
Upc string `json:"商品条码"`
|
||||
Name string `json:"商品名称"`
|
||||
Unit string `json:"单位"`
|
||||
SpecQuality string `json:"规格"`
|
||||
Price int `json:"售价"`
|
||||
Err string `json:"错误原因"`
|
||||
}
|
||||
|
||||
var (
|
||||
ErrInputCatsDoesntMatch = errors.New("输入的类别列表不合法,需要输入一个父ID下的所有子类别")
|
||||
)
|
||||
@@ -1694,27 +1706,39 @@ func SendNoCatSkusToOperater(ctx *jxcontext.Context) (err error) {
|
||||
skuNames []*model.SkuName
|
||||
)
|
||||
sql := `
|
||||
SELECT * FROM sku_name WHERE deleted_at = ? AND category_id = ?
|
||||
SELECT * FROM sku_name WHERE deleted_at = ? AND (category_id = ? OR img = ?) AND unit <> ?
|
||||
`
|
||||
sqlParams := []interface{}{utils.DefaultTimeValue, model.NoCatCatgoryID}
|
||||
sqlParams := []interface{}{utils.DefaultTimeValue, model.NoCatCatgoryID, model.NOSkuNameImg, model.UnitNames[0]}
|
||||
err = dao.GetRows(db, &skuNames, sql, sqlParams)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(skuNames) > 10 {
|
||||
noticeMsg := "有超过10个标品未进行分类!"
|
||||
noticeMsg := "有超过10个标品未进行分类和未设置图片!"
|
||||
for _, v := range skuNames {
|
||||
noticeMsg += "NameID:" + utils.Int2Str(v.ID) + ",商品名:" + v.Name + ","
|
||||
}
|
||||
for _, mobile := range sendNoCatSkusMobile {
|
||||
if user, err := dao.GetUserByID(db, "mobile", mobile); err != nil {
|
||||
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "标品未分类", noticeMsg)
|
||||
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "标品未分类和未设置图片", noticeMsg)
|
||||
}
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func buildCreateUpcSkuByExcelErr(v *model.SkuName, errMsg string) (createUpcSkuByExcelErr *CreateUpcSkuByExcelErr) {
|
||||
createUpcSkuByExcelErr = &CreateUpcSkuByExcelErr{
|
||||
Upc: *v.Upc,
|
||||
Name: v.Name,
|
||||
Unit: v.Unit,
|
||||
SpecQuality: utils.Float64ToStr(float64(v.SpecQuality)),
|
||||
Price: v.Price,
|
||||
Err: errMsg,
|
||||
}
|
||||
return createUpcSkuByExcelErr
|
||||
}
|
||||
|
||||
func CreateUpcSkuByExcel(ctx *jxcontext.Context, files []*multipart.FileHeader) (err error) {
|
||||
if len(files) == 0 {
|
||||
return errors.New("没有文件上传!")
|
||||
@@ -1727,11 +1751,188 @@ func CreateUpcSkuByExcel(ctx *jxcontext.Context, files []*multipart.FileHeader)
|
||||
}
|
||||
|
||||
func CreateUpcSkuByExcelBin(ctx *jxcontext.Context, reader io.Reader) (err error) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
skuParams []*model.SkuName
|
||||
createUpcSkuByExcelErrList []*CreateUpcSkuByExcelErr
|
||||
excelTitle = []string{
|
||||
"商品条码",
|
||||
"商品名称",
|
||||
"单位",
|
||||
"规格",
|
||||
"售价",
|
||||
"错误原因",
|
||||
}
|
||||
)
|
||||
taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
||||
switch step {
|
||||
case 0:
|
||||
xlsx, err := excelize.OpenReader(reader)
|
||||
if err != nil {
|
||||
return result, err
|
||||
}
|
||||
rows, _ := xlsx.GetRows(xlsx.GetSheetName(1))
|
||||
for rowNum, row := range rows {
|
||||
if rowNum < 1 {
|
||||
continue
|
||||
}
|
||||
var (
|
||||
skuParam = &model.SkuName{}
|
||||
upc string
|
||||
unit string
|
||||
specQuality float32
|
||||
price int
|
||||
name string
|
||||
)
|
||||
for k, cell := range row {
|
||||
if cell != "" {
|
||||
if k == 0 {
|
||||
upc = cell
|
||||
}
|
||||
if k == 1 {
|
||||
name = cell
|
||||
}
|
||||
if k == 2 {
|
||||
unit = cell
|
||||
}
|
||||
if k == 3 {
|
||||
specQuality = float32(utils.Str2Float64(cell))
|
||||
}
|
||||
if k == 4 {
|
||||
price = int(utils.Str2Float64(cell) * 100)
|
||||
}
|
||||
}
|
||||
}
|
||||
skuParam.Upc = &upc
|
||||
skuParam.Unit = unit
|
||||
skuParam.SpecQuality = specQuality
|
||||
skuParam.Price = price
|
||||
skuParam.Name = name
|
||||
skuParams = append(skuParams, skuParam)
|
||||
}
|
||||
case 1:
|
||||
for _, v := range skuParams {
|
||||
skuName := &model.SkuNameExt{
|
||||
SkuName: model.SkuName{},
|
||||
Skus: []*model.SkuWithVendor{
|
||||
&model.SkuWithVendor{
|
||||
Sku: &model.Sku{},
|
||||
},
|
||||
},
|
||||
}
|
||||
if v.Upc != nil {
|
||||
skuName.Upc = v.Upc
|
||||
} else {
|
||||
createUpcSkuByExcelErrList = append(createUpcSkuByExcelErrList, buildCreateUpcSkuByExcelErr(v, "商品的条码不能为空!"))
|
||||
}
|
||||
skuNames, _ := dao.GetSkuNames(db, nil, []string{*v.Upc}, "")
|
||||
if len(skuNames) > 0 {
|
||||
createUpcSkuByExcelErrList = append(createUpcSkuByExcelErrList, buildCreateUpcSkuByExcelErr(v, "商品在京西库中已存在!"))
|
||||
continue
|
||||
}
|
||||
productInfos, err := GetJdUpcCodeByName(ctx, "", *v.Upc)
|
||||
if err != nil {
|
||||
createUpcSkuByExcelErrList = append(createUpcSkuByExcelErrList, buildCreateUpcSkuByExcelErr(v, err.Error()))
|
||||
continue
|
||||
}
|
||||
if len(productInfos) == 0 {
|
||||
result, _ := api.AliUpcAPI.GetAliUpcInfo(*v.Upc)
|
||||
if result == nil {
|
||||
createUpcSkuByExcelErrList = append(createUpcSkuByExcelErrList, buildCreateUpcSkuByExcelErr(v, "暂不支持创建此商品!"))
|
||||
continue
|
||||
}
|
||||
if result.Img != "" {
|
||||
if resBinary, _, err := jxutils.DownloadFileByURL(result.Img); err == nil {
|
||||
if downloadURL, err := jxutils.UploadExportContent(resBinary, result.Img[strings.LastIndex(result.Img, "/"):len(result.Img)]); err == nil {
|
||||
resBinary2, _, err := jxutils.DownloadFileByURL(downloadURL + model.SkuNameImgStandard)
|
||||
downloadURL2, err := jxutils.UploadExportContent(resBinary2, downloadURL[strings.LastIndex(downloadURL, "/"):len(downloadURL)])
|
||||
if err == nil {
|
||||
skuName.Img = downloadURL2
|
||||
} else {
|
||||
createUpcSkuByExcelErrList = append(createUpcSkuByExcelErrList, buildCreateUpcSkuByExcelErr(v, err.Error()))
|
||||
}
|
||||
} else {
|
||||
createUpcSkuByExcelErrList = append(createUpcSkuByExcelErrList, buildCreateUpcSkuByExcelErr(v, err.Error()))
|
||||
}
|
||||
} else {
|
||||
createUpcSkuByExcelErrList = append(createUpcSkuByExcelErrList, buildCreateUpcSkuByExcelErr(v, err.Error()))
|
||||
}
|
||||
} else {
|
||||
skuName.Img = model.NOSkuNameImg
|
||||
}
|
||||
if v.Name != "" {
|
||||
skuName.Name = v.Name
|
||||
} else {
|
||||
skuName.Name = result.GoodsName
|
||||
}
|
||||
if v.Price == 0 {
|
||||
if result.Price == "" {
|
||||
createUpcSkuByExcelErrList = append(createUpcSkuByExcelErrList, buildCreateUpcSkuByExcelErr(v, "商品的售价不能为空!"))
|
||||
} else {
|
||||
skuName.Price = int(utils.Str2Int64(result.Price) * 100)
|
||||
}
|
||||
} else {
|
||||
skuName.Price = v.Price * 100
|
||||
}
|
||||
if v.Unit != "" {
|
||||
skuName.Unit = v.Unit
|
||||
} else {
|
||||
createUpcSkuByExcelErrList = append(createUpcSkuByExcelErrList, buildCreateUpcSkuByExcelErr(v, "商品的单位不能为空!"))
|
||||
}
|
||||
if v.SpecQuality != 0 {
|
||||
skuName.Skus[0].SpecQuality = v.SpecQuality
|
||||
skuName.Skus[0].Weight = int(utils.Str2Int64(utils.Float64ToStr(float64(v.SpecQuality))))
|
||||
} else {
|
||||
createUpcSkuByExcelErrList = append(createUpcSkuByExcelErrList, buildCreateUpcSkuByExcelErr(v, "商品的重量不能为空!"))
|
||||
}
|
||||
skuName.Skus[0].SpecUnit = model.SpecialSpecUnit
|
||||
} else {
|
||||
productInfo := productInfos[0]
|
||||
skuNames2, _ := dao.GetSkuNames(db, nil, nil, productInfo.Name)
|
||||
if len(skuNames2) > 1 {
|
||||
createUpcSkuByExcelErrList = append(createUpcSkuByExcelErrList, buildCreateUpcSkuByExcelErr(v, "此商品名在京西库中查询出了大于1个商品!"))
|
||||
continue
|
||||
}
|
||||
//表示查到了,需要把upc更新上去,没查到就要新建
|
||||
if len(skuNames2) == 1 && (productInfo.SpecQuality == skuNames2[0].SpecQuality && productInfo.SpecUnit == skuNames2[0].SpecUnit) {
|
||||
skuNames2[0].Upc = v.Upc
|
||||
dao.UpdateEntity(db, skuNames2[0], "Upc")
|
||||
} else {
|
||||
if v.Price == 0 {
|
||||
result, err := api.AliUpcAPI.GetAliUpcInfo(*v.Upc)
|
||||
if err != nil {
|
||||
createUpcSkuByExcelErrList = append(createUpcSkuByExcelErrList, buildCreateUpcSkuByExcelErr(v, err.Error()))
|
||||
continue
|
||||
}
|
||||
if result.Price == "" {
|
||||
createUpcSkuByExcelErrList = append(createUpcSkuByExcelErrList, buildCreateUpcSkuByExcelErr(v, "商品的售价不能为空!"))
|
||||
} else {
|
||||
skuName.Price = int(utils.Str2Int64(result.Price) * 100)
|
||||
}
|
||||
} else {
|
||||
skuName.Price = v.Price * 100
|
||||
}
|
||||
skuName.Skus[0].SpecQuality = productInfo.SpecQuality
|
||||
skuName.Skus[0].SpecUnit = productInfo.SpecUnit
|
||||
skuName.Skus[0].Weight = int(utils.Str2Int64(utils.Float64ToStr(float64(productInfo.Weight))))
|
||||
if len(productInfo.ImgList) > 0 {
|
||||
skuName.Img = productInfo.ImgList[0]
|
||||
}
|
||||
}
|
||||
}
|
||||
skuName.Status = model.SkuStatusNormal
|
||||
skuName.IsGlobal = model.YES
|
||||
skuName.CategoryID = model.NoCatCatgoryID
|
||||
skuName.Skus[0].Status = model.SkuStatusNormal
|
||||
_, err = AddSkuName(ctx, skuName, ctx.GetUserName())
|
||||
if err != nil {
|
||||
createUpcSkuByExcelErrList = append(createUpcSkuByExcelErrList, buildCreateUpcSkuByExcelErr(v, err.Error()))
|
||||
}
|
||||
}
|
||||
case 2:
|
||||
if len(createUpcSkuByExcelErrList) > 0 {
|
||||
err = writeToExcel(excelTitle, createUpcSkuByExcelErrList, task)
|
||||
}
|
||||
}
|
||||
return result, err
|
||||
}
|
||||
@@ -1740,3 +1941,26 @@ func CreateUpcSkuByExcelBin(ctx *jxcontext.Context, reader io.Reader) (err error
|
||||
_, err = taskSeq.GetResult(0)
|
||||
return err
|
||||
}
|
||||
|
||||
func writeToExcel(excelTitle []string, dataList interface{}, task *tasksch.SeqTask) (err error) {
|
||||
var sheetList []*excel.Obj2ExcelSheetConfig
|
||||
var downloadURL, fileName string
|
||||
excelConf := &excel.Obj2ExcelSheetConfig{
|
||||
Title: "sheet1",
|
||||
Data: dataList,
|
||||
CaptionList: excelTitle,
|
||||
}
|
||||
sheetList = append(sheetList, excelConf)
|
||||
if excelConf != nil {
|
||||
downloadURL, fileName, err = jxutils.UploadExeclAndPushMsg(sheetList, "创建标品错误")
|
||||
} else {
|
||||
baseapi.SugarLogger.Debug("WriteToExcel: dataSuccess is nil!")
|
||||
}
|
||||
if err != nil {
|
||||
baseapi.SugarLogger.Errorf("WriteToExcel:upload %s , %s failed error:%v", fileName, err)
|
||||
} else {
|
||||
noticeMsg := fmt.Sprintf("[详情点我]path=%s\n", downloadURL)
|
||||
task.SetNoticeMsg(noticeMsg)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user