Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
杨树贤
/
search_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
8d014493
authored
Jul 10, 2020
by
孙龙
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
up
parent
3eb86e03
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
229 additions
and
47 deletions
conf/redis_key.ini
conf/search.ini
controller/ziyin_controller.go
go.mod
model/ziyin.go
routes/router.go
service/ziyin_service.go
test/test4.go
conf/redis_key.ini
View file @
8d014493
...
@@ -19,4 +19,9 @@ SEARCH_API_ERORR_PRE=search_api_overtime_
...
@@ -19,4 +19,9 @@ SEARCH_API_ERORR_PRE=search_api_overtime_
;曝光时间记录哈希集合
;曝光时间记录哈希集合
SEARCH_SHOW_SKU_TIME
=
search_show_sku_time
SEARCH_SHOW_SKU_TIME
=
search_show_sku_time
;获取关税信息,根据goods_name,brand_name获取
;获取关税信息,根据goods_name,brand_name获取
TAX_CUSTOMS_INFO
=
tax_customs_info
TAX_CUSTOMS_INFO
=
tax_customs_info
\ No newline at end of file
[redis_ziyin]
AGG_TABLE
=
sz_ziying_class_aggs
FIRST_LISTS_TABLE
=
ziying_first_lists
ZIYING_CLASS_KEY
=
ziying_class_string
\ No newline at end of file
conf/search.ini
View file @
8d014493
...
@@ -19,3 +19,29 @@ TI_ZY_BRAND_IDS=23
...
@@ -19,3 +19,29 @@ TI_ZY_BRAND_IDS=23
# 供应商redis的首key
# 供应商redis的首key
SUPPLIER_REDIS_PRE
=
SUPPLIER_REDIS_INFO_
SUPPLIER_REDIS_PRE
=
SUPPLIER_REDIS_INFO_
[ZIYING_BRAND_REPLACE]
FH
=
FH(风华)
BL
=
BL(上海贝岭)
TE
=
TE(泰科)
FM
=
FM(富满)
CJ
=
CJ(长电)
ST
=
ST(意法)
SK
=
SK(时科)
ON
=
ON(安森美)
TM
=
TM(天微)
TP
=
TP(拓微)
TI
=
TI(德州仪器)
MD
=
MD(明达)
EG
=
EG(屹晶微)
HF
=
HF(宏发)
DY
=
DY(迪一)
MK
=
MK(米客方德)
国民=Nationz(国民技术)
中芯=SMIC(中芯国际)
富士=Fuji
Electric(富士电机)
国星=Nationstar(国星光电)
贝岭=BL(上海贝岭)
[ZIYING_CONFIG]
Index
=
liexin_ziying
\ No newline at end of file
controller/ziyin_controller.go
View file @
8d014493
package
controller
package
controller
import
(
import
(
"fmt"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin"
"net/http"
"search_server/model"
"search_server/model"
"search_server/service"
"search_server/service"
)
)
...
@@ -10,18 +10,23 @@ import (
...
@@ -10,18 +10,23 @@ import (
func
Zyh
(
ctx
*
gin
.
Context
){
func
Zyh
(
ctx
*
gin
.
Context
){
zyServiceImpl
:=
service
.
NewZyServiceImpl
()
zyhRequest
:=
make
(
map
[
string
]
string
,
0
);
zyhRequest
:=
&
model
.
ZyhRequest
{}
ctx
.
MultipartForm
()
zyhResponse
:=
&
model
.
ZyhResponse
{}
for
requestName
,
requstValue
:=
range
ctx
.
Request
.
Form
{
if
requstValue
[
0
]
!=
""
{
if
err
:=
ctx
.
ShouldBind
(
zyhRequest
);
err
!=
nil
{
zyhRequest
[
requestName
]
=
requstValue
[
0
]
ctx
.
JSON
(
http
.
StatusBadRequest
,
gin
.
H
{
"error"
:
err
.
Error
()})
}
return
}
}
zyServiceImpl
:=
service
.
NewZyServiceImpl
()
zyhResponse
:=
&
model
.
ZyhResponse
{}
err
:=
zyServiceImpl
.
Zyh
(
ctx
,
zyhRequest
,
zyhResponse
)
err
:=
zyServiceImpl
.
Zyh
(
ctx
,
zyhRequest
,
zyhResponse
)
if
err
!=
nil
{
if
err
!=
nil
{
zyhResponse
.
ErrorCode
=
1
zyhResponse
.
ErrorMsg
=
fmt
.
Sprintf
(
"%s"
,
err
)
ctx
.
JSON
(
200
,
zyhResponse
)
}
}
ctx
.
JSON
(
200
,
zyhResponse
)
}
}
go.mod
View file @
8d014493
...
@@ -7,6 +7,7 @@ require (
...
@@ -7,6 +7,7 @@ require (
github.com/gin-contrib/cors v1.3.1
github.com/gin-contrib/cors v1.3.1
github.com/gin-gonic/gin v1.6.3
github.com/gin-gonic/gin v1.6.3
github.com/go-ini/ini v1.57.0
github.com/go-ini/ini v1.57.0
github.com/go-playground/locales v0.13.0
github.com/go-sql-driver/mysql v1.5.0
github.com/go-sql-driver/mysql v1.5.0
github.com/go-xorm/xorm v0.7.9
github.com/go-xorm/xorm v0.7.9
github.com/gogo/protobuf v1.3.1 // indirect
github.com/gogo/protobuf v1.3.1 // indirect
...
...
model/ziyin.go
View file @
8d014493
package
model
package
model
type
ZyhRequest
struct
{
//type ZyhRequest struct {
Yo4tewUid
string
`form:"Yo4teW_uid"`
// Yo4tewUid string `form:"Yo4teW_uid"`
ClassIdcondition
int64
`form:"class_id/condition"`
// ClassIdcondition int64 `form:"class_id/condition"`
Brand_idCondition
string
`form:"brand_id/condition"`
// ClassId2condition int64 `form:"class_id2/condition"`
StockRank
string
`form:"stock_rank"`
//库存排序
// Brand_idCondition string `form:"brand_id/condition"`
AvailRank
string
`form:"avail_rank"`
//显示有货的
// StockRank string `form:"stock_rank"` //库存排序
ComRank
string
`form:"com_rank"`
//综合排序
// AvailRank string `form:"avail_rank"` //显示有货的
SingleRank
string
`form:"single_rank"`
//价格排序
// ComRank string `form:"com_rank"` //综合排序
PackingCondition
string
`form:"packing/condition"`
// SingleRank string `form:"single_rank"` //价格排序
EncapCondition
string
`form:"encap/condition"`
// PackingCondition string `form:"packing/condition"`
P
string
`form:"p"`
// EncapCondition string `form:"encap/condition"`
NeedAggs
string
`form:"need_aggs"`
// P int `form:"p"`
}
// NeedAggs string `form:"need_aggs"`
// GoodsNameCondition string `form:"goods_name/condition"`
//
//}
type
ZhyClassListModel
struct
{
ClassID1Name
string
`json:"class_id1_name"`
ClassID1
int64
`json:"class_id1"`
Flag
int
`json:"flag"`
ClassID1Num
int64
`json:"class_id1_num"`
ClassID2List
[]
*
ZhyClassID2List
`json:"class_id2_list"`
}
type
ZhyClassID2List
struct
{
ClassID2Name
string
`json:"class_id2_name"`
ClassID2
int64
`json:"class_id2"`
Flag
int
`json:"flag"`
ClassID2Num
int64
`json:"class_id2_num"`
}
type
ZhyClassList
[]
*
ZhyClassListModel
type
ZyhResponse
struct
{
type
ZyhResponse
struct
{
error_c
ode
int64
`json:"error_code"`
ErrorC
ode
int64
`json:"error_code"`
error_m
sg
string
`json:"error_msg"`
ErrorM
sg
string
`json:"error_msg"`
data
interface
{}
Data
interface
{}
`json:"data"`
}
}
\ No newline at end of file
routes/router.go
View file @
8d014493
...
@@ -3,15 +3,14 @@ package routes
...
@@ -3,15 +3,14 @@ package routes
import
(
import
(
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin"
"search_server/controller"
"search_server/controller"
"search_server/middleware"
)
)
//初始化路由
//初始化路由
func
InitRouter
()
*
gin
.
Engine
{
func
InitRouter
()
*
gin
.
Engine
{
r
:=
gin
.
New
()
r
:=
gin
.
New
()
r
.
Use
(
gin
.
Logger
())
//
r.Use(gin.Logger())
r
.
Use
(
gin
.
Recovery
())
//
r.Use(gin.Recovery())
r
.
Use
(
middleware
.
Cors
())
//
r.Use(middleware.Cors())
//路由
//路由
r
.
POST
(
"/search/bom/autospu"
,
controller
.
AutoSpu
)
r
.
POST
(
"/search/bom/autospu"
,
controller
.
AutoSpu
)
r
.
POST
(
"/search/bom/recommend"
,
controller
.
Recommend
)
r
.
POST
(
"/search/bom/recommend"
,
controller
.
Recommend
)
...
...
service/ziyin_service.go
View file @
8d014493
package
service
package
service
import
(
import
(
"encoding/json"
"fmt"
"fmt"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin"
"reflect"
"github.com/gomodule/redigo/redis"
"github.com/ichunt2019/logger"
"gopkg.in/olivere/elastic.v5"
"search_server/model"
"search_server/model"
"search_server/pkg/config"
"search_server/pkg/config"
"search_server/pkg/gredis"
"search_server/pkg/gredis"
"strconv"
"strings"
)
)
type
ZyServiceImpl
struct
{}
type
ZyServiceImpl
struct
{}
...
@@ -15,15 +20,15 @@ type ZyServiceImpl struct{}
...
@@ -15,15 +20,15 @@ type ZyServiceImpl struct{}
/*
/*
自营搜索
自营搜索
*/
*/
func
(
this
*
ZyServiceImpl
)
Zyh
(
ctx
*
gin
.
Context
,
req
*
model
.
ZyhRequest
,
rsp
*
model
.
ZyhResponse
)
error
{
func
(
this
*
ZyServiceImpl
)
Zyh
(
ctx
*
gin
.
Context
,
req
map
[
string
]
string
,
rsp
*
model
.
ZyhResponse
)
(
error
)
{
//fmt.Printf("%+v",req)
//
//
fmt.Printf("%+v",req)
fmt
.
Println
(
req
.
NeedAggs
)
//
fmt.Println(req.NeedAggs)
fmt
.
Println
(
5566
)
//
fmt.Println(5566)
var
(
var
(
need_aggs
bool
need_aggs
bool
_type
byte
_type
byte
)
)
if
req
.
NeedAggs
!=
""
{
if
req
[
"need_aggs"
]
!=
""
{
need_aggs
=
false
need_aggs
=
false
}
else
{
}
else
{
need_aggs
=
true
need_aggs
=
true
...
@@ -37,7 +42,7 @@ func (this *ZyServiceImpl) Zyh(ctx *gin.Context, req *model.ZyhRequest, rsp *mod
...
@@ -37,7 +42,7 @@ func (this *ZyServiceImpl) Zyh(ctx *gin.Context, req *model.ZyhRequest, rsp *mod
}
}
//设置cookie
//设置cookie
setCookie
(
ctx
,
req
)
setCookie
(
ctx
,
req
)
rsp
=
zy
(
ctx
,
req
,
_type
,
0
)
rsp
=
zy
(
req
,
_type
,
0
)
return
nil
return
nil
}
}
...
@@ -45,27 +50,123 @@ func NewZyServiceImpl() *ZyServiceImpl {
...
@@ -45,27 +50,123 @@ func NewZyServiceImpl() *ZyServiceImpl {
return
&
ZyServiceImpl
{}
return
&
ZyServiceImpl
{}
}
}
func
setCookie
(
ctx
*
gin
.
Context
,
req
*
model
.
ZyhRequest
)
error
{
func
setCookie
(
ctx
*
gin
.
Context
,
req
map
[
string
]
string
)
error
{
//接收用户id
//接收用户id
if
req
.
Yo4tewUid
!=
""
&&
req
.
Yo4tewUid
!=
"false"
{
if
req
[
"Yo4tewUid"
]
!=
""
&&
req
[
"Yo4tewUid"
]
!=
"false"
{
domain
:=
config
.
Get
(
"web.domain"
)
.
String
()
domain
:=
config
.
Get
(
"web.domain"
)
.
String
()
ctx
.
SetCookie
(
"Yo4teW_uid"
,
req
.
Yo4tewUid
,
3600
,
"/"
,
domain
,
false
,
true
)
ctx
.
SetCookie
(
"Yo4teW_uid"
,
req
[
"Yo4tewUid"
]
,
3600
,
"/"
,
domain
,
false
,
true
)
}
}
return
nil
return
nil
}
}
func
ajaxReturn
(
rsp
*
model
.
ZyhResponse
,
err_code
int64
,
err_msg
string
,
data
interface
{})
(
*
model
.
ZyhResponse
){
rsp
.
ErrorCode
=
err_code
rsp
.
ErrorMsg
=
err_msg
rsp
.
Data
=
data
return
rsp
}
//自营筛选接口数据输出
//自营筛选接口数据输出
//@param _type 1:输出所有(属性统计+分类+数据详情),2 只输出属性(属性统计)
//@param _type 1:输出所有(属性统计+分类+数据详情),2 只输出属性(属性统计)
func
zy
(
ctx
*
gin
.
Context
,
req
*
model
.
ZyhRequest
,
_type
byte
,
isCheck
byte
)
(
rsp
*
model
.
ZyhResponse
){
func
zy
(
req
map
[
string
]
string
,
_type
byte
,
isCheck
byte
)
(
rsp
*
model
.
ZyhResponse
){
fmt
.
Printf
(
"%+v"
,
req
)
var
(
fmt
.
Println
(
reflect
.
TypeOf
(
req
.
ClassIdcondition
))
classid
int64
fmt
.
Println
(
req
.
ClassIdcondition
)
err
error
redis_s_r
:=
gredis
.
Conn
(
"search_r"
)
)
rsp
=
&
model
.
ZyhResponse
{}
zhyClassList
:=
&
model
.
ZhyClassList
{}
redisConn
:=
gredis
.
Conn
(
"search_r"
)
classLight
:=
make
([]
*
model
.
ZhyClassListModel
,
0
)
defer
func
(){
defer
func
(){
redis
_s_r
.
Close
()
redis
Conn
.
Close
()
}()
}()
classList
,
err
:=
redis
.
String
(
redisConn
.
Do
(
"GET"
,
config
.
Get
(
"redis_ziyin.ZIYING_CLASS_KEY"
)))
if
(
err
!=
nil
||
classList
==
""
){
logger
.
Error
(
"暂无分类信息 %s"
,
err
)
return
ajaxReturn
(
rsp
,
1
,
"暂无分类"
,
nil
)
}
err
=
json
.
Unmarshal
([]
byte
(
classList
),
zhyClassList
)
if
err
!=
nil
{
logger
.
Error
(
"解析自营分类列表失败 s%,%s"
,
err
,
classList
)
}
//fmt.Println(classList)
classidstr
:=
req
[
"class_id/condition"
]
classid
,
err
=
strconv
.
ParseInt
(
classidstr
,
10
,
64
)
if
err
!=
nil
{
classid
=
0
}
if
classid
>
0
{
OuterLoop
:
for
_
,
item
:=
range
*
zhyClassList
{
if
classid
>
0
&&
item
.
ClassID1
==
classid
{
item
.
Flag
=
1
classLight
=
append
(
classLight
,
item
)
break
OuterLoop
}
for
_
,
item2
:=
range
item
.
ClassID2List
{
if
classid
>
0
&&
item2
.
ClassID2
==
classid
{
item2
.
Flag
=
1
classLight
=
append
(
classLight
,
item
)
break
OuterLoop
}
}
}
}
searchZiYingGoods
(
req
,
true
,
zhyClassList
,
classLight
,
_type
)
return
nil
return
nil
}
}
//自营型号查询
/*
@param type $arr 参数
* @param type $zy true为自营现货 false为其他页面
* @param type $class_list 所有自营分类
* @param type $class_light 高亮分类
* @param type $type 1:全部输出(属性统计+列表) 2:只输出属性统计 3:只输出列表
*/
func
searchZiYingGoods
(
req
map
[
string
]
string
,
zy
bool
,
classList
*
model
.
ZhyClassList
,
classLight
[]
*
model
.
ZhyClassListModel
,
aType
byte
){
var
(
goods_name_arr
[]
map
[
string
]
string
)
goods_name_arr
=
make
([]
map
[
string
]
string
,
0
)
if
req
[
"goods_name/condition"
]
!=
""
{
goodsNameCondition
:=
strings
.
ToUpper
(
req
[
"goods_name/condition"
])
ziyingBrandReplace
:=
config
.
Cfg
.
Section
(
"ZIYING_BRAND_REPLACE"
)
.
KeysHash
()
if
ziyingBrandReplace
!=
nil
&&
ziyingBrandReplace
[
goodsNameCondition
]
!=
""
{
goods_name_arr
=
append
(
goods_name_arr
,
map
[
string
]
string
{
"brand_name/condition"
:
ziyingBrandReplace
[
goodsNameCondition
]})
}
}
if
req
[
"p"
]
==
""
||
req
[
"p"
]
==
"0"
{
req
[
"p"
]
=
"1"
}
//index := config.Get("ZIYING_CONFIG")
upper_field
:=
[]
string
{
"goods_name"
,
"encap"
,
"packing"
,
"brand_name"
}
int_field
:=
[]
string
{
"status"
,
"class_id2"
,
"class_id1"
,
"single_price"
,
"stock"
,
"goods_id"
,
"goods_type"
,
"sort"
,
"brand_id"
,
"sample_class_id"
,
"sample_status"
,
"sample_max_number"
}
upper_field
=
upper_field
int_field
=
int_field
source
:=
elastic
.
NewSearchSource
()
source
.
StoredFields
(
"goods_id"
,
"goods_name"
,
"sample_max_number"
,
"sample_status"
,
"sample_class_id"
)
query
:=
elastic
.
NewBoolQuery
()
fmt
.
Println
(
query
)
for
k
,
v
:=
range
req
{
k_temp
:=
make
([]
string
,
0
)
v
=
v
if
strings
.
Contains
(
k
,
"/"
){
k_temp
=
strings
.
Split
(
k
,
"/"
)
fmt
.
Println
(
k_temp
)
}
}
}
test/test4.go
View file @
8d014493
package
main
package
main
import
(
"bytes"
"fmt"
)
func
intsToString
(
values
[]
int
)
string
{
var
buf
bytes
.
Buffer
buf
.
WriteByte
(
'['
)
for
i
,
v
:=
range
values
{
if
i
>
0
{
buf
.
WriteString
(
", "
)
}
fmt
.
Fprintf
(
&
buf
,
"%d"
,
v
)
}
buf
.
WriteByte
(
']'
)
return
buf
.
String
()
}
func
main
()
{
fmt
.
Println
(
intsToString
([]
int
{
1
,
2
,
3
}))
// "[1, 2, 3]"
}
\ No newline at end of file
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