| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- package com.chuanghai.ihotel.component;
- import com.chuanghai.ihotel.common.exception.BizCodeEnume;
- import com.chuanghai.ihotel.common.exception.RRException;
- import com.chuanghai.ihotel.config.DoorLockConfig;
- import com.chuanghai.ihotel.dto.DoorLockAddPasswordRequestDTO;
- import com.chuanghai.ihotel.dto.DoorLockAddPasswordDataDTO;
- import com.chuanghai.ihotel.util.DoorLockAESUtil;
- import com.chuanghai.ihotel.util.DoorLockMD5Util;
- import com.fasterxml.jackson.core.JsonProcessingException;
- import com.fasterxml.jackson.databind.JsonNode;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.http.HttpEntity;
- import org.springframework.http.HttpHeaders;
- import org.springframework.http.ResponseEntity;
- import org.springframework.stereotype.Service;
- import org.springframework.util.StringUtils;
- import org.springframework.web.client.RestTemplate;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * 门锁服务
- */
- @Slf4j
- @Service
- public class DoorLockComponent {
- private String sign;
- private ObjectMapper objectMapper = new ObjectMapper();
- @Autowired
- private DoorLockConfig doorLockConfig;
- /**
- * 下发密码
- * @param addPasswordDTO
- * @return
- * @throws JsonProcessingException
- */
- public DoorLockAddPasswordDataDTO addPassword(DoorLockAddPasswordRequestDTO addPasswordDTO) {
- String uri = "open/api/v2/lock/addPassword";
- addPasswordDTO.setCategoryId(doorLockConfig.getCategoryId());
- try {
- String dataJsonStr = doRequest(uri, addPasswordDTO);
- DoorLockAddPasswordDataDTO dto = objectMapper.readValue(dataJsonStr, DoorLockAddPasswordDataDTO.class);
- return dto;
- } catch (Exception e) {
- throw new RRException(BizCodeEnume.THIRD_PARTY_SERVICE_CALL_FAILED, "门锁服务-请求密码失败-" + e.getMessage());
- }
- }
- /**
- * 删除锁用户
- * @param lockId
- * @param lockUserId
- */
- public void deleteLockUser(String lockId, String lockUserId) {
- String uri = "open/api/v2/lock/deleteLockUser";
- Map<String, String> param = new HashMap<>();
- param.put("categoryId", doorLockConfig.getCategoryId());
- param.put("luid", lockId);
- param.put("id", lockUserId);
- try {
- doRequest(uri, param);
- } catch (Exception e) {
- throw new RRException(BizCodeEnume.THIRD_PARTY_SERVICE_CALL_FAILED, "门锁服务-删除用户密码失败-" + e.getMessage());
- }
- }
- /**
- * 发送请求
- * @param uri 请求地址
- * @param param 参数
- * @throws JsonProcessingException
- * @return
- */
- private String doRequest(String uri, Object param) throws JsonProcessingException {
- String url = doorLockConfig.getServiceHost() + uri;
- String encrypt = DoorLockAESUtil.encrypt(objectMapper.writeValueAsString(param), doorLockConfig.getAppSecret());
- RestTemplate restTemplate = new RestTemplate();
- HttpHeaders headers = new HttpHeaders();
- headers.add("Content-Type", "application/json");
- headers.add("appId", doorLockConfig.getAppId());
- headers.add("sign", getSign());
- HttpEntity<String> formEntity = new HttpEntity<>(encrypt, headers);
- ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, formEntity, String.class);
- String body = responseEntity.getBody();
- log.info("门锁服务请求结果【{}】", body);
- JsonNode jsonNode = objectMapper.readTree(body);
- String result = jsonNode.get("result").asText();
- if (!"1".equals(result)) {
- throw new RRException(BizCodeEnume.THIRD_PARTY_SERVICE_CALL_FAILED, "门锁服务-请求结果状态不为1");
- }
- String dataJsonStr = jsonNode.get("data").toString();
- return dataJsonStr;
- }
- private String getSign() {
- if (StringUtils.hasText(sign)) {
- return sign;
- } else {
- sign = DoorLockMD5Util.getMD5(doorLockConfig.getAppId() + doorLockConfig.getAppSecret());
- return sign;
- }
- }
- }
|