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
package com.xw.yunwei.ui.work.car.detail.operations.clean
 
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.Constants.user
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 kotlin.getValue
 
class CleanCarVM(application: Application) : BaseViewModel(application) {
 
    val commonRepository: CommonRepository by inject()
    val workRepository: WorkRepository by inject()
 
    var carId = 0L
    val carInfo: MutableLiveData<CarModel> = MutableLiveData()
 
    lateinit var adapter: ImageSelectAdapter
    lateinit var imageEvent: ImageEventListener<FileSelectBean>
    val maxSize = 6
 
    val onClick = View.OnClickListener {
        when (it.id) {
            R.id.viewDetail -> startActivity(
                StandardDescriptionActivity::class.java,
                bundleOf("type" to 3)
            )
            R.id.submit-> submit()
        }
    }
 
    fun queryInfo() {
        launchRequest {
            workRepository.queryCarInfo(carId)?.let {
                carInfo.postValue(it)
            }
        }
    }
 
    private fun submit() {
        if (adapter.data.isEmpty()) {
            ToastUtilCommon.showError("请上传车身标识及清洁图片")
            return
        }
 
        val files = mutableListOf<FileSelectBean>()
        files.addAll(adapter.data)
 
        showDialog("上传中...")
        uploadFile(files) {
            dismissDialog()
 
            val map = mapOf(
                "operationsUserId" to user?.id,
                "vehicleId" to carInfo.value?.id,
                "taskImage" to GsonUtils.toJson(files.map { it.url }),
            )
            launchRequest(tips = "提交中...") {
                workRepository.cleanCar(map)
                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)
            }
        }
    }
 
}