Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/java/com/zsElectric/boot/charging/controller/ChargingBusinessController.java
#	src/main/java/com/zsElectric/boot/charging/service/ChargingBusinessService.java
#	src/main/java/com/zsElectric/boot/common/util/electric/ElectricTokenManager.java
wzq 3 weeks ago
parent
commit
953783d47a
20 changed files with 896 additions and 169 deletions
  1. 42 25
      src/main/java/com/zsElectric/boot/charging/controller/ChargingBusinessController.java
  2. 63 0
      src/main/java/com/zsElectric/boot/charging/controller/LinkDataController.java
  3. 43 0
      src/main/java/com/zsElectric/boot/charging/dto/StartChargingRequestDTO.java
  4. 26 14
      src/main/java/com/zsElectric/boot/charging/service/ChargingBusinessService.java
  5. 34 0
      src/main/java/com/zsElectric/boot/charging/service/ChargingReceptionService.java
  6. 39 4
      src/main/java/com/zsElectric/boot/charging/service/impl/ChargingBusinessServiceImpl.java
  7. 173 0
      src/main/java/com/zsElectric/boot/charging/service/impl/ChargingReceptionServiceImpl.java
  8. 0 104
      src/main/java/com/zsElectric/boot/charging/vo/ChargeOrderDetailVO.java
  9. 2 2
      src/main/java/com/zsElectric/boot/charging/vo/ChargeResponseVO.java
  10. 104 0
      src/main/java/com/zsElectric/boot/charging/vo/ChargingOrderVO.java
  11. 97 0
      src/main/java/com/zsElectric/boot/charging/vo/ChargingStatusQueryResponseVO.java
  12. 40 0
      src/main/java/com/zsElectric/boot/charging/vo/ChargingStatusResponseVO.java
  13. 76 0
      src/main/java/com/zsElectric/boot/charging/vo/EquipChargeStatusResponseVO.java
  14. 44 0
      src/main/java/com/zsElectric/boot/charging/vo/StartChargingResponseVO.java
  15. 39 0
      src/main/java/com/zsElectric/boot/charging/vo/StopChargingOperationResponseVO.java
  16. 16 11
      src/main/java/com/zsElectric/boot/charging/vo/StopChargingResponseVO.java
  17. 21 1
      src/main/java/com/zsElectric/boot/common/constant/ConnectivityConstants.java
  18. 14 0
      src/main/java/com/zsElectric/boot/common/util/HmacMD5Util.java
  19. 15 0
      src/main/java/com/zsElectric/boot/common/util/electric/ChargingUtil.java
  20. 8 8
      src/main/java/com/zsElectric/boot/common/util/electric/ElectricTokenManager.java

+ 42 - 25
src/main/java/com/zsElectric/boot/charging/controller/ChargingBusinessController.java

@@ -1,44 +1,27 @@
 package com.zsElectric.boot.charging.controller;
 
+import com.zsElectric.boot.charging.dto.StartChargingRequestDTO;
+import com.zsElectric.boot.charging.dto.StartChargingResponseVO;
 import com.zsElectric.boot.charging.service.ChargingBusinessService;
-import com.zsElectric.boot.charging.vo.ChargingPricePolicyVO;
-import com.zsElectric.boot.charging.vo.EquipmentAuthResponseVO;
-import com.zsElectric.boot.charging.vo.QueryStationStatusVO;
-import com.zsElectric.boot.charging.vo.QueryStationsInfoVO;
-import com.zsElectric.boot.common.util.electric.ApiToken;
+import com.zsElectric.boot.charging.vo.*;
 import com.zsElectric.boot.core.web.Result;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 @Slf4j
 @RestController
 @RequiredArgsConstructor
 @Tag(name = "充电业务相关接口")
