• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/**
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import BaseModel from "./BaseModel";
17import MorkDataModel from "./MorkDataModel";
18import common from "../data/commonData";
19import mmsTable from "../data/tableData";
20import HiLog from "../utils/HiLog"
21import LooseObject from "../data/LooseObject"
22import dataShare from "@ohos.data.dataShare";
23import dataSharePredicates from "@ohos.data.dataSharePredicates";
24
25const TAG = "ConversationModel";
26
27let morkDataModel = new MorkDataModel();
28
29export default class ConversationModel extends BaseModel {
30    async queryMessageDetail(actionData, callback, context?) {
31        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
32        common.string.URI_MESSAGE_LOG);
33        var resultColumns = this.buildResultColumns();
34        let condition = this.buildQueryCondition(actionData);
35        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
36        dataHelper.query(managerUri, condition, resultColumns).then(resultSet => {
37            let resultList = [];
38            if( !resultSet.goToFirstRow() ) {
39                callback(this.encapsulateReturnResult(common.int.SUCCESS, resultList));
40                return;
41            }
42            if (resultSet != undefined) {
43                do {
44                    let result: LooseObject = {};
45                    this.dealBaseColumnsData(result, resultSet);
46                    result.operatorServiceNumber = resultSet.getString(resultSet.getColumnIndex("operator_service_number"));
47                    result.msgCode = resultSet.getString(resultSet.getColumnIndex("msg_code"));
48                    result.isLock = resultSet.getString(resultSet.getColumnIndex("is_lock"));
49                    result.isRead = resultSet.getString(resultSet.getColumnIndex("is_read"));
50                    result.isCollect = resultSet.getString(resultSet.getColumnIndex("is_collect"));
51                    result.sessionType = resultSet.getString(resultSet.getColumnIndex("session_type"));
52                    result.retryNumber = resultSet.getString(resultSet.getColumnIndex("retry_number"));
53                    result.isSubsection = resultSet.getString(resultSet.getColumnIndex("is_subsection"));
54                    result.sessionId = resultSet.getString(resultSet.getColumnIndex("session_id"));
55                    result.groupId = resultSet.getString(resultSet.getColumnIndex("group_id"));
56                    result.isSender = resultSet.getString(resultSet.getColumnIndex("is_sender"));
57                    result.isSendReport = resultSet.getString(resultSet.getColumnIndex("is_send_report"));
58                    resultList.push(result);
59                } while (resultSet.goToNextRow())
60            }
61            callback(this.encapsulateReturnResult(common.int.SUCCESS, resultList));
62        }).catch(error => {
63            HiLog.e(TAG, "queryMessageDetail, error: " + JSON.stringify(error.message));
64            callback(this.encapsulateReturnCode(common.int.FAILURE));
65        });
66    }
67
68    buildQueryCondition(actionData) {
69        let condition = new dataSharePredicates.DataSharePredicates();
70        if (actionData.isDraft != null && actionData.isDraft) {
71            condition.equalTo(mmsTable.messageInfo.groupId, actionData.groupId);
72            condition.equalTo(mmsTable.messageInfo.msgState, actionData.sendStatus);
73        }
74        if (actionData.threadId != null) {
75            let sessionId = actionData.threadId + common.string.EMPTY_STR;
76            condition.equalTo(mmsTable.messageInfo.sessionId, sessionId);
77        }
78        if (actionData.threadIds != null && actionData.threadIds.length > 0) {
79            let sessionIds = this.groupIdToString(actionData.threadIds);
80            condition.in(mmsTable.messageInfo.sessionId, sessionIds);
81        }
82        if (actionData.msgIds != null && actionData.msgIds.length != 0) {
83            condition.in(mmsTable.messageInfo.msgId, actionData.msgIds);
84        }
85        if (actionData.hasLock != null) {
86            condition.equalTo(mmsTable.messageInfo.isLock, actionData.hasLock);
87        }
88        if (actionData.hasRead != null) {
89            condition.equalTo(mmsTable.messageInfo.isRead, actionData.hasRead);
90        }
91        return condition;
92    }
93
94    buildBaseColumns() {
95        var resultColumns = [
96            mmsTable.messageInfo.msgId,
97            mmsTable.messageInfo.slotId,
98            // Recipient Mobile Number
99            mmsTable.messageInfo.receiverNumber,
100            mmsTable.messageInfo.senderNumber,
101            mmsTable.messageInfo.startTime,
102            mmsTable.messageInfo.endTime,
103            mmsTable.messageInfo.msgType,
104            // sms = 0,mms,
105            mmsTable.messageInfo.smsType,
106            // 0: normal; 1: notification
107            mmsTable.messageInfo.msgTitle,
108            mmsTable.messageInfo.msgContent,
109            mmsTable.messageInfo.msgState
110        ];
111        return resultColumns;
112    }
113
114    buildResultColumns() {
115        let basicColumns = this.buildBaseColumns();
116        var resultColumns = [
117            mmsTable.messageInfo.operatorServiceNumber,
118            mmsTable.messageInfo.msgCode,
119            mmsTable.messageInfo.isLock,
120            mmsTable.messageInfo.isRead,
121            mmsTable.messageInfo.isCollect,
122            mmsTable.messageInfo.sessionType,
123            // 0: common; 1: broadcast; 2: group-send
124            mmsTable.messageInfo.retryNumber,
125            // Number of resending times
126            mmsTable.messageInfo.isSubsection,
127            mmsTable.messageInfo.sessionId,
128            mmsTable.messageInfo.groupId,
129            mmsTable.messageInfo.isSender,
130            mmsTable.messageInfo.isSendReport,
131        ];
132        return basicColumns.concat(resultColumns);
133    }
134
135    async searchSmsMessageByContent(actionData, callback, context?) {
136        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
137        common.string.URI_MESSAGE_LOG);
138        var resultColumns = this.buildSearchResultColumns();
139        let condition = new dataSharePredicates.DataSharePredicates();
140        condition.like(mmsTable.messageInfo.msgContent, "%" + actionData.content + "%");
141        condition.equalTo(mmsTable.messageInfo.msgType, 0);
142        if (actionData.numberType != null) {
143            condition.equalTo(mmsTable.messageInfo.smsType, actionData.numberType);
144        }
145        let resultList = [];
146        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
147        dataHelper.query(managerUri, condition, resultColumns).then(resultSet => {
148            if (resultSet != undefined) {
149                while (resultSet.goToNextRow()) {
150                    let result: LooseObject = {};
151                    this.dealBaseColumnsData(result, resultSet);
152                    result.isCollect = resultSet.getString(resultSet.getColumnIndex("is_collect"));
153                    result.sessionId = resultSet.getString(resultSet.getColumnIndex("session_id"));
154                    result.groupId = resultSet.getString(resultSet.getColumnIndex("group_id"));
155                    result.isSender = resultSet.getString(resultSet.getColumnIndex("is_sender"));
156                    resultList.push(result);
157                }
158            }
159            callback(this.encapsulateReturnResult(common.int.SUCCESS, resultList));
160        }).catch(error => {
161            HiLog.e(TAG, "searchSmsMessageByContent, error: " + JSON.stringify(error.message));
162            callback(this.encapsulateReturnCode(common.int.FAILURE));
163        });
164    }
165
166    buildSearchResultColumns() {
167        let basicColumns = this.buildBaseColumns();
168        var resultColumns = [
169            mmsTable.messageInfo.isCollect,
170            mmsTable.messageInfo.sessionId,
171            mmsTable.messageInfo.groupId,
172            mmsTable.messageInfo.isSender
173        ];
174        return basicColumns.concat(resultColumns);
175    }
176
177    dealBaseColumnsData(result, resultSet) {
178        result.msgId = resultSet.getString(resultSet.getColumnIndex("msg_id"));
179        result.slotId = resultSet.getString(resultSet.getColumnIndex("slot_id"));
180        result.receiverNumber = resultSet.getString(resultSet.getColumnIndex("receiver_number"));
181        result.senderNumber = resultSet.getString(resultSet.getColumnIndex("sender_number"));
182        result.startTime = resultSet.getString(resultSet.getColumnIndex("start_time"));
183        result.endTime = resultSet.getString(resultSet.getColumnIndex("end_time"));
184        result.msgType = resultSet.getString(resultSet.getColumnIndex("msg_type"));
185        result.smsType = resultSet.getString(resultSet.getColumnIndex("sms_type"));
186        result.msgTitle = resultSet.getString(resultSet.getColumnIndex("msg_title"));
187        result.msgContent = resultSet.getString(resultSet.getColumnIndex("msg_content"));
188        result.msgState = resultSet.getString(resultSet.getColumnIndex("msg_state"));
189    }
190
191    async insertMessageDetail(actionData, callback, context?) {
192        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
193        common.string.URI_MESSAGE_LOG);
194        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
195        dataHelper.insert(managerUri, actionData.stringValue).then(data => {
196            callback(this.encapsulateReturnResult(common.int.SUCCESS, data));
197        }).catch(error => {
198            HiLog.e(TAG, "insertMessageDetail, fail: " + JSON.stringify(error.message));
199            callback(this.encapsulateReturnCode(common.int.FAILURE));
200        });
201    }
202
203    async updateLock(actionData, callback, context?) {
204        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
205        common.string.URI_MESSAGE_LOG);
206        var groupIds = this.groupIdToString(actionData.groupIds);
207        var condition = new dataSharePredicates.DataSharePredicates();
208        condition.in(mmsTable.messageInfo.groupId, groupIds);
209        var stringValue = {
210            "is_lock": actionData.hasLock,
211        };
212        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
213        dataHelper.update(managerUri, condition, stringValue).then((data) => {
214            callback(this.encapsulateReturnCode(common.int.SUCCESS));
215        }).catch((err) => {
216            HiLog.e(TAG, "updateLock, err: " + JSON.stringify(err.message));
217            callback(this.encapsulateReturnCode(common.int.FAILURE));
218        });
219    }
220
221    groupIdToString(groupIds) {
222        let ids = [];
223        groupIds.forEach(item => {
224            ids.push(item + '');
225        });
226        return ids;
227    }
228
229    async updateCollect(actionData, callback, context?) {
230        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
231        common.string.URI_MESSAGE_LOG);
232        var groupIds = this.groupIdToString(actionData.groupIds);
233        var condition = new dataSharePredicates.DataSharePredicates();
234        condition.in(mmsTable.messageInfo.groupId, groupIds);
235        var stringValue = {
236            "is_collect": actionData.hasCollect,
237        };
238        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
239        dataHelper.update(managerUri, condition, stringValue).then((data) => {
240            callback(this.encapsulateReturnCode(common.int.SUCCESS));
241        }).catch((err) => {
242            HiLog.e(TAG, "updateCollect, err: " + JSON.stringify(err.message));
243            callback(this.encapsulateReturnCode(common.int.FAILURE));
244        });
245    }
246
247    async deleteMessageByIds(actionData, context?) {
248        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
249        common.string.URI_MESSAGE_LOG);
250        var msgIds = actionData.msgIds;
251        let condition = new dataSharePredicates.DataSharePredicates();
252        condition.in(mmsTable.messageInfo.msgId, msgIds);
253        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
254        dataHelper.delete(managerUri, condition);
255    }
256
257    async deleteMessageByGroupIds(actionData, callback, context?) {
258        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
259        common.string.URI_MESSAGE_LOG);
260        var groupIds = this.groupIdToString(actionData.groupIds);
261        let condition = new dataSharePredicates.DataSharePredicates();
262        condition.in(mmsTable.messageInfo.groupId, groupIds);
263        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
264        dataHelper.delete(managerUri, condition).then((data) => {
265            callback(this.encapsulateReturnCode(common.int.SUCCESS));
266        }).catch((err) => {
267            HiLog.e(TAG, "deleteMessageByGroupIds, err: " + JSON.stringify(err.message));
268            callback(this.encapsulateReturnCode(common.int.FAILURE));
269        });
270    }
271
272    async deleteMessageBySessionIds(actionData, callback, context?) {
273        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
274        common.string.URI_MESSAGE_LOG);
275        let threadIds = [];
276        for (let id of actionData.threadIds) {
277            let threadId = id + common.string.EMPTY_STR;
278            threadIds.push(threadId);
279        }
280        let condition = new dataSharePredicates.DataSharePredicates();
281        condition.in(mmsTable.messageInfo.sessionId, threadIds);
282        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
283        dataHelper.delete(managerUri, condition).then((data) => {
284            callback(this.encapsulateReturnCode(common.int.SUCCESS));
285        }).catch((err) => {
286            HiLog.e(TAG, "deleteMessageBySessionIds, err: " + JSON.stringify(err.message));
287            callback(this.encapsulateReturnCode(common.int.FAILURE));
288        });
289    }
290
291    async deleteMessageBySessionIdsAndLock(actionData, callback, context?) {
292        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
293        common.string.URI_MESSAGE_LOG);
294        let threadIds = this.groupIdToString(actionData.threadIds);
295        let condition = new dataSharePredicates.DataSharePredicates();
296        condition.equalTo(mmsTable.messageInfo.isLock, actionData.hasLock);
297        condition.in(mmsTable.messageInfo.sessionId, threadIds);
298        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
299        dataHelper.delete(managerUri, condition).then((data) => {
300            callback(this.encapsulateReturnCode(common.int.SUCCESS));
301        }).catch((err) => {
302            HiLog.e(TAG, "deleteMessageBySessionIdsAndLock, err: " + JSON.stringify(err.message));
303            callback(this.encapsulateReturnCode(common.int.FAILURE));
304        });
305    }
306
307    async updateById(actionData, callback, context?) {
308        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
309        common.string.URI_MESSAGE_LOG);
310        var msgId = actionData.msgId;
311        let condition = new dataSharePredicates.DataSharePredicates();
312        condition.equalTo(mmsTable.messageInfo.msgId, msgId);
313        var stringValue = {
314            "msg_state": actionData.sendStatus,
315        };
316        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
317        dataHelper.update(managerUri, condition, stringValue).then((data) => {
318            callback(this.encapsulateReturnCode(common.int.SUCCESS));
319        }).catch((err) => {
320            HiLog.e(TAG, "updateById, err: " + JSON.stringify(err.message));
321            callback(this.encapsulateReturnCode(common.int.FAILURE));
322        });
323    }
324
325    async markAllAsRead(actionData, callback, context?) {
326        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
327        common.string.URI_MESSAGE_LOG);
328        let threadIds = [];
329        for (let id of actionData.threadIds) {
330            let threadId = id + common.string.EMPTY_STR;
331            threadIds.push(threadId);
332        }
333        let condition = new dataSharePredicates.DataSharePredicates();
334        condition.in(mmsTable.messageInfo.sessionId, threadIds);
335        var stringValue = {
336            "is_read": actionData.hasRead
337        };
338        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
339        dataHelper.update(managerUri, condition, stringValue).then((data) => {
340            callback(this.encapsulateReturnCode(common.int.SUCCESS));
341        }).catch((err) => {
342            HiLog.e(TAG, "markAllAsRead, err: " + JSON.stringify(err.message));
343            callback(this.encapsulateReturnCode(common.int.FAILURE));
344        });
345    }
346
347    async markAllToRead(actionData, callback, context?) {
348        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
349        common.string.URI_MESSAGE_LOG);
350        let condition = new dataSharePredicates.DataSharePredicates();
351        condition.equalTo(mmsTable.messageInfo.isRead, 0);
352        condition.equalTo(mmsTable.messageInfo.smsType, actionData.smsType);
353        var stringValue = {
354            "is_read": actionData.hasRead
355        };
356        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
357        dataHelper.update(managerUri, condition, stringValue).then((data) => {
358            callback(this.encapsulateReturnCode(common.int.SUCCESS));
359        }).catch((err) => {
360            HiLog.e(TAG, "markAllToRead, err: " + JSON.stringify(err.message));
361            callback(this.encapsulateReturnCode(common.int.FAILURE));
362        });
363    }
364
365    async queryMaxGroupId(actionData, callback, context?) {
366        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
367        common.string.URI_MESSAGE_LOG);
368        let resultColumns = [
369            "maxGroupId"
370        ];
371        let condition = new dataSharePredicates.DataSharePredicates();
372        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_MAX_GROUP;
373        dataHelper.query(managerUri, condition, resultColumns, (err, resultSet) => {
374            HiLog.i(TAG, "queryMaxGroupId, query callback");
375            let result: LooseObject = {};
376            if (resultSet != undefined) {
377                if (resultSet.goToLastRow()) {
378                    result.maxGroupId = resultSet.getString(0);
379                    HiLog.d(TAG, "queryMaxGroupId, maxGroupId=" + result.maxGroupId);
380                }
381            }
382            callback(this.encapsulateReturnResult(common.int.SUCCESS, result));
383        });
384    }
385
386    saveImage(actionData, callback) {
387        var savedImageInfo = morkDataModel.saveImage();
388        callback(this.encapsulateReturnResult(common.int.SUCCESS, savedImageInfo));
389    }
390
391    gotoShare(actionData, callback) {
392        callback(this.encapsulateReturnCode(common.int.SUCCESS));
393    }
394
395    queryFromGallery(actionData, callback) {
396        var pictureListFromGallery = morkDataModel.queryFromGallery();
397        callback(this.encapsulateReturnResult(common.int.SUCCESS, pictureListFromGallery));
398    }
399
400    dealContractsTransmit(actionData, callback) {
401        callback(this.encapsulateReturnCode(common.int.SUCCESS));
402    }
403
404    async queryMessageThirty(actionData, callback, context?) {
405        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
406        common.string.URI_MESSAGE_LOG);
407        let timestamp = new Date().getTime();
408        let lastTime = timestamp - 2592000000;
409        let resultColumns = [
410            mmsTable.messageInfo.msgId,
411            mmsTable.messageInfo.sessionId
412        ];
413        let condition = new dataSharePredicates.DataSharePredicates();
414        condition.lessThan(mmsTable.messageInfo.endTime, lastTime);
415        condition.equalTo(mmsTable.messageInfo.smsType, actionData.numberType);
416        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
417        dataHelper.query(managerUri, condition, resultColumns).then((resultSet) => {
418            let mmsList = [];
419            if (resultSet != undefined) {
420                while (resultSet.goToNextRow()) {
421                    let item: LooseObject = {};
422                    item.msgId = resultSet.getString(0);
423                    item.sessionId = resultSet.getString(1);
424                    mmsList.push(item);
425                }
426            }
427            callback(this.encapsulateReturnResult(common.int.SUCCESS, mmsList));
428        }).catch((err) => {
429            HiLog.e(TAG, "queryMessageThirty, err: " + JSON.stringify(err.message));
430            callback(this.encapsulateReturnCode(common.int.FAILURE));
431        });
432    }
433
434    async statisticsUnreadNotify(actionData, callback, context?) {
435        let mmsContext = context ? context : globalThis.mmsContext;
436        if (actionData.mmsContext) {
437            mmsContext = actionData.mmsContext;
438        }
439        let dataHelper = await dataShare.createDataShareHelper(mmsContext, common.string.URI_MESSAGE_LOG);
440        let condition = new dataSharePredicates.DataSharePredicates();
441        condition.equalTo(mmsTable.messageInfo.isRead, 0);
442        condition.equalTo(mmsTable.messageInfo.smsType, 1);
443        let resultColumns = [
444            mmsTable.messageInfo.msgId
445        ];
446        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
447        dataHelper.query(managerUri, condition, resultColumns).then((resultSet) => {
448            let count = 0;
449            if (resultSet != undefined) {
450                count = resultSet.rowCount;
451            }
452            callback(this.encapsulateReturnResult(common.int.SUCCESS, count));
453        }).catch((err) => {
454            HiLog.e(TAG, "statisticsUnreadNotify, err: " + JSON.stringify(err.message));
455            callback(this.encapsulateReturnCode(common.int.FAILURE));
456        });
457    }
458
459    async searchMmsPartByContent(actionData, callback, context?) {
460        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
461        common.string.URI_MESSAGE_LOG);
462        let resultColumns = this.buildMmsPartResultColumns();
463        let condition = new dataSharePredicates.DataSharePredicates();
464        condition.like(mmsTable.mmsPart.content, "%" + actionData.content + "%");
465        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_MMS_PART;
466        dataHelper.query(managerUri, condition, resultColumns).then(resultSet => {
467            let resultList = this.dealMmsPartResult(resultSet);
468            callback(this.encapsulateReturnResult(common.int.SUCCESS, resultList));
469        }).catch(error => {
470            HiLog.e(TAG, "searchMmsPartByContent, error: " + JSON.stringify(error.message));
471            callback(this.encapsulateReturnCode(common.int.FAILURE));
472        });
473    }
474
475    async queryMmsPart(actionData, callback, context?) {
476        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
477        common.string.URI_MESSAGE_LOG);
478        var resultColumns = this.buildMmsPartResultColumns();
479        let condition = new dataSharePredicates.DataSharePredicates();
480        condition.in(mmsTable.mmsPart.msgId, actionData.msgIds);
481        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_MMS_PART;
482        dataHelper.query(managerUri, condition, resultColumns).then(resultSet => {
483            let resultList = this.dealMmsPartResult(resultSet);
484            callback(this.encapsulateReturnResult(common.int.SUCCESS, resultList));
485        }).catch(error => {
486            HiLog.e(TAG, "queryMmsPart, error: " + JSON.stringify(error.message));
487            callback(this.encapsulateReturnCode(common.int.FAILURE));
488        });
489    }
490
491    buildMmsPartResultColumns() {
492        let resultColumns = [
493            mmsTable.mmsPart.msgId,
494            mmsTable.mmsPart.groupId,
495            mmsTable.mmsPart.type,
496            mmsTable.mmsPart.locationPath,
497            mmsTable.mmsPart.content,
498            mmsTable.mmsPart.recordingTime,
499            mmsTable.mmsPart.partSize,
500            mmsTable.mmsPart.state
501        ];
502        return resultColumns;
503    }
504
505    dealMmsPartResult(resultSet) {
506        let resultList = [];
507        if (resultSet != undefined) {
508            while (resultSet.goToNextRow()) {
509                let result: LooseObject = {};
510                result.msgId = resultSet.getString(0);
511                result.groupId = resultSet.getString(1);
512                result.type = resultSet.getString(2);
513                result.locationPath = resultSet.getString(3);
514                result.content = resultSet.getString(4);
515                result.recordingTime = resultSet.getString(5);
516                result.fileSize = resultSet.getString(6);
517                result.messageType = resultSet.getString(7);
518                resultList.push(result);
519            }
520        }
521        return resultList;
522    }
523
524    async deleteMmsPartByGroupIds(actionData, callback, context?) {
525        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
526        common.string.URI_MESSAGE_LOG);
527        let groupIds = this.groupIdToString(actionData.groupIds);
528        let condition = new dataSharePredicates.DataSharePredicates();
529        condition.in(mmsTable.mmsPart.groupId, groupIds);
530        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_MMS_PART;
531        dataHelper.delete(managerUri, condition).then((data) => {
532            callback(this.encapsulateReturnCode(common.int.SUCCESS));
533        }).catch((err) => {
534            HiLog.e(TAG, "deleteMmsPartByGroupIds, err: " + JSON.stringify(err.message));
535            callback(this.encapsulateReturnCode(common.int.FAILURE));
536        });
537    }
538
539    async batchInsertMmsPart(actionData, callback, context?) {
540        for (let stringValue of actionData.batchMmsParts) {
541            this.insertMmsPart(actionData, stringValue, res => {
542            }, context);
543        }
544        callback(this.encapsulateReturnCode(common.int.SUCCESS));
545    }
546
547    async insertMmsPart(actionData, stringValue, callback, context?) {
548        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
549        common.string.URI_MESSAGE_LOG);
550        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_MMS_PART;
551        dataHelper.insert(managerUri, stringValue).then(data => {
552            callback(this.encapsulateReturnResult(data, common.int.SUCCESS));
553        }).catch(error => {
554            HiLog.e(TAG, "insertMmsPart, error: " + JSON.stringify(error.message));
555            callback(this.encapsulateReturnCode(common.int.FAILURE));
556        });
557    }
558
559    async queryMessageLockBySessionId(actionData, callback, context?) {
560        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
561        common.string.URI_MESSAGE_LOG);
562        var resultColumns = [mmsTable.messageInfo.isLock];
563        let condition = new dataSharePredicates.DataSharePredicates();
564        let sessionId = actionData.threadId + common.string.EMPTY_STR;
565        condition.equalTo(mmsTable.messageInfo.sessionId, sessionId);
566        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
567        dataHelper.query(managerUri, condition, resultColumns).then(resultSet => {
568            let lockStatus = [];
569            if (resultSet != undefined) {
570                while (resultSet.goToNextRow()) {
571                    let result: LooseObject = {};
572                    result.isLock = resultSet.getString(0);
573                    lockStatus.push(result);
574                }
575            }
576            callback(this.encapsulateReturnResult(common.int.SUCCESS, lockStatus));
577        }).catch(error => {
578            HiLog.e(TAG, "queryMessageLockBySessionId, error: " + JSON.stringify(error.message));
579            callback(this.encapsulateReturnCode(common.int.FAILURE));
580        });
581    }
582
583    async queryGroupIdBySessionId(actionData, callback, context?) {
584        let dataHelper = await dataShare.createDataShareHelper(context ? context : globalThis.mmsContext,
585        common.string.URI_MESSAGE_LOG);
586        var resultColumns = [mmsTable.messageInfo.groupId];
587        let condition = new dataSharePredicates.DataSharePredicates();
588        let threadIds = this.groupIdToString(actionData.threadIds);
589        condition.in(mmsTable.messageInfo.sessionId, threadIds);
590        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
591        dataHelper.query(managerUri, condition, resultColumns).then(resultSet => {
592            let groupIds = [];
593            if (resultSet != undefined) {
594                resultSet.goToFirstRow();
595                do {
596                    let groupId = resultSet.getString(0);
597                    groupIds.push(groupId);
598                } while (resultSet.goToNextRow());
599            }
600            callback(this.encapsulateReturnResult(common.int.SUCCESS, groupIds));
601        }).catch(error => {
602            HiLog.e(TAG, "queryGroupIdBySessionId, error: " + JSON.stringify(error.message));
603            callback(this.encapsulateReturnCode(common.int.FAILURE));
604        });
605    }
606}