Files
data_manage/bin/repository/PersonRepository.dart
2026-01-20 09:26:55 +08:00

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;
}
}