InComeCalculationStaticDaoImpl.java 15.2 KB
package com.zteits.park.dao.impl;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.collections4.CollectionUtils;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xiaoleilu.hutool.date.DateUtil;
import com.zteits.clouds.api.dto.order.parkorder.dto.IncomeCalculationDTO;
import com.zteits.clouds.api.dto.order.parkorder.param.QueryIncomeCalculationForPageReq;
import com.zteits.clouds.api.dto.park.dto.IncomeCalculationExcelDTO;
import com.zteits.park.dao.InComeCalculationStaticDao;
import com.zteits.park.domain.TIncomeCalculationStaticNum;
import com.zteits.park.domain.TIncomeCalculationStaticNumExample;
import com.zteits.park.domain.TIncomeCalculationStaticTime;
import com.zteits.park.domain.TIncomeCalculationStaticTimeExample;
import com.zteits.park.mapper.TIncomeCalculationStaticNumMapper;
import com.zteits.park.mapper.TIncomeCalculationStaticTimeMapper;
import com.zteits.park.mapper.smapper.TIncomeCalculationStaticNumSMapper;
import com.zteits.park.mapper.smapper.TIncomeCalculationStaticTimeSMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * Copyright: Copyright (c) 2017  zteits
 *
 * @ClassName: com.zteits.park.dao.impl
 * @Description:
 * @version: v1.0.0
 * @author: atao
 * @date: 2017/12/26   下午3:43
 * Modification History:
 * Date         Author          Version      Description
 * ---------------------------------------------------------*
 * 2017/12/26      atao          v1.0.0          创建
 */
@Component
public class InComeCalculationStaticDaoImpl implements InComeCalculationStaticDao {

    @Autowired
    private TIncomeCalculationStaticNumSMapper tIncomeCalculationStaticNumSMapper;
    @Autowired
    private TIncomeCalculationStaticTimeSMapper tIncomeCalculationStaticTimeSMapper;
    @Autowired
    private TIncomeCalculationStaticNumMapper tIncomeCalculationStaticNumMapper;
    @Autowired
    private TIncomeCalculationStaticTimeMapper tIncomeCalculationStaticTimeMapper;

    @Override
    public int staticIncomeCalculationDataOfNum(String month, Date staticStartDate, Date staticEndDate) {

        return tIncomeCalculationStaticNumSMapper.staticIncomeCalculationDataOfNum(month, staticStartDate,
            staticEndDate);
    }

    @Override
    public int staticIncomeCalculationDataOfTime(String month, Date staticStartDate, Date staticEndDate) {

        return tIncomeCalculationStaticTimeSMapper.staticIncomeCalculationDataOfTime(month, staticStartDate,
            staticEndDate);
    }



    @Override
    public PageInfo<IncomeCalculationExcelDTO> exportStaticIncomeExcelByNum(QueryIncomeCalculationForPageReq req) {
        PageHelper.startPage(req.getBaseRequest().getPageNum(), req.getBaseRequest().getPageSize());
        List<IncomeCalculationExcelDTO> list = tIncomeCalculationStaticNumSMapper.queryIncomeCalculationDataByNum(req);
        return new PageInfo<>(list);
    }



