Merge branch 'dev_minibus-d_230425_3.2.0' of gitlab.zhidaoauto.com:SCA/L4HA/AndroidApp/MoGoEagleEye into dev_minibus-d_230425_3.2.0

This commit is contained in:
wangmingjun
2023-05-05 17:46:44 +08:00
11 changed files with 148 additions and 92 deletions

View File

@@ -0,0 +1,6 @@
package com.mogo.och.bus.passenger.bean.event
import com.mogo.och.bus.passenger.bean.response.LineInfoResponse
import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse
data class EventLineSites(val lineInfo: LineInfoResponse.LineInfo, val sites: List<SiteInfoResponse.SiteInfo>)

View File

@@ -1,6 +1,7 @@
package com.mogo.och.bus.passenger.bean.response
import com.mogo.eagle.core.data.BaseData
import com.mogo.och.common.module.bean.dpmsg.LineSite
import java.util.*
/**
@@ -20,6 +21,10 @@ data class SiteInfoResponse(val data: List<SiteInfo>?) : BaseData(){
val type: Int?,
var isNear:Boolean=false,
var isCheck:Boolean=false,
)
){
fun copy2Mas(): LineSite {
return LineSite(lineId,lineName,siteId,siteName,Wgs84Lon,Wgs84Lat,GcjLon,GcjLat,seq,type)
}
}
}

View File

@@ -841,7 +841,9 @@ object CharterPassengerModel {
)
broadcastList["${siteId}$endKey"] = true
// 给司机端
val msg = ChangeDestMsg(
order.orderNo?:":",
lineId.toInt(),
order.lineName?:"",
order.startSiteId?:0,

View File

@@ -13,6 +13,7 @@ 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.ToastUtils
import com.mogo.och.bus.passenger.bean.LoopInfo
import com.mogo.och.bus.passenger.bean.event.EventLineSites
import com.mogo.och.bus.passenger.bean.response.LineInfoListResponse
import com.mogo.och.bus.passenger.bean.response.LineInfoResponse
import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse
@@ -24,11 +25,13 @@ import com.mogo.och.bus.passenger.net.BusPassengerServiceManager
import com.mogo.och.bus.passenger.ui.dialogfragment.fragment.M1OrderLineFragment
import com.mogo.och.common.module.bean.dpmsg.ChangeDestMsg
import com.mogo.och.common.module.bean.dpmsg.DPMsgType
import com.mogo.och.common.module.bean.dpmsg.LineSite
import com.mogo.och.common.module.biz.constant.OchCommonConst
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.manager.OCHPlanningStopSideStatusManager
import com.mogo.och.common.module.utils.RxUtils
import io.reactivex.disposables.Disposable
import org.greenrobot.eventbus.EventBus
class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) :
BusBasePassengerFunctionDevicePresenter<M1OrderLineFragment?>(view), IOrderStatusChangeListener {
@@ -68,7 +71,6 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) :
checkSite = hasSetLineAndSite.second
}
mView?.setEnableSiteStatus(false)
mView?.onlyChangeSite(false)
queryLineList()
}
@@ -81,25 +83,24 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) :
if(checkLine==null){// 没有提交线路
queryLineList()
mView?.setEnableSiteStatus(true)
mView?.onlyChangeSite(false)
}else{
checkLine?.let {
mView?.setEnableSiteStatus(false)
mView?.onlyChangeSite(false)
mView?.lineAdapterSubmit(it)
querySitesByLineId(it.lineId.toString())
querySitesByLineId(it)
}
}
}
private fun querySitesByLineId(lineId: String) {
private fun querySitesByLineId(checkLine: LineInfoResponse.LineInfo) {
BusPassengerServiceManager.queryLineSiteList(
context,
lineId,
checkLine.lineId.toString(),
object : OchCommonServiceCallback<SiteInfoResponse> {
override fun onSuccess(data: SiteInfoResponse?) {
if (data?.data == null) return
val siteInfos = data.data
EventBus.getDefault().post(EventLineSites(checkLine,data.data))
if (siteInfos.isNotEmpty()) {
// 计算当前站点是那个
val calculateCurrentSite =
@@ -183,7 +184,6 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) :
if (msg.isConfirmed) {
ToastUtils.showShort("站点确定")
mView?.setEnableSiteStatus(true)
mView?.onlyChangeSite(false)
checkLine = tempCheckLine
checkSite = tempCheckSite
tempCheckLine = null
@@ -206,47 +206,20 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) :
}
}
fun siteSubmit(){
fun changeSites(siteList: MutableList<SiteInfoResponse.SiteInfo>){
if (!CallerTelematicManager.getClientConnStatus()) {
ToastUtils.showLong("乘客屏无法连接司机屏请联系安全员")
return
}
tempCheckSite?.let { lineInfo ->
tempCheckSite?.let { siteInfo ->
val msg = ChangeDestMsg(
lineInfo.lineId!!.toInt(),
lineInfo.lineName!!,
currentSite!!.siteId!!.toInt(),
currentSite!!.siteName!!,
siteInfo.siteId!!.toInt(),
siteInfo.siteName!!,
false,
1,
0,
)
CallerTelematicManager.sendMsgToServer(
OchCommonConst.BUSINESS_STRING,
GsonUtils.toJson(msg).toByteArray()
)
}
mView?.startAni()
// 启动查看和司机端链接
BusPassengerModelLoopManager.setLoopFunction(
TAGLINELOOP,
LoopInfo(3, ::checkServerStatus)
)
RxUtils.disposeSubscribe(subscribeSelectSite)
subscribeSelectSite = RxUtils.createSubscribe(120_000){
ToastUtils.showShort("请联系安全员确认")
mView?.endAni()
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "endAni444")
}
val sentDataSite: MutableList<LineSite> = mutableListOf()
siteList.forEach {
sentDataSite.add(it.copy2Mas())
}
}
fun onlySiteSubmit(){
tempCheckSite?.let { siteInfo ->
val orderNo = CharterPassengerModel.getCurrentOrderInfo()?.orderNo ?: ""
val msg = ChangeDestMsg(
orderNo,
siteInfo.lineId!!.toInt(),
siteInfo.lineName!!,
currentSite!!.siteId!!.toInt(),
@@ -255,7 +228,8 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) :
siteInfo.siteName!!,
false,
1,
0
0,
sentDataSite
)
CallerTelematicManager.sendMsgToServer(
OchCommonConst.BUSINESS_STRING,
@@ -268,12 +242,11 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) :
TAGLINELOOP,
LoopInfo(3, ::checkServerStatus)
)
RxUtils.disposeSubscribe(subscribeSelectSite)
subscribeSelectSite = RxUtils.createSubscribe(120_000){
ToastUtils.showShort("请联系安全员确认")
mView?.endAni()
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "endAni555")
}
}
private fun checkServerStatus() {
@@ -330,13 +303,12 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) :
fun checkLineClick(lineInfo: LineInfoResponse.LineInfo) {
checkLine4View()
tempCheckLine = lineInfo
querySitesByLineId(lineInfo.lineId.toString())
querySitesByLineId(lineInfo)
}
private fun checkLine4View(){
tempCheckSite = null
mView?.setEnableSiteStatus(false)
mView?.onlyChangeSite(false)
}
fun checkSiteClick(siteInfo: SiteInfoResponse.SiteInfo?) {
@@ -345,25 +317,20 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) :
checkSite?.let {
if (it.siteId == siteInfo?.siteId) {// 站点相同 隐藏所有提交按钮
mView?.setEnableSiteStatus(false)
mView?.onlyChangeSite(false)
} else {
if(it.lineId == siteInfo?.lineId){// 线路相同显示单独提交
mView?.setEnableSiteStatus(false)
mView?.onlyChangeSite(true)
mView?.setEnableSiteStatus(true)
}else{
if(siteInfo==null){//没有选站点隐藏所有提交
mView?.setEnableSiteStatus(false)
mView?.onlyChangeSite(false)
}else {
mView?.setEnableSiteStatus(true)
mView?.onlyChangeSite(false)
}
}
}
}
}else{
mView?.setEnableSiteStatus(true)
mView?.onlyChangeSite(false)
}
}

View File

@@ -2,8 +2,9 @@ package com.mogo.och.bus.passenger.ui
import android.graphics.BitmapFactory
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.View.OnClickListener
import android.view.ViewGroup
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
import com.amap.api.maps.model.LatLng
@@ -14,16 +15,22 @@ import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.hmi.ui.msgbox.MMsgBoxButtonView
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.mogo.logger.scene.SceneConstant.Companion.M_BUS_P
import com.mogo.eagle.core.utilcode.util.AppStateManager
import com.mogo.eagle.core.utilcode.util.ClickUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.och.bus.passenger.R
import com.mogo.och.common.module.voice.VoiceManager
import com.mogo.och.bus.passenger.bean.event.EventLineSites
import com.mogo.och.bus.passenger.presenter.BusPassengerPresenter
import com.mogo.och.bus.passenger.ui.dialogfragment.M1CarUserNoOrderFragment
import com.mogo.och.bus.passenger.ui.dialogfragment.M1ContainFragment
import com.mogo.och.common.module.biz.constant.LoginStatusManager
import com.mogo.och.common.module.utils.RxUtils
import com.mogo.och.common.module.voice.VoiceManager
import kotlinx.android.synthetic.main.m1_main_fragment.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import java.lang.ref.WeakReference
/**
@@ -47,6 +54,15 @@ class MainFragment :
return TAG
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
EventBus.getDefault().register(this)
return super.onCreateView(inflater, container, savedInstanceState)
}
override fun initViews() {
viewBusPM1MsgBoxButton.setClickListener(object : MMsgBoxButtonView.ClickListener {
override fun showMsgBoxList(show: Boolean) {
@@ -191,6 +207,7 @@ class MainFragment :
mapBizView.onDestroy()
omvOverMap.onDestroy()
super.onDestroyView()
EventBus.getDefault().unregister(this)
}
fun showOpenAndCloseDoor() {
@@ -240,6 +257,11 @@ class MainFragment :
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun changeOverview(eventLineSites: EventLineSites) {
CallerLogger.d(M_BUS_P + TAG, "eventLineSites:${eventLineSites.lineInfo.name}-----${eventLineSites.sites.size}")
}
companion object {
public const val TAG = "BusPassengerRouteFragment"
}

View File

@@ -111,15 +111,7 @@ class M1OrderLineFragment :
mPresenter?.resetData()
}
tv_site_submit.onClick {
mPresenter?.siteSubmit()
}
tv_site_only_submit.onClick {
// 线路不换只换站点
if (!CallerTelematicManager.getClientConnStatus()) {
ToastUtils.showLong("乘客屏无法连接司机屏请联系安全员")
return@onClick
}
mPresenter?.onlySiteSubmit()
mPresenter?.changeSites(siteList)
}
tv_loading_wait_driver_title.onClick {
endAni()
@@ -139,14 +131,6 @@ class M1OrderLineFragment :
}
}
fun onlyChangeSite(submit: Boolean) {
if (submit) {
tv_site_only_submit.visibility = View.VISIBLE
} else {
tv_site_only_submit.visibility = View.GONE
}
}
fun startAni() {
g_lines_sites_data.visibility = View.GONE
g_loading_group.visibility = View.VISIBLE

View File

@@ -107,24 +107,6 @@
android:layout_height="wrap_content"
app:constraint_referenced_ids="tv_site_submit,tv_site_cancle" />
<TextView
android:id="@+id/tv_site_only_submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_22"
android:background="@drawable/charter_p_shape_submit_line_site_change"
android:paddingStart="@dimen/dp_56"
android:visibility="gone"
android:paddingTop="@dimen/dp_14"
android:paddingEnd="@dimen/dp_56"
android:paddingBottom="@dimen/dp_13"
android:text="确认"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_20"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/gl_site_cancle_submit_guide"
app:layout_constraintStart_toStartOf="@+id/gl_site_cancle_submit_guide" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.Group

View File

@@ -447,6 +447,7 @@ class DriverM1Model {
if (currentChangeDestMsg == null){
mCurrentOrder?.let {
currentChangeDestMsg = ChangeDestMsg(
mCurrentOrder!!.orderNo,
mCurrentOrder!!.lineId
,mCurrentOrder!!.lineName
, mCurrentOrder!!.startSiteId

View File

@@ -17,6 +17,7 @@ data class LoginCacheStatus(
): BaseDPMsg(DPMsgType.TYPE_LOGIN_STATUS.type)
data class ChangeDestMsg(
var orderNo: String,// 订单号
var lineId: Int, //线路id
var lineName: String = "", //线路名称
var startSiteId: Int= 0, //当前站点
@@ -26,8 +27,34 @@ data class ChangeDestMsg(
var isConfirmed: Boolean = false, //司机端是否同意
var arriveStatus:Int?, //1:未到达 2:到达
var writtenVersion:Long?, //版本标记
var lineSiteList: MutableList<LineSite>? = null
): BaseDPMsg(DPMsgType.TYPE_CHANGE_DEST.type)
data class LineSite(
val lineId: Long?,//线路Id
val lineName: String?,//线路名称
val siteId: Long?,//线路Id
val siteName: String?,//站点名称
val Wgs84Lon: Double?,//高精坐标
val Wgs84Lat: Double?,//高精坐标
val GcjLon: Double?,//高德坐标
val GcjLat: Double?,//高德坐标
val seq: Double?,
val type: Int?,
)
data class ArriveDestMsg(
var orderNo: String, //订单id
var lineId: Int, //线路id
var lineName: String = "", //线路名称
var startSiteId: Int= 0, //当前站点
var startSiteName: String = "",
var destSiteId: Int= 0, //目的地
var destSiteName: String = "",
var arriveStatus:Int?, //1:未到达 2:到达
var writtenVersion:Long?, //版本标记
): BaseDPMsg(DPMsgType.TYPE_ARRIVEDEST_STATUS.type)
data class EndOrderMsg(
var orderNo: String, //订单id
): BaseDPMsg(DPMsgType.TYPE_ORDER_CLOSED_BY_M1_STATUS.type)

View File

@@ -112,6 +112,7 @@ class OverMapView @JvmOverloads constructor(
var mCustomMapStyleOptions: CustomMapStyleOptions? = null
var currMarkerList: ArrayList<Marker>? = null
var siteMarkerList: ArrayList<Marker>? = null
var siteNameList: ArrayList<Marker>? = null
companion object {
const val TAG = "OverMapView"
@@ -218,7 +219,7 @@ class OverMapView @JvmOverloads constructor(
@MainThread
fun drawSiteMarkers(
siteMarkers: List<SiteMarkerBean>?,
siteMarkers: List<SiteMarkerBean>?
) {
if (siteMarkers.isNullOrEmpty()) return
clearSiteMarkers()
@@ -245,6 +246,64 @@ class OverMapView @JvmOverloads constructor(
}
}
/**
* 绘制站点名
*/
fun drawSiteNameViews(siteMarkers: List<SiteMarkerBean>?) {
if (siteMarkers.isNullOrEmpty()) return
clearSiteMarkers()
val markerOptionsList = ArrayList<MarkerOptions>()
for (siteMarkerBean in siteMarkers) {
val markerOption = MarkerOptions()
markerOption.position(siteMarkerBean.latLng)
markerOption.anchor(siteMarkerBean.anchorX, siteMarkerBean.anchorY)
markerOption.icon(
BitmapDescriptorFactory.fromBitmap(siteMarkerBean.bitmap)
)
markerOptionsList.add(markerOption)
}
siteNameList = mAMap!!.addMarkers(markerOptionsList, false)
}
/**
* 更新站点信息Bitmap展示
*/
fun updateSiteNameView(index: Int, bitmap: Bitmap) {
if (siteNameList != null && index in 0 until siteNameList!!.size) {
val siteNameMarker = siteNameList!![index]
siteNameMarker.options.icon(BitmapDescriptorFactory.fromBitmap(bitmap))
siteNameMarker.position = siteNameMarker.position
}
}
/**
* 更新站点信息
*/
fun updateSiteNameView(index: Int, siteMarkerBean: SiteMarkerBean) {
if (siteNameList != null && index in 0 until siteNameList!!.size) {
val siteNameMarker = siteNameList!![index]
val markerOption = MarkerOptions()
markerOption.position(siteMarkerBean.latLng)
markerOption.anchor(siteMarkerBean.anchorX, siteMarkerBean.anchorY)
markerOption.icon(
BitmapDescriptorFactory.fromBitmap(siteMarkerBean.bitmap)
)
siteNameMarker.setMarkerOptions(markerOption)
}
}
/**
* 清除站点名
*/
fun clearSiteNameViews() {
if (siteNameList != null) {
for (marker in siteNameList!!) {
marker.destroy()
}
siteNameList = null
}
}
/**
* 清空线路并隐藏起、终点
*/
@@ -578,7 +637,7 @@ class OverMapView @JvmOverloads constructor(
/**
* 进入自定义全览模式
*/
private fun displayCustomOverView() {
fun displayCustomOverView() {
val linePointsLatLng = planningPoints
if (linePointsLatLng.size > 1 && mLocation != null) {
//圈定地图显示范围
@@ -651,7 +710,8 @@ class OverMapView @JvmOverloads constructor(
* @param coordinates
* @param locIndex
*/
private fun drawPolyline(coordinates: List<LatLng>, locIndex: Int) {
@MainThread
fun drawPolyline(coordinates: List<LatLng>, locIndex: Int) {
if (textureList.size > 0) {
textureList.clear()
}