feat(api): 新增V2版本接口支持并集成至网络请求客户端
- 新增 ApiServiceV2 接口,支持人脸缓存、增量数据、设备配置等接口 - ApiClient 中新增 apiServiceV2 对象,复用 Retrofit 实例,调整超时时间至60秒 - DeviceInitActivity 改用 netViewModelV2 进行人脸缓存全量拉取及设备配置读取 - BaseActivity 新增对人脸增量同步接口调用,调用成功后刷新本地识别缓存 - BaseActivity 新增清空本地人脸库功能,异步清理数据库并刷新识别缓存 - FaceApi 增加清空本地人脸库接口,重写数据库操作逻辑 - 升级 lib_face 模块 Room 数据库版本,新增字段以支持多标识人脸实体扩展 - FaceEntity 实体扩展会员编号、用户ID、人脸ID、会员标识、更新时间等字段 - FaceDao 新增按人脸ID查询和删除接口,支持多重人脸数据操作 - 优化网络层 OkHttpClient 配置,简化拦截器写法及日志级别判断 - 升级 lib_face 模块支持 arm64-v8a 架构,增强兼容性 - 规范模块间依赖关系,统一版本管理及包路径声明 - 完善 CLAUDE.md 文档,补充项目架构、模块划分与开发流程说明
This commit is contained in:
@@ -21,6 +21,28 @@ data class DeviceConfig(
|
||||
var arcsoftActiveKey: String? = null
|
||||
)
|
||||
|
||||
/**
|
||||
* V2 设备配置(人脸 5.0 体系)
|
||||
*/
|
||||
data class DeviceConfigV2(
|
||||
/** 业务服务器 BASE URL */
|
||||
val appPackageUrl: String? = null,
|
||||
/** 食堂/餐厅名称 */
|
||||
val canteenName: String? = null,
|
||||
/** 食堂/餐厅 ID(后续所有业务 API 的 restId) */
|
||||
val canteenId: String? = null,
|
||||
/** 虹软人脸 SDK App ID */
|
||||
val arcsoftAppId: String? = null,
|
||||
/** 虹软人脸 SDK Key */
|
||||
val arcsoftSdkKey: String? = null,
|
||||
/** 虹软人脸 SDK Active Key */
|
||||
val arcsoftActiveKey: String? = null,
|
||||
/** MQTT 客户端服务器 IP */
|
||||
val clientServerIp: String? = null,
|
||||
/** 智慧食堂服务器 IP(MQTT 端口) */
|
||||
val zhstServerIp: String? = null
|
||||
)
|
||||
|
||||
data class CodeMsg(
|
||||
val code: String? = "",
|
||||
val msg: String? = ""
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.sw.platecabinet.model.request
|
||||
|
||||
data class FeatureBody(
|
||||
val url:String,
|
||||
val featureChar:String
|
||||
)
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.sw.platecabinet.model.request
|
||||
|
||||
/**
|
||||
* 通用 ID 请求体
|
||||
*
|
||||
* 用于按用户 id(餐盘号)查询或上报类的接口,例如:
|
||||
* - P-09a 取餐盘(/neglect/pickup/plate-pickup)
|
||||
*
|
||||
* @property id 用户 id(餐盘号 = userId)
|
||||
*/
|
||||
data class IdDTO(
|
||||
val id: Long
|
||||
)
|
||||
@@ -2,7 +2,6 @@ package com.sw.platecabinet.model.response
|
||||
|
||||
|
||||
import android.os.Parcelable
|
||||
import com.google.gson.annotations.SerializedName
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
/**
|
||||
@@ -10,21 +9,20 @@ import kotlinx.parcelize.Parcelize
|
||||
*/
|
||||
@Parcelize
|
||||
data class UserFaceModel(
|
||||
// @SerializedName("faceFeature")
|
||||
// val faceFeature: String? = "",
|
||||
// @SerializedName("faceFeatureString")
|
||||
// val faceFeatureString: String? = "",
|
||||
// @SerializedName("faceType")
|
||||
// val faceType: String? = "",
|
||||
// @SerializedName("userFaceId")
|
||||
// val userFaceId: String? = "",
|
||||
// @SerializedName("userId")
|
||||
// val userId: String? = "",
|
||||
// @SerializedName("updateTimeStamp")
|
||||
// val updateTimeStamp: Long = 0,
|
||||
|
||||
val userId: String? = "",
|
||||
val faceFeatureStr: String? = "",
|
||||
val faceUpdateTimestamp:Long?=null,
|
||||
val faceDeleted: Boolean?=false
|
||||
val faceUpdateTimestamp: Long? = null,
|
||||
/**
|
||||
* 人脸删除标识
|
||||
*/
|
||||
val faceDeleted: Boolean? = false,
|
||||
/**
|
||||
* 会员编号
|
||||
*/
|
||||
val cardNo: String? = null,
|
||||
|
||||
/**
|
||||
* 是否会员
|
||||
*/
|
||||
val member: Boolean? = null
|
||||
) : Parcelable
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.sw.platecabinet.model.response
|
||||
|
||||
|
||||
import android.os.Parcelable
|
||||
import com.google.gson.annotations.SerializedName
|
||||
import com.sw.plate.utils.arcface.facedb.entity.FaceEntity
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
/**
|
||||
* 用户人脸信息
|
||||
*/
|
||||
@Parcelize
|
||||
data class UserFaceModelV2(
|
||||
val userFaceId: String? = null,
|
||||
val userId: String? = null,
|
||||
val faceFeature: String? = null,
|
||||
val faceFeatureStr: String? = null,
|
||||
val faceFeatureString: String? = null,
|
||||
val faceUpdateTimestamp: Long? = null,
|
||||
val cardNo: String? = null,
|
||||
val member: Boolean? = false,
|
||||
val faceDeleted: Boolean? = false,
|
||||
val personType: String? = null
|
||||
) : Parcelable {
|
||||
fun resolveFeatureStr(): String? {
|
||||
return faceFeature?.takeIf { it.isNotEmpty() }
|
||||
?: faceFeatureStr?.takeIf { it.isNotEmpty() }
|
||||
?: faceFeatureString?.takeIf { it.isNotEmpty() }
|
||||
}
|
||||
|
||||
fun toFaceEntity(): FaceEntity {
|
||||
val featureBase64 = resolveFeatureStr()
|
||||
return FaceEntity(
|
||||
userId,
|
||||
android.util.Base64.decode(featureBase64, android.util.Base64.DEFAULT),
|
||||
personType,
|
||||
cardNo,
|
||||
userId,
|
||||
userFaceId,
|
||||
member ?: false,
|
||||
faceUpdateTimestamp ?: 0L
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user