diff --git a/shuili-system/src/main/java/com/kms/yg/df/controller/BsSgcDfSpPlayController.java b/shuili-system/src/main/java/com/kms/yg/df/controller/BsSgcDfSpPlayController.java index 95b9d0bf..461232cd 100644 --- a/shuili-system/src/main/java/com/kms/yg/df/controller/BsSgcDfSpPlayController.java +++ b/shuili-system/src/main/java/com/kms/yg/df/controller/BsSgcDfSpPlayController.java @@ -3,12 +3,12 @@ * Copyright (C) 2013-2025 All Rights Reserved. */ package com.kms.yg.df.controller; + import com.kms.yg.df.service.BsSgcDfSpPlayService; import com.kms.yxgh.base.Response; import com.kms.yxgh.df.dto.DfSpPlayDto; import com.kms.yxgh.df.dto.DfSpPlayQueDto; import com.kms.yxgh.df.dto.ReservoirListDto; -import com.kms.yxgh.df.dto.ReservoirListQueDto; import com.shuili.common.core.controller.BaseController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -17,6 +17,7 @@ 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; + /** * @author lyd * @version SpTest.java, v 0.1 2025-03-07 15:56 lyd @@ -31,6 +32,7 @@ public class BsSgcDfSpPlayController extends BaseController { /** * 视频播放 + * * @param dto * @return */ @@ -42,6 +44,7 @@ public class BsSgcDfSpPlayController extends BaseController { /** * 水库列表 + * * @param * @return */ diff --git a/shuili-system/src/main/java/com/kms/yg/df/service/BsSgcDfSpPlayService.java b/shuili-system/src/main/java/com/kms/yg/df/service/BsSgcDfSpPlayService.java index 11f1eaaa..b5150b49 100644 --- a/shuili-system/src/main/java/com/kms/yg/df/service/BsSgcDfSpPlayService.java +++ b/shuili-system/src/main/java/com/kms/yg/df/service/BsSgcDfSpPlayService.java @@ -3,36 +3,25 @@ package com.kms.yg.df.service; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.kms.yg.df.domain.BsSgcDfSwtz; -import com.kms.yg.df.mapper.BsSgcDfSwtzMapper; +import com.alibaba.fastjson.annotation.JSONField; import com.kms.yxgh.df.dto.DfSpPlayDto; import com.kms.yxgh.df.dto.DfSpPlayQueDto; import com.kms.yxgh.df.dto.ReservoirListDto; -import com.kms.yxgh.df.dto.ReservoirListQueDto; import com.kms.yxgh.util.DataCenterRestTemplateUtils; import com.kms.yxgh.util.RestTemplateUtil; -import com.shuili.common.core.service.BaseService; -import lombok.AllArgsConstructor; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; +import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.util.StringUtils; import org.springframework.web.client.RestTemplate; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; +import java.util.stream.Collectors; /** @@ -41,44 +30,61 @@ import java.util.Objects; * @author kms * @date 2024-01-16 */ -@AllArgsConstructor @Service @Slf4j public class BsSgcDfSpPlayService { + @Value("${dataSync.url:}") + private String dataSyncUrl; + @Value("#{${dataSync.paths:{}}}") + private Map paths = new HashMap<>(); + + @Value("${video.url:}") + private String videoUrl; + @Value("${video.phone:}") + private String videoPhone; + @Autowired private DataCenterRestTemplateUtils dataCenterRestTemplateUtils; - static final String BELONG_URL ="http://19.25.35.205:31190/ZHSL_ZY/dws_rel_wmst_res"; + static final String BELONG_URL = "dws_rel_wmst_res"; - static final String OAUTH_TOKEN ="http://19.15.67.125:80/vsap-opp-service/resourceSharing/oauth/token"; + static final String OAUTH_TOKEN = "/vsap-opp-service/resourceSharing/oauth/token"; - static final String SP_PLAY_URL ="http://19.15.67.125:80/vsap-opp-service/resourceSharing/startTransform"; + static final String SP_PLAY_URL = "/vsap-opp-service/resourceSharing/startTransform"; - public ReservoirListDto reservoirList (ReservoirListDto dto) { - ReservoirListDto listDto=new ReservoirListDto(); + public ReservoirListDto reservoirList(ReservoirListDto dto) { + ReservoirListDto listDto = new ReservoirListDto(); // 1. 获取水库信息 - String belongReservoirUrlJson = dataCenterRestTemplateUtils.doPostRequest(BELONG_URL, dto); - log.info("belongReservoirUrl-请求接口响应报文: {}", belongReservoirUrlJson); - - JSONObject belongReservoirJson = parseJson(belongReservoirUrlJson); - if (belongReservoirJson == null || !isSuccess(belongReservoirJson)) { - log.warn("获取水库信息失败,响应: {}", belongReservoirUrlJson); - return listDto; + String uri = paths.get(BELONG_URL); + if (StringUtils.isEmpty(uri) || StringUtils.isEmpty(dataSyncUrl)) { + return new ReservoirListDto(); } - JSONArray reservoirData = parseJsonArray(belongReservoirJson.get("data")); - if (reservoirData == null || reservoirData.isEmpty()) { - log.warn("水库信息数据为空:{}",reservoirData.toString()); - return listDto; + String belongReservoirUrlJson = dataCenterRestTemplateUtils.doPostRequest(dataSyncUrl + uri, dto); + + DataResponse response = JSON.parseObject(belongReservoirUrlJson, DataResponse.class); + ReservoirListDto result = new ReservoirListDto(); + if (response.isSuccess()) { + result.setCameraIds(response.getData().stream().map(Item::getWmstCode).collect(Collectors.toList())); } - List list=new ArrayList(); - for (int i = 0; i < reservoirData.size(); i++) { - Map map = (Map) reservoirData.get(0); - list.add(map.get("RES_CODE").toString()); + return result; + } + + @Data + public static class DataResponse { + private String msg; + private String code; + private List data = new ArrayList<>(); + + public Boolean isSuccess() { + return "0".equals(getCode()); } - listDto.setCameraIds(list); - return listDto; } + @Data + public static class Item { + @JSONField(name = "WMST_CODE") + private String wmstCode; + } public DfSpPlayDto play(DfSpPlayQueDto dto) { DfSpPlayDto rest = new DfSpPlayDto(); @@ -98,32 +104,39 @@ public class BsSgcDfSpPlayService { dto.setToken(token); // 3. 调用第三方接口获取播放地址 String playOauthTokenUrlJson = getSpPlayUrls(dto); - log.info("spPlayUrl-请求接口响应报文: {}", playOauthTokenUrlJson); - - JSONObject playJson = parseJson(playOauthTokenUrlJson); - if (playJson == null || !isSuccess(playJson)) { - log.warn("获取播放地址失败,响应: {}", playOauthTokenUrlJson); - return rest; - } - - JSONObject playDataJson = playJson.getJSONObject("data"); - if (playDataJson == null) { - log.warn("播放地址数据为空"); - return rest; - } - - JSONObject urls = playDataJson.getJSONObject("urls"); - if (urls != null) { - rest.setUrlsMap((Map) urls); + VideoInfo videoInfo = JSON.parseObject(playOauthTokenUrlJson, VideoInfo.class); + if (videoInfo.isSuccess()) { + rest.setUrlsMap(videoInfo.getData().getUrls()); } + return rest; } catch (Exception e) { log.error("请求接口异常: {}", e.getMessage(), e); } return rest; } + @Data + public static class VideoInfo { + private String status; + private VideoData data; + + public Boolean isSuccess() { + return "0".equals(status); + } + } + @Data + public static class VideoData { + private Url urls; + } + @Data + public static class Url { + private String rtspPlayUrl; + private String flvPlayUrl; + private String rtmpPlayUrl; + private String hlsPlayUrl; + } /** * 解析 JSON 字符串为 JSONObject @@ -152,17 +165,17 @@ public class BsSgcDfSpPlayService { return json != null && Objects.equals(200, json.getIntValue("code")); } - public String getSpPlayUrls (DfSpPlayQueDto dto) { + public String getSpPlayUrls(DfSpPlayQueDto dto) { HttpHeaders headers = new HttpHeaders(); Map uriVariables = new HashMap<>(); MultiValueMap headValues = new LinkedMultiValueMap<>(); headValues.put("token", Collections.singletonList(dto.getToken())); - MapparamMap=new HashMap<>(); - paramMap.put("cameraId",dto.getCameraId()); + Map paramMap = new HashMap<>(); + paramMap.put("cameraId", dto.getCameraId()); headers.setContentType(MediaType.APPLICATION_JSON); String seqResult2 = null; try { - seqResult2 = RestTemplateUtil.postForObjectWithHead(paramMap, headValues,SP_PLAY_URL , String.class, uriVariables); + seqResult2 = RestTemplateUtil.postForObjectWithHead(paramMap, headValues, videoUrl + SP_PLAY_URL, String.class, uriVariables); log.info("获取播放地址响应SP_PLAY_URL: {}", seqResult2); } catch (Exception e) { log.warn("请求接口SP_PLAY_URL返回异常: {}", e.getMessage()); @@ -170,21 +183,19 @@ public class BsSgcDfSpPlayService { return seqResult2; } - public String getToken (DfSpPlayQueDto dto) { - RestTemplate restTemplate=new RestTemplate(); - String token =null; + public String getToken(DfSpPlayQueDto dto) { + dto.setMobile(videoPhone); + RestTemplate restTemplate = new RestTemplate(); + String token = null; String requestStr = JSONObject.toJSONString(dto); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(requestStr, headers); String seqResult = ""; try { - ResponseEntity responseEntity = restTemplate.exchange(OAUTH_TOKEN, HttpMethod.POST, httpEntity, String.class); + ResponseEntity responseEntity = restTemplate.exchange(videoUrl + OAUTH_TOKEN, HttpMethod.POST, httpEntity, String.class); seqResult = responseEntity.getBody(); log.info("获取播放地址响应SP_PLAY_URL: {}", seqResult); - JSONObject tokenJson = JSONObject.parseObject(seqResult); - JSONObject tokenData = tokenJson.getJSONObject("data"); - token= String.valueOf(tokenData.get("token")); } catch (Exception e) { log.warn("请求接口OAUTH_TOKEN返回异常: {}", e.getMessage()); } diff --git a/shuili-system/src/main/java/com/kms/yxgh/df/dto/DfSpPlayDto.java b/shuili-system/src/main/java/com/kms/yxgh/df/dto/DfSpPlayDto.java index bd8beaae..ce3311f3 100644 --- a/shuili-system/src/main/java/com/kms/yxgh/df/dto/DfSpPlayDto.java +++ b/shuili-system/src/main/java/com/kms/yxgh/df/dto/DfSpPlayDto.java @@ -1,18 +1,15 @@ package com.kms.yxgh.df.dto; +import com.kms.yg.df.service.BsSgcDfSpPlayService; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import java.util.Collections; -import java.util.List; -import java.util.Map; - @ApiModel("视频播放") @Data public class DfSpPlayDto { @ApiModelProperty(value = "播放地址") - private Map urlsMap = Collections.emptyMap(); + private BsSgcDfSpPlayService.Url urlsMap; } diff --git a/shuili-system/src/main/java/com/kms/yxgh/df/dto/ReservoirListDto.java b/shuili-system/src/main/java/com/kms/yxgh/df/dto/ReservoirListDto.java index 2b0247a0..48b7e3d2 100644 --- a/shuili-system/src/main/java/com/kms/yxgh/df/dto/ReservoirListDto.java +++ b/shuili-system/src/main/java/com/kms/yxgh/df/dto/ReservoirListDto.java @@ -5,17 +5,22 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import java.util.Collections; +import java.util.ArrayList; import java.util.List; -import java.util.Map; @ApiModel("视频播放") @Data public class ReservoirListDto { @ApiModelProperty(value = "视频ids") - private List cameraIds; + private List cameraIds = new ArrayList<>(); @JSONField(name = "RES_CODE") @ApiModelProperty(value = "水库编码") private String resCode; + + + @ApiModelProperty(value = "页码") + private Integer pageSize = 1000; + @ApiModelProperty(value = "每页条数") + private Integer pageNum = 1; }