feat(ops): 增加运维面板及诊断导出功能
- 添加运维面板OpsActivity及对应布局,展示设备状态、网络、MQTT、人脸数据等信息 - 实现诊断包导出工具DiagnosticExporter,支持将设备信息和日志导出到U盘 - 新增设备健康信息获取工具DeviceInfoProvider,提供运行时长、内存和存储信息 - 实现运行时日志写入文件FileLoggingTree,支持按天滚动、切分与过期清理 - 增加日志文件管理LogFileManager,支持列出、读取尾部和清理日志文件 - 丰富MQTT管理器MqttManager,记录连接状态、错误、连接次数等详情并支持手动重连 - 为环境切换引入EnvironmentSwitcher,实现基础地址切换和清空本地人脸库后自动重启 - 扩展ArcFace人脸库接口,支持查询最近更新人脸及按userId精确搜索 - MainActivity增加运维面板入口,管理员列表页右上角双击时间触发打开 - 应用启动时种植FileLoggingTree,确保运行日志同时输出至文件和控制台
This commit is contained in:
@@ -131,6 +131,37 @@ public class FaceApi {
|
||||
return getFaceDao().queryAllByUserName(userName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 按服务端更新时间倒序取最近更新的 N 条人脸记录(运维面板展示)
|
||||
*/
|
||||
public List<FaceEntity> queryRecentUpdatedFaces(int limit) {
|
||||
return getFaceDao().getRecentUpdatedFaces(limit);
|
||||
}
|
||||
|
||||
/**
|
||||
* 库内最大的服务端更新时间戳(无记录返回 null)
|
||||
*/
|
||||
public Long queryMaxFaceUpdateTimestamp() {
|
||||
return getFaceDao().getMaxFaceUpdateTimestamp();
|
||||
}
|
||||
|
||||
/**
|
||||
* 按 userId 精确过滤(运维面板搜索用)
|
||||
*/
|
||||
public List<FaceEntity> queryByUserId(String userId, int limit) {
|
||||
if (TextUtils.isEmpty(userId)) {
|
||||
return new java.util.ArrayList<>();
|
||||
}
|
||||
return getFaceDao().queryByUserId(userId, limit);
|
||||
}
|
||||
|
||||
/**
|
||||
* 按 member 布尔统计人脸数(true-会员,false-非会员)
|
||||
*/
|
||||
public int queryFaceCountByMember(boolean member) {
|
||||
return getFaceDao().getFaceCountByMember(member);
|
||||
}
|
||||
|
||||
public FaceDao getFaceDao() {
|
||||
return FaceDatabase.getInstance(App.getContext()).faceDao();
|
||||
}
|
||||
|
||||
@@ -125,4 +125,28 @@ public interface FaceDao {
|
||||
*/
|
||||
@Query("SELECT COUNT(1) FROM face WHERE user_type = :userType")
|
||||
int getFaceCountByUserType(int userType);
|
||||
|
||||
/**
|
||||
* 按服务端更新时间倒序取最近更新的 N 条人脸记录(运维面板展示)
|
||||
*/
|
||||
@Query("SELECT * FROM face ORDER BY face_update_timestamp DESC LIMIT :limit")
|
||||
List<FaceEntity> getRecentUpdatedFaces(int limit);
|
||||
|
||||
/**
|
||||
* 库内最大的服务端更新时间戳(无记录时返回 null)
|
||||
*/
|
||||
@Query("SELECT MAX(face_update_timestamp) FROM face")
|
||||
Long getMaxFaceUpdateTimestamp();
|
||||
|
||||
/**
|
||||
* 按 userId 精确过滤(运维面板搜索用)
|
||||
*/
|
||||
@Query("SELECT * FROM face WHERE user_id = :userId ORDER BY faceId DESC LIMIT :limit")
|
||||
List<FaceEntity> queryByUserId(String userId, int limit);
|
||||
|
||||
/**
|
||||
* 按 member 布尔统计人脸数(true-会员,false-非会员;比 user_type 更可靠,user_type 存的是服务端 personType 字符串)
|
||||
*/
|
||||
@Query("SELECT COUNT(1) FROM face WHERE member = :member")
|
||||
int getFaceCountByMember(boolean member);
|
||||
}
|
||||
|
||||
@@ -44,4 +44,25 @@ public class SerialApi {
|
||||
serialPortManager.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 串口是否已打开(运维面板展示用)
|
||||
*/
|
||||
public static boolean isOpened() {
|
||||
return serialPort != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 串口设备路径(运维面板展示用)
|
||||
*/
|
||||
public static String getPath() {
|
||||
return path;
|
||||
}
|
||||
|
||||
/**
|
||||
* 串口波特率(运维面板展示用)
|
||||
*/
|
||||
public static int getBaudRate() {
|
||||
return speed;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user