package com.zteits.park.biz; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.collections4.CollectionUtils; import com.clouds.common.utils.ListCopyUtil; import com.github.pagehelper.PageInfo; import com.xiaoleilu.hutool.date.DateUtil; import com.zteits.clouds.api.apibase.bean.BaseInfo; import com.zteits.clouds.api.apibase.bean.BizResult; import com.zteits.clouds.api.apibase.bean.PageBean; import com.zteits.clouds.api.apibase.constants.ErrorType; import com.zteits.clouds.api.apibase.exception.BizException; import com.zteits.clouds.api.dto.clouds.dto.EqpAndPdaEntryListDTO; import com.zteits.clouds.api.dto.clouds.dto.EqpAndPdaTimesDTO; import com.zteits.clouds.api.dto.clouds.dto.EqpInOutDurByTimeDTO; import com.zteits.clouds.api.dto.clouds.dto.EqpInOutMsgDTO; import com.zteits.clouds.api.dto.clouds.dto.EqpInOutParkDTO; import com.zteits.clouds.api.dto.clouds.dto.EqpInOutRoundAllParkDTO; import com.zteits.clouds.api.dto.clouds.dto.EqpInOutRoundByBlockDTO; import com.zteits.clouds.api.dto.clouds.dto.EqpInOutRoundByParkDTO; import com.zteits.clouds.api.dto.clouds.dto.EqpInOutRoundListDTO; import com.zteits.clouds.api.dto.clouds.dto.EqpInOutTimeNumsDTO; import com.zteits.clouds.api.dto.clouds.dto.EqpInOutTypeNumsDTO; import com.zteits.clouds.api.dto.clouds.param.EqpInOutMsgRequest; import com.zteits.clouds.api.dto.clouds.param.EqpInOutParkRequest; import com.zteits.clouds.api.dto.order.income.dto.IncomeRecentStatisticDTO; import com.zteits.clouds.api.dto.order.income.param.IncomeRecentStatisticRequest; import com.zteits.clouds.api.dto.park.dto.DurationEqpDTO; import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; import com.zteits.clouds.api.dto.park.param.ParkInfoByAreaBlockIdsRequest; import com.zteits.clouds.api.service.clouds.EqpInOutParkStatisticService; import com.zteits.park.dao.TpPEqpInoutRecordDAO; import com.zteits.park.pagepager.PageBeanUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service("com.zteits.park.biz.EqpInOutParkStatisticServiceImpl") public class EqpInOutParkStatisticServiceImpl implements EqpInOutParkStatisticService { private static final Logger log = LoggerFactory.getLogger(EqpInOutParkStatisticServiceImpl.class); @Autowired private TpPEqpInoutRecordDAO tpPEqpInoutRecordDAO; /** * 查询地磁进出场的统计 */ @Override public BizResult queryEqpInOutPark(EqpInOutParkRequest request) { /*****多表查询***************/ //1.根据时间判断在那张表 Date beginTime = request.getBeginTime(); Date endTime = request.getEndTime(); EqpInOutParkDTO eqpInOutParkSta = null; EqpInOutParkDTO eqpInOutParkDTO = this.queryEqpInOutParkMsg(request, eqpInOutParkSta, beginTime, endTime); return new BizResult(eqpInOutParkDTO); } //递归 public EqpInOutParkDTO queryEqpInOutParkMsg(EqpInOutParkRequest request, EqpInOutParkDTO eqpInOutParkDTO, Date beginTime, Date endTime) { DateFormat format = new SimpleDateFormat("yyyy-MM"); String beginTimeA = format.format(beginTime); String endTimeA = format.format(endTime); if (beginTimeA.equals(endTimeA)) { //开始时间和结束时间再同一个月 //查询统计数据-合并数据 eqpInOutParkDTO = this.queryEqpInOutPark(request, eqpInOutParkDTO, beginTime, endTime); return eqpInOutParkDTO; } else { /**开始时间和结束时间跨月份*/ //本次查询的开始时间 Date beginTimeB = this.getBeginTime(endTime); //下次查询的结束时间 Date endTimeB = this.getEndTime(endTime); eqpInOutParkDTO = queryEqpInOutPark(request, eqpInOutParkDTO, beginTimeB, endTime); return queryEqpInOutParkMsg(request, eqpInOutParkDTO, beginTime, endTimeB); } } //获取本月的第一天 private Date getBeginTime(Date endTime) { Date beginTime = null; //获取当前时间 Calendar cal = Calendar.getInstance(); cal.setTime(endTime); //按你的要求设置时间 cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), 1, 00, 00, 00); beginTime = cal.getTime(); return beginTime; } //获取上月的最后一天 private Date getEndTime(Date beginTime) { Date endTime = null; //获取当前时间 Calendar cal = Calendar.getInstance(); cal.setTime(beginTime); //调到上个月 cal.add(Calendar.MONTH, -1); //得到一个月最最后一天日期(31/30/29/28) int MaxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); //按你的要求设置时间 cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), MaxDay, 23, 59, 59); endTime = cal.getTime(); return endTime; } //获取查询的月份 private String getMonth(Date beginTime) { //获取当前时间 DateFormat format = new SimpleDateFormat("yyyyMM"); String tableMonth = format.format(beginTime); return tableMonth; } /** * 查询地磁的进出场数据 * * @param request * @param beginTime * @param endTime * @return 2017年11月20日 xiejp */ // @SuppressWarnings("unused") private EqpInOutParkDTO queryEqpInOutPark(EqpInOutParkRequest request, EqpInOutParkDTO eqpInOutParkDTO, Date beginTime, Date endTime) { EqpInOutParkDTO eqpInOutParkAll = new EqpInOutParkDTO(); request.setBeginTime(beginTime); request.setEndTime(endTime); //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(beginTime); request.setTableName(tableName); //查询数据库 EqpInOutParkDTO eqpInOutPark = tpPEqpInoutRecordDAO.queryEqpInOutPark(request); if (eqpInOutParkDTO != null) { if (eqpInOutPark != null) { //异常 eqpInOutParkAll.setNuNum1(eqpInOutParkDTO.getNuNum1() + eqpInOutPark.getNuNum1()); eqpInOutParkAll.setNuNum2(eqpInOutParkDTO.getNuNum2() + eqpInOutPark.getNuNum2()); eqpInOutParkAll.setNuNum3(eqpInOutParkDTO.getNuNum3() + eqpInOutPark.getNuNum3()); eqpInOutParkAll.setNuNum4(eqpInOutParkDTO.getNuNum4() + eqpInOutPark.getNuNum4()); eqpInOutParkAll.setNuNum5(eqpInOutParkDTO.getNuNum5() + eqpInOutPark.getNuNum5()); //正常 eqpInOutParkAll.setNormalNum1(eqpInOutParkDTO.getNormalNum1() + eqpInOutPark.getNormalNum1()); eqpInOutParkAll.setNormalNum2(eqpInOutParkDTO.getNormalNum2() + eqpInOutPark.getNormalNum2()); eqpInOutParkAll.setNormalNum3(eqpInOutParkDTO.getNormalNum3() + eqpInOutPark.getNormalNum3()); eqpInOutParkAll.setNormalNum4(eqpInOutParkDTO.getNormalNum4() + eqpInOutPark.getNormalNum4()); eqpInOutParkAll.setNormalNum5(eqpInOutParkDTO.getNormalNum5() + eqpInOutPark.getNormalNum5()); eqpInOutParkAll.setNormalNum6(eqpInOutParkDTO.getNormalNum6() + eqpInOutPark.getNormalNum6()); } else { BeanUtils.copyProperties(eqpInOutParkDTO, eqpInOutParkAll); } } else { BeanUtils.copyProperties(eqpInOutPark, eqpInOutParkAll); } return eqpInOutParkAll; } /** * 查询 地磁停车时长详细记录 */ @Override public BizResult> queryEqpInOutParkForList(EqpInOutMsgRequest request) { //1.根据时间判断在那张表 Date endTime = request.getEndTime(); PageBean pageBean = null; //先判断在哪张表 int pageNum = request.getBaseRequest().getPageNum(); int pageSize = request.getBaseRequest().getPageSize(); Integer startNum = (pageNum - 1) * pageSize; Map eqpMap = new HashMap<>(); eqpMap = eqpMap(request); request.setEndTime(endTime); request.setPageNum(pageSize); PageBean pageBeanAll = this.queryEqpInOutMsg(request, startNum, eqpMap, pageBean, endTime); Integer eqpNum = 0; for (Integer num : eqpMap.values()) { eqpNum += num; } if (pageBeanAll.getPageSize() != null) { pageBeanAll.setPageTotals(eqpNum); } return new BizResult>(pageBeanAll); } //递归查询 private PageBean queryEqpInOutMsg(EqpInOutMsgRequest request, Integer startNum, Map map, PageBean pageBean, Date endTime) { request.setStartNum(startNum); int pageSize = request.getBaseRequest().getPageSize(); String queryTime = this.getMonth(request.getEndTime()); Integer eqpNum = map.get(queryTime); DateFormat format = new SimpleDateFormat("yyyy-MM"); String beginTimeA = format.format(request.getBeginTime()); String endTimeA = format.format(request.getEndTime()); if (startNum + pageSize < eqpNum || beginTimeA.equals(endTimeA)) { /**都在本张表**/ if (pageBean != null) { //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(request.getEndTime()); request.setTableName(tableName); PageInfo pageInfo = tpPEqpInoutRecordDAO.queryEqpInOutMsg(request); PageBean pageBeanB = new PageBean<>(); PageBeanUtil.copyProperties(pageInfo, pageBeanB, EqpInOutMsgDTO.class); if (CollectionUtils.isNotEmpty(pageBeanB.getDataList())) { if (CollectionUtils.isNotEmpty(pageBean.getDataList())) { pageBean.getDataList().addAll(pageBeanB.getDataList()); pageBean.setPageTotals(pageBean.getPageTotals() + pageBeanB.getPageTotals()); } else { pageBean = pageBeanB; } } return pageBean; } else { //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(request.getEndTime()); request.setTableName(tableName); PageInfo pageInfo = tpPEqpInoutRecordDAO.queryEqpInOutMsg(request); PageBean pageBeanB = new PageBean<>(); PageBeanUtil.copyProperties(pageInfo, pageBeanB, EqpInOutMsgDTO.class); return pageBeanB; } } else if (startNum < eqpNum && (startNum + pageSize) > eqpNum) { /**跨表**/ //1.查询本表 //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(request.getEndTime()); request.setTableName(tableName); PageInfo pageInfo = tpPEqpInoutRecordDAO.queryEqpInOutMsg(request); PageBean pageBeanB = new PageBean<>(); PageBeanUtil.copyProperties(pageInfo, pageBeanB, EqpInOutMsgDTO.class); if (pageBean != null) { if (CollectionUtils.isNotEmpty(pageBeanB.getDataList())) { if (CollectionUtils.isNotEmpty(pageBean.getDataList())) { pageBean.getDataList().addAll(pageBeanB.getDataList()); pageBean.setPageTotals(pageBean.getPageTotals() + pageBeanB.getPageTotals()); } else { pageBean = pageBeanB; } } startNum -= map.get(this.getMonth(request.getEndTime())); //下次查询的结束时间 Date endTimeB = this.getEndTime(request.getEndTime()); request.setEndTime(endTimeB); return this.queryEqpInOutMsg(request, startNum, map, pageBean, endTime); } else { Integer pageNum = startNum + pageSize - map.get(this.getMonth(request.getEndTime())); startNum = 0; request.setPageNum(pageNum); //下次查询的结束时间 Date endTimeB = this.getEndTime(request.getEndTime()); request.setEndTime(endTimeB); return this.queryEqpInOutMsg(request, startNum, map, pageBeanB, endTime); } } else { /**都在下一张表**/ startNum = startNum - map.get(this.getMonth(request.getEndTime())); //下次查询的结束时间 Date endTimeB = this.getEndTime(request.getEndTime()); request.setEndTime(endTimeB); return this.queryEqpInOutMsg(request, startNum, map, pageBean, endTime); } } /** * 查询地磁数量 */ private Map eqpMap(EqpInOutMsgRequest request) { //1.根据时间判断在那张表 Date beginTime = request.getBeginTime(); Date endTime = request.getEndTime(); //先判断在哪张表 Map eqpMap = new HashMap<>(); eqpMap = eqpCount(request, eqpMap, beginTime, endTime); return eqpMap; } //递归查询符合条件的总条数 private Map eqpCount(EqpInOutMsgRequest request, Map map, Date beginTime, Date endTime) { DateFormat format = new SimpleDateFormat("yyyyMM"); String beginTimeA = format.format(beginTime); String endTimeA = format.format(endTime); request.setEndTime(endTime); if (beginTimeA.equals(endTimeA)) { //开始时间和结束时间再同一个月 //查询统计数据-合并数据 //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(endTime); request.setTableName(tableName); Integer count = tpPEqpInoutRecordDAO.queryEqpCount(request); map.put(endTimeA, count); return map; } else { /**开始时间和结束时间跨月份*/ //下次查询的结束时间 Date endTimeB = this.getEndTime(endTime); //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(endTime); request.setTableName(tableName); Integer count = tpPEqpInoutRecordDAO.queryEqpCount(request); map.put(endTimeA, count); return eqpCount(request, map, beginTime, endTimeB); } } /*****************************************************begin******** * 查询地磁所有停车场周转 */ @Override public BizResult queryEqpRoundForAllPark(EqpInOutMsgRequest request) { /*****多表查询***************/ //1.根据时间判断在那张表 Date beginTime = request.getBeginTime(); Date endTime = request.getEndTime(); EqpInOutRoundAllParkDTO eqpInOutParkSta = null; EqpInOutRoundAllParkDTO eqpInOutParkDTO = this.queryEqpRoundForAllPark(request, eqpInOutParkSta, beginTime, endTime); return new BizResult(eqpInOutParkDTO); } private EqpInOutRoundAllParkDTO queryEqpRoundForAllPark(EqpInOutMsgRequest request, EqpInOutRoundAllParkDTO eqpInOutParkDTO, Date beginTime, Date endTime) { DateFormat format = new SimpleDateFormat("yyyy-MM"); String beginTimeA = format.format(beginTime); String endTimeA = format.format(endTime); if (beginTimeA.equals(endTimeA)) { //开始时间和结束时间再同一个月 //查询统计数据-合并数据 eqpInOutParkDTO = this.queryEqpInOutRoundPark(request, eqpInOutParkDTO, beginTime, endTime); return eqpInOutParkDTO; } else { /**开始时间和结束时间跨月份*/ //本次查询的开始时间 Date beginTimeB = this.getBeginTime(endTime); //下次查询的结束时间 Date endTimeB = this.getEndTime(endTime); eqpInOutParkDTO = this.queryEqpInOutRoundPark(request, eqpInOutParkDTO, beginTimeB, endTime); return queryEqpRoundForAllPark(request, eqpInOutParkDTO, beginTime, endTimeB); } } /*******************************************end************** * 查询地磁所有停车场周转 * @param request * @param eqpInOutParkDTO * @param beginTime * @param endTime * @return * 2017年11月24日 xiejp */ private EqpInOutRoundAllParkDTO queryEqpInOutRoundPark(EqpInOutMsgRequest request, EqpInOutRoundAllParkDTO eqpInOutParkDTO, Date beginTime, Date endTime) { EqpInOutRoundAllParkDTO eqpInOutParkAll = new EqpInOutRoundAllParkDTO(); request.setBeginTime(beginTime); request.setEndTime(endTime); //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(beginTime); request.setTableName(tableName); //查询数据库 EqpInOutRoundAllParkDTO eqpInOutPark = tpPEqpInoutRecordDAO.queryEqpRoundForAllPark(request); if (eqpInOutParkDTO != null) { if (eqpInOutPark != null) { //正常 eqpInOutParkAll.setNormalNum0(eqpInOutParkDTO.getNormalNum0() + eqpInOutPark.getNormalNum0()); eqpInOutParkAll.setNormalNum1(eqpInOutParkDTO.getNormalNum1() + eqpInOutPark.getNormalNum1()); eqpInOutParkAll.setNormalNum2(eqpInOutParkDTO.getNormalNum2() + eqpInOutPark.getNormalNum2()); eqpInOutParkAll.setNormalNum3(eqpInOutParkDTO.getNormalNum3() + eqpInOutPark.getNormalNum3()); eqpInOutParkAll.setNormalNum4(eqpInOutParkDTO.getNormalNum4() + eqpInOutPark.getNormalNum4()); eqpInOutParkAll.setNormalNum5(eqpInOutParkDTO.getNormalNum5() + eqpInOutPark.getNormalNum5()); eqpInOutParkAll.setNormalNum6(eqpInOutParkDTO.getNormalNum6() + eqpInOutPark.getNormalNum6()); } else { BeanUtils.copyProperties(eqpInOutParkDTO, eqpInOutParkAll); } } else { BeanUtils.copyProperties(eqpInOutPark, eqpInOutParkAll); } return eqpInOutParkAll; } /*****************************************************begin******** * 查询地磁所有停车场周转-各个厂商 */ @Override public BizResult> queryEqpRoundByBlockIds(EqpInOutMsgRequest request) { /*****多表查询***************/ //1.根据时间判断在那张表 Date beginTime = request.getBeginTime(); Date endTime = request.getEndTime(); List eqpInOutParkSta = null; List eqpInOutParkDTO = this.queryEqpRoundByBlockIds(request, eqpInOutParkSta, beginTime, endTime); return new BizResult>(eqpInOutParkDTO); } private List queryEqpRoundByBlockIds(EqpInOutMsgRequest request, List eqpInOutParkDTO, Date beginTime, Date endTime) { DateFormat format = new SimpleDateFormat("yyyy-MM"); String beginTimeA = format.format(beginTime); String endTimeA = format.format(endTime); if (beginTimeA.equals(endTimeA)) { //开始时间和结束时间再同一个月 //查询统计数据-合并数据 eqpInOutParkDTO = this.queryEqpInOutRoundParkByBlock(request, eqpInOutParkDTO, beginTime, endTime); return eqpInOutParkDTO; } else { /**开始时间和结束时间跨月份*/ //本次查询的开始时间 Date beginTimeB = this.getBeginTime(endTime); //下次查询的结束时间 Date endTimeB = this.getEndTime(endTime); eqpInOutParkDTO = this.queryEqpInOutRoundParkByBlock(request, eqpInOutParkDTO, beginTimeB, endTime); return queryEqpRoundByBlockIds(request, eqpInOutParkDTO, beginTime, endTimeB); } } /*******************************************end************** * 查询地磁所有停车场周转 * @param request * @param eqpInOutParkDTO * @param beginTime * @param endTime * @return * 2017年11月24日 xiejp */ private List queryEqpInOutRoundParkByBlock(EqpInOutMsgRequest request, List eqpInOutParkDTOList, Date beginTime, Date endTime) { request.setBeginTime(beginTime); request.setEndTime(endTime); //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(beginTime); request.setTableName(tableName); //查询数据库 List eqpInOutParkList = tpPEqpInoutRecordDAO.queryEqpRoundByBlockIds(request); if (CollectionUtils.isNotEmpty(eqpInOutParkDTOList)) { if (CollectionUtils.isNotEmpty(eqpInOutParkList)) { for (EqpInOutRoundByBlockDTO eqpInOutParkDTO : eqpInOutParkDTOList) { for (EqpInOutRoundByBlockDTO eqpInOutPark : eqpInOutParkDTOList) { if (eqpInOutParkDTO.getFactoryNo().equals(eqpInOutPark.getFactoryNo())) { //正常 eqpInOutParkDTO.setNormalNum0( eqpInOutParkDTO.getNormalNum0() + eqpInOutPark.getNormalNum0()); eqpInOutParkDTO.setNormalNum1( eqpInOutParkDTO.getNormalNum1() + eqpInOutPark.getNormalNum1()); eqpInOutParkDTO.setNormalNum2( eqpInOutParkDTO.getNormalNum2() + eqpInOutPark.getNormalNum2()); eqpInOutParkDTO.setNormalNum3( eqpInOutParkDTO.getNormalNum3() + eqpInOutPark.getNormalNum3()); eqpInOutParkDTO.setNormalNum4( eqpInOutParkDTO.getNormalNum4() + eqpInOutPark.getNormalNum4()); eqpInOutParkDTO.setNormalNum5( eqpInOutParkDTO.getNormalNum5() + eqpInOutPark.getNormalNum5()); eqpInOutParkDTO.setNormalNum6( eqpInOutParkDTO.getNormalNum6() + eqpInOutPark.getNormalNum6()); } } } } else { return eqpInOutParkDTOList; } } else { return eqpInOutParkList; } return eqpInOutParkDTOList; } /** * 查询地磁所有停车场周转-单个停车场 */ @Override public BizResult> queryEqpInOutParkList(EqpInOutMsgRequest request) { /*****多表查询***************/ //1.根据时间判断在那张表 Date beginTime = request.getBeginTime(); Date endTime = request.getEndTime(); PageBean pageBean = null; PageBean eqpInOutParkDTO = this.queryEqpInOutParkList(request, pageBean, beginTime, endTime); return new BizResult>(eqpInOutParkDTO); } private PageBean queryEqpInOutParkList(EqpInOutMsgRequest request, PageBean pageBean, Date beginTime, Date endTime) { DateFormat format = new SimpleDateFormat("yyyy-MM"); String beginTimeA = format.format(beginTime); String endTimeA = format.format(endTime); if (beginTimeA.equals(endTimeA)) { //开始时间和结束时间再同一个月 //查询统计数据-合并数据 pageBean = this.queryEqpInOutParkListByPlNo(request, pageBean, beginTime, endTime); return pageBean; } else { /**开始时间和结束时间跨月份*/ //本次查询的开始时间 Date beginTimeB = this.getBeginTime(endTime); //下次查询的结束时间 Date endTimeB = this.getEndTime(endTime); pageBean = this.queryEqpInOutParkListByPlNo(request, pageBean, beginTimeB, endTime); return queryEqpInOutParkList(request, pageBean, beginTime, endTimeB); } } /*******************************************end************** * 查询地磁所有停车场周转 * @param request * @param eqpInOutParkDTO * @param beginTime * @param endTime * @return * 2017年11月24日 xiejp */ private PageBean queryEqpInOutParkListByPlNo(EqpInOutMsgRequest request, PageBean pageBean, Date beginTime, Date endTime) { request.setBeginTime(beginTime); request.setEndTime(endTime); //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(beginTime); request.setTableName(tableName); //查询数据库 PageInfo pageInfo = tpPEqpInoutRecordDAO.queryEqpInOutParkListByPlNo(request); PageBean pageBeanB = new PageBean<>(); PageBeanUtil.copyProperties(pageInfo, pageBeanB, EqpInOutRoundByParkDTO.class); if (pageBean != null) { if (CollectionUtils.isNotEmpty(pageBeanB.getDataList())) { for (EqpInOutRoundByParkDTO eqpInOutRound : pageBean.getDataList()) { for (EqpInOutRoundByParkDTO eqpInOut : pageBeanB.getDataList()) { if (eqpInOutRound.getPlNo().equals(eqpInOut.getPlNo())) { //正常 eqpInOutRound.setNormalNum0(eqpInOutRound.getNormalNum0() + eqpInOut.getNormalNum0()); eqpInOutRound.setNormalNum1(eqpInOutRound.getNormalNum1() + eqpInOut.getNormalNum1()); eqpInOutRound.setNormalNum2(eqpInOutRound.getNormalNum2() + eqpInOut.getNormalNum2()); eqpInOutRound.setNormalNum3(eqpInOutRound.getNormalNum3() + eqpInOut.getNormalNum3()); eqpInOutRound.setNormalNum4(eqpInOutRound.getNormalNum4() + eqpInOut.getNormalNum4()); eqpInOutRound.setNormalNum5(eqpInOutRound.getNormalNum5() + eqpInOut.getNormalNum5()); eqpInOutRound.setNormalNum6(eqpInOutRound.getNormalNum6() + eqpInOut.getNormalNum6()); } } } return pageBean; } else { return pageBean; } } else { return pageBeanB; } } /*************************************查询地磁周转详细信息************* * 查询地磁周转详细信息 */ @Override public BizResult> queryEqpInOutRoundList(EqpInOutMsgRequest request) { /*****多表查询***************/ //1.根据时间判断在那张表 Date beginTime = request.getBeginTime(); Date endTime = request.getEndTime(); PageBean pageBean = null; PageBean eqpInOutParkDTO = this.queryEqpInOutRoundList(request, pageBean, beginTime, endTime); return new BizResult>(eqpInOutParkDTO); } private PageBean queryEqpInOutRoundList(EqpInOutMsgRequest request, PageBean pageBean, Date beginTime, Date endTime) { DateFormat format = new SimpleDateFormat("yyyy-MM"); String beginTimeA = format.format(beginTime); String endTimeA = format.format(endTime); if (beginTimeA.equals(endTimeA)) { //开始时间和结束时间再同一个月 //查询统计数据-合并数据 pageBean = this.queryEqpInOutRoundListByTime(request, pageBean, beginTime, endTime); return pageBean; } else { /**开始时间和结束时间跨月份*/ //本次查询的开始时间 Date beginTimeB = this.getBeginTime(endTime); //下次查询的结束时间 Date endTimeB = this.getEndTime(endTime); pageBean = this.queryEqpInOutRoundListByTime(request, pageBean, beginTimeB, endTime); return queryEqpInOutRoundList(request, pageBean, beginTime, endTimeB); } } /*******************************************end************** * 查询地磁周转详细信息 * @param request * @param eqpInOutParkDTO * @param beginTime * @param endTime * @return * 2017年11月24日 xiejp */ private PageBean queryEqpInOutRoundListByTime(EqpInOutMsgRequest request, PageBean pageBean, Date beginTime, Date endTime) { request.setBeginTime(beginTime); request.setEndTime(endTime); //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(beginTime); request.setTableName(tableName); //查询数据库 PageInfo pageInfo = tpPEqpInoutRecordDAO.queryEqpInOutRoundList(request); PageBean pageBeanB = new PageBean<>(); PageBeanUtil.copyProperties(pageInfo, pageBeanB, EqpInOutRoundListDTO.class); if (pageBean != null) { if (CollectionUtils.isNotEmpty(pageBeanB.getDataList())) { for (EqpInOutRoundListDTO eqpInOutRound : pageBean.getDataList()) { for (EqpInOutRoundListDTO eqpInOut : pageBeanB.getDataList()) { if (eqpInOutRound.getEqpNo().equals(eqpInOut.getEqpNo())) { eqpInOutRound.setNum(eqpInOutRound.getNum() + eqpInOut.getNum()); } } } return pageBean; } else { return pageBean; } } else { return pageBeanB; } } /** * 平均停车时长趋势图-按时 */ @Override public BizResult> queryEqpDurByTime(EqpInOutMsgRequest request) { List eqpInOutList = new ArrayList(); DateFormat format = new SimpleDateFormat("yyyyMMdd"); String beginTimeA = format.format(request.getBeginTime()); String endTimeA = format.format(request.getEndTime()); if (beginTimeA.equals(endTimeA)) { //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(request.getBeginTime()); request.setTableName(tableName); //查询一天的数据-按小时统计 eqpInOutList = tpPEqpInoutRecordDAO.queryEqpDurByHourTime(request); eqpInOutList = this.getEqpInOutDurByTime(request, eqpInOutList); } else { //1.根据时间判断在那张表 Date beginTime = request.getBeginTime(); Date endTime = request.getEndTime(); List eqpInOutDurByTimeDTOList = null; //查询多天的数据-按天统计 eqpInOutList = this.queryEqpDurByDayTime(request, eqpInOutDurByTimeDTOList, beginTime, endTime); eqpInOutList = this.getEqpInOutDurByTime(request, eqpInOutList); } return new BizResult>(eqpInOutList); } //基本数据-按时统计 private List getEqpInOutDurByTime(EqpInOutMsgRequest request, List eqpInOutList) { List eqpInOutListR = new ArrayList(); DateFormat format = new SimpleDateFormat("yyyyMMdd"); String beginTimeA = format.format(request.getBeginTime()); String endTimeA = format.format(request.getEndTime()); if (beginTimeA.equals(endTimeA)) { //查询一天的数据-按小时统计 for (int i = 0; i < 12; i++) { EqpInOutDurByTimeDTO eqpInOutDurByTime = new EqpInOutDurByTimeDTO(); eqpInOutDurByTime.setQueryDate(i * 2 + "时"); eqpInOutDurByTime.setAvgTime(0); eqpInOutListR.add(eqpInOutDurByTime); } for (EqpInOutDurByTimeDTO eqpInOutDurByTime : eqpInOutListR) { for (EqpInOutDurByTimeDTO eqpInOut : eqpInOutList) { if (eqpInOut.getQueryDate().equals(eqpInOutDurByTime.getQueryDate())) { eqpInOutDurByTime.setAvgTime(eqpInOut.getAvgTime()); } } } } else { //查询多天的数据-按天统计 Date beginTime = request.getBeginTime(); Date endTime = request.getEndTime(); eqpInOutListR = this.getEqpInOutDurByTimeDTO(eqpInOutListR, beginTime, endTime); for (EqpInOutDurByTimeDTO eqpInOutDurByTime : eqpInOutListR) { for (EqpInOutDurByTimeDTO eqpInOut : eqpInOutList) { if (eqpInOut.getQueryDate().equals(eqpInOutDurByTime.getQueryDate())) { eqpInOutDurByTime.setAvgTime(eqpInOut.getAvgTime()); } } } } return eqpInOutListR; } //递归 private List getEqpInOutDurByTimeDTO(List eqpInOutListR, Date beginTime, Date endTime) { DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); String beginTimeA = format.format(beginTime); String endTimeA = format.format(endTime); EqpInOutDurByTimeDTO eqpInOutDurByTime = new EqpInOutDurByTimeDTO(); if (beginTimeA.equals(endTimeA)) { eqpInOutDurByTime.setQueryDate(beginTimeA); eqpInOutDurByTime.setAvgTime(0); eqpInOutListR.add(eqpInOutDurByTime); return eqpInOutListR; } else { eqpInOutDurByTime.setQueryDate(beginTimeA); eqpInOutDurByTime.setAvgTime(0); eqpInOutListR.add(eqpInOutDurByTime); return getEqpInOutDurByTimeDTO(eqpInOutListR, getBeforeTime(beginTime), endTime); } } //获取后一天 private Date getBeforeTime(Date beginTime) { Date date = null; Calendar calendar = Calendar.getInstance(); calendar.setTime(beginTime); calendar.add(Calendar.DAY_OF_MONTH, +1);//+1今天的时间加一天 date = calendar.getTime(); return date; } //按天统计 private List queryEqpDurByDayTime(EqpInOutMsgRequest request, List eqpInOutDurByTimeDTOList, Date beginTime, Date endTime) { DateFormat format = new SimpleDateFormat("yyyyMM"); String beginTimeA = format.format(beginTime); String endTimeA = format.format(endTime); if (beginTimeA.equals(endTimeA)) { //开始时间和结束时间再同一个月 //查询统计数据-合并数据 eqpInOutDurByTimeDTOList = this.queryEqpInOutDurByDayTime(request, eqpInOutDurByTimeDTOList, beginTime, endTime); return eqpInOutDurByTimeDTOList; } else { /**开始时间和结束时间跨月份*/ //本次查询的开始时间 Date beginTimeB = this.getBeginTime(endTime); //下次查询的结束时间 Date endTimeB = this.getEndTime(endTime); eqpInOutDurByTimeDTOList = this.queryEqpInOutDurByDayTime(request, eqpInOutDurByTimeDTOList, beginTimeB, endTime); return queryEqpDurByDayTime(request, eqpInOutDurByTimeDTOList, beginTime, endTimeB); } } /*******************************************end************** * 按天统计 * @param request * @param eqpInOutParkDTO * @param beginTime * @param endTime * @return * 2017年11月24日 xiejp */ private List queryEqpInOutDurByDayTime(EqpInOutMsgRequest request, List eqpInOutParkDTOList, Date beginTime, Date endTime) { request.setBeginTime(beginTime); //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(beginTime); request.setTableName(tableName); //查询数据库 List eqpInOutParkList = tpPEqpInoutRecordDAO.queryEqpDurByDayTime(request); if (CollectionUtils.isNotEmpty(eqpInOutParkDTOList)) { if (CollectionUtils.isNotEmpty(eqpInOutParkList)) { eqpInOutParkDTOList.addAll(eqpInOutParkList); } else { return eqpInOutParkDTOList; } } else { return eqpInOutParkList; } return eqpInOutParkDTOList; } /** * 地磁停车时长详细记录 -导出 */ @Override public BizResult> queryEqpInOutParkExcel(EqpInOutMsgRequest request) { //1.根据时间判断在那张表 Date endTime = request.getEndTime(); PageBean pageBean = null; //先判断在哪张表 Integer startNum = 0; Map eqpMap = new HashMap<>(); request.setEqpStayBegin(0); request.setEqpStayEnd(31536000); eqpMap = eqpMap(request); request.getBaseRequest().setPageNum(1); request.setEndTime(endTime); PageBean pageBeanAll = this.queryEqpInOutMsgExcel(request, startNum, eqpMap, pageBean, endTime); return new BizResult>(pageBeanAll); } //递归查询 private PageBean queryEqpInOutMsgExcel(EqpInOutMsgRequest request, Integer startNum, Map map, PageBean pageBean, Date endTime) { request.setStartNum(startNum); String queryTime = this.getMonth(request.getEndTime()); Integer eqpNum = map.get(queryTime); request.setPageNum(eqpNum); DateFormat format = new SimpleDateFormat("yyyy-MM"); String beginTimeA = format.format(request.getBeginTime()); String endTimeA = format.format(request.getEndTime()); if (beginTimeA.equals(endTimeA)) { /**都在本张表**/ if (pageBean != null) { //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(request.getEndTime()); request.setTableName(tableName); PageInfo pageInfo = tpPEqpInoutRecordDAO.queryEqpInOutMsg(request); PageBean pageBeanB = new PageBean<>(); PageBeanUtil.copyProperties(pageInfo, pageBeanB, EqpInOutMsgDTO.class); if (CollectionUtils.isNotEmpty(pageBeanB.getDataList())) { if (CollectionUtils.isNotEmpty(pageBean.getDataList())) { pageBean.getDataList().addAll(pageBeanB.getDataList()); pageBean.setPageTotals(pageBean.getPageTotals() + pageBeanB.getPageTotals()); } else { pageBean = pageBeanB; } } return pageBean; } else { //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(request.getEndTime()); request.setTableName(tableName); PageInfo pageInfo = tpPEqpInoutRecordDAO.queryEqpInOutMsg(request); PageBean pageBeanB = new PageBean<>(); PageBeanUtil.copyProperties(pageInfo, pageBeanB, EqpInOutMsgDTO.class); return pageBeanB; } } else { //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(request.getEndTime()); request.setTableName(tableName); PageInfo pageInfo = tpPEqpInoutRecordDAO.queryEqpInOutMsg(request); PageBean pageBeanB = new PageBean<>(); PageBeanUtil.copyProperties(pageInfo, pageBeanB, EqpInOutMsgDTO.class); if (pageBean != null) { if (CollectionUtils.isNotEmpty(pageBeanB.getDataList())) { if (CollectionUtils.isNotEmpty(pageBean.getDataList())) { pageBean.getDataList().addAll(pageBeanB.getDataList()); pageBean.setPageTotals(pageBean.getPageTotals() + pageBeanB.getPageTotals()); } else { pageBean = pageBeanB; } } //下次查询的结束时间 Date endTimeB = this.getEndTime(request.getEndTime()); request.setEndTime(endTimeB); return this.queryEqpInOutMsg(request, startNum, map, pageBean, endTime); } else { //下次查询的结束时间 Date endTimeB = this.getEndTime(request.getEndTime()); request.setEndTime(endTimeB); return this.queryEqpInOutMsgExcel(request, startNum, map, pageBeanB, endTime); } } } @Override public BizResult> getParkListByBlockIds(ParkInfoByAreaBlockIdsRequest request) { List list = tpPEqpInoutRecordDAO.getParkListByBlockIds(request); return new BizResult>(list); } @Override public BizResult> getBlockIdListByBlockIds(ParkInfoByAreaBlockIdsRequest request) { List list = tpPEqpInoutRecordDAO.getBlockIdListByBlockIds(request); return new BizResult>(list); } @Override public BizResult queryPdaAndEqpTypeNums(EqpInOutParkRequest request) { /*****多表查询***************/ //1.根据时间判断在那张表 Date beginTime = request.getBeginTime(); Date endTime = request.getEndTime(); EqpInOutTypeNumsDTO eqpInOutParkSta = null; EqpInOutTypeNumsDTO eqpInOutParkDTO = this.queryPdaAndEqpTypeNumsMsg(request, eqpInOutParkSta, beginTime, endTime); return new BizResult(eqpInOutParkDTO); } private EqpInOutTypeNumsDTO queryPdaAndEqpTypeNumsMsg(EqpInOutParkRequest request, EqpInOutTypeNumsDTO eqpInOutTypeNumsDTO, Date beginTime, Date endTime) { DateFormat format = new SimpleDateFormat("yyyy-MM"); String beginTimeA = format.format(beginTime); String endTimeA = format.format(endTime); if (beginTimeA.equals(endTimeA)) { //开始时间和结束时间再同一个月 //查询统计数据-合并数据 eqpInOutTypeNumsDTO = this.queryPdaAndEqpTypeNums(request, eqpInOutTypeNumsDTO, beginTime, endTime); return eqpInOutTypeNumsDTO; } else { /**开始时间和结束时间跨月份*/ //本次查询的开始时间 Date beginTimeB = this.getBeginTime(endTime); //下次查询的结束时间 Date endTimeB = this.getEndTime(endTime); eqpInOutTypeNumsDTO = queryPdaAndEqpTypeNums(request, eqpInOutTypeNumsDTO, beginTimeB, endTime); return queryPdaAndEqpTypeNumsMsg(request, eqpInOutTypeNumsDTO, beginTime, endTimeB); } } private EqpInOutTypeNumsDTO queryPdaAndEqpTypeNums(EqpInOutParkRequest request, EqpInOutTypeNumsDTO eqpInOutParkDTO, Date beginTime, Date endTime) { EqpInOutTypeNumsDTO eqpInOutParkAll = new EqpInOutTypeNumsDTO(); request.setBeginTime(beginTime); request.setEndTime(endTime); //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(beginTime); request.setTableName(tableName); //查询数据库 EqpInOutTypeNumsDTO eqpInOutPark = tpPEqpInoutRecordDAO.queryPdaAndEqpTypeNums(request); if (eqpInOutParkDTO != null) { if (eqpInOutPark != null) { eqpInOutParkAll.setAgreementNums( (eqpInOutParkDTO.getAgreementNums() == null ? 0 : eqpInOutParkDTO.getAgreementNums()) + (eqpInOutPark.getAgreementNums() == null ? 0 : eqpInOutPark.getAgreementNums())); eqpInOutParkAll.setAtypismNums( (eqpInOutParkDTO.getAtypismNums() == null ? 0 : eqpInOutParkDTO.getAtypismNums()) + (eqpInOutPark.getAtypismNums() == null ? 0 : eqpInOutPark.getAtypismNums())); eqpInOutParkAll.setEqpTimes((eqpInOutParkDTO.getEqpTimes() == null ? 0 : eqpInOutParkDTO.getEqpTimes()) + (eqpInOutPark.getEqpTimes() == null ? 0 : eqpInOutPark.getEqpTimes())); eqpInOutParkAll.setPdaTimes((eqpInOutParkDTO.getPdaTimes() == null ? 0 : eqpInOutParkDTO.getPdaTimes()) + (eqpInOutPark.getPdaTimes() == null ? 0 : eqpInOutPark.getPdaTimes())); } else { BeanUtils.copyProperties(eqpInOutParkDTO, eqpInOutParkAll); } } else { if (eqpInOutPark != null) { BeanUtils.copyProperties(eqpInOutPark, eqpInOutParkAll); } } return eqpInOutParkAll; } @Override public BizResult queryInputNumsByTimes(EqpInOutParkRequest request) { /*****多表查询***************/ //1.根据时间判断在那张表 Date beginTime = request.getBeginTime(); Date endTime = request.getEndTime(); EqpInOutTimeNumsDTO eqpInOutParkSta = null; EqpInOutTimeNumsDTO eqpInOutParkDTO = this.queryInputNumsByTimesMsg(request, eqpInOutParkSta, beginTime, endTime); return new BizResult(eqpInOutParkDTO); } private EqpInOutTimeNumsDTO queryInputNumsByTimesMsg(EqpInOutParkRequest request, EqpInOutTimeNumsDTO eqpInOutTypeNumsDTO, Date beginTime, Date endTime) { DateFormat format = new SimpleDateFormat("yyyy-MM"); String beginTimeA = format.format(beginTime); String endTimeA = format.format(endTime); if (beginTimeA.equals(endTimeA)) { //开始时间和结束时间再同一个月 //查询统计数据-合并数据 eqpInOutTypeNumsDTO = this.queryInputNumsByTimes(request, eqpInOutTypeNumsDTO, beginTime, endTime); return eqpInOutTypeNumsDTO; } else { /**开始时间和结束时间跨月份*/ //本次查询的开始时间 Date beginTimeB = this.getBeginTime(endTime); //下次查询的结束时间 Date endTimeB = this.getEndTime(endTime); eqpInOutTypeNumsDTO = queryInputNumsByTimes(request, eqpInOutTypeNumsDTO, beginTimeB, endTime); return queryInputNumsByTimesMsg(request, eqpInOutTypeNumsDTO, beginTime, endTimeB); } } private EqpInOutTimeNumsDTO queryInputNumsByTimes(EqpInOutParkRequest request, EqpInOutTimeNumsDTO eqpInOutParkDTO, Date beginTime, Date endTime) { EqpInOutTimeNumsDTO eqpInOutParkAll = new EqpInOutTimeNumsDTO(); request.setBeginTime(beginTime); request.setEndTime(endTime); //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(beginTime); request.setTableName(tableName); //查询数据库 EqpInOutTimeNumsDTO eqpInOutPark = tpPEqpInoutRecordDAO.queryInputNumsByTimes(request); if (eqpInOutParkDTO != null) { if (eqpInOutPark != null) { eqpInOutParkAll.setFiveMinNums( (eqpInOutParkDTO.getFiveMinNums() == null ? 0 : eqpInOutParkDTO.getFiveMinNums()) + (eqpInOutPark.getFiveMinNums() == null ? 0 : eqpInOutPark.getFiveMinNums())); eqpInOutParkAll.setOverThirtyMinNums( (eqpInOutParkDTO.getOverThirtyMinNums() == null ? 0 : eqpInOutParkDTO.getOverThirtyMinNums()) + (eqpInOutPark.getOverThirtyMinNums() == null ? 0 : eqpInOutPark.getOverThirtyMinNums())); eqpInOutParkAll.setTenMinNums( (eqpInOutParkDTO.getTenMinNums() == null ? 0 : eqpInOutParkDTO.getTenMinNums()) + (eqpInOutPark.getTenMinNums() == null ? 0 : eqpInOutPark.getTenMinNums())); eqpInOutParkAll.setThirtyMinNums( (eqpInOutParkDTO.getThirtyMinNums() == null ? 0 : eqpInOutParkDTO.getThirtyMinNums()) + (eqpInOutPark.getThirtyMinNums() == null ? 0 : eqpInOutPark.getThirtyMinNums())); eqpInOutParkAll.setTwentyMinNums( (eqpInOutParkDTO.getTwentyMinNums() == null ? 0 : eqpInOutParkDTO.getTwentyMinNums()) + (eqpInOutPark.getTwentyMinNums() == null ? 0 : eqpInOutPark.getTwentyMinNums())); } else { BeanUtils.copyProperties(eqpInOutParkDTO, eqpInOutParkAll); } } else { BeanUtils.copyProperties(eqpInOutPark, eqpInOutParkAll); } return eqpInOutParkAll; } /** * 查询录入次数 按时间 详情 */ @Override public BizResult> queryInputNumsByTimesList(EqpInOutParkRequest request) { //1.根据时间判断在那张表 Date endTime = request.getEndTime(); PageBean pageBean = null; //先判断在哪张表 int pageNum = request.getBaseRequest().getPageNum(); int pageSize = request.getBaseRequest().getPageSize(); if (pageSize < 1) { pageSize = Integer.MAX_VALUE; request.getBaseRequest().setPageSize(pageSize); } Integer startNum = (pageNum - 1) * pageSize; Map totalMap = new HashMap<>(); totalMap = totalMap(request); request.setEndTime(endTime); request.setPageNum(pageSize); PageBean pageBeanAll = this.queryInputNumsByTimesList(request, startNum, totalMap, pageBean, endTime); Integer eqpNum = 0; for (Integer num : totalMap.values()) { eqpNum += num; } if (pageBeanAll.getPageSize() != null) { pageBeanAll.setPageTotals(eqpNum); } return new BizResult>(pageBeanAll); } //递归查询 private PageBean queryInputNumsByTimesList(EqpInOutParkRequest request, Integer startNum, Map map, PageBean pageBean, Date endTime) { request.setStartNum(startNum); int pageSize = request.getBaseRequest().getPageSize(); String queryTime = this.getMonth(request.getEndTime()); Integer eqpNum = map.get(queryTime); DateFormat format = new SimpleDateFormat("yyyy-MM"); String beginTimeA = format.format(request.getBeginTime()); String endTimeA = format.format(request.getEndTime()); if (startNum + pageSize < eqpNum || beginTimeA.equals(endTimeA)) { /**都在本张表**/ if (pageBean != null) { //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(request.getEndTime()); request.setTableName(tableName); request.setBaseRequest(new BaseInfo(startNum, eqpNum)); PageInfo pageInfo = tpPEqpInoutRecordDAO.queryInputNumsByTimesList(request); PageBean pageBeanB = new PageBean<>(); PageBeanUtil.copyProperties(pageInfo, pageBeanB, EqpInOutTimeNumsDTO.class); if (CollectionUtils.isNotEmpty(pageBeanB.getDataList())) { if (CollectionUtils.isNotEmpty(pageBean.getDataList())) { pageBean.getDataList().addAll(pageBeanB.getDataList()); pageBean.setPageTotals(pageBean.getPageTotals() + pageBeanB.getPageTotals()); } else { pageBean = pageBeanB; } } return pageBean; } else { //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(request.getEndTime()); request.setTableName(tableName); PageInfo pageInfo = tpPEqpInoutRecordDAO.queryInputNumsByTimesList(request); PageBean pageBeanB = new PageBean<>(); PageBeanUtil.copyProperties(pageInfo, pageBeanB, EqpInOutTimeNumsDTO.class); return pageBeanB; } } else if (startNum < eqpNum && (startNum + pageSize) > eqpNum) { /**跨表**/ //1.查询本表 //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(request.getEndTime()); request.setTableName(tableName); PageInfo pageInfo = tpPEqpInoutRecordDAO.queryInputNumsByTimesList(request); PageBean pageBeanB = new PageBean<>(); PageBeanUtil.copyProperties(pageInfo, pageBeanB, EqpInOutTimeNumsDTO.class); if (pageBean != null) { if (CollectionUtils.isNotEmpty(pageBeanB.getDataList())) { if (CollectionUtils.isNotEmpty(pageBean.getDataList())) { pageBean.getDataList().addAll(pageBeanB.getDataList()); pageBean.setPageTotals(pageBean.getPageTotals() + pageBeanB.getPageTotals()); } else { pageBean = pageBeanB; } } startNum -= map.get(this.getMonth(request.getEndTime())); //下次查询的结束时间 Date endTimeB = this.getEndTime(request.getEndTime()); request.setEndTime(endTimeB); return this.queryInputNumsByTimesList(request, startNum, map, pageBean, endTime); } else { Integer pageNum = startNum + pageSize - map.get(this.getMonth(request.getEndTime())); startNum = 0; request.setPageNum(pageNum); //下次查询的结束时间 Date endTimeB = this.getEndTime(request.getEndTime()); request.setEndTime(endTimeB); return this.queryInputNumsByTimesList(request, startNum, map, pageBeanB, endTime); } } else { /**都在下一张表**/ startNum = startNum - map.get(this.getMonth(request.getEndTime())); //下次查询的结束时间 Date endTimeB = this.getEndTime(request.getEndTime()); request.setEndTime(endTimeB); return this.queryInputNumsByTimesList(request, startNum, map, pageBean, endTime); } } /** * 查询总数 */ private Map totalMap(EqpInOutParkRequest request) { //1.根据时间判断在那张表 Date beginTime = request.getBeginTime(); Date endTime = request.getEndTime(); //先判断在哪张表 Map totalMap = new HashMap<>(); totalMap = totalCount(request, totalMap, beginTime, endTime); return totalMap; } //递归查询符合条件的总条数 private Map totalCount(EqpInOutParkRequest request, Map map, Date beginTime, Date endTime) { DateFormat format = new SimpleDateFormat("yyyyMM"); String beginTimeA = format.format(beginTime); String endTimeA = format.format(endTime); request.setEndTime(endTime); if (beginTimeA.equals(endTimeA)) { //开始时间和结束时间再同一个月 //查询统计数据-合并数据 //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(endTime); request.setTableName(tableName); Integer count = tpPEqpInoutRecordDAO.queryInputNumsByTimesListCount(request); map.put(endTimeA, count); return map; } else { /**开始时间和结束时间跨月份*/ //下次查询的结束时间 Date endTimeB = this.getEndTime(endTime); //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(endTime); request.setTableName(tableName); Integer count = tpPEqpInoutRecordDAO.queryInputNumsByTimesListCount(request); map.put(endTimeA, count); return totalCount(request, map, beginTime, endTimeB); } } @Override public BizResult> queryEqpAndPdaTimesForLine(EqpInOutParkRequest request) { /*****多表查询***************/ //1.根据时间判断在那张表 Date beginTime = request.getBeginTime(); Date endTime = request.getEndTime(); Date beginTimes = request.getBeginTime(); Date endTimes = request.getEndTime(); List eqpInOutParkSta = new ArrayList<>(); List eqpInOutParkDTO = this.queryEqpAndPdaTimesMsg(request, eqpInOutParkSta, beginTime, endTime); eqpInOutParkDTO = fillDatas(eqpInOutParkDTO, request, beginTimes, endTimes); return new BizResult>(eqpInOutParkDTO); } /** * 填充为空的数据 * * @param list * @param request * @return 2018年7月30日 wangfei */ private List fillDatas(List list, EqpInOutParkRequest request, Date beginTimes, Date endTimes) { List result = new ArrayList<>(); DateFormat hourformat = new SimpleDateFormat("yyyy-MM-dd HH"); DateFormat dayformat = new SimpleDateFormat("yyyy-MM-dd"); if (0 == request.getTimeType()) {//按小时 Date time = beginTimes; while (time.getTime() < (endTimes.getTime())) { EqpAndPdaTimesDTO dto = new EqpAndPdaTimesDTO(); dto.setStaticTime(DateUtil.format(time, hourformat)); result.add(dto); time = DateUtil.offsetHour(time, 1); } } else {//按天 Date time = beginTimes; while (time.getTime() < (endTimes.getTime())) { EqpAndPdaTimesDTO dto = new EqpAndPdaTimesDTO(); dto.setStaticTime(DateUtil.format(time, dayformat)); result.add(dto); time = DateUtil.offsetDay(time, 1); } } for (EqpAndPdaTimesDTO r : result) { for (EqpAndPdaTimesDTO l : list) { if (r.getStaticTime().equals(l.getStaticTime())) { BeanUtils.copyProperties(l, r); } } } return result; } private List queryEqpAndPdaTimesMsg(EqpInOutParkRequest request, List eqpInOutTypeNumsDTO, Date beginTime, Date endTime) { DateFormat format = new SimpleDateFormat("yyyy-MM"); String beginTimeA = format.format(beginTime); String endTimeA = format.format(endTime); if (beginTimeA.equals(endTimeA)) { //开始时间和结束时间再同一个月 //查询统计数据-合并数据 eqpInOutTypeNumsDTO = this.queryEqpAndPdaTimes(request, eqpInOutTypeNumsDTO, beginTime, endTime); return eqpInOutTypeNumsDTO; } else { /**开始时间和结束时间跨月份*/ //本次查询的开始时间 Date beginTimeB = this.getBeginTime(endTime); //下次查询的结束时间 Date endTimeB = this.getEndTime(endTime); eqpInOutTypeNumsDTO = queryEqpAndPdaTimes(request, eqpInOutTypeNumsDTO, beginTimeB, endTime); return queryEqpAndPdaTimesMsg(request, eqpInOutTypeNumsDTO, beginTime, endTimeB); } } private List queryEqpAndPdaTimes(EqpInOutParkRequest request, List eqpInOutParkDTO, Date beginTime, Date endTime) { List eqpInOutParkAll = new ArrayList(); request.setBeginTime(beginTime); request.setEndTime(endTime); //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(beginTime); request.setTableName(tableName); //查询数据库 List eqpInOutPark = tpPEqpInoutRecordDAO.queryEqpAndPdaTimesForLine(request); if (CollectionUtils.isNotEmpty(eqpInOutParkDTO)) { if (CollectionUtils.isNotEmpty(eqpInOutPark)) { eqpInOutParkAll.addAll(eqpInOutPark); } else { ListCopyUtil.listCopyProperties(eqpInOutParkDTO, eqpInOutParkAll, EqpAndPdaTimesDTO.class); } } else { if (CollectionUtils.isNotEmpty(eqpInOutPark)) { ListCopyUtil.listCopyProperties(eqpInOutPark, eqpInOutParkAll, EqpAndPdaTimesDTO.class); } } return eqpInOutParkAll; } @Override public BizResult> queryEqpAndPdaReportTimeList(EqpInOutParkRequest request) { //1.根据时间判断在那张表 Date endTime = request.getEndTime(); PageBean pageBean = null; //先判断在哪张表 int pageNum = request.getBaseRequest().getPageNum(); int pageSize = request.getBaseRequest().getPageSize(); if (pageSize < 1) { pageSize = Integer.MAX_VALUE; request.getBaseRequest().setPageSize(pageSize); } Integer startNum = (pageNum - 1) * pageSize; Map totalMap = new HashMap<>(); totalMap = totalMapForEqpAndPda(request); request.setEndTime(endTime); request.setPageNum(pageSize); Integer eqpTotalNum = 0; for (Integer num : totalMap.values()) { eqpTotalNum += num; } //原始数据集合 //PageBean pageBeanAll = this.queryEqpAndPdaTimesList(request, startNum, totalMap, // pageBean, endTime); //新版修改的 PageBean pageBeanAll = this.queryEqpAndPdaTimesList(request, startNum, request.getBaseRequest().getPageSize(), totalMap, pageBean, endTime, eqpTotalNum, 0); if (pageBeanAll == null) { pageBeanAll = new PageBean<>(); pageBeanAll.setDataList(new ArrayList<>()); pageBeanAll.setPageSize(10); pageBeanAll.setPageTotals(0); } pageBeanAll.setPageSize(pageSize); pageBeanAll.setPageTotals(eqpTotalNum); return new BizResult<>(pageBeanAll); } //递归查询 private PageBean queryEqpAndPdaTimesList(EqpInOutParkRequest request, Integer startNum, Integer pageSize, Map eqpNumMap, PageBean pageBean, Date queryMonth, Integer totalEqpNum, int countNum) { log.info("递归调用第{}次", countNum); //避免死循环,查询100次后就退出 if (countNum > 100) { return pageBean; } countNum++; String monthStr = DateUtil.format(queryMonth, "yyyyMM"); Integer monthEqpNum = eqpNumMap.get(monthStr); monthEqpNum = monthEqpNum == null ? -1 : monthEqpNum; startNum = startNum - monthEqpNum; queryMonth = DateUtil.offsetMonth(queryMonth, -1); if (startNum >= 0) { // 此时startNum 大于0 说明当前月的数据还不是要获取的数据月 return this.queryEqpAndPdaTimesList(request, startNum, pageSize, eqpNumMap, pageBean, queryMonth, totalEqpNum, countNum); } startNum = monthEqpNum + startNum; String tableName = "tp_p_eqp_inout_record" + monthStr; request.setTableName(tableName); request.setStartNum(startNum); request.setPageNum(pageSize); PageInfo pageInfo = tpPEqpInoutRecordDAO.queryEqpAndPdaReportTimeList(request); if (pageBean == null) { pageBean = new PageBean<>(); pageBean.setDataList(new ArrayList<>()); } pageBean.getDataList().addAll(pageInfo.getList()); //如果本次总的获取的数据 已经大于等于要获取的数据 或者 总的获取的数据 已经 大于等于 数据库的数据了 可以退出了 if (pageBean.getDataList().size() >= request.getBaseRequest().getPageSize() || pageBean.getDataList().size() >= totalEqpNum) { return pageBean; } //本次获取的pageSize 小于等于 本次获取的数据集了,说明已经获取完了,可以返回集合了 pageSize = pageSize - pageInfo.getList().size(); if (pageSize <= 0) { return pageBean; } else { //当前月获取的数据 不够,下个月的要从 0 开始取数据,取对应pageSize条数据 startNum = 0; } //不符合跳出条件,继续查询下个月的 return this.queryEqpAndPdaTimesList(request, startNum, pageSize, eqpNumMap, pageBean, queryMonth, totalEqpNum, countNum); } //递归查询 private PageBean queryEqpAndPdaTimesList(EqpInOutParkRequest request, Integer startNum, Map map, PageBean pageBean, Date endTime) { request.setStartNum(startNum); int pageSize = request.getBaseRequest().getPageSize(); String queryTime = this.getMonth(request.getEndTime()); Integer eqpNum = map.get(queryTime); DateFormat format = new SimpleDateFormat("yyyy-MM"); String beginTimeA = format.format(request.getBeginTime()); String endTimeA = format.format(request.getEndTime()); if (startNum + pageSize < eqpNum || beginTimeA.equals(endTimeA)) { /**都在本张表**/ if (pageBean != null) { //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(request.getEndTime()); request.setTableName(tableName); PageInfo pageInfo = tpPEqpInoutRecordDAO.queryEqpAndPdaReportTimeList(request); PageBean pageBeanB = new PageBean<>(); PageBeanUtil.copyProperties(pageInfo, pageBeanB, EqpAndPdaEntryListDTO.class); if (CollectionUtils.isNotEmpty(pageBeanB.getDataList())) { if (CollectionUtils.isNotEmpty(pageBean.getDataList())) { pageBean.getDataList().addAll(pageBeanB.getDataList()); pageBean.setPageTotals(pageBean.getPageTotals() + pageBeanB.getPageTotals()); } else { pageBean = pageBeanB; } } return pageBean; } else { //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(request.getEndTime()); request.setTableName(tableName); PageInfo pageInfo = tpPEqpInoutRecordDAO.queryEqpAndPdaReportTimeList(request); PageBean pageBeanB = new PageBean<>(); PageBeanUtil.copyProperties(pageInfo, pageBeanB, EqpAndPdaEntryListDTO.class); return pageBeanB; } } else if (startNum < eqpNum && (startNum + pageSize) > eqpNum) { /**跨表**/ //1.查询本表 //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(request.getEndTime()); request.setTableName(tableName); PageInfo pageInfo = tpPEqpInoutRecordDAO.queryEqpAndPdaReportTimeList(request); PageBean pageBeanB = new PageBean<>(); PageBeanUtil.copyProperties(pageInfo, pageBeanB, EqpAndPdaEntryListDTO.class); if (pageBean != null) { if (CollectionUtils.isNotEmpty(pageBeanB.getDataList())) { if (CollectionUtils.isNotEmpty(pageBean.getDataList())) { pageBean.getDataList().addAll(pageBeanB.getDataList()); pageBean.setPageTotals(pageBean.getPageTotals() + pageBeanB.getPageTotals()); } else { pageBean = pageBeanB; } } startNum -= map.get(this.getMonth(request.getEndTime())); //下次查询的结束时间 Date endTimeB = this.getEndTime(request.getEndTime()); request.setEndTime(endTimeB); return this.queryEqpAndPdaTimesList(request, startNum, map, pageBean, endTime); } else { Integer pageNum = startNum + pageSize - map.get(this.getMonth(request.getEndTime())); startNum = 0; request.setPageNum(pageNum); //下次查询的结束时间 Date endTimeB = this.getEndTime(request.getEndTime()); request.setEndTime(endTimeB); return this.queryEqpAndPdaTimesList(request, startNum, map, pageBeanB, endTime); } } else { /**都在下一张表**/ startNum = startNum - map.get(this.getMonth(request.getEndTime())); //下次查询的结束时间 Date endTimeB = this.getEndTime(request.getEndTime()); request.setEndTime(endTimeB); return this.queryEqpAndPdaTimesList(request, startNum, map, pageBean, endTime); } } /** * 查询总数 */ private Map totalMapForEqpAndPda(EqpInOutParkRequest request) { //1.根据时间判断在那张表 Date beginTime = request.getBeginTime(); Date endTime = request.getEndTime(); //先判断在哪张表 Map totalMap = new HashMap<>(); totalMap = totalCountForEqpAndPda(request, totalMap, beginTime, endTime); return totalMap; } //递归查询符合条件的总条数 private Map totalCountForEqpAndPda(EqpInOutParkRequest request, Map map, Date beginTime, Date endTime) { DateFormat format = new SimpleDateFormat("yyyyMM"); String beginTimeA = format.format(beginTime); String endTimeA = format.format(endTime); request.setEndTime(endTime); if (beginTimeA.equals(endTimeA)) { //开始时间和结束时间再同一个月 //查询统计数据-合并数据 //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(endTime); request.setTableName(tableName); Integer count = tpPEqpInoutRecordDAO.queryEqpAndPdaReportTimeListForCount(request); map.put(endTimeA, count); return map; } else { /**开始时间和结束时间跨月份*/ //下次查询的结束时间 Date endTimeB = this.getEndTime(endTime); //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(endTime); request.setTableName(tableName); Integer count = tpPEqpInoutRecordDAO.queryEqpAndPdaReportTimeListForCount(request); map.put(endTimeA, count); return totalCountForEqpAndPda(request, map, beginTime, endTimeB); } } @Override public BizResult queryEqpTurnoverCount(EqpInOutMsgRequest request) { if (request.getBeginTime() == null || request.getEndTime() == null) { throw new BizException(ErrorType.PARAMM_NULL, "开始时间或者结束时间"); } //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(request.getEndTime()); request.setTableName(tableName); DurationEqpDTO dto = tpPEqpInoutRecordDAO.queryEqpTurnoverCount(request); return new BizResult<>(dto); } @Override public BizResult> queryEqpIncomeCalculate(IncomeRecentStatisticRequest request) { if (request.getBeginTime() == null || request.getEndTime() == null) { throw new BizException(ErrorType.PARAMM_NULL, "开始时间或者结束时间"); } //查询的表名 String tableName = "tp_p_eqp_inout_record" + this.getMonth(request.getEndTime()); request.setTableName(tableName); List list = tpPEqpInoutRecordDAO.queryEqpIncomeCalculate(request); Date beginTimes = request.getBeginTime(); Date endTimes = request.getEndTime(); list = this.fillDatas(list, request, beginTimes, endTimes); return new BizResult<>(list); } /** * 填充为空的数据 * * @param list * @param request * @return 2018年7月30日 wangfei */ private List fillDatas(List list, IncomeRecentStatisticRequest request, Date beginTimes, Date endTimes) { List result = new ArrayList<>(); DateFormat hourformat = new SimpleDateFormat("yyyy-MM-dd HH"); Date time = beginTimes; while (time.getTime() <= (endTimes.getTime())) { IncomeRecentStatisticDTO dto = new IncomeRecentStatisticDTO(); dto.setStaticTimeStr(DateUtil.format(time, hourformat)); dto.setOrderActFee(0L); result.add(dto); time = DateUtil.offsetHour(time, 1); } for (IncomeRecentStatisticDTO r : result) { for (IncomeRecentStatisticDTO l : list) { if (r.getStaticTimeStr().equals(l.getStaticTimeStr())) { BeanUtils.copyProperties(l, r); } } } return result; } }