From a0dd0788247b900ff5c494a7ccccd9a86e558453 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Fri, 10 Nov 2023 17:11:58 +0800 Subject: [PATCH] =?UTF-8?q?[6.2.0]=20=E8=BF=90=E8=90=A5=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E5=BC=80=E5=8F=91=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../och/taxi/bean/TaxiPersonalDatatBean.kt | 13 +- .../constant/OperationalOrderStatusEnum.kt | 34 ++ .../mogo/och/taxi/constant/StationTypeEnum.kt | 26 ++ ...pi.kt => TaxiOperationalDataServiceApi.kt} | 7 +- ...t => TaxiOperationalDataServiceManager.kt} | 22 +- .../com/mogo/och/taxi/ui/base/TaxiFragment.kt | 6 +- .../ui/operational/OperationalDataItemView.kt | 63 ++++ .../ui/operational/OperationalDataUIState.kt | 31 ++ .../ui/operational/OperationalDataUiIntent.kt | 25 ++ .../taxi/ui/operational/TaskOrOrderAdapter.kt | 298 +++++++++++++++++ .../TaxiOperationalDataViewModel.kt | 225 +++++++++++++ .../TaxiOperationalDialogFragment.kt | 304 ++++++++++++++++++ .../taxi/ui/personal/PersonalDataUIState.kt | 30 -- .../taxi/ui/personal/PersonalDataUiIntent.kt | 25 -- .../ui/personal/TaxiPersonalDataViewModel.kt | 133 -------- .../ui/personal/TaxiPersonalDialogFragment.kt | 210 ------------ .../taxi/ui/task/TaxiCurrentTaskFragment.kt | 21 +- .../res/drawable-xhdpi/close_detail_arrow.png | Bin 0 -> 1070 bytes .../res/drawable-xhdpi/view_detail_arrow.png | Bin 0 -> 513 bytes .../res/drawable-xhdpi/waypoint_circle.png | Bin 0 -> 1485 bytes ...us_canceled_bg.xml => had_done_btn_bg.xml} | 2 +- .../main/res/drawable/order_task_list_bg.xml | 7 + .../main/res/drawable/traveling_btn_bg.xml | 7 + .../res/drawable/view_data_click_btn_bg.xml | 7 + .../src/main/res/drawable/waiting_btn_bg.xml | 7 + .../layout/order_task_detail_list_item.xml | 60 ++++ .../layout/taxi_operation_data_item_view.xml | 30 -- .../res/layout/taxi_operation_data_view.xml | 12 - .../layout/taxi_operation_tab_item_custom.xml | 29 -- .../taxi_operational_data_item_view.xml | 79 +++++ .../res/layout/taxi_operational_data_view.xml | 113 +++++++ .../taxi_order_list_boot_no_data_view.xml | 9 - .../main/res/layout/taxi_order_list_item.xml | 118 +++++++ .../res/layout/taxi_orders_list_day_item.xml | 19 -- .../main/res/layout/taxi_orders_list_item.xml | 127 -------- .../res/layout/taxi_personal_data_view.xml | 46 --- .../main/res/layout/taxi_task_list_item.xml | 95 ++++++ .../src/main/res/values/dimens.xml | 2 - .../src/main/res/values/strings.xml | 2 + 39 files changed, 1540 insertions(+), 704 deletions(-) create mode 100644 OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/constant/OperationalOrderStatusEnum.kt create mode 100644 OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/constant/StationTypeEnum.kt rename OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/{TaxiPersonalDataServiceApi.kt => TaxiOperationalDataServiceApi.kt} (93%) rename OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/{TaxiPersonalDataServiceManager.kt => TaxiOperationalDataServiceManager.kt} (76%) create mode 100644 OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/OperationalDataItemView.kt create mode 100644 OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/OperationalDataUIState.kt create mode 100644 OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/OperationalDataUiIntent.kt create mode 100644 OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/TaskOrOrderAdapter.kt create mode 100644 OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/TaxiOperationalDataViewModel.kt create mode 100644 OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/TaxiOperationalDialogFragment.kt delete mode 100644 OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/personal/PersonalDataUIState.kt delete mode 100644 OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/personal/PersonalDataUiIntent.kt delete mode 100644 OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/personal/TaxiPersonalDataViewModel.kt delete mode 100644 OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/personal/TaxiPersonalDialogFragment.kt create mode 100644 OCH/taxi/unmanned-driver/src/main/res/drawable-xhdpi/close_detail_arrow.png create mode 100644 OCH/taxi/unmanned-driver/src/main/res/drawable-xhdpi/view_detail_arrow.png create mode 100644 OCH/taxi/unmanned-driver/src/main/res/drawable-xhdpi/waypoint_circle.png rename OCH/taxi/unmanned-driver/src/main/res/drawable/{taxi_order_button_status_canceled_bg.xml => had_done_btn_bg.xml} (83%) create mode 100644 OCH/taxi/unmanned-driver/src/main/res/drawable/order_task_list_bg.xml create mode 100644 OCH/taxi/unmanned-driver/src/main/res/drawable/traveling_btn_bg.xml create mode 100644 OCH/taxi/unmanned-driver/src/main/res/drawable/view_data_click_btn_bg.xml create mode 100644 OCH/taxi/unmanned-driver/src/main/res/drawable/waiting_btn_bg.xml create mode 100644 OCH/taxi/unmanned-driver/src/main/res/layout/order_task_detail_list_item.xml delete mode 100644 OCH/taxi/unmanned-driver/src/main/res/layout/taxi_operation_data_item_view.xml delete mode 100644 OCH/taxi/unmanned-driver/src/main/res/layout/taxi_operation_data_view.xml delete mode 100644 OCH/taxi/unmanned-driver/src/main/res/layout/taxi_operation_tab_item_custom.xml create mode 100644 OCH/taxi/unmanned-driver/src/main/res/layout/taxi_operational_data_item_view.xml create mode 100644 OCH/taxi/unmanned-driver/src/main/res/layout/taxi_operational_data_view.xml delete mode 100644 OCH/taxi/unmanned-driver/src/main/res/layout/taxi_order_list_boot_no_data_view.xml create mode 100644 OCH/taxi/unmanned-driver/src/main/res/layout/taxi_order_list_item.xml delete mode 100644 OCH/taxi/unmanned-driver/src/main/res/layout/taxi_orders_list_day_item.xml delete mode 100644 OCH/taxi/unmanned-driver/src/main/res/layout/taxi_orders_list_item.xml delete mode 100644 OCH/taxi/unmanned-driver/src/main/res/layout/taxi_personal_data_view.xml create mode 100644 OCH/taxi/unmanned-driver/src/main/res/layout/taxi_task_list_item.xml diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/TaxiPersonalDatatBean.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/TaxiPersonalDatatBean.kt index c15670c181..05d40e479b 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/TaxiPersonalDatatBean.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/TaxiPersonalDatatBean.kt @@ -7,17 +7,22 @@ import com.mogo.eagle.core.data.BaseData * @date: 2023/11/3 */ -data class QueryTaskRespBean(var data: Result?) : BaseData(){ +data class QueryTaskRespBean(var data: MutableList?) : BaseData(){ class Result(var startSiteName: String, var endSiteName: String, var startTime: Long, var taskType: Int) } -data class QueryOrdersRespBean(var data: Result?) : BaseData(){ +data class QueryOrdersRespBean(var data: MutableList?) : BaseData(){ class Result(var orderNo: String, var payAmount:String, - var status: Int, //70已取消 60已完成 51待支付 40服务中 + var status: Int, //60已完成 51待支付 53待退款 var createTime: Long ) -} \ No newline at end of file +} + +data class QueryServingDurationRespBean(var data: Long) : BaseData() + +data class OrderTaskDetailStationBean(var stationName: String, + var stationType: Int) : BaseData() //0: 途经点 1:订单上车点 2:订单下车点 \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/constant/OperationalOrderStatusEnum.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/constant/OperationalOrderStatusEnum.kt new file mode 100644 index 0000000000..a0d19fa27c --- /dev/null +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/constant/OperationalOrderStatusEnum.kt @@ -0,0 +1,34 @@ +package com.mogo.och.taxi.constant + +/** + * Created on 2023/11/9 + * 待出行, 行程中, 待支付, 已完成, 已取消, 已退款 + * 0 无, + * <=30 待出行, + * 40 行程中, + * 51 待支付, + * 53 已退款, + * 60 已完成, + * 70 已取消 + */ +enum class OperationalOrderStatusEnum(val code: Int, val value: String) { + None( 0,"无"), + WaitingForTravel( 30,"待出行"), //<=30 待出行 + DuringTheJourney( 40, "行程中"), + Unpaid(51, "待支付"), + Refunded(53, "已退款"), + JourneyCompleted(60,"已完成"),//行程完成 + Cancel( 70, "已取消"); + + companion object { + @JvmStatic + fun valueOf(code: Int): OperationalOrderStatusEnum? { + for (value in values()) { + if (value.code == code) { + return value + } + } + return None + } + } +} \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/constant/StationTypeEnum.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/constant/StationTypeEnum.kt new file mode 100644 index 0000000000..e6d2ee8147 --- /dev/null +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/constant/StationTypeEnum.kt @@ -0,0 +1,26 @@ +package com.mogo.och.taxi.constant + +import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean + +/** + * Created on 2023/11/9 + * taskType = 1 途经点, = 2 订单上车点, = 3 订单下车点 + */ +enum class StationTypeEnum(val code: Int,val value: String) { + None(0,"无"), + PathwayStation( 1,"途径点"), + OrderStartStation( 2,"上车点"), + OrderEndStation( 3,"下车点"); + + companion object { + @JvmStatic + fun valueOf(code: Int): StationTypeEnum? { + for (value in values()) { + if (value.code == code) { + return value + } + } + return None + } + } +} \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiPersonalDataServiceApi.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiOperationalDataServiceApi.kt similarity index 93% rename from OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiPersonalDataServiceApi.kt rename to OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiOperationalDataServiceApi.kt index 911a44eeef..cd5b817c7e 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiPersonalDataServiceApi.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiOperationalDataServiceApi.kt @@ -4,6 +4,7 @@ import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.eagle.core.data.BaseData import com.mogo.och.taxi.bean.QueryTaskRespBean import com.mogo.och.taxi.bean.QueryOrdersRespBean +import com.mogo.och.taxi.bean.QueryServingDurationRespBean import io.reactivex.Observable import retrofit2.http.GET import retrofit2.http.Header @@ -14,7 +15,7 @@ import retrofit2.http.Query * @author: wangmingjun * @date: 2023/7/26 */ -interface TaxiPersonalDataServiceApi { +interface TaxiOperationalDataServiceApi { /** * 车辆演练任务列表 @@ -35,7 +36,7 @@ interface TaxiPersonalDataServiceApi { fun queryServingDuration(@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, @Header("ticket") ticket: String = MoGoAiCloudClientConfig.getInstance().token, @Query("sn") sn: String? - ):Observable + ):Observable /** * 根据订单查询任务列表 @@ -45,7 +46,7 @@ interface TaxiPersonalDataServiceApi { fun queryTaskListByOrder( @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, @Header("ticket") ticket: String = MoGoAiCloudClientConfig.getInstance().token, - @Query("orderNo")orderNo: Long? + @Query("orderNo")orderNo: String? ): Observable /** diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiPersonalDataServiceManager.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiOperationalDataServiceManager.kt similarity index 76% rename from OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiPersonalDataServiceManager.kt rename to OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiOperationalDataServiceManager.kt index b831f6478c..c6cd8a9121 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiPersonalDataServiceManager.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/network/TaxiOperationalDataServiceManager.kt @@ -9,16 +9,17 @@ import com.mogo.och.common.module.biz.network.OchCommonServiceCallback import com.mogo.och.common.module.biz.network.OchCommonSubscribeImpl import com.mogo.och.common.module.biz.network.interceptor.transformTry import com.mogo.och.taxi.bean.QueryOrdersRespBean +import com.mogo.och.taxi.bean.QueryServingDurationRespBean import com.mogo.och.taxi.bean.QueryTaskRespBean /** * Created by pangfan on 2021/8/19 */ -object TaxiPersonalDataServiceManager { +object TaxiOperationalDataServiceManager { - private var mOCHTaxiPersonalDataServiceApi: TaxiPersonalDataServiceApi = + private var mOCHTaxiOperationalDataServiceApi: TaxiOperationalDataServiceApi = MoGoRetrofitFactory.getInstance(OchCommonConst.getBaseUrl()).create( - TaxiPersonalDataServiceApi::class.java + TaxiOperationalDataServiceApi::class.java ) /** @@ -28,7 +29,7 @@ object TaxiPersonalDataServiceManager { fun queryCurrentScheduledTaskList(context: Context, callback: OchCommonServiceCallback? ) { - mOCHTaxiPersonalDataServiceApi.queryCurrentScheduledTaskList( + mOCHTaxiOperationalDataServiceApi.queryCurrentScheduledTaskList( sn = MoGoAiCloudClientConfig.getInstance().sn ) .transformTry() @@ -39,8 +40,9 @@ object TaxiPersonalDataServiceManager { * 查询车辆服务时长 */ @JvmStatic - fun queryServingDuration(context: Context, callback: OchCommonServiceCallback?) { - mOCHTaxiPersonalDataServiceApi.queryServingDuration( + fun queryServingDuration(context: Context, + callback: OchCommonServiceCallback?) { + mOCHTaxiOperationalDataServiceApi.queryServingDuration( sn = MoGoAiCloudClientConfig.getInstance().sn ) .transformTry() @@ -52,10 +54,10 @@ object TaxiPersonalDataServiceManager { */ @JvmStatic fun queryTaskListByOrder( - context: Context,orderNo: Long, + context: Context,orderNo: String, callback: OchCommonServiceCallback? ) { - mOCHTaxiPersonalDataServiceApi.queryTaskListByOrder( + mOCHTaxiOperationalDataServiceApi.queryTaskListByOrder( orderNo = orderNo ) .transformTry() @@ -70,7 +72,7 @@ object TaxiPersonalDataServiceManager { context: Context, callback: OchCommonServiceCallback? ) { - mOCHTaxiPersonalDataServiceApi.queryCurrentCompleteOrder( + mOCHTaxiOperationalDataServiceApi.queryCurrentCompleteOrder( sn = MoGoAiCloudClientConfig.getInstance().sn ) .transformTry() @@ -85,7 +87,7 @@ object TaxiPersonalDataServiceManager { context: Context, callback: OchCommonServiceCallback? ) { - mOCHTaxiPersonalDataServiceApi.queryCurrentDayOrder( + mOCHTaxiOperationalDataServiceApi.queryCurrentDayOrder( sn = MoGoAiCloudClientConfig.getInstance().sn ) .transformTry() diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/base/TaxiFragment.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/base/TaxiFragment.kt index a9d9c5d8fd..7b83ee52a7 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/base/TaxiFragment.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/base/TaxiFragment.kt @@ -20,7 +20,7 @@ import com.mogo.och.taxi.R import com.mogo.och.taxi.constant.TaxiDriverEventConst import com.mogo.och.taxi.constant.TaxiOrderStatusEnum import com.mogo.och.taxi.network.TaxiDriverLoginImpl -import com.mogo.och.taxi.ui.personal.TaxiPersonalDialogFragment +import com.mogo.och.taxi.ui.operational.TaxiOperationalDialogFragment import com.mogo.och.taxi.ui.task.TaxiTaskModel import com.mogo.och.taxi.ui.task.TaxiTaskTabFragment import com.mogo.och.taxi.utils.TPRouteDataTestUtils @@ -44,7 +44,7 @@ class TaxiFragment : BaseTaxiTabFragment(), } private var taskTabFragment: WeakReference? = null - private var personalDialogFragment: WeakReference? = null + private var personalDialogFragment: WeakReference? = null private var loginService: LoginService? = null @Subscribe(threadMode = ThreadMode.MAIN) @@ -66,7 +66,7 @@ class TaxiFragment : BaseTaxiTabFragment(), } private fun openOperationalInfoView() { - personalDialogFragment = WeakReference(TaxiPersonalDialogFragment()) + personalDialogFragment = WeakReference(TaxiOperationalDialogFragment()) activity?.supportFragmentManager?.let { personalDialogFragment!!.get() ?.show(it, "service_data") diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/OperationalDataItemView.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/OperationalDataItemView.kt new file mode 100644 index 0000000000..342b466060 --- /dev/null +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/OperationalDataItemView.kt @@ -0,0 +1,63 @@ +package com.mogo.och.taxi.ui.operational + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.och.taxi.R +import kotlinx.android.synthetic.main.taxi_operational_data_item_view.view.operationDataContent1Tv +import kotlinx.android.synthetic.main.taxi_operational_data_item_view.view.operationDataContentTv +import kotlinx.android.synthetic.main.taxi_operational_data_item_view.view.operationDataUnit1Tv +import kotlinx.android.synthetic.main.taxi_operational_data_item_view.view.operationDataUnitTv +import kotlinx.android.synthetic.main.taxi_operational_data_item_view.view.operationalDataTagTv +import kotlinx.android.synthetic.main.taxi_operational_data_item_view.view.operationalDataView + +/** + * @author: wangmingjun + * @date: 2023/11/6 + */ +class OperationalDataItemView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null +) : ConstraintLayout(context, attrs){ + + private var mClickListener: DataViewClickListener? = null + + init { + LayoutInflater.from(context).inflate(R.layout.taxi_operational_data_item_view,this,true) + initViewClick() + } + + private fun initViewClick() { + operationalDataView.onClick { + mClickListener?.onClick() + } + } + + fun setOperationalDuration(hours: String,unit1: String,minutes: String,unit2:String){ + operationDataContentTv.text = hours + operationDataUnitTv.text = unit1 + operationDataContent1Tv.text = minutes + operationDataUnit1Tv.text = unit2 + } + + fun setOperationDataContentTv(text: String,unit: String){ + operationDataContentTv.text = text + operationDataUnitTv.text = unit + } + + fun setOperationalDataTagTv(text: String){ + operationalDataTagTv.text = text + } + + fun setOperationalDataViewClick(isVisible: Int,clickListener: DataViewClickListener?){ + operationalDataView.visibility = isVisible + mClickListener = clickListener + } + + interface DataViewClickListener{ + fun onClick() + } + +} \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/OperationalDataUIState.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/OperationalDataUIState.kt new file mode 100644 index 0000000000..edb73c4845 --- /dev/null +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/OperationalDataUIState.kt @@ -0,0 +1,31 @@ +package com.mogo.och.taxi.ui.operational + +import com.mogo.eagle.core.data.BaseData +import com.mogo.och.taxi.base.IUiState +import com.mogo.och.taxi.bean.QueryOrdersRespBean +import com.mogo.och.taxi.bean.QueryServingDurationRespBean +import com.mogo.och.taxi.bean.QueryTaskRespBean + +/** + * @author: wangmingjun + * @date: 2023/11/2 + */ +data class OperationalDataUIState(val operationalDataUIState: OperationalDataStateUIState) : IUiState +sealed class OperationalDataStateUIState{ + object Init : OperationalDataStateUIState() + + data class ScheduledTaskList(val currentScheduledTaskList : MutableList?) + : OperationalDataStateUIState() + + data class OrderTaskList(val currentOrderTaskList : MutableList?) + : OperationalDataStateUIState() + + data class TotalOrderList(val totalOrderList : MutableList?) + : OperationalDataStateUIState() + + data class CompletedOrderList(val completedOrderList : MutableList?) + : OperationalDataStateUIState() + + data class ServingDuration(val servingDuration : QueryServingDurationRespBean?) + : OperationalDataStateUIState() +} \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/OperationalDataUiIntent.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/OperationalDataUiIntent.kt new file mode 100644 index 0000000000..dac38c7d81 --- /dev/null +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/OperationalDataUiIntent.kt @@ -0,0 +1,25 @@ +package com.mogo.och.taxi.ui.operational + +import com.mogo.och.taxi.base.IUiIntent + +/** + * @author: wangmingjun + * @date: 2023/7/26 + */ +sealed class OperationalDataUiIntent: IUiIntent{ + //查询车辆演练任务 + object QueryCurrentScheduledTaskList : OperationalDataUiIntent() + + //查询车辆服务时长 + object QueryServingDuration : OperationalDataUiIntent() + + //根据订单查询任务列表 + class QueryTaskListByOrder(val orderNo: String) : OperationalDataUiIntent() + + //查询车辆当天已完成订单 + object QueryCurrentCompleteOrder: OperationalDataUiIntent() + + //查询车辆当天所有订单 + object QueryCurrentDayOrder: OperationalDataUiIntent() + +} \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/TaskOrOrderAdapter.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/TaskOrOrderAdapter.kt new file mode 100644 index 0000000000..88ed084a7a --- /dev/null +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/TaskOrOrderAdapter.kt @@ -0,0 +1,298 @@ +package com.mogo.och.taxi.ui.operational + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.AppCompatTextView +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.eagle.core.utilcode.mogo.view.SpacesItemDecoration +import com.mogo.och.common.module.utils.DateTimeUtil +import com.mogo.och.taxi.R +import com.mogo.och.taxi.bean.OrderTaskDetailStationBean +import com.mogo.och.taxi.bean.QueryOrdersRespBean +import com.mogo.och.taxi.bean.QueryTaskRespBean +import com.mogo.och.taxi.constant.OperationalOrderStatusEnum +import com.mogo.och.taxi.constant.StationTypeEnum +import com.mogo.och.taxi.constant.TaskTypeEnum +import com.mogo.och.taxi.constant.TaxiOrderStatusEnum + +/** + * @author: wangmingjun + * @date: 2023/11/7 + */ +/** + * 任务adapter + */ +class TaskListAdapter(val context: Context, + private val dataList: MutableList?) + : RecyclerView.Adapter(){ + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TaskItemViewHolder { + var view = LayoutInflater.from(context).inflate(R.layout.taxi_task_list_item, parent, false) + return TaskItemViewHolder(view) + } + + override fun getItemCount(): Int { + return dataList?.size ?: 0 + } + + override fun onBindViewHolder(holder: TaskItemViewHolder, position: Int) { + dataList?.also { + val taskInfo = dataList[holder.bindingAdapterPosition] + holder.taskTimeTv.text = "下单时间 " + DateTimeUtil.second2MMSS(taskInfo.startTime) + holder.taskTypeBt.text = "演练单" + holder.taskStartSiteTv.text = taskInfo.startSiteName + holder.taskEndSiteTv.text = taskInfo.endSiteName + } + } + + class TaskItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){ + var taskTimeTv: AppCompatTextView + var taskTypeBt: Button + var taskStartSiteTv: AppCompatTextView + var taskEndSiteTv: AppCompatTextView + init { + taskTimeTv = itemView.findViewById(R.id.taskTimeTv) + taskTypeBt = itemView.findViewById(R.id.taskTypeBt) + taskStartSiteTv = itemView.findViewById(R.id.taskStartSiteTv) + taskEndSiteTv = itemView.findViewById(R.id.taskEndSiteTv) + } + } +} + +/** + * 订单adapter + */ +class OrderListAdapter(val context: Context, + private val dataList: MutableList?, + private val clickViewDetailListener: ClickViewDetailListener?) + : RecyclerView.Adapter(){ + + private var mOrderTaskStationList: MutableList? = null + private var taskDetailListAdapter: OrderTaskDetailListAdapter? = null + private var currentViewHolder: OrderItemViewHolder? = null + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OrderItemViewHolder { + val view = LayoutInflater.from(context).inflate(R.layout.taxi_order_list_item, parent, false) + return OrderItemViewHolder(view) + } + + override fun getItemCount(): Int { + return dataList?.size ?: 0 + } + + @SuppressLint("UseCompatLoadingForDrawables") + override fun onBindViewHolder(holder: OrderItemViewHolder, position: Int) { + dataList?.also { + val orderInfo = it[holder.bindingAdapterPosition] + holder.orderTimeTv.text = "下单时间 "+ DateTimeUtil.second2MMSS(orderInfo.createTime) + holder.orderNumTv.text = "订单编号: " + orderInfo.orderNo + holder.orderPriceTv.text = orderInfo.payAmount + holder.orderTypeBt.text = "运营单" + + holder.orderTaskStationView.visibility = View.GONE + + initViewDetailBtn(holder) + + initOrderStatus(holder) + + initClickEvent(holder) + } + } + + private fun initViewDetailBtn(holder: OrderItemViewHolder) { + dataList?.also { + val orderInfo = it[holder.bindingAdapterPosition] + holder.orderViewDetailBt.text = "详情" + holder.orderViewDetailBt.tag = true + holder.orderViewDetailBt.setCompoundDrawablesWithIntrinsicBounds(null,null, + context.getDrawable(R.drawable.view_detail_arrow),null) + when(orderInfo.status){ + OperationalOrderStatusEnum.Refunded.code,OperationalOrderStatusEnum.Unpaid.code, + OperationalOrderStatusEnum.JourneyCompleted.code, + TaxiOrderStatusEnum.ArriveAtEnd.code -> { + holder.orderViewDetailBt.visibility = View.VISIBLE + } + else -> { + holder.orderViewDetailBt.visibility = View.INVISIBLE + } + } + } + } + + private fun initClickEvent(holder: OrderItemViewHolder) { + dataList?.also { + holder.orderViewDetailBt.onClick { + currentViewHolder = holder + if (holder.orderViewDetailBt.tag as Boolean){ + holder.orderViewDetailBt.text = "收起" + holder.orderViewDetailBt.tag = false + holder.orderViewDetailBt.setCompoundDrawablesWithIntrinsicBounds(null,null, + ContextCompat.getDrawable(context,R.drawable.close_detail_arrow),null) + clickViewDetailListener?.clickViewOrderDetail(dataList[holder.bindingAdapterPosition].orderNo) + }else{ + holder.orderViewDetailBt.text = "详情" + holder.orderViewDetailBt.tag = true + holder.orderViewDetailBt.setCompoundDrawablesWithIntrinsicBounds(null,null, + ContextCompat.getDrawable(context,R.drawable.view_detail_arrow),null) + holder.orderTaskStationView.visibility = View.GONE + taskDetailListAdapter = null + mOrderTaskStationList = null + } + + } + } + } + + fun updateTaskStationView(orderTaskStationList: MutableList?){ + //RecyclerView 更新 + orderTaskStationList.also { + mOrderTaskStationList = orderTaskStationList + taskDetailListAdapter = OrderTaskDetailListAdapter(context,mOrderTaskStationList) + currentViewHolder?.orderTaskStationView?.layoutManager = + LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) + currentViewHolder?.orderTaskStationView?.addItemDecoration( + SpacesItemDecoration( + -3 + ) + ) + currentViewHolder?.orderTaskStationView?.adapter = taskDetailListAdapter + currentViewHolder?.orderTaskStationView?.visibility = View.VISIBLE + } + } + + private fun initOrderStatus(holder: OrderItemViewHolder) { + dataList?.also { + val orderInfo = it[holder.bindingAdapterPosition] + holder.orderStatusBt.text = + if (orderInfo.status <= OperationalOrderStatusEnum.WaitingForTravel.code) { + OperationalOrderStatusEnum.valueOf(OperationalOrderStatusEnum.WaitingForTravel.code)?.value + } else if (orderInfo.status == TaxiOrderStatusEnum.ArriveAtEnd.code){ // 到达目的地算已完成 + OperationalOrderStatusEnum.valueOf(OperationalOrderStatusEnum.JourneyCompleted.code)?.value + }else OperationalOrderStatusEnum.valueOf(orderInfo.status)?.value + + when (orderInfo.status) { + //行程中3BC593、已完成-已取消-已退款364071、待支付-待出行E5902D + OperationalOrderStatusEnum.WaitingForTravel.code, + OperationalOrderStatusEnum.Unpaid.code -> { + holder.orderStatusBt.background = + ContextCompat.getDrawable(context, R.drawable.waiting_btn_bg) + } + + OperationalOrderStatusEnum.DuringTheJourney.code -> { + holder.orderStatusBt.background = + ContextCompat.getDrawable(context, R.drawable.traveling_btn_bg) + } + + OperationalOrderStatusEnum.Cancel.code, OperationalOrderStatusEnum.JourneyCompleted.code, + OperationalOrderStatusEnum.Refunded.code -> { + holder.orderStatusBt.background = + ContextCompat.getDrawable(context, R.drawable.had_done_btn_bg) + } + + else -> { + holder.orderStatusBt.background = + ContextCompat.getDrawable(context, R.drawable.waiting_btn_bg) + } + } + } + } + + class OrderItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){ + var orderTimeTv: AppCompatTextView + var orderNumTv: AppCompatTextView + var orderPriceTv: AppCompatTextView + var orderViewDetailBt: AppCompatTextView + var orderTypeBt: AppCompatTextView + var orderStatusBt: AppCompatTextView + var orderTaskStationView: RecyclerView + init { + orderTimeTv = itemView.findViewById(R.id.orderTimeTv) + orderNumTv = itemView.findViewById(R.id.orderNumTv) + orderPriceTv = itemView.findViewById(R.id.orderPriceTv) + orderViewDetailBt = itemView.findViewById(R.id.orderViewDetailBt) + orderTypeBt = itemView.findViewById(R.id.orderTypeBt) + orderStatusBt = itemView.findViewById(R.id.orderStatusBt) + orderTaskStationView = itemView.findViewById(R.id.orderTaskStationView) + } + } + + interface ClickViewDetailListener{ + fun clickViewOrderDetail(orderNo: String) + } +} + +/** + * 订单途经点, 上车点, 下车点 adapter + */ +class OrderTaskDetailListAdapter(val context: Context, + private val dataList: MutableList?) + :RecyclerView.Adapter(){ + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TaskDetailViewHolder { + val view = LayoutInflater.from(context).inflate(R.layout.order_task_detail_list_item, parent, false) + return TaskDetailViewHolder(view) + } + + override fun getItemCount(): Int { + return dataList?.size?:0 + } + + override fun onBindViewHolder(holder: TaskDetailViewHolder, position: Int) { + dataList?.also { + when (position) { + 0 -> { + holder.stationLineTopIv.visibility = View.INVISIBLE + holder.stationLineBottomIv.visibility = View.VISIBLE + } + dataList.size-1 -> { + holder.stationLineTopIv.visibility = View.VISIBLE + holder.stationLineBottomIv.visibility = View.INVISIBLE + } + else -> { + holder.stationLineTopIv.visibility = View.VISIBLE + holder.stationLineBottomIv.visibility = View.VISIBLE + } + } + val taskDetail = dataList[holder.bindingAdapterPosition] + when (taskDetail.stationType){ + StationTypeEnum.PathwayStation.code -> { + holder.taskStationTagTv.text = "途经:" + holder.stationCircleIv.setImageResource(R.drawable.waypoint_circle) + } + StationTypeEnum.OrderStartStation.code -> { + holder.taskStationTagTv.text = "上车:" + holder.stationCircleIv.setImageResource(R.drawable.taxi_driver_circle_green_big) + } + StationTypeEnum.OrderEndStation.code -> { + holder.taskStationTagTv.text = "下车:" + holder.stationCircleIv.setImageResource(R.drawable.taxi_driver_circle_blue_big) + } + } + holder.taskStationNameTv.text = taskDetail.stationName + } + } + class TaskDetailViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + var taskStationTagTv: AppCompatTextView + var taskStationNameTv: AppCompatTextView + var stationLineTopIv: AppCompatImageView + var stationLineBottomIv: AppCompatImageView + var stationCircleIv: AppCompatImageView + + init { + taskStationTagTv = itemView.findViewById(R.id.taskStationTagTv) + taskStationNameTv = itemView.findViewById(R.id.taskStationNameTv) + stationLineTopIv = itemView.findViewById(R.id.stationLineTopIv) + stationLineBottomIv = itemView.findViewById(R.id.stationLineBottomIv) + stationCircleIv = itemView.findViewById(R.id.stationCircleIv) + } + } +} + + diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/TaxiOperationalDataViewModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/TaxiOperationalDataViewModel.kt new file mode 100644 index 0000000000..ac0bb3b657 --- /dev/null +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/TaxiOperationalDataViewModel.kt @@ -0,0 +1,225 @@ +package com.mogo.och.taxi.ui.operational + +import com.mogo.commons.AbsMogoApplication +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.GsonUtils +import com.mogo.eagle.core.utilcode.util.NetworkUtils +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback +import com.mogo.och.taxi.R +import com.mogo.och.taxi.base.BaseViewModel +import com.mogo.och.taxi.base.IUiIntent +import com.mogo.och.taxi.bean.QueryOrdersRespBean +import com.mogo.och.taxi.bean.QueryServingDurationRespBean +import com.mogo.och.taxi.bean.QueryTaskRespBean +import com.mogo.och.taxi.network.TaxiOperationalDataServiceManager + +/** + * @author: wangmingjun + * @date: 2023/11/2 + */ +class TaxiOperationalDataViewModel : BaseViewModel(){ + + private val TAG = SceneConstant.M_TAXI + "TaxiOperationalDataViewModel" + override fun initUiState(): OperationalDataUIState { + return OperationalDataUIState(OperationalDataStateUIState.Init) + } + + override fun handleIntent(intent: IUiIntent) { + when (intent) { + is OperationalDataUiIntent.QueryCurrentScheduledTaskList -> { + queryCurrentScheduledTaskList() + } + is OperationalDataUiIntent.QueryServingDuration -> { + queryServingDuration() + } + is OperationalDataUiIntent.QueryTaskListByOrder -> { + queryTaskListByOrderNo(intent.orderNo) + } + is OperationalDataUiIntent.QueryCurrentCompleteOrder -> { + queryCurrentCompleteOrder() + } + is OperationalDataUiIntent.QueryCurrentDayOrder -> { + queryCurrentDayOrder() + } + } + } + + + /** + * 车辆演练任务列表 + */ + private fun queryCurrentScheduledTaskList() { + TaxiOperationalDataServiceManager.queryCurrentScheduledTaskList( + AbsMogoApplication.getApp().applicationContext, + object :OchCommonServiceCallback{ + override fun onSuccess(data: QueryTaskRespBean?) { + CallerLogger.d(TAG, "queryCurrentScheduledTaskList" + GsonUtils.toJson(data)) + data?.also { + sendUiState { + copy( + operationalDataUIState = + OperationalDataStateUIState.ScheduledTaskList(data.data) + ) + } + } + } + + override fun onFail(code: Int, msg: String?) { + ToastUtils.showShort(msg) + } + + override fun onError() { + val context = AbsMogoApplication.getApp().applicationContext + if (!NetworkUtils.isConnected(context)) { + ToastUtils.showShort(context.getString(R.string.network_error_tip)) + } else { + ToastUtils.showShort(context.getString(R.string.request_error_tip)) + } + } + + }) + } + + /** + * 车辆服务市场列表 + */ + private fun queryServingDuration(){ + TaxiOperationalDataServiceManager.queryServingDuration( + AbsMogoApplication.getApp().applicationContext, + object :OchCommonServiceCallback{ + override fun onSuccess(data: QueryServingDurationRespBean) { //服务时长返回 秒 + CallerLogger.d(TAG, "queryServingDuration" + GsonUtils.toJson(data)) + sendUiState { + copy( + operationalDataUIState = + OperationalDataStateUIState.ServingDuration(data) + ) + } + } + + override fun onFail(code: Int, msg: String?) { + ToastUtils.showShort(msg) + } + + override fun onError() { + val context = AbsMogoApplication.getApp().applicationContext + if (!NetworkUtils.isConnected(context)) { + ToastUtils.showShort(context.getString(R.string.network_error_tip)) + } else { + ToastUtils.showShort(context.getString(R.string.request_error_tip)) + } + } + + }) + } + + /** + * 根据订单查询任务列表 + */ + private fun queryTaskListByOrderNo(orderNo: String){ + TaxiOperationalDataServiceManager.queryTaskListByOrder( + AbsMogoApplication.getApp().applicationContext, + orderNo, + object :OchCommonServiceCallback{ + override fun onSuccess(data: QueryTaskRespBean?) { + CallerLogger.d(TAG, "queryTaskListByOrderNo" + GsonUtils.toJson(data)) + + data?.also { + sendUiState { + copy( + operationalDataUIState = + OperationalDataStateUIState.OrderTaskList(data.data) + ) + } + } + } + + override fun onFail(code: Int, msg: String?) { + ToastUtils.showShort(msg) + } + + override fun onError() { + val context = AbsMogoApplication.getApp().applicationContext + if (!NetworkUtils.isConnected(context)) { + ToastUtils.showShort(context.getString(R.string.network_error_tip)) + } else { + ToastUtils.showShort(context.getString(R.string.request_error_tip)) + } + } + + }) + } + + /** + * 查询车辆当天已完成订单 + */ + private fun queryCurrentCompleteOrder(){ + TaxiOperationalDataServiceManager.queryCurrentCompleteOrder( + AbsMogoApplication.getApp().applicationContext, + object :OchCommonServiceCallback{ + override fun onSuccess(data: QueryOrdersRespBean?) { + CallerLogger.d(TAG, "queryCurrentCompleteOrder" + GsonUtils.toJson(data)) + + data?.also { + sendUiState { + copy( + operationalDataUIState = + OperationalDataStateUIState.CompletedOrderList(data.data) + ) + } + } + } + + override fun onFail(code: Int, msg: String?) { + ToastUtils.showShort(msg) + } + + override fun onError() { + val context = AbsMogoApplication.getApp().applicationContext + if (!NetworkUtils.isConnected(context)) { + ToastUtils.showShort(context.getString(R.string.network_error_tip)) + } else { + ToastUtils.showShort(context.getString(R.string.request_error_tip)) + } + } + + }) + } + + /** + * 查询车辆当天所有订单 + */ + private fun queryCurrentDayOrder(){ + TaxiOperationalDataServiceManager.queryCurrentDayOrder( + AbsMogoApplication.getApp().applicationContext, + object :OchCommonServiceCallback{ + override fun onSuccess(data: QueryOrdersRespBean?) { + CallerLogger.d(TAG, "queryCurrentDayOrder" + GsonUtils.toJson(data)) + + data?.also { + sendUiState { + copy( + operationalDataUIState = + OperationalDataStateUIState.TotalOrderList(data.data) + ) + } + } + } + + override fun onFail(code: Int, msg: String?) { + ToastUtils.showShort(msg) + } + + override fun onError() { + val context = AbsMogoApplication.getApp().applicationContext + if (!NetworkUtils.isConnected(context)) { + ToastUtils.showShort(context.getString(R.string.network_error_tip)) + } else { + ToastUtils.showShort(context.getString(R.string.request_error_tip)) + } + } + }) + } +} \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/TaxiOperationalDialogFragment.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/TaxiOperationalDialogFragment.kt new file mode 100644 index 0000000000..52fd45a633 --- /dev/null +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/operational/TaxiOperationalDialogFragment.kt @@ -0,0 +1,304 @@ +package com.mogo.och.taxi.ui.operational + +import android.app.Dialog +import android.content.Context +import android.graphics.Color +import android.graphics.Point +import android.os.Bundle +import android.view.Gravity +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import androidx.fragment.app.DialogFragment +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.LinearLayoutManager +import com.mogo.commons.AbsMogoApplication +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.och.common.module.utils.DateTimeUtil +import com.mogo.och.taxi.R +import com.mogo.och.taxi.bean.OrderTaskDetailStationBean +import com.mogo.och.taxi.ui.common.AvoidLeakDialog +import com.mogo.och.taxi.bean.QueryOrdersRespBean +import com.mogo.och.taxi.bean.QueryServingDurationRespBean +import com.mogo.och.taxi.bean.QueryTaskRespBean +import com.mogo.och.taxi.constant.StationTypeEnum +import com.mogo.och.taxi.constant.TaskTypeEnum +import com.mogo.och.taxi.ui.task.TaxiCurrentTaskFragment +import kotlinx.android.synthetic.main.taxi_operational_data_view.dayCompletedOrdersView +import kotlinx.android.synthetic.main.taxi_operational_data_view.dayTotalOrdersView +import kotlinx.android.synthetic.main.taxi_operational_data_view.itemDayTv +import kotlinx.android.synthetic.main.taxi_operational_data_view.operationalDataCloseIv +import kotlinx.android.synthetic.main.taxi_operational_data_view.operationDataTitle +import kotlinx.android.synthetic.main.taxi_operational_data_view.operationItemRecyclerView +import kotlinx.android.synthetic.main.taxi_operational_data_view.operationalDataView +import kotlinx.android.synthetic.main.taxi_operational_data_view.operationalDetailView +import kotlinx.android.synthetic.main.taxi_operational_data_view.scheduledTasksView +import kotlinx.android.synthetic.main.taxi_operational_data_view.servingDurationView +import kotlinx.coroutines.flow.map + +/** + * @author: wangmingjun + * @date: 2023/7/24 + */ +class TaxiOperationalDialogFragment : DialogFragment(), + View.OnClickListener { + + private lateinit var mViewModel: TaxiOperationalDataViewModel + private var orderListAdapter: OrderListAdapter? = null + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val dialog = AvoidLeakDialog( + requireContext() + ) + dialog.setHostFragmentReference(this) + return dialog + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + mViewModel = ViewModelProvider( + this, + ViewModelProvider.NewInstanceFactory() + )[TaxiOperationalDataViewModel::class.java] + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.taxi_operational_data_view, container, false ) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initView() + initViewModelObserver() + } + + override fun onStart() { + super.onStart() + isCancelable = false + dialog!!.setCanceledOnTouchOutside(true) + val window = dialog!!.window + //dialog padding 去掉 + window!!.decorView.setPadding(0, 0, 0, 0) + window.setDimAmount(0f) + val params = window.attributes + params.x = 0 + params.y = 0 + val windowManager = + requireContext().getSystemService(Context.WINDOW_SERVICE) as WindowManager + val point = Point() + windowManager.defaultDisplay.getSize(point) + params.width = (point.x * 0.375).toInt() + params.height = ViewGroup.LayoutParams.MATCH_PARENT + d(SceneConstant.M_TAXI + TAG, "width= " + params.width + "height= " + params.height) + window.attributes = params + window.decorView.setBackgroundColor(Color.parseColor("#00FFFFFF")) //设置背景, 不然显示不全 + window.setGravity(Gravity.LEFT or Gravity.BOTTOM) + } + + private fun initView() { + operationalDataCloseIv.setOnClickListener(this) + } + + private fun initViewModelObserver() { + + mViewModel.sendUiIntent(OperationalDataUiIntent.QueryServingDuration) + mViewModel.sendUiIntent(OperationalDataUiIntent.QueryCurrentCompleteOrder) + mViewModel.sendUiIntent(OperationalDataUiIntent.QueryCurrentDayOrder) + mViewModel.sendUiIntent(OperationalDataUiIntent.QueryCurrentScheduledTaskList) + + lifecycleScope.launchWhenStarted { + mViewModel.uiStateFlow.map { it.operationalDataUIState }.collect { operationalDataUIState -> + d(TaxiCurrentTaskFragment.TAG, "uiStateFlow-initViewModelObserver: $operationalDataUIState") + when (operationalDataUIState) { + is OperationalDataStateUIState.Init -> { + } + + is OperationalDataStateUIState.ServingDuration-> { //今日时长 + updateServingDuration(operationalDataUIState.servingDuration) + } + + is OperationalDataStateUIState.CompletedOrderList -> {// 今日订单完成量 + updateCompletedOrderList(operationalDataUIState.completedOrderList) + } + + is OperationalDataStateUIState.TotalOrderList -> { //今日全部订单 + updateTotalOrderList(operationalDataUIState.totalOrderList) + } + + is OperationalDataStateUIState.ScheduledTaskList -> { // 今日演练任务量 + updateScheduledTaskList(operationalDataUIState.currentScheduledTaskList) + } + + is OperationalDataStateUIState.OrderTaskList -> { //订单的详情 + updateOneOrderTaskList(operationalDataUIState.currentOrderTaskList) + } + + else -> {} + } + } + } + } + + private fun updateOneOrderTaskList(currentOrderTaskList: MutableList?) { + if (currentOrderTaskList == null) orderListAdapter?.updateTaskStationView(null) + else{ + var orderTaskDetailList = mutableListOf() + for (index in currentOrderTaskList.size -1 downTo 0){ //后台给的数据是倒序 + val taskDetail = currentOrderTaskList[index] + when(taskDetail.taskType){ + TaskTypeEnum.VirtualTask.code,TaskTypeEnum.ToOrderStartTask.code -> { + if (index != currentOrderTaskList.size-2){ + var bean = + OrderTaskDetailStationBean(taskDetail.endSiteName,StationTypeEnum.PathwayStation.code) + orderTaskDetailList.add(bean) + } + } + TaskTypeEnum.ToOrderEndTask.code -> { + var beanStart = + OrderTaskDetailStationBean(taskDetail.startSiteName,StationTypeEnum.OrderStartStation.code) + orderTaskDetailList.add(beanStart) + var beanEnd = + OrderTaskDetailStationBean(taskDetail.endSiteName,StationTypeEnum.OrderEndStation.code) + orderTaskDetailList.add(beanEnd) + } + } + } + orderListAdapter?.updateTaskStationView(orderTaskDetailList) + } + + + } + + private fun updateScheduledTaskList(currentScheduledTaskList: MutableList?) { + var dataContent = "0" + if (currentScheduledTaskList != null){ + dataContent = currentScheduledTaskList.size.toString() + } + scheduledTasksView.setOperationDataContentTv(dataContent,"个") + scheduledTasksView.setOperationalDataTagTv("今日演练任务量") + scheduledTasksView.setOperationalDataViewClick(View.VISIBLE, + object :OperationalDataItemView.DataViewClickListener{ + override fun onClick() { + currentScheduledTaskList?.also { + operationalDataView.visibility = View.INVISIBLE + operationalDetailView.visibility = View.VISIBLE + operationDataTitle.text = "今日演练任务量列表" + itemDayTv.text = DateTimeUtil.getYMDTime(DateTimeUtil.getCurrentTimeStamp()) + var taskListAdapter = TaskListAdapter(AbsMogoApplication.getApp().applicationContext, it) + operationItemRecyclerView.layoutManager = + LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) + operationItemRecyclerView.adapter = taskListAdapter + } + } + + }) + } + + private fun updateTotalOrderList(totalOrderList: MutableList?) { + var dataContent = "0" + if (totalOrderList != null){ + dataContent = totalOrderList.size.toString() + } + + dayTotalOrdersView.setOperationDataContentTv(dataContent,"单") + dayTotalOrdersView.setOperationalDataTagTv("今日全部订单量") + dayTotalOrdersView.setOperationalDataViewClick(View.VISIBLE, + object :OperationalDataItemView.DataViewClickListener{ + override fun onClick() { + totalOrderList?.also { + operationalDataView.visibility = View.INVISIBLE + operationalDetailView.visibility = View.VISIBLE + operationDataTitle.text = "今日全部订单量列表" + itemDayTv.text = DateTimeUtil.getYMDTime(DateTimeUtil.getCurrentTimeStamp()) + orderListAdapter = OrderListAdapter(AbsMogoApplication.getApp().applicationContext, + it, + object : OrderListAdapter.ClickViewDetailListener{ + override fun clickViewOrderDetail(orderNo: String) { + mViewModel.sendUiIntent(OperationalDataUiIntent.QueryTaskListByOrder(orderNo)) + } + + }) + operationItemRecyclerView.layoutManager = + LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) + operationItemRecyclerView.adapter = orderListAdapter + } + } + + }) + } + + private fun updateCompletedOrderList(completedOrderList: MutableList?) { + + var dataContent = "0" + if (completedOrderList != null){ + dataContent = completedOrderList.size.toString() + } + + dayCompletedOrdersView.setOperationDataContentTv(dataContent,"单") + dayCompletedOrdersView.setOperationalDataTagTv("今日订单完成量") + dayCompletedOrdersView.setOperationalDataViewClick(View.VISIBLE, + object :OperationalDataItemView.DataViewClickListener{ + override fun onClick() { + completedOrderList?.also { + operationalDataView.visibility = View.INVISIBLE + operationalDetailView.visibility = View.VISIBLE + operationDataTitle.text = "今日订单完成量列表" + itemDayTv.text = DateTimeUtil.getYMDTime(DateTimeUtil.getCurrentTimeStamp()) + orderListAdapter = OrderListAdapter(AbsMogoApplication.getApp().applicationContext, + it, + object : OrderListAdapter.ClickViewDetailListener{ + override fun clickViewOrderDetail(orderNo: String) { + mViewModel.sendUiIntent(OperationalDataUiIntent.QueryTaskListByOrder(orderNo)) + } + + }) + operationItemRecyclerView.layoutManager = + LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) + operationItemRecyclerView.adapter = orderListAdapter + } + } + + }) + } + + private fun updateServingDuration(servingDuration: QueryServingDurationRespBean?) { + var duration = DateTimeUtil.second2Time(0) + if (servingDuration != null) { + duration = DateTimeUtil.second2Time(servingDuration.data) + + } + + val listSplit = duration.split(":") + + servingDurationView.setOperationalDuration(listSplit[0],"时",listSplit[1],"分") + servingDurationView.setOperationalDataTagTv("今日服务总时长") + servingDurationView.setOperationalDataViewClick(View.GONE,null) + } + + override fun onClick(v: View) { + if (v.id == R.id.operationalDataCloseIv) { + if (operationalDetailView.visibility == View.GONE){ + dismiss() + }else{ + operationalDetailView.visibility = View.GONE + operationalDataView.visibility = View.VISIBLE + operationDataTitle.text = "网约车运营数据" + } + } + } + + override fun dismiss() { + super.dismiss() + } + + companion object { + private const val TAG = "TaxiOperationalDialogFragment" + } +} \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/personal/PersonalDataUIState.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/personal/PersonalDataUIState.kt deleted file mode 100644 index bd2ae8e192..0000000000 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/personal/PersonalDataUIState.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.mogo.och.taxi.ui.personal - -import com.mogo.eagle.core.data.BaseData -import com.mogo.och.taxi.base.IUiState -import com.mogo.och.taxi.bean.QueryOrdersRespBean -import com.mogo.och.taxi.bean.QueryTaskRespBean - -/** - * @author: wangmingjun - * @date: 2023/11/2 - */ -data class PersonalDataUIState(val personalDataUIState: PersonalDataStateUIState) : IUiState -sealed class PersonalDataStateUIState{ - object Init : PersonalDataStateUIState() - - data class ScheduledTaskList(val currentScheduledTaskList : QueryTaskRespBean.Result?) - : PersonalDataStateUIState() - - data class OrderTaskList(val currentOrderTaskList : QueryTaskRespBean.Result?) - : PersonalDataStateUIState() - - data class TotalOrderList(val totalOrderList : QueryOrdersRespBean.Result?) - : PersonalDataStateUIState() - - data class CompletedOrderList(val completedOrderList : QueryOrdersRespBean.Result?) - : PersonalDataStateUIState() - - data class ServingDuration(val servingDuration : BaseData?) - : PersonalDataStateUIState() -} \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/personal/PersonalDataUiIntent.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/personal/PersonalDataUiIntent.kt deleted file mode 100644 index 5febd8b7e1..0000000000 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/personal/PersonalDataUiIntent.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.mogo.och.taxi.ui.personal - -import com.mogo.och.taxi.base.IUiIntent - -/** - * @author: wangmingjun - * @date: 2023/7/26 - */ -sealed class PersonalDataUiIntent: IUiIntent{ - //查询车辆演练任务 - object QueryCurrentScheduledTaskList : PersonalDataUiIntent() - - //查询车辆服务时长 - object QueryServingDuration : PersonalDataUiIntent() - - //根据订单查询任务列表 - class QueryTaskListByOrder(val orderNo: Long) : PersonalDataUiIntent() - - //查询车辆当天已完成订单 - object QueryCurrentCompleteOrder: PersonalDataUiIntent() - - //查询车辆当天所有订单 - object QueryCurrentDayOrder: PersonalDataUiIntent() - -} \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/personal/TaxiPersonalDataViewModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/personal/TaxiPersonalDataViewModel.kt deleted file mode 100644 index 1430eda7c2..0000000000 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/personal/TaxiPersonalDataViewModel.kt +++ /dev/null @@ -1,133 +0,0 @@ -package com.mogo.och.taxi.ui.personal - -import com.mogo.commons.AbsMogoApplication -import com.mogo.eagle.core.data.BaseData -import com.mogo.och.common.module.biz.network.OchCommonServiceCallback -import com.mogo.och.taxi.base.BaseViewModel -import com.mogo.och.taxi.base.IUiIntent -import com.mogo.och.taxi.bean.QueryOrdersRespBean -import com.mogo.och.taxi.bean.QueryTaskRespBean -import com.mogo.och.taxi.network.TaxiPersonalDataServiceManager - -/** - * @author: wangmingjun - * @date: 2023/11/2 - */ -class TaxiPersonalDataViewModel : BaseViewModel(){ - - override fun initUiState(): PersonalDataUIState { - return PersonalDataUIState(PersonalDataStateUIState.Init) - } - - override fun handleIntent(intent: IUiIntent) { - when (intent) { - is PersonalDataUiIntent.QueryCurrentScheduledTaskList -> { - queryCurrentScheduledTaskList() - } - is PersonalDataUiIntent.QueryServingDuration -> { - queryServingDuration() - } - is PersonalDataUiIntent.QueryTaskListByOrder -> { - queryTaskListByOrder(intent.orderNo) - } - is PersonalDataUiIntent.QueryCurrentCompleteOrder -> { - queryCurrentCompleteOrder() - } - is PersonalDataUiIntent.QueryCurrentDayOrder -> { - queryCurrentDayOrder() - } - } - } - - - /** - * 车辆演练任务列表 - */ - private fun queryCurrentScheduledTaskList() { - TaxiPersonalDataServiceManager.queryCurrentScheduledTaskList( - AbsMogoApplication.getApp().applicationContext, - object :OchCommonServiceCallback{ - override fun onSuccess(data: QueryTaskRespBean?) { - TODO("Not yet implemented") - } - - override fun onFail(code: Int, msg: String?) { - TODO("Not yet implemented") - } - - }) - } - - /** - * 车辆服务市场列表 - */ - private fun queryServingDuration(){ - TaxiPersonalDataServiceManager.queryServingDuration( - AbsMogoApplication.getApp().applicationContext, - object :OchCommonServiceCallback{ - override fun onSuccess(data: BaseData?) { - TODO("Not yet implemented") - } - - override fun onFail(code: Int, msg: String?) { - TODO("Not yet implemented") - } - - }) - } - - /** - * 根据订单查询任务列表 - */ - private fun queryTaskListByOrder(orderNo: Long){ - TaxiPersonalDataServiceManager.queryTaskListByOrder( - AbsMogoApplication.getApp().applicationContext, - orderNo, - object :OchCommonServiceCallback{ - override fun onSuccess(data: QueryTaskRespBean?) { - TODO("Not yet implemented") - } - - override fun onFail(code: Int, msg: String?) { - TODO("Not yet implemented") - } - - }) - } - - /** - * 查询车辆当天已完成订单 - */ - private fun queryCurrentCompleteOrder(){ - TaxiPersonalDataServiceManager.queryCurrentCompleteOrder( - AbsMogoApplication.getApp().applicationContext, - object :OchCommonServiceCallback{ - override fun onSuccess(data: QueryOrdersRespBean?) { - TODO("Not yet implemented") - } - - override fun onFail(code: Int, msg: String?) { - TODO("Not yet implemented") - } - - }) - } - - /** - * 查询车辆当天所有订单 - */ - private fun queryCurrentDayOrder(){ - TaxiPersonalDataServiceManager.queryCurrentDayOrder( - AbsMogoApplication.getApp().applicationContext, - object :OchCommonServiceCallback{ - override fun onSuccess(data: QueryOrdersRespBean?) { - TODO("Not yet implemented") - } - - override fun onFail(code: Int, msg: String?) { - TODO("Not yet implemented") - } - - }) - } -} \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/personal/TaxiPersonalDialogFragment.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/personal/TaxiPersonalDialogFragment.kt deleted file mode 100644 index 7a4e806c10..0000000000 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/personal/TaxiPersonalDialogFragment.kt +++ /dev/null @@ -1,210 +0,0 @@ -package com.mogo.och.taxi.ui.personal - -import android.app.Dialog -import android.content.Context -import android.graphics.Color -import android.graphics.Point -import android.os.Bundle -import android.view.Gravity -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.view.WindowManager -import android.widget.Button -import android.widget.TextView -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.fragment.app.DialogFragment -import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.och.taxi.R -import com.mogo.och.taxi.ui.common.AvoidLeakDialog -import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean -import com.mogo.och.taxi.ui.task.TaxiCurrentTaskFragment -import kotlinx.android.synthetic.main.taxi_no_data_common_view.no_order_data_iv -import kotlinx.android.synthetic.main.taxi_no_data_common_view.no_order_data_view -import kotlinx.android.synthetic.main.taxi_personal_data_view.module_och_taxi_order_list_close_iv -import kotlinx.coroutines.flow.map - -/** - * @author: wangmingjun - * @date: 2023/7/24 - */ -class TaxiPersonalDialogFragment : DialogFragment(), - View.OnClickListener { - - private lateinit var mViewModel: TaxiPersonalDataViewModel - private val orders: MutableList = ArrayList() - - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - val dialog = AvoidLeakDialog( - requireContext() - ) - dialog.setHostFragmentReference(this) - return dialog - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - mViewModel = ViewModelProvider( - this, - ViewModelProvider.NewInstanceFactory() - )[TaxiPersonalDataViewModel::class.java] - } - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.taxi_personal_data_view, container, false ) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - initView() - initViewModelObserver() - } - - override fun onStart() { - super.onStart() - isCancelable = false - dialog!!.setCanceledOnTouchOutside(true) - val window = dialog!!.window - //dialog padding 去掉 - window!!.decorView.setPadding(0, 0, 0, 0) - window.setDimAmount(0f) - val params = window.attributes - params.x = 0 - params.y = 0 - val windowManager = - requireContext().getSystemService(Context.WINDOW_SERVICE) as WindowManager - val point = Point() - windowManager.defaultDisplay.getSize(point) - params.width = (point.x * 0.375).toInt() - params.height = ViewGroup.LayoutParams.MATCH_PARENT - d(SceneConstant.M_TAXI + TAG, "width= " + params.width + "height= " + params.height) - window.attributes = params - window.decorView.setBackgroundColor(Color.parseColor("#00FFFFFF")) //设置背景, 不然显示不全 - window.setGravity(Gravity.LEFT or Gravity.BOTTOM) - } - - private fun initView() { - no_order_data_iv.setImageResource(R.drawable.no_order_data) - val params = no_order_data_iv.layoutParams as ConstraintLayout.LayoutParams - params.width = 480 - params.height = 480 - no_order_data_iv.layoutParams = params - no_order_data_view.visibility = View.VISIBLE - module_och_taxi_order_list_close_iv.setOnClickListener(this) - } - - private fun initViewModelObserver() { - lifecycleScope.launchWhenStarted { - mViewModel.uiStateFlow.map { it.personalDataUIState }.collect { personalDataUIState -> - d(TaxiCurrentTaskFragment.TAG, "uiStateFlow-initViewModelObserver: $personalDataUIState") - when (personalDataUIState) { - is PersonalDataStateUIState.Init -> { - } - - is PersonalDataStateUIState.ServingDuration-> { //今日时长 - - } - - is PersonalDataStateUIState.CompletedOrderList -> {// 今日订单完成量 - - } - - is PersonalDataStateUIState.TotalOrderList -> { //今日全部订单 - - } - - is PersonalDataStateUIState.ScheduledTaskList -> { // 今日演练任务量 - - } - - is PersonalDataStateUIState.OrderTaskList -> { //订单的任务 - - } - - else -> {} - } - } - } - } - - override fun onClick(v: View) { - if (v.id == R.id.module_och_taxi_order_list_close_iv) { - dismiss() - } - } - - internal open inner class OrderDetailViewHolder(itemView: View) : - RecyclerView.ViewHolder(itemView) { - var orderTimeTv: TextView - var orderStatusBt: Button - var startStationTv: TextView - var endStationTv: TextView - var orderNumTv: TextView - var orderTypeBt: Button - var dividerLine: View - - init { - orderTimeTv = itemView.findViewById(R.id.order_time_hm_tv) - orderStatusBt = itemView.findViewById