修改人脸同步逻辑

This commit is contained in:
mazengfei
2025-11-07 10:55:48 +08:00
parent abe594fb66
commit 55ba11bf34
3 changed files with 31 additions and 10 deletions
@@ -19,5 +19,7 @@ data class UserFaceModel(
@SerializedName("userFaceId") @SerializedName("userFaceId")
val userFaceId: String? = "", val userFaceId: String? = "",
@SerializedName("userId") @SerializedName("userId")
val userId: String? = "" val userId: String? = "",
@SerializedName("updateTimeStamp")
val updateTimeStamp: Long = 0,
) : Parcelable ) : Parcelable
@@ -6,7 +6,9 @@ import androidx.work.CoroutineWorker
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import com.arcsoft.face.FaceEngine import com.arcsoft.face.FaceEngine
import com.sw.inbound.utils.GsonUtils import com.sw.inbound.utils.GsonUtils
import com.sw.plate.App
import com.sw.plate.utils.Base64 import com.sw.plate.utils.Base64
import com.sw.plate.utils.PrefUtils
import com.sw.plate.utils.arcface.FaceApi import com.sw.plate.utils.arcface.FaceApi
import com.sw.plate.utils.arcface.facedb.entity.FaceEntity import com.sw.plate.utils.arcface.facedb.entity.FaceEntity
import com.sw.plate.utils.arcface.faceserver.FaceServer import com.sw.plate.utils.arcface.faceserver.FaceServer
@@ -14,6 +16,7 @@ import com.sw.platecabinet.network.ApiClient
import com.sw.platecabinet.repository.RemoteRepository import com.sw.platecabinet.repository.RemoteRepository
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import timber.log.Timber
class HeartBeatTask(appContext: Context, workerParams: WorkerParameters) : class HeartBeatTask(appContext: Context, workerParams: WorkerParameters) :
CoroutineWorker(appContext, workerParams) { CoroutineWorker(appContext, workerParams) {
@@ -44,10 +47,19 @@ class HeartBeatTask(appContext: Context, workerParams: WorkerParameters) :
private suspend fun performSync() { private suspend fun performSync() {
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
val timestamp = System.currentTimeMillis() val faceUpdateTimeStamp = PrefUtils.getLong(App.getContext(), "faceUpdateTimeStamp", 0)
// val timestamp = 1757063902000 if (faceUpdateTimeStamp == 0L) {
val resp = repository.getHeartbeatInterface(timestamp) val timestamp = System.currentTimeMillis()
Log.d(TAG, "performSync: ${GsonUtils.toJson(resp)}") PrefUtils.setLong(App.getContext(), "faceUpdateTimeStamp", timestamp)
}
val resp = repository.getHeartbeatInterface(
PrefUtils.getLong(
App.getContext(),
"faceUpdateTimeStamp",
0
)
)
Timber.tag(TAG).d("performSync: ${GsonUtils.toJson(resp)}")
val list = resp.data val list = resp.data
if (list.isNullOrEmpty()) { if (list.isNullOrEmpty()) {
return@withContext return@withContext
@@ -55,21 +67,28 @@ class HeartBeatTask(appContext: Context, workerParams: WorkerParameters) :
val faceServer = FaceServer.getInstance() val faceServer = FaceServer.getInstance()
val faceEngine: FaceEngine? = faceServer.faceEngine val faceEngine: FaceEngine? = faceServer.faceEngine
list.forEach { list.forEachIndexed { index, it ->
try { try {
if (it.faceType == "0") { if (index == list.size - 1) {
PrefUtils.setLong(
App.getContext(),
"faceUpdateTimeStamp",
it.updateTimeStamp
)
}
if (it.faceType == "1") {
if (it.userId.isNullOrBlank().not()) { if (it.userId.isNullOrBlank().not()) {
//userId非空,根据userId删除人脸数据 //userId非空,根据userId删除人脸数据
faceApi.deleteByUserName(it.userId) faceApi.deleteByUserName(it.userId)
faceEngine?.removeFaceFeature(it.userId.toInt()) faceEngine?.removeFaceFeature(it.userId.toInt())
} }
} else if (it.faceType == "1") { } else if (it.faceType == "0") {
//新增人脸数据 //新增人脸数据
val featureData = Base64.decode(it.faceFeatureString) val featureData = Base64.decode(it.faceFeatureString)
val insertEntity = FaceEntity(it.userId, null, featureData) val insertEntity = FaceEntity(it.userId, null, featureData)
val faceId = faceApi.insert(insertEntity) val faceId = faceApi.insert(insertEntity)
insertEntity.faceId = faceId insertEntity.faceId = faceId
faceServer.registerFaceFeatureInfoFromDb( insertEntity, faceEngine) faceServer.registerFaceFeatureInfoFromDb(insertEntity, faceEngine)
} }
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
@@ -11,7 +11,7 @@ object TaskManager {
fun startTask() { fun startTask() {
val nextRequest = OneTimeWorkRequestBuilder<HeartBeatTask>() val nextRequest = OneTimeWorkRequestBuilder<HeartBeatTask>()
.setInitialDelay(3, TimeUnit.MINUTES) .setInitialDelay(1, TimeUnit.MINUTES)
// .setInputData(inputData) // .setInputData(inputData)
.build() .build()
WorkManager.getInstance(App.getContext()) WorkManager.getInstance(App.getContext())