diff --git a/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/ParkLotAndBerthsCountVO.java b/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/ParkLotAndBerthsCountVO.java index 399c62f..6a811a7 100644 --- a/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/ParkLotAndBerthsCountVO.java +++ b/src/main/java/com/zteits/irain/portal/vo/parkinglotdatacenter/ParkLotAndBerthsCountVO.java @@ -24,6 +24,11 @@ public class ParkLotAndBerthsCountVO { private Map pkberthsCount; //key:区县名称,value:停车场数 private Map pkCount; + //key:区县名称,value:map{key:plType,停车场类型,value :车位数 } + private Map pkberthsCountMap; + //key:区县名称,value:map{key:plType,停车场类型,value :停车场数 } + private Map pkCountMap; + public Map getPkberthsCount() { return pkberthsCount; } @@ -36,6 +41,18 @@ public class ParkLotAndBerthsCountVO { public void setPkCount(Map pkCount) { this.pkCount = pkCount; } + public Map getPkberthsCountMap() { + return pkberthsCountMap; + } + public void setPkberthsCountMap(Map pkberthsCountMap) { + this.pkberthsCountMap = pkberthsCountMap; + } + public Map getPkCountMap() { + return pkCountMap; + } + public void setPkCountMap(Map pkCountMap) { + this.pkCountMap = pkCountMap; + } } diff --git a/src/main/java/com/zteits/irain/portal/web/govclouds/DataGeneralizeController.java b/src/main/java/com/zteits/irain/portal/web/govclouds/DataGeneralizeController.java index c4cc4a4..1b0a09d 100644 --- a/src/main/java/com/zteits/irain/portal/web/govclouds/DataGeneralizeController.java +++ b/src/main/java/com/zteits/irain/portal/web/govclouds/DataGeneralizeController.java @@ -1,14 +1,16 @@ package com.zteits.irain.portal.web.govclouds; +import java.math.BigDecimal; 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 org.apache.commons.collections.functors.AllPredicate; -import org.apache.poi.util.StringUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; @@ -17,7 +19,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; -import com.alibaba.druid.util.StringUtils; import com.alibaba.dubbo.common.utils.CollectionUtils; import com.alibaba.fastjson.JSONObject; import com.clouds.common.cache.park.EqpAndPosStatusSyncCacheUtil; @@ -30,20 +31,29 @@ import com.google.common.collect.Maps; import com.zteits.clouds.api.apibase.bean.BizResult; import com.zteits.clouds.api.apibase.constants.ErrorType; import com.zteits.clouds.api.apibase.exception.BizException; +import com.zteits.clouds.api.dto.clouds.dto.OrderTransDTO; +import com.zteits.clouds.api.dto.clouds.param.OrderTransactionQueryRequest; import com.zteits.clouds.api.dto.govclouds.ParkTransactionDTO; import com.zteits.clouds.api.dto.govclouds.dto.ParkEqpAndPDACountDTO; +import com.zteits.clouds.api.dto.govclouds.dto.ParkingOccupyDTO; import com.zteits.clouds.api.dto.govclouds.param.QueryParkEqpAndPDACountRequest; +import com.zteits.clouds.api.dto.govclouds.param.QueryParkingOccupyRequest; import com.zteits.clouds.api.dto.park.dto.ParkFreeBerthsCountStatisticByCountryDTO; import com.zteits.clouds.api.dto.park.dto.ParkLotCountStatisticByCountryDTO; 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.param.ParkTransactionRequest; import com.zteits.clouds.api.dto.park.param.StatisticParkLotCountByCountryRequest; +import com.zteits.clouds.api.dto.pay.ParkingFlowCountDTO; +import com.zteits.clouds.api.dto.pay.param.QueryTodayFlowRequest; +import com.zteits.clouds.api.service.govclouds.ParkOccupyService; import com.zteits.clouds.api.service.govclouds.ParkTransactionService; import com.zteits.clouds.api.service.park.ParkFreeBerthService; import com.zteits.clouds.api.service.park.ParkingLotEqpService; import com.zteits.clouds.api.service.park.ParkingLotQueryService; import com.zteits.clouds.api.service.park.TpPPdaService; +import com.zteits.clouds.api.service.pay.TdBOrderService; +import com.zteits.irain.portal.constant.ParkConstant; import com.zteits.irain.portal.vo.govclouds.StatisticParkLotEqpCountByCountryVO; import com.zteits.irain.portal.vo.parkinglotdatacenter.BerthSpaceRatioVO; import com.zteits.irain.portal.vo.parkinglotdatacenter.BerthSpaceRatioVO.BerthSeriesVO; @@ -85,6 +95,11 @@ public class DataGeneralizeController { private ParkTransactionService parkTransactionService; @Autowired private TpPPdaService tpPPdaService; + @Autowired + private TdBOrderService tdBOrderService; + @Autowired + private ParkOccupyService parkOccupyService; + /** * 这里用的是@SendToUser,这就是发送给单一客户端的标志。本例中, @@ -463,4 +478,250 @@ public class DataGeneralizeController { return new BizResultVO().setData(parkEqpAndPDACountDTO); } + + + /** + * 分区统计停车场、停车位数量 + * langlw 2017-9-5 + * @param request + * @return + */ + @ApiOperation(value="分区、停车场类型统计停车场、停车位数量") + @PostMapping("getParkAndBerthAndEquChartForPlType") + @ResponseBody + public BizResultVO getParkAndBerthAndEquChartForPlType(@RequestBody StatisticParkLotCountByCountryRequest request){ + if(null == request.getCityId()){ + throw new BizException(ErrorType.PARAMM_NULL, "城市编号"); + } + logger.info("对城市:"+request.getCityId()+" 按照区域统计停车场、车位数量等信息"); + //停车场数量 先查询缓存 + BizResult> bizResultParkLot = parkingLotQueryService.statisticParkLotCountByCountryForPlType(request); + logger.info("调用后场dubbo服务,响应为: result={}", JSONObject.toJSONString(bizResultParkLot)); + List parkLotCountList=bizResultParkLot.getData(); + + Map pkberthsCountObjMap=Maps.newHashMap(); + Map parkLotCountObjMap=Maps.newHashMap(); + + + if(CollectionUtils.isNotEmpty(parkLotCountList)){ + for (ParkLotCountStatisticByCountryDTO dto : parkLotCountList) { + String countryName = dto.getPlCountryName(); + //停车场车位数 + Map berthsCountMap = Maps.newHashMap(); + //停车场数 + Map parkLotCountMap = Maps.newHashMap(); + //停车场个数 + int pkCount = dto.getParkLotCount()==null?0:dto.getParkLotCount(); + Integer plType=dto.getPlType(); + parkLotCountMap.put(plType, pkCount); + parkLotCountObjMap.put(countryName, parkLotCountMap); + //停车位个数 + int pkberthsCount = dto.getTotalBerths(); + berthsCountMap.put(plType, pkberthsCount); + pkberthsCountObjMap.put(countryName, berthsCountMap); + } + } + ParkLotAndBerthsCountVO parkLotAndBerthsCountVO = new ParkLotAndBerthsCountVO(); + parkLotAndBerthsCountVO.setPkberthsCountMap(pkberthsCountObjMap); + parkLotAndBerthsCountVO.setPkCountMap(parkLotCountObjMap); + return new BizResultVO().setData(parkLotAndBerthsCountVO); + } + + + @SuppressWarnings("serial") + @ApiOperation(value="今日车流量") + @PostMapping("queryTodayVehicleFlow") + @ResponseBody + public BizResultVO> queryTodayVehicleFlow(@RequestBody StatisticParkLotCountByCountryRequest request){ + BizResultVO> parkFlowDTOs = new BizResultVO<>(); + List parkingFlowCountDTOs = new ArrayList<>(); + + List requests = new ArrayList<>(); + List HSPlNos = new ArrayList(){{add("-1");}}; + List SSPlNos = new ArrayList(){{add("-1");}}; + List YBSPlNos = new ArrayList(){{add("-1");}}; + List QTPlNos = new ArrayList(){{add("-1");}}; + + + //先查询城市下面的停车场 + BizResult> parkResult = parkingLotQueryService.queryParkLotByCountry(request); + if (ResultUtils.isError(parkResult)) { + //如果失败 + parkFlowDTOs.setCode(parkResult.getErrCode().getCode()); + parkFlowDTOs.setMsg(parkResult.getErrMsg()); + return parkFlowDTOs; + } + QueryTodayFlowRequest HSRequest = new QueryTodayFlowRequest(); + QueryTodayFlowRequest SSRequest = new QueryTodayFlowRequest(); + QueryTodayFlowRequest YBSRequest = new QueryTodayFlowRequest(); + QueryTodayFlowRequest QTRequest = new QueryTodayFlowRequest(); + QueryTodayFlowRequest flowRequest = new QueryTodayFlowRequest(); + BeanUtils.copyProperties(request, flowRequest); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date beginTime = calendar.getTime(); + flowRequest.setBeginTime(beginTime); + flowRequest.setEndTime(new Date()); + flowRequest.setDataState(1); + flowRequest.setOrderType(1); + for (ParkingLotDTO dto : parkResult.getData()) { + switch (dto.getPlCountryId().intValue()) { + case 923://红山区 + HSPlNos.add(dto.getPlNo()); + BeanUtils.copyProperties(flowRequest, HSRequest); + HSRequest.setPlCountryId(dto.getPlCountryId()); + HSRequest.setPlCountryName(dto.getPlCountryName()); + break; + case 925://松山区 + SSPlNos.add(dto.getPlNo()); + BeanUtils.copyProperties(flowRequest, SSRequest); + SSRequest.setPlCountryId(dto.getPlCountryId()); + SSRequest.setPlCountryName(dto.getPlCountryName()); + break; + case 924://元宝山区 + YBSPlNos.add(dto.getPlNo()); + BeanUtils.copyProperties(flowRequest, YBSRequest); + YBSRequest.setPlCountryId(dto.getPlCountryId()); + YBSRequest.setPlCountryName(dto.getPlCountryName()); + break; + default://其他 + QTPlNos.add(dto.getPlNo()); + BeanUtils.copyProperties(flowRequest, QTRequest); + QTRequest.setPlCountryId(9999L); + QTRequest.setPlCountryName("其他"); + + break; + } + } + + HSRequest.setPlNos(HSPlNos); + SSRequest.setPlNos(SSPlNos); + YBSRequest.setPlNos(YBSPlNos); + QTRequest.setPlNos(QTPlNos); + requests.add(HSRequest); + requests.add(SSRequest); + requests.add(YBSRequest); + requests.add(QTRequest); + for (QueryTodayFlowRequest re : requests) { + BizResult dtoBiz = tdBOrderService.queryTodayVehicleFlow(re); + if(dtoBiz.getData()!=null){ + BeanUtils.copyProperties(re, dtoBiz.getData()); + parkingFlowCountDTOs.add(dtoBiz.getData()); + } + } + parkFlowDTOs.setData(parkingFlowCountDTOs); + logger.info("调用后场dubbo服务,响应为: result={}", JSONObject.toJSONString(parkFlowDTOs)); + return parkFlowDTOs; + } + + @ApiOperation(value="24小时占用率") + @PostMapping("queryTwentyFourHoursOccupyRate") + @ResponseBody + public BizResultVO> queryTwentyFourHoursOccupyRate(@RequestBody StatisticParkLotCountByCountryRequest request){ + BizResultVO> parkOccupyDTOs = new BizResultVO<>(); + QueryParkingOccupyRequest occupyRequest = new QueryParkingOccupyRequest(); + List plNos = new ArrayList<>(); + //先查询城市下面的停车场 + BizResult> parkResult = parkingLotQueryService.queryParkLotByCountry(request); + if (ResultUtils.isError(parkResult)) { + //如果失败 + parkOccupyDTOs.setCode(parkResult.getErrCode().getCode()); + parkOccupyDTOs.setMsg(parkResult.getErrMsg()); + return parkOccupyDTOs; + } + for (ParkingLotDTO parkDto : parkResult.getData()) { + plNos.add(parkDto.getPlNo()); + } + if(plNos.size()<1){ + throw new BizException(ErrorType.PARAMM_NULL,"停车场编号"); + } + BeanUtils.copyProperties(request, occupyRequest); + occupyRequest.setPlNos(plNos); + occupyRequest.setDataStatus(1); + occupyRequest.setStatisticType(ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date endTime = calendar.getTime(); + + //往前倒三个月 + //calendar.add(Calendar.MONTH, -3); + calendar.add(Calendar.DAY_OF_MONTH, -1); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date beginTime = calendar.getTime(); + + occupyRequest.setBeginTime(beginTime); + occupyRequest.setEndTime(endTime); + + BizResult> result = parkOccupyService.queryTwentyFourHoursOccupyRate(occupyRequest); + if(!(result.isSuccess())){ + //如果失败 + parkOccupyDTOs.setCode(result.getErrCode().getCode()); + parkOccupyDTOs.setMsg(result.getErrMsg()); + return parkOccupyDTOs; + } + parkOccupyDTOs.setData(result.getData()); + logger.info("调用后场dubbo服务,响应为: result={}", JSONObject.toJSONString(parkOccupyDTOs)); + return parkOccupyDTOs; + } + + @ApiOperation(value="今日交易") + @PostMapping("queryTodayOrderTrans") + @ResponseBody + public BizResultVO queryTodayOrderTrans(@RequestBody StatisticParkLotCountByCountryRequest request){ + BizResultVO orderDTO = new BizResultVO<>(); + OrderTransactionQueryRequest orderTransRequest = new OrderTransactionQueryRequest(); + List plNos = new ArrayList<>(); + //先查询城市下面的停车场 + BizResult> parkResult = parkingLotQueryService.queryParkLotByCountry(request); + if (ResultUtils.isError(parkResult)) { + //如果失败 + orderDTO.setCode(parkResult.getErrCode().getCode()); + orderDTO.setMsg(parkResult.getErrMsg()); + return orderDTO; + } + for (ParkingLotDTO parkDto : parkResult.getData()) { + plNos.add(parkDto.getPlNo()); + } + if(plNos.size()<1){ + throw new BizException(ErrorType.PARAMM_NULL,"停车场编号"); + } + BeanUtils.copyProperties(request, orderTransRequest); + orderTransRequest.setParkIds(plNos); + + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date beginTime = calendar.getTime(); + orderTransRequest.setBeginTime(beginTime); + orderTransRequest.setEndTime(new Date()); + + BizResult result = tdBOrderService.queryOrderTrans(orderTransRequest); + if(!(result.isSuccess())){ + //如果失败 + orderDTO.setCode(result.getErrCode().getCode()); + orderDTO.setMsg(result.getErrMsg()); + return orderDTO; + } + orderDTO.setData(result.getData()); + //分->元 + BigDecimal hundred = new BigDecimal("100"); + OrderTransDTO o = orderDTO.getData(); + o.setAliTotalAmount(o.getAliTotalAmount().divide(hundred)); + o.setCashTotalAmount(o.getCashTotalAmount().divide(hundred)); + o.setPayedTotalAmount(o.getPayedTotalAmount().divide(hundred)); + o.setWxTotalAmount(o.getWxTotalAmount().divide(hundred)); + o.setYlTotalAmount(o.getYlTotalAmount().divide(hundred)); + orderDTO.setData(o); + + logger.info("调用后场dubbo服务,响应为: result={}", JSONObject.toJSONString(orderDTO)); + return orderDTO; + } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 7b7ac06..c9f196d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,6 +1,6 @@ project.syscode=zteits-park-portal spring.application.name=zteits-park-portal -server.port=8099 +server.port=8094 # logging logging.level.root=info