Toggle navigation
Toggle navigation
This project
Loading...
Sign in
developOne
/
harmonyPool
Go to a project
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
zhangbo1_wd
2024-02-03 16:36:27 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
95fadde07484c2631ea028ea6c7119bee0c0f12d
95fadde0
1 parent
0e160fc1
合入4.0 互动数据接口相关代码
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
228 additions
and
16 deletions
sight_harmony/wdBean/Index.ets
sight_harmony/wdBean/src/main/ets/bean/content/ContentDTO.ets
sight_harmony/wdBean/src/main/ets/bean/content/InteractDataDTO.ets
sight_harmony/wdBean/src/main/ets/bean/content/InteractParam.ets
sight_harmony/wdComponent/src/main/ets/repository/PageRepository.ets
sight_harmony/wdComponent/src/main/ets/utils/RefreshConstants.ets
sight_harmony/wdComponent/src/main/ets/viewmodel/PageViewModel.ets
sight_harmony/wdKit/src/main/ets/utils/CollectionUtils.ts
sight_harmony/wdNetwork/src/main/ets/http/HttpRequest.ets
sight_harmony/wdNetwork/src/main/ets/http/HttpUrlUtils.ets
sight_harmony/wdBean/Index.ets
View file @
95fadde
...
...
@@ -17,7 +17,9 @@ export { Action } from './src/main/ets/bean/content/Action'
export { Params } from './src/main/ets/bean/content/Params'
export { Pic } from './src/main/ets/bean/content/Pic'
export { InteractDataDTO } from './src/main/ets/bean/content/InteractDataDTO';
export { InteractParam } from './src/main/ets/bean/content/InteractParam';
export { ContentBean } from './src/main/ets/bean/content/ContentBean';
export { LabelBean } from './src/main/ets/bean/component/extra/LabelBean';
export { LabelDTO } from './src/main/ets/bean/component/extra/LabelDTO';
...
...
sight_harmony/wdBean/src/main/ets/bean/content/ContentDTO.ets
View file @
95fadde
import { FullColumnImgUrlDTO } from '../detail/FullColumnImgUrlDTO';
import { LiveInfoDTO } from '../detail/LiveInfoDTO';
import { VideoInfoDTO } from '../detail/VideoInfoDTO';
import { InteractDataDTO } from './src/main/ets/bean/content/InteractDataDTO';
export interface ContentDTO {
cityCode: string;
coverSize: string;
...
...
@@ -54,4 +54,7 @@ export interface ContentDTO {
videoInfo?: VideoInfoDTO; // 视频新闻信息【BFF聚合】,视频非原片+清晰度最高的
newsSummary: string; //appstyle:2 ,新闻详情
// 二次请求接口,返回的数据,这里组装到content里;TODO 后续优化
interactData:InteractDataDTO;
}
\ No newline at end of file
...
...
sight_harmony/wdBean/src/main/ets/bean/content/InteractDataDTO.ets
0 → 100644
View file @
95fadde
/**
* 批查接口查询互动相关数据,返回数据bean
*/
export interface InteractDataDTO {
collectNum: number;
commentNum: number;
contentId: string;
contentType: number;
likeNum: number;
readNum: number;
shareNum: number;
}
\ No newline at end of file
...
...
sight_harmony/wdBean/src/main/ets/bean/content/InteractParam.ets
0 → 100644
View file @
95fadde
/**
* 批查接口查询互动相关数据,返回数据bean
*/
export interface InteractParam {
contentList: Array<ContentBean>;
// 默认0;是否详情页访问;默认0:非详情;1:详情页(只有访问详情页时(detail=1),才触发浏览量加1)
detail: string;
}
export interface ContentBean {
contentId: string;
contentType: string;
}
\ No newline at end of file
...
...
sight_harmony/wdComponent/src/main/ets/repository/PageRepository.ets
View file @
95fadde
import HashMap from '@ohos.util.HashMap';
import { HttpUrlUtils, ResponseDTO, WDHttp } from 'wdNetwork';
import { DateTimeUtils } from 'wdKit';
import { ContentDetailDTO, NavigationBodyDTO, PageDTO } from 'wdBean';
import { ContentDetailDTO, NavigationBodyDTO, PageDTO
,InteractDataDTO
} from 'wdBean';
export class PageRepository {
static getBottomNavGroupUrl() {
...
...
@@ -35,6 +35,11 @@ export class PageRepository {
return url;
}
static getInteractDataUrl() {
let url = HttpUrlUtils.getHost() + this.INTERACT_DATA_PATH;
return url;
}
static fetchNavigationDataApi() {
let url = PageRepository.getBottomNavGroupUrl();
let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
...
...
@@ -52,4 +57,10 @@ export class PageRepository {
let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
return WDHttp.get<ResponseDTO<ContentDetailDTO>>(url, headers)
};
static fetchInteractData(param: object) {
let url = HttpUrlUtils.getInteractDataUrl()
let headers: HashMap<string, string> = HttpUrlUtils.getCommonHeaders();
return WDHttp.post<ResponseDTO<InteractDataDTO[]>>(url, param, headers)
};
}
\ No newline at end of file
...
...
sight_harmony/wdComponent/src/main/ets/utils/RefreshConstants.ets
View file @
95fadde
...
...
@@ -13,12 +13,12 @@ export class RefreshConstants {
/**
* The delay time.
*/
static readonly DELAY_TIME: number =
10
00;
static readonly DELAY_TIME: number =
2
00;
/**
* The animation duration.
*/
static readonly ANIMATION_DURATION: number = 200
0
;
static readonly ANIMATION_DURATION: number = 200;
/**
* The RefreshConstant constants.
*/
...
...
sight_harmony/wdComponent/src/main/ets/viewmodel/PageViewModel.ets
View file @
95fadde
import { NavigationBodyDTO, PageDTO } from 'wdBean';
import { Logger, ResourcesUtils } from 'wdKit';
import { NavigationBodyDTO, PageDTO,InteractDataDTO,ContentBean, InteractParam,CompDTO } from 'wdBean';
import { CollectionUtils, Logger, ResourcesUtils, StringUtils } from 'wdKit';
import { ResponseDTO, } from 'wdNetwork';
import { PageRepository } from '../repository/PageRepository';
import { BaseViewModel } from './BaseViewModel';
...
...
@@ -10,7 +10,11 @@ const TAG = 'PageViewModel';
* mock数据是本地json数据,可自行修改内容(‘entry\src\main\resources\rawfile\’目录)
*/
const mock_switch = false;
/**
* 互动数据获取开关开关,默认开。
* TODO 后续需要优化掉,变为二次请求异步刷新
*/
const interact_sync_switch = true;
/**
* 处理返回后的数据
*/
...
...
@@ -123,14 +127,141 @@ export class PageViewModel extends BaseViewModel {
return
}
Logger.info(TAG, "getNavData then,resDTO.timestamp:" + resDTO.timestamp);
if (!interact_sync_switch) {
success(resDTO.data);
return;
}
// TODO 打开同步请求互动数据,待优化为异步加载
if (CollectionUtils.isEmpty(resDTO.data.compList)) {
success(resDTO.data);
} else {
this.getInteractData(resDTO.data.compList).then(() => {
success(resDTO.data);
})
}
})
.catch((err: Error) => {
Logger.error(TAG, `getPageData catch, error.name : ${err.name}, error.message:${err.message}`);
error(err);
})
})
}
async getInteractData(compList: CompDTO[]) {
let param: InteractParam = this.getInteractParams(compList);
const SIZE = 20;
// 批查接口,参数size限制20,这里截断分批查询,0,20;20,40...
let count = Math.ceil(param.contentList.length / SIZE);
let promises = new Array;
if (count == 1) {
let promise: Promise<InteractDataDTO[]> = this.createInteractDataPromise(param);
promises.push(promise);
} else {
for (let i = 1;i <= count; i++) {
// 将查询参数截断(参数限制20个),分批请求接口
let subList = new Array<ContentBean>();
let start = 0;
let end = 0;
if (i == count) {
start = (i - 1) * SIZE;
end = param.contentList.length;
subList = CollectionUtils.getSubElements(param.contentList, start, end)
} else {
start = (i - 1) * SIZE;
end = start + SIZE;
subList = CollectionUtils.getSubElements(param.contentList, start, end)
}
let subParam: InteractParam = {} as InteractParam;
subParam.contentList = subList;
let promise: Promise<InteractDataDTO[]> = this.createInteractDataPromise(subParam);
promises.push(promise);
}
}
return new Promise<CompDTO[]>((success, error) => {
Promise.all(promises).then((result) => {
if (!CollectionUtils.isArray(result)) {
success(compList);
return;
}
let allInteractDataList = new Array();
result.forEach((value: InteractDataDTO[]) => {
if (value != null && value.length > 0) {
allInteractDataList.push(...value);
}
})
// 批查全部完成,统一设置到comp里
this.resetInteract(allInteractDataList, compList);
success(compList);
})
})
}
private createInteractDataPromise(param: InteractParam) {
return new Promise<InteractDataDTO[]>((success, error) => {
PageRepository.fetchInteractData(param).then((resDTO: ResponseDTO<InteractDataDTO[]>) => {
if (this.isRespondsInvalid(resDTO, 'getInteractData')) {
Logger.info(TAG, "getInteractData then,resDTO.timeStamp:" + resDTO.timestamp);
success(null);
return;
}
success(resDTO.data);
}).catch((err: Error) => {
Logger.error(TAG, `getInteractData catch, error.name : ${err.name}, error.message:${err.message}`);
// 无论是否成功(暂不做重试),都回调结果,通知刷新数据
success(null);
})
});
}
private resetInteract(interact: InteractDataDTO[], compList: CompDTO[]) {
if (interact == null || interact.length == 0) {
return
}
interact.forEach((interactData) => {
let id = interactData.contentId;
outer: for (let i = 0;i < compList.length; i++) {
let comp = compList[i];
if (comp == null || comp.operDataList == null || comp.operDataList.length == 0) {
continue;
}
for (let j = 0;j < comp.operDataList.length; j++) {
let content = comp.operDataList[j];
if (content == null) {
continue;
}
if (id == content.objectId) {
content.interactData = interactData;
break outer;
}
}
}
})
}
private getInteractParams(compList: CompDTO[]): InteractParam {
if (compList == null || compList.length == 0) {
return null;
}
let param: InteractParam = {} as InteractParam;
param.contentList = new Array<ContentBean>();
compList.forEach((value) => {
let contentList = value.operDataList;
if (contentList != null && contentList.length > 0) {
contentList.forEach((v) => {
if (StringUtils.isNotEmpty(v.objectId)) {
let bean = {} as ContentBean;
bean.contentId = v.objectId;
bean.contentType = v.objectType;
param.contentList.push(bean);
}
})
}
})
return param;
}
}
...
...
sight_harmony/wdKit/src/main/ets/utils/CollectionUtils.ts
View file @
95fadde
...
...
@@ -160,5 +160,24 @@ export class CollectionUtils {
const
arr
=
unescape
(
encodeURIComponent
(
str
)).
split
(
''
).
map
(
val
=>
val
.
charCodeAt
(
0
));
return
new
Uint8Array
(
arr
);
}
/**
* 截取集合部分数据。
* start:0 - end:20 截取0-19,共20个数据
*/
static
getSubElements
(
collection
?:
any
[],
start
?:
number
,
end
?:
number
):
any
[]
{
if
(
CollectionUtils
.
isEmpty
(
collection
)
||
start
===
undefined
||
end
===
undefined
)
{
return
null
;
}
if
(
start
<
0
||
end
<
start
)
{
return
null
;
}
if
(
end
>
collection
.
length
)
{
return
null
;
}
let
ss
=
collection
.
slice
(
start
,
end
);
ss
;
return
collection
.
slice
(
start
,
end
);
}
}
...
...
sight_harmony/wdNetwork/src/main/ets/http/HttpRequest.ets
View file @
95fadde
...
...
@@ -56,13 +56,24 @@ export class HttpRequest {
return service.get(url, config)
}
static post<T = ResponseDTO<string>>(url: string, data?: object, headers?: HashMap<string, string>): Promise<T> {
static post
0
<T = ResponseDTO<string>>(url: string, data?: object, headers?: HashMap<string, string>): Promise<T> {
let config: AxiosRequestConfig = {
headers: HttpRequest.buildHeaderWithGlobalHeader(headers)
}
return service.post(url, data, config)
}
static post<T = any>(url: string, data1?: any, headers?: HashMap<string, string>): Promise<T> {
let requestHeaders: AxiosHeaders = new AxiosHeaders()
headers?.forEach((v, k) => {
requestHeaders.set(k, v);
});
let config: AxiosRequestConfig = {
headers: requestHeaders as RawAxiosRequestHeaders,
}
return service.post(url, data1, config)
}
static put<T = ResponseDTO<string>>(url: string, data?: object, headers?: HashMap<string, string>): Promise<T> {
let config: AxiosRequestConfig = {
headers: HttpRequest.buildHeaderWithGlobalHeader(headers)
...
...
sight_harmony/wdNetwork/src/main/ets/http/HttpUrlUtils.ets
View file @
95fadde
...
...
@@ -34,7 +34,10 @@ export class HttpUrlUtils {
* 详情页面详情接口
*/
static readonly DETAIL_PATH: string = "/api/rmrb-bff-display-zh/content/zh/c/content/detail";
/**
* 批查接口,查询互动相关数据,如收藏数、评论数等
*/
static readonly INTERACT_DATA_PATH: string = "/api/rmrb-contact/contact/zh/c/content/interactData";
private static hostUrl: string = HttpUrlUtils.HOST_PRODUCT;
static getCommonHeaders(): HashMap<string, string> {
...
...
@@ -55,8 +58,8 @@ export class HttpUrlUtils {
//headers.set('X-Ca-Stage', 'PRE')
headers.set('versionCode', HttpUrlUtils.getVersionCode())
headers.set('system', HttpUrlUtils.getTerminalId())
headers.set('version_name', 'debug')
headers.set('EagleEye-TraceID', '0B6DE03D2997435BA875FFBE05425ED2')
headers.set('version_name', this.getVersionName())
headers.set('EagleEye-TraceID', 'D539562E48554A60977AF4BECB6D6C7A')
headers.set('imei', HttpUrlUtils.getImei())
headers.set('Accept-Language', 'zh')
headers.set('city', HttpUrlUtils.getCity())
...
...
@@ -64,6 +67,8 @@ export class HttpUrlUtils {
// TODO 判断是否登录
headers.set('userId', HttpUrlUtils.getUserId())
headers.set('userType', HttpUrlUtils.getUserType())
headers.set('mpassid', 'ZbHTMeTsfaYDAHqt8ZHIzcPs')
HttpUrlUtils.addSpecialHeaders(headers);
// Logger.debug("TAG", '******************* commonHeaders headers start ******************************** ');
// headers.forEach((v,k)=>{
...
...
@@ -131,12 +136,12 @@ export class HttpUrlUtils {
private static getDeviceId() {
// TODO
return '
b5cf725d-193d-3215-8c77-e76fe15ce64
d';
return '
8a81226a-cabd-3e1b-b630-b51db4a720e
d';
}
private static getVersion() {
// TODO
return '202
312251034
';
return '202
401242103
';
}
private static getVersionCode() {
...
...
@@ -144,13 +149,18 @@ export class HttpUrlUtils {
return '7301';
}
private static getVersionName() {
// TODO
return '7.3.0.1';
}
private static getAdCode() {
return '340000';
}
private static getOsVersion() {
// TODO
return '1
3
';
return '1
2
';
}
public static getCityCode() {
...
...
@@ -177,7 +187,7 @@ export class HttpUrlUtils {
private static getImei() {
// TODO
return '
b5cf725d-193d-3215-8c77-e76fe15ce64
d';
return '
8a81226a-cabd-3e1b-b630-b51db4a720e
d';
}
private static getUserId() {
...
...
Please
register
or
login
to post a comment