Commit 02c382e1 by zhuht

[chg]增加统计接待人数批次数逻辑;

1 parent 346c3f3b
...@@ -56,8 +56,19 @@ public class DMallDayFaceRecognitionSta { ...@@ -56,8 +56,19 @@ public class DMallDayFaceRecognitionSta {
private Long staffCount; private Long staffCount;
/**
* 接待顾客数
*/
private Long receptionCustomerCount;
/**
* 平均接待秒数
*/
private Long avgReceptionSecond;
/**
* 接待批次数
*/
private Long receptionGroupCount;
} }
\ No newline at end of file \ No newline at end of file
...@@ -89,6 +89,7 @@ public class PersonRecordServiceImpl implements PersonRecordService { ...@@ -89,6 +89,7 @@ public class PersonRecordServiceImpl implements PersonRecordService {
Long excludePersonTime = getExcludePersonTime(mallId); Long excludePersonTime = getExcludePersonTime(mallId);
Integer filterAttention = getFilterAttention(mallId); Integer filterAttention = getFilterAttention(mallId);
boolean needFilter = filterAttention == 1;
//出入口gateId //出入口gateId
List<Long> gateIds = bGateDao.getMallInOutGateIds(mallId); List<Long> gateIds = bGateDao.getMallInOutGateIds(mallId);
//按personUnid分组 //按personUnid分组
...@@ -205,13 +206,13 @@ public class PersonRecordServiceImpl implements PersonRecordService { ...@@ -205,13 +206,13 @@ public class PersonRecordServiceImpl implements PersonRecordService {
} }
//计算区域的总停留时间,小于10分钟的排除掉 //计算区域的总停留时间,小于10分钟的排除掉
long totalTime = personTrackDetailList.stream().mapToLong(DPersonTrackDetail::getVisitDuration).sum(); long totalTime = personTrackDetailList.stream().mapToLong(DPersonTrackDetail::getVisitDuration).sum();
if (totalTime < excludePersonTime * 60 * 1000) { if (needFilter && totalTime < excludePersonTime * 60 * 1000) {
continue; continue;
} }
} }
//排除掉短时间在店内的记录 //排除掉短时间在店内的记录
if (dPersonRecord.getVisitDuration() < excludePersonTime * 60 * 1000) { if (needFilter && dPersonRecord.getVisitDuration() < excludePersonTime * 60 * 1000) {
continue; continue;
} }
...@@ -249,15 +250,16 @@ public class PersonRecordServiceImpl implements PersonRecordService { ...@@ -249,15 +250,16 @@ public class PersonRecordServiceImpl implements PersonRecordService {
} }
//修改统计数据 //修改统计数据
updateFaceRecognitionSta(mallId, countDate, personRecordList); updateFaceRecognitionSta(mallId, countDate, personRecordList, needFilter);
//修改统计数据小时 //修改统计数据小时
updateFaceRecognitionStaHour(mallId, countDate, personRecordList); updateFaceRecognitionStaHour(mallId, countDate, personRecordList, needFilter);
if (needFilter) {
//修改停留时长 //修改停留时长
updateMallDayResidenceCountData(mallId, countDate, personRecordList); updateMallDayResidenceCountData(mallId, countDate, personRecordList);
//修改停留时长分布 //修改停留时长分布
updateFaceResidence(mallId, countDate, personRecordList); updateFaceResidence(mallId, countDate, personRecordList);
}
} }
...@@ -520,7 +522,7 @@ public class PersonRecordServiceImpl implements PersonRecordService { ...@@ -520,7 +522,7 @@ public class PersonRecordServiceImpl implements PersonRecordService {
} }
private void updateFaceRecognitionSta(Long mallId, Date countDate, List<DPersonRecord> personRecords) { private void updateFaceRecognitionSta(Long mallId, Date countDate, List<DPersonRecord> personRecords, boolean needFilter) {
Map<String, DPersonRecord> personRecordMap = personRecords.stream().collect(Collectors.toMap(DPersonRecord::getPersonUnid, dPersonRecord -> dPersonRecord, (k1, k2) -> k1)); Map<String, DPersonRecord> personRecordMap = personRecords.stream().collect(Collectors.toMap(DPersonRecord::getPersonUnid, dPersonRecord -> dPersonRecord, (k1, k2) -> k1));
//顾客总人数 //顾客总人数
long customerCount = personRecordMap.keySet().size(); long customerCount = personRecordMap.keySet().size();
...@@ -534,6 +536,11 @@ public class PersonRecordServiceImpl implements PersonRecordService { ...@@ -534,6 +536,11 @@ public class PersonRecordServiceImpl implements PersonRecordService {
Map<Integer, Long> maleStageMap = malePersonList.stream().collect(Collectors.groupingBy(DPersonRecord::getAge, Collectors.counting())); Map<Integer, Long> maleStageMap = malePersonList.stream().collect(Collectors.groupingBy(DPersonRecord::getAge, Collectors.counting()));
//女性年龄 //女性年龄
Map<Integer, Long> femaleStageMap = femalePersonList.stream().collect(Collectors.groupingBy(DPersonRecord::getAge, Collectors.counting())); Map<Integer, Long> femaleStageMap = femalePersonList.stream().collect(Collectors.groupingBy(DPersonRecord::getAge, Collectors.counting()));
// 接待记录
List<DPersonRecord> receptionList = personRecordMap.values().stream().filter(personRecord -> personRecord.getReceptionCount() > 0).toList();
long receptionCustomerCount = receptionList.size();
long receptionGroupCount = receptionList.stream().map(DPersonRecord::getGroupUnid).distinct().count();
long avgReceptionSecond = (long) receptionList.stream().mapToLong(DPersonRecord::getReceptionDuration).average().orElse(0.0) / 1000;
String sql = "select mall_id,countdate,counttime,person_count,staff_count,female_stage,male_stage from d_mall_day_face_recognition_sta where mall_id = ? and countdate = ?;"; String sql = "select mall_id,countdate,counttime,person_count,staff_count,female_stage,male_stage from d_mall_day_face_recognition_sta where mall_id = ? and countdate = ?;";
...@@ -579,14 +586,24 @@ public class PersonRecordServiceImpl implements PersonRecordService { ...@@ -579,14 +586,24 @@ public class PersonRecordServiceImpl implements PersonRecordService {
updateSta.setFamilyGroupNum(customerGroupResult.getDoubleFamilyGroup() + customerGroupResult.getMultipleFamilyGroup()); updateSta.setFamilyGroupNum(customerGroupResult.getDoubleFamilyGroup() + customerGroupResult.getMultipleFamilyGroup());
updateSta.setLoverGroupNum(customerGroupResult.getDoubleLoverGroup()); updateSta.setLoverGroupNum(customerGroupResult.getDoubleLoverGroup());
updateSta.setPartnerGroupNum(customerGroupResult.getDoublePartnerGroup() + customerGroupResult.getMultiplePartnerGroup()); updateSta.setPartnerGroupNum(customerGroupResult.getDoublePartnerGroup() + customerGroupResult.getMultiplePartnerGroup());
String updateSql = "update d_mall_day_face_recognition_sta set person_count = ?,custom_count = ?,male_count = ?,female_count = ?,male_stage = ?, female_stage = ?, group_num = ?, single_group_num = ?, double_group_num = ?, multiple_group_num = ?, family_group_num = ?, lover_group_num = ?, partner_group_num = ? where mall_id = ? and countdate = ?;"; updateSta.setReceptionCustomerCount(receptionCustomerCount);
jdbcTemplate.update(updateSql, updateSta.getPersonCount(), updateSta.getCustomCount(), updateSta.getMaleCount(), updateSta.getFemaleCount(), updateSta.getMaleStage(), updateSta.getFemaleStage(), updateSta.getGroupNum(), updateSta.getSingleGroupNum(), updateSta.getDoubleGroupNum(), updateSta.getMultipleGroupNum(), updateSta.getFamilyGroupNum(), updateSta.getLoverGroupNum(), updateSta.getPartnerGroupNum(), mallId, countDate); updateSta.setReceptionGroupCount(receptionGroupCount);
updateSta.setAvgReceptionSecond(avgReceptionSecond);
if (needFilter) {
// 需要过滤时,更新顾客人数相关字段
String updateSql = "update d_mall_day_face_recognition_sta set person_count = ?,custom_count = ?,male_count = ?,female_count = ?,male_stage = ?, female_stage = ?, group_num = ?, single_group_num = ?, double_group_num = ?, multiple_group_num = ?, family_group_num = ?, lover_group_num = ?, partner_group_num = ? ,reception_customer_count = ?, avg_reception_second = ? ,reception_group_count = ? where mall_id = ? and countdate = ?;";
jdbcTemplate.update(updateSql, updateSta.getPersonCount(), updateSta.getCustomCount(), updateSta.getMaleCount(), updateSta.getFemaleCount(), updateSta.getMaleStage(), updateSta.getFemaleStage(), updateSta.getGroupNum(), updateSta.getSingleGroupNum(), updateSta.getDoubleGroupNum(), updateSta.getMultipleGroupNum(), updateSta.getFamilyGroupNum(), updateSta.getLoverGroupNum(), updateSta.getPartnerGroupNum(), updateSta.getReceptionCustomerCount(), updateSta.getAvgReceptionSecond(), updateSta.getReceptionGroupCount(), mallId, countDate);
} else {
// 不过滤时,只更新批次相关
String updateSql = "update d_mall_day_face_recognition_sta set group_num = ?, single_group_num = ?, double_group_num = ?, multiple_group_num = ?, family_group_num = ?, lover_group_num = ?, partner_group_num = ?, reception_customer_count = ?, avg_reception_second = ? ,reception_group_count = ? where mall_id = ? and countdate = ?;";
jdbcTemplate.update(updateSql, updateSta.getGroupNum(), updateSta.getSingleGroupNum(), updateSta.getDoubleGroupNum(), updateSta.getMultipleGroupNum(), updateSta.getFamilyGroupNum(), updateSta.getLoverGroupNum(), updateSta.getPartnerGroupNum(), updateSta.getReceptionCustomerCount(), updateSta.getAvgReceptionSecond(), updateSta.getReceptionGroupCount(), mallId, countDate);
}
} }
} }
private void updateFaceRecognitionStaHour(Long mallId, Date countDate, List<DPersonRecord> personRecords) { private void updateFaceRecognitionStaHour(Long mallId, Date countDate, List<DPersonRecord> personRecords, boolean needFilter) {
Map<String, List<DPersonRecord>> personUnidMap = personRecords.stream().collect(Collectors.groupingBy(DPersonRecord::getPersonUnid)); Map<String, List<DPersonRecord>> personUnidMap = personRecords.stream().collect(Collectors.groupingBy(DPersonRecord::getPersonUnid));
List<DPersonRecord> personList = new ArrayList<>(); List<DPersonRecord> personList = new ArrayList<>();
personUnidMap.forEach((k, v) -> { personUnidMap.forEach((k, v) -> {
...@@ -664,9 +681,15 @@ public class PersonRecordServiceImpl implements PersonRecordService { ...@@ -664,9 +681,15 @@ public class PersonRecordServiceImpl implements PersonRecordService {
}); });
if (!CollectionUtils.isEmpty(updateList)) { if (!CollectionUtils.isEmpty(updateList)) {
if (needFilter) {
String updateSql = "update d_mall_hour_face_recognition_sta set person_count = :personCount,custom_count = :customCount,male_count = :maleCount,female_count = :femaleCount,male_stage = :maleStage, female_stage = :femaleStage, group_num = :groupNum, single_group_num = :singleGroupNum, double_group_num = :doubleGroupNum, multiple_group_num = :multipleGroupNum, family_group_num = :familyGroupNum, lover_group_num = :loverGroupNum, partner_group_num = :partnerGroupNum where mall_id = :mallId and countdate = :countdate and counttime = :counttime;"; String updateSql = "update d_mall_hour_face_recognition_sta set person_count = :personCount,custom_count = :customCount,male_count = :maleCount,female_count = :femaleCount,male_stage = :maleStage, female_stage = :femaleStage, group_num = :groupNum, single_group_num = :singleGroupNum, double_group_num = :doubleGroupNum, multiple_group_num = :multipleGroupNum, family_group_num = :familyGroupNum, lover_group_num = :loverGroupNum, partner_group_num = :partnerGroupNum where mall_id = :mallId and countdate = :countdate and counttime = :counttime;";
SqlParameterSource[] updateSources = SqlParameterSourceUtils.createBatch(updateList.toArray()); SqlParameterSource[] updateSources = SqlParameterSourceUtils.createBatch(updateList.toArray());
namedParameterJdbcTemplate.batchUpdate(updateSql, updateSources); namedParameterJdbcTemplate.batchUpdate(updateSql, updateSources);
} else {
String updateSql = "update d_mall_hour_face_recognition_sta set group_num = :groupNum, single_group_num = :singleGroupNum, double_group_num = :doubleGroupNum, multiple_group_num = :multipleGroupNum, family_group_num = :familyGroupNum, lover_group_num = :loverGroupNum, partner_group_num = :partnerGroupNum where mall_id = :mallId and countdate = :countdate and counttime = :counttime;";
SqlParameterSource[] updateSources = SqlParameterSourceUtils.createBatch(updateList.toArray());
namedParameterJdbcTemplate.batchUpdate(updateSql, updateSources);
}
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!