[6.2.0] 运营信息统计开发完成

This commit is contained in:
wangmingjun
2023-11-10 17:11:58 +08:00
parent 598b22ca46
commit a0dd078824
39 changed files with 1540 additions and 704 deletions

View File

@@ -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<Result>?) : 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<Result>?) : 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
)
}
}
data class QueryServingDurationRespBean(var data: Long) : BaseData()
data class OrderTaskDetailStationBean(var stationName: String,
var stationType: Int) : BaseData() //0: 途经点 1:订单上车点 2:订单下车点

View File

@@ -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
}
}
}

View File

@@ -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
}
}
}

View File

@@ -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<BaseData>
):Observable<QueryServingDurationRespBean>
/**
* 根据订单查询任务列表
@@ -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<QueryTaskRespBean>
/**

View File

@@ -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<QueryTaskRespBean>?
) {
mOCHTaxiPersonalDataServiceApi.queryCurrentScheduledTaskList(
mOCHTaxiOperationalDataServiceApi.queryCurrentScheduledTaskList(
sn = MoGoAiCloudClientConfig.getInstance().sn
)
.transformTry()
@@ -39,8 +40,9 @@ object TaxiPersonalDataServiceManager {
* 查询车辆服务时长
*/
@JvmStatic
fun queryServingDuration(context: Context, callback: OchCommonServiceCallback<BaseData>?) {
mOCHTaxiPersonalDataServiceApi.queryServingDuration(
fun queryServingDuration(context: Context,
callback: OchCommonServiceCallback<QueryServingDurationRespBean>?) {
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<QueryTaskRespBean>?
) {
mOCHTaxiPersonalDataServiceApi.queryTaskListByOrder(
mOCHTaxiOperationalDataServiceApi.queryTaskListByOrder(
orderNo = orderNo
)
.transformTry()
@@ -70,7 +72,7 @@ object TaxiPersonalDataServiceManager {
context: Context,
callback: OchCommonServiceCallback<QueryOrdersRespBean>?
) {
mOCHTaxiPersonalDataServiceApi.queryCurrentCompleteOrder(
mOCHTaxiOperationalDataServiceApi.queryCurrentCompleteOrder(
sn = MoGoAiCloudClientConfig.getInstance().sn
)
.transformTry()
@@ -85,7 +87,7 @@ object TaxiPersonalDataServiceManager {
context: Context,
callback: OchCommonServiceCallback<QueryOrdersRespBean>?
) {
mOCHTaxiPersonalDataServiceApi.queryCurrentDayOrder(
mOCHTaxiOperationalDataServiceApi.queryCurrentDayOrder(
sn = MoGoAiCloudClientConfig.getInstance().sn
)
.transformTry()

View File

@@ -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<TaxiFragment, TaxiPresenter>(),
}
private var taskTabFragment: WeakReference<TaxiTaskTabFragment>? = null
private var personalDialogFragment: WeakReference<TaxiPersonalDialogFragment>? = null
private var personalDialogFragment: WeakReference<TaxiOperationalDialogFragment>? = null
private var loginService: LoginService? = null
@Subscribe(threadMode = ThreadMode.MAIN)
@@ -66,7 +66,7 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
}
private fun openOperationalInfoView() {
personalDialogFragment = WeakReference(TaxiPersonalDialogFragment())
personalDialogFragment = WeakReference(TaxiOperationalDialogFragment())
activity?.supportFragmentManager?.let {
personalDialogFragment!!.get()
?.show(it, "service_data")

View File

@@ -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()
}
}

View File

@@ -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<QueryTaskRespBean.Result>?)
: OperationalDataStateUIState()
data class OrderTaskList(val currentOrderTaskList : MutableList<QueryTaskRespBean.Result>?)
: OperationalDataStateUIState()
data class TotalOrderList(val totalOrderList : MutableList<QueryOrdersRespBean.Result>?)
: OperationalDataStateUIState()
data class CompletedOrderList(val completedOrderList : MutableList<QueryOrdersRespBean.Result>?)
: OperationalDataStateUIState()
data class ServingDuration(val servingDuration : QueryServingDurationRespBean?)
: OperationalDataStateUIState()
}

View File

@@ -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()
}

View File

@@ -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<QueryTaskRespBean.Result>?)
: RecyclerView.Adapter<TaskListAdapter.TaskItemViewHolder>(){
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<QueryOrdersRespBean.Result>?,
private val clickViewDetailListener: ClickViewDetailListener?)
: RecyclerView.Adapter<OrderListAdapter.OrderItemViewHolder>(){
private var mOrderTaskStationList: MutableList<OrderTaskDetailStationBean>? = 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<OrderTaskDetailStationBean>?){
//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<OrderTaskDetailStationBean>?)
:RecyclerView.Adapter<OrderTaskDetailListAdapter.TaskDetailViewHolder>(){
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)
}
}
}

