From 16823207c9afa062b19c82a533d6382ce456ae2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 19 Dec 2019 10:55:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=93=81=E5=90=8D=E5=89=8D=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sku.go | 64 ++++++++++++++++++++++---- business/jxstore/cms/sync.go | 2 +- business/jxstore/cms/sync_store_sku.go | 2 +- business/jxutils/jxutils.go | 31 ++++++++++++- business/model/dao/store_sku.go | 3 +- controllers/cms_sku.go | 3 ++ 6 files changed, 90 insertions(+), 15 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index d7e82cbed..7aa862aac 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -1341,6 +1341,7 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro var ( fromTimeP time.Time toTimeP time.Time + db = dao.GetDB() ) if fromTime != "" { fromTimeP = utils.Str2Time(fromTime) @@ -1351,17 +1352,60 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro if toTimeP.Before(fromTimeP) { return "", fmt.Errorf("结束时间不可以小于开始时间!开始时间:[%v],结束时间:[%v]", fromTimeP, toTimeP) } - task := tasksch.NewParallelTask("批量设置商品前缀", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, + task := tasksch.NewParallelTask("批量设置商品前缀", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - nameID := batchItemList[0].(int) - payload := map[string]interface{}{ - "exPrefix": exPrefix, - "exPrefixBegin": fromTimeP, - "exPrefixEnd": toTimeP, + step := batchItemList[0].(int) + switch step { + case 0: + task := tasksch.NewParallelTask("批量设置商品前缀", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + nameID := batchItemList[0].(int) + if (time.Now().Before(toTimeP) && time.Now().After(fromTimeP)) || (time.Now().After(fromTimeP) && time.Now().After(toTimeP)) { + payload := map[string]interface{}{ + "exPrefix": exPrefix, + "exPrefixBegin": fromTimeP, + "exPrefixEnd": toTimeP, + } + _, err = UpdateSkuName(ctx, nameID, payload) + } else { + skuName := &model.SkuName{ + ExPrefix: exPrefix, + ExPrefixBegin: fromTimeP, + ExPrefixEnd: toTimeP, + } + skuName.ID = nameID + skuName.LastOperator = ctx.GetLoginID() + skuName.UpdatedAt = time.Now() + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + _, err = dao.UpdateEntity(db, skuName, "ExPrefix", "ExPrefixBegin", "ExPrefixEnd", "LastOperator", "UpdatedAt") + dao.Commit(db) + } + return retVal, err + }, nameIDs) + tasksch.HandleTask(task, nil, true).Run() + _, err = task.GetResult(0) + case 1: + if (time.Now().Before(toTimeP) && time.Now().After(fromTimeP)) || (time.Now().After(fromTimeP) && time.Now().After(toTimeP)) { + var skuIDs []int + skuList, err2 := dao.GetSkus(db, nil, nameIDs, nil, nil) + if err = err2; err == nil { + if len(skuList) > 0 { + for _, v := range skuList { + skuIDs = append(skuIDs, v.ID) + } + CurVendorSync.SyncStoresSkus2(ctx, db, []int{model.VendorIDEBAI, model.VendorIDMTWM}, nil, false, skuIDs, nil, 0, true, true) + } + } + } } - _, err = UpdateSkuName(ctx, nameID, payload) return retVal, err - }, nameIDs) + }, []int{0, 1}) tasksch.HandleTask(task, nil, true).Run() if !isAsync { _, err = task.GetResult(0) @@ -1372,8 +1416,8 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro return hint, err } -func SetSingleStoreSkuSyncModifyStauts(db *dao.DaoDB, vendorID int) (err error) { - _, err = dao.UpdateStoreSkuBindSyncStatusForExPrefix(db, []int{vendorID}) +func SetSingleStoreSkuSyncModifyStauts(db *dao.DaoDB, vendorIDs []int) (err error) { + _, err = dao.UpdateStoreSkuBindSyncStatusForExPrefix(db, vendorIDs) return err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 0e2fc1cdf..208b67c24 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -384,6 +384,7 @@ func (v *VendorSync) SyncStoresCategory(ctx *jxcontext.Context, db *dao.DaoDB, v func (v *VendorSync) SyncStoresSkus2(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs []int, storeIDs []int, syncDisabled bool, skuIDs, excludeSkuIDs []int, setSyncStatus int, isAsync, isContinueWhenError bool) (hint string, err error) { globals.SugarLogger.Debug("SyncStoresSkus2") isManageIt := len(storeIDs) != 1 || len(skuIDs) == 0 || len(skuIDs) > 8 + SetSingleStoreSkuSyncModifyStauts(db, []int{model.VendorIDEBAI, model.VendorIDMTWM}) task, hint, err := v.LoopStoresMap2(ctx, db, fmt.Sprintf("同步门店商品信息:%v", storeIDs), isAsync, isManageIt, vendorIDs, storeIDs, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { loopMapInfo := batchItemList[0].(*LoopStoreMapInfo) @@ -398,7 +399,6 @@ func (v *VendorSync) SyncStoresSkus2(ctx *jxcontext.Context, db *dao.DaoDB, vend storeMap := batchItemList[0].(*model.StoreMap) if syncDisabled || storeMap.Status > model.StoreStatusDisabled { if setSyncStatus != 0 { - SetSingleStoreSkuSyncModifyStauts(db, storeMap.VendorID) dao.SetStoreSkuSyncStatus(db, storeMap.VendorID, []int{storeMap.StoreID}, skuIDs, setSyncStatus) } if _, err = v.proxySyncStoreSku(ctx, task, storeMap, nil, skuIDs, excludeSkuIDs, false, isContinueWhenError); err != nil { diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index b7e191fc0..d8ff03a69 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -228,7 +228,7 @@ func calVendorPrice4StoreSku(inSku *dao.StoreSkuSyncInfo, pricePercentagePack mo func formalizeStoreSkuList(inSkuList []*dao.StoreSkuSyncInfo) []*dao.StoreSkuSyncInfo { for _, skuItem := range inSkuList { skuItem.MergedStatus = jxutils.MergeSkuStatus(skuItem.Status, skuItem.StoreSkuStatus) - skuItem.SkuName = jxutils.ComposeSkuName(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 0, skuItem.ExPrefix, skuItem.ExPrefixBegin, skuItem.ExPrefixEnd) + skuItem.SkuName = jxutils.ComposeSkuNameSync(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 0, skuItem.ExPrefix, skuItem.ExPrefixBegin, skuItem.ExPrefixEnd) } return inSkuList } diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index e696ff338..0fb77f2f0 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -329,7 +329,7 @@ func FloatWeight2Int(weight float32) int { func ComposeSkuName(prefix, name, comment, unit string, spec_quality float32, spec_unit string, maxLen int, exPrefix string, exPrefixBegin, exPrefixEnd time.Time) (skuName string) { if exPrefix != "" && !utils.IsTimeZero(exPrefixBegin) && !utils.IsTimeZero(exPrefixEnd) { - if time.Now().Add(6*time.Hour).After(exPrefixBegin) && time.Now().Add(-6*time.Hour).Before(exPrefixEnd) { + if time.Now().After(exPrefixBegin) && time.Now().Before(exPrefixEnd) { skuName = exPrefix } } @@ -353,6 +353,35 @@ func ComposeSkuName(prefix, name, comment, unit string, spec_quality float32, sp return skuName } +func ComposeSkuNameSync(prefix, name, comment, unit string, spec_quality float32, spec_unit string, maxLen int, exPrefix string, exPrefixBegin, exPrefixEnd time.Time) (skuName string) { + if exPrefix != "" && !utils.IsTimeZero(exPrefixBegin) && !utils.IsTimeZero(exPrefixEnd) { + if time.Now().Add(6*time.Hour).After(exPrefixBegin) && time.Now().Before(exPrefixEnd) { + skuName = exPrefix + } + if time.Now().Add(6 * time.Hour).After(exPrefixEnd) { + skuName = "" + } + } + if prefix != "" { + skuName += "[" + prefix + "]" + } + skuName += name + if unit == "份" { + skuName += "约" + } + if unit != "" { + skuName += ComposeSkuSpec(spec_quality, spec_unit) + skuName += "/" + unit + } + if comment != "" { + skuName += "(" + comment + ")" + } + if maxLen > 0 { + skuName = utils.LimitUTF8StringLen(skuName, maxLen) + } + return skuName +} + func ComposeSpuName(prefix, name string, maxLen int) (spuName string) { if prefix != "" { spuName = "[" + prefix + "]" diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 93f66b77a..c1b1b299b 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -946,7 +946,6 @@ func UpdateSkuSyncStatusForExPrefix(db *DaoDB, vendorIDs []int) (num int64, err fmtParams := []interface{}{} sqlParams := []interface{}{ utils.DefaultTimeValue, - utils.DefaultTimeValue, } if len(vendorIDs) > 0 { for _, v := range vendorIDs { @@ -965,7 +964,7 @@ func UpdateSkuSyncStatusForExPrefix(db *DaoDB, vendorIDs []int) (num int64, err AND (DATE_FORMAT(c.ex_prefix_begin,'%Y-%m-%d') = DATE_FORMAT(DATE_ADD(NOW(),INTERVAL '6' HOUR),'%Y-%m-%d') OR DATE_FORMAT(c.ex_prefix_end,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')) ` - sqlParams = append(sqlParams, model.StoreSkuBindStatusNormal, utils.DefaultTimeValue) + sqlParams = append(sqlParams, utils.DefaultTimeValue) return ExecuteSQL(db, sql, sqlParams...) } diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index 71e2e97b8..c345591aa 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -191,6 +191,9 @@ func (c *SkuController) UpdateSkuName() { // 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") retVal, err = cms.UpdateSkuName(params.Ctx, params.NameID, payload) } return retVal, "", err