LinkDataController.java 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package com.zsElectric.boot.charging.controller;
  2. import com.google.gson.Gson;
  3. import com.zsElectric.boot.charging.service.ChargingReceptionService;
  4. import com.zsElectric.boot.common.annotation.Log;
  5. import com.zsElectric.boot.common.constant.ConnectivityConstants;
  6. import com.zsElectric.boot.common.enums.LogModuleEnum;
  7. import com.zsElectric.boot.common.util.AESCryptoUtils;
  8. import com.zsElectric.boot.common.util.HmacMD5Util;
  9. import com.zsElectric.boot.common.util.electric.QueryTokenResponseData;
  10. import com.zsElectric.boot.common.util.electric.RequestParmsEntity;
  11. import com.zsElectric.boot.common.util.electric.ResponseParmsEntity;
  12. import com.zsElectric.boot.common.util.electric.queryToken.JwtTokenUtil;
  13. import com.zsElectric.boot.common.util.electric.queryToken.QueryTokenRequestParms;
  14. import io.swagger.v3.oas.annotations.Operation;
  15. import io.swagger.v3.oas.annotations.tags.Tag;
  16. import lombok.RequiredArgsConstructor;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.springframework.web.bind.annotation.*;
  19. @Slf4j
  20. @RestController
  21. @RequiredArgsConstructor
  22. @Tag(name = "充电业务相关接口")
  23. @RequestMapping("/dev/v1/linkData")
  24. public class LinkDataController {
  25. private final ChargingReceptionService chargingReceptionService;
  26. private final JwtTokenUtil jwtTokenUtil;
  27. /**
  28. * 获取token
  29. * @author SheepHy
  30. * @param request,参数为类则包含{@link RequestParmsEntity}
  31. * @return 获取tokenVO
  32. */
  33. @Operation(summary = "获取token")
  34. @PostMapping("/query_token")
  35. public ResponseParmsEntity getToken(@RequestBody RequestParmsEntity request) throws Exception {
  36. ResponseParmsEntity responseParmsEntity = new ResponseParmsEntity();
  37. try {
  38. //验证签名
  39. if (!HmacMD5Util.verify(request.getOperatorID() + request.getData() + request.getTimeStamp() + request.getSeq(),
  40. ConnectivityConstants.SIG_SECRET, request.getSig())) {
  41. return responseParmsEntity
  42. .setRet(4001)
  43. .setMsg("签名验证失败")
  44. .setData("")
  45. .setSig(HmacMD5Util.genSign(responseParmsEntity.getRet(), responseParmsEntity.getMsg(), responseParmsEntity.getData(),
  46. ConnectivityConstants.SIG_SECRET));
  47. }
  48. String data = request.getData();
  49. String string = AESCryptoUtils.decrypt(data, ConnectivityConstants.DATA_SECRET, ConnectivityConstants.DATA_SECRET_IV);
  50. QueryTokenRequestParms queryTokenRequestParms = new Gson().fromJson(string, QueryTokenRequestParms.class);
  51. if (queryTokenRequestParms == null || queryTokenRequestParms.getOperatorID() == null || queryTokenRequestParms.getOperatorSecret() == null) {
  52. responseParmsEntity
  53. .setRet(4003)
  54. .setMsg("参数错误")
  55. .setData("");
  56. responseParmsEntity.setSig(HmacMD5Util.genSign(responseParmsEntity.getRet(), responseParmsEntity.getMsg(), responseParmsEntity.getData(),
  57. ConnectivityConstants.SIG_SECRET));
  58. return responseParmsEntity;
  59. }
  60. //判断运营商ID与密钥是否正确
  61. if (!queryTokenRequestParms.getOperatorID().equals(ConnectivityConstants.PLATFORM_OPERATOR_ID) && !queryTokenRequestParms.getOperatorSecret().equals(ConnectivityConstants.PLATFORM_OPERATOR_SECRET)) {
  62. responseParmsEntity
  63. .setRet(4004)
  64. .setMsg("OperatorID或OperatorSecret错误!")
  65. .setData("");
  66. responseParmsEntity.setSig(HmacMD5Util.genSign(responseParmsEntity.getRet(), responseParmsEntity.getMsg(), responseParmsEntity.getData(),
  67. ConnectivityConstants.SIG_SECRET));
  68. }
  69. //redis获取token,不存在则创建
  70. String accessToken = jwtTokenUtil.generateToken(queryTokenRequestParms.getOperatorID());
  71. Integer remainingTTL = jwtTokenUtil.getRemainingTTL(accessToken).intValue();
  72. //构建Data(token信息)
  73. QueryTokenResponseData queryTokenResponseData = new QueryTokenResponseData();
  74. queryTokenResponseData.setOperatorID(queryTokenRequestParms.getOperatorID());
  75. queryTokenResponseData.setAccessToken(accessToken);
  76. queryTokenResponseData.setTokenAvailableTime(remainingTTL);
  77. queryTokenResponseData.setSuccStat(0);
  78. queryTokenResponseData.setFailReason(0);
  79. log.info("生成token信息:{}", new Gson().toJson(queryTokenResponseData));
  80. String encodeData = AESCryptoUtils.encrypt(new Gson().toJson(queryTokenResponseData), ConnectivityConstants.PLATFORM_DATA_SECRET,
  81. ConnectivityConstants.PLATFORM_DATA_SECRET_IV);
  82. responseParmsEntity
  83. .setRet(0)
  84. .setMsg("成功")
  85. .setData(encodeData)
  86. .setSig(HmacMD5Util.genSign(responseParmsEntity.getRet(), responseParmsEntity.getMsg(), responseParmsEntity.getData(),
  87. ConnectivityConstants.SIG_SECRET));
  88. return responseParmsEntity;
  89. } catch (Exception e) {
  90. log.error("系统错误:{}", e.getMessage());
  91. responseParmsEntity
  92. .setRet(500)
  93. .setMsg("系统错误")
  94. .setData("");
  95. responseParmsEntity.setSig(HmacMD5Util.genSign(responseParmsEntity.getRet(), responseParmsEntity.getMsg(), responseParmsEntity.getData(),
  96. ConnectivityConstants.SIG_SECRET));
  97. return responseParmsEntity;
  98. }
  99. }
  100. /**
  101. * <p>2.4 推送启动充电结果</p>
  102. * @author SheepHy
  103. * @param requestDTO,参数为类则包含{@link RequestParmsEntity}
  104. * @return 停推送启动充电结果VO
  105. */
  106. @Operation(summary = "推送启动充电结果")
  107. @PostMapping("/notification_start_charge_result")
  108. @Log(value = "推送启动充电结果", module = LogModuleEnum.PARKING, params = true, result = true)
  109. public ResponseParmsEntity chargeResponse(@RequestBody RequestParmsEntity requestDTO){
  110. return chargingReceptionService.chargeResponse(requestDTO);
  111. }
  112. /**
  113. * 2.6 推送充电状态
  114. * */
  115. @Operation(summary = "推送充电状态")
  116. @PostMapping("/notification_equip_charge_status")
  117. @Log(value = "推送充电状态", module = LogModuleEnum.PARKING, params = true, result = true)
  118. public ResponseParmsEntity chargeStatusResponse(@RequestBody RequestParmsEntity requestDTO){
  119. return chargingReceptionService.chargeStatusResponse(requestDTO);
  120. }
  121. /**
  122. * 2.8 推送停止充电结果
  123. * */
  124. @Operation(summary = "推送停止充电结果")
  125. @PostMapping("/notification_stop_charge_result")
  126. @Log(value = "推送停止充电结果", module = LogModuleEnum.PARKING, params = true, result = true)
  127. public ResponseParmsEntity stopChargeResponse(@RequestBody RequestParmsEntity requestDTO){
  128. return chargingReceptionService.stopChargeResponse(requestDTO);
  129. }
  130. /**
  131. * 2.9 推送充电订单信息
  132. * */
  133. @Operation(summary = "推送充电订单信息")
  134. @PostMapping("/notification_charge_order_info")
  135. @Log(value = "推送充电订单信息", module = LogModuleEnum.PARKING, params = true, result = true)
  136. public ResponseParmsEntity chargeOrderResponse(@RequestBody RequestParmsEntity requestDTO){
  137. return chargingReceptionService.chargeOrderResponse(requestDTO);
  138. }
  139. /**
  140. * 3.2 设备状态变化推送
  141. * */
  142. @Operation(summary = "设备状态变化推送")
  143. @PostMapping("/notification_stationStatus")
  144. @Log(value = "设备状态变化推送", module = LogModuleEnum.PARKING, params = true, result = true)
  145. public ResponseParmsEntity stationStatus(@RequestBody RequestParmsEntity requestDTO){
  146. return chargingReceptionService.stationStatus(requestDTO);
  147. }
  148. }