package model import ( "strings" "github.com/tidwall/gjson" ) // 联营sku结构体 type LySku struct { LadderPrice []LadderPrice `json:"-"` SpuId string `json:"spu_id"` OldGoodsId int64 `json:"old_goods_id"` UpdateTime int64 `json:"update_time"` CpTime int64 `json:"cp_time"` GoodsStatus int64 `json:"goods_status"` GoodsType int64 `json:"goods_type"` SupplierId int64 `json:"supplier_id"` Encoded string `json:"encoded"` BatchSn string `json:"batch_sn"` Moq int64 `json:"moq"` Mpq int64 `json:"mpq"` Multiple int64 `json:"multiple"` Stock int64 `json:"stock"` HkDeliveryTime string `json:"hk_delivery_time"` CnDeliveryTime string `json:"cn_delivery_time"` LadderPriceResult interface{} `json:"ladder_price"` GoodsImages string `json:"goods_images"` Canal string `json:"canal"` IsExpire int `json:"is_expire,omitempty"` Packing string `json:"packing"` GoodsId string `json:"goods_id"` GoodsName string `json:"goods_name"` SkuName string `json:"sku_name"` BrandName string `json:"brand_name"` SupplierName string `json:"supplier_name"` Attrs interface{} `json:"attrs"` ScmBrand interface{} `json:"scm_brand"` AllowCoupon int `json:"allow_coupon"` BrandId int64 `json:"brand_id"` //系数相关 Coefficient interface{} `json:"coefficient,omitempty"` OriginalPrice []OriginPrice `json:"original_price,omitempty"` //数据库存的价格,因为数据库存的是什么币种都有可能,但是也要展示数据库存的,所以要有这个字段 DatabasePrice interface{} `json:"database_price,omitempty"` SuppExtendFee interface{} `json:"supp_extend_fee"` IsBuy int `json:"is_buy"` OrgId int `json:"org_id"` //spu信息 ClassID1 int `json:"class_id1"` ClassID2 int `json:"class_id2"` ClassID3 int `json:"class_id3"` SpuName string `json:"spu_name"` Status int `json:"status"` ImagesL string `json:"images_l"` Encap string `json:"encap"` Pdf string `json:"pdf"` SpuBrief string `json:"spu_brief"` ClassName string `json:"class_name,omitempty"` ErpTax interface{} `json:"erp_tax"` GoodsSn string `json:"goods_sn"` GoodsDetails string `json:"goods_details"` ClassName1 string `json:"class_name1,omitempty"` ClassName2 string `json:"class_name2,omitempty"` ClassName3 string `json:"class_name3,omitempty"` Ratio float64 `json:"ratio,omitempty"` RatioUs float64 `json:"ratio_us,omitempty"` SpuDetail string `json:"spu_detail,omitempty"` AcType int `json:"ac_type"` //活动信息 HasGiftActivity int `json:"has_gift_activity"` GiftActivity GiftActivity `json:"gift_activity"` ActivityInfo PriceActivity `json:"activity_info"` StandardBrand StandardBrand `json:"standard_brand"` GoodsTag GoodsTag `json:"goods_tag"` StockInfo interface{} `json:"stock_info"` SkuDetail string `json:"sku_detail"` SpuExtra SpuExtra `json:"spu_extra"` Eccn string `json:"eccn"` DiscountRatio DiscountRatio `json:"discount_ratio"` PriceRatioSort int `json:"price_ratio_sort"` PriceRatio []PriceRatio `json:"price_ratio"` Source int `json:"source"` OriginCurrencySymbol string `json:"origin_currency_symbol,omitempty"` CustomizeRateRMB float64 CustomizeRateUs float64 SpuEccn string `json:"spu_eccn"` CustomPriceList []CustomPrice `json:"custom_price_list"` } type DiscountRatio struct { Ratio float64 `json:"ratio"` RatioUsd float64 `json:"ratio_usd"` } type PriceRatio struct { Ratio float64 `json:"ratio"` RatioUsd float64 `json:"ratio_usd"` Purchases int64 `json:"purchases,omitempty"` } type PriceActivity struct { ActivityCommon Ratio float64 `json:"ratio,omitempty"` RatioUs float64 `json:"ratio_us,omitempty"` SignText string `json:"sign_text,omitempty"` Sign string `json:"sign,omitempty"` ShowName string `json:"show_name,omitempty"` SignUrl string `json:"sign_url"` } type GiftActivity struct { ActivityCommon CanAdminOrder interface{} `json:"can_admin_order"` ItemList []ActivityItem `json:"items,omitempty"` } type ActivityCommon struct { HasActivity bool `json:"-"` ActivityId int `json:"activity_id,omitempty"` ActivityName string `json:"activity_name,omitempty"` AllowCoupon int `json:"-"` UserScope int `json:"user_scope,omitempty"` } type StandardBrand struct { StandardBrandId int `json:"standard_brand_id,omitempty"` BrandName string `json:"brand_name,omitempty"` BrandLogo string `json:"brand_logo,omitempty"` } type GoodsTag struct { GoodsLabel int `json:"goods_label,omitempty"` GoodsLabelName string `json:"goods_label_name,omitempty"` GoodsTag []int `json:"goods_tag,omitempty"` GoodsTagNames []string `json:"goods_tag_names,omitempty"` } type StockInfo struct { Period string `json:"period" bson:"period"` PeriodTime int `json:"-" bson:"period_time"` PeriodTimeFormat string `json:"period_time"` Stock int `json:"stock" bson:"stock"` } type SpuExtra struct { ImageList []struct { Name string `bson:"name" json:"name"` Thumbnail string `bson:"thumbnail" json:"thumbnail"` } `bson:"image_list" json:"image_list"` SpuDetail string `bson:"spu_detail" json:"spu_detail"` SpuId string `bson:"spu_id" json:"spu_id"` } type CustomPrice struct { PriceName string `json:"price_name"` LadderPrice []LadderPrice `json:"ladder_price"` } // 为什么不直接映射到结构,而要用gjson,因为redis存的数据结构不一定正常,可能类型不一致 func InitSkuData(sku string) (data LySku) { source := gjson.Get(sku, "source").Int() data.Source = int(source) goodsSn := gjson.Get(sku, "goods_sn").String() data.GoodsSn = goodsSn spuId := gjson.Get(sku, "spu_id").String() data.SpuId = spuId oldGoodsId := gjson.Get(sku, "old_goods_id").Int() data.OldGoodsId = oldGoodsId updateTime := gjson.Get(sku, "update_time").Int() data.UpdateTime = updateTime goodsStatus := gjson.Get(sku, "goods_status").Int() data.GoodsStatus = goodsStatus supplierId := gjson.Get(sku, "supplier_id").Int() data.SupplierId = supplierId goodsName := gjson.Get(sku, "goods_name").String() data.GoodsName = goodsName skuName := gjson.Get(sku, "goods_name").String() data.SkuName = skuName goodsType := gjson.Get(sku, "goods_type").Int() data.GoodsType = goodsType encoded := gjson.Get(sku, "encoded").String() data.Encoded = encoded batchSn := gjson.Get(sku, "batch_sn").String() data.BatchSn = batchSn moq := gjson.Get(sku, "moq").Int() data.Moq = moq mpq := gjson.Get(sku, "mpq").Int() data.Mpq = mpq data.OriginCurrencySymbol = "$" //递增量 Multiple := gjson.Get(sku, "multiple").Int() if Multiple > 0 { data.Multiple = Multiple } else { if mpq > moq { data.Multiple = moq } else { data.Multiple = mpq } } //2023.5.6 如果是rochester ,递增量为1 if supplierId == 3 { data.Multiple = 1 } stock := gjson.Get(sku, "stock").Int() data.Stock = stock eccn := gjson.Get(sku, "eccn").String() data.Eccn = eccn isExpire := gjson.Get(sku, "is_expire").Int() data.IsExpire = int(isExpire) data.IsExpire = 0 hkDeliveryTime := gjson.Get(sku, "hk_delivery_time").String() data.HkDeliveryTime = hkDeliveryTime cnDeliveryTime := gjson.Get(sku, "cn_delivery_time").String() data.CnDeliveryTime = cnDeliveryTime goodsDetail := gjson.Get(sku, "goods_details").String() data.GoodsDetails = goodsDetail goodsImages := gjson.Get(sku, "goods_images").String() goodsImages = strings.Replace(goodsImages, "http://img.ichunt.com", "https://img.ichunt.com", 1) goodsImages = strings.Replace(goodsImages, "http://image.ichunt.net", "https://image.ichunt.net", 1) goodsImages = strings.Replace(goodsImages, "https://image.ichunt.net", "https://imgscdn.ichunt.com", 1) data.GoodsImages = goodsImages canal := gjson.Get(sku, "canal").String() data.Canal = canal //组织id,默认都是猎芯,因为没有默认存到redis,所以默认是1 orgId := gjson.Get(sku, "org_id").Int() if orgId != 0 { data.OrgId = int(orgId) } else { data.OrgId = 1 } //加上紧急判断,如果是立创(L0001175)的商品,就修改内部编码 if data.Canal == "L0001175" { data.Encoded = "10142-L" } cpTime := gjson.Get(sku, "cp_time").Int() data.CpTime = cpTime LadderPriceStr := gjson.Get(sku, "ladder_price").String() data.LadderPrice = getLadderPrice(LadderPriceStr) data.OriginalPrice = getOriginPrice(LadderPriceStr) data.DatabasePrice = getDatabasePrice(LadderPriceStr) return } // 获取联营商品的阶梯价 func getLadderPrice(ladderPriceStr string) (ladderPrice []LadderPrice) { ladderPriceArr := gjson.Parse(ladderPriceStr).Array() for _, price := range ladderPriceArr { ladderPrice = append(ladderPrice, LadderPrice{ Purchases: price.Get("purchases").Int(), PriceUs: price.Get("price_us").Float(), PriceCn: price.Get("price_cn").Float(), PriceAc: price.Get("price_ac").Float(), CostPrice: price.Get("cost_price").Float(), PriceCostUs: price.Get("price_cost_us").Float(), PriceCostCn: price.Get("price_cost_cn").Float(), }) } if len(ladderPrice) == 0 { ladderPrice = []LadderPrice{} return } return } // 获取原始价格 func getOriginPrice(ladderPriceStr string) (ladderPrice []OriginPrice) { ladderPriceArr := gjson.Parse(ladderPriceStr).Array() for _, price := range ladderPriceArr { ladderPrice = append(ladderPrice, OriginPrice{ Purchases: price.Get("purchases").Int(), PriceUs: price.Get("price_us").Float(), PriceCn: price.Get("price_cn").Float(), PriceAc: price.Get("price_ac").Float(), CostPrice: price.Get("cost_price").Float(), }) } if len(ladderPrice) == 0 { ladderPrice = []OriginPrice{} return } return } // 获取原始价格 func getDatabasePrice(ladderPriceStr string) (ladderPrice []DatabasePrice) { ladderPriceArr := gjson.Parse(ladderPriceStr).Array() for _, price := range ladderPriceArr { ladderPrice = append(ladderPrice, DatabasePrice{ Purchases: price.Get("purchases").Int(), PriceUs: price.Get("price_us").Float(), PriceCn: price.Get("price_cn").Float(), PriceAc: price.Get("price_ac").Float(), CostPrice: price.Get("cost_price").Float(), }) } if len(ladderPrice) == 0 { ladderPrice = []DatabasePrice{} return } return }