ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java
@@ -58,7 +58,7 @@ } @Override public void updateChargingPileStatus(String code, Integer status) { public void updateChargingPileStatus(String pile_code, String gun_code, Integer status) { log.error("修改充电桩状态失败:" + throwable.getMessage()); } ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java
@@ -57,5 +57,5 @@ * @param status */ @PostMapping("/t-charging-pile/updateChargingPileStatus") void updateChargingPileStatus(@RequestParam("code") String code, @RequestParam("status") Integer status); void updateChargingPileStatus(@RequestParam("pile_code") String pile_code, @RequestParam("gun_code") String gun_code, @RequestParam("status") Integer status); } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java
@@ -158,6 +158,11 @@ public void endChargeBillingCharge(TransactionRecordMessageVO vo) { log.error("停止充电返回账单后计算费用处理失败:" + throwable.getMessage()); } @Override public R<List<TChargingOrder>> getChargingOrder(TChargingOrder order) { return R.fail("获取充电订单数据失败:" + throwable.getMessage()); } }; } } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
@@ -206,4 +206,12 @@ */ @PostMapping("/t-charging-order/endChargeBillingCharge") void endChargeBillingCharge(@RequestBody TransactionRecordMessageVO vo); /** * 获取充电订单数据 * @param order * @return */ @PostMapping("/t-charging-order/getChargingOrder") R<List<TChargingOrder>> getChargingOrder(@RequestBody TChargingOrderVo order); } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TChargingOrderVo.java
New file @@ -0,0 +1,15 @@ package com.ruoyi.order.api.vo; import com.ruoyi.order.api.model.TChargingOrder; import lombok.Data; import java.util.List; /** * @author zhibing.pu * @Date 2024/10/29 13:35 */ @Data public class TChargingOrderVo extends TChargingOrder { private List<Integer> statusList; } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -27,6 +27,9 @@ import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.OperatorType; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.vo.TChargingOrderVo; import com.ruoyi.other.api.domain.TVip; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -41,9 +44,8 @@ import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; import java.util.stream.Collectors; /** * <p> @@ -66,6 +68,9 @@ @Resource private TFaultMessageService faultMessageService; @Resource private ChargingOrderClient chargingOrderClient; @Autowired @@ -214,69 +219,94 @@ /** * 更新充电桩状态 * @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){ //充电桩正常,返回异常,处理充电桩状态和添加故障记录 if(chargingPile.getStatus() == 1 && 1 == status){ List<TFaultMessage> faultMessages = faultMessageService.list(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingPileId, chargingPile.getId()) .eq(TFaultMessage::getStatus, 2).eq(TFaultMessage::getDelFlag, 0).isNull(TFaultMessage::getEndTime)); if(faultMessages.isEmpty()){ TFaultMessage faultMessage = new TFaultMessage(); faultMessage.setSiteId(chargingPile.getSiteId()); faultMessage.setChargingPileId(chargingPile.getId()); faultMessage.setStatus(2); faultMessage.setDownTime(LocalDateTime.now()); faultMessage.setCreateTime(LocalDateTime.now()); faultMessage.setDelFlag(false); faultMessage.setContent("设备故障"); faultMessageService.save(faultMessage); public void updateChargingPileStatus(@RequestParam("pile_code") String pile_code, @RequestParam("gun_code") String gun_code, @RequestParam("status") Integer status){ Map<String, Object> charging_pile_online = redisService.getCacheMap("charging_gun_online"); Long time = (Long) charging_pile_online.get(pile_code + gun_code); //小于30秒才处理数据,防止频繁查询数据 if(null != time || (System.currentTimeMillis() - time) < 30000){ return; } TChargingGun tChargingGun = chargingGunService.getOne(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getFullNumber, (pile_code + gun_code)).eq(TChargingGun::getDelFlag, 0)); if(null != tChargingGun){ TChargingPile chargingPile = chargingPileService.getById(tChargingGun.getChargingPileId()); //枪处于离线或者故障,返回状态为正常,则修改其状态 if(0 == status && tChargingGun.getStatus() != 2){ TChargingGun tChargingGun1 = new TChargingGun(); tChargingGun1.setId(tChargingGun.getId()); tChargingGun1.setStatus(2); chargingGunService.updateById(tChargingGun1); if(chargingPile.getStatus() != 1){ TChargingPile chargingPile1 = new TChargingPile(); chargingPile1.setId(chargingPile.getId()); chargingPile1.setStatus(3); chargingPile1.setStatus(1); chargingPileService.updateById(chargingPile1); List<TChargingGun> list1 = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPile.getId())); for (TChargingGun chargingGun : list1) { TChargingGun chargingGun1 = new TChargingGun(); chargingGun1.setId(chargingGun.getId()); chargingGun1.setStatus(7); chargingGunService.updateById(chargingGun1); } } } if(chargingPile.getStatus() != 1 && 0 == status){ List<TFaultMessage> list = faultMessageService.list(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingPileId, chargingPile.getId()) List<TFaultMessage> list = faultMessageService.list(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingGunId, tChargingGun.getId()) .isNull(TFaultMessage::getEndTime)); if(!list.isEmpty()){ list.forEach(s->s.setEndTime(LocalDateTime.now())); faultMessageService.updateBatchById(list); } TChargingPile chargingPile1 = new TChargingPile(); chargingPile1.setId(chargingPile.getId()); chargingPile1.setStatus(1); chargingPileService.updateById(chargingPile1); List<TChargingGun> list1 = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPile.getId())); for (TChargingGun chargingGun : list1) { TChargingGun chargingGun1 = new TChargingGun(); chargingGun1.setId(chargingGun.getId()); chargingGun1.setStatus(2); chargingGunService.updateById(chargingGun1); } } if(0 == status){ Map<String, Object> charging_pile_online = redisService.getCacheMap("charging_pile_online"); charging_pile_online.put(code, System.currentTimeMillis()); redisService.setCacheMap("charging_pile_online", charging_pile_online); //枪处于正常,返回状态为故障,则修改其状态 if(1 == status && tChargingGun.getStatus() != 1 && tChargingGun.getStatus() != 7){ TChargingGun tChargingGun1 = new TChargingGun(); tChargingGun1.setId(tChargingGun.getId()); tChargingGun1.setStatus(7); chargingGunService.updateById(tChargingGun1); //桩处于正常,桩所属的枪都处于非正常,修改桩状态为异常 List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPile.getId()).eq(TChargingGun::getDelFlag, 0)); int size = list.stream().filter(s -> s.getStatus() == 1 || s.getStatus() == 7).collect(Collectors.toList()).size(); if(chargingPile.getStatus() == 1 && list.size() == size){ TChargingPile chargingPile1 = new TChargingPile(); chargingPile1.setId(chargingPile.getId()); chargingPile1.setStatus(3); chargingPileService.updateById(chargingPile1); } TFaultMessage faultMessage = new TFaultMessage(); faultMessage.setSiteId(chargingPile.getSiteId()); faultMessage.setChargingPileId(chargingPile.getId()); faultMessage.setChargingGunId(tChargingGun.getId()); faultMessage.setStatus(2); faultMessage.setDownTime(LocalDateTime.now()); faultMessage.setCreateTime(LocalDateTime.now()); faultMessage.setDelFlag(false); faultMessage.setContent("设备故障"); faultMessageService.save(faultMessage); } if(1 != status){ charging_pile_online.put(tChargingGun.getFullNumber(), System.currentTimeMillis()); redisService.setCacheMap("charging_gun_online", charging_pile_online); } if(2 == status){ TChargingOrderVo order = new TChargingOrderVo(); order.setChargingPileId(tChargingGun.getChargingPileId()); order.setChargingGunId(tChargingGun.getId()); order.setStatusList(Arrays.asList(1, 2, 3, 4, 5)); List<TChargingOrder> orders = chargingOrderClient.getChargingOrder(order).getData(); if(orders.size() > 0){ TChargingOrder chargingOrder = orders.get(0); TChargingGun tChargingGun1 = new TChargingGun(); if(Arrays.asList(1, 2).contains(chargingOrder.getStatus())){ tChargingGun1.setStatus(3); } if(Arrays.asList(3).contains(chargingOrder.getStatus())){ tChargingGun1.setStatus(4); } if(Arrays.asList(4).contains(chargingOrder.getStatus()) && chargingOrder.getEndMode() == 2){ tChargingGun1.setStatus(5); } tChargingGun1.setId(tChargingGun.getId()); chargingGunService.updateById(tChargingGun1); } } } } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -585,30 +585,39 @@ */ @Override public void updateStatus() { List<TChargingPile> list = this.list(new LambdaQueryWrapper<TChargingPile>().eq(TChargingPile::getDelFlag, 0)); Map<String, Object> charging_pile_online = redisService.getCacheMap("charging_pile_online"); for (TChargingPile chargingPile : list) { Long time = (Long) charging_pile_online.get(chargingPile.getCode()); Map<String, Object> charging_gun_online = redisService.getCacheMap("charging_gun_online"); Set<String> keySet = charging_gun_online.keySet(); List<TChargingGun> list = new ArrayList<>(); if(keySet.size() > 0){ list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getDelFlag, 0).in(TChargingGun::getFullNumber, keySet)); } for (TChargingGun chargingGun : list) { Long time = (Long) charging_gun_online.get(chargingGun.getFullNumber()); if(null != time && System.currentTimeMillis() - time > 60000){ TChargingPile chargingPile1 = new TChargingPile(); chargingPile1.setId(chargingPile.getId()); chargingPile1.setStatus(2); this.updateById(chargingPile1); List<TChargingGun> list1 = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPile.getId())); for (TChargingGun chargingGun : list1) { TChargingGun chargingGun1 = new TChargingGun(); chargingGun1.setId(chargingGun.getId()); chargingGun1.setStatus(1); chargingGunService.updateById(chargingGun1); TChargingGun chargingGun1 = new TChargingGun(); chargingGun1.setId(chargingGun.getId()); chargingGun1.setStatus(1); chargingGunService.updateById(chargingGun1); //桩处于正常,桩所属的枪都处于非正常,修改桩状态为异常 TChargingPile chargingPile = this.getById(chargingGun1.getChargingPileId()); List<TChargingGun> list1 = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPile.getId()).eq(TChargingGun::getDelFlag, 0)); int size = list1.stream().filter(s -> s.getStatus() == 1 || s.getStatus() == 7).collect(Collectors.toList()).size(); if(chargingPile.getStatus() == 1 && list1.size() == size){ TChargingPile chargingPile1 = new TChargingPile(); chargingPile1.setId(chargingGun.getChargingPileId()); chargingPile1.setStatus(2); this.updateById(chargingPile1); } //添加记录 TFaultMessage faultMessage = faultMessageService.getOne(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingPileId, chargingPile.getId()) .eq(TFaultMessage::getStatus, 1).eq(TFaultMessage::getDelFlag, 0).isNull(TFaultMessage::getEndTime)); TFaultMessage faultMessage = faultMessageService.getOne(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingPileId, chargingGun.getChargingPileId()) .eq(TFaultMessage::getChargingGunId, chargingGun.getId()).eq(TFaultMessage::getStatus, 1).eq(TFaultMessage::getDelFlag, 0).isNull(TFaultMessage::getEndTime)); if(null == faultMessage){ faultMessage = new TFaultMessage(); faultMessage.setSiteId(chargingPile.getSiteId()); faultMessage.setChargingPileId(chargingPile.getId()); faultMessage.setSiteId(chargingGun.getSiteId()); faultMessage.setChargingPileId(chargingGun.getChargingPileId()); faultMessage.setChargingGunId(chargingGun.getId()); faultMessage.setStatus(1); faultMessage.setDownTime(LocalDateTime.now()); faultMessage.setCreateTime(LocalDateTime.now()); ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java
@@ -149,7 +149,7 @@ BeanUtils.copyProperties(pingMessage,ping); pingService.create(ping); chargingPileClient.updateChargingPileStatus(pingMessage.getCharging_pile_code(), pingMessage.getCharging_gun_status()); chargingPileClient.updateChargingPileStatus(pingMessage.getCharging_pile_code(), pingMessage.getCharging_gun_code(), pingMessage.getCharging_gun_status()); break; case SendTagConstant.END_CHARGE: EndChargeMessage endChargeMessage = message.getEndChargeMessage(); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -1783,4 +1783,16 @@ EndOfChargePageInfo endOfChargePageInfo = chargingOrderService.getEndOfChargePageInfo(id); return AjaxResult.success(endOfChargePageInfo); } /** * 获取订单数据 * @param order * @return */ @PostMapping("/getChargingOrder") public R<List<TChargingOrder>> getChargingOrder(@RequestBody TChargingOrderVo order){ List<TChargingOrder> chargingOrder = chargingOrderService.getChargingOrder(order); return R.ok(chargingOrder); } } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
@@ -18,6 +18,7 @@ import com.ruoyi.order.dto.*; import com.ruoyi.order.vo.ChargingOrderListInfoVO; import com.ruoyi.order.vo.EndOfChargePageInfo; import org.springframework.web.bind.annotation.RequestBody; import java.time.LocalDate; import java.util.List; @@ -268,4 +269,12 @@ EndOfChargePageInfo getEndOfChargePageInfo(String id); Long countNoTag(); /** * 获取订单数据 * @param order * @return */ List<TChargingOrder> getChargingOrder(TChargingOrderVo order); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -2971,4 +2971,32 @@ public Long countNoTag() { return this.baseMapper.countNoTag(); } @Override public List<TChargingOrder> getChargingOrder(TChargingOrderVo order) { LambdaQueryWrapper<TChargingOrder> queryWrapper = new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getDelFlag, 0); if(null != order.getChargingPileId()){ queryWrapper.eq(TChargingOrder::getChargingPileId, order.getChargingPileId()); } if(null != order.getChargingGunId()){ queryWrapper.eq(TChargingOrder::getChargingGunId, order.getChargingGunId()); } if(null != order.getStatus()){ queryWrapper.eq(TChargingOrder::getStatus, order.getStatus()); } if(null != order.getAppUserId()){ queryWrapper.eq(TChargingOrder::getAppUserId, order.getAppUserId()); } if(null != order.getAppUserId()){ queryWrapper.eq(TChargingOrder::getAppUserId, order.getAppUserId()); } if(null != order.getStatusList()){ queryWrapper.in(TChargingOrder::getAppUserId, order.getStatusList()); } if(null != order.getEndMode()){ queryWrapper.eq(TChargingOrder::getEndMode, order.getEndMode()); } return this.list(queryWrapper.orderByDesc(TChargingOrder::getCreateTime)); } }