package com.ruoyi.jianguan.util;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.nacos.common.utils.JacksonUtils;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.databind.MapperFeature;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.ruoyi.chargingPile.api.feignClient.*;
|
import com.ruoyi.chargingPile.api.model.*;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
|
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.common.core.web.page.PageInfo;
|
import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
|
import com.ruoyi.integration.api.vo.StartChargeResult;
|
import com.ruoyi.jianguan.model.*;
|
import com.ruoyi.jianguan.mongodb.service.UploadRealTimeMonitoringDataService;
|
import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
|
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
|
import com.ruoyi.order.api.model.AddTripartitePlatformOrder;
|
import com.ruoyi.order.api.model.TChargingOrder;
|
import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy;
|
import com.ruoyi.other.api.domain.Operator;
|
import com.ruoyi.other.api.feignClient.OperatorClient;
|
import com.ruoyi.other.api.feignClient.SystemConfigurationClient;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.util.*;
|
import java.util.concurrent.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author zhibing.pu
|
* @Date 2025/1/21 17:52
|
*/
|
@Slf4j
|
@RestController
|
@RequestMapping("/evcs/v3.0")
|
public class TCECCJianGuanontroller {
|
|
@Resource
|
private SiteClient siteClient;
|
|
@Resource
|
private ChargingPileClient chargingPileClient;
|
|
@Resource
|
private ChargingGunClient chargingGunClient;
|
|
@Resource
|
private ChargingOrderClient chargingOrderClient;
|
|
@Resource
|
private OperatorClient operatorClient;
|
|
@Resource
|
private AccountingStrategyDetailClient accountingStrategyDetailClient;
|
|
@Resource
|
private ChargingOrderAccountingStrategyClient chargingOrderAccountingStrategyClient;
|
|
@Resource
|
private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService;
|
|
@Resource
|
private TokenUtil tokenUtil;
|
|
@Resource
|
private ParkingLotClient parkingLotClient;
|
|
@Resource
|
private ParkingRecordClient parkingRecordClient;
|
|
@Resource
|
private SystemConfigurationClient systemConfigurationClient;
|
@Autowired
|
private TCECSuperviseUtil tcecSuperviseUtil;
|
private static final String OperatorID = "MA6CC2LK7";
|
private static final String OurDataSecret = "3QJXn4MSj78zcpW1";
|
private static final String OurDataSecretIV = "jhqj64V9gX8NHbu1";
|
private static final String OurSigSecret = "RruzbZxnr74tqxe1";
|
|
|
/**
|
* 请求校验
|
* @param baseRequest
|
* @param request
|
* @return
|
*/
|
public BaseResult requestCheck(Boolean tokenCheck, BaseRequest baseRequest, HttpServletRequest request){
|
BaseResult baseResult = new BaseResult();
|
baseResult.setRet(0);
|
baseResult.setMsg("成功");
|
baseResult.setOperatorID(baseRequest.getOperatorID());
|
Long mapKey = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
|
baseResult.setTimeStamp(mapKey);
|
baseResult.setSeq("0001");
|
|
//校验token和签名
|
String operatorID = baseRequest.getOperatorID();
|
String sig = baseRequest.getSig();
|
Long timeStamp = baseRequest.getTimeStamp();
|
String data = baseRequest.getData();
|
String seq = baseRequest.getSeq();
|
|
if(StringUtils.isEmpty(operatorID) || StringUtils.isEmpty(sig) || StringUtils.isEmpty(data) || StringUtils.isEmpty(seq) || null == timeStamp){
|
baseResult.setRet(4003);
|
baseResult.setMsg("参数异常");
|
return baseResult;
|
}
|
|
R<Operator> r = operatorClient.getOperator(operatorID);
|
|
if(200 != r.getCode()){
|
baseResult.setRet(500);
|
baseResult.setMsg("系统异常");
|
return baseResult;
|
}
|
//校验token
|
if(tokenCheck){
|
Operator loginUser = tokenUtil.getLoginUser(request);
|
if(null == loginUser){
|
baseResult.setRet(4002);
|
baseResult.setMsg("身份校验失败,无效的token");
|
return baseResult;
|
}
|
}
|
|
Operator operator = r.getData();
|
baseResult.setOperator(operator);
|
baseRequest.setOperator(operator);
|
//校验签名
|
String sign = TCECUtil.ourBuildSign(baseRequest);
|
if(!sign.equals(sig)){
|
baseResult.setRet(4001);
|
baseResult.setMsg("签名校验失败");
|
return baseResult;
|
}
|
return baseResult;
|
}
|
public BaseResult requestCheckJianGuan(Boolean tokenCheck, BaseRequest baseRequest, HttpServletRequest request){
|
Operator operator = new Operator();
|
BaseResult baseResult = new BaseResult();
|
baseResult.setRet(0);
|
baseResult.setMsg("成功");
|
baseResult.setOperatorID(baseRequest.getOperatorID());
|
operator.setOperatorId(baseRequest.getOperatorID());
|
Long mapKey = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
|
baseResult.setTimeStamp(mapKey);
|
baseResult.setSeq("0001");
|
//校验token和签名
|
String operatorID = baseRequest.getOperatorID();
|
String sig = baseRequest.getSig();
|
Long timeStamp = baseRequest.getTimeStamp();
|
String data = baseRequest.getData();
|
String seq = baseRequest.getSeq();
|
baseResult.setOperator(operator);
|
if(StringUtils.isEmpty(operatorID) || StringUtils.isEmpty(sig) || StringUtils.isEmpty(data) || StringUtils.isEmpty(seq) || null == timeStamp){
|
baseResult.setRet(4003);
|
baseResult.setMsg("参数异常");
|
return baseResult;
|
}
|
return baseResult;
|
}
|
|
|
|
|
|
|
/**
|
* 获取token
|
* @return
|
*/
|
@PostMapping("/query_token")
|
public BaseResult queryToken(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
log.info("三方平台获取token请求参数:" + JacksonUtils.toJson(baseRequest));
|
BaseResult baseResult = requestCheckJianGuan(false, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
log.info("三方平台获取token响应Data:");
|
baseResult.setData("");
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
QueryTokenResult queryTokenResult = new QueryTokenResult();
|
//生成token
|
Operator operator = baseResult.getOperator();
|
Map<String, Object> token = tokenUtil.createToken(operator);
|
String access_token = token.get("access_token").toString();
|
Long expires_in = Long.valueOf(token.get("expires_in").toString());
|
|
queryTokenResult.setOperatorID("906171535");
|
queryTokenResult.setSuccStat(0);
|
queryTokenResult.setFailReason(0);
|
queryTokenResult.setAccessToken(access_token);
|
queryTokenResult.setTokenAvailableTime(expires_in * 60);
|
//参数加密
|
String jsonString = JacksonUtils.toJson(queryTokenResult);
|
log.info("三方平台获取token响应Data:" + jsonString);
|
// String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
// baseResult.setData(encrypt);
|
String timeStamp = System.currentTimeMillis() + "";
|
SequenceGenerator generator = new SequenceGenerator();
|
String nextSequence = generator.getNextSequence();
|
String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,jsonString);
|
String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret);
|
baseResult.setData(data);
|
baseResult.setSig(hmacMD5);
|
log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
/**
|
* 推送充电状态信息
|
* @param chargingOrder
|
* @return
|
*/
|
// public R pushSuperviseNotificationEquipChargeStatus(TChargingOrder 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 chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
|
// supEquipChargeStatus.setConnectorID(chargingGun.getFullNumber());
|
// supEquipChargeStatus.setEquipmentClassification(1);
|
// supEquipChargeStatus.setPushTimeStamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
// switch (chargingGun.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(new BigDecimal(chargingOrder.getEndSoc()));
|
// 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());
|
// List<Operator> operators = operatorClient.getAllOperator().getData();
|
// for (Operator operator : operators) {
|
// tcecSuperviseUtil.notificationSupEquipChargeStatus(operator, supEquipChargeStatus);
|
// }
|
// return R.ok();
|
// }
|
|
|
|
|
|
|
}
|