diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index 668ee9b16..d3c7dab0b 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -35,6 +35,7 @@ func InitServiceInfo(version, buildDate, gitCommit string) { "storeStatus": model.StoreStatusName, "categoryType": model.CategoryTypeName, "skuStatus": model.SkuStatusName, + "skuNamePrefix": model.SkuNamePrefixNames, "vendorName": model.VendorChineseNames, "orderStatus": model.OrderStatusName, "waybillStatus": model.WaybillStatusName, diff --git a/business/jxstore/cms/cms_test.go b/business/jxstore/cms/cms_test.go index 16c433627..d51a7b631 100644 --- a/business/jxstore/cms/cms_test.go +++ b/business/jxstore/cms/cms_test.go @@ -20,7 +20,7 @@ func init() { } func TestGetQiniuUploadToken(t *testing.T) { - token, err := GetQiniuUploadToken() + token, err := GetQiniuUploadToken("") if err != nil { t.Fatal(err) } diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index ecb9432fb..21acaa34a 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2,7 +2,6 @@ package cms import ( "strconv" - "strings" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model" @@ -26,6 +25,9 @@ type StoreSkuBindInfo struct { IsFocus int `json:"isFocus"` // -1:不关注,0:忽略,1:关注 IsSale int `json:"isSale"` // -1:不可售,0:忽略,1:可售 Price int `json:"price"` + + ElmID int64 `json:"elmID"` + EbaiID int64 `json:"ebaiID"` } func GetStoreSkus(storeID int, keyword string, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *StoreSkuNamesInfo, err error) { @@ -85,8 +87,15 @@ func GetStoreSkus(storeID int, keyword string, params map[string]interface{}, of sqlParams = append(sqlParams, params["unit"].(string)) } if params["skuID"] != nil { - sql += " AND t2.id = ?" - sqlParams = append(sqlParams, params["skuID"].(int)) + skuID, ok := params["skuID"].(int) + if ok { + sql += " AND t2.id = ?" + sqlParams = append(sqlParams, skuID) + } else { + skuIDs := params["skuID"].([]interface{}) + sql += " AND t2.id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")" + sqlParams = append(sqlParams, skuIDs) + } } if params["fromStatus"] != nil { fromStatus := params["fromStatus"].(int) @@ -166,12 +175,10 @@ func UpdateStoreSku(storeID int, skuBinds []*StoreSkuBindInfo, userName string) db := dao.GetDB() var existBinds []*model.StoreSkuBind skuIDs := make([]int, len(skuBinds)) - placeHolders := make([]string, len(skuBinds)) for k, v := range skuBinds { skuIDs[k] = v.SkuID - placeHolders[k] = "?" } - questions := "(" + strings.Join(placeHolders, ",") + ")" + questions := "(" + dao.GenQuestionMarks(len(skuBinds)) + ")" if err = dao.GetRows(db, &existBinds, ` SELECT * FROM store_sku_bind @@ -201,6 +208,9 @@ func UpdateStoreSku(storeID int, skuBinds []*StoreSkuBindInfo, userName string) if skuBind != nil { if v.Price != 0 { skuBind.Price = v.Price + skuBind.JdSyncStatus |= model.SyncFlagPriceMask + skuBind.ElmSyncStatus |= model.SyncFlagPriceMask + skuBind.EbaiSyncStatus |= model.SyncFlagPriceMask } if v.IsSale != 0 { if v.IsSale == 1 { @@ -208,6 +218,9 @@ func UpdateStoreSku(storeID int, skuBinds []*StoreSkuBindInfo, userName string) } else { skuBind.Status = model.StoreSkuBindStatusDontSale } + skuBind.JdSyncStatus |= model.SyncFlagSaleMask + skuBind.ElmSyncStatus |= model.SyncFlagSaleMask + skuBind.EbaiSyncStatus |= model.SyncFlagSaleMask } if ok { if v.IsFocus == -1 { @@ -217,13 +230,20 @@ func UpdateStoreSku(storeID int, skuBinds []*StoreSkuBindInfo, userName string) model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask, }) } else { + // todo 如果修改ebai与elm ID怎么处理呢? skuBind.DeletedAt = utils.DefaultTimeValue - skuBind.JdSyncStatus = model.SyncFlagModifiedMask - skuBind.ElmSyncStatus = model.SyncFlagModifiedMask - skuBind.EbaiSyncStatus = model.SyncFlagModifiedMask + skuBind.JdSyncStatus |= model.SyncFlagModifiedMask + skuBind.ElmSyncStatus |= model.SyncFlagModifiedMask + skuBind.EbaiSyncStatus |= model.SyncFlagModifiedMask _, err = dao.UpdateEntity(db, skuBind) } } else { + if v.EbaiID != 0 { + skuBind.EbaiID = v.EbaiID + } + if v.ElmID != 0 { + skuBind.ElmID = v.ElmID + } skuBind.JdSyncStatus = model.SyncFlagNewMask skuBind.ElmSyncStatus = model.SyncFlagNewMask skuBind.EbaiSyncStatus = model.SyncFlagNewMask @@ -236,7 +256,7 @@ func UpdateStoreSku(storeID int, skuBinds []*StoreSkuBindInfo, userName string) } } dao.Commit(db) - err = CurVendorSync.SyncStoreSku(db, storeID, -1, false, userName) + err = CurVendorSync.SyncStoreSku(db, storeID, skuIDs, false, userName) } return num, err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 5b6d4a6b2..c62dcd79b 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -98,6 +98,31 @@ func (v *VendorSync) SyncSku(db *dao.DaoDB, nameID, skuID int, isForce bool, use return err } -func (v *VendorSync) SyncStoreSku(db *dao.DaoDB, storeID, skuID int, isForce bool, userName string) (err error) { +func (v *VendorSync) SyncStoreSku(db *dao.DaoDB, storeID int, skuIDs []int, isForce bool, userName string) (err error) { + storeMapList := v.GetStoreMapInfo(db, storeID) + var skuNamesInfo *StoreSkuNamesInfo + if skuNamesInfo, err = GetStoreSkus(storeID, "", utils.Params2Map("skuID", skuIDs), 0, 10000); err == nil { + if skuNamesInfo.TotalCount != len(skuNamesInfo.SkuNames) { + panic("too many skus!") + } + for _, storeMap := range storeMapList { + switch storeMap.VendorID { + case model.VendorIDJD: + err = v.SyncStoreSku2JD(db, skuNamesInfo.SkuNames, isForce, userName) + } + } + } return err } + +func (v *VendorSync) SyncStoreSku2JD(db *dao.DaoDB, skuInfoList []*StoreSkuNameExt, isForce bool, userName string) (err error) { + // for _, skuInfo := range skuInfoList { + + // } + return err +} + +func (v *VendorSync) GetStoreMapInfo(db *dao.DaoDB, storeID int) (storeMapList []*model.StoreMap) { + dao.GetEntities(db, &storeMapList, utils.Params2Map(model.FieldStoreID, storeID), false) + return storeMapList +} diff --git a/business/model/dao/dao_utils.go b/business/model/dao/dao_utils.go index e6e5040a4..19916bf31 100644 --- a/business/model/dao/dao_utils.go +++ b/business/model/dao/dao_utils.go @@ -81,3 +81,14 @@ func WrapUpdateULEntity(item interface{}, lastOperator string) interface{} { } return item } + +func GenQuestionMarks(count int) string { + marks := "" + if count > 0 { + marks = "?" + for i := 1; i < count; i++ { + marks += ", ?" + } + } + return marks +} diff --git a/business/model/model.go b/business/model/model.go index 174b308d5..90190f9d4 100644 --- a/business/model/model.go +++ b/business/model/model.go @@ -44,6 +44,9 @@ const ( SyncFlagModifiedMask = 1 SyncFlagNewMask = 2 SyncFlagDeletedMask = 4 + + SyncFlagSaleMask = 5 + SyncFlagPriceMask = 6 ) // const ( diff --git a/business/model/sku.go b/business/model/sku.go index 8c67e5f7f..332b6b152 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -51,6 +51,40 @@ var ( "支", "杯", } + SkuNamePrefixNames = []string{ + "新鲜", + "组合菜", + "冰鲜", + "优", + "精", + "熟食", + "鲜", + "净菜", + "净", + "冻", + "半熟", + "果切", + "熟", + "优质", + "生", + "干货", + "快捷菜", + "手工厨房", + "带壳", + "长条", + "鲜活宰杀", + "惠", + "鱼腥草", + "冰冻", + "思念", + "散装", + "优质精品", + "干", + "湿", + "生品", + "虾仁", + "鲜活现宰", + } ) var (