diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index c8ff7af..d6a17ff 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -10,13 +10,16 @@ import com.casic.br.ktd.adapter.AlarmAdapter import com.casic.br.ktd.databinding.FragmentAlarmBinding import com.casic.br.ktd.model.AlarmListModel +import com.casic.br.ktd.utils.LoadingDialogHub import com.casic.br.ktd.view.AlarmDetailActivity import com.casic.br.ktd.vm.AlarmViewModel +import com.casic.br.ktd.widgets.AlertHandleControlDialog import com.casic.br.ktd.widgets.DateRangeActionSheet import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState class AlarmPageFragment : KotlinBaseFragment(), Handler.Callback { @@ -141,7 +144,22 @@ } override fun onHandleButtonClicked(item: AlarmListModel.DataModel.RowsModel) { - "处理${item.alarmCode}".show(requireContext()) + AlertHandleControlDialog.Builder() + .setContext(requireContext()) + .setTitle("报警处置") + .setMessage("请选择处置原因") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertHandleControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick(selected: String) { + alarmViewModel.handleAlarm(item.alarmCode, selected, "") + } + }).build().show() } }) } @@ -151,7 +169,16 @@ } override fun observeRequestState() { - + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "处理中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "处理中失败,请重新操作".show(requireActivity()) + } + } + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index c8ff7af..d6a17ff 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -10,13 +10,16 @@ import com.casic.br.ktd.adapter.AlarmAdapter import com.casic.br.ktd.databinding.FragmentAlarmBinding import com.casic.br.ktd.model.AlarmListModel +import com.casic.br.ktd.utils.LoadingDialogHub import com.casic.br.ktd.view.AlarmDetailActivity import com.casic.br.ktd.vm.AlarmViewModel +import com.casic.br.ktd.widgets.AlertHandleControlDialog import com.casic.br.ktd.widgets.DateRangeActionSheet import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState class AlarmPageFragment : KotlinBaseFragment(), Handler.Callback { @@ -141,7 +144,22 @@ } override fun onHandleButtonClicked(item: AlarmListModel.DataModel.RowsModel) { - "处理${item.alarmCode}".show(requireContext()) + AlertHandleControlDialog.Builder() + .setContext(requireContext()) + .setTitle("报警处置") + .setMessage("请选择处置原因") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertHandleControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick(selected: String) { + alarmViewModel.handleAlarm(item.alarmCode, selected, "") + } + }).build().show() } }) } @@ -151,7 +169,16 @@ } override fun observeRequestState() { - + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "处理中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "处理中失败,请重新操作".show(requireActivity()) + } + } + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 8de7b7b..2a50819 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -186,6 +186,15 @@ ): String /** + * 报警处置 + */ + @POST("/alarm/processAlarm") + suspend fun handleAlarm( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 根据时间获取巡检任务和公里数 */ @POST("/system/busOverView/taskCount") diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index c8ff7af..d6a17ff 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -10,13 +10,16 @@ import com.casic.br.ktd.adapter.AlarmAdapter import com.casic.br.ktd.databinding.FragmentAlarmBinding import com.casic.br.ktd.model.AlarmListModel +import com.casic.br.ktd.utils.LoadingDialogHub import com.casic.br.ktd.view.AlarmDetailActivity import com.casic.br.ktd.vm.AlarmViewModel +import com.casic.br.ktd.widgets.AlertHandleControlDialog import com.casic.br.ktd.widgets.DateRangeActionSheet import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState class AlarmPageFragment : KotlinBaseFragment(), Handler.Callback { @@ -141,7 +144,22 @@ } override fun onHandleButtonClicked(item: AlarmListModel.DataModel.RowsModel) { - "处理${item.alarmCode}".show(requireContext()) + AlertHandleControlDialog.Builder() + .setContext(requireContext()) + .setTitle("报警处置") + .setMessage("请选择处置原因") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertHandleControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick(selected: String) { + alarmViewModel.handleAlarm(item.alarmCode, selected, "") + } + }).build().show() } }) } @@ -151,7 +169,16 @@ } override fun observeRequestState() { - + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "处理中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "处理中失败,请重新操作".show(requireActivity()) + } + } + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 8de7b7b..2a50819 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -186,6 +186,15 @@ ): String /** + * 报警处置 + */ + @POST("/alarm/processAlarm") + suspend fun handleAlarm( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 根据时间获取巡检任务和公里数 */ @POST("/system/busOverView/taskCount") diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 1d88a43..ccaa7ff 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -330,6 +330,21 @@ } /** + * 报警处置 + */ + suspend fun handleAlarm(alarmCode: String, cancelReason: String, cancelResult: String): String { + val param = JsonObject() + param.addProperty("alarmCode", alarmCode) + param.addProperty("cancelReason", cancelReason) + param.addProperty("cancelResult", cancelResult) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.handleAlarm(AuthenticationHelper.token, requestBody) + } + + /** * 根据时间获取巡检任务和公里数 */ suspend fun getTaskCount(beginDate: String, endDate: String): String { diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index c8ff7af..d6a17ff 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -10,13 +10,16 @@ import com.casic.br.ktd.adapter.AlarmAdapter import com.casic.br.ktd.databinding.FragmentAlarmBinding import com.casic.br.ktd.model.AlarmListModel +import com.casic.br.ktd.utils.LoadingDialogHub import com.casic.br.ktd.view.AlarmDetailActivity import com.casic.br.ktd.vm.AlarmViewModel +import com.casic.br.ktd.widgets.AlertHandleControlDialog import com.casic.br.ktd.widgets.DateRangeActionSheet import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState class AlarmPageFragment : KotlinBaseFragment(), Handler.Callback { @@ -141,7 +144,22 @@ } override fun onHandleButtonClicked(item: AlarmListModel.DataModel.RowsModel) { - "处理${item.alarmCode}".show(requireContext()) + AlertHandleControlDialog.Builder() + .setContext(requireContext()) + .setTitle("报警处置") + .setMessage("请选择处置原因") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertHandleControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick(selected: String) { + alarmViewModel.handleAlarm(item.alarmCode, selected, "") + } + }).build().show() } }) } @@ -151,7 +169,16 @@ } override fun observeRequestState() { - + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "处理中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "处理中失败,请重新操作".show(requireActivity()) + } + } + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 8de7b7b..2a50819 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -186,6 +186,15 @@ ): String /** + * 报警处置 + */ + @POST("/alarm/processAlarm") + suspend fun handleAlarm( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 根据时间获取巡检任务和公里数 */ @POST("/system/busOverView/taskCount") diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 1d88a43..ccaa7ff 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -330,6 +330,21 @@ } /** + * 报警处置 + */ + suspend fun handleAlarm(alarmCode: String, cancelReason: String, cancelResult: String): String { + val param = JsonObject() + param.addProperty("alarmCode", alarmCode) + param.addProperty("cancelReason", cancelReason) + param.addProperty("cancelResult", cancelResult) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.handleAlarm(AuthenticationHelper.token, requestBody) + } + + /** * 根据时间获取巡检任务和公里数 */ suspend fun getTaskCount(beginDate: String, endDate: String): String { diff --git a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt index ba8788a..1d2add1 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt @@ -62,22 +62,19 @@ fun getAlarmsByPage( beginDate: String, alarmStatus: String, alarmType: String, endDate: String, offset: Int ) = launch({ - loadState.value = LoadState.Loading val response = RetrofitServiceManager.getAlarmsByPage( beginDate, alarmStatus, alarmType, endDate, offset ) val responseCode = response.separateResponseCode() if (responseCode == 200) { - loadState.value = LoadState.Success alarmList.value = gson.fromJson( response, object : TypeToken() {}.type ) } else { - loadState.value = LoadState.Fail response.toErrorMessage().show(BaseApplication.get()) } }, { - loadState.value = LoadState.Fail + it.printStackTrace() }) fun getAlarmDetail(alarmId: String) = launch({ @@ -97,4 +94,19 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun handleAlarm(alarmCode: String, cancelReason: String, cancelResult: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.handleAlarm(alarmCode, cancelReason, cancelResult) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index c8ff7af..d6a17ff 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -10,13 +10,16 @@ import com.casic.br.ktd.adapter.AlarmAdapter import com.casic.br.ktd.databinding.FragmentAlarmBinding import com.casic.br.ktd.model.AlarmListModel +import com.casic.br.ktd.utils.LoadingDialogHub import com.casic.br.ktd.view.AlarmDetailActivity import com.casic.br.ktd.vm.AlarmViewModel +import com.casic.br.ktd.widgets.AlertHandleControlDialog import com.casic.br.ktd.widgets.DateRangeActionSheet import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState class AlarmPageFragment : KotlinBaseFragment(), Handler.Callback { @@ -141,7 +144,22 @@ } override fun onHandleButtonClicked(item: AlarmListModel.DataModel.RowsModel) { - "处理${item.alarmCode}".show(requireContext()) + AlertHandleControlDialog.Builder() + .setContext(requireContext()) + .setTitle("报警处置") + .setMessage("请选择处置原因") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertHandleControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick(selected: String) { + alarmViewModel.handleAlarm(item.alarmCode, selected, "") + } + }).build().show() } }) } @@ -151,7 +169,16 @@ } override fun observeRequestState() { - + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "处理中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "处理中失败,请重新操作".show(requireActivity()) + } + } + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 8de7b7b..2a50819 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -186,6 +186,15 @@ ): String /** + * 报警处置 + */ + @POST("/alarm/processAlarm") + suspend fun handleAlarm( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 根据时间获取巡检任务和公里数 */ @POST("/system/busOverView/taskCount") diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 1d88a43..ccaa7ff 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -330,6 +330,21 @@ } /** + * 报警处置 + */ + suspend fun handleAlarm(alarmCode: String, cancelReason: String, cancelResult: String): String { + val param = JsonObject() + param.addProperty("alarmCode", alarmCode) + param.addProperty("cancelReason", cancelReason) + param.addProperty("cancelResult", cancelResult) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.handleAlarm(AuthenticationHelper.token, requestBody) + } + + /** * 根据时间获取巡检任务和公里数 */ suspend fun getTaskCount(beginDate: String, endDate: String): String { diff --git a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt index ba8788a..1d2add1 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt @@ -62,22 +62,19 @@ fun getAlarmsByPage( beginDate: String, alarmStatus: String, alarmType: String, endDate: String, offset: Int ) = launch({ - loadState.value = LoadState.Loading val response = RetrofitServiceManager.getAlarmsByPage( beginDate, alarmStatus, alarmType, endDate, offset ) val responseCode = response.separateResponseCode() if (responseCode == 200) { - loadState.value = LoadState.Success alarmList.value = gson.fromJson( response, object : TypeToken() {}.type ) } else { - loadState.value = LoadState.Fail response.toErrorMessage().show(BaseApplication.get()) } }, { - loadState.value = LoadState.Fail + it.printStackTrace() }) fun getAlarmDetail(alarmId: String) = launch({ @@ -97,4 +94,19 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun handleAlarm(alarmCode: String, cancelReason: String, cancelResult: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.handleAlarm(alarmCode, cancelReason, cancelResult) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/widgets/AlertHandleControlDialog.kt b/app/src/main/java/com/casic/br/ktd/widgets/AlertHandleControlDialog.kt new file mode 100644 index 0000000..6369789 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/widgets/AlertHandleControlDialog.kt @@ -0,0 +1,120 @@ +package com.casic.br.ktd.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import com.casic.br.ktd.R +import com.casic.br.ktd.databinding.DialogAlertHandleBinding +import com.pengxh.kt.lite.extensions.binding +import com.pengxh.kt.lite.extensions.initDialogLayoutParams +import com.pengxh.kt.lite.extensions.show + +class AlertHandleControlDialog private constructor(builder: Builder) : Dialog( + builder.context, R.style.UserDefinedDialogStyle +) { + private val title = builder.title + private val message = builder.message + private val positiveBtn = builder.positiveBtn + private val negativeBtn = builder.negativeBtn + private val listener = builder.listener + + class Builder { + lateinit var context: Context + lateinit var title: String + lateinit var message: String + lateinit var positiveBtn: String + lateinit var negativeBtn: String + lateinit var listener: OnDialogButtonClickListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setTitle(title: String): Builder { + this.title = title + return this + } + + fun setMessage(message: String): Builder { + this.message = message + return this + } + + fun setPositiveButton(name: String): Builder { + positiveBtn = name + return this + } + + fun setNegativeButton(name: String): Builder { + negativeBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { + this.listener = listener + return this + } + + fun build(): AlertHandleControlDialog { + return AlertHandleControlDialog(this) + } + } + + private val binding: DialogAlertHandleBinding by binding() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(0.3f) + setContentView(R.layout.dialog_alert_handle) + setCancelable(false) + setCanceledOnTouchOutside(false) + initView() + } + + private fun initView() { + if (title.isNotBlank()) { + binding.dialogTitleView.text = title + } + if (message.isNotBlank()) { + binding.dialogMessageView.text = message + } + if (negativeBtn.isNotBlank()) { + binding.dialogCancelButton.text = negativeBtn + } + binding.dialogCancelButton.setOnClickListener { + listener.onCancelClick() + dismiss() + } + if (positiveBtn.isNotBlank()) { + binding.dialogConfirmButton.text = positiveBtn + } + binding.dialogConfirmButton.setOnClickListener { + var selected = "" + if (binding.handledRadioButton.isChecked) { + selected = "1" + } + + if (binding.noNeedRadioButton.isChecked) { + selected = "2" + } + + if (binding.otherRadioButton.isChecked) { + selected = "3" + } + + if (selected == "") { + "请选择处置原因".show(context) + return@setOnClickListener + } + listener.onConfirmClick(selected) + dismiss() + } + } + + interface OnDialogButtonClickListener { + fun onConfirmClick(selected: String) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index c8ff7af..d6a17ff 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -10,13 +10,16 @@ import com.casic.br.ktd.adapter.AlarmAdapter import com.casic.br.ktd.databinding.FragmentAlarmBinding import com.casic.br.ktd.model.AlarmListModel +import com.casic.br.ktd.utils.LoadingDialogHub import com.casic.br.ktd.view.AlarmDetailActivity import com.casic.br.ktd.vm.AlarmViewModel +import com.casic.br.ktd.widgets.AlertHandleControlDialog import com.casic.br.ktd.widgets.DateRangeActionSheet import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState class AlarmPageFragment : KotlinBaseFragment(), Handler.Callback { @@ -141,7 +144,22 @@ } override fun onHandleButtonClicked(item: AlarmListModel.DataModel.RowsModel) { - "处理${item.alarmCode}".show(requireContext()) + AlertHandleControlDialog.Builder() + .setContext(requireContext()) + .setTitle("报警处置") + .setMessage("请选择处置原因") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertHandleControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick(selected: String) { + alarmViewModel.handleAlarm(item.alarmCode, selected, "") + } + }).build().show() } }) } @@ -151,7 +169,16 @@ } override fun observeRequestState() { - + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "处理中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "处理中失败,请重新操作".show(requireActivity()) + } + } + } } override fun setupTopBarLayout() { diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 8de7b7b..2a50819 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -186,6 +186,15 @@ ): String /** + * 报警处置 + */ + @POST("/alarm/processAlarm") + suspend fun handleAlarm( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 根据时间获取巡检任务和公里数 */ @POST("/system/busOverView/taskCount") diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 1d88a43..ccaa7ff 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -330,6 +330,21 @@ } /** + * 报警处置 + */ + suspend fun handleAlarm(alarmCode: String, cancelReason: String, cancelResult: String): String { + val param = JsonObject() + param.addProperty("alarmCode", alarmCode) + param.addProperty("cancelReason", cancelReason) + param.addProperty("cancelResult", cancelResult) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.handleAlarm(AuthenticationHelper.token, requestBody) + } + + /** * 根据时间获取巡检任务和公里数 */ suspend fun getTaskCount(beginDate: String, endDate: String): String { diff --git a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt index ba8788a..1d2add1 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt @@ -62,22 +62,19 @@ fun getAlarmsByPage( beginDate: String, alarmStatus: String, alarmType: String, endDate: String, offset: Int ) = launch({ - loadState.value = LoadState.Loading val response = RetrofitServiceManager.getAlarmsByPage( beginDate, alarmStatus, alarmType, endDate, offset ) val responseCode = response.separateResponseCode() if (responseCode == 200) { - loadState.value = LoadState.Success alarmList.value = gson.fromJson( response, object : TypeToken() {}.type ) } else { - loadState.value = LoadState.Fail response.toErrorMessage().show(BaseApplication.get()) } }, { - loadState.value = LoadState.Fail + it.printStackTrace() }) fun getAlarmDetail(alarmId: String) = launch({ @@ -97,4 +94,19 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun handleAlarm(alarmCode: String, cancelReason: String, cancelResult: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.handleAlarm(alarmCode, cancelReason, cancelResult) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/widgets/AlertHandleControlDialog.kt b/app/src/main/java/com/casic/br/ktd/widgets/AlertHandleControlDialog.kt new file mode 100644 index 0000000..6369789 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/widgets/AlertHandleControlDialog.kt @@ -0,0 +1,120 @@ +package com.casic.br.ktd.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import com.casic.br.ktd.R +import com.casic.br.ktd.databinding.DialogAlertHandleBinding +import com.pengxh.kt.lite.extensions.binding +import com.pengxh.kt.lite.extensions.initDialogLayoutParams +import com.pengxh.kt.lite.extensions.show + +class AlertHandleControlDialog private constructor(builder: Builder) : Dialog( + builder.context, R.style.UserDefinedDialogStyle +) { + private val title = builder.title + private val message = builder.message + private val positiveBtn = builder.positiveBtn + private val negativeBtn = builder.negativeBtn + private val listener = builder.listener + + class Builder { + lateinit var context: Context + lateinit var title: String + lateinit var message: String + lateinit var positiveBtn: String + lateinit var negativeBtn: String + lateinit var listener: OnDialogButtonClickListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setTitle(title: String): Builder { + this.title = title + return this + } + + fun setMessage(message: String): Builder { + this.message = message + return this + } + + fun setPositiveButton(name: String): Builder { + positiveBtn = name + return this + } + + fun setNegativeButton(name: String): Builder { + negativeBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { + this.listener = listener + return this + } + + fun build(): AlertHandleControlDialog { + return AlertHandleControlDialog(this) + } + } + + private val binding: DialogAlertHandleBinding by binding() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(0.3f) + setContentView(R.layout.dialog_alert_handle) + setCancelable(false) + setCanceledOnTouchOutside(false) + initView() + } + + private fun initView() { + if (title.isNotBlank()) { + binding.dialogTitleView.text = title + } + if (message.isNotBlank()) { + binding.dialogMessageView.text = message + } + if (negativeBtn.isNotBlank()) { + binding.dialogCancelButton.text = negativeBtn + } + binding.dialogCancelButton.setOnClickListener { + listener.onCancelClick() + dismiss() + } + if (positiveBtn.isNotBlank()) { + binding.dialogConfirmButton.text = positiveBtn + } + binding.dialogConfirmButton.setOnClickListener { + var selected = "" + if (binding.handledRadioButton.isChecked) { + selected = "1" + } + + if (binding.noNeedRadioButton.isChecked) { + selected = "2" + } + + if (binding.otherRadioButton.isChecked) { + selected = "3" + } + + if (selected == "") { + "请选择处置原因".show(context) + return@setOnClickListener + } + listener.onConfirmClick(selected) + dismiss() + } + } + + interface OnDialogButtonClickListener { + fun onConfirmClick(selected: String) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_alert_handle.xml b/app/src/main/res/layout/dialog_alert_handle.xml new file mode 100644 index 0000000..4d32313 --- /dev/null +++ b/app/src/main/res/layout/dialog_alert_handle.xml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +