feat(数据库): 扩展数据库查询操作符并优化联系人分组逻辑
- 在 DatabaseService 中添加新的查询操作符(notEqual, aboveOrEqual, belowOrEqual, contains, anyOf, notIn, between) - 修改 createContractList 方法以支持未分组联系人的查询 - 添加调试日志用于跟踪缓存结果和真实分组
This commit is contained in:
@@ -238,27 +238,53 @@ export class DatabaseService<T> {
|
||||
async findWhereMultiple(
|
||||
conditions: {
|
||||
field: keyof T;
|
||||
operator: "equals" | "above" | "below" | "startsWith";
|
||||
operator:
|
||||
| "equals"
|
||||
| "notEqual"
|
||||
| "above"
|
||||
| "below"
|
||||
| "aboveOrEqual"
|
||||
| "belowOrEqual"
|
||||
| "startsWith"
|
||||
| "anyOf"
|
||||
| "notIn"
|
||||
| "between"
|
||||
| "contains";
|
||||
value: any;
|
||||
value2?: any; // 用于 between 操作符
|
||||
}[],
|
||||
): Promise<T[]> {
|
||||
let collection = this.table.toCollection();
|
||||
|
||||
for (const condition of conditions) {
|
||||
const { field, operator, value } = condition;
|
||||
const { field, operator, value, value2 } = condition;
|
||||
collection = collection.and(item => {
|
||||
const fieldValue = (item as any)[field];
|
||||
switch (operator) {
|
||||
case "equals":
|
||||
return fieldValue === value;
|
||||
case "notEqual":
|
||||
return fieldValue !== value;
|
||||
case "above":
|
||||
return fieldValue > value;
|
||||
case "below":
|
||||
return fieldValue < value;
|
||||
case "aboveOrEqual":
|
||||
return fieldValue >= value;
|
||||
case "belowOrEqual":
|
||||
return fieldValue <= value;
|
||||
case "startsWith":
|
||||
return (
|
||||
typeof fieldValue === "string" && fieldValue.startsWith(value)
|
||||
);
|
||||
case "contains":
|
||||
return typeof fieldValue === "string" && fieldValue.includes(value);
|
||||
case "anyOf":
|
||||
return Array.isArray(value) && value.includes(fieldValue);
|
||||
case "notIn":
|
||||
return Array.isArray(value) && !value.includes(fieldValue);
|
||||
case "between":
|
||||
return fieldValue >= value && fieldValue <= (value2 ?? value);
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user