From a02dbdeacc2a79a9bcff121721187d6ce53da07a 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, 17 Dec 2019 14:10:44 +0800 Subject: [PATCH 01/22] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E9=97=A8=E5=BA=97=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store.go | 12 ++++++++++-- business/model/dao/store.go | 11 ++++++----- business/model/store.go | 7 ++++--- business/partner/purchase/ebai/store.go | 17 +++++++++++------ business/partner/purchase/jd/store.go | 9 +++++++-- business/partner/purchase/mtwm/store.go | 11 +++++++++-- 6 files changed, 47 insertions(+), 20 deletions(-) diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 3ce1f6071..734b8c2da 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -11,6 +11,7 @@ import ( "strconv" "strings" "time" + "unicode/utf8" "github.com/360EntSecGroup-Skylar/excelize" @@ -1149,6 +1150,13 @@ func UpdateStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendor if valid["status"] != nil { syncStatus |= model.SyncFlagStoreStatus } + if valid["vendorStoreName"] != nil { + vendorStoreName := valid["vendorStoreName"].(string) + if utf8.RuneCountInString(vendorStoreName) > 13 && vendorID == model.VendorIDJD { + return 0, fmt.Errorf("门店名称不允许超过13位!") + } + syncStatus |= model.SyncFlagStoreName + } for _, v := range [][]string{ []string{ "pricePercentagePack", @@ -1189,7 +1197,7 @@ func UpdateStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendor panic(r) } }() - if valid["status"] != nil { // 对于store vendor map,只有Status改变才需要同步到厂商 + if valid["status"] != nil || valid["vendorStoreName"] != nil { // 对于store vendor map,只有Status改变才需要同步到厂商 num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, storeMap, valid, userName, map[string]interface{}{ model.FieldStoreID: storeID, model.FieldVendorID: vendorID, @@ -1222,7 +1230,7 @@ func UpdateStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendor } } dao.Commit(db) - if vendorID != model.VendorIDJX && (valid["status"] != nil || valid["freightDeductionPack"] != nil) { + if vendorID != model.VendorIDJX && (valid["status"] != nil || valid["freightDeductionPack"] != nil || valid["vendorStoreName"] != nil) { _, err = CurVendorSync.SyncStore(ctx, db, vendorID, storeID, false, userName) } } diff --git a/business/model/dao/store.go b/business/model/dao/store.go index c1900b253..40c35c240 100644 --- a/business/model/dao/store.go +++ b/business/model/dao/store.go @@ -14,10 +14,11 @@ type StoreDetail struct { VendorOrgCode string `orm:"size(32)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空 - VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"` - VendorStatus int `json:"vendor_status"` // 取值同Store.Status - DeliveryFee int `json:"deliveryFee"` - SyncStatus int8 `orm:"default(2)" json:"syncStatus"` + VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"` + VendorStoreName string `json:"vendorStoreName"` + VendorStatus int `json:"vendor_status"` // 取值同Store.Status + DeliveryFee int `json:"deliveryFee"` + SyncStatus int8 `orm:"default(2)" json:"syncStatus"` PricePercentage int16 `orm:"default(100)" json:"pricePercentage"` // todo 厂商价格相对于本地价格的百分比,这个字段的修改会比较特殊,因为可能需要刷新厂商价格 PricePercentagePackStr string `orm:"size(4096)" json:"-"` // @@ -81,7 +82,7 @@ func getStoreDetail(db *DaoDB, storeID, vendorID int, vendorStoreID string) (sto sql := ` SELECT t1.*, t2.vendor_store_id, t2.status vendor_status, t2.delivery_fee, t2.sync_status, t2.vendor_org_code, - t2.price_percentage, t2.auto_pickup, t2.delivery_type, t2.delivery_competition, t2.is_sync, + t2.price_percentage, t2.auto_pickup, t2.delivery_type, t2.delivery_competition, t2.is_sync, t2.vendor_store_name, t3.value price_percentage_pack_str, t4.value freight_deduction_pack_str, district.name district_name, diff --git a/business/model/store.go b/business/model/store.go index 9deb91007..83467b027 100644 --- a/business/model/store.go +++ b/business/model/store.go @@ -388,9 +388,10 @@ type StoreMap struct { VendorID int `orm:"column(vendor_id)" json:"vendorID"` VendorOrgCode string `orm:"size(32)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空 - VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"` - Status int `json:"status"` // 取值同Store.Status - StoreName string `orm:"size(255)" json:"storeName"` // 平台门店的名字 + VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"` + Status int `json:"status"` // 取值同Store.Status + StoreName string `orm:"size(255)" json:"storeName"` // 平台门店的名字,由平台到京西 + VendorStoreName string `orm:"size(255)" json:"vendorStoreName"` //平台门店名,由京西到平台 PricePercentage int16 `orm:"default(100)" json:"pricePercentage"` // todo 厂商价格相对于本地价格的百分比,这个字段的修改会比较特殊,因为可能需要刷新厂商价格 PricePercentagePack string `orm:"size(32)" json:"pricePercentagePack"` // diff --git a/business/partner/purchase/ebai/store.go b/business/partner/purchase/ebai/store.go index ea5b75170..3d36ed191 100644 --- a/business/partner/purchase/ebai/store.go +++ b/business/partner/purchase/ebai/store.go @@ -30,9 +30,10 @@ type tEbaiStoreInfo struct { EbaiStoreStatus int SyncStatus int - ProvinceID int `orm:"column(province_id)"` - CityID int `orm:"column(city_id)"` - DistrictID int `orm:"column(district_id)"` + ProvinceID int `orm:"column(province_id)"` + CityID int `orm:"column(city_id)"` + DistrictID int `orm:"column(district_id)"` + VendorStoreName string } func (p *PurchaseHandler) CreateStore(db *dao.DaoDB, storeID int, userName string) (vendorStoreID string, err error) { @@ -156,7 +157,7 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin SELECT t1.*, t2.status ebai_store_status, t2.vendor_store_id, t2.vendor_org_code, - IF(t1.updated_at > t2.updated_at, t1.last_operator, t2.last_operator) real_last_operator, t2.sync_status + IF(t1.updated_at > t2.updated_at, t1.last_operator, t2.last_operator) real_last_operator, t2.sync_status, t2.vendor_store_name FROM store t1 JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND (t2.deleted_at = ?) WHERE t1.id = ? @@ -392,8 +393,12 @@ func genStoreMapFromStore(store *tEbaiStoreInfo) map[string]interface{} { if store.VendorStoreID != "" { params["baidu_shop_id"] = store.VendorStoreID } - if store.SyncStatus&(model.SyncFlagNewMask /*|model.SyncFlagStoreName*/) != 0 { - params["name"] = jxutils.ComposeStoreName(store.Name, model.VendorIDEBAI) + if store.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreName) != 0 { + if store.VendorStoreName != "" { + params["name"] = store.VendorStoreName + } else { + params["name"] = jxutils.ComposeStoreName(store.Name, model.VendorIDEBAI) + } } params["address"] = store.Address // todo 饿百 开店审核通过后不允许修改商户信息 diff --git a/business/partner/purchase/jd/store.go b/business/partner/purchase/jd/store.go index 41a913437..40c97678b 100644 --- a/business/partner/purchase/jd/store.go +++ b/business/partner/purchase/jd/store.go @@ -36,6 +36,7 @@ type tJdStoreInfo struct { VendorStoreID string `orm:"column(vendor_store_id)"` RealLastOperator string SyncStatus int + VendorStoreName string } var ( @@ -123,7 +124,7 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin t1.*, city.jd_code jd_city_code, district.jd_code jd_district_code, t2.status jd_store_status, t2.vendor_store_id, IF(t1.updated_at > t2.updated_at, t1.last_operator, t2.last_operator) real_last_operator, - t2.sync_status, t2.freight_deduction_pack, t2.vendor_org_code + t2.sync_status, t2.freight_deduction_pack, t2.vendor_org_code, t2.vendor_store_name FROM store t1 JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND (t2.deleted_at = ?) LEFT JOIN place city ON t1.city_code = city.code @@ -146,7 +147,11 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin storeParams.OutSystemID = store.VendorStoreID } if store.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreName) != 0 { - storeParams.StationName = jxutils.ComposeStoreName(store.Name, model.VendorIDJD) + if store.VendorStoreName != "" { + storeParams.StationName = store.VendorStoreName + } else { + storeParams.StationName = jxutils.ComposeStoreName(store.Name, model.VendorIDJD) + } } if store.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreAddress) != 0 { storeParams.StationAddress = store.Address diff --git a/business/partner/purchase/mtwm/store.go b/business/partner/purchase/mtwm/store.go index 27f4c1bff..f0538aa3a 100644 --- a/business/partner/purchase/mtwm/store.go +++ b/business/partner/purchase/mtwm/store.go @@ -101,6 +101,7 @@ func (p *PurchaseHandler) CreateStore(db *dao.DaoDB, storeID int, userName strin } func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error) { + var name string if db == nil { db = dao.GetDB() } @@ -115,10 +116,16 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin return err } mergedStoreStatus := jxutils.MergeStoreStatus(storeDetail.Status, storeDetail.VendorStatus) + name = remoteStoreInfo.Name + if storeDetail.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreName) != 0 { + if storeDetail.VendorStoreName != "" { + name = storeDetail.VendorStoreName + } + } // openLevel, isOnline := bizStatusJX2Mtwm(mergedStoreStatus) params := map[string]interface{}{ - "name": remoteStoreInfo.Name, //jxutils.ComposeStoreName(storeDetail.Store.Name, model.VendorIDMTWM), - "address": storeDetail.Address, // 美团好像地址也不能改的? + "name": name, //jxutils.ComposeStoreName(storeDetail.Store.Name, model.VendorIDMTWM), + "address": storeDetail.Address, // 美团好像地址也不能改的? "longitude": jxutils.IntCoordinate2Standard(int(remoteStoreInfo.Longitude)), "latitude": jxutils.IntCoordinate2Standard(int(remoteStoreInfo.Latitude)), "phone": storeDetail.Tel1, From 9fdae12a66bf78aa82103aebc1b14285b93a47ec 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, 17 Dec 2019 17:34:51 +0800 Subject: [PATCH 02/22] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=95=86=E5=93=81?= =?UTF-8?q?=E9=A2=9D=E5=A4=96=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 | 51 ++++++++++++++++++-- business/jxstore/cms/sync2.go | 12 ++++- business/model/dao/sku.go | 5 +- business/model/dao/store_sku.go | 9 ++-- business/model/sku.go | 20 +++++--- business/partner/purchase/ebai/store_sku2.go | 12 ++++- business/partner/purchase/jd/sku.go | 12 ++++- business/partner/purchase/mtwm/store_sku2.go | 13 ++++- controllers/cms_sku.go | 22 +++++++++ routers/commentsRouter_controllers.go | 9 ++++ 10 files changed, 146 insertions(+), 19 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 504424677..5feb73558 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -522,7 +522,10 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku bool, params ma t1.status, t1.is_spu, t1.desc_img, - t1.upc` + t1.upc, + t1.ex_prefix, + t1.ex_prefix_begin, + t1.ex_prefix_end` if isBySku { sql += `, t2.id` @@ -551,6 +554,9 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku bool, params ma t1.upc, t1.jd_id, t1.jd_sync_status, + t1.ex_prefix, + t1.ex_prefix_begin, + t1.ex_prefix_end, CONCAT("[", GROUP_CONCAT(DISTINCT CONCAT('{"id":', t2.id, ',"comment":"', t2.comment, '","status":', t2.status, ',"createdAt":"', CONCAT(REPLACE(t2.created_at," ","T"),"+08:00"), '","updatedAt":"', CONCAT(REPLACE(t2.updated_at," ","T"),"+08:00"), '","lastOperator":"', t2.last_operator, '","specQuality":', t2.spec_quality, ',"specUnit":"', t2.spec_unit, @@ -581,6 +587,15 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku bool, params ma var skuIDs []int for _, skuName := range skuNamesInfo.SkuNames { + if skuName.ExPrefixEnd != utils.ZeroTimeValue && skuName.ExPrefixBegin != utils.ZeroTimeValue { + if time.Now().Before(skuName.ExPrefixEnd) && time.Now().After(skuName.ExPrefixBegin) { + skuName.FullName = skuName.ExPrefix + jxutils.ComposeSkuName(skuName.Prefix, skuName.Name, "", "", 0, "", 0) + } else { + skuName.FullName = jxutils.ComposeSkuName(skuName.Prefix, skuName.Name, "", "", 0, "", 0) + } + } else { + skuName.FullName = jxutils.ComposeSkuName(skuName.Prefix, skuName.Name, "", "", 0, "", 0) + } if skuName.SkusStr != "" { if err = utils.UnmarshalUseNumber([]byte(skuName.SkusStr), &skuName.Skus); err != nil { dao.Rollback(db) @@ -852,7 +867,6 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf } } } - skuList, err2 := dao.GetSkus(db, nil, []int{nameID}, nil, nil) if err = err2; err == nil { for _, v := range skuList { @@ -871,7 +885,6 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf } } } - skuIDs, err2 := dao.GetSkuIDByNames(db, []int{nameID}) if err = err2; err != nil { dao.Rollback(db) @@ -1331,3 +1344,35 @@ func GetJdUpcCodeByName(ctx *jxcontext.Context, name, upcCode string) (productIn } return productInfos, err } + +func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fromTime, toTime string, isAsync, isContinueWhenError bool) (hint string, err error) { + var ( + fromTimeP time.Time + toTimeP time.Time + ) + if fromTime != "" { + fromTimeP = utils.Str2Time(fromTime) + } + if toTime != "" { + toTimeP = utils.Str2Time(toTime) + } + task := tasksch.NewParallelTask("批量设置商品前缀", tasksch.NewParallelConfig().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, + } + _, err = UpdateSkuName(ctx, nameID, payload) + return retVal, err + }, nameIDs) + tasksch.HandleTask(task, nil, true).Run() + if !isAsync { + _, err = task.GetResult(0) + hint = "1" + } else { + hint = task.GetID() + } + return hint, err +} diff --git a/business/jxstore/cms/sync2.go b/business/jxstore/cms/sync2.go index 10962053d..c986b80ff 100644 --- a/business/jxstore/cms/sync2.go +++ b/business/jxstore/cms/sync2.go @@ -143,7 +143,17 @@ func SyncSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs []int, if skuVendorInfo.BindID == 0 { return nil, fmt.Errorf("商品:%d的数据异常", skuVendorInfo.SkuID) } - skuVendorInfo.SkuName = jxutils.ComposeSkuName(skuVendorInfo.Prefix, skuVendorInfo.Name, skuVendorInfo.Comment, skuVendorInfo.Unit, skuVendorInfo.SpecQuality, skuVendorInfo.SpecUnit, 0) + skuName := "" + if skuVendorInfo.ExPrefixEnd != utils.ZeroTimeValue && skuVendorInfo.ExPrefixBegin != utils.ZeroTimeValue { + if time.Now().Before(skuVendorInfo.ExPrefixEnd) && time.Now().After(skuVendorInfo.ExPrefixBegin) { + skuName = skuVendorInfo.ExPrefix + jxutils.ComposeSkuName(skuVendorInfo.Prefix, skuVendorInfo.Name, skuVendorInfo.Comment, skuVendorInfo.Unit, skuVendorInfo.SpecQuality, skuVendorInfo.SpecUnit, 0) + } else { + skuName = jxutils.ComposeSkuName(skuVendorInfo.Prefix, skuVendorInfo.Name, skuVendorInfo.Comment, skuVendorInfo.Unit, skuVendorInfo.SpecQuality, skuVendorInfo.SpecUnit, 0) + } + } else { + skuName = jxutils.ComposeSkuName(skuVendorInfo.Prefix, skuVendorInfo.Name, skuVendorInfo.Comment, skuVendorInfo.Unit, skuVendorInfo.SpecQuality, skuVendorInfo.SpecUnit, 0) + } + skuVendorInfo.SkuName = skuName skuVendorInfo.MergedStatus = jxutils.MergeSkuStatus(skuVendorInfo.Status, skuVendorInfo.NameStatus) if multiStoresHandler, ok := partner.GetPurchasePlatformFromVendorID(skuVendorInfo.VendorID).(partner.IMultipleStoresHandler); ok { if model.IsSyncStatusDelete(skuVendorInfo.SkuSyncStatus) { //删除 diff --git a/business/model/dao/sku.go b/business/model/dao/sku.go index 2884efab4..763293ecc 100644 --- a/business/model/dao/sku.go +++ b/business/model/dao/sku.go @@ -260,7 +260,9 @@ func GetSkusWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string, nameIDs IF(t11.resource_type IS NULL OR t11.resource_type <> ?, t2.img, '') img, IF(t12.resource_type IS NULL OR t12.resource_type <> ?, t2.img2, '') img2, t2.desc_img, - + t2.ex_prefix, + t2.ex_prefix_begin, + t2.ex_prefix_end, t3.jd_category_id vendor_vendor_cat_id, t3m.sync_status cat_sync_status, @@ -307,7 +309,6 @@ func GetSkusWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string, nameIDs sqlParams = append(sqlParams, skuIDs) } sql += " ORDER BY t1.seq" - if err = GetRows(db, &skuList, sql, sqlParams...); err == nil { skuPlaceList, err2 := GetSkuNamePlaces(db, nameIDs, skuIDs) if err = err2; err == nil { diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index e8d758482..1a970d05d 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -56,7 +56,10 @@ type StoreSkuSyncInfo struct { model.Sku // sku_name - Prefix string + Prefix string + ExPrefix string + ExPrefixBegin time.Time + ExPrefixEnd time.Time // NameID int `orm:"column(name_id)"` VendorNameID string `orm:"column(vendor_name_id)"` // 暂时无用 Name string @@ -305,7 +308,7 @@ func newGetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty %s vendor_sku_id, t1.%s_sync_status sku_sync_status, t1.%s_price vendor_price, t1.store_id, t1.deleted_at bind_deleted_at,t1.status_sale_begin,t1.status_sale_end, t2.*, - t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, + t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.ex_prefix, t3.ex_prefix_begin, t3.ex_prefix_end, IF(t11.%s <> '', t11.%s, t3.img) img, IF(t12.%s <> '', t12.%s, t3.img2) img2, t13.%s desc_img, @@ -410,7 +413,7 @@ func oldGetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty %s.%s_id vendor_sku_id, t1.%s_sync_status sku_sync_status, t1.%s_price vendor_price, t1.store_id, t1.deleted_at bind_deleted_at,t1.status_sale_begin,t1.status_sale_end, t2.*, - t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, + t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc,t3.ex_prefix, t3.ex_prefix_begin, t3.ex_prefix_end, IF(t11.%s <> '', t11.%s, t3.img) img, IF(t12.%s <> '', t12.%s, t3.img2) img2, t13.%s desc_img, diff --git a/business/model/sku.go b/business/model/sku.go index e2e51cf03..7823dc903 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -1,5 +1,7 @@ package model +import "time" + const ( SkuCategoryNormal = 0 SkuCategorySpecial = 1 @@ -166,8 +168,12 @@ func (*SkuCategory) TableIndex() [][]string { type SkuName struct { ModelIDCULD - Prefix string `orm:"size(255)" json:"prefix"` - Name string `orm:"size(255);index" json:"name"` + Prefix string `orm:"size(255)" json:"prefix"` + Name string `orm:"size(255);index" json:"name"` + ExPrefix string `orm:"size(255)" json:"exPrefix"` + + ExPrefixBegin time.Time `orm:"type(datetime);null" json:"exPrefixBegin"` + ExPrefixEnd time.Time `orm:"type(datetime);null" json:"exPrefixEnd"` BrandID int `orm:"column(brand_id);default(0)" json:"brandID"` // todo,此属性暂时没有使用,且有问题,应该是不同平台都有一个brandid CategoryID int `orm:"column(category_id);index" json:"categoryID"` // 标准类别 @@ -255,9 +261,9 @@ type SkuWithVendor struct { type SkuNameExt struct { SkuName - Skus []*SkuWithVendor `orm:"-" json:"skus"` - SkusStr string `json:"-"` - - Places []int `orm:"-" json:"places"` - PlacesStr string `json:"-"` + Skus []*SkuWithVendor `orm:"-" json:"skus"` + SkusStr string `json:"-"` + FullName string `json:"fullName"` + Places []int `orm:"-" json:"places"` + PlacesStr string `json:"-"` } diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index df5508141..c57a99aa3 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -244,8 +244,18 @@ func genSkuParamsFromStoreSkuInfo2(storeSku *dao.StoreSkuSyncInfo, isCreate bool "url": storeSku.Img2, }) } + skuName := "" + if storeSku.ExPrefixEnd != utils.ZeroTimeValue && storeSku.ExPrefixBegin != utils.ZeroTimeValue { + if time.Now().Before(storeSku.ExPrefixEnd) && time.Now().After(storeSku.ExPrefixBegin) { + skuName = storeSku.ExPrefix + utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), ebaiapi.MaxSkuNameByteCount) + } else { + skuName = utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), ebaiapi.MaxSkuNameByteCount) + } + } else { + skuName = utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), ebaiapi.MaxSkuNameByteCount) + } params = map[string]interface{}{ - "name": utils.LimitMixedStringLen(storeSku.SkuName, ebaiapi.MaxSkuNameByteCount), + "name": skuName, "left_num": model.MaxStoreSkuStockQty, "category_id": utils.Str2Int64(storeSku.VendorCatID), "predict_cat": 0, // 不使用推荐类目 diff --git a/business/partner/purchase/jd/sku.go b/business/partner/purchase/jd/sku.go index 214aea54b..23030971a 100644 --- a/business/partner/purchase/jd/sku.go +++ b/business/partner/purchase/jd/sku.go @@ -4,6 +4,7 @@ package jd import ( "fmt" + "time" "unicode/utf8" "git.rosy.net.cn/baseapi/platformapi/jdapi" @@ -140,7 +141,16 @@ func (p *PurchaseHandler) cuSku(db *dao.DaoDB, sku *model.Sku, handler func(skuE addParams[jdapi.KeyIfViewDesc] = 1 } if err == nil { - skuName := jxutils.ComposeSkuName(skuInfoExt.Prefix, skuInfoExt.Name, sku.Comment, skuInfoExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount) + skuName := "" + if skuInfoExt.ExPrefixEnd != utils.ZeroTimeValue && skuInfoExt.ExPrefixBegin != utils.ZeroTimeValue { + if time.Now().Before(skuInfoExt.ExPrefixEnd) && time.Now().After(skuInfoExt.ExPrefixBegin) { + skuName = skuInfoExt.ExPrefix + jxutils.ComposeSkuName(skuInfoExt.Prefix, skuInfoExt.Name, sku.Comment, skuInfoExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount) + } else { + skuName = jxutils.ComposeSkuName(skuInfoExt.Prefix, skuInfoExt.Name, sku.Comment, skuInfoExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount) + } + } else { + skuName = jxutils.ComposeSkuName(skuInfoExt.Prefix, skuInfoExt.Name, sku.Comment, skuInfoExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount) + } skuPrice := jxutils.CaculateSkuPrice(skuInfoExt.Price, sku.SpecQuality, sku.SpecUnit, skuInfoExt.Unit) if skuInfoExt.Upc != "" { addParams[jdapi.KeyUpcCode] = skuInfoExt.Upc diff --git a/business/partner/purchase/mtwm/store_sku2.go b/business/partner/purchase/mtwm/store_sku2.go index 6c52ec66a..e3f1f3bf0 100644 --- a/business/partner/purchase/mtwm/store_sku2.go +++ b/business/partner/purchase/mtwm/store_sku2.go @@ -3,6 +3,7 @@ package mtwm import ( "regexp" "strings" + "time" "git.rosy.net.cn/baseapi/platformapi/mtwmapi" "git.rosy.net.cn/baseapi/utils" @@ -245,7 +246,17 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI }, } foodData["skus"] = skus - foodData["name"] = utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), mtwmapi.MaxSkuNameCharCount) + skuName := "" + if storeSku.ExPrefixEnd != utils.ZeroTimeValue && storeSku.ExPrefixBegin != utils.ZeroTimeValue { + if time.Now().Before(storeSku.ExPrefixEnd) && time.Now().After(storeSku.ExPrefixBegin) { + skuName = storeSku.ExPrefix + utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), mtwmapi.MaxSkuNameCharCount) + } else { + skuName = utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), mtwmapi.MaxSkuNameCharCount) + } + } else { + skuName = utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), mtwmapi.MaxSkuNameCharCount) + } + foodData["name"] = skuName foodData["description"] = storeSku.Comment if isNeedUpdatePrice { foodData["price"] = jxutils.IntPrice2Standard(storeSku.VendorPrice) diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index b8605f96a..71e2e97b8 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -390,3 +390,25 @@ func (c *SkuController) GetJdUpcCodeByName() { return retVal, "", err }) } + +// @Title 批量设置商品额外前缀 +// @Description 批量设置商品额外前缀 +// @Param token header string true "认证token" +// @Param nameIDs formData string true "商品nameIDs" +// @Param exPrefix formData string true "商品额外前缀" +// @Param fromTime formData string true "生效开始时间,格式 2006-01-01 00:00:00" +// @Param toTime formData string true "生效结束时间,格式 2006-01-01 00:00:00" +// @Param isAsync formData bool false "是否异步" +// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /UpdateSkuNamesExPrefix [put] +func (c *SkuController) UpdateSkuNamesExPrefix() { + c.callUpdateSkuNamesExPrefix(func(params *tSkuUpdateSkuNamesExPrefixParams) (retVal interface{}, errCode string, err error) { + var skuIDList []int + if err = jxutils.Strings2Objs(params.NameIDs, &skuIDList); err == nil { + retVal, err = cms.UpdateSkuNamesExPrefix(params.Ctx, skuIDList, params.ExPrefix, params.FromTime, params.ToTime, params.IsAsync, params.IsContinueWhenError) + } + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 6f94c278f..ed40b9d40 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1278,6 +1278,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], + beego.ControllerComments{ + Method: "UpdateSkuNamesExPrefix", + Router: `/UpdateSkuNamesExPrefix`, + AllowHTTPMethods: []string{"put"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"], beego.ControllerComments{ Method: "AddStoreCourierMap", From 8cd09089a81c2ec220ab672f766eb6ef4d33acab 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 10:06:14 +0800 Subject: [PATCH 03/22] =?UTF-8?q?=E7=BB=84=E5=90=88=E5=90=8D=E5=AD=97?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/orderman_ext.go | 13 ++++++++++++- business/jxstore/act/act.go | 2 +- business/jxstore/cms/sku.go | 10 +--------- business/jxstore/cms/store.go | 2 +- business/jxstore/cms/store_sku_check.go | 8 ++++---- business/jxstore/cms/sync2.go | 12 +----------- business/jxstore/cms/sync_store_sku.go | 2 +- business/jxstore/misc/store_sku_sales.go | 4 ++-- business/jxstore/tempop/tempop.go | 2 +- business/jxutils/jxutils.go | 9 +++++++-- business/model/act.go | 15 +++++++++------ business/model/dao/act.go | 2 +- business/model/dao/report.go | 2 +- business/model/dao/sku.go | 2 +- business/model/sku.go | 11 +++++++---- business/partner/purchase/ebai/store_sku2.go | 12 +----------- business/partner/purchase/jx/localjx/order.go | 2 +- business/partner/purchase/mtwm/store_sku2.go | 13 +------------ business/userstore/food_recipe.go | 2 +- 19 files changed, 54 insertions(+), 71 deletions(-) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index 9f6b8a538..f34241334 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -986,8 +986,19 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in for _, v := range orderList { pair := v.(*tOrderVendorPair) - if localOrderMap[jxutils.ComposeUniversalOrderID(pair.VendorOrderID, pair.VendorID)] == nil { + goodsOrder := localOrderMap[jxutils.ComposeUniversalOrderID(pair.VendorOrderID, pair.VendorID)] + if goodsOrder == nil { missingOrderList = append(missingOrderList, pair) + } else { + if goodsOrder.Status != model.OrderStatusFinished && goodsOrder.Status != model.OrderStatusCanceled { + if goodsOrder.BusinessType == model.BusinessTypeImmediate { + if time.Now().Sub(goodsOrder.CreatedAt).Hours() >= 8 { + missingOrderList = append(missingOrderList, pair) + } + } else { + + } + } } } case 1: diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index c94a354d6..1b4032e17 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -613,7 +613,7 @@ func GetActStoreSkuInfo(ctx *jxcontext.Context, actID int, vendorIDs []int, keyw return nil, err } for _, v := range actStoreSkuList { - v.SkuName = jxutils.ComposeSkuName(v.Prefix, v.SkuNameName, v.Comment, v.Unit, v.SpecQuality, v.SpecUnit, 0) + v.SkuName = jxutils.ComposeSkuName(v.Prefix, v.SkuNameName, v.Comment, v.Unit, v.SpecQuality, v.SpecUnit, 0, v.ExPrefix, v.ExPrefixBegin, v.ExPrefixEnd) } if pageSize > 0 && pageSize != model.UnlimitedPageSize { pagedInfo := &model.PagedInfo{ diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 5feb73558..e52177b80 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -587,15 +587,7 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku bool, params ma var skuIDs []int for _, skuName := range skuNamesInfo.SkuNames { - if skuName.ExPrefixEnd != utils.ZeroTimeValue && skuName.ExPrefixBegin != utils.ZeroTimeValue { - if time.Now().Before(skuName.ExPrefixEnd) && time.Now().After(skuName.ExPrefixBegin) { - skuName.FullName = skuName.ExPrefix + jxutils.ComposeSkuName(skuName.Prefix, skuName.Name, "", "", 0, "", 0) - } else { - skuName.FullName = jxutils.ComposeSkuName(skuName.Prefix, skuName.Name, "", "", 0, "", 0) - } - } else { - skuName.FullName = jxutils.ComposeSkuName(skuName.Prefix, skuName.Name, "", "", 0, "", 0) - } + skuName.FullName = jxutils.ComposeSkuName(skuName.Prefix, skuName.Name, "", "", 0, "", 0, skuName.ExPrefix, skuName.ExPrefixBegin, skuName.ExPrefixEnd) if skuName.SkusStr != "" { if err = utils.UnmarshalUseNumber([]byte(skuName.SkusStr), &skuName.Skus); err != nil { dao.Rollback(db) diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 734b8c2da..bdc3f8f65 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -2611,7 +2611,7 @@ func RefreshJdLevel(ctx *jxcontext.Context) (err error) { func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { v := batchItemList[0].(*model.StoreMap) var ( - pageLimit = 50 + pageLimit = 5 pageNo = 1 level string ) diff --git a/business/jxstore/cms/store_sku_check.go b/business/jxstore/cms/store_sku_check.go index f08588711..edf400ef9 100644 --- a/business/jxstore/cms/store_sku_check.go +++ b/business/jxstore/cms/store_sku_check.go @@ -340,10 +340,10 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin //多规格商品不用比较数量单位 if jxSkuInfo.IsSpu == 0 { //jxSkuDetailName : 前缀 ([荐]) + 分类名(xxx水饺) + 数量单位(约..g/份) + 注释 (补充..) - jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, jxSkuInfo.SkuName.Unit, jxSkuInfo.Skus[0].SkuSpecQuality, jxSkuInfo.Skus[0].SkuSpecUnit, 0) + jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, jxSkuInfo.SkuName.Unit, jxSkuInfo.Skus[0].SkuSpecQuality, jxSkuInfo.Skus[0].SkuSpecUnit, 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue) } else { //jxSkuDetailName : 前缀 ([荐]) + 分类名(xxx水饺) + 数量单位(约..g/份) + 注释 (补充..) - jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, "", jxSkuInfo.Skus[0].SkuSpecQuality, "", 0) + jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, "", jxSkuInfo.Skus[0].SkuSpecQuality, "", 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue) } //jxSkuSaleStatus : 商品状态 ,skustatus 优先级高于 StoreSkuStatus @@ -462,9 +462,9 @@ func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool var jxSkuDetailName string //多规格商品不用比较数量单位 if jxSkuInfo.IsSpu == 0 { - jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, jxSkuInfo.Unit, jxSkuInfo.SpecQuality, jxSkuInfo.SpecUnit, 0) + jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, jxSkuInfo.Unit, jxSkuInfo.SpecQuality, jxSkuInfo.SpecUnit, 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue) } else { - jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, "", jxSkuInfo.SpecQuality, "", 0) + jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, "", jxSkuInfo.SpecQuality, "", 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue) } vendorSkuInfoMap := filterVendorSkuInfoMap[skuid] diff --git a/business/jxstore/cms/sync2.go b/business/jxstore/cms/sync2.go index c986b80ff..c7c6d5e1f 100644 --- a/business/jxstore/cms/sync2.go +++ b/business/jxstore/cms/sync2.go @@ -143,17 +143,7 @@ func SyncSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs []int, if skuVendorInfo.BindID == 0 { return nil, fmt.Errorf("商品:%d的数据异常", skuVendorInfo.SkuID) } - skuName := "" - if skuVendorInfo.ExPrefixEnd != utils.ZeroTimeValue && skuVendorInfo.ExPrefixBegin != utils.ZeroTimeValue { - if time.Now().Before(skuVendorInfo.ExPrefixEnd) && time.Now().After(skuVendorInfo.ExPrefixBegin) { - skuName = skuVendorInfo.ExPrefix + jxutils.ComposeSkuName(skuVendorInfo.Prefix, skuVendorInfo.Name, skuVendorInfo.Comment, skuVendorInfo.Unit, skuVendorInfo.SpecQuality, skuVendorInfo.SpecUnit, 0) - } else { - skuName = jxutils.ComposeSkuName(skuVendorInfo.Prefix, skuVendorInfo.Name, skuVendorInfo.Comment, skuVendorInfo.Unit, skuVendorInfo.SpecQuality, skuVendorInfo.SpecUnit, 0) - } - } else { - skuName = jxutils.ComposeSkuName(skuVendorInfo.Prefix, skuVendorInfo.Name, skuVendorInfo.Comment, skuVendorInfo.Unit, skuVendorInfo.SpecQuality, skuVendorInfo.SpecUnit, 0) - } - skuVendorInfo.SkuName = skuName + skuVendorInfo.SkuName = jxutils.ComposeSkuName(skuVendorInfo.Prefix, skuVendorInfo.Name, skuVendorInfo.Comment, skuVendorInfo.Unit, skuVendorInfo.SpecQuality, skuVendorInfo.SpecUnit, 0,skuVendorInfo.ExPrefix,skuVendorInfo.ExPrefixBegin,skuVendorInfo.ExPrefixEnd) skuVendorInfo.MergedStatus = jxutils.MergeSkuStatus(skuVendorInfo.Status, skuVendorInfo.NameStatus) if multiStoresHandler, ok := partner.GetPurchasePlatformFromVendorID(skuVendorInfo.VendorID).(partner.IMultipleStoresHandler); ok { if model.IsSyncStatusDelete(skuVendorInfo.SkuSyncStatus) { //删除 diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index b42377490..4fb5e88f6 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.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/jxstore/misc/store_sku_sales.go b/business/jxstore/misc/store_sku_sales.go index ca0dfc7fe..2f7e677fe 100644 --- a/business/jxstore/misc/store_sku_sales.go +++ b/business/jxstore/misc/store_sku_sales.go @@ -149,7 +149,7 @@ func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales if storeSkuInfo != nil { skuName := storeSkuInfo.SkuName skuInfo := storeSkuInfo.Skus[0] - storeSkuSales.SkuName = jxutils.ComposeSkuName(skuName.Prefix, skuName.Name, skuInfo.Comment, skuName.Unit, skuInfo.SkuSpecQuality, skuInfo.SkuSpecUnit, 0) + storeSkuSales.SkuName = jxutils.ComposeSkuName(skuName.Prefix, skuName.Name, skuInfo.Comment, skuName.Unit, skuInfo.SkuSpecQuality, skuInfo.SkuSpecUnit, 0,skuName.ExPrefix,skuName.ExPrefixBegin,skuName.ExPrefixEnd) storeSkuSales.SkuImage = storeSkuInfo.Img storeSkuSales.SkuPrice = jxutils.IntPrice2StandardCurrencyString(int64(storeSkuInfo.Skus[0].BindPrice)) } else if skuAndNameInfo != nil { @@ -159,7 +159,7 @@ func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales storeSkuSales.SkuImage = skuNameList[0].Img prefix = skuNameList[0].Prefix } - storeSkuSales.SkuName = jxutils.ComposeSkuName(prefix, skuAndNameInfo.Name, skuAndNameInfo.Comment, skuAndNameInfo.Unit, skuAndNameInfo.SpecQuality, skuAndNameInfo.SpecUnit, 0) + storeSkuSales.SkuName = jxutils.ComposeSkuName(prefix, skuAndNameInfo.Name, skuAndNameInfo.Comment, skuAndNameInfo.Unit, skuAndNameInfo.SpecQuality, skuAndNameInfo.SpecUnit, 0,skuAndNameInfo.ExPrefix,skuAndNameInfo.ExPrefixBegin,skuAndNameInfo.ExPrefixEnd) storeSkuSales.SkuPrice = "N/A" } else { storeSkuSales.SkuName = "N/A" diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index e55bb1a69..d8829b563 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -1451,7 +1451,7 @@ func BuildSkuFromEbaiStore(ctx *jxcontext.Context, baiduShopID int64, isAsync, i } price := sku.LinkID sku.LinkID = 0 - skuName := jxutils.ComposeSkuName(skuNameExt.Prefix, skuNameExt.Name, sku.Comment, skuNameExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount) + skuName := jxutils.ComposeSkuName(skuNameExt.Prefix, skuNameExt.Name, sku.Comment, skuNameExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount,"",utils.ZeroTimeValue,utils.ZeroTimeValue) fixedStatus := 1 if sku.Status != model.SkuStatusNormal { fixedStatus = 2 diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index 02d8816ae..666d3dcbe 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -327,9 +327,14 @@ func FloatWeight2Int(weight float32) int { return int(math.Round(float64(weight * 1000))) } -func ComposeSkuName(prefix, name, comment, unit string, spec_quality float32, spec_unit string, maxLen int) (skuName string) { +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 != "" && exPrefixBegin != utils.ZeroTimeValue && exPrefixEnd != utils.ZeroTimeValue { + if time.Now().Before(exPrefixEnd) && time.Now().After(exPrefixBegin) { + skuName = exPrefix + } + } if prefix != "" { - skuName = "[" + prefix + "]" + skuName += "[" + prefix + "]" } skuName += name if unit == "份" { diff --git a/business/model/act.go b/business/model/act.go index bc792e542..fe20554e4 100644 --- a/business/model/act.go +++ b/business/model/act.go @@ -199,10 +199,13 @@ type ActStoreSku2 struct { SkuName string `json:"skuName"` - Prefix string `json:"-"` - SkuNameName string `orm:"column(sku_name_name)" json:"-"` - Unit string `orm:"size(8)" json:"-"` - SpecQuality float32 `json:"-"` - SpecUnit string `json:"-"` - Comment string `json:"-"` + Prefix string `json:"-"` + ExPrefix string + ExPrefixBegin time.Time + ExPrefixEnd time.Time + SkuNameName string `orm:"column(sku_name_name)" json:"-"` + Unit string `orm:"size(8)" json:"-"` + SpecQuality float32 `json:"-"` + SpecUnit string `json:"-"` + Comment string `json:"-"` } diff --git a/business/model/dao/act.go b/business/model/dao/act.go index 90907be70..3564ac70c 100644 --- a/business/model/dao/act.go +++ b/business/model/dao/act.go @@ -101,7 +101,7 @@ func GetActStoreSkuVendorList(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs END vendor_sku_id, t4.comment, t4.spec_quality, t4.spec_unit, t6.name store_name, - t7.name sku_name_name, t7.unit, t7.prefix + t7.name sku_name_name, t7.unit, t7.prefix, t7.ex_prefix, t7.ex_prefix_begin, t7.ex_prefix_end FROM act_store_sku t1 %s JOIN act_store_sku_map t2 ON t2.act_id = ? AND t2.bind_id = t1.id AND t2.deleted_at = ?`, jdVendorIDField, leftOrEmpty) sqlParams := []interface{}{ diff --git a/business/model/dao/report.go b/business/model/dao/report.go index deb057438..96edf6a1e 100644 --- a/business/model/dao/report.go +++ b/business/model/dao/report.go @@ -278,7 +278,7 @@ func GetPriceReferSnapshot(db *DaoDB, cityCodes, skuIDs []int, snapDate time.Tim err = err2 if len(skuList) > 0 { skuAndName := skuList[0] - jxSkuDetailName := jxutils.ComposeSkuName(skuAndName.Prefix, skuAndName.Name, skuAndName.Comment, skuAndName.Unit, skuAndName.SpecQuality, skuAndName.SpecUnit, 0) + jxSkuDetailName := jxutils.ComposeSkuName(skuAndName.Prefix, skuAndName.Name, skuAndName.Comment, skuAndName.Unit, skuAndName.SpecQuality, skuAndName.SpecUnit, 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue) v.SkuName = jxSkuDetailName } } diff --git a/business/model/dao/sku.go b/business/model/dao/sku.go index 763293ecc..fb83053aa 100644 --- a/business/model/dao/sku.go +++ b/business/model/dao/sku.go @@ -76,7 +76,7 @@ func GetCategories(db *DaoDB, parentID, level int, catIDs []int) (cats []*model. func GetSkus(db *DaoDB, skuIDs, nameIDs, statuss, catIDs []int) (skuList []*model.SkuAndName, err error) { sql := ` - SELECT t1.*, t2.name, t2.unit, t2.prefix, t2.is_spu + SELECT t1.*, t2.name, t2.unit, t2.prefix, t2.is_spu, t2.ex_prefix, t2.ex_prefix_begin, t2.ex_prefix_end FROM sku t1 JOIN sku_name t2 ON t2.id = t1.name_id AND t2.deleted_at = ? ` diff --git a/business/model/sku.go b/business/model/sku.go index 7823dc903..80bc10a82 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -229,10 +229,13 @@ type Sku struct { type SkuAndName struct { Sku - Name string - Unit string - Prefix string - IsSpu int + Name string + Unit string + Prefix string + IsSpu int + ExPrefix string + ExPrefixBegin time.Time + ExPrefixEnd time.Time } func (*Sku) TableUnique() [][]string { diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index 429cad174..3da268f76 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -244,18 +244,8 @@ func genSkuParamsFromStoreSkuInfo2(storeSku *dao.StoreSkuSyncInfo, isCreate bool "url": storeSku.Img2, }) } - skuName := "" - if storeSku.ExPrefixEnd != utils.ZeroTimeValue && storeSku.ExPrefixBegin != utils.ZeroTimeValue { - if time.Now().Before(storeSku.ExPrefixEnd) && time.Now().After(storeSku.ExPrefixBegin) { - skuName = storeSku.ExPrefix + utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), ebaiapi.MaxSkuNameByteCount) - } else { - skuName = utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), ebaiapi.MaxSkuNameByteCount) - } - } else { - skuName = utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), ebaiapi.MaxSkuNameByteCount) - } params = map[string]interface{}{ - "name": skuName, + "name": utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), ebaiapi.MaxSkuNameByteCount), "left_num": model.MaxStoreSkuStockQty, "category_id": utils.Str2Int64(storeSku.VendorCatID), "predict_cat": 0, // 不使用推荐类目 diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index 9fff31790..348c0e548 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -402,7 +402,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64 Count: v.Count, SalePrice: int64(storeSkuBind.JxPrice), // todo 考虑活动价 Weight: sku.Weight, - Name: jxutils.ComposeSkuName(sku.Prefix, sku.Name, sku.Comment, sku.Unit, sku.SpecQuality, sku.SpecUnit, 0), + Name: jxutils.ComposeSkuName(sku.Prefix, sku.Name, sku.Comment, sku.Unit, sku.SpecQuality, sku.SpecUnit, 0, sku.ExPrefix, sku.ExPrefixBegin, sku.ExPrefixEnd), } if storeSkuBind.ActPrice != 0 && storeSkuBind.ActPrice < storeSkuBind.JxPrice { jxSku.SalePrice = int64(storeSkuBind.ActPrice) diff --git a/business/partner/purchase/mtwm/store_sku2.go b/business/partner/purchase/mtwm/store_sku2.go index e3f1f3bf0..6c52ec66a 100644 --- a/business/partner/purchase/mtwm/store_sku2.go +++ b/business/partner/purchase/mtwm/store_sku2.go @@ -3,7 +3,6 @@ package mtwm import ( "regexp" "strings" - "time" "git.rosy.net.cn/baseapi/platformapi/mtwmapi" "git.rosy.net.cn/baseapi/utils" @@ -246,17 +245,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI }, } foodData["skus"] = skus - skuName := "" - if storeSku.ExPrefixEnd != utils.ZeroTimeValue && storeSku.ExPrefixBegin != utils.ZeroTimeValue { - if time.Now().Before(storeSku.ExPrefixEnd) && time.Now().After(storeSku.ExPrefixBegin) { - skuName = storeSku.ExPrefix + utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), mtwmapi.MaxSkuNameCharCount) - } else { - skuName = utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), mtwmapi.MaxSkuNameCharCount) - } - } else { - skuName = utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), mtwmapi.MaxSkuNameCharCount) - } - foodData["name"] = skuName + foodData["name"] = utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), mtwmapi.MaxSkuNameCharCount) foodData["description"] = storeSku.Comment if isNeedUpdatePrice { foodData["price"] = jxutils.IntPrice2Standard(storeSku.VendorPrice) diff --git a/business/userstore/food_recipe.go b/business/userstore/food_recipe.go index af0254ad8..c6f1fd335 100644 --- a/business/userstore/food_recipe.go +++ b/business/userstore/food_recipe.go @@ -246,7 +246,7 @@ func GetRecipeDetail(ctx *jxcontext.Context, recipeID int) (recipeDetail *FoodRe } choiceMap := make(map[int8][]*dao.FoodRecipeItemChoiceExt) for _, v := range itemChoiceList { - v.SkuName = jxutils.ComposeSkuName(v.Prefix, v.SkuNameName, v.Comment, v.Unit, v.SpecQuality, v.SpecUnit, 0) + v.SkuName = jxutils.ComposeSkuName(v.Prefix, v.SkuNameName, v.Comment, v.Unit, v.SpecQuality, v.SpecUnit, 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue) choiceMap[v.Index] = append(choiceMap[v.Index], v) } From 2403c5176432b55f18574f1b10061f33a0d48899 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 10:29:09 +0800 Subject: [PATCH 04/22] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=8D=E6=AD=A3?= =?UTF-8?q?=E5=B8=B8=E8=AE=A2=E5=8D=95=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 6 +++++- business/jxcallback/orderman/orderman_ext.go | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 50b86a75d..3712983eb 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -267,7 +267,11 @@ func (c *OrderManager) SaveOrder(order *model.GoodsOrder, isAdjust bool, db *dao } else { isDuplicated = true order.DuplicatedCount++ - db.Db.Update(order, "DuplicatedCount") + if order.Status == model.OrderStatusCanceled || order.Status == model.OrderStatusFinished { + db.Db.Update(order, "DuplicatedCount", "Status") + } else { + db.Db.Update(order, "DuplicatedCount") + } baseapi.SugarLogger.Infof("saveOrder duplicated orderid:%s msg received", order.VendorOrderID) } } diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index f34241334..d519d086b 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -996,7 +996,9 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in missingOrderList = append(missingOrderList, pair) } } else { - + if time.Now().Sub(goodsOrder.ExpectedDeliveredTime).Hours() >= 5 { + missingOrderList = append(missingOrderList, pair) + } } } } From 12a1a23ac17b97b7f1ee86a322e6dd7495e9b551 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 11:45:02 +0800 Subject: [PATCH 05/22] =?UTF-8?q?=E5=95=86=E5=93=81=E5=85=B3=E9=94=AE?= =?UTF-8?q?=E5=AD=97=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync2.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/jxstore/cms/sync2.go b/business/jxstore/cms/sync2.go index c7c6d5e1f..e18979671 100644 --- a/business/jxstore/cms/sync2.go +++ b/business/jxstore/cms/sync2.go @@ -143,7 +143,7 @@ func SyncSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs []int, if skuVendorInfo.BindID == 0 { return nil, fmt.Errorf("商品:%d的数据异常", skuVendorInfo.SkuID) } - skuVendorInfo.SkuName = jxutils.ComposeSkuName(skuVendorInfo.Prefix, skuVendorInfo.Name, skuVendorInfo.Comment, skuVendorInfo.Unit, skuVendorInfo.SpecQuality, skuVendorInfo.SpecUnit, 0,skuVendorInfo.ExPrefix,skuVendorInfo.ExPrefixBegin,skuVendorInfo.ExPrefixEnd) + skuVendorInfo.SkuName = jxutils.ComposeSkuName(skuVendorInfo.Prefix, skuVendorInfo.Name, skuVendorInfo.Comment, skuVendorInfo.Unit, skuVendorInfo.SpecQuality, skuVendorInfo.SpecUnit, 0, skuVendorInfo.ExPrefix, skuVendorInfo.ExPrefixBegin, skuVendorInfo.ExPrefixEnd) skuVendorInfo.MergedStatus = jxutils.MergeSkuStatus(skuVendorInfo.Status, skuVendorInfo.NameStatus) if multiStoresHandler, ok := partner.GetPurchasePlatformFromVendorID(skuVendorInfo.VendorID).(partner.IMultipleStoresHandler); ok { if model.IsSyncStatusDelete(skuVendorInfo.SkuSyncStatus) { //删除 From 990f3a2da20e2d7ea1d8d0774436499a09bd7e11 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 15:19:22 +0800 Subject: [PATCH 06/22] =?UTF-8?q?pr=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 6 +----- business/jxcallback/orderman/orderman_ext.go | 10 ++++++++-- business/jxstore/cms/store.go | 5 ++--- business/jxutils/jxutils.go | 2 +- business/model/dao/store_sku.go | 2 +- business/partner/purchase/ebai/store_sku2.go | 2 +- 6 files changed, 14 insertions(+), 13 deletions(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 3712983eb..50b86a75d 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -267,11 +267,7 @@ func (c *OrderManager) SaveOrder(order *model.GoodsOrder, isAdjust bool, db *dao } else { isDuplicated = true order.DuplicatedCount++ - if order.Status == model.OrderStatusCanceled || order.Status == model.OrderStatusFinished { - db.Db.Update(order, "DuplicatedCount", "Status") - } else { - db.Db.Update(order, "DuplicatedCount") - } + db.Db.Update(order, "DuplicatedCount") baseapi.SugarLogger.Infof("saveOrder duplicated orderid:%s msg received", order.VendorOrderID) } } diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index d519d086b..e7568f063 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -23,6 +23,9 @@ import ( const ( maxLastHours = 7 * 24 // 最多只能查询7天内的订单数据 defLastHours = 2 * 24 // 缺省是两天内的订单 + + orderMixTimeImmediatelyArrive = 8 + orderMixTimeDelayArrive = 5 ) type tWaybillExt struct { @@ -992,11 +995,11 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in } else { if goodsOrder.Status != model.OrderStatusFinished && goodsOrder.Status != model.OrderStatusCanceled { if goodsOrder.BusinessType == model.BusinessTypeImmediate { - if time.Now().Sub(goodsOrder.CreatedAt).Hours() >= 8 { + if time.Now().Sub(goodsOrder.CreatedAt).Hours() >= orderMixTimeImmediatelyArrive { missingOrderList = append(missingOrderList, pair) } } else { - if time.Now().Sub(goodsOrder.ExpectedDeliveredTime).Hours() >= 5 { + if time.Now().Sub(goodsOrder.ExpectedDeliveredTime).Hours() >= orderMixTimeDelayArrive { missingOrderList = append(missingOrderList, pair) } } @@ -1010,6 +1013,9 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in if handler := partner.GetPurchaseOrderHandlerFromVendorID(pair.VendorID); handler != nil { order, err2 := handler.GetOrder(pair.VendorOrgCode, pair.VendorOrderID) if err = err2; err == nil { + if order.Status == model.OrderStatusCanceled || order.Status == model.OrderStatusFinished { + err = c.UpdateOrderFields(order, []string{"Status"}) + } isDuplicated, err2 := c.SaveOrder(order, false, dao.GetDB()) if err2 == nil && !isDuplicated { retVal = []int{1} diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index bdc3f8f65..ec780e523 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -1150,9 +1150,8 @@ func UpdateStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendor if valid["status"] != nil { syncStatus |= model.SyncFlagStoreStatus } - if valid["vendorStoreName"] != nil { - vendorStoreName := valid["vendorStoreName"].(string) - if utf8.RuneCountInString(vendorStoreName) > 13 && vendorID == model.VendorIDJD { + if vendorStoreName, ok := valid["vendorStoreName"].(string); ok { + if utf8.RuneCountInString(vendorStoreName) > jdapi.MaxStoreNameLen && vendorID == model.VendorIDJD { return 0, fmt.Errorf("门店名称不允许超过13位!") } syncStatus |= model.SyncFlagStoreName diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index 666d3dcbe..84057d206 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -328,7 +328,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 != "" && exPrefixBegin != utils.ZeroTimeValue && exPrefixEnd != utils.ZeroTimeValue { + if exPrefix != "" && !utils.IsTimeZero(exPrefixBegin) && !utils.IsTimeZero(exPrefixEnd) { if time.Now().Before(exPrefixEnd) && time.Now().After(exPrefixBegin) { skuName = exPrefix } diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 1a970d05d..86b4bac83 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -514,7 +514,7 @@ func newGetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSync t1.id bind_id, t1.price, t1.unit_price, t1.status store_sku_status, t1.%s_sync_status sku_sync_status, t1.store_id, t1.deleted_at bind_deleted_at, t2.*, t2.id sku_id, t2m.vendor_thing_id vendor_sku_id, - t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, + t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.ex_prefix, t3.ex_prefix_begin, t3.ex_prefix_end, IF(t11.%s <> '', t11.%s, t3.img) img, IF(t12.%s <> '', t12.%s, t3.img2) img2, t13.%s desc_img, diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index 3da268f76..ec7e619d8 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -245,7 +245,7 @@ func genSkuParamsFromStoreSkuInfo2(storeSku *dao.StoreSkuSyncInfo, isCreate bool }) } params = map[string]interface{}{ - "name": utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), ebaiapi.MaxSkuNameByteCount), + "name": utils.LimitMixedStringLen(storeSku.SkuName, ebaiapi.MaxSkuNameByteCount), "left_num": model.MaxStoreSkuStockQty, "category_id": utils.Str2Int64(storeSku.VendorCatID), "predict_cat": 0, // 不使用推荐类目 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 07/22] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=95=86=E5=93=81?= =?UTF-8?q?=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 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 08/22] =?UTF-8?q?=E5=95=86=E5=93=81=E5=90=8D=E5=89=8D?= =?UTF-8?q?=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 From dad7a5a9268c9ede301ecd6fa7e5ab7812b53af7 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 18:40:46 +0800 Subject: [PATCH 09/22] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=9F=90=E4=B8=AA?= =?UTF-8?q?=E5=95=86=E5=93=81=E5=B9=B3=E5=8F=B0=E4=BB=B7=EF=BC=8C=E5=95=86?= =?UTF-8?q?=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/jxcallback/orderman/orderman_ext.go | 34 +++-- business/jxstore/cms/sku.go | 42 +++-- business/jxstore/cms/store_sku.go | 153 ++++++++++++++++++- business/jxstore/cms/store_sku_check.go | 8 +- business/jxstore/cms/sync.go | 1 - business/jxstore/cms/sync2.go | 1 - business/jxstore/misc/misc.go | 17 ++- business/jxstore/tempop/tempop.go | 2 +- business/jxutils/jxutils.go | 14 +- business/model/act.go | 4 +- business/model/dao/report.go | 2 +- business/model/dao/store_sku.go | 32 ++-- business/model/sku.go | 16 +- business/userstore/food_recipe.go | 2 +- controllers/cms_sku.go | 4 +- controllers/cms_store_sku.go | 20 +++ routers/commentsRouter_controllers.go | 9 ++ 17 files changed, 293 insertions(+), 68 deletions(-) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index e7568f063..16907e81e 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -24,8 +24,8 @@ const ( maxLastHours = 7 * 24 // 最多只能查询7天内的订单数据 defLastHours = 2 * 24 // 缺省是两天内的订单 - orderMixTimeImmediatelyArrive = 8 - orderMixTimeDelayArrive = 5 + orderSubTimeImmediatelyArrive = 8 + orderSubTimeDelayArrive = 5 ) type tWaybillExt struct { @@ -939,6 +939,7 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in } if len(dateVendorList) > 0 { var missingOrderList []*tOrderVendorPair + var updateOrderStatusList []*tOrderVendorPair db := dao.GetDB() vendorStoreIDMap := make(map[int]string) if storeID > 0 { @@ -995,12 +996,12 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in } else { if goodsOrder.Status != model.OrderStatusFinished && goodsOrder.Status != model.OrderStatusCanceled { if goodsOrder.BusinessType == model.BusinessTypeImmediate { - if time.Now().Sub(goodsOrder.CreatedAt).Hours() >= orderMixTimeImmediatelyArrive { - missingOrderList = append(missingOrderList, pair) + if time.Now().Sub(goodsOrder.CreatedAt).Hours() >= orderSubTimeImmediatelyArrive { + updateOrderStatusList = append(updateOrderStatusList, pair) } } else { - if time.Now().Sub(goodsOrder.ExpectedDeliveredTime).Hours() >= orderMixTimeDelayArrive { - missingOrderList = append(missingOrderList, pair) + if time.Now().Sub(goodsOrder.ExpectedDeliveredTime).Hours() >= orderSubTimeDelayArrive { + updateOrderStatusList = append(updateOrderStatusList, pair) } } } @@ -1013,9 +1014,6 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in if handler := partner.GetPurchaseOrderHandlerFromVendorID(pair.VendorID); handler != nil { order, err2 := handler.GetOrder(pair.VendorOrgCode, pair.VendorOrderID) if err = err2; err == nil { - if order.Status == model.OrderStatusCanceled || order.Status == model.OrderStatusFinished { - err = c.UpdateOrderFields(order, []string{"Status"}) - } isDuplicated, err2 := c.SaveOrder(order, false, dao.GetDB()) if err2 == nil && !isDuplicated { retVal = []int{1} @@ -1026,9 +1024,25 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in }, missingOrderList) tasksch.HandleTask(task2, task, true).Run() result, err = task2.GetResult(0) + case 2: + task3 := tasksch.NewParallelTask("AmendMissingOrders UpdateOrders", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + pair := batchItemList[0].(*tOrderVendorPair) + if handler := partner.GetPurchaseOrderHandlerFromVendorID(pair.VendorID); handler != nil { + order, err2 := handler.GetOrder(pair.VendorOrgCode, pair.VendorOrderID) + if err = err2; err == nil { + if order.Status == model.OrderStatusCanceled || order.Status == model.OrderStatusFinished { + err = c.UpdateOrderFields(order, []string{"Status"}) + } + } + } + return retVal, err + }, updateOrderStatusList) + tasksch.HandleTask(task3, task, true).Run() + _, err = task3.GetResult(0) } return result, err - }, 2) + }, 3) tasksch.HandleTask(task, nil, true).Run() if !isAsync { result, err2 := task.GetResult(0) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 7aa862aac..2bcea66ae 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -871,10 +871,10 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf return 0, err } - if err = OnUpdateThing(ctx, db, nil, int64(v.ID), model.ThingTypeSku); err != nil { - dao.Rollback(db) - return 0, err - } + // if err = OnUpdateThing(ctx, db, nil, int64(v.ID), model.ThingTypeSku); err != nil { + // dao.Rollback(db) + // return 0, err + // } } } skuIDs, err2 := dao.GetSkuIDByNames(db, []int{nameID}) @@ -1355,23 +1355,28 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro task := tasksch.NewParallelTask("批量设置商品前缀", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { step := batchItemList[0].(int) + now := utils.Time2Date(time.Now()) 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, - } + payload := map[string]interface{}{ + "exPrefix": exPrefix, + "exPrefixBegin": fromTimeP, + "exPrefixEnd": toTimeP, + } + if now.Sub(toTimeP) <= 0 && now.Sub(fromTimeP) >= 0 { + _, err = UpdateSkuName(ctx, nameID, payload) + } else if now.Sub(fromTimeP) > 0 && now.Sub(toTimeP) > 0 { + payload["exPrefixBegin"] = nil + payload["exPrefixEnd"] = nil _, err = UpdateSkuName(ctx, nameID, payload) } else { skuName := &model.SkuName{ ExPrefix: exPrefix, - ExPrefixBegin: fromTimeP, - ExPrefixEnd: toTimeP, + ExPrefixBegin: &fromTimeP, + ExPrefixEnd: &toTimeP, } skuName.ID = nameID skuName.LastOperator = ctx.GetLoginID() @@ -1391,7 +1396,7 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro 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)) { + if (now.Sub(toTimeP) <= 0 && now.Sub(fromTimeP) >= 0) || (now.Sub(fromTimeP) > 0 && now.Sub(toTimeP) > 0) { var skuIDs []int skuList, err2 := dao.GetSkus(db, nil, nameIDs, nil, nil) if err = err2; err == nil { @@ -1399,7 +1404,7 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro 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) + CurVendorSync.SyncStoresSkus2(ctx, db, partner.GetSingleStoreVendorIDs(), nil, false, skuIDs, nil, 0, true, true) } } } @@ -1416,12 +1421,17 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro return hint, err } -func SetSingleStoreSkuSyncModifyStauts(db *dao.DaoDB, vendorIDs []int) (err error) { +func SetSingleStoreSkuSyncModifyStatus(db *dao.DaoDB, vendorIDs []int) (err error) { _, err = dao.UpdateStoreSkuBindSyncStatusForExPrefix(db, vendorIDs) return err } -func SetMultiStoreSkuSyncModifyStauts(db *dao.DaoDB, vendorIDs []int) (err error) { +func SetMultiStoreSkuSyncModifyStatus(db *dao.DaoDB, vendorIDs []int) (err error) { _, err = dao.UpdateSkuSyncStatusForExPrefix(db, vendorIDs) return err } + +func DeleteSkuNameExPrefixOverdue(db *dao.DaoDB) (err error) { + _, err = dao.DeleteSkuNameExPrefixOverdue(db) + return err +} diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index b8c193368..6183b47ad 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -18,6 +18,7 @@ import ( "git.rosy.net.cn/jx-callback/business/jxutils/excel" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" "git.rosy.net.cn/jx-callback/business/partner/purchase/jd" + "git.rosy.net.cn/jx-callback/globals/api/apimanager" "git.rosy.net.cn/jx-callback/business/partner" @@ -42,6 +43,13 @@ const ( CopyStoreSkuModeUpdatePrice = "updatePrice" // 增量复制价格 ) +//通用写入Excel +type ExcelParam struct { + DataList interface{} + SheetName string + TitleList []string +} + // UpdateStoreSku用,API调用时 type StoreSkuBindSkuInfo struct { SkuID int `json:"skuID"` @@ -117,6 +125,15 @@ type SheetParam struct { SkuRow int } +type DataVendorStoreSkuPrice struct { + StoreID int `json:"门店ID"` + StoreName string `json:"门店名"` + SkuID int `json:"商品ID"` + SkuNameID int `json:"商品NameID"` + SkuName string `json:"商品名"` + VendorPrice int64 `json:"平台价"` +} + type DataSuccess struct { NameID int `json:"商品NameID"` Name string `json:"商品名称"` @@ -151,7 +168,15 @@ var ( "18180948107": 1, // 徐 // "13684045763": 1, // 周 } - dataLock DataLock + dataLock DataLock + titleListVendorStoreSkuPrice = []string{ + "门店ID", + "门店名", + "商品ID", + "商品NameID", + "商品名", + "平台价", + } titleListSuccess = []string{ "商品NameID", "商品名称", @@ -2484,3 +2509,129 @@ func IsChineseChar(str string) bool { func GetStoreCategories(ctx *jxcontext.Context, storeID, parentID int) (catList []*model.SkuCategory, err error) { return dao.GetStoreSkuCategories(dao.GetDB(), storeID, parentID) } + +func GetVendorStoreSkuPrice(ctx *jxcontext.Context, vendorIDs []int, skuID int, isAsync, isContinueWhenError bool) (hint string, err error) { + var ( + storeSkuListJD []DataVendorStoreSkuPrice + storeSkuListMT []DataVendorStoreSkuPrice + storeSkuListEB []DataVendorStoreSkuPrice + excelParamList []ExcelParam + ) + taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + switch step { + case 0: + for _, v := range vendorIDs { + vendorID := v + handler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformStoreSkuHandler) + handlerStore := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IStoreHandler) + for _, v := range apimanager.CurAPIManager.GetAppOrgCodeList(vendorID) { + vendorStoreIDs, err2 := handlerStore.GetAllStoresVendorID(ctx, v) + err = err2 + task := tasksch.NewParallelTask("获取各平台所有门店某商品价格", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + vendorStoreID := batchItemList[0].(string) + var inStoreSkuList []*partner.StoreSkuInfo + var storeDetail *dao.StoreDetail + inStoreSku := &partner.StoreSkuInfo{ + SkuID: skuID, + } + inStoreSkuList = append(inStoreSkuList, inStoreSku) + db := dao.GetDB() + storeDetail, err = dao.GetStoreDetailByVendorStoreID(db, vendorStoreID, vendorID) + if err != nil { + return retVal, err + } + outStoreSkuList, err := handler.GetStoreSkusBareInfo(ctx, v, task, 0, vendorStoreID, inStoreSkuList) + if err != nil { + return retVal, err + } + if len(outStoreSkuList) > 0 { + if storeDetail != nil { + skuNameList, err := dao.GetSkus(db, []int{outStoreSkuList[0].SkuID}, nil, nil, nil) + if err != nil { + return retVal, err + } + if len(skuNameList) > 0 { + data := DataVendorStoreSkuPrice{ + StoreID: storeDetail.ID, + StoreName: storeDetail.Name, + SkuID: outStoreSkuList[0].SkuID, + SkuNameID: outStoreSkuList[0].NameID, + SkuName: skuNameList[0].Name, + VendorPrice: outStoreSkuList[0].VendorPrice, + } + retVal = []DataVendorStoreSkuPrice{data} + } + } + } + return retVal, err + }, vendorStoreIDs) + tasksch.HandleTask(task, nil, true).Run() + storeSkuList, _ := task.GetResult(0) + for _, v := range storeSkuList { + if vendorID == model.VendorIDJD { + storeSkuListJD = append(storeSkuListJD, v.(DataVendorStoreSkuPrice)) + } + if vendorID == model.VendorIDEBAI { + storeSkuListEB = append(storeSkuListEB, v.(DataVendorStoreSkuPrice)) + } + if vendorID == model.VendorIDMTWM { + storeSkuListMT = append(storeSkuListMT, v.(DataVendorStoreSkuPrice)) + } + } + } + } + excelParam1 := ExcelParam{ + DataList: storeSkuListJD, + TitleList: titleListVendorStoreSkuPrice, + SheetName: "京东平台", + } + excelParam2 := ExcelParam{ + DataList: storeSkuListEB, + TitleList: titleListVendorStoreSkuPrice, + SheetName: "饿百平台", + } + excelParam3 := ExcelParam{ + DataList: storeSkuListMT, + TitleList: titleListVendorStoreSkuPrice, + SheetName: "美团平台", + } + excelParamList = append(excelParamList, excelParam1, excelParam2, excelParam3) + case 1: + WriteToExcelNormal(task, "各平台"+utils.Int2Str(skuID)+"商品所有门店价格", excelParamList) + } + 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 WriteToExcelNormal(task *tasksch.SeqTask, fileName string, excelParam []ExcelParam) (err error) { + var sheetList []*excel.Obj2ExcelSheetConfig + for _, v := range excelParam { + if v.DataList != nil { + excelConf := &excel.Obj2ExcelSheetConfig{ + Title: v.SheetName, + Data: v.DataList, + CaptionList: v.TitleList, + } + sheetList = append(sheetList, excelConf) + } + } + downloadURL, fileNameResult, err := jxutils.UploadExeclAndPushMsg(sheetList, fileName) + if err != nil { + baseapi.SugarLogger.Errorf("WriteToExcel:upload %s failed error:%v", fileNameResult, err) + } else { + noticeMsg := fmt.Sprintf("[详情点我]path=%s \n", downloadURL) + task.SetNoticeMsg(noticeMsg) + baseapi.SugarLogger.Debugf("WriteToExcel:upload %s success, downloadURL:%s", fileNameResult, downloadURL) + } + return err +} diff --git a/business/jxstore/cms/store_sku_check.go b/business/jxstore/cms/store_sku_check.go index edf400ef9..a8c0e8efe 100644 --- a/business/jxstore/cms/store_sku_check.go +++ b/business/jxstore/cms/store_sku_check.go @@ -340,10 +340,10 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin //多规格商品不用比较数量单位 if jxSkuInfo.IsSpu == 0 { //jxSkuDetailName : 前缀 ([荐]) + 分类名(xxx水饺) + 数量单位(约..g/份) + 注释 (补充..) - jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, jxSkuInfo.SkuName.Unit, jxSkuInfo.Skus[0].SkuSpecQuality, jxSkuInfo.Skus[0].SkuSpecUnit, 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue) + jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, jxSkuInfo.SkuName.Unit, jxSkuInfo.Skus[0].SkuSpecQuality, jxSkuInfo.Skus[0].SkuSpecUnit, 0, "", nil, nil) } else { //jxSkuDetailName : 前缀 ([荐]) + 分类名(xxx水饺) + 数量单位(约..g/份) + 注释 (补充..) - jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, "", jxSkuInfo.Skus[0].SkuSpecQuality, "", 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue) + jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, "", jxSkuInfo.Skus[0].SkuSpecQuality, "", 0, "", nil, nil) } //jxSkuSaleStatus : 商品状态 ,skustatus 优先级高于 StoreSkuStatus @@ -462,9 +462,9 @@ func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool var jxSkuDetailName string //多规格商品不用比较数量单位 if jxSkuInfo.IsSpu == 0 { - jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, jxSkuInfo.Unit, jxSkuInfo.SpecQuality, jxSkuInfo.SpecUnit, 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue) + jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, jxSkuInfo.Unit, jxSkuInfo.SpecQuality, jxSkuInfo.SpecUnit, 0, "", nil, nil) } else { - jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, "", jxSkuInfo.SpecQuality, "", 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue) + jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, "", jxSkuInfo.SpecQuality, "", 0, "", nil, nil) } vendorSkuInfoMap := filterVendorSkuInfoMap[skuid] diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index fa1f911ff..e94a43141 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -384,7 +384,6 @@ 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) diff --git a/business/jxstore/cms/sync2.go b/business/jxstore/cms/sync2.go index 0d1bab9d1..e18979671 100644 --- a/business/jxstore/cms/sync2.go +++ b/business/jxstore/cms/sync2.go @@ -131,7 +131,6 @@ 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/misc/misc.go b/business/jxstore/misc/misc.go index 6fa55f25e..9f599670c 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -165,13 +165,20 @@ func syncStoreSku() { if (time.Now().Unix()/24*3600)%10 == 0 { syncFlag |= model.SyncFlagSaleMask } + db := dao.GetDB() task := tasksch.NewParallelTask("同步京西与平台数据", nil, jxcontext.AdminCtx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { step := batchItemList[0].(int) errList := errlist.New() switch step { case 0: - _, err = cms.CurVendorSync.LoopMultiStoresVendors(jxcontext.AdminCtx, dao.GetDB(), "同步多门店平台商品库", false, true, + //清除skuname中额外前缀过期的时间 + err = cms.DeleteSkuNameExPrefixOverdue(db) + //为sku和storeSkuBind打上要更新商品额外前缀的标记 + err = cms.SetMultiStoreSkuSyncModifyStatus(db, partner.GetMultiStoreVendorIDs()) + err = cms.SetSingleStoreSkuSyncModifyStatus(db, partner.GetSingleStoreVendorIDs()) + case 1: + _, err = cms.CurVendorSync.LoopMultiStoresVendors(jxcontext.AdminCtx, db, "同步多门店平台商品库", false, true, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { vendorInfo := batchItemList[0].(*cms.MultiStoreVendorInfo) _, err = cms.FullSyncVendorStuff(jxcontext.AdminCtx, task, vendorInfo.VendorID, vendorInfo.OrgCode, false, true) @@ -180,20 +187,20 @@ func syncStoreSku() { errList.AddErr(err) // cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, dao.GetDB(), partner.GetMultiStoreVendorIDs(), nil, false, nil, []int{27379}, syncFlag, true, true) - _, err = cms.CurVendorSync.FullSyncStoresSkus(jxcontext.AdminCtx, dao.GetDB(), partner.GetMultiStoreVendorIDs(), nil, false, []int{27379}, true, true) + _, err = cms.CurVendorSync.FullSyncStoresSkus(jxcontext.AdminCtx, db, partner.GetMultiStoreVendorIDs(), nil, false, []int{27379}, true, true) errList.AddErr(err) - case 1: + case 2: _, err = cms.CurVendorSync.AmendAndPruneStoreStuff(jxcontext.AdminCtx, partner.GetSingleStoreVendorIDs(), nil, false, true, cms.AmendPruneAll, false) errList.AddErr(err) SaveImportantTaskID(TaskNameSyncStoreSku, SpecialTaskID) - taskID, err2 := cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, dao.GetDB(), partner.GetSingleStoreVendorIDs(), nil, false, nil, nil, syncFlag, true, true) + taskID, err2 := cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, db, partner.GetSingleStoreVendorIDs(), nil, false, nil, nil, syncFlag, true, true) errList.AddErr(err2) SaveImportantTaskID(TaskNameSyncStoreSku, taskID) } err = errList.GetErrListAsOne() return retVal, err - }, []int{0, 1}) + }, []int{0, 1, 2}) tasksch.HandleTask(task, nil, true).Run() } diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index d8829b563..fbe15296e 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -1451,7 +1451,7 @@ func BuildSkuFromEbaiStore(ctx *jxcontext.Context, baiduShopID int64, isAsync, i } price := sku.LinkID sku.LinkID = 0 - skuName := jxutils.ComposeSkuName(skuNameExt.Prefix, skuNameExt.Name, sku.Comment, skuNameExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount,"",utils.ZeroTimeValue,utils.ZeroTimeValue) + skuName := jxutils.ComposeSkuName(skuNameExt.Prefix, skuNameExt.Name, sku.Comment, skuNameExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount, "", nil, nil) fixedStatus := 1 if sku.Status != model.SkuStatusNormal { fixedStatus = 2 diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index 0fb77f2f0..6e31cd7d3 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -327,9 +327,9 @@ func FloatWeight2Int(weight float32) int { return int(math.Round(float64(weight * 1000))) } -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().After(exPrefixBegin) && time.Now().Before(exPrefixEnd) { +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 != "" && exPrefixBegin != nil && exPrefixEnd != nil { + if time.Now().After(*exPrefixBegin) && time.Now().Before(*exPrefixEnd) { skuName = exPrefix } } @@ -353,12 +353,12 @@ 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) { +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 != "" && exPrefixBegin != nil && exPrefixEnd != nil { + if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixBegin) >= 0 && utils.Time2Date(time.Now()).Sub(*exPrefixEnd) < 0 { skuName = exPrefix } - if time.Now().Add(6 * time.Hour).After(exPrefixEnd) { + if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixEnd) >= 0 { skuName = "" } } diff --git a/business/model/act.go b/business/model/act.go index fe20554e4..5ea7c0125 100644 --- a/business/model/act.go +++ b/business/model/act.go @@ -201,8 +201,8 @@ type ActStoreSku2 struct { Prefix string `json:"-"` ExPrefix string - ExPrefixBegin time.Time - ExPrefixEnd time.Time + ExPrefixBegin *time.Time + ExPrefixEnd *time.Time SkuNameName string `orm:"column(sku_name_name)" json:"-"` Unit string `orm:"size(8)" json:"-"` SpecQuality float32 `json:"-"` diff --git a/business/model/dao/report.go b/business/model/dao/report.go index 96edf6a1e..81432d287 100644 --- a/business/model/dao/report.go +++ b/business/model/dao/report.go @@ -278,7 +278,7 @@ func GetPriceReferSnapshot(db *DaoDB, cityCodes, skuIDs []int, snapDate time.Tim err = err2 if len(skuList) > 0 { skuAndName := skuList[0] - jxSkuDetailName := jxutils.ComposeSkuName(skuAndName.Prefix, skuAndName.Name, skuAndName.Comment, skuAndName.Unit, skuAndName.SpecQuality, skuAndName.SpecUnit, 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue) + jxSkuDetailName := jxutils.ComposeSkuName(skuAndName.Prefix, skuAndName.Name, skuAndName.Comment, skuAndName.Unit, skuAndName.SpecQuality, skuAndName.SpecUnit, 0, "", nil, nil) v.SkuName = jxSkuDetailName } } diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index c1b1b299b..142a91368 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -58,8 +58,8 @@ type StoreSkuSyncInfo struct { // sku_name Prefix string ExPrefix string - ExPrefixBegin time.Time - ExPrefixEnd time.Time + ExPrefixBegin *time.Time + ExPrefixEnd *time.Time // NameID int `orm:"column(name_id)"` VendorNameID string `orm:"column(vendor_name_id)"` // 暂时无用 Name string @@ -918,7 +918,7 @@ func UpdateStoreSkuBindSyncStatusForExPrefix(db *DaoDB, vendorIDs []int) (num in if len(vendorIDs) > 0 { for _, v := range vendorIDs { fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[v]) - sql += ` %s_sync_status = ?,` + sql += ` %s_sync_status = %s_sync_status | ?,` fmtParams = append(fmtParams, fieldPrefix) sqlParams = append(sqlParams, model.SyncFlagModifiedMask) } @@ -927,13 +927,12 @@ func UpdateStoreSkuBindSyncStatusForExPrefix(db *DaoDB, vendorIDs []int) (num in } sql = sql[0:strings.LastIndex(sql, ",")] sql = fmt.Sprintf(sql, fmtParams...) - sql += ` WHERE a.status = ? - AND a.deleted_at = ? + sql += ` WHERE 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')) + AND (c.ex_prefix_begin = DATE_FORMAT(DATE_ADD(NOW(),INTERVAL '6' HOUR),'%Y-%m-%d 00:00:00') + OR c.ex_prefix_end = DATE_FORMAT(NOW(),'%Y-%m-%d 00:00:00')) ` - sqlParams = append(sqlParams, model.StoreSkuBindStatusNormal, utils.DefaultTimeValue) + sqlParams = append(sqlParams, utils.DefaultTimeValue) return ExecuteSQL(db, sql, sqlParams...) } @@ -950,7 +949,7 @@ func UpdateSkuSyncStatusForExPrefix(db *DaoDB, vendorIDs []int) (num int64, err if len(vendorIDs) > 0 { for _, v := range vendorIDs { fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[v]) - sql += ` b.%s_sync_status = ?,` + sql += ` b.%s_sync_status = b.%s_sync_status | ?,` fmtParams = append(fmtParams, fieldPrefix) sqlParams = append(sqlParams, model.SyncFlagModifiedMask) } @@ -961,13 +960,24 @@ func UpdateSkuSyncStatusForExPrefix(db *DaoDB, vendorIDs []int) (num int64, err 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')) + AND (c.ex_prefix_begin = DATE_FORMAT(DATE_ADD(NOW(),INTERVAL '6' HOUR),'%Y-%m-%d 00:00:00') + OR c.ex_prefix_end = DATE_FORMAT(NOW(),'%Y-%m-%d 00:00:00')) ` sqlParams = append(sqlParams, utils.DefaultTimeValue) return ExecuteSQL(db, sql, sqlParams...) } +func DeleteSkuNameExPrefixOverdue(db *DaoDB) (num int64, err error) { + sql := ` + UPDATE sku_name + SET ex_prefix_begin = null,ex_prefix_end = null + WHERE deleted_at = ? + AND DATE_FORMAT(DATE_ADD(NOW(),INTERVAL '6' HOUR),'%Y-%m-%d 00:00:00') >= ex_prefix_end + ` + sqlParams := []interface{}{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 diff --git a/business/model/sku.go b/business/model/sku.go index 80bc10a82..dd99174e2 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -170,10 +170,10 @@ type SkuName struct { Prefix string `orm:"size(255)" json:"prefix"` Name string `orm:"size(255);index" json:"name"` - ExPrefix string `orm:"size(255)" json:"exPrefix"` + ExPrefix string `orm:"size(255);index" json:"exPrefix"` - ExPrefixBegin time.Time `orm:"type(datetime);null" json:"exPrefixBegin"` - ExPrefixEnd time.Time `orm:"type(datetime);null" json:"exPrefixEnd"` + ExPrefixBegin *time.Time `orm:"null" json:"exPrefixBegin"` + ExPrefixEnd *time.Time `orm:"null" json:"exPrefixEnd"` BrandID int `orm:"column(brand_id);default(0)" json:"brandID"` // todo,此属性暂时没有使用,且有问题,应该是不同平台都有一个brandid CategoryID int `orm:"column(category_id);index" json:"categoryID"` // 标准类别 @@ -209,6 +209,12 @@ func (*SkuName) TableUnique() [][]string { } } +func (*SkuName) TableIndex() [][]string { + return [][]string{ + []string{"ExPrefix", "ExPrefixBegin", "ExPrefixEnd"}, + } +} + type Sku struct { ModelIDCULD @@ -234,8 +240,8 @@ type SkuAndName struct { Prefix string IsSpu int ExPrefix string - ExPrefixBegin time.Time - ExPrefixEnd time.Time + ExPrefixBegin *time.Time + ExPrefixEnd *time.Time } func (*Sku) TableUnique() [][]string { diff --git a/business/userstore/food_recipe.go b/business/userstore/food_recipe.go index c6f1fd335..018cc06e6 100644 --- a/business/userstore/food_recipe.go +++ b/business/userstore/food_recipe.go @@ -246,7 +246,7 @@ func GetRecipeDetail(ctx *jxcontext.Context, recipeID int) (recipeDetail *FoodRe } choiceMap := make(map[int8][]*dao.FoodRecipeItemChoiceExt) for _, v := range itemChoiceList { - v.SkuName = jxutils.ComposeSkuName(v.Prefix, v.SkuNameName, v.Comment, v.Unit, v.SpecQuality, v.SpecUnit, 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue) + v.SkuName = jxutils.ComposeSkuName(v.Prefix, v.SkuNameName, v.Comment, v.Unit, v.SpecQuality, v.SpecUnit, 0, "", nil, nil) choiceMap[v.Index] = append(choiceMap[v.Index], v) } diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index c345591aa..b2d5990fe 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -399,8 +399,8 @@ func (c *SkuController) GetJdUpcCodeByName() { // @Param token header string true "认证token" // @Param nameIDs formData string true "商品nameIDs" // @Param exPrefix formData string true "商品额外前缀" -// @Param fromTime formData string true "生效开始时间,格式 2006-01-01 00:00:00" -// @Param toTime formData string true "生效结束时间,格式 2006-01-01 00:00:00" +// @Param fromDate formData string true "生效开始时间,格式 2006-01-01 " +// @Param toDate formData string true "生效结束时间,格式 2006-01-01 " // @Param isAsync formData bool false "是否异步" // @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" // @Success 200 {object} controllers.CallResult diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index 71fe04087..f99bdacd7 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -537,3 +537,23 @@ func (c *StoreSkuController) GetStoreCategories() { return retVal, "", err }) } + +// @Title 获取各平台所有门店某商品的价格 +// @Description 获取各平台所有门店某商品的价格 +// @Param token header string false "认证token" +// @Param skuID formData int true "商品ID" +// @Param vendorIDs formData string true "厂商ID列表" +// @Param isAsync formData bool true "是否异步,缺省是同步" +// @Param isContinueWhenError formData bool true "单个同步失败是否继续,缺省false" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /GetVendorStoreSkuPrice [post] +func (c *StoreSkuController) GetVendorStoreSkuPrice() { + var vendorIDList []int + c.callGetVendorStoreSkuPrice(func(params *tStoreSkuGetVendorStoreSkuPriceParams) (retVal interface{}, errCode string, err error) { + if jxutils.Strings2Objs(params.VendorIDs, &vendorIDList); err == nil { + retVal, err = cms.GetVendorStoreSkuPrice(params.Ctx, vendorIDList, params.SkuID, params.IsAsync, params.IsContinueWhenError) + } + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 23c9bd731..3561948ae 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1665,6 +1665,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"], + beego.ControllerComments{ + Method: "GetVendorStoreSkuPrice", + Router: `/GetVendorStoreSkuPrice`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"], beego.ControllerComments{ Method: "GetVendorStoreSkusInfo", From 7f88bad41336540832d4c3621563f5cec846642f 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 18:43:36 +0800 Subject: [PATCH 10/22] =?UTF-8?q?=E5=95=86=E5=93=81=E5=89=8D=E7=BC=80?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controllers/cms_sku.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index b2d5990fe..421308aa4 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -410,7 +410,7 @@ func (c *SkuController) UpdateSkuNamesExPrefix() { c.callUpdateSkuNamesExPrefix(func(params *tSkuUpdateSkuNamesExPrefixParams) (retVal interface{}, errCode string, err error) { var skuIDList []int if err = jxutils.Strings2Objs(params.NameIDs, &skuIDList); err == nil { - retVal, err = cms.UpdateSkuNamesExPrefix(params.Ctx, skuIDList, params.ExPrefix, params.FromTime, params.ToTime, params.IsAsync, params.IsContinueWhenError) + retVal, err = cms.UpdateSkuNamesExPrefix(params.Ctx, skuIDList, params.ExPrefix, params.FromDate, params.ToDate, params.IsAsync, params.IsContinueWhenError) } return retVal, "", err }) From 5438e900215ba5b1a9979d09d2e4546dde616d29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 20 Dec 2019 08:39:23 +0800 Subject: [PATCH 11/22] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=9F=90=E5=95=86?= =?UTF-8?q?=E5=93=81=E5=90=84=E5=B9=B3=E5=8F=B0=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 84 ++++++++++++++++++------------- 1 file changed, 49 insertions(+), 35 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 52a17219e..9242a7dd2 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -126,12 +126,11 @@ type SheetParam struct { } type DataVendorStoreSkuPrice struct { - StoreID int `json:"门店ID"` + StoreID string `json:"门店ID"` StoreName string `json:"门店名"` SkuID int `json:"商品ID"` - SkuNameID int `json:"商品NameID"` SkuName string `json:"商品名"` - VendorPrice int64 `json:"平台价"` + VendorPrice string `json:"平台价"` } type DataSuccess struct { @@ -173,7 +172,6 @@ var ( "门店ID", "门店名", "商品ID", - "商品NameID", "商品名", "平台价", } @@ -2527,47 +2525,63 @@ func GetVendorStoreSkuPrice(ctx *jxcontext.Context, vendorIDs []int, skuID int, for _, v := range apimanager.CurAPIManager.GetAppOrgCodeList(vendorID) { vendorStoreIDs, err2 := handlerStore.GetAllStoresVendorID(ctx, v) err = err2 - task := tasksch.NewParallelTask("获取各平台所有门店某商品价格", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - vendorStoreID := batchItemList[0].(string) - var inStoreSkuList []*partner.StoreSkuInfo - var storeDetail *dao.StoreDetail - inStoreSku := &partner.StoreSkuInfo{ - SkuID: skuID, - } - inStoreSkuList = append(inStoreSkuList, inStoreSku) - db := dao.GetDB() - storeDetail, err = dao.GetStoreDetailByVendorStoreID(db, vendorStoreID, vendorID) + taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + vendorStoreID := batchItemList[0].(string) + var inStoreSkuList []*partner.StoreSkuInfo + var storeDetail *dao.StoreDetail + inStoreSku := &partner.StoreSkuInfo{ + SkuID: skuID, + } + inStoreSkuList = append(inStoreSkuList, inStoreSku) + if partner.IsMultiStore(vendorID) { + multiHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler) + storeDetail, err = multiHandler.ReadStore(ctx, "", vendorStoreID) if err != nil { return retVal, err } - outStoreSkuList, err := handler.GetStoreSkusBareInfo(ctx, v, task, 0, vendorStoreID, inStoreSkuList) + } else { + singleHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreHandler) + storeDetail, err = singleHandler.ReadStore(ctx, "", vendorStoreID) if err != nil { return retVal, err } - if len(outStoreSkuList) > 0 { - if storeDetail != nil { - skuNameList, err := dao.GetSkus(db, []int{outStoreSkuList[0].SkuID}, nil, nil, nil) - if err != nil { - return retVal, err + } + outStoreSkuList, err := handler.GetStoreSkusBareInfo(ctx, v, task, 0, vendorStoreID, inStoreSkuList) + if err != nil { + return retVal, err + } + skuNameList, err := dao.GetSkus(dao.GetDB(), []int{skuID}, nil, nil, nil) + if err != nil { + return retVal, err + } + if storeDetail != nil { + if len(skuNameList) > 0 { + if len(outStoreSkuList) > 0 { + data := DataVendorStoreSkuPrice{ + StoreID: vendorStoreID, + StoreName: storeDetail.Name, + SkuID: skuID, + SkuName: skuNameList[0].Name, + VendorPrice: utils.Float64ToStr(utils.Str2Float64(utils.Int64ToStr(outStoreSkuList[0].VendorPrice)) / 100), } - if len(skuNameList) > 0 { - data := DataVendorStoreSkuPrice{ - StoreID: storeDetail.ID, - StoreName: storeDetail.Name, - SkuID: outStoreSkuList[0].SkuID, - SkuNameID: outStoreSkuList[0].NameID, - SkuName: skuNameList[0].Name, - VendorPrice: outStoreSkuList[0].VendorPrice, - } - retVal = []DataVendorStoreSkuPrice{data} + retVal = []DataVendorStoreSkuPrice{data} + } else { + data := DataVendorStoreSkuPrice{ + StoreID: vendorStoreID, + StoreName: storeDetail.Name, + SkuID: skuID, + SkuName: skuNameList[0].Name, + VendorPrice: "", } + retVal = []DataVendorStoreSkuPrice{data} } } - return retVal, err - }, vendorStoreIDs) - tasksch.HandleTask(task, nil, true).Run() - storeSkuList, _ := task.GetResult(0) + } + return retVal, err + } + taskParallel := tasksch.NewParallelTask("获取各平台所有门店某商品价格", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, taskFunc, vendorStoreIDs) + tasksch.HandleTask(taskParallel, task, true).Run() + storeSkuList, _ := taskParallel.GetResult(0) for _, v := range storeSkuList { if vendorID == model.VendorIDJD { storeSkuListJD = append(storeSkuListJD, v.(DataVendorStoreSkuPrice)) From f5db2daee2612e6222fae38857e6ccb71bc83034 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 20 Dec 2019 08:57:52 +0800 Subject: [PATCH 12/22] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=95=86=E5=93=81?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sku.go | 8 ++++---- business/jxstore/cms/store_sku.go | 12 ------------ 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 2bcea66ae..cbd40eae3 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -871,10 +871,10 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf return 0, err } - // if err = OnUpdateThing(ctx, db, nil, int64(v.ID), model.ThingTypeSku); err != nil { - // dao.Rollback(db) - // return 0, err - // } + if err = OnUpdateThing(ctx, db, nil, int64(v.ID), model.ThingTypeSku); err != nil { + dao.Rollback(db) + return 0, err + } } } skuIDs, err2 := dao.GetSkuIDByNames(db, []int{nameID}) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 9242a7dd2..0db981776 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2536,24 +2536,12 @@ func GetVendorStoreSkuPrice(ctx *jxcontext.Context, vendorIDs []int, skuID int, if partner.IsMultiStore(vendorID) { multiHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler) storeDetail, err = multiHandler.ReadStore(ctx, "", vendorStoreID) - if err != nil { - return retVal, err - } } else { singleHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreHandler) storeDetail, err = singleHandler.ReadStore(ctx, "", vendorStoreID) - if err != nil { - return retVal, err - } } outStoreSkuList, err := handler.GetStoreSkusBareInfo(ctx, v, task, 0, vendorStoreID, inStoreSkuList) - if err != nil { - return retVal, err - } skuNameList, err := dao.GetSkus(dao.GetDB(), []int{skuID}, nil, nil, nil) - if err != nil { - return retVal, err - } if storeDetail != nil { if len(skuNameList) > 0 { if len(outStoreSkuList) > 0 { From 0623da776bfd75b98bf0f379dbc685c728540d96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 20 Dec 2019 09:16:56 +0800 Subject: [PATCH 13/22] =?UTF-8?q?=E5=95=86=E5=93=81=E5=85=B3=E9=94=AE?= =?UTF-8?q?=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync_store_sku.go | 2 +- business/jxutils/jxutils.go | 26 -------------------------- 2 files changed, 1 insertion(+), 27 deletions(-) diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index d8ff03a69..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.ComposeSkuNameSync(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 6e31cd7d3..11bcb3442 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -328,32 +328,6 @@ 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 != "" && exPrefixBegin != nil && exPrefixEnd != nil { - if time.Now().After(*exPrefixBegin) && time.Now().Before(*exPrefixEnd) { - skuName = exPrefix - } - } - 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 ComposeSkuNameSync(prefix, name, comment, unit string, spec_quality float32, spec_unit string, maxLen int, exPrefix string, exPrefixBegin, exPrefixEnd *time.Time) (skuName string) { if exPrefix != "" && exPrefixBegin != nil && exPrefixEnd != nil { if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixBegin) >= 0 && utils.Time2Date(time.Now()).Sub(*exPrefixEnd) < 0 { skuName = exPrefix From fa6f86a01f89eb5cde1c6339e0fb1e5390d30e3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 20 Dec 2019 09:30:52 +0800 Subject: [PATCH 14/22] =?UTF-8?q?=E5=95=86=E5=93=81=E5=90=8D=E5=89=8D?= =?UTF-8?q?=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync_store_sku.go | 2 +- business/jxutils/jxutils.go | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) 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 11bcb3442..b6f18e31c 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -328,6 +328,32 @@ 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 != "" && exPrefixBegin != nil && exPrefixEnd != nil { + if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixBegin) >= 0 && utils.Time2Date(time.Now()).Sub(*exPrefixEnd) <= 0 { + skuName = exPrefix + } + } + 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 ComposeSkuNameSync(prefix, name, comment, unit string, spec_quality float32, spec_unit string, maxLen int, exPrefix string, exPrefixBegin, exPrefixEnd *time.Time) (skuName string) { if exPrefix != "" && exPrefixBegin != nil && exPrefixEnd != nil { if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixBegin) >= 0 && utils.Time2Date(time.Now()).Sub(*exPrefixEnd) < 0 { skuName = exPrefix From d1d49d464e62b4c7d341e582b462a17efe4c1ad4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 20 Dec 2019 10:00:13 +0800 Subject: [PATCH 15/22] =?UTF-8?q?=E5=95=86=E5=93=81=E5=89=8D=E7=BC=80?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- globals/refutil/refutil.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/globals/refutil/refutil.go b/globals/refutil/refutil.go index 7cf3e21c6..f4c559d0b 100644 --- a/globals/refutil/refutil.go +++ b/globals/refutil/refutil.go @@ -63,7 +63,7 @@ func FilterMapByStructObject(mapData map[string]interface{}, obj interface{}, ob valid = make(map[string]interface{}) invalid = make(map[string]interface{}) for k, v := range mapData { - if m[k] != nil && excludedMap[k] == 0 && v != nil && (!isCheckValue || !IsValueEqual(m[k], v)) { + if m[k] != nil && excludedMap[k] == 0 /*&& v != nil*/ && (!isCheckValue || !IsValueEqual(m[k], v)) { valid[k] = v m[k] = v } else { From f72257d07c60a24acd830865dcb6c5ff038ffc53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 20 Dec 2019 11:22:41 +0800 Subject: [PATCH 16/22] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E9=97=A8=E5=BA=97=E5=95=86=E5=93=81=E4=BB=B7=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 63 ++++++++++++++++++------------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 0db981776..6c534f2f1 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2527,42 +2527,51 @@ func GetVendorStoreSkuPrice(ctx *jxcontext.Context, vendorIDs []int, skuID int, err = err2 taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { vendorStoreID := batchItemList[0].(string) - var inStoreSkuList []*partner.StoreSkuInfo - var storeDetail *dao.StoreDetail - inStoreSku := &partner.StoreSkuInfo{ - SkuID: skuID, + var ( + inStoreSkuList []*partner.StoreSkuInfo + storeDetail *dao.StoreDetail + inStoreSku = &partner.StoreSkuInfo{} + ) + + skuNameList, err := dao.GetSkus(dao.GetDB(), []int{skuID}, nil, nil, nil) + if err != nil { + return retVal, err } - inStoreSkuList = append(inStoreSkuList, inStoreSku) if partner.IsMultiStore(vendorID) { multiHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler) - storeDetail, err = multiHandler.ReadStore(ctx, "", vendorStoreID) + storeDetail, err = multiHandler.ReadStore(ctx, v, vendorStoreID) + if len(skuNameList) > 0 { + inStoreSku.VendorSkuID = utils.Int64ToStr(skuNameList[0].JdID) + } } else { singleHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreHandler) - storeDetail, err = singleHandler.ReadStore(ctx, "", vendorStoreID) + storeDetail, err = singleHandler.ReadStore(ctx, v, vendorStoreID) + inStoreSku.SkuID = skuID } + inStoreSkuList = append(inStoreSkuList, inStoreSku) outStoreSkuList, err := handler.GetStoreSkusBareInfo(ctx, v, task, 0, vendorStoreID, inStoreSkuList) - skuNameList, err := dao.GetSkus(dao.GetDB(), []int{skuID}, nil, nil, nil) + if err != nil { + return retVal, err + } if storeDetail != nil { - if len(skuNameList) > 0 { - if len(outStoreSkuList) > 0 { - data := DataVendorStoreSkuPrice{ - StoreID: vendorStoreID, - StoreName: storeDetail.Name, - SkuID: skuID, - SkuName: skuNameList[0].Name, - VendorPrice: utils.Float64ToStr(utils.Str2Float64(utils.Int64ToStr(outStoreSkuList[0].VendorPrice)) / 100), - } - retVal = []DataVendorStoreSkuPrice{data} - } else { - data := DataVendorStoreSkuPrice{ - StoreID: vendorStoreID, - StoreName: storeDetail.Name, - SkuID: skuID, - SkuName: skuNameList[0].Name, - VendorPrice: "", - } - retVal = []DataVendorStoreSkuPrice{data} + if len(outStoreSkuList) > 0 { + data := DataVendorStoreSkuPrice{ + StoreID: vendorStoreID, + StoreName: storeDetail.Name, + SkuID: skuID, + SkuName: skuNameList[0].Name, + VendorPrice: utils.Float64ToStr(utils.Str2Float64(utils.Int64ToStr(outStoreSkuList[0].VendorPrice)) / 100), } + retVal = []DataVendorStoreSkuPrice{data} + } else { + data := DataVendorStoreSkuPrice{ + StoreID: vendorStoreID, + StoreName: storeDetail.Name, + SkuID: skuID, + SkuName: skuNameList[0].Name, + VendorPrice: "", + } + retVal = []DataVendorStoreSkuPrice{data} } } return retVal, err From b8f7ffea182f52278d068e05cdf7904aedd212aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 20 Dec 2019 11:40:04 +0800 Subject: [PATCH 17/22] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E9=97=A8=E5=BA=97?= =?UTF-8?q?=E5=95=86=E5=93=81=E4=BB=B7=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 37 +++++++++----------- business/partner/purchase/ebai/store_sku2.go | 4 +-- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 6c534f2f1..393dcf2da 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2551,28 +2551,23 @@ func GetVendorStoreSkuPrice(ctx *jxcontext.Context, vendorIDs []int, skuID int, inStoreSkuList = append(inStoreSkuList, inStoreSku) outStoreSkuList, err := handler.GetStoreSkusBareInfo(ctx, v, task, 0, vendorStoreID, inStoreSkuList) if err != nil { - return retVal, err - } - if storeDetail != nil { - if len(outStoreSkuList) > 0 { - data := DataVendorStoreSkuPrice{ - StoreID: vendorStoreID, - StoreName: storeDetail.Name, - SkuID: skuID, - SkuName: skuNameList[0].Name, - VendorPrice: utils.Float64ToStr(utils.Str2Float64(utils.Int64ToStr(outStoreSkuList[0].VendorPrice)) / 100), - } - retVal = []DataVendorStoreSkuPrice{data} - } else { - data := DataVendorStoreSkuPrice{ - StoreID: vendorStoreID, - StoreName: storeDetail.Name, - SkuID: skuID, - SkuName: skuNameList[0].Name, - VendorPrice: "", - } - retVal = []DataVendorStoreSkuPrice{data} + data := DataVendorStoreSkuPrice{ + StoreID: vendorStoreID, + StoreName: storeDetail.Name, + SkuID: skuID, + SkuName: skuNameList[0].Name, + VendorPrice: "", } + retVal = []DataVendorStoreSkuPrice{data} + } else { + data := DataVendorStoreSkuPrice{ + StoreID: vendorStoreID, + StoreName: storeDetail.Name, + SkuID: skuID, + SkuName: skuNameList[0].Name, + VendorPrice: utils.Float64ToStr(utils.Str2Float64(utils.Int64ToStr(outStoreSkuList[0].VendorPrice)) / 100), + } + retVal = []DataVendorStoreSkuPrice{data} } return retVal, err } diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index ec7e619d8..878550bee 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -320,7 +320,7 @@ func (p *PurchaseHandler) GetStoreSkusFullInfo(ctx *jxcontext.Context, parentTas params.SkuID = utils.Str2Int64WithDefault(storeSkuList[0].VendorSkuID, 0) } } - page1, err := api.EbaiAPI.SkuList(utils.Int2Str(storeID), params) + page1, err := api.EbaiAPI.SkuList(vendorStoreID, params) if err == nil { skuNameList = append(skuNameList, vendorSkuList2Jx(page1.List)...) if page1.Pages > 1 { @@ -334,7 +334,7 @@ func (p *PurchaseHandler) GetStoreSkusFullInfo(ctx *jxcontext.Context, parentTas PageSize: ebaiapi.MaxSkuListPageSize, Page: batchItemList[0].(int), } - pageSku, err2 := api.EbaiAPI.SkuList(utils.Int2Str(storeID), callParams) + pageSku, err2 := api.EbaiAPI.SkuList(vendorStoreID, callParams) if err2 == nil { return pageSku.List, err2 } From fc588aec6062857548c564e0ff31412b1762a278 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 20 Dec 2019 11:56:53 +0800 Subject: [PATCH 18/22] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E9=97=A8=E5=BA=97=E5=95=86=E5=93=81=E4=BB=B7=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 36 ++++++++++++++++--------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 393dcf2da..122ad6a70 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2550,24 +2550,26 @@ func GetVendorStoreSkuPrice(ctx *jxcontext.Context, vendorIDs []int, skuID int, } inStoreSkuList = append(inStoreSkuList, inStoreSku) outStoreSkuList, err := handler.GetStoreSkusBareInfo(ctx, v, task, 0, vendorStoreID, inStoreSkuList) - if err != nil { - data := DataVendorStoreSkuPrice{ - StoreID: vendorStoreID, - StoreName: storeDetail.Name, - SkuID: skuID, - SkuName: skuNameList[0].Name, - VendorPrice: "", + if storeDetail != nil { + if len(outStoreSkuList) == 0 { + data := DataVendorStoreSkuPrice{ + StoreID: vendorStoreID, + StoreName: storeDetail.Name, + SkuID: skuID, + SkuName: skuNameList[0].Name, + VendorPrice: "", + } + retVal = []DataVendorStoreSkuPrice{data} + } else { + data := DataVendorStoreSkuPrice{ + StoreID: vendorStoreID, + StoreName: storeDetail.Name, + SkuID: skuID, + SkuName: skuNameList[0].Name, + VendorPrice: utils.Float64ToStr(utils.Str2Float64(utils.Int64ToStr(outStoreSkuList[0].VendorPrice)) / 100), + } + retVal = []DataVendorStoreSkuPrice{data} } - retVal = []DataVendorStoreSkuPrice{data} - } else { - data := DataVendorStoreSkuPrice{ - StoreID: vendorStoreID, - StoreName: storeDetail.Name, - SkuID: skuID, - SkuName: skuNameList[0].Name, - VendorPrice: utils.Float64ToStr(utils.Str2Float64(utils.Int64ToStr(outStoreSkuList[0].VendorPrice)) / 100), - } - retVal = []DataVendorStoreSkuPrice{data} } return retVal, err } From 0a8a0faec4aeee26d55542c95b1d0e0b52cec0df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 20 Dec 2019 14:32:14 +0800 Subject: [PATCH 19/22] =?UTF-8?q?exprefix=E7=B4=A2=E5=BC=95=EF=BC=8Corder?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/orderman_ext.go | 18 +++++++++--------- business/jxstore/cms/sku.go | 4 ++-- business/jxstore/cms/store_sku.go | 11 +++++++++-- business/jxstore/misc/misc.go | 17 +++++------------ business/model/sku.go | 4 ++-- business/partner/purchase/ebai/store_sku2.go | 4 ++-- 6 files changed, 29 insertions(+), 29 deletions(-) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index 16907e81e..f6992174c 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -939,7 +939,7 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in } if len(dateVendorList) > 0 { var missingOrderList []*tOrderVendorPair - var updateOrderStatusList []*tOrderVendorPair + var updateOrderStatusList []*model.GoodsOrder db := dao.GetDB() vendorStoreIDMap := make(map[int]string) if storeID > 0 { @@ -994,14 +994,14 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in if goodsOrder == nil { missingOrderList = append(missingOrderList, pair) } else { - if goodsOrder.Status != model.OrderStatusFinished && goodsOrder.Status != model.OrderStatusCanceled { + if model.IsOrderFinalStatus(goodsOrder.Status) { if goodsOrder.BusinessType == model.BusinessTypeImmediate { if time.Now().Sub(goodsOrder.CreatedAt).Hours() >= orderSubTimeImmediatelyArrive { - updateOrderStatusList = append(updateOrderStatusList, pair) + updateOrderStatusList = append(updateOrderStatusList, goodsOrder) } } else { if time.Now().Sub(goodsOrder.ExpectedDeliveredTime).Hours() >= orderSubTimeDelayArrive { - updateOrderStatusList = append(updateOrderStatusList, pair) + updateOrderStatusList = append(updateOrderStatusList, goodsOrder) } } } @@ -1027,12 +1027,12 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in case 2: task3 := tasksch.NewParallelTask("AmendMissingOrders UpdateOrders", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - pair := batchItemList[0].(*tOrderVendorPair) - if handler := partner.GetPurchaseOrderHandlerFromVendorID(pair.VendorID); handler != nil { - order, err2 := handler.GetOrder(pair.VendorOrgCode, pair.VendorOrderID) + goodsOrder := batchItemList[0].(*model.GoodsOrder) + if handler := partner.GetPurchaseOrderHandlerFromVendorID(goodsOrder.VendorID); handler != nil { + status, err2 := handler.GetOrderStatus(goodsOrder.VendorOrgCode, goodsOrder.VendorOrderID) if err = err2; err == nil { - if order.Status == model.OrderStatusCanceled || order.Status == model.OrderStatusFinished { - err = c.UpdateOrderFields(order, []string{"Status"}) + if status == model.OrderStatusCanceled || status == model.OrderStatusFinished { + _, err = dao.UpdateEntity(db, goodsOrder, "Status") } } } diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index cbd40eae3..05f80c6eb 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -1344,10 +1344,10 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro db = dao.GetDB() ) if fromTime != "" { - fromTimeP = utils.Str2Time(fromTime) + fromTimeP = utils.Time2Date(utils.Str2Time(fromTime)) } if toTime != "" { - toTimeP = utils.Str2Time(toTime) + toTimeP = utils.Time2Date(utils.Str2Time(toTime)) } if toTimeP.Before(fromTimeP) { return "", fmt.Errorf("结束时间不可以小于开始时间!开始时间:[%v],结束时间:[%v]", fromTimeP, toTimeP) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 122ad6a70..c02b9ef74 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2532,8 +2532,15 @@ func GetVendorStoreSkuPrice(ctx *jxcontext.Context, vendorIDs []int, skuID int, storeDetail *dao.StoreDetail inStoreSku = &partner.StoreSkuInfo{} ) - - skuNameList, err := dao.GetSkus(dao.GetDB(), []int{skuID}, nil, nil, nil) + storeMap := &model.StoreMap{ + VendorID: vendorID, + Status: model.SkuStatusNormal, + VendorStoreID: vendorStoreID, + } + db := dao.GetDB() + dao.GetEntity(db, storeMap, "StoreID") + fmt.Println(storeMap.StoreID) + skuNameList, err := dao.GetSkus(db, []int{skuID}, nil, nil, nil) if err != nil { return retVal, err } diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index 9f599670c..6fa55f25e 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -165,20 +165,13 @@ func syncStoreSku() { if (time.Now().Unix()/24*3600)%10 == 0 { syncFlag |= model.SyncFlagSaleMask } - db := dao.GetDB() task := tasksch.NewParallelTask("同步京西与平台数据", nil, jxcontext.AdminCtx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { step := batchItemList[0].(int) errList := errlist.New() switch step { case 0: - //清除skuname中额外前缀过期的时间 - err = cms.DeleteSkuNameExPrefixOverdue(db) - //为sku和storeSkuBind打上要更新商品额外前缀的标记 - err = cms.SetMultiStoreSkuSyncModifyStatus(db, partner.GetMultiStoreVendorIDs()) - err = cms.SetSingleStoreSkuSyncModifyStatus(db, partner.GetSingleStoreVendorIDs()) - case 1: - _, err = cms.CurVendorSync.LoopMultiStoresVendors(jxcontext.AdminCtx, db, "同步多门店平台商品库", false, true, + _, err = cms.CurVendorSync.LoopMultiStoresVendors(jxcontext.AdminCtx, dao.GetDB(), "同步多门店平台商品库", false, true, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { vendorInfo := batchItemList[0].(*cms.MultiStoreVendorInfo) _, err = cms.FullSyncVendorStuff(jxcontext.AdminCtx, task, vendorInfo.VendorID, vendorInfo.OrgCode, false, true) @@ -187,20 +180,20 @@ func syncStoreSku() { errList.AddErr(err) // cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, dao.GetDB(), partner.GetMultiStoreVendorIDs(), nil, false, nil, []int{27379}, syncFlag, true, true) - _, err = cms.CurVendorSync.FullSyncStoresSkus(jxcontext.AdminCtx, db, partner.GetMultiStoreVendorIDs(), nil, false, []int{27379}, true, true) + _, err = cms.CurVendorSync.FullSyncStoresSkus(jxcontext.AdminCtx, dao.GetDB(), partner.GetMultiStoreVendorIDs(), nil, false, []int{27379}, true, true) errList.AddErr(err) - case 2: + case 1: _, err = cms.CurVendorSync.AmendAndPruneStoreStuff(jxcontext.AdminCtx, partner.GetSingleStoreVendorIDs(), nil, false, true, cms.AmendPruneAll, false) errList.AddErr(err) SaveImportantTaskID(TaskNameSyncStoreSku, SpecialTaskID) - taskID, err2 := cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, db, partner.GetSingleStoreVendorIDs(), nil, false, nil, nil, syncFlag, true, true) + taskID, err2 := cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, dao.GetDB(), partner.GetSingleStoreVendorIDs(), nil, false, nil, nil, syncFlag, true, true) errList.AddErr(err2) SaveImportantTaskID(TaskNameSyncStoreSku, taskID) } err = errList.GetErrListAsOne() return retVal, err - }, []int{0, 1, 2}) + }, []int{0, 1}) tasksch.HandleTask(task, nil, true).Run() } diff --git a/business/model/sku.go b/business/model/sku.go index dd99174e2..86af76811 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -170,7 +170,7 @@ type SkuName struct { Prefix string `orm:"size(255)" json:"prefix"` Name string `orm:"size(255);index" json:"name"` - ExPrefix string `orm:"size(255);index" json:"exPrefix"` + ExPrefix string `orm:"size(255)" json:"exPrefix"` ExPrefixBegin *time.Time `orm:"null" json:"exPrefixBegin"` ExPrefixEnd *time.Time `orm:"null" json:"exPrefixEnd"` @@ -211,7 +211,7 @@ func (*SkuName) TableUnique() [][]string { func (*SkuName) TableIndex() [][]string { return [][]string{ - []string{"ExPrefix", "ExPrefixBegin", "ExPrefixEnd"}, + []string{"ExPrefix", "ExPrefixBegin", "ExPrefixEnd", "DeletedAt"}, } } diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index 878550bee..ec7e619d8 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -320,7 +320,7 @@ func (p *PurchaseHandler) GetStoreSkusFullInfo(ctx *jxcontext.Context, parentTas params.SkuID = utils.Str2Int64WithDefault(storeSkuList[0].VendorSkuID, 0) } } - page1, err := api.EbaiAPI.SkuList(vendorStoreID, params) + page1, err := api.EbaiAPI.SkuList(utils.Int2Str(storeID), params) if err == nil { skuNameList = append(skuNameList, vendorSkuList2Jx(page1.List)...) if page1.Pages > 1 { @@ -334,7 +334,7 @@ func (p *PurchaseHandler) GetStoreSkusFullInfo(ctx *jxcontext.Context, parentTas PageSize: ebaiapi.MaxSkuListPageSize, Page: batchItemList[0].(int), } - pageSku, err2 := api.EbaiAPI.SkuList(vendorStoreID, callParams) + pageSku, err2 := api.EbaiAPI.SkuList(utils.Int2Str(storeID), callParams) if err2 == nil { return pageSku.List, err2 } From b2e9f913735d12b0a0c326041855ebf16fa60c2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 20 Dec 2019 14:40:22 +0800 Subject: [PATCH 20/22] =?UTF-8?q?=E5=95=86=E5=93=81=E5=89=8D=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxutils/jxutils.go | 37 +++++++++++++------------------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index b6f18e31c..1ee21e3ef 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -327,14 +327,9 @@ func FloatWeight2Int(weight float32) int { return int(math.Round(float64(weight * 1000))) } -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 != "" && exPrefixBegin != nil && exPrefixEnd != nil { - if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixBegin) >= 0 && utils.Time2Date(time.Now()).Sub(*exPrefixEnd) <= 0 { - skuName = exPrefix - } - } +func ComposeSkuNameOriginal(prefix, name, comment, unit string, spec_quality float32, spec_unit string, maxLen int) (skuName string) { if prefix != "" { - skuName += "[" + prefix + "]" + skuName = "[" + prefix + "]" } skuName += name if unit == "份" { @@ -353,6 +348,16 @@ func ComposeSkuName(prefix, name, comment, unit string, spec_quality float32, sp return skuName } +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 != "" && exPrefixBegin != nil && exPrefixEnd != nil { + if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixBegin) >= 0 && utils.Time2Date(time.Now()).Sub(*exPrefixEnd) <= 0 { + skuName = exPrefix + } + } + skuName += ComposeSkuNameOriginal(prefix, name, comment, unit, spec_quality, spec_unit, maxLen) + 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 != "" && exPrefixBegin != nil && exPrefixEnd != nil { if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixBegin) >= 0 && utils.Time2Date(time.Now()).Sub(*exPrefixEnd) < 0 { @@ -362,23 +367,7 @@ func ComposeSkuNameSync(prefix, name, comment, unit string, spec_quality float32 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) - } + skuName += ComposeSkuNameOriginal(prefix, name, comment, unit, spec_quality, spec_unit, maxLen) return skuName } From da2440e9717532db28c7f291be612d8eb1471dfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 20 Dec 2019 14:41:21 +0800 Subject: [PATCH 21/22] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E9=97=A8=E5=BA=97=E5=95=86=E5=93=81=E4=BB=B7=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index c02b9ef74..4abb9b8ff 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2532,14 +2532,7 @@ func GetVendorStoreSkuPrice(ctx *jxcontext.Context, vendorIDs []int, skuID int, storeDetail *dao.StoreDetail inStoreSku = &partner.StoreSkuInfo{} ) - storeMap := &model.StoreMap{ - VendorID: vendorID, - Status: model.SkuStatusNormal, - VendorStoreID: vendorStoreID, - } db := dao.GetDB() - dao.GetEntity(db, storeMap, "StoreID") - fmt.Println(storeMap.StoreID) skuNameList, err := dao.GetSkus(db, []int{skuID}, nil, nil, nil) if err != nil { return retVal, err From 480132cafec5c91a3a76a74c8af8b5b07ba516d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 20 Dec 2019 15:59:42 +0800 Subject: [PATCH 22/22] =?UTF-8?q?=E7=BB=84=E5=90=88=E5=90=8D=E5=AD=97?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/orderman_ext.go | 5 +++-- business/jxstore/cms/store_sku_check.go | 8 ++++---- business/jxstore/tempop/tempop.go | 2 +- business/model/dao/report.go | 2 +- business/userstore/food_recipe.go | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index f6992174c..675d260d9 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -994,7 +994,7 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in if goodsOrder == nil { missingOrderList = append(missingOrderList, pair) } else { - if model.IsOrderFinalStatus(goodsOrder.Status) { + if !model.IsOrderFinalStatus(goodsOrder.Status) { if goodsOrder.BusinessType == model.BusinessTypeImmediate { if time.Now().Sub(goodsOrder.CreatedAt).Hours() >= orderSubTimeImmediatelyArrive { updateOrderStatusList = append(updateOrderStatusList, goodsOrder) @@ -1031,7 +1031,8 @@ func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []in if handler := partner.GetPurchaseOrderHandlerFromVendorID(goodsOrder.VendorID); handler != nil { status, err2 := handler.GetOrderStatus(goodsOrder.VendorOrgCode, goodsOrder.VendorOrderID) if err = err2; err == nil { - if status == model.OrderStatusCanceled || status == model.OrderStatusFinished { + if model.IsOrderFinalStatus(status) { + goodsOrder.Status = status _, err = dao.UpdateEntity(db, goodsOrder, "Status") } } diff --git a/business/jxstore/cms/store_sku_check.go b/business/jxstore/cms/store_sku_check.go index a8c0e8efe..1a3153812 100644 --- a/business/jxstore/cms/store_sku_check.go +++ b/business/jxstore/cms/store_sku_check.go @@ -340,10 +340,10 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin //多规格商品不用比较数量单位 if jxSkuInfo.IsSpu == 0 { //jxSkuDetailName : 前缀 ([荐]) + 分类名(xxx水饺) + 数量单位(约..g/份) + 注释 (补充..) - jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, jxSkuInfo.SkuName.Unit, jxSkuInfo.Skus[0].SkuSpecQuality, jxSkuInfo.Skus[0].SkuSpecUnit, 0, "", nil, nil) + jxSkuDetailName = jxutils.ComposeSkuNameOriginal(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, jxSkuInfo.SkuName.Unit, jxSkuInfo.Skus[0].SkuSpecQuality, jxSkuInfo.Skus[0].SkuSpecUnit, 0) } else { //jxSkuDetailName : 前缀 ([荐]) + 分类名(xxx水饺) + 数量单位(约..g/份) + 注释 (补充..) - jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, "", jxSkuInfo.Skus[0].SkuSpecQuality, "", 0, "", nil, nil) + jxSkuDetailName = jxutils.ComposeSkuNameOriginal(jxSkuInfo.SkuName.Prefix, jxSkuInfo.SkuName.Name, jxSkuInfo.Skus[0].Comment, "", jxSkuInfo.Skus[0].SkuSpecQuality, "", 0) } //jxSkuSaleStatus : 商品状态 ,skustatus 优先级高于 StoreSkuStatus @@ -462,9 +462,9 @@ func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool var jxSkuDetailName string //多规格商品不用比较数量单位 if jxSkuInfo.IsSpu == 0 { - jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, jxSkuInfo.Unit, jxSkuInfo.SpecQuality, jxSkuInfo.SpecUnit, 0, "", nil, nil) + jxSkuDetailName = jxutils.ComposeSkuNameOriginal(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, jxSkuInfo.Unit, jxSkuInfo.SpecQuality, jxSkuInfo.SpecUnit, 0) } else { - jxSkuDetailName = jxutils.ComposeSkuName(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, "", jxSkuInfo.SpecQuality, "", 0, "", nil, nil) + jxSkuDetailName = jxutils.ComposeSkuNameOriginal(jxSkuInfo.Prefix, jxSkuInfo.Name, jxSkuInfo.Comment, "", jxSkuInfo.SpecQuality, "", 0) } vendorSkuInfoMap := filterVendorSkuInfoMap[skuid] diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index fbe15296e..8909c63bd 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -1451,7 +1451,7 @@ func BuildSkuFromEbaiStore(ctx *jxcontext.Context, baiduShopID int64, isAsync, i } price := sku.LinkID sku.LinkID = 0 - skuName := jxutils.ComposeSkuName(skuNameExt.Prefix, skuNameExt.Name, sku.Comment, skuNameExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount, "", nil, nil) + skuName := jxutils.ComposeSkuNameOriginal(skuNameExt.Prefix, skuNameExt.Name, sku.Comment, skuNameExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount) fixedStatus := 1 if sku.Status != model.SkuStatusNormal { fixedStatus = 2 diff --git a/business/model/dao/report.go b/business/model/dao/report.go index 81432d287..316e5b1ed 100644 --- a/business/model/dao/report.go +++ b/business/model/dao/report.go @@ -278,7 +278,7 @@ func GetPriceReferSnapshot(db *DaoDB, cityCodes, skuIDs []int, snapDate time.Tim err = err2 if len(skuList) > 0 { skuAndName := skuList[0] - jxSkuDetailName := jxutils.ComposeSkuName(skuAndName.Prefix, skuAndName.Name, skuAndName.Comment, skuAndName.Unit, skuAndName.SpecQuality, skuAndName.SpecUnit, 0, "", nil, nil) + jxSkuDetailName := jxutils.ComposeSkuNameOriginal(skuAndName.Prefix, skuAndName.Name, skuAndName.Comment, skuAndName.Unit, skuAndName.SpecQuality, skuAndName.SpecUnit, 0) v.SkuName = jxSkuDetailName } } diff --git a/business/userstore/food_recipe.go b/business/userstore/food_recipe.go index 018cc06e6..e64ae900b 100644 --- a/business/userstore/food_recipe.go +++ b/business/userstore/food_recipe.go @@ -246,7 +246,7 @@ func GetRecipeDetail(ctx *jxcontext.Context, recipeID int) (recipeDetail *FoodRe } choiceMap := make(map[int8][]*dao.FoodRecipeItemChoiceExt) for _, v := range itemChoiceList { - v.SkuName = jxutils.ComposeSkuName(v.Prefix, v.SkuNameName, v.Comment, v.Unit, v.SpecQuality, v.SpecUnit, 0, "", nil, nil) + v.SkuName = jxutils.ComposeSkuNameOriginal(v.Prefix, v.SkuNameName, v.Comment, v.Unit, v.SpecQuality, v.SpecUnit, 0) choiceMap[v.Index] = append(choiceMap[v.Index], v) }