package com.xw.yunwei.ui.task
|
|
import android.app.Application
|
import android.view.View
|
import androidx.lifecycle.MutableLiveData
|
import com.amap.api.location.AMapLocation
|
import com.xw.common.base.BaseViewModel
|
import com.xw.common.utils.LogUtils
|
import com.xw.yunwei.R
|
import com.xw.yunwei.databinding.ItemArrow2TextBinding
|
import com.xw.yunwei.model.TaskStatisticInfo
|
import com.xw.yunwei.net.TaskRepository
|
import com.xw.yunwei.ui.task.list.TaskListFragment
|
import org.koin.core.component.inject
|
|
/**
|
* 任务中心 ViewModel
|
*
|
* 管理任务筛选条件、任务列表 Fragment 实例、未读消息数量等业务数据,
|
* 提供筛选参数转换及网络请求能力。
|
*
|
* @author zmc
|
*/
|
class TaskVM(myApplication: Application) : BaseViewModel(myApplication) {
|
|
companion object {
|
/** 全局标识:是否需要刷新消息红点 */
|
val needRefresh = MutableLiveData(true)
|
}
|
|
/** 全部任务列表 Fragment */
|
val allTaskFragment by lazy { TaskListFragment.newInstance(null) }
|
|
/** 待到达任务列表 Fragment */
|
val togoTaskFragment by lazy { TaskListFragment.newInstance(0) }
|
|
/** 待处理任务列表 Fragment */
|
val todoTaskFragment by lazy { TaskListFragment.newInstance(1) }
|
|
/** 已处理任务列表 Fragment */
|
val finishTaskFragment by lazy { TaskListFragment.newInstance(2) }
|
val reassignmentTaskFragment by lazy { TaskListFragment.newInstance(4) }
|
|
/** 任务数据仓库 */
|
val taskRepository: TaskRepository by inject()
|
|
//选中任务类型下标
|
val selectTaskTypeIndex = MutableLiveData(0)
|
|
//统计信息
|
val taskStatistic = MutableLiveData<TaskStatisticInfo>()
|
|
/** 当前定位信息 */
|
var location: AMapLocation? = null
|
|
/** 车牌号搜索关键字 */
|
// 车牌号
|
val plateNumber: MutableLiveData<String> = MutableLiveData("")
|
|
/** 筛选开始时间(yyyy-MM-dd) */
|
var startTime = ""
|
|
/** 筛选结束时间(yyyy-MM-dd) */
|
var endTime = ""
|
|
/** 派发时间筛选项 */
|
val filterTaskTime = listOf("今天", "昨天", "近一周", "近一月")
|
|
/** 优先级筛选项 */
|
val filterTaskLevel = listOf("全部", "一级", "二级", "三级")
|
|
/** 任务类型筛选项 */
|
val filterTaskType = listOf("全部", "事故", "常规")
|
|
/** 排序优先筛选项 */
|
val filterTaskSort = listOf("任务优先级", "车牌号", "任务时间")
|
|
/** 当前选中的派发时间 */
|
var selectTaskTime = filterTaskTime[2]
|
|
/** 当前选中的优先级 */
|
var selectTaskLevel = filterTaskLevel[0]
|
|
/** 当前选中的任务类型 */
|
var selectTaskType = filterTaskType[0]
|
|
/** 当前选中的排序字段 */
|
var selectTaskSort = filterTaskSort[0]
|
|
/** 排序规则:1 正序,2 倒序 */
|
var taskSort = 1
|
|
/** 排序视图绑定列表,用于动态更新 UI 状态 */
|
val sortViews = mutableListOf<ItemArrow2TextBinding>()
|
|
//是否刷新列表
|
val needRefreshList = MutableLiveData(false)
|
|
//是否已经筛选
|
fun hadFilter(): Boolean {
|
return selectTaskTime != filterTaskTime[2] || selectTaskLevel != filterTaskLevel[0] ||
|
selectTaskType != filterTaskType[0] || selectTaskSort != filterTaskSort[0] || taskSort != 1 ||
|
startTime.isNotEmpty() || endTime.isNotEmpty()
|
}
|
|
/**
|
* 获取派发类型对应的服务器参数
|
*
|
* 若用户自定义了时间范围则返回 5;否则根据快捷选项返回对应编码。
|
*
|
* @return 派发类型编码,null 表示未选择
|
*/
|
fun getDistributeType(): Int? = when {
|
startTime.isNotEmpty() || endTime.isNotEmpty() -> 5
|
selectTaskTime == "今天" -> 1
|
selectTaskTime == "昨天" -> 2
|
selectTaskTime == "近一周" -> 3
|
selectTaskTime == "近一月" -> 4
|
else -> null
|
}
|
|
/**
|
* 获取紧急程度对应的服务器参数
|
*
|
* @return 紧急程度编码,null 表示全部
|
*/
|
fun getUrgencyLevel(): Int? = when (selectTaskLevel) {
|
"一级" -> 0
|
"二级" -> 1
|
"三级" -> 2
|
else -> null
|
}
|
|
/**
|
* 获取任务类别对应的服务器参数
|
*
|
* @return 任务类别编码,null 表示全部
|
*/
|
fun getTaskCategory(): Int? = when (selectTaskType) {
|
"事故" -> 2
|
"常规" -> 1
|
else -> null
|
}
|
|
/**
|
* 获取排序类型对应的服务器参数
|
*
|
* @return 排序类型编码,null 表示未选择
|
*/
|
fun getSortType(): Int? = when (selectTaskSort) {
|
"任务优先级" -> 1
|
"车牌号" -> 2
|
"任务时间" -> 3
|
else -> null
|
}
|
|
/**
|
* 获取未读消息数量
|
*
|
* @param block 请求结果回调,参数为未读数量字符串
|
*/
|
fun getUnreadCount(block: (String) -> Unit) {
|
launchRequest(showLoading = false) {
|
taskRepository.getUnreadCount().let {
|
runOnMainThread { block(it ?: "") }
|
}
|
}
|
}
|
|
//更改任务类型
|
fun changeTaskType(index: Int) {
|
selectTaskType = filterTaskType[index]
|
selectTaskTypeIndex.postValue(index)
|
}
|
|
val onClick = View.OnClickListener {
|
when (it.id) {
|
R.id.back -> onBackPressed()
|
|
R.id.rl_all -> {
|
changeTaskType(0)
|
statistic()
|
needRefreshList.postValue(true)
|
}
|
|
R.id.rl_accident -> {
|
changeTaskType(1)
|
statistic()
|
needRefreshList.postValue(true)
|
}
|
|
R.id.rl_normal -> {
|
changeTaskType(2)
|
statistic()
|
needRefreshList.postValue(true)
|
}
|
}
|
}
|
|
//获取统计信息
|
fun statistic() {
|
launchRequest(error = { code, msg ->
|
LogUtils.e(TAG, "launchRequest: code = $code msg = $msg")
|
}) {
|
taskRepository.statistic(
|
getDistributeType()?.toString(),
|
startTime,
|
endTime,
|
getTaskCategory()?.toString(),
|
getUrgencyLevel()?.toString(),
|
plateNumber.value
|
)?.also {
|
taskStatistic.postValue(it)
|
}
|
}
|
}
|
}
|