-@RequestMapping("/dev/v1/linkData")
+@RequestMapping("/dev/v1/business")
 public class ChargingBusinessController {
 
     private final ChargingBusinessService chargingBusinessService;
 
-    /**
-     * <p>获取token</p>
-     * @author wzq
-     * @return 获取到的token
-     *
-     */
-    @Operation(summary = "获取token")
-    @GetMapping("/queryToken")
-    public Result<ApiToken> queryToken(){
-        return Result.success(chargingBusinessService.queryToken());
-    }
-
     /**
      * <p>查询业务策略信息</p>
      * @author SheepHy
@@ -64,7 +47,7 @@ public class ChargingBusinessController {
      */
     @Operation(summary = "查询业务策略信息")
     @GetMapping("/queryEquipAuth")
-    public Result<EquipmentAuthResponseVO> queryEquipAuth(String EquipAuthSeq, String ConnectorID) throws Exception {
+    public Result<EquipmentAuthResponseVO> queryEquipAuth(String EquipAuthSeq, String ConnectorID){
         return Result.success(chargingBusinessService.queryEquipAuth(EquipAuthSeq, ConnectorID));
     }
 
@@ -93,8 +76,42 @@ public class ChargingBusinessController {
      *
      */
     @Operation(summary = "设备接口状态查询")
-    @GetMapping("/queryStationStatus")
-     public Result<QueryStationStatusVO> queryStationStatus(List<String> stationIDs) throws Exception {
+    @PostMapping("/queryStationStatus")
+     public Result<QueryStationStatusVO> queryStationStatus(@RequestBody List<String> stationIDs){
         return Result.success(chargingBusinessService.queryStationStatus(stationIDs));
      }
+
+
+    /**
+     * <p>请求启动充电</p>
+     * @author SheepHy
+     * @param requestDTO,参数为类则包含{@link StartChargingRequestDTO}
+     * @return 返回值描述,如无返回值则为void 返回值为类则包含{@link StartChargingResponseVO}
+     */
+    @Operation(summary = "请求启动充电")
+    @PostMapping("/startCharging")
+    public Result<StartChargingResponseVO> startCharging(@RequestBody StartChargingRequestDTO requestDTO){
+        return Result.success(chargingBusinessService.startCharging(requestDTO));
+    }
+
+    /**
+     * <p>查询充电状态</p>
+     * @author SheepHy
+     */
+    @Operation(summary = "查询充电状态")
+    @PostMapping("/queryChargingStatus")
+    public Result<ChargingStatusQueryResponseVO> queryChargingStatus(@RequestParam("StartChargeSeq") @Schema(description = "充电订单号(格式:运营商ID+唯一编号)") String StartChargeSeq){
+        return Result.success(chargingBusinessService.queryChargingStatus(StartChargeSeq));
+    }
+
+    /**
+     * <p>请求停止充电</p>
+     * @author SheepHy
+     */
+    @Operation(summary = "请求停止充电")
+    @GetMapping("/stopCharging")
+    public Result<StopChargingOperationResponseVO> stopCharging(@RequestParam("StartChargeSeq") @Schema(description = "充电订单号(格式:运营商ID+唯一编号)") String StartChargeSeq,
+                                                                @RequestParam("ConnectorID") @Schema(description = "充电设备接口编码") String ConnectorID){
+        return Result.success(chargingBusinessService.stopCharging(StartChargeSeq, ConnectorID));
+    }
 }

+ 63 - 0
src/main/java/com/zsElectric/boot/charging/controller/LinkDataController.java

@@ -0,0 +1,63 @@
+package com.zsElectric.boot.charging.controller;
+
+import com.zsElectric.boot.charging.service.ChargingReceptionService;
+import com.zsElectric.boot.common.util.electric.RequestParmsEntity;
+import com.zsElectric.boot.common.util.electric.ResponseParmsEntity;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Slf4j
+@RestController
+@RequiredArgsConstructor
+@Tag(name = "充电业务相关接口")
+@RequestMapping("/dev/v1/linkData")
+public class LinkDataController {
+
+    private final ChargingReceptionService chargingReceptionService;
+
+    /**
+     * <p>2.4 推送启动充电结果</p>
+     * @author SheepHy
+     * @param requestDTO,参数为类则包含{@link RequestParmsEntity}
+     * @return 停推送启动充电结果VO
+     */
+    @Operation(summary = "推送启动充电结果")
+    @GetMapping("/notification_start_charge_result")
+    public ResponseParmsEntity chargeResponse(@RequestBody RequestParmsEntity requestDTO){
+        return chargingReceptionService.chargeResponse(requestDTO);
+    }
+
+    /**
+     * 2.6 推送充电状态
+     * */
+    @Operation(summary = "推送充电状态")
+    @GetMapping("/notification_equip_charge_status")
+    public ResponseParmsEntity chargeStatusResponse(@RequestBody RequestParmsEntity requestDTO){
+        return chargingReceptionService.chargeStatusResponse(requestDTO);
+    }
+
+    /**
+     * 2.8 推送停止充电结果
+     * */
+    @Operation(summary = "推送停止充电结果")
+    @GetMapping("/notification_stop_charge_result")
+    public ResponseParmsEntity stopChargeResponse(@RequestBody RequestParmsEntity requestDTO){
+        return chargingReceptionService.stopChargeResponse(requestDTO);
+    }
+
+    /**
+     * 2.9 推送充电订单信息
+     * */
+    @Operation(summary = "推送充电订单信息")
+    @GetMapping("/notification_charge_order_info")
+    public ResponseParmsEntity chargeOrderResponse(@RequestBody RequestParmsEntity requestDTO){
+        return chargingReceptionService.chargeOrderResponse(requestDTO);
+    }
+
+}

+ 43 - 0
src/main/java/com/zsElectric/boot/charging/dto/StartChargingRequestDTO.java

@@ -0,0 +1,43 @@
+package com.zsElectric.boot.charging.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Pattern;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+
+@Data
+@Accessors(chain = true)
+@Schema(description = "请求启动充电DTO")
+public class StartChargingRequestDTO {
+
+    @NotBlank(message = "充电订单号不能为空")
+    @Pattern(regexp = "^\\d{27}$", message = "充电订单号必须为27位数字")
+    @Schema(description = "充电订单号(格式:运营商ID+唯一编号,27位)",
+            example = "123456789201805071630123456",
+            required = true)
+    private String StartChargeSeq;
+
+    @NotBlank(message = "充电设备接口编码不能为空")
+    @Schema(description = "充电设备接口编码(见中电联协议 102.2-2016)",
+            example = "3702120244102_1",
+            required = true)
+    private String ConnectorID;
+
+    @Schema(description = "手机号(平台扩展字段)",
+            example = "13800138000")
+    private String PhoneNum;
+
+    @Schema(description = "车牌号(平台扩展字段)",
+            example = "京A12345")
+    private String PlateNum;
+
+    @Schema(description = "预付金额(单位元)(平台扩展字段)",
+            example = "50.00")
+    private String ChargingAmt;
+
+    @Schema(description = "二维码其他信息(二维码中含有自定义部分的,需要将二维码自定义部分的原文传输)",
+            example = "custom_qr_info_123456")
+    private String QRCode;
+}

+ 26 - 14
src/main/java/com/zsElectric/boot/charging/service/ChargingBusinessService.java

@@ -1,21 +1,13 @@
 package com.zsElectric.boot.charging.service;
 
-import com.zsElectric.boot.charging.vo.ChargingPricePolicyVO;
-import com.zsElectric.boot.charging.vo.EquipmentAuthResponseVO;
-import com.zsElectric.boot.charging.vo.QueryStationStatusVO;
-import com.zsElectric.boot.charging.vo.QueryStationsInfoVO;
-import com.zsElectric.boot.common.util.electric.ApiToken;
-import com.zsElectric.boot.common.util.electric.QueryTokenResponseData;
-import org.springframework.stereotype.Service;
+import com.zsElectric.boot.charging.dto.StartChargingRequestDTO;
+import com.zsElectric.boot.charging.dto.StartChargingResponseVO;
+import com.zsElectric.boot.charging.vo.*;
 
 import java.util.List;
 
-
-@Service
 public interface ChargingBusinessService {
 
-    ApiToken queryToken();
-
     /**
      * <p>查询业务策略信息</p>
      * @author SheepHy
@@ -34,7 +26,7 @@ public interface ChargingBusinessService {
      * @return 返回值描述,如无返回值则为void 返回值为类则包含{@link EquipmentAuthResponseVO}
      *
      */
-    EquipmentAuthResponseVO queryEquipAuth(String EquipAuthSeq, String ConnectorID) throws Exception;
+    EquipmentAuthResponseVO queryEquipAuth(String EquipAuthSeq, String ConnectorID);
 
     /**
      * <p>查询充电站信息</p>
@@ -45,7 +37,7 @@ public interface ChargingBusinessService {
      * @return 充电站信息列表
      *
      */
-    QueryStationsInfoVO queryStationsInfo(String LastQueryTime, Integer PageNo, Integer PageSize) throws Exception;
+    QueryStationsInfoVO queryStationsInfo(String LastQueryTime, Integer PageNo, Integer PageSize);
 
     /**
      * <p>设备接口状态查询</p>
@@ -54,5 +46,25 @@ public interface ChargingBusinessService {
      * @return 充电站状态列表
      *
      */
-    QueryStationStatusVO queryStationStatus(List<String> stationIDs) throws Exception;
+    QueryStationStatusVO queryStationStatus(List<String> stationIDs);
+
+    /**
+     * <p>请求启动充电</p>
+     * @author SheepHy
+     * @param requestDTO,参数为类则包含{@link StartChargingRequestDTO}
+     * @return 返回值描述,如无返回值则为void 返回值为类则包含{@link StartChargingResponseVO}
+     */
+    StartChargingResponseVO startCharging(StartChargingRequestDTO requestDTO);
+
+    /**
+     * <p>查询充电状态</p>
+     * @author SheepHy
+     */
+    ChargingStatusQueryResponseVO queryChargingStatus(String StartChargeSeq);
+
+    /**
+     * <p>请求停止充电</p>
+     * @author SheepHy
+     */
+    StopChargingOperationResponseVO stopCharging(String StartChargeSeq, String ConnectorID);
 }

+ 34 - 0
src/main/java/com/zsElectric/boot/charging/service/ChargingReceptionService.java

@@ -0,0 +1,34 @@
+package com.zsElectric.boot.charging.service;
+
+
+import com.zsElectric.boot.common.util.electric.RequestParmsEntity;
+import com.zsElectric.boot.common.util.electric.ResponseParmsEntity;
+
+/**
+ * 接收互联互通(平台)推送数据接口
+ * */
+public interface ChargingReceptionService {
+
+    /**
+     * <p>2.4 推送启动充电结果</p>
+     * @author SheepHy
+     * @param requestDTO,参数为类则包含{@link RequestParmsEntity}
+     * @return 停推送启动充电结果VO
+     */
+    ResponseParmsEntity chargeResponse(RequestParmsEntity requestDTO);
+
+    /**
+     * 2.6 推送充电状态
+     * */
+    ResponseParmsEntity chargeStatusResponse(RequestParmsEntity requestDTO);
+
+    /**
+     * 2.8 推送停止充电结果
+     * */
+    ResponseParmsEntity stopChargeResponse(RequestParmsEntity requestDTO);
+
+    /**
+     * 2.9 推送充电订单信息
+     * */
+    ResponseParmsEntity chargeOrderResponse(RequestParmsEntity requestDTO);
+}

+ 39 - 4
src/main/java/com/zsElectric/boot/charging/service/impl/ChargingBusinessServiceImpl.java

@@ -3,11 +3,10 @@ package com.zsElectric.boot.charging.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import com.google.gson.Gson;
 import com.google.gson.JsonObject;
+import com.zsElectric.boot.charging.dto.StartChargingRequestDTO;
+import com.zsElectric.boot.charging.dto.StartChargingResponseVO;
 import com.zsElectric.boot.charging.service.ChargingBusinessService;
-import com.zsElectric.boot.charging.vo.ChargingPricePolicyVO;
-import com.zsElectric.boot.charging.vo.EquipmentAuthResponseVO;
-import com.zsElectric.boot.charging.vo.QueryStationStatusVO;
-import com.zsElectric.boot.charging.vo.QueryStationsInfoVO;
+import com.zsElectric.boot.charging.vo.*;
 import com.zsElectric.boot.common.constant.ConnectivityConstants;
 import com.zsElectric.boot.common.util.AESCryptoUtils;
 import com.zsElectric.boot.common.util.HmacMD5Util;
@@ -146,4 +145,40 @@ public class ChargingBusinessServiceImpl implements ChargingBusinessService {
         log.info("设备接口状态查询返回结果解密后:{}", responseDecode);
         return new Gson().fromJson(responseDecode, QueryStationStatusVO.class);
     }
+
+    @Override
+    public StartChargingResponseVO startCharging(StartChargingRequestDTO requestDTO){
+        Map<String, Object> stringObjectMap = BeanUtil.beanToMap(requestDTO);
+        log.info("设备接口状态查询请求参数:{}", stringObjectMap);
+        JsonObject jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_START_CHARGE, stringObjectMap, true);
+        log.info("设备接口状态查询返回结果:{}", jsonObject);
+        JsonObject responseDecode = chargingUtil.responseDecode(jsonObject);
+        log.info("设备接口状态查询返回结果解密后:{}", responseDecode);
+        return new Gson().fromJson(responseDecode, StartChargingResponseVO.class);
+    }
+
+    @Override
+    public ChargingStatusQueryResponseVO queryChargingStatus(String StartChargeSeq) {
+        Map<String, Object> queryParms = new HashMap<>();
+        queryParms.put("StartChargeSeq", StartChargeSeq);
+        log.info("查询充电订单状态请求参数:{}", queryParms);
+        JsonObject jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_EQUIP_CHARGE_STATUS, queryParms, true);
+        log.info("查询充电订单状态返回结果:{}", jsonObject);
+        JsonObject responseDecode = chargingUtil.responseDecode(jsonObject);
+        log.info("查询充电订单状态返回结果解密后:{}", responseDecode);
+        return new Gson().fromJson(responseDecode, ChargingStatusQueryResponseVO.class);
+    }
+
+    @Override
+    public StopChargingOperationResponseVO stopCharging(String StartChargeSeq, String ConnectorID) {
+        Map<String, Object> queryTokenParms = new HashMap<>();
+        queryTokenParms.put("StartChargeSeq", StartChargeSeq);
+        queryTokenParms.put("ConnectorID", ConnectorID);
+        log.info("停止充电请求参数:{}", queryTokenParms);
+        JsonObject jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_STOP_CHARGE, queryTokenParms, true);
+        log.info("停止充电返回结果:{}", jsonObject);
+        JsonObject responseDecode = chargingUtil.responseDecode(jsonObject);
+        log.info("停止充电返回结果解密后:{}", responseDecode);
+        return new Gson().fromJson(responseDecode, StopChargingOperationResponseVO.class);
+    }
 }

