[算路]
[item view 修改(taxi bus)]
This commit is contained in:
yangyakun
2025-07-31 19:50:48 +08:00
parent e947d60e18
commit c30478ee58
7 changed files with 159 additions and 12 deletions

View File

@@ -18,6 +18,7 @@ data class GrayLineBean(
var isChoosed: Boolean = false, //当前是否选中
var startSite: RoutingSite?,
var endSite: RoutingSite?,
var allStation:MutableList<RoutingSite>?=null,
var distance:Float,
)

View File

@@ -12,6 +12,7 @@ import com.mogo.och.biz.routing.bean.QueryGrayContrailListRsp
import com.mogo.och.biz.routing.bean.QueryPointErrorReasonsRsp
import com.mogo.och.biz.routing.bean.QuerySitesReasons
import com.mogo.och.biz.routing.bean.SaveGrayContrailErrorReasons
import com.mogo.och.biz.routing.bean.SitesInfo
import com.mogo.och.biz.routing.bean.StartGrayAndQueryContrailRsp
import com.mogo.och.biz.routing.bean.StartGrayContrailTaskReq
import com.mogo.och.common.module.biz.login.LoginStatusManager
@@ -164,4 +165,8 @@ object RoutingServiceManager {
}
}
fun querySiteListByList(request: QuerySitesReasons): Observable<SitesInfo> {
return mRoutingServiceApi.querySiteListByLine(data = request)
}
}

View File

