From ed678336015d663efa9eb08caeb37146e3ebd5f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Tue, 10 Dec 2019 17:20:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B9=E6=8D=AEexcel=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E4=BA=AC=E8=A5=BF=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 60 ++++++++++++++++++++++++++++++- business/model/dao/store_sku.go | 16 +++++++++ business/model/store.go | 4 +-- 3 files changed, 77 insertions(+), 3 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 9749ca1f2..f3ae1b087 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -8,6 +8,7 @@ import ( "mime/multipart" "sort" "strconv" + "strings" "sync" "time" @@ -2147,9 +2148,62 @@ func RefreshJxPriceByExcelBin(ctx *jxcontext.Context, storeIDs []int, reader io. GetCellIntoStruct(rowNum, row, sheetParam, storeSkuNamePrice) storeSkuNamePriceList = append(storeSkuNamePriceList, storeSkuNamePrice) } + db := dao.GetDB() + storeSkuNamePriceListOrg, err := dao.GetStoreSkuNamePrice(db) + CreateOrUpdateStoreSkuNamePriceByExcel(db, ctx, storeSkuNamePriceList, storeSkuNamePriceListOrg) + hint, err = RefershJxPrice(db) return hint, err } +func RefershJxPrice(db *dao.DaoDB) (hint string, err error) { + // storeSkuNamePriceList, err := dao.GetStoreSkuNamePrice(db) + // task := tasksch.NewParallelTask("根据Excel刷新京西价", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, + // func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + + // return retVal, err + // }, orderList) + // tasksch.HandleTask(task, nil, true).Run() + // if !isAsync { + // _, err = task.GetResult(0) + // hint = "1" + // } else { + // hint = task.GetID() + // } + return hint, err +} + +func CreateOrUpdateStoreSkuNamePriceByExcel(db *dao.DaoDB, ctx *jxcontext.Context, storeSkuNamePriceList []*model.StoreSkuNamePrice, storeSkuNamePriceListOrg []*model.StoreSkuNamePrice) (err error) { + storeSkuNamePriceMap := StoreSkuNamePriceList2Map(ctx, storeSkuNamePriceListOrg) + dao.Begin(db) + defer func() { + if r := recover(); r != nil || err != nil { + dao.Rollback(db) + if r != nil { + panic(r) + } + } + }() + for _, v := range storeSkuNamePriceList { + if storeSkuNamePriceMap[v.OutSkuID] != nil { + dao.WrapAddIDCULDEntity(v, ctx.GetUserName()) + dao.UpdateEntity(db, storeSkuNamePriceMap[v.OutSkuID], "Price", "NameIDGroup", "Unit", "CreatedAt", "UpdatedAt", "LastOperator", "DeletedAt") + } else { + dao.CreateEntity(db, v) + } + } + dao.Commit(db) + return err +} + +func StoreSkuNamePriceList2Map(ctx *jxcontext.Context, storeSkuNamePriceList []*model.StoreSkuNamePrice) (result map[string]*model.StoreSkuNamePrice) { + result = make(map[string]*model.StoreSkuNamePrice, len(storeSkuNamePriceList)) + for _, v := range storeSkuNamePriceList { + dao.WrapAddIDCULDEntity(v, ctx.GetUserName()) + result[v.OutSkuID] = v + } + return result +} + func GetCellIntoStruct(rowNum int, row []string, sheetParam *SheetParam, storeSkuNamePrice *model.StoreSkuNamePrice) { for k, cell := range row { if k == sheetParam.OutSkuIDCol { @@ -2159,7 +2213,11 @@ func GetCellIntoStruct(rowNum int, row []string, sheetParam *SheetParam, storeSk storeSkuNamePrice.Name = cell } if k == sheetParam.SkuNameIDCol { - storeSkuNamePrice.NameIDGroup = cell + cellReplace := strings.ReplaceAll(cell, ",", ",") + if cellReplace[len(cellReplace)-1:len(cellReplace)] == "," { + cellReplace = cellReplace[0 : len(cellReplace)-1] + } + storeSkuNamePrice.NameIDGroup = cellReplace } if k == sheetParam.SkuPriceCol { storeSkuNamePrice.Price = int(utils.Float64TwoInt64(utils.Str2Float64(cell) * 100)) diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 5e4699a9d..2005fca28 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -1050,6 +1050,22 @@ func RefershStoreSkusMidPrice(db *DaoDB, storeIDs []int) (count int64, err error return ExecuteSQL(db, sql, sqlParams) } +func GetStoreSkuNamePrice(db *DaoDB) (storeSkuNamePriceList []*model.StoreSkuNamePrice, err error) { + sql := ` + SELECT * + FROM store_sku_name_price + WHERE deleted_at = ? + ` + sqlParams := []interface{}{ + utils.DefaultTimeValue, + } + err = GetRows(db, &storeSkuNamePriceList, sql, sqlParams...) + if err != nil { + return nil,err + } + return storeSkuNamePriceList, err +} + func SetStoreSkuBindVendorPrice(storeSkuBind *model.StoreSkuBind, vendorID int, vendorPrice int) { switch vendorID { case model.VendorIDJD: diff --git a/business/model/store.go b/business/model/store.go index 732266daf..0fdee417c 100644 --- a/business/model/store.go +++ b/business/model/store.go @@ -495,13 +495,13 @@ type StoreSkuNamePrice struct { func (*StoreSkuNamePrice) TableUnique() [][]string { return [][]string{ - []string{"Name", "NameIDGroup"}, + []string{"OutSkuID", "Price", "NameIDGroup"}, } } func (*StoreSkuNamePrice) TableIndex() [][]string { return [][]string{ - []string{"Name"}, + []string{"OutSkuID"}, } }