package com.xw.yunwei.ui.task.normal import android.annotation.SuppressLint import android.net.Uri import android.os.Bundle import androidx.core.os.bundleOf import androidx.core.view.isVisible import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.location.AMapLocation import com.amap.api.maps.model.LatLng import com.blankj.utilcode.util.UriUtils import com.luck.picture.lib.basic.PictureSelector import com.luck.picture.lib.config.PictureMimeType import com.luck.picture.lib.config.SelectMimeType import com.luck.picture.lib.entity.LocalMedia import com.luck.picture.lib.interfaces.OnResultCallbackListener import com.xw.common.CommonDialog import com.xw.common.base.BaseActivity import com.xw.common.base.FileSelectBean import com.xw.common.base.ImageEventListener import com.xw.common.base.ImageSelectAdapter import com.xw.common.base.ShowImgListDialog import com.xw.common.custom.BatteryView.Companion.getBatteryColorByBatteryLife import com.xw.common.utils.BindUtils.getUrls import com.xw.common.utils.GlideEngine import com.xw.common.utils.GpsHelper import com.xw.common.utils.GpsHelper.Companion.navigate import com.xw.common.utils.PictureCompressEngine import com.xw.common.utils.ToastUtilCommon import com.xw.yunwei.BR import com.xw.yunwei.databinding.ActivityNormalTaskDetailBinding import com.xw.yunwei.model.TaskNormalModel import com.xw.yunwei.ui.work.car.detail.operations.charge.ChargeCarActivity import java.util.ArrayList /** * 任务详情 待处理 * * 日常检查 -> 工作台对应业务 * 车辆充电 1:充电中 2:结束充电 * 车辆整备 -> 工作台对应业务 * 洗车 * 维修 1:送修 -> 工作台对应业务 2:取回 * 保养 * 年检 * 保险 * 车辆运营资质到期 * * 任务详情 已处理 * 检测 * 车辆充电 * 车辆整备 * 洗车 * 维修 * 保养 * 年检 * 保险 * 车辆运营资质到期 */ class NormalTaskDetailActivity: BaseActivity(), GpsHelper.OnMapLocation{ override fun getBindingVariable(): Int = BR.viewModel // var gpsHelper: GpsHelper? = null override fun myCreate(savedInstanceState: Bundle?) { super.myCreate(savedInstanceState) // gpsHelper = GpsHelper( // this, // this, // isOnceLocation = true, // isAutomatic = true, // savedInstanceState = savedInstanceState // ) // lifecycle.addObserver(gpsHelper!!) } override fun init() { super.init() viewModel.taskId = intent.getLongExtra("taskId", 0L) } var isGetPictureBack = false override fun onResume() { super.onResume() if (isGetPictureBack) { isGetPictureBack = false return } viewModel.queryDetail() } @SuppressLint("SetTextI18n") override fun setObservable() { super.setObservable() viewModel.taskDetail.observe(this) { initAdapter(it) viewModel.btnDoingAction.value = when (it.taskTypeId) { "1" -> "开始检查" "2" -> "开始充电" "3" -> "开始整备" "4" -> "完成洗车任务" "5" -> "去送修" "6" -> "完成保养" "7" -> "完成续保" "8" -> "完成年检" "9" -> "完成任务" else -> "" } binding.layoutDoing.viewDetail.isVisible = it.taskTypeId !in arrayOf("3", "5") binding.layoutFinish.viewDetail1.isVisible = it.taskTypeId !in arrayOf("3", "5") it.taskImage?.getUrls()?.let { viewModel.adapters.getOrNull(0)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } } viewModel.chargeModel.observe(this) { if (viewModel.taskDetail.value?.status == 1) { // 待处理 if (it.startOperationsUserId == null) { // 未充电 viewModel.showDoingBtn.value = true viewModel.showDoingSlide.value = false } else { // 已充电 viewModel.showDoingBtn.value = false viewModel.showDoingSlide.value = true binding.layoutDoing.chargeLayout.batteryViewHis.setBatteryLife(it.startRemainingBattery ?: 0) binding.layoutDoing.chargeLayout.batteryLifeHis.text = "${it.startRemainingBattery}km" binding.layoutDoing.chargeLayout.batteryLifeHis.setTextColor(getBatteryColorByBatteryLife(it.startRemainingBattery ?: 0)) } } else if (viewModel.taskDetail.value?.status == 2) { // 已处理 binding.layoutFinish.chargeLayout.batteryView1.setBatteryLife(it.startRemainingBattery ?: 0) binding.layoutFinish.chargeLayout.batteryView2.setBatteryLife(it.endRemainingBattery ?: 0) binding.layoutFinish.chargeLayout.batteryLife1.text = "${it.startRemainingBattery ?: 0}km" binding.layoutFinish.chargeLayout.batteryLife2.text = "${it.endRemainingBattery ?: 0}km" binding.layoutFinish.chargeLayout.batteryLife1.setTextColor(getBatteryColorByBatteryLife(it.startRemainingBattery ?: 0)) binding.layoutFinish.chargeLayout.batteryLife2.setTextColor(getBatteryColorByBatteryLife(it.endRemainingBattery ?: 0)) } it.startChargingPicture?.getUrls()?.let { viewModel.adapters.getOrNull(0)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } it.endChargingPicture?.getUrls()?.let { viewModel.adapters.getOrNull(1)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } } viewModel.cleanModel.observe(this) { it.taskImage?.getUrls()?.let { viewModel.adapters.getOrNull(0)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } } viewModel.checkModel.observe(this) { it.sensorCleaningPicture?.getUrls()?.let { viewModel.adapters.getOrNull(0)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } it.interactiveScreenPicture?.getUrls()?.let { viewModel.adapters.getOrNull(1)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } it.helpButtonPicture?.getUrls()?.let { viewModel.adapters.getOrNull(2)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } it.paymentFunctionPicture?.getUrls()?.let { viewModel.adapters.getOrNull(3)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } it.systemCheckPicture?.getUrls()?.let { viewModel.adapters.getOrNull(4)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } } viewModel.maintainModel.observe(this) { it.headLight?.getUrls()?.let { viewModel.adapters.getOrNull(0)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } it.turnSignal?.getUrls()?.let { viewModel.adapters.getOrNull(1)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } it.brakeLight?.getUrls()?.let { viewModel.adapters.getOrNull(2)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } it.fogLight?.getUrls()?.let { viewModel.adapters.getOrNull(3)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } it.cabinCleaning?.getUrls()?.let { viewModel.adapters.getOrNull(4)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } it.lostItems?.getUrls()?.let { viewModel.adapters.getOrNull(5)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } } viewModel.repairModel.observe(this) { if (viewModel.taskDetail.value?.status == 1) { // 待处理 viewModel.isRepair.value = it.sendUserId != null viewModel.btnDoingAction.value = if(it.sendUserId == null) "去送修" else "确认取回车辆" } it.startRepairPicture?.getUrls()?.let { viewModel.adapters.getOrNull(0)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } it.repairMoneyDetail?.getUrls()?.let { viewModel.adapters.getOrNull(1)?.setList(it.map { FileSelectBean(url = it, type = "img") }) } } } override fun setListener() { super.setListener() binding.layoutDoing.nav.setOnClickListener { viewModel.taskDetail.value?.let { item -> if ((item.vehicleLat ?: 0.0) != 0.0 && (item.vehicleLon ?: 0.0) != 0.0) { navigate( end = LatLng(item.vehicleLat!!, item.vehicleLon!!), context = this ) } else { ToastUtilCommon.showError("数据异常") } } } binding.layoutDoing.slideView.setOnSlideCompleteListener{ viewModel.taskDetail.value?.let { startActivity( ChargeCarActivity::class.java, bundleOf("carId" to (it.vehicleId ?: 0L), "taskId" to (it.id ?: 0L)) ) } binding.layoutDoing.slideView.animateReset() } } private fun initAdapter(it: TaskNormalModel) { if (it.status == 1) { // 待处理 if (it.taskTypeId in arrayOf("4", "6", "7", "8", "9")) { initEditAdapter() if (it.taskTypeId == "4") { binding.layoutDoing.cleanLayout.rv.adapter = viewModel.adapterCanEdit binding.layoutDoing.cleanLayout.rv.layoutManager = GridLayoutManager(this, 5) } else { binding.layoutDoing.byLayout.rv.adapter = viewModel.adapterCanEdit binding.layoutDoing.byLayout.rv.layoutManager = GridLayoutManager(this, 5) } } else if (it.taskTypeId == "2") { // 充电 initOnlyViewAdapter(1) binding.layoutDoing.chargeLayout.rvHis.adapter = viewModel.adapters[0] binding.layoutDoing.chargeLayout.rvHis.layoutManager = GridLayoutManager(this, 5) } else if (it.taskTypeId == "5") { // 维修 initOnlyViewAdapter(1) binding.layoutDoing.repairLayout.rv.adapter = viewModel.adapters[0] binding.layoutDoing.repairLayout.rv.layoutManager = GridLayoutManager(this, 5) } } else { // 已处理 if (it.taskTypeId in arrayOf("6", "7", "8", "9")) { initOnlyViewAdapter(1) binding.layoutFinish.byLayout.rv.adapter = viewModel.adapters[0] binding.layoutFinish.byLayout.rv.layoutManager = GridLayoutManager(this, 5) } else if (it.taskTypeId == "1") { // 检测 initOnlyViewAdapter(5) binding.layoutFinish.checkLayout.rv1.adapter = viewModel.adapters[0] binding.layoutFinish.checkLayout.rv1.layoutManager = GridLayoutManager(this, 5) binding.layoutFinish.checkLayout.rv2.adapter = viewModel.adapters[1] binding.layoutFinish.checkLayout.rv2.layoutManager = GridLayoutManager(this, 5) binding.layoutFinish.checkLayout.rv3.adapter = viewModel.adapters[2] binding.layoutFinish.checkLayout.rv3.layoutManager = GridLayoutManager(this, 5) binding.layoutFinish.checkLayout.rv4.adapter = viewModel.adapters[3] binding.layoutFinish.checkLayout.rv4.layoutManager = GridLayoutManager(this, 5) binding.layoutFinish.checkLayout.rv5.adapter = viewModel.adapters[4] binding.layoutFinish.checkLayout.rv5.layoutManager = GridLayoutManager(this, 5) } else if (it.taskTypeId == "2") { // 充电 initOnlyViewAdapter(2) binding.layoutFinish.chargeLayout.rv1.adapter = viewModel.adapters[0] binding.layoutFinish.chargeLayout.rv1.layoutManager = GridLayoutManager(this, 5) binding.layoutFinish.chargeLayout.rv2.adapter = viewModel.adapters[1] binding.layoutFinish.chargeLayout.rv2.layoutManager = GridLayoutManager(this, 5) } else if (it.taskTypeId == "3") { // 整备 initOnlyViewAdapter(6) binding.layoutFinish.maintainLayout.rv1.adapter = viewModel.adapters[0] binding.layoutFinish.maintainLayout.rv1.layoutManager = GridLayoutManager(this, 5) binding.layoutFinish.maintainLayout.rv2.adapter = viewModel.adapters[1] binding.layoutFinish.maintainLayout.rv2.layoutManager = GridLayoutManager(this, 5) binding.layoutFinish.maintainLayout.rv3.adapter = viewModel.adapters[2] binding.layoutFinish.maintainLayout.rv3.layoutManager = GridLayoutManager(this, 5) binding.layoutFinish.maintainLayout.rv4.adapter = viewModel.adapters[3] binding.layoutFinish.maintainLayout.rv4.layoutManager = GridLayoutManager(this, 5) binding.layoutFinish.maintainLayout.rv5.adapter = viewModel.adapters[4] binding.layoutFinish.maintainLayout.rv5.layoutManager = GridLayoutManager(this, 5) binding.layoutFinish.maintainLayout.rv6.adapter = viewModel.adapters[5] binding.layoutFinish.maintainLayout.rv6.layoutManager = GridLayoutManager(this, 5) } else if (it.taskTypeId == "4") { // 洗车 initOnlyViewAdapter(1) binding.layoutFinish.cleanLayout.rv.adapter = viewModel.adapters[0] binding.layoutFinish.cleanLayout.rv.layoutManager = GridLayoutManager(this, 5) } else if (it.taskTypeId == "5") { // 维修 initOnlyViewAdapter(2) binding.layoutFinish.repairLayout.rv1.adapter = viewModel.adapters[0] binding.layoutFinish.repairLayout.rv1.layoutManager = GridLayoutManager(this, 5) binding.layoutFinish.repairLayout.rv2.adapter = viewModel.adapters[1] binding.layoutFinish.repairLayout.rv2.layoutManager = GridLayoutManager(this, 5) } } } private fun initEditAdapter() { viewModel.imageEventCanEdit = object : ImageEventListener() { override fun addImage(item: FileSelectBean) { showTypeDialog() } override fun viewImage(item: FileSelectBean) { val imgList: MutableList = ArrayList() for (item1 in viewModel.adapterCanEdit.data) { imgList.add(item1.localPath.ifEmpty { item1.url }) } ShowImgListDialog( this@NormalTaskDetailActivity, imgList, imgList.indexOf(item.localPath) ).show() } override fun deleteImage(item: FileSelectBean) { viewModel.adapterCanEdit.remove(item) } } viewModel.adapterCanEdit = ImageSelectAdapter(this, viewModel.maxSize, 1, viewModel.imageEventCanEdit) } private fun initOnlyViewAdapter(num: Int){ viewModel.imageEvents.clear() viewModel.adapters.clear() for (index in 0 until num) { val imageEvent = object : ImageEventListener() { override fun viewImage(item: FileSelectBean) { val imgList: MutableList = ArrayList() for (item1 in viewModel.adapters[index].data) { imgList.add(item1.localPath.ifEmpty { item1.url }) } ShowImgListDialog( this@NormalTaskDetailActivity, imgList, imgList.indexOf(item.localPath) ).show() } } viewModel.imageEvents.add(imageEvent) val adapter = ImageSelectAdapter(this, viewModel.maxSize, 0, imageEvent) viewModel.adapters.add(adapter) } } private fun showTypeDialog() { CommonDialog.showTypeDialog(this) { isGetPictureBack = it in arrayOf(1, 0) if (it == 0) takeAPhotograph() else if (it == 1) enterGallery() } } // 进入图库 @SuppressLint("SourceLockedOrientationActivity") private fun enterGallery() { PictureSelector.create(this) .openGallery(SelectMimeType.ofImage()) .setImageEngine(GlideEngine.createGlideEngine()) .setMaxSelectNum(viewModel.maxSize - viewModel.adapterCanEdit.data.size) .setImageSpanCount(4) .isPreviewImage(true) .isDisplayCamera(false) .setCompressEngine(PictureCompressEngine()) .forResult(resultCallbackListener) } // 拍照 private fun takeAPhotograph() { PictureSelector.create(this) .openCamera(SelectMimeType.ofImage()) .setCompressEngine(PictureCompressEngine()) .forResultActivity(resultCallbackListener) } private var resultCallbackListener = object : OnResultCallbackListener { override fun onResult(result: ArrayList?) { result?.let { selectList -> val dataList: MutableList = ArrayList() dataList.addAll(viewModel.adapterCanEdit.data) for (item in selectList) { val path: String = item.availablePath var imgPath = if (PictureMimeType.isContent(path) && !item.isCut && !item.isCompressed) { UriUtils.uri2File(Uri.parse(path)).absolutePath } else { path } dataList.add(FileSelectBean(localPath = imgPath, type = "img")) } viewModel.adapterCanEdit.setList(dataList) } } override fun onCancel() {} } override fun location(pLocation: AMapLocation?) { viewModel.location = pLocation } }