From e55d73ce63cfadb9f1ca586c6028bdc142ae26ad Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期三, 09 十月 2024 10:35:55 +0800
Subject: [PATCH] 修改bug
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 243 ++++++++++++++++++++++++++++++++++++++----------
1 files changed, 190 insertions(+), 53 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 a319ff3..649a4dd 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
@@ -11,6 +11,7 @@
import com.ruoyi.account.api.vo.GetInviteUser;
import com.ruoyi.chargingPile.api.feignClient.*;
import com.ruoyi.chargingPile.api.model.*;
+import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.dto.ChargingOrderGroup;
import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
@@ -37,6 +38,7 @@
import com.ruoyi.order.api.query.SettlementListQuery;
import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
import com.ruoyi.order.api.vo.*;
+import com.ruoyi.order.api.vo.SecurityDetection;
import com.ruoyi.order.dto.*;
import com.ruoyi.order.mapper.TChargingOrderMapper;
import com.ruoyi.order.mapper.TSettlementConfirmMapper;
@@ -183,9 +185,15 @@
@Resource
private AppUserTagClient appUserTagClient;
+
+ @Resource
+ private SecurityDetectionClient securityDetectionClient;
//计数器
private Map<String, Integer> counter_map = new HashMap<>();
+
+ //计数器
+ private Map<String, Integer> boot_failed_map = new HashMap<>();
@@ -446,7 +454,7 @@
//直营站点才可以享受会员折扣
if(null != appUser.getVipId() && 1 == site.getBusinessCategory()){
- TVip vip = vipClient.getInfo(appUser.getVipId()).getData();
+ TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
BigDecimal discount = null;
if(1 == vip.getType()){
//普通会员折扣使用积分策略上的折扣,且有最高优惠金额
@@ -538,7 +546,7 @@
preChargeCheck.setSecureConnectionDetection(false);
preChargeCheck.setStartupSuccess(1);
String key = "AQJC_" + chargingOrder.getChargingGunId();
- redisService.setCacheObject(key, preChargeCheck);
+ redisService.setCacheObject(key, preChargeCheck, 24L, TimeUnit.HOURS);
//根据当前充值的金额和计费模板算出充电的金额
BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
@@ -599,7 +607,7 @@
if(discountAmount.compareTo(BigDecimal.ZERO) >= 0){
//计算会员最大优惠金额
if(null != appUser.getVipId()){
- TVip vip = vipClient.getInfo(appUser.getVipId()).getData();
+ TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
BigDecimal maximumDeduction = vip.getMaximumDeduction();
//普通会员有最高优惠限制
if(vip.getType() == 1 && discountAmount.compareTo(maximumDeduction) > 0){
@@ -611,7 +619,7 @@
getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
getAppUserVipDetail.setVipId(appUser.getVipId());
TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
- if(data.getChargeNum() > 0){
+ if(null != data && data.getChargeNum() > 0){
data.setChargeNum(data.getChargeNum() - 1);
appUserVipDetailClient.updateAppUserVipDetail(data);
//会员有充电优惠次数,直接将优惠金额加入到充电费用中增加充电时长
@@ -633,68 +641,186 @@
//使用订单id作为逻辑卡号
platformStartCharging.setCard_number(chargingOrder.getId().toString());
platformStartCharging.setAccount_balance(electrovalence);
-
- System.err.println("-------------------远程调起开始充电请求-------------------");
- System.err.println(platformStartCharging.toString());
+
+ log.error(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------");
+ log.error(platformStartCharging.toString());
sendMessageClient.platformStartCharging(platformStartCharging);
//异步线程检测远程启动的应答结果。如果失败,则需要全额退款
- String code = chargingOrder.getCode();
+ Long id = chargingOrder.getId();
//执行5分钟的定时任务检测
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(()->{
- List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData();
- System.err.println("-------------------开始检查调起充电结果-------------------");
- System.err.println(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的时候,硬件会间隔60秒后再次检测,依然未插枪,则不启动充电
- //因这里是间隔5秒执行检测,所以累计次数在30次以上
- if(failure_cause == 5 && (null == counter || counter < 35)){
- counter++;
- counter_map.put(code, counter);
- //启动失败
- preChargeCheck1.setStartupSuccess(3);
- preChargeCheck1.setFailureCause(failure_cause);
- redisService.setCacheObject(key, preChargeCheck1);
- return;
- }
- //清除计时器中的无效数据
- 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);
- //提前结束定时任务
+ if(timingDetection(id)){
scheduler.shutdown();
}
- }, 5, 300, TimeUnit.SECONDS);
+ }, 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(preChargeCheck1.getElectronicLockLock());
+ preChargeCheck1.setInsulationTesting(true);
+ preChargeCheck1.setSecureConnectionDetection(preChargeCheck1.getSecureConnectionDetection());
+ preChargeCheck1.setStartupSuccess(1);
+ redisService.setCacheObject("AQJC_" + chargingOrder.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS);
+ }
+ }
+
+ List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData();
+ log.error(code + ":-------------------开始检查调起充电结果-------------------");
+ log.error(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{
+ log.error(code + ":-------------------未上传开启充电结果-------------------");
+
+ Integer counter = boot_failed_map.get(code);
+ 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;
+ }
+ }
+
+
+ /**
+ * 修改安全检测数据
+ * @param securityDetection
+ */
+ @Override
+ public void securityDetection(SecurityDetection securityDetection){
+ GetChargingGunByCode code = new GetChargingGunByCode();
+ code.setCharging_pile_code(securityDetection.getCharging_pile_code());
+ code.setCharging_gun_code(securityDetection.getCharging_gun_code());
+ TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(code).getData();
+ PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + chargingGun.getId());
+ if(null != preChargeCheck1){
+ preChargeCheck1.setElectronicLockLock(preChargeCheck1.getElectronicLockLock());
+ preChargeCheck1.setInsulationTesting(true);
+ preChargeCheck1.setSecureConnectionDetection(preChargeCheck1.getSecureConnectionDetection());
+ preChargeCheck1.setStartupSuccess(1);
+ redisService.setCacheObject("AQJC_" + chargingGun.getId(), preChargeCheck1, 24L, TimeUnit.HOURS);
+ }
+ }
+
+ /**
+ * 启动充电应发
+ * @param message
+ */
+ @Override
+ public void startChargeSuccessfully(PlatformStartChargingReplyMessage message) {
+ Integer startup_result = message.getStartup_result();
+ Integer failure_cause = message.getFailure_cause();
+ TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, message.getTransaction_serial_number()));
+ if(order.getStatus() != 2){
+ return;
+ }
+ String code = order.getCode();
+ PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + order.getChargingGunId());
+ if(null != preChargeCheck1){
+ preChargeCheck1.setElectronicLockLock(preChargeCheck1.getElectronicLockLock());
+ preChargeCheck1.setInsulationTesting(true);
+ preChargeCheck1.setSecureConnectionDetection(preChargeCheck1.getSecureConnectionDetection());
+ preChargeCheck1.setStartupSuccess(1);
+ redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS);
+ }
+ 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);
+ }
/**
* 启动失败后的退款,取消订单
* @param code
*/
public void refund(String code){
+ log.error(code + ":-------------------充电启动失败,执行退款-------------------");
TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
if(chargingOrder.getStatus() == 2){
Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
@@ -939,6 +1065,9 @@
throw new RuntimeException(failure_cause);
}
+ // 将枪状态重置为空闲
+ chargingGun.setStatus(2);
+ chargingGunClient.updateChargingGunById(chargingGun);
//计算费用,处理退款
endCharge(chargingOrder);
break;
@@ -958,7 +1087,7 @@
TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData();
if(null != appUser1.getVipId()){
- TVip vip = vipClient.getInfo(appUser1.getVipId()).getData();
+ TVip vip = vipClient.getInfo1(appUser1.getVipId()).getData();
Integer doubleIntegration = vip.getDoubleIntegration();
//双倍积分
if(1 == doubleIntegration){
@@ -1040,7 +1169,7 @@
Integer num1 = JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1");
Integer integral = payAmount.multiply(new BigDecimal(num1)).intValue();
if(null != appUser.getVipId()){
- TVip vip = vipClient.getInfo(appUser.getVipId()).getData();
+ TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
Integer doubleIntegration = vip.getDoubleIntegration();
//双倍积分
if(1 == doubleIntegration){
@@ -1198,6 +1327,12 @@
for (ChargingOrderVO chargingOrderVO : list) {
TChargingGun data3 = chargingGunClient.getChargingGunById(chargingOrderVO.getChargingGunId()).getData();
TChargingPile data2 = chargingPileClient.getChargingPileById(chargingOrderVO.getChargingPileId()).getData();
+ if (chargingOrderVO.getSiteId()!=null){
+ List<Integer> integers = new ArrayList<>();
+ integers.add(chargingOrderVO.getSiteId());
+ List<Site> data = siteClient.getSiteByIds(integers).getData();
+ if (!data.isEmpty())chargingOrderVO.setSiteName(data.get(0).getName());
+ }
if (data2!=null && data3!=null){
chargingOrderVO.setTerminalName(data2.getName()+"-"+data3.getName());
@@ -1213,7 +1348,9 @@
// 单个订单累计服务费
BigDecimal serviceMoney1 = new BigDecimal("0");
UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderVO.getCode()).getData();
- chargingOrderVO.setChargingSecond(data5.getTime_remaining()*60L);
+ if (data5!=null){
+ chargingOrderVO.setChargingSecond(data5.getTime_remaining()*60L);
+ }
// 总收入
if (chargingOrderVO.getRefundStatus() !=null && chargingOrderVO.getRefundStatus() == 2){
income = income.add(chargingOrderVO.getPaymentAmount().subtract(chargingOrderVO.getRefundAmount()));
@@ -1762,7 +1899,7 @@
TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData();
if(null != appUser1.getVipId()){
- TVip vip = vipClient.getInfo(appUser1.getVipId()).getData();
+ TVip vip = vipClient.getInfo1(appUser1.getVipId()).getData();
Integer doubleIntegration = vip.getDoubleIntegration();
//双倍积分
if(1 == doubleIntegration){
--
Gitblit v1.7.1