|
|
@@ -8,6 +8,7 @@ import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.kym.common.constant.ResponseEnum;
|
|
|
import com.kym.common.enums.EnPlusApi;
|
|
|
import com.kym.common.exception.BusinessException;
|
|
|
+import com.kym.common.exception.EnPushException;
|
|
|
import com.kym.common.utils.AESUtil;
|
|
|
import com.kym.entity.enplus.EnRespQueryToken;
|
|
|
import com.kym.entity.enplus.EnResponse;
|
|
|
@@ -125,6 +126,12 @@ public class EnPlusServiceImpl implements EnPlusService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 加密数据、签名、组装请求消息体
|
|
|
+ *
|
|
|
+ * @param params
|
|
|
+ * @return
|
|
|
+ */
|
|
|
@Override
|
|
|
public String buildParams(String params) {
|
|
|
// 使用DataSecret对data加密
|
|
|
@@ -148,4 +155,131 @@ public class EnPlusServiceImpl implements EnPlusService {
|
|
|
}
|
|
|
""".formatted(OperatorId, dataStr, timeStamp, seq, sign);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 验签、解密推送消息
|
|
|
+ *
|
|
|
+ * @param json
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String signValidation(JSONObject json) {
|
|
|
+ // 验签 解密数据
|
|
|
+ var OperatorID = json.getString("OperatorID");
|
|
|
+ var Data = json.getString("Data");
|
|
|
+ var TimeStamp = json.getString("TimeStamp");
|
|
|
+ var Seq = json.getString("Seq");
|
|
|
+ var Sig = json.getString("Sig");
|
|
|
+ var signString = OperatorID + Data + TimeStamp + Seq;
|
|
|
+ HMac mac = new HMac(HmacAlgorithm.HmacMD5, SigSecret.getBytes());
|
|
|
+ // 签名(转为大写)
|
|
|
+ var sign = mac.digestHex(signString).toUpperCase();
|
|
|
+ if (sign.equals(Sig)) {
|
|
|
+ // 解密数据
|
|
|
+ return AESUtil.decrypt(Data);
|
|
|
+ } else {
|
|
|
+ // 验签失败
|
|
|
+ EnResponse enResponse = new EnResponse();
|
|
|
+ enResponse.setRet(4001);
|
|
|
+ enResponse.setMsg("签名错误");
|
|
|
+ throw new EnPushException(ResponseEnum.EN_PLUS_PUSH_SIGN_FAIL, enResponse);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 请求设备认证
|
|
|
+ *
|
|
|
+ * @param equipAuthSeq 格式:运营商ID+唯一编码 27字符
|
|
|
+ * @param connectorID 充电设备接口编码
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ String queryEquipAuth(String equipAuthSeq, String connectorID) {
|
|
|
+ var param = """
|
|
|
+ {
|
|
|
+ "EquipAuthSeq":%s,
|
|
|
+ "ConnectorID":%s
|
|
|
+ }
|
|
|
+ """.formatted(equipAuthSeq, connectorID);
|
|
|
+ var response = enPlusPost(EnPlusApi.EN_PLUS_QUERY_STATION_STATS.getApi(), buildParams(param));
|
|
|
+ return AESUtil.decrypt(response.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询业务策略信息
|
|
|
+ *
|
|
|
+ * @param equipBizSeq 业务策略查询流水号 格式:运营商ID+唯一编码 27字符
|
|
|
+ * @param connectorID 充电设备接口编码
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ String queryEquipBusinessPolicy(String equipBizSeq, String connectorID) {
|
|
|
+ var param = """
|
|
|
+ {
|
|
|
+ "EquipBizSeq":%s,
|
|
|
+ "ConnectorID":%s
|
|
|
+ }
|
|
|
+ """.formatted(equipBizSeq, connectorID);
|
|
|
+ var response = enPlusPost(EnPlusApi.EN_PLUS_QUERY_STATION_STATS.getApi(), buildParams(param));
|
|
|
+ return AESUtil.decrypt(response.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 请求启动充电
|
|
|
+ *
|
|
|
+ * @param startChargeSeq
|
|
|
+ * @param connectorID
|
|
|
+ * @param qrCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ String queryStartCharge(String startChargeSeq, String connectorID, String qrCode) {
|
|
|
+ var param = """
|
|
|
+ {
|
|
|
+ "StartChargeSeq":%s,
|
|
|
+ "ConnectorID":%s,
|
|
|
+ "QRCode":%s
|
|
|
+ }
|
|
|
+ """.formatted(startChargeSeq, connectorID, qrCode);
|
|
|
+ var response = enPlusPost(EnPlusApi.EN_PLUS_QUERY_START_CHARGE.getApi(), buildParams(param));
|
|
|
+ return AESUtil.decrypt(response.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 请求停止充电
|
|
|
+ *
|
|
|
+ * @param startChargeSeq
|
|
|
+ * @param connectorID
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ String queryStopCharge(String startChargeSeq, String connectorID) {
|
|
|
+ var param = """
|
|
|
+ {
|
|
|
+ "StartChargeSeq":%s,
|
|
|
+ "ConnectorID":%s
|
|
|
+ }
|
|
|
+ """.formatted(startChargeSeq, connectorID);
|
|
|
+ var response = enPlusPost(EnPlusApi.EN_PLUS_QUERY_STOP_CHARGE.getApi(), buildParams(param));
|
|
|
+ return AESUtil.decrypt(response.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询充电状态
|
|
|
+ *
|
|
|
+ * @param startChargeSeq
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ String queryEquipChargeStatus(String startChargeSeq) {
|
|
|
+ var param = """
|
|
|
+ {
|
|
|
+ "StartChargeSeq":%s
|
|
|
+ }
|
|
|
+ """.formatted(startChargeSeq);
|
|
|
+ var response = enPlusPost(EnPlusApi.EN_PLUS_QUERY_CHARGE_STATUS.getApi(), buildParams(param));
|
|
|
+ return AESUtil.decrypt(response.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|