package cn.flightfeather.thirdappmodule.module.task
|
|
import android.arch.lifecycle.MutableLiveData
|
import cn.flightfeather.thirdappmodule.bean.entity.Domainitem
|
import cn.flightfeather.thirdappmodule.bean.entity.Subtask
|
import cn.flightfeather.thirdappmodule.bean.vo.ProblemDetailVo
|
import cn.flightfeather.thirdappmodule.bean.vo.TaskVo
|
import cn.flightfeather.thirdappmodule.common.net.ResultCallBack
|
import cn.flightfeather.thirdappmodule.module.base.BaseViewModel
|
import cn.flightfeather.thirdappmodule.repository.ProblemRepository
|
import cn.flightfeather.thirdappmodule.repository.SubTaskRepository
|
import cn.flightfeather.thirdappmodule.repository.TaskRepository
|
import cn.flightfeather.thirdappmodule.util.Constant
|
import cn.flightfeather.thirdappmodule.util.DateFormatter
|
import java.util.*
|
import kotlin.collections.ArrayList
|
|
/**
|
* @author riku
|
* Date: 2020/6/5
|
*/
|
class TaskViewModel : BaseViewModel() {
|
companion object {
|
const val NO_TOP_TASK = "无总任务"
|
const val ALL_PROBLEM = "全部问题"
|
}
|
|
private val taskRepository = TaskRepository()
|
private val subTaskRepository = SubTaskRepository()
|
private val problemRepository = ProblemRepository()
|
private val allTopTaskList = ArrayList<TaskVo>()// 系统中所有总任务
|
private val problemMap = mutableMapOf<String, MutableList<String>>()// 问题类型与具体问题
|
|
/**临时任务功能与任务信息导出功能***************************************************************************/
|
// 总任务类型
|
val allTaskTypeList = MutableLiveData<ArrayList<Domainitem>>().apply { value = ArrayList() }
|
// 当前筛选条件下的总任务
|
val topTaskList = MutableLiveData<ArrayList<TaskVo>>().apply { value = ArrayList() }
|
// 问题类型
|
val problemTypeList = MutableLiveData<ArrayList<String>>().apply { value = ArrayList() }
|
// 具体问题
|
val problemDetailList = MutableLiveData<ArrayList<String>>().apply { value = ArrayList() }
|
// 子任务id与名称
|
val subTaskNameList = MutableLiveData<ArrayList<Pair<String, String>>>().apply { value = ArrayList() }
|
/***********************************************************************************************************/
|
|
/**任务制订、任务提醒相关***********************************************************************************/
|
|
/***********************************************************************************************************/
|
|
fun getTaskType() {
|
taskRepository.getTaskType(object : ResultCallBack<List<Domainitem>> {
|
override fun onSuccess(result: List<Domainitem>?) {
|
result?.let {
|
allTaskTypeList.value?.apply {
|
clear()
|
addAll(it)
|
}
|
allTaskTypeList.value = allTaskTypeList.value
|
}
|
}
|
|
override fun onFailure() {
|
}
|
})
|
}
|
|
fun getTopTask(type: Int = 1) {
|
taskRepository.getTopClassTaskList(type, object : ResultCallBack<ArrayList<TaskVo>> {
|
override fun onSuccess(result: ArrayList<TaskVo>?) {
|
result?.let {
|
allTopTaskList.clear()
|
allTopTaskList.addAll(it)
|
|
topTaskList.value?.apply {
|
clear()
|
addAll(it)
|
}
|
refreshTopTaskByTime(Date())
|
}
|
}
|
|
override fun onFailure() {
|
|
}
|
})
|
}
|
|
fun refreshTopTaskByDistrict(districtCode: String) {
|
topTaskList.value?.clear()
|
allTopTaskList.forEach {
|
if (it.districtcode == districtCode) {
|
topTaskList.value?.add(it)
|
}
|
}
|
if (topTaskList.value.isNullOrEmpty()) {
|
topTaskList.value?.add(TaskVo().apply {
|
name = NO_TOP_TASK
|
})
|
}
|
topTaskList.value = topTaskList.value
|
}
|
|
fun refreshTopTaskByTime(date: Date) {
|
topTaskList.value?.clear()
|
allTopTaskList.forEach {
|
if (it.starttime <= date && date <= it.endtime) {
|
topTaskList.value?.add(it)
|
}
|
}
|
if (topTaskList.value.isNullOrEmpty()) {
|
topTaskList.value?.add(TaskVo().apply {
|
name = NO_TOP_TASK
|
})
|
}
|
topTaskList.value = topTaskList.value
|
}
|
|
fun getSubTaskByDate(date: Date = Date(), resultCallBack: ResultCallBack<List<Subtask>>) {
|
val dateStr = DateFormatter.dateTimeFormat3.format(date)
|
subTaskRepository.getSubTaskByDate(dateStr, userId, resultCallBack)
|
}
|
|
/**
|
* 获取可选的问题类型(导出功能)
|
*/
|
fun getProblemType(sceneTypeId: Int = Constant.SCENE_TYPE11.toInt()) {
|
problemRepository.getProblemType(sceneTypeId, object : ResultCallBack<ArrayList<ProblemDetailVo>> {
|
override fun onSuccess(result: ArrayList<ProblemDetailVo>?) {
|
result?.apply {
|
problemTypeList.value?.clear()
|
problemDetailList.value?.clear()
|
problemMap.clear()
|
|
forEach {
|
problemTypeList.value?.add(ALL_PROBLEM)
|
problemTypeList.value?.add(it.problemTypeName)
|
if (!problemMap.containsKey(it.problemTypeName)) {
|
problemMap[it.problemTypeName] = mutableListOf()
|
}
|
problemMap[it.problemTypeName]?.add(ALL_PROBLEM)
|
problemMap[it.problemTypeName]?.addAll(it.problems)
|
}
|
|
problemTypeList.value = problemTypeList.value
|
}
|
}
|
|
override fun onFailure() {
|
}
|
})
|
}
|
|
/**
|
* 选择问题类型后
|
* 刷新问题详情列表
|
*/
|
fun onProblemTypeSelected(problemTypeName:String) {
|
problemMap[problemTypeName].let {
|
problemDetailList.value?.clear()
|
if (it == null) {
|
problemDetailList.value?.add(ALL_PROBLEM)
|
} else {
|
problemDetailList.value?.addAll(it)
|
}
|
problemDetailList.value = problemDetailList.value
|
}
|
}
|
|
/**
|
* 获取条件筛选后的子任务(导出功能)
|
*/
|
fun getSubTask(topTaskId: String, startTime: String, endTime: String) {
|
subTaskRepository.getByTopTaskAndDate(topTaskId,startTime,endTime, object : ResultCallBack<List<Subtask>> {
|
override fun onSuccess(result: List<Subtask>?) {
|
result?.let {
|
subTaskNameList.value?.clear()
|
it.forEach {s ->
|
subTaskNameList.value?.add(Pair(s.stguid, s.name))
|
}
|
subTaskNameList.value = subTaskNameList.value
|
}
|
}
|
|
override fun onFailure() {
|
|
}
|
})
|
}
|
|
// fun createSubtask(topClassTask: TaskVo) {
|
// val subtaskService: SubTaskService = mRetrofit.create(SubTaskService::class.java)
|
// val subtask = Subtask()
|
// var currentDayTask: TaskVo? = null
|
// val now = Calendar.getInstance()
|
// for (taskVo in mDayTaskList) {
|
// if (taskVo.tsguid == topClassTask.tguid) {
|
// val cal = Calendar.getInstance()
|
// cal.time = taskVo.starttime
|
// if (now[Calendar.YEAR] == cal[Calendar.YEAR] && now[Calendar.MONTH] == cal[Calendar.MONTH] && now[Calendar.DAY_OF_MONTH] == cal[Calendar.DAY_OF_MONTH]) {
|
// currentDayTask = taskVo
|
// break
|
// }
|
// }
|
// }
|
// if (currentDayTask == null) {
|
// currentDayTask = createDayTask(topClassTask)
|
// callPutDayTask(topClassTask, subtaskService, subtask, currentDayTask, now)
|
// } else {
|
// callPutSubtask(topClassTask, subtaskService, subtask, currentDayTask, now)
|
// }
|
// }
|
//
|
// private fun createDayTask(topClassTask: TaskVo): TaskVo? {
|
// val dayTask = topClassTask.clone()
|
// dayTask.tguid = UUIDGenerator.generate16ShortUUID()
|
// dayTask.tsguid = topClassTask.tguid
|
// dayTask.deadlinetype = null
|
// dayTask.extension1 = null
|
// dayTask.levelnum = null
|
// val cal = Calendar.getInstance()
|
// dayTask.settime = cal.time
|
// cal[Calendar.HOUR_OF_DAY] = 0
|
// cal[Calendar.MINUTE] = 0
|
// cal[Calendar.SECOND] = 0
|
// dayTask.starttime = cal.time
|
// cal[Calendar.HOUR_OF_DAY] = 23
|
// cal[Calendar.MINUTE] = 59
|
// cal[Calendar.SECOND] = 59
|
// dayTask.endtime = cal.time
|
// dayTask.plannerguid = application.currentUser.guid
|
// dayTask.plannerusername = application.currentUser.acountname
|
// dayTask.plannerrealname = application.currentUser.realname
|
// dayTask.t1stverifierguid = application.currentUser.guid
|
// dayTask.t1stverifierusername = application.currentUser.acountname
|
// dayTask.t1stverifierrealname = application.currentUser.realname
|
// val template = "%d月%d日%s无固定场景巡查任务"
|
// cal.time = dayTask.starttime
|
// val area = dayTask.cityname + dayTask.districtname
|
// dayTask.name = String.format(
|
// Locale.CHINA, template, cal[Calendar.MONTH] + 1,
|
// cal[Calendar.DAY_OF_MONTH], area
|
// )
|
// return dayTask
|
// }
|
//
|
// private fun callPutDayTask(
|
// topClassTask: TaskVo, subtaskService: SubTaskService,
|
// subtask: Subtask, currentDayTask: TaskVo, now: Calendar
|
// ) {
|
// val call: retrofit2.Call<ResponseBody> = mRetrofit.create(TaskService::class.java).putTask(currentDayTask.taskVo2Task())
|
// call.enqueue(object : retrofit2.Callback<ResponseBody?>() {
|
// fun onResponse(call: retrofit2.Call<ResponseBody>, response: retrofit2.Response<ResponseBody>) {
|
// if (response.body() != null) {
|
// Toast.makeText(getActivity(), "日任务创建成功。", Toast.LENGTH_SHORT).show()
|
// callPutSubtask(topClassTask, subtaskService, subtask, currentDayTask, now)
|
// } else if (response.errorBody() != null) {
|
// Toast.makeText(getActivity(), "日任务创建失败。", Toast.LENGTH_SHORT).show()
|
// }
|
// }
|
//
|
// fun onFailure(call: retrofit2.Call<ResponseBody>, t: Throwable) {
|
// Toast.makeText(getActivity(), "日任务创建失败。", Toast.LENGTH_SHORT).show()
|
// }
|
// })
|
// }
|
//
|
// private fun callPutSubtask(
|
// topClassTask: TaskVo, subtaskService: SubTaskService,
|
// subtask: Subtask, currentDayTask: TaskVo, now: Calendar
|
// ) {
|
// subtask.setStguid(UUIDGenerator.generate16ShortUUID())
|
// subtask.setTguid(topClassTask.tguid)
|
// subtask.setTsguid(currentDayTask.tguid)
|
// subtask.setTypeno(topClassTask.typeno)
|
// subtask.setType(topClassTask.typename)
|
// subtask.setProvincecode(topClassTask.provincecode)
|
// subtask.setProvincename(topClassTask.provincename)
|
// subtask.setCitycode(topClassTask.citycode)
|
// subtask.setCityname(topClassTask.cityname)
|
// subtask.setDistrictcode(topClassTask.districtcode)
|
// subtask.setDistrictname(topClassTask.districtname)
|
// subtask.setTowncode(topClassTask.towncode)
|
// subtask.setTownname(topClassTask.townname)
|
// val qb: QueryBuilder<Scense> = application.daoSession.scenseDao.queryBuilder()
|
// val scense: Scense
|
// scense = if (subtask.getTowncode() == null) {
|
// qb.where(ScenseDao.Properties.Provincecode.eq(subtask.getProvincecode()), ScenseDao.Properties.Citycode.eq(subtask.getCitycode()), ScenseDao.Properties.Districtcode.eq(subtask.getDistrictcode()), ScenseDao.Properties.Typeid.eq(Domain.SCENSETYPE_UNFIXED_SCENSE)).unique()
|
// } else {
|
// qb.where(
|
// ScenseDao.Properties.Provincecode.eq(subtask.getProvincecode()),
|
// ScenseDao.Properties.Citycode.eq(subtask.getCitycode()),
|
// ScenseDao.Properties.Districtcode.eq(subtask.getDistrictcode()),
|
// ScenseDao.Properties.Towncode.eq(subtask.getTowncode()),
|
// ScenseDao.Properties.Typeid.eq(Domain.SCENSETYPE_UNFIXED_SCENSE)
|
// ).unique()
|
// }
|
// subtask.setScenseid(scense.getGuid())
|
// subtask.setScensename(scense.getName())
|
// subtask.setDeploytime(now.time)
|
// subtask.setPlanstarttime(now.time)
|
// now[Calendar.HOUR_OF_DAY] = 23
|
// now[Calendar.MINUTE] = 59
|
// now[Calendar.SECOND] = 59
|
// subtask.setPlanendtime(now.time)
|
// val currentUser: Userinfo = application.currentUser
|
// subtask.setDeployerguid(currentUser.getGuid())
|
// subtask.setDeployerrealname(currentUser.getRealname())
|
// subtask.setDeployerusername(currentUser.getAcountname())
|
// subtask.setExecutorguids(currentUser.getGuid())
|
// subtask.setExecutorrealtimes(currentUser.getRealname())
|
// subtask.setExecutorusernames(currentUser.getAcountname())
|
// subtask.setStatus(Domain.TASK_STATUS_WAITING)
|
// val template = "%s%s的%s无固定场景巡查"
|
// val area: String
|
// area = if (subtask.getTownname() == null) {
|
// subtask.getCityname() + subtask.getDistrictname()
|
// } else {
|
// subtask.getCityname() + subtask.getDistrictname() + subtask.getTownname()
|
// }
|
// subtask.setName(
|
// java.lang.String.format(
|
// Locale.CHINA, template, DateFormatter.dateTimeFormat_month_2_minute.format(subtask.getPlanstarttime()), subtask.getExecutorrealtimes(), area
|
// )
|
// )
|
// val call: retrofit2.Call<ResponseBody> = subtaskService.putSubTask(subtask)
|
// call.enqueue(object : retrofit2.Callback<ResponseBody?>() {
|
// fun onResponse(call: retrofit2.Call<ResponseBody>, response: retrofit2.Response<ResponseBody>) {
|
// if (response.body() != null) {
|
// Toast.makeText(getActivity(), "子任务创建成功。", Toast.LENGTH_SHORT).show()
|
// showTurnToInspectionDialog(subtask)
|
// } else if (response.errorBody() != null) {
|
// Toast.makeText(getActivity(), "子任务创建失败。", Toast.LENGTH_SHORT).show()
|
// }
|
// }
|
//
|
// fun onFailure(call: retrofit2.Call<ResponseBody>, t: Throwable) {
|
// Toast.makeText(getActivity(), "接口调用失败。", Toast.LENGTH_SHORT).show()
|
// }
|
// })
|
// }
|
|
}
|