liujie
2025-07-21 26526de10d49c3422a6d6c2d55fe5a2997786ad9
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/util/TaskUtil.java
New file
@@ -0,0 +1,289 @@
package com.ruoyi.jianguan.util;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.model.TAppUser;
import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.jianguan.model.ConnectorStatusInfo;
import com.ruoyi.jianguan.model.SupEquipChargeStatus;
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.Operator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2025/7/12 9:10
 */
@Slf4j
@Component
public class TaskUtil {
   @Resource
   private ChargingGunClient chargingGunClient;
   private final static String operatorId = "906171535";
   @Resource
   private TCECSuperviseUtil tcecSuperviseUtil;
   @Resource
   private ChargingOrderClient chargingOrderClient;
   @Resource
   private AppUserClient appUserClient;
   @Resource
   private RedisTemplate redisTemplate;
   @Resource
   private ChuanYiChongSuperviseUtil chuanYiChongSuperviseUtil;
   /**
    * 10秒定时推送枪状态
    */
   @Scheduled(fixedRate = 10000)
   public void taskPushStatus(){
      pushStatus();
   }
   /**
    * 1分钟定时推送订单状态
    */
   @Scheduled(fixedRate = 60000)
   public void taskPushOrderStatus(){
      pushOrderStatus();
   }
   /**
    * 定时推送订单状态
    */
   public void pushOrderStatus(){
      TChargingOrderVo order = new TChargingOrderVo();
      order.setStatusList(new ArrayList<Integer>(){{
         add(3);
      }});
      List<TChargingOrder> orders = chargingOrderClient.getChargingOrder(order).getData();
      for (TChargingOrder chargingOrder : orders) {
         log.info("推送充电订单状态:{}", chargingOrder);
         SupEquipChargeStatus supEquipChargeStatus = new SupEquipChargeStatus();
         supEquipChargeStatus.setOperatorID(operatorId);
         supEquipChargeStatus.setEquipmentOwnerID(operatorId);
         supEquipChargeStatus.setStationID(String.valueOf(chargingOrder.getSiteId()));
         supEquipChargeStatus.setEquipmentID(String.valueOf(chargingOrder.getChargingPileId()));
         supEquipChargeStatus.setOrderNo(operatorId+chargingOrder.getCode());
         switch (chargingOrder.getStatus()){
            case 2:
               supEquipChargeStatus.setConnectorStatus(1);
               break;
            case 3:
               supEquipChargeStatus.setConnectorStatus(2);
               break;
            case 4:
               supEquipChargeStatus.setConnectorStatus(3);
               break;
            case 5:
               supEquipChargeStatus.setConnectorStatus(4);
               break;
         }
         TChargingGun chargingGun2 = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
         supEquipChargeStatus.setConnectorID(chargingGun2.getFullNumber());
         supEquipChargeStatus.setEquipmentClassification(1);
         supEquipChargeStatus.setPushTimeStamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
         switch (chargingGun2.getStatus()){
            case 1:
               supEquipChargeStatus.setConnectorStatus(0);
               break;
            case 2:
               supEquipChargeStatus.setConnectorStatus(1);
               break;
            case 3:
               supEquipChargeStatus.setConnectorStatus(2);
               break;
            case 4:
               supEquipChargeStatus.setConnectorStatus(3);
               break;
            case 5:
               supEquipChargeStatus.setConnectorStatus(3);
               break;
            case 6:
               supEquipChargeStatus.setConnectorStatus(4);
               break;
            case 7:
               supEquipChargeStatus.setConnectorStatus(255);
               break;
         }
         supEquipChargeStatus.setCurrentA(chargingOrder.getCurrent());
         supEquipChargeStatus.setSOC(null != chargingOrder.getTotalElectricity()?chargingOrder.getTotalElectricity():new BigDecimal("1"));
         supEquipChargeStatus.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
         supEquipChargeStatus.setEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
         supEquipChargeStatus.setTotalPower(chargingOrder.getElectrovalence());
         tcecSuperviseUtil.notificationSupEquipChargeStatus(new Operator(), supEquipChargeStatus);
         TAppUser data = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
         // 川逸充
         if (chargingOrder.getRechargePaymentType()==3){
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("StartChargeSeq",chargingOrder.getCode());
            jsonObject.put("ConnectorID",chargingGun2.getFullNumber());
            log.info("川逸充用户信息"+data);
            if (StringUtils.hasLength(data.getPhone())){
               jsonObject.put("Mobile",data.getPhone());
            }
            LocalDateTime startTime = chargingOrder.getStartTime();
            //状态(0=未知,1=等待中/已插枪,2=启动中,3=充电中,4=停止中,5=已结束)
            int tempStatus = 0;
            switch (chargingOrder.getStatus()){
               case 1:
                  tempStatus=1;
               case 2:
                  tempStatus=1;
                  jsonObject.put("StartChargeSeqStat",tempStatus);
                  if (startTime!=null){
                     jsonObject.put("StartTime",startTime.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                  }else{
                     LocalDateTime now = LocalDateTime.now();
                     // 转化为yyyy-MM-dd HH:mm:ss格式字符串
                     jsonObject.put("StartTime",now.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                  }
                  chuanYiChongSuperviseUtil.notificationStationStatus(new Operator(), jsonObject);
                  break;
               case 3:
                  tempStatus=2;
                  jsonObject.put("StartChargeSeqStat",tempStatus);
                  if (startTime!=null){
                     jsonObject.put("StartTime",startTime.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                  }else{
                     LocalDateTime now = LocalDateTime.now();
                     // 转化为yyyy-MM-dd HH:mm:ss格式字符串
                     jsonObject.put("StartTime",now.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                  }
                  chuanYiChongSuperviseUtil.notificationStationStatus(new Operator(), jsonObject);
                  break;
               case 4:
                  break;
               case 5:
                  jsonObject.put("StartChargeSeqStat",4);
                  int temp = 0;
                  //充电枪状态(1=离线,2=空闲,3=占用(未充电),4=占用(充电中),5=占用(已充满),6=占用(预约锁定),7=故障)
                  switch (chargingGun2.getStatus()){
                     case 1:
                        temp = 0;
                        break;
                     case 2:
                        temp=1;
                        break;
                     case 3:
                        temp=2;
                        break;
                     case 4:
                        temp=3;
                        break;
                     case 5:
                        temp=4;
                        break;
                     case 6:
                        temp=4;
                        break;
                     case 7:
                        temp = 255;
                        break;
                  }
                  jsonObject.put("ConnectorStatus",temp);
                  jsonObject.put("CurrentA",chargingOrder.getCurrent());
                  jsonObject.put("VoltageA",chargingOrder.getVoltage());
                  LocalDateTime startTime2 = chargingOrder.getStartTime();
                  if (startTime2!=null){
                     jsonObject.put("StartTime",startTime2.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                  }else{
                     LocalDateTime now = LocalDateTime.now();
                     // 转化为yyyy-MM-dd HH:mm:ss格式字符串
                     jsonObject.put("StartTime",now.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                  }
                  LocalDateTime now = LocalDateTime.now();
                  // 转化为yyyy-MM-dd HH:mm:ss格式字符串
                  jsonObject.put("EndTime",now.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                  jsonObject.put("TotalPower",chargingOrder.getElectricity());
                  jsonObject.put("TotalMoney",chargingOrder.getOrderAmount());
                  chuanYiChongSuperviseUtil.notificationSupEquipChargeStatus(new Operator(), jsonObject);
                  break;
            }
         }
      }
   }
   /**
    * 推送枪状态到平台
    */
   public void pushStatus(){
      redisTemplate.keys("ping:*").forEach(key->{
         String fullNumber = key.toString().split(":")[1];
         log.info("推送枪状态到监管平台:{}",fullNumber);
         TChargingGun chargingGun = chargingGunClient.getChargingGunByFullNumber(fullNumber).getData();
         if (chargingGun!=null){
            ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
            connectorStatusInfo.setOperatorID(operatorId);
            connectorStatusInfo.setEquipmentOwnerID(operatorId);
            connectorStatusInfo.setStationID(String.valueOf(chargingGun.getSiteId()));
            connectorStatusInfo.setEquipmentID(String.valueOf(chargingGun.getChargingPileId()));
            connectorStatusInfo.setConnectorID(chargingGun.getFullNumber());
            if (chargingGun.getEquipmentClassification()!=null){
               connectorStatusInfo.setEquipmentClassification(chargingGun.getEquipmentClassification());
            }else {
               connectorStatusInfo.setEquipmentClassification(1);
            }
            switch (chargingGun.getStatus()){
               case 1:
                  connectorStatusInfo.setStatus(0);
                  break;
               case 2:
                  connectorStatusInfo.setStatus(1);
                  break;
               case 3:
                  connectorStatusInfo.setStatus(2);
                  break;
               case 4:
                  connectorStatusInfo.setStatus(3);
                  break;
               case 5:
                  connectorStatusInfo.setStatus(3);
                  break;
               case 6:
                  connectorStatusInfo.setStatus(4);
                  break;
               case 7:
                  connectorStatusInfo.setStatus(255);
                  break;
            }
            connectorStatusInfo.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            tcecSuperviseUtil.notificationStationStatus(new Operator(), connectorStatusInfo);
         }
      });
   }
}