+ 173 - 0
src/main/java/com/zsElectric/boot/charging/service/impl/ChargingReceptionServiceImpl.java

@@ -0,0 +1,173 @@
+package com.zsElectric.boot.charging.service.impl;
+
+import com.google.gson.Gson;
+import com.zsElectric.boot.charging.service.ChargingReceptionService;
+import com.zsElectric.boot.charging.vo.*;
+import com.zsElectric.boot.common.constant.ConnectivityConstants;
+import com.zsElectric.boot.common.util.electric.ChargingUtil;
+import com.zsElectric.boot.common.util.electric.RequestParmsEntity;
+import com.zsElectric.boot.common.util.electric.ResponseParmsEntity;
+import com.zsElectric.boot.core.exception.BusinessException;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import static com.zsElectric.boot.common.constant.ConnectivityConstants.FAIL_REASON_NONE;
+import static com.zsElectric.boot.common.constant.ConnectivityConstants.STATUS_OK;
+import static com.zsElectric.boot.common.util.HmacMD5Util.genSign;
+import static com.zsElectric.boot.common.util.HmacMD5Util.verify;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class ChargingReceptionServiceImpl implements ChargingReceptionService {
+
+    private final ChargingUtil chargingUtil;
+
+    @Override
+    public ResponseParmsEntity chargeResponse(RequestParmsEntity requestDTO) {
+        log.info("接收推送启动充电结果请求参数:{}", requestDTO);
+        ChargingStatusResponseVO chargingStatusResponseVO;
+        // 响应参数 答复处理
+        ChargeResponseVO chargeResponseVO = new ChargeResponseVO();
+        String encryptData;
+        String genSign;
+        try {
+            String data = requestDTO.getOperatorID() + requestDTO.getData() + requestDTO.getTimeStamp() + requestDTO.getSeq();
+            if(verify(data, ConnectivityConstants.SIG_SECRET, requestDTO.getSig())){
+                String decryptData = chargingUtil.decryptData(requestDTO.getData());
+                log.info("解密后的数据:{}", decryptData);
+                chargingStatusResponseVO = new Gson().fromJson(decryptData, ChargingStatusResponseVO.class);
+                //todo 业务代码待处理
+
+
+                chargeResponseVO.setStartChargeSeq(chargingStatusResponseVO.getStartChargeSeq());
+                chargeResponseVO.setSuccStat(STATUS_OK);
+                chargeResponseVO.setFailReason(FAIL_REASON_NONE);
+                encryptData = chargingUtil.encryptData(new Gson().toJson(chargeResponseVO));
+                genSign = genSign(STATUS_OK, "请求成功", encryptData, ConnectivityConstants.SIG_SECRET);
+            }else {
+                log.error("数据验签失败");
+                throw new BusinessException("数据验签失败");
+            }
+        }catch (Exception e){
+            log.error("数据解密失败:{}", e.getMessage());
+            throw new BusinessException("数据解密失败:" + e.getMessage(), e);
+        }
+        return new ResponseParmsEntity()
+                .setRet(STATUS_OK)
+                .setMsg("请求成功")
+                .setData(encryptData)
+                .setSig(genSign);
+    }
+
+    @Override
+    public ResponseParmsEntity chargeStatusResponse(RequestParmsEntity requestDTO) {
+        log.info("接收推送充电状态请求参数:{}", requestDTO);
+        EquipChargeStatusResponseVO equipChargeStatusResponseVO;
+        ChargeResponseVO chargeResponseVO = new ChargeResponseVO();
+        String encryptData;
+        String genSign;
+        try {
+            String data = requestDTO.getOperatorID() + requestDTO.getData() + requestDTO.getTimeStamp() + requestDTO.getSeq();
+            if(verify(data, ConnectivityConstants.SIG_SECRET, requestDTO.getSig())){
+                String decryptData = chargingUtil.decryptData(requestDTO.getData());
+                log.info("解密后的数据:{}", decryptData);
+                equipChargeStatusResponseVO = new Gson().fromJson(decryptData, EquipChargeStatusResponseVO.class);
+                //todo 业务代码待处理
+
+
+
+                chargeResponseVO.setStartChargeSeq(equipChargeStatusResponseVO.getStartChargeSeq());
+                chargeResponseVO.setSuccStat(STATUS_OK);
+                chargeResponseVO.setFailReason(FAIL_REASON_NONE);
+                encryptData = chargingUtil.encryptData(new Gson().toJson(chargeResponseVO));
+                genSign = genSign(STATUS_OK, "请求成功", encryptData, ConnectivityConstants.SIG_SECRET);
+            }else {
+                log.error("数据验签失败");
+                throw new BusinessException("数据验签失败");
+            }
+        } catch (Exception e) {
+            log.error("数据解密失败:{}", e.getMessage());
+            throw new BusinessException("数据解密失败:" + e.getMessage(), e);
+        }
+        return new ResponseParmsEntity()
+                .setRet(STATUS_OK)
+                .setMsg("请求成功")
+                .setData(encryptData)
+                .setSig(genSign);
+    }
+
+    @Override
+    public ResponseParmsEntity stopChargeResponse(RequestParmsEntity requestDTO) {
+        log.info("接收推送停止充电结果请求参数:{}", requestDTO);
+        StopChargingResponseVO stopChargingResponseVO;
+        ChargeResponseVO chargeResponseVO = new ChargeResponseVO();
+        String encryptData;
+        String genSign;
+        try {
+            String data = requestDTO.getOperatorID() + requestDTO.getData() + requestDTO.getTimeStamp() + requestDTO.getSeq();
+            if(verify(data, ConnectivityConstants.SIG_SECRET, requestDTO.getSig())){
+                String decryptData = chargingUtil.decryptData(requestDTO.getData());
+                log.info("解密后的数据:{}", decryptData);
+                stopChargingResponseVO = new Gson().fromJson(decryptData, StopChargingResponseVO.class);
+                //todo 业务代码待处理
+
+
+                chargeResponseVO.setStartChargeSeq(stopChargingResponseVO.getStartChargeSeq());
+                chargeResponseVO.setSuccStat(STATUS_OK);
+                chargeResponseVO.setFailReason(FAIL_REASON_NONE);
+                encryptData = chargingUtil.encryptData(new Gson().toJson(chargeResponseVO));
+                genSign = genSign(STATUS_OK, "请求成功", encryptData, ConnectivityConstants.SIG_SECRET);
+            }else {
+                log.error("数据验签失败");
+                throw new BusinessException("数据验签失败");
+            }
+        } catch (Exception e) {
+            log.error("数据解密失败:{}", e.getMessage());
+            throw new BusinessException("数据解密失败:" + e.getMessage(), e);
+        }
+        return new ResponseParmsEntity()
+                .setRet(STATUS_OK)
+                .setMsg("请求成功")
+                .setData(encryptData)
+                .setSig(genSign);
+    }
+
+    @Override
+    public ResponseParmsEntity chargeOrderResponse(RequestParmsEntity requestDTO) {
+        log.info("接收推送充电订单信息请求参数:{}", requestDTO);
+        ChargingOrderVO chargingOrderVO;
+        ChargeResponseVO chargeResponseVO = new ChargeResponseVO();
+        String encryptData;
+        String genSign;
+        try {
+            String data = requestDTO.getOperatorID() + requestDTO.getData() + requestDTO.getTimeStamp() + requestDTO.getSeq();
+            if(verify(data, ConnectivityConstants.SIG_SECRET, requestDTO.getSig())){
+                String decryptData = chargingUtil.decryptData(requestDTO.getData());
+                log.info("解密后的数据:{}", decryptData);
+                chargingOrderVO = new Gson().fromJson(decryptData, ChargingOrderVO.class);
+                //todo 业务代码待处理
+
+
+                chargeResponseVO.setStartChargeSeq(chargingOrderVO.getStartChargeSeq());
+                chargeResponseVO.setSuccStat(STATUS_OK);
+                chargeResponseVO.setFailReason(FAIL_REASON_NONE);
+                encryptData = chargingUtil.encryptData(new Gson().toJson(chargeResponseVO));
+                genSign = genSign(STATUS_OK, "请求成功", encryptData, ConnectivityConstants.SIG_SECRET);
+            }else {
+                log.error("数据验签失败");
+                throw new BusinessException("数据验签失败");
+            }
+        } catch (Exception e) {
+            log.error("数据解密失败:{}", e.getMessage());
+            throw new BusinessException("数据解密失败:" + e.getMessage(), e);
+        }
+        return new ResponseParmsEntity()
+                .setRet(STATUS_OK)
+                .setMsg("请求成功")
+                .setData(encryptData)
+                .setSig(genSign);
+    }
+
+}

