Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
杨树贤
/
bom_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
ce2e459c
authored
Jul 14, 2021
by
hcy001
Browse files
Options
_('Browse Files')
Download
Plain Diff
Merge branch 'master' of
http://119.23.72.7/mushishixian/bom_server
parents
b3910cdb
5f8e2f63
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
220 additions
and
39 deletions
configs/config.go
configs/mysql.go
internal/common/common.go
internal/logic/bom_item.go
internal/logic/bom_matching.go
internal/logic/goods.go
internal/logic/match.go
internal/logic/search.go
update.sh
configs/config.go
View file @
ce2e459c
...
@@ -53,6 +53,7 @@ type Api struct {
...
@@ -53,6 +53,7 @@ type Api struct {
type
Oss
struct
{
type
Oss
struct
{
UploadKey
string
`ini:"upload_key"`
UploadKey
string
`ini:"upload_key"`
IsDebug
int
`ini:"is_debug"`
}
}
var
DatabaseSetting
=
&
Database
{}
var
DatabaseSetting
=
&
Database
{}
...
...
configs/mysql.go
View file @
ce2e459c
...
@@ -36,7 +36,7 @@ func GetDBCms() DbInfo {
...
@@ -36,7 +36,7 @@ func GetDBCms() DbInfo {
"mysql"
,
"mysql"
,
"ichuntcms"
,
"ichuntcms"
,
"ichuntcms#zsyM"
,
"ichuntcms#zsyM"
,
"192.168.
2.23
2"
,
"192.168.
1.25
2"
,
"3306"
,
"3306"
,
"ichuntcms"
,
"ichuntcms"
,
}
}
...
@@ -47,7 +47,7 @@ func GetDBLiexin() DbInfo {
...
@@ -47,7 +47,7 @@ func GetDBLiexin() DbInfo {
"mysql"
,
"mysql"
,
"liexin"
,
"liexin"
,
"liexin#zsyM"
,
"liexin#zsyM"
,
"192.168.
2.23
2"
,
"192.168.
1.25
2"
,
"3306"
,
"3306"
,
"liexin"
,
"liexin"
,
}
}
...
...
internal/common/common.go
View file @
ce2e459c
package
common
package
common
import
(
import
(
"bom_server/configs"
"crypto/md5"
"crypto/md5"
"encoding/hex"
"encoding/hex"
"encoding/json"
"fmt"
"github.com/shopspring/decimal"
"github.com/shopspring/decimal"
"github.com/syyongx/php2go"
"github.com/syyongx/php2go"
"reflect"
"reflect"
"regexp"
"strconv"
"strconv"
"strings"
"time"
)
)
/*
提取字符串的字母数字并去掉空格
@param string target_str 目标字符串
@return 返回格式化后字符串
*/
func
DrawLetterNum
(
target_str
string
)
(
str
string
)
{
if
target_str
==
""
{
return
""
}
replace
,
_
:=
regexp
.
Compile
(
"[^A-Za-z0-9]+"
)
return
strings
.
ToUpper
(
replace
.
ReplaceAllString
(
target_str
,
""
))
}
/*
定时任务打印输出
@parm jsonStr 需要json输出的内容
*/
func
PrintDebug
(
str
...
interface
{})
{
flag
:=
configs
.
OssSetting
.
IsDebug
if
flag
==
0
{
return
}
temp
:=
"---"
+
time
.
Now
()
.
Format
(
"2006-01-02 15:04:05"
);
for
_
,
jsonStr
:=
range
str
{
if
v
,
p
:=
jsonStr
.
(
string
);
p
{
temp
=
temp
+
"---"
+
v
}
else
{
jsonData
,
err
:=
json
.
Marshal
(
jsonStr
)
if
err
!=
nil
{
fmt
.
Println
(
"错误:-----"
,
err
)
}
temp
=
temp
+
"---"
+
string
(
jsonData
)
}
}
fmt
.
Println
(
temp
)
}
// Md5 md5()
// Md5 md5()
func
Md5
(
str
string
)
string
{
func
Md5
(
str
string
)
string
{
hash
:=
md5
.
New
()
hash
:=
md5
.
New
()
...
...
internal/logic/bom_item.go
View file @
ce2e459c
...
@@ -2,6 +2,7 @@ package logic
...
@@ -2,6 +2,7 @@ package logic
import
(
import
(
"bom_server/configs"
"bom_server/configs"
"bom_server/internal/common"
"bom_server/internal/model"
"bom_server/internal/model"
"encoding/json"
"encoding/json"
"errors"
"errors"
...
@@ -94,11 +95,20 @@ func UpdateBomItem(bomId, bomItemId int) (err error) {
...
@@ -94,11 +95,20 @@ func UpdateBomItem(bomId, bomItemId int) (err error) {
bomItems
=
GetStandardAttrs
(
bomItems
)
bomItems
=
GetStandardAttrs
(
bomItems
)
//第一次去精确匹配,没有再去模糊匹配
//第一次去精确匹配,没有再去模糊匹配
var
goodsMapList
[]
GoodsMap
var
goodsMapList
[]
GoodsMap
goodsMapList
,
err
=
getUpdateGoodsData
(
bomId
,
bomItems
,
where
.
DeliveryType
,
where
.
Sort
,
client
,
true
)
itemsStatus
:=
2
goodsMapList
,
err
=
getUpdateGoodsData
(
bomId
,
bomItems
,
where
.
DeliveryType
,
where
.
Sort
,
client
,
true
,
false
)
common
.
PrintDebug
(
"精确匹配:"
,
goodsMapList
)
if
len
(
goodsMapList
)
==
0
{
if
len
(
goodsMapList
)
==
0
{
goodsMapList
,
err
=
getUpdateGoodsData
(
bomId
,
bomItems
,
where
.
DeliveryType
,
where
.
Sort
,
client
,
false
)
//替代型号匹配
if
err
!=
nil
{
goodsMapList
,
err
=
getUpdateGoodsData
(
bomId
,
bomItems
,
where
.
DeliveryType
,
where
.
Sort
,
client
,
false
,
true
)
return
common
.
PrintDebug
(
"替代型号匹配:"
,
goodsMapList
)
itemsStatus
=
5
;
//替代物料匹配
if
len
(
goodsMapList
)
==
0
{
goodsMapList
,
err
=
getUpdateGoodsData
(
bomId
,
bomItems
,
where
.
DeliveryType
,
where
.
Sort
,
client
,
false
,
false
)
common
.
PrintDebug
(
"模糊匹配:"
,
goodsMapList
)
if
len
(
goodsMapList
)
!=
0
{
itemsStatus
=
6
;
//模糊匹配
}
}
}
}
}
//fmt.Println(goodsMapList)
//fmt.Println(goodsMapList)
...
@@ -111,7 +121,7 @@ func UpdateBomItem(bomId, bomItemId int) (err error) {
...
@@ -111,7 +121,7 @@ func UpdateBomItem(bomId, bomItemId int) (err error) {
return
return
}
}
}
else
{
}
else
{
err
=
UpdateGoodsData
(
goodsMapList
)
err
=
UpdateGoodsData
(
goodsMapList
,
itemsStatus
)
if
err
!=
nil
{
if
err
!=
nil
{
return
return
}
}
...
...
internal/logic/bom_matching.go
View file @
ce2e459c
package
logic
package
logic
import
(
import
(
"bom_server/internal/common"
"bom_server/internal/model"
"bom_server/internal/model"
"github.com/prometheus/common/log"
"github.com/prometheus/common/log"
"math"
"math"
...
@@ -28,7 +29,7 @@ func GetBomMatching(bomId, bomItemId int) (bomMatching model.BomItemMatching) {
...
@@ -28,7 +29,7 @@ func GetBomMatching(bomId, bomItemId int) (bomMatching model.BomItemMatching) {
}
}
//根据matchingList去修改
//根据matchingList去修改
func
BatchSaveMatchings
(
bomId
int
,
matchingList
[]
model
.
BomItemMatching
)
(
err
error
)
{
func
BatchSaveMatchings
(
bomId
int
,
matchingList
[]
model
.
BomItemMatching
,
status
...
int
)
(
err
error
)
{
bomIdStr
:=
strconv
.
FormatInt
(
int64
(
bomId
),
10
)
bomIdStr
:=
strconv
.
FormatInt
(
int64
(
bomId
),
10
)
tableEnd
:=
string
(
bomIdStr
[
len
(
bomIdStr
)
-
1
])
tableEnd
:=
string
(
bomIdStr
[
len
(
bomIdStr
)
-
1
])
tableName
:=
"lie_bom_item_matching_"
+
tableEnd
tableName
:=
"lie_bom_item_matching_"
+
tableEnd
...
@@ -56,9 +57,34 @@ func BatchSaveMatchings(bomId int, matchingList []model.BomItemMatching) (err er
...
@@ -56,9 +57,34 @@ func BatchSaveMatchings(bomId int, matchingList []model.BomItemMatching) (err er
}
else
{
}
else
{
itemStatus
=
3
itemStatus
=
3
}
}
is_select
:=
1
;
if
len
(
status
)
>
0
{
//todo 增加类型: 5 替代型号匹配 6 模糊匹配
itemStatus
=
status
[
0
]
if
itemStatus
==
4
||
itemStatus
==
5
||
itemStatus
==
6
{
is_select
=
0
}
}
//查询需求数量 跟 当前库存比较
var
bomInfo
model
.
BomItem
model
.
Db
.
Table
(
"lie_bom_item_"
+
tableEnd
)
.
Where
(
"bom_item_id = ?"
,
matching
.
BomItemID
)
.
First
(
&
bomInfo
)
if
bomInfo
.
Number
>
matching
.
Stock
{
common
.
PrintDebug
(
"精确匹配算出来库存不足"
)
is_select
=
0
;
itemStatus
=
3
}
if
itemStatus
==
3
{
is_select
=
0
;
}
err
=
model
.
Db
.
Table
(
"lie_bom_item_"
+
tableEnd
)
.
Where
(
"bom_item_id = ?"
,
matching
.
BomItemID
)
.
err
=
model
.
Db
.
Table
(
"lie_bom_item_"
+
tableEnd
)
.
Where
(
"bom_item_id = ?"
,
matching
.
BomItemID
)
.
Updates
(
map
[
string
]
interface
{}{
"item_status"
:
itemStatus
,
"update_time"
:
now
,
"is_select"
:
1
})
.
Error
Updates
(
map
[
string
]
interface
{}{
"item_status"
:
itemStatus
,
"update_time"
:
now
,
"is_select"
:
is_select
})
.
Error
if
err
!=
nil
{
if
err
!=
nil
{
common
.
PrintDebug
(
err
)
return
return
}
}
//更新商品价格和库存的队列
//更新商品价格和库存的队列
...
...
internal/logic/goods.go
View file @
ce2e459c
...
@@ -2,6 +2,7 @@ package logic
...
@@ -2,6 +2,7 @@ package logic
import
(
import
(
"bom_server/configs"
"bom_server/configs"
"bom_server/internal/common"
"bom_server/internal/model"
"bom_server/internal/model"
"encoding/json"
"encoding/json"
"github.com/ichunt2019/go-rabbitmq/utils/rabbitmq"
"github.com/ichunt2019/go-rabbitmq/utils/rabbitmq"
...
@@ -22,8 +23,12 @@ type GoodsMap struct {
...
@@ -22,8 +23,12 @@ type GoodsMap struct {
DeliveryType
int
DeliveryType
int
}
}
func
UpdateGoodsData
(
goodsMapList
[]
GoodsMap
)
(
err
error
)
{
func
UpdateGoodsData
(
goodsMapList
[]
GoodsMap
,
status
...
int
)
(
err
error
)
{
//根据goodsIds去商品服务获取对应的商品信息
//根据goodsIds去商品服务获取对应的商品信息
if
len
(
goodsMapList
)
==
0
{
return
}
var
(
var
(
goodsIds
[]
string
goodsIds
[]
string
bomId
int
bomId
int
...
@@ -61,15 +66,25 @@ func UpdateGoodsData(goodsMapList []GoodsMap) (err error) {
...
@@ -61,15 +66,25 @@ func UpdateGoodsData(goodsMapList []GoodsMap) (err error) {
}
}
}
}
}
}
//先找出没有匹配到商品的进行批量修改状态
//先找出没有匹配到商品的进行批量修改状态
err
=
batchUpdateItemStatus
(
bomId
,
noGoodsInfoItemIdList
)
err
=
batchUpdateItemStatus
(
bomId
,
noGoodsInfoItemIdList
)
if
err
!=
nil
{
if
err
!=
nil
{
return
return
}
}
if
len
(
status
)
>
0
{
//todo 增加类型: 5 替代型号匹配 6 模糊匹配
err
=
BatchSaveMatchings
(
bomId
,
bomMatchingList
,
status
[
0
])
if
err
!=
nil
{
return
}
}
else
{
err
=
BatchSaveMatchings
(
bomId
,
bomMatchingList
)
err
=
BatchSaveMatchings
(
bomId
,
bomMatchingList
)
if
err
!=
nil
{
if
err
!=
nil
{
return
return
}
}
}
return
return
}
}
...
@@ -89,6 +104,9 @@ func GetGoodsInfo(goodsIdsStr string) (goodsList []model.ApiGoods, err error) {
...
@@ -89,6 +104,9 @@ func GetGoodsInfo(goodsIdsStr string) (goodsList []model.ApiGoods, err error) {
}
}
//fmt.Println(goodsIdsStr)
//fmt.Println(goodsIdsStr)
resp
,
err
:=
req
.
Post
(
goodsServerUrl
+
"/synchronization"
,
params
)
resp
,
err
:=
req
.
Post
(
goodsServerUrl
+
"/synchronization"
,
params
)
common
.
PrintDebug
(
"请求商品详情:"
,
goodsServerUrl
+
"/synchronization"
,
" 参数:"
,
params
,
"结果:"
,
len
(
resp
.
String
()))
if
err
!=
nil
{
if
err
!=
nil
{
return
return
}
}
...
@@ -194,6 +212,8 @@ func MatchGoodsInfo(goods model.ApiGoods, goodsMap GoodsMap) (bomMatching model.
...
@@ -194,6 +212,8 @@ func MatchGoodsInfo(goods model.ApiGoods, goodsMap GoodsMap) (bomMatching model.
//阶梯价处理
//阶梯价处理
if
len
(
goods
.
LadderPrice
)
>
0
{
if
len
(
goods
.
LadderPrice
)
>
0
{
ladderPriceStr
,
err
:=
json
.
Marshal
(
goods
.
LadderPrice
)
ladderPriceStr
,
err
:=
json
.
Marshal
(
goods
.
LadderPrice
)
common
.
PrintDebug
(
string
(
ladderPriceStr
))
if
err
!=
nil
{
if
err
!=
nil
{
return
model
.
BomItemMatching
{},
err
return
model
.
BomItemMatching
{},
err
}
}
...
...
internal/logic/match.go
View file @
ce2e459c
...
@@ -91,42 +91,80 @@ func SearchGoods(bomId int, bomItems []model.BomItem, deliveryType, sort int, wg
...
@@ -91,42 +91,80 @@ func SearchGoods(bomId int, bomItems []model.BomItem, deliveryType, sort int, wg
}
else
{
}
else
{
needDealBomItems
=
bomItems
[
i
:
i
+
perNumber
]
needDealBomItems
=
bomItems
[
i
:
i
+
perNumber
]
}
}
//第一次先去精确匹配
//todo 精确匹配: 第一次先去精确匹配
goodsMapList
,
err
:=
getUpdateGoodsData
(
bomId
,
needDealBomItems
,
deliveryType
,
sort
,
client
,
true
)
common
.
PrintDebug
(
"精确匹配型号:"
,
needDealBomItems
)
exactList
,
err
:=
getUpdateGoodsData
(
bomId
,
needDealBomItems
,
deliveryType
,
sort
,
client
,
true
,
false
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
common
.
PrintDebug
(
"精确匹配结果:"
,
exactList
)
//要删除已经精确匹配过的bomItem,得到需要去模糊匹配的商品
//要删除已经精确匹配过的bomItem,得到需要去模糊匹配的商品
var
fuzzyBomItems
[]
model
.
BomItem
var
fuzzyBomItems
[]
model
.
BomItem
for
_
,
bomItem
:=
range
needDealBomItems
{
for
_
,
bomItem
:=
range
needDealBomItems
{
//不在精确匹配结果里面的,同时商品名称不能为空的
//不在精确匹配结果里面的,同时商品名称不能为空的
if
!
checkInGoodsMap
(
bomItem
,
goodsMapList
)
&&
bomItem
.
GoodsName
!=
""
{
if
!
checkInGoodsMap
(
bomItem
,
exactList
)
{
fuzzyBomItems
=
append
(
fuzzyBomItems
,
bomItem
)
fuzzyBomItems
=
append
(
fuzzyBomItems
,
bomItem
)
}
}
}
}
//第二次去模糊匹配
fuzzyGoodsMapList
,
err
:=
getUpdateGoodsData
(
bomId
,
fuzzyBomItems
,
deliveryType
,
sort
,
client
,
false
)
//todo 替代型号匹配 2021.4.17 替代型号参与匹配,优先取原始型号,原始型号无法购买再推荐替代型号
common
.
PrintDebug
(
"替代型号匹配型号:"
,
fuzzyBomItems
)
AlikeGoodsMapList
,
err
:=
getUpdateGoodsData
(
bomId
,
fuzzyBomItems
,
deliveryType
,
sort
,
client
,
false
,
true
)
if
err
!=
nil
{
return
err
}
common
.
PrintDebug
(
"替代型号匹配结果:"
,
AlikeGoodsMapList
)
//删除已经类似料匹配的型号
var
fuzzyBomItems2
[]
model
.
BomItem
for
_
,
bomItem
:=
range
fuzzyBomItems
{
//不在精确匹配结果里面的,同时商品名称不能为空的
if
!
checkInGoodsMap
(
bomItem
,
AlikeGoodsMapList
)
{
fuzzyBomItems2
=
append
(
fuzzyBomItems2
,
bomItem
)
}
}
//todo 模糊匹配
common
.
PrintDebug
(
"模糊匹配型号:"
,
fuzzyBomItems2
)
fuzzyGoodsMapList
,
err
:=
getUpdateGoodsData
(
bomId
,
fuzzyBomItems2
,
deliveryType
,
sort
,
client
,
false
,
false
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
common
.
PrintDebug
(
"模糊匹配结果"
,
fuzzyGoodsMapList
)
//再删除模糊匹配到的数据,就得到完全没有匹配的数据了
//再删除模糊匹配到的数据,就得到完全没有匹配的数据了
var
notMatchBomItems
[]
model
.
BomItem
var
notMatchBomItems
[]
model
.
BomItem
var
needMatchGoodsMapList
=
append
(
goodsMapList
,
fuzzyGoodsMapList
...
)
for
_
,
bomItem
:=
range
fuzzyBomItems2
{
for
_
,
bomItem
:=
range
needDealBomItems
{
if
!
checkInGoodsMap
(
bomItem
,
fuzzyGoodsMapList
)
{
if
!
checkInGoodsMap
(
bomItem
,
needMatchGoodsMapList
)
{
notMatchBomItems
=
append
(
notMatchBomItems
,
bomItem
)
notMatchBomItems
=
append
(
notMatchBomItems
,
bomItem
)
}
}
}
}
common
.
PrintDebug
(
"没有匹配到的bom 明细"
,
notMatchBomItems
)
//先去处理没有匹配到的数据
//先去处理没有匹配到的数据
err
=
UpdateNoMatchBomItem
(
notMatchBomItems
,
true
)
err
=
UpdateNoMatchBomItem
(
notMatchBomItems
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
//
然后去处理匹配到的
数据
//
精确匹配
数据
err
=
UpdateGoodsData
(
needMatchGoodsMap
List
)
err
=
UpdateGoodsData
(
exact
List
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
//替代物料数据
err
=
UpdateGoodsData
(
AlikeGoodsMapList
,
5
)
if
err
!=
nil
{
return
err
}
//模糊匹配
err
=
UpdateGoodsData
(
fuzzyGoodsMapList
,
6
)
if
err
!=
nil
{
return
err
}
}
}
return
return
}
}
...
@@ -180,14 +218,14 @@ func checkInGoodsMap(bom model.BomItem, goodsMapList []GoodsMap) bool {
...
@@ -180,14 +218,14 @@ func checkInGoodsMap(bom model.BomItem, goodsMapList []GoodsMap) bool {
return
false
return
false
}
}
func
getUpdateGoodsData
(
bomId
int
,
bomItems
[]
model
.
BomItem
,
deliveryType
,
sort
int
,
client
*
es
.
Client
,
rawSearch
bool
)
(
goodsMapList
[]
GoodsMap
,
err
error
)
{
func
getUpdateGoodsData
(
bomId
int
,
bomItems
[]
model
.
BomItem
,
deliveryType
,
sort
int
,
client
*
es
.
Client
,
rawSearch
bool
,
isAlike
bool
)
(
goodsMapList
[]
GoodsMap
,
err
error
)
{
if
len
(
bomItems
)
==
0
{
if
len
(
bomItems
)
==
0
{
return
return
}
}
index
:=
configs
.
ESSetting
.
GoodsIndexName
index
:=
configs
.
ESSetting
.
GoodsIndexName
//如果是大陆收货(type=1),就要包含专卖,其中自营单独查
//如果是大陆收货(type=1),就要包含专卖,其中自营单独查
index
=
index
+
",zhuanmai,liexin_ziying"
index
=
index
+
",zhuanmai,liexin_ziying"
goodsMapList
,
err
=
search
(
index
,
bomId
,
bomItems
,
deliveryType
,
sort
,
client
,
rawSearch
)
goodsMapList
,
err
=
search
(
index
,
bomId
,
bomItems
,
deliveryType
,
sort
,
client
,
rawSearch
,
isAlike
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
...
internal/logic/search.go
View file @
ce2e459c
...
@@ -7,11 +7,10 @@ import (
...
@@ -7,11 +7,10 @@ import (
"context"
"context"
"encoding/json"
"encoding/json"
es
"gopkg.in/olivere/elastic.v5"
es
"gopkg.in/olivere/elastic.v5"
"regexp"
"strings"
"strings"
)
)
func
search
(
index
string
,
bomId
int
,
bomItems
[]
model
.
BomItem
,
deliveryType
,
sort
int
,
client
*
es
.
Client
,
rawSearch
bool
)
(
goodsMapList
[]
GoodsMap
,
err
error
)
{
func
search
(
index
string
,
bomId
int
,
bomItems
[]
model
.
BomItem
,
deliveryType
,
sort
int
,
client
*
es
.
Client
,
rawSearch
bool
,
isAlike
bool
)
(
goodsMapList
[]
GoodsMap
,
err
error
)
{
//先去自营查一遍
//先去自营查一遍
search
:=
client
.
MultiSearch
()
.
Index
(
index
)
search
:=
client
.
MultiSearch
()
.
Index
(
index
)
//是否已经搜索过标签
//是否已经搜索过标签
...
@@ -33,8 +32,12 @@ func search(index string, bomId int, bomItems []model.BomItem, deliveryType, sor
...
@@ -33,8 +32,12 @@ func search(index string, bomId int, bomItems []model.BomItem, deliveryType, sor
paramsRawSearch
=
true
paramsRawSearch
=
true
}
}
//构建一个goods_name对应的bomItems列表
//构建一个goods_name对应的bomItems列表
searchRequest
:=
getSearchParams
(
index
,
bom
,
sort
,
paramsRawSearch
)
searchRequest
:=
getSearchParams
(
index
,
bom
,
sort
,
paramsRawSearch
,
rawSearch
,
isAlike
)
searchFlag
=
true
searchFlag
=
true
common
.
PrintDebug
(
"查询es索引,"
,
"是否原生rawSearch:"
,
rawSearch
,
" 是否类似:"
,
isAlike
,
index
)
common
.
PrintDebug
(
searchRequest
.
Body
())
//randInt := rand.Intn(10)
//randInt := rand.Intn(10)
//time.Sleep(10 * time.Millisecond)
//time.Sleep(10 * time.Millisecond)
search
.
Add
(
searchRequest
)
search
.
Add
(
searchRequest
)
...
@@ -44,6 +47,10 @@ func search(index string, bomId int, bomItems []model.BomItem, deliveryType, sor
...
@@ -44,6 +47,10 @@ func search(index string, bomId int, bomItems []model.BomItem, deliveryType, sor
return
nil
,
err
return
nil
,
err
}
}
res
,
err
:=
search
.
Do
(
context
.
Background
())
res
,
err
:=
search
.
Do
(
context
.
Background
())
common
.
PrintDebug
(
res
.
Responses
)
if
err
!=
nil
{
if
err
!=
nil
{
return
return
}
}
...
@@ -80,12 +87,12 @@ func search(index string, bomId int, bomItems []model.BomItem, deliveryType, sor
...
@@ -80,12 +87,12 @@ func search(index string, bomId int, bomItems []model.BomItem, deliveryType, sor
}
}
//构建请求参数
//构建请求参数
func
getSearchParams
(
index
string
,
bomItem
model
.
BomItem
,
sort
int
,
flag
bool
)
(
searchRequest
*
es
.
SearchRequest
)
{
func
getSearchParams
(
index
string
,
bomItem
model
.
BomItem
,
sort
int
,
flag
bool
,
rawSearch
bool
,
isAlike
bool
)
(
searchRequest
*
es
.
SearchRequest
)
{
//fmt.Println("商品名称 : ", bomItem.GoodsName)
//fmt.Println("商品名称 : ", bomItem.GoodsName)
//fmt.Println("参数列表 : ", bomItem.AttrList)
//fmt.Println("参数列表 : ", bomItem.AttrList)
bomItem
.
Encap
=
TransformEncap
(
bomItem
.
Encap
)
bomItem
.
Encap
=
TransformEncap
(
bomItem
.
Encap
)
//fmt.Println("封装 : ", bomItem.Encap)
//fmt.Println("封装 : ", bomItem.Encap)
query
:=
getTermQuery
(
bomItem
,
sort
,
flag
)
query
:=
getTermQuery
(
bomItem
,
sort
,
flag
,
rawSearch
,
isAlike
)
source
:=
es
.
NewSearchSource
()
.
Query
(
query
)
source
:=
es
.
NewSearchSource
()
.
Query
(
query
)
if
sort
==
1
{
if
sort
==
1
{
//source.Sort("_score", false)
//source.Sort("_score", false)
...
@@ -100,19 +107,17 @@ func getSearchParams(index string, bomItem model.BomItem, sort int, flag bool) (
...
@@ -100,19 +107,17 @@ func getSearchParams(index string, bomItem model.BomItem, sort int, flag bool) (
//source.Sort("_score", false)
//source.Sort("_score", false)
source
.
Sort
(
"stock"
,
false
)
source
.
Sort
(
"stock"
,
false
)
}
}
source
=
source
.
From
(
0
)
.
Size
(
1
)
source
=
source
.
From
(
0
)
.
Size
(
1
)
searchRequest
=
es
.
NewSearchRequest
()
.
Source
(
source
)
searchRequest
=
es
.
NewSearchRequest
()
.
Source
(
source
)
return
searchRequest
return
searchRequest
}
}
//构建term条件
//构建term条件
func
getTermQuery
(
bomItem
model
.
BomItem
,
sort
int
,
flag
bool
)
(
query
*
es
.
BoolQuery
)
{
func
getTermQuery
(
bomItem
model
.
BomItem
,
sort
int
,
flag
bool
,
rawSearch
bool
,
isAlike
bool
)
(
query
*
es
.
BoolQuery
)
{
query
=
es
.
NewBoolQuery
()
query
=
es
.
NewBoolQuery
()
goodsName
:=
common
.
DrawLetterNum
(
bomItem
.
GoodsName
)
if
flag
{
if
flag
{
field
:=
"auto_goods_name.raw"
replace
,
_
:=
regexp
.
Compile
(
"[^A-Za-z0-9]+"
)
goodsName
:=
replace
.
ReplaceAllString
(
bomItem
.
GoodsName
,
""
)
goodsName
=
strings
.
ToUpper
(
goodsName
)
//用于判断下面的miniShould,因为下面的参数里面,如果出现阻值的,用的是should语句
//用于判断下面的miniShould,因为下面的参数里面,如果出现阻值的,用的是should语句
//为了保证所有参数都必须参与搜索,所以要用miniShould去做限制
//为了保证所有参数都必须参与搜索,所以要用miniShould去做限制
//var shouldNumber int
//var shouldNumber int
...
@@ -145,9 +150,12 @@ func getTermQuery(bomItem model.BomItem, sort int, flag bool) (query *es.BoolQue
...
@@ -145,9 +150,12 @@ func getTermQuery(bomItem model.BomItem, sort int, flag bool) (query *es.BoolQue
}
else
{
}
else
{
query
=
query
.
Must
(
es
.
NewTermsQuery
(
"attr_bom"
,
"$_$"
))
query
=
query
.
Must
(
es
.
NewTermsQuery
(
"attr_bom"
,
"$_$"
))
}
}
}
else
{
query
=
query
.
Filter
(
es
.
NewTermQuery
(
field
,
goodsName
))
}
}
if
goodsName
!=
""
{
query
=
query
.
Filter
(
es
.
NewTermQuery
(
"auto_goods_name.raw"
,
goodsName
))
}
//判断是否存在brandName并且匹配不到对应的标准品牌
//判断是否存在brandName并且匹配不到对应的标准品牌
if
bomItem
.
BrandName
!=
""
{
if
bomItem
.
BrandName
!=
""
{
bomItem
.
BrandName
=
strings
.
ToUpper
(
bomItem
.
BrandName
)
bomItem
.
BrandName
=
strings
.
ToUpper
(
bomItem
.
BrandName
)
...
@@ -157,19 +165,33 @@ func getTermQuery(bomItem model.BomItem, sort int, flag bool) (query *es.BoolQue
...
@@ -157,19 +165,33 @@ func getTermQuery(bomItem model.BomItem, sort int, flag bool) (query *es.BoolQue
if
bomItem
.
Encap
!=
""
{
if
bomItem
.
Encap
!=
""
{
query
=
query
.
Must
(
es
.
NewTermQuery
(
"attr_bom"
,
"FZ€"
+
bomItem
.
Encap
))
query
=
query
.
Must
(
es
.
NewTermQuery
(
"attr_bom"
,
"FZ€"
+
bomItem
.
Encap
))
}
}
//搜索库存
query
=
query
.
Should
(
es
.
NewRangeQuery
(
"stock"
)
.
Gte
(
bomItem
.
Number
*
bomItem
.
Amount
))
//精确匹配
}
else
{
if
rawSearch
{
query
=
query
.
Must
(
es
.
NewTermQuery
(
"auto_goods_name"
,
bomItem
.
GoodsName
))
query
=
query
.
Must
(
es
.
NewRangeQuery
(
"stock"
)
.
Gte
(
bomItem
.
Number
*
bomItem
.
Amount
))
//搜索库存
}
else
{
query
=
query
.
Should
(
es
.
NewRangeQuery
(
"stock"
)
.
Gte
(
bomItem
.
Number
*
bomItem
.
Amount
))
//搜索库存
}
}
else
if
isAlike
&&
goodsName
!=
""
{
//todo 推荐型号搜索
query
=
query
.
Must
(
es
.
NewTermsQuery
(
"alike_spu_name.raw"
,
goodsName
))
}
else
if
goodsName
!=
""
{
query
=
query
.
Must
(
es
.
NewTermQuery
(
"goods_name"
,
goodsName
))
}
}
common
.
PrintDebug
(
"isalike:"
,
isAlike
)
//只显示库存大于0的数据
//只显示库存大于0的数据
if
rawSearch
==
false
{
//不是精确匹配
query
.
Must
(
es
.
NewRangeQuery
(
"stock"
)
.
Gt
(
0
))
query
.
Must
(
es
.
NewRangeQuery
(
"stock"
)
.
Gt
(
0
))
}
//按价格排序
//按价格排序
//if sort == 2 || sort == 1 {
//if sort == 2 || sort == 1 {
// query = query.Filter(es.NewRangeQuery("single_price").Gt(0))
// query = query.Filter(es.NewRangeQuery("single_price").Gt(0))
//}
//}
//只显示起订量大于0
//只显示起订量大于0
query
.
Must
(
es
.
NewRangeQuery
(
"moq"
)
.
Gt
(
0
))
query
.
Must
(
es
.
NewRangeQuery
(
"moq"
)
.
Gt
(
0
)
.
Lte
(
bomItem
.
Number
*
bomItem
.
Amount
))
//todo 2021.4.17 起订量高于需求数量的排除;
if
configs
.
ApiSetting
.
Mode
!=
"debug"
{
if
configs
.
ApiSetting
.
Mode
!=
"debug"
{
query
=
query
.
Filter
(
es
.
NewTermQuery
(
"status"
,
1
))
query
=
query
.
Filter
(
es
.
NewTermQuery
(
"status"
,
1
))
}
}
...
...
update.sh
0 → 100644
View file @
ce2e459c
#适用于更新GOSKU代码服务,并且重启代码
#!/bin/bash
Cur_Dir
=
$(
pwd
)
echo
$Cur_Dir
cd
$Cur_Dir
git reset
--hard
HEAD
git pull
rm
-f
${
Cur_Dir
}
"/cmd/main"
export
GO111MODULE
=
on
go env
-w
GOPROXY
=
https://goproxy.cn,direct
branch_name
=
$(
git name-rev
--name-only
HEAD
)
echo
$branch_name
git pull origin
$branch_name
go build
-o
${
Cur_Dir
}
"/cmd/main"
${
Cur_Dir
}
"/cmd/main.go"
go build
-o
${
Cur_Dir
}
"/server/main"
${
Cur_Dir
}
"/server/main.go"
chmod +x
${
Cur_Dir
}
"/cmd/main"
chmod +x
${
Cur_Dir
}
"/server/main"
chmod +x
${
Cur_Dir
}
"/update.sh"
supervisorctl restart bom_server_cmd:
*
supervisorctl restart bom_server_http_60010:
*
echo
"更新执行成功"
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