Commit aa1cc9e5 by 朱海

[add]小时级顾客人数修改

1 parent cabfe10c
package com.viontech.keliu.entity;
import lombok.Data;
import java.util.Date;
/**
* Created with IntelliJ IDEA.
*
* @author: zhuhai
* Date: 2024-08-13
* Time: 18:12
*/
@Data
public class DMallHourFaceRecognitionSta {
private Long mallId;
private Long personCount;
private Long customCount;
private Long maleCount;
private Long femaleCount;
private String maleStage;
private String femaleStage;
private Date counttime;
private int[] maleStageArr;
private int[] femaleStageArr;
private Date countdate;
private Long groupNum;
private Long singleGroupNum;
private Long doubleGroupNum;
private Long multipleGroupNum;
private Long familyGroupNum;
/**
* 情侣组
*/
private Long loverGroupNum;
/**
* 伙伴组
*/
private Long partnerGroupNum;
private Long staffCount;
}
\ No newline at end of file
......@@ -12,6 +12,7 @@ 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;
......@@ -25,6 +26,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
......@@ -34,9 +38,11 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
......@@ -78,6 +84,8 @@ public class PersonRecordServiceImpl implements PersonRecordService {
private List<Long> personBatchMallIds;
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Override
......@@ -214,6 +222,8 @@ public class PersonRecordServiceImpl implements PersonRecordService {
}
//修改统计数据
updateFaceRecognitionSta(mallId, countDate, personRecordList);
//修改统计数据小时
updateFaceRecognitionStaHour(mallId, countDate, personRecordList);
......@@ -546,6 +556,93 @@ public class PersonRecordServiceImpl implements PersonRecordService {
}
private void updateFaceRecognitionStaHour(Long mallId, Date countDate, List<DPersonRecord> personRecords) {
Map<String, List<DPersonRecord>> personUnidMap = personRecords.stream().collect(Collectors.groupingBy(DPersonRecord::getPersonUnid));
List<DPersonRecord> personList = new ArrayList<>();
personUnidMap.forEach((k,v) -> {
DPersonRecord dPersonRecord = v.stream().sorted(Comparator.comparing(DPersonRecord::getArriveTime)).findFirst().get();
personList.add(dPersonRecord);
});
Map<String, List<DPersonRecord>> hourMap = personList.stream().collect(Collectors.groupingBy(d -> DateUtil.format(d.getArriveTime(), "yyyy-MM-dd HH:00:00")));
String sql = "select mall_id,countdate,counttime,person_count,staff_count from d_mall_hour_face_recognition_sta where mall_id = ? and countdate = ?;";
List<DMallHourFaceRecognitionSta> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(DMallHourFaceRecognitionSta.class), mallId, countDate);
Map<String, DMallHourFaceRecognitionSta> hourStaMap = list.stream().collect(Collectors.toMap(d -> DateUtil.format(d.getCounttime(), "yyyy-MM-dd HH:00:00"), Function.identity(), (v1, v2) -> v1));
List<DMallHourFaceRecognitionSta> updateList = new ArrayList<>();
hourStaMap.forEach((k,v) -> {
List<DPersonRecord> dPersonRecords = hourMap.get(k);
long customerCount = 0L;
long maleCount = 0L;
long femaleCount = 0L;
//男性年龄
Map<Integer, Long> maleStageMap = new HashMap<>();
//女性年龄
Map<Integer, Long> femaleStageMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(dPersonRecords)) {
//顾客总人数
customerCount = dPersonRecords.stream().count();
//男性顾客人数
List<DPersonRecord> malePersonList = dPersonRecords.stream().filter(personRecord -> personRecord.getGender() == 1).collect(Collectors.toList());
maleCount = malePersonList.size();
//女性顾客人数
List<DPersonRecord> femalePersonList = dPersonRecords.stream().filter(personRecord -> personRecord.getGender() == 0).collect(Collectors.toList());
femaleCount = femalePersonList.size();
//男性年龄
maleStageMap = malePersonList.stream().collect(Collectors.groupingBy(DPersonRecord::getAge, Collectors.counting()));
//女性年龄
femaleStageMap = femalePersonList.stream().collect(Collectors.groupingBy(DPersonRecord::getAge, Collectors.counting()));
}
long newPersonCount = v.getStaffCount() + customerCount;
DMallHourFaceRecognitionSta updateSta = new DMallHourFaceRecognitionSta();
updateSta.setCountdate(countDate);
updateSta.setPersonCount(newPersonCount);
updateSta.setCustomCount(customerCount);
updateSta.setMaleCount(maleCount);
updateSta.setFemaleCount(femaleCount);
updateSta.setCounttime(DateUtil.parse(k, "yyyy-MM-dd HH:00:00"));
Long[] maleStages = new Long[100];
maleStageMap.forEach((k1,v1) -> {
maleStages[k1] = v1;
});
Long[] femaleStages = new Long[100];
femaleStageMap.forEach((k1,v1) -> {
femaleStages[k1] = v1;
});
String maleStageStr = arraysToString(maleStages);
String femaleStageStr = arraysToString(femaleStages);
updateSta.setMaleStage(maleStageStr);
updateSta.setFemaleStage(femaleStageStr);
CustomerGroupResult customerGroupResult = new CustomerGroupResult();
Map<String, List<DPersonRecord>> groupMap = personRecords.stream().collect(Collectors.groupingBy(DPersonRecord::getGroupUnid));
groupMap.forEach((k1,v1) -> {
calGroup(1, customerGroupResult, v1);
});
updateSta.setGroupNum(customerGroupResult.getGroupNum());
updateSta.setSingleGroupNum(customerGroupResult.getSingleGroup());
updateSta.setDoubleGroupNum(customerGroupResult.getDoubleGroup());
updateSta.setMultipleGroupNum(customerGroupResult.getMultipleGroup());
updateSta.setFamilyGroupNum(customerGroupResult.getDoubleFamilyGroup() + customerGroupResult.getMultipleFamilyGroup());
updateSta.setLoverGroupNum(customerGroupResult.getDoubleLoverGroup());
updateSta.setPartnerGroupNum(customerGroupResult.getDoublePartnerGroup() + customerGroupResult.getMultiplePartnerGroup());
updateList.add(updateSta);
});
if (CollectionUtils.isNotEmpty(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);
}
}
public String arraysToString(Long[] arrays) {
return Arrays.toString(arrays).substring(1, Arrays.toString(arrays).length() - 1);
}
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!