+ 0 - 104
src/main/java/com/zsElectric/boot/charging/vo/ChargeOrderDetailVO.java

@@ -1,104 +0,0 @@
-package com.zsElectric.boot.charging.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-import java.math.BigDecimal;
-import java.util.List;
-
-@Data
-@Accessors(chain = true)
-@Schema(description = "充电订单状态详情响应VO")
-public class ChargeOrderDetailVO {
-
-    @Schema(description = "订单状态(1-启动中,2-启动成功,3-启动失败,4-结束)",
-            example = "2")
-    private Integer StartChargeSeqStat;
-
-    @Schema(description = "充电订单号(格式:运营商ID+唯一编号)",
-            example = "123456789201712121131011234")
-    private String StartChargeSeq;
-
-    @Schema(description = "充电设备接口编码",
-            example = "3702120244401_1")
-    private String ConnectorID;
-
-    @Schema(description = "设备接口状态(0-离网,1-空闲,2-占用(未充电),3-占用(充电中),4-占用(预约锁定),255-故障)",
-            example = "3")
-    private Integer ConnectorStatus;
-
-    @Schema(description = "A相电流", example = "78.1")
-    private BigDecimal CurrentA;
-
-    @Schema(description = "B相电流", example = "0.0")
-    private BigDecimal CurrentB;
-
-    @Schema(description = "C相电流", example = "0.0")
-    private BigDecimal CurrentC;
-
-    @Schema(description = "A相电压", example = "575.3")
-    private BigDecimal VoltageA;
-
-    @Schema(description = "B相电压", example = "0.0")
-    private BigDecimal VoltageB;
-
-    @Schema(description = "C相电压", example = "0.0")
-    private BigDecimal VoltageC;
-
-    @Schema(description = "电池SOC(剩余电量百分比)", example = "5.0")
-    private BigDecimal Soc;
-
-    @Schema(description = "充电开始时间", example = "2018-02-06 16:54:38")
-    private String StartTime;
-
-    @Schema(description = "充电结束时间", example = "2018-02-06 17:25:00")
-    private String EndTime;
-
-    @Schema(description = "累计充电电量(单位:kWh)", example = "3.5438")
-    private BigDecimal TotalPower;
-
-    @Schema(description = "电费(单位:元)", example = "4.956")
-    private BigDecimal ElecMoney;
-
-    @Schema(description = "服务费(单位:元)", example = "0.0")
-    private BigDecimal ServiceMoney;
-
-    @Schema(description = "总金额(单位:元)", example = "4.956")
-    private BigDecimal TotalMoney;
-
-    @Schema(description = "总时段数", example = "1")
-    private Integer SumPeriod;
-
-    @Schema(description = "充电明细列表")
-    private List<ChargeDetail> ChargeDetails;
-
-    @Data
-    @Accessors(chain = true)
-    @Schema(description = "充电明细信息")
-    public static class ChargeDetail {
-
-        @Schema(description = "开始时间(yyyy-MM-dd HH:mm:ss格式)",
-                example = "2018-02-06 16:54:38")
-        private String DetailStartTime;
-
-        @Schema(description = "结束时间(yyyy-MM-dd HH:mm:ss格式)",
-                example = "2018-02-06 17:25:00")
-        private String DetailEndTime;
-
-        @Schema(description = "时段电价(小数点后2位)", example = "0.70")
-        private BigDecimal ElecPrice;
-
-        @Schema(description = "时段服务费价格(小数点后2位)", example = "0.30")
-        private BigDecimal ServicePrice;
-
-        @Schema(description = "时段充电量(单位:度,小数点后2位)", example = "3.54")
-        private BigDecimal DetailPower;
-
-        @Schema(description = "时段电费(小数点后2位)", example = "2.48")
-        private BigDecimal DetailElecMoney;
-
-        @Schema(description = "时段服务费(小数点后2位)", example = "1.06")
-        private BigDecimal DetailServiceMoney;
-    }
-}

