diff --git a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/IndexPageStatisticController.java b/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/IndexPageStatisticController.java index 5add71c..2fbc1af 100644 --- a/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/IndexPageStatisticController.java +++ b/src/main/java/com/zteits/irain/portal/web/parkinglotcloudplatform/datastatistic/IndexPageStatisticController.java @@ -2,28 +2,21 @@ package com.zteits.irain.portal.web.parkinglotcloudplatform.datastatistic; import java.math.BigDecimal; import java.math.RoundingMode; +import java.text.DecimalFormat; 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 java.util.Map.Entry; import javax.validation.Valid; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; - import com.alibaba.dubbo.common.utils.CollectionUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; + import com.clouds.common.cache.park.ParkingLotCacheUtil; import com.clouds.common.utils.DateUtil; import com.clouds.common.utils.ResultUtils; @@ -41,12 +34,16 @@ import com.zteits.clouds.api.dto.clouds.param.CustIncomeTotalQueryRequset; import com.zteits.clouds.api.dto.park.dto.ParkLotEqpTypeCountStatisticByCountryDTO; 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.TodayVehicleFlowOccupyRateAndTurnOverDTO; +import com.zteits.clouds.api.dto.park.param.CommonPlnosQueryRequest; import com.zteits.clouds.api.dto.park.param.EqpTypeQueryByPlNosRequest; import com.zteits.clouds.api.dto.park.param.ParkingLotUseStatisticForPageRequest; import com.zteits.clouds.api.dto.park.param.RealTimeVehicleFlowQueryRequest; import com.zteits.clouds.api.service.clouds.CustIncomeService; import com.zteits.clouds.api.service.park.IInOutParkingService; +import com.zteits.clouds.api.service.park.ParkingLotBerthsService; import com.zteits.clouds.api.service.park.ParkingLotEqpService; +import com.zteits.clouds.api.service.park.ParkingLotQueryService; import com.zteits.clouds.api.service.park.ParkingLotUseStatisticService; import com.zteits.irain.portal.constant.ParkConstant; import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.BerthsAndFlowLineChartVO; @@ -56,8 +53,16 @@ import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.CustInco import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.LineChartVO; import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.LineChartVO.SerieVO; import com.zteits.irain.portal.vo.parkinglotcloudplatform.datastatistic.ParkLotEqpTypeCountVO; - import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; /** * Copyright: Copyright (c) 2017 zteits @@ -89,7 +94,13 @@ public class IndexPageStatisticController extends BizController { private ParkingLotUseStatisticService parkingLotStatisticService; @Autowired private ParkingLotEqpService parkingLotEqpService; - + + @Autowired + private ParkingLotQueryService parkingLotQueryService; + + @Autowired + private ParkingLotBerthsService parkingLotBerthsService; + /** * 云平台首页->企业客户负责所有的停车场汇总.
* @@ -150,8 +161,6 @@ public class IndexPageStatisticController extends BizController { BigDecimal escapeAmount = dto.getEscapeAmount(); BigDecimal payedTotalAmount = dto.getPayedTotalAmount(); - - CustIncomeTotalParkVO vo = new CustIncomeTotalParkVO(); //金额为分 @@ -160,13 +169,14 @@ public class IndexPageStatisticController extends BizController { vo.setPayedTotalAmount(payedTotalAmount.setScale(2, BigDecimal.ROUND_HALF_UP).toString()); //占比乘以100取两位小数 //应收 - if (null == amountDueTotal || amountDueTotal.doubleValue()==0) { + if (null == amountDueTotal || amountDueTotal.doubleValue() == 0) { vo.setLoopData(1, "00.00"); vo.setLoopData(2, "00.00"); } else { //实收 - vo.setLoopData(1, payedTotalAmount.divide(amountDueTotal, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100.00")) + vo.setLoopData(1, payedTotalAmount.divide(amountDueTotal, 4, BigDecimal.ROUND_HALF_UP).multiply( + new BigDecimal("100.00")) .setScale(2, BigDecimal.ROUND_HALF_UP).toString()); //逃逸 vo.setLoopData(2, escapeAmount.divide(amountDueTotal, 4, BigDecimal.ROUND_HALF_UP).multiply( @@ -233,6 +243,16 @@ public class IndexPageStatisticController extends BizController { return resResult; } + @ApiOperation("查询今日车流量占用率周转率") + @PostMapping("/queryTodayVehicleFlowOccupyRateAndTurnOver") + public BizResultVO> queryTodayVehicleFlowOccupyRateAndTurnOver( + @RequestBody CommonPlnosQueryRequest request) { + BizResult> bizResult = parkingLotStatisticService + .queryTodayVehicleFlowOccupyRateAndTurnOver(request); + return new BizResultVO<>(bizResult); + + } + /** * 根据停车场编号,获取该停车场今日车流量(当天0:00到操作时间的车流量) 折线图 * @@ -240,10 +260,11 @@ public class IndexPageStatisticController extends BizController { * @return 2017年6月19日 zhaowg */ @ApiOperation("根据停车场编号获取该停车场今日车流量和车位折线图") - @PostMapping("getTodayVehicleFlowForLineChart") + @PostMapping("/getTodayVehicleFlowForLineChart") + @Deprecated public BizResultVO getTodayVehicleFlowForLineChart( @RequestBody @Valid ParkingLotUseStatisticForPageRequest request) { - logger.info("根据停车场编号获取该停车场今日车流量和车位折线图"); + logger.info("根据停车场编号获取该停车场今日车流量和车位折线图"); //开始时间 今日0点开始 Calendar beginTime = Calendar.getInstance(); beginTime.set(Calendar.HOUR_OF_DAY, 0); @@ -280,7 +301,7 @@ public class IndexPageStatisticController extends BizController { //每20分钟统计一次 request.setQueryKind(ParkConstant.ParkingLotUseStatistic.StatisticType.PER20MINUTE); request.setBaseRequest(new BaseInfo(1, 0)); - logger.info("调用DUBBO服务入参:"+JSON.toJSONString(request)); + logger.info("调用DUBBO服务入参:" + JSON.toJSONString(request)); BizResult> bizResult = parkingLotStatisticService .queryParkingLotUseStatisticForPage(request); PageBean pageBean = ResultUtils.getBizResultData(bizResult); @@ -312,19 +333,21 @@ public class IndexPageStatisticController extends BizController { } //保存固定车流量和临时车流量 - 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()); + 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()); + } + } + //判断是否包含所有待查询的停车场信息 + if (request.getPlNos().size() > parkLotMap.size()) { + for (String plNo : request.getPlNos()) { + if (!parkLotMap.containsKey(plNo)) { + ParkingLotDTO parkingLotDTO = ParkingLotCacheUtil.getParkLotByPlNo(plNo); + parkNameMap.put(plNo, parkingLotDTO.getPlName()); + parkLotMap.put(plNo, Maps.newHashMap()); + } } - } - //判断是否包含所有待查询的停车场信息 - if(request.getPlNos().size()>parkLotMap.size()){ - for (String plNo:request.getPlNos()) { - if(!parkLotMap.containsKey(plNo)){ - ParkingLotDTO parkingLotDTO=ParkingLotCacheUtil.getParkLotByPlNo(plNo); - parkNameMap.put(plNo, parkingLotDTO.getPlName()); - parkLotMap.put(plNo, Maps.newHashMap()); - } - } } //封装车位统计信息 LineChartVO freeBerthRatios = new LineChartVO(); @@ -348,8 +371,8 @@ public class IndexPageStatisticController extends BizController { for (String timestamp : xAxisData) { if (freeRatioMaps.containsKey(timestamp)) { lastFreeRatio = freeRatioMaps.get(timestamp).intValue(); - }else{ - lastFreeRatio = 0; + } else { + lastFreeRatio = 0; } freeRations.add(lastFreeRatio); } @@ -381,15 +404,15 @@ public class IndexPageStatisticController extends BizController { for (String timestamp : xAxisData) { if (fixVehicleFlowMap.containsKey(timestamp)) { lastfixFlow = fixVehicleFlowMap.get(timestamp).intValue(); - }else{ - lastfixFlow = 0; + } else { + lastfixFlow = 0; } fixSerieVoData.add(lastfixFlow); if (tmpVehicleFlowMap.containsKey(timestamp)) { lasttmpFlow = tmpVehicleFlowMap.get(timestamp).intValue(); - }else{ - lasttmpFlow = 0; + } else { + lasttmpFlow = 0; } tmpSerieVoData.add(lasttmpFlow); } @@ -417,6 +440,96 @@ public class IndexPageStatisticController extends BizController { } /** + * 实时统计今日停车次数,停车次数以出场时间进行统计 + * + * @return + */ + @ApiOperation("实时查询当前停车次数") + @PostMapping("/realtimeParkingOutNum") + public BizResultVO realtimeParkingOutNum(@RequestBody CommonPlnosQueryRequest request) { + BizResult bizResult = iInOutParkingService.queryRealTimeOutParkNumOfPlNos(request); + return new BizResultVO<>(bizResult); + } + + /** + * 今日实时周转率 + * + * @param request + * @return + * @desc 今日实时进场次数/总车位数 + */ + @ApiOperation("实时查询当前周转率") + @PostMapping("/realtimeTurnoverRate") + public BizResultVO> realtimeTurnoverRate(@RequestBody CommonPlnosQueryRequest request) { + BizResultVO> res = new BizResultVO<>(); + Map resMap = new HashMap<>(); + //1、查询截止当前进场停车次数 + BizResult bizResult = iInOutParkingService.queryRealTimeInParkNumOfPlNos(request); + if(ResultUtils.isError(bizResult)){ + res.setCode(bizResult.getErrCode().getCode()); + res.setMsg(bizResult.getErrMsg()); + return res; + } + //2、根据停车场编号查询停车场总车位数 + BizResult berthResult = parkingLotQueryService.queryBerthNumByPlNos(request); + if(ResultUtils.isError(berthResult)){ + res.setCode(berthResult.getErrCode().getCode()); + res.setMsg(berthResult.getErrMsg()); + return res; + } + + //停车次数 + resMap.put("parkNum",bizResult.getData()); + //总车位数 + resMap.put("allBerthNum",berthResult.getData()); + double rate = bizResult.getData() * 1.0 / berthResult.getData() * 100; + String rateStr = new DecimalFormat("#.00").format(rate); + resMap.put("rate",rateStr); + res.setData(resMap); + return res; + } + + /** + * 今日实时占用率 + * + * @param request + * @return + * @desc 1-(今日实时空余车位数/总车位数) + */ + @ApiOperation("实时查询当前占用率") + @PostMapping("/realtimeoccupationRate") + public BizResultVO> realtimeoccupationRate(@RequestBody CommonPlnosQueryRequest request) { + BizResultVO> res = new BizResultVO<>(); + Map resMap = new HashMap<>(); + + //1、查询截止当前空余车位数 + BizResult bizResult = parkingLotBerthsService.queryAllFreeBerthNum(request); + if(ResultUtils.isError(bizResult)){ + res.setCode(bizResult.getErrCode().getCode()); + res.setMsg(bizResult.getErrMsg()); + return res; + } + //2、根据停车场编号查询停车场总车位数 + BizResult berthResult = parkingLotQueryService.queryBerthNumByPlNos(request); + if(ResultUtils.isError(berthResult)){ + res.setCode(berthResult.getErrCode().getCode()); + res.setMsg(berthResult.getErrMsg()); + return res; + } + //空余车位数 + resMap.put("freeBerthNum",bizResult.getData()); + //总车位数 + resMap.put("allBerthNum",berthResult.getData()); + + double rate = (1-bizResult.getData() * 1.0 / berthResult.getData()) * 100; + String rateStr = new DecimalFormat("#.00").format(rate); + resMap.put("rate",rateStr); + res.setData(resMap); + return res; + + } + + /** * 实时查询今日空置率
* 今日空置率:当天0:00到操作时间的每个时间戳的空置率做加权算法,
* 0:00-7:00加权10%,7:00-9:00加权40%,9:00-17:00加权15%,17:00-21:00加权25%,21:00-24:00加权10%,加权后的空置率之和除以时间戳数,得到“今日空置率” @@ -447,13 +560,13 @@ public class IndexPageStatisticController extends BizController { Double totalfreeRatio = 0.00; for (ParkingLotUseStatisticDTO statisticDTO : pageBean.getDataList()) { totalfreeRatio += statisticDTO.getFreeRatio(); - //暂时不加权 - //this.weightForFreeRation(statisticDTO.getStatisticBeginTime(), - //statisticDTO.getFreeRatio(), statisticDTO.getPlNo()); + //暂时不加权 + //this.weightForFreeRation(statisticDTO.getStatisticBeginTime(), + //statisticDTO.getFreeRatio(), statisticDTO.getPlNo()); } logger.info("加权后的空置率之和:" + totalfreeRatio + " 时间戳个数:" + pageBean.getDataList().size()); Double avgFreeRation = totalfreeRatio / pageBean.getDataList().size(); - String result = String.format("%.2f", avgFreeRation*100); + String result = String.format("%.2f", avgFreeRation * 100); return new BizResultVO().setData(result); } @@ -492,26 +605,25 @@ public class IndexPageStatisticController extends BizController { } /** - * @param request - * @return - * 2017年8月18日 wangfei - */ - @ApiOperation(value="根据停车场编号统计设备数量") - @PostMapping("statisticParkLotEqpCountByPlNos") - @ResponseBody - public BizResult> statisticParkLotEqpCountByPlNos(@RequestBody - EqpTypeQueryByPlNosRequest request){ - logger.info("停车场编号:"+request.getPlNos()+" 统计设备数量等信息"); - List resultList = new ArrayList<>(); + * @param request + * @return 2017年8月18日 wangfei + */ + @ApiOperation(value = "根据停车场编号统计设备数量") + @PostMapping("statisticParkLotEqpCountByPlNos") + @ResponseBody + public BizResult> statisticParkLotEqpCountByPlNos(@RequestBody + EqpTypeQueryByPlNosRequest request) { + logger.info("停车场编号:" + request.getPlNos() + " 统计设备数量等信息"); + List resultList = new ArrayList<>(); BizResult> result = parkingLotEqpService - .StatisticParkLotEqpCountByPlNos(request); + .StatisticParkLotEqpCountByPlNos(request); if (!CollectionUtils.isEmpty(result.getData())) { - for (ParkLotEqpTypeCountStatisticByCountryDTO i :result.getData()) { - ParkLotEqpTypeCountVO vo = new ParkLotEqpTypeCountVO(); + for (ParkLotEqpTypeCountStatisticByCountryDTO i : result.getData()) { + ParkLotEqpTypeCountVO vo = new ParkLotEqpTypeCountVO(); BeanUtils.copyProperties(i, vo); resultList.add(vo); } } return new BizResult<>(resultList); - } + } }