View File

@@ -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<OperationalDataUIState, OperationalDataUiIntent>(){
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<QueryTaskRespBean>{
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<QueryServingDurationRespBean>{
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<QueryTaskRespBean>{
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<QueryOrdersRespBean>{
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<QueryOrdersRespBean>{
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))
}
}
})
}
}

View File

@@ -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<QueryTaskRespBean.Result>?) {
if (currentOrderTaskList == null) orderListAdapter?.updateTaskStationView(null)
else{
var orderTaskDetailList = mutableListOf<OrderTaskDetailStationBean>()
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<QueryTaskRespBean.Result>?) {
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<QueryOrdersRespBean.Result>?) {
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<QueryOrdersRespBean.Result>?) {
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"
}
}

View File

@@ -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()
}

View File

@@ -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()
}

View File

@@ -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<PersonalDataUIState, PersonalDataUiIntent>(){
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<QueryTaskRespBean>{
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<BaseData>{
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<QueryTaskRespBean>{
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<QueryOrdersRespBean>{
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<QueryOrdersRespBean>{
override fun onSuccess(data: QueryOrdersRespBean?) {
TODO("Not yet implemented")
}
override fun onFail(code: Int, msg: String?) {
TODO("Not yet implemented")
}
})
}
}

View File

@@ -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<QueryCurrentTaskRespBean.Result> = 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<TextView>(R.id.order_time_hm_tv)
orderStatusBt = itemView.findViewById<Button>(R.id.order_status_bt)
startStationTv = itemView.findViewById<TextView>(R.id.grab_order_start_station)
endStationTv = itemView.findViewById<TextView>(R.id.grab_order_end_station)
orderNumTv = itemView.findViewById<TextView>(R.id.order_num)
orderTypeBt = itemView.findViewById<Button>(R.id.order_type_bt)
dividerLine = itemView.findViewById<View>(R.id.module_och_taxi_order_divider)
}
}
internal inner class DayGroupViewHolder(itemView: View) :
OrderDetailViewHolder(itemView) {
val dayGroupTv: TextView
init {
dayGroupTv = itemView.findViewById<TextView>(R.id.order_day_tv)
}
}
internal abstract inner class OnTaxiOrderRvOnScrollListener : RecyclerView.OnScrollListener() {
private var isUpwardSliding = false
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
val manager = recyclerView.layoutManager
//不滑动
if (manager is LinearLayoutManager && newState == RecyclerView.SCROLL_STATE_IDLE) {
val lastItemPosition = manager.findLastCompletelyVisibleItemPosition()
val itemCount = manager.itemCount
d(
SceneConstant.M_TAXI + TAG,
"lastItemPosition==$lastItemPosition,itemCount==$itemCount"
)
//向上滑动到最后一个
if (lastItemPosition == itemCount - 1 && isUpwardSliding) {
onLoadMore()
}
}
}
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
isUpwardSliding = dy > 0
}
abstract fun onLoadMore()
}
override fun dismiss() {
super.dismiss()
orders.clear()
}
companion object {
private const val TAG = "OCHTaxiOrdersDialog"
}
}

