package com.xw.yunwei.ui.work.car.detail.operations.charge
|
|
import android.app.Application
|
import android.view.View
|
import androidx.core.os.bundleOf
|
import androidx.lifecycle.MutableLiveData
|
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.R
|
import com.xw.yunwei.model.CarModel
|
import com.xw.yunwei.model.ChargeRecordModel
|
import com.xw.yunwei.net.CommonRepository
|
import com.xw.yunwei.net.WorkRepository
|
import com.xw.yunwei.ui.work.car.detail.StandardDescriptionActivity
|
import okhttp3.MediaType.Companion.toMediaType
|
import okhttp3.MultipartBody
|
import okhttp3.RequestBody.Companion.asRequestBody
|
import org.koin.core.component.inject
|
import java.io.File
|
import kotlin.getValue
|
|
class ChargeCarVM(application: Application) : BaseViewModel(application) {
|
val workRepository: WorkRepository by inject()
|
val commonRepository: CommonRepository by inject()
|
|
var taskId = -1L // 任务id,标准任务进入使用
|
var carId = 0L
|
val carInfo: MutableLiveData<CarModel> = MutableLiveData()
|
val chargeRecord: MutableLiveData<ChargeRecordModel> = MutableLiveData()
|
val leftCharge = MutableLiveData("") // 剩余里程
|
|
lateinit var adapterNow: ImageSelectAdapter
|
lateinit var adapterHis: ImageSelectAdapter
|
lateinit var imageEventNow: ImageEventListener<FileSelectBean>
|
lateinit var imageEventHis: ImageEventListener<FileSelectBean>
|
val maxSize = 2
|
|
val onClick = View.OnClickListener {
|
when (it.id) {
|
R.id.viewDetail -> startActivity(
|
StandardDescriptionActivity::class.java,
|
bundleOf("type" to 6)
|
)
|
}
|
}
|
|
fun queryInfo() {
|
launchRequest {
|
workRepository.queryCarInfo(carId)?.let {
|
carInfo.postValue(it)
|
}
|
}
|
}
|
|
fun queryStatus() {
|
launchRequest {
|
workRepository.queryChargingStatus(carId)?.let {
|
chargeRecord.postValue(it)
|
}
|
}
|
}
|
|
fun startCharging(block: (Boolean) -> Unit) {
|
if (leftCharge.value.isNullOrEmpty()) {
|
ToastUtilCommon.showError("请输入剩余里程")
|
block(false)
|
return
|
}
|
if (adapterNow.data.isEmpty()) {
|
ToastUtilCommon.showError("请上传照片")
|
block(false)
|
return
|
}
|
showDialog("上传中...")
|
uploadFile(adapterNow.data, block) {
|
dismissDialog()
|
launchRequest("操作中...", error = { _, errMsg ->
|
ToastUtilCommon.showError(errMsg)
|
runOnMainThread { block(false) }
|
}) {
|
|
val map = mutableMapOf<String, Any?>()
|
map["battery"] = leftCharge.value
|
map["vehicleId"] = carId
|
map["chargingPicture"] = "${adapterNow.data.map { it.url }}"
|
if (taskId != -1L) { // 任务进入
|
map["taskId"] = taskId
|
}
|
workRepository.startCharging(map)
|
ToastUtilCommon.showSuc("操作成功")
|
if (taskId == -1L) {
|
runOnMainThread {
|
leftCharge.value = ""
|
adapterNow.setList(ArrayList())
|
block(true)
|
}
|
queryStatus()
|
} else {
|
finish()
|
}
|
}
|
}
|
}
|
|
fun stopCharging(block: (Boolean) -> Unit){
|
if (leftCharge.value.isNullOrEmpty()) {
|
ToastUtilCommon.showError("请输入剩余里程")
|
block(false)
|
return
|
}
|
if (adapterNow.data.isEmpty()) {
|
ToastUtilCommon.showError("请上传照片")
|
block(false)
|
return
|
}
|
showDialog("上传中...")
|
uploadFile(adapterNow.data, block) {
|
dismissDialog()
|
launchRequest("操作中...", error = { _, errMsg ->
|
ToastUtilCommon.showError(errMsg)
|
runOnMainThread { block(false) }
|
}) {
|
val map = mutableMapOf<String, Any?>()
|
map["endRemainingBattery"] = leftCharge.value
|
map["id"] = chargeRecord.value?.xpChargingRecord?.id
|
map["endChargingPicture"] = "${adapterNow.data.map { it.url }}"
|
if (taskId != -1L) { // 任务进入
|
map["taskId"] = taskId
|
}
|
workRepository.stopCharging(map)
|
ToastUtilCommon.showSuc("操作成功")
|
runOnMainThread { block(true) }
|
finish()
|
}
|
}
|
}
|
|
private fun uploadFile(files: List<FileSelectBean>,block: (Boolean) -> Unit, succ: () -> Unit) {
|
val result = files.find { it.url.isEmpty() }
|
if (result == null) {
|
succ()
|
} else {
|
launchRequest(showLoading = false, error = { _, errMsg ->
|
ToastUtilCommon.showError(errMsg)
|
dismissDialog()
|
runOnMainThread { block(false) }
|
}) {
|
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, block, succ)
|
}
|
}
|
}
|
}
|