diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/config/HttpClientConfig.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/config/HttpClientConfig.java new file mode 100644 index 00000000..516baa25 --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/config/HttpClientConfig.java @@ -0,0 +1,19 @@ +package com.nflg.mobilebroken.admin.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.net.http.HttpClient; +import java.time.Duration; + +@Configuration +public class HttpClientConfig { + + @Bean + public HttpClient getHttpClient() { + return HttpClient.newBuilder() + .version(HttpClient.Version.HTTP_2) + .connectTimeout(Duration.ofSeconds(10)) + .build(); + } +} diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangChannelDTO.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangChannelDTO.java new file mode 100644 index 00000000..f446a0fa --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangChannelDTO.java @@ -0,0 +1,21 @@ +package com.nflg.mobilebroken.admin.pojo.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class ShengWangChannelDTO { + + /** + * 频道列表 + */ + private List channels; + + /** + * 频道总数 + */ + @JsonProperty("total_size") + private int TotalSize; +} diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangChannelInfoDTO.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangChannelInfoDTO.java new file mode 100644 index 00000000..a446bd85 --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangChannelInfoDTO.java @@ -0,0 +1,20 @@ +package com.nflg.mobilebroken.admin.pojo.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class ShengWangChannelInfoDTO { + + /** + * 频道名 + */ + @JsonProperty("channel_name") + private String ChannelName; + + /** + * 频道内的用户人数 + */ + @JsonProperty("user_count") + private Integer UserCount; +} diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangResponse.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangResponse.java new file mode 100644 index 00000000..8640e5bf --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangResponse.java @@ -0,0 +1,11 @@ +package com.nflg.mobilebroken.admin.pojo.dto; + +import lombok.Data; + +@Data +public class ShengWangResponse{ + + private boolean success; + + private T data; +} diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/ShengWangService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/ShengWangService.java new file mode 100644 index 00000000..820d0ec7 --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/ShengWangService.java @@ -0,0 +1,69 @@ +package com.nflg.mobilebroken.admin.service; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.nflg.mobilebroken.admin.pojo.dto.ShengWangChannelDTO; +import com.nflg.mobilebroken.admin.pojo.dto.ShengWangResponse; +import com.nflg.mobilebroken.common.util.VUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.util.Base64; + +/** + * 声网服务 + */ +@Component +@RefreshScope +public class ShengWangService { + + private static final String baseUrl="https://api.sd-rtn.com/dev"; + + @Resource + private HttpClient httpClient; + + @Resource + private ObjectMapper objectMapper; + + @Value("${shengwang.rtc.appId}") + private String appId; + + @Value("${shengwang.rtc.customerKey}") + private String customerKey; + + @Value("${shengwang.rtc.customerSecret}") + private String customerSecret; + + public ShengWangChannelDTO getAllChannels() throws Exception { + HttpRequest request = HttpRequest.newBuilder() + .GET() + .header("Authorization",generateAuthorization(customerKey,customerSecret)) + .uri(URI.create(baseUrl+"/v1/channel/"+appId)) + .build(); + HttpResponse response=httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + VUtils.trueThrowBusinessError(response.statusCode()!=200).throwMessage(""); + ShengWangResponse result= objectMapper.readValue(response.body(), new TypeReference<>() {}); + VUtils.trueThrowBusinessError(!result.isSuccess()).throwMessage("获取频道信息失败"); + return result.getData(); + } + + /** + * 生成鉴权信息 + * @param customerKey 客户ID + * @param customerSecret 客户密钥 + * @return 鉴权信息 + */ + private String generateAuthorization(String customerKey,String customerSecret){ + // 拼接客户 ID 和客户密钥并使用 base64 编码 + String plainCredentials = customerKey + ":" + customerSecret; + String base64Credentials = new String(Base64.getEncoder().encode(plainCredentials.getBytes())); + // 创建 authorization header + return "Basic " + base64Credentials; + } +} diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/AdvertisementController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/AdvertisementController.java new file mode 100644 index 00000000..08c1750a --- /dev/null +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/AdvertisementController.java @@ -0,0 +1,36 @@ +package com.nflg.mobilebroken.cfs.controller; + +import com.nflg.mobilebroken.common.pojo.ApiResult; +import com.nflg.mobilebroken.common.pojo.request.AdvertisementRequst; +import com.nflg.mobilebroken.common.pojo.vo.AdvertisementVO; +import com.nflg.mobilebroken.repository.service.IAdvertisementService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; + +/** + * 广告相关接口 + * @author 曹鹏飞 + */ +@RestController +@RequestMapping("/ad") +public class AdvertisementController { + + @Resource + private IAdvertisementService advertisementService; + + /** + * 根据类型获取广告 + * @param request 请求参数 + * @return 广告列表 + */ + @GetMapping("getByType") + public ApiResult getAdvertisement(@Valid @RequestBody @NotNull AdvertisementRequst request){ + return ApiResult.success(advertisementService.getByType(request.getType(),request.getPosition())); + } +}