package com.ruoyi.integration.drainage;
|
|
import com.alibaba.fastjson.JSON;
|
import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient;
|
import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
|
import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
|
import com.ruoyi.chargingPile.api.feignClient.SiteClient;
|
import com.ruoyi.chargingPile.api.model.Site;
|
import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail;
|
import com.ruoyi.chargingPile.api.model.TChargingGun;
|
import com.ruoyi.chargingPile.api.model.TChargingPile;
|
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.common.security.service.TokenService;
|
import com.ruoyi.integration.drainage.model.*;
|
import com.ruoyi.integration.drainage.model.enu.*;
|
import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
|
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
|
import com.ruoyi.order.api.model.AddTripartitePlatformOrder;
|
import com.ruoyi.order.api.model.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.system.api.model.LoginUser;
|
import org.springframework.beans.BeanUtils;
|
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.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author zhibing.pu
|
* @Date 2025/1/21 17:52
|
*/
|
@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 TokenUtil tokenUtil;
|
|
private static Map<Long, Integer> map = new HashMap<>();
|
|
|
/**
|
* 请求校验
|
* @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")));
|
Integer integer = map.get(mapKey);
|
if(null == integer){
|
integer = 1;
|
}else{
|
integer++;
|
}
|
map.put(mapKey, integer);
|
baseResult.setTimeStamp(mapKey);
|
baseResult.setSeq(String.format("%04d", integer));
|
//清空小于当前时间的map中的无效数据
|
for (Long k : map.keySet()) {
|
if(k <= (mapKey - 10)){
|
map.remove(k);
|
}
|
}
|
|
//校验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){
|
LoginUser loginUser = tokenUtil.getLoginUser(request);
|
if(null == loginUser){
|
baseResult.setRet(4002);
|
baseResult.setMsg("身份校验失败,无效的token");
|
return baseResult;
|
}
|
}
|
|
Operator operator = r.getData();
|
baseRequest.setOperator(operator);
|
//校验签名
|
String sign = buildSign(baseRequest);
|
if(!sign.equals(sig)){
|
baseResult.setRet(4001);
|
baseResult.setMsg("签名校验失败");
|
return baseResult;
|
}
|
baseResult.setOperator(operator);
|
return baseResult;
|
}
|
|
|
/**
|
* 构建签名字符串
|
* @param model
|
* @return
|
*/
|
public String buildSign(BaseModel model){
|
Operator operator = model.getOperator();
|
//签名秘钥SigSecret
|
String key = operator.getSigSecret();
|
String sign = "";
|
switch (operator.getName()){
|
case "XinDianTu":
|
//进行字符串拼接、计算
|
String m = new StringBuilder(model.getOperatorID()).append(model.getData()).append(model.getTimeStamp()).append(model.getSeq()).toString();
|
byte[] hmacMd5 = SignUtil.getHMacMD5Bytes(key.getBytes(), m.getBytes());
|
// 打印计算得到的签名Sig
|
sign = SignUtil.bytesToHexString(hmacMd5);
|
break;
|
case "KuaiDian":
|
sign = SignUtil.hmacSign(model.getData(), key);
|
break;
|
}
|
return sign;
|
}
|
|
|
|
|
|
/**
|
* 获取token
|
* @return
|
*/
|
@PostMapping("/query_token")
|
public BaseResult queryToken(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
BaseResult baseResult = requestCheck(false, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
baseResult.setData("");
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
QueryTokenResult queryTokenResult = new QueryTokenResult();
|
Operator operator = baseResult.getOperator();
|
if(null == operator){
|
queryTokenResult.setSuccStat(1);
|
queryTokenResult.setFailReason(1);
|
return baseResult;
|
}
|
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
|
QueryToken queryToken = JSON.parseObject(decrypt, QueryToken.class);
|
if(!queryToken.getOperatorSecret().equals(operator.getOperatorSecret())){
|
queryTokenResult.setSuccStat(1);
|
queryTokenResult.setFailReason(2);
|
//参数加密
|
String jsonString = JSON.toJSONString(queryTokenResult);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(buildSign(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.setSuccStat(0);
|
queryTokenResult.setFailReason(0);
|
queryTokenResult.setAccessToken(access_token);
|
queryTokenResult.setTokenAvailableTime(expires_in * 60);
|
//参数加密
|
String jsonString = JSON.toJSONString(queryTokenResult);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
|
|
|
|
|
/**
|
* 查询充电站信息
|
* @return
|
*/
|
@PostMapping("/query_stations_info")
|
public BaseResult queryStationsInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
baseResult.setData("");
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
|
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);
|
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(siteListPaging.getRecords()));
|
//参数加密
|
String jsonString = JSON.toJSONString(queryStationsInfoResult);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
|
|
/**
|
* 构建站点数据
|
* @param sites
|
* @return
|
*/
|
public List<StationInfo> buildSite(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();
|
|
List<StationInfo> StationInfos = new ArrayList<>();
|
for (Site datum : sites) {
|
StationInfo stationInfo = new StationInfo();
|
stationInfo.setStationID(datum.getId().toString());
|
stationInfo.setOperatorID("");
|
stationInfo.setEquipmentOwnerID("91510903906171535D");
|
stationInfo.setStationName(datum.getName());
|
stationInfo.setCountryCode(datum.getCountryCode());
|
stationInfo.setAreaCode(datum.getDistrictsCode());
|
stationInfo.setAddress(datum.getAddress());
|
stationInfo.setStationTel(datum.getPhone());
|
stationInfo.setServiceTel(datum.getServicePhone());
|
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(Arrays.asList(datum.getImgUrl().split(",")));
|
stationInfo.setSiteGuide(datum.getGuide());
|
stationInfo.setMatchCars(datum.getVehicleDescription());
|
stationInfo.setBusineHours(datum.getStartServiceTime() + "-" + datum.getEndServiceTime());
|
stationInfo.setElectricityFee(datum.getRateDescription());
|
//构建充电设备信息数据
|
stationInfo.setEquipmentInfos(buildEquipmentInfo(datum.getId(), tChargingPiles, chargingGunList));
|
StationInfos.add(stationInfo);
|
}
|
return StationInfos;
|
}
|
|
|
|
/**
|
* 构建桩数据
|
* @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());
|
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(buildConnectorInfos(tChargingPile.getId(), chargingGunList));
|
equipmentInfos.add(equipmentInfo);
|
}
|
return equipmentInfos;
|
}
|
|
|
/**
|
* 构建接口数据
|
* @param chargingGunList
|
* @return
|
*/
|
public List<ConnectorInfo> buildConnectorInfos(Integer chargingPileId, 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.getId().toString());
|
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()));
|
connectorInfos.add(connectorInfo);
|
}
|
return connectorInfos;
|
}
|
|
|
/**
|
* 接口状态变化后推送给第三方
|
* @return
|
*/
|
@PostMapping("/pushChargingGunStatus")
|
public R pushChargingGunStatus(@RequestParam("id") Integer id, @RequestParam("status") Integer status){
|
ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
|
connectorStatusInfo.setConnectorID(id.toString());
|
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;
|
}
|
NotificationStationStatusResult result = TCECUtil.notificationStationStatus(connectorStatusInfo);
|
return R.ok();
|
}
|
|
|
|
/**
|
* 设备接口状态查询
|
* @return
|
*/
|
@PostMapping("/query_station_status")
|
public BaseResult queryStationStatus(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
baseResult.setData("");
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
|
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.getId().toString());
|
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 = JSON.toJSONString(result);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
|
|
|
|
|
/**
|
* 查询统计信息
|
* @return
|
*/
|
@PostMapping("/query_station_stats")
|
public BaseResult queryStationStats(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
baseResult.setData("");
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
|
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);
|
|
ConnectorStatsInfo connectorStatsInfo = new ConnectorStatsInfo();
|
connectorStatsInfo.setConnectorID(integer1.toString());
|
connectorStatsInfo.setConnectorElectricity(reduce2);
|
ConnectorStatsInfos.add(connectorStatsInfo);
|
}
|
equipmentStatsInfo.setConnectorStatsInfos(ConnectorStatsInfos);
|
EquipmentStatsInfos.add(equipmentStatsInfo);
|
}
|
stationStats.setEquipmentStatsInfos(EquipmentStatsInfos);
|
result.setStationStats(stationStats);
|
//参数加密
|
String jsonString = JSON.toJSONString(result);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
|
|
/**
|
* 请求设备认证
|
* @return
|
*/
|
@PostMapping("/query_equip_auth")
|
public BaseResult queryEquipAuth(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
baseResult.setData("");
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
|
QueryEquipAuth queryEquipAuth = JSON.parseObject(decrypt, QueryEquipAuth.class);
|
String connectorID = queryEquipAuth.getConnectorID();
|
TChargingGun tChargingGun = chargingGunClient.getChargingGunById(Integer.valueOf(connectorID)).getData();
|
if(null == tChargingGun){
|
baseResult.setRet(4004);
|
baseResult.setMsg("connectorID 参数无效");
|
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 = JSON.toJSONString(queryEquipAuthResult);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
|
|
|
/**
|
* 查询业务策略信息
|
* @return
|
*/
|
@PostMapping("/query_equip_business_policy")
|
public BaseResult queryEquipBusinessPolicy(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
baseResult.setData("");
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
|
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.getChargingGunById(Integer.valueOf(connectorID)).getData();
|
if(null == tChargingGun){
|
baseResult.setRet(4004);
|
baseResult.setMsg("connectorID 参数无效");
|
//参数加密
|
String jsonString = JSON.toJSONString(queryEquipBusinessPolicyResult);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(buildSign(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 = JSON.toJSONString(queryEquipBusinessPolicyResult);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(buildSign(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 = JSON.toJSONString(queryEquipBusinessPolicyResult);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
|
|
/**
|
* 请求定充电
|
* @return
|
*/
|
@PostMapping("/query_start_charge")
|
public BaseResult queryStartCharge(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
baseResult.setData("");
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
|
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.getChargingGunById(Integer.valueOf(connectorID)).getData();
|
//设备不存在
|
if(null == tChargingGun){
|
baseResult.setRet(4004);
|
baseResult.setMsg("connectorID 参数无效");
|
result.setSuccStat(1);
|
result.setFailReason(1);
|
result.setStartChargeSeqStat(5);
|
//参数加密
|
String jsonString = JSON.toJSONString(result);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
//设备离线
|
if(tChargingGun.getStatus() == 1){
|
result.setSuccStat(1);
|
result.setFailReason(2);
|
result.setStartChargeSeqStat(5);
|
//参数加密
|
String jsonString = JSON.toJSONString(result);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
//调用充电接口
|
AddTripartitePlatformOrder addTripartitePlatformOrder = new AddTripartitePlatformOrder();
|
addTripartitePlatformOrder.setStartChargeSeq(queryStartCharge.getStartChargeSeq());
|
addTripartitePlatformOrder.setChargingGunId(tChargingGun.getId());
|
// addTripartitePlatformOrder.setOperatorId(query.get);
|
addTripartitePlatformOrder.setPaymentAmount(queryStartCharge.getPaymentAmount());
|
addTripartitePlatformOrder.setRechargePaymentType(queryStartCharge.getPaymentType());
|
R order = chargingOrderClient.addTripartitePlatformOrder(addTripartitePlatformOrder);
|
//启动失败
|
if(200 != order.getCode()){
|
result.setSuccStat(1);
|
result.setFailReason(1);
|
result.setStartChargeSeqStat(2);
|
//参数加密
|
String jsonString = JSON.toJSONString(result);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
result.setStartChargeSeqStat(1);
|
result.setSuccStat(0);
|
result.setFailReason(0);
|
//参数加密
|
String jsonString = JSON.toJSONString(result);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
|
|
/**
|
* 启动充电结果推送
|
* @param result
|
* @return
|
*/
|
@PostMapping("/notificationStartChargeResult")
|
public R notificationStartChargeResult(@RequestBody StartChargeResult result){
|
NotificationStartCharge notificationStartCharge = new NotificationStartCharge();
|
BeanUtils.copyProperties(result, notificationStartCharge);
|
com.ruoyi.integration.drainage.model.NotificationStartChargeResult notificationStartChargeResult = TCECUtil.notificationStartChargeResult(notificationStartCharge);
|
//启动重试推送机制
|
if(null == notificationStartChargeResult || 1 == notificationStartChargeResult.getSuccStat()){
|
|
}
|
return R.ok();
|
}
|
|
|
|
/**
|
* 查询充电状态
|
* @return
|
*/
|
@PostMapping("/query_equip_charge_status")
|
public BaseResult queryEquipChargeStatus(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
baseResult.setData("");
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
|
QueryEquipChargeStatus queryEquipChargeStatus = JSON.parseObject(decrypt, QueryEquipChargeStatus.class);
|
//校验token和签名
|
QueryEquipChargeStatusResult queryEquipChargeStatusResult = buildQueryEquipChargeStatusResult(queryEquipChargeStatus.getStartChargeSeq());
|
//参数加密
|
String jsonString = JSON.toJSONString(queryEquipChargeStatusResult);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(buildSign(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;
|
}
|
queryEquipChargeStatusResult.setConnectorID(chargingOrder.getChargingGunId().toString());
|
TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
|
//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());
|
queryEquipChargeStatusResult.setSoc(chargingOrder.getTotalElectricity());
|
queryEquipChargeStatusResult.setStartTime((null == chargingOrder.getStartTime() ? chargingOrder.getCreateTime() : chargingOrder.getStartTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
queryEquipChargeStatusResult.setEndTime((null == chargingOrder.getStartTime() ? LocalDateTime.now() : chargingOrder.getEndTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
queryEquipChargeStatusResult.setTotalPower(chargingOrder.getElectricity());
|
queryEquipChargeStatusResult.setElecMoney(chargingOrder.getTotalElectricity());
|
queryEquipChargeStatusResult.setSeviceMoney(chargingOrder.getServiceCharge());
|
queryEquipChargeStatusResult.setTotalMoney(chargingOrder.getTotalElectricity().add(chargingOrder.getServiceCharge()));
|
|
//构建充电明细
|
List<ChargeDetail> chargeDetails = new ArrayList<>();
|
List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData();
|
|
LocalDateTime startTime = chargingOrder.getStartTime();
|
LocalDateTime endTime = 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());
|
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("startChargeSeq") String startChargeSeq){
|
QueryEquipChargeStatusResult queryEquipChargeStatusResult = buildQueryEquipChargeStatusResult(startChargeSeq);
|
NotificationEquipChargeStatusResult notificationEquipChargeStatusResult = TCECUtil.notificationEquipChargeStatus(queryEquipChargeStatusResult);
|
//启动重试推送机制
|
if(null == notificationEquipChargeStatusResult || 1 == notificationEquipChargeStatusResult.getSuccStat()){
|
|
}
|
return R.ok();
|
}
|
|
|
/**
|
* 请求停止充电
|
* @return
|
*/
|
@PostMapping("/query_stop_charge")
|
public BaseResult queryStopCharge(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
|
//校验token和签名
|
BaseResult baseResult = requestCheck(true, baseRequest, request);
|
if(0 != baseResult.getRet()){
|
baseResult.setData("");
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
Operator operator = baseResult.getOperator();
|
//解密参数
|
String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
|
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 = JSON.toJSONString(queryStopChargeResult);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
//参数加密
|
String jsonString = JSON.toJSONString(queryStopChargeResult);
|
String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
|
baseResult.setData(encrypt);
|
baseResult.setSig(buildSign(baseResult));
|
return baseResult;
|
}
|
|
|
|
/**
|
* 推送停止充电结果
|
* @param startChargeSeq 充电订单号
|
* @param connectorID 充电设备接口编码
|
* @return
|
*/
|
@PostMapping("/notificationStopChargeResult")
|
public R notificationStopChargeResult(@RequestParam("startChargeSeq") String startChargeSeq, @RequestParam("connectorID") String connectorID){
|
NotificationStopChargeResult info = new NotificationStopChargeResult();
|
info.setStartChargeSeq(startChargeSeq);
|
info.setStartChargeSeqStat(4);
|
info.setConnectorID(connectorID);
|
info.setSuccStat(0);
|
info.setFailReason(0);
|
NotificationStopCharge notificationStopCharge = TCECUtil.notificationStopChargeResult(info);
|
//启动重试推送机制
|
if(null == notificationStopCharge || 1 == notificationStopCharge.getSuccStat()){
|
|
}
|
return R.ok();
|
}
|
|
|
/**
|
* 推送订单信息
|
* @param startChargeSeq
|
* @return
|
*/
|
@PostMapping("/notificationChargeOrderInfo")
|
public R notificationChargeOrderInfo(@RequestParam("startChargeSeq") String startChargeSeq){
|
NotificationChargeOrderInfo info = buildNotificationChargeOrderInfo(startChargeSeq);
|
NotificationChargeOrderInfoResult notificationChargeOrderInfoResult = TCECUtil.notificationChargeOrderInfo(info);
|
//启动重试推送机制
|
if(null == notificationChargeOrderInfoResult || 1 == notificationChargeOrderInfoResult.getConfirmResult()){
|
|
}
|
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){
|
return null;
|
}
|
notificationChargeOrderInfo.setConnectorID(chargingOrder.getChargingGunId().toString());
|
notificationChargeOrderInfo.setStartTime((null == chargingOrder.getStartTime() ? chargingOrder.getCreateTime() : chargingOrder.getStartTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
notificationChargeOrderInfo.setEndTime((null == chargingOrder.getStartTime() ? LocalDateTime.now() : chargingOrder.getEndTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
notificationChargeOrderInfo.setTotalPower(chargingOrder.getElectricity());
|
notificationChargeOrderInfo.setTotalElecMoney(chargingOrder.getTotalElectricity());
|
notificationChargeOrderInfo.setTotalSeviceMoney(chargingOrder.getServiceCharge());
|
notificationChargeOrderInfo.setTotalMoney(chargingOrder.getTotalElectricity().add(chargingOrder.getServiceCharge()));
|
//结束方式(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<>();
|
List<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData();
|
|
LocalDateTime startTime = chargingOrder.getStartTime();
|
LocalDateTime endTime = 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());
|
chargeDetail.setDetailElecMoney(datum.getPeriodElectricPrice());
|
chargeDetail.setDetailSeviceMoney(datum.getPeriodServicePrice());
|
chargeDetails.add(chargeDetail);
|
}
|
notificationChargeOrderInfo.setChargeDetails(chargeDetails);
|
return notificationChargeOrderInfo;
|
}
|
}
|