Merge branch 'refs/heads/dev_robotaxi-d_240912_6.7.0' into dev_robotaxi-d_240912_6.7.2_local
This commit is contained in:
@@ -38,9 +38,9 @@ object TicketModel : IOchOnMessageListener<WriteOffPassenger>{
|
||||
|
||||
private const val SELECTWRITEOFFCOUNT = "SELECTWRITEOFFCOUNT"
|
||||
|
||||
private var emitterMain: ObservableEmitter<Int>?=null
|
||||
private var emitterMain: ObservableEmitter<Pair<Int,Int>>?=null
|
||||
|
||||
private val observable = Observable.create(ObservableOnSubscribe<Int> { emitter -> emitterMain = emitter })
|
||||
private val observable = Observable.create(ObservableOnSubscribe<Pair<Int,Int>> { emitter -> emitterMain = emitter })
|
||||
|
||||
private val writeOffMsg = object : ILanMessageListener<WriteOffMsg> {
|
||||
override fun targetLan(): Class<WriteOffMsg> = WriteOffMsg::class.java
|
||||
@@ -107,7 +107,7 @@ object TicketModel : IOchOnMessageListener<WriteOffPassenger>{
|
||||
object : OchCommonServiceCallback<WriteOffCountResponse> {
|
||||
override fun onSuccess(data: WriteOffCountResponse?) {
|
||||
data?.data?.let {
|
||||
emitterMain?.onNext(it)
|
||||
emitterMain?.onNext(Pair<Int,Int>(firstStation.siteId,it))
|
||||
d(SceneConstant.M_BUS + TAG, "${firstStation.name}核销人数:${it}")
|
||||
OchChainLogManager.writeChainLog("核销人数","任务:${currentTask.taskId} zhan'dian")
|
||||
}
|
||||
@@ -121,11 +121,11 @@ object TicketModel : IOchOnMessageListener<WriteOffPassenger>{
|
||||
}
|
||||
|
||||
}
|
||||
emitterMain?.onNext(0)
|
||||
emitterMain?.onNext(Pair(0,0))
|
||||
d(SceneConstant.M_BUS + TAG, "线路或者站点未空")
|
||||
}
|
||||
|
||||
fun getWriteOffCountObservable():Observable<Int>{
|
||||
fun getWriteOffCountObservable():Observable<Pair<Int,Int>>{
|
||||
return observable
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.och.common.module.utils.ResourcesUtils
|
||||
import com.mogo.och.data.bean.BusStationBean
|
||||
import com.mogo.och.shuttle.weaknet.R
|
||||
import com.mogo.och.weaknet.model.LineModel
|
||||
import com.mogo.och.weaknet.ui.writeoff.WriteOffView
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
|
||||
@@ -28,7 +29,6 @@ class TaskRunningAdapter(
|
||||
companion object{
|
||||
const val TAG = "TaskRunningAdapter"
|
||||
}
|
||||
private var startStationIndex:Int = -1
|
||||
|
||||
private val argbEvaluator: ArgbEvaluator = ArgbEvaluator()
|
||||
private val startColor = ResourcesUtils.getColor(R.color.shuttle_driver_1970FF)
|
||||
@@ -37,14 +37,13 @@ class TaskRunningAdapter(
|
||||
private val halfHeight = 16.5f
|
||||
private var totalHeight = 0f
|
||||
|
||||
fun setDataList(dataList: List<BusStationBean>, startStationIndex:Int) {
|
||||
this.startStationIndex = startStationIndex
|
||||
fun setDataList(dataList: List<BusStationBean>) {
|
||||
this.mData.clear()
|
||||
this.mData.addAll(dataList)
|
||||
if(startStationIndex==0){
|
||||
if(LineModel.startStationIndex==0){
|
||||
totalHeight = 33 + (dataList.size-2)*heightItem
|
||||
}else{
|
||||
totalHeight = (halfHeight+(dataList.size-1-startStationIndex)*heightItem).toFloat()
|
||||
totalHeight = (halfHeight+(dataList.size-1-LineModel.startStationIndex)*heightItem).toFloat()
|
||||
}
|
||||
notifyItemRangeChanged(0,dataList.size,true)
|
||||
}
|
||||
@@ -63,6 +62,8 @@ class TaskRunningAdapter(
|
||||
val currentPosition = holder.bindingAdapterPosition
|
||||
val line = mData[currentPosition]
|
||||
holder.actvStationName.text = line.name
|
||||
holder.actvWriteOffCount.setSiteId(line.siteId)
|
||||
val startStationIndex = LineModel.startStationIndex
|
||||
if (startStationIndex>0) {
|
||||
CallerLogger.d(TAG, "位置:$currentPosition 当前站${mData[startStationIndex]} ")
|
||||
}
|
||||
@@ -70,14 +71,16 @@ class TaskRunningAdapter(
|
||||
if(currentPosition<startStationIndex){
|
||||
holder.actvStationName.setTextSize(TypedValue.COMPLEX_UNIT_PX, AutoSizeUtils.dp2px(mContext,40f).toFloat())
|
||||
holder.actvStationName.setTextColor(ResourcesUtils.getColor(R.color.bus_color_4dffffff))
|
||||
|
||||
holder.actvWriteOffCount.visibility = View.GONE
|
||||
holder.acivStationHead.setImageResource(R.drawable.bus_switch_line_adapter_point_pass)
|
||||
}else if(currentPosition==startStationIndex){
|
||||
holder.actvStationName.setTextSize(TypedValue.COMPLEX_UNIT_PX, AutoSizeUtils.dp2px(mContext,45f).toFloat())
|
||||
holder.actvStationName.setTextColor(ResourcesUtils.getColor(R.color.bus_color_2EACFF))
|
||||
|
||||
holder.actvWriteOffCount.visibility = View.VISIBLE
|
||||
if(LineModel.startStationIndex==mData.size-1){
|
||||
holder.actvWriteOffCount.visibility = View.GONE
|
||||
}else{
|
||||
holder.actvWriteOffCount.visibility = View.VISIBLE
|
||||
}
|
||||
holder.acivStationHead.setImageResource(R.drawable.bus_runnint_task_middle)
|
||||
}else{
|
||||
holder.actvStationName.setTextColor(ResourcesUtils.getColor(R.color.white))
|
||||
|
||||
@@ -111,7 +111,7 @@ class TaskRunningView: ConstraintLayout, TaskRunningModel.SwtichLineViewCallback
|
||||
actv_running_task_time.text = "班次:${LineModel.getTaskTime()}"
|
||||
LineModel.stationList?.takeIf { it.size>=2 }?.let {
|
||||
actv_running_task_last_station.text = "往${it.last().name ?: ""}"
|
||||
mAdapter.setDataList(it,LineModel.startStationIndex)
|
||||
mAdapter.setDataList(it)
|
||||
CallerLogger.d(TAG,"BusLineModel.startStationIndex:${LineModel.startStationIndex}___$it")
|
||||
val currentStation = it.get(LineModel.startStationIndex)
|
||||
if(currentStation.isLeaving){
|
||||
|
||||
@@ -2,13 +2,14 @@ package com.mogo.och.weaknet.ui.writeoff
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.findViewTreeViewModelStoreOwner
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.commons.env.ProjectUtils
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
import com.mogo.och.shuttle.weaknet.R
|
||||
import kotlinx.android.synthetic.main.shuttle_weak_wirte_off_view.view.tv_write_off_count
|
||||
|
||||
class WriteOffView : AppCompatTextView, WriteOffViewModel.IwriteOffViewCallback {
|
||||
|
||||
@@ -22,10 +23,16 @@ class WriteOffView : AppCompatTextView, WriteOffViewModel.IwriteOffViewCallback
|
||||
|
||||
private var viewModel:WriteOffViewModel? = null
|
||||
|
||||
private var siteId:Int = 0
|
||||
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
|
||||
if(ProjectUtils.isDali()&& AppIdentityModeUtils.isShuttleDriver(FunctionBuildConfig.appIdentityMode)) {
|
||||
val showText =
|
||||
AbsMogoApplication.getApp().getString(R.string.shuttle_write_off_count,0)
|
||||
text = showText
|
||||
}
|
||||
viewModel = findViewTreeViewModelStoreOwner()?.let {
|
||||
ViewModelProvider(it).get(WriteOffViewModel::class.java)
|
||||
}
|
||||
@@ -38,6 +45,11 @@ class WriteOffView : AppCompatTextView, WriteOffViewModel.IwriteOffViewCallback
|
||||
private fun stopListenerWriteOff(){
|
||||
viewModel?.setWriteOffCallback(null)
|
||||
visibility = GONE
|
||||
if(ProjectUtils.isDali()&& AppIdentityModeUtils.isShuttleDriver(FunctionBuildConfig.appIdentityMode)) {
|
||||
val showText =
|
||||
AbsMogoApplication.getApp().getString(R.string.shuttle_write_off_count, 0)
|
||||
text = showText
|
||||
}
|
||||
}
|
||||
|
||||
override fun onVisibilityAggregated(isVisible: Boolean) {
|
||||
@@ -57,8 +69,14 @@ class WriteOffView : AppCompatTextView, WriteOffViewModel.IwriteOffViewCallback
|
||||
}
|
||||
}
|
||||
|
||||
override fun setWriteOffCount(showText: String) {
|
||||
text = showText
|
||||
override fun setWriteOffCount(showText: String,siteId: Int) {
|
||||
if(this.siteId==siteId) {
|
||||
text = showText
|
||||
}
|
||||
}
|
||||
|
||||
fun setSiteId(siteId: Int) {
|
||||
this.siteId = siteId
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ class WriteOffViewModel : ViewModel() {
|
||||
|
||||
private var disposable: Disposable? = null
|
||||
|
||||
private val observer = object : Observer<String> {
|
||||
private val observer = object : Observer<Pair<String,Int>> {
|
||||
override fun onSubscribe(d: Disposable) {
|
||||
disposable = d
|
||||
}
|
||||
@@ -37,21 +37,24 @@ class WriteOffViewModel : ViewModel() {
|
||||
|
||||
}
|
||||
|
||||
override fun onNext(countInfo: String) {
|
||||
viewCallback?.setWriteOffCount(countInfo)
|
||||
override fun onNext(countInfo: Pair<String,Int>) {
|
||||
viewCallback?.setWriteOffCount(countInfo.first,countInfo.second)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun setWriteOffCallback(viewCallback: IwriteOffViewCallback?) {
|
||||
this.viewCallback = viewCallback
|
||||
if(viewCallback==null){
|
||||
RxUtils.disposeSubscribe(disposable)
|
||||
}
|
||||
TicketModel
|
||||
.getWriteOffCountObservable()
|
||||
.flatMap { t ->
|
||||
val showText =
|
||||
AbsMogoApplication.getApp().getString(R.string.shuttle_write_off_count, t)
|
||||
AbsMogoApplication.getApp().getString(R.string.shuttle_write_off_count, t.second)
|
||||
CallerLogger.d(SceneConstant.M_BUS + TAG, "显示文案:${showText}")
|
||||
Observable.just(showText)
|
||||
Observable.just(Pair(showText,t.first))
|
||||
}
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(observer)
|
||||
@@ -64,7 +67,7 @@ class WriteOffViewModel : ViewModel() {
|
||||
}
|
||||
|
||||
interface IwriteOffViewCallback {
|
||||
fun setWriteOffCount(count:String)
|
||||
fun setWriteOffCount(count:String,siteId: Int)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -29,6 +29,7 @@ import com.mogo.och.unmanned.taxi.constant.TaxiDriverEventConst
|
||||
import com.mogo.och.unmanned.taxi.constant.TaxiUnmannedConst.Companion.START_AUTOPILOT_ANIMATION_INTERVAL
|
||||
import com.mogo.och.unmanned.taxi.ui.navi.amap.TaxiAmapNaviFragment
|
||||
import com.mogo.och.unmanned.taxi.ui.navi.auto.TaxiRoutingNaviFragment
|
||||
import com.mogo.och.unmanned.taxi.ui.operational.OperationalManager
|
||||
import com.mogo.och.unmanned.taxi.ui.operational.TaxiOperationalDialogFragment
|
||||
import com.mogo.och.unmanned.taxi.ui.task.TaxiTaskModel
|
||||
import com.mogo.och.unmanned.taxi.ui.task.itinerarycurrent.ItineraryCurrentView
|
||||
@@ -58,7 +59,6 @@ class TaxiFragment :MvpFragment<TaxiFragment?, TaxiPresenter?>(),
|
||||
|
||||
private val runningTaskGateWay = "RUNNINGTASKGATEWAY"
|
||||
private val lineView = "LINEVIEW"
|
||||
private var personalDialogFragment: WeakReference<TaxiOperationalDialogFragment>? = null
|
||||
|
||||
|
||||
private fun updateOperationBtnStatusOnModeChange(isRoutingVerifyMode: Boolean) {
|
||||
@@ -102,10 +102,11 @@ class TaxiFragment :MvpFragment<TaxiFragment?, TaxiPresenter?>(),
|
||||
when (toolTag) {
|
||||
runningTaskGateWay -> {
|
||||
d(TAG, "runningTaskGateWay:$runningTaskGateWay---toolTag:$toolTag")
|
||||
personalDialogFragment = WeakReference(TaxiOperationalDialogFragment())
|
||||
activity?.supportFragmentManager?.let {
|
||||
d(TAG, "runningTaskGateWay:展示view ${personalDialogFragment!!.get()}")
|
||||
personalDialogFragment!!.get()?.show(it, "service_data")
|
||||
if(context==null){
|
||||
d(TAG, "runningTaskGateWay:没有展示view ")
|
||||
}else{
|
||||
d(TAG, "runningTaskGateWay:展示view ")
|
||||
OperationalManager.showBadCaseConfigWindow(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,145 @@
|
||||
package com.mogo.och.unmanned.taxi.ui.operational
|
||||
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.graphics.Rect
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Build.VERSION
|
||||
import android.os.Build.VERSION_CODES
|
||||
import android.transition.Slide
|
||||
import android.view.Gravity
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.view.ViewConfiguration
|
||||
import android.view.WindowManager
|
||||
import android.view.animation.AccelerateDecelerateInterpolator
|
||||
import android.widget.PopupWindow
|
||||
import android.widget.PopupWindow.INPUT_METHOD_NEEDED
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.lifecycle.Lifecycle.Event
|
||||
import androidx.lifecycle.LifecycleEventObserver
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.mogo.eagle.core.utilcode.kotlin.lifeCycleOwner
|
||||
import com.mogo.eagle.core.utilcode.reminder.Reminder
|
||||
import com.mogo.eagle.core.utilcode.reminder.api.impl.PopupWindowReminder
|
||||
import com.mogo.eagle.core.utilcode.util.*
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
import kotlin.math.abs
|
||||
|
||||
object OperationalManager : LifecycleEventObserver{
|
||||
|
||||
const val TAG = "BadCase"
|
||||
|
||||
private var hideFloat: (() -> Unit)? = null
|
||||
|
||||
fun init(context: Context) {
|
||||
}
|
||||
|
||||
/**
|
||||
* 展示BadCase配置页面
|
||||
*/
|
||||
fun showBadCaseConfigWindow(context: Context) {
|
||||
val badCaseConfigView = OperationalManagerView(context)
|
||||
badCaseConfigView.setOnClickListener(object : OperationalManagerView.ClickListener {
|
||||
override fun onClose() {
|
||||
hideFloat?.invoke()
|
||||
hideFloat = null
|
||||
}
|
||||
})
|
||||
enqueuePop(
|
||||
badCaseConfigView,
|
||||
AutoSizeUtils.dp2px(context, 1046f),
|
||||
WindowManager.LayoutParams.MATCH_PARENT,
|
||||
key = "BadCaseConfigView"
|
||||
).also {
|
||||
hideFloat = it
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStateChanged(source: LifecycleOwner, event: Event) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
fun enqueuePop(content: View, width: Int, height: Int, key: String = "", startX: Int = 0, startY: Int = 0, gravity: Int = Gravity.START, onOuterViewClicked:((focus: View) -> Unit)? = null, isOverride: Boolean = false, isFocusable: Boolean = true): () -> Unit {
|
||||
val topActivity = ActivityUtils.getTopActivity()
|
||||
val activity = (topActivity as? FragmentActivity) ?: throw IllegalStateException("please use Activity to trigger pop show.")
|
||||
val isImmersiveMode = BarUtils.isImmersiveMode(activity)
|
||||
var tempReminder: PopupWindowReminder? = null
|
||||
activity.lifecycleScope.launchWhenResumed {
|
||||
val pop = PopupWindow(width, height).also {
|
||||
it.isOutsideTouchable = true
|
||||
it.isTouchable = true
|
||||
it.isFocusable = isFocusable
|
||||
it.inputMethodMode = INPUT_METHOD_NEEDED
|
||||
it.isClippingEnabled = false
|
||||
var x = 0f
|
||||
var y = 0f
|
||||
val touchSlop = ViewConfiguration.get(activity).scaledTouchSlop
|
||||
var isClicked = false
|
||||
it.setTouchInterceptor { v, event ->
|
||||
val out = Rect()
|
||||
v.getGlobalVisibleRect(out)
|
||||
if (out.contains(event.x.toInt(), event.y.toInt())) {
|
||||
return@setTouchInterceptor false
|
||||
}
|
||||
|
||||
when(event.actionMasked) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
x = event.x
|
||||
y = event.y
|
||||
}
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
val deltaX = event.x - x
|
||||
val deltaY = event.y - y
|
||||
isClicked = !(abs(deltaX) > touchSlop || abs(deltaY) > touchSlop)
|
||||
}
|
||||
MotionEvent.ACTION_UP -> {
|
||||
if (isClicked) {
|
||||
isClicked = false
|
||||
onOuterViewClicked?.invoke(v)
|
||||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
return@setTouchInterceptor true
|
||||
} finally {
|
||||
activity.window.decorView.dispatchTouchEvent(event)
|
||||
}
|
||||
}
|
||||
it.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
|
||||
}
|
||||
if (VERSION.SDK_INT >= VERSION_CODES.M) {
|
||||
val transition = Slide(gravity).also {
|
||||
it.interpolator = AccelerateDecelerateInterpolator()
|
||||
it.duration = 200
|
||||
}
|
||||
pop.enterTransition = transition
|
||||
pop.exitTransition = transition
|
||||
}
|
||||
pop.contentView = content
|
||||
val reminder = object : PopupWindowReminder(pop) {
|
||||
|
||||
override fun key(): String {
|
||||
return key + super.key()
|
||||
}
|
||||
|
||||
override fun show() {
|
||||
pop.showAtLocation(activity.window.decorView, gravity, startX, startY)
|
||||
}
|
||||
override fun isOverride(): Boolean = isOverride
|
||||
}
|
||||
tempReminder = reminder
|
||||
Reminder.enqueue(activity.lifeCycleOwner, reminder)
|
||||
}
|
||||
return {
|
||||
tempReminder?.hide()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,255 @@
|
||||
package com.mogo.och.unmanned.taxi.ui.operational
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.eagle.core.utilcode.kotlin.onClick
|
||||
import com.mogo.och.common.module.utils.DateTimeUtil
|
||||
import com.mogo.och.common.module.wigets.WindowRelativeLayout
|
||||
import com.mogo.och.unmanned.taxi.R
|
||||
import com.mogo.och.unmanned.taxi.bean.OrderTaskDetailStationBean
|
||||
import com.mogo.och.unmanned.taxi.bean.QueryOrdersRespBean
|
||||
import com.mogo.och.unmanned.taxi.bean.QueryServingDurationRespBean
|
||||
import com.mogo.och.unmanned.taxi.bean.QueryTaskRespBean
|
||||
import com.mogo.och.unmanned.taxi.constant.StationTypeEnum
|
||||
import com.mogo.och.unmanned.taxi.constant.TaskTypeEnum
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.dayTotalOrdersView
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.itemDayTv
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.operationDataTitle
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.operationItemRecyclerView
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.view.operationalDataView
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.view.dayCompletedOrdersView
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.view.operationalDataCloseIv
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.view.servingDurationView
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.operationalDataView
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.operationalDetailView
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.scheduledTasksView
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.view.dayTotalOrdersView
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.view.itemDayTv
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.view.operationDataTitle
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.view.operationItemRecyclerView
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.view.operationalDetailView
|
||||
import kotlinx.android.synthetic.main.unmanned_taxi_operational_data_view.view.scheduledTasksView
|
||||
|
||||
class OperationalManagerView: WindowRelativeLayout, OperationalViewModel.RunningTaskViewCallback {
|
||||
|
||||
|
||||
constructor(context: Context?) : super(context)
|
||||
|
||||
constructor(context: Context?, attributeSet: AttributeSet) : super(context, attributeSet)
|
||||
|
||||
constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr)
|
||||
|
||||
constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes)
|
||||
|
||||
|
||||
companion object {
|
||||
const val TAG = "BadCaseManagerView"
|
||||
}
|
||||
|
||||
private var clickListener:ClickListener?=null
|
||||
private var viewModel:OperationalViewModel?=null
|
||||
private var orderListAdapter: OrderListAdapter? = null
|
||||
|
||||
init {
|
||||
LayoutInflater.from(context).inflate(R.layout.unmanned_taxi_operational_data_view, this, true)
|
||||
initView()
|
||||
}
|
||||
|
||||
private fun initView(){
|
||||
//关闭BadCase管理窗口
|
||||
operationalDataCloseIv.onClick {
|
||||
if (operationalDetailView.visibility == View.GONE){
|
||||
clickListener?.onClose()
|
||||
}else{
|
||||
operationalDetailView.visibility = View.GONE
|
||||
operationalDataView.visibility = View.VISIBLE
|
||||
operationDataTitle.text = "网约车运营数据"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun setOnClickListener(clickListener: ClickListener) {
|
||||
this.clickListener = clickListener
|
||||
}
|
||||
|
||||
interface ClickListener {
|
||||
fun onClose()
|
||||
}
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
|
||||
viewModel = ViewModelProvider(this).get(OperationalViewModel::class.java)
|
||||
|
||||
viewModel?.setDistanceCallback(this)
|
||||
}
|
||||
|
||||
override fun onVisibilityAggregated(isVisible: Boolean) {
|
||||
super.onVisibilityAggregated(isVisible)
|
||||
|
||||
}
|
||||
|
||||
override fun onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow()
|
||||
}
|
||||
|
||||
|
||||
|
||||
override 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
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
override fun updateServingDuration(data: QueryServingDurationRespBean?) {
|
||||
var duration = DateTimeUtil.second2Time(0)
|
||||
if (data != null) {
|
||||
duration = DateTimeUtil.second2Time(data.data)
|
||||
|
||||
}
|
||||
|
||||
val listSplit = duration.split(":")
|
||||
|
||||
servingDurationView.setOperationalDuration(listSplit[0],"时",listSplit[1],"分")
|
||||
servingDurationView.setOperationalDataTagTv("今日服务总时长")
|
||||
servingDurationView.setOperationalDataViewClick(View.GONE,null)
|
||||
}
|
||||
|
||||
override fun setTaskList(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 -> {
|
||||
if(orderTaskDetailList.size>0){
|
||||
val last = orderTaskDetailList.last()
|
||||
if (last.stationType== StationTypeEnum.PathwayStation.code &&
|
||||
last.stationName==taskDetail.startSiteName) {
|
||||
last.stationType = StationTypeEnum.OrderStartStation.code
|
||||
}else{
|
||||
val beanStart =
|
||||
OrderTaskDetailStationBean(taskDetail.startSiteName,
|
||||
StationTypeEnum.OrderStartStation.code)
|
||||
orderTaskDetailList.add(beanStart)
|
||||
}
|
||||
}else{
|
||||
val beanStart =
|
||||
OrderTaskDetailStationBean(taskDetail.startSiteName,
|
||||
StationTypeEnum.OrderStartStation.code)
|
||||
orderTaskDetailList.add(beanStart)
|
||||
}
|
||||
|
||||
var beanEnd =
|
||||
OrderTaskDetailStationBean(taskDetail.endSiteName, StationTypeEnum.OrderEndStation.code)
|
||||
orderTaskDetailList.add(beanEnd)
|
||||
}
|
||||
}
|
||||
}
|
||||
orderListAdapter?.updateTaskStationView(orderTaskDetailList)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun setCurrentCompleteOrderData(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) {
|
||||
viewModel?.queryTaskListByOrderNo(orderNo)
|
||||
}
|
||||
|
||||
})
|
||||
operationItemRecyclerView.layoutManager =
|
||||
LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
|
||||
operationItemRecyclerView.adapter = orderListAdapter
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
override fun setCurrentDayOrders(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) {
|
||||
viewModel?.queryTaskListByOrderNo(orderNo)
|
||||
}
|
||||
|
||||
})
|
||||
operationItemRecyclerView.layoutManager =
|
||||
LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
|
||||
operationItemRecyclerView.adapter = orderListAdapter
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,210 @@
|
||||
package com.mogo.och.unmanned.taxi.ui.operational
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
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.manager.logchainanalytic.OchChainLogManager
|
||||
import com.mogo.och.common.module.network.OchCommonServiceCallback
|
||||
import com.mogo.och.common.module.utils.RxUtils
|
||||
import com.mogo.och.unmanned.taxi.R
|
||||
import com.mogo.och.unmanned.taxi.bean.QueryOrdersRespBean
|
||||
import com.mogo.och.unmanned.taxi.bean.QueryServingDurationRespBean
|
||||
import com.mogo.och.unmanned.taxi.bean.QueryTaskRespBean
|
||||
import com.mogo.och.unmanned.taxi.network.TaxiOperationalDataServiceManager
|
||||
import io.reactivex.disposables.Disposable
|
||||
|
||||
/**
|
||||
* @author XuXinChao
|
||||
* @description BadCase录包管理页面
|
||||
* @since: 2022/12/15
|
||||
*/
|
||||
class OperationalViewModel : ViewModel() {
|
||||
|
||||
private val TAG = OperationalViewModel::class.java.simpleName
|
||||
|
||||
private var viewCallback:RunningTaskViewCallback?=null
|
||||
private var subscribe: Disposable?=null
|
||||
|
||||
|
||||
fun setDistanceCallback(viewCallback:RunningTaskViewCallback){
|
||||
this.viewCallback = viewCallback
|
||||
queryServingDuration()
|
||||
queryCurrentCompleteOrder()
|
||||
queryCurrentDayOrder()
|
||||
queryCurrentScheduledTaskList()
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 车辆演练任务列表
|
||||
*/
|
||||
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 {
|
||||
viewCallback?.updateScheduledTaskList(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) { //服务时长返回 秒
|
||||
val toJson = GsonUtils.toJson(data)
|
||||
CallerLogger.d(TAG, "queryServingDuration$toJson")
|
||||
OchChainLogManager.writeChainLog("今日服务时长",toJson)
|
||||
viewCallback?.updateServingDuration(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))
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据订单查询任务列表
|
||||
*/
|
||||
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 {
|
||||
viewCallback?.setTaskList(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 {
|
||||
viewCallback?.setCurrentCompleteOrderData(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 {
|
||||
viewCallback?.setCurrentDayOrders(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))
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
RxUtils.disposeSubscribe(subscribe)
|
||||
subscribe = null
|
||||
}
|
||||
|
||||
|
||||
|
||||
interface RunningTaskViewCallback{
|
||||
fun updateScheduledTaskList(data: MutableList<QueryTaskRespBean.Result>?)
|
||||
fun updateServingDuration(data: QueryServingDurationRespBean?)
|
||||
fun setTaskList(data: MutableList<QueryTaskRespBean.Result>?)
|
||||
fun setCurrentCompleteOrderData(data: MutableList<QueryOrdersRespBean.Result>?)
|
||||
fun setCurrentDayOrders(data: MutableList<QueryOrdersRespBean.Result>?)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ MOGO_TELEMATIC_VERSION=1.4.7.42
|
||||
MOGO_SKIN_VERSION=1.4.7.49.14-debug
|
||||
######## MogoAiCloudSDK Version ########
|
||||
# 自研地图
|
||||
MAP_SDK_VERSION=3.4.1.17
|
||||
MAP_SDK_VERSION=3.4.1.18
|
||||
MAP_SDK_DATA_VERSION=1.0.0.9
|
||||
MAP_SDK_OPERATION_VERSION=1.1.4.1
|
||||
# websocket
|
||||
|
||||
Reference in New Issue
Block a user