zhangbo1_wd

添加pageinfo、comp缓存数据,待完善流程。

@@ -7,6 +7,7 @@ const TAG = 'KVStoreHelper' @@ -7,6 +7,7 @@ const TAG = 'KVStoreHelper'
7 7
8 /** 8 /**
9 * 键值型数据库管理类,类似sp,存储变大,单条数据,value<4M 9 * 键值型数据库管理类,类似sp,存储变大,单条数据,value<4M
  10 + * TODO 是否需要开线程
10 */ 11 */
11 export class KVStoreHelper { 12 export class KVStoreHelper {
12 private static _context: Context; 13 private static _context: Context;
@@ -13,4 +13,6 @@ export interface PageDTO { @@ -13,4 +13,6 @@ export interface PageDTO {
13 compList: CompDTO[]; // Components集合的布局信息 13 compList: CompDTO[]; // Components集合的布局信息
14 14
15 compAdList:CompAdvBean[] // 页面广告 15 compAdList:CompAdvBean[] // 页面广告
  16 +
  17 + md5: string
16 } 18 }
@@ -41,6 +41,7 @@ export interface PageInfoDTO { @@ -41,6 +41,7 @@ export interface PageInfoDTO {
41 */ 41 */
42 pageAdList:CompAdvBean[] 42 pageAdList:CompAdvBean[]
43 43
  44 + md5:string
44 } 45 }
45 46
46 export interface ChannelInfoDTO { 47 export interface ChannelInfoDTO {
@@ -255,6 +255,7 @@ export struct PageComponent { @@ -255,6 +255,7 @@ export struct PageComponent {
255 this.pageModel.channelId = this.channelId; 255 this.pageModel.channelId = this.channelId;
256 this.pageModel.currentPage = 1; 256 this.pageModel.currentPage = 1;
257 this.pageModel.pageTotalCompSize = 0; 257 this.pageModel.pageTotalCompSize = 0;
  258 + // TODO PageHelper.getInitCacheData(this.pageModel, this.pageAdvModel)
258 PageHelper.getInitData(this.pageModel, this.pageAdvModel) 259 PageHelper.getInitData(this.pageModel, this.pageAdvModel)
259 }, 100) 260 }, 100)
260 } 261 }
@@ -13,6 +13,7 @@ import { CompAdvMatInfoBean } from 'wdBean/src/main/ets/bean/adv/CompAdvInfoBean @@ -13,6 +13,7 @@ import { CompAdvMatInfoBean } from 'wdBean/src/main/ets/bean/adv/CompAdvInfoBean
13 import { BaseDTO } from 'wdBean/src/main/ets/bean/component/BaseDTO'; 13 import { BaseDTO } from 'wdBean/src/main/ets/bean/component/BaseDTO';
14 import { viewBlogInsightIntentShare, ActionMode } from '../utils/InsightIntentShare' 14 import { viewBlogInsightIntentShare, ActionMode } from '../utils/InsightIntentShare'
15 import { common } from '@kit.AbilityKit'; 15 import { common } from '@kit.AbilityKit';
  16 +import { CacheData } from 'wdNetwork/Index';
