| | |
| | | }); |
| | | |
| | | |
| | | // //异步线程检测远程启动的应答结果。如果失败,则需要全额退款 |
| | | // Long id = chargingOrder.getId(); |
| | | // //执行5分钟的定时任务检测 |
| | | // ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); |
| | | // scheduler.scheduleAtFixedRate(()->{ |
| | | // if(timingDetection(id)){ |
| | | // scheduler.shutdown(); |
| | | // } |
| | | // }, 5, 1, TimeUnit.SECONDS); |
| | | //异步线程检测远程启动的应答结果。如果失败,则需要全额退款 |
| | | Long id = chargingOrder.getId(); |
| | | //执行10分钟的定时任务检测 |
| | | ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); |
| | | scheduler.scheduleAtFixedRate(()->{ |
| | | if(timingDetection(id)){ |
| | | scheduler.shutdown(); |
| | | } |
| | | }, 10, 1, TimeUnit.SECONDS); |
| | | return AjaxResult.success(); |
| | | } |
| | | |
| | |
| | | List<PlatformStartChargingReply> data = platformStartChargingReplyService.getPlatformStartChargingReply(code); |
| | | log.info(code + ":-------------------开始检查调起充电结果-------------------" + data.toString()); |
| | | Site site = siteClient.getSiteByIds(Arrays.asList(chargingOrder.getSiteId())).getData().get(0); |
| | | if (data.size() != 0) { |
| | | if (!data.isEmpty()) { |
| | | PlatformStartChargingReply platformStartChargingReply = data.get(1); |
| | | Integer startup_result = platformStartChargingReply.getStartup_result(); |
| | | Integer failure_cause = platformStartChargingReply.getFailure_cause(); |
| | | Integer counter = counter_map.get(code); |
| | | PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key); |
| | | //5分钟内还未插枪则取消充电,退回金额。 |
| | | if (failure_cause == 5 && (null == counter || counter < 1800)) { |
| | | //10分钟内还未插枪则取消充电,退回金额。 |
| | | if (failure_cause == 5 && (null == counter || counter < 600)) { |
| | | counter = (null == counter ? 0 : counter) + 1; |
| | | counter_map.put(code, counter); |
| | | //启动失败 |
| | |
| | | //启动失败 |
| | | preChargeCheck1.setStartupSuccess(3); |
| | | preChargeCheck1.setFailureCause(failure_cause); |
| | | chargingOrder.setStatus(2); |
| | | chargingOrder.setEndMode(0); |
| | | this.updateById(chargingOrder); |
| | | //启动失败后取消订单,退款操作 |
| | | refund(code); |
| | | chargingOrder.setStatus(-1); |
| | | chargingOrder.setEndMode(0); |
| | | } else { |
| | | //启动成功 |
| | | preChargeCheck1.setStartupSuccess(2); |
| | | chargingOrder.setStatus(3); |
| | | chargingOrder.setStartTime(LocalDateTime.now()); |
| | | this.updateById(chargingOrder); |
| | | } |
| | | this.updateById(chargingOrder); |
| | | |
| | | if (chargingOrder.getStatus() == 3) { |
| | | //推送监管平台订单状态 |
| | | new Thread(() -> { |
| | | ChargingOrderVo chargingOrderVo = new ChargingOrderVo(); |
| | | BeanUtils.copyProperties(chargingOrder, chargingOrderVo); |
| | | chargingMessageClient.pushOrderStatus(chargingOrderVo); |
| | | }).start(); |
| | | } |
| | | |
| | | redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); |
| | | //推送三方平台订单状态 |
| | | if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) { |
| | |
| | | } |
| | | ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); |
| | | threadPoolExecutor.execute(()->{ |
| | | if (chargingOrder.getStatus() == 3) { |
| | | //推送监管平台订单状态 |
| | | ChargingOrderVo chargingOrderVo = new ChargingOrderVo(); |
| | | BeanUtils.copyProperties(chargingOrder, chargingOrderVo); |
| | | chargingMessageClient.pushOrderStatus(chargingOrderVo); |
| | | } |
| | | //推送成都监管 |
| | | NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo(); |
| | | vo.setOrderCode(chargingOrder.getCode()); |
| | |
| | | }); |
| | | return true; |
| | | } else { |
| | | Integer counter = boot_failed_map.get(code); |
| | | log.info(code + ":-------------------未上传开启充电结果-------------------" + counter); |
| | | PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key); |
| | | //5分钟内未启动成功,退回金额。 |
| | | if (null == counter || counter < 1800) { |
| | | counter = (null == counter ? 0 : counter) + 1; |
| | | boot_failed_map.put(code, counter); |
| | | //启动失败 |
| | | preChargeCheck1.setStartupSuccess(1); |
| | | preChargeCheck1.setFailureCause(0); |
| | | UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataService.getDataByOrderCode(code, "desc"); |
| | | if(null != uploadRealTimeMonitoringData){ |
| | | //启动成功 |
| | | preChargeCheck1.setStartupSuccess(2); |
| | | chargingOrder.setStatus(3); |
| | | chargingOrder.setStartTime(LocalDateTime.now()); |
| | | this.updateById(chargingOrder); |
| | | redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); |
| | | return false; |
| | | |
| | | //推送三方平台订单状态 |
| | | if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) { |
| | | tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId()); |
| | | } |
| | | ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); |
| | | threadPoolExecutor.execute(()->{ |
| | | if (chargingOrder.getStatus() == 3) { |
| | | //推送监管平台订单状态 |
| | | ChargingOrderVo chargingOrderVo = new ChargingOrderVo(); |
| | | BeanUtils.copyProperties(chargingOrder, chargingOrderVo); |
| | | chargingMessageClient.pushOrderStatus(chargingOrderVo); |
| | | } |
| | | //推送成都监管 |
| | | NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo(); |
| | | vo.setOrderCode(chargingOrder.getCode()); |
| | | vo.setChargingGunId(chargingOrder.getChargingGunId()); |
| | | chengDuJianGuanClient.notificationConnectorChargeStatus(vo); |
| | | }); |
| | | return true; |
| | | }else{ |
| | | Integer counter = boot_failed_map.get(code); |
| | | log.info(code + ":-------------------未上传开启充电结果-------------------" + counter); |
| | | //10分钟内未启动成功,退回金额。 |
| | | if (null == counter || counter < 600) { |
| | | counter = (null == counter ? 0 : counter) + 1; |
| | | boot_failed_map.put(code, counter); |
| | | //启动失败 |
| | | preChargeCheck1.setStartupSuccess(1); |
| | | preChargeCheck1.setFailureCause(0); |
| | | redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); |
| | | return false; |
| | | } |
| | | |
| | | //清除计时器中的无效数据 |
| | | boot_failed_map.remove(code); |
| | | TChargingOrder order = new TChargingOrder(); |
| | | order.setId(id); |
| | | order.setAppUserId(chargingOrder.getAppUserId()); |
| | | //启动失败 |
| | | preChargeCheck1.setStartupSuccess(3); |
| | | preChargeCheck1.setFailureCause(0); |
| | | order.setStatus(2); |
| | | order.setEndMode(0); |
| | | this.updateById(order); |
| | | //启动失败后取消订单,退款操作 |
| | | refund(code); |
| | | redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); |
| | | //推送三方平台订单状态 |
| | | if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) { |
| | | tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId()); |
| | | } |
| | | ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); |
| | | threadPoolExecutor.execute(()->{ |
| | | //推送成都监管 |
| | | NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo(); |
| | | vo.setOrderCode(chargingOrder.getCode()); |
| | | vo.setChargingGunId(chargingOrder.getChargingGunId()); |
| | | chengDuJianGuanClient.notificationConnectorChargeStatus(vo); |
| | | }); |
| | | return true; |
| | | } |
| | | |
| | | //清除计时器中的无效数据 |
| | | boot_failed_map.remove(code); |
| | | TChargingOrder order = new TChargingOrder(); |
| | | order.setId(id); |
| | | order.setAppUserId(chargingOrder.getAppUserId()); |
| | | //启动失败 |
| | | preChargeCheck1.setStartupSuccess(3); |
| | | preChargeCheck1.setFailureCause(0); |
| | | //启动失败后取消订单,退款操作 |
| | | refund(code); |
| | | order.setStatus(-1); |
| | | order.setEndMode(0); |
| | | this.updateById(order); |
| | | redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); |
| | | //推送三方平台订单状态 |
| | | if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) { |
| | | tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId()); |
| | | } |
| | | ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); |
| | | threadPoolExecutor.execute(()->{ |
| | | //推送成都监管 |
| | | NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo(); |
| | | vo.setOrderCode(chargingOrder.getCode()); |
| | | vo.setChargingGunId(chargingOrder.getChargingGunId()); |
| | | chengDuJianGuanClient.notificationConnectorChargeStatus(vo); |
| | | }); |
| | | return true; |
| | | } |
| | | } |
| | | |
| | |
| | | //启动失败 |
| | | preChargeCheck1.setStartupSuccess(3); |
| | | preChargeCheck1.setFailureCause(failure_cause); |
| | | order.setStatus(2); |
| | | order.setEndMode(0); |
| | | this.updateById(order); |
| | | //启动失败后取消订单,退款操作 |
| | | refund(code); |
| | | order.setStatus(-1); |
| | | order.setEndMode(0); |
| | | } else { |
| | | //启动成功 |
| | | preChargeCheck1.setStartupSuccess(2); |
| | | order.setStatus(3); |
| | | order.setStartTime(LocalDateTime.now()); |
| | | this.updateById(order); |
| | | TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData(); |
| | | chargingGun.setStatus(4); |
| | | chargingGunClient.updateChargingGunById(chargingGun); |
| | |
| | | } |
| | | } |
| | | redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS); |
| | | this.updateById(order); |
| | | |
| | | if (3 == order.getStatus()) { |
| | | //推送监管平台订单状态 |
| | |
| | | tcecClient.notificationStartChargeResult(result); |
| | | tcecClient.notificationEquipChargeStatus(order.getStartChargeSeq(), order.getOperatorId()); |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | if (siteIds.isEmpty()) siteIds.add(-1); |
| | | dto.setSiteIds(siteIds); |
| | | List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo, dto, startTime1, startTime2, endTime1, endTime2); |
| | | |
| | | BigDecimal total = new BigDecimal("0"); |
| | | long time = 0L; |
| | | BigDecimal electronicMoney = new BigDecimal("0"); |
| | | BigDecimal serviceMoney = new BigDecimal("0"); |
| | | BigDecimal commissionMoney = new BigDecimal("0"); |
| | | // BigDecimal refundMoney = new BigDecimal("0"); |
| | | BigDecimal paymentMoney = new BigDecimal("0"); |
| | | List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list(); |
| | | |
| | | for (ChargingOrderVO chargingOrderVO : list) { |
| | | if (roleType == 2) { |
| | | for (Integer siteId : siteIds) { |
| | |
| | | if (null != map) { |
| | | tCharingOrderVO.setTotal(map.get("total") == null ? BigDecimal.ZERO : (BigDecimal) map.get("total")); |
| | | tCharingOrderVO.setTime(map.get("time") == null ? 0L : (Long) map.get("time")); |
| | | tCharingOrderVO.setIncome((map.get("paymentMoney") == null ? BigDecimal.ZERO : (BigDecimal) map.get("paymentMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN)); |
| | | tCharingOrderVO.setElectronicMoney((map.get("electronicMoney") == null ? BigDecimal.ZERO : (BigDecimal) map.get("electronicMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN)); |
| | | tCharingOrderVO.setServiceMoney((map.get("serviceMoney") == null ? BigDecimal.ZERO : (BigDecimal) map.get("serviceMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN)); |
| | | tCharingOrderVO.setIncome(map.get("income") == null ? BigDecimal.ZERO : ((BigDecimal) map.get("income")).setScale(2, RoundingMode.HALF_EVEN)); |
| | | tCharingOrderVO.setElectronicMoney(map.get("electronicMoney") == null ? BigDecimal.ZERO : ((BigDecimal) map.get("electronicMoney")).setScale(2, RoundingMode.HALF_EVEN)); |
| | | tCharingOrderVO.setServiceMoney(map.get("serviceMoney") == null ? BigDecimal.ZERO : ((BigDecimal) map.get("serviceMoney")).setScale(2, RoundingMode.HALF_EVEN)); |
| | | } else { |
| | | tCharingOrderVO.setTotal(BigDecimal.ZERO); |
| | | tCharingOrderVO.setTime(0L); |
| | |
| | | String startTime2 = null; |
| | | String endTime1 = null; |
| | | String endTime2 = null; |
| | | |
| | | List<TChargingGun> allGun = chargingGunClient.getAllGun().getData(); |
| | | List<TChargingPile> allPile = chargingGunClient.getAllPile().getData(); |
| | | |
| | | |
| | | if (StringUtils.hasLength(dto.getStartTime())) { |
| | | String[] split = dto.getStartTime().split(" - "); |
| | | startTime1 = split[0]; |
| | | startTime2 = split[1]; |
| | | } |
| | | |
| | | if (StringUtils.hasLength(dto.getEndTime())) { |
| | | String[] split = dto.getEndTime().split(" - "); |
| | | endTime1 = split[0]; |
| | | endTime2 = split[1]; |
| | | } |
| | | ChargingOrderTimeVO chargingOrderTimeVO = new ChargingOrderTimeVO(); |
| | | if (StringUtils.hasLength(dto.getPhone())) { |
| | |
| | | List<ChargingOrderListVO> list = new ArrayList<>(); |
| | | List<Map<String, Object>> maps = this.baseMapper.chargingList1(pageInfo, dto, startTime1, startTime2, endTime1, endTime2); |
| | | for (Map<String, Object> map : maps) { |
| | | if(null == map){ |
| | | continue; |
| | | } |
| | | ChargingOrderListVO chargingOrderListVO = new ChargingOrderListVO(); |
| | | if (roleType == 2) { |
| | | List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), chargingOrderListVO.getSiteId()).getData(); |
| | | List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), Integer.valueOf(map.get("siteId").toString())).getData(); |
| | | chargingOrderListVO.setAuthInfo(data.get(0)); |
| | | chargingOrderListVO.setAuthCurve(data.get(1)); |
| | | } |
| | |
| | | List<Map<String, Object>> list1 = this.baseMapper.chargingListSum(dto, startTime1, startTime2, endTime1, endTime2); |
| | | chargingOrderTimeVO.setOrderCount(list1.size()); |
| | | for (Map<String, Object> map : list1) { |
| | | if(null == map){ |
| | | continue; |
| | | } |
| | | electronic = electronic.add(new BigDecimal(null == map.get("electronic") ? "0" : map.get("electronic").toString())); |
| | | paymentAmount = paymentAmount.add(new BigDecimal(null == map.get("paymentAmount") ? "0" : map.get("paymentAmount").toString())); |
| | | electrovalence = electrovalence.add(new BigDecimal(null == map.get("electrovalence") ? "0" : map.get("electrovalence").toString())); |
| | |
| | | chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId())); |
| | | SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>(); |
| | | List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode()); |
| | | if(!dataList.isEmpty()){ |
| | | vo.setStart_time(sdfs.format(dataList.get(dataList.size() - 1).getCreate_time()) + ".00"); |
| | | vo.setEnd_time(sdfs.format(dataList.get(0).getCreate_time()) + ".00"); |
| | | } |
| | | |
| | | //跨天 |
| | | if (!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])) { |
| | | //当天的 |
| | |
| | | } |
| | | chargingOrder.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN)); |
| | | |
| | | List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode()); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | if(dataList.isEmpty()){ |
| | | chargingOrder.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS"))); |
| | | }else{ |
| | | chargingOrder.setStartTime(LocalDateTime.parse(sdf.format(dataList.get(dataList.size() - 1).getCreate_time()), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); |
| | | } |
| | | chargingOrder.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS"))); |
| | | chargingOrder.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS"))); |
| | | chargingOrder.setStatus(5); |
| | | chargingOrder.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN)); |
| | |
| | | vipOrderRefund.setVipOrderId(vipOrder.getId()); |
| | | vipOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount()); |
| | | vipOrderRefund.setRefundStatus(1); |
| | | vipOrderRefund.setPayTime(vipOrder.getPayTime()); |
| | | vipOrderRefund.setPayCode(vipOrder.getCode()); |
| | | vipOrderRefund.setPayType(vipOrder.getPaymentType()); |
| | | vipOrderRefund.setRefundTime(LocalDateTime.now()); |
| | | vipOrderRefund.setCode(vipOrder.getCode()); |
| | |
| | | public List<TChargingOrder> findEndChargingOrder() { |
| | | return this.baseMapper.findEndChargingOrder(); |
| | | } |
| | | |
| | | /** |
| | | * 获取需要手动修改订单状态的数据 |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<TChargingOrder> findUpStatusChargingOrder() { |
| | | return this.baseMapper.findUpStatusChargingOrder(); |
| | | } |
| | | |
| | | /** |
| | | * 查询充电算账单数据 |
| | | * @param startTime |
| | | * @param endTime |
| | | */ |
| | | @Override |
| | | public List<Map<String, Object>> getChargingSettlementBill(String startTime, String endTime, Integer dateType) { |
| | | return this.baseMapper.getChargingSettlementBill(startTime, endTime, dateType); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 查询账户结算账单数据 |
| | | * @param startTime |
| | | * @param endTime |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<Map<String, Object>> getAccountSettlementStatement(String startTime, String endTime, Integer rechargePaymentType) { |
| | | return this.baseMapper.getAccountSettlementStatement(startTime, endTime, rechargePaymentType); |
| | | } |
| | | } |