From be8a98dc90f8c0772c8dc2e12418df03f0b95e88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Wed, 18 Dec 2019 18:35:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=95=86=E5=93=81=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sku.go | 13 +++++ business/jxstore/cms/sync.go | 3 +- business/jxstore/cms/sync2.go | 1 + business/jxstore/cms/sync_store_sku.go | 2 +- business/jxutils/jxutils.go | 2 +- business/model/dao/store_sku.go | 68 +++++++++++++++++++++++++- 6 files changed, 85 insertions(+), 4 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index e52177b80..d7e82cbed 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -1348,6 +1348,9 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro if toTime != "" { toTimeP = utils.Str2Time(toTime) } + if toTimeP.Before(fromTimeP) { + return "", fmt.Errorf("结束时间不可以小于开始时间!开始时间:[%v],结束时间:[%v]", fromTimeP, toTimeP) + } task := tasksch.NewParallelTask("批量设置商品前缀", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { nameID := batchItemList[0].(int) @@ -1368,3 +1371,13 @@ 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}) + return err +} + +func SetMultiStoreSkuSyncModifyStauts(db *dao.DaoDB, vendorIDs []int) (err error) { + _, err = dao.UpdateSkuSyncStatusForExPrefix(db, vendorIDs) + return err +} diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 894c6796d..0e2fc1cdf 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -398,6 +398,7 @@ 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 { @@ -685,7 +686,7 @@ func (v *VendorSync) ChangeStoreSkuSaleStatus(ctx *jxcontext.Context, storeID in skuIDs = append(skuIDs, v.SkuID) } vendorIDs := partner.GetPurchasePlatformVendorIDs() - dao.UpdateStoreSkuBindSyncStatus(db, vendorIDs, storeID) + dao.UpdateStoreSkuBindSyncStatusForSaleStatus(db, vendorIDs, storeID) v.SyncStoresSkus(ctx, db, vendorIDs, storeIDs, skuIDs, false, isAsync, isContinueWhenError) return err } diff --git a/business/jxstore/cms/sync2.go b/business/jxstore/cms/sync2.go index e18979671..0d1bab9d1 100644 --- a/business/jxstore/cms/sync2.go +++ b/business/jxstore/cms/sync2.go @@ -131,6 +131,7 @@ func SyncCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs func SyncSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs []int, appOrgCodes []string, nameIDs, skuIDs []int, isAsync bool) (hint string, err error) { globals.SugarLogger.Debugf("SyncSkus vendorIDs:%v, appOrgCodes:%v, nameIDs:%v, skuIDs:%v", vendorIDs, appOrgCodes, nameIDs, skuIDs) db := dao.GetDB() + SetMultiStoreSkuSyncModifyStauts(db, vendorIDs) skuList, err := dao.GetSkusWithVendor(db, vendorIDs, appOrgCodes, nameIDs, skuIDs, true) if err == nil && len(skuList) > 0 { // todo 按vendorID orgCode合并操作 diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index e23583131..b7e191fc0 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.ComposeSkuName(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 84057d206..e696ff338 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().Before(exPrefixEnd) && time.Now().After(exPrefixBegin) { + if time.Now().Add(6*time.Hour).After(exPrefixBegin) && time.Now().Add(-6*time.Hour).Before(exPrefixEnd) { skuName = exPrefix } } diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index cd3012df7..93f66b77a 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -871,7 +871,7 @@ func GetStoresSkusInfoBySaleTime(db *DaoDB, storeID int) (storeSkuBindList []*mo return storeSkuBindList, err } -func UpdateStoreSkuBindSyncStatus(db *DaoDB, vendorIDs []int, storeID int) (num int64, err error) { +func UpdateStoreSkuBindSyncStatusForSaleStatus(db *DaoDB, vendorIDs []int, storeID int) (num int64, err error) { sql := ` UPDATE store_sku_bind SET @@ -903,6 +903,72 @@ func UpdateStoreSkuBindSyncStatus(db *DaoDB, vendorIDs []int, storeID int) (num return ExecuteSQL(db, sql, sqlParams...) } +func UpdateStoreSkuBindSyncStatusForExPrefix(db *DaoDB, vendorIDs []int) (num int64, err error) { + sql := ` + UPDATE store_sku_bind a + JOIN sku b ON a.sku_id = b.id AND b.deleted_at = ? + JOIN sku_name c ON c.id = b.name_id AND c.deleted_at = ? + SET + ` + fmtParams := []interface{}{} + sqlParams := []interface{}{ + utils.DefaultTimeValue, + utils.DefaultTimeValue, + } + if len(vendorIDs) > 0 { + for _, v := range vendorIDs { + fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[v]) + sql += ` %s_sync_status = ?,` + fmtParams = append(fmtParams, fieldPrefix) + sqlParams = append(sqlParams, model.SyncFlagModifiedMask) + } + } else { + return 0, errors.New("取平台ID名有错误!partner.GetPurchasePlatformVendorIDs()") + } + sql = sql[0:strings.LastIndex(sql, ",")] + sql = fmt.Sprintf(sql, fmtParams...) + sql += ` WHERE a.status = ? + AND a.deleted_at = ? + AND c.ex_prefix != "" + 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) + return ExecuteSQL(db, sql, sqlParams...) +} + +func UpdateSkuSyncStatusForExPrefix(db *DaoDB, vendorIDs []int) (num int64, err error) { + sql := ` + UPDATE sku b + JOIN sku_name c ON c.id = b.name_id AND c.deleted_at = ? + SET + ` + fmtParams := []interface{}{} + sqlParams := []interface{}{ + utils.DefaultTimeValue, + utils.DefaultTimeValue, + } + if len(vendorIDs) > 0 { + for _, v := range vendorIDs { + fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[v]) + sql += ` b.%s_sync_status = ?,` + fmtParams = append(fmtParams, fieldPrefix) + sqlParams = append(sqlParams, model.SyncFlagModifiedMask) + } + } else { + return 0, errors.New("取平台ID名有错误!partner.GetPurchasePlatformVendorIDs()") + } + sql = sql[0:strings.LastIndex(sql, ",")] + sql = fmt.Sprintf(sql, fmtParams...) + sql += ` WHERE b.deleted_at = ? + AND c.ex_prefix != "" + 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) + return ExecuteSQL(db, sql, sqlParams...) +} + func GetStoreSkusByNameIDs(db *DaoDB, storeIDs []int, nameID int) (skuList []*StoreSkuSyncInfo, err error) { sql := ` SELECT a.*,c.unit,c.name