Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation
This project
Loading...
Sign in
朱海
/
VVAS-PicGroup
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 a9a5bf21
authored
Sep 19, 2024
by
毛树良
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
[chg]d_person_record表按照店内停留时间和是否看车进行过滤:处理停留时长、停留时长分布
1 parent
aa1cc9e5
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
131 additions
and
9 deletions
src/main/java/com/viontech/keliu/entity/DFaceResidence.java
src/main/java/com/viontech/keliu/entity/DMallDayResidenceCountData.java
src/main/java/com/viontech/keliu/service/impl/PersonRecordServiceImpl.java
src/main/java/com/viontech/keliu/entity/DFaceResidence.java
0 → 100644
View file @
a9a5bf2
package
com
.
viontech
.
keliu
.
entity
;
import
lombok.Data
;
import
java.util.Date
;
@Data
public
class
DFaceResidence
{
private
Long
id
;
/**
* 商场id
*/
private
Long
mallId
;
/**
* 集团id
*/
private
Long
accountId
;
/**
* 数据日期(yyyy-MM-dd)
*/
private
Date
countdate
;
/**
* 对应人脸抓拍unid
*/
private
String
personUnid
;
/**
* 进店时间
*/
private
Date
arriveTime
;
/**
* 离店时间
*/
private
Date
leaveTime
;
/**
* 滞留时间(毫秒)
*/
private
Long
residenceTime
;
/**
* 年龄(按进店抓拍的算)
*/
private
Integer
age
;
/**
* 性别(按进店抓拍的算)
*/
private
Integer
gender
;
}
src/main/java/com/viontech/keliu/entity/DMallDayResidenceCountData.java
0 → 100644
View file @
a9a5bf2
package
com
.
viontech
.
keliu
.
entity
;
import
lombok.Data
;
import
java.util.Date
;
@Data
public
class
DMallDayResidenceCountData
{
private
Long
id
;
private
Long
mallId
;
private
Long
accountId
;
/**
* 总滞留人次
*/
private
Integer
personNum
;
/**
* 总滞留时间
*/
private
Long
totalResidenceTime
;
private
Date
countDate
;
}
src/main/java/com/viontech/keliu/service/impl/PersonRecordServiceImpl.java
View file @
a9a5bf2
package
com
.
viontech
.
keliu
.
service
.
impl
;
import
cn.hutool.core.collection.ListUtil
;
import
cn.hutool.core.date.DateUnit
;
import
cn.hutool.core.date.DateUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.viontech.keliu.dao.BGateDao
;
...
...
@@ -10,15 +11,7 @@ import com.viontech.keliu.dao.DPersonReceptionDao;
import
com.viontech.keliu.dao.DPersonRecordDao
;
import
com.viontech.keliu.dao.DPersonTrackDetailDao
;
import
com.viontech.keliu.dao.FaceRecognitionDao
;
import
com.viontech.keliu.entity.CustomerGroupResult
;
import
com.viontech.keliu.entity.DMallDayFaceRecognitionSta
;
import
com.viontech.keliu.entity.DMallHourFaceRecognitionSta
;
import
com.viontech.keliu.entity.DPersonBatch
;
import
com.viontech.keliu.entity.DPersonReception
;
import
com.viontech.keliu.entity.DPersonRecord
;
import
com.viontech.keliu.entity.DPersonTrackDetail
;
import
com.viontech.keliu.entity.Person
;
import
com.viontech.keliu.entity.PersonInOutDetail
;
import
com.viontech.keliu.entity.*
;
import
com.viontech.keliu.service.PersonRecordService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
...
...
@@ -225,6 +218,10 @@ public class PersonRecordServiceImpl implements PersonRecordService {
//修改统计数据小时
updateFaceRecognitionStaHour
(
mallId
,
countDate
,
personRecordList
);
//修改停留时长
updateMallDayResidenceCountData
(
mallId
,
countDate
,
personRecordList
);
//修改停留时长分布
updateFaceResidence
(
mallId
,
countDate
,
personRecordList
);
}
...
...
@@ -640,6 +637,50 @@ public class PersonRecordServiceImpl implements PersonRecordService {
}
private
void
updateMallDayResidenceCountData
(
Long
mallId
,
Date
countDate
,
List
<
DPersonRecord
>
personRecords
)
{
// 过滤出匹配上进出的人员记录
List
<
DPersonRecord
>
matchInOutPersonRecords
=
personRecords
.
stream
().
filter
(
d
->
d
.
getArriveTime
()
!=
null
&&
d
.
getLeaveTime
()
!=
null
).
collect
(
Collectors
.
toList
());
Long
totalResidenceTime
=
0L
;
for
(
DPersonRecord
personRecord
:
matchInOutPersonRecords
)
{
long
residenceTime
=
DateUtil
.
between
(
personRecord
.
getArriveTime
(),
personRecord
.
getLeaveTime
(),
DateUnit
.
SECOND
);
totalResidenceTime
=
totalResidenceTime
+
residenceTime
;
}
DMallDayResidenceCountData
updateSta
=
new
DMallDayResidenceCountData
();
updateSta
.
setMallId
(
mallId
);
updateSta
.
setCountDate
(
countDate
);
updateSta
.
setPersonNum
(
matchInOutPersonRecords
.
size
());
updateSta
.
setTotalResidenceTime
(
totalResidenceTime
);
// 更新停留时长
String
updateSql
=
"update d_mall_day_residence_count_data set person_num = ?,total_residence_time = ? where mall_id = ? and count_date = ?;"
;
jdbcTemplate
.
update
(
updateSql
,
updateSta
.
getPersonNum
(),
updateSta
.
getTotalResidenceTime
(),
mallId
,
countDate
);
}
private
void
updateFaceResidence
(
Long
mallId
,
Date
countDate
,
List
<
DPersonRecord
>
personRecords
)
{
// 过滤出匹配上进出的人员记录
List
<
DPersonRecord
>
matchInOutPersonRecords
=
personRecords
.
stream
().
filter
(
d
->
d
.
getArriveTime
()
!=
null
&&
d
.
getLeaveTime
()
!=
null
).
collect
(
Collectors
.
toList
());
// 查询已有数据
String
sql
=
"select id,mall_id,countdate,person_unid from d_face_residence where mall_id = ? and countdate = ?;"
;
List
<
DFaceResidence
>
list
=
jdbcTemplate
.
query
(
sql
,
new
BeanPropertyRowMapper
<>(
DFaceResidence
.
class
),
mallId
,
countDate
);
if
(
CollectionUtils
.
isEmpty
(
list
))
{
return
;
}
// 过滤掉的人员记录id
List
<
DFaceResidence
>
deleteFaceResidences
=
new
ArrayList
<>();
for
(
DFaceResidence
dFaceResidence
:
list
)
{
if
(!
matchInOutPersonRecords
.
contains
(
dFaceResidence
.
getPersonUnid
()))
{
deleteFaceResidences
.
add
(
dFaceResidence
);
}
}
// 删除过滤掉人员的数据
if
(
CollectionUtils
.
isNotEmpty
(
deleteFaceResidences
))
{
String
deleteSql
=
"delete from d_face_residence where mall_id = :mallId and countdate = :countdate and id = :id;"
;
SqlParameterSource
[]
updateSources
=
SqlParameterSourceUtils
.
createBatch
(
deleteFaceResidences
.
toArray
());
namedParameterJdbcTemplate
.
batchUpdate
(
deleteSql
,
updateSources
);
}
}
...
...
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