@@ -1,6 +1,9 @@
package com.mogo.och.biz.routing.ui.routingselect
import android.content.Context
import android.text.Spannable
import android.text.SpannableString
import android.text.style.ForegroundColorSpan
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -10,8 +13,11 @@ import androidx.recyclerview.widget.DiffUtil.Callback
import androidx.recyclerview.widget.RecyclerView
import com.mogo.och.biz.R
import com.mogo.och.biz.routing.bean.GrayLineBean
import com.mogo.och.biz.routing.bean.SitesInfo
import com.mogo.och.common.module.utils.ResourcesUtils
import me.jessyan.autosize.AutoSizeCompat
/**
* 路线列表adapter
*/
@@ -25,7 +31,11 @@ class RoutingItemAdapter(
// RecyclerView设置点击事件
private var mItemClickListener: LineItemClickListener? = null
private val middleCOlor =ResourcesUtils.getColor(R.color.biz_routing_2eacff)
private val allCOlor =ResourcesUtils.getColor(R.color.color_FFFFFF)
fun setDataList(dataList: List<GrayLineBean>) {
if (this.mData == dataList) {
// 如果新旧列表一致,则直接返回
return
@@ -51,10 +61,39 @@ class RoutingItemAdapter(
val currentPosition = holder.bindingAdapterPosition
val routing = mData[currentPosition]
AutoSizeCompat.autoConvertDensityOfGlobal(holder.itemView.resources)
holder.routingId.text = "${routing.lineId}"
holder.routingName.text = routing.lineName
holder.todayVerifyNum.text = "今日验证:${routing.carVerificationCount}"
holder.routingEndName.text = "${routing.endSite?.siteName?:""}方向"
val startName = routing.startSite?.siteName ?: ""
val endName = routing.endSite?.siteName ?: ""
if(routing.allStation.isNullOrEmpty()||routing.allStation?.size==2){
holder.routingEndName.text = "${startName} - ${endName}"
}else{
routing.allStation?.let {
val middleStationSize = it.size-2
val spannableString = SpannableString("${startName} - ${middleStationSize}站 - ${endName}")
// 设置不同颜色范围
spannableString.setSpan(
ForegroundColorSpan(allCOlor),
0, startName.length+2, // 从索引0开始的前4个字符
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
);
spannableString.setSpan(
ForegroundColorSpan(middleCOlor),
startName.length+3, startName.length+5, // 索引5-9的字符
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
);
spannableString.setSpan(
ForegroundColorSpan(allCOlor),
startName.length+6, spannableString.length, // 索引10-14的字符
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
holder.routingEndName.text = spannableString
}
}
holder.historyVerifyNumEnableNum.text = "${routing.lineSuccessCount}可用"
holder.historyVerifyNumDisenableNum.text = "${routing.lineFailCount}不可用"
//设置item点击事件
@@ -71,7 +110,14 @@ class RoutingItemAdapter(
mItemClickListener = itemClickListener
}
fun upDateInfo(grayLineBean: GrayLineBean, data: SitesInfo) {
grayLineBean.allStation = data.data?.toMutableList()
val indexOf = mData.indexOf(grayLineBean)
notifyItemChanged(indexOf)
}
class RoutingItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val routingId: AppCompatTextView = itemView.findViewById(R.id.actv_routing_id)//线路名称
val routingName: AppCompatTextView = itemView.findViewById(R.id.actv_routing_name)//线路名称
val todayVerifyNum: AppCompatTextView = itemView.findViewById(R.id.actv_today_verify_num) //终点
val routingEndName: AppCompatTextView = itemView.findViewById(R.id.actv_routing_end_name) //终点站点名称

View File

@@ -6,19 +6,28 @@ import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.och.CallerEagleBaseFunctionCall4OchManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON
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.biz.routing.bean.GrayLineBean
import com.mogo.och.biz.routing.bean.QueryGrayContrailListRsp
import com.mogo.och.biz.routing.bean.QuerySitesReasons
import com.mogo.och.biz.routing.bean.SitesInfo
import com.mogo.och.biz.routing.bean.StartGrayAndQueryContrailRsp
import com.mogo.och.biz.routing.net.RoutingServiceManager
import com.mogo.och.bridge.autopilot.line.LineManager
import com.mogo.och.common.module.network.OchCommonServiceCallback
import com.mogo.och.data.bean.LineInfo
import com.mogo.och.common.module.biz.birdge.BridgeManager
import com.mogo.och.common.module.biz.login.LoginStatusManager
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.common.module.network.OchCommonNet
import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
/**
* @author XuXinChao
@@ -38,6 +47,34 @@ class RoutingSelectModel : ViewModel() {
}
fun queryStationList(grayLineBean: GrayLineBean) {
val request = QuerySitesReasons(grayLineBean.lineId?:0,
LoginStatusManager.getOchBizInfo()?.businessType?:11)
RoutingServiceManager.querySiteListByList(request)
.flatMap(OchCommonNet("queryBusRoutes",false))
?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(object : Observer<SitesInfo> {
override fun onSubscribe(d: Disposable) {
d(TAG, "queryBusRoutes onSubscribe")
}
override fun onError(e: Throwable) {
e.printStackTrace()
OchChainLogManager.writeChainLogError("查询站点错误","灰度信息${grayLineBean}")
}
override fun onComplete() {
d(TAG, "queryBusRoutes onComplete")
}
override fun onNext(data: SitesInfo) {
viewCallback?.updateAdapter(grayLineBean,data)
}
})
}
/**
* 查询灰度路线
*/
@@ -204,6 +241,8 @@ class RoutingSelectModel : ViewModel() {
*/
fun onStartGrayTaskAndQueryContrailFailed(errorStr: String)
fun updateAdapter(grayLineBean: GrayLineBean, data: SitesInfo)
}
}

View File

@@ -9,19 +9,22 @@ import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.findViewTreeViewModelStoreOwner
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.view.SpacesItemDecoration
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.biz.R
import com.mogo.och.biz.routing.bean.GrayLineBean
import com.mogo.och.biz.routing.bean.SitesInfo
import com.mogo.och.biz.routing.bean.StartGrayAndQueryContrailRsp
import com.mogo.och.common.module.wigets.WrapContentLinearLayoutManager
import com.mogo.och.biz.routing.ui.RoutingSwitchModel
import com.mogo.och.biz.routing.ui.routingselect.RoutingSelectModel.SwtichRoutingViewCallback
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.common.module.utils.ResourcesUtils
import kotlinx.android.synthetic.main.biz_taxi_select.view.aciv_refresh_task
import kotlinx.android.synthetic.main.biz_taxi_select.view.include_empty
import kotlinx.android.synthetic.main.biz_taxi_select.view.include_error
@@ -84,6 +87,28 @@ class RoutingSelectView: ConstraintLayout, SwtichRoutingViewCallback {
viewModel?.startGrayTaskAndQueryRoutingContrail(data.contrailId!!,data)
}
})
if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)
|| AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)
|| AppIdentityModeUtils.isScheduled(FunctionBuildConfig.appIdentityMode)
) {
switch_routing_rv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
val layoutManager = recyclerView.layoutManager as LinearLayoutManager
val firstVisible = layoutManager.findFirstVisibleItemPosition()
val lastVisible = layoutManager.findLastVisibleItemPosition()
// 获取所有可见Item
(firstVisible..lastVisible).map { position ->
val grayLineBean = mRoutingLineList[position]
if (grayLineBean.allStation.isNullOrEmpty()) {
viewModel?.queryStationList(grayLineBean)
}
}
}
}
})
}
aciv_refresh_task.onClick {
viewModel?.queryRoutingGrayLineList()
@@ -152,6 +177,16 @@ class RoutingSelectView: ConstraintLayout, SwtichRoutingViewCallback {
override fun onQueryRoutingGrayLineListSuccess(data: MutableList<GrayLineBean>) {
onRoutingGrayLineListChanged(data)
if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)
||AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)
||AppIdentityModeUtils.isScheduled(FunctionBuildConfig.appIdentityMode)
) {
data.forEachIndexed { index, grayLineBean ->
if (index < 3) {
viewModel?.queryStationList(grayLineBean)
}
}
}
cancleAni()
}
@@ -168,6 +203,10 @@ class RoutingSelectView: ConstraintLayout, SwtichRoutingViewCallback {
swtichViewModel?.showRoutingSelectView()
}
override fun updateAdapter(grayLineBean: GrayLineBean, data: SitesInfo) {
mChooseLineListAdapter.upDateInfo(grayLineBean,data)
}
private fun cancleAni(){
val endTime = System.currentTimeMillis()
val dex = (1000-(endTime - animatorStart)).takeIf { it>=0 }?:0

View File

@@ -8,14 +8,14 @@
xmlns:tools="http://schemas.android.com/tools">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/actv_routing_name"
android:id="@+id/actv_routing_id"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="@dimen/dp_30"
android:layout_marginTop="@dimen/dp_26"
android:textColor="@color/white"
android:textSize="@dimen/dp_40"
tools:text="灰度路线11111111"
tools:text="3741"
android:singleLine="true"
android:ellipsize="end"
app:layout_constraintEnd_toStartOf="@+id/actv_today_verify_num"
@@ -24,23 +24,38 @@
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/actv_today_verify_num"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintTop_toTopOf="@+id/actv_routing_id"
app:layout_constraintBottom_toBottomOf="@+id/actv_routing_id"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="@dimen/dp_40"
android:layout_marginTop="@dimen/dp_31"
android:layout_marginEnd="@dimen/dp_27"
android:textColor="@color/biz_routing_CCFFFFFF"
android:textSize="@dimen/dp_32"
android:textSize="@dimen/dp_30"
tools:text="今日验证2次"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/actv_routing_name"
app:layout_constraintTop_toBottomOf="@+id/actv_routing_id"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="@+id/actv_today_verify_num"
android:layout_marginStart="@dimen/dp_30"
android:layout_marginTop="@dimen/dp_12"
android:textColor="@color/white"
android:textSize="@dimen/dp_36"
tools:text="线路名称"
android:singleLine="true"
android:ellipsize="end"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/actv_routing_end_name"
app:layout_constraintTop_toBottomOf="@+id/actv_routing_name"
app:layout_constraintStart_toStartOf="@+id/actv_routing_name"
android:layout_marginTop="@dimen/dp_12"
android:textColor="@color/white"
android:textSize="@dimen/dp_32"
android:textSize="@dimen/dp_30"
tools:text="往AAAA方向"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

View File

@@ -54,7 +54,9 @@ object ThirdDeviceData {
ShuttleVoiceManager.leave200Distance(message)
}
}else{
ShuttleVoiceManager.leave200Distance(end.introduction)
end.introduction?.let {
ShuttleVoiceManager.leave200Distance(it)
}
}
}
}