| | |
| | | |
| | | @Override |
| | | public TCharingOrderVO chargingOrder(ChargingOrderQuery dto) { |
| | | TCharingOrderVO summary = chargingOrderSummary(dto); |
| | | summary.setList(chargingOrderList(dto)); |
| | | return summary; |
| | | } |
| | | |
| | | @Override |
| | | public PageInfo<ChargingOrderVO> chargingOrderList(ChargingOrderQuery dto) { |
| | | String[] timeRange = parseChargingOrderTimeRange(dto); |
| | | String startTime1 = timeRange[0]; |
| | | String startTime2 = timeRange[1]; |
| | | String endTime1 = timeRange[2]; |
| | | String endTime2 = timeRange[3]; |
| | | PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(), dto.getPageSize()); |
| | | if (StringUtils.hasLength(dto.getPhone())) { |
| | | List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData(); |
| | | if (data == null || data.isEmpty()) { |
| | | return pageInfo; |
| | | } |
| | | dto.setUserIds(data); |
| | | } |
| | | Long userId = tokenService.getLoginUser().getUserid(); |
| | | SysUser sysUser = sysUserClient.getSysUser(userId).getData(); |
| | | Integer roleType = sysUser.getRoleType(); |
| | | setChargingOrderAuthSiteIds(dto, sysUser, userId, roleType); |
| | | List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo, dto, startTime1, startTime2, endTime1, endTime2); |
| | | fillChargingOrderBalanceIncome(list); |
| | | fillChargingOrderShareIncome(list); |
| | | fillChargingOrderPageExtra(list, dto.getSiteIds(), sysUser, roleType); |
| | | pageInfo.setRecords(list); |
| | | return pageInfo; |
| | | } |
| | | |
| | | @Override |
| | | public TCharingOrderVO chargingOrderSummary(ChargingOrderQuery dto) { |
| | | TCharingOrderVO tCharingOrderVO = new TCharingOrderVO(); |
| | | List<TChargingGun> allGun = chargingGunClient.getAllGun().getData(); |
| | | List<TChargingPile> allPile = chargingGunClient.getAllPile().getData(); |
| | | List<Site> data9 = siteClient.getSiteAll().getData(); |
| | | List<TAppUser> data6 = appUserClient.getAllUser().getData(); |
| | | List<TAppUserCar> data4 = appUserCarClient.getAllCar().getData(); |
| | | fillEmptyChargingOrderSummary(tCharingOrderVO); |
| | | String[] timeRange = parseChargingOrderTimeRange(dto); |
| | | String startTime1 = timeRange[0]; |
| | | String startTime2 = timeRange[1]; |
| | | String endTime1 = timeRange[2]; |
| | | String endTime2 = timeRange[3]; |
| | | if (StringUtils.hasLength(dto.getPhone())) { |
| | | List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData(); |
| | | if (data == null || data.isEmpty()) { |
| | | return tCharingOrderVO; |
| | | } |
| | | dto.setUserIds(data); |
| | | } |
| | | Long userId = tokenService.getLoginUser().getUserid(); |
| | | SysUser sysUser = sysUserClient.getSysUser(userId).getData(); |
| | | setChargingOrderAuthSiteIds(dto, sysUser, userId, sysUser.getRoleType()); |
| | | Map<String, Object> map = this.baseMapper.chargingOrderBaseSummary(dto, startTime1, startTime2, endTime1, endTime2); |
| | | if (null != map) { |
| | | tCharingOrderVO.setTotal(getSummaryDecimal(map, "total")); |
| | | tCharingOrderVO.setTime(getSummaryLong(map, "time")); |
| | | tCharingOrderVO.setIncome(getSummaryDecimal(map, "income")); |
| | | tCharingOrderVO.setElectronicMoney(getSummaryDecimal(map, "electronicMoney")); |
| | | tCharingOrderVO.setServiceMoney(getSummaryDecimal(map, "serviceMoney")); |
| | | tCharingOrderVO.setWechatIncome(getSummaryDecimal(map, "wechatIncome")); |
| | | tCharingOrderVO.setAlipayIncome(getSummaryDecimal(map, "alipayIncome")); |
| | | tCharingOrderVO.setWhitelistChargingIncome(getSummaryDecimal(map, "whitelistChargingIncome")); |
| | | tCharingOrderVO.setWhitelistRefund(getSummaryDecimal(map, "whitelistRefund")); |
| | | } |
| | | List<Long> summaryOrderIds = this.baseMapper.chargingOrderSummaryOrderIds(dto, startTime1, startTime2, endTime1, endTime2); |
| | | Map<String, Object> shareIncomeMap = getChargingOrderShareIncomeSummary(summaryOrderIds); |
| | | tCharingOrderVO.setPlatformIncomeTotal(getSummaryDecimal(shareIncomeMap, "platformIncomeTotal")); |
| | | tCharingOrderVO.setPartnerIncomeTotal(getSummaryDecimal(shareIncomeMap, "partnerIncomeTotal")); |
| | | Map<String, Object> balanceMap = getExchangeCodeBalanceSummary(summaryOrderIds); |
| | | tCharingOrderVO.setBalanceIncome(getSummaryDecimal(balanceMap, "balanceIncome")); |
| | | tCharingOrderVO.setBalanceGiftIncome(getSummaryDecimal(balanceMap, "balanceGiftIncome")); |
| | | return tCharingOrderVO; |
| | | } |
| | | |
| | | private String[] parseChargingOrderTimeRange(ChargingOrderQuery dto) { |
| | | String startTime1 = null; |
| | | String startTime2 = null; |
| | | String endTime1 = null; |
| | | String endTime2 = null; |
| | | |
| | | if (StringUtils.hasLength(dto.getStartTime())) { |
| | | String[] split = dto.getStartTime().split(" - "); |
| | | startTime1 = split[0]; |
| | |
| | | endTime1 = split[0]; |
| | | endTime2 = split[1]; |
| | | } |
| | | PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(), dto.getPageSize()); |
| | | |
| | | if (StringUtils.hasLength(dto.getPhone())) { |
| | | List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData(); |
| | | if (data.isEmpty()) { |
| | | tCharingOrderVO.setList(pageInfo); |
| | | return tCharingOrderVO; |
| | | } |
| | | dto.setUserIds(data); |
| | | return new String[]{startTime1, startTime2, endTime1, endTime2}; |
| | | } |
| | | |
| | | private void fillChargingOrderPageExtra(List<ChargingOrderVO> list, List<Integer> siteIds, SysUser sysUser, Integer roleType) { |
| | | if (list == null || list.isEmpty()) { |
| | | return; |
| | | } |
| | | Long userId = tokenService.getLoginUser().getUserid(); |
| | | // 查询当前登陆人按钮权限 |
| | | SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData(); |
| | | Integer roleType = sysUser.getRoleType(); |
| | | setChargingOrderAuthSiteIds(dto, sysUser, userId, roleType); |
| | | List<Integer> siteIds = dto.getSiteIds(); |
| | | List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo, dto, startTime1, startTime2, endTime1, endTime2); |
| | | fillChargingOrderBalanceIncome(list); |
| | | fillChargingOrderShareIncome(list); |
| | | List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list(); |
| | | List<Long> orderIds = list.stream().map(ChargingOrderVO::getId).filter(Objects::nonNull).collect(Collectors.toList()); |
| | | List<Integer> pageSiteIds = list.stream().map(ChargingOrderVO::getSiteId).filter(Objects::nonNull).distinct().collect(Collectors.toList()); |
| | | List<Integer> pageGunIds = list.stream().map(ChargingOrderVO::getChargingGunId).filter(Objects::nonNull).distinct().collect(Collectors.toList()); |
| | | List<TChargingGun> pageGuns = pageGunIds.isEmpty() ? new ArrayList<>() : Optional.ofNullable(chargingGunClient.getChargingGunByIds(pageGunIds).getData()).orElse(new ArrayList<>()); |
| | | Map<Integer, TChargingGun> gunMap = pageGuns.stream() |
| | | .filter(item -> item.getId() != null) |
| | | .collect(Collectors.toMap(TChargingGun::getId, item -> item, (a, b) -> a)); |
| | | List<TChargingPile> pagePiles = pageSiteIds.isEmpty() ? new ArrayList<>() : Optional.ofNullable(chargingPileClient.getChargingPileBySiteIds(pageSiteIds).getData()).orElse(new ArrayList<>()); |
| | | Map<Integer, TChargingPile> pileMap = pagePiles.stream() |
| | | .filter(item -> item.getId() != null) |
| | | .collect(Collectors.toMap(TChargingPile::getId, item -> item, (a, b) -> a)); |
| | | List<Site> pageSites = pageSiteIds.isEmpty() ? new ArrayList<>() : Optional.ofNullable(siteClient.getSiteByIds(pageSiteIds).getData()).orElse(new ArrayList<>()); |
| | | Map<Integer, Site> siteMap = pageSites.stream() |
| | | .filter(item -> item.getId() != null) |
| | | .collect(Collectors.toMap(Site::getId, item -> item, (a, b) -> a)); |
| | | Map<Long, List<TChargingOrderAccountingStrategy>> strategyMap = orderIds.isEmpty() ? new HashMap<>() : |
| | | chargingOrderAccountingStrategyService.lambdaQuery() |
| | | .in(TChargingOrderAccountingStrategy::getChargingOrderId, orderIds) |
| | | .list() |
| | | .stream() |
| | | .collect(Collectors.groupingBy(TChargingOrderAccountingStrategy::getChargingOrderId)); |
| | | Map<Integer, Boolean> authRecordMap = new HashMap<>(); |
| | | if (roleType == 2 && siteIds != null) { |
| | | for (Integer siteId : siteIds) { |
| | | List<Boolean> permission = partnerClient.getChargingOrderMenu(sysUser.getObjectId(), siteId).getData(); |
| | | authRecordMap.put(siteId, permission != null && !permission.isEmpty() && Boolean.TRUE.equals(permission.get(0))); |
| | | } |
| | | } |
| | | for (ChargingOrderVO chargingOrderVO : list) { |
| | | if (roleType == 2) { |
| | | for (Integer siteId : siteIds) { |
| | | // 校验有没有这个站点的权限 |
| | | List<Boolean> t1 = partnerClient.getChargingOrderMenu(sysUser.getObjectId(), siteId).getData(); |
| | | chargingOrderVO.setAuthRecord(t1.get(0)); |
| | | } |
| | | if (roleType == 2 && chargingOrderVO.getSiteId() != null) { |
| | | chargingOrderVO.setAuthRecord(Boolean.TRUE.equals(authRecordMap.get(chargingOrderVO.getSiteId()))); |
| | | } |
| | | chargingOrderVO.setCommissionAmount(chargingOrderVO.getRechargeAmount() != null ? chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")) : new BigDecimal("0")); |
| | | chargingOrderVO.setPlatFormMoney(chargingOrderVO.getRechargeAmount() != null ? chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2, BigDecimal.ROUND_DOWN) : new BigDecimal("0")); |
| | | chargingOrderVO.setUid(chargingOrderVO.getId() + ""); |
| | | TChargingGun data3 = allGun.stream().filter(e -> e.getId().equals(chargingOrderVO.getChargingGunId())).findFirst().orElse(null); |
| | | TChargingPile data2 = allPile.stream().filter(e -> e.getId().equals(chargingOrderVO.getChargingPileId())).findFirst().orElse(null); |
| | | if (chargingOrderVO.getSiteId() != null) { |
| | | List<Integer> integers = new ArrayList<>(); |
| | | integers.add(chargingOrderVO.getSiteId()); |
| | | Site site = data9.stream().filter(e -> e.getId().equals(chargingOrderVO.getSiteId())).findFirst().orElse(null); |
| | | if (site != null) chargingOrderVO.setSiteName(site.getName()); |
| | | Site site = siteMap.get(chargingOrderVO.getSiteId()); |
| | | if (site != null) { |
| | | chargingOrderVO.setSiteName(site.getName()); |
| | | } |
| | | if (data2 != null && data3 != null) { |
| | | chargingOrderVO.setTerminalName(data2.getName() + "-" + data3.getName()); |
| | | TChargingGun gun = gunMap.get(chargingOrderVO.getChargingGunId()); |
| | | TChargingPile pile = pileMap.get(chargingOrderVO.getChargingPileId()); |
| | | if (pile != null && gun != null) { |
| | | chargingOrderVO.setTerminalName(pile.getName() + "-" + gun.getName()); |
| | | } |
| | | // 充电订单 明细记录 |
| | | List<TChargingOrderAccountingStrategy> chargingOrderId = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList()); |
| | | List<TChargingOrderAccountingStrategy> strategies = strategyMap.getOrDefault(chargingOrderVO.getId(), new ArrayList<>()); |
| | | if (chargingOrderVO.getStartTime() != null && chargingOrderVO.getEndTime() != null) { |
| | | LocalDateTime startTime = chargingOrderVO.getStartTime(); |
| | | LocalDateTime endTime = chargingOrderVO.getEndTime(); |
| | | // 计算时间差 单位秒 |
| | | long between = ChronoUnit.SECONDS.between(startTime, endTime); |
| | | long between = ChronoUnit.SECONDS.between(chargingOrderVO.getStartTime(), chargingOrderVO.getEndTime()); |
| | | chargingOrderVO.setChargingSecond(between); |
| | | |
| | | BigDecimal electronic_reduce = chargingOrderId.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | chargingOrderVO.setElectrovalence(electronic_reduce); |
| | | BigDecimal service_reduce = chargingOrderId.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | if (!chargingOrderVO.getOrderSource().equals(2)) { |
| | | chargingOrderVO.setServiceCharge(service_reduce); |
| | | BigDecimal electronicReduce = strategies.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | chargingOrderVO.setElectrovalence(electronicReduce); |
| | | BigDecimal serviceReduce = strategies.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | if (!Objects.equals(chargingOrderVO.getOrderSource(), 2)) { |
| | | chargingOrderVO.setServiceCharge(serviceReduce); |
| | | chargingOrderVO.setSharingAmount(BigDecimal.ZERO); |
| | | } else { |
| | | chargingOrderVO.setServiceCharge(service_reduce.multiply(new BigDecimal("0.8"))); |
| | | chargingOrderVO.setSharingAmount(service_reduce.multiply(new BigDecimal("0.2"))); |
| | | chargingOrderVO.setServiceCharge(serviceReduce.multiply(new BigDecimal("0.8"))); |
| | | chargingOrderVO.setSharingAmount(serviceReduce.multiply(new BigDecimal("0.2"))); |
| | | } |
| | | } |
| | | // 充电时段数 |
| | | int size = chargingOrderId.size(); |
| | | chargingOrderVO.setCount(size); |
| | | // 用户手机号 |
| | | TAppUser data = data6.stream().filter(e -> e.getId().equals(chargingOrderVO.getAppUserId())).findFirst().orElse(null); |
| | | if (data != null) { |
| | | // 车牌号 |
| | | chargingOrderVO.setPhone(data.getPhone()); |
| | | List<Long> longs = new ArrayList<>(); |
| | | if (chargingOrderVO.getAppUserCarId() != null) { |
| | | longs.add(chargingOrderVO.getAppUserCarId()); |
| | | TAppUserCar tAppUserCar = data4.stream().filter(e -> e.getId().equals(chargingOrderVO.getAppUserCarId())).findFirst().orElse(null); |
| | | if (tAppUserCar != null) { |
| | | chargingOrderVO.setLicensePlate(tAppUserCar.getLicensePlate()); |
| | | } |
| | | } else { |
| | | chargingOrderVO.setLicensePlate(chargingOrderVO.getPlateNum()); |
| | | } |
| | | |
| | | } |
| | | chargingOrderVO.setCount(strategies.size()); |
| | | chargingOrderVO.setLicensePlate(chargingOrderVO.getPlateNum()); |
| | | } |
| | | fillEmptyChargingOrderSummary(tCharingOrderVO); |
| | | Map<String, Object> map = this.baseMapper.chargingOrderNolimit(dto, startTime1, startTime2, endTime1, endTime2); |
| | | if (null != map) { |
| | | tCharingOrderVO.setTotal(getSummaryDecimal(map, "total")); |
| | | tCharingOrderVO.setTime(getSummaryLong(map, "time")); |
| | | tCharingOrderVO.setIncome(getSummaryDecimal(map, "income")); |
| | | tCharingOrderVO.setElectronicMoney(getSummaryDecimal(map, "electronicMoney")); |
| | | tCharingOrderVO.setServiceMoney(getSummaryDecimal(map, "serviceMoney")); |
| | | } |
| | | Map<String, Object> fundMap = this.baseMapper.chargingOrderFundSummary(dto, startTime1, startTime2, endTime1, endTime2); |
| | | if (null != fundMap) { |
| | | tCharingOrderVO.setWechatIncome(getSummaryDecimal(fundMap, "wechatIncome")); |
| | | tCharingOrderVO.setAlipayIncome(getSummaryDecimal(fundMap, "alipayIncome")); |
| | | tCharingOrderVO.setWhitelistChargingIncome(getSummaryDecimal(fundMap, "whitelistChargingIncome")); |
| | | tCharingOrderVO.setWhitelistRefund(getSummaryDecimal(fundMap, "whitelistRefund")); |
| | | } |
| | | Map<String, Object> shareIncomeMap = getChargingOrderShareIncomeSummary(dto, startTime1, startTime2, endTime1, endTime2); |
| | | tCharingOrderVO.setPlatformIncomeTotal(getSummaryDecimal(shareIncomeMap, "platformIncomeTotal")); |
| | | tCharingOrderVO.setPartnerIncomeTotal(getSummaryDecimal(shareIncomeMap, "partnerIncomeTotal")); |
| | | Map<String, Object> balanceMap = getExchangeCodeBalanceSummary(dto, startTime1, startTime2, endTime1, endTime2); |
| | | tCharingOrderVO.setBalanceIncome(getSummaryDecimal(balanceMap, "balanceIncome")); |
| | | tCharingOrderVO.setBalanceGiftIncome(getSummaryDecimal(balanceMap, "balanceGiftIncome")); |
| | | pageInfo.setRecords(list); |
| | | tCharingOrderVO.setList(pageInfo); |
| | | return tCharingOrderVO; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 填充充电桩订单列表余额收入,余额收入按真实充值余额统计,赠送余额单独展示。 |
| | |
| | | /** |
| | | * 汇总充电桩订单余额收入,兑换码使用记录的usedAmount包含赠送余额,SQL中需扣除giftUsedAmount。 |
| | | */ |
| | | private Map<String, Object> getExchangeCodeBalanceSummary(ChargingOrderQuery dto, String startTime1, String startTime2, String endTime1, String endTime2) { |
| | | private Map<String, Object> getExchangeCodeBalanceSummary(List<Long> orderIds) { |
| | | Map<String, Object> totalMap = new HashMap<>(); |
| | | totalMap.put("balanceIncome", BigDecimal.ZERO); |
| | | totalMap.put("balanceGiftIncome", BigDecimal.ZERO); |
| | | List<Long> orderIds = this.baseMapper.chargingOrderSummaryOrderIds(dto, startTime1, startTime2, endTime1, endTime2); |
| | | if (orderIds == null || orderIds.isEmpty()) { |
| | | return totalMap; |
| | | } |
| | |
| | | return totalMap; |
| | | } |
| | | |
| | | private Map<String, Object> getChargingOrderShareIncomeSummary(ChargingOrderQuery dto, String startTime1, String startTime2, String endTime1, String endTime2) { |
| | | private Map<String, Object> getChargingOrderShareIncomeSummary(List<Long> orderIds) { |
| | | Map<String, Object> totalMap = new HashMap<>(); |
| | | totalMap.put("platformIncomeTotal", BigDecimal.ZERO); |
| | | totalMap.put("partnerIncomeTotal", BigDecimal.ZERO); |
| | | List<Long> orderIds = this.baseMapper.chargingOrderSummaryOrderIds(dto, startTime1, startTime2, endTime1, endTime2); |
| | | if (orderIds == null || orderIds.isEmpty()) { |
| | | return totalMap; |
| | | } |