mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-22 03:55:17 +08:00
add 联联平台相关工具类
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package com.jsowell.thirdparty.service;
|
||||
|
||||
import com.jsowell.pile.dto.LianLianGetTokenDTO;
|
||||
import com.jsowell.pile.dto.QueryEquipmentDTO;
|
||||
import com.jsowell.pile.dto.QueryStartChargeDTO;
|
||||
import com.jsowell.thirdparty.domain.StationStatsInfo;
|
||||
@@ -16,6 +17,12 @@ public interface LianLianService {
|
||||
*/
|
||||
void pushMerchantInfo(Long merchantId);
|
||||
|
||||
/**
|
||||
* 根据充电站id,推送充电站信息
|
||||
* @param stationId
|
||||
*/
|
||||
void pushStationInfo(Long stationId) throws Exception;
|
||||
|
||||
/**
|
||||
* 联联平台获取充电站信息
|
||||
* @param dto
|
||||
@@ -67,4 +74,6 @@ public interface LianLianService {
|
||||
* @return
|
||||
*/
|
||||
QueryStopChargeVO query_stop_charge(QueryStartChargeDTO dto);
|
||||
|
||||
String getToken(LianLianGetTokenDTO dto);
|
||||
}
|
||||
|
||||
@@ -1,20 +1,28 @@
|
||||
package com.jsowell.thirdparty.service.impl;
|
||||
|
||||
import cn.hutool.core.util.PageUtil;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.jsowell.common.constant.Constants;
|
||||
import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
|
||||
import com.jsowell.common.core.redis.RedisCache;
|
||||
import com.jsowell.common.enums.ykc.OrderStatusEnum;
|
||||
import com.jsowell.common.enums.ykc.PileConnectorDataBaseStatusEnum;
|
||||
import com.jsowell.common.exception.BusinessException;
|
||||
import com.jsowell.common.util.DateUtils;
|
||||
import com.jsowell.common.util.PageUtils;
|
||||
import com.jsowell.common.util.StringUtils;
|
||||
import com.jsowell.common.util.*;
|
||||
import com.jsowell.common.util.http.HttpUtils;
|
||||
import com.jsowell.common.util.lianlian.Cryptos;
|
||||
import com.jsowell.common.util.lianlian.Encodes;
|
||||
import com.jsowell.common.util.lianlian.GBSignUtils;
|
||||
import com.jsowell.common.util.lianlian.LianLianUtils;
|
||||
import com.jsowell.netty.command.ykc.StartChargingCommand;
|
||||
import com.jsowell.netty.command.ykc.StopChargingCommand;
|
||||
import com.jsowell.netty.service.yunkuaichong.YKCPushCommandService;
|
||||
import com.jsowell.pile.domain.*;
|
||||
import com.jsowell.pile.dto.LianLianGetTokenDTO;
|
||||
import com.jsowell.pile.dto.QueryEquipmentDTO;
|
||||
import com.jsowell.pile.dto.QueryStartChargeDTO;
|
||||
import com.jsowell.pile.dto.QueryStationInfoDTO;
|
||||
@@ -27,7 +35,6 @@ import com.jsowell.pile.service.IPileStationInfoService;
|
||||
import com.jsowell.pile.vo.base.ConnectorInfoVO;
|
||||
import com.jsowell.pile.vo.base.MerchantInfoVO;
|
||||
import com.jsowell.pile.vo.lianlian.AccumulativeInfoVO;
|
||||
import com.jsowell.pile.vo.uniapp.SendMessageVO;
|
||||
import com.jsowell.pile.vo.web.PileConnectorInfoVO;
|
||||
import com.jsowell.pile.vo.web.PileModelInfoVO;
|
||||
import com.jsowell.thirdparty.domain.ConnectorChargeStatusInfo;
|
||||
@@ -47,9 +54,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@@ -82,13 +87,81 @@ public class LianLianServiceImpl implements LianLianService {
|
||||
MerchantInfoVO merchantInfo = pileMerchantInfoService.getMerchantInfo(String.valueOf(merchantId));
|
||||
// 组装联联平台所需要的数据格式
|
||||
OperatorInfo operatorInfo = OperatorInfo.builder()
|
||||
.OperatorID(merchantInfo.getOrganizationCode()) // 组织机构代码
|
||||
.OperatorID(Constants.OPERATORID_LIANLIAN) // 组织机构代码
|
||||
.OperatorName(merchantInfo.getMerchantName()) // 机构全称
|
||||
.OperatorTel1(merchantInfo.getMerchantTel()) // 对接平台客服电话1
|
||||
.build();
|
||||
// 调用联联平台接口
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据站点id推送站点信息
|
||||
* @param stationId
|
||||
*/
|
||||
@Override
|
||||
public void pushStationInfo(Long stationId) throws Exception {
|
||||
// 通过id查询站点相关信息
|
||||
PileStationInfo pileStationInfo = pileStationInfoService.selectPileStationInfoById(stationId);
|
||||
// 组装联联平台所需要的数据格式
|
||||
StationInfo info = StationInfo.builder()
|
||||
.StationID(String.valueOf(stationId))
|
||||
.OperatorID(Constants.OPERATORID_LIANLIAN)
|
||||
.EquipmentOwnerID(Constants.OPERATORID_LIANLIAN)
|
||||
.StationName(pileStationInfo.getStationName())
|
||||
.IsAloneApply(Integer.valueOf(pileStationInfo.getAloneApply()))
|
||||
.IsPublicParkingLot(Integer.valueOf(pileStationInfo.getPublicParking()))
|
||||
.CountryCode(pileStationInfo.getCountryCode())
|
||||
.AreaCode(pileStationInfo.getAreaCode())
|
||||
.Address(pileStationInfo.getAddress())
|
||||
.ServiceTel(pileStationInfo.getServiceTel())
|
||||
.StationType(Integer.valueOf(pileStationInfo.getStationType()))
|
||||
.StationStatus(Integer.valueOf(pileStationInfo.getStationStatus()))
|
||||
.ParkNums(Integer.valueOf(pileStationInfo.getParkNums()))
|
||||
.StationLng(new BigDecimal(pileStationInfo.getStationLng()))
|
||||
.StationLat(new BigDecimal(pileStationInfo.getStationLat()))
|
||||
.Construction(Integer.valueOf(pileStationInfo.getConstruction()))
|
||||
.OpenAllDay(Integer.valueOf(pileStationInfo.getOpenAllDay()))
|
||||
// .MinElectricityPrice()
|
||||
// .ElectricityFee()
|
||||
// .ServiceFee()
|
||||
.ParkFree(Integer.valueOf(pileStationInfo.getParkFree()))
|
||||
// .ParkFee()
|
||||
.Payment(pileStationInfo.getPayment())
|
||||
.SupportOrder(Integer.valueOf(pileStationInfo.getSupportOrder()))
|
||||
// .equipmentInfos()
|
||||
// .ParkFeeType()
|
||||
.ToiletFlag(Integer.valueOf(pileStationInfo.getToiletFlag()))
|
||||
.StoreFlag(Integer.valueOf(pileStationInfo.getStoreFlag()))
|
||||
.RestaurantFlag(Integer.valueOf(pileStationInfo.getRestaurantFlag()))
|
||||
.LoungeFlag(Integer.valueOf(pileStationInfo.getLoungeFlag()))
|
||||
.CanopyFlag(Integer.valueOf(pileStationInfo.getCanopyFlag()))
|
||||
.PrinterFlag(Integer.valueOf(pileStationInfo.getPrinterFlag()))
|
||||
.BarrierFlag(Integer.valueOf(pileStationInfo.getBarrierFlag()))
|
||||
.ParkingLockFlag(Integer.valueOf(pileStationInfo.getParkingLockFlag()))
|
||||
|
||||
.build();
|
||||
|
||||
List<EquipmentInfo> pileList = getPileList(pileStationInfo);
|
||||
if (CollectionUtils.isNotEmpty(pileList)) {
|
||||
info.setEquipmentInfos(pileList); // 充电设备信息列表
|
||||
}
|
||||
|
||||
// 调用联联平台接口
|
||||
String url = "http://dataexchange.evchargeonline.com:81/shevcs/v1/" + "notification_stationInfo";
|
||||
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
// Map<String, Object> map = new HashMap<>();
|
||||
jsonObject.put("StationInfo", info);
|
||||
String s = HttpUtils.sendPost(url, jsonObject.toJSONString());
|
||||
|
||||
System.out.println(s);
|
||||
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -112,8 +185,8 @@ public class LianLianServiceImpl implements LianLianService {
|
||||
for (PileStationInfo pileStationInfo : pageInfo.getList()) {
|
||||
StationInfo stationInfo = new StationInfo();
|
||||
stationInfo.setStationID(String.valueOf(pileStationInfo.getId()));
|
||||
MerchantInfoVO merchantInfo = pileMerchantInfoService.getMerchantInfo(String.valueOf(pileStationInfo.getMerchantId()));
|
||||
stationInfo.setOperatorID(merchantInfo.getOrganizationCode()); // 组织机构代码
|
||||
// MerchantInfoVO merchantInfo = pileMerchantInfoService.getMerchantInfo(String.valueOf(pileStationInfo.getMerchantId()));
|
||||
stationInfo.setOperatorID(Constants.OPERATORID_LIANLIAN); // 组织机构代码
|
||||
stationInfo.setEquipmentOwnerID(String.valueOf(pileStationInfo.getMerchantId()));
|
||||
stationInfo.setStationName(pileStationInfo.getStationName());
|
||||
stationInfo.setIsAloneApply(Integer.valueOf(pileStationInfo.getAloneApply()));
|
||||
@@ -481,6 +554,60 @@ public class LianLianServiceImpl implements LianLianService {
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取令牌
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String getToken(LianLianGetTokenDTO dto) {
|
||||
String operatorId = dto.getOperatorId();
|
||||
String operatorSecret = dto.getOperatorSecret();
|
||||
String token = "";
|
||||
try {
|
||||
//测试用请求地址
|
||||
String requestUrl = "http://testdataexchange.evchargeonline.com:82/shevcs/v1/query_token";
|
||||
|
||||
//请求data
|
||||
Map<String, String> data = new HashMap<>();
|
||||
data.put("OperatorID", operatorId);
|
||||
data.put("OperatorSecret", operatorSecret);
|
||||
String dataJson = JSONUtil.toJsonStr(data);
|
||||
|
||||
//加密
|
||||
byte[] encryptText = Cryptos.aesEncrypt(dataJson.getBytes("UTF-8"),
|
||||
operatorSecret.getBytes(), operatorSecret.getBytes());
|
||||
String strData = Encodes.encodeBase64(encryptText);
|
||||
|
||||
Map<String, String> request = new LinkedHashMap<>();
|
||||
request.put("OperatorID", operatorId);
|
||||
request.put("Data", strData);
|
||||
request.put("TimeStamp", System.currentTimeMillis() + "");
|
||||
request.put("Seq", "0001");
|
||||
|
||||
//生成签名
|
||||
String sig = GBSignUtils.sign(request, operatorSecret);
|
||||
request.put("Sig", sig);
|
||||
|
||||
String tokenRequest = JSONUtil.toJsonStr(request);
|
||||
|
||||
String response = HttpUtil.post(requestUrl, tokenRequest);
|
||||
LianLianResultVO result = JSON.parseObject(response, LianLianResultVO.class);
|
||||
|
||||
if (result.getRet() == 0) {
|
||||
//解密data
|
||||
byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64((String) result.getData()),
|
||||
operatorSecret.getBytes(), operatorSecret.getBytes());
|
||||
String dataStr = new String(plainText, "UTF-8");
|
||||
Map<String, String> resultMap = (Map<String, String>) JSON.parse(dataStr);
|
||||
token = resultMap.get("AccessToken");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return token;
|
||||
}
|
||||
return token;
|
||||
}
|
||||
|
||||
// TODO 推送停止充电结果 notification_stop_charge_result
|
||||
|
||||
// TODO 推送充电订单信息 notification_charge_order_info
|
||||
|
||||
43
jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/vo/LianLianResultVO.java
vendored
Normal file
43
jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/vo/LianLianResultVO.java
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
package com.jsowell.thirdparty.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 联联平台接口返回对象
|
||||
*
|
||||
* @author JS-ZZA
|
||||
* @date 2023/5/10 8:36
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
public class LianLianResultVO {
|
||||
/**
|
||||
* 系统错误码
|
||||
*/
|
||||
@JsonProperty("Ret")
|
||||
int ret = 0;
|
||||
|
||||
/**
|
||||
* 返回提示信息
|
||||
*/
|
||||
@JsonProperty("Msg")
|
||||
String msg = "";
|
||||
|
||||
/**
|
||||
* 返回结果
|
||||
*/
|
||||
@JsonProperty("Data")
|
||||
Object data;
|
||||
|
||||
/**
|
||||
* 签名
|
||||
*/
|
||||
@JsonProperty("Sig")
|
||||
String sig;
|
||||
}
|
||||
Reference in New Issue
Block a user