From c30478ee5878b30b324037e19d99e42d032e5ecf Mon Sep 17 00:00:00 2001 From: yangyakun Date: Thu, 31 Jul 2025 19:50:48 +0800 Subject: [PATCH] =?UTF-8?q?[8.2.0]=20[=E7=AE=97=E8=B7=AF]=20[item=20view?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9(taxi=20bus)]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/och/biz/routing/bean/RoutingBean.kt | 1 + .../biz/routing/net/RoutingServiceManager.kt | 5 ++ .../ui/routingselect/RoutingItemAdapter.kt | 50 ++++++++++++++++++- .../ui/routingselect/RoutingSelectModel.kt | 39 +++++++++++++++ .../ui/routingselect/RoutingSelectView.kt | 43 +++++++++++++++- .../routing/layout/biz_taxi_select_item.xml | 29 ++++++++--- .../mogo/och/weaknet/model/ThirdDeviceData.kt | 4 +- 7 files changed, 159 insertions(+), 12 deletions(-) diff --git a/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/bean/RoutingBean.kt b/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/bean/RoutingBean.kt index 1fd8a057d4..be5f416f14 100644 --- a/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/bean/RoutingBean.kt +++ b/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/bean/RoutingBean.kt @@ -18,6 +18,7 @@ data class GrayLineBean( var isChoosed: Boolean = false, //当前是否选中 var startSite: RoutingSite?, var endSite: RoutingSite?, + var allStation:MutableList?=null, var distance:Float, ) diff --git a/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/net/RoutingServiceManager.kt b/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/net/RoutingServiceManager.kt index e46f2c749b..e24d2afc28 100644 --- a/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/net/RoutingServiceManager.kt +++ b/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/net/RoutingServiceManager.kt @@ -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 { + return mRoutingServiceApi.querySiteListByLine(data = request) + } } \ No newline at end of file diff --git a/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/ui/routingselect/RoutingItemAdapter.kt b/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/ui/routingselect/RoutingItemAdapter.kt index 95af8b2c8f..ec90804f66 100644 --- a/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/ui/routingselect/RoutingItemAdapter.kt +++ b/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/ui/routingselect/RoutingItemAdapter.kt @@ -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) { + 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) //终点站点名称 diff --git a/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/ui/routingselect/RoutingSelectModel.kt b/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/ui/routingselect/RoutingSelectModel.kt index a80bd4fc60..80e10d12b7 100644 --- a/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/ui/routingselect/RoutingSelectModel.kt +++ b/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/ui/routingselect/RoutingSelectModel.kt @@ -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 { + 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) + } } diff --git a/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/ui/routingselect/RoutingSelectView.kt b/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/ui/routingselect/RoutingSelectView.kt index 0baaf9be6d..11dec34bee 100644 --- a/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/ui/routingselect/RoutingSelectView.kt +++ b/OCH/common/biz/src/main/java/com/mogo/och/biz/routing/ui/routingselect/RoutingSelectView.kt @@ -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) { 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 diff --git a/OCH/common/biz/src/main/res/routing/layout/biz_taxi_select_item.xml b/OCH/common/biz/src/main/res/routing/layout/biz_taxi_select_item.xml index da80e8b8ae..a9bbb2ff9c 100644 --- a/OCH/common/biz/src/main/res/routing/layout/biz_taxi_select_item.xml +++ b/OCH/common/biz/src/main/res/routing/layout/biz_taxi_select_item.xml @@ -8,14 +8,14 @@ xmlns:tools="http://schemas.android.com/tools"> + + diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/ThirdDeviceData.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/ThirdDeviceData.kt index 83486be893..bef73ee15a 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/ThirdDeviceData.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/ThirdDeviceData.kt @@ -54,7 +54,9 @@ object ThirdDeviceData { ShuttleVoiceManager.leave200Distance(message) } }else{ - ShuttleVoiceManager.leave200Distance(end.introduction) + end.introduction?.let { + ShuttleVoiceManager.leave200Distance(it) + } } } }