148 lines
3.9 KiB
Dart
148 lines
3.9 KiB
Dart
import 'package:floor/floor.dart';
|
|
|
|
import 'package:pj_supermarket_cloud/common/index.dart';
|
|
|
|
// face
|
|
@dao
|
|
abstract class FaceDao {
|
|
/// 保存一条已完成文件和原生特征校验的人脸记录。
|
|
@insert
|
|
Future<int?> save(FaceEntity entity);
|
|
|
|
@insert
|
|
Future<void> batchSave(List<FaceEntity> entitys);
|
|
|
|
@delete
|
|
Future<void> del(FaceEntity entity);
|
|
|
|
@Query(""" DELETE FROM face """)
|
|
Future<void> delAll();
|
|
|
|
@Query('''
|
|
DELETE FROM face WHERE id = :id
|
|
''')
|
|
Future<void> delById(int id);
|
|
|
|
@Query('''
|
|
DELETE FROM face WHERE userId = :userId
|
|
''')
|
|
Future<void> delByUserId(String userId);
|
|
|
|
@Query('''
|
|
DELETE FROM face WHERE sampleId = :sampleId
|
|
''')
|
|
Future<void> delBySampleId(String sampleId);
|
|
|
|
@delete
|
|
Future<void> batchDel(List<FaceEntity> entitys);
|
|
|
|
@update
|
|
Future<void> edit(FaceEntity entity);
|
|
|
|
@update
|
|
Future<void> batchEdit(List<FaceEntity> entitys);
|
|
|
|
@Query("""
|
|
SELECT DISTINCT COUNT(0) FROM face
|
|
WHERE
|
|
(:userName = '-1' OR userName LIKE '%' || :userName || '%')
|
|
""")
|
|
Future<int?> findCount(String userName);
|
|
|
|
/// 统计已完成质量检测且低于指定阈值的人脸数量,阈值不写入样本以支持即时重分类。
|
|
@Query('''
|
|
SELECT COUNT(0) FROM face
|
|
WHERE qualityStatus = 'detected'
|
|
AND qualityScore IS NOT NULL
|
|
AND qualityScore < :threshold
|
|
AND (:userName = '-1' OR userName LIKE '%' || :userName || '%')
|
|
''')
|
|
Future<int?> findLowQualityCount(String userName, double threshold);
|
|
|
|
/// 分页查询已检测且低于阈值的人脸,结果按本地自增编号稳定排序。
|
|
@Query('''
|
|
SELECT * FROM face
|
|
WHERE qualityStatus = 'detected'
|
|
AND qualityScore IS NOT NULL
|
|
AND qualityScore < :threshold
|
|
AND (:userName = '-1' OR userName LIKE '%' || :userName || '%')
|
|
ORDER BY id ASC
|
|
LIMIT :pageSize OFFSET :offset
|
|
''')
|
|
Future<List<FaceEntity>> findLowQuality(
|
|
String userName,
|
|
double threshold,
|
|
int pageSize,
|
|
int offset,
|
|
);
|
|
|
|
/// 查询全部已检测且低于阈值的人脸,用于一键删除前获取完整服务端删除集合。
|
|
@Query('''
|
|
SELECT * FROM face
|
|
WHERE qualityStatus = 'detected'
|
|
AND qualityScore IS NOT NULL
|
|
AND qualityScore < :threshold
|
|
ORDER BY id ASC
|
|
''')
|
|
Future<List<FaceEntity>> findAllLowQuality(double threshold);
|
|
|
|
/// 统计尚未完成质量检测的历史样本数量。
|
|
@Query("SELECT COUNT(0) FROM face WHERE qualityStatus = 'pending'")
|
|
Future<int?> findPendingQualityCount();
|
|
|
|
/// 统计最近一次质量检测失败的样本数量。
|
|
@Query("SELECT COUNT(0) FROM face WHERE qualityStatus = 'failed'")
|
|
Future<int?> findFailedQualityCount();
|
|
|
|
/// 查询待检测或失败后重试的本地样本,按编号稳定排序。
|
|
@Query("""
|
|
SELECT * FROM face
|
|
WHERE qualityStatus IN ('pending', 'failed')
|
|
ORDER BY id ASC
|
|
""")
|
|
Future<List<FaceEntity>> findQualityAuditCandidates();
|
|
|
|
@Query('''
|
|
SELECT * FROM face WHERE id = :id
|
|
''')
|
|
Future<FaceEntity?> getById(int id);
|
|
|
|
@Query('''
|
|
SELECT * FROM face WHERE sampleId = :sampleId
|
|
''')
|
|
Future<FaceEntity?> findBySampleId(String sampleId);
|
|
|
|
@Query('''
|
|
SELECT * FROM face WHERE userId = :userId
|
|
''')
|
|
Future<List<FaceEntity>?> findByUserId(String userId);
|
|
|
|
@Query('''
|
|
SELECT * FROM face
|
|
WHERE
|
|
(:userName = '-1' OR userName LIKE '%' || :userName || '%')
|
|
LIMIT :pageSize OFFSET :offset
|
|
''')
|
|
Future<List<FaceEntity>> findAll(
|
|
String userName,
|
|
int pageSize,
|
|
int offset,
|
|
);
|
|
|
|
/// 查询本机全部人脸,用于完整部门快照计算集合差异。
|
|
@Query('''
|
|
SELECT * FROM face ORDER BY sampleId ASC
|
|
''')
|
|
Future<List<FaceEntity>> getAll();
|
|
|
|
@Query('''
|
|
SELECT DISTINCT a.deptId FROM face a WHERE a.deptId IS NOT NULL
|
|
''')
|
|
Future<List<String>> findAllUserIds();
|
|
|
|
@Query('''
|
|
SELECT * FROM face WHERE faceModel = '' OR faceModel IS NULL
|
|
''')
|
|
Future<List<FaceEntity>?> getEmptyFaceList();
|
|
}
|