+ 2 - 2
src/main/java/com/zsElectric/boot/charging/vo/StopChargeResponseVO.java → src/main/java/com/zsElectric/boot/charging/vo/ChargeResponseVO.java

@@ -7,8 +7,8 @@ import lombok.experimental.Accessors;
 
 @Data
 @Accessors(chain = true)
-@Schema(description = "充电订单停止响应VO")
-public class StopChargeResponseVO {
+@Schema(description = "响应VO")
+public class ChargeResponseVO {
 
     @Schema(description = "充电订单号(格式:运营商ID+唯一编号)",
             example = "123456789201805141125123456")

+ 104 - 0
src/main/java/com/zsElectric/boot/charging/vo/ChargingOrderVO.java

@@ -0,0 +1,104 @@
+package com.zsElectric.boot.charging.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@Schema(description = "充电订单信息VO")
+public class ChargingOrderVO {
+
+    @Schema(description = "充电订单号(格式:运营商ID+唯一编号)",
+            example = "123456789201805071630123456",
+            required = true)
+    private String StartChargeSeq;
+
+    @Schema(description = "充电设备接口编码",
+            example = "3702120244102_1",
+            required = true)
+    private String ConnectorID;
+
+    @Schema(description = "开始充电时间,格式\"yyyy-MM-dd HH:mm:ss\"",
+            example = "2024-01-15 10:30:00",
+            required = true)
+    private String StartTime;
+
+    @Schema(description = "结束充电时间,格式\"yyyy-MM-dd HH:mm:ss\"",
+            example = "2024-01-15 12:45:30",
+            required = true)
+    private String EndTime;
+
+    @Schema(description = "累计充电量,单位:度,小数点后4位",
+            example = "25.6845",
+            required = true)
+    private BigDecimal TotalPower;
+
+    @Schema(description = "总电费,单位:元,小数点后2位",
+            example = "15.80",
+            required = true)
+    private BigDecimal TotalElecMoney;
+
+    @Schema(description = "总服务费,单位:元,小数点后2位",
+            example = "3.20",
+            required = true)
+    private BigDecimal TotalSeviceMoney;
+
+    @Schema(description = "累计总金额,单位:元,小数点后2位",
+            example = "19.00",
+            required = true)
+    private BigDecimal TotalMoney;
+
+    @Schema(description = "充电结束原因(0:用户手动停止充电;1:客户归属地运营商平台停止充电;2:BMS停止充电;3:充电机设备故障;4:连接器断开;其它:自定义)",
+            example = "0",
+            allowableValues = {"0", "1", "2", "3", "4"},
+            required = true)
+    private Integer StopReason;
+
+    @Schema(description = "时段数N,范围:0~32",
+            example = "5")
+    private Integer SumPeriod;
+
+    @Schema(description = "单时段充电明细信息")
+    private List<ChargeDetail> ChargeDetails;
+
+    @Data
+    @Accessors(chain = true)
+    @Schema(description = "充电明细信息体")
+    public static class ChargeDetail {
+
+        @Schema(description = "开始时间,格式\"yyyy-MM-dd HH:mm:ss\"",
+                example = "2024-01-15 10:30:00",
+                required = true)
+        private String DetailStartTime;
+
+        @Schema(description = "结束时间,格式\"yyyy-MM-dd HH:mm:ss\"",
+                example = "2024-01-15 11:30:00",
+                required = true)
+        private String DetailEndTime;
+
+        @Schema(description = "时段电价,小数点后2位",
+                example = "0.65")
+        private BigDecimal ElecPrice;
+
+        @Schema(description = "时段服务费价格,小数点后2位",
+                example = "0.15")
+        private BigDecimal SevicePrice;
+
+        @Schema(description = "时段充电量,单位:度,小数点后4位",
+                example = "12.3456",
+                required = true)
+        private BigDecimal DetailPower;
+
+        @Schema(description = "时段电费,小数点后2位",
+                example = "8.02")
+        private BigDecimal DetailElecMoney;
+
+        @Schema(description = "时段服务费,小数点后2位",
+                example = "1.85")
+        private BigDecimal DetailSeviceMoney;
+    }
+}

+ 97 - 0
src/main/java/com/zsElectric/boot/charging/vo/ChargingStatusQueryResponseVO.java

@@ -0,0 +1,97 @@
+package com.zsElectric.boot.charging.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@Schema(description = "充电状态查询响应VO")
+public class ChargingStatusQueryResponseVO {
+
+    @Schema(description = "订单状态(1-启动中,2-启动成功,3-启动失败,4-结束)",
+            example = "2",
+            allowableValues = {"1", "2", "3", "4"},
+            required = true)
+    private Integer StartChargeSeqStat;
+
+    @Schema(description = "充电订单号(格式:运营商ID+唯一编号)",
+            example = "123456789201805071630123456",
+            required = true)
+    private String StartChargeSeq;
+
+    @Schema(description = "充电设备接口编码",
+            example = "3702120244102_1",
+            required = true)
+    private String ConnectorID;
+
+    @Schema(description = "设备接口状态(0-离网,1-空闲,2-占用(未充电),3-占用(充电中),4-占用(预约锁定),255-故障)",
+            example = "3",
+            allowableValues = {"0", "1", "2", "3", "4", "255"},
+            required = true)
+    private Integer ConnectorStatus;
+
+    @Schema(description = "累计充电电量,单位:kWh",
+            example = "25.68",
+            required = true)
+    private BigDecimal TotalPower;
+
+    @Schema(description = "电费,单位:元",
+            example = "15.80",
+            required = true)
+    private BigDecimal ElecMoney;
+
+    @Schema(description = "服务费,单位:元",
+            example = "3.20",
+            required = true)
+    private BigDecimal SeviceMoney;
+
+    @Schema(description = "总金额,单位:元",
+            example = "19.00",
+            required = true)
+    private BigDecimal TotalMoney;
+
+    @Schema(description = "充电明细信息体列表",
+            required = true)
+    private List<ChargeDetail> ChargeDetails;
+
+    @Data
+    @Accessors(chain = true)
+    @Schema(description = "充电明细信息体")
+    public static class ChargeDetail {
+
+        @Schema(description = "开始时间,格式\"yyyy-MM-dd HH:mm:ss\"",
+                example = "2024-01-15 10:30:00",
+                required = true)
+        private String DetailStartTime;
+
+        @Schema(description = "结束时间,格式\"yyyy-MM-dd HH:mm:ss\"",
+                example = "2024-01-15 11:30:00",
+                required = true)
+        private String DetailEndTime;
+
+        @Schema(description = "时段电价,小数点后2位",
+                example = "0.65")
+        private BigDecimal ElecPrice;
+
+        @Schema(description = "时段服务费价格,小数点后2位",
+                example = "0.15")
+        private BigDecimal SevicePrice;
+
+        @Schema(description = "时段充电量,单位:度,小数点后2位",
+                example = "12.34",
+                required = true)
+        private BigDecimal DetailPower;
+
+        @Schema(description = "时段电费,小数点后2位",
+                example = "8.02")
+        private BigDecimal DetailElecMoney;
+
+        @Schema(description = "时段服务费,小数点后2位",
+                example = "1.85")
+        private BigDecimal DetailSeviceMoney;
+    }
+}

+ 40 - 0
src/main/java/com/zsElectric/boot/charging/vo/ChargingStatusResponseVO.java

@@ -0,0 +1,40 @@
+package com.zsElectric.boot.charging.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@Schema(description = "充电状态查询响应VO")
+public class ChargingStatusResponseVO {
+
+    @Schema(description = "充电订单号(格式:运营商ID+唯一编号)",
+            example = "123456789201805141125123456",
+            required = true)
+    private String StartChargeSeq;
+
+    @Schema(description = "充电订单状态(1:启动中;2:充电中;3:停止中;4:已结束;5:未知)",
+            example = "2",
+            allowableValues = {"1", "2", "3", "4", "5"},
+            required = true)
+    private Integer StartChargeSeqStat;
+
+    @Schema(description = "充电设备接口编码",
+            example = "3702120244403_1",
+            required = true)
+    private String ConnectorID;
+
+    @Schema(description = "充电启动时间(格式:yyyy-MM-dd HH:mm:ss)",
+            example = "2018-05-17 09:08:00",
+            required = true)
+    private String StartTime;
+
+    @Schema(description = "停止充电验证码",
+            example = "886543")
+    private String IdentCode;
+
+    @Schema(description = "失败原因描述",
+            example = "设备离线")
+    private String FailReasonMsg;
+}

+ 76 - 0
src/main/java/com/zsElectric/boot/charging/vo/EquipChargeStatusResponseVO.java

@@ -0,0 +1,76 @@
+package com.zsElectric.boot.charging.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@Schema(description = "推送充电状态响应VO")
+public class EquipChargeStatusResponseVO {
+    @Schema(description = "充电订单号,27位", example = "123456789201805071630123456", required = true)
+    private String StartChargeSeq;
+
+    @Schema(description = "订单状态(1-启动中,2-启动成功,3-启动失败,4-结束)", example = "2", allowableValues = {"1", "2", "3", "4"}, required = true)
+    private Integer StartChargeSeqStat;
+
+    @Schema(description = "充电设备接口编码", example = "3702120244102_1", required = true)
+    private String ConnectorID;
+
+    @Schema(description = "设备接口状态(0-离网,1-空闲,2-占用(未充电),3-占用(充电中),4-占用(预约锁定),255-故障)", example = "3", allowableValues = {"0", "1", "2", "3", "4", "255"}, required = true)
+    private Integer ConnectorStatus;
+
+    @Schema(description = "A相电流,单位:A", example = "15.5", required = true)
+    private BigDecimal CurrentA;
+
+    @Schema(description = "A相电压,单位:V", example = "220.0", required = true)
+    private BigDecimal VoltageA;
+
+    @Schema(description = "荷电状态,0-100", example = "80", required = true)
+    private Integer Soc;
+
+    @Schema(description = "累计充电电量,单位:kWh", example = "25.68", required = true)
+    private BigDecimal TotalPower;
+
+    @Schema(description = "电费,单位:元", example = "15.80", required = true)
+    private BigDecimal ElecMoney;
+
+    @Schema(description = "服务费,单位:元", example = "3.20", required = true)
+    private BigDecimal SeviceMoney;
+
+    @Schema(description = "总金额,单位:元", example = "19.00", required = true)
+    private BigDecimal TotalMoney;
+
+    @Schema(description = "充电明细信息体列表", required = true)
+    private List<ChargeDetail> ChargeDetails;
+
+    @Data
+    @Accessors(chain = true)
+    @Schema(description = "充电明细信息体")
+    public static class ChargeDetail {
+
+        @Schema(description = "开始时间,格式\"yyyy-MM-dd HH:mm:ss\"", example = "2024-01-15 10:30:00", required = true)
+        private String DetailStartTime;
+
+        @Schema(description = "结束时间,格式\"yyyy-MM-dd HH:mm:ss\"", example = "2024-01-15 11:30:00", required = true)
+        private String DetailEndTime;
+
+        @Schema(description = "时段电价,小数点后2位", example = "0.65")
+        private BigDecimal ElecPrice;
+
+        @Schema(description = "时段服务费价格,小数点后2位", example = "0.15")
+        private BigDecimal SevicePrice;
+
+        @Schema(description = "时段充电量,单位:度,小数点后4位", example = "12.3456", required = true)
+        private BigDecimal DetailPower;
+
+        @Schema(description = "时段电费,小数点后2位", example = "8.02")
+        private BigDecimal DetailElecMoney;
+
+        @Schema(description = "时段服务费,小数点后2位", example = "1.85")
+        private BigDecimal DetailSeviceMoney;
+    }
+}

+ 44 - 0
src/main/java/com/zsElectric/boot/charging/vo/StartChargingResponseVO.java

@@ -0,0 +1,44 @@
+package com.zsElectric.boot.charging.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@Schema(description = "启动充电返回DTO")
+public class StartChargingResponseVO {
+
+    @Schema(description = "充电订单号(格式:运营商ID+唯一编号)",
+            example = "123456789201805071630123456",
+            required = true)
+    private String StartChargeSeq;
+
+    @Schema(description = "充电订单状态(1-启动中,2-充电中,3-停止中,4-已结束,5-未知)",
+            example = "1",
+            allowableValues = {"1", "2", "3", "4", "5"},
+            required = true)
+    private Integer StartChargeSeqStat;
+
+    @Schema(description = "充电设备接口编码(参见《电动汽车充换电服务信息交换 第2部分:公共信息交换规范》)",
+            example = "3702120244102_1",
+            required = true)
+    private String ConnectorID;
+
+    @Schema(description = "操作结果(0-成功,1-失败)",
+            example = "0",
+            allowableValues = {"0", "1"},
+            required = true)
+    private Integer SuccStat;
+
+    @Schema(description = "失败原因(0-无,1-此设备不存在,2-此设备离线,其它-自定义)",
+            example = "0",
+            allowableValues = {"0", "1", "2"},
+            required = true)
+    private Integer FailReason;
+
+    @Schema(description = "失败原因描述",
+            example = "无错误",
+            required = true)
+    private String FailReasonMsg;
+}

+ 39 - 0
src/main/java/com/zsElectric/boot/charging/vo/StopChargingOperationResponseVO.java

@@ -0,0 +1,39 @@
+package com.zsElectric.boot.charging.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@Schema(description = "停止充电操作响应VO")
+public class StopChargingOperationResponseVO {
+
+    @Schema(description = "充电订单号(格式:运营商ID+唯一编号)",
+            example = "123456789201805071630123456",
+            required = true)
+    private String StartChargeSeq;
+
+    @Schema(description = "充电订单状态(1:启动中;2:充电中;3:停止中;4:已结束;5:未知)",
+            example = "4",
+            allowableValues = {"1", "2", "3", "4", "5"},
+            required = true)
+    private Integer StartChargeSeqStat;
+
+    @Schema(description = "操作结果(0:成功;1:失败)",
+            example = "0",
+            allowableValues = {"0", "1"},
+            required = true)
+    private Integer SuccStat;
+
+    @Schema(description = "失败原因(0:无;1:此设备不存在;2:此设备离线;3:设备已停止充电;其它:自定义)",
+            example = "0",
+            allowableValues = {"0", "1", "2", "3"},
+            required = true)
+    private Integer FailReason;
+
+    @Schema(description = "失败原因描述",
+            example = "停止成功",
+            required = true)
+    private String FailReasonMsg;
+}

+ 16 - 11
src/main/java/com/zsElectric/boot/charging/vo/ChargeOrderStatusVO.java → src/main/java/com/zsElectric/boot/charging/vo/StopChargingResponseVO.java

@@ -1,4 +1,3 @@
-
 package com.zsElectric.boot.charging.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -7,32 +6,38 @@ import lombok.experimental.Accessors;
 
 @Data
 @Accessors(chain = true)
-@Schema(description = "充电订单状态响应VO")
-public class ChargeOrderStatusVO {
+@Schema(description = "停止充电响应VO")
+public class StopChargingResponseVO {
 
     @Schema(description = "充电订单号(格式:运营商ID+唯一编号)",
-            example = "123456789201805141125123456")
+            example = "123456789201805071630123456",
+            required = true)
     private String StartChargeSeq;
 
     @Schema(description = "充电订单状态(1-启动中,2-充电中,3-停止中,4-已结束,5-未知)",
-            example = "1",
-            allowableValues = {"1", "2", "3", "4", "5"})
+            example = "4",
+            allowableValues = {"1", "2", "3", "4", "5"},
+            required = true)
     private Integer StartChargeSeqStat;
 
     @Schema(description = "充电设备接口编码",
-            example = "3702120244402_1")
+            example = "3702120244102_1",
+            required = true)
     private String ConnectorID;
 
     @Schema(description = "操作结果(0-成功,1-失败)",
             example = "0",
-            allowableValues = {"0", "1"})
+            allowableValues = {"0", "1"},
+            required = true)
     private Integer SuccStat;
 