    @Override
    public Boolean updateParkBaseInfoByProc() {

        try {
            tIncomeCalculationStaticNumSMapper.updateParkBaseInfoByProc();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

        return true;
    }

    @Override
    public PageInfo<IncomeCalculationExcelDTO> exportStaticIncomeExcelByNumForAreaBlock(
        QueryIncomeCalculationForPageReq req) {
        req.setGroupType(2);
        PageHelper.startPage(req.getBaseRequest().getPageNum(), req.getBaseRequest().getPageSize());
        List<IncomeCalculationExcelDTO> list = tIncomeCalculationStaticNumSMapper
            .queryIncomeCalculationDataByNum(req);

        Map<String, Integer> berthNumMap = getAllBerthNumByCondition(req.getPlNos(), req.getBeginTime(),
            req.getEndTime());

        berthNumMap = berthNumMap == null ? new HashMap<>() : berthNumMap;

        if (CollectionUtils.isNotEmpty(list)) {
            //
            for (IncomeCalculationExcelDTO dto : list) {
                Integer allBerthNums = berthNumMap.get(dto.getAreaId());
                allBerthNums = allBerthNums == null ? 0 : allBerthNums;
                dto.setBerthNum(allBerthNums);
                Long amount = dto.getAmount();
                amount = amount == null ? 0 : amount;
                ;
                Integer allParkDuration = dto.getAllParkDuration();
                allParkDuration = allParkDuration == null ? 0 : allParkDuration;
                //计算泊位平均收益 及 平均时长
                if (allBerthNums == null || allBerthNums == 0) {
                    dto.setAvgAmount(0);
                    ;
                    dto.setAvgParkDuration(0.00);
                } else {
                    dto.setAvgAmount(Math.round(amount / allBerthNums));
                    dto.setAvgParkDuration(Math.round(allParkDuration * 100.0 / allBerthNums) / 100.0);
                }

            }
        }

        return new PageInfo<>(list);
    }



    @Override
    public Map<String, Integer> getAllBerthNumByCondition(List<String> plNos, Date startDate, Date endDate) {
        List<Map<String, Object>> mapList = tIncomeCalculationStaticNumSMapper.getAllBerthNumByCondition(plNos,
            startDate, endDate);

        Map<String, Integer> result = new HashMap<>();
        if (CollectionUtils.isEmpty(mapList)) {
            return result;
        }
        for (Map<String, Object> temp : mapList) {
            String AREAID = null;
            Integer BERTHNUMS = null;

            for (Entry<String, Object> entry : temp.entrySet()) {
                if ("AREAID".equals(entry.getKey())) {
                    AREAID = entry.getValue().toString();
                }
                if ("BERTHNUMS".equals(entry.getKey())) {
                    BERTHNUMS = Integer.valueOf(entry.getValue().toString());
                }
            }
            result.put(AREAID, BERTHNUMS);

        }

        return result;
    }

    @Override
    public PageInfo<IncomeCalculationExcelDTO> getIncomeCalculationDataOfSummationByTime(
        QueryIncomeCalculationForPageReq req) {

        Map<String, Integer> berthNumMap = getAllBerthNumByCondition(req.getPlNos(), req.getBeginTime(),
            req.getEndTime());
        Integer allBerthNums = berthNumMap.values().stream().mapToInt(value -> value).sum();
        req.setTimeType(100);
        PageHelper.startPage(req.getBaseRequest().getPageNum(), req.getBaseRequest().getPageSize());
        List<IncomeCalculationExcelDTO> list = tIncomeCalculationStaticTimeSMapper
            .getIncomeCalculationDataOfPlByTime(req);

        if (CollectionUtils.isNotEmpty(list)) {
            for (IncomeCalculationExcelDTO dto : list) {
                if (null == dto) {
                    continue;
                }
                dto.setBerthNum(allBerthNums);
                dto.setStaticDate(DateUtil.format(req.getBeginTime(), "yyyy-MM-dd") + "-" + DateUtil
                    .format(req.getEndTime(), "yyyy-MM-dd"));
                Long amount = dto.getAmount();
                amount = amount == null ? 0 : amount;
                Integer allParkDuration = dto.getAllParkDuration();
                allParkDuration = allParkDuration == null ? 0 : allParkDuration;
                //计算泊位平均收益 及 平均时长
                if (allBerthNums == null || allBerthNums == 0) {
                    dto.setAvgAmount(0);
                    dto.setAvgParkDuration(0.00);
                } else {
                    dto.setAvgAmount(Math.round(amount / allBerthNums));
                    dto.setAvgParkDuration(Math.round(allParkDuration * 100.0 / allBerthNums) / 100.0);
                }

            }
        }

        return new PageInfo<>(list);
    }

    @Override
    public PageInfo<IncomeCalculationExcelDTO> getIncomeCalculationDataOfAreaByTime(
        QueryIncomeCalculationForPageReq req) {

        Map<String, Integer> berthNumMap = getAllBerthNumByCondition(req.getPlNos(), req.getBeginTime(),
            req.getEndTime());

        berthNumMap = berthNumMap == null ? new HashMap<>() : berthNumMap;

        req.setGroupType(2);
        PageHelper.startPage(req.getBaseRequest().getPageNum(), req.getBaseRequest().getPageSize());
        List<IncomeCalculationExcelDTO> list = tIncomeCalculationStaticTimeSMapper.getIncomeCalculationDataOfPlByTime(
            req);

        if (CollectionUtils.isNotEmpty(list)) {
            for (IncomeCalculationExcelDTO dto : list) {
                Integer allBerthNums = berthNumMap.get(dto.getAreaId());
                allBerthNums = allBerthNums == null ? 0 : allBerthNums;
                dto.setBerthNum(allBerthNums);
                Long amount = dto.getAmount();
                amount = amount == null ? 0 : amount;
                Integer allParkDuration = dto.getAllParkDuration();
                allParkDuration = allParkDuration == null ? 0 : allParkDuration;
                //计算泊位平均收益 及 平均时长
                if (allBerthNums == null || allBerthNums == 0) {
                    dto.setAvgAmount(0);
                    dto.setAvgParkDuration(0.00);
                    ;;
                } else {
                    dto.setAvgAmount(Math.round(amount / allBerthNums));
                    dto.setAvgParkDuration(Math.round(allParkDuration * 100.0 / allBerthNums) / 100.0);
                }

            }
        }

        return new PageInfo<>(list);
    }

    @Override
    public PageInfo<IncomeCalculationExcelDTO> getIncomeCalculationDataOfPlByTime(
        QueryIncomeCalculationForPageReq req) {
        PageHelper.startPage(req.getBaseRequest().getPageNum(), req.getBaseRequest().getPageSize());

        List<IncomeCalculationExcelDTO> list = tIncomeCalculationStaticTimeSMapper.getIncomeCalculationDataOfPlByTime(
            req);
        if (CollectionUtils.isNotEmpty(list)) {
            for (IncomeCalculationExcelDTO dto : list) {
                Integer allBerthNums = dto.getBerthNum();
                allBerthNums = allBerthNums == null ? 0 : allBerthNums;
                dto.setBerthNum(allBerthNums);
                Long amount = dto.getAmount();
                amount = amount == null ? 0 : amount;
                Integer allParkDuration = dto.getAllParkDuration();
                allParkDuration = allParkDuration == null ? 0 : allParkDuration;
                //计算泊位平均收益 及 平均时长
                if (allBerthNums == null || allBerthNums == 0) {
                    dto.setAvgAmount(0);
                    dto.setAvgParkDuration(0.00);
                    ;
                } else {
                    dto.setAvgAmount(Math.round(amount / allBerthNums));
                    dto.setAvgParkDuration(Math.round(allParkDuration * 100.0 / allBerthNums) / 100.0);
                }

            }
        }

        return new PageInfo<>(list);
    }

    @Override
    public int batchSaveIncomeNum(List<TIncomeCalculationStaticNum> incomeNumList) {
        int count = tIncomeCalculationStaticNumSMapper.batchSaveIncomeNum(incomeNumList);
        return count;
    }

    @Override
    public int batchSaveIncomeTime(List<TIncomeCalculationStaticTime> incomeTimeList) {
        int count = tIncomeCalculationStaticTimeSMapper.batchSaveIncomeTime(incomeTimeList);
        return count;
    }



    @Override
    public List<IncomeCalculationDTO> staticIncomeByNumForNewColumnChart(QueryIncomeCalculationForPageReq req) {
        return tIncomeCalculationStaticNumSMapper.staticIncomeByNumForNewColumnChart(req);
    }

    @Override
    public List<IncomeCalculationDTO> staticIncomeByNumForNewLineChart(QueryIncomeCalculationForPageReq req) {
        return tIncomeCalculationStaticNumSMapper.staticIncomeByNumForNewLineChart(req);
    }

    @Override
    public PageInfo<IncomeCalculationExcelDTO> exportStaticIncomeExcelByNumForAllGroupByPlType(
        QueryIncomeCalculationForPageReq req) {
        PageHelper.startPage(req.getBaseRequest().getPageNum(), req.getBaseRequest().getPageSize());
        List<IncomeCalculationExcelDTO> list = tIncomeCalculationStaticNumSMapper
            .exportStaticIncomeExcelByNumForAllGroupByPlType(req);
        Map<String, Integer> berthNumMap = getAllBerthNumByCondition(req.getPlNos(), req.getBeginTime(),
            req.getEndTime());
        Integer allBerthNums = berthNumMap.values().stream().mapToInt(value -> value).sum();

        if (CollectionUtils.isNotEmpty(list)) {
            for (IncomeCalculationExcelDTO dto : list) {
                if (null == dto) {
                    continue;
                }
                dto.setBerthNum(allBerthNums);
                dto.setStaticDate(DateUtil.format(req.getBeginTime(), "yyyy-MM-dd") + "-" + DateUtil
                    .format(req.getEndTime(), "yyyy-MM-dd"));
                Long amount = dto.getAmount();
                amount = amount == null ? 0 : amount;
                Integer allParkDuration = dto.getAllParkDuration();
                allParkDuration = allParkDuration == null ? 0 : allParkDuration;
                //计算泊位平均收益 及 平均时长
                if (allBerthNums == null || allBerthNums == 0) {
                    dto.setAvgAmount(0);
                    ;
                    dto.setAvgParkDuration(0.00);
                    ;
                    ;
                } else {
                    dto.setAvgAmount(Math.round(amount / allBerthNums));
                    dto.setAvgParkDuration(Math.round(allParkDuration * 100.0 / allBerthNums) / 100.0);
                }
            }
        }
        return new PageInfo<>(list);
    }

    @Override
    public PageInfo<IncomeCalculationExcelDTO> getSummationIncomeByTimeOfArea(QueryIncomeCalculationForPageReq req) {

        if (0 == req.getBaseRequest().getPageNum()) {
            req.getBaseRequest().setPageNum(1);
        }
        req.setGroupType(2);
        req.setTimeType(100);
        PageHelper.startPage(req.getBaseRequest().getPageNum(), req.getBaseRequest().getPageSize());
        List<IncomeCalculationExcelDTO> list = tIncomeCalculationStaticTimeSMapper.getIncomeCalculationDataOfPlByTime(req);;
        return new PageInfo<>(list);
    }

    @Override
    public PageInfo<IncomeCalculationExcelDTO> getSummationIncomeByTimeOfPl(QueryIncomeCalculationForPageReq req) {
        if (0 == req.getBaseRequest().getPageNum()) {
            req.getBaseRequest().setPageNum(1);
        }
        req.setGroupType(2);
        req.setTimeType(100);
        PageHelper.startPage(req.getBaseRequest().getPageNum(), req.getBaseRequest().getPageSize());
        List<IncomeCalculationExcelDTO> list = tIncomeCalculationStaticTimeSMapper.getIncomeCalculationDataOfPlByTime(req);
        return new PageInfo<>(list);
    }

	@Override
	public void deleteNumInfoByPlNo(String plNo, String staDate) {
		TIncomeCalculationStaticNumExample example = new TIncomeCalculationStaticNumExample();
		example.createCriteria().andPlNoEqualTo(plNo).andStaticDateEqualTo(staDate);
		tIncomeCalculationStaticNumMapper.deleteByExample(example);
	}

	@Override
	public void deleteTimeInfoByPlNo(String plNo, String staDate) {
		TIncomeCalculationStaticTimeExample example = new TIncomeCalculationStaticTimeExample();
		example.createCriteria().andPlNoEqualTo(plNo).andStaticDateEqualTo(staDate);
		tIncomeCalculationStaticTimeMapper.deleteByExample(example);
	}

}