From a9de601f87f633f71b6e531da0b61da8665d6383 Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期四, 10 十月 2024 09:04:24 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 89 +++++++++++++- ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/util/TaskUtil.java | 30 +++++ ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java | 4 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessageVO.java | 2 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java | 9 + ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java | 3 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetectionVO.java | 2 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java | 26 ++++ ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java | 9 + ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java | 6 + ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java | 6 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java | 17 +- ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStopChargingReplyVO.java | 19 +++ ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java | 31 ++++- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java | 1 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java | 2 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java | 13 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java | 5 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java | 21 +++ ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteInfoVO.java | 2 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PlatformStartChargingReplyMessageListener.java | 3 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java | 25 +++ 22 files changed, 288 insertions(+), 37 deletions(-) diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java index 07c35bf..54077e6 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java @@ -66,17 +66,20 @@ @TableField("start_time") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime startTime; @ApiModelProperty(value = "会员结束时间") @TableField("end_time") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime endTime; @TableField("create_time") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @ApiModelProperty(value = "已赠送的月份") diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java index cbb357e..2948838 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java @@ -56,6 +56,12 @@ public R<TChargingPile> getChargingPileById(Integer id) { return R.fail(throwable.getMessage()); } + + @Override + public void updateChargingPileStatus(String code, Integer status) { + log.error("修改充电桩状态失败:" + throwable.getMessage()); + } + }; } } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java index f61dd25..9b19c6f 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java @@ -49,4 +49,13 @@ @PostMapping("/t-charging-pile/getChargingPileById/{id}") R<TChargingPile> getChargingPileById(@PathVariable("id") Integer id); + + + /** + * 修改充电桩状态 + * @param code + * @param status + */ + @PostMapping("/t-charging-pile/updateChargingPileStatus") + void updateChargingPileStatus(@RequestParam("code") String code, @RequestParam("status") Integer status); } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteInfoVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteInfoVO.java index c3d2f73..485fae2 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteInfoVO.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteInfoVO.java @@ -14,6 +14,8 @@ private String name; @ApiModelProperty(value = "桩id") private Integer chargingPileId; + @ApiModelProperty(value = "站点id") + private Integer siteId; @ApiModelProperty(value = "桩编号") private String number; @ApiModelProperty(value = "充电枪id") diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java index dab2854..0b19835 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java @@ -16,4 +16,8 @@ * 充电枪编号 */ private String charging_gun_code; + /** + * 充电结束时间 + */ + private String end_time; } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java index 15f974f..56baedd 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java @@ -140,14 +140,19 @@ } @Override - public void securityDetection(SecurityDetection securityDetection) { + public void securityDetection(SecurityDetectionVO securityDetection) { log.error("修改安全检测数据失败:" + throwable.getMessage()); } @Override - public void startChargeSuccessfully(PlatformStartChargingReplyMessage message) { + public void startChargeSuccessfully(PlatformStartChargingReplyMessageVO message) { log.error("远程启动充电应答失败:" + throwable.getMessage()); } + + @Override + public void terminateSuccessfulResponse(PlatformStopChargingReplyVO platformStopChargingReply) { + log.error("停止充电应答处理失败:" + throwable.getMessage()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java index 02f977b..ae33132 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java @@ -177,13 +177,12 @@ @RequestParam("out_trade_no") String tradeState, @RequestParam("out_trade_no") String success_time); - //todo 待监听完成后调用此方法 /** * 修改安全检测数据 * @param securityDetection */ @PostMapping("/t-charging-order/securityDetection") - void securityDetection(@RequestBody SecurityDetection securityDetection); + void securityDetection(@RequestBody SecurityDetectionVO securityDetection); /** @@ -191,5 +190,13 @@ * @param message */ @PostMapping("/t-charging-order/startChargeSuccessfully") - void startChargeSuccessfully(PlatformStartChargingReplyMessage message); + void startChargeSuccessfully(PlatformStartChargingReplyMessageVO message); + + + /** + * 停止充电应答处理 + * @param platformStopChargingReply + */ + @PostMapping("/t-charging-order/terminateSuccessfulResponse") + void terminateSuccessfulResponse(@RequestBody PlatformStopChargingReplyVO platformStopChargingReply); } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessage.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessageVO.java similarity index 93% rename from ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessage.java rename to ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessageVO.java index e074bdd..5bb4dbf 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessage.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessageVO.java @@ -7,7 +7,7 @@ * @Date 2024/10/8 17:16 */ @Data -public class PlatformStartChargingReplyMessage { +public class PlatformStartChargingReplyMessageVO { private String transaction_serial_number; // 交易流水号 private String charging_pile_code; // 桩编码 private String charging_gun_code; // 抢号 diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStopChargingReplyVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStopChargingReplyVO.java new file mode 100644 index 0000000..7b69a0b --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStopChargingReplyVO.java @@ -0,0 +1,19 @@ +package com.ruoyi.order.api.vo; + +import lombok.Data; + +/** + * 远程停机命令回复 + **/ + +@Data +public class PlatformStopChargingReplyVO { + private String charging_pile_code; // 桩编码 + private String charging_gun_code; // 抢号 + private Integer stop_result; // 停止结果(0:失败,1:成功) + private Integer failure_cause; // 失败原因(0:无,1:设备编号不匹配,2:枪未处于充电状态,3:其他) + + +} + + diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetection.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetectionVO.java similarity index 92% rename from ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetection.java rename to ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetectionVO.java index 0f24456..9279fbf 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetection.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetectionVO.java @@ -3,7 +3,7 @@ import lombok.Data; @Data -public class SecurityDetection { +public class SecurityDetectionVO { private String transaction_serial_number; // 交易流水号 private String charging_pile_code; // 桩编码 private String charging_gun_code; // 抢号 diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java index f634a7b..88236a3 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java @@ -109,6 +109,7 @@ TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingGun.getChargingPileId()).getData(); SiteInfoVO data = chargingPileClient.getSiteInfoByNumber1(chargingPile.getCode().toString()).getData(); data.setChargingGunId(id); + data.setSiteId(chargingGun.getId()); data.setChargeMode(chargingGun.getChargeMode()); List<TAppUserCar> cars = appUserCarService.list(new QueryWrapper<TAppUserCar>() .eq("app_user_id",tokenService.getLoginUserApplet().getUserId()) diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java index 9293ee1..2d16d90 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java @@ -964,7 +964,7 @@ boolean doubleVip = false; if (one!=null){ TVip tVip = JSONObject.parseObject(one.getVipJson(), TVip.class); - if (tVip.getDoubleIntegration()==1){ + if (tVip.getDoubleIntegration()!=null&&tVip.getDoubleIntegration()==1){ doubleVip = true; } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java index 11b93a1..5654d26 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java @@ -25,6 +25,7 @@ import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.OperatorType; +import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.other.api.domain.TVip; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -38,7 +39,9 @@ import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * <p> @@ -55,12 +58,9 @@ private final TChargingPileService chargingPileService; private final TChargingGunService chargingGunService; - - @Resource - private TAccountingStrategyService accountingStrategyService; - - @Resource - private TAccountingStrategyDetailService accountingStrategyDetailService; + + @Resource + private RedisService redisService; @Autowired @@ -205,6 +205,23 @@ TChargingPile chargingPile = chargingPileService.getById(id); return R.ok(chargingPile); } - + + + /** + * 更新充电桩状态 + * @param code + * @param status + */ + @ResponseBody + @PostMapping("/updateChargingPileStatus") + public void updateChargingPileStatus(@RequestParam("code") String code, @RequestParam("status") Integer status){ + TChargingPile chargingPile = chargingPileService.getOne(new LambdaQueryWrapper<TChargingPile>() + .eq(TChargingPile::getCode, code).eq(TChargingPile::getDelFlag, 0)); + if(null != chargingPile){ + chargingPile.setStatus(0 == status ? 1 : 3); + chargingPileService.updateById(chargingPile); + redisService.getCacheMap("charging_pile_online").put(code, System.currentTimeMillis()); + } + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java index c25a254..298068c 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java @@ -106,5 +106,11 @@ * @return */ PageInfo<ChargingGunMonitoring> getChargingGunMonitoring(GetChargingGunMonitoring query); + + + /** + * 定时任务修改充电桩状态 + */ + void updateStatus(); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java index 96f1155..e63b804 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java @@ -27,6 +27,7 @@ import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.integration.api.feignClient.IotInterfaceClient; import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; @@ -100,6 +101,9 @@ @Resource private IotInterfaceClient iotInterfaceClient; + + @Resource + private RedisService redisService; @@ -544,4 +548,26 @@ } return pageInfo.setRecords(chargingGunMonitoring); } + + + /** + * 定时任务修改充电桩状态 + */ + @Override + public void updateStatus() { + List<TChargingPile> list = this.list(new LambdaQueryWrapper<TChargingPile>().eq(TChargingPile::getDelFlag, 0)); + List<TChargingPile> datas = new ArrayList(); + Map<String, Object> charging_pile_online = redisService.getCacheMap("charging_pile_online"); + for (TChargingPile chargingPile : list) { + Long time = (Long) charging_pile_online.get(chargingPile.getCode()); + if(null != time && System.currentTimeMillis() - time > 60000){ + chargingPile.setStatus(2); + datas.add(chargingPile); + } + } + + if(datas.size() > 0){ + this.updateBatchById(datas); + } + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/util/TaskUtil.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/util/TaskUtil.java new file mode 100644 index 0000000..f544069 --- /dev/null +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/util/TaskUtil.java @@ -0,0 +1,30 @@ +package com.ruoyi.chargingPile.util; + + +import com.ruoyi.chargingPile.service.TChargingPileService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + + +/** + * 定时任务工具类 + */ +@Component +public class TaskUtil { + + @Resource + private TChargingPileService chargingPileService;; + + + + + /** + * 每隔一分钟去处理的定时任务 + */ + @Scheduled(fixedRate = 1000 * 60) + public void taskMinute(){ + + } +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java index 08535ed..d44e36f 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java @@ -10,6 +10,8 @@ import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; @Service @@ -39,8 +41,9 @@ */ @Override public PlatformStopChargingReply getPlatformStopChargingReply(GetPlatformStopChargingReply query) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List<PlatformStopChargingReply> platformStopChargingReplies = mongoTemplate.find(new Query().addCriteria(Criteria.where("charging_pile_code").is(query.getCharging_pile_code()) - .and("charging_gun_code").is(query.getCharging_gun_code())), PlatformStopChargingReply.class); + .and("charging_gun_code").is(query.getCharging_gun_code()).and("create_time").lte(sdf.format(new Date())).and("create_time").gte(query.getEnd_time())), PlatformStopChargingReply.class); return platformStopChargingReplies.size() > 0 ? platformStopChargingReplies.get(0) : null; } } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PlatformStartChargingReplyMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PlatformStartChargingReplyMessageListener.java index 5aded73..a22254f 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PlatformStartChargingReplyMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PlatformStartChargingReplyMessageListener.java @@ -6,6 +6,7 @@ import com.ruoyi.integration.rocket.model.PlatformStartChargingReplyMessage; import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; import com.ruoyi.order.api.feignClient.ChargingOrderClient; +import com.ruoyi.order.api.vo.PlatformStartChargingReplyMessageVO; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.annotation.MessageModel; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; @@ -44,7 +45,7 @@ BeanUtils.copyProperties(message,platformStartChargingReply); platformStartChargingReplyService.create(platformStartChargingReply); // 业务处理 - com.ruoyi.order.api.vo.PlatformStartChargingReplyMessage message1 = new com.ruoyi.order.api.vo.PlatformStartChargingReplyMessage(); + PlatformStartChargingReplyMessageVO message1 = new PlatformStartChargingReplyMessageVO(); BeanUtils.copyProperties(message, message1); chargingOrderClient.startChargeSuccessfully(message1); } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java index 521a8e3..6cebbaf 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSON; import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient; import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient; +import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; import com.ruoyi.chargingPile.api.feignClient.FaultMessageClient; import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; import com.ruoyi.chargingPile.api.model.TChargingGun; @@ -18,6 +19,9 @@ import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; +import com.ruoyi.order.api.vo.PlatformStartChargingReplyMessageVO; +import com.ruoyi.order.api.vo.PlatformStopChargingReplyVO; +import com.ruoyi.order.api.vo.SecurityDetectionVO; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.annotation.MessageModel; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; @@ -112,6 +116,14 @@ private QrCodeDeliveryReplyService qrCodeDeliveryReplyService; @Autowired private SecurityDetectionService securityDetectionService; + + @Resource + private ChargingPileClient chargingPileClient; + + + + + @StreamListener("input") @Override protected void handleMessage(ChargingMessage message) throws Exception { @@ -135,6 +147,8 @@ Ping ping = new Ping(); BeanUtils.copyProperties(pingMessage,ping); pingService.create(ping); + + chargingPileClient.updateChargingPileStatus(pingMessage.getCharging_pile_code(), pingMessage.getCharging_gun_status()); break; case SendTagConstant.END_CHARGE: EndChargeMessage endChargeMessage = message.getEndChargeMessage(); @@ -316,7 +330,7 @@ BeanUtils.copyProperties(platformStartChargingReplyMessage,platformStartChargingReply); platformStartChargingReplyService.create(platformStartChargingReply); // 业务处理 - com.ruoyi.order.api.vo.PlatformStartChargingReplyMessage message1 = new com.ruoyi.order.api.vo.PlatformStartChargingReplyMessage(); + PlatformStartChargingReplyMessageVO message1 = new com.ruoyi.order.api.vo.PlatformStartChargingReplyMessageVO(); BeanUtils.copyProperties(platformStartChargingReplyMessage, message1); chargingOrderClient.startChargeSuccessfully(message1); break; @@ -327,6 +341,9 @@ PlatformStopChargingReply platformStopChargingReply = new PlatformStopChargingReply(); BeanUtils.copyProperties(platformStopChargingReplyMessage,platformStopChargingReply); platformStopChargingReplyService.create(platformStopChargingReply); + PlatformStopChargingReplyVO platformStopChargingReply1 = new PlatformStopChargingReplyVO(); + BeanUtils.copyProperties(platformStopChargingReply, platformStopChargingReply1); + chargingOrderClient.terminateSuccessfulResponse(platformStopChargingReply1); break; case SendTagConstant.TRANSACTION_RECORD: TransactionRecordMessage transactionRecordMessage = message.getTransactionRecordMessage(); @@ -427,7 +444,7 @@ SecurityDetection securityDetection = new SecurityDetection(); BeanUtils.copyProperties(securityDetectionMessage,securityDetection); securityDetectionService.create(securityDetection); - com.ruoyi.order.api.vo.SecurityDetection securityDetection1 = new com.ruoyi.order.api.vo.SecurityDetection(); + SecurityDetectionVO securityDetection1 = new SecurityDetectionVO(); BeanUtils.copyProperties(securityDetection, securityDetection1); chargingOrderClient.securityDetection(securityDetection1); break; diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java index 21535a0..dc7ee0a 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java @@ -53,6 +53,7 @@ import com.ruoyi.order.dto.OrderEvaluateVo; import com.ruoyi.order.dto.*; import com.ruoyi.order.service.*; +import com.ruoyi.order.service.impl.TChargingOrderServiceImpl; import com.ruoyi.order.util.PreviousSixMonths; import com.ruoyi.payment.api.feignClient.AliPaymentClient; import com.ruoyi.payment.api.feignClient.WxPaymentClient; @@ -63,6 +64,8 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.models.auth.In; import jdk.nashorn.internal.runtime.ListAdapter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import io.swagger.annotations.ApiOperation; @@ -94,6 +97,8 @@ @RestController @RequestMapping("/t-charging-order") public class TChargingOrderController { + + private Logger log = LoggerFactory.getLogger(TChargingOrderController.class); @Resource private TChargingOrderService chargingOrderService; @@ -465,7 +470,7 @@ */ @ResponseBody @PostMapping(value = "/securityDetection") - public void securityDetection(@RequestBody SecurityDetection securityDetection){ + public void securityDetection(@RequestBody SecurityDetectionVO securityDetection){ chargingOrderService.securityDetection(securityDetection); } @@ -475,8 +480,8 @@ */ @ResponseBody @PostMapping(value = "/startChargeSuccessfully") - public void startChargeSuccessfully(@RequestBody PlatformStartChargingReplyMessage message){ - System.err.println("远程启动应答:" + message); + public void startChargeSuccessfully(@RequestBody PlatformStartChargingReplyMessageVO message){ + log.error("-------------------远程启动充电请求应答-------------------:" + message); chargingOrderService.startChargeSuccessfully(message); } @@ -556,6 +561,20 @@ public AjaxResult stopCharging(@PathVariable String id) { return chargingOrderService.stopCharging(id); } + + + /** + * 停止充电应答处理逻辑 + * @param platformStopChargingReply + */ + @PostMapping("/terminateSuccessfulResponse") + public void terminateSuccessfulResponse(@RequestBody PlatformStopChargingReplyVO platformStopChargingReply){ + log.error("-------------------远程停止充电请求应答-------------------:" + platformStopChargingReply); + chargingOrderService.terminateSuccessfulResponse(platformStopChargingReply); + } + + + @ResponseBody @GetMapping(value = "/six/charge") diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java index 790dc57..d096708 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java @@ -17,10 +17,6 @@ import com.ruoyi.order.api.vo.*; import com.ruoyi.order.dto.*; import com.ruoyi.order.vo.ChargingOrderListInfoVO; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; - -import java.math.BigDecimal; import java.time.LocalDate; import java.util.List; import java.util.Map; @@ -83,14 +79,14 @@ * 安全检测数据 * @param securityDetection */ - void securityDetection(SecurityDetection securityDetection); + void securityDetection(SecurityDetectionVO securityDetection); /** * 启动充电应发 * @param message */ - void startChargeSuccessfully(PlatformStartChargingReplyMessage message); + void startChargeSuccessfully(PlatformStartChargingReplyMessageVO message); /** @@ -119,6 +115,15 @@ * @return */ AjaxResult stopCharging(String id); + + + /** + * 停止充电应答结果处理 + * @param platformStopChargingReply + */ + void terminateSuccessfulResponse(PlatformStopChargingReplyVO platformStopChargingReply); + + TCharingOrderVO chargingOrder(ChargingOrderQuery dto); 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 a4206d6..f479f12 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 @@ -38,7 +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.api.vo.PlatformStopChargingReplyVO; import com.ruoyi.order.dto.*; import com.ruoyi.order.mapper.TChargingOrderMapper; import com.ruoyi.order.mapper.TSettlementConfirmMapper; @@ -627,6 +627,9 @@ } } } + + electrovalence = electrovalence.setScale(2, RoundingMode.HALF_EVEN); + discountAmount = discountAmount.setScale(2, RoundingMode.HALF_EVEN); chargingOrder.setChargeAmount(electrovalence); chargingOrder.setVipDiscountAmount(discountAmount); this.updateById(chargingOrder); @@ -762,7 +765,7 @@ * @param securityDetection */ @Override - public void securityDetection(SecurityDetection securityDetection){ + public void securityDetection(SecurityDetectionVO securityDetection){ GetChargingGunByCode code = new GetChargingGunByCode(); code.setCharging_pile_code(securityDetection.getCharging_pile_code()); code.setCharging_gun_code(securityDetection.getCharging_gun_code()); @@ -782,7 +785,7 @@ * @param message */ @Override - public void startChargeSuccessfully(PlatformStartChargingReplyMessage message) { + public void startChargeSuccessfully(PlatformStartChargingReplyMessageVO 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())); @@ -955,9 +958,13 @@ public AjaxResult stopCharging(String id) { TChargingOrder chargingOrder = this.getById(id); Integer status = chargingOrder.getStatus(); + if(status != 3){ + return AjaxResult.error("还未开始充电"); + } if(status == 4 || status == 5){ return AjaxResult.error("不能重复操作"); } + chargingOrder.setEndTime(LocalDateTime.now()); chargingOrder.setStatus(4); chargingOrder.setEndMode(1); this.updateById(chargingOrder); @@ -1018,7 +1025,7 @@ } } } - + String code1 = chargingOrder.getCode(); //异步线程处理停机 ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1); @@ -1030,12 +1037,17 @@ platformStopCharging.setCharging_pile_code(chargingPile.getCode()); platformStopCharging.setCharging_gun_code(chargingGun.getCode()); sendMessageClient.platformStopCharging(platformStopCharging); + log.error(code1 + ":-------------------远程停止充电请求-------------------"); + log.error(platformStopCharging.toString()); //开始查询停机应答,成功后开始计费费用 for (int i = 0; i < 60; i++) { GetPlatformStopChargingReply query = new GetPlatformStopChargingReply(); query.setCharging_gun_code(chargingGun.getCode()); query.setCharging_pile_code(chargingPile.getCode()); + query.setEnd_time(chargingOrder.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); PlatformStopChargingReply reply = platformStopChargingReplyClient.getPlatformStopChargingReply(query).getData(); + log.error(code1 + ":-------------------查询远程停止充电应答-------------------"); + log.error(reply.toString()); if(null == reply){ try { Thread.sleep(1000); @@ -1044,7 +1056,12 @@ } continue; } - + + TChargingOrder chargingOrder1 = this.getById(id); + if(chargingOrder1.getStatus() != 3){ + break; + } + if(0 == reply.getStop_result()){ String failure_cause = ""; switch (reply.getFailure_cause()){ @@ -1061,8 +1078,13 @@ failure_cause = "其他"; break; } - log.error("停机失败:订单号:{},失败原因:{}", chargingOrder.getCode(), failure_cause); - throw new RuntimeException(failure_cause); + log.error(code1 + ":停机失败:订单号:{},失败原因:{}", chargingOrder.getCode(), failure_cause); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + continue; } // 将枪状态重置为空闲 @@ -1070,6 +1092,7 @@ chargingGunClient.updateChargingGunById(chargingGun); //计算费用,处理退款 endCharge(chargingOrder); + log.error(code1 + ":-------------------远程停止充电请求成功-------------------"); break; } }); @@ -1126,8 +1149,56 @@ return AjaxResult.success(); } - - + + + + /** + * 停止充电应答结果处理 + * @param platformStopChargingReply + */ + @Override + public void terminateSuccessfulResponse(PlatformStopChargingReplyVO platformStopChargingReply){ + GetChargingGunByCode code = new GetChargingGunByCode(); + code.setCharging_gun_code(platformStopChargingReply.getCharging_gun_code()); + code.setCharging_pile_code(platformStopChargingReply.getCharging_pile_code()); + TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(code).getData(); + TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, chargingGun.getId()) + .orderByDesc(TChargingOrder::getEndTime).eq(TChargingOrder::getRechargePaymentStatus, 2).last(" limit 0, 1")); + if(null != order && order.getStatus() != 3){ + return; + } + String code1 = order.getCode(); + if(0 == platformStopChargingReply.getStop_result()){ + String failure_cause = ""; + switch (platformStopChargingReply.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 + ":停机失败:订单号:{},失败原因:{}", order.getCode(), failure_cause); + return; + } + + // 将枪状态重置为空闲 + chargingGun.setStatus(2); + chargingGunClient.updateChargingGunById(chargingGun); + //计算费用,处理退款 + endCharge(order); + } + + + + + /** * 手动结束后的费用计算和退款逻辑 */ -- Gitblit v1.7.1