package cn.flightfeather.thirdapp.module.task
|
|
import android.app.Activity
|
import android.app.Dialog
|
import android.arch.lifecycle.MutableLiveData
|
import android.arch.lifecycle.ViewModel
|
import cn.flightfeather.thirdapp.CommonApplication
|
import cn.flightfeather.thirdapp.bean.Monitorobjectversion
|
import cn.flightfeather.thirdapp.bean.Scense
|
import cn.flightfeather.thirdapp.bean.Subtask
|
import cn.flightfeather.thirdapp.bean.Task
|
import cn.flightfeather.thirdapp.bean.vo.TaskVo
|
import cn.flightfeather.thirdapp.common.net.ResultCallBack
|
import cn.flightfeather.thirdapp.model.event.TopTaskEvent
|
import cn.flightfeather.thirdapp.repository.SceneRepository
|
import cn.flightfeather.thirdapp.repository.TaskRepository
|
import cn.flightfeather.thirdapp.util.DateFormatter
|
import cn.flightfeather.thirdapp.util.DialogUtil
|
import cn.flightfeather.thirdapp.util.Domain
|
import cn.flightfeather.thirdapp.util.UUIDGenerator
|
import okhttp3.ResponseBody
|
import org.greenrobot.eventbus.EventBus
|
import org.jetbrains.anko.toast
|
import java.util.*
|
import kotlin.collections.ArrayList
|
|
/**
|
* @author riku
|
* Date: 2019/7/22
|
*/
|
open class NewSubTaskViewModel : ViewModel() {
|
val taskRepository = TaskRepository()
|
val sceneRepository = SceneRepository()
|
val application = CommonApplication.getInstance()
|
|
var displaySceneList = MutableLiveData<ArrayList<Scense>>().apply { value = ArrayList() }
|
|
var totalSceneList = MutableLiveData<ArrayList<Scense>>()
|
|
var sceneTypeList = ArrayList<String>()
|
//场景类型筛选序号
|
var selectedTypeIndex = 0
|
//是否监管筛选序号
|
var selectedInspectedIndex = 0
|
|
var topTaskList = MutableLiveData<ArrayList<TaskVo>>()
|
|
var selectedTopTask: TaskVo? = null
|
|
var todayTask: Task = Task()
|
|
val subTaskExecutor = SubTaskExecutor()
|
|
var movList = ArrayList<Monitorobjectversion>()
|
|
//选中的场景列表
|
var selectedSceneList = ArrayList<Scense>()
|
|
val selectedDisplaySceneList = ArrayList<Scense>()
|
|
//未选中的场景列表
|
var unSelectedSceneList = ArrayList<Scense>()
|
|
/**
|
* 获取总任务
|
*/
|
fun getTopClassTaskList(type: Int, activity: Activity? = null) {
|
selectedTypeIndex = 0
|
selectedInspectedIndex = 0
|
var dialog: Dialog? = null
|
activity?.let {
|
dialog = DialogUtil.createLoadingDialog(it, "")
|
}
|
taskRepository.getTopClassTaskList(type, object : ResultCallBack<ArrayList<TaskVo>> {
|
override fun onSuccess(result: ArrayList<TaskVo>?) {
|
// 1. 刷新一个总任务的下拉列表 ;2. 下拉列表选择事件,联网获取监管对象版本
|
result?.let {
|
topTaskList.value = it
|
}
|
dialog?.dismiss()
|
}
|
|
override fun onFailure() {
|
application.toast("顶层任务获取失败")
|
dialog?.dismiss()
|
}
|
|
})
|
}
|
|
/**
|
* 获取监管版本
|
*/
|
fun getMOVList(taskVo: TaskVo) {
|
taskRepository.getMOVList(taskVo.tguid, object : ResultCallBack<ArrayList<Monitorobjectversion>> {
|
override fun onSuccess(result: ArrayList<Monitorobjectversion>?) {
|
result?.let {
|
movList = it
|
}
|
}
|
|
override fun onFailure() {
|
application.toast("监管对象获取失败")
|
}
|
|
})
|
}
|
|
fun getLastTopClassTask(task: Task) {
|
taskRepository.getLastTopClassTask(task, object : ResultCallBack<Task> {
|
override fun onSuccess(result: Task?) {
|
result?.let {
|
getSceneByTask(it, 1)
|
}
|
}
|
|
override fun onFailure() {
|
}
|
|
})
|
}
|
|
fun getSceneByTask(task: Task, mode: Int) {
|
taskRepository.getSceneByTask(task, mode, object : ResultCallBack<ArrayList<Scense>> {
|
override fun onSuccess(result: ArrayList<Scense>?) {
|
result?.let {
|
when (mode) {
|
//模式0,适用于新建子任务
|
0 -> {
|
//结果已按照Index 属性递增排序
|
totalSceneList.value = it
|
getSceneType(it)
|
displaySceneList.value = it
|
}
|
//模式1,适用于新建总任务与修改总任务监管版本
|
1 -> {
|
selectedSceneList.clear()
|
selectedDisplaySceneList.clear()
|
unSelectedSceneList.clear()
|
|
it.forEach {s ->
|
if (s.monitorNum != 0) {
|
selectedSceneList.add(s)
|
selectedDisplaySceneList.add(s)
|
} else {
|
unSelectedSceneList.add(s)
|
}
|
}
|
selectedDisplaySceneList.sortByDescending {sc ->
|
sc.extension1
|
}
|
//结果已按照Index 属性递增排序
|
totalSceneList.value = it
|
getSceneType(it)
|
displaySceneList.value = it
|
}
|
}
|
}
|
}
|
|
override fun onFailure() {
|
application.toast("场景信息获取失败")
|
}
|
|
})
|
}
|
|
/**
|
* 根据所选场景类型及是否监管刷新场景
|
*/
|
fun refreshScene() {
|
//筛选场景类型
|
val tmp = ArrayList<Scense>()
|
if (selectedTypeIndex == 0) {
|
totalSceneList.value?.let { tmp.addAll(it) }
|
} else {
|
totalSceneList.value?.forEach {
|
if (it.type == sceneTypeList[selectedTypeIndex]){
|
tmp.add(it)
|
}
|
}
|
}
|
|
//筛选是否监管
|
val tmp1 = ArrayList<Scense>()
|
when (selectedInspectedIndex) {
|
//全部
|
0 -> tmp1.addAll(tmp)
|
//未监管
|
1 -> tmp.forEach {
|
if (it.inspectedNum < it.monitorNum){
|
tmp1.add(it)
|
}
|
}
|
//已监管
|
2 -> tmp.forEach {
|
if (it.inspectedNum >= it.monitorNum){
|
tmp1.add(it)
|
}
|
}
|
}
|
//已选场景中的显示也按照这两个条件作筛选
|
selectedDisplaySceneList.clear()
|
tmp1.forEach {
|
if (selectedSceneList.contains(it)) {
|
selectedDisplaySceneList.add(it)
|
}
|
}
|
selectedDisplaySceneList.sortByDescending {
|
it.extension1
|
}
|
|
displaySceneList.value = tmp1
|
}
|
|
/**
|
* 更换展示的场景的类型后,删除已选场景
|
*/
|
fun deleteSelectedScene() :ArrayList<Scense>{
|
val result = ArrayList<Scense>()
|
displaySceneList.value?.forEach {
|
if (!selectedSceneList.contains(it)) {
|
result.add(it)
|
}
|
}
|
return result
|
}
|
|
/**
|
* 判断日任务是否已创建
|
*/
|
fun hasDayTask(): Boolean {
|
val today = DateFormatter.dateFormat.format(todayTask.starttime)
|
selectedTopTask?.daytaskList?.forEach {
|
val startTime = DateFormatter.dateFormat.format(it.starttime)
|
if (today == startTime) {
|
todayTask = it.taskVo2Task()//将日任务赋值
|
return true//今日任务已创建,返回
|
}
|
}
|
return false
|
}
|
|
/**
|
* 上传或更新日任务
|
*/
|
fun updateDayTask() {
|
|
// fixme: 2019/7/26 目前日任务的执行人员只在当天第一次的时候生成,之后不更新
|
val today = DateFormatter.dateFormat.format(todayTask.starttime)
|
|
var area = selectedTopTask?.cityname + selectedTopTask?.districtname
|
area += if (selectedTopTask?.extension1 == Domain.DOMAIN_SUITABLE_TOWN) {
|
selectedTopTask?.townname
|
} else {
|
""
|
}
|
todayTask.apply {
|
name = "$today$area${selectedTopTask?.typename}任务"
|
settime = Date()
|
}
|
|
taskRepository.putTask(todayTask, object : ResultCallBack<ResponseBody> {
|
override fun onSuccess(result: ResponseBody?) {
|
application.toast("日任务信息上传成功")
|
}
|
|
override fun onFailure() {
|
application.toast("日任务信息上传失败,请重试。")
|
}
|
|
})
|
}
|
|
/**
|
* 上传子任务
|
*/
|
fun updateSubTask() {
|
val subTaskList = ArrayList<Subtask>()
|
selectedSceneList.forEach {
|
Subtask().apply {
|
stguid = UUIDGenerator.generate16ShortUUID()
|
tguid = selectedTopTask?.tguid
|
if (selectedTopTask?.levelnum == Domain.TASK_LEVEL_2) {
|
tsguid = todayTask.tguid
|
}
|
provincecode = selectedTopTask?.provincecode
|
provincename = selectedTopTask?.provincename
|
citycode = selectedTopTask?.citycode
|
cityname = selectedTopTask?.cityname
|
districtcode = selectedTopTask?.districtcode
|
districtname = selectedTopTask?.districtname
|
towncode = selectedTopTask?.towncode
|
townname = selectedTopTask?.townname
|
typeno = selectedTopTask?.typeno
|
type = selectedTopTask?.typename
|
scenseid = it.guid
|
scensename = it.name
|
planstarttime = todayTask.starttime
|
planendtime = todayTask.endtime
|
scenseaddress = it.location
|
deployerguid = application.currentUser.guid
|
deployerusername = application.currentUser.acountname
|
deployerrealname = application.currentUser.realname
|
executorguids = subTaskExecutor.executorGuids
|
executorusernames = subTaskExecutor.executorUserNames
|
executorrealtimes = subTaskExecutor.executorRealNames
|
name = it.name + todayTask.typename
|
status = Domain.TASK_STATUS_WAITING
|
}.also {
|
subTaskList.add(it)
|
}
|
}
|
|
taskRepository.putSubTask(subTaskList, object : ResultCallBack<ResponseBody> {
|
override fun onSuccess(result: ResponseBody?) {
|
application.toast("子任务信息上传成功")
|
}
|
|
override fun onFailure() {
|
application.toast("子任务信息上传失败,请重试")
|
}
|
|
})
|
}
|
|
/**
|
* 更新监管版本中的监管次数
|
*/
|
fun updateMov(activity: Activity?) {
|
val tempList = ArrayList<Monitorobjectversion>()
|
selectedSceneList.forEach {s ->
|
movList.forEach m@{m ->
|
if (s.guid == m.sguid) {
|
tempList.add(m.copy())
|
return@m
|
}
|
}
|
}
|
|
tempList.forEach {
|
it.extension1 = it.extension1?.toInt()?.plus(1)?.toString() ?: "1"
|
}
|
|
taskRepository.updateMOV(tempList, object : ResultCallBack<ResponseBody> {
|
override fun onSuccess(result: ResponseBody?) {
|
application.toast("监管对象版本更新成功")
|
getTopClassTaskList(1, activity)
|
}
|
|
override fun onFailure() {
|
application.toast("监管对象版本更新失败")
|
}
|
|
})
|
}
|
|
/**
|
* 批量更新场景信息
|
*/
|
fun updateSceneList(sceneList: ArrayList<Scense>?) {
|
sceneList?.let {
|
sceneRepository.updateSceneList(it, object : ResultCallBack<ResponseBody> {
|
override fun onSuccess(result: ResponseBody?) {
|
application.toast("场景信息更新成功")
|
}
|
|
override fun onFailure() {
|
application.toast("场景信息更新失败")
|
}
|
|
})
|
}
|
}
|
|
/**
|
* 上传总任务
|
*/
|
fun putMonthTaskAndMOV(task: Task?, movList: ArrayList<Monitorobjectversion>) {
|
task?.let {
|
taskRepository.putTask(it, object : ResultCallBack<ResponseBody> {
|
override fun onSuccess(result: ResponseBody?) {
|
putMOV(it, movList)
|
}
|
|
override fun onFailure() {
|
|
}
|
|
})
|
}
|
}
|
|
/**
|
* 上传监管版本
|
*/
|
fun putMOV(task: Task, movList: ArrayList<Monitorobjectversion>) {
|
taskRepository.putMOV(movList, object : ResultCallBack<ResponseBody> {
|
override fun onSuccess(result: ResponseBody?) {
|
application.toast("上传成功")
|
|
EventBus.getDefault().post(TopTaskEvent(task))
|
}
|
|
override fun onFailure() {
|
}
|
|
})
|
}
|
|
fun generateTodayTask() {
|
selectedTopTask?.taskVo2Task()?.let {
|
todayTask = it.apply {
|
tguid = UUIDGenerator.generate16ShortUUID()
|
tsguid = selectedTopTask?.tguid
|
levelnum = null
|
val cal = Calendar.getInstance()
|
cal.time = Date()
|
cal.set(Calendar.HOUR_OF_DAY, 0)
|
cal.set(Calendar.MINUTE, 0)
|
cal.set(Calendar.SECOND, 0)
|
starttime = cal.time
|
cal.set(Calendar.HOUR_OF_DAY, 23)
|
cal.set(Calendar.MINUTE, 59)
|
cal.set(Calendar.SECOND, 59)
|
endtime = cal.time
|
plannerguid = application.currentUser.guid
|
plannerusername = application.currentUser.acountname
|
plannerrealname = application.currentUser.realname
|
}
|
}
|
}
|
|
fun getSceneType(s: ArrayList<Scense>) {
|
sceneTypeList.clear()
|
sceneTypeList.add("所有场景")
|
s.forEach {
|
if (!sceneTypeList.contains(it.type)) {
|
sceneTypeList.add(it.type)
|
}
|
}
|
}
|
|
data class SubTaskExecutor(
|
var executorGuids: String? = null,
|
var executorUserNames: String? = null,
|
var executorRealNames: String? = null
|
)
|
}
|