doum
3 天以前 bc09bc87234065abe7130b84c92f81f143f5f3e7
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InoutRecordServiceImpl.java
@@ -1,8 +1,19 @@
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;
@@ -10,11 +21,26 @@
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 java.util.List;
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实现
@@ -26,6 +52,9 @@
    @Autowired
    private InoutRecordMapper inoutRecordMapper;
    @Autowired
    private CategoryMapper categoryMapper;
    @Override
    public Integer create(InoutRecord inoutRecord) {
@@ -87,76 +116,27 @@
    @Override
    public PageData<InoutRecord> findPage(PageWrap<InoutRecord> pageWrap) {
        IPage<InoutRecord> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<InoutRecord> queryWrapper = new QueryWrapper<>();
        MPJLambdaWrapper<InoutRecord> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(InoutRecord::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(InoutRecord::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(InoutRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(InoutRecord::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(InoutRecord::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(InoutRecord::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(InoutRecord::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(InoutRecord::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getRemark() != null) {
            queryWrapper.lambda().eq(InoutRecord::getRemark, pageWrap.getModel().getRemark());
        }
        if (pageWrap.getModel().getType() != null) {
            queryWrapper.lambda().eq(InoutRecord::getType, pageWrap.getModel().getType());
        }
        if (pageWrap.getModel().getHkEventId() != null) {
            queryWrapper.lambda().eq(InoutRecord::getHkEventId, pageWrap.getModel().getHkEventId());
        }
        if (pageWrap.getModel().getHkId() != null) {
            queryWrapper.lambda().eq(InoutRecord::getHkId, pageWrap.getModel().getHkId());
        }
        if (pageWrap.getModel().getMemberId() != null) {
            queryWrapper.lambda().eq(InoutRecord::getMemberId, pageWrap.getModel().getMemberId());
        }
        if (pageWrap.getModel().getCarId() != null) {
            queryWrapper.lambda().eq(InoutRecord::getCarId, pageWrap.getModel().getCarId());
        }
        if (pageWrap.getModel().getCategoryId() != null) {
            queryWrapper.lambda().eq(InoutRecord::getCategoryId, pageWrap.getModel().getCategoryId());
        }
        if (pageWrap.getModel().getCategoryName() != null) {
            queryWrapper.lambda().eq(InoutRecord::getCategoryName, pageWrap.getModel().getCategoryName());
        }
        if (pageWrap.getModel().getCarBizType() != null) {
            queryWrapper.lambda().eq(InoutRecord::getCarBizType, pageWrap.getModel().getCarBizType());
        }
        if (pageWrap.getModel().getMemberType() != null) {
            queryWrapper.lambda().eq(InoutRecord::getMemberType, pageWrap.getModel().getMemberType());
        }
        if (pageWrap.getModel().getMemberName() != null) {
            queryWrapper.lambda().eq(InoutRecord::getMemberName, pageWrap.getModel().getMemberName());
        }
        if (pageWrap.getModel().getCarCode() != null) {
            queryWrapper.lambda().eq(InoutRecord::getCarCode, pageWrap.getModel().getCarCode());
        }
        if (pageWrap.getModel().getObjType() != null) {
            queryWrapper.lambda().eq(InoutRecord::getObjType, pageWrap.getModel().getObjType());
        }
        if (pageWrap.getModel().getObjId() != null) {
            queryWrapper.lambda().eq(InoutRecord::getObjId, pageWrap.getModel().getObjId());
        }
        if (pageWrap.getModel().getInOrOut() != null) {
            queryWrapper.lambda().eq(InoutRecord::getInOrOut, pageWrap.getModel().getInOrOut());
        }
        if (pageWrap.getModel().getDeviceName() != null) {
            queryWrapper.lambda().eq(InoutRecord::getDeviceName, pageWrap.getModel().getDeviceName());
        }
        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());
@@ -172,4 +152,397 @@
        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 = new ArrayList<>();
        MPJLambdaWrapper mpjLambdaWrapper = new MPJLambdaWrapper<InoutRecord>().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(Constants.equalsInteger(inParkDataDTO.getIsGroupBy(),Constants.ONE)){
             mpjLambdaWrapper.groupBy(Constants.equalsInteger(inParkDataDTO.getDateStr().length(),4)&&Constants.equalsInteger(inParkDataDTO.getType(),Constants.ZERO),
                            "car_code,category_name,DATE_FORMAT(CREATE_DATE, '%Y-%m')")
                    .groupBy(Constants.equalsInteger(inParkDataDTO.getDateStr().length(),7)&&Constants.equalsInteger(inParkDataDTO.getType(),Constants.ZERO),
                            "car_code,category_name,DATE_FORMAT(CREATE_DATE, '%Y-%m-%d')")
                    .groupBy(Constants.equalsInteger(inParkDataDTO.getDateStr().length(),4)&&Constants.equalsInteger(inParkDataDTO.getType(),Constants.ONE),
                            "member_phone,MEMBER_TYPE,DATE_FORMAT(CREATE_DATE, '%Y-%m')")
                    .groupBy(Constants.equalsInteger(inParkDataDTO.getDateStr().length(),7)&&Constants.equalsInteger(inParkDataDTO.getType(),Constants.ONE),
                            "member_phone,MEMBER_TYPE,DATE_FORMAT(CREATE_DATE, '%Y-%m-%d')");
            if(Constants.equalsInteger(inParkDataDTO.getDateStr().length(),4)&&Constants.equalsInteger(inParkDataDTO.getType(),Constants.ZERO)){
                mpjLambdaWrapper.select("car_code,category_name,DATE_FORMAT(CREATE_DATE, '%Y-%m') as createDateStr ");
            }else if(Constants.equalsInteger(inParkDataDTO.getDateStr().length(),7)&&Constants.equalsInteger(inParkDataDTO.getType(),Constants.ZERO)){
                mpjLambdaWrapper.select("car_code,category_name,DATE_FORMAT(CREATE_DATE, '%Y-%m-%d') as createDateStr ");
            }else if(Constants.equalsInteger(inParkDataDTO.getDateStr().length(),4)&&Constants.equalsInteger(inParkDataDTO.getType(),Constants.ONE)){
                mpjLambdaWrapper.select("member_phone,MEMBER_TYPE,DATE_FORMAT(CREATE_DATE, '%Y-%m') as createDateStr");
            }else{
                mpjLambdaWrapper.select("member_phone,MEMBER_TYPE,DATE_FORMAT(CREATE_DATE, '%Y-%m-%d') as createDateStr ");
            }
        }else{
            mpjLambdaWrapper.selectAll(InoutRecord.class);
            if(Constants.equalsInteger(inParkDataDTO.getDateStr().length(),4)&&Constants.equalsInteger(inParkDataDTO.getType(),Constants.ZERO)){
                mpjLambdaWrapper.select("DATE_FORMAT(CREATE_DATE, '%Y-%m') as createDateStr ");
            }else if(Constants.equalsInteger(inParkDataDTO.getDateStr().length(),7)&&Constants.equalsInteger(inParkDataDTO.getType(),Constants.ZERO)){
                mpjLambdaWrapper.select("DATE_FORMAT(CREATE_DATE, '%Y-%m-%d') as createDateStr ");
            }else if(Constants.equalsInteger(inParkDataDTO.getDateStr().length(),4)&&Constants.equalsInteger(inParkDataDTO.getType(),Constants.ONE)){
                mpjLambdaWrapper.select("DATE_FORMAT(CREATE_DATE, '%Y-%m') as createDateStr");
            }else{
                mpjLambdaWrapper.select("DATE_FORMAT(CREATE_DATE, '%Y-%m-%d') as createDateStr ");
            }
//           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()+"' ) ")
//            );
        }
        allList = inoutRecordMapper.selectJoinList(InoutRecord.class,mpjLambdaWrapper);
        List<List<String>>  resultList = new ArrayList<>();
        if(CollectionUtils.isEmpty(allList)){
            return resultList;
        }
        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())
                                && i.getCreateDateStr().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())
                                &&i.getCreateDateStr().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)
                                && j.getCreateDateStr().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)
                                &&j.getCreateDateStr().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);
        }
    }
}