package com.xw.yunwei.ui.task.normal import android.app.Application import android.content.Context import android.util.Log import android.view.View import androidx.core.os.bundleOf import androidx.lifecycle.MutableLiveData import androidx.lifecycle.map import com.amap.api.location.AMapLocation import com.blankj.utilcode.util.GsonUtils import com.xw.common.base.BaseViewModel import com.xw.common.base.FileSelectBean import com.xw.common.base.ImageEventListener import com.xw.common.base.ImageSelectAdapter import com.xw.common.utils.ToastUtilCommon import com.xw.yunwei.Constants import com.xw.yunwei.Constants.user import com.xw.yunwei.R import com.xw.yunwei.model.TaskNormalChargeModel import com.xw.yunwei.model.TaskNormalCheckModel import com.xw.yunwei.model.TaskNormalCleanModel import com.xw.yunwei.model.TaskNormalMaintainModel import com.xw.yunwei.model.TaskNormalModel import com.xw.yunwei.model.TaskNormalRepairModel import com.xw.yunwei.net.CommonRepository import com.xw.yunwei.net.TaskRepository import com.xw.yunwei.net.WorkRepository import com.xw.yunwei.ui.dialog.ApplyForReassignReasonDialog import com.xw.yunwei.ui.work.car.detail.StandardDescriptionActivity import com.xw.yunwei.ui.work.car.detail.operations.charge.ChargeCarActivity import com.xw.yunwei.ui.work.car.detail.operations.check.CheckCarActivity import com.xw.yunwei.ui.work.car.detail.operations.maintain.MaintainCarActivity import com.xw.yunwei.ui.work.car.detail.operations.repair.RepairCarActivity import okhttp3.MediaType.Companion.toMediaType import okhttp3.MultipartBody import okhttp3.RequestBody.Companion.asRequestBody import org.koin.core.component.inject import java.io.File class NormalTaskDetailVM(application: Application) : BaseViewModel(application) { val taskRepository: TaskRepository by inject() val workRepository: WorkRepository by inject() val commonRepository: CommonRepository by inject() var location: AMapLocation? = null var taskId = 0L val taskDetail: MutableLiveData = MutableLiveData() val title = taskDetail.map { if (it.status == 1) "待处理" else if (it.status == 2) "已处理" else "" } val levelId = taskDetail.map { when (it.taskUrgencyLevel) { 0 -> R.mipmap.ic_accident_one 1 -> R.mipmap.ic_accident_two 2 -> R.mipmap.ic_accident_three 3 -> R.mipmap.ic_accident_four else -> R.mipmap.ic_accident_one } } val btnDoingAction = MutableLiveData("") val showDoingBtn = MutableLiveData(true) // 显示按钮 val showDoingSlide = MutableLiveData(false) // 显示滑块 val isRepair = MutableLiveData(false) // 是否已送修 val taskDescription = MutableLiveData("") // 完成任务情况 /*可编辑*/ lateinit var adapterCanEdit: ImageSelectAdapter // 只有洗车和(保养/年检/保险) lateinit var imageEventCanEdit: ImageEventListener val maxSize = 6 /*仅查看*/ val adapters = mutableListOf() val imageEvents = mutableListOf>() val chargeModel: MutableLiveData = MutableLiveData() // 充电 val cleanModel: MutableLiveData = MutableLiveData() // 洗车 val checkModel: MutableLiveData = MutableLiveData() // 检测 val maintainModel: MutableLiveData = MutableLiveData() // 整备 val repairModel: MutableLiveData = MutableLiveData() // 维修 val onClick = View.OnClickListener { when (it.id) { R.id.viewDetail, R.id.viewDetail1 -> { taskDetail.value?.let { val type = when (it.taskTypeId) { "1" -> 7 // 车辆检测 "2" -> 6 // 开始充电 "4" -> 3 // 车身标识及清洁说明 "6" -> 10 // 保养 "7" -> 8 // 保险 "8" -> 9 //年检 "9" -> 11 // 车辆运营资质 else -> null } type?.let { startActivity( StandardDescriptionActivity::class.java, bundleOf("type" to type) ) } } } R.id.submit -> submit() } } fun queryDetail() { launchRequest { Log.e(TAG, "queryDetail: $taskId") taskRepository.vehicleRoutineDetail("$taskId")?.let { runOnMainThread { if (taskDetail.value == null || taskDetail.value!!.status != it.status) { taskDetail.value = it } if (it.status == 1) { // 待处理 queryDoingTaskStatusByType() } else if (it.status == 2) { // 已处理 queryFinishTaskByType() } } } } } /*查询进行中任务状态*/ fun queryDoingTaskStatusByType() { taskDetail.value?.let { launchRequest { when (it.taskTypeId) { "2" -> { // 充电 taskRepository.chargingDetail("$taskId")?.let { chargeModel.postValue(it) } } "5" -> { // 维修 taskRepository.repairDetail("$taskId")?.let { repairModel.postValue(it) } } } } } } /*查询已完成任务的具体子详情*/ fun queryFinishTaskByType() { taskDetail.value?.let { launchRequest { when (it.taskTypeId) { "1" -> { // 检测 taskRepository.detectionDetail("$taskId")?.let { checkModel.postValue(it) } } "2" -> { // 充电 taskRepository.chargingDetail("$taskId")?.let { chargeModel.postValue(it) } } "3" -> { // 整备 taskRepository.preparationDetail("$taskId")?.let { maintainModel.postValue(it) } } "4" -> { // 洗车 taskRepository.cleanDetail("$taskId")?.let { cleanModel.postValue(it) } } "5" -> { // 维修 taskRepository.repairDetail("$taskId")?.let { repairModel.postValue(it) } } } } } } private fun submit() { taskDetail.value?.let { when (it.taskTypeId) { "1" -> { // 车辆检测 startActivity( CheckCarActivity::class.java, bundleOf("carId" to (it.vehicleId ?: 0L), "taskId" to (it.id ?: 0L)) ) } "2" -> { // 开始充电 startActivity( ChargeCarActivity::class.java, bundleOf("carId" to (it.vehicleId ?: 0L), "taskId" to (it.id ?: 0L)) ) } "3" -> { // 开始整备 startActivity( MaintainCarActivity::class.java, bundleOf("carId" to (it.vehicleId ?: 0L), "taskId" to (it.id ?: 0L)) ) } "4" -> { // 完成洗车任务 cleanCar() } "5" -> { // 去送修/取回 startActivity( RepairCarActivity::class.java, bundleOf("carId" to (it.vehicleId ?: 0L), "taskId" to (it.id ?: 0L)) ) } "6", "7", "8", "9" -> { // 完成保养 完成续保 完成年检 车辆运营资质到期 saveBy() } } } } private fun cleanCar() { if (adapterCanEdit.data.isEmpty()) { ToastUtilCommon.showError("请先上传车身清洁照片") return } val files = mutableListOf() files.addAll(adapterCanEdit.data) showDialog("上传中...") uploadFile(files) { dismissDialog() val map = mapOf( "operationsUserId" to user?.id, "vehicleId" to taskDetail.value?.vehicleId, "taskImage" to GsonUtils.toJson(files.map { it.url }), "taskId" to taskDetail.value?.id ) launchRequest(tips = "提交中...") { workRepository.cleanCar(map) ToastUtilCommon.showSuc("提交成功") queryDetail() } } } /*完成保养/保险/年检*/ private fun saveBy() { if (taskDescription.value.isNullOrEmpty()) { ToastUtilCommon.showError("请录入完成任务情况说明") return } if (adapterCanEdit.data.isEmpty()) { ToastUtilCommon.showError("请先上传完成任务情况图片") return } val files = mutableListOf() files.addAll(adapterCanEdit.data) showDialog("上传中...") uploadFile(files) { dismissDialog() val map = mapOf( "taskDescription" to taskDescription.value, "taskImage" to GsonUtils.toJson(files.map { it.url }), "id" to taskDetail.value?.id ) launchRequest(tips = "提交中...") { taskRepository.saveRoutineDetail(map) ToastUtilCommon.showSuc("提交成功") queryDetail() } } } private fun uploadFile(files: List, succ: () -> Unit) { val result = files.find { it.url.isEmpty() } if (result == null) { succ() } else { launchRequest(showLoading = false, error = { _, errMsg -> ToastUtilCommon.showError(errMsg) dismissDialog() }) { val file = File(result.localPath) val fileRequestBody = file.asRequestBody("image/jpg".toMediaType()) val mBuilder = MultipartBody.Builder() mBuilder.addFormDataPart("file", file.name, fileRequestBody) mBuilder.setType(MultipartBody.FORM) val data = commonRepository.uploadFile(mBuilder.build()) result.url = GsonUtils.toJson(data) uploadFile(files, succ) } } } //显示改派弹窗 fun showApplyForReassignDialog(context: Context) { ApplyForReassignReasonDialog.show( context, Constants.reasons, ) { position, input -> } } }