-    @Schema(description = "失败原因(0-无,1-此设备不存在,2-此设备离线,其它-自定义)",
-            example = "0")
+    @Schema(description = "停止失败原因(0-无,1-此设备不存在,2-此设备离线,3-设备已停止充电,其它-自定义)",
+            example = "0",
+            allowableValues = {"0", "1", "2", "3"},
+            required = true)
     private Integer FailReason;
 
     @Schema(description = "失败原因描述",
             example = "无错误")
     private String FailReasonMsg;
-}
+}

+ 21 - 1
src/main/java/com/zsElectric/boot/common/constant/ConnectivityConstants.java

@@ -132,5 +132,25 @@ public interface ConnectivityConstants {
 
 
 
-    /*------------------------------------------请求URL-----------------------------------------------*/
+    /*------------------------------------------请求URL_END-----------------------------------------------*/
+
+    /*------------------------------------------响应状态-----------------------------------------------*/
+    /**
+     * 操作结果成功
+     * */
+    int STATUS_OK = 0;
+    /**
+     * 操作结果失败
+     * */
+    int STATUS_ERROR = 1;
+    /**
+     * 失败原因无
+     * */
+    int FAIL_REASON_NONE = 0;
+    /**
+     * 失败原因接收失败
+     * */
+    int FAIL_REASON_RECEIVE_FAIL = 1;
+
+    /*------------------------------------------响应状态_END-----------------------------------------------*/
 }

