DoorLockComponent.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package com.chuanghai.ihotel.component;
  2. import com.chuanghai.ihotel.common.exception.BizCodeEnume;
  3. import com.chuanghai.ihotel.common.exception.RRException;
  4. import com.chuanghai.ihotel.config.DoorLockConfig;
  5. import com.chuanghai.ihotel.dto.DoorLockAddPasswordRequestDTO;
  6. import com.chuanghai.ihotel.dto.DoorLockAddPasswordDataDTO;
  7. import com.chuanghai.ihotel.util.DoorLockAESUtil;
  8. import com.chuanghai.ihotel.util.DoorLockMD5Util;
  9. import com.fasterxml.jackson.core.JsonProcessingException;
  10. import com.fasterxml.jackson.databind.JsonNode;
  11. import com.fasterxml.jackson.databind.ObjectMapper;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.http.HttpEntity;
  15. import org.springframework.http.HttpHeaders;
  16. import org.springframework.http.ResponseEntity;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.util.StringUtils;
  19. import org.springframework.web.client.RestTemplate;
  20. import java.util.HashMap;
  21. import java.util.Map;
  22. /**
  23. * 门锁服务
  24. */
  25. @Slf4j
  26. @Service
  27. public class DoorLockComponent {
  28. private String sign;
  29. private ObjectMapper objectMapper = new ObjectMapper();
  30. @Autowired
  31. private DoorLockConfig doorLockConfig;
  32. /**
  33. * 下发密码
  34. * @param addPasswordDTO
  35. * @return
  36. * @throws JsonProcessingException
  37. */
  38. public DoorLockAddPasswordDataDTO addPassword(DoorLockAddPasswordRequestDTO addPasswordDTO) {
  39. String uri = "open/api/v2/lock/addPassword";
  40. addPasswordDTO.setCategoryId(doorLockConfig.getCategoryId());
  41. try {
  42. String dataJsonStr = doRequest(uri, addPasswordDTO);
  43. DoorLockAddPasswordDataDTO dto = objectMapper.readValue(dataJsonStr, DoorLockAddPasswordDataDTO.class);
  44. return dto;
  45. } catch (Exception e) {
  46. throw new RRException(BizCodeEnume.THIRD_PARTY_SERVICE_CALL_FAILED, "门锁服务-请求密码失败-" + e.getMessage());
  47. }
  48. }
  49. /**
  50. * 删除锁用户
  51. * @param lockId
  52. * @param lockUserId
  53. */
  54. public void deleteLockUser(String lockId, String lockUserId) {
  55. String uri = "open/api/v2/lock/deleteLockUser";
  56. Map<String, String> param = new HashMap<>();
  57. param.put("categoryId", doorLockConfig.getCategoryId());
  58. param.put("luid", lockId);
  59. param.put("id", lockUserId);
  60. try {
  61. doRequest(uri, param);
  62. } catch (Exception e) {
  63. throw new RRException(BizCodeEnume.THIRD_PARTY_SERVICE_CALL_FAILED, "门锁服务-删除用户密码失败-" + e.getMessage());
  64. }
  65. }
  66. /**
  67. * 发送请求
  68. * @param uri 请求地址
  69. * @param param 参数
  70. * @throws JsonProcessingException
  71. * @return
  72. */
  73. private String doRequest(String uri, Object param) throws JsonProcessingException {
  74. String url = doorLockConfig.getServiceHost() + uri;
  75. String encrypt = DoorLockAESUtil.encrypt(objectMapper.writeValueAsString(param), doorLockConfig.getAppSecret());
  76. RestTemplate restTemplate = new RestTemplate();
  77. HttpHeaders headers = new HttpHeaders();
  78. headers.add("Content-Type", "application/json");
  79. headers.add("appId", doorLockConfig.getAppId());
  80. headers.add("sign", getSign());
  81. HttpEntity<String> formEntity = new HttpEntity<>(encrypt, headers);
  82. ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, formEntity, String.class);
  83. String body = responseEntity.getBody();
  84. log.info("门锁服务请求结果【{}】", body);
  85. JsonNode jsonNode = objectMapper.readTree(body);
  86. String result = jsonNode.get("result").asText();
  87. if (!"1".equals(result)) {
  88. throw new RRException(BizCodeEnume.THIRD_PARTY_SERVICE_CALL_FAILED, "门锁服务-请求结果状态不为1");
  89. }
  90. String dataJsonStr = jsonNode.get("data").toString();
  91. return dataJsonStr;
  92. }
  93. private String getSign() {
  94. if (StringUtils.hasText(sign)) {
  95. return sign;
  96. } else {
  97. sign = DoorLockMD5Util.getMD5(doorLockConfig.getAppId() + doorLockConfig.getAppSecret());
  98. return sign;
  99. }
  100. }
  101. }