diff --git a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/BerthsStatisticController.java b/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/BerthsStatisticController.java index af2acef..942dd50 100644 --- a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/BerthsStatisticController.java +++ b/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/BerthsStatisticController.java @@ -37,7 +37,6 @@ import com.clouds.common.utils.excle.ExcelUtil; import com.clouds.common.utils.excle.ExcleFillDateManager; import com.clouds.common.utils.excle.Layouter; import com.clouds.common.web.BizController; -import com.clouds.common.web.SessionCommUtil; import com.clouds.common.web.vo.BizResultVO; import com.clouds.common.web.vo.EasyUIDataGridVO; import com.google.common.collect.Lists; @@ -47,6 +46,7 @@ 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.park.dto.MonthVehicleFlowAndVacancyRateAndTurnoverDTO; import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; import com.zteits.clouds.api.dto.park.dto.ParkingLotUseStatisticDTO; import com.zteits.clouds.api.dto.park.dto.ParkingLotUseStatisticMaxAndMinDTO; @@ -199,7 +199,7 @@ public class BerthsStatisticController extends BizController { obj[index++] = e.getPlName(); double d=100-e.getFreeRatio()* 100; obj[index++] = df.format(d) + "%"; - obj[index++] = e.getTurnoverRatio(); + obj[index++] = df.format(e.getTurnoverRatio()); contentList.add(obj); } ExcleFillDateManager fillUserManager = new ExcleFillDateManager(); @@ -292,6 +292,7 @@ public class BerthsStatisticController extends BizController { } /** + * langlw 2017-8-25 * 根据时间获取车位周转率折线图 * * @param request @@ -378,14 +379,14 @@ public class BerthsStatisticController extends BizController { timeAndVal.put(statisEndTime, statisticDTO.getFreeRatio() * 100); parkLotMap.put(key, timeAndVal); } else if (ParkConstant.ParkingLotUseStatistic.BerthRatioType.TURNOVER == berthRatio) { - timeAndVal.put(statisEndTime, statisticDTO.getTurnoverRatio() * 100); + timeAndVal.put(statisEndTime, statisticDTO.getTurnoverRatio() ); parkLotMap.put(key, timeAndVal); } } else { if (ParkConstant.ParkingLotUseStatistic.BerthRatioType.FREE == berthRatio) { parkLotMap.get(key).put(statisEndTime, statisticDTO.getFreeRatio() * 100); } else if (ParkConstant.ParkingLotUseStatistic.BerthRatioType.TURNOVER == berthRatio) { - parkLotMap.get(key).put(statisEndTime, statisticDTO.getTurnoverRatio() * 100); + parkLotMap.get(key).put(statisEndTime, statisticDTO.getTurnoverRatio() ); } } @@ -573,6 +574,157 @@ public class BerthsStatisticController extends BizController { + /** + * langlw 2017-8-24 + * @param beginTime + * @param endTime + * @param plNos + * @param requests + * @param response + */ + @ApiOperation("按月导出车位数据统计excel") + @GetMapping("exportBerthStatisticExcelForMonth") + public void exportBerthStatisticExcelForMonth(@RequestParam String beginTime, @RequestParam String endTime, + @RequestParam List plNos, HttpServletRequest requests, HttpServletResponse response) { + ParkingLotUseStatisticForPageRequest request = new ParkingLotUseStatisticForPageRequest(); + request.setSysCode(sysCode); + request.setBeginTime(DateUtil.to_date(beginTime, DateUtil.DATETIME_FORMAT)); + request.setEndTime(DateUtil.to_date(endTime, DateUtil.DATETIME_FORMAT)); + request.setPlNos(plNos); + request.setBaseRequest(new BaseInfo(1, 0)); + BizResult> bizResult = parkingLotStatisticService + .queryMonthVehicleFlowAndVacancyRateAndTurnover(request); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); + String[] title = new String[] { "时间","停车场名称", "占用率", "周转率" }; + String sheetName = "车位管理"; + String fileName = "车位管理" + format2.format(new Date()); + // 1.创建excel信息 + XSSFSheet workSheet = ExcelUtil.createExcel(sheetName); + // 2.设置excel表头和表体 + Layouter.buildReport(workSheet, title, 0, 0); + // 3.填充数据 + List contentList = new ArrayList(); + List list = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(bizResult.getData().getDataList())) { + list = bizResult.getData().getDataList(); + } + DecimalFormat df=new DecimalFormat(".##"); + + for (MonthVehicleFlowAndVacancyRateAndTurnoverDTO e : list) { + Object[] obj = new Object[title.length]; + int index = 0; + obj[index++] = e.getStatisticTime(); + obj[index++] = e.getPlName(); + double d=e.getAvgOccupyRatio()* 100; + obj[index++] = df.format(d) + "%"; + obj[index++] = df.format(e.getAvgTurnoverRatio()); + contentList.add(obj); + } + ExcleFillDateManager fillUserManager = new ExcleFillDateManager(); + fillUserManager.fillSalesOrga(workSheet, title, contentList, 2); + // 4.excel输出配置 + ExcelUtil.write(response, workSheet, fileName); + } + + + /** + * langlw 2017-8-24 + * @param beginTime + * @param endTime + * @param plNos + * @param requests + * @param response + */ + @ApiOperation("下载车位数据统计详情excel") + @GetMapping("downloadBerthStatisticExcelForMonth") + public void downloadBerthStatisticExcelForMonth(@RequestParam String beginTime, @RequestParam String endTime, + @RequestParam List plNos, @RequestParam String parkName, + HttpServletRequest requests, HttpServletResponse response) { + ParkingLotUseStatisticForPageRequest request = new ParkingLotUseStatisticForPageRequest(); + request.setSysCode(sysCode); + request.setBeginTime(DateUtil.to_date(beginTime, DateUtil.DATETIME_FORMAT)); + request.setEndTime(DateUtil.to_date(endTime, DateUtil.DATETIME_FORMAT)); + request.setPlNos(plNos); + request.setBaseRequest(new BaseInfo(1, 0)); + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); + + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); + + Calendar beginTimec = Calendar.getInstance(); + beginTimec.setTime(request.getBeginTime()); + + Calendar endTimec = Calendar.getInstance(); + endTimec.setTime(request.getEndTime()); + + Long dayDifference = DateUtil.getTimeDifference(new Timestamp(request.getEndTime().getTime()), + new Timestamp(request.getBeginTime().getTime())); + + List xAxisData = Lists.newArrayList(); + String[] title = new String[dayDifference.intValue()+2]; + title[0]=""; + for (int i = 0; i <= dayDifference.intValue(); i++) { + Calendar tempDate = Calendar.getInstance(); + tempDate.setTime(request.getBeginTime()); + tempDate.add(Calendar.DAY_OF_MONTH, i); + int beginMonth = tempDate.get(Calendar.MONTH) + 1; + int beginDay = tempDate.get(Calendar.DAY_OF_MONTH); + String month = String.format("%02d", (beginMonth)); + String day = String.format("%02d", (beginDay)); + title[i+1]=month + "-" + day; + xAxisData.add(month + "-" + day); + + } + + String dateType ="MM-dd"; + int berthRatio = ParkConstant.ParkingLotUseStatistic.BerthRatioType.TURNOVER; + LineChartVO turnOverBerthRatios = getFreeBerthRatios(request, xAxisData, dateType, berthRatio); + int berthFreeRatio = ParkConstant.ParkingLotUseStatistic.BerthRatioType.FREE; + LineChartVO freeBerthRatios = getFreeBerthRatios(request, xAxisData, dateType, berthFreeRatio); + + + String sheetName = "月报表车位使用统计"; + String fileName = "月报表车位使用统计" + format2.format(new Date()); + // 1.创建excel信息 + XSSFSheet workSheet = ExcelUtil.createExcel(sheetName); + // 2.设置excel表头和表体 + Layouter.buildReport(workSheet, title, 0, 0); + // 3.填充数据 + List contentList = new ArrayList(); + + + for (SerieVO e : freeBerthRatios.getSeries()) { + + Object[] obj = new Object[title.length]; + obj[0]="占用率"; + int index = 1; + for (Integer i : e.getData()) { + obj[index++] = 100-i+"%"; + } + contentList.add(obj); + } + + for (SerieVO e : turnOverBerthRatios.getSeries()) { + + Object[] obj = new Object[title.length]; + obj[0]="周转率率"; + int index = 1; + for (Integer i : e.getData()) { + obj[index++] = i ; + } + + + contentList.add(obj); + } + + ExcleFillDateManager fillUserManager = new ExcleFillDateManager(); + fillUserManager.fillSalesOrga(workSheet, title, contentList, 2); + // 4.excel输出配置 + ExcelUtil.write(response, workSheet, fileName); + } + + } diff --git a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/VehicleFlowStatisticController.java b/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/VehicleFlowStatisticController.java index 4c12ad4..e7bcdd6 100644 --- a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/VehicleFlowStatisticController.java +++ b/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/VehicleFlowStatisticController.java @@ -12,17 +12,16 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.alibaba.dubbo.common.utils.CollectionUtils; +import com.alibaba.dubbo.common.utils.StringUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.clouds.common.entity.UserInfo; import com.clouds.common.utils.DateUtil; import com.clouds.common.utils.ResultUtils; import com.clouds.common.utils.excle.ExcelUtil; import com.clouds.common.utils.excle.ExcleFillDateManager; import com.clouds.common.utils.excle.Layouter; import com.clouds.common.web.BizController; -import com.clouds.common.web.SessionCommUtil; import com.clouds.common.web.vo.BizResultVO; import com.clouds.common.web.vo.EasyUIDataGridVO; import com.google.common.collect.Lists; @@ -32,6 +31,7 @@ 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.park.dto.MonthVehicleFlowAndVacancyRateAndTurnoverDTO; import com.zteits.clouds.api.dto.park.dto.ParkingLotUseStatisticDTO; import com.zteits.clouds.api.dto.park.dto.ParkingLotUseStatisticMaxAndMinDTO; import com.zteits.clouds.api.dto.park.param.ParkingLotUseStatisticForPageRequest; @@ -62,307 +62,476 @@ import org.springframework.web.bind.annotation.ResponseBody; * @version: v1.0.0 * @author: langlw * @date: 2017年6月14日 下午3:02:39 Modification History: Date Author Version - * Description ---------------------------------------------------------* - * 2017年6月14日 langlw v1.0.0 创建 + * Description ---------------------------------------------------------* + * 2017年6月14日 langlw v1.0.0 创建 */ @Api(value = "停车场车流量数据统计", description = "停车场车流量数据统计") @Controller @RequestMapping(value = "/VehicleFlowStatistic") public class VehicleFlowStatisticController extends BizController { - private Logger logger = LoggerFactory.getLogger(VehicleFlowStatisticController.class); - - @Value("${project.syscode}") - private String sysCode; - - @Autowired - private ParkingLotUseStatisticService parkingLotStatisticService; - @Autowired - private SessionCommUtil sessionCommUtil; - - @ApiOperation("分页查询车流量数据统计车位总流量") - @PostMapping("getVehicleFlowStatisticForPage") - @ResponseBody - public BizResultVO> queryParkingLotUseStatisticForPage( - @RequestBody ParkingLotUseStatisticForPageRequest request) throws Exception { - if (null == request.getBeginTime() || null == request.getEndTime()) { - throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间"); - } - Calendar beginc = Calendar.getInstance(); - beginc.setTime(request.getBeginTime()); - int beginYear = beginc.get(Calendar.YEAR); - int beginMonth = beginc.get(Calendar.MONTH) + 1; - int beginDay = beginc.get(Calendar.DAY_OF_MONTH); - - Calendar endc = Calendar.getInstance(); - endc.setTime(request.getEndTime()); - int endYear = endc.get(Calendar.YEAR); - int endMonth = endc.get(Calendar.MONTH) + 1; - int endDay = endc.get(Calendar.DAY_OF_MONTH); - - if (beginYear == endYear && beginMonth == endMonth && beginDay == endDay) { - // 2表示按每小时统计 - request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); - } else { - // 3表示按每天统计 - request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); - } - - BizResult> bizResult = parkingLotStatisticService - .queryParkingLotUseStatisticForPage(request); - return returnJqGridData(bizResult, ParkingLotUseStatisticDTO.class); - } - - @ApiOperation("查询车流量最大值与最小值") - @PostMapping("getVehicleFlowMaxAndMin") - @ResponseBody - public BizResultVO QueryParkingLotUseStatisticMaxAndMin( - @RequestBody ParkingLotUseStatisticForPageRequest request) { - Calendar beginc = Calendar.getInstance(); - beginc.setTime(request.getBeginTime()); - int beginYear = beginc.get(Calendar.YEAR); - int beginMonth = beginc.get(Calendar.MONTH) + 1; - int beginDay = beginc.get(Calendar.DAY_OF_MONTH); - - Calendar endc = Calendar.getInstance(); - endc.setTime(request.getEndTime()); - int endYear = endc.get(Calendar.YEAR); - int endMonth = endc.get(Calendar.MONTH) + 1; - int endDay = endc.get(Calendar.DAY_OF_MONTH); - - if (beginYear == endYear && beginMonth == endMonth && beginDay == endDay) { - // 2表示按每小时统计 - request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); - } else { - // 3表示按每天统计 - request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); - } - BizResult bizResult = parkingLotStatisticService - .QueryVehicleFlowStatisticMaxAndMin(request); - return new BizResultVO<>(bizResult); - } - - @ApiOperation("导出车流量数据统计excel") - @GetMapping("exportVehicleFlowStatisticExcel") - public void excelParkingLotUseStatistic(@RequestParam String beginTime, @RequestParam String endTime, - @RequestParam String plNos, HttpServletRequest requests, HttpServletResponse response) { - ParkingLotUseStatisticForPageRequest request = new ParkingLotUseStatisticForPageRequest(); - request.setSysCode(sysCode); - request.setBeginTime(DateUtil.to_date(beginTime, DateUtil.DATETIME_FORMAT)); - request.setEndTime(DateUtil.to_date(endTime, DateUtil.DATETIME_FORMAT)); - List plNoslist = new ArrayList<>(); - plNoslist.add(plNos); - request.setPlNos(plNoslist); - request.setBaseRequest(new BaseInfo(1, 0)); - Calendar beginc = Calendar.getInstance(); - beginc.setTime(request.getBeginTime()); - int beginYear = beginc.get(Calendar.YEAR); - int beginMonth = beginc.get(Calendar.MONTH) + 1; - int beginDay = beginc.get(Calendar.DAY_OF_MONTH); - - Calendar endc = Calendar.getInstance(); - endc.setTime(request.getEndTime()); - int endYear = endc.get(Calendar.YEAR); - int endMonth = endc.get(Calendar.MONTH) + 1; - int endDay = endc.get(Calendar.DAY_OF_MONTH); - - if (beginYear == endYear && beginMonth == endMonth && beginDay == endDay) { - // 2表示按每小时统计 - request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); - } else { - // 3表示按每天统计 - request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); - } - BizResult> bizResult = parkingLotStatisticService - .queryParkingLotUseStatisticForPage(request); - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); - String[] title = new String[] {"时间", "总车流量", "临时车流量", "固定车流量"}; - String sheetName = "车流量管理"; - String fileName = "车流量管理" + format2.format(new Date()); - // 1.创建excel信息 - XSSFSheet workSheet = ExcelUtil.createExcel(sheetName); - // 2.设置excel表头和表体 - Layouter.buildReport(workSheet, title, 0, 0); - // 3.填充数据 - List contentList = new ArrayList(); - List list = new ArrayList<>(); - if (CollectionUtils.isNotEmpty(bizResult.getData().getDataList())) { - list = bizResult.getData().getDataList(); - } - for (ParkingLotUseStatisticDTO e : list) { - Object[] obj = new Object[title.length]; - int index = 0; - obj[index++] = format.format(e.getStatisticBeginTime()); - obj[index++] = e.getVehicleFlow(); - obj[index++] = e.getTmpVehicleFlow(); - obj[index++] = e.getFixVehicleFlow(); - contentList.add(obj); - } - ExcleFillDateManager fillUserManager = new ExcleFillDateManager(); - fillUserManager.fillSalesOrga(workSheet, title, contentList, 2); - // 4.excel输出配置 - ExcelUtil.write(response, workSheet, fileName); - } - - /** - * 根据时间获取车流量折线图 - * - * @param request - * @return - * @throws Exception - */ - @ApiOperation("根据时间获取车流量折线图") - @PostMapping("getVehicleFlowForLineChart") - @ResponseBody - public BizResultVO getVehicleFlowForLineChart( - @RequestBody ParkingLotUseStatisticForPageRequest request) throws Exception { - - if (null == request.getBeginTime() || null == request.getEndTime()) { - throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间"); - } - // 2.调用接口查询当前登录人管辖的停车场名称 - UserInfo userInfo = sessionCommUtil.getUserInfo(); - List plNos = userInfo.getOrgIds(); -// if (CollectionUtils.isEmpty(plNos)) { -// throw new BizException(ErrorType.PARK_LOT_NOT_EXISTS, "停车场plnos不存在"); -// } - request.setPlNos(plNos); - - logger.info("根据停车场编号获取该停车场今日车流量和车位折线图"); - Calendar beginTime = Calendar.getInstance(); - beginTime.setTime(request.getBeginTime()); -// int year = beginTime.get(Calendar.YEAR); - Calendar endTime = Calendar.getInstance(); - endTime.setTime(request.getEndTime()); - - Long dayDifference = DateUtil.getTimeDifference(new Timestamp(request.getEndTime().getTime()), - new Timestamp(request.getBeginTime().getTime())); - List xAxisData = Lists.newArrayList(); - request.setBaseRequest(new BaseInfo(1, 0)); - String dateType = ""; - - if (dayDifference == 0L) { - // 1小时为一个时间戳 - request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); - int totaltimestampCount = endTime.get(Calendar.HOUR_OF_DAY); - - for (int j = 0; j <= totaltimestampCount+1; j++) { - String hour = String.format("%02d", (j)); - xAxisData.add(hour+":00"); - } - dateType = "HH:mm"; - LineChartVO vehicleFlows = getVehicleFlows(request, xAxisData, dateType); - return new BizResultVO().setData(vehicleFlows); - - } else { - // 1天为一个时间戳 - request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); - for (int i = 0; i <=dayDifference.intValue(); i++) { - Calendar tempDate = Calendar.getInstance(); - tempDate .setTime(request.getBeginTime()); - tempDate.add(Calendar.DAY_OF_MONTH, i); - int beginMonth = tempDate.get(Calendar.MONTH) + 1; - int beginDay = tempDate.get(Calendar.DAY_OF_MONTH); - String month = String.format("%02d", (beginMonth)); - String day = String.format("%02d", (beginDay)); - xAxisData.add(month + "-" + day); - } - dateType = "MM-dd"; - LineChartVO vehicleFlows = getVehicleFlows(request, xAxisData, dateType); - return new BizResultVO().setData(vehicleFlows); - - } - - } - - private LineChartVO getVehicleFlows(ParkingLotUseStatisticForPageRequest request, List xAxisData, - String dateType) { - // 调用后场服务 - logger.info("调用DUBBO服务入参:" + JSON.toJSONString(request)); - BizResult> bizResult = parkingLotStatisticService - .queryParkingLotUseStatisticForPage(request); - PageBean pageBean = ResultUtils.getBizResultData(bizResult); - List useStatisticDTOs = Lists.newArrayList(); - if (pageBean != null) { - useStatisticDTOs = pageBean.getDataList(); - } - - // 保存固定车流量,时间戳和车流量对应关系 - Map fixVehicleFlowMap = Maps.newHashMap(); - // 保存临时车流量,时间戳和车流量对应关系 - Map tmpVehicleFlowMap = Maps.newHashMap(); - // 停车场编号和名称对应关系 - Map parkNameMap = Maps.newHashMap(); - // 通过停车场,和统计时间分组 - // Map> parkLotMap = Maps.newHashMap(); - if (!CollectionUtils.isEmpty(useStatisticDTOs)) { - for (ParkingLotUseStatisticDTO statisticDTO : useStatisticDTOs) { - String key = statisticDTO.getPlNo(); - parkNameMap.put(key, statisticDTO.getPlName()); - String statisBeginTime = DateUtil.getDateString(statisticDTO.getStatisticBeginTime(), dateType); - // 保存固定车流量和临时车流量 - fixVehicleFlowMap.put(statisBeginTime, - (fixVehicleFlowMap.get(statisBeginTime) == null ? 0 : fixVehicleFlowMap.get(statisBeginTime)) - + statisticDTO.getFixVehicleFlow()); - tmpVehicleFlowMap.put(statisBeginTime, - (tmpVehicleFlowMap.get(statisBeginTime) == null ? 0 : tmpVehicleFlowMap.get(statisBeginTime)) - + statisticDTO.getTmpVehicleFlow()); - } - } - - // 封装车流量统计 - LineChartVO vehicleFlows = new LineChartVO(); - List vehicleFlows_legendData = Lists.newArrayList(); - vehicleFlows_legendData.add("临时车"); - vehicleFlows_legendData.add("固定车"); - vehicleFlows.setLegendData(vehicleFlows_legendData); - vehicleFlows.setxAxisData(xAxisData); - List vehicleSeries = Lists.newArrayList(); - // 固定车 - SerieVO fixSerieVo = new SerieVO(); - fixSerieVo.setName("固定车"); - List fixSerieVoData = Lists.newArrayList(); - // 临时车 - SerieVO tmpSerieVo = new SerieVO(); - tmpSerieVo.setName("临时车"); - List tmpSerieVoData = Lists.newArrayList(); - // 保存上一次的临时车值,当某个时间点没有数据时,则保持和上次一致 - Integer lastfixFlow = 0; - Integer lasttmpFlow = 0; - for (String timestamp : xAxisData) { - - if (fixVehicleFlowMap.containsKey(timestamp)) { - lastfixFlow = fixVehicleFlowMap.get(timestamp).intValue(); - } else { - lastfixFlow = 0; - } - fixSerieVoData.add(lastfixFlow); - - if (tmpVehicleFlowMap.containsKey(timestamp)) { - lasttmpFlow = tmpVehicleFlowMap.get(timestamp).intValue(); - } else { - lasttmpFlow = 0; - } - tmpSerieVoData.add(lasttmpFlow); - } - fixSerieVo.setData(fixSerieVoData); - vehicleSeries.add(fixSerieVo); - tmpSerieVo.setData(tmpSerieVoData); - vehicleSeries.add(tmpSerieVo); - - vehicleFlows.setSeries(vehicleSeries); - return vehicleFlows; - } - - public static void main(String[] args) { - String json - = "{\"id\":\"1\",\"platform\":\"android\",\"parameter\":{\"drid\":\"177277364\",\"sex\":\"1\",\"type\":\"2\",\"creatorname\":\"Mrw\",\"username\":\"jack\",\"pwd\":\"123456\",\"remark\":\"平板用户\",\"createtime\":\"2017-07-24 23:59:59\"}}"; - JSONObject object = (JSONObject)JSONObject.parse(json); - System.out.println(object.get("id")); - System.out.println(object.get("platform")); - JSONObject parameter = (JSONObject)object.get("parameter"); - System.out.println(parameter.get("drid")); - System.out.println(parameter.get("sex")); - } + private Logger logger = LoggerFactory.getLogger(VehicleFlowStatisticController.class); + + @Value("${project.syscode}") + private String sysCode; + + @Autowired + private ParkingLotUseStatisticService parkingLotStatisticService; + + /** + * langlw 2017-8-25 + * + * @param request + * @return + * @throws Exception + */ + @ApiOperation("分页查询车流量数据统计车位总流量") + @PostMapping("getVehicleFlowStatisticForPage") + @ResponseBody + public BizResultVO> queryParkingLotUseStatisticForPage( + @RequestBody ParkingLotUseStatisticForPageRequest request) throws Exception { + if (null == request.getBeginTime() || null == request.getEndTime()) { + throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间"); + } + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); + BizResult> bizResult = parkingLotStatisticService + .queryParkingLotUseStatisticForPage(request); + return returnJqGridData(bizResult, ParkingLotUseStatisticDTO.class); + } + + @ApiOperation("查询车流量最大值与最小值") + @PostMapping("getVehicleFlowMaxAndMin") + @ResponseBody + public BizResultVO QueryParkingLotUseStatisticMaxAndMin( + @RequestBody ParkingLotUseStatisticForPageRequest request) { + Calendar beginc = Calendar.getInstance(); + beginc.setTime(request.getBeginTime()); + int beginYear = beginc.get(Calendar.YEAR); + int beginMonth = beginc.get(Calendar.MONTH) + 1; + int beginDay = beginc.get(Calendar.DAY_OF_MONTH); + + Calendar endc = Calendar.getInstance(); + endc.setTime(request.getEndTime()); + int endYear = endc.get(Calendar.YEAR); + int endMonth = endc.get(Calendar.MONTH) + 1; + int endDay = endc.get(Calendar.DAY_OF_MONTH); + + if (beginYear == endYear && beginMonth == endMonth && beginDay == endDay) { + // 2表示按每小时统计 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); + } else { + // 3表示按每天统计 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); + } + BizResult bizResult = parkingLotStatisticService + .QueryVehicleFlowStatisticMaxAndMin(request); + return new BizResultVO<>(bizResult); + } + + /** + * langlw 2017-8-24 + * + * @param beginTime + * @param endTime + * @param plNos + * @param requests + * @param response + */ + @ApiOperation("日报表导出车流量数据统计excel") + @GetMapping("exportVehicleFlowStatisticExcel") + public void excelParkingLotUseStatistic(@RequestParam String beginTime, @RequestParam String endTime, + @RequestParam List plNos, HttpServletRequest requests, HttpServletResponse response) { + ParkingLotUseStatisticForPageRequest request = new ParkingLotUseStatisticForPageRequest(); + request.setSysCode(sysCode); + request.setBeginTime(DateUtil.to_date(beginTime, DateUtil.DATETIME_FORMAT)); + request.setEndTime(DateUtil.to_date(endTime, DateUtil.DATETIME_FORMAT)); + request.setPlNos(plNos); + request.setBaseRequest(new BaseInfo(1, 0)); + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); + BizResult> bizResult = parkingLotStatisticService + .queryParkingLotUseStatisticForPage(request); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); + String[] title = new String[] { "时间", "停车场", "进场车流量", "出场车流量" }; + String sheetName = "日报表车流量管理"; + String fileName = "日报表车流量管理" + format2.format(new Date()); + // 1.创建excel信息 + XSSFSheet workSheet = ExcelUtil.createExcel(sheetName); + // 2.设置excel表头和表体 + Layouter.buildReport(workSheet, title, 0, 0); + // 3.填充数据 + List contentList = new ArrayList(); + List list = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(bizResult.getData().getDataList())) { + list = bizResult.getData().getDataList(); + } + for (ParkingLotUseStatisticDTO e : list) { + Object[] obj = new Object[title.length]; + int index = 0; + obj[index++] = format.format(e.getStatisticBeginTime()); + obj[index++] = StringUtils.isEmpty(e.getPlName()) ? "" : e.getPlName(); + obj[index++] = e.getTmpVehicleFlow(); + obj[index++] = e.getOutParkCount(); + contentList.add(obj); + } + ExcleFillDateManager fillUserManager = new ExcleFillDateManager(); + fillUserManager.fillSalesOrga(workSheet, title, contentList, 2); + // 4.excel输出配置 + ExcelUtil.write(response, workSheet, fileName); + } + + /** + * 根据时间获取车流量折线图 langlw 2017-8-25 + * + * @param request + * @return + * @throws Exception + */ + @ApiOperation("根据时间获取车流量折线图") + @PostMapping("getVehicleFlowForLineChart") + @ResponseBody + public BizResultVO getVehicleFlowForLineChart( + @RequestBody ParkingLotUseStatisticForPageRequest request) throws Exception { + + if (null == request.getBeginTime() || null == request.getEndTime()) { + throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间"); + } + logger.info("根据停车场编号获取该停车场今日车流量和车位折线图"); + Calendar beginTime = Calendar.getInstance(); + beginTime.setTime(request.getBeginTime()); + Calendar endTime = Calendar.getInstance(); + endTime.setTime(request.getEndTime()); + + Long dayDifference = DateUtil.getTimeDifference(new Timestamp(request.getEndTime().getTime()), + new Timestamp(request.getBeginTime().getTime())); + List xAxisData = Lists.newArrayList(); + request.setBaseRequest(new BaseInfo(1, 0)); + String dateType = ""; + + if (dayDifference == 0L) { + // 1小时为一个时间戳 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); + int totaltimestampCount = endTime.get(Calendar.HOUR_OF_DAY); + + for (int j = 0; j <= totaltimestampCount + 1; j++) { + String hour = String.format("%02d", (j)); + xAxisData.add(hour + ":00"); + } + dateType = "HH:mm"; + LineChartVO vehicleFlows = getVehicleFlows(request, xAxisData, dateType); + return new BizResultVO().setData(vehicleFlows); + + } else { + // 1天为一个时间戳 + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); + for (int i = 0; i <= dayDifference.intValue(); i++) { + Calendar tempDate = Calendar.getInstance(); + tempDate.setTime(request.getBeginTime()); + tempDate.add(Calendar.DAY_OF_MONTH, i); + int beginMonth = tempDate.get(Calendar.MONTH) + 1; + int beginDay = tempDate.get(Calendar.DAY_OF_MONTH); + String month = String.format("%02d", (beginMonth)); + String day = String.format("%02d", (beginDay)); + xAxisData.add(month + "-" + day); + } + dateType = "MM-dd"; + LineChartVO vehicleFlows = getVehicleFlows(request, xAxisData, dateType); + return new BizResultVO().setData(vehicleFlows); + + } + + } + + private LineChartVO getVehicleFlows(ParkingLotUseStatisticForPageRequest request, List xAxisData, + String dateType) { + // 调用后场服务 + logger.info("调用DUBBO服务入参:" + JSON.toJSONString(request)); + BizResult> bizResult = parkingLotStatisticService + .queryParkingLotUseStatisticForPage(request); + PageBean pageBean = ResultUtils.getBizResultData(bizResult); + List useStatisticDTOs = Lists.newArrayList(); + if (pageBean != null) { + useStatisticDTOs = pageBean.getDataList(); + } + + // 保存固定车流量,时间戳和车流量对应关系 + Map fixVehicleFlowMap = Maps.newHashMap(); + // 保存临时车流量,时间戳和车流量对应关系 + Map tmpVehicleFlowMap = Maps.newHashMap(); + // 停车场编号和名称对应关系 + Map parkNameMap = Maps.newHashMap(); + // 通过停车场,和统计时间分组 + // Map> parkLotMap = Maps.newHashMap(); + if (!CollectionUtils.isEmpty(useStatisticDTOs)) { + for (ParkingLotUseStatisticDTO statisticDTO : useStatisticDTOs) { + String key = statisticDTO.getPlNo(); + parkNameMap.put(key, statisticDTO.getPlName()); + String statisEndTime = DateUtil.getDateString(statisticDTO.getStatisticEndTime(), dateType); + // 保存固定车流量和临时车流量 + fixVehicleFlowMap.put(statisEndTime, + (fixVehicleFlowMap.get(statisEndTime) == null ? 0 : fixVehicleFlowMap.get(statisEndTime)) + + statisticDTO.getOutParkCount()); + tmpVehicleFlowMap.put(statisEndTime, + (tmpVehicleFlowMap.get(statisEndTime) == null ? 0 : tmpVehicleFlowMap.get(statisEndTime)) + + statisticDTO.getTmpVehicleFlow()); + } + } + + // 封装车流量统计 + LineChartVO vehicleFlows = new LineChartVO(); + List vehicleFlows_legendData = Lists.newArrayList(); + vehicleFlows_legendData.add("入车"); + vehicleFlows_legendData.add("出车"); + vehicleFlows.setLegendData(vehicleFlows_legendData); + vehicleFlows.setxAxisData(xAxisData); + List vehicleSeries = Lists.newArrayList(); + // 固定车 + SerieVO fixSerieVo = new SerieVO(); + fixSerieVo.setName("出车"); + List fixSerieVoData = Lists.newArrayList(); + // 临时车 + SerieVO tmpSerieVo = new SerieVO(); + tmpSerieVo.setName("入车"); + List tmpSerieVoData = Lists.newArrayList(); + // 保存上一次的临时车值,当某个时间点没有数据时,则保持和上次一致 + Integer lastfixFlow = 0; + Integer lasttmpFlow = 0; + for (String timestamp : xAxisData) { + + if (fixVehicleFlowMap.containsKey(timestamp)) { + lastfixFlow = fixVehicleFlowMap.get(timestamp).intValue(); + } else { + lastfixFlow = 0; + } + fixSerieVoData.add(lastfixFlow); + + if (tmpVehicleFlowMap.containsKey(timestamp)) { + lasttmpFlow = tmpVehicleFlowMap.get(timestamp).intValue(); + } else { + lasttmpFlow = 0; + } + tmpSerieVoData.add(lasttmpFlow); + } + fixSerieVo.setData(fixSerieVoData); + vehicleSeries.add(fixSerieVo); + tmpSerieVo.setData(tmpSerieVoData); + vehicleSeries.add(tmpSerieVo); + + vehicleFlows.setSeries(vehicleSeries); + return vehicleFlows; + } + + /** + * langlw 2017-8-25 Monthly parking volume, vacancy rate and turnover rate + * are examined 按月统计进出场车流量和占用率和周转率 + * + * @param request + * @return + * @throws Exception + */ + @ApiOperation("按月统计进出场车流量和占用率和周转率") + @PostMapping("queryMonthVehicleFlowAndVacancyRateAndTurnover") + @ResponseBody + public BizResultVO> queryMonthVehicleFlowAndVacancyRateAndTurnover( + @RequestBody ParkingLotUseStatisticForPageRequest request) throws Exception { + if (null == request.getBeginTime() || null == request.getEndTime()) { + throw new BizException(ErrorType.PARAMM_NULL, "开始时间和结束时间"); + } + BizResult> bizResult = parkingLotStatisticService + .queryMonthVehicleFlowAndVacancyRateAndTurnover(request); + return returnJqGridData(bizResult, MonthVehicleFlowAndVacancyRateAndTurnoverDTO.class); + } + + @ApiOperation("按月导出车流量数据统计excel") + @GetMapping("exportVehicleFlowStatisticExcelForMonth") + public void excelParkingLotUseStatisticForMonth(@RequestParam String beginTime, @RequestParam String endTime, + @RequestParam List plNos, HttpServletRequest requests, HttpServletResponse response) { + ParkingLotUseStatisticForPageRequest request = new ParkingLotUseStatisticForPageRequest(); + request.setSysCode(sysCode); + request.setBeginTime(DateUtil.to_date(beginTime, DateUtil.DATETIME_FORMAT)); + request.setEndTime(DateUtil.to_date(endTime, DateUtil.DATETIME_FORMAT)); + request.setPlNos(plNos); + request.setBaseRequest(new BaseInfo(1, 0)); + BizResult> bizResult = parkingLotStatisticService + .queryMonthVehicleFlowAndVacancyRateAndTurnover(request); + + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); + String[] title = new String[] { "时间", "停车场", "进场车流量", "出场车流量" }; + String sheetName = "月报表车流量管理"; + String fileName = "月报表车流量管理" + format2.format(new Date()); + // 1.创建excel信息 + XSSFSheet workSheet = ExcelUtil.createExcel(sheetName); + // 2.设置excel表头和表体 + Layouter.buildReport(workSheet, title, 0, 0); + // 3.填充数据 + List contentList = new ArrayList(); + List list = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(bizResult.getData().getDataList())) { + list = bizResult.getData().getDataList(); + } + for (MonthVehicleFlowAndVacancyRateAndTurnoverDTO e : list) { + Object[] obj = new Object[title.length]; + int index = 0; + obj[index++] = e.getStatisticTime(); + obj[index++] = StringUtils.isEmpty(e.getPlName()) ? "" : e.getPlName(); + obj[index++] = e.getSumInVehicleflow(); + obj[index++] = e.getSumOutVehicleflow(); + contentList.add(obj); + } + ExcleFillDateManager fillUserManager = new ExcleFillDateManager(); + fillUserManager.fillSalesOrga(workSheet, title, contentList, 2); + // 4.excel输出配置 + ExcelUtil.write(response, workSheet, fileName); + } + + /** + * langlw 2017-8-24 + * + * @param beginTime + * @param endTime + * @param plNos + * @param requests + * @param response + */ + @ApiOperation("下载车流量数据统计详情excel") + @GetMapping("downloadVehicleFlowStatisticExcel") + public void downloadVehicleFlowStatisticExcel(@RequestParam String beginTime, @RequestParam String endTime, + @RequestParam List plNos, @RequestParam String parkName, HttpServletRequest requests, + HttpServletResponse response) { + ParkingLotUseStatisticForPageRequest request = new ParkingLotUseStatisticForPageRequest(); + request.setSysCode(sysCode); + request.setBeginTime(DateUtil.to_date(beginTime, DateUtil.DATETIME_FORMAT)); + request.setEndTime(DateUtil.to_date(endTime, DateUtil.DATETIME_FORMAT)); + request.setPlNos(plNos); + request.setBaseRequest(new BaseInfo(1, 0)); + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); + + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); + + List xAxisData = Lists.newArrayList(); + String[] title = new String[26]; + title[0] = ""; + for (int j = 0; j <= 24; j++) { + String hour = String.format("%02d", (j)); + title[j + 1] = hour + ":00"; + xAxisData.add(hour + ":00"); + } + + String dateType = "HH:mm"; + LineChartVO VehicleFlows = getVehicleFlows(request, xAxisData, dateType); + + String sheetName = "日报表车流量使用统计"; + String fileName = "日报表车流量使用统计" + format2.format(new Date()); + // 1.创建excel信息 + XSSFSheet workSheet = ExcelUtil.createExcel(sheetName); + // 2.设置excel表头和表体 + Layouter.buildReport(workSheet, title, 0, 0); + // 3.填充数据 + List contentList = new ArrayList(); + + for (SerieVO e : VehicleFlows.getSeries()) { + Object[] obj = new Object[title.length]; + obj[0] = e.getName(); + int index = 1; + for (Integer i : e.getData()) { + obj[index++] = i; + } + contentList.add(obj); + } + + ExcleFillDateManager fillUserManager = new ExcleFillDateManager(); + fillUserManager.fillSalesOrga(workSheet, title, contentList, 2); + // 4.excel输出配置 + ExcelUtil.write(response, workSheet, fileName); + } + + /** + * langlw 2017-8-24 + * + * @param beginTime + * @param endTime + * @param plNos + * @param requests + * @param response + */ + @ApiOperation("按月下载车流量数据统计详情excel") + @GetMapping("downloadVehicleFlowStatisticExcelForMonth") + public void downloadVehicleFlowStatisticExcelForMonth(@RequestParam String beginTime, @RequestParam String endTime, + @RequestParam List plNos, @RequestParam String parkName, HttpServletRequest requests, + HttpServletResponse response) { + ParkingLotUseStatisticForPageRequest request = new ParkingLotUseStatisticForPageRequest(); + request.setSysCode(sysCode); + request.setBeginTime(DateUtil.to_date(beginTime, DateUtil.DATETIME_FORMAT)); + request.setEndTime(DateUtil.to_date(endTime, DateUtil.DATETIME_FORMAT)); + request.setPlNos(plNos); + request.setBaseRequest(new BaseInfo(1, 0)); + request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY); + + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); + + Calendar beginTimec = Calendar.getInstance(); + beginTimec.setTime(request.getBeginTime()); + + Calendar endTimec = Calendar.getInstance(); + endTimec.setTime(request.getEndTime()); + + Long dayDifference = DateUtil.getTimeDifference(new Timestamp(request.getEndTime().getTime()), + new Timestamp(request.getBeginTime().getTime())); + + List xAxisData = Lists.newArrayList(); + String[] title = new String[dayDifference.intValue() + 2]; + title[0] = ""; + for (int i = 0; i <= dayDifference.intValue(); i++) { + Calendar tempDate = Calendar.getInstance(); + tempDate.setTime(request.getBeginTime()); + tempDate.add(Calendar.DAY_OF_MONTH, i); + int beginMonth = tempDate.get(Calendar.MONTH) + 1; + int beginDay = tempDate.get(Calendar.DAY_OF_MONTH); + String month = String.format("%02d", (beginMonth)); + String day = String.format("%02d", (beginDay)); + title[i + 1] = month + "-" + day; + xAxisData.add(month + "-" + day); + + } + + String dateType = "MM-dd"; + LineChartVO VehicleFlows = getVehicleFlows(request, xAxisData, dateType); + + String sheetName = "月报表车流量使用统计"; + String fileName = "月报表车流量使用统计" + format2.format(new Date()); + // 1.创建excel信息 + XSSFSheet workSheet = ExcelUtil.createExcel(sheetName); + // 2.设置excel表头和表体 + Layouter.buildReport(workSheet, title, 0, 0); + // 3.填充数据 + List contentList = new ArrayList(); + + for (SerieVO e : VehicleFlows.getSeries()) { + Object[] obj = new Object[title.length]; + obj[0] = e.getName(); + int index = 1; + for (Integer i : e.getData()) { + obj[index++] = i; + } + contentList.add(obj); + } + + ExcleFillDateManager fillUserManager = new ExcleFillDateManager(); + fillUserManager.fillSalesOrga(workSheet, title, contentList, 2); + // 4.excel输出配置 + ExcelUtil.write(response, workSheet, fileName); + } + + public static void main(String[] args) { + String json = "{\"id\":\"1\",\"platform\":\"android\",\"parameter\":{\"drid\":\"177277364\",\"sex\":\"1\",\"type\":\"2\",\"creatorname\":\"Mrw\",\"username\":\"jack\",\"pwd\":\"123456\",\"remark\":\"平板用户\",\"createtime\":\"2017-07-24 23:59:59\"}}"; + JSONObject object = (JSONObject) JSONObject.parse(json); + System.out.println(object.get("id")); + System.out.println(object.get("platform")); + JSONObject parameter = (JSONObject) object.get("parameter"); + System.out.println(parameter.get("drid")); + System.out.println(parameter.get("sex")); + } }