Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
黄成意
/
go_sku_server
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
e691f13f
authored
Nov 26, 2020
by
huangchengyi
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
1.0
parent
037cda3f
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
81 additions
and
38 deletions
controller/sku_controller.go
service/service_ly.go
service/service_zy.go
controller/sku_controller.go
View file @
e691f13f
package
controller
import
(
"fmt"
"github.com/gin-gonic/gin"
"github.com/syyongx/php2go"
"go_sku_server/pkg/common"
"go_sku_server/service"
"sync"
"time"
)
const
goods_slice_count
=
10
//每多少个型号id开启一个协程
...
...
@@ -39,12 +41,11 @@ func Synchronization(ctx *gin.Context) {
common
.
Output
(
ctx
,
1001
,
"查询型号ID不得为空"
,
""
)
return
}
//gjson.Parse(string).Array()
GoodsRes
:=
sync
.
Map
{}
goodsIdArr
:=
php2go
.
Explode
(
","
,
GoodsIdStr
)
wg
:=
sync
.
WaitGroup
{}
//协程
//wg := sync.WaitGroup{} //协程
ch
:=
make
(
chan
sync
.
Map
)
//管道
p
:=
0
;
//总共协程
zyGoodsId
:=
make
([]
string
,
0
)
lyGoodsId
:=
make
([]
string
,
0
)
...
...
@@ -57,18 +58,20 @@ func Synchronization(ctx *gin.Context) {
if
len
(
zyGoodsId
)
>=
goods_slice_count
{
common
.
PrintDebugHtml
(
ctx
,
"zy增加协程1001:"
)
common
.
PrintDebugHtml
(
ctx
,
zyGoodsId
)
wg
.
Add
(
1
)
//协程计数一
go
zyService
.
ZyGoodsDetail
(
ctx
,
zyGoodsId
,
&
GoodsRes
,
&
wg
)
//
wg.Add(1) //协程计数一
go
zyService
.
ZyGoodsDetail
(
ctx
,
zyGoodsId
,
ch
)
zyGoodsId
=
zyGoodsId
[
:
0
:
0
]
p
++
;
}
}
else
{
//联营
lyGoodsId
=
append
(
lyGoodsId
,
goods_id
)
if
len
(
lyGoodsId
)
>=
goods_slice_count
{
common
.
PrintDebugHtml
(
ctx
,
"ly增加协程1002:"
)
common
.
PrintDebugHtml
(
ctx
,
zyGoodsId
)
wg
.
Add
(
1
)
go
lyService
.
LyGoodsDetail
(
ctx
,
lyGoodsId
,
&
GoodsRes
,
&
wg
)
//
wg.Add(1)
go
lyService
.
LyGoodsDetail
(
ctx
,
lyGoodsId
,
ch
)
lyGoodsId
=
lyGoodsId
[
:
0
:
0
]
p
++
;
}
}
}
...
...
@@ -76,28 +79,37 @@ func Synchronization(ctx *gin.Context) {
if
len
(
zyGoodsId
)
>
0
{
common
.
PrintDebugHtml
(
ctx
,
"zy增加协程1003:"
)
common
.
PrintDebugHtml
(
ctx
,
zyGoodsId
)
wg
.
Add
(
1
)
//协程计数一
go
zyService
.
ZyGoodsDetail
(
ctx
,
zyGoodsId
,
&
GoodsRes
,
&
wg
)
//wg.Add(1) //协程计数一
go
zyService
.
ZyGoodsDetail
(
ctx
,
zyGoodsId
,
ch
)
p
++
;
}
if
len
(
lyGoodsId
)
>
0
{
common
.
PrintDebugHtml
(
ctx
,
"ly增加协程1004:"
)
common
.
PrintDebugHtml
(
ctx
,
zyGoodsId
)
wg
.
Add
(
1
)
go
lyService
.
LyGoodsDetail
(
ctx
,
lyGoodsId
,
&
GoodsRes
,
&
wg
)
//wg.Add(1)
go
lyService
.
LyGoodsDetail
(
ctx
,
lyGoodsId
,
ch
)
p
++
;
}
wg
.
Wait
()
//
wg.Wait()
//异步map最后转成map
temp
:=
make
(
map
[
string
]
interface
{})
GoodsRes
.
Range
(
func
(
k
,
v
interface
{})
bool
{
s
,
_
:=
k
.
(
string
)
temp
[
s
]
=
v
return
true
})
for
i
:=
0
;
i
<
p
;
i
++
{
select
{
case
GoodsRes
:=
<-
ch
:
GoodsRes
.
Range
(
func
(
k
,
v
interface
{})
bool
{
s
,
_
:=
k
.
(
string
)
temp
[
s
]
=
v
return
true
})
case
<-
time
.
After
(
time
.
Second
*
2
)
:
fmt
.
Println
(
"read time out"
)
}
}
common
.
Output
(
ctx
,
0
,
"success"
,
temp
)
}
...
...
service/service_ly.go
View file @
e691f13f
...
...
@@ -27,10 +27,10 @@ type Power struct {
/*
联营数据详情
*/
func
(
ls
*
LyService
)
LyGoodsDetail
(
ctx
*
gin
.
Context
,
goodsIds
[]
string
,
goodsRes
*
sync
.
Map
,
wg
*
sync
.
WaitGroup
)
(
results
model
.
LyResponse
)
{
func
(
ls
*
LyService
)
LyGoodsDetail
(
ctx
*
gin
.
Context
,
goodsIds
[]
string
,
ch
chan
sync
.
Map
)
{
redisConn
:=
gredis
.
Conn
(
"search_r"
)
defer
func
()
{
wg
.
Done
()
//
wg.Done()
redisConn
.
Close
()
}()
...
...
@@ -50,6 +50,8 @@ func (ls *LyService) LyGoodsDetail(ctx *gin.Context, goodsIds []string, goodsRes
skuArr
:=
gredis
.
Hmget
(
"default_r"
,
"sku"
,
goodsIds
)
//为了性能着想,这边也先去批量获取spu的信息
spuList
:=
ls
.
getSpuList
(
skuArr
)
GoodsRes
:=
sync
.
Map
{}
for
goodsId
,
skuStr
:=
range
skuArr
{
//初始化有序map,拼接data 数据
//A := orderedmap.New()
...
...
@@ -181,12 +183,11 @@ func (ls *LyService) LyGoodsDetail(ctx *gin.Context, goodsIds []string, goodsRes
//最后一步,将sku的全部信息放到有序map里面
(
*
goodsRes
)
.
Store
(
goodsId
,
sku
)
GoodsRes
.
Store
(
goodsId
,
sku
)
//(*goodsRes)[goodsId] = A
}
return
ch
<-
GoodsRes
}
func
(
ls
*
LyService
)
getSpuList
(
skuArr
map
[
string
]
string
)
(
spuList
map
[
string
]
string
)
{
...
...
service/service_zy.go
View file @
e691f13f
package
service
import
(
"fmt"
"github.com/gin-gonic/gin"
"github.com/iancoleman/orderedmap"
"github.com/tidwall/gjson"
...
...
@@ -31,19 +30,22 @@ type ZiyingService struct {
@param power[special_invoice] 增值税专用发票公司名字,活动价时需要,否则可能导致用户无法享受活动价 : 深圳是猎芯科技有限公司
@param power[verify_blacklist] 是否验证黑名单,用于折扣活动提交订单页面与后台下单 :true
*/
func
(
qs
*
ZiyingService
)
ZyGoodsDetail
(
ctx
*
gin
.
Context
,
goodsIds
[]
string
,
goodsRes
*
sync
.
Map
,
wg
*
sync
.
WaitGrou
p
)
{
func
(
qs
*
ZiyingService
)
ZyGoodsDetail
(
ctx
*
gin
.
Context
,
goodsIds
[]
string
,
ch
chan
sync
.
Ma
p
)
{
redisConn
:=
gredis
.
Conn
(
"search_r"
)
defer
func
()
{
wg
.
Done
();
//
wg.Done();
redisConn
.
Close
();
}()
skuArr
:=
gredis
.
Hmget
(
"search_r"
,
"Self_SelfGoods"
,
goodsIds
)
//批量获取商品详情
fast
:=
ctx
.
Request
.
FormValue
(
"power[fast]"
)
GoodsRes
:=
sync
.
Map
{}
for
goods_id
,
info
:=
range
skuArr
{
if
gjson
.
Get
(
info
,
"goods_name"
)
.
String
()
==
""
{
fmt
.
Print
(
"zy goods_name为空-----"
,
goods_id
,
skuArr
)
//fmt.Print("zy goods_name为空-----",goods_id,skuArr)
GoodsRes
.
Store
(
goods_id
,
false
)
continue
;
}
//拼接梯度价格
...
...
@@ -79,8 +81,35 @@ func (qs *ZiyingService) ZyGoodsDetail(ctx *gin.Context,goodsIds []string,goodsR
A
.
Set
(
"goods_type"
,
gjson
.
Get
(
info
,
"goods_type"
)
.
Int
())
//查询总条数
A
.
Set
(
"supplier_id"
,
gjson
.
Get
(
info
,
"supplier_id"
)
.
Int
())
//查询总条数
A
.
Set
(
"brand_id"
,
gjson
.
Get
(
info
,
"brand_id"
)
.
Int
())
//
A
.
Set
(
"class_id1"
,
gjson
.
Get
(
info
,
"class_id1"
)
.
Int
())
//
A
.
Set
(
"class_id2"
,
gjson
.
Get
(
info
,
"class_id2"
)
.
Int
())
//
other_attrs
:=
gjson
.
Get
(
info
,
"other_attrs"
)
.
String
()
if
other_attrs
==
""
{
A
.
Set
(
"other_attrs"
,
""
)
}
else
{
A
.
Set
(
"other_attrs"
,
map
[
string
]
string
{
"length"
:
gjson
.
Get
(
other_attrs
,
"length"
)
.
String
(),
"gross_wegiht"
:
gjson
.
Get
(
other_attrs
,
"gross_wegiht"
)
.
String
(),
})
}
class_id1
:=
gjson
.
Get
(
info
,
"class_id1"
)
.
Int
()
class_id2
:=
gjson
.
Get
(
info
,
"class_id2"
)
.
Int
()
class_id1_name
:=
""
;
if
class_id1
>
0
{
class_id1_info
,
_
:=
gredis
.
String
(
redisConn
.
Do
(
"HGET"
,
"Self_SelfClassInfo"
,
class_id1
))
class_id1_name
=
gjson
.
Get
(
class_id1_info
,
"class_name"
)
.
String
()
}
class_id2_name
:=
""
;
if
class_id2
>
0
{
class_id2_info
,
_
:=
gredis
.
String
(
redisConn
.
Do
(
"HGET"
,
"Self_SelfClassInfo"
,
class_id2
))
class_id2_name
=
gjson
.
Get
(
class_id2_info
,
"class_name"
)
.
String
()
}
A
.
Set
(
"class_id1"
,
class_id1
)
//
A
.
Set
(
"class_id2"
,
class_id2
)
//
A
.
Set
(
"class_id1_name"
,
class_id1_name
)
//
A
.
Set
(
"class_id2_name"
,
class_id2_name
)
//
A
.
Set
(
"goods_name"
,
gjson
.
Get
(
info
,
"goods_name"
)
.
String
())
//
A
.
Set
(
"status"
,
gjson
.
Get
(
info
,
"status"
)
.
Int
())
//
A
.
Set
(
"encoded"
,
gjson
.
Get
(
info
,
"encoded"
)
.
String
())
//
...
...
@@ -126,7 +155,10 @@ func (qs *ZiyingService) ZyGoodsDetail(ctx *gin.Context,goodsIds []string,goodsR
}
A
.
Set
(
"cn_delivery_time"
,
cn_delivery_time
)
// 货期
A
.
Set
(
"brand_name"
,
gjson
.
Get
(
info
,
"brand_name"
)
.
String
())
//
//查询品牌名称
brand_id
:=
gjson
.
Get
(
info
,
"brand_id"
)
.
Int
()
brand_info
,
_
:=
gredis
.
String
(
redisConn
.
Do
(
"HGET"
,
"Self_Brand"
,
brand_id
))
A
.
Set
(
"brand_name"
,
gjson
.
Get
(
brand_info
,
"brand_name"
)
.
String
())
//
if
fast
!=
"1"
{
//不是快速查询
// 供应商名称
...
...
@@ -167,22 +199,20 @@ func (qs *ZiyingService) ZyGoodsDetail(ctx *gin.Context,goodsIds []string,goodsR
if
img
!=
""
{
goods_images
,
_
=
gredis
.
String
(
redisConn
.
Do
(
"HGET"
,
"Self_SelfGoodsSource"
,
img
))
}
A
.
Set
(
"goods_images"
,
g
oods_images
)
//
A
.
Set
(
"goods_images"
,
g
json
.
Get
(
goods_images
,
"url"
)
.
String
())
//图片
pdf
:=
gjson
.
Get
(
info
,
"pdf"
)
.
String
()
if
pdf
!=
""
{
pdf
,
_
=
gredis
.
String
(
redisConn
.
Do
(
"HGET"
,
"Self_SelfGoodsSource"
,
pdf
))
}
A
.
Set
(
"pdf"
,
gjson
.
Get
(
info
,
"pdf
"
)
.
String
())
A
.
Set
(
"pdf"
,
gjson
.
Get
(
pdf
,
"url
"
)
.
String
())
}
A
.
Set
(
"scm_brand_name"
,
gjson
.
Get
(
info
,
"scm_brand_name"
)
.
String
())
//
A
.
Set
(
"actual_stock"
,
gjson
.
Get
(
info
,
"actual_stock"
)
.
Int
())
//
A
.
Set
(
"ac_type"
,
gjson
.
Get
(
info
,
"ac_type"
)
.
Int
())
//
A
.
Set
(
"saler_atio"
,
gjson
.
Get
(
info
,
"saler_atio"
)
.
String
())
//
A
.
Set
(
"class_id1_name"
,
gjson
.
Get
(
info
,
"class_id1_name"
)
.
String
())
//
A
.
Set
(
"class_id2_name"
,
gjson
.
Get
(
info
,
"class_id2_name"
)
.
String
())
//
//处理活动价
A
.
Set
(
"ac_type"
,
0
)
...
...
@@ -232,9 +262,9 @@ func (qs *ZiyingService) ZyGoodsDetail(ctx *gin.Context,goodsIds []string,goodsR
}
//最后写入sync map
(
*
g
oodsRes
)
.
Store
(
goods_id
,
A
)
(
G
oodsRes
)
.
Store
(
goods_id
,
A
)
}
ch
<-
GoodsRes
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment