18034727885
2026-04-14 370014cbb9ec1ef64e7e42bb4f9a12671461d8e4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
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)
            }
        }
    }
}