16 17
17 const TAG = 'PageHelper'; 18 const TAG = 'PageHelper';
18 19
@@ -26,6 +27,7 @@ export class PageHelper { @@ -26,6 +27,7 @@ export class PageHelper {
26 async refreshUI(pageModel: PageModel, pageAdvModel: PageAdModel) { 27 async refreshUI(pageModel: PageModel, pageAdvModel: PageAdModel) {
27 pageModel.loadStrategy = 2 28 pageModel.loadStrategy = 2
28 pageModel.pageTotalCompSize = 0; 29 pageModel.pageTotalCompSize = 0;
  30 + // TODO 下拉刷新,是否加载缓存
29 this.getPageInfo(pageModel, pageAdvModel) 31 this.getPageInfo(pageModel, pageAdvModel)
30 } 32 }
31 33
@@ -41,11 +43,71 @@ export class PageHelper { @@ -41,11 +43,71 @@ export class PageHelper {
41 /** 43 /**
42 * 进页面请求数据 44 * 进页面请求数据
43 */ 45 */
  46 + async getInitCacheData(pageModel: PageModel, pageAdvModel: PageAdModel) {
  47 + Logger.error('zzzz','getInitCacheData')
  48 + PageViewModel.getPageInfoCache(pageModel.pageId).then(pageInfo => {
  49 + if (pageInfo == null) {
  50 + return;
  51 + }
  52 + pageModel.pageInfo = pageInfo;
  53 + //解析页面挂角广告资源
  54 + pageAdvModel.analysisAdvSource(pageInfo);
  55 + this.parseCacheGroup(pageModel)
  56 + })
  57 + }
  58 +
  59 + async parseCacheGroup(pageModel: PageModel) {
  60 + Logger.error('zzzz','parseCacheGroup')
  61 + let pageInfo: PageInfoDTO = pageModel.pageInfo
  62 + pageModel.groupList = []
  63 + pageInfo.pageAdList = []
  64 + pageInfo.oneRequestPageGroupCompList = new ArrayList()
  65 + pageModel.groupList.push(...pageInfo.groups)
  66 + Logger.error("ZZZXXXXX", 'parseCacheGroup----1-----');
  67 + for (const group of pageInfo.groups) {
  68 + pageModel.groupId = group.id;
  69 + pageModel.groupData = group
  70 + Logger.error("ZZZXXXXX", '楼层id-start--》' + pageModel.groupId);
  71 + // await,确保groups接口顺序执行
  72 + let pageDto = await PageViewModel.getPageGroupCacheData(pageModel.bizCopy()) as PageDTO
  73 + let index = pageInfo.groups.indexOf(group)
  74 + if (index == 0) {
  75 + // 清空comp列表
  76 + pageModel.compList.clear()
  77 + }
  78 + this.analysisPageGroupCompData(pageModel,pageDto, pageInfo, index == pageInfo.groups.length - 1)
  79 + Logger.error("ZZZXXXXX", '楼层id-end--》' + pageModel.groupId + ' 楼层 comp数量=' + pageDto.compList.length);
  80 + }
  81 +
  82 + // 收集页面所有楼层的组件信息,同步完成广告投放计算,异步完成稿件批查,
  83 +
  84 + pageModel.pageTotalCompSize = pageInfo.oneRequestPageGroupCompList.length + pageModel.pageTotalCompSize
  85 + // 处理页面广告数据,投放到页面的位置
  86 + // TODO 缓存数据不加载广告
  87 + // this.handlePageCompAdvPostion(pageInfo.oneRequestPageGroupCompList, pageModel, pageInfo.pageAdList);
  88 +
  89 + //遍历所有组件和稿件数据 push到页面
  90 + for (let element of pageInfo.oneRequestPageGroupCompList) {
  91 + pageModel.compList.push(CompDTO.createNewsBean(element))
  92 + }
  93 + Logger.error('zzzz', 'parseCacheGroup count: ' + pageModel.compList.totalCount())
  94 + pageModel.currentPage++
  95 + pageModel.viewType = ViewType.LOADED
  96 + closeRefresh(pageModel, true)
  97 +
  98 + Logger.error("ZZZXXXXX", 'parseGroup----3----->' + pageInfo.oneRequestPageGroupCompList.length);
  99 + }
  100 +
  101 + /**
  102 + * 进页面请求数据
  103 + */
44 async getInitData(pageModel: PageModel, pageAdvModel: PageAdModel) { 104 async getInitData(pageModel: PageModel, pageAdvModel: PageAdModel) {
45 pageModel.loadStrategy = 1 105 pageModel.loadStrategy = 1
46 let netStatus = NetworkUtil.isNetConnected() 106 let netStatus = NetworkUtil.isNetConnected()
47 if (netStatus) { 107 if (netStatus) {
48 this.getPageInfo(pageModel, pageAdvModel) 108 this.getPageInfo(pageModel, pageAdvModel)
  109 + } else if (pageModel.compList.size() > 0) {
  110 + // 加载缓存数据了,不用无网络提示
49 } else { 111 } else {
50 pageModel.viewType = ViewType.EMPTY; 112 pageModel.viewType = ViewType.EMPTY;
51 pageModel.emptyType = WDViewDefaultType.WDViewDefaultType_NoNetwork; 113 pageModel.emptyType = WDViewDefaultType.WDViewDefaultType_NoNetwork;
@@ -79,6 +141,10 @@ export class PageHelper { @@ -79,6 +141,10 @@ export class PageHelper {
79 //解析页面挂角广告资源 141 //解析页面挂角广告资源
80 pageAdvModel.analysisAdvSource(pageInfo); 142 pageAdvModel.analysisAdvSource(pageInfo);
81 this.parseGroup(pageModel) 143 this.parseGroup(pageModel)
  144 + // if (pageModel.currentPage == 1) {
  145 + // // 保存缓存
  146 + // CacheData.saveCacheData(CacheData.comPageInfoCacheKey + pageModel.pageId, pageInfo, pageInfo.md5)
  147 + // }
82 }).catch(() => { 148 }).catch(() => {
83 pageModel.viewType = ViewType.EMPTY; 149 pageModel.viewType = ViewType.EMPTY;
84 pageModel.emptyType = WDViewDefaultType.WDViewDefaultType_ContentFailed; 150 pageModel.emptyType = WDViewDefaultType.WDViewDefaultType_ContentFailed;
@@ -115,6 +181,9 @@ export class PageHelper { @@ -115,6 +181,9 @@ export class PageHelper {
115 if (index == 0) { 181 if (index == 0) {
116 // 清空comp列表 182 // 清空comp列表
117 pageModel.compList.clear() 183 pageModel.compList.clear()
  184 + // // 保存缓存
  185 + // CacheData.saveCacheData(CacheData.compGroupInfoDataCacheKey + pageModel.pageId + pageModel.groupId, pageDto,
  186 + // pageDto.md5)
118 } 187 }
119 this.analysisPageGroupCompData(pageModel,pageDto, pageInfo, index == pageInfo.groups.length - 1) 188 this.analysisPageGroupCompData(pageModel,pageDto, pageInfo, index == pageInfo.groups.length - 1)
120 Logger.error("ZZZXXXXX", '楼层id-end--》' + pageModel.groupId + ' 楼层 comp数量=' + pageDto.compList.length); 189 Logger.error("ZZZXXXXX", '楼层id-end--》' + pageModel.groupId + ' 楼层 comp数量=' + pageDto.compList.length);
@@ -16,7 +16,7 @@ import { @@ -16,7 +16,7 @@ import {
16 import { CompStyle } from 'wdConstant/Index'; 16 import { CompStyle } from 'wdConstant/Index';
17 17
18 import { CollectionUtils, Logger, ResourcesUtils, StringUtils } from 'wdKit'; 18 import { CollectionUtils, Logger, ResourcesUtils, StringUtils } from 'wdKit';
19 -import { ResponseDTO, } from 'wdNetwork'; 19 +import { CacheData, ResponseDTO, } from 'wdNetwork';
20 import { PageUIReqBean } from '../components/page/bean/PageUIReqBean'; 20 import { PageUIReqBean } from '../components/page/bean/PageUIReqBean';
21 import { PageRepository } from '../repository/PageRepository'; 21 import { PageRepository } from '../repository/PageRepository';
22 import { BaseViewModel } from './BaseViewModel'; 22 import { BaseViewModel } from './BaseViewModel';
@@ -89,6 +89,7 @@ export class PageViewModel extends BaseViewModel { @@ -89,6 +89,7 @@ export class PageViewModel extends BaseViewModel {
89 return 89 return
90 } 90 }
91 Logger.info(TAG, "getNavData then,resDTO.timestamp:" + resDTO.timestamp); 91 Logger.info(TAG, "getNavData then,resDTO.timestamp:" + resDTO.timestamp);
  92 + resDTO.data.md5 = resDTO.meta?.md5 || ''
92 success(resDTO.data); 93 success(resDTO.data);
93 }) 94 })
94 .catch((err: Error) => { 95 .catch((err: Error) => {
@@ -226,11 +227,13 @@ export class PageViewModel extends BaseViewModel { @@ -226,11 +227,13 @@ export class PageViewModel extends BaseViewModel {
226 async getPageInfo(pageId: string): Promise<PageInfoDTO> { 227 async getPageInfo(pageId: string): Promise<PageInfoDTO> {
227 return new Promise<PageInfoDTO>((success, error) => { 228 return new Promise<PageInfoDTO>((success, error) => {
228 PageRepository.fetchPageData(pageId).then((resDTO: ResponseDTO<PageInfoDTO>) => { 229 PageRepository.fetchPageData(pageId).then((resDTO: ResponseDTO<PageInfoDTO>) => {
229 - if (this.isRespondsInvalid(resDTO, 'getPageInfo')) {  
230 - error("getPageInfo data invalid"); 230 + if (!resDTO || !resDTO.data) {
  231 + Logger.error(TAG, 'getPageInfo then navResDTO is empty');
  232 + error('navResDTO is empty');
231 return 233 return
232 } 234 }
233 Logger.info(TAG, "getPageInfo then,resDTO.timeStamp:" + resDTO.timestamp); 235 Logger.info(TAG, "getPageInfo then,resDTO.timeStamp:" + resDTO.timestamp);
  236 + resDTO.data.md5 = resDTO.meta?.md5 || ''
234 success(resDTO.data as PageInfoDTO); 237 success(resDTO.data as PageInfoDTO);
235 }); 238 });
236 }); 239 });
@@ -334,6 +337,47 @@ export class PageViewModel extends BaseViewModel { @@ -334,6 +337,47 @@ export class PageViewModel extends BaseViewModel {
334 }) 337 })
335 }) 338 })
336 } 339 }
  340 +
  341 + async getPageInfoCache(pageId: string): Promise<PageInfoDTO | null> {
  342 + return new Promise<PageInfoDTO | null>((success) => {
  343 + CacheData.getLocalCacheData(CacheData.comPageInfoCacheKey + pageId).then((data) => {
  344 + // Logger.debug(TAG, 'getPageInfoCache 333 ' + JSON.stringify(data));
  345 + if (data) {
  346 + let navBean = JSON.parse(CacheData.getNetworkData(data)) as PageInfoDTO
  347 + success(navBean)
  348 + } else {
  349 + success(null)
  350 + }
  351 + }).catch((err: object) => {
  352 + Logger.error(TAG, 'getPageInfoCache catch err: ' + JSON.stringify(err));
  353 + success(null)
  354 + })
  355 + });
  356 + }
  357 +
  358 + /**
  359 + * 获取页面楼层的组件信息
  360 + * @param pageModel
  361 + * @returns
  362 + */
  363 + async getPageGroupCacheData(pageModel: PageUIReqBean): Promise<PageDTO | null> {
  364 + Logger.debug(TAG, 'getPageData pageId: ' + pageModel.pageId);
  365 + return new Promise<PageDTO | null>((success) => {
  366 + CacheData.getLocalCacheData(CacheData.compGroupInfoDataCacheKey + pageModel.pageId + pageModel.groupId).then((data) => {
  367 + // Logger.debug(TAG, 'getPageGroupCacheData 333 ' + JSON.stringify(data));
  368 + if (data) {
  369 + let navBean = JSON.parse(CacheData.getNetworkData(data)) as PageDTO
  370 + success(navBean)
  371 + } else {
  372 + success(null)
  373 + }
  374 + }).catch((err: object) => {
  375 + Logger.error(TAG, 'getPageGroupCacheData catch err: ' + JSON.stringify(err));
  376 + success(null)
  377 + })
  378 + });
  379 + }
  380 +
337 } 381 }
338 382
339 383