diff --git a/app/src/main/java/com/xiaoqu/watch/data/task/TaskDetail.kt b/app/src/main/java/com/xiaoqu/watch/data/task/TaskDetail.kt index 622bd0c..fa80066 100644 --- a/app/src/main/java/com/xiaoqu/watch/data/task/TaskDetail.kt +++ b/app/src/main/java/com/xiaoqu/watch/data/task/TaskDetail.kt @@ -4,30 +4,80 @@ import com.google.gson.annotations.SerializedName /** * 任务详情数据类 - * 对应 watchTask/lookTaskDetail API 返回 + * 对应 watchTask/lookTaskDetail API 实际返回字段 */ data class TaskDetail( @SerializedName("id") val id: Long = 0, - /** 任务编号 */ + /** 派单号 */ @SerializedName("no") val no: String = "", /** 任务名称 */ - @SerializedName("taskName") val taskName: String = "", - /** 地点名称 */ - @SerializedName("positionName") val positionName: String = "", - /** 积分 */ - @SerializedName("point") val point: Int = 0, - /** 状态:2=待抢单, 3=待打卡, 4=进行中, 1=已完成 */ - @SerializedName("status") val status: Int = 0, - /** 任务类型 */ + @SerializedName("name") val name: String = "", + /** 任务类型:0=计划,1=监控,2=指派,3=用户上报,4=巡检上报,5=巡检任务 */ @SerializedName("taskType") val taskType: Int = 0, - /** 开始时间 */ - @SerializedName("beginTime") val beginTime: String = "", - /** 结束时间 */ - @SerializedName("endTime") val endTime: String = "", + /** 状态:2=待抢单,3=待打卡,4=进行中,5/6=完成 */ + @SerializedName("status") val status: Int = 0, + /** 积分(服务端返回 Double) */ + @SerializedName("point") val point: Double = 0.0, + /** 派单时间 "04.28 09:10" */ + @SerializedName("sendTime") val sendTime: String = "", + /** 创建时间 */ + @SerializedName("createTime") val createTime: String = "", + /** 预计完成时间(指派任务) */ + @SerializedName("preFinishTime") val preFinishTime: String? = null, + /** 过期时间 */ + @SerializedName("expireTime") val expireTime: String? = null, + /** 确认时间 */ + @SerializedName("confirmTime") val confirmTime: String? = null, + /** 操作时间 */ + @SerializedName("actionTime") val actionTime: String? = null, + /** 完成时间 */ + @SerializedName("finishTime") val finishTime: String? = null, + /** 打卡地点列表(非空=有场景打卡) */ + @SerializedName("taskPositions") val taskPositions: List? = null, + /** 巡检场景列表(taskType=5) */ + @SerializedName("taskInspectScenes") val taskInspectScenes: List? = null, + /** 协作人状态:1=有协作人 */ + @SerializedName("userStatus") val userStatus: Int = 0, + /** 协作人列表 */ + @SerializedName("workTogether") val workTogether: List? = null, + /** 巡检人员 */ + @SerializedName("inspectUser") val inspectUser: List? = null, + /** 巡检开始时间 */ + @SerializedName("executeTimeStart") val executeTimeStart: String? = null, + /** 巡检结束时间 */ + @SerializedName("executeTimeEnd") val executeTimeEnd: String? = null, + /** 创建人/上报人 */ + @SerializedName("createName") val createName: String = "", /** 任务描述 */ - @SerializedName("description") val description: String = "", - /** 协作人 */ - @SerializedName("executorName") val executorName: String = "", - /** 是否有打卡地点(决定打卡方式:有=NFC打卡,无=直接确认) */ - @SerializedName("hasPosition") val hasPosition: Boolean = false -) + @SerializedName("content") val content: String = "", + /** 任务标准 */ + @SerializedName("standard") val standard: String = "", + /** 任务要求(黄色提示) */ + @SerializedName("taskRequire") val taskRequire: String? = null, + /** 图片附件 */ + @SerializedName("uploadPic") val uploadPic: List? = null, + /** 语音附件 */ + @SerializedName("voice") val voice: List? = null, + /** 打卡标志 */ + @SerializedName("clockFlag") val clockFlag: Int = 0 +) { + /** 是否有打卡地点(决定打卡方式:有=NFC,无=直接确认) */ + val hasPosition: Boolean get() = !taskPositions.isNullOrEmpty() + + /** 地点显示文字(多个用逗号分隔) */ + val positionText: String get() = taskPositions?.joinToString(",") ?: "" + + /** 积分显示(去掉小数点) */ + val pointText: String get() = if (point > 0) "+${point.toInt()}" else "0" + + /** 任务名带类型前缀 */ + val displayName: String get() { + val prefix = when (taskType) { + 2 -> "指派:" + 3, 4 -> "上报:" + 5 -> "巡检:" + else -> "" + } + return "$prefix$name" + } +} diff --git a/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt index ca89ca7..202b30c 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt @@ -224,7 +224,7 @@ class TaskListFragment : BaseFragment() { // ===== UI 显示 ===== - /** 显示任务详情 */ + /** 显示任务详情(使用服务端实际返回的字段) */ private fun displayDetail(detail: TaskDetail) { binding.taskContent.visibility = View.VISIBLE binding.tvEmpty.visibility = View.GONE @@ -233,27 +233,20 @@ class TaskListFragment : BaseFragment() { // 标题:第X/Y个任务 binding.tvTitle.text = "第${taskIndex + 1}/${taskList.size}个任务" - // 派单时间 - if (detail.beginTime.isNotEmpty()) { - val timePart = detail.beginTime.split(" ").lastOrNull() ?: detail.beginTime - binding.tvSendTime.text = "${timePart}派单" + // 派单时间(sendTime: "04.28 09:10") + if (detail.sendTime.isNotEmpty()) { + binding.tvSendTime.text = "${detail.sendTime}派单" binding.tvSendTime.visibility = View.VISIBLE } else { binding.tvSendTime.visibility = View.GONE } // 任务名(带类型前缀) - val prefix = when (detail.taskType) { - 2 -> "指派:" - 3, 4 -> "上报:" - 5 -> "巡检:" - else -> "" - } - binding.tvTaskName.text = "$prefix${detail.taskName.ifEmpty { detail.no }}" + binding.tvTaskName.text = detail.displayName - // 地点 - if (detail.positionName.isNotEmpty()) { - binding.tvPosition.text = detail.positionName + // 地点(taskPositions 数组拼接) + if (detail.hasPosition) { + binding.tvPosition.text = detail.positionText binding.tvPosition.visibility = View.VISIBLE } else { binding.tvPosition.visibility = View.GONE @@ -263,26 +256,27 @@ class TaskListFragment : BaseFragment() { binding.tvNo.text = detail.no // 积分 - binding.tvPoints.text = if (detail.point > 0) "+${detail.point}" else "0" + binding.tvPoints.text = detail.pointText - // 协作人 - if (detail.executorName.isNotEmpty()) { - binding.tvWorkers.text = detail.executorName - binding.rowWorkers.visibility = View.VISIBLE - } else { - binding.rowWorkers.visibility = View.GONE - } + // 协作人(workTogether 列表) + // TODO: workTogether 是 List,需要确认实际结构后解析 + binding.rowWorkers.visibility = View.GONE // 描述 - if (detail.description.isNotEmpty()) { - binding.tvDescription.text = detail.description + if (detail.content.isNotEmpty()) { + binding.tvDescription.text = detail.content binding.tvDescription.visibility = View.VISIBLE } else { binding.tvDescription.visibility = View.GONE } - // 提示条(待打卡+有场景) - if (detail.status == 3 && detail.hasPosition) { + // 任务要求(黄色提示) + if (!detail.taskRequire.isNullOrEmpty()) { + binding.tvHint.text = detail.taskRequire + binding.tvHint.visibility = View.VISIBLE + } else if (detail.status == 3 && detail.hasPosition) { + // 待打卡+有场景 → 默认提示 + binding.tvHint.text = "请将手表贴近打卡信标" binding.tvHint.visibility = View.VISIBLE } else { binding.tvHint.visibility = View.GONE