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
package com.xw.yunwei.ui.work.car.detail.operations.maintain
 
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.MaintainRecordModel
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 java.math.BigDecimal
import kotlin.getValue
 
class MaintainCarVM(application: Application) : BaseViewModel(application) {
 
    val commonRepository: CommonRepository by inject()
    val workRepository: WorkRepository by inject()
    lateinit var requestModel: MaintainRecordModel
 
    var taskId = -1L
    var carId = 0L
    val carInfo: MutableLiveData<CarModel> = MutableLiveData()
 
    val adaptersName = listOf("大灯情况", "转向灯情况", "刹车灯情况", "雾灯情况", "舱内清洁及消毒")
    val adapters = mutableListOf<ImageSelectAdapter>()
    val imageEvents = mutableListOf<ImageEventListener<FileSelectBean>>()
    val maxSizes = listOf(2, 2, 2, 2, 2) // 先默认每个都是最大9张
    var operateIndex = -1
 
    val lt = MutableLiveData("2.5")
    val lb = MutableLiveData("2.5")
    val rt = MutableLiveData("2.5")
    val rb = MutableLiveData("2.5")
 
    val onClick = View.OnClickListener {
        when (it.id) {
            R.id.ltc -> lt.cut()
            R.id.lta -> lt.add()
            R.id.lbc -> lb.cut()
            R.id.lba -> lb.add()
            R.id.rtc -> rt.cut()
            R.id.rta -> rt.add()
            R.id.rbc -> rb.cut()
            R.id.rba -> rb.add()
            R.id.viewDetail -> startActivity(
                StandardDescriptionActivity::class.java,
                bundleOf("type" to 1)
            )
            R.id.viewDetail1 -> startActivity(
                StandardDescriptionActivity::class.java,
                bundleOf("type" to 2)
            )
            R.id.viewDetail2 -> startActivity(
                StandardDescriptionActivity::class.java,
                bundleOf("type" to 4)
            )
            R.id.submit-> submit()
        }
    }
 
    fun queryInfo() {
        launchRequest {
            workRepository.queryCarInfo(carId)?.let {
                carInfo.postValue(it)
            }
        }
    }
 
    fun submit() {
        adapters.forEachIndexed { index, adapter ->
            if (adapter.data.isEmpty()) {
                ToastUtilCommon.showError("请上传${adaptersName[index]}照片")
                return
            }
        }
 
        val files = mutableListOf<FileSelectBean>()
        adapters.forEach { files.addAll(it.data) }
 
        showDialog("上传中...")
        uploadFile(files) {
            dismissDialog()
            requestModel.headLight = "${adapters[0].data.map { it.url }}"
            requestModel.turnSignal = "${adapters[1].data.map { it.url }}"
            requestModel.brakeLight = "${adapters[2].data.map { it.url }}"
            requestModel.fogLight = "${adapters[3].data.map { it.url }}"
            requestModel.cabinCleaning = "${adapters[4].data.map { it.url }}"
 
            if (taskId != -1L) {
                requestModel.taskId = taskId
            }
            launchRequest(tips = "提交中...") {
                workRepository.savePreparation(requestModel)
                ToastUtilCommon.showSuc("整备结果提交成功")
                finish()
            }
        }
    }
 
    private fun uploadFile(files: List<FileSelectBean>, 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 MutableLiveData<String>.cut() {
        val current = value?.toBigDecimal() ?: BigDecimal.ZERO
        if (current <= BigDecimal.valueOf(1.5)) {
            ToastUtilCommon.show("不能再减了")
        } else {
            value = current.subtract(BigDecimal("0.1")).toString()
        }
    }
 
    fun MutableLiveData<String>.add() {
        val current = value?.toBigDecimal() ?: BigDecimal.ZERO
        if (current >= BigDecimal.valueOf(3.5)) {
            ToastUtilCommon.show("不能再加了")
        } else {
            value = current.add(BigDecimal("0.1")).toString()
        }
    }
 
}