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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
package com.xw.yunwei.ui.work.car.detail.dispatch
 
import android.annotation.SuppressLint
import com.xw.common.base.BaseFragmentNoVM
import com.xw.common.custom.SlideButtonView
import com.xw.common.custom.SlideButtonView.Companion.DIRECTION_LEFT
import com.xw.common.custom.SlideButtonView.Companion.DIRECTION_RIGHT
import com.xw.common.utils.BindUtils.getUrl
import com.xw.common.utils.BindUtils.getResColor
import com.xw.common.utils.ToastUtilCommon
import com.xw.common.viewAdapter.ImageDefault
import com.xw.common.viewAdapter.ViewAdapter
import com.xw.yunwei.R
import com.xw.yunwei.databinding.FragmentCarDispatchBinding
import com.xw.yunwei.model.CarModel
import com.xw.yunwei.ui.work.car.detail.CarDetailActivity
 
/**
 * 车辆调度
 */
class DispatchFragment : BaseFragmentNoVM<FragmentCarDispatchBinding>() {
 
    val viewModel by lazy { (requireActivity() as CarDetailActivity).viewModel }
 
    override fun init() {
        super.init()
        binding.viewModel = viewModel
        binding.lifecycleOwner = this
    }
 
    override fun setObservable() {
        super.setObservable()
        viewModel.carInfo.observe(this) {
            initBasicInfo(it)
            initSlideView(it)
        }
    }
 
    override fun setListener() {
        super.setListener()
        with(binding.slideView1) {
            setOnSlideCompleteListener {
                val carInfo = viewModel.carInfo.value
                carInfo?.let { carInfo ->
                    val setStatus = if (carInfo.operatingStatus == 1) 3 else 1
                    val map = mutableMapOf<String, Any?>()
                    map["vehicleId"] = carInfo.id // 车辆ID
                    map["departureStatus"] = setStatus // 发车状态 1=发车 3=收车
                    viewModel.vehicleDispatchDeparture(map, {
                        binding.slideView1.animateReset()
                    }) {
                        carInfo.operatingStatus = setStatus
                        if (getSlideDirection() == DIRECTION_RIGHT) {
                            resetSlideView(this, DIRECTION_LEFT, "左滑收车")
                        } else if (getSlideDirection() == DIRECTION_LEFT) {
                            resetSlideView(this, DIRECTION_RIGHT, "右滑发车")
                        }
                    }
                }
            }
        }
        with(binding.slideView2) {
            setOnSlideCompleteListener {
                val carInfo = viewModel.carInfo.value
                carInfo?.let { carInfo ->
                    val setStatus = if (carInfo.acceptOrTestStatus == 1) 2 else 1
                    val map = mutableMapOf<String, Any?>()
                    map["vehicleId"] = carInfo.id // 车辆ID
                    map["acceptOrTest"] = carInfo.acceptOrTest // 当前模式 1接单 2测试
                    map["acceptOrTestStatus"] = setStatus // 模式状态 1开始接单/开始测试 2停止接单/停止测试
                    viewModel.vehicleDispatchAccept(map, {
                        binding.slideView2.animateReset()
                    }) {
                        carInfo.acceptOrTestStatus = setStatus
                        if (getSlideDirection() == DIRECTION_RIGHT) {
                            val text = if (carInfo.acceptOrTest == 1) "左滑关闭接单" else "左滑关闭测试"
                            resetSlideView(this, DIRECTION_LEFT, text)
                        } else if (getSlideDirection() == DIRECTION_LEFT) {
                            val text = if (carInfo.acceptOrTest == 1) "右滑开始接单" else "右滑开始测试"
                            resetSlideView(this, DIRECTION_RIGHT, text)
                        }
                    }
                }
            }
        }
 
        binding.takeOrders.setOnClickListener {
            viewModel.carInfo.value?.let {
                if (it.acceptOrTest != 1) {
                    val map = mutableMapOf<String, Any?>()
                    map["vehicleId"] = it.id // 车辆ID
                    map["acceptOrTest"] = 1 // 当前模式 1接单 2测试
                    map["acceptOrTestStatus"] = 1 // 模式状态 1开始接单/开始测试 2停止接单/停止测试
                    viewModel.vehicleDispatchAccept(map, {
                        binding.slideView2.animateReset()
                    }) {
                        it.acceptOrTest = 1
                        it.acceptOrTestStatus = 1
                        initSlideView(it)
                    }
                }
            }
        }
        binding.test.setOnClickListener {
            viewModel.carInfo.value?.let {
                if (it.acceptOrTest != 2) {
                    val map = mutableMapOf<String, Any?>()
                    map["vehicleId"] = it.id // 车辆ID
                    map["acceptOrTest"] = 2 // 当前模式 1接单 2测试
                    map["acceptOrTestStatus"] = 1 // 模式状态 1开始接单/开始测试 2停止接单/停止测试
                    viewModel.vehicleDispatchAccept(map, {
                        binding.slideView2.animateReset()
                    }) {
                        it.acceptOrTest = 2
                        it.acceptOrTestStatus = 1
                        initSlideView(it)
                    }
                }
            }
        }
 
        binding.unlockDoor.setOnClickListener { viewModel.unlockByType(1) }
        binding.unlockBox.setOnClickListener { viewModel.unlockByType(2) }
    }
 
