diff --git a/app/build.gradle b/app/build.gradle index 59e75eb..14e233f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,7 +52,7 @@ dependencies { implementation 'androidx.core:core-ktx:1.7.0' - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' //基础依赖库 @@ -78,8 +78,8 @@ implementation 'io.github.lucksiege:pictureselector:v3.0.4' //图片压缩 implementation 'top.zibin:Luban:1.1.8' - //高德地图 - implementation 'com.amap.api:3dmap:7.9.1' + //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) + implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/build.gradle b/app/build.gradle index 59e75eb..14e233f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,7 +52,7 @@ dependencies { implementation 'androidx.core:core-ktx:1.7.0' - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' //基础依赖库 @@ -78,8 +78,8 @@ implementation 'io.github.lucksiege:pictureselector:v3.0.4' //图片压缩 implementation 'top.zibin:Luban:1.1.8' - //高德地图 - implementation 'com.amap.api:3dmap:7.9.1' + //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) + implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f45af90..2b5967f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,7 @@ + + + + (jobId) + requireContext().navigatePageTo(jobId) } override fun onOperationClicked(position: Int) { diff --git a/app/build.gradle b/app/build.gradle index 59e75eb..14e233f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,7 +52,7 @@ dependencies { implementation 'androidx.core:core-ktx:1.7.0' - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' //基础依赖库 @@ -78,8 +78,8 @@ implementation 'io.github.lucksiege:pictureselector:v3.0.4' //图片压缩 implementation 'top.zibin:Luban:1.1.8' - //高德地图 - implementation 'com.amap.api:3dmap:7.9.1' + //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) + implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f45af90..2b5967f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,7 @@ + (jobId) + requireContext().navigatePageTo(jobId) } override fun onOperationClicked(position: Int) { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt new file mode 100644 index 0000000..e3859d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt @@ -0,0 +1,167 @@ +package com.casic.qd.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showRouteOnMap +import com.casic.qd.smartwell.extensions.toChinese +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.OperationViewModel +import com.casic.qd.smartwell.vm.WellViewModel +import com.casic.qd.smartwell.vm.WorkOrderViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderNotProcessedDetailActivity : BaseActivity() { + + private lateinit var workOrderViewModel: WorkOrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var jobId: String + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java) + wellViewModel = ViewModelProvider(this).get(WellViewModel::class.java) + } + + override fun initEvent() { + workOrderViewModel.obtainWorkOrderDetail(jobId) + workOrderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor()) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor()) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show() + return + } + operationViewModel.acceptOrder(orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "窨井ID异常,无法导航".show() + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.detailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "窨井经纬度异常,无法开启导航".show() + } else { + Poi( + orderDetail.position, LatLng(lat.toDouble(), lng.toDouble()), "" + ).showRouteOnMap(this) + } + } + }) + } + }) + + //数据加载状态处理 + workOrderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "接单中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //通知列表刷新数据 +// BroadcastReceiverManager.instance.sendMultiBroadcast( +// Constant.NOT_PROCESSED_ACTION, +// Constant.NOT_CONFIRMED_ACTION, +// Constant.NOT_ACCEPT_ACTION +// ) + this.finish() + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 59e75eb..14e233f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,7 +52,7 @@ dependencies { implementation 'androidx.core:core-ktx:1.7.0' - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' //基础依赖库 @@ -78,8 +78,8 @@ implementation 'io.github.lucksiege:pictureselector:v3.0.4' //图片压缩 implementation 'top.zibin:Luban:1.1.8' - //高德地图 - implementation 'com.amap.api:3dmap:7.9.1' + //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) + implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f45af90..2b5967f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,7 @@ + (jobId) + requireContext().navigatePageTo(jobId) } override fun onOperationClicked(position: Int) { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt new file mode 100644 index 0000000..e3859d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt @@ -0,0 +1,167 @@ +package com.casic.qd.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showRouteOnMap +import com.casic.qd.smartwell.extensions.toChinese +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.OperationViewModel +import com.casic.qd.smartwell.vm.WellViewModel +import com.casic.qd.smartwell.vm.WorkOrderViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderNotProcessedDetailActivity : BaseActivity() { + + private lateinit var workOrderViewModel: WorkOrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var jobId: String + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java) + wellViewModel = ViewModelProvider(this).get(WellViewModel::class.java) + } + + override fun initEvent() { + workOrderViewModel.obtainWorkOrderDetail(jobId) + workOrderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor()) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor()) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show() + return + } + operationViewModel.acceptOrder(orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "窨井ID异常,无法导航".show() + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.detailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "窨井经纬度异常,无法开启导航".show() + } else { + Poi( + orderDetail.position, LatLng(lat.toDouble(), lng.toDouble()), "" + ).showRouteOnMap(this) + } + } + }) + } + }) + + //数据加载状态处理 + workOrderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "接单中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //通知列表刷新数据 +// BroadcastReceiverManager.instance.sendMultiBroadcast( +// Constant.NOT_PROCESSED_ACTION, +// Constant.NOT_CONFIRMED_ACTION, +// Constant.NOT_ACCEPT_ACTION +// ) + this.finish() + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt index 58c6db9..8c2f802 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import com.amap.api.navi.NaviSetting import com.casic.qd.smartwell.extensions.navigatePageTo import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.PageNavigationManager @@ -27,6 +28,9 @@ } private fun startSplashScreenActivity() { + //先把导航隐私政策声明,后面导航会用到 + NaviSetting.updatePrivacyShow(this, true, true) + NaviSetting.updatePrivacyAgree(this, true) navigatePageTo() finish() } diff --git a/app/build.gradle b/app/build.gradle index 59e75eb..14e233f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,7 +52,7 @@ dependencies { implementation 'androidx.core:core-ktx:1.7.0' - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' //基础依赖库 @@ -78,8 +78,8 @@ implementation 'io.github.lucksiege:pictureselector:v3.0.4' //图片压缩 implementation 'top.zibin:Luban:1.1.8' - //高德地图 - implementation 'com.amap.api:3dmap:7.9.1' + //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) + implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f45af90..2b5967f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,7 @@ + (jobId) + requireContext().navigatePageTo(jobId) } override fun onOperationClicked(position: Int) { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt new file mode 100644 index 0000000..e3859d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt @@ -0,0 +1,167 @@ +package com.casic.qd.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showRouteOnMap +import com.casic.qd.smartwell.extensions.toChinese +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.OperationViewModel +import com.casic.qd.smartwell.vm.WellViewModel +import com.casic.qd.smartwell.vm.WorkOrderViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderNotProcessedDetailActivity : BaseActivity() { + + private lateinit var workOrderViewModel: WorkOrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var jobId: String + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java) + wellViewModel = ViewModelProvider(this).get(WellViewModel::class.java) + } + + override fun initEvent() { + workOrderViewModel.obtainWorkOrderDetail(jobId) + workOrderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor()) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor()) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show() + return + } + operationViewModel.acceptOrder(orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "窨井ID异常,无法导航".show() + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.detailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "窨井经纬度异常,无法开启导航".show() + } else { + Poi( + orderDetail.position, LatLng(lat.toDouble(), lng.toDouble()), "" + ).showRouteOnMap(this) + } + } + }) + } + }) + + //数据加载状态处理 + workOrderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "接单中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //通知列表刷新数据 +// BroadcastReceiverManager.instance.sendMultiBroadcast( +// Constant.NOT_PROCESSED_ACTION, +// Constant.NOT_CONFIRMED_ACTION, +// Constant.NOT_ACCEPT_ACTION +// ) + this.finish() + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt index 58c6db9..8c2f802 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import com.amap.api.navi.NaviSetting import com.casic.qd.smartwell.extensions.navigatePageTo import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.PageNavigationManager @@ -27,6 +28,9 @@ } private fun startSplashScreenActivity() { + //先把导航隐私政策声明,后面导航会用到 + NaviSetting.updatePrivacyShow(this, true, true) + NaviSetting.updatePrivacyAgree(this, true) navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/WellDetailActivity.kt index 34d3dbf..753f4af 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/WellDetailActivity.kt @@ -7,7 +7,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.WellDetailViewModel +import com.casic.qd.smartwell.vm.WellViewModel import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog import kotlinx.android.synthetic.main.activity_well_detail.* import kotlinx.android.synthetic.main.include_base_title.* @@ -15,7 +15,7 @@ class WellDetailActivity : BaseActivity() { - private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellDetailViewModel: WellViewModel private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -27,7 +27,7 @@ override fun initData() { wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! - wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + wellDetailViewModel = ViewModelProvider(this).get(WellViewModel::class.java) } override fun initEvent() { diff --git a/app/build.gradle b/app/build.gradle index 59e75eb..14e233f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,7 +52,7 @@ dependencies { implementation 'androidx.core:core-ktx:1.7.0' - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' //基础依赖库 @@ -78,8 +78,8 @@ implementation 'io.github.lucksiege:pictureselector:v3.0.4' //图片压缩 implementation 'top.zibin:Luban:1.1.8' - //高德地图 - implementation 'com.amap.api:3dmap:7.9.1' + //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) + implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f45af90..2b5967f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,7 @@ + (jobId) + requireContext().navigatePageTo(jobId) } override fun onOperationClicked(position: Int) { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt new file mode 100644 index 0000000..e3859d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt @@ -0,0 +1,167 @@ +package com.casic.qd.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showRouteOnMap +import com.casic.qd.smartwell.extensions.toChinese +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.OperationViewModel +import com.casic.qd.smartwell.vm.WellViewModel +import com.casic.qd.smartwell.vm.WorkOrderViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderNotProcessedDetailActivity : BaseActivity() { + + private lateinit var workOrderViewModel: WorkOrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var jobId: String + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java) + wellViewModel = ViewModelProvider(this).get(WellViewModel::class.java) + } + + override fun initEvent() { + workOrderViewModel.obtainWorkOrderDetail(jobId) + workOrderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor()) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor()) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show() + return + } + operationViewModel.acceptOrder(orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "窨井ID异常,无法导航".show() + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.detailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "窨井经纬度异常,无法开启导航".show() + } else { + Poi( + orderDetail.position, LatLng(lat.toDouble(), lng.toDouble()), "" + ).showRouteOnMap(this) + } + } + }) + } + }) + + //数据加载状态处理 + workOrderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "接单中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //通知列表刷新数据 +// BroadcastReceiverManager.instance.sendMultiBroadcast( +// Constant.NOT_PROCESSED_ACTION, +// Constant.NOT_CONFIRMED_ACTION, +// Constant.NOT_ACCEPT_ACTION +// ) + this.finish() + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt index 58c6db9..8c2f802 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import com.amap.api.navi.NaviSetting import com.casic.qd.smartwell.extensions.navigatePageTo import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.PageNavigationManager @@ -27,6 +28,9 @@ } private fun startSplashScreenActivity() { + //先把导航隐私政策声明,后面导航会用到 + NaviSetting.updatePrivacyShow(this, true, true) + NaviSetting.updatePrivacyAgree(this, true) navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/WellDetailActivity.kt index 34d3dbf..753f4af 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/WellDetailActivity.kt @@ -7,7 +7,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.WellDetailViewModel +import com.casic.qd.smartwell.vm.WellViewModel import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog import kotlinx.android.synthetic.main.activity_well_detail.* import kotlinx.android.synthetic.main.include_base_title.* @@ -15,7 +15,7 @@ class WellDetailActivity : BaseActivity() { - private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellDetailViewModel: WellViewModel private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -27,7 +27,7 @@ override fun initData() { wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! - wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + wellDetailViewModel = ViewModelProvider(this).get(WellViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt deleted file mode 100644 index f89c269..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.qd.smartwell.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.WellDetailModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class WellDetailViewModel : BaseViewModel() { - - private val gson = Gson() - val detailModel = MutableLiveData() - - fun obtainWellDetail(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainWellDetail(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - detailModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 59e75eb..14e233f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,7 +52,7 @@ dependencies { implementation 'androidx.core:core-ktx:1.7.0' - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' //基础依赖库 @@ -78,8 +78,8 @@ implementation 'io.github.lucksiege:pictureselector:v3.0.4' //图片压缩 implementation 'top.zibin:Luban:1.1.8' - //高德地图 - implementation 'com.amap.api:3dmap:7.9.1' + //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) + implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f45af90..2b5967f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,7 @@ + (jobId) + requireContext().navigatePageTo(jobId) } override fun onOperationClicked(position: Int) { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt new file mode 100644 index 0000000..e3859d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt @@ -0,0 +1,167 @@ +package com.casic.qd.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showRouteOnMap +import com.casic.qd.smartwell.extensions.toChinese +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.OperationViewModel +import com.casic.qd.smartwell.vm.WellViewModel +import com.casic.qd.smartwell.vm.WorkOrderViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderNotProcessedDetailActivity : BaseActivity() { + + private lateinit var workOrderViewModel: WorkOrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var jobId: String + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java) + wellViewModel = ViewModelProvider(this).get(WellViewModel::class.java) + } + + override fun initEvent() { + workOrderViewModel.obtainWorkOrderDetail(jobId) + workOrderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor()) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor()) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show() + return + } + operationViewModel.acceptOrder(orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "窨井ID异常,无法导航".show() + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.detailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "窨井经纬度异常,无法开启导航".show() + } else { + Poi( + orderDetail.position, LatLng(lat.toDouble(), lng.toDouble()), "" + ).showRouteOnMap(this) + } + } + }) + } + }) + + //数据加载状态处理 + workOrderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "接单中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //通知列表刷新数据 +// BroadcastReceiverManager.instance.sendMultiBroadcast( +// Constant.NOT_PROCESSED_ACTION, +// Constant.NOT_CONFIRMED_ACTION, +// Constant.NOT_ACCEPT_ACTION +// ) + this.finish() + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt index 58c6db9..8c2f802 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import com.amap.api.navi.NaviSetting import com.casic.qd.smartwell.extensions.navigatePageTo import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.PageNavigationManager @@ -27,6 +28,9 @@ } private fun startSplashScreenActivity() { + //先把导航隐私政策声明,后面导航会用到 + NaviSetting.updatePrivacyShow(this, true, true) + NaviSetting.updatePrivacyAgree(this, true) navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/WellDetailActivity.kt index 34d3dbf..753f4af 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/WellDetailActivity.kt @@ -7,7 +7,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.WellDetailViewModel +import com.casic.qd.smartwell.vm.WellViewModel import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog import kotlinx.android.synthetic.main.activity_well_detail.* import kotlinx.android.synthetic.main.include_base_title.* @@ -15,7 +15,7 @@ class WellDetailActivity : BaseActivity() { - private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellDetailViewModel: WellViewModel private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -27,7 +27,7 @@ override fun initData() { wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! - wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + wellDetailViewModel = ViewModelProvider(this).get(WellViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt deleted file mode 100644 index f89c269..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.qd.smartwell.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.WellDetailModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class WellDetailViewModel : BaseViewModel() { - - private val gson = Gson() - val detailModel = MutableLiveData() - - fun obtainWellDetail(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainWellDetail(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - detailModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WellViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WellViewModel.kt new file mode 100644 index 0000000..38fe9ad --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/WellViewModel.kt @@ -0,0 +1,37 @@ +package com.casic.qd.smartwell.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.WellDetailModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class WellViewModel : BaseViewModel() { + + private val gson = Gson() + val detailModel = MutableLiveData() + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 59e75eb..14e233f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,7 +52,7 @@ dependencies { implementation 'androidx.core:core-ktx:1.7.0' - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' //基础依赖库 @@ -78,8 +78,8 @@ implementation 'io.github.lucksiege:pictureselector:v3.0.4' //图片压缩 implementation 'top.zibin:Luban:1.1.8' - //高德地图 - implementation 'com.amap.api:3dmap:7.9.1' + //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) + implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f45af90..2b5967f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,7 @@ + (jobId) + requireContext().navigatePageTo(jobId) } override fun onOperationClicked(position: Int) { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt new file mode 100644 index 0000000..e3859d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/OrderNotProcessedDetailActivity.kt @@ -0,0 +1,167 @@ +package com.casic.qd.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showRouteOnMap +import com.casic.qd.smartwell.extensions.toChinese +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.OperationViewModel +import com.casic.qd.smartwell.vm.WellViewModel +import com.casic.qd.smartwell.vm.WorkOrderViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_not_processed_detail.* +import kotlinx.android.synthetic.main.include_base_order_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderNotProcessedDetailActivity : BaseActivity() { + + private lateinit var workOrderViewModel: WorkOrderViewModel + private lateinit var wellViewModel: WellViewModel + private lateinit var operationViewModel: OperationViewModel + private lateinit var jobId: String + + override fun initLayoutView(): Int = R.layout.activity_order_not_processed_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(OperationViewModel::class.java) + wellViewModel = ViewModelProvider(this).get(WellViewModel::class.java) + } + + override fun initEvent() { + workOrderViewModel.obtainWorkOrderDetail(jobId) + workOrderViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level.isBlank()) { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.convertColor()) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.convertColor()) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + locationTipsView.visibility = View.VISIBLE + locationTipsView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + locationTipsView.visibility = View.GONE + } + dispatchDateView.text = orderDetail.createTime + + //接单 + acceptOrderButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + if (orderDetail.jobId.toString().isBlank()) { + "工单ID异常,无法接单".show() + return + } + operationViewModel.acceptOrder(orderDetail.jobId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + //导航 + navigationButton.setOnClickListener { + val wellId = orderDetail.wellId.toString() + if (wellId.isBlank()) { + "窨井ID异常,无法导航".show() + return@setOnClickListener + } + wellViewModel.obtainWellDetail(wellId) + } + wellViewModel.detailModel.observe(this, { well -> + if (well.code == 200) { + val wellDetail = well.data!! + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat.isBlank() || lng.isBlank()) { + "窨井经纬度异常,无法开启导航".show() + } else { + Poi( + orderDetail.position, LatLng(lat.toDouble(), lng.toDouble()), "" + ).showRouteOnMap(this) + } + } + }) + } + }) + + //数据加载状态处理 + workOrderViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + //接单状态处理 + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "接单中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //通知列表刷新数据 +// BroadcastReceiverManager.instance.sendMultiBroadcast( +// Constant.NOT_PROCESSED_ACTION, +// Constant.NOT_CONFIRMED_ACTION, +// Constant.NOT_ACCEPT_ACTION +// ) + this.finish() + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt index 58c6db9..8c2f802 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/PermissionActivity.kt @@ -2,6 +2,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import com.amap.api.navi.NaviSetting import com.casic.qd.smartwell.extensions.navigatePageTo import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.PageNavigationManager @@ -27,6 +28,9 @@ } private fun startSplashScreenActivity() { + //先把导航隐私政策声明,后面导航会用到 + NaviSetting.updatePrivacyShow(this, true, true) + NaviSetting.updatePrivacyAgree(this, true) navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/WellDetailActivity.kt index 34d3dbf..753f4af 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/WellDetailActivity.kt @@ -7,7 +7,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.WellDetailViewModel +import com.casic.qd.smartwell.vm.WellViewModel import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog import kotlinx.android.synthetic.main.activity_well_detail.* import kotlinx.android.synthetic.main.include_base_title.* @@ -15,7 +15,7 @@ class WellDetailActivity : BaseActivity() { - private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellDetailViewModel: WellViewModel private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -27,7 +27,7 @@ override fun initData() { wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! - wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + wellDetailViewModel = ViewModelProvider(this).get(WellViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt deleted file mode 100644 index f89c269..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.qd.smartwell.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.WellDetailModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class WellDetailViewModel : BaseViewModel() { - - private val gson = Gson() - val detailModel = MutableLiveData() - - fun obtainWellDetail(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainWellDetail(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - detailModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WellViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WellViewModel.kt new file mode 100644 index 0000000..38fe9ad --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/WellViewModel.kt @@ -0,0 +1,37 @@ +package com.casic.qd.smartwell.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.WellDetailModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class WellViewModel : BaseViewModel() { + + private val gson = Gson() + val detailModel = MutableLiveData() + + fun obtainWellDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainWellDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detailModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_order_not_processed_detail.xml b/app/src/main/res/layout/activity_order_not_processed_detail.xml new file mode 100644 index 0000000..9adbf82 --- /dev/null +++ b/app/src/main/res/layout/activity_order_not_processed_detail.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +