Selaa lähdekoodia

1. 补充获取列表特征列表接口

bjb 3 kuukautta sitten
vanhempi
sitoutus
255427407f

+ 17 - 10
app/src/main/AndroidManifest.xml

@@ -49,55 +49,62 @@
         <!--  登录页面  -->
         <activity
             android:name=".ui.pages.login.PageLogin"
-            android:exported="true"
+            android:exported="false"
             android:launchMode="singleTask"
             android:screenOrientation="portrait" />
         <!--  主页面  -->
         <activity
             android:name=".ui.pages.home.PageHome"
-            android:exported="true"
+            android:exported="false"
             android:launchMode="singleTask"
             android:screenOrientation="portrait" />
         <!--  选择流程类型  -->
         <activity
             android:name=".ui.pages.select.job.PageSelectJobType"
-            android:exported="true"
+            android:exported="false"
             android:screenOrientation="portrait" />
         <!--  创建作业  -->
         <activity
             android:name=".ui.pages.create.job.PageCreateJob"
-            android:exported="true"
+            android:exported="false"
             android:screenOrientation="portrait"
             android:windowSoftInputMode="adjustNothing" />
         <!--  编辑流程  -->
         <activity
             android:name=".ui.pages.edit.step.PageEditStep"
-            android:exported="true"
+            android:exported="false"
             android:screenOrientation="portrait" />
         <!--  作业详情  -->
         <activity
             android:name=".ui.pages.detail.job.PageDetailJob"
-            android:exported="true"
+            android:exported="false"
             android:screenOrientation="portrait" />
         <!--  任务详情  -->
         <activity
             android:name=".ui.pages.detail.task.PageDetailTask"
-            android:exported="true"
+            android:exported="false"
             android:screenOrientation="portrait" />
         <!--  消息中心  -->
         <activity
             android:name=".ui.pages.message.PageMessage"
-            android:exported="true"
+            android:exported="false"
             android:screenOrientation="portrait" />
         <!--  发布作业  -->
         <activity
             android:name=".ui.pages.create.job.PagePushJob"
-            android:exported="true"
+            android:exported="false"
             android:screenOrientation="portrait" />
+        <!--  用户信息  -->
         <activity
             android:name=".ui.pages.profile.PageProfile"
-            android:exported="true"
+            android:exported="false"
             android:screenOrientation="portrait" />
+        <!--  人脸录入页面  -->
+        <activity
+            android:name=".ui.pages.profile.face.PageFace"
+            android:exported="false"
+            android:screenOrientation="portrait" />
+
         <!--  阿里消息推送服务配置  -->
         <service
             android:name=".service.AliPushService"

+ 1 - 1
app/src/main/java/com/iscs/bozzys/api/ApiBean.kt

@@ -46,7 +46,7 @@ class LoginRsp(
  * @param total 数据总数
  * @param list  当前获取到的数据
  */
-class PageRsp<T>(val total: Int, val list: List<T>)
+class Page<T>(val total: Int, val list: List<T>)
 
 /**
  * 获取用户角色

+ 16 - 7
app/src/main/java/com/iscs/bozzys/api/ApiRequest.kt

@@ -144,7 +144,7 @@ object ApiRequest {
      *
      * @param params
      */
-    suspend fun getJobs(params: MutableMap<String, Any>): Result<Response<PageRsp<Job>>> {
+    suspend fun getJobs(params: MutableMap<String, Any>): Result<Response<Page<Job>>> {
         return requestApi { api.getJobs(params) }
     }
 
@@ -153,7 +153,7 @@ object ApiRequest {
      *
      * @param params
      */
-    suspend fun getTasks(params: MutableMap<String, Any>): Result<Response<PageRsp<Task>>> {
+    suspend fun getTasks(params: MutableMap<String, Any>): Result<Response<Page<Task>>> {
         return requestApi { api.getTasks(params) }
     }
 
@@ -187,7 +187,7 @@ object ApiRequest {
      *
      * @param params 请求数据
      */
-    suspend fun getDictData(params: MutableMap<String, Any>): Result<Response<PageRsp<Dict>>> {
+    suspend fun getDictData(params: MutableMap<String, Any>): Result<Response<Page<Dict>>> {
         return requestApi { api.getDictData(params) }
     }
 
@@ -196,7 +196,7 @@ object ApiRequest {
      *
      * @param params
      */
-    suspend fun getSopList(params: MutableMap<String, Any>): Result<Response<PageRsp<Sop>>> {
+    suspend fun getSopList(params: MutableMap<String, Any>): Result<Response<Page<Sop>>> {
         return requestApi { api.getSopList(params) }
     }
 
@@ -257,21 +257,21 @@ object ApiRequest {
     /**
      * 获取管理表单列表
      */
-    suspend fun getBpmFormList(params: MutableMap<String, Any>): Result<Response<PageRsp<TaskFormInfo>>> {
+    suspend fun getBpmFormList(params: MutableMap<String, Any>): Result<Response<Page<TaskFormInfo>>> {
         return requestApi { api.getBpmFormList(params) }
     }
 
     /**
      * 获取点位列表
      */
-    suspend fun getIsolationPointList(params: MutableMap<String, Any>): Result<Response<PageRsp<IsolationPoint>>> {
+    suspend fun getIsolationPointList(params: MutableMap<String, Any>): Result<Response<Page<IsolationPoint>>> {
         return requestApi { api.getIsolationPointList(params) }
     }
 
     /**
      * 获取所有消息
      */
-    suspend fun getMessages(params: MutableMap<String, Any>): Result<Response<PageRsp<Message>>> {
+    suspend fun getMessages(params: MutableMap<String, Any>): Result<Response<Page<Message>>> {
         return requestApi { api.getMessages(params) }
     }
 
@@ -321,4 +321,13 @@ object ApiRequest {
         return requestApi { api.updateMessagePushStatus(mutableMapOf("type" to (if (isRemove) 1 else 0), "deviceId" to deviceId)) }
     }
 
+    /**
+     * 获取用户人脸数据
+     *
+     * @param params
+     */
+    suspend fun getUserCharacteristicList(params: MutableMap<String, Any>): Result<Response<Page<UserCharacteristic>>> {
+        return requestApi { api.getUserCharacteristicList(params) }
+    }
+
 }

+ 17 - 7
app/src/main/java/com/iscs/bozzys/api/ApiService.kt

@@ -65,7 +65,7 @@ interface ApiService {
     suspend fun getJobs(
         @QueryMap params: MutableMap<String, Any>,
         @HeaderMap headers: Map<String, String> = ApiRequest.getUserHeaders()
-    ): Response<PageRsp<Job>>
+    ): Response<Page<Job>>
 
     /**
      * 获取任务列表数据
@@ -77,7 +77,7 @@ interface ApiService {
     suspend fun getTasks(
         @QueryMap params: MutableMap<String, Any>,
         @HeaderMap headers: Map<String, String> = ApiRequest.getUserHeaders()
-    ): Response<PageRsp<Task>>
+    ): Response<Page<Task>>
 
     /**
      * 查询任务数统计
@@ -114,7 +114,7 @@ interface ApiService {
     suspend fun getDictData(
         @QueryMap params: MutableMap<String, Any>,
         @HeaderMap headers: Map<String, String> = ApiRequest.getUserHeaders()
-    ): Response<PageRsp<Dict>>
+    ): Response<Page<Dict>>
 
     /**
      * 获取SOP模板列表
@@ -124,7 +124,7 @@ interface ApiService {
     suspend fun getSopList(
         @QueryMap params: MutableMap<String, Any>,
         @HeaderMap headers: Map<String, String> = ApiRequest.getUserHeaders()
-    ): Response<PageRsp<Sop>>
+    ): Response<Page<Sop>>
 
     /**
      * 创建作业
@@ -204,7 +204,7 @@ interface ApiService {
     suspend fun getBpmFormList(
         @QueryMap params: MutableMap<String, Any>,
         @HeaderMap headers: Map<String, String> = ApiRequest.getUserHeaders()
-    ): Response<PageRsp<TaskFormInfo>>
+    ): Response<Page<TaskFormInfo>>
 
     /**
      * 获取点位列表
@@ -214,7 +214,7 @@ interface ApiService {
     suspend fun getIsolationPointList(
         @QueryMap params: MutableMap<String, Any>,
         @HeaderMap headers: Map<String, String> = ApiRequest.getUserHeaders()
-    ): Response<PageRsp<IsolationPoint>>
+    ): Response<Page<IsolationPoint>>
 
     /**
      * 获取通知消息
@@ -224,7 +224,7 @@ interface ApiService {
     suspend fun getMessages(
         @QueryMap params: MutableMap<String, Any>,
         @HeaderMap headers: Map<String, String> = ApiRequest.getUserHeaders()
-    ): Response<PageRsp<Message>>
+    ): Response<Page<Message>>
 
     /**
      * 获取未读通知消息
@@ -280,4 +280,14 @@ interface ApiService {
         @HeaderMap headers: Map<String, String> = ApiRequest.getUserHeaders()
     ): Response<Boolean>
 
+    /**
+     * 获取当前用户人脸数据
+     */
+    @Headers("Content-Type: application/x-www-form-urlencoded")
+    @GET("/admin-api/iscs/user-characteristic/getUserCharacteristicPage")
+    suspend fun getUserCharacteristicList(
+        @QueryMap params: MutableMap<String, Any>,
+        @HeaderMap headers: Map<String, String> = ApiRequest.getUserHeaders()
+    ): Response<Page<UserCharacteristic>>
+
 }

+ 3 - 0
app/src/main/java/com/iscs/bozzys/api/Role.kt

@@ -2,5 +2,8 @@ package com.iscs.bozzys.api
 
 import kotlinx.serialization.Serializable
 
+/**
+ * 权限角色
+ */
 @Serializable
 data class Role(val name: String = "", val code: String = "")

+ 26 - 0
app/src/main/java/com/iscs/bozzys/api/UserCharacteristic.kt

@@ -0,0 +1,26 @@
+package com.iscs.bozzys.api
+
+import kotlinx.serialization.Serializable
+
+
+/**
+ * 用户特征数据
+ *
+ * @param id            特征id
+ * @param userId        用户id
+ * @param type          1-指纹 2-人脸
+ * @param content       特征值
+ * @param imageUrl      图片地址
+ * @param imagePath     图片路径
+ * @param createTime    创建时间
+ */
+@Serializable
+data class UserCharacteristic(
+    val id: Int = 0,
+    val userId: Int = 0,
+    val type: String = "",
+    val content: String = "",
+    val imageUrl: String = "",
+    val imagePath: String = "",
+    val createTime: Long = 0L,
+)

+ 1 - 1
app/src/main/java/com/iscs/bozzys/ui/pages/home/HomeCompose.kt

@@ -152,7 +152,7 @@ private fun TopToolBar(pv: PaddingValues, vm: VMHome) {
                         .size(36.dp)
                         .clip(RoundedCornerShape(6.dp))
                         .clickable(onClick = { ctx.openPageMessage() })
-                        .padding(5.dp),
+                        .padding(6.dp),
                     tint = Color.White
                 )
                 if (state.msgCount > 0) Text(

+ 4 - 0
app/src/main/java/com/iscs/bozzys/ui/pages/profile/PageProfile.kt

@@ -67,6 +67,7 @@ import com.iscs.bozzys.ui.common.PageBase
 import com.iscs.bozzys.ui.common.Title
 import com.iscs.bozzys.ui.dialog.TipsDialog
 import com.iscs.bozzys.ui.pages.compose.CardBox
+import com.iscs.bozzys.ui.pages.profile.face.openPageFace
 import com.iscs.bozzys.ui.pages.vm.VMProfile
 import com.iscs.bozzys.ui.theme.Main
 import com.iscs.bozzys.ui.theme.Text
@@ -209,6 +210,9 @@ class PageProfile : PageBase() {
                     UserInfoItem("性别", if (state.user.sex != 2) "男" else "女") {
                         vm.showModifyDialog("选择性别", "sex" to "${state.user.sex}")
                     }
+                    SpacerLine()
+                    // 人脸数据
+                    UserInfoItem("人脸", "") { openPageFace(state.user.id) }
                 }
                 ProfileDialog(
                     show = state.showModifyDialog,

+ 66 - 0
app/src/main/java/com/iscs/bozzys/ui/pages/profile/face/PageFace.kt

@@ -0,0 +1,66 @@
+package com.iscs.bozzys.ui.pages.profile.face
+
+import android.content.Context
+import android.content.Intent
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.lifecycle.viewmodel.compose.viewModel
+import coil.compose.AsyncImage
+import com.iscs.bozzys.api.UserCharacteristic
+import com.iscs.bozzys.ui.common.PageBase
+import com.iscs.bozzys.ui.common.Title
+import com.iscs.bozzys.ui.pages.vm.VMFace
+import com.iscs.bozzys.utils.DateUtil.getShowDateOrTime
+
+/**
+ * 打开人脸录入界面
+ */
+fun Context.openPageFace(userId: Int) {
+    startActivity(Intent(this, PageFace::class.java).apply {
+        putExtra("userId", userId)
+    })
+}
+
+/**
+ * 人脸数据页面
+ */
+class PageFace : PageBase() {
+
+    private fun getUserId(): Int {
+        return intent.getIntExtra("userId", 0)
+    }
+
+    @Composable
+    override fun GetViews(pv: PaddingValues) {
+        val vm: VMFace = viewModel()
+        val state by vm.state.collectAsState()
+        LaunchedEffect(Unit) {
+            vm.loading.initLoading()
+            vm.toast.initToast()
+            vm.init(getUserId())
+        }
+        Column() {
+            Title(pv, "人脸")
+            Column() {
+                state.faceList.forEach { FaceListItem(it) }
+            }
+        }
+    }
+
+    /**
+     * 人脸特诊数据
+     */
+    @Composable
+    fun FaceListItem(face: UserCharacteristic) {
+        Row() {
+            Text(face.createTime.getShowDateOrTime())
+            AsyncImage(model = face.imageUrl, contentDescription = null)
+        }
+    }
+}

+ 60 - 0
app/src/main/java/com/iscs/bozzys/ui/pages/vm/VMFace.kt

@@ -0,0 +1,60 @@
+package com.iscs.bozzys.ui.pages.vm
+
+import androidx.lifecycle.viewModelScope
+import com.iscs.bozzys.api.ApiRequest
+import com.iscs.bozzys.api.ApiRequest.getResponse
+import com.iscs.bozzys.api.UserCharacteristic
+import com.iscs.bozzys.ui.common.VMBase
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.launch
+
+/**
+ * 人脸数据模型页面
+ */
+class VMFace : VMBase() {
+
+    private val _state = MutableStateFlow(StateFace())
+
+    val state = _state.asStateFlow()
+
+    // 当前用户id
+    private var userId = 0
+
+    /**
+     * 做数据初始化操作
+     */
+    fun init(userId: Int = 0) {
+        this.userId = userId
+        getFaceList(true)
+    }
+
+    /**
+     * 获取人脸数据列表
+     */
+    fun getFaceList(showLoading: Boolean = false) {
+        viewModelScope.launch(Dispatchers.IO) {
+            if (showLoading) loading.emit(StateLoading(show = true))
+            ApiRequest.getUserCharacteristicList(mutableMapOf("pageNo" to 1, "pageSize" to 10, "userId" to userId, "type" to 2)).onSuccess {
+                delay(500)
+                loading.emit(StateLoading())
+                delay(100)
+                _state.value = _state.value.copy(faceList = (it.data?.list ?: emptyList()).toMutableList())
+            }.onFailure {
+                delay(500)
+                loading.emit(StateLoading())
+                toast.emit(it.getResponse<Any>().msg)
+            }
+        }
+    }
+
+}
+
+/**
+ * 人脸页面状态存储
+ *
+ * @param faceList  人脸列表
+ */
+data class StateFace(val faceList: MutableList<UserCharacteristic> = mutableListOf())

+ 3 - 3
app/src/main/java/com/iscs/bozzys/ui/pages/vm/VMHome.kt

@@ -9,7 +9,7 @@ import com.iscs.bozzys.api.ApiRequest.getResponse
 import com.iscs.bozzys.api.ApiRequest.isCodeOk
 import com.iscs.bozzys.api.Job
 import com.iscs.bozzys.api.Message
-import com.iscs.bozzys.api.PageRsp
+import com.iscs.bozzys.api.Page
 import com.iscs.bozzys.api.Task
 import com.iscs.bozzys.api.User
 import com.iscs.bozzys.event.RefreshEvent
@@ -239,7 +239,7 @@ class VMHome : VMBase() {
                 }.onFailure {
                     delay(1000)
                     _state.value = _state.value.copy(jobPage = _state.value.jobPage.copy(isRefresh = false))
-                    toast.emit(it.getResponse<PageRsp<Job>>().msg)
+                    toast.emit(it.getResponse<Page<Job>>().msg)
                 }
         }
     }
@@ -271,7 +271,7 @@ class VMHome : VMBase() {
                 delay(1000)
                 _state.value =
                     _state.value.copy(taskPage = _state.value.taskPage.copy(isRefresh = false))
-                toast.emit(it.getResponse<PageRsp<Task>>().msg)
+                toast.emit(it.getResponse<Page<Task>>().msg)
             }
         }
     }