package controller import ( "github.com/gin-gonic/gin" "github.com/syyongx/php2go" "go_sku_server/pkg/common" "go_sku_server/service" "sync" ) const goods_slice_count = 10 //每多少个型号id开启一个协程 /* 查询商品详情(自营或者联营) @doc http://192.168.2.232:3000/project/128/interface/api/649 @param goods_id 支持批量,不建议超过40个,超过会导致处理时间超过2秒,进程异常 : 74564,65897,456464131 @param power[newCustomer] 是否获取新客价 :true @param power[member] 是否获取会员价 :true @param power[mobile] 获取会员价时,用户有手机号时必填,用于会员价可见名单。活动价时必须,否则可能导致用户无法享受活动价 :13510507993 @param power[email] 获取会员价时,用户有邮箱时必填,用于会员价可见名单。活动价时必须,否则可能导致用户无法享受活动价 ymx@ichunt.com @param power[user_id] 获取会员价时,必填,用于会员价可见名单。活动价时必须,否则可能导致用户无法享受活动价,如果用户未登录,可为空,用户是否可见活动价取决于配置 65139 @param power[fast] 仅获取价格与库存 :1 @param power[invoice] 增值税普通发票公司名字,活动价时必须,否则可能导致用户无法享受活动价 :深圳是猎芯科技有限公司 @param power[special_invoice] 增值税专用发票公司名字,活动价时需要,否则可能导致用户无法享受活动价 : 深圳是猎芯科技有限公司 @param power[verify_blacklist] 是否验证黑名单,用于折扣活动提交订单页面与后台下单 :true */ func Synchronization(ctx *gin.Context) { common.PrintDebugHeader(ctx) //开启debug调试 zyService := service.ZiyingService{} //实例化自营查询 lyService := service.LyService{} //实例化自营查询 //抽取自营 或者联营 goods_id GoodsIdStr := ctx.Request.FormValue("goods_id") if GoodsIdStr == "" { common.Output(ctx,1001,"查询型号ID不得为空","") return } GoodsRes := sync.Map{} goodsIdArr := php2go.Explode(",",GoodsIdStr) wg := sync.WaitGroup{} //协程 zyGoodsId := make([]string,0) lyGoodsId := make([]string,0) for _,goods_id := range goodsIdArr { if len(goods_id) < 19 { //自营 zyGoodsId = append(zyGoodsId,goods_id) if len(zyGoodsId) >= goods_slice_count { common.PrintDebugHtml(ctx,"zy增加协程:") common.PrintDebugHtml(ctx,zyGoodsId) wg.Add(1) //协程计数一 go zyService.ZyGoodsDetail(ctx,zyGoodsId,&GoodsRes,&wg) zyGoodsId = zyGoodsId[:0:0] } }else{ //联营 lyGoodsId = append(lyGoodsId,goods_id) if len(lyGoodsId) >= goods_slice_count { common.PrintDebugHtml(ctx,"ly增加协程:") common.PrintDebugHtml(ctx,zyGoodsId) wg.Add(1) go lyService.LyGoodsDetail(lyGoodsId,&wg) lyGoodsId = lyGoodsId[:0:0] } } } if len(zyGoodsId) >0 { common.PrintDebugHtml(ctx,"zy增加协程:") common.PrintDebugHtml(ctx,zyGoodsId) wg.Add(1) //协程计数一 go zyService.ZyGoodsDetail(ctx,zyGoodsId,&GoodsRes,&wg) } if len(lyGoodsId) >= goods_slice_count { common.PrintDebugHtml(ctx,"ly增加协程:") common.PrintDebugHtml(ctx,zyGoodsId) wg.Add(1) go lyService.LyGoodsDetail(lyGoodsId,&wg) } wg.Wait() //异步map最后转成map temp := make(map[string]interface{}) GoodsRes.Range(func(k, v interface{}) bool { s,_ := k.(string) temp[s] = v return true }) common.Output(ctx,0,"查询成功",temp) } /* 健康监测 */ func Health(ctx *gin.Context) { ctx.String(200,"ok") }