392 lines
13 KiB
Dart
392 lines
13 KiB
Dart
import 'package:EasyDartModule/EasyDartModule.dart';
|
|
|
|
import '../const/Constants.dart';
|
|
import '../model/Person.dart';
|
|
|
|
class PersonRepository {
|
|
// 获取所有人员列表
|
|
Future<List> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<Person?> 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<bool> insertPerson(Person person) async {
|
|
var db = EasyDartModule.dataBase;
|
|
var result = await db.insert('bus_person', person.toJson());
|
|
return true;
|
|
}
|
|
|
|
// 更新人员信息
|
|
Future<String> 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<String> 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<List> 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<String> 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<String> 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<String> 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<String> 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<String> 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;
|
|
}
|
|
}
|