diff --git a/app/src/main/java/com/sw/platecabinet/model/response/UserFaceModel.kt b/app/src/main/java/com/sw/platecabinet/model/response/UserFaceModel.kt index eccfa65..27593ad 100644 --- a/app/src/main/java/com/sw/platecabinet/model/response/UserFaceModel.kt +++ b/app/src/main/java/com/sw/platecabinet/model/response/UserFaceModel.kt @@ -19,5 +19,7 @@ data class UserFaceModel( @SerializedName("userFaceId") val userFaceId: String? = "", @SerializedName("userId") - val userId: String? = "" + val userId: String? = "", + @SerializedName("updateTimeStamp") + val updateTimeStamp: Long = 0, ) : Parcelable \ No newline at end of file diff --git a/app/src/main/java/com/sw/platecabinet/network/task/HeartBeatTask.kt b/app/src/main/java/com/sw/platecabinet/network/task/HeartBeatTask.kt index 7ca6c6c..badfafa 100644 --- a/app/src/main/java/com/sw/platecabinet/network/task/HeartBeatTask.kt +++ b/app/src/main/java/com/sw/platecabinet/network/task/HeartBeatTask.kt @@ -6,7 +6,9 @@ import androidx.work.CoroutineWorker import androidx.work.WorkerParameters import com.arcsoft.face.FaceEngine import com.sw.inbound.utils.GsonUtils +import com.sw.plate.App 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.facedb.entity.FaceEntity 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 kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import timber.log.Timber class HeartBeatTask(appContext: Context, workerParams: WorkerParameters) : CoroutineWorker(appContext, workerParams) { @@ -44,10 +47,19 @@ class HeartBeatTask(appContext: Context, workerParams: WorkerParameters) : private suspend fun performSync() { withContext(Dispatchers.IO) { - val timestamp = System.currentTimeMillis() -// val timestamp = 1757063902000 - val resp = repository.getHeartbeatInterface(timestamp) - Log.d(TAG, "performSync: ${GsonUtils.toJson(resp)}") + val faceUpdateTimeStamp = PrefUtils.getLong(App.getContext(), "faceUpdateTimeStamp", 0) + if (faceUpdateTimeStamp == 0L) { + val timestamp = System.currentTimeMillis() + 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 if (list.isNullOrEmpty()) { return@withContext @@ -55,21 +67,28 @@ class HeartBeatTask(appContext: Context, workerParams: WorkerParameters) : val faceServer = FaceServer.getInstance() val faceEngine: FaceEngine? = faceServer.faceEngine - list.forEach { + list.forEachIndexed { index, it -> 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()) { //userId非空,根据userId删除人脸数据 faceApi.deleteByUserName(it.userId) faceEngine?.removeFaceFeature(it.userId.toInt()) } - } else if (it.faceType == "1") { + } else if (it.faceType == "0") { //新增人脸数据 val featureData = Base64.decode(it.faceFeatureString) val insertEntity = FaceEntity(it.userId, null, featureData) val faceId = faceApi.insert(insertEntity) insertEntity.faceId = faceId - faceServer.registerFaceFeatureInfoFromDb( insertEntity, faceEngine) + faceServer.registerFaceFeatureInfoFromDb(insertEntity, faceEngine) } } catch (e: Exception) { e.printStackTrace() diff --git a/app/src/main/java/com/sw/platecabinet/network/task/TaskManager.kt b/app/src/main/java/com/sw/platecabinet/network/task/TaskManager.kt index 6678b7a..150c337 100644 --- a/app/src/main/java/com/sw/platecabinet/network/task/TaskManager.kt +++ b/app/src/main/java/com/sw/platecabinet/network/task/TaskManager.kt @@ -11,7 +11,7 @@ object TaskManager { fun startTask() { val nextRequest = OneTimeWorkRequestBuilder() - .setInitialDelay(3, TimeUnit.MINUTES) + .setInitialDelay(1, TimeUnit.MINUTES) // .setInputData(inputData) .build() WorkManager.getInstance(App.getContext())