    private fun resetSlideView(slideView: SlideButtonView, direction: Int, text: String) {
        if (direction == DIRECTION_RIGHT) { // 右滑模式
            slideView.setThumbDrawable(com.xw.common.R.mipmap.ic_slide_r)
            slideView.setSlideTextColor(getResColor(com.xw.common.R.color.blue_5))
            slideView.setSlideBackgroundColor(getResColor(com.xw.common.R.color.blue_1))
            slideView.setSlideText(text)
            slideView.setSlideDirection(direction)
        } else if (direction == DIRECTION_LEFT) { // 左滑模式
            slideView.setThumbDrawable(com.xw.common.R.mipmap.ic_slide_l)
            slideView.setSlideTextColor(getResColor(com.xw.common.R.color.white))
            slideView.setSlideBackgroundColor(getResColor(com.xw.common.R.color.orange_5))
            slideView.setSlideText(text)
            slideView.setSlideDirection(direction)
        }
    }
 
    @SuppressLint("SetTextI18n")
    private fun initBasicInfo(it: CarModel) {
        binding.batteryLife.text = "${it.mileageRange?.toInt()}km"
        binding.batteryLife.setTextColor(
            com.xw.common.custom.BatteryView.getBatteryColor(
                it.currentElectricity ?: 0
            )
        )
        binding.batteryView.setLevel(it.currentElectricity ?: 0)
        var url = ""
        try {
            url = it.vehiclePictures?.getUrl() ?: ""
        } catch (e: Exception) {
        }
        ViewAdapter.loadImage(binding.icon, ImageDefault(url, R.mipmap.img_work_car1))
    }
 
    private fun initSlideView(it: CarModel) {
        if (it.acceptOrTest == 1) {
            binding.takeOrders.setBackgroundResource(R.drawable.shape_white_bg_4)
            binding.test.setBackgroundResource(com.xw.common.R.color.color_transparent)
            if (it.acceptOrTestStatus == 1) {
                resetSlideView(binding.slideView2, DIRECTION_RIGHT, "右滑开始接单")
            } else {
                resetSlideView(binding.slideView2, DIRECTION_LEFT, "左滑关闭接单")
            }
 
        } else if (it.acceptOrTest == 2) {
            binding.test.setBackgroundResource(R.drawable.shape_white_bg_4)
            binding.takeOrders.setBackgroundResource(com.xw.common.R.color.color_transparent)
            if (it.acceptOrTestStatus == 1) {
                resetSlideView(binding.slideView2, DIRECTION_RIGHT, "右滑开始测试")
            } else {
                resetSlideView(binding.slideView2, DIRECTION_LEFT, "左滑关闭测试")
            }
        }
 
        if (it.operatingStatus == 1) {
            resetSlideView(binding.slideView1, DIRECTION_LEFT, "左滑收车")
        } else {
            resetSlideView(binding.slideView1, DIRECTION_RIGHT, "右滑发车")
        }
    }
}