package com.doumee.service.business.impl;
|
|
import com.doumee.core.annotation.excel.ExcelExporter;
|
import com.doumee.core.constants.ResponseStatus;
|
import com.doumee.core.exception.BusinessException;
|
import com.doumee.core.utils.Constants;
|
import com.doumee.core.utils.DateUtil;
|
import com.doumee.core.utils.Utils;
|
import com.doumee.dao.business.CategoryMapper;
|
import com.doumee.dao.business.InoutRecordMapper;
|
import com.doumee.dao.business.dto.InParkDataDTO;
|
import com.doumee.dao.business.model.Category;
|
import com.doumee.dao.business.model.InoutRecord;
|
import com.doumee.dao.business.model.Member;
|
import com.doumee.dao.business.vo.GeneralDataVO;
|
import com.doumee.dao.business.vo.InParkUserDataVO;
|
import com.doumee.service.business.InoutRecordService;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.doumee.service.business.third.model.PageData;
|
import com.doumee.service.business.third.model.PageWrap;
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.models.auth.In;
|
import org.apache.commons.lang.StringUtils;
|
import org.checkerframework.checker.units.qual.C;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.math.BigDecimal;
|
import java.net.URLEncoder;
|
import java.nio.charset.Charset;
|
import java.text.DecimalFormat;
|
import java.time.*;
|
import java.time.format.DateTimeFormatter;
|
import java.time.temporal.TemporalAdjusters;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* 出入场人次车次每日统计表Service实现
|
* @author 江蹄蹄
|
* @date 2025/04/28 16:19
|
*/
|
@Service
|
public class InoutRecordServiceImpl implements InoutRecordService {
|
|
@Autowired
|
private InoutRecordMapper inoutRecordMapper;
|
|
@Autowired
|
private CategoryMapper categoryMapper;
|
|
@Override
|
public Integer create(InoutRecord inoutRecord) {
|
inoutRecordMapper.insert(inoutRecord);
|
return inoutRecord.getId();
|
}
|
|
@Override
|
public void deleteById(Integer id) {
|
inoutRecordMapper.deleteById(id);
|
}
|
|
@Override
|
public void delete(InoutRecord inoutRecord) {
|
UpdateWrapper<InoutRecord> deleteWrapper = new UpdateWrapper<>(inoutRecord);
|
inoutRecordMapper.delete(deleteWrapper);
|
}
|
|
@Override
|
public void deleteByIdInBatch(List<Integer> ids) {
|
if (CollectionUtils.isEmpty(ids)) {
|
return;
|
}
|
inoutRecordMapper.deleteBatchIds(ids);
|
}
|
|
@Override
|
public void updateById(InoutRecord inoutRecord) {
|
inoutRecordMapper.updateById(inoutRecord);
|
}
|
|
@Override
|
public void updateByIdInBatch(List<InoutRecord> inoutRecords) {
|
if (CollectionUtils.isEmpty(inoutRecords)) {
|
return;
|
}
|
for (InoutRecord inoutRecord: inoutRecords) {
|
this.updateById(inoutRecord);
|
}
|
}
|
|
@Override
|
public InoutRecord findById(Integer id) {
|
return inoutRecordMapper.selectById(id);
|
}
|
|
@Override
|
public InoutRecord findOne(InoutRecord inoutRecord) {
|
QueryWrapper<InoutRecord> wrapper = new QueryWrapper<>(inoutRecord);
|
return inoutRecordMapper.selectOne(wrapper);
|
}
|
|
@Override
|
public List<InoutRecord> findList(InoutRecord inoutRecord) {
|
QueryWrapper<InoutRecord> wrapper = new QueryWrapper<>(inoutRecord);
|
return inoutRecordMapper.selectList(wrapper);
|
}
|
|
@Override
|
public PageData<InoutRecord> findPage(PageWrap<InoutRecord> pageWrap) {
|
IPage<InoutRecord> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
|
MPJLambdaWrapper<InoutRecord> queryWrapper = new MPJLambdaWrapper<>();
|
Utils.MP.blankToNull(pageWrap.getModel());
|
InoutRecord model = pageWrap.getModel();
|
queryWrapper.selectAll(InoutRecord.class)
|
.eq(InoutRecord::getIsdeleted,Constants.ZERO)
|
// .eq(Objects.nonNull(model.getType()),InoutRecord::getType, model.getType())
|
.isNotNull(Objects.nonNull(model.getType())&&Constants.equalsInteger(model.getType(),Constants.ZERO),InoutRecord::getCarCode)
|
.isNotNull(Objects.nonNull(model.getType())&&Constants.equalsInteger(model.getType(),Constants.ONE),InoutRecord::getMemberPhone)
|
.eq(Objects.nonNull(model.getInOrOut()),InoutRecord::getInOrOut, model.getInOrOut())
|
.eq(Objects.nonNull(model.getObjType()),InoutRecord::getObjType, model.getObjType())
|
.eq(Objects.nonNull(model.getCarBizType()),InoutRecord::getCarBizType, model.getCarBizType())
|
.eq(Objects.nonNull(model.getMemberType()),InoutRecord::getMemberType, model.getMemberType())
|
.ge(Objects.nonNull(model.getStartDate()),InoutRecord::getCreateDate, Utils.Date.getStart(model.getStartDate()))
|
.le(Objects.nonNull(model.getEndDate()),InoutRecord::getCreateDate, Utils.Date.getEnd(model.getEndDate()))
|
.and(StringUtils.isNotBlank(model.getCategoryName()),i->i.like(InoutRecord::getCategoryName,model.getCategoryName()).or().like(InoutRecord::getCategoryParentName,model.getCategoryName()))
|
.and(StringUtils.isNotBlank(model.getMemberName()),i->i.like(InoutRecord::getMemberName,model.getMemberName()).or().like(InoutRecord::getMemberPhone,model.getMemberName()))
|
.and(StringUtils.isNotBlank(model.getCarCode()),i->i.like(InoutRecord::getCarCode,model.getCarCode()).or().like(InoutRecord::getRemark,model.getCarCode()))
|
.like(StringUtils.isNotBlank(model.getCompanyName()),InoutRecord::getCompanyName,model.getCompanyName())
|
.like(StringUtils.isNotBlank(model.getDeviceName()),InoutRecord::getDeviceName,model.getDeviceName())
|
.orderByDesc(InoutRecord::getId)
|
;
|
for(PageWrap.SortData sortData: pageWrap.getSorts()) {
|
if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
|
queryWrapper.orderByDesc(sortData.getProperty());
|
} else {
|
queryWrapper.orderByAsc(sortData.getProperty());
|
}
|
}
|
return PageData.from(inoutRecordMapper.selectPage(page, queryWrapper));
|
}
|
|
@Override
|
public long count(InoutRecord inoutRecord) {
|
QueryWrapper<InoutRecord> wrapper = new QueryWrapper<>(inoutRecord);
|
return inoutRecordMapper.selectCount(wrapper);
|
}
|
|
|
//人员分类 单独处理人员数据 0劳务访客 1普通访客 2内部员工 3车辆信息 4相关方人员 5货运司机
|
private static String[] userTypeList = new String[]{"","普通访客","内部人员","","相关方人员","货运司机"};
|
|
|
/**
|
* 查询基础数据
|
* @return
|
*/
|
@Override
|
public InParkUserDataVO getInParkUserData(InParkDataDTO inParkDataDTO){
|
if(Objects.isNull(inParkDataDTO)
|
|| Objects.isNull(inParkDataDTO.getType())
|
|| Objects.isNull(inParkDataDTO.getIsGroupBy())
|
|| (Objects.nonNull(inParkDataDTO.getType())&& !(Constants.equalsInteger(inParkDataDTO.getType(),Constants.ZERO) || Constants.equalsInteger(inParkDataDTO.getType(),Constants.ONE) ))
|
|| (Objects.nonNull(inParkDataDTO.getIsGroupBy())&& !(Constants.equalsInteger(inParkDataDTO.getIsGroupBy(),Constants.ZERO) || Constants.equalsInteger(inParkDataDTO.getIsGroupBy(),Constants.ONE) ))
|
){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
//查询本周的开始日期和结束日期
|
Long weekStart = LocalDate.now().with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).atStartOfDay(ZoneOffset.UTC).toInstant().toEpochMilli();
|
InParkUserDataVO inParkUserDataVO = new InParkUserDataVO();
|
List<InoutRecord> yearList = inoutRecordMapper.selectJoinList(InoutRecord.class,new MPJLambdaWrapper<InoutRecord>()
|
.selectAll(InoutRecord.class)
|
.eq(InoutRecord::getIsdeleted,Constants.ZERO)
|
.eq(InoutRecord::getInOrOut,Constants.ZERO)
|
.isNotNull(Constants.equalsInteger(inParkDataDTO.getType(),Constants.ZERO),InoutRecord::getCarCode)
|
.isNotNull(Constants.equalsInteger(inParkDataDTO.getType(),Constants.ONE),InoutRecord::getMemberPhone)
|
.apply(" ( DATE_FORMAT(CREATE_DATE, '%Y') = DATE_FORMAT(now(), '%Y') ) ")
|
.orderByAsc(Constants.equalsInteger(inParkDataDTO.getType(),Constants.ZERO),InoutRecord::getCarBizType)
|
.orderByAsc(Constants.equalsInteger(inParkDataDTO.getType(),Constants.ONE),InoutRecord::getMemberType)
|
);
|
List<InoutRecord> monthList = yearList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(DateUtil.formatDate(new Date(),"yyyy-MM"))).collect(Collectors.toList());
|
List<InoutRecord> weekList = yearList.stream().filter(i->i.getCreateDate().getTime()>=weekStart).collect(Collectors.toList());
|
List<InoutRecord> todayList = weekList.stream().filter(i-> DateUtil.formatDate(i.getCreateDate(),"yyyy-MM-dd").equals(DateUtil.formatDate(new Date(),"yyyy-MM-dd"))).collect(Collectors.toList());
|
List<InoutRecord> yesterdayList = yearList.stream().filter(i-> DateUtil.formatDate(i.getCreateDate(),"yyyy-MM-dd").equals(DateUtil.getBeforDay(new Date(),1))).collect(Collectors.toList());
|
|
if(Constants.equalsInteger(inParkDataDTO.getIsGroupBy(),Constants.ZERO)){
|
inParkUserDataVO.setYearTotal(yearList.size());
|
inParkUserDataVO.setMonthTotal(monthList.size());
|
inParkUserDataVO.setTodayTotal(todayList.size());
|
inParkUserDataVO.setWeekTotal(weekList.size());
|
inParkUserDataVO.setYesterdayTotal(yesterdayList.size());
|
}else{
|
yearList = this.getListByType(yearList,inParkDataDTO.getType());
|
monthList = this.getListByType(monthList,inParkDataDTO.getType());
|
weekList = this.getListByType(weekList,inParkDataDTO.getType());
|
todayList = this.getListByType(todayList,inParkDataDTO.getType());
|
yesterdayList = this.getListByType(yesterdayList,inParkDataDTO.getType());
|
inParkUserDataVO.setYearTotal(yearList.size());
|
inParkUserDataVO.setMonthTotal(monthList.size());
|
inParkUserDataVO.setTodayTotal(todayList.size());
|
inParkUserDataVO.setWeekTotal(weekList.size());
|
inParkUserDataVO.setYesterdayTotal(yesterdayList.size());
|
}
|
//处理年度折线图数据
|
List<GeneralDataVO> cumulativeDataList = new ArrayList<>();
|
for (int i = 1; i <=12 ; i++) {
|
GeneralDataVO generalDataVO = new GeneralDataVO();
|
generalDataVO.setName(Integer.toString(i));
|
generalDataVO.setTotal(yearList.stream().filter(j->Constants.equalsInteger(Integer.valueOf(generalDataVO.getName()),Integer.valueOf(DateUtil.formatDate(j.getCreateDate(),"MM")))).collect(Collectors.toList()).size());
|
generalDataVO.setName(generalDataVO.getName()+"月");
|
cumulativeDataList.add(generalDataVO);
|
}
|
inParkUserDataVO.setCumulativeDataList(cumulativeDataList);
|
//处理分类数据
|
List<GeneralDataVO> yearSortList = new ArrayList<>();
|
if(Constants.equalsInteger(inParkDataDTO.getType(),Constants.ONE)){
|
for (int i = 0; i < userTypeList.length; i++) {
|
if(StringUtils.isBlank(userTypeList[i])){
|
continue;
|
}
|
GeneralDataVO generalDataVO = new GeneralDataVO();
|
generalDataVO.setName(userTypeList[i]);
|
int index = i;
|
generalDataVO.setTotal(yearList.stream().filter(j->Constants.equalsInteger(j.getMemberType(), index)).collect(Collectors.toList()).size());
|
yearSortList.add(generalDataVO);
|
}
|
}else{
|
List<String> categoryNameList = yearList.stream().filter(i-> StringUtils.isNotBlank(i.getCategoryName())).map(i->i.getCategoryName()).collect(Collectors.toList());
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categoryNameList)){
|
Set<String> setList = new HashSet<>(categoryNameList);
|
for (String categoryName:setList) {
|
GeneralDataVO generalDataVO = new GeneralDataVO();
|
generalDataVO.setName(categoryName);
|
generalDataVO.setTotal(yearList.stream().filter(j->StringUtils.isNotBlank(j.getCategoryName())&&j.getCategoryName().equals(categoryName)).collect(Collectors.toList()).size());
|
yearSortList.add(generalDataVO);
|
}
|
}
|
}
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(yearSortList)){
|
Collections.sort(yearSortList, new Comparator<GeneralDataVO>() {
|
@Override
|
public int compare(GeneralDataVO o1, GeneralDataVO o2) {
|
// 返回值为int类型,大于0表示正序,小于0表示逆序
|
return o2.getTotal() - o1.getTotal();
|
}
|
});
|
inParkUserDataVO.setYearSortList(yearSortList);
|
}
|
return inParkUserDataVO;
|
}
|
|
|
/**
|
* 查询占比数据
|
* @return
|
*/
|
@Override
|
public List<GeneralDataVO> getRataList(InParkDataDTO inParkDataDTO){
|
if(Objects.isNull(inParkDataDTO)
|
|| Objects.isNull(inParkDataDTO.getType())
|
|| Objects.isNull(inParkDataDTO.getIsGroupBy())
|
|| StringUtils.isBlank(inParkDataDTO.getDateStr())
|
|| (Objects.nonNull(inParkDataDTO.getType())&& !(Constants.equalsInteger(inParkDataDTO.getType(),Constants.ZERO) || Constants.equalsInteger(inParkDataDTO.getType(),Constants.ONE) ))
|
|| (Objects.nonNull(inParkDataDTO.getIsGroupBy())&& !(Constants.equalsInteger(inParkDataDTO.getIsGroupBy(),Constants.ZERO) || Constants.equalsInteger(inParkDataDTO.getIsGroupBy(),Constants.ONE) ))
|
|| !( Constants.equalsInteger(inParkDataDTO.getDateStr().length(),4) || Constants.equalsInteger(inParkDataDTO.getDateStr().length(),7) )
|
){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
List<GeneralDataVO> rataList = new ArrayList<>();
|
List<InoutRecord> yearList = inoutRecordMapper.selectJoinList(InoutRecord.class,new MPJLambdaWrapper<InoutRecord>()
|
.selectAll(InoutRecord.class)
|
.eq(InoutRecord::getIsdeleted,Constants.ZERO)
|
.eq(InoutRecord::getInOrOut,Constants.ZERO)
|
.isNotNull(Constants.equalsInteger(inParkDataDTO.getType(),Constants.ZERO),InoutRecord::getCarCode)
|
.isNotNull(Constants.equalsInteger(inParkDataDTO.getType(),Constants.ONE),InoutRecord::getMemberPhone)
|
.apply(Constants.equalsInteger(inParkDataDTO.getDateStr().length(),4)," ( DATE_FORMAT(CREATE_DATE, '%Y') = '"+inParkDataDTO.getDateStr()+"' ) ")
|
.apply(Constants.equalsInteger(inParkDataDTO.getDateStr().length(),7)," ( DATE_FORMAT(CREATE_DATE, '%Y-%m') = '"+inParkDataDTO.getDateStr()+"' ) ")
|
);
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(yearList)){
|
return rataList;
|
}
|
if(Constants.equalsInteger(inParkDataDTO.getIsGroupBy(),Constants.ONE)){
|
yearList = this.getListByType(yearList,inParkDataDTO.getType());
|
}
|
|
if(Constants.equalsInteger(inParkDataDTO.getType(),Constants.ONE)){
|
for (int i = 0; i < userTypeList.length; i++) {
|
if(StringUtils.isBlank(userTypeList[i])){
|
continue;
|
}
|
GeneralDataVO generalDataVO = new GeneralDataVO();
|
generalDataVO.setName(userTypeList[i]);
|
int index = i;
|
generalDataVO.setTotal(yearList.stream().filter(j->Constants.equalsInteger(j.getMemberType(), index)).collect(Collectors.toList()).size());
|
generalDataVO.setRata(new BigDecimal(generalDataVO.getTotal().toString()).divide(new BigDecimal(yearList.size()+""),2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")));
|
rataList.add(generalDataVO);
|
}
|
}else{
|
List<String> categoryNameList = yearList.stream().filter(i-> StringUtils.isNotBlank(i.getCategoryParentName()))
|
.map(i->i.getCategoryParentName()).collect(Collectors.toList());
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categoryNameList)){
|
Set<String> setList = new HashSet<>(categoryNameList);
|
for (String categoryName:setList) {
|
GeneralDataVO generalDataVO = new GeneralDataVO();
|
generalDataVO.setName(categoryName);
|
generalDataVO.setTotal(yearList.stream().filter(j->StringUtils.isNotBlank(j.getCategoryParentName())&&j.getCategoryName().equals(categoryName)).collect(Collectors.toList()).size());
|
generalDataVO.setRata(new BigDecimal(generalDataVO.getTotal().toString()).divide(new BigDecimal(yearList.size()+""),2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")));
|
rataList.add(generalDataVO);
|
}
|
}
|
}
|
return rataList;
|
}
|
|
@Override
|
public List<List<String>> getReportList(InParkDataDTO inParkDataDTO){
|
if(Objects.isNull(inParkDataDTO)
|
|| Objects.isNull(inParkDataDTO.getType())
|
|| Objects.isNull(inParkDataDTO.getIsGroupBy())
|
|| StringUtils.isBlank(inParkDataDTO.getDateStr())
|
|| (Objects.nonNull(inParkDataDTO.getType())&& !(Constants.equalsInteger(inParkDataDTO.getType(),Constants.ZERO) || Constants.equalsInteger(inParkDataDTO.getType(),Constants.ONE) ))
|
|| (Objects.nonNull(inParkDataDTO.getIsGroupBy())&& !(Constants.equalsInteger(inParkDataDTO.getIsGroupBy(),Constants.ZERO) || Constants.equalsInteger(inParkDataDTO.getIsGroupBy(),Constants.ONE) ))
|
|| !( Constants.equalsInteger(inParkDataDTO.getDateStr().length(),4) || Constants.equalsInteger(inParkDataDTO.getDateStr().length(),7) )
|
){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
List<InoutRecord> allList = inoutRecordMapper.selectJoinList(InoutRecord.class,new MPJLambdaWrapper<InoutRecord>()
|
.selectAll(InoutRecord.class)
|
.eq(InoutRecord::getIsdeleted,Constants.ZERO)
|
.eq(InoutRecord::getInOrOut,Constants.ZERO)
|
.isNotNull(Constants.equalsInteger(inParkDataDTO.getType(),Constants.ZERO),InoutRecord::getCarCode)
|
.isNotNull(Constants.equalsInteger(inParkDataDTO.getType(),Constants.ONE),InoutRecord::getMemberPhone)
|
.apply(Constants.equalsInteger(inParkDataDTO.getDateStr().length(),4)," ( DATE_FORMAT(CREATE_DATE, '%Y') = '"+inParkDataDTO.getDateStr()+"' ) ")
|
.apply(Constants.equalsInteger(inParkDataDTO.getDateStr().length(),7)," ( DATE_FORMAT(CREATE_DATE, '%Y-%m') = '"+inParkDataDTO.getDateStr()+"' ) ")
|
);
|
List<List<String>> resultList = new ArrayList<>();
|
if(CollectionUtils.isEmpty(allList)){
|
return resultList;
|
}
|
if(Constants.equalsInteger(inParkDataDTO.getIsGroupBy(),Constants.ONE)){
|
allList = this.getListByType(allList,inParkDataDTO.getType());
|
}
|
|
List<String> dateList = new ArrayList<>();
|
//年份
|
if(Constants.equalsInteger(inParkDataDTO.getDateStr().length(),4)){
|
Integer maxMonth = 12;
|
if(Constants.equalsInteger(DateUtil.getNowYearNum(),Integer.valueOf(inParkDataDTO.getDateStr()))){
|
maxMonth = DateUtil.getNowMonthNum();
|
}
|
for (int i = maxMonth; i >0 ; i--) {
|
dateList.add(DateUtil.getNowYearNum()+"-"+ StringUtils.leftPad(i+"",2,"0"));
|
}
|
}else {
|
//日期
|
Integer year = Integer.valueOf(inParkDataDTO.getDateStr().substring(0,4));
|
Integer month = Integer.valueOf(inParkDataDTO.getDateStr().substring(5,7));
|
Integer today = DateUtil.getNowDayNum();
|
YearMonth yearMonth = YearMonth.of(year, month);
|
// 获取该月的最后一天
|
LocalDate lastDayDate = yearMonth.atEndOfMonth();
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd");
|
Integer lastDay = Integer.valueOf(lastDayDate.format(formatter));
|
if(Constants.equalsInteger(year,DateUtil.getNowYearNum()) && Constants.equalsInteger(month,DateUtil.getNowMonthNum())){
|
if(today < lastDay){
|
lastDay = today;
|
}
|
}
|
for (int i = lastDay; i > 0 ; i--) {
|
dateList.add(year + "-" + StringUtils.leftPad(month.toString(),2,"0") + "-" + StringUtils.leftPad(Integer.toString(i),2,"0"));
|
}
|
}
|
return this.dealResultData(allList,dateList,inParkDataDTO.getType(),inParkDataDTO.getDateStr());
|
}
|
|
|
public List<List<String>> dealResultData(List<InoutRecord> allList,List<String> dataList ,Integer type,String dateStr){
|
List<List<String>> resultList = new ArrayList<>();
|
List<String> totalString = new ArrayList<>();
|
totalString.add("数据日期");
|
if(Constants.equalsInteger(type,Constants.ZERO)){
|
List<String> categoryNameList = allList.stream().filter(j-> StringUtils.isNotBlank(j.getCategoryName())).map(j->j.getCategoryName()).collect(Collectors.toList());
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(categoryNameList)){
|
return resultList;
|
}
|
Set<String> setList = new HashSet<>(categoryNameList);
|
for (String categoryName:setList) {
|
totalString.add(categoryName);
|
}
|
totalString.add("合计");
|
resultList.add(totalString);
|
for (String str:dataList) {
|
Integer total = 0;
|
List<String> dataChildList = new ArrayList<>();
|
dataChildList.add(str);
|
for (String categoryName:setList) {
|
if(Constants.equalsInteger(dateStr.length(),4)){
|
Integer childNum = allList.stream().filter(i->categoryName.equals(i.getCategoryName())
|
&& DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(str)).collect(Collectors.toList()).size();
|
dataChildList.add(
|
Integer.toString(childNum)
|
);
|
total = total + childNum;
|
}else if(Constants.equalsInteger(dateStr.length(),7)){
|
Integer childNum = allList.stream().filter(i->categoryName.equals(i.getCategoryName())
|
&&DateUtil.formatDate(i.getCreateDate(),"yyyy-MM-dd").equals(str)).collect(Collectors.toList()).size();
|
dataChildList.add(
|
Integer.toString(childNum)
|
);
|
total = total + childNum;
|
}
|
}
|
dataChildList.add(Integer.toString(total));
|
resultList.add(dataChildList);
|
}
|
}else{
|
for (int j = 0; j < userTypeList.length; j++) {
|
if(StringUtils.isBlank(userTypeList[j])){
|
continue;
|
}
|
totalString.add(userTypeList[j]);
|
}
|
totalString.add("合计");
|
resultList.add(totalString);
|
for (String str:dataList) {
|
Integer total = 0;
|
List<String> dataChildList = new ArrayList<>();
|
dataChildList.add(str);
|
for (int i = 0; i < userTypeList.length; i++) {
|
String typeName = userTypeList[i];
|
if(StringUtils.isBlank(typeName)){
|
continue;
|
}
|
int finalI = i;
|
if(Constants.equalsInteger(dateStr.length(),4)){
|
Integer childNum = allList.stream().filter(j->Constants.equalsInteger(j.getMemberType(), finalI)
|
&& DateUtil.formatDate(j.getCreateDate(),"yyyy-MM").equals(str)).collect(Collectors.toList()).size();
|
dataChildList.add(
|
Integer.toString(childNum)
|
);
|
total = total + childNum;
|
}else if(Constants.equalsInteger(dateStr.length(),7)){
|
Integer childNum = allList.stream().filter(j->Constants.equalsInteger(j.getMemberType(), finalI)
|
&&DateUtil.formatDate(j.getCreateDate(),"yyyy-MM-dd").equals(str)).collect(Collectors.toList()).size();
|
dataChildList.add(
|
Integer.toString(childNum)
|
);
|
total = total + childNum;
|
}
|
}
|
dataChildList.add(Integer.toString(total));
|
resultList.add(dataChildList);
|
}
|
}
|
return resultList;
|
}
|
|
|
public List<InoutRecord> getListByType(List<InoutRecord> list,Integer type){
|
return Constants.equalsInteger(type,Constants.ONE)?this.getDataByMemberPhoneSize(list):this.getDataByCarCodeSize(list);
|
}
|
|
|
public List<InoutRecord> getDataByMemberPhoneSize(List<InoutRecord> list){
|
Map<String, InoutRecord> uniqueByMemberPhone = list.stream()
|
.collect(Collectors.toMap(
|
InoutRecord::getMemberPhone,
|
person -> person,
|
(existing, replacement) -> existing
|
));
|
List<InoutRecord> uniqueList = new ArrayList<>(uniqueByMemberPhone.values());
|
return uniqueList;
|
}
|
|
public List<InoutRecord> getDataByCarCodeSize(List<InoutRecord> list){
|
Map<String, InoutRecord> uniqueByCarCode = list.stream()
|
.collect(Collectors.toMap(
|
InoutRecord::getCarCode,
|
person -> person,
|
(existing, replacement) -> existing
|
));
|
List<InoutRecord> uniqueList = new ArrayList<>(uniqueByCarCode.values());
|
return uniqueList;
|
}
|
|
|
@Override
|
public void excel(InParkDataDTO inParkDataDTO, HttpServletResponse response){
|
List<List<String>> data = this.getReportList(inParkDataDTO);
|
try {
|
String fileName = Constants.equalsInteger(inParkDataDTO.getType(),Constants.ZERO)?"入园车辆统计表_":"入园人员统计表_"+System.currentTimeMillis();
|
String encodeFileName = URLEncoder.encode(fileName, Charset.forName("UTF-8").toString()) + ".xlsx";
|
response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName);
|
response.setContentType("application/octet-stream");
|
response.setHeader("eva-opera-type", "download");
|
response.setHeader("eva-download-filename", encodeFileName);
|
ExcelExporter.exportList(data, fileName, response.getOutputStream());
|
} catch (IOException e) {
|
throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
|
}
|
}
|
}
|