ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java
@@ -62,15 +62,16 @@ @ApiModelProperty(value = "会员开始时间") @TableField("start_time") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime startTime; @ApiModelProperty(value = "会员结束时间") @TableField("end_time") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime endTime; @TableField("create_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createTime; @ApiModelProperty(value = "已赠送的月份") ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java
@@ -5,6 +5,7 @@ import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.chargingPile.api.model.TFaultMessage; import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode; import com.ruoyi.chargingPile.api.vo.SiteNameVO; import com.ruoyi.common.core.domain.R; import org.slf4j.Logger; @@ -45,7 +46,7 @@ } @Override public R<TChargingGun> getChargingGunByCode(String code) { public R<TChargingGun> getChargingGunByCode(GetChargingGunByCode code) { return R.fail("根据枪编号获取充电枪失败:" + throwable.getMessage()); } ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingGunClient.java
@@ -3,6 +3,7 @@ import com.ruoyi.chargingPile.api.factory.ChargingGunFallbackFactory; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TFaultMessage; import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode; import com.ruoyi.chargingPile.api.vo.SiteNameVO; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; @@ -48,8 +49,8 @@ * @param code * @return */ @PostMapping("/t-charging-gun/getChargingGunByCode/{code}") R<TChargingGun> getChargingGunByCode(@PathVariable("code") String code); @PostMapping("/t-charging-gun/getChargingGunByCode") R<TChargingGun> getChargingGunByCode(@RequestBody GetChargingGunByCode code); /** * 编辑充电枪 * @param chargingGun ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/GetChargingGunByCode.java
New file @@ -0,0 +1,13 @@ package com.ruoyi.chargingPile.api.vo; import lombok.Data; /** * @author zhibing.pu * @Date 2024/10/8 16:58 */ @Data public class GetChargingGunByCode { private String charging_pile_code; // 桩编码 private String charging_gun_code; // 抢号 } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java
@@ -9,9 +9,7 @@ import com.ruoyi.order.api.model.TSettlementConfirm; import com.ruoyi.order.api.query.TChargingCountQuery; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import com.ruoyi.order.api.vo.ChargingBillVO; import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate; import com.ruoyi.order.api.vo.SettlementTotalVO; import com.ruoyi.order.api.vo.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; @@ -140,6 +138,16 @@ log.error("购物订单退款回调通知失败:" + throwable.getMessage()); } @Override public void securityDetection(SecurityDetection securityDetection) { log.error("修改安全检测数据失败:" + throwable.getMessage()); } @Override public void startChargeSuccessfully(PlatformStartChargingReplyMessage message) { log.error("远程启动充电应答失败:" + throwable.getMessage()); } }; } } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
@@ -11,12 +11,10 @@ import com.ruoyi.order.api.model.TSettlementConfirm; import com.ruoyi.order.api.query.TChargingCountQuery; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import com.ruoyi.order.api.vo.ChargingBillVO; import com.ruoyi.order.api.vo.SettlementTotalVO; import com.ruoyi.order.api.vo.*; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; @@ -178,4 +176,19 @@ @RequestParam("out_trade_no") String refund_id, @RequestParam("out_trade_no") String tradeState, @RequestParam("out_trade_no") String success_time); /** * 修改安全检测数据 * @param securityDetection */ @PostMapping("/t-shopping-order/securityDetection") void securityDetection(@RequestBody SecurityDetection securityDetection); /** * 远程启动充电应答 * @param message */ @PostMapping("/t-shopping-order/startChargeSuccessfully") void startChargeSuccessfully(PlatformStartChargingReplyMessage message); } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessage.java
New file @@ -0,0 +1,16 @@ package com.ruoyi.order.api.vo; import lombok.Data; /** * @author zhibing.pu * @Date 2024/10/8 17:16 */ @Data public class PlatformStartChargingReplyMessage { private String transaction_serial_number; // 交易流水号 private String charging_pile_code; // 桩编码 private String charging_gun_code; // 抢号 private Integer startup_result; // 启动结果(0:失败,1:成功) private Integer failure_cause; // "失败原因(0:无,1:设备编号不匹配,2:枪已在充电,3:设备故障,4:设备离线,5:未插枪桩在收到启充命令后,检测到未插枪则发送 0x33 报文回复充电失败。若在 60 秒(以收到 0x34 时间开始计算)内检测到枪重新连接,则补送 0x33 成功报文;超时或者离线等其他异常,桩不启充、不补发 0x33 报文)" } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetection.java
New file @@ -0,0 +1,14 @@ package com.ruoyi.order.api.vo; import lombok.Data; @Data public class SecurityDetection { private String transaction_serial_number; // 交易流水号 private String charging_pile_code; // 桩编码 private String charging_gun_code; // 抢号 private Integer secure_connection; // 车枪连接(0=未连接,1=连接) private Integer nsulation_detection; // 绝缘检测(0=安全,1=不安全) private Integer electronic_lock_lock; // 电磁锁状态(0=未锁,1=已锁) } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java
@@ -3,6 +3,7 @@ import cn.hutool.core.img.ImgUtil; import cn.hutool.core.io.FileUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; import com.ruoyi.chargingPile.api.dto.TChargingGunDTO; @@ -11,6 +12,7 @@ import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.chargingPile.api.model.TFaultMessage; import com.ruoyi.chargingPile.api.query.TChargingGunQuery; import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode; import com.ruoyi.chargingPile.api.vo.GunStatusStatisticsVO; import com.ruoyi.chargingPile.api.vo.SiteNameVO; import com.ruoyi.chargingPile.api.vo.TChargingGunVO; @@ -254,11 +256,14 @@ * @param code * @return */ @PostMapping("/getChargingGunByCode/{code}") public R<TChargingGun> getChargingGunByCode(@PathVariable("code") String code){ @PostMapping("/getChargingGunByCode") public R<TChargingGun> getChargingGunByCode(@RequestBody GetChargingGunByCode code){ TChargingPile chargingPile = chargingPileService.getOne(new LambdaQueryWrapper<TChargingPile>().eq(TChargingPile::getCode, code.getCharging_pile_code()).eq(TChargingPile::getDelFlag, 0)); return R.ok(chargingGunService.getOne(Wrappers.lambdaQuery(TChargingGun.class) .eq(TChargingGun::getCode, code) .last("LIMIT 1"))); .eq(TChargingGun::getChargingPileId, chargingPile.getId()) .eq(TChargingGun::getCode, code.getCharging_gun_code()) .eq(TChargingGun::getDelFlag, 0) .last("LIMIT 1"))); } /** * 根据枪编号获取充电枪 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PlatformStartChargingReplyMessageListener.java
@@ -5,6 +5,7 @@ import com.ruoyi.integration.mongodb.service.PlatformStartChargingReplyService; import com.ruoyi.integration.rocket.model.PlatformStartChargingReplyMessage; import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.annotation.MessageModel; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; @@ -12,6 +13,8 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; @Slf4j @Component @@ -26,6 +29,11 @@ @Autowired private PlatformStartChargingReplyService platformStartChargingReplyService; @Resource private ChargingOrderClient chargingOrderClient; @Override protected void handleMessage(PlatformStartChargingReplyMessage message) throws Exception { @@ -36,6 +44,9 @@ BeanUtils.copyProperties(message,platformStartChargingReply); platformStartChargingReplyService.create(platformStartChargingReply); // 业务处理 com.ruoyi.order.api.vo.PlatformStartChargingReplyMessage message1 = new com.ruoyi.order.api.vo.PlatformStartChargingReplyMessage(); BeanUtils.copyProperties(message, message1); chargingOrderClient.startChargeSuccessfully(message1); } @Override ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java
@@ -6,6 +6,7 @@ import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TFaultMessage; import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode; import com.ruoyi.integration.api.model.Online; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService; @@ -83,8 +84,10 @@ UploadRealTimeMonitoringDataQuery query = new UploadRealTimeMonitoringDataQuery(); BeanUtils.copyProperties(uploadRealTimeMonitoringData, query); chargingOrderClient.chargeMonitoring(query); TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(message.getCharging_gun_code()).getData(); GetChargingGunByCode code = new GetChargingGunByCode(); code.setCharging_pile_code(message.getCharging_pile_code()); code.setCharging_gun_code(message.getCharging_gun_code()); TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(code).getData(); if(Objects.nonNull(chargingGun)){ // 存储状态信息 TFaultMessage faultMessage = new TFaultMessage(); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -457,7 +457,29 @@ @RequestParam("attach") String attach) { AjaxResult ajaxResult = chargingOrderService.chargingOrderCallback(1, out_trade_no, transaction_id, attach); } /** * 修改安全检测数据 * @param securityDetection */ @ResponseBody @PostMapping(value = "/securityDetection") public void securityDetection(@RequestBody SecurityDetection securityDetection){ chargingOrderService.securityDetection(securityDetection); } /** * 远程启动充电应答 * @param message */ @ResponseBody @PostMapping(value = "/startChargeSuccessfully") public void startChargeSuccessfully(@RequestBody PlatformStartChargingReplyMessage message){ chargingOrderService.startChargeSuccessfully(message); } /** * 支付宝支付成功后的回调 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
@@ -80,6 +80,20 @@ /** * 安全检测数据 * @param securityDetection */ void securityDetection(SecurityDetection securityDetection); /** * 启动充电应发 * @param message */ void startChargeSuccessfully(PlatformStartChargingReplyMessage message); /** * 充电启动失败后的退款回调处理 * @param out_refund_no * @param refund_id ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -13,6 +13,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; @@ -40,6 +41,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; @@ -196,6 +198,9 @@ //计数器 private Map<String, Integer> counter_map = new HashMap<>(); //计数器 private Map<String, Integer> boot_failed_map = new HashMap<>(); @@ -456,7 +461,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()){ //普通会员折扣使用积分策略上的折扣,且有最高优惠金额 @@ -548,7 +553,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(); @@ -609,7 +614,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){ @@ -621,7 +626,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); //会员有充电优惠次数,直接将优惠金额加入到充电费用中增加充电时长 @@ -649,71 +654,173 @@ sendMessageClient.platformStartCharging(platformStartCharging); //异步线程检测远程启动的应答结果。如果失败,则需要全额退款 String code = chargingOrder.getCode(); Long id = chargingOrder.getId(); //执行5分钟的定时任务检测 ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); scheduler.scheduleAtFixedRate(()->{ //获取安全校验 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); } } 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分钟内还未插枪则取消充电,退回金额。 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); 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(); }else{ log.error("未上传开启充电结果........"); } }, 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(); System.err.println(code + ":-------------------开始检查调起充电结果-------------------"); 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分钟内还未插枪则取消充电,退回金额。 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); } /** * 启动失败后的退款,取消订单 @@ -986,7 +1093,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){ @@ -1068,7 +1175,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){ @@ -1798,7 +1905,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){ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java
@@ -278,7 +278,7 @@ if(null != num1 && 0 < num1){ TAppUser appUser = appUserClient.getUserById(userid).getData(); 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){ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java
@@ -53,7 +53,7 @@ for (TVipOrder tVipOrder : list) { tVipOrder.setUid(tVipOrder.getId().toString()); tVipOrder.setUserUid(tVipOrder.getAppUserId().toString()); TVip data = vipClient.getInfo(tVipOrder.getVipId()).getData(); TVip data = vipClient.getInfo1(tVipOrder.getVipId()).getData(); if (data!=null){ tVipOrder.setName(data.getName()); } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
@@ -219,7 +219,7 @@ if (coupon.getInventoryQuantity() != -1 && count >= coupon.getInventoryQuantity()) { return AjaxResult.error("当前用户已到达兑换"+coupon+"次"); }else { coupon.setInventoryQuantity(coupon.getInventoryQuantity()-exchangeDto.getNum()); coupon.setInventoryQuantity(coupon.getInventoryQuantity()-1); }