Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation
This project
Loading...
Sign in
谢明辉
/
VVAS-Match
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit cb16fb78
authored
Aug 28, 2024
by
朱海
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
[chg]特征库合并
1 parent
fba0e3f1
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
129 additions
and
9 deletions
src/main/java/com/viontech/match/controller/MainController.java
src/main/java/com/viontech/match/entity/vo/RequestVo.java
src/main/java/com/viontech/match/enumeration/CommandEnum.java
src/main/java/com/viontech/match/service/PersonService.java
src/main/java/com/viontech/match/service/PoolService.java
src/main/java/com/viontech/match/controller/MainController.java
View file @
cb16fb7
...
@@ -49,6 +49,12 @@ public class MainController {
...
@@ -49,6 +49,12 @@ public class MainController {
return
personService
.
updatePerson
(
requestVo
);
return
personService
.
updatePerson
(
requestVo
);
case
CountMatchPerson:
case
CountMatchPerson:
return
personService
.
countMatchPerson
(
requestVo
);
return
personService
.
countMatchPerson
(
requestVo
);
case
DelPoolData:
return
poolService
.
deletePoolData
(
requestVo
);
case
DelStaffPoolData:
return
poolService
.
deleteStaffPoolData
(
requestVo
);
case
UpdateStaff:
return
personService
.
updateStaff
(
requestVo
);
default
:
default
:
return
ResponseVo
.
commandNotFound
(
rid
);
return
ResponseVo
.
commandNotFound
(
rid
);
}
}
...
...
src/main/java/com/viontech/match/entity/vo/RequestVo.java
View file @
cb16fb7
...
@@ -67,6 +67,10 @@ public class RequestVo {
...
@@ -67,6 +67,10 @@ public class RequestVo {
//暂时无用
//暂时无用
private
FaceFeature
newFaceFeature
;
private
FaceFeature
newFaceFeature
;
private
Long
mallId
;
private
List
<
String
>
fidList
;
public
void
setPoolId
(
String
poolId
)
{
public
void
setPoolId
(
String
poolId
)
{
this
.
poolId
=
poolId
.
toLowerCase
();
this
.
poolId
=
poolId
.
toLowerCase
();
}
}
...
...
src/main/java/com/viontech/match/enumeration/CommandEnum.java
View file @
cb16fb7
...
@@ -14,5 +14,8 @@ public enum CommandEnum {
...
@@ -14,5 +14,8 @@ public enum CommandEnum {
QueryPersonPool
,
QueryPersonPool
,
MatchPerson
,
MatchPerson
,
UpdatePerson
,
UpdatePerson
,
CountMatchPerson
CountMatchPerson
,
DelPoolData
,
DelStaffPoolData
,
UpdateStaff
;
}
}
src/main/java/com/viontech/match/service/PersonService.java
View file @
cb16fb7
...
@@ -21,11 +21,14 @@ import org.elasticsearch.action.search.SearchResponse;
...
@@ -21,11 +21,14 @@ import org.elasticsearch.action.search.SearchResponse;
import
org.elasticsearch.action.support.IndicesOptions
;
import
org.elasticsearch.action.support.IndicesOptions
;
import
org.elasticsearch.client.RequestOptions
;
import
org.elasticsearch.client.RequestOptions
;
import
org.elasticsearch.client.RestHighLevelClient
;
import
org.elasticsearch.client.RestHighLevelClient
;
import
org.elasticsearch.client.core.CountRequest
;
import
org.elasticsearch.client.core.CountResponse
;
import
org.elasticsearch.common.xcontent.XContentType
;
import
org.elasticsearch.common.xcontent.XContentType
;
import
org.elasticsearch.index.query.BoolQueryBuilder
;
import
org.elasticsearch.index.query.BoolQueryBuilder
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.elasticsearch.index.query.RangeQueryBuilder
;
import
org.elasticsearch.index.query.RangeQueryBuilder
;
import
org.elasticsearch.index.query.TermQueryBuilder
;
import
org.elasticsearch.index.query.TermQueryBuilder
;
import
org.elasticsearch.index.query.TermsQueryBuilder
;
import
org.elasticsearch.index.query.functionscore.ScriptScoreQueryBuilder
;
import
org.elasticsearch.index.query.functionscore.ScriptScoreQueryBuilder
;
import
org.elasticsearch.index.reindex.BulkByScrollResponse
;
import
org.elasticsearch.index.reindex.BulkByScrollResponse
;
import
org.elasticsearch.index.reindex.DeleteByQueryRequest
;
import
org.elasticsearch.index.reindex.DeleteByQueryRequest
;
...
@@ -187,11 +190,18 @@ public class PersonService {
...
@@ -187,11 +190,18 @@ public class PersonService {
Pool
pool
=
new
Pool
();
Pool
pool
=
new
Pool
();
pool
.
setPersonPoolId
(
id
);
pool
.
setPersonPoolId
(
id
);
if
(
poolService
.
existPool
(
id
))
{
if
(
poolService
.
existPool
(
id
))
{
pool
.
setStatus
(
0
);
//根据mallId判断特征池是否存在该mall的数据
List
<
Person
>
face
=
matchPerson
(
rid
,
id
,
requestVo
.
getPerson
(),
0
,
size
,
agg
);
boolean
hasData
=
hasData
(
id
,
requestVo
.
getPerson
().
getMallId
());
matchFaces
.
addAll
(
face
);
if
(
hasData
)
{
List
<
Person
>
body
=
matchPerson
(
rid
,
id
,
requestVo
.
getPerson
(),
1
,
size
,
agg
);
pool
.
setStatus
(
0
);
matchBodies
.
addAll
(
body
);
List
<
Person
>
face
=
matchPerson
(
rid
,
id
,
requestVo
.
getPerson
(),
0
,
size
,
agg
);
matchFaces
.
addAll
(
face
);
List
<
Person
>
body
=
matchPerson
(
rid
,
id
,
requestVo
.
getPerson
(),
1
,
size
,
agg
);
matchBodies
.
addAll
(
body
);
}
else
{
pool
.
setStatus
(
2
);
}
}
else
{
}
else
{
pool
.
setStatus
(
1
);
pool
.
setStatus
(
1
);
}
}
...
@@ -253,6 +263,26 @@ public class PersonService {
...
@@ -253,6 +263,26 @@ public class PersonService {
return
ResponseVo
.
success
(
rid
);
return
ResponseVo
.
success
(
rid
);
}
}
public
ResponseVo
updateStaff
(
RequestVo
requestVo
)
{
String
rid
=
requestVo
.
getRid
();
Person
person
=
requestVo
.
getPerson
();
String
personId
=
person
.
getPersonId
();
String
poolId
=
requestVo
.
getPoolId
();
log
.
info
(
"店员修改操作开始,poolId:[{}],personId:[{}]"
,
poolId
,
personId
);
try
{
if
(!
poolService
.
existPool
(
poolId
))
{
poolService
.
createPool
(
requestVo
,
false
);
}
BulkResponse
bulkItemResponses
=
addPerson
(
poolId
,
Collections
.
singletonList
(
person
));
}
catch
(
Exception
e
)
{
log
.
error
(
"店员修改操作异常"
,
e
);
return
ResponseVo
.
error
(
rid
,
"update failed"
);
}
log
.
info
(
"店员修改操作完成,poolId:[{}],personId:[{}]"
,
poolId
,
personId
);
return
ResponseVo
.
success
(
rid
);
}
/**
/**
* 添加人员
* 添加人员
*
*
...
@@ -273,6 +303,7 @@ public class PersonService {
...
@@ -273,6 +303,7 @@ public class PersonService {
String
personId
=
person
.
getPersonId
();
String
personId
=
person
.
getPersonId
();
Date
personCountTime
=
person
.
getCounttime
();
Date
personCountTime
=
person
.
getCounttime
();
String
direction
=
person
.
getDirection
();
String
direction
=
person
.
getDirection
();
Long
mallId
=
person
.
getMallId
();
//Long gateId = person.getGateId();
//Long gateId = person.getGateId();
Integer
bodyType
=
person
.
getBodyType
();
Integer
bodyType
=
person
.
getBodyType
();
String
personChannelSerialNum
=
person
.
getChannelSerialNum
();
String
personChannelSerialNum
=
person
.
getChannelSerialNum
();
...
@@ -288,7 +319,7 @@ public class PersonService {
...
@@ -288,7 +319,7 @@ public class PersonService {
.
source
(
XContentType
.
JSON
,
"personId"
,
personId
,
"unid"
,
unid
,
.
source
(
XContentType
.
JSON
,
"personId"
,
personId
,
"unid"
,
unid
,
"data"
,
feature
,
"fid"
,
fid
,
"age"
,
age
,
"gender"
,
gender
,
"body_type"
,
bodyType
,
"data"
,
feature
,
"fid"
,
fid
,
"age"
,
age
,
"gender"
,
gender
,
"body_type"
,
bodyType
,
"counttime"
,
personCountTime
==
null
?
null
:
Constant
.
DATE_FORMAT
.
get
().
format
(
personCountTime
),
"counttime"
,
personCountTime
==
null
?
null
:
Constant
.
DATE_FORMAT
.
get
().
format
(
personCountTime
),
"channelSerialNum"
,
personChannelSerialNum
,
"gateId"
,
gateId
,
"direction"
,
direction
);
"channelSerialNum"
,
personChannelSerialNum
,
"gateId"
,
gateId
,
"direction"
,
direction
,
"mallId"
,
mallId
);
bulkRequest
.
add
(
indexRequest
);
bulkRequest
.
add
(
indexRequest
);
}
}
}
}
...
@@ -316,7 +347,7 @@ public class PersonService {
...
@@ -316,7 +347,7 @@ public class PersonService {
.
source
(
XContentType
.
JSON
,
"personId"
,
personId
,
"unid"
,
unid
,
.
source
(
XContentType
.
JSON
,
"personId"
,
personId
,
"unid"
,
unid
,
"body"
,
feature
,
"fid"
,
fid
,
"age"
,
age
,
"gender"
,
gender
,
"body_type"
,
bodyType
,
"body"
,
feature
,
"fid"
,
fid
,
"age"
,
age
,
"gender"
,
gender
,
"body_type"
,
bodyType
,
"counttime"
,
counttime
==
null
?
null
:
Constant
.
DATE_FORMAT
.
get
().
format
(
counttime
)
"counttime"
,
counttime
==
null
?
null
:
Constant
.
DATE_FORMAT
.
get
().
format
(
counttime
)
,
"channelSerialNum"
,
channelSerialNum
,
"gateId"
,
gateId
,
"direction"
,
direction
);
,
"channelSerialNum"
,
channelSerialNum
,
"gateId"
,
gateId
,
"direction"
,
direction
,
"mallId"
,
mallId
);
bulkRequest
.
add
(
indexRequest
);
bulkRequest
.
add
(
indexRequest
);
}
}
}
}
...
@@ -345,6 +376,21 @@ public class PersonService {
...
@@ -345,6 +376,21 @@ public class PersonService {
return
client
.
deleteByQuery
(
deleteByQueryRequest
,
RequestOptions
.
DEFAULT
);
return
client
.
deleteByQuery
(
deleteByQueryRequest
,
RequestOptions
.
DEFAULT
);
}
}
public
BulkByScrollResponse
deletePersonByMallId
(
String
poolId
,
Long
mallId
)
throws
IOException
{
DeleteByQueryRequest
deleteByQueryRequest
=
new
DeleteByQueryRequest
(
poolId
)
.
setQuery
(
new
TermQueryBuilder
(
"mallId"
,
mallId
))
.
setRefresh
(
true
);
return
client
.
deleteByQuery
(
deleteByQueryRequest
,
RequestOptions
.
DEFAULT
);
}
public
BulkByScrollResponse
deletePersonByFid
(
String
poolId
,
List
<
String
>
fidList
)
throws
IOException
{
DeleteByQueryRequest
deleteByQueryRequest
=
new
DeleteByQueryRequest
(
poolId
)
.
setQuery
(
new
TermsQueryBuilder
(
"fid"
,
fidList
))
.
setRefresh
(
true
);
return
client
.
deleteByQuery
(
deleteByQueryRequest
,
RequestOptions
.
DEFAULT
);
}
/**
/**
* 人员匹配入口
* 人员匹配入口
*
*
...
@@ -442,7 +488,10 @@ public class PersonService {
...
@@ -442,7 +488,10 @@ public class PersonService {
"(cosineSimilarity(params.body, 'body') + 1) / 2 * 100"
,
Collections
.
singletonMap
(
"body"
,
feature
));
"(cosineSimilarity(params.body, 'body') + 1) / 2 * 100"
,
Collections
.
singletonMap
(
"body"
,
feature
));
boolQuery
.
filter
(
QueryBuilders
.
existsQuery
(
"body"
));
boolQuery
.
filter
(
QueryBuilders
.
existsQuery
(
"body"
));
}
}
//根据mallId过滤
if
(
person
.
getMallId
()
!=
null
)
{
boolQuery
.
filter
().
add
(
QueryBuilders
.
termQuery
(
"mallId"
,
person
.
getMallId
()));
}
// 根据通道号过滤
// 根据通道号过滤
List
<
String
>
channelSerialNums
=
person
.
getChannelSerialNums
();
List
<
String
>
channelSerialNums
=
person
.
getChannelSerialNums
();
if
(
CollectionUtils
.
isNotEmpty
(
channelSerialNums
))
{
if
(
CollectionUtils
.
isNotEmpty
(
channelSerialNums
))
{
...
@@ -558,4 +607,22 @@ public class PersonService {
...
@@ -558,4 +607,22 @@ public class PersonService {
}
}
public
boolean
hasData
(
String
poolId
,
Long
mallId
)
throws
IOException
{
log
.
info
(
"判断特征池:{}是否存在mallId:{}的数据"
,
poolId
,
mallId
);
if
(
mallId
==
null
||
mallId
==
0L
)
{
return
true
;
}
//店员库才需要判断是否有数据,并且重建库
if
(!
poolId
.
contains
(
"staff"
))
{
return
true
;
}
BoolQueryBuilder
builder
=
new
BoolQueryBuilder
();
builder
.
filter
(
QueryBuilders
.
termQuery
(
"mallId"
,
mallId
));
CountRequest
countRequest
=
new
CountRequest
(
poolId
);
countRequest
.
query
(
builder
);
CountResponse
response
=
client
.
count
(
countRequest
,
RequestOptions
.
DEFAULT
);
log
.
info
(
"特征池:{}中mallId:{}的数据量为:{}"
,
poolId
,
mallId
,
response
.
getCount
());
return
response
.
getCount
()
>
0
;
}
}
}
src/main/java/com/viontech/match/service/PoolService.java
View file @
cb16fb7
...
@@ -146,6 +146,46 @@ public class PoolService {
...
@@ -146,6 +146,46 @@ public class PoolService {
}
}
}
}
public
ResponseVo
deletePoolData
(
RequestVo
requestVo
)
throws
Exception
{
String
rid
=
requestVo
.
getRid
();
Integer
flushPool
=
requestVo
.
getFlushPool
();
String
poolId
=
requestVo
.
getPoolId
();
Long
mallId
=
requestVo
.
getMallId
();
log
.
info
(
"特征池删除mallId:{}数据操作开始:[{}]"
,
mallId
,
poolId
);
try
{
personService
.
deletePersonByMallId
(
poolId
,
mallId
);
log
.
info
(
"特征池删除mallId:{}操作完成:[{}]"
,
mallId
,
poolId
);
return
ResponseVo
.
success
(
rid
);
}
catch
(
ElasticsearchStatusException
e
)
{
if
(
e
.
status
()
==
RestStatus
.
NOT_FOUND
)
{
return
ResponseVo
.
poolIdNotExists
(
rid
);
}
else
{
return
ResponseVo
.
error
(
rid
,
e
.
getDetailedMessage
());
}
}
}
public
ResponseVo
deleteStaffPoolData
(
RequestVo
requestVo
)
throws
Exception
{
String
rid
=
requestVo
.
getRid
();
Integer
flushPool
=
requestVo
.
getFlushPool
();
String
poolId
=
requestVo
.
getPoolId
();
List
<
String
>
fidList
=
requestVo
.
getFidList
();
log
.
info
(
"店员特征池删除数据操作开始:[{}]"
,
poolId
);
try
{
personService
.
deletePersonByFid
(
poolId
,
fidList
);
log
.
info
(
"店员特征池删除操作完成:[{}]"
,
poolId
);
return
ResponseVo
.
success
(
rid
);
}
catch
(
ElasticsearchStatusException
e
)
{
if
(
e
.
status
()
==
RestStatus
.
NOT_FOUND
)
{
return
ResponseVo
.
poolIdNotExists
(
rid
);
}
else
{
return
ResponseVo
.
error
(
rid
,
e
.
getDetailedMessage
());
}
}
}
/**
/**
* 修改特征池(添加人员)
* 修改特征池(添加人员)
*
*
...
...
Write
Preview
Markdown
is supported
Attach a file
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 post a comment