Commit 02c382e1 by zhuht

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

1 parent 346c3f3b
......@@ -56,8 +56,19 @@ public class DMallDayFaceRecognitionSta {
private Long staffCount;
/**
* 接待顾客数
*/
private Long receptionCustomerCount;
/**
* 平均接待秒数
*/
private Long avgReceptionSecond;
/**
* 接待批次数
*/
private Long receptionGroupCount;
}
\ No newline at end of file
......@@ -89,6 +89,7 @@ public class PersonRecordServiceImpl implements PersonRecordService {
Long excludePersonTime = getExcludePersonTime(mallId);
Integer filterAttention = getFilterAttention(mallId);
boolean needFilter = filterAttention == 1;
//出入口gateId
List<Long> gateIds = bGateDao.getMallInOutGateIds(mallId);
//按personUnid分组
......@@ -205,13 +206,13 @@ public class PersonRecordServiceImpl implements PersonRecordService {
}
//计算区域的总停留时间,小于10分钟的排除掉
long totalTime = personTrackDetailList.stream().mapToLong(DPersonTrackDetail::getVisitDuration).sum();
if (totalTime < excludePersonTime * 60 * 1000) {
if (needFilter && totalTime < excludePersonTime * 60 * 1000) {
continue;
}
}
//排除掉短时间在店内的记录
if (dPersonRecord.getVisitDuration() < excludePersonTime * 60 * 1000) {
if (needFilter && dPersonRecord.getVisitDuration() < excludePersonTime * 60 * 1000) {
continue;
}
......@@ -249,15 +250,16 @@ public class PersonRecordServiceImpl implements PersonRecordService {
}
//修改统计数据
updateFaceRecognitionSta(mallId, countDate, personRecordList);
updateFaceRecognitionSta(mallId, countDate, personRecordList, needFilter);
//修改统计数据小时
updateFaceRecognitionStaHour(mallId, countDate, personRecordList);
//修改停留时长
updateMallDayResidenceCountData(mallId, countDate, personRecordList);
//修改停留时长分布
updateFaceResidence(mallId, countDate, personRecordList);
updateFaceRecognitionStaHour(mallId, countDate, personRecordList, needFilter);
if (needFilter) {
//修改停留时长
updateMallDayResidenceCountData(mallId, countDate, personRecordList);
//修改停留时长分布
updateFaceResidence(mallId, countDate, personRecordList);
}
}
......@@ -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));
//顾客总人数
long customerCount = personRecordMap.keySet().size();
......@@ -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> 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 = ?;";
......@@ -579,14 +586,24 @@ public class PersonRecordServiceImpl implements PersonRecordService {
updateSta.setFamilyGroupNum(customerGroupResult.getDoubleFamilyGroup() + customerGroupResult.getMultipleFamilyGroup());
updateSta.setLoverGroupNum(customerGroupResult.getDoubleLoverGroup());
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 = ?;";
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.setReceptionCustomerCount(receptionCustomerCount);
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));
List<DPersonRecord> personList = new ArrayList<>();
personUnidMap.forEach((k, v) -> {
......@@ -664,9 +681,15 @@ public class PersonRecordServiceImpl implements PersonRecordService {
});
if (!CollectionUtils.isEmpty(updateList)) {
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());
namedParameterJdbcTemplate.batchUpdate(updateSql, updateSources);
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;";
SqlParameterSource[] updateSources = SqlParameterSourceUtils.createBatch(updateList.toArray());
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!