import 'package:EasyDartModule/EasyDartModule.dart'; import '../const/Constants.dart'; import '../model/Person.dart'; class PersonRepository { // 获取所有人员列表 Future fetchPersonList( Person query, ) async { var db = EasyDartModule.dataBase; SelectorBuilder select = SelectorBuilder(); // 添加查询条件 if (query.id != null) { select.eq('_id', ObjectId.fromHexString(query.id!)); } if (query.tid != null) { select.eq('oid', query.tid); } if (query.level != null) { select.gte('data_level', query.level); } if (query.room_id != null) { select.eq('room_id', query.room_id); } if (query.room_name != null) { select.match('room_name', query.room_name!, caseInsensitive: true); } if (query.bed_id != null) { select.eq('bed_id', query.bed_id); } if (query.bed_ids != null) { List bedIds = query.bed_ids!.split(','); select.oneFrom('bed_id', bedIds); } if (query.bed_name != null) { select.match('bed_name', query.bed_name!, caseInsensitive: true); } if (query.check_in_start_time != null) { select.gte('check_in_start_time', query.check_in_start_time); } if (query.check_in_end_time != null) { select.lte('check_in_end_time', query.check_in_end_time); } if (query.contact_name != null) { select.match('contact_name', query.contact_name!, caseInsensitive: true); } if (query.contact_relationship != null) { select.eq('contact_relationship', query.contact_relationship); } if (query.contact_phone != null) { select.eq('contact_phone', query.contact_phone); } if (query.person_name != null) { select.match('person_name', query.person_name!, caseInsensitive: false); } if (query.gender != null) { List genders = query.gender!.split(","); if (genders.length == 1) { select.eq('gender', genders.first); } // select.eq('gender', query.gender); } if (query.ethnicity != null) { select.eq('ethnicity', query.ethnicity); } if (query.person_type_id != null) { List bedIds = query.person_type_id!.split(','); select.oneFrom('person_type_id', bedIds); // select.eq('person_type_id', query.person_type_id); } if (query.person_type_name != null) { select.match('person_type_name', query.person_type_name!, caseInsensitive: true); } if (query.id_card_number != null) { select.eq('id_card_number', query.id_card_number); } if (query.phone_number != null) { select.eq('phone_number', query.phone_number); } if (query.service_level != null) { select.eq('service_level', query.service_level); } if (query.health_info != null) { select.eq('health_info', query.health_info); } if (query.height != null) { select.eq('height', query.height); } if (query.tid != null) { select.eq('oid', query.tid); } if (query.query_gender != null) { List genders = query.query_gender!.split(","); if (genders.length == 1) { select.eq('gender', genders.first); } } if (query.start_time != null && query.start_time!.isNotEmpty && query.end_time != null && query.end_time!.isNotEmpty) { SelectorBuilder select1 = SelectorBuilder(); SelectorBuilder select2 = SelectorBuilder(); select1.gte('check_in_start_time', int.parse(query.start_time!)); select2.lte('check_in_start_time', int.parse(query.end_time!)); select1.and(select2); SelectorBuilder select3 = SelectorBuilder(); SelectorBuilder select4 = SelectorBuilder(); select3.gte('check_in_end_time', int.parse(query.start_time!)); select4.lte('check_in_end_time', int.parse(query.end_time!)); select3.and(select4); select1.or(select3); SelectorBuilder select5 = SelectorBuilder(); SelectorBuilder select6 = SelectorBuilder(); select5.lte('check_in_start_time', int.parse(query.start_time!)); select6.gte('check_in_end_time', int.parse(query.end_time!)); select5.and(select6); SelectorBuilder select7 = SelectorBuilder(); SelectorBuilder select8 = SelectorBuilder(); select7.gte('check_in_end_time', int.parse(query.start_time!)); select8.lte('check_in_end_time', int.parse(query.end_time!)); select7.and(select8); select5.and(select7); select1.or(select5); select.and(select1); } if (query.status != null) { List status = query.status!.split(","); if (status.length == 1) { if (status.first == "1") { select.nin('bed_id', [null, '']); } else if (status.first == "2") { select.oneFrom('bed_id', [null, '']); } } } if (query.query_person_type != null) { List personTypes = query.query_person_type!.split(','); select.oneFrom('person_type_id', personTypes); } // 设置分页 select.eq('deleted', 0); select .skip(((int.tryParse(query.page ?? Constants.default_page.toString()) ?? Constants.default_page) - 1) * (int.tryParse(query.limit ?? Constants.default_limit.toString()) ?? Constants.default_limit)) .limit( int.tryParse(query.limit ?? Constants.default_limit.toString()) ?? Constants.default_limit); // 设置排序 select.sortBy("created_at"); // 执行查询 var result = await db.query( 'bus_person', condition: select, ); return result.isEmpty ? [] : result; } // 获取单个人员信息 Future fetchPersonById(String personId) async { var db = EasyDartModule.dataBase; var condition = {'_id': personId}; var result = await db.query( 'bus_person', condition: condition, ); if (result.isNotEmpty) { return Person.fromJson(result.first); } return null; } // 插入人员 Future insertPerson(Person person) async { var db = EasyDartModule.dataBase; var result = await db.insert('bus_person', person.toJson()); return true; } // 更新人员信息 Future updatePerson(String personId, Person updatedPerson) async { String message = ""; var db = EasyDartModule.dataBase; var condition = {'_id': ObjectId.fromHexString(personId)}; var update = { '\$set': { 'room_id': updatedPerson.room_id, 'room_name': updatedPerson.room_name, 'bed_id': updatedPerson.bed_id, 'bed_name': updatedPerson.bed_name, }, }; try { var result = await db.update('bus_person', update, condition); return ""; } catch (e) { print("Error updating person: $e"); return "更新失败: $e"; } } // 删除人员 (逻辑删除) Future deletePerson(String personId) async { String message = ""; var db = EasyDartModule.dataBase; var condition = {'person_id': personId}; try { var result = await db.update('bus_person', {'deleted': 1}, condition); return ""; } catch (e) { print("Error deleting person: $e"); return "删除失败: $e"; } } Future fetchPersonsByOrganizationId(String oid) async { var db = EasyDartModule.dataBase; SelectorBuilder select = SelectorBuilder(); // 添加查询条件 select.eq('oid', oid); select.eq('deleted', 0); // 设置排序 select.sortBy("created_at"); // 执行查询 var result = await db.query('bus_person', condition: select); // 如果查询结果为空,返回空列表 if (result.isEmpty) { return []; } // 返回查询结果 return result; } getPersonCount(Person query) async { var db = EasyDartModule.dataBase; SelectorBuilder select = SelectorBuilder(); // 添加查询条件 if (query.id != null) { select.eq('_id', ObjectId.fromHexString(query.id!)); } if (query.tid != null) { select.eq('oid', query.tid); } if (query.level != null) { select.gte('data_level', query.level); } if (query.room_id != null) { select.eq('room_id', query.room_id); } if (query.room_name != null) { select.match('room_name', query.room_name!, caseInsensitive: true); } if (query.bed_id != null) { select.eq('bed_id', query.bed_id); } if (query.bed_name != null) { select.match('bed_name', query.bed_name!, caseInsensitive: true); } if (query.check_in_start_time != null) { select.gte('check_in_start_time', query.check_in_start_time); } if (query.check_in_end_time != null) { select.lte('check_in_end_time', query.check_in_end_time); } if (query.contact_name != null) { select.match('contact_name', query.contact_name!, caseInsensitive: true); } if (query.contact_relationship != null) { select.eq('contact_relationship', query.contact_relationship); } if (query.contact_phone != null) { select.eq('contact_phone', query.contact_phone); } if (query.person_name != null) { select.match('person_name', query.person_name!, caseInsensitive: true); } if (query.gender != null) { List genders = query.gender!.split(","); if (genders.length == 1) { select.eq('gender', genders.first); } // select.eq('gender', query.gender); } if (query.ethnicity != null) { select.eq('ethnicity', query.ethnicity); } if (query.person_type_id != null) { List bedIds = query.person_type_id!.split(','); select.oneFrom('person_type_id', bedIds); // select.eq('person_type_id', query.person_type_id); } if (query.person_type_name != null) { select.match('person_type_name', query.person_type_name!, caseInsensitive: true); } if (query.id_card_number != null) { select.eq('id_card_number', query.id_card_number); } if (query.phone_number != null) { select.eq('phone_number', query.phone_number); } if (query.service_level != null) { select.eq('service_level', query.service_level); } if (query.health_info != null) { select.eq('health_info', query.health_info); } if (query.height != null) { select.eq('height', query.height); } if (query.tid != null) { select.eq('oid', query.tid); } if (query.query_gender != null) { List genders = query.query_gender!.split(","); if (genders.length == 1) { select.eq('gender', genders.first); } } if (query.start_time != null && query.start_time!.isNotEmpty && query.end_time != null && query.end_time!.isNotEmpty) { SelectorBuilder select1 = SelectorBuilder(); SelectorBuilder select2 = SelectorBuilder(); select1.gte('check_in_start_time', int.parse(query.start_time!)); select2.lte('check_in_start_time', int.parse(query.end_time!)); select1.and(select2); SelectorBuilder select3 = SelectorBuilder(); SelectorBuilder select4 = SelectorBuilder(); select3.gte('check_in_end_time', int.parse(query.start_time!)); select4.lte('check_in_end_time', int.parse(query.end_time!)); select3.and(select4); select1.or(select3); SelectorBuilder select5 = SelectorBuilder(); SelectorBuilder select6 = SelectorBuilder(); select5.lte('check_in_start_time', int.parse(query.start_time!)); select6.gte('check_in_end_time', int.parse(query.end_time!)); select5.and(select6); SelectorBuilder select7 = SelectorBuilder(); SelectorBuilder select8 = SelectorBuilder(); select7.gte('check_in_end_time', int.parse(query.start_time!)); select8.lte('check_in_end_time', int.parse(query.end_time!)); select7.and(select8); select5.and(select7); select1.or(select5); select.and(select1); } if (query.status != null) { List status = query.status!.split(","); if (status.length == 1) { if (status.first == "1") { select.nin('bed_id', [null, '']); } else if (status.first == "2") { select.oneFrom('bed_id', [null, '']); } } } if (query.query_person_type != null) { List personTypes = query.query_person_type!.split(','); select.oneFrom('person_type_id', personTypes); } // 设置分页 select.eq('deleted', 0); // 执行查询,获取符合条件的记录数量 var result = await db.query( 'bus_person', condition: select, // 查询条件 ); // 如果查询结果为空,返回 0 if (result.isEmpty) { return 0; } // 返回计数结果 return result.length; } }