• 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";
24import featureAbility from "@ohos.ability.featureAbility";
25import dataAbility from "@ohos.data.dataAbility";
26
27const TAG = "ConversationModel";
28
29let morkDataModel = new MorkDataModel();
30
31export default class ConversationModel extends BaseModel {
32    async queryMessageDetail(actionData, callback) {
33        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
34        var resultColumns = this.buildResultColumns();
35        let condition = this.buildQueryCondition(actionData);
36        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
37        dataAbilityHelper.query(managerUri, resultColumns, condition).then(resultSet => {
38            let resultList = [];
39            if( !resultSet.goToFirstRow() ) {
40                callback(this.encapsulateReturnResult(common.int.SUCCESS, resultList));
41                return;
42            }
43            if (resultSet != undefined) {
44                do {
45                    let result: LooseObject = {};
46                    this.dealBaseColumnsData(result, resultSet);
47                    result.operatorServiceNumber = resultSet.getString(resultSet.getColumnIndex("operator_service_number"));
48                    result.msgCode = resultSet.getString(resultSet.getColumnIndex("msg_code"));
49                    result.isLock = resultSet.getString(resultSet.getColumnIndex("is_lock"));
50                    result.isRead = resultSet.getString(resultSet.getColumnIndex("is_read"));
51                    result.isCollect = resultSet.getString(resultSet.getColumnIndex("is_collect"));
52                    result.sessionType = resultSet.getString(resultSet.getColumnIndex("session_type"));
53                    result.retryNumber = resultSet.getString(resultSet.getColumnIndex("retry_number"));
54                    result.isSubsection = resultSet.getString(resultSet.getColumnIndex("is_subsection"));
55                    result.sessionId = resultSet.getString(resultSet.getColumnIndex("session_id"));
56                    result.groupId = resultSet.getString(resultSet.getColumnIndex("group_id"));
57                    result.isSender = resultSet.getString(resultSet.getColumnIndex("is_sender"));
58                    result.isSendReport = resultSet.getString(resultSet.getColumnIndex("is_send_report"));
59                    resultList.push(result);
60                } while (resultSet.goToNextRow())
61            }
62            callback(this.encapsulateReturnResult(common.int.SUCCESS, resultList));
63        }).catch(error => {
64            HiLog.e(TAG, "queryMessageDetail, error: " + JSON.stringify(error.message));
65            callback(this.encapsulateReturnCode(common.int.FAILURE));
66        });
67    }
68
69    buildQueryCondition(actionData) {
70        let condition = new dataAbility.DataAbilityPredicates();
71        if (actionData.isDraft != null && actionData.isDraft) {
72            condition.equalTo(mmsTable.messageInfo.groupId, actionData.groupId);
73            condition.equalTo(mmsTable.messageInfo.msgState, actionData.sendStatus);
74        }
75        if (actionData.threadId != null) {
76            let sessionId = actionData.threadId + common.string.EMPTY_STR;
77            condition.equalTo(mmsTable.messageInfo.sessionId, sessionId);
78        }
79        if (actionData.threadIds != null && actionData.threadIds.length > 0) {
80            let sessionIds = this.groupIdToString(actionData.threadIds);
81            condition.in(mmsTable.messageInfo.sessionId, sessionIds);
82        }
83        if (actionData.msgIds != null && actionData.msgIds.length != 0) {
84            condition.in(mmsTable.messageInfo.msgId, actionData.msgIds);
85        }
86        if (actionData.hasLock != null) {
87            condition.equalTo(mmsTable.messageInfo.isLock, actionData.hasLock);
88        }
89        if (actionData.hasRead != null) {
90            condition.equalTo(mmsTable.messageInfo.isRead, actionData.hasRead);
91        }
92        return condition;
93    }
94
95    buildBaseColumns() {
96        var resultColumns = [
97            mmsTable.messageInfo.msgId,
98            mmsTable.messageInfo.slotId,
99            // Recipient Mobile Number
100            mmsTable.messageInfo.receiverNumber,
101            mmsTable.messageInfo.senderNumber,
102            mmsTable.messageInfo.startTime,
103            mmsTable.messageInfo.endTime,
104            mmsTable.messageInfo.msgType,
105            // sms = 0,mms,
106            mmsTable.messageInfo.smsType,
107            // 0: normal; 1: notification
108            mmsTable.messageInfo.msgTitle,
109            mmsTable.messageInfo.msgContent,
110            mmsTable.messageInfo.msgState
111        ];
112        return resultColumns;
113    }
114
115    buildResultColumns() {
116        let basicColumns = this.buildBaseColumns();
117        var resultColumns = [
118            mmsTable.messageInfo.operatorServiceNumber,
119            mmsTable.messageInfo.msgCode,
120            mmsTable.messageInfo.isLock,
121            mmsTable.messageInfo.isRead,
122            mmsTable.messageInfo.isCollect,
123            mmsTable.messageInfo.sessionType,
124            // 0: common; 1: broadcast; 2: group-send
125            mmsTable.messageInfo.retryNumber,
126            // Number of resending times
127            mmsTable.messageInfo.isSubsection,
128            mmsTable.messageInfo.sessionId,
129            mmsTable.messageInfo.groupId,
130            mmsTable.messageInfo.isSender,
131            mmsTable.messageInfo.isSendReport,
132        ];
133        return basicColumns.concat(resultColumns);
134    }
135
136    async searchSmsMessageByContent(actionData, callback) {
137        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
138        var resultColumns = this.buildSearchResultColumns();
139        let condition = new dataAbility.DataAbilityPredicates();
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        dataAbilityHelper.query(managerUri, resultColumns, condition).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) {
192        HiLog.i(TAG, "insertMessageDetail, start")
193        //TODO
194        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
195        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
196        dataAbilityHelper.insert(managerUri, actionData.stringValue).then(data => {
197            callback(this.encapsulateReturnResult(common.int.SUCCESS, data));
198        }).catch(error => {
199            HiLog.e(TAG, "insertMessageDetail, fail: " + JSON.stringify(error.message));
200            callback(this.encapsulateReturnCode(common.int.FAILURE));
201        });
202    }
203
204    async updateLock(actionData, callback) {
205        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
206        var groupIds = this.groupIdToString(actionData.groupIds);
207        var condition = new dataAbility.DataAbilityPredicates();
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        dataAbilityHelper.update(managerUri, stringValue, condition).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) {
230        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
231        var groupIds = this.groupIdToString(actionData.groupIds);
232        var condition = new dataAbility.DataAbilityPredicates();
233        condition.in(mmsTable.messageInfo.groupId, groupIds);
234        var stringValue = {
235            "is_collect": actionData.hasCollect,
236        };
237        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
238        dataAbilityHelper.update(managerUri, stringValue, condition).then((data) => {
239            callback(this.encapsulateReturnCode(common.int.SUCCESS));
240        }).catch((err) => {
241            HiLog.e(TAG, "updateCollect, err: " + JSON.stringify(err.message));
242            callback(this.encapsulateReturnCode(common.int.FAILURE));
243        });
244    }
245
246    async deleteMessageByIds(actionData) {
247        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
248        var msgIds = actionData.msgIds;
249        let condition = new dataAbility.DataAbilityPredicates();
250        condition.in(mmsTable.messageInfo.msgId, msgIds);
251        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
252        dataAbilityHelper.delete(managerUri, condition);
253    }
254
255    async deleteMessageByGroupIds(actionData) {
256        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
257        var groupIds = this.groupIdToString(actionData.groupIds);
258        let condition = new dataAbility.DataAbilityPredicates();
259        condition.in(mmsTable.messageInfo.groupId, groupIds);
260        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
261        dataAbilityHelper.delete(managerUri, condition).then((data) => {
262//            callback(this.encapsulateReturnCode(common.int.SUCCESS));
263        }).catch((err) => {
264            HiLog.e(TAG, "deleteMessageByGroupIds, err: " + JSON.stringify(err.message));
265//            callback(this.encapsulateReturnCode(common.int.FAILURE));
266        });
267    }
268
269    async deleteMessageBySessionIds(actionData) {
270        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
271        let threadIds = [];
272        for (let id of actionData.threadIds) {
273            let threadId = id + common.string.EMPTY_STR;
274            threadIds.push(threadId);
275        }
276        let condition = new dataAbility.DataAbilityPredicates();
277        condition.in(mmsTable.messageInfo.sessionId, threadIds);
278        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
279        dataAbilityHelper.delete(managerUri, condition).then((data) => {
280//            callback(this.encapsulateReturnCode(common.int.SUCCESS));
281        }).catch((err) => {
282            HiLog.e(TAG, "deleteMessageBySessionIds, err: " + JSON.stringify(err.message));
283//            callback(this.encapsulateReturnCode(common.int.FAILURE));
284        });
285    }
286
287    async deleteMessageBySessionIdsAndLock(actionData) {
288        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
289        let threadIds = this.groupIdToString(actionData.threadIds);
290        let condition = new dataAbility.DataAbilityPredicates();
291        condition.equalTo(mmsTable.messageInfo.isLock, actionData.hasLock);
292        condition.in(mmsTable.messageInfo.sessionId, threadIds);
293        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
294        dataAbilityHelper.delete(managerUri, condition).then((data) => {
295//            callback(this.encapsulateReturnCode(common.int.SUCCESS));
296        }).catch((err) => {
297            HiLog.e(TAG, "deleteMessageBySessionIdsAndLock, err: " + JSON.stringify(err.message));
298//            callback(this.encapsulateReturnCode(common.int.FAILURE));
299        });
300    }
301
302    async updateById(actionData, callback) {
303        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
304        var msgId = actionData.msgId;
305        let condition = new dataAbility.DataAbilityPredicates();
306        condition.equalTo(mmsTable.messageInfo.msgId, msgId);
307        var stringValue = {
308            "msg_state": actionData.sendStatus,
309        };
310        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
311        dataAbilityHelper.update(managerUri, stringValue, condition).then((data) => {
312            HiLog.i(TAG, "updateById, end");
313            callback(this.encapsulateReturnCode(common.int.SUCCESS));
314        }).catch((err) => {
315            HiLog.e(TAG, "updateById, err: " + JSON.stringify(err.message));
316            callback(this.encapsulateReturnCode(common.int.FAILURE));
317        });
318    }
319
320    async markAllAsRead(actionData) {
321        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
322        let threadIds = [];
323        for (let id of actionData.threadIds) {
324            let threadId = id + common.string.EMPTY_STR;
325            threadIds.push(threadId);
326        }
327        let condition = new dataAbility.DataAbilityPredicates();
328        condition.in(mmsTable.messageInfo.sessionId, threadIds);
329        var stringValue = {
330            "is_read": actionData.hasRead
331        };
332        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
333        dataAbilityHelper.update(managerUri, stringValue, condition).then((data) => {
334//            callback(this.encapsulateReturnCode(common.int.SUCCESS));
335        }).catch((err) => {
336            HiLog.e(TAG, "markAllAsRead, err: " + JSON.stringify(err.message));
337//            callback(this.encapsulateReturnCode(common.int.FAILURE));
338        });
339    }
340
341    async markAllToRead(actionData) {
342        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
343        let condition = new dataAbility.DataAbilityPredicates();
344        condition.equalTo(mmsTable.messageInfo.isRead, 0);
345        condition.equalTo(mmsTable.messageInfo.smsType, actionData.smsType);
346        var stringValue = {
347            "is_read": actionData.hasRead
348        };
349        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
350        dataAbilityHelper.update(managerUri, stringValue, condition).then((data) => {
351//            callback(this.encapsulateReturnCode(common.int.SUCCESS));
352        }).catch((err) => {
353            HiLog.e(TAG, "markAllToRead, err: " + JSON.stringify(err.message));
354//            callback(this.encapsulateReturnCode(common.int.FAILURE));
355        });
356    }
357
358    async queryMaxGroupId(actionData, callback) {
359        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
360        let resultColumns = [
361            "maxGroupId"
362        ];
363        let condition = new dataAbility.DataAbilityPredicates();
364        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_MAX_GROUP;
365        dataAbilityHelper.query(managerUri, resultColumns, condition, (err, resultSet) => {
366            HiLog.i(TAG, "queryMaxGroupId, query callback");
367            let result: LooseObject = {};
368            if (resultSet != undefined) {
369                if (resultSet.goToLastRow()) {
370                    result.maxGroupId = resultSet.getString(0);
371                    HiLog.d(TAG, "queryMaxGroupId, maxGroupId=" + result.maxGroupId);
372                }
373            }
374            callback(this.encapsulateReturnResult(common.int.SUCCESS, result));
375        });
376    }
377
378    saveImage(actionData, callback) {
379        var savedImageInfo = morkDataModel.saveImage();
380        callback(this.encapsulateReturnResult(common.int.SUCCESS, savedImageInfo));
381    }
382
383    gotoShare(actionData, callback) {
384        callback(this.encapsulateReturnCode(common.int.SUCCESS));
385    }
386
387    queryFromGallery(actionData, callback) {
388        var pictureListFromGallery = morkDataModel.queryFromGallery();
389        callback(this.encapsulateReturnResult(common.int.SUCCESS, pictureListFromGallery));
390    }
391
392    dealContractsTransmit(actionData, callback) {
393        callback(this.encapsulateReturnCode(common.int.SUCCESS));
394    }
395
396    async queryMessageThirty(actionData, callback) {
397        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
398        let timestamp = new Date().getTime();
399        let lastTime = timestamp - 2592000000;
400        let resultColumns = [
401            mmsTable.messageInfo.msgId,
402            mmsTable.messageInfo.sessionId
403        ];
404        let condition = new dataAbility.DataAbilityPredicates();
405        condition.lessThan(mmsTable.messageInfo.endTime, lastTime);
406        condition.equalTo(mmsTable.messageInfo.smsType, actionData.numberType);
407        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
408        dataAbilityHelper.query(managerUri, resultColumns, condition).then((resultSet) => {
409            let mmsList = [];
410            if (resultSet != undefined) {
411                while (resultSet.goToNextRow()) {
412                    let item: LooseObject = {};
413                    item.msgId = resultSet.getString(0);
414                    item.sessionId = resultSet.getString(1);
415                    mmsList.push(item);
416                }
417            }
418            callback(this.encapsulateReturnResult(common.int.SUCCESS, mmsList));
419        }).catch((err) => {
420            HiLog.e(TAG, "queryMessageThirty, err: " + JSON.stringify(err.message));
421            callback(this.encapsulateReturnCode(common.int.FAILURE));
422        });
423    }
424
425    async statisticsUnreadNotify(actionData, callback) {
426        let mmsContext;
427        if (actionData.mmsContext) {
428            mmsContext = actionData.mmsContext;
429        } else {
430            mmsContext = globalThis.mmsContext;
431        }
432        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(mmsContext, common.string.URI_MESSAGE_LOG);
433        let condition = new dataAbility.DataAbilityPredicates();
434        condition.equalTo(mmsTable.messageInfo.isRead, 0);
435        condition.equalTo(mmsTable.messageInfo.smsType, 1);
436        let resultColumns = [
437            mmsTable.messageInfo.msgId
438        ];
439        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
440        dataAbilityHelper.query(managerUri, resultColumns, condition).then((resultSet) => {
441            let count = 0;
442            if (resultSet != undefined) {
443                count = resultSet.rowCount;
444            }
445            callback(this.encapsulateReturnResult(common.int.SUCCESS, count));
446        }).catch((err) => {
447            HiLog.e(TAG, "statisticsUnreadNotify, err: " + JSON.stringify(err.message));
448            callback(this.encapsulateReturnCode(common.int.FAILURE));
449        });
450    }
451
452    async searchMmsPartByContent(actionData, callback) {
453        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
454        let resultColumns = this.buildMmsPartResultColumns();
455        let condition = new dataAbility.DataAbilityPredicates();
456        condition.like(mmsTable.mmsPart.content, "%" + actionData.content + "%");
457        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_MMS_PART;
458        dataAbilityHelper.query(managerUri, resultColumns, condition).then(resultSet => {
459            let resultList = this.dealMmsPartResult(resultSet);
460            callback(this.encapsulateReturnResult(common.int.SUCCESS, resultList));
461        }).catch(error => {
462            HiLog.e(TAG, "searchMmsPartByContent, error: " + JSON.stringify(error.message));
463            callback(this.encapsulateReturnCode(common.int.FAILURE));
464        });
465    }
466
467    async queryMmsPart(actionData, callback) {
468        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
469        var resultColumns = this.buildMmsPartResultColumns();
470        let condition = new dataAbility.DataAbilityPredicates();
471        condition.in(mmsTable.mmsPart.msgId, actionData.msgIds);
472        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_MMS_PART;
473        dataAbilityHelper.query(managerUri, resultColumns, condition).then(resultSet => {
474            let resultList = this.dealMmsPartResult(resultSet);
475            callback(this.encapsulateReturnResult(common.int.SUCCESS, resultList));
476        }).catch(error => {
477            HiLog.e(TAG, "queryMmsPart, error: " + JSON.stringify(error.message));
478            callback(this.encapsulateReturnCode(common.int.FAILURE));
479        });
480    }
481
482    buildMmsPartResultColumns() {
483        let resultColumns = [
484            mmsTable.mmsPart.msgId,
485            mmsTable.mmsPart.groupId,
486            mmsTable.mmsPart.type,
487            mmsTable.mmsPart.locationPath,
488            mmsTable.mmsPart.content,
489            mmsTable.mmsPart.recordingTime,
490            mmsTable.mmsPart.partSize,
491            mmsTable.mmsPart.state
492        ];
493        return resultColumns;
494    }
495
496    dealMmsPartResult(resultSet) {
497        let resultList = [];
498        if (resultSet != undefined) {
499            while (resultSet.goToNextRow()) {
500                let result: LooseObject = {};
501                result.msgId = resultSet.getString(0);
502                result.groupId = resultSet.getString(1);
503                result.type = resultSet.getString(2);
504                result.locationPath = resultSet.getString(3);
505                result.content = resultSet.getString(4);
506                result.recordingTime = resultSet.getString(5);
507                result.fileSize = resultSet.getString(6);
508                result.messageType = resultSet.getString(7);
509                resultList.push(result);
510            }
511        }
512        return resultList;
513    }
514
515    async deleteMmsPartByGroupIds(actionData) {
516        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
517        let groupIds = this.groupIdToString(actionData.groupIds);
518        let condition = new dataAbility.DataAbilityPredicates();
519        condition.in(mmsTable.mmsPart.groupId, groupIds);
520        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_MMS_PART;
521        dataAbilityHelper.delete(managerUri, condition).then((data) => {
522//            callback(this.encapsulateReturnCode(common.int.SUCCESS));
523        }).catch((err) => {
524            HiLog.e(TAG, "deleteMmsPartByGroupIds, err: " + JSON.stringify(err.message));
525//            callback(this.encapsulateReturnCode(common.int.FAILURE));
526        });
527    }
528
529    async batchInsertMmsPart(actionData, callback) {
530        for (let stringValue of actionData.batchMmsParts) {
531            this.insertMmsPart(actionData, stringValue, res => {
532            });
533        }
534        callback(this.encapsulateReturnCode(common.int.SUCCESS));
535    }
536
537    async insertMmsPart(actionData, stringValue, callback) {
538        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
539        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_MMS_PART;
540        dataAbilityHelper.insert(managerUri, stringValue).then(data => {
541            callback(this.encapsulateReturnResult(data, common.int.SUCCESS));
542        }).catch(error => {
543            HiLog.e(TAG, "insertMmsPart, error: " + JSON.stringify(error.message));
544            callback(this.encapsulateReturnCode(common.int.FAILURE));
545        });
546    }
547
548    async queryMessageLockBySessionId(actionData, callback) {
549        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
550        var resultColumns = [mmsTable.messageInfo.isLock];
551        let condition = new dataAbility.DataAbilityPredicates();
552        let sessionId = actionData.threadId + common.string.EMPTY_STR;
553        condition.equalTo(mmsTable.messageInfo.sessionId, sessionId);
554        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
555        dataAbilityHelper.query(managerUri, resultColumns, condition).then(resultSet => {
556            let lockStatus = [];
557            if (resultSet != undefined) {
558                while (resultSet.goToNextRow()) {
559                    let result: LooseObject = {};
560                    result.isLock = resultSet.getString(0);
561                    lockStatus.push(result);
562                }
563            }
564            callback(this.encapsulateReturnResult(common.int.SUCCESS, lockStatus));
565        }).catch(error => {
566            HiLog.e(TAG, "queryMessageLockBySessionId, error: " + JSON.stringify(error.message));
567            callback(this.encapsulateReturnCode(common.int.FAILURE));
568        });
569    }
570
571    async queryGroupIdBySessionId(actionData, callback) {
572        let dataAbilityHelper = await featureAbility.acquireDataAbilityHelper(globalThis.mmsContext, common.string.URI_MESSAGE_LOG);
573        var resultColumns = [mmsTable.messageInfo.groupId];
574        let condition = new dataAbility.DataAbilityPredicates();
575        let threadIds = this.groupIdToString(actionData.threadIds);
576        condition.in(mmsTable.messageInfo.sessionId, threadIds);
577        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
578        dataAbilityHelper.query(managerUri, resultColumns, condition).then(resultSet => {
579            let groupIds = [];
580            if (resultSet != undefined) {
581                resultSet.goToFirstRow();
582                do {
583                    let groupId = resultSet.getString(0);
584                    groupIds.push(groupId);
585                } while (resultSet.goToNextRow());
586            }
587            callback(this.encapsulateReturnResult(common.int.SUCCESS, groupIds));
588        }).catch(error => {
589            HiLog.e(TAG, "queryGroupIdBySessionId, error: " + JSON.stringify(error.message));
590            callback(this.encapsulateReturnCode(common.int.FAILURE));
591        });
592    }
593}