初始提交
This commit is contained in:
391
bin/repository/PersonRepository.dart
Normal file
391
bin/repository/PersonRepository.dart
Normal file
@@ -0,0 +1,391 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user