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 new file mode 100644 index 00000000..8c1f1538 --- /dev/null +++ b/shuili-system/src/main/java/com/kms/yg/df/controller/BsSgcDfSpPlayController.java @@ -0,0 +1,128 @@ +/** + * fshows.com + * Copyright (C) 2013-2025 All Rights Reserved. + */ +package com.kms.yg.df.controller; + +import com.alibaba.fastjson.JSONObject; +import com.kms.yg.cz.dto.MonitorQueDto; +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.DfYhCharInfoDto; +import com.kms.yxgh.df.dto.DfYhStatisticsQueDto; +import com.shuili.common.core.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +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.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.client.RestTemplate; + +/** + * @author lyd + * @version SpTest.java, v 0.1 2025-03-07 15:56 lyd + */ +@RestController +@RequestMapping("/safe/operation/") +@Api(tags = "安全运行-视频播放") +public class BsSgcDfSpPlayController extends BaseController { + + @Autowired + private BsSgcDfSpPlayService bsSgcDfSpPlayService; + + /** + * 获取巡查情况概览统计 + * @param dto + * @return + */ + @PostMapping("/Play") + @ApiOperation("视频播放") + public Response Play(@RequestBody DfSpPlayQueDto dto) { + return Response.ok(bsSgcDfSpPlayService.getMockData()); + } + + + + + + + + + + + + + // 共享接口 + static final String GX_URL ="http://19.15.67.125:80/resourceSharing/oauth/token"; + + + // 关系接口 + static final String BELONG_URL ="http://19.25.35.205:31190/ZHSL_ZY/dws_rel_wmst_res"; + + static public HttpHeaders getHttpHeaders() { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.set("X-H3C-ID", "4846637469663"); + headers.set("X-H3C-APPKEY", "xynzynys"); + return headers; + } + public static void main(String[] args) { + MonitorQueDto monitorQueDto=new MonitorQueDto(); +// monitorQueDto.setResCode("HP0014418020000235"); +// monitorQueDto.setPageNum(1); +// monitorQueDto.setPageSize(10); +// RestTemplate restTemplate=new RestTemplate(); +// String requestStr = JSONObject.toJSONString(monitorQueDto); +// HttpHeaders headers = getHttpHeaders(); +// HttpEntity httpEntity = new HttpEntity<>(requestStr, headers); +// String seqResult = ""; +// try { +// ResponseEntity responseEntity = restTemplate.exchange(BELONG_URL, HttpMethod.POST, httpEntity, String.class); +// seqResult = responseEntity.getBody(); +// System.out.println(seqResult); +// } catch (Exception e) { +// System.out.println("请求接口:{},返回异常"); +// } + + + + + + + + + DfSpPlayQueDto monitorQueDto=new DfSpPlayQueDto(); + monitorQueDto.setMobile("17324499214"); + RestTemplate restTemplate=new RestTemplate(); + String requestStr = JSONObject.toJSONString(monitorQueDto); + HttpHeaders headers = getHttpHeaders(); + HttpEntity httpEntity = new HttpEntity<>(requestStr, headers); + String seqResult = ""; + try { + ResponseEntity responseEntity = restTemplate.exchange(GX_URL, HttpMethod.POST, httpEntity, String.class); + seqResult = responseEntity.getBody(); + System.out.println(seqResult); + } catch (Exception e) { + System.out.println("请求接口:{},返回异常"); + } + + + + + + + + + + } + +} 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 new file mode 100644 index 00000000..135933d2 --- /dev/null +++ b/shuili-system/src/main/java/com/kms/yg/df/service/BsSgcDfSpPlayService.java @@ -0,0 +1,162 @@ +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.kms.yxgh.df.dto.DfSpPlayDto; +import com.kms.yxgh.df.dto.DfSpPlayQueDto; +import com.kms.yxgh.util.DataCenterRestTemplateUtils; +import com.shuili.common.core.service.BaseService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + + +/** + * 水文特征Service接口 + * + * @author kms + * @date 2024-01-16 + */ +@AllArgsConstructor +@Service +@Slf4j +public class BsSgcDfSpPlayService { +// @Value("${belong.reservoir.url:}") +// private String belongReservoirUrl; + +// @Value("${sp.oauth.token.url:}") +// private String spOauthTokenUrl; + + // @Value("${sp.play.url:}") +// private String spPlayUrl; + @Autowired + private DataCenterRestTemplateUtils dataCenterRestTemplateUtils; + static final String BELONG_URL ="http://19.25.35.205:31190/ZHSL_ZY/dws_rel_wmst_res"; + + static final String OAUTH_TOKEN ="http://19.15.67.125:80/resourceSharing/oauth/token"; + + static final String SP_PLAY_URL ="http://19.15.67.125:80/resourceSharing/startTransform"; + + + public DfSpPlayDto getMockData () { + DfSpPlayDto rest = new DfSpPlayDto(); + Map map =new HashMap<>(); + map.put("rtspPlayUrl","rtsp://173.46.129.58:554/rtp/da3ca861873949dc66f6657f2adb01ea?token=9eedb58c7b634bc8b97bf2a618bf3bc1"); + map.put("flvPlayUrl","http://173.46.129.58:8889/rtp/da3ca861873949dc66f6657f2adb01ea.flv?token=9eedb58c7b634bc8b97bf2a618bf3bc1"); + map.put("rtmpPlayUrl","rtmp://173.46.129.58:1935/rtp/da3ca861873949dc66f6657f2adb01ea?token=9eedb58c7b634bc8b97bf2a618bf3bc1"); + map.put("hlsPlayUrl","http://173.46.129.58:8889/rtp/da3ca861873949dc66f6657f2adb01ea/hls.m3u8?token=9eedb58c7b634bc8b97bf2a618bf3bc1"); + rest.setUrlsMap(map); + return rest; + } + + public DfSpPlayDto play(DfSpPlayQueDto dto) { + + DfSpPlayDto rest = new DfSpPlayDto(); + + try { + + + // 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 rest; + } + + JSONArray reservoirData = parseJsonArray(belongReservoirJson.get("data")); + if (reservoirData == null || reservoirData.isEmpty()) { + log.warn("水库信息数据为空"); + return rest; + } + + // 取第一个水库信息 + Map detailMap = (Map) reservoirData.get(0); + String resCode = detailMap.getOrDefault("RES_CODE", ""); + dto.setResCode(resCode); + + // 2. 获取令牌 + String spOauthTokenUrlJson = dataCenterRestTemplateUtils.doPostRequest(OAUTH_TOKEN, dto); + log.info("spOauthTokenUrlJson-请求接口响应报文: {}", spOauthTokenUrlJson); + + JSONObject tokenJson = parseJson(spOauthTokenUrlJson); + if (tokenJson == null || !isSuccess(tokenJson)) { + log.warn("获取令牌失败,响应: {}", spOauthTokenUrlJson); + return rest; + } + + JSONObject tokenData = tokenJson.getJSONObject("data"); + if (tokenData == null) { + log.warn("令牌数据为空"); + return rest; + } + + String token = String.valueOf(tokenData.get("token")); + dto.setCameraId(dto.getResCode()); + dto.setToken(token); + + // 3. 调用第三方接口获取播放地址 + String playOauthTokenUrlJson = dataCenterRestTemplateUtils.doPostRequest(SP_PLAY_URL, 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); + } + } catch (Exception e) { + log.error("请求接口异常: {}", e.getMessage(), e); + } + return rest; + } + + /** + * 解析 JSON 字符串为 JSONObject + */ + private JSONObject parseJson(String json) { + if (StringUtils.isEmpty(json)) { + return null; + } + return JSONObject.parseObject(json); + } + + /** + * 解析 JSON 字符串为 JSONArray + */ + private JSONArray parseJsonArray(Object obj) { + if (obj == null) { + return null; + } + return JSON.parseArray(obj.toString()); + } + + /** + * 判断接口响应是否成功 + */ + private boolean isSuccess(JSONObject json) { + return json != null && Objects.equals(200, json.getIntValue("code")); + } +} 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 new file mode 100644 index 00000000..bd8beaae --- /dev/null +++ b/shuili-system/src/main/java/com/kms/yxgh/df/dto/DfSpPlayDto.java @@ -0,0 +1,18 @@ +package com.kms.yxgh.df.dto; + +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(); + +} diff --git a/shuili-system/src/main/java/com/kms/yxgh/df/dto/DfSpPlayQueDto.java b/shuili-system/src/main/java/com/kms/yxgh/df/dto/DfSpPlayQueDto.java new file mode 100644 index 00000000..9c1b9447 --- /dev/null +++ b/shuili-system/src/main/java/com/kms/yxgh/df/dto/DfSpPlayQueDto.java @@ -0,0 +1,39 @@ +package com.kms.yxgh.df.dto; +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +/** + * @ClassName: DfSpPlayQueDto + * @Description: TODO + * @Date: 2024/3/5 上午10:18 + * * + * @author: hxh + * @version: 1.0 + */ + +@Data +@ApiModel("安全运行-视频播放") +public class DfSpPlayQueDto { + private static final long serialVersionUID = 1L; + @ApiModelProperty("手机号码") + private String mobile; + + @JSONField(name = "RES_CODE") + @ApiModelProperty(value = "水库编码") + private String resCode; + + @ApiModelProperty(value = "视频播放接口入参") + private String cameraId; + + @ApiModelProperty(value = "token") + private String token; + + @ApiModelProperty(value = "页码") + private Integer pageSize = 10; + + @ApiModelProperty(value = "每页条数") + private Integer pageNum = 1; + + +}