package com.zsElectric.boot.charging.controller; import com.google.gson.Gson; import com.zsElectric.boot.charging.service.ChargingReceptionService; import com.zsElectric.boot.common.annotation.Log; import com.zsElectric.boot.common.constant.ConnectivityConstants; import com.zsElectric.boot.common.enums.LogModuleEnum; import com.zsElectric.boot.common.util.AESCryptoUtils; import com.zsElectric.boot.common.util.HmacMD5Util; import com.zsElectric.boot.common.util.electric.QueryTokenResponseData; import com.zsElectric.boot.common.util.electric.RequestParmsEntity; import com.zsElectric.boot.common.util.electric.ResponseParmsEntity; import com.zsElectric.boot.common.util.electric.queryToken.JwtTokenUtil; import com.zsElectric.boot.common.util.electric.queryToken.QueryTokenRequestParms; 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.*; @Slf4j @RestController @RequiredArgsConstructor @Tag(name = "充电业务相关接口") @RequestMapping("/dev/v1/linkData") public class LinkDataController { private final ChargingReceptionService chargingReceptionService; private final JwtTokenUtil jwtTokenUtil; /** * 获取token * @author SheepHy * @param request,参数为类则包含{@link RequestParmsEntity} * @return 获取tokenVO */ @Operation(summary = "获取token") @PostMapping("/query_token") public ResponseParmsEntity getToken(@RequestBody RequestParmsEntity request) throws Exception { ResponseParmsEntity responseParmsEntity = new ResponseParmsEntity(); try { //验证签名 if (!HmacMD5Util.verify(request.getOperatorID() + request.getData() + request.getTimeStamp() + request.getSeq(), ConnectivityConstants.SIG_SECRET, request.getSig())) { return responseParmsEntity .setRet(4001) .setMsg("签名验证失败") .setData("") .setSig(HmacMD5Util.genSign(responseParmsEntity.getRet(), responseParmsEntity.getMsg(), responseParmsEntity.getData(), ConnectivityConstants.SIG_SECRET)); } String data = request.getData(); String string = AESCryptoUtils.decrypt(data, ConnectivityConstants.DATA_SECRET, ConnectivityConstants.DATA_SECRET_IV); QueryTokenRequestParms queryTokenRequestParms = new Gson().fromJson(string, QueryTokenRequestParms.class); if (queryTokenRequestParms == null || queryTokenRequestParms.getOperatorID() == null || queryTokenRequestParms.getOperatorSecret() == null) { responseParmsEntity .setRet(4003) .setMsg("参数错误") .setData(""); responseParmsEntity.setSig(HmacMD5Util.genSign(responseParmsEntity.getRet(), responseParmsEntity.getMsg(), responseParmsEntity.getData(), ConnectivityConstants.SIG_SECRET)); return responseParmsEntity; } //判断运营商ID与密钥是否正确 if (!queryTokenRequestParms.getOperatorID().equals(ConnectivityConstants.PLATFORM_OPERATOR_ID) && !queryTokenRequestParms.getOperatorSecret().equals(ConnectivityConstants.PLATFORM_OPERATOR_SECRET)) { responseParmsEntity .setRet(4004) .setMsg("OperatorID或OperatorSecret错误!") .setData(""); responseParmsEntity.setSig(HmacMD5Util.genSign(responseParmsEntity.getRet(), responseParmsEntity.getMsg(), responseParmsEntity.getData(), ConnectivityConstants.SIG_SECRET)); } //redis获取token,不存在则创建 String accessToken = jwtTokenUtil.generateToken(queryTokenRequestParms.getOperatorID()); Integer remainingTTL = jwtTokenUtil.getRemainingTTL(accessToken).intValue(); //构建Data(token信息) QueryTokenResponseData queryTokenResponseData = new QueryTokenResponseData(); queryTokenResponseData.setOperatorID(queryTokenRequestParms.getOperatorID()); queryTokenResponseData.setAccessToken(accessToken); queryTokenResponseData.setTokenAvailableTime(remainingTTL); queryTokenResponseData.setSuccStat(0); queryTokenResponseData.setFailReason(0); log.info("生成token信息:{}", new Gson().toJson(queryTokenResponseData)); String encodeData = AESCryptoUtils.encrypt(new Gson().toJson(queryTokenResponseData), ConnectivityConstants.PLATFORM_DATA_SECRET, ConnectivityConstants.PLATFORM_DATA_SECRET_IV); responseParmsEntity .setRet(0) .setMsg("成功") .setData(encodeData) .setSig(HmacMD5Util.genSign(responseParmsEntity.getRet(), responseParmsEntity.getMsg(), responseParmsEntity.getData(), ConnectivityConstants.SIG_SECRET)); return responseParmsEntity; } catch (Exception e) { log.error("系统错误:{}", e.getMessage()); responseParmsEntity .setRet(500) .setMsg("系统错误") .setData(""); responseParmsEntity.setSig(HmacMD5Util.genSign(responseParmsEntity.getRet(), responseParmsEntity.getMsg(), responseParmsEntity.getData(), ConnectivityConstants.SIG_SECRET)); return responseParmsEntity; } } /** *
2.4 推送启动充电结果
* @author SheepHy * @param requestDTO,参数为类则包含{@link RequestParmsEntity} * @return 停推送启动充电结果VO */ @Operation(summary = "推送启动充电结果") @PostMapping("/notification_start_charge_result") @Log(value = "推送启动充电结果", module = LogModuleEnum.PARKING, params = true, result = true) public ResponseParmsEntity chargeResponse(@RequestBody RequestParmsEntity requestDTO){ return chargingReceptionService.chargeResponse(requestDTO); } /** * 2.6 推送充电状态 * */ @Operation(summary = "推送充电状态") @PostMapping("/notification_equip_charge_status") @Log(value = "推送充电状态", module = LogModuleEnum.PARKING, params = true, result = true) public ResponseParmsEntity chargeStatusResponse(@RequestBody RequestParmsEntity requestDTO){ return chargingReceptionService.chargeStatusResponse(requestDTO); } /** * 2.8 推送停止充电结果 * */ @Operation(summary = "推送停止充电结果") @PostMapping("/notification_stop_charge_result") @Log(value = "推送停止充电结果", module = LogModuleEnum.PARKING, params = true, result = true) public ResponseParmsEntity stopChargeResponse(@RequestBody RequestParmsEntity requestDTO){ return chargingReceptionService.stopChargeResponse(requestDTO); } /** * 2.9 推送充电订单信息 * */ @Operation(summary = "推送充电订单信息") @PostMapping("/notification_charge_order_info") @Log(value = "推送充电订单信息", module = LogModuleEnum.PARKING, params = true, result = true) public ResponseParmsEntity chargeOrderResponse(@RequestBody RequestParmsEntity requestDTO){ return chargingReceptionService.chargeOrderResponse(requestDTO); } /** * 3.2 设备状态变化推送 * */ @Operation(summary = "设备状态变化推送") @PostMapping("/notification_stationStatus") @Log(value = "设备状态变化推送", module = LogModuleEnum.PARKING, params = true, result = true) public ResponseParmsEntity stationStatus(@RequestBody RequestParmsEntity requestDTO){ return chargingReceptionService.stationStatus(requestDTO); } }