+ 14 - 0
src/main/java/com/zsElectric/boot/common/util/HmacMD5Util.java

@@ -36,6 +36,20 @@ public class HmacMD5Util {
         String content = (operatorId + data + timeStamp + seq);
         return hmacMD5Hex(content, sigSecret);
     }
+
+
+    /**
+     * 出参
+     * */
+    public static String genSign(
+            int Ret,
+            String Msg,
+            String Data,
+            String sigSecret) throws NoSuchAlgorithmException {
+
+        String content = (Ret + Msg + Data).toUpperCase();
+        return hmacMD5Hex(content, sigSecret);
+    }
     
     /**
      * HMAC-MD5签名生成

+ 15 - 0
src/main/java/com/zsElectric/boot/common/util/electric/ChargingUtil.java

@@ -112,4 +112,19 @@ public class ChargingUtil {
             throw new RuntimeException("第三方接口响应发生异常", e);
         }
     }
+
+
+    /**
+     * 统一解密接口数据-己方响应
+     * */
+    public String decryptData(String data) throws Exception {
+        return AESCryptoUtils.decrypt(data, ConnectivityConstants.DATA_SECRET, ConnectivityConstants.DATA_SECRET_IV);
+    }
+
+    /**
+     * 统一加密接口数据-己方响应
+     * */
+    public String encryptData(String data) throws Exception {
+        return AESCryptoUtils.encrypt(data, ConnectivityConstants.DATA_SECRET, ConnectivityConstants.DATA_SECRET_IV);
+    }
 }

