| | |
| | | package com.ycl.controller.platformApi; |
| | | |
| | | import com.baomidou.mybatisplus.core.toolkit.StringUtils; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.ycl.api.CommonResult; |
| | | import com.ycl.dto.v1.Req.FirstReq; |
| | | import com.ycl.dto.v1.Req.SecondReq; |
| | | import com.ycl.dto.v1.Res.FirstRes; |
| | | import com.ycl.dto.video.AlarmParam; |
| | | import com.ycl.enums.common.ResultCode; |
| | | import com.ycl.service.video.IVideoAlarmReportService; |
| | | import com.ycl.utils.MD5Util; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.SneakyThrows; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.http.*; |
| | | import org.springframework.http.client.ClientHttpResponse; |
| | | import org.springframework.http.client.SimpleClientHttpRequestFactory; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.client.DefaultResponseErrorHandler; |
| | | import org.springframework.web.client.RestTemplate; |
| | | |
| | | import java.net.URI; |
| | | |
| | | /** |
| | | * @author admin |
| | |
| | | @RestController |
| | | @RequestMapping("/API") |
| | | public class AlarmController { |
| | | |
| | | @Value("${videoPoint.url}") |
| | | private String url; |
| | | |
| | | @Value("${videoPoint.userName}") |
| | | private String userName; |
| | | |
| | | @Value("${videoPoint.passWord}") |
| | | private String passWord; |
| | | |
| | | @Value("${videoPoint.ip}") |
| | | private String ip; |
| | | |
| | | private IVideoAlarmReportService videoAlarmReportService; |
| | | |
| | |
| | | return new CommonResult(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage()); |
| | | } |
| | | |
| | | } |
| | | @GetMapping("/video") |
| | | @ApiOperation(value = "设备获取监控地址") |
| | | @SneakyThrows |
| | | public CommonResult getMonitorAddress(@RequestParam String code, |
| | | @RequestParam(required = false) Integer subType, |
| | | @RequestParam(required = false) String scheme) { |
| | | |
| | | String clientType = "winpc"; |
| | | String reqUrl = "/videoService/accounts/authorize"; |
| | | String deviceUrl = "/videoService/devicesManager/devices"; |
| | | if (subType == null) { |
| | | subType = 1; |
| | | } |
| | | if (StringUtils.isNotBlank(scheme)) { |
| | | scheme = "RTSP"; |
| | | } |
| | | String monitorUrl = "/videoService/realmonitor/uri?subType=" + subType + "&scheme" + scheme + "&channelId="; |
| | | |
| | | RestTemplate restTemplate = new RestTemplate(); |
| | | restTemplate.setErrorHandler(new DefaultResponseErrorHandler() { |
| | | @Override |
| | | public boolean hasError(HttpStatus status) { |
| | | return super.hasError(status); |
| | | } |
| | | |
| | | @Override |
| | | public void handleError(URI url, HttpMethod method, ClientHttpResponse response) { |
| | | |
| | | } |
| | | }); |
| | | SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory(); |
| | | simpleClientHttpRequestFactory.setOutputStreaming(false); |
| | | restTemplate.setRequestFactory(simpleClientHttpRequestFactory); |
| | | |
| | | //请求头 |
| | | HttpHeaders httpHeaders = new HttpHeaders(); |
| | | httpHeaders.setContentType(MediaType.APPLICATION_JSON); |
| | | |
| | | //第一次权限请求体 |
| | | FirstReq firstReq = new FirstReq(); |
| | | firstReq.setIpAddress(ip); |
| | | firstReq.setUserName(userName); |
| | | firstReq.setClientType(clientType); |
| | | ObjectMapper objectMapper = new ObjectMapper(); |
| | | |
| | | HttpEntity<String> firstEntity = new HttpEntity<>(objectMapper.writeValueAsString(firstReq), httpHeaders); |
| | | ResponseEntity<String> responseEntity = restTemplate.postForEntity(url + reqUrl, firstEntity, String.class); |
| | | |
| | | FirstRes firstRes = objectMapper.readValue(responseEntity.getBody(), FirstRes.class); |
| | | |
| | | String signature = MD5Util.md5Encrypt(passWord); |
| | | signature = MD5Util.md5Encrypt(userName + signature); |
| | | signature = MD5Util.md5Encrypt(signature); |
| | | signature = MD5Util.md5Encrypt(userName + ":" + firstRes.getRealm() + ":" + signature); |
| | | signature = MD5Util.md5Encrypt(signature + ":" + firstRes.getRandomKey()); |
| | | |
| | | SecondReq secondReq = new SecondReq(); |
| | | secondReq.setIpAddress(ip); |
| | | secondReq.setEncryptType(firstRes.getEncryptType()); |
| | | secondReq.setSignature(signature); |
| | | secondReq.setRandomKey(firstRes.getRandomKey()); |
| | | secondReq.setClientType(clientType); |
| | | secondReq.setUserName(userName); |
| | | |
| | | HttpEntity<String> secondEntity = new HttpEntity<>(objectMapper.writeValueAsString(secondReq), httpHeaders); |
| | | ResponseEntity<String> secondResEntity = restTemplate.postForEntity(url + reqUrl, secondEntity, String.class); |
| | | HttpHeaders deviceHeaders = new HttpHeaders(); |
| | | deviceHeaders.add("X-Subject-Token", objectMapper.readTree(secondResEntity.getBody()).get("token").textValue()); |
| | | HttpEntity<Object> deviceEntity = new HttpEntity<>(deviceHeaders); |
| | | ResponseEntity<String> exchange = restTemplate.exchange(url + deviceUrl + "/" + code, HttpMethod.GET, deviceEntity, String.class); |
| | | String channelId = objectMapper.readTree(objectMapper.readTree(objectMapper.readTree(exchange.getBody()).get("encoderUnit").toString()).get("channels").get(0).toString()).get("channelId").textValue(); |
| | | ResponseEntity<String> monitorReq = restTemplate.exchange(url + monitorUrl + channelId, HttpMethod.GET, deviceEntity, String.class); |
| | | return CommonResult.successApi(objectMapper.readTree(monitorReq.getBody()).get("url")); |
| | | } |
| | | } |