PageAdvModel.ets
4.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
import { PageInfoDTO,TopicDetailData } from 'wdBean/Index';
import { AdvRuleBean, CompAdvBean } from 'wdBean/src/main/ets/bean/adv/AdvsRuleBean';
import { DateTimeUtils, SPHelper } from 'wdKit/Index';
import { ArrayList } from '@kit.ArkTS';
import { SpConstants } from 'wdConstant/Index';
/**
* @Description: 处理页面的广告业务
* @Author: lyb
* @Email: liyubing@wondertek.com.cn
* @CreateDate:
* @UpdateRemark: 更新说明
* @Version: 1.0
*/
export default class PageAdModel {
//左右挂角广告对象
pageCornerAdv: CompAdvBean = {} as CompAdvBean
// 挂角广告
isShowAds: boolean = false;
isRightAdv: number = 1;
// 1:右边;2:左边 -> 默认右边
pageCornerContentInfo: AdvRuleBean = {} as AdvRuleBean
analysisAdvSource(pageInfo: PageInfoDTO) {
this.analysisAllAdvSource(pageInfo.hasAdInfo,pageInfo.cornersAdv,pageInfo.cornersAdv2,pageInfo.id)
}
analysisTopicAdvSource(topicDetail: TopicDetailData) {
this.analysisAllAdvSource(topicDetail.hasAdInfo,topicDetail.cornersAdv,topicDetail.cornersAdv2,topicDetail.id)
}
/**
* 解析广告资源
* @param pageInfo
*/
private async analysisAllAdvSource(hasAdInfo: number,cornersAd: AdvRuleBean,cornersAd2: CompAdvBean[],id: number) {
if (hasAdInfo === 1 && cornersAd != null) {
// 优先展示展现中心广告
let cornersAdv = cornersAd
if (cornersAdv == null) {
return
}
if (cornersAdv.advert == null) {
return
}
if ("left_down" == cornersAdv.pos) {
// 左边挂角广告
this.isRightAdv = 2
} else {
// 右边挂角广告
this.isRightAdv = 1
}
this.pageCornerContentInfo = cornersAdv;
this.isShowAds = true
} else if (cornersAd2 != null && cornersAd2.length > 0) {
// 广告中心-挂角广告信息
let cornersAdv2 = cornersAd2
if (cornersAdv2.length == 0) {
return
}
// 加工处理广告中心的广告数据
let pageCoreAdvArray = this.treatPageInfoAdsData(cornersAdv2);
let advLength = pageCoreAdvArray.length;
let pageId = id.toString();
let a = 0;
if (advLength > 1) {
a = await this.calPageAdvIndex(pageId,advLength)
}
// 获取投放
let showCompAdvBean = pageCoreAdvArray.convertToArray()[a]
if (showCompAdvBean.matInfo == null) {
return
}
this.saveReleaseAdvIndex(pageId, a)
//
let slotInfo = showCompAdvBean.slotInfo;
let postion = slotInfo.position
if (postion == 0) {
//左边挂角
this.isRightAdv = 2
} else {
// 右边挂角
this.isRightAdv = 1
}
this.pageCornerAdv = showCompAdvBean
this.isShowAds = true
}
}
/**
* 计算投放广告的序列号
* @param pageId
* @param advLength
* @returns
*/
private async calPageAdvIndex(pageId: string , advLength: number): Promise<number>{
let index = await this.obtainReleaseAdvIndex(pageId);
let a = await index + 1;
if (a >= advLength) {
a = 0;
}
return a;
}
/**
* 获取已投放挂角广告的编号
* @param pageId
* @returns
*/
private async obtainReleaseAdvIndex(pageId: string): Promise<number> {
let index: number = await SPHelper.default.get(SpConstants.APP_PAGE_CORNER_ADV + pageId, -1) as number;
return index;
}
/**
* 存储已经投放广告的编号
* @param pageId
* @param index
*/
private async saveReleaseAdvIndex(pageId: string, index: number) {
await SPHelper.default.save(SpConstants.APP_PAGE_CORNER_ADV + pageId, index)
}
/**
* 删除数据
* @param pageId
*/
private async clearHistoryAdvIndex(pageId: string){
SPHelper.default.deleteSync(SpConstants.APP_PAGE_CORNER_ADV + pageId)
}
private checkPageCornerAdv(pageId: string): Promise<boolean> {
let haveData = SPHelper.default.has(SpConstants.APP_PAGE_CORNER_ADV + pageId)
return haveData
}
/**
* 对广告中心的广告 数据按不同维度加工 筛选出符合的数据
* @param cornersAdv2 页面的广告数据
* @param pageId 所在页面pageid
*/
private treatPageInfoAdsData(cornersAdv2: CompAdvBean[]): ArrayList<CompAdvBean> {
// 按时间维度过滤出广告数据
let compAdsArray: ArrayList<CompAdvBean> = new ArrayList();
//当前日期
let serverTimeLong: number = DateTimeUtils.getTimeStamp();
for (let advBean of cornersAdv2) {
let startLong = advBean.startTime;
let endLong = advBean.endTime;
if (serverTimeLong >= startLong && serverTimeLong <= endLong) {
//符合开始时间和结束时间要求
compAdsArray.add(advBean)
}
}
//按展现优先级维度 数值越小,等级越高
if (compAdsArray.length > 1) {
//B、按展现优先级维度 数值越小,等级越高
compAdsArray.sort((a: CompAdvBean, b: CompAdvBean) => a.displayPriority - b.displayPriority)
}
return compAdsArray;
}
}