View File

@@ -171,7 +171,7 @@ class TaxiCurrentTaskFragment : BaseFragment(),
if (currentTaskWithOrder == null) {
initContainerView(false)
removeAllMapMarker()
}else{
} else {
updateViewByCurrentTaskWithOrder(currentTaskWithOrder)
}
updateNextTaskFragment(currentTaskWithOrder)
@@ -215,7 +215,7 @@ class TaxiCurrentTaskFragment : BaseFragment(),
return
}
if (mPrepareTasCountDownTimer != null){
if (mPrepareTasCountDownTimer != null) {
mPrepareTasCountDownTimer?.cancel()
mPrepareTasCountDownTimer = null
}
@@ -370,7 +370,8 @@ class TaxiCurrentTaskFragment : BaseFragment(),
when (taskType) {
TaskTypeEnum.None.code -> {
if (order != null && (currentStatus == TaskStatusEnum.CompleteTask.code
|| currentStatus == TaskStatusEnum.None.code )) { //暂停接单会清空前往上车点任务
|| currentStatus == TaskStatusEnum.None.code)
) { //暂停接单会清空前往上车点任务
updateOrderUI(order)
}
}
@@ -379,7 +380,7 @@ class TaxiCurrentTaskFragment : BaseFragment(),
if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code) {
updateOrderUI(order)
}else{
} else {
updateVirtualTaskUI(taskAndOrder)
}
}
@@ -467,19 +468,16 @@ class TaxiCurrentTaskFragment : BaseFragment(),
}
}
private fun updateVirtualTaskUI(taskAndOrder: QueryCurrentTaskRespBean.Result?){
private fun updateVirtualTaskUI(taskAndOrder: QueryCurrentTaskRespBean.Result?) {
if (taskAndOrder == null) return
val order = taskAndOrder.order // 订单信息
val startSite = taskAndOrder.startSite // 起点
val endSite = taskAndOrder.endSite // 终点
val currentStatus = taskAndOrder.currentStatus // 任务的状态 0空闲 1:获取任务 2:开始任务 3:到达目的地
cancelOrder.visibility = View.GONE
orderPhoneAndNum.visibility = if (order != null &&
currentStatus == TaskStatusEnum.CompleteTask.code
) View.VISIBLE else View.GONE
orderPhoneAndNum.visibility = View.GONE
taskClickBtn.visibility = View.GONE
naviToStart.visibility = View.GONE
@@ -495,8 +493,9 @@ class TaxiCurrentTaskFragment : BaseFragment(),
taskStatus.text = resources.getString(R.string.task_start_end_site)
taskTypeTv.background =
ContextCompat.getDrawable(MainMoGoApplication.getApp().applicationContext
,R.drawable.task_unreal_type_btn_bg)
ContextCompat.getDrawable(
MainMoGoApplication.getApp().applicationContext, R.drawable.task_unreal_type_btn_bg
)
taskTypeTv.text = resources.getString(R.string.task_exercise)
startStationName.text = startSite.siteName
endStationName.text = endSite.siteName

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 513 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -2,6 +2,6 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="9dp"/>
android:radius="@dimen/dp_8"/>
<solid android:color="#364071"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="@dimen/dp_20"/>
<solid android:color="#000E2A"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="@dimen/dp_8"/>
<solid android:color="#3BC593"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid
android:color="@color/taxi_order_cancel_btn"/>
<corners
android:radius="@dimen/dp_14" />
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="@dimen/dp_8"/>
<solid android:color="#E5902D"/>
</shape>

View File

@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_150">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/taskStationTagTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_76"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:textSize="@dimen/dp_28"
android:textColor="#CAD6FF"
android:text="途经:"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/taskStationNameTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
app:layout_constraintLeft_toLeftOf="@+id/taskStationTagTv"
app:layout_constraintTop_toBottomOf="@+id/taskStationTagTv"
android:textStyle="bold"
android:textSize="@dimen/dp_40"
android:textColor="#FFFFFF"
android:text="站点名称:"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/stationLineTopIv"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_78"
android:src="@drawable/taxi_dot_line"
app:layout_constraintLeft_toLeftOf="@+id/stationCircleIv"
app:layout_constraintRight_toRightOf="@+id/stationCircleIv"
app:layout_constraintTop_toTopOf="parent"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/stationLineBottomIv"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_78"
android:src="@drawable/taxi_dot_line"
app:layout_constraintLeft_toLeftOf="@+id/stationCircleIv"
app:layout_constraintRight_toRightOf="@+id/stationCircleIv"
app:layout_constraintBottom_toBottomOf="parent"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/stationCircleIv"
android:layout_width="@dimen/dp_38"
android:layout_height="@dimen/dp_38"
android:scaleType="fitXY"
android:src="@drawable/taxi_driver_circle_blue_big"
app:layout_constraintTop_toTopOf="@+id/taskStationNameTv"
app:layout_constraintBottom_toBottomOf="@+id/taskStationNameTv"
app:layout_constraintRight_toLeftOf="@+id/taskStationNameTv"
android:layout_marginRight="@dimen/dp_16"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,30 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_marginTop="30dp"
android:layout_width="@dimen/taxi_operation_data_item_width"
android:layout_height="@dimen/taxi_operation_data_item_height"
android:background="@drawable/taxi_operation_data_item_bg">
<TextView
android:id="@+id/operation_data_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:layout_marginLeft="60dp"
android:textSize="@dimen/dp_36"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:textColor="#FFFFFF"
android:text="1200"/>
<TextView
android:id="@+id/operation_data_title_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#A7B6F0"
android:textSize="@dimen/dp_30"
app:layout_constraintLeft_toLeftOf="@+id/operation_data_tv"
app:layout_constraintTop_toBottomOf="@+id/operation_data_tv"
android:text="总数"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/operation_data_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,29 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/operation_tab_title"
android:gravity="center"
android:text="完成订单数"
android:textColor="#A7B6F0"
android:textSize="@dimen/dp_40"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
<ImageView
android:id="@+id/operation_tab_line_iv"
android:layout_width="@dimen/dp_72"
android:layout_height="@dimen/dp_24"
app:layout_constraintTop_toBottomOf="@+id/operation_tab_title"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="10dp"
android:src="@drawable/taxi_driver_operation_tab_line"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="@dimen/dp_800"
android:layout_height="@dimen/dp_224"
android:background="@drawable/taxi_operation_data_item_bg">
<TextView
android:id="@+id/operationDataContentTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginLeft="@dimen/dp_60"
android:textSize="@dimen/dp_76"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:textColor="#FFFFFF"
android:textStyle="bold"
android:text="0"/>
<TextView
android:id="@+id/operationDataContent1Tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginLeft="@dimen/dp_8"
android:textSize="@dimen/dp_76"
app:layout_constraintLeft_toRightOf="@+id/operationDataUnitTv"
app:layout_constraintTop_toTopOf="parent"
android:textStyle="bold"
android:textColor="#FFFFFF"/>
<TextView
android:id="@+id/operationDataUnitTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_12"
android:layout_marginLeft="@dimen/dp_8"
android:textSize="@dimen/dp_36"
app:layout_constraintLeft_toRightOf="@+id/operationDataContentTv"
app:layout_constraintBottom_toBottomOf="@+id/operationDataContentTv"
android:textColor="#FFFFFF"/>
<TextView
android:id="@+id/operationDataUnit1Tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_8"
android:layout_marginBottom="@dimen/dp_12"
android:textSize="@dimen/dp_36"
app:layout_constraintLeft_toRightOf="@+id/operationDataContent1Tv"
app:layout_constraintBottom_toBottomOf="@+id/operationDataContent1Tv"
android:textColor="#FFFFFF"/>
<TextView
android:id="@+id/operationalDataTagTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#A7B6F0"
android:layout_marginTop="@dimen/dp_10"
android:textSize="@dimen/dp_30"
app:layout_constraintLeft_toLeftOf="@+id/operationDataContentTv"
app:layout_constraintTop_toBottomOf="@+id/operationDataContentTv"
android:text="今日量"/>
<TextView
android:id="@+id/operationalDataView"
android:layout_width="@dimen/dp_224"
android:layout_height="@dimen/dp_80"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginRight="@dimen/dp_40"
android:textSize="@dimen/dp_32"
android:textColor="#FFFFFF"
android:textStyle="bold"
android:gravity="center"
android:text="@string/view_data"
android:background="@drawable/view_data_click_btn_bg"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F0151D41">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/operationDataTitle"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_86"
android:layout_marginLeft="@dimen/dp_114"
android:layout_marginTop="@dimen/dp_144"
android:gravity="center"
android:text="网约车运营数据"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_42"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/line"
android:layout_width="@dimen/dp_14"
android:layout_height="@dimen/dp_50"
android:layout_marginRight="@dimen/dp_20"
android:background="#2966EC"
app:layout_constraintBottom_toBottomOf="@+id/operationDataTitle"
app:layout_constraintRight_toLeftOf="@+id/operationDataTitle"
app:layout_constraintTop_toTopOf="@+id/operationDataTitle" />
<ImageView
android:id="@+id/operationalDataCloseIv"
android:layout_width="@dimen/dp_106"
android:layout_height="@dimen/dp_106"
android:layout_marginRight="@dimen/dp_40"
android:src="@drawable/taxi_order_cancel_close1"
app:layout_constraintBottom_toBottomOf="@+id/operationDataTitle"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/operationDataTitle" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/operationalDataView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="@+id/line"
app:layout_constraintTop_toBottomOf="@+id/operationDataTitle">
<com.mogo.och.taxi.ui.operational.OperationalDataItemView
android:id="@+id/servingDurationView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_60"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.mogo.och.taxi.ui.operational.OperationalDataItemView
android:id="@+id/dayCompletedOrdersView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_30"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/servingDurationView" />
<com.mogo.och.taxi.ui.operational.OperationalDataItemView
android:id="@+id/dayTotalOrdersView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_30"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/dayCompletedOrdersView" />
<com.mogo.och.taxi.ui.operational.OperationalDataItemView
android:id="@+id/scheduledTasksView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_30"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/dayTotalOrdersView" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/itemDayTv"
android:layout_width="match_parent"
android:layout_height="@dimen/taxi_order_list_item_height"
android:layout_marginTop="@dimen/dp_60"
android:background="#80203076"
android:gravity="center"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_32"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/operationDataTitle" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/operationItemRecyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginLeft="@dimen/dp_56"
android:layout_marginRight="@dimen/dp_56"
android:layout_marginBottom="@dimen/dp_10"
android:visibility="gone"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/itemDayTv"
app:layout_constraintBottom_toBottomOf="parent"/>
<androidx.constraintlayout.widget.Group
android:id="@+id/operationalDetailView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="operationItemRecyclerView,itemDayTv" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="@dimen/taxi_order_nodata_width"
android:layout_height="@dimen/taxi_order_nodata_height"
android:gravity="center"
android:text="已经到底了…"
android:textSize="@dimen/dp_30"
android:textColor="#91A1EA">
</TextView>

View File

@@ -0,0 +1,118 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/dp_64">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/orderTimeTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下单时间 9:01"
android:textColor="#8E9DD4"
android:textSize="@dimen/dp_38"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/orderNumTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#8E9DD4"
android:textSize="@dimen/dp_38"
android:layout_marginTop="@dimen/dp_54"
app:layout_constraintTop_toBottomOf="@+id/orderTimeTv"
app:layout_constraintLeft_toLeftOf="@+id/orderTimeTv"
tools:text="订单编号111111" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/orderPriceTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/dp_4"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_38"
app:layout_constraintRight_toLeftOf="@+id/orderPriceUnitTv"
app:layout_constraintBottom_toBottomOf="@+id/orderTimeTv"
tools:text="0.00" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/orderPriceUnitTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_22"
android:layout_marginBottom="@dimen/dp_8"
app:layout_constraintBottom_toBottomOf="@+id/orderTimeTv"
app:layout_constraintRight_toRightOf="parent"
android:text="元"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/orderViewDetailBt"
android:layout_width="@dimen/dp_162"
android:layout_height="@dimen/dp_64"
android:background="@drawable/taxi_order_button_status_bg"
android:paddingRight="@dimen/dp_28"
android:gravity="center"
android:text="详情"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_24"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="@+id/orderNumTv"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="@+id/orderNumTv"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/orderTypeBt"
android:layout_width="@dimen/dp_86"
android:layout_height="@dimen/dp_36"
android:layout_marginLeft="@dimen/dp_50"
android:background="@drawable/taxi_order_button_status_bg"
android:gravity="center"
android:text="运营单"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_24"
app:layout_constraintTop_toTopOf="@+id/orderTimeTv"
app:layout_constraintLeft_toRightOf="@+id/orderTimeTv"
app:layout_constraintBottom_toBottomOf="@+id/orderTimeTv"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/orderStatusBt"
android:layout_width="@dimen/dp_86"
android:layout_height="@dimen/dp_36"
android:background="@drawable/waiting_btn_bg"
android:gravity="center"
android:text=""
android:textColor="#FFFFFF"
android:layout_marginLeft="@dimen/dp_18"
android:textSize="@dimen/dp_24"
app:layout_constraintTop_toTopOf="@+id/orderTimeTv"
app:layout_constraintLeft_toRightOf="@+id/orderTypeBt"
app:layout_constraintBottom_toBottomOf="@+id/orderTimeTv"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/orderTaskStationView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_50"
android:padding="@dimen/dp_40"
app:layout_constraintLeft_toLeftOf="@+id/orderNumTv"
app:layout_constraintRight_toRightOf="@+id/orderViewDetailBt"
app:layout_constraintTop_toBottomOf="@+id/orderNumTv"
android:background="@drawable/order_task_list_bg"
android:visibility="visible"/>
<View
android:id="@+id/module_och_taxi_order_divider"
android:layout_width="0dp"
android:layout_height="@dimen/dp_1"
app:layout_goneMarginTop="@dimen/dp_70"
android:layout_marginTop="@dimen/dp_70"
android:padding="10dp"
android:background="#598E9DD4"
app:layout_constraintTop_toBottomOf="@+id/orderTaskStationView"
app:layout_constraintLeft_toLeftOf="@+id/orderTimeTv"
app:layout_constraintRight_toRightOf="@+id/orderPriceUnitTv"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/order_day_tv"
android:layout_width="match_parent"
android:layout_height="@dimen/taxi_order_list_item_height"
android:gravity="center"
android:text="2020.08.17"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_34"
android:layout_marginTop="40dp"
android:background="#80203076">
</TextView>
<include layout="@layout/taxi_orders_list_item"/>
</LinearLayout>

View File

@@ -1,127 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="60dp"
android:paddingTop="36dp"
android:paddingRight="60dp">
<TextView
android:id="@+id/order_time_hm_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="9:01"
android:textColor="#8E9DD4"
android:textSize="@dimen/dp_40" />
<Button
android:id="@+id/order_status_bt"
android:layout_width="90dp"
android:layout_height="38dp"
android:layout_alignParentRight="true"
android:background="@drawable/taxi_order_button_status_bg"
android:text="服务中"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_24" />
<Button
android:id="@+id/order_type_bt"
android:layout_width="90dp"
android:layout_height="38dp"
android:layout_marginRight="18dp"
android:layout_toLeftOf="@+id/order_status_bt"
android:background="@drawable/taxi_order_button_type_bg"
android:text="即时单"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_24" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/order_item_cl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/order_time_hm_tv"
android:orientation="vertical"
android:layout_marginTop="30dp">
<ImageView
android:id="@+id/grab_order_start_greenDot"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:src="@drawable/taxi_driver_circle_green_big"
app:layout_constraintBottom_toBottomOf="@+id/grab_order_start_station"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="@+id/grab_order_start_station" />
<TextView
android:id="@+id/grab_order_start_station"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="后路站"
android:maxLines="2"
android:ellipsize="end"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="40dp"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_44" />
<ImageView
android:id="@+id/grab_order_end_dotLine"
app:layout_constraintBottom_toTopOf="@+id/grab_order_end_blueDot"
app:layout_constraintLeft_toLeftOf="@+id/grab_order_start_greenDot"
app:layout_constraintRight_toRightOf="@+id/grab_order_start_greenDot"
app:layout_constraintTop_toBottomOf="@+id/grab_order_start_greenDot"
android:layout_width="@dimen/dp_4"
android:layout_height="0dp"
android:scaleType="fitXY"
android:src="@drawable/taxi_dot_line" />
<ImageView
android:id="@+id/grab_order_end_blueDot"
app:layout_constraintBottom_toBottomOf="@+id/grab_order_end_station"
app:layout_constraintLeft_toLeftOf="@+id/grab_order_start_greenDot"
app:layout_constraintTop_toTopOf="@+id/grab_order_end_station"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:src="@drawable/taxi_driver_circle_blue_big" />
<TextView
android:id="@+id/grab_order_end_station"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_44"
android:maxLines="2"
android:ellipsize="end"
android:layout_marginTop="40dp"
app:layout_constraintTop_toBottomOf="@+id/grab_order_start_station"
app:layout_constraintLeft_toLeftOf="@+id/grab_order_start_station"
tools:text="后路站1" />
<TextView
android:id="@+id/order_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#8E9DD4"
android:textSize="@dimen/dp_40"
android:layout_marginTop="40dp"
app:layout_constraintTop_toBottomOf="@+id/grab_order_end_blueDot"
app:layout_constraintLeft_toLeftOf="@+id/grab_order_end_blueDot"
tools:text="订单编号111111" />
<View
android:id="@+id/module_och_taxi_order_divider"
android:layout_width="0dp"
android:layout_height="1dp"
app:layout_goneMarginTop="40dp"
android:layout_marginTop="26dp"
android:padding="10dp"
android:background="#598E9DD4"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/order_num" />
</androidx.constraintlayout.widget.ConstraintLayout>
</RelativeLayout>

View File

@@ -1,46 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F0151D41">
<TextView
android:id="@+id/taxi_operation_data_title"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_86"
android:gravity="center"
android:text="网约车运营数据"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_42"
android:layout_marginTop="@dimen/dp_78"
android:layout_marginLeft="@dimen/dp_114"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"/>
<View
android:layout_width="@dimen/dp_14"
android:layout_height="@dimen/dp_50"
android:layout_marginRight="@dimen/dp_20"
android:background="#2966EC"
app:layout_constraintTop_toTopOf="@+id/taxi_operation_data_title"
app:layout_constraintBottom_toBottomOf="@+id/taxi_operation_data_title"
app:layout_constraintRight_toLeftOf="@+id/taxi_operation_data_title"/>
<include
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="gone"
layout="@layout/taxi_no_data_common_view"/>
<ImageView
android:id="@+id/module_och_taxi_order_list_close_iv"
android:layout_width="@dimen/dp_106"
android:layout_height="@dimen/dp_106"
android:layout_marginRight="@dimen/dp_40"
android:src="@drawable/taxi_order_cancel_close1"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/taxi_operation_data_title"
app:layout_constraintBottom_toBottomOf="@+id/taxi_operation_data_title"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/dp_64"
android:paddingRight="@dimen/dp_54">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/taskTimeTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下单时间 9:01"
android:textColor="#8E9DD4"
android:textSize="@dimen/dp_38"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<Button
android:id="@+id/taskTypeBt"
android:layout_width="90dp"
android:layout_height="38dp"
android:background="@drawable/taxi_order_button_type_bg"
android:text="演练单"
android:textStyle="bold"
android:textColor="#FFFFFF"
android:layout_marginLeft="@dimen/dp_48"
android:textSize="@dimen/dp_24"
app:layout_constraintLeft_toRightOf="@+id/taskTimeTv"
app:layout_constraintTop_toTopOf="@+id/taskTimeTv"
app:layout_constraintBottom_toBottomOf="@+id/taskTimeTv"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/taskStartSiteTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_46"
app:layout_constraintTop_toBottomOf="@+id/taskTimeTv"
app:layout_constraintLeft_toRightOf="@+id/taskCircleTag1"
android:textSize="@dimen/dp_40"
android:layout_marginLeft="@dimen/dp_10"
android:textColor="#FFFFFF"
android:text="起点"
android:textStyle="bold"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/taskEndSiteTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="@+id/taskStartSiteTv"
app:layout_constraintTop_toBottomOf="@+id/taskStartSiteTv"
android:layout_marginTop="@dimen/dp_30"
android:textSize="@dimen/dp_40"
android:textColor="#FFFFFF"
android:text="终点"
android:textStyle="bold"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/taskCircleTag1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/taxi_driver_circle_green_big"
app:layout_constraintLeft_toLeftOf="@+id/taskTimeTv"
app:layout_constraintTop_toTopOf="@+id/taskStartSiteTv"
app:layout_constraintBottom_toBottomOf="@+id/taskStartSiteTv"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/taskCircleTag2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/taxi_driver_circle_blue_big"
app:layout_constraintLeft_toLeftOf="@+id/taskCircleTag1"
app:layout_constraintRight_toRightOf="@+id/taskCircleTag1"
app:layout_constraintTop_toTopOf="@+id/taskEndSiteTv"
app:layout_constraintBottom_toBottomOf="@+id/taskEndSiteTv"/>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/taxi_dot_line"
app:layout_constraintTop_toTopOf="@+id/taskStartSiteTv"
app:layout_constraintBottom_toBottomOf="@+id/taskEndSiteTv"
app:layout_constraintLeft_toLeftOf="@+id/taskCircleTag1"
app:layout_constraintRight_toRightOf="@+id/taskCircleTag1"/>
<View
android:id="@+id/task_divider"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"
app:layout_goneMarginTop="@dimen/dp_70"
android:layout_marginTop="@dimen/dp_70"
android:padding="10dp"
android:background="#598E9DD4"
app:layout_constraintTop_toBottomOf="@+id/taskEndSiteTv" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -81,8 +81,6 @@
<dimen name="module_och_taxi_order_text_marginRight">31.5dp</dimen>
<dimen name="taxi_operation_data_item_width">800dp</dimen>
<dimen name="taxi_operation_data_item_height">222dp</dimen>
<dimen name="taxi_order_cancel_width">1120dp</dimen>
<dimen name="taxi_order_cancel_btn_height">162dp</dimen>
<dimen name="taxi_grab_order_start_station_width">446dp</dimen>

View File

@@ -58,5 +58,7 @@
<string name="waiting_server">待服务</string>
<string name="view_data">查看</string>
<!-- endregion -->
</resources>