+ 8 - 8
src/main/java/com/zsElectric/boot/common/util/electric/ElectricTokenManager.java

@@ -1,7 +1,6 @@
 package com.zsElectric.boot.common.util.electric;
 
 import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.util.ObjectUtil;
 import com.google.gson.Gson;
 import com.google.gson.JsonObject;
 import com.zsElectric.boot.common.constant.ConnectivityConstants;
@@ -155,7 +154,7 @@ public class ElectricTokenManager {
             QueryTokenParms queryTokenParms = new QueryTokenParms();
             queryTokenParms
                     .setOperatorID(ConnectivityConstants.OPERATOR_ID)
-                    .setOperatorSecret(ConnectivityConstants.PLATFORM_OPERATOR_SECRET);
+                    .setOperatorSecret(ConnectivityConstants.OPERATOR_SECRET);
 
             RequestParmsEntity requestParms = new RequestParmsEntity();
             SequenceGenUtil.SequenceResult result = SequenceGenUtil.generate();
@@ -166,16 +165,18 @@ public class ElectricTokenManager {
                             ConnectivityConstants.PLATFORM_DATA_SECRET_IV))
                     .setTimeStamp(result.getTimestamp())
                     .setSeq(result.getSequence())
-                    .setSig(HmacMD5Util.genSign(requestParms.getOperatorID(), requestParms.getData(), requestParms.getTimeStamp(),
-                            requestParms.getSeq(), ConnectivityConstants.PLATFORM_SIG_SECRET));
+                    .setSig(HmacMD5Util.genSign(requestParms.getOperatorID(), requestParms.getData(), requestParms.getTimeStamp(), requestParms.getSeq(), ConnectivityConstants.PLATFORM_SIG_SECRET));
 
-            JsonObject response = okHttpUtil.doPostForm(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_TOKEN, new Gson().toJson(requestParms), null);
+            JsonObject response = okHttpUtil.doPostForm(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_TOKEN, BeanUtil.beanToMap(requestParms), null);
 
             if (Objects.isNull(response)) {
                 log.error("调用第三方接口获取Token失败");
                 return null;
             }
-            ResponseParmsEntity responseParms = new Gson().fromJson(response, ResponseParmsEntity.class);
+
+
+            Gson gson = new Gson();
+            ResponseParmsEntity responseParms = gson.fromJson(response, ResponseParmsEntity.class);
             String data = responseParms.getRet() + responseParms.getMsg() + responseParms.getData();
             boolean verify = HmacMD5Util.verify(data, ConnectivityConstants.PLATFORM_SIG_SECRET, responseParms.getSig());
             if (!verify) {
@@ -206,8 +207,7 @@ public class ElectricTokenManager {
             }
             String decodeData = AESCryptoUtils.decrypt(responseParms.getData(), ConnectivityConstants.PLATFORM_DATA_SECRET,
                     ConnectivityConstants.PLATFORM_DATA_SECRET_IV);
-
-            QueryTokenResponseData responseData = new Gson().fromJson(decodeData, QueryTokenResponseData.class);
+            QueryTokenResponseData responseData = gson.fromJson(decodeData, QueryTokenResponseData.class);
 
             if (responseData.getSuccStat() == 1) {
                 //0-无,1-OperatorID无效