Commit 5138157b by mushishixian

商品标签

parent 0cf52465
......@@ -18,4 +18,5 @@ cmd.exe~
/cmd/http
/doc/spuTest
/doc/test3
/.history
......@@ -66,6 +66,7 @@ type LySku struct {
GiftActivity GiftActivity `json:"gift_activity"`
ActivityInfo PriceActivity `json:"activity_info"`
StandardBrand StandardBrand `json:"standard_brand"`
GoodsTag GoodsTag `json:"goods_tag"`
}
type PriceActivity struct {
......@@ -96,6 +97,13 @@ type StandardBrand struct {
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"`
}
//为什么不直接映射到结构,而要用gjson,因为redis存的数据结构不一定正常,可能类型不一致
func InitSkuData(sku string) (data LySku) {
goodsSn := gjson.Get(sku, "goods_sn").String()
......
package vars
//商品类型字段
var GoodsLabel = map[int]string{
1: "国内现货",
2: "猎芯期货",
3: "国际现货",
}
//商品标签对应的展示
//1精选,2原厂直供,3认证,4当天发货
var GoodsTags = map[int]string{
1: "精选",
2: "原厂直供",
3: "认证",
4: "当天发货",
}
......@@ -10,11 +10,6 @@ import (
)
type LadderPriceService struct {
}
func adderprice() {
}
/**
......@@ -24,100 +19,100 @@ func adderprice() {
* @param integer $currency 币种 1人民币 2美元
* @return [type]
*/
func (LP *LadderPriceService) GetPriceInfoByNum(ladderPriceRequest model.LadderPriceRequest, goodsInfo map[string]interface{}) (map[string]interface{},*e.ApiError) {
func (LP *LadderPriceService) GetPriceInfoByNum(ladderPriceRequest model.LadderPriceRequest, goodsInfo map[string]interface{}) (map[string]interface{}, *e.ApiError) {
//此service 对 商详数据的操作都是使用的 gjson包
res:=make(map[string]interface{})
res := make(map[string]interface{})
goodsJsonResult,err:=LP.getGoodsInfo(goodsInfo,ladderPriceRequest.GoodsId)
if(err!=nil){
return res,err
goodsJsonResult, err := LP.getGoodsInfo(goodsInfo, ladderPriceRequest.GoodsId)
if err != nil {
return res, err
}
costly:=ladderPriceRequest.Costly//这个字段暂时不知道什么意思
costly := ladderPriceRequest.Costly //这个字段暂时不知道什么意思
//根据num 从 多个阶梯价数组 获取到对应的阶梯价
ladderPriceOne,err:=LP.getLadderPrice(goodsJsonResult,ladderPriceRequest.GoodsId,ladderPriceRequest.Num,costly)
ladderPriceOne, err := LP.getLadderPrice(goodsJsonResult, ladderPriceRequest.GoodsId, ladderPriceRequest.Num, costly)
num:=ladderPriceRequest.Num
purchases:=ladderPriceOne.Get("purchases").Int();
if purchases>ladderPriceRequest.Num{
num=purchases
num := ladderPriceRequest.Num
purchases := ladderPriceOne.Get("purchases").Int()
if purchases > ladderPriceRequest.Num {
num = purchases
}
goodsType:=goodsJsonResult.Get("goods_type").Int()
acType:=goodsJsonResult.Get("ac_type").Int()
if((goodsType==1 || goodsType==2) && acType!=1 && ladderPriceRequest.Currency!=1){//美元
res["price_us"]=ladderPriceOne.Get("price_us").Float()
res["price_us_total"]=common.MyRound(gconv.Float64(res["price_us"])*gconv.Float64(num),4)
goodsInfo["ac_type"]=0
}else{//人民币
res["price_cn"]=ladderPriceOne.Get("price_cn").Float()
res["price_cn_total"]=common.MyRound(gconv.Float64(res["price_cn"])*gconv.Float64(num),4)//人民币原价总价
priceAc:=ladderPriceOne.Get("price_ac").Float()
if priceAc != 0{
res["price_ac"]=priceAc
res["price_ac_total"]=common.MyRound(priceAc*gconv.Float64(num),4)
goodsType := goodsJsonResult.Get("goods_type").Int()
acType := goodsJsonResult.Get("ac_type").Int()
if (goodsType == 1 || goodsType == 2) && acType != 1 && ladderPriceRequest.Currency != 1 { //美元
res["price_us"] = ladderPriceOne.Get("price_us").Float()
res["price_us_total"] = common.MyRound(gconv.Float64(res["price_us"])*gconv.Float64(num), 4)
goodsInfo["ac_type"] = 0
} else { //人民币
res["price_cn"] = ladderPriceOne.Get("price_cn").Float()
res["price_cn_total"] = common.MyRound(gconv.Float64(res["price_cn"])*gconv.Float64(num), 4) //人民币原价总价
priceAc := ladderPriceOne.Get("price_ac").Float()
if priceAc != 0 {
res["price_ac"] = priceAc
res["price_ac_total"] = common.MyRound(priceAc*gconv.Float64(num), 4)
}
}
ladder:=make([]map[string]interface{},0)
a:=goodsJsonResult.Get("ladder_price").String()
err1:=json.Unmarshal([]byte(a),&ladder)//json Unmarshal一下,为了让返回格式没那么多斜划线
if(err1!=nil){
return res,e.NewApiError("json.Unmarshal ladder_price 报错"+err1.Error())
ladder := make([]map[string]interface{}, 0)
a := goodsJsonResult.Get("ladder_price").String()
err1 := json.Unmarshal([]byte(a), &ladder) //json Unmarshal一下,为了让返回格式没那么多斜划线
if err1 != nil {
return res, e.NewApiError("json.Unmarshal ladder_price 报错" + err1.Error())
}
res["ladder_price"]=ladder
res["goods_info"]=goodsInfo[ladderPriceRequest.GoodsId]
res["num"]=num
return res,nil
res["ladder_price"] = ladder
res["goods_info"] = goodsInfo[ladderPriceRequest.GoodsId]
res["num"] = num
return res, nil
}
func (LP *LadderPriceService)getGoodsInfo(goodsInfo map[string]interface{}, goodsId string) (gjson.Result, *e.ApiError) {
func (LP *LadderPriceService) getGoodsInfo(goodsInfo map[string]interface{}, goodsId string) (gjson.Result, *e.ApiError) {
var info gjson.Result
goodsInfoJson:=""
goodsInfoJson := ""
//把商品详情数据转化为json,方便用gjson处理
if byteS,err:=json.Marshal(goodsInfo);err!=nil{
if byteS, err := json.Marshal(goodsInfo); err != nil {
return info, e.NewApiError(err.Error())
}else{
goodsInfoJson=string(byteS)
} else {
goodsInfoJson = string(byteS)
}
goodsResult:=gjson.Get(goodsInfoJson,goodsId)
if(goodsResult.Exists()!=true){
goodsResult := gjson.Get(goodsInfoJson, goodsId)
if goodsResult.Exists() != true {
return info, e.NewApiError("未找到对应SKU", 20001)
}
return goodsResult, nil
}
func (LP *LadderPriceService )getLadderPrice(goodsJsonResult gjson.Result,goodsId string,num int64,costly int) (gjson.Result,*e.ApiError){
func (LP *LadderPriceService) getLadderPrice(goodsJsonResult gjson.Result, goodsId string, num int64, costly int) (gjson.Result, *e.ApiError) {
var res gjson.Result
ladderPriceS:=goodsJsonResult.Get("ladder_price")
if(len(ladderPriceS.Array())>0){
var price =gjson.Result{}
for k,item:=range ladderPriceS.Array(){
purchases:=item.Get("purchases").Int()
if(k==0){
price=item//默认最小数量
ladderPriceS := goodsJsonResult.Get("ladder_price")
if len(ladderPriceS.Array()) > 0 {
var price = gjson.Result{}
for k, item := range ladderPriceS.Array() {
purchases := item.Get("purchases").Int()
if k == 0 {
price = item //默认最小数量
}
if(gconv.Int(costly)==1){//这一句没懂 Costly 代表什么意思
if gconv.Int(costly) == 1 { //这一句没懂 Costly 代表什么意思
break
}
if(purchases<=num){
price=item
if purchases <= num {
price = item
}
}
if(price.Exists()==false){
return res,e.NewApiError("这个SKU没有阶梯价",504003)
if price.Exists() == false {
return res, e.NewApiError("这个SKU没有阶梯价", 504003)
}
return price,nil
return price, nil
}else{
return res,e.NewApiError("这个SKU没有阶梯价",104002)
} else {
return res, e.NewApiError("这个SKU没有阶梯价", 104002)
}
}
func NewLadderPriceService() *LadderPriceService{
func NewLadderPriceService() *LadderPriceService {
return &LadderPriceService{}
}
......@@ -160,6 +160,9 @@ func (ls *LyService) LyGoodsDetail(ctx *gin.Context, goodsIds []string, ch chan
// sku.Stock = 0
//}
var TagService TagsService
sku.GoodsTag = TagService.GetTags(sku.GoodsId)
//用spuInfo补全信息
sku = ls.CombineSup(sku, spu)
//最后一步,将sku的全部信息放到有序map里面
......
package service
import (
"github.com/gomodule/redigo/redis"
"github.com/tidwall/gjson"
"go_sku_server/model"
"go_sku_server/pkg/gredis"
"go_sku_server/pkg/vars"
)
//标签相关服务,包括goods_label
type TagsService struct {
}
//获取Spu的属性
func (ts *TagsService) GetTags(skuId string) (goodsTags model.GoodsTag) {
redisCon := gredis.Conn("default_r")
goodsTagsStr, _ := redis.String(redisCon.Do("HGET", "goods_tag", skuId))
goodsLabel := ""
if goodsTagsStr != "" {
//goods_label
goodsLabelType := int(gjson.Get(goodsTagsStr, "goods_label").Int())
goodsLabelMap := vars.GoodsLabel
goodsLabel = goodsLabelMap[goodsLabelType]
goodsTags.GoodsLabelName = goodsLabel
goodsTags.GoodsLabel = goodsLabelType
//goods_tag
var tags []int
var tagNames []string
for _, tagResult := range gjson.Get(goodsTagsStr, "tags").Array() {
tagName := vars.GoodsTags[int(tagResult.Int())]
tagNames = append(tagNames, tagName)
tags = append(tags, int(tagResult.Int()))
}
goodsTags.GoodsTagNames = tagNames
goodsTags.GoodsTag = tags
}
return goodsTags
}
......@@ -289,6 +289,10 @@ func (qs *ZiyingService) ZyGoodsDetail(ctx *gin.Context, goodsIds []string, ch c
}
}
//获取标签信息
var tagService TagsService
A.Set("goods_tag", tagService.GetTags(goodsId))
//最后写入sync map
(GoodsRes).Store(goodsId, A)
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment