From 08049e5ac27458241cf3b054c1d38dbcb6ac91ac Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期三, 23 十月 2024 13:59:21 +0800 Subject: [PATCH] bug修改 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 238 ++++++++++++----------------------------------------------- 1 files changed, 50 insertions(+), 188 deletions(-) diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java index b9aa52e..921dedc 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java @@ -651,116 +651,10 @@ log.error(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------" + platformStartCharging.toString()); sendMessageClient.platformStartCharging(platformStartCharging); - //异步线程检测远程启动的应答结果。如果失败,则需要全额退款 - Long id = chargingOrder.getId(); - //执行5分钟的定时任务检测 - ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - scheduler.scheduleAtFixedRate(()->{ - if(timingDetection(id)){ - scheduler.shutdown(); - } - }, 5, 1, TimeUnit.SECONDS); return AjaxResult.success(); } - - /** - * 定时检测mongodb数据库数据 - * @param id - * @return - */ - public boolean timingDetection(Long id){ - TChargingOrder chargingOrder = this.getById(id); - if(chargingOrder.getStatus() != 2){ - return true; - } - String code = chargingOrder.getCode(); - String key = "AQJC_" + chargingOrder.getChargingGunId(); - //获取安全校验 - com.ruoyi.integration.api.model.SecurityDetection securityDetection = securityDetectionClient.getSecurityDetection(chargingOrder.getCode()).getData(); - if(null != securityDetection){ - PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + chargingOrder.getChargingGunId()); - if(null != preChargeCheck1){ - preChargeCheck1.setElectronicLockLock(true); - preChargeCheck1.setInsulationTesting(true); - preChargeCheck1.setSecureConnectionDetection(securityDetection.getSecure_connection() == 1); - preChargeCheck1.setStartupSuccess(1); - redisService.setCacheObject("AQJC_" + chargingOrder.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS); - } - } - - List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData(); - if(null == data){ - return false; - } - log.error(code + ":-------------------开始检查调起充电结果-------------------" + data.toString()); - if(data.size() != 0){ - 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 < 300)){ - counter = (null == counter ? 0 : counter) + 1; - counter_map.put(code, counter); - //启动失败 - preChargeCheck1.setStartupSuccess(3); - preChargeCheck1.setFailureCause(failure_cause); - redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); - return false; - } - - //清除计时器中的无效数据 - counter_map.remove(code); - TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code)); - if(0 == startup_result){ - //启动失败 - preChargeCheck1.setStartupSuccess(3); - preChargeCheck1.setFailureCause(failure_cause); - //启动失败后取消订单,退款操作 - refund(code); - order.setStatus(-1); - order.setEndMode(0); - }else{ - //启动成功 - preChargeCheck1.setStartupSuccess(2); - order.setStatus(3); - order.setStartTime(LocalDateTime.now()); - } - this.updateById(order); - redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); - return true; - }else{ - Integer counter = boot_failed_map.get(code); - log.error(code + ":-------------------未上传开启充电结果-------------------" + counter); - PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key); - //5分钟内未启动成功,退回金额。 - if(null == counter || counter < 300){ - counter = (null == counter ? 0 : counter) + 1; - boot_failed_map.put(code, counter); - //启动失败 - preChargeCheck1.setStartupSuccess(3); - preChargeCheck1.setFailureCause(0); - redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); - return false; - } - - //清除计时器中的无效数据 - boot_failed_map.remove(code); - TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code)); - //启动失败 - preChargeCheck1.setStartupSuccess(3); - preChargeCheck1.setFailureCause(0); - //启动失败后取消订单,退款操作 - refund(code); - order.setStatus(-1); - order.setEndMode(0); - this.updateById(order); - redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); - return true; - } - } + /** @@ -927,7 +821,7 @@ if(null != data){ chargingDetails.setChargeCurrent(data.getOutput_current()); chargingDetails.setChargeVoltage(data.getOutput_voltage()); - BigDecimal power = data.getOutput_current().multiply(data.getOutput_voltage()).divide(new BigDecimal(1000)); + BigDecimal power = data.getOutput_current().multiply(data.getOutput_voltage()).divide(new BigDecimal(1000), new MathContext(4, RoundingMode.HALF_EVEN)); chargingDetails.setChargePower(power); chargingDetails.setCompletionRatio(data.getSoc()); chargingDetails.setRemainingChargeTime(data.getTime_remaining()); @@ -982,70 +876,6 @@ sendMessageClient.platformStopCharging(platformStopCharging); log.error(code1 + ":-------------------远程停止充电请求-------------------"); log.error(platformStopCharging.toString()); - //开始查询停机应答,成功后开始计费费用 - boolean stop_status = false; - for (int i = 0; i < 60; i++) { - TChargingOrder chargingOrder1 = this.getById(id); - if(chargingOrder1.getStatus() != 3){ - stop_status = true; - break; - } - GetPlatformStopChargingReply query = new GetPlatformStopChargingReply(); - query.setCharging_gun_code(chargingGun.getCode()); - query.setCharging_pile_code(chargingPile.getCode()); - - //将时间转换成UTC时间后查询数据(mongodb存储时间以UTC格式存储) - ZoneId zoneId = ZoneId.systemDefault(); - ZonedDateTime zonedDateTime = ZonedDateTime.of(chargingOrder.getEndTime(), zoneId); - ZonedDateTime endTime = zonedDateTime.withZoneSameInstant(ZoneId.of("UTC")); - query.setEnd_time(endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - PlatformStopChargingReply reply = platformStopChargingReplyClient.getPlatformStopChargingReply(query).getData(); - log.error(code1 + ":-------------------查询远程停止充电应答-------------------"); - if(null == reply){ - log.error(code1 + ":-------------------远程停止充电应答无数据-------------------"); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - continue; - } - log.error(reply.toString()); - - if(0 == reply.getStop_result()){ - String failure_cause = ""; - switch (reply.getFailure_cause()){ - case 0: - failure_cause = "无"; - break; - case 1: - failure_cause = "设备编号不匹配"; - break; - case 2: - failure_cause = "枪未处于充电状态"; - break; - case 3: - failure_cause = "其他"; - break; - } - log.error(code1 + ":停机失败:订单号:{},失败原因:{}", chargingOrder.getCode(), failure_cause); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - }else{ - log.error(code1 + ":-------------------远程停止充电请求成功-------------------"); - stop_status = true; - break; - } - } - if(stop_status){ - chargingOrder.setEndMode(1); - this.updateById(chargingOrder); - }else{ - log.error(code1 + ":-------------------远程停止充电应答最终失败-------------------"); - } }); return AjaxResult.success(); } @@ -1412,7 +1242,7 @@ dto.setUserIds(carIds); } } - if (StringUtils.hasLength(dto.getPhone())){ + if (StringUtils.hasLength(dto.getLicensePlate())){ List<Long> data = appUserCarClient.getAppUserCarByLicensePlates(dto.getLicensePlate()).getData(); if(data!=null){ if (!data.isEmpty()){ @@ -1430,6 +1260,12 @@ PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize()); List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo,dto,startTime1,startTime2,endTime1,endTime2); for (ChargingOrderListVO chargingOrderListVO : list) { + chargingOrderListVO.setChargingCapacity(chargingOrderListVO.getElectricity()); + chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getOrderAmount()); + BigDecimal bigDecimal = new BigDecimal("0.006"); + if (chargingOrderListVO.getServiceCharge()!=null){ + chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getServiceCharge().multiply(bigDecimal)); + } chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getResidualAmount()==null?chargingOrderListVO.getPaymentAmount():chargingOrderListVO.getPaymentAmount().subtract(chargingOrderListVO.getResidualAmount())); chargingOrderListVO.setUid(chargingOrderListVO.getId()+""); List<Integer> integers = new ArrayList<>(); @@ -1547,9 +1383,9 @@ BigDecimal ping = new BigDecimal("0"); BigDecimal gu = new BigDecimal("0"); for (ChargingOrderListVO chargingOrderListVO : list1) { - if (chargingOrderListVO.getChargingCapacity()!=null)electronic = electronic.add(chargingOrderListVO.getChargingCapacity()); + if (chargingOrderListVO.getChargingCapacity()!=null)electronic = electronic.add(chargingOrderListVO.getElectricity()); - if (chargingOrderListVO.getPaymentAmount()!=null)paymentAmount = paymentAmount.add(chargingOrderListVO.getPaymentAmount()); + if (chargingOrderListVO.getPaymentAmount()!=null)paymentAmount = paymentAmount.add(chargingOrderListVO.getOrderAmount()); if (chargingOrderListVO.getElectrovalence()!=null)electrovalence = electrovalence.add(chargingOrderListVO.getElectrovalence()); if (chargingOrderListVO.getServiceCharge()!=null)serviceCharge = serviceCharge.add(chargingOrderListVO.getServiceCharge()); List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategyService.lambdaQuery() @@ -1636,6 +1472,10 @@ TChargingOrder chargingOrder= this.getById(uid); ChargingOrderListInfoVO chargingOrderListInfoVO = new ChargingOrderListInfoVO(); + BigDecimal bigDecimal = new BigDecimal("0.006"); + if (chargingOrder.getServiceCharge()!=null){ + chargingOrderListInfoVO.setCommissionAmount(chargingOrder.getServiceCharge().multiply(bigDecimal)); + } chargingOrderListInfoVO.setElectrovalence(chargingOrder.getElectrovalence()); chargingOrderListInfoVO.setServiceCharge(chargingOrder.getServiceCharge()); if (chargingOrder.getElectrovalence()!=null && chargingOrder.getServiceCharge()!=null){ @@ -1675,6 +1515,13 @@ if (chargingOrder.getCode()!=null){ List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData(); if (data6!=null){ + for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) { + if (uploadRealTimeMonitoringData.getOutput_current()!=null&& + uploadRealTimeMonitoringData.getOutput_voltage()!=null){ + uploadRealTimeMonitoringData.setPower(uploadRealTimeMonitoringData.getOutput_voltage() + .multiply(uploadRealTimeMonitoringData.getOutput_current())); + } + } if (!data6.isEmpty()){ // 第一条数据soc为开始 最后一条数据soc为结束soc chargingOrderListInfoVO.setStartSoc(data6.get(0).getSoc().toString()); @@ -1786,11 +1633,6 @@ return; } - //计算用户标签 - editUserTag(chargingOrder); - //用户推荐奖励 - referralReward(chargingOrder); - //如果使用优惠券需要判断优惠券是否满足使用条件 //根据实际的充电金额计算退款金额 退回费用=(原金额/总金额)*(总金额-实际充电金额) //退款金额=优惠券金额+剩余充电金额 @@ -1882,7 +1724,8 @@ if(null != chargingOrder.getVipDiscount()){ //服务费折扣 discountAmount = periodServicePrice_total.multiply((new BigDecimal(1).subtract(chargingOrder.getVipDiscount()))); - + periodServicePrice_total = periodServicePrice_total.multiply(chargingOrder.getVipDiscount()); + TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); if(null != appUser.getVipId()){ //判断会员是否还有充电优惠次数 @@ -1935,9 +1778,17 @@ if(1 == preferentialMode){ //满减 if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){ - refundAmount = refundAmount.add(tCoupon.getDiscountAmount()); - order.setCouponDiscountAmount(tCoupon.getDiscountAmount()); - payAmount = payAmount.subtract(tCoupon.getDiscountAmount()); + BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount(); + //如果优惠金额大于服务费金额,以服务费作为最大限制 + if(periodServicePrice_total.compareTo(couponDiscountAmount) < 0){ + refundAmount = refundAmount.add(periodServicePrice_total); + order.setCouponDiscountAmount(periodServicePrice_total); + payAmount = payAmount.subtract(periodServicePrice_total); + }else{ + refundAmount = refundAmount.add(couponDiscountAmount); + order.setCouponDiscountAmount(couponDiscountAmount); + payAmount = payAmount.subtract(couponDiscountAmount); + } }else{ order.setAppCouponId(null); order.setCouponDiscountAmount(BigDecimal.ZERO); @@ -1950,9 +1801,16 @@ //折扣金额 BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10)); divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide; - refundAmount = refundAmount.add(divide); - order.setCouponDiscountAmount(divide); - payAmount = payAmount.subtract(divide); + //如果优惠金额大于服务费金额,以服务费作为最大限制 + if(periodServicePrice_total.compareTo(divide) < 0){ + refundAmount = refundAmount.add(periodServicePrice_total); + order.setCouponDiscountAmount(periodServicePrice_total); + payAmount = payAmount.subtract(periodServicePrice_total); + }else{ + refundAmount = refundAmount.add(divide); + order.setCouponDiscountAmount(divide); + payAmount = payAmount.subtract(divide); + } }else{ order.setAppCouponId(null); order.setCouponDiscountAmount(BigDecimal.ZERO); @@ -2000,7 +1858,11 @@ appUserClient.updateAppUser(appUser); appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); } - + + //计算用户标签 + editUserTag(chargingOrder); + //用户推荐奖励 + referralReward(chargingOrder); //开始构建退款费用 if(refundAmount.compareTo(BigDecimal.ZERO) > 0){ -- Gitblit v1.7.1