package com.ruoyi.integration.drainage;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.nacos.common.utils.JacksonUtils;
|
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.drainage.kuaidian.TCECKDUtil;
|
import com.ruoyi.integration.drainage.kuaidian.model.*;
|
import com.ruoyi.integration.drainage.model.*;
|
import com.ruoyi.integration.drainage.model.enu.*;
|
import com.ruoyi.integration.drainage.util.AesEncryption;
|
import com.ruoyi.integration.drainage.util.HMacMD5Util;
|
import com.ruoyi.integration.drainage.util.SequenceGenerator;
|
import com.ruoyi.integration.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.integration.api.vo.StartChargeResult;
|
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/v1.0")
|
public class TCECController {
|
|
@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 final static String operatorId = "906171535";
|
|
/**
|
* 请求校验
|
* @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 = requestCheck(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();
|
Operator operator = baseResult.getOperator();
|
if(null == operator){
|
queryTokenResult.setSuccStat(1);
|
queryTokenResult.setFailReason(1);
|
//参数加密
|
String jsonString = JacksonUtils.toJson(queryTokenResult);
|
log.info("三方平台获取token响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
log.info("三方平台获取token请求Data:" + decrypt);
|
QueryToken queryToken = JSON.parseObject(decrypt, QueryToken.class);
|
if(!queryToken.getOperatorSecret().equals(operator.getOurOperatorSecret())){
|
queryTokenResult.setSuccStat(1);
|
queryTokenResult.setFailReason(2);
|
//参数加密
|
String jsonString = JacksonUtils.toJson(queryTokenResult);
|
log.info("三方平台获取token响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
|
//生成token
|
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);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
/**
|
* 获取token
|
* @return
|
*/
|
@PostMapping("/query_token_jianguan")
|
public BaseResult queryTokenJianguan(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
log.info("三方平台获取token请求参数:" + JacksonUtils.toJson(baseRequest));
|
BaseResult baseResult = requestCheck(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;
|
}
|
|
|
|
|
|
/**
|
* 查询充电站信息
|
* @return
|
*/
|
@PostMapping("/query_stations_info")
|
public BaseResult queryStationsInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
log.info("三方平台查询充电站信息请求参数:" + JacksonUtils.toJson(baseRequest));
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
log.info("三方平台查询充电站信息响应Data:");
|
baseResult.setData("");
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
log.info("三方平台查询充电站信息请求Data:" + decrypt);
|
QueryStationsInfo queryStationsInfo = JSON.parseObject(decrypt, QueryStationsInfo.class);
|
Integer pageNo = queryStationsInfo.getPageNo();
|
Integer pageSize = queryStationsInfo.getPageSize();
|
if(null == pageNo){
|
pageNo = 1;
|
}
|
if(null == pageSize){
|
pageSize = 10;
|
}
|
PageInfo<Site> siteListPaging = siteClient.getSiteListPaging(pageNo, pageSize, new ArrayList<>());
|
List<TParkingLot> parkingLots = parkingLotClient.getAllParkingLot().getData();
|
QueryStationsInfoResult queryStationsInfoResult = new QueryStationsInfoResult();
|
queryStationsInfoResult.setPageNo(pageNo);
|
queryStationsInfoResult.setPageCount((0 == (siteListPaging.getTotal() % pageSize) ? 0 : 1) + Double.valueOf(siteListPaging.getTotal() / pageSize).intValue());
|
queryStationsInfoResult.setItemSize(Long.valueOf(siteListPaging.getTotal()).intValue());
|
queryStationsInfoResult.setStationInfos(buildSite(parkingLots, siteListPaging.getRecords()));
|
//参数加密
|
String jsonString = JacksonUtils.toJson(queryStationsInfoResult);
|
log.info("三方平台查询充电站信息响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
|
|
/**
|
* 构建站点数据
|
* @param sites
|
* @return
|
*/
|
public List<StationInfo> buildSite(List<TParkingLot> parkingLots, List<Site> sites){
|
List<Integer> siteIds = sites.stream().map(Site::getId).collect(Collectors.toList());
|
List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData();
|
List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
|
List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
|
String serviceTel = systemConfigurationClient.getServerPhone().getData();
|
List<StationInfo> StationInfos = new ArrayList<>();
|
for (Site datum : sites) {
|
StationInfo stationInfo = new StationInfo();
|
stationInfo.setAreaCodeCountryside(datum.getAreaCodeCountryside());
|
stationInfo.setStationClassification(datum.getStationClassification());
|
stationInfo.setGeneralApplicationType(datum.getGeneralApplicationType());
|
if (org.springframework.util.StringUtils.hasLength(datum.getSwapMatchCars())){
|
stationInfo.setSwapMatchCars(Arrays.asList(datum.getSwapMatchCars().split(",")));
|
}
|
stationInfo.setBusineHours(datum.getStartServiceTime());
|
stationInfo.setRoundTheClock(datum.getRoundTheClock());
|
stationInfo.setParkType(datum.getParkType());
|
stationInfo.setElectricityFee("{"+datum.getElectricityFee()+"}");
|
stationInfo.setServiceFee("{"+datum.getServiceFee()+"}");
|
stationInfo.setParkFee("{\"rules\":"+datum.getParkFee()+","+"\"freeDuration\":"+datum.getParkFeeFree()+"}");
|
stationInfo.setElectricityType(datum.getElectricityType());
|
stationInfo.setBusinessExpandType(datum.getBusinessExpandType());
|
stationInfo.setCapacity(datum.getCapacity());
|
stationInfo.setRatedPower(datum.getRatedPower());
|
stationInfo.setPeriodFee(datum.getPeriodFee());
|
stationInfo.setOfficialRunTime(datum.getOfficialRunTime());
|
stationInfo.setStationOrientation(datum.getStationOrientation());
|
stationInfo.setStationArea(datum.getStationArea());
|
stationInfo.setHavePerson(datum.getHavePerson());
|
stationInfo.setVideoMonitor(datum.getVideoMonitor());
|
if (StringUtils.isNotEmpty(datum.getSupportingFacilities())){
|
String[] split = datum.getSupportingFacilities().split(",");
|
List<Integer> collect = Arrays.stream(split).map(Integer::parseInt).collect(Collectors.toList());
|
stationInfo.setSupportingFacilities(collect);
|
}
|
stationInfo.setPrinterFlag(datum.getPrinterFlag());
|
stationInfo.setBarrierFlag(datum.getBarrierFlag());
|
stationInfo.setParkingLockFlag(datum.getParkingLockFlag());
|
stationInfo.setEquipmentOwnerName(datum.getEquipmentOwnerName());
|
stationInfo.setResidentNo(datum.getResidentNo());
|
stationInfo.setSupplyType(datum.getSupplyType());
|
stationInfo.setWattHourMeterNo(datum.getWattHourMeterNo());
|
BigDecimal forwardPower = datum.getForwardPower();
|
if (forwardPower!=null){
|
stationInfo.setForwardPower(forwardPower.setScale(4, BigDecimal.ROUND_HALF_UP).toString());
|
}
|
stationInfo.setRecordUniqueNo(datum.getRecordUniqueNo());
|
stationInfo.setStationID(datum.getId().toString());
|
stationInfo.setOperatorID("906171535");
|
stationInfo.setEquipmentOwnerID("906171535");
|
stationInfo.setStationName(datum.getName());
|
stationInfo.setCountryCode(StringUtils.isNotEmpty(datum.getCountryCode()) ? datum.getCountryCode() : "CN");
|
stationInfo.setAreaCode(datum.getDistrictsCode());
|
stationInfo.setAddress(datum.getAddress());
|
stationInfo.setStationTel(StringUtils.isNotEmpty(datum.getPhone()) ? datum.getPhone().split(",")[0] : "");
|
stationInfo.setServiceTel(StringUtils.isNotEmpty(serviceTel) ? serviceTel.split(",")[0] : "");
|
switch (datum.getSiteType()){
|
case 0:
|
stationInfo.setStationType(StationTypeEnum.OTHER.getType());
|
break;
|
case 1:
|
stationInfo.setStationType(StationTypeEnum.PUBLIC.getType());
|
break;
|
case 2:
|
stationInfo.setStationType(StationTypeEnum.PERSONAGE.getType());
|
break;
|
case 3:
|
stationInfo.setStationType(StationTypeEnum.BUS_SPECIFIC.getType());
|
break;
|
case 4:
|
stationInfo.setStationType(StationTypeEnum.SANITATION_SPECIFIC.getType());
|
break;
|
case 5:
|
stationInfo.setStationType(StationTypeEnum.LOGISTICS_SPECIFIC.getType());
|
break;
|
case 6:
|
stationInfo.setStationType(StationTypeEnum.TEXT_SPECIFIC.getType());
|
break;
|
}
|
if(datum.getStatus() == 1){
|
stationInfo.setStationStatus(StationStatusEnum.NORMAL_USE.getStatus());
|
}
|
if(datum.getStatus() == 2){
|
stationInfo.setStationStatus(StationStatusEnum.MAINTAIN.getStatus());
|
}
|
if(datum.getStatus() == 3){
|
stationInfo.setStationStatus(StationStatusEnum.OFF_LINE.getStatus());
|
}
|
stationInfo.setParkNums(datum.getParkingSpace());
|
stationInfo.setStationLat(new BigDecimal(datum.getLat()).setScale(6, RoundingMode.DOWN));
|
stationInfo.setStationLng(new BigDecimal(datum.getLon()).setScale(6, RoundingMode.DOWN));
|
stationInfo.setConstruction(datum.getConstructionSite() == 0 ? ConstructionEnum.OTHER.getType() : datum.getConstructionSite());
|
stationInfo.setPictures(StringUtils.isNotEmpty(datum.getImgUrl()) ? Arrays.asList(datum.getImgUrl().split(",")) : new ArrayList<>());
|
stationInfo.setSiteGuide(datum.getGuide());
|
stationInfo.setMatchCars(datum.getVehicleDescription());
|
// stationInfo.setBusineHours(datum.getStartServiceTime() + "-" + datum.getEndServiceTime());
|
stationInfo.setElectricityFee(datum.getRateDescription());
|
//添加停车费信息
|
Optional<TParkingLot> first = parkingLots.stream().filter(s -> s.getSiteId().equals(datum.getId())).findFirst();
|
if(first.isPresent()){
|
TParkingLot tParkingLot = first.get();
|
buildPlaceHolder(tParkingLot, stationInfo);
|
}
|
//构建充电设备信息数据
|
stationInfo.setEquipmentInfos(buildEquipmentInfo(datum.getId(), tChargingPiles, chargingGunList));
|
StationInfos.add(stationInfo);
|
|
}
|
return StationInfos;
|
}
|
|
|
/**
|
* 构建停车费信息
|
* @param tParkingLot
|
* @param stationInfo
|
*/
|
public void buildPlaceHolder(TParkingLot tParkingLot, StationInfo stationInfo){
|
stationInfo.setOvertimeFee(tParkingLot.getName() + "停车费");
|
PlaceHolder placeHolder = new PlaceHolder();
|
placeHolder.setFreeTime(tParkingLot.getChargeFreeDuration());
|
placeHolder.setMaxFee(tParkingLot.getChargeCapping());
|
List<PlaceHolderPrice> PlaceHolderPrices = new ArrayList<>();
|
PlaceHolderPrice placeHolderPrice = new PlaceHolderPrice();
|
placeHolderPrice.setStartTime("00:00");
|
placeHolderPrice.setEndTime("23:59");
|
placeHolderPrice.setPrice(tParkingLot.getChargeRate());
|
PlaceHolderPrices.add(placeHolderPrice);
|
placeHolder.setPlaceHolderPrices(PlaceHolderPrices);
|
stationInfo.setPlaceHolder(placeHolder);
|
}
|
|
|
|
|
/**
|
* 构建桩数据
|
* @param tChargingPiles
|
* @return
|
*/
|
public List<EquipmentInfo> buildEquipmentInfo(Integer siteId, List<TChargingPile> tChargingPiles, List<TChargingGun> chargingGunList){
|
List<EquipmentInfo> equipmentInfos = new ArrayList<>();
|
List<TChargingPile> collect = tChargingPiles.stream().filter(s -> s.getSiteId().equals(siteId)).collect(Collectors.toList());
|
for (TChargingPile tChargingPile : collect) {
|
EquipmentInfo equipmentInfo = new EquipmentInfo();
|
equipmentInfo.setEquipmentID(tChargingPile.getId().toString());
|
equipmentInfo.setManufacturerID(tChargingPile.getManufacturerCode());
|
equipmentInfo.setManufacturerName(tChargingPile.getManufacturer());
|
equipmentInfo.setEquipmentModel(tChargingPile.getEquipmentType());
|
equipmentInfo.setEquipmentUniqueNumber(tChargingPile.getEquipmentUniqueNumber());
|
equipmentInfo.setEquipmentClassification(tChargingPile.getEquipmentClassification());
|
if(null != tChargingPile.getProductionDate()){
|
equipmentInfo.setProductionDate(tChargingPile.getProductionDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
}
|
switch (tChargingPile.getType()){
|
case 0:
|
equipmentInfo.setEquipmentType(EquipmentTypeEnum.OTHER.getType());
|
break;
|
case 1:
|
equipmentInfo.setEquipmentType(EquipmentTypeEnum.DIRECT_CURRENT.getType());
|
break;
|
case 2:
|
equipmentInfo.setEquipmentType(EquipmentTypeEnum.ALTERNATING_CURRENT.getType());
|
break;
|
case 3:
|
equipmentInfo.setEquipmentType(EquipmentTypeEnum.ALTERNATING_DIRECT.getType());
|
break;
|
case 4:
|
equipmentInfo.setEquipmentType(EquipmentTypeEnum.WIRELESS_DEVICE.getType());
|
break;
|
case 5:
|
equipmentInfo.setEquipmentType(EquipmentTypeEnum.ORDER.getType());
|
break;
|
case 6:
|
equipmentInfo.setEquipmentType(EquipmentTypeEnum.V2G.getType());
|
break;
|
}
|
|
//构建设备接口信息
|
equipmentInfo.setConnectorInfos(buildConnectorInfos(tChargingPile.getId(), tChargingPile.getCode(), chargingGunList));
|
equipmentInfo.setPower(tChargingPile.getRatedPower());
|
equipmentInfos.add(equipmentInfo);
|
}
|
return equipmentInfos;
|
}
|
|
|
/**
|
* 构建接口数据
|
* @param chargingGunList
|
* @return
|
*/
|
public List<ConnectorInfo> buildConnectorInfos(Integer chargingPileId, String code, List<TChargingGun> chargingGunList){
|
List<ConnectorInfo> connectorInfos = new ArrayList<>();
|
List<TChargingGun> collect = chargingGunList.stream().filter(s -> s.getChargingPileId().equals(chargingPileId)).collect(Collectors.toList());
|
for (TChargingGun chargingGun : collect) {
|
ConnectorInfo connectorInfo = new ConnectorInfo();
|
connectorInfo.setConnectorID(chargingGun.getFullNumber());
|
connectorInfo.setConnectorName(chargingGun.getName());
|
connectorInfo.setEquipmentClassification(chargingGun.getEquipmentClassification());
|
connectorInfo.setConstantVoltageLowerLimits(chargingGun.getConstantVoltageLowerLimits());
|
connectorInfo.setConstantVoltageUpperLimits(chargingGun.getConstantVoltageUpperLimits());
|
connectorInfo.setConstantCurrentLowerLimits(chargingGun.getConstantCurrentLowerLimits());
|
connectorInfo.setConstantCurrentUpperLimits(chargingGun.getConstantCurrentUpperLimits());
|
connectorInfo.setAuxPower(chargingGun.getAuxPower());
|
connectorInfo.setOpreateStatus(chargingGun.getOpreateStatus());
|
connectorInfo.setOpreateHours(chargingGun.getOpreateHours());
|
switch (chargingGun.getType()){
|
case 0:
|
connectorInfo.setConnectorType(ConnectorTypeEnum.OTHER.getType());
|
break;
|
case 1:
|
connectorInfo.setConnectorType(ConnectorTypeEnum.HOUSEHOLD_SOCKET.getType());
|
break;
|
case 2:
|
connectorInfo.setConnectorType(ConnectorTypeEnum.AC_SOCKET.getType());
|
break;
|
case 3:
|
connectorInfo.setConnectorType(ConnectorTypeEnum.AC_INTERFACE_PLUG.getType());
|
break;
|
case 4:
|
connectorInfo.setConnectorType(ConnectorTypeEnum.DC_INTERFACE_GUN_HEAD.getType());
|
break;
|
case 5:
|
connectorInfo.setConnectorType(ConnectorTypeEnum.WIRELESS_CHARGING_STAND.getType());
|
break;
|
}
|
connectorInfo.setCurrent(chargingGun.getRatedCurrent().intValue());
|
connectorInfo.setPower(chargingGun.getRatedPower());
|
connectorInfo.setParkNo(chargingGun.getParkingNumber());
|
connectorInfo.setNationalStandard(Integer.valueOf(chargingGun.getNationalStandard()));
|
connectorInfo.setQRCode("https://mxcd.zhinenganguan.com?No=" + code + chargingGun.getCode());
|
connectorInfos.add(connectorInfo);
|
}
|
return connectorInfos;
|
}
|
|
|
/**
|
* 接口状态变化后推送给第三方
|
* @return
|
*/
|
@PostMapping("/pushChargingGunStatus")
|
public R pushChargingGunStatus(@RequestParam(value = "fullNumber") String fullNumber, @RequestParam(value = "status") Integer status){
|
ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
|
connectorStatusInfo.setConnectorID(fullNumber);
|
switch (status){
|
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 connectorStatusInfo1 = new ConnectorStatusInfo();
|
BeanUtils.copyProperties(connectorStatusInfo, connectorStatusInfo1);
|
connectorStatusInfo.setConnectorStatusInfo(connectorStatusInfo1);
|
List<Operator> operators = operatorClient.getAllOperator().getData();
|
for (Operator operator : operators) {
|
TCECUtil.notificationStationStatus(operator, connectorStatusInfo);
|
}
|
return R.ok();
|
}
|
|
|
|
/**
|
* 设备接口状态查询
|
* @return
|
*/
|
@PostMapping("/query_station_status")
|
public BaseResult queryStationStatus(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
log.info("三方平台获取设备接口状态请求参数:" + JacksonUtils.toJson(baseRequest));
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
log.info("三方平台获取设备接口状态响应Data:");
|
baseResult.setData("");
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台获取设备接口状态响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
log.info("三方平台获取设备接口状态请求Data:" + decrypt);
|
QueryStationStatus queryStationsInfo = JSON.parseObject(decrypt, QueryStationStatus.class);
|
List<Integer> collect = queryStationsInfo.getStationIDs().stream().map(Integer::valueOf).collect(Collectors.toList());
|
List<Site> data = siteClient.getSiteByIds(collect).getData();
|
List<Integer> siteIds = data.stream().map(Site::getId).collect(Collectors.toList());
|
List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData();
|
List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
|
List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
|
|
QueryStationStatusResult result = new QueryStationStatusResult();
|
result.setTotal(data.size());
|
List<StationStatusInfo> StationStatusInfos = new ArrayList<>();
|
for (Site datum : data) {
|
StationStatusInfo stationStatusInfo = new StationStatusInfo();
|
stationStatusInfo.setStationID(datum.getId().toString());
|
//构建接口状态
|
List<ConnectorStatusInfo> ConnectorStatusInfos = new ArrayList<>();
|
List<TChargingGun> collect2 = chargingGunList.stream().filter(s -> s.getSiteId().equals(datum.getId())).collect(Collectors.toList());
|
for (TChargingGun chargingGun : collect2) {
|
ConnectorStatusInfo info = new ConnectorStatusInfo();
|
info.setConnectorID(chargingGun.getFullNumber());
|
switch (chargingGun.getStatus()){
|
case 1:
|
info.setStatus(0);
|
break;
|
case 2:
|
info.setStatus(1);
|
break;
|
case 3:
|
info.setStatus(2);
|
break;
|
case 4:
|
info.setStatus(3);
|
break;
|
case 5:
|
info.setStatus(3);
|
break;
|
case 6:
|
info.setStatus(4);
|
break;
|
case 7:
|
info.setStatus(255);
|
break;
|
}
|
ConnectorStatusInfos.add(info);
|
}
|
stationStatusInfo.setConnectorStatusInfos(ConnectorStatusInfos);
|
StationStatusInfos.add(stationStatusInfo);
|
}
|
result.setStationStatusInfos(StationStatusInfos);
|
//参数加密
|
String jsonString = JacksonUtils.toJson(result);
|
log.info("三方平台获取设备接口状态响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台获取设备接口状态响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
|
|
|
|
|
/**
|
* 查询统计信息
|
* @return
|
*/
|
@PostMapping("/query_station_stats")
|
public BaseResult queryStationStats(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
log.info("三方平台获取统计信息请求参数:" + JacksonUtils.toJson(baseRequest));
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
log.info("三方平台获取统计信息响应Data:");
|
baseResult.setData("");
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台获取统计信息响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
log.info("三方平台获取统计信息请求Data:" + decrypt);
|
QueryStationStats queryStationStats = JSON.parseObject(decrypt, QueryStationStats.class);
|
QueryStationStatsResult result = new QueryStationStatsResult();
|
ChargingPercentProvinceDto dto = new ChargingPercentProvinceDto();
|
dto.setDate1(LocalDate.parse(queryStationStats.getStartTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
dto.setDate2(LocalDate.parse(queryStationStats.getEndTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
dto.setSiteIds(new HashSet<>(Integer.valueOf(queryStationStats.getStationID())));
|
dto.setTripartitePlatformName(operator.getName());
|
List<TChargingOrder> chargingOrders = chargingOrderClient.getOrderBySiteIdAndTime(dto).getData();
|
BigDecimal reduce = chargingOrders.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
StationStatsInfo stationStats = new StationStatsInfo();
|
stationStats.setStationID(chargingOrders.get(0).getSiteId().toString());
|
stationStats.setStartTime(queryStationStats.getStartTime());
|
stationStats.setEndTime(queryStationStats.getEndTime());
|
stationStats.setStationElectricity(reduce);
|
//构建设备统计数据
|
List<EquipmentStatsInfo> EquipmentStatsInfos = new ArrayList<>();
|
Map<Integer, List<TChargingOrder>> collect = chargingOrders.stream().collect(Collectors.groupingBy(TChargingOrder::getChargingPileId));
|
for (Integer integer : collect.keySet()) {
|
List<TChargingOrder> tChargingOrders = collect.get(integer);
|
BigDecimal reduce1 = tChargingOrders.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
EquipmentStatsInfo equipmentStatsInfo = new EquipmentStatsInfo();
|
equipmentStatsInfo.setEquipmentID(integer.toString());
|
equipmentStatsInfo.setEquipmentElectricity(reduce1);
|
|
//构建设备接口统计数据
|
Map<Integer, List<TChargingOrder>> collect2 = tChargingOrders.stream().collect(Collectors.groupingBy(TChargingOrder::getChargingGunId));
|
List<ConnectorStatsInfo> ConnectorStatsInfos = new ArrayList<>();
|
for (Integer integer1 : collect2.keySet()) {
|
List<TChargingOrder> tChargingOrders1 = collect2.get(integer1);
|
BigDecimal reduce2 = tChargingOrders1.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
TChargingGun chargingGun = chargingGunClient.getChargingGunById(integer1).getData();
|
ConnectorStatsInfo connectorStatsInfo = new ConnectorStatsInfo();
|
connectorStatsInfo.setConnectorID(chargingGun.getFullNumber());
|
connectorStatsInfo.setConnectorElectricity(reduce2);
|
ConnectorStatsInfos.add(connectorStatsInfo);
|
}
|
equipmentStatsInfo.setConnectorStatsInfos(ConnectorStatsInfos);
|
EquipmentStatsInfos.add(equipmentStatsInfo);
|
}
|
stationStats.setEquipmentStatsInfos(EquipmentStatsInfos);
|
result.setStationStats(stationStats);
|
//参数加密
|
String jsonString = JacksonUtils.toJson(result);
|
log.info("三方平台获取统计信息响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台获取统计信息响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
|
|
/**
|
* 请求设备认证
|
* @return
|
*/
|
@PostMapping("/query_equip_auth")
|
public BaseResult queryEquipAuth(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
log.info("三方平台设备认证请求参数:" + JacksonUtils.toJson(baseRequest));
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
log.info("三方平台设备认证响应Data:");
|
baseResult.setData("");
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台设备认证响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
log.info("三方平台设备认证请求Data:" + decrypt);
|
QueryEquipAuth queryEquipAuth = JSON.parseObject(decrypt, QueryEquipAuth.class);
|
String connectorID = queryEquipAuth.getConnectorID();
|
TChargingGun tChargingGun = chargingGunClient.getChargingGunByFullNumber(connectorID).getData();
|
if(null == tChargingGun){
|
baseResult.setRet(4004);
|
baseResult.setMsg("connectorID 参数无效");
|
log.info("三方平台设备认证响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
QueryEquipAuthResult queryEquipAuthResult = new QueryEquipAuthResult();
|
queryEquipAuthResult.setEquipAuthSeq(queryEquipAuth.getEquipAuthSeq());
|
queryEquipAuthResult.setConnectorID(connectorID);
|
//1=离线,2=空闲,3=占用(未充电),4=占用(充电中),5=占用(已充满),6=占用(预约锁定),7=故障
|
switch (tChargingGun.getStatus()){
|
case 1:
|
queryEquipAuthResult.setSuccStat(1);
|
queryEquipAuthResult.setFailReason(2);
|
break;
|
case 2:
|
queryEquipAuthResult.setSuccStat(0);
|
queryEquipAuthResult.setFailReason(0);
|
break;
|
case 3:
|
queryEquipAuthResult.setSuccStat(0);
|
queryEquipAuthResult.setFailReason(1);
|
break;
|
case 4:
|
queryEquipAuthResult.setSuccStat(1);
|
queryEquipAuthResult.setFailReason(4);
|
break;
|
case 5:
|
queryEquipAuthResult.setSuccStat(1);
|
queryEquipAuthResult.setFailReason(5);
|
break;
|
case 6:
|
queryEquipAuthResult.setSuccStat(1);
|
queryEquipAuthResult.setFailReason(6);
|
break;
|
case 7:
|
queryEquipAuthResult.setSuccStat(1);
|
queryEquipAuthResult.setFailReason(2);
|
break;
|
}
|
//参数加密
|
String jsonString = JacksonUtils.toJson(queryEquipAuthResult);
|
log.info("三方平台设备认证响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台设备认证响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
|
|
|
/**
|
* 查询业务策略信息
|
* @return
|
*/
|
@PostMapping("/query_equip_business_policy")
|
public BaseResult queryEquipBusinessPolicy(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
log.info("三方平台查询业务策略信息请求参数:" + JacksonUtils.toJson(baseRequest));
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
log.info("三方平台查询业务策略信息响应Data:");
|
baseResult.setData("");
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台查询业务策略信息响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
log.info("三方平台查询业务策略信息请求Data:" + decrypt);
|
QueryEquipBusinessPolicy queryEquipBusinessPolicy = JSON.parseObject(decrypt, QueryEquipBusinessPolicy.class);
|
|
//构建返回结果
|
QueryEquipBusinessPolicyResult queryEquipBusinessPolicyResult = new QueryEquipBusinessPolicyResult();
|
queryEquipBusinessPolicyResult.setEquipBizSeq(queryEquipBusinessPolicy.getEquipBizSeq());
|
queryEquipBusinessPolicyResult.setConnectorID(queryEquipBusinessPolicy.getConnectorID());
|
queryEquipBusinessPolicyResult.setSuccStat(0);
|
queryEquipBusinessPolicyResult.setFailReason(0);
|
String connectorID = queryEquipBusinessPolicy.getConnectorID();
|
TChargingGun tChargingGun = chargingGunClient.getChargingGunByFullNumber(connectorID).getData();
|
if(null == tChargingGun){
|
baseResult.setRet(4004);
|
baseResult.setMsg("connectorID 参数无效");
|
//参数加密
|
String jsonString = JacksonUtils.toJson(queryEquipBusinessPolicyResult);
|
log.info("三方平台查询业务策略信息响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台查询业务策略信息响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
Integer accountingStrategyId = tChargingGun.getAccountingStrategyId();
|
if(null == accountingStrategyId){
|
List<Site> data = siteClient.getSiteByIds(Arrays.asList(tChargingGun.getSiteId())).getData();
|
accountingStrategyId = data.get(0).getAccountingStrategyId();
|
}
|
List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getListByAccountingStrategyId(accountingStrategyId).getData();
|
if(accountingStrategyDetails.size() == 0){
|
queryEquipBusinessPolicyResult.setSuccStat(1);
|
queryEquipBusinessPolicyResult.setFailReason(1);
|
queryEquipBusinessPolicyResult.setSumPeriod(0);
|
//参数加密
|
String jsonString = JacksonUtils.toJson(queryEquipBusinessPolicyResult);
|
log.info("三方平台查询业务策略信息响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台查询业务策略信息响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
List<PolicyInfo> PolicyInfos = new ArrayList<>();
|
for (TAccountingStrategyDetail accountingStrategyDetail : accountingStrategyDetails) {
|
PolicyInfo policyInfo = new PolicyInfo();
|
policyInfo.setStartTime(accountingStrategyDetail.getStartTime().replaceAll(":", "") + "00");
|
policyInfo.setElecPrice(accountingStrategyDetail.getElectrovalence());
|
policyInfo.setSevicePrice(accountingStrategyDetail.getServiceCharge());
|
PolicyInfos.add(policyInfo);
|
}
|
queryEquipBusinessPolicyResult.setSumPeriod(PolicyInfos.size());
|
queryEquipBusinessPolicyResult.setPolicyInfos(PolicyInfos);
|
//参数加密
|
String jsonString = JacksonUtils.toJson(queryEquipBusinessPolicyResult);
|
log.info("三方平台查询业务策略信息响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台查询业务策略信息响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
|
|
/**
|
* 站点变更推送通知(快电)
|
* @param siteIds
|
* @return
|
*/
|
@PostMapping("/notificationStationChange")
|
public R notificationStationChange(@RequestParam("siteIds") List<Integer> siteIds){
|
Operator operator = operatorClient.getOperatorByName("KuaiDian").getData();
|
NotificationStationChangeResult notificationStationChange = TCECKDUtil.notificationStationChange(operator, 3, siteIds);
|
//启动重试推送机制
|
if(null == notificationStationChange || 1 == notificationStationChange.getSuccStat()){
|
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
|
threadPoolExecutor.execute(new Runnable() {
|
//计数器
|
Integer size = 0;
|
@Override
|
public void run() {
|
NotificationStationChangeResult notificationStationChange1 = TCECKDUtil.notificationStationChange(operator, 3, siteIds);
|
//启动重试推送机制
|
if(null != notificationStationChange1 && 0 == notificationStationChange1.getSuccStat()){
|
threadPoolExecutor.shutdown();
|
return;
|
}
|
size++;
|
if(size >= 5){
|
threadPoolExecutor.shutdown();
|
return;
|
}
|
//间隔一分钟重试一次
|
try {
|
Thread.sleep(60000);
|
} catch (InterruptedException e) {
|
throw new RuntimeException(e);
|
}
|
}
|
});
|
}
|
return R.ok();
|
}
|
|
|
|
|
/**
|
* 请求开始充电
|
* @return
|
*/
|
@PostMapping("/query_start_charge")
|
public BaseResult queryStartCharge(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
log.info("三方平台请求开始充电请求参数:" + JacksonUtils.toJson(baseRequest));
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
log.info("三方平台请求开始充电响应Data:");
|
baseResult.setData("");
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台请求开始充电响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
log.info("三方平台请求开始充电请求Data:" + decrypt);
|
QueryStartCharge queryStartCharge = JSON.parseObject(decrypt, QueryStartCharge.class);
|
|
//构建返回结果
|
QueryStartChargeResult result = new QueryStartChargeResult();
|
result.setStartChargeSeq(queryStartCharge.getStartChargeSeq());
|
result.setConnectorID(queryStartCharge.getConnectorID());
|
String connectorID = queryStartCharge.getConnectorID();
|
TChargingGun tChargingGun = chargingGunClient.getChargingGunByFullNumber(connectorID).getData();
|
//设备不存在
|
if(null == tChargingGun){
|
baseResult.setRet(4004);
|
baseResult.setMsg("connectorID 参数无效");
|
result.setSuccStat(1);
|
result.setFailReason(1);
|
result.setStartChargeSeqStat(5);
|
//参数加密
|
String jsonString = JacksonUtils.toJson(result);
|
log.info("三方平台请求开始充电响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台请求开始充电响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
//设备离线
|
if(tChargingGun.getStatus() == 1){
|
result.setSuccStat(1);
|
result.setFailReason(2);
|
result.setStartChargeSeqStat(5);
|
//参数加密
|
String jsonString = JacksonUtils.toJson(result);
|
log.info("三方平台请求开始充电响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台请求开始充电响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
//调用充电接口
|
AddTripartitePlatformOrder addTripartitePlatformOrder = new AddTripartitePlatformOrder();
|
addTripartitePlatformOrder.setStartChargeSeq(queryStartCharge.getStartChargeSeq());
|
addTripartitePlatformOrder.setChargingGunId(tChargingGun.getId());
|
addTripartitePlatformOrder.setOperatorId(operator.getOperatorId());
|
addTripartitePlatformOrder.setPaymentAmount(null == queryStartCharge.getChargingAmt() ? new BigDecimal(9999) : queryStartCharge.getChargingAmt());
|
addTripartitePlatformOrder.setRechargePaymentType(0);
|
addTripartitePlatformOrder.setPlateNum(queryStartCharge.getPlateNum());
|
R order = chargingOrderClient.addTripartitePlatformOrder(addTripartitePlatformOrder);
|
//启动失败
|
if(200 != order.getCode()){
|
result.setSuccStat(1);
|
result.setFailReason(1);
|
result.setStartChargeSeqStat(2);
|
//参数加密
|
String jsonString = JacksonUtils.toJson(result);
|
log.info("三方平台请求开始充电响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台请求开始充电响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
result.setStartChargeSeqStat(1);
|
result.setSuccStat(0);
|
result.setFailReason(0);
|
//参数加密
|
String jsonString = JacksonUtils.toJson(result);
|
log.info("三方平台请求开始充电响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台请求开始充电响应参数:" + JacksonUtils.toJson(baseResult));
|
|
//定义定时任务推送订单状态
|
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
|
Runnable task = new Runnable() {
|
@Override
|
public void run() {
|
try {
|
TChargingOrder chargingOrder = chargingOrderClient.getChargingOrderByStartChargeSeq(result.getStartChargeSeq()).getData();
|
if(chargingOrder.getStatus() != 3){
|
scheduler.shutdown();
|
return;
|
}
|
log.info("开始执行三方平台定时推送");
|
notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
}
|
};
|
//一分钟执行一次
|
scheduler.scheduleAtFixedRate(task, 10, 10, TimeUnit.SECONDS);
|
return baseResult;
|
}
|
|
|
/**
|
* 启动充电结果推送
|
* @param result
|
* @return
|
*/
|
@PostMapping("/notificationStartChargeResult")
|
public R notificationStartChargeResult(@RequestBody StartChargeResult result){
|
NotificationStartCharge notificationStartCharge = new NotificationStartCharge();
|
BeanUtils.copyProperties(result, notificationStartCharge);
|
Operator operator = operatorClient.getOperator(result.getOperatorID()).getData();
|
com.ruoyi.integration.drainage.model.NotificationStartChargeResult notificationStartChargeResult = TCECUtil.notificationStartChargeResult(operator, notificationStartCharge);
|
//启动重试推送机制
|
if(null == notificationStartChargeResult || 1 == notificationStartChargeResult.getSuccStat()){
|
|
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
|
threadPoolExecutor.execute(new Runnable() {
|
//计数器
|
Integer size = 0;
|
@Override
|
public void run() {
|
NotificationStartChargeResult notificationStartChargeResult1 = TCECUtil.notificationStartChargeResult(operator, notificationStartCharge);
|
//启动重试推送机制
|
if(null != notificationStartChargeResult1 && 0 == notificationStartChargeResult1.getSuccStat()){
|
threadPoolExecutor.shutdown();
|
return;
|
}
|
size++;
|
if(size >= 5){
|
threadPoolExecutor.shutdown();
|
return;
|
}
|
//间隔一分钟重试一次
|
try {
|
Thread.sleep(60000);
|
} catch (InterruptedException e) {
|
throw new RuntimeException(e);
|
}
|
}
|
});
|
}
|
return R.ok();
|
}
|
|
|
|
/**
|
* 查询充电状态
|
* @return
|
*/
|
@PostMapping("/query_equip_charge_status")
|
public BaseResult queryEquipChargeStatus(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
log.info("三方平台查询充电状态请求参数:" + JacksonUtils.toJson(baseRequest));
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
log.info("三方平台查询充电状态响应Data:");
|
baseResult.setData("");
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台查询充电状态响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
log.info("三方平台查询充电状态请求Data:" + decrypt);
|
QueryEquipChargeStatus queryEquipChargeStatus = JSON.parseObject(decrypt, QueryEquipChargeStatus.class);
|
//校验token和签名
|
QueryEquipChargeStatusResult queryEquipChargeStatusResult = buildQueryEquipChargeStatusResult(queryEquipChargeStatus.getStartChargeSeq());
|
//参数加密
|
String jsonString = JacksonUtils.toJson(queryEquipChargeStatusResult);
|
log.info("三方平台查询充电状态响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台查询充电状态响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
|
|
/**
|
* 构建充电状态结果
|
* @param startChargeSeq
|
* @return
|
*/
|
public QueryEquipChargeStatusResult buildQueryEquipChargeStatusResult(String startChargeSeq){
|
//构建返回结果
|
QueryEquipChargeStatusResult queryEquipChargeStatusResult = new QueryEquipChargeStatusResult();
|
queryEquipChargeStatusResult.setStartChargeSeq(startChargeSeq);
|
TChargingOrder chargingOrder = chargingOrderClient.getChargingOrderByStartChargeSeq(startChargeSeq).getData();
|
if(null == chargingOrder){
|
return null;
|
}
|
//0=未知,1=等待中/已插枪,2=启动中,3=充电中,4=停止中,5=已结束
|
switch (chargingOrder.getStatus()){
|
case 0:
|
queryEquipChargeStatusResult.setStartChargeSeqStat(5);
|
break;
|
case 1:
|
queryEquipChargeStatusResult.setStartChargeSeqStat(0);
|
break;
|
case 2:
|
queryEquipChargeStatusResult.setStartChargeSeqStat(1);
|
break;
|
case 3:
|
queryEquipChargeStatusResult.setStartChargeSeqStat(2);
|
break;
|
case 4:
|
queryEquipChargeStatusResult.setStartChargeSeqStat(3);
|
break;
|
case 5:
|
queryEquipChargeStatusResult.setStartChargeSeqStat(4);
|
break;
|
}
|
TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
|
queryEquipChargeStatusResult.setConnectorID(chargingGun.getFullNumber());
|
//1=离线,2=空闲,3=占用(未充电),4=占用(充电中),5=占用(已充满),6=占用(预约锁定),7=故障
|
switch (chargingGun.getStatus()){
|
case 1:
|
queryEquipChargeStatusResult.setConnectorStatus(0);
|
break;
|
case 2:
|
queryEquipChargeStatusResult.setConnectorStatus(1);
|
break;
|
case 3:
|
queryEquipChargeStatusResult.setConnectorStatus(2);
|
break;
|
case 4:
|
queryEquipChargeStatusResult.setConnectorStatus(3);
|
break;
|
case 5:
|
queryEquipChargeStatusResult.setConnectorStatus(1);
|
break;
|
case 6:
|
queryEquipChargeStatusResult.setConnectorStatus(4);
|
break;
|
case 7:
|
queryEquipChargeStatusResult.setConnectorStatus(255);
|
break;
|
}
|
queryEquipChargeStatusResult.setCurrentA(chargingOrder.getCurrent());
|
queryEquipChargeStatusResult.setVoltageA(chargingOrder.getVoltage());
|
UploadRealTimeMonitoringData timeMonitoringData = uploadRealTimeMonitoringDataService.getLastDataById(chargingOrder.getCode());
|
queryEquipChargeStatusResult.setSoc(null == timeMonitoringData ? BigDecimal.ZERO : new BigDecimal(timeMonitoringData.getSoc()));
|
queryEquipChargeStatusResult.setStartTime((null == chargingOrder.getStartTime() ? chargingOrder.getCreateTime() : chargingOrder.getStartTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
queryEquipChargeStatusResult.setEndTime((null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
queryEquipChargeStatusResult.setTotalPower(chargingOrder.getElectricity());
|
|
List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData();
|
if(data.size() > 0){
|
BigDecimal totalElectricity = data.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal serviceCharge = data.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
queryEquipChargeStatusResult.setElecMoney(totalElectricity);
|
queryEquipChargeStatusResult.setSeviceMoney(serviceCharge);
|
queryEquipChargeStatusResult.setTotalMoney(chargingOrder.getPaymentAmount());
|
}else{
|
queryEquipChargeStatusResult.setElecMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount()));
|
queryEquipChargeStatusResult.setSeviceMoney(BigDecimal.ZERO);
|
queryEquipChargeStatusResult.setTotalMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount()));
|
}
|
|
//构建充电明细
|
List<ChargeDetail> chargeDetails = new ArrayList<>();
|
|
LocalDateTime startTime = null == chargingOrder.getStartTime() ? LocalDateTime.now() : chargingOrder.getStartTime();
|
LocalDateTime endTime = null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime();
|
String s_format = startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
String e_format = endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
for (TChargingOrderAccountingStrategy datum : data) {
|
ChargeDetail chargeDetail = new ChargeDetail();
|
if(s_format.equals(e_format)){
|
chargeDetail.setDetailStartTime(s_format + " " + datum.getStartTime() + ":00");
|
chargeDetail.setDetailEndTime(s_format + " " + datum.getEndTime() + ":59");
|
}else{
|
String substring = datum.getEndTime().substring(0, datum.getEndTime().indexOf(":"));
|
if(Integer.valueOf(substring) > 12){
|
chargeDetail.setDetailStartTime(s_format + " " + datum.getStartTime() + ":00");
|
chargeDetail.setDetailEndTime(s_format + " " + datum.getEndTime() + ":59");
|
}else{
|
chargeDetail.setDetailStartTime(e_format + " " + datum.getStartTime() + ":00");
|
chargeDetail.setDetailEndTime(e_format + " " + datum.getEndTime() + ":59");
|
}
|
}
|
chargeDetail.setElecPrice(datum.getElectrovalence());
|
chargeDetail.setSevicePrice(datum.getServiceCharge());
|
chargeDetail.setDetailPower(datum.getChargingCapacity().setScale(2, BigDecimal.ROUND_HALF_UP));
|
chargeDetail.setDetailElecMoney(datum.getPeriodElectricPrice());
|
chargeDetail.setDetailSeviceMoney(datum.getPeriodServicePrice());
|
chargeDetails.add(chargeDetail);
|
}
|
queryEquipChargeStatusResult.setChargeDetails(chargeDetails);
|
return queryEquipChargeStatusResult;
|
}
|
|
|
/**
|
* 推送充电状态
|
* @param startChargeSeq
|
* @return
|
*/
|
@PostMapping("/notificationEquipChargeStatus")
|
public R notificationEquipChargeStatus(@RequestParam(value = "startChargeSeq") String startChargeSeq, @RequestParam(value = "operatorId") Integer operatorId){
|
QueryEquipChargeStatusResult queryEquipChargeStatusResult = buildQueryEquipChargeStatusResult(startChargeSeq);
|
Operator operator = operatorClient.getOperatorById(operatorId).getData();
|
NotificationEquipChargeStatusResult notificationEquipChargeStatusResult = TCECUtil.notificationEquipChargeStatus(operator, queryEquipChargeStatusResult);
|
//启动重试推送机制
|
if(null == notificationEquipChargeStatusResult || 1 == notificationEquipChargeStatusResult.getSuccStat()){
|
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
|
threadPoolExecutor.execute(new Runnable() {
|
//计数器
|
Integer size = 0;
|
@Override
|
public void run() {
|
NotificationEquipChargeStatusResult notificationEquipChargeStatusResult1 = TCECUtil.notificationEquipChargeStatus(operator, queryEquipChargeStatusResult);
|
//启动重试推送机制
|
if(null != notificationEquipChargeStatusResult1 && 0 == notificationEquipChargeStatusResult1.getSuccStat()){
|
threadPoolExecutor.shutdown();
|
return;
|
}
|
size++;
|
if(size >= 5){
|
threadPoolExecutor.shutdown();
|
return;
|
}
|
//间隔一分钟重试一次
|
try {
|
Thread.sleep(60000);
|
} catch (InterruptedException e) {
|
throw new RuntimeException(e);
|
}
|
}
|
});
|
}
|
return R.ok();
|
}
|
|
|
/**
|
* 请求停止充电
|
* @return
|
*/
|
@PostMapping("/query_stop_charge")
|
public BaseResult queryStopCharge(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
log.info("三方平台请求停止充电请求参数:" + JacksonUtils.toJson(baseRequest));
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
log.info("三方平台请求停止充电响应Data:");
|
baseResult.setData("");
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台请求停止充电响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
log.info("三方平台请求停止充电请求Data:" + decrypt);
|
QueryStopCharge queryStopCharge = JSON.parseObject(decrypt, QueryStopCharge.class);
|
QueryStopChargeResult queryStopChargeResult = new QueryStopChargeResult();
|
queryStopChargeResult.setStartChargeSeq(queryStopCharge.getStartChargeSeq());
|
queryStopChargeResult.setStartChargeSeqStat(3);
|
queryStopChargeResult.setSuccStat(0);
|
queryStopChargeResult.setFailReason(0);
|
//执行停机操作
|
R r = chargingOrderClient.tripartitePlatformStopCharge(queryStopCharge.getStartChargeSeq());
|
if(200 != r.getCode()){
|
queryStopChargeResult.setStartChargeSeqStat(5);
|
queryStopChargeResult.setSuccStat(1);
|
queryStopChargeResult.setFailReason(3);
|
//参数加密
|
String jsonString = JacksonUtils.toJson(queryStopChargeResult);
|
log.info("三方平台请求停止充电响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台请求停止充电响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
//参数加密
|
String jsonString = JacksonUtils.toJson(queryStopChargeResult);
|
log.info("三方平台请求停止充电响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台请求停止充电响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
|
|
|
/**
|
* 推送停止充电结果
|
* @param startChargeSeq 充电订单号
|
* @param connectorID 充电设备接口编码
|
* @return
|
*/
|
@PostMapping("/notificationStopChargeResult")
|
public R notificationStopChargeResult(@RequestParam("startChargeSeq") String startChargeSeq, @RequestParam("connectorID") String connectorID,
|
@RequestParam("operatorId") Integer operatorId){
|
Operator operator = operatorClient.getOperatorById(operatorId).getData();
|
NotificationStopChargeResult info = new NotificationStopChargeResult();
|
info.setStartChargeSeq(startChargeSeq);
|
info.setStartChargeSeqStat(4);
|
info.setConnectorID(connectorID);
|
info.setSuccStat(0);
|
info.setFailReason(0);
|
NotificationStopCharge notificationStopCharge = TCECUtil.notificationStopChargeResult(operator, info);
|
//启动重试推送机制
|
if(null == notificationStopCharge || 1 == notificationStopCharge.getSuccStat()){
|
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
|
threadPoolExecutor.execute(new Runnable() {
|
//计数器
|
Integer size = 0;
|
@Override
|
public void run() {
|
NotificationStopCharge notificationStopCharge1 = TCECUtil.notificationStopChargeResult(operator, info);
|
//启动重试推送机制
|
if(null != notificationStopCharge1 && 0 == notificationStopCharge1.getSuccStat()){
|
threadPoolExecutor.shutdown();
|
return;
|
}
|
size++;
|
if(size >= 5){
|
threadPoolExecutor.shutdown();
|
return;
|
}
|
//间隔一分钟重试一次
|
try {
|
Thread.sleep(60000);
|
} catch (InterruptedException e) {
|
throw new RuntimeException(e);
|
}
|
}
|
});
|
}
|
return R.ok();
|
}
|
|
|
/**
|
* 推送订单信息
|
* @param startChargeSeq
|
* @return
|
*/
|
@PostMapping("/notificationChargeOrderInfo")
|
public R notificationChargeOrderInfo(@RequestParam("startChargeSeq") String startChargeSeq, @RequestParam("operatorId") Integer operatorId){
|
NotificationChargeOrderInfo info = buildNotificationChargeOrderInfo(startChargeSeq);
|
Operator operator = operatorClient.getOperatorById(operatorId).getData();
|
NotificationChargeOrderInfoResult notificationChargeOrderInfoResult = TCECUtil.notificationChargeOrderInfo(operator, info);
|
//启动重试推送机制
|
if(null == notificationChargeOrderInfoResult || 1 == notificationChargeOrderInfoResult.getConfirmResult()){
|
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
|
threadPoolExecutor.execute(new Runnable() {
|
//计数器
|
Integer size = 0;
|
@Override
|
public void run() {
|
NotificationChargeOrderInfoResult notificationChargeOrderInfoResult1 = TCECUtil.notificationChargeOrderInfo(operator, info);
|
//启动重试推送机制
|
if(null != notificationChargeOrderInfoResult1 && 0 == notificationChargeOrderInfoResult1.getConfirmResult()){
|
threadPoolExecutor.shutdown();
|
return;
|
}
|
size++;
|
if(size >= 5){
|
threadPoolExecutor.shutdown();
|
return;
|
}
|
//间隔一分钟重试一次
|
try {
|
Thread.sleep(60000);
|
} catch (InterruptedException e) {
|
throw new RuntimeException(e);
|
}
|
}
|
});
|
}
|
return R.ok();
|
}
|
|
|
/**
|
* 构建推送订单信息
|
* @param startChargeSeq
|
* @return
|
*/
|
public NotificationChargeOrderInfo buildNotificationChargeOrderInfo(String startChargeSeq){
|
//构建返回结果
|
NotificationChargeOrderInfo notificationChargeOrderInfo = new NotificationChargeOrderInfo();
|
notificationChargeOrderInfo.setStartChargeSeq(startChargeSeq);
|
TChargingOrder chargingOrder = chargingOrderClient.getChargingOrderByStartChargeSeq(startChargeSeq).getData();
|
if(null == chargingOrder){
|
log.info("三方平台流水号获取订单失败");
|
return null;
|
}
|
TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
|
notificationChargeOrderInfo.setConnectorID(chargingGun.getFullNumber());
|
notificationChargeOrderInfo.setStartTime((null == chargingOrder.getStartTime() ? chargingOrder.getCreateTime() : chargingOrder.getStartTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
notificationChargeOrderInfo.setEndTime((null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
notificationChargeOrderInfo.setTotalPower(chargingOrder.getElectricity());
|
|
List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData();
|
if(data.size() > 0){
|
BigDecimal totalElectricity = data.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal serviceCharge = data.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
notificationChargeOrderInfo.setTotalElecMoney(totalElectricity.setScale(2, RoundingMode.HALF_EVEN));
|
notificationChargeOrderInfo.setTotalSeviceMoney(serviceCharge.setScale(2, RoundingMode.HALF_EVEN));
|
notificationChargeOrderInfo.setTotalMoney(chargingOrder.getPaymentAmount());
|
}else{
|
notificationChargeOrderInfo.setTotalElecMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount()));
|
notificationChargeOrderInfo.setTotalSeviceMoney(BigDecimal.ZERO);
|
notificationChargeOrderInfo.setTotalMoney(chargingOrder.getRechargeAmount().subtract(chargingOrder.getResidualAmount()));
|
}
|
|
|
TParkingRecord parkingRecord = parkingRecordClient.getParkingRecordByChargingOrderId(chargingOrder.getId()).getData();
|
if(null != parkingRecord && parkingRecord.getStatus() == 3){
|
notificationChargeOrderInfo.setTotalDelayMoney(parkingRecord.getPayment());
|
}
|
|
//结束方式(0=异常终止,1=主动终止,2=满电终止,3=费用不足终止)
|
switch (chargingOrder.getEndMode()){
|
case 0:
|
notificationChargeOrderInfo.setStopReason(3);
|
break;
|
case 1:
|
notificationChargeOrderInfo.setStopReason(0);
|
break;
|
case 2:
|
notificationChargeOrderInfo.setStopReason(2);
|
break;
|
case 3:
|
notificationChargeOrderInfo.setStopReason(5);
|
break;
|
}
|
|
//构建充电明细
|
List<ChargeDetail> chargeDetails = new ArrayList<>();
|
|
LocalDateTime startTime = null == chargingOrder.getStartTime() ? LocalDateTime.now() : chargingOrder.getStartTime();
|
LocalDateTime endTime = null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime();
|
String s_format = startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
String e_format = endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
for (TChargingOrderAccountingStrategy datum : data) {
|
ChargeDetail chargeDetail = new ChargeDetail();
|
if(s_format.equals(e_format)){
|
chargeDetail.setDetailStartTime(s_format + " " + datum.getStartTime() + ":00");
|
chargeDetail.setDetailEndTime(s_format + " " + datum.getEndTime() + ":59");
|
}else{
|
String substring = datum.getEndTime().substring(0, datum.getEndTime().indexOf(":"));
|
if(Integer.valueOf(substring) > 12){
|
chargeDetail.setDetailStartTime(s_format + " " + datum.getStartTime() + ":00");
|
chargeDetail.setDetailEndTime(s_format + " " + datum.getEndTime() + ":59");
|
}else{
|
chargeDetail.setDetailStartTime(e_format + " " + datum.getStartTime() + ":00");
|
chargeDetail.setDetailEndTime(e_format + " " + datum.getEndTime() + ":59");
|
}
|
}
|
chargeDetail.setElecPrice(datum.getElectrovalence());
|
chargeDetail.setSevicePrice(datum.getServiceCharge());
|
chargeDetail.setDetailPower(datum.getChargingCapacity().setScale(2, BigDecimal.ROUND_HALF_UP));
|
chargeDetail.setDetailElecMoney(datum.getPeriodElectricPrice());
|
chargeDetail.setDetailSeviceMoney(datum.getPeriodServicePrice());
|
chargeDetails.add(chargeDetail);
|
}
|
notificationChargeOrderInfo.setChargeDetails(chargeDetails);
|
return notificationChargeOrderInfo;
|
}
|
|
|
/**
|
* 二维码查询枪号(快电)
|
* @param baseRequest
|
* @param request
|
* @return
|
*/
|
@PostMapping("/query_terminal_code")
|
public BaseResult queryTerminalCode(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
log.info("三方平台二维码查询枪号请求参数:" + JacksonUtils.toJson(baseRequest));
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
log.info("三方平台二维码查询枪号响应Data:");
|
baseResult.setData("");
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台二维码查询枪号响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
log.info("三方平台二维码查询枪号请求Data:" + decrypt);
|
QueryTerminalCode queryTerminalCode = JSON.parseObject(decrypt, QueryTerminalCode.class);
|
String qrCode = queryTerminalCode.getQRCode();
|
String substring = qrCode.substring(qrCode.indexOf("=") + 1);
|
TChargingGun chargingGun = chargingGunClient.getChargingGunByFullNumber(substring).getData();
|
QueryTerminalCodeResult queryTerminalCodeResult = new QueryTerminalCodeResult();
|
if(null != chargingGun){
|
queryTerminalCodeResult.setTerminalCode(chargingGun.getId().toString());
|
}
|
|
//参数加密
|
String jsonString = JacksonUtils.toJson(queryTerminalCodeResult);
|
log.info("三方平台二维码查询枪号响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台二维码查询枪号响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
|
|
/**
|
* 推送充电车牌号
|
* 客户归属运营商向设备运营商推送充电用户车牌号减免停车费,多次推送以最后一次车牌号为准
|
* @param baseRequest
|
* @param request
|
* @return
|
*/
|
@PostMapping("/notification_charge_carnum")
|
public BaseResult notificationChargeCarnum(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
baseResult.setData("");
|
baseResult.setSig(TCECUtil.buildSign(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
|
NotificationChargeCarnum notificationChargeCarnum = JSON.parseObject(decrypt, NotificationChargeCarnum.class);
|
|
NotificationChargeCarnumResult notificationChargeCarnumResult = new NotificationChargeCarnumResult();
|
notificationChargeCarnumResult.setStartChargeSeqs(notificationChargeCarnum.getStartChargeSeqs());
|
notificationChargeCarnumResult.setSuccStat(0);
|
notificationChargeCarnumResult.setFailReason(0);
|
TChargingOrder chargingOrder = chargingOrderClient.getChargingOrderByStartChargeSeq(notificationChargeCarnum.getStartChargeSeqs()).getData();
|
if(null == chargingOrder){
|
notificationChargeCarnumResult.setSuccStat(1);
|
notificationChargeCarnumResult.setFailReason(1);
|
}else{
|
//待处理相关业务逻辑
|
}
|
//参数加密
|
String jsonString = JacksonUtils.toJson(notificationChargeCarnumResult);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.buildSign(baseResult));
|
return baseResult;
|
}
|
|
|
/**
|
* 账单拉取(快电)
|
* @param baseRequest
|
* @param request
|
* @return
|
*/
|
@PostMapping("/query_charge_order_info")
|
public BaseResult queryChargeOrderInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
log.info("三方平台账单拉取请求参数:" + JacksonUtils.toJson(baseRequest));
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
log.info("三方平台账单拉取响应Data:");
|
baseResult.setData("");
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台账单拉取响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
log.info("三方平台账单拉取请求Data:" + decrypt);
|
QueryChargeOrderInfo queryChargeOrderInfo = JSON.parseObject(decrypt, QueryChargeOrderInfo.class);
|
//构建返回结果
|
QueryChargeOrderInfoResult result = buildQueryChargeOrderInfoResult(queryChargeOrderInfo);
|
//参数加密
|
String jsonString = JacksonUtils.toJson(result);
|
log.info("三方平台账单拉取响应Data:" + jsonString);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(TCECUtil.ourBuildSign(baseResult));
|
log.info("三方平台账单拉取响应参数:" + JacksonUtils.toJson(baseResult));
|
return baseResult;
|
}
|
|
|
|
/**
|
* 构建充电账单拉取实体
|
* @param queryChargeOrderInfo
|
* @return
|
*/
|
public QueryChargeOrderInfoResult buildQueryChargeOrderInfoResult(QueryChargeOrderInfo queryChargeOrderInfo){
|
//构建返回结果
|
QueryChargeOrderInfoResult queryChargeOrderInfoResult = new QueryChargeOrderInfoResult();
|
List<OrderInfo> orderInfos = new ArrayList<>();
|
List<String> startChargeSeqs = queryChargeOrderInfo.getStartChargeSeqs();
|
List<TChargingOrder> chargingOrders = chargingOrderClient.getChargingOrderByStartChargeSeqs(startChargeSeqs).getData();
|
for (TChargingOrder chargingOrder : chargingOrders) {
|
if(null == chargingOrder){
|
return null;
|
}
|
TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
|
OrderInfo orderInfo = new OrderInfo();
|
orderInfo.setStartChargeSeq(chargingOrder.getStartChargeSeq());
|
orderInfo.setConnectorID(chargingGun.getFullNumber());
|
orderInfo.setStartTime((null == chargingOrder.getStartTime() ? chargingOrder.getCreateTime() : chargingOrder.getStartTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
orderInfo.setEndTime((null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
orderInfo.setTotalPower(chargingOrder.getTotalElectricity());
|
orderInfo.setTotalElecMoney(chargingOrder.getElectrovalence());
|
orderInfo.setTotalSeviceMoney(chargingOrder.getServiceCharge());
|
orderInfo.setTotalMoney(chargingOrder.getTotalElectricity().add(chargingOrder.getServiceCharge()));
|
//结束方式(0=异常终止,1=主动终止,2=满电终止,3=费用不足终止)
|
switch (chargingOrder.getEndMode()){
|
case 0:
|
orderInfo.setStopReason(3);
|
break;
|
case 1:
|
orderInfo.setStopReason(0);
|
break;
|
case 2:
|
orderInfo.setStopReason(2);
|
break;
|
case 3:
|
orderInfo.setStopReason(4);
|
break;
|
}
|
//构建充电明细
|
List<ChargeDetail> chargeDetails = new ArrayList<>();
|
List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData();
|
|
LocalDateTime startTime = chargingOrder.getStartTime();
|
LocalDateTime endTime = null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime();
|
String s_format = startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
String e_format = endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
for (TChargingOrderAccountingStrategy datum : data) {
|
ChargeDetail chargeDetail = new ChargeDetail();
|
if(s_format.equals(e_format)){
|
chargeDetail.setDetailStartTime(s_format + " " + datum.getStartTime() + ":00");
|
chargeDetail.setDetailEndTime(s_format + " " + datum.getEndTime() + ":59");
|
}else{
|
String substring = datum.getEndTime().substring(0, datum.getEndTime().indexOf(":"));
|
if(Integer.valueOf(substring) > 12){
|
chargeDetail.setDetailStartTime(s_format + " " + datum.getStartTime() + ":00");
|
chargeDetail.setDetailEndTime(s_format + " " + datum.getEndTime() + ":59");
|
}else{
|
chargeDetail.setDetailStartTime(e_format + " " + datum.getStartTime() + ":00");
|
chargeDetail.setDetailEndTime(e_format + " " + datum.getEndTime() + ":59");
|
}
|
}
|
chargeDetail.setElecPrice(datum.getElectrovalence());
|
chargeDetail.setSevicePrice(datum.getServiceCharge());
|
chargeDetail.setDetailPower(datum.getChargingCapacity().setScale(2, BigDecimal.ROUND_HALF_EVEN));
|
chargeDetail.setDetailElecMoney(datum.getPeriodElectricPrice());
|
chargeDetail.setDetailSeviceMoney(datum.getPeriodServicePrice());
|
chargeDetails.add(chargeDetail);
|
}
|
orderInfo.setChargeDetails(chargeDetails);
|
orderInfos.add(orderInfo);
|
}
|
queryChargeOrderInfoResult.setOrderInfos(orderInfos);
|
return queryChargeOrderInfoResult;
|
}
|
|
|
|
/*********************数据监管平台接口*********************/
|
/**
|
* 查询运营商信息
|
* @param baseRequest
|
* @param request
|
* @return
|
*/
|
@PostMapping("/supervise_query_operator_info")
|
public BaseResult superviseQueryOperatorInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV);
|
log.info("监管平台查询充电站信息请求Data:" + decrypt);
|
SuperviseQueryOperatorInfo superviseQueryOperatorInfo = JSON.parseObject(decrypt, SuperviseQueryOperatorInfo.class);
|
Integer pageNo = superviseQueryOperatorInfo.getPageNo();
|
Integer pageSize = superviseQueryOperatorInfo.getPageSize();
|
if(null == pageNo){
|
pageNo = 1;
|
}
|
if(null == pageSize){
|
pageSize = 50;
|
}
|
String operatorTel = systemConfigurationClient.getServerPhone().getData();
|
SuperviseQueryOperatorInfoResultPage superviseQueryOperatorInfoResultPage = new SuperviseQueryOperatorInfoResultPage();
|
superviseQueryOperatorInfoResultPage.setPageNo(1);
|
superviseQueryOperatorInfoResultPage.setPageCount(1);
|
superviseQueryOperatorInfoResultPage.setItemSize(1);
|
|
SuperviseQueryOperatorInfoResult superviseQueryOperatorInfoResult = new SuperviseQueryOperatorInfoResult();
|
superviseQueryOperatorInfoResult.setOperatorID("906171535");
|
superviseQueryOperatorInfoResult.setOperatorUSCID("91510903906171535D");
|
superviseQueryOperatorInfoResult.setOperatorName("四川明星新能源科技有限公司");
|
superviseQueryOperatorInfoResult.setOperatorTel1(operatorTel);
|
List<SuperviseQueryOperatorInfoResult> superviseQueryOperatorInfoResults = new ArrayList<>();
|
superviseQueryOperatorInfoResults.add(superviseQueryOperatorInfoResult);
|
// 将superviseQueryOperatorInfoResults转化为json数组
|
superviseQueryOperatorInfoResultPage.setOperatorInfos(superviseQueryOperatorInfoResults);
|
String jsonString = JacksonUtils.toJson(superviseQueryOperatorInfoResultPage);
|
String timeStamp = System.currentTimeMillis() + "";
|
SequenceGenerator generator = new SequenceGenerator();
|
String nextSequence = generator.getNextSequence();
|
String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(superviseQueryOperatorInfoResultPage));
|
String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret);
|
BaseResult baseResult = new BaseResult();
|
baseResult.setData(data);
|
baseResult.setSig(hmacMD5);
|
baseResult.setRet(0);
|
baseResult.setMsg("OK");
|
baseResult.setOperatorID(OperatorID);
|
return baseResult;
|
}
|
|
|
|
/**
|
* 查询充电站信息
|
* @param baseRequest
|
* @param request
|
* @return
|
*/
|
@PostMapping("/supervise_query_stations_info")
|
public BaseResult superviseQueryStationsInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV);
|
log.info("监管平台supervise_query_stations_infoData:" + decrypt);
|
//解密参数
|
QueryStationsInfo queryStationsInfo = JSON.parseObject(decrypt, QueryStationsInfo.class);
|
Integer pageNo = queryStationsInfo.getPageNo();
|
Integer pageSize = queryStationsInfo.getPageSize();
|
List<String> stationIDs = queryStationsInfo.getStationIDs();
|
if(null == pageNo){
|
pageNo = 1;
|
}
|
if(null == pageSize){
|
pageSize = 50;
|
}
|
PageInfo<Site> siteListPaging = siteClient.getSiteListPaging(pageNo, pageSize, stationIDs);
|
List<TParkingLot> parkingLots = parkingLotClient.getAllParkingLot().getData();
|
QueryStationsInfoResult queryStationsInfoResult = new QueryStationsInfoResult();
|
queryStationsInfoResult.setPageNo(pageNo);
|
queryStationsInfoResult.setPageCount((0 == (siteListPaging.getTotal() % pageSize) ? 0 : 1) + Double.valueOf(siteListPaging.getTotal() / pageSize).intValue());
|
queryStationsInfoResult.setItemSize(Long.valueOf(siteListPaging.getTotal()).intValue());
|
queryStationsInfoResult.setStationInfos(buildSite(parkingLots, siteListPaging.getRecords()));
|
String timeStamp = System.currentTimeMillis() + "";
|
SequenceGenerator generator = new SequenceGenerator();
|
String nextSequence = generator.getNextSequence();
|
String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(queryStationsInfoResult));
|
String hmacMD5 = HMacMD5Util.getHMacMD5(OurOperatorID,timeStamp, data,nextSequence,OurSigSecret);
|
BaseResult baseResult = new BaseResult();
|
baseResult.setData(data);
|
baseResult.setSig(hmacMD5);
|
baseResult.setRet(0);
|
baseResult.setMsg("OK");
|
baseResult.setOperatorID(OurOperatorID);
|
return baseResult;
|
}
|
/**
|
* 查询充换电站状态信息
|
* @param baseRequest
|
* @param request
|
* @return
|
*/
|
@PostMapping("/supervise_query_station_status")
|
public BaseResult superviseQueryStationStatus(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
log.info("监管平台查询充换电站状态信息请求参数:" + JacksonUtils.toJson(baseRequest));
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV);
|
log.info("监管平台supervise_query_station_statusData:" + decrypt);
|
//解密参数
|
log.info("监管平台查询充换电站状态信息请求Data:" + decrypt);
|
QueryStationStatus queryStationStatus = JSON.parseObject(decrypt, QueryStationStatus.class);
|
List<String> stationIDs = queryStationStatus.getStationIDs();
|
String operatorID = queryStationStatus.getOperatorID();
|
|
List<Integer> stationIDList = new ArrayList<>();
|
for (String stationID : stationIDs) {
|
stationIDList.add(Integer.valueOf(stationID));
|
}
|
|
QueryStationStatusResult queryStationStatusResult = new QueryStationStatusResult();
|
List<StationStatusInfo> stationStatusInfos = new ArrayList<>();
|
|
// 查询站点下的桩信息状态
|
List<TChargingPile> chargingPiles = chargingPileClient.getChargingPileBySiteIds(stationIDList).getData();
|
if(!CollectionUtils.isEmpty(chargingPiles)){
|
List<Integer> pileIds = chargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
|
List<TChargingGun> chargingGuns = chargingGunClient.getChargingGunByChargingPileIds(pileIds).getData();
|
if(!CollectionUtils.isEmpty(chargingGuns)){
|
for (Integer stationID : stationIDList) {
|
StationStatusInfo stationStatusInfo = new StationStatusInfo();
|
stationStatusInfo.setOperatorID(operatorID);
|
stationStatusInfo.setEquipmentOwnerID(operatorId);
|
stationStatusInfo.setStationID(String.valueOf(stationID));
|
List<ConnectorStatusInfo> connectorStatusInfos = new ArrayList<>();
|
for (TChargingGun chargingGun : chargingGuns) {
|
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());
|
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()));
|
connectorStatusInfos.add(connectorStatusInfo);
|
}
|
stationStatusInfo.setConnectorStatusInfos(connectorStatusInfos);
|
stationStatusInfos.add(stationStatusInfo);
|
}
|
}
|
queryStationStatusResult.setStationStatusInfos(stationStatusInfos);
|
}
|
String timeStamp = System.currentTimeMillis() + "";
|
SequenceGenerator generator = new SequenceGenerator();
|
String nextSequence = generator.getNextSequence();
|
String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(queryStationStatusResult));
|
String hmacMD5 = HMacMD5Util.getHMacMD5(OurOperatorID,timeStamp, data,nextSequence,OurSigSecret);
|
BaseResult baseResult = new BaseResult();
|
baseResult.setData(data);
|
baseResult.setSig(hmacMD5);
|
baseResult.setRet(0);
|
baseResult.setMsg("OK");
|
baseResult.setOperatorID(OurOperatorID);
|
return baseResult;
|
}
|
|
// 测试环境
|
private static final String OperatorID = "MA01H3BQ2";
|
private static final String OperatorSecret = "f1331ef0b37c2d1b";
|
private static final String SigSecret = "a6fedf0e1b27d6f7";
|
private static final String DataSecret = "50a61b93919c9604";
|
private static final String DataSecretIV = "7c8ac6861661d584";
|
|
private static final String OurDataSecret = "50a61b93919c9605";
|
private static final String OurDataSecretIV = "7c8ac6861661d585";
|
private static final String OurSigSecret = "a6fedf0e1b27d6f6";
|
private static final String OurOperatorID = "MA01H3BQ3";
|
private static final String OurOperatorSecret = "f1331ef0b37c2d1a";
|
|
|
|
|
/**
|
* 推送充电设备接口状态信息
|
* @param chargingGun
|
* @return
|
*/
|
public R pushSuperviseNotificationStationStatus(TChargingGun chargingGun){
|
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());
|
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()));
|
List<Operator> operators = operatorClient.getAllOperator().getData();
|
for (Operator operator : operators) {
|
tcecSuperviseUtil.notificationStationStatus(operator, connectorStatusInfo);
|
}
|
return R.ok();
|
}
|
/**
|
* 推送充电状态信息
|
* @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();
|
}
|
/**
|
* 推送充电订单信息
|
* @param chargingOrder
|
* @return
|
*/
|
public R pushSuperviseNotificationChargeOrderInfo(TChargingOrder chargingOrder){
|
SupChargeOrderInfo supChargeOrderInfo = new SupChargeOrderInfo();
|
supChargeOrderInfo.setOperatorID(operatorId);
|
supChargeOrderInfo.setEquipmentOwnerID(operatorId);
|
supChargeOrderInfo.setStationID(String.valueOf(chargingOrder.getSiteId()));
|
supChargeOrderInfo.setEquipmentID(String.valueOf(chargingOrder.getChargingPileId()));
|
supChargeOrderInfo.setOrderNo(operatorId+chargingOrder.getCode());
|
TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
|
supChargeOrderInfo.setConnectorID(chargingGun.getFullNumber());
|
supChargeOrderInfo.setEquipmentClassification(1);
|
supChargeOrderInfo.setPushTimeStamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
supChargeOrderInfo.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
|
supChargeOrderInfo.setEndTime(chargingOrder.getEndTime() != null ? chargingOrder.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
|
supChargeOrderInfo.setTotalPower(chargingOrder.getElectrovalence());
|
supChargeOrderInfo.setTotalElecMoney(chargingOrder.getElectrovalence());
|
supChargeOrderInfo.setTotalServiceMoney(chargingOrder.getServiceCharge());
|
supChargeOrderInfo.setTotalMoney(chargingOrder.getOrderAmount());
|
switch (chargingOrder.getEndMode()){
|
case 0:
|
supChargeOrderInfo.setStopReason(5);
|
supChargeOrderInfo.setStopDesc("异常终止");
|
break;
|
case 1:
|
supChargeOrderInfo.setStopReason(0);
|
supChargeOrderInfo.setStopDesc("用户手动停止充电");
|
break;
|
case 2:
|
supChargeOrderInfo.setStopReason(1);
|
supChargeOrderInfo.setStopDesc("客户归属地运营商平台停止充电");
|
break;
|
case 3:
|
supChargeOrderInfo.setStopReason(1);
|
supChargeOrderInfo.setStopDesc("费用不足中止");
|
break;
|
}
|
|
List<Operator> operators = operatorClient.getAllOperator().getData();
|
for (Operator operator : operators) {
|
tcecSuperviseUtil.notificationChargeOrderInfo(operator, supChargeOrderInfo);
|
}
|
return R.ok();
|
}
|
|
|
|
//
|
//
|
// /**
|
// * 构建站点数据
|
// * @param sites
|
// * @return
|
// */
|
// public List<StationInfo> superviseBuildSite(List<TParkingLot> parkingLots, List<Site> sites){
|
// List<Integer> siteIds = sites.stream().map(Site::getId).collect(Collectors.toList());
|
// List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData();
|
// List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
|
// List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
|
// String serviceTel = systemConfigurationClient.getServerPhone().getData();
|
// List<StationInfo> StationInfos = new ArrayList<>();
|
// for (Site datum : sites) {
|
// StationInfo stationInfo = new StationInfo();
|
// stationInfo.setStationID(datum.getId().toString());
|
// stationInfo.setStationUniqueNumber(datum.getDistrictsCode() + "906171535" + datum.getId());
|
// stationInfo.setOperatorID("906171535");
|
// stationInfo.setEquipmentOwnerID("906171535");
|
// stationInfo.setStationName(datum.getName());
|
// stationInfo.setCountryCode(StringUtils.isNotEmpty(datum.getCountryCode()) ? datum.getCountryCode() : "CN");
|
// stationInfo.setAreaCode(datum.getDistrictsCode());
|
// stationInfo.setAreaCodeCountryside();
|
// stationInfo.setAddress(datum.getAddress());
|
// stationInfo.setStationTel(datum.getPhone());
|
// stationInfo.setServiceTel(serviceTel);
|
// switch (datum.getSiteType()){
|
// case 0:
|
// stationInfo.setStationType(StationTypeEnum.OTHER.getType());
|
// break;
|
// case 1:
|
// stationInfo.setStationType(StationTypeEnum.PUBLIC.getType());
|
// break;
|
// case 2:
|
// stationInfo.setStationType(StationTypeEnum.PERSONAGE.getType());
|
// break;
|
// case 3:
|
// stationInfo.setStationType(StationTypeEnum.BUS_SPECIFIC.getType());
|
// break;
|
// case 4:
|
// stationInfo.setStationType(StationTypeEnum.SANITATION_SPECIFIC.getType());
|
// break;
|
// case 5:
|
// stationInfo.setStationType(StationTypeEnum.LOGISTICS_SPECIFIC.getType());
|
// break;
|
// case 6:
|
// stationInfo.setStationType(StationTypeEnum.TEXT_SPECIFIC.getType());
|
// break;
|
// }
|
// if(datum.getStatus() == 1){
|
// stationInfo.setStationStatus(StationStatusEnum.NORMAL_USE.getStatus());
|
// }
|
// if(datum.getStatus() == 2){
|
// stationInfo.setStationStatus(StationStatusEnum.MAINTAIN.getStatus());
|
// }
|
// if(datum.getStatus() == 3){
|
// stationInfo.setStationStatus(StationStatusEnum.OFF_LINE.getStatus());
|
// }
|
// stationInfo.setParkNums(datum.getParkingSpace());
|
// stationInfo.setStationLat(new BigDecimal(datum.getLat()).setScale(6, RoundingMode.DOWN));
|
// stationInfo.setStationLng(new BigDecimal(datum.getLon()).setScale(6, RoundingMode.DOWN));
|
// stationInfo.setConstruction(datum.getConstructionSite() == 0 ? ConstructionEnum.OTHER.getType() : datum.getConstructionSite());
|
// stationInfo.setPictures(StringUtils.isNotEmpty(datum.getImgUrl()) ? Arrays.asList(datum.getImgUrl().split(",")) : new ArrayList<>());
|
// stationInfo.setSiteGuide(datum.getGuide());
|
// stationInfo.setMatchCars(datum.getVehicleDescription());
|
// stationInfo.setBusineHours(datum.getStartServiceTime() + "-" + datum.getEndServiceTime());
|
// stationInfo.setElectricityFee(datum.getRateDescription());
|
// //添加停车费信息
|
// Optional<TParkingLot> first = parkingLots.stream().filter(s -> s.getSiteId().equals(datum.getId())).findFirst();
|
// if(first.isPresent()){
|
// TParkingLot tParkingLot = first.get();
|
// superviseBuildPlaceHolder(tParkingLot, stationInfo);
|
// }
|
//
|
// //构建充电设备信息数据
|
// stationInfo.setEquipmentInfos(superviseBuildEquipmentInfo(datum.getId(), tChargingPiles, chargingGunList));
|
// StationInfos.add(stationInfo);
|
//
|
// }
|
// return StationInfos;
|
// }
|
//
|
//
|
// /**
|
// * 构建停车费信息
|
// * @param tParkingLot
|
// * @param stationInfo
|
// */
|
// public void superviseBuildPlaceHolder(TParkingLot tParkingLot, StationInfo stationInfo){
|
// stationInfo.setOvertimeFee(tParkingLot.getName() + "停车费");
|
// PlaceHolder placeHolder = new PlaceHolder();
|
// placeHolder.setFreeTime(tParkingLot.getChargeFreeDuration());
|
// placeHolder.setMaxFee(tParkingLot.getChargeCapping());
|
// List<PlaceHolderPrice> PlaceHolderPrices = new ArrayList<>();
|
// PlaceHolderPrice placeHolderPrice = new PlaceHolderPrice();
|
// placeHolderPrice.setStartTime("00:00");
|
// placeHolderPrice.setEndTime("23:59");
|
// placeHolderPrice.setPrice(tParkingLot.getChargeRate());
|
// PlaceHolderPrices.add(placeHolderPrice);
|
// placeHolder.setPlaceHolderPrices(PlaceHolderPrices);
|
// stationInfo.setPlaceHolder(placeHolder);
|
// }
|
//
|
//
|
//
|
//
|
// /**
|
// * 构建桩数据
|
// * @param tChargingPiles
|
// * @return
|
// */
|
// public List<EquipmentInfo> superviseBuildEquipmentInfo(Integer siteId, List<TChargingPile> tChargingPiles, List<TChargingGun> chargingGunList){
|
// List<EquipmentInfo> equipmentInfos = new ArrayList<>();
|
// List<TChargingPile> collect = tChargingPiles.stream().filter(s -> s.getSiteId().equals(siteId)).collect(Collectors.toList());
|
// for (TChargingPile tChargingPile : collect) {
|
// EquipmentInfo equipmentInfo = new EquipmentInfo();
|
// equipmentInfo.setEquipmentID(tChargingPile.getId().toString());
|
// equipmentInfo.setManufacturerID(tChargingPile.getManufacturerCode());
|
// equipmentInfo.setManufacturerName(tChargingPile.getManufacturer());
|
// equipmentInfo.setEquipmentModel(tChargingPile.getEquipmentType());
|
// if(null != tChargingPile.getProductionDate()){
|
// equipmentInfo.setProductionDate(tChargingPile.getProductionDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
// }
|
// switch (tChargingPile.getType()){
|
// case 0:
|
// equipmentInfo.setEquipmentType(EquipmentTypeEnum.OTHER.getType());
|
// break;
|
// case 1:
|
// equipmentInfo.setEquipmentType(EquipmentTypeEnum.DIRECT_CURRENT.getType());
|
// break;
|
// case 2:
|
// equipmentInfo.setEquipmentType(EquipmentTypeEnum.ALTERNATING_CURRENT.getType());
|
// break;
|
// case 3:
|
// equipmentInfo.setEquipmentType(EquipmentTypeEnum.ALTERNATING_DIRECT.getType());
|
// break;
|
// case 4:
|
// equipmentInfo.setEquipmentType(EquipmentTypeEnum.WIRELESS_DEVICE.getType());
|
// break;
|
// }
|
//
|
// //构建设备接口信息
|
// equipmentInfo.setConnectorInfos(superviseBuildConnectorInfos(tChargingPile.getId(), tChargingPile.getCode(), chargingGunList));
|
// equipmentInfo.setPower(tChargingPile.getRatedPower());
|
// equipmentInfos.add(equipmentInfo);
|
// }
|
// return equipmentInfos;
|
// }
|
//
|
//
|
// /**
|
// * 构建接口数据
|
// * @param chargingGunList
|
// * @return
|
// */
|
// public List<ConnectorInfo> superviseBuildConnectorInfos(Integer chargingPileId, String code, List<TChargingGun> chargingGunList){
|
// List<ConnectorInfo> connectorInfos = new ArrayList<>();
|
// List<TChargingGun> collect = chargingGunList.stream().filter(s -> s.getChargingPileId().equals(chargingPileId)).collect(Collectors.toList());
|
// for (TChargingGun chargingGun : collect) {
|
// ConnectorInfo connectorInfo = new ConnectorInfo();
|
// connectorInfo.setConnectorID(chargingGun.getFullNumber());
|
// connectorInfo.setConnectorName(chargingGun.getName());
|
// switch (chargingGun.getType()){
|
// case 0:
|
// connectorInfo.setConnectorType(ConnectorTypeEnum.OTHER.getType());
|
// break;
|
// case 1:
|
// connectorInfo.setConnectorType(ConnectorTypeEnum.HOUSEHOLD_SOCKET.getType());
|
// break;
|
// case 2:
|
// connectorInfo.setConnectorType(ConnectorTypeEnum.AC_SOCKET.getType());
|
// break;
|
// case 3:
|
// connectorInfo.setConnectorType(ConnectorTypeEnum.AC_INTERFACE_PLUG.getType());
|
// break;
|
// case 4:
|
// connectorInfo.setConnectorType(ConnectorTypeEnum.DC_INTERFACE_GUN_HEAD.getType());
|
// break;
|
// case 5:
|
// connectorInfo.setConnectorType(ConnectorTypeEnum.WIRELESS_CHARGING_STAND.getType());
|
// break;
|
// }
|
// connectorInfo.setVoltageUpperLimits(chargingGun.getUpperRatedVoltage().intValue());
|
// connectorInfo.setVoltageLowerLimits(chargingGun.getLowerLimitOfRatedVoltage().intValue());
|
// connectorInfo.setCurrent(chargingGun.getRatedCurrent().intValue());
|
// connectorInfo.setPower(chargingGun.getRatedPower());
|
// connectorInfo.setParkNo(chargingGun.getParkingNumber());
|
// connectorInfo.setNationalStandard(Integer.valueOf(chargingGun.getNationalStandard()));
|
// connectorInfo.setQRCode("https://mxcd.zhinenganguan.com?No=" + code + chargingGun.getCode());
|
// connectorInfos.add(connectorInfo);
|
// }
|
// return connectorInfos;
|
// }
|
|
}
|