Merge branch 'dev_robotaxi-d_250417_8.0.0' into 'master'
Dev robotaxi d 250417 8.0.0 See merge request SCA/L4HA/AndroidApp/MoGoEagleEye!874
This commit is contained in:
@@ -55,7 +55,7 @@ abstract class CharterBaseFragment<V : IView?, P : Presenter<V>?>() : MvpFragmen
|
||||
}
|
||||
|
||||
override fun initViews() {
|
||||
mapBizView = findViewById(R.id.mapBizView)
|
||||
mapBizView = findViewById(R.id.mHomeView)
|
||||
groupTestPanel = findViewById(R.id.groupTestPanel)
|
||||
ctvAutopilotStatus = findViewById(R.id.autopilot_status)
|
||||
flStationPanelContainer = findViewById(R.id.module_mogo_och_station_panel_container)
|
||||
|
||||
@@ -14,8 +14,8 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.eagle.core.utilcode.util.ActivityUtils
|
||||
import com.mogo.eagle.core.utilcode.util.GsonUtils
|
||||
import com.mogo.och.bridge.autopilot.trajectory.ITrajectoryListListener
|
||||
import com.mogo.och.bridge.autopilot.trajectory.TrajectoryManager
|
||||
import com.mogo.och.bridge.trajectory.ITrajectoryListListener
|
||||
import com.mogo.och.bridge.trajectory.TrajectoryManager
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusManager
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
import com.mogo.och.common.module.utils.SoundPoolHelper
|
||||
|
||||
@@ -147,9 +147,6 @@ class DriverM1Model {
|
||||
//定位,长连接等异常提示
|
||||
startLoopAbnormalFactors(mContext!!)
|
||||
|
||||
//网络监听
|
||||
IntentManager.getInstance().registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener)
|
||||
|
||||
//2022.1.28
|
||||
// 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃
|
||||
// The exception could not be delivered to the consumer because it has already canceled/disposed
|
||||
@@ -321,17 +318,6 @@ class DriverM1Model {
|
||||
}
|
||||
}
|
||||
|
||||
//监听网络变化,避免启动机器时无网导致无法更新订单信息
|
||||
private val mNetWorkIntentListener =
|
||||
IMogoIntentListener { intentStr, _ ->
|
||||
d(SceneConstant.M_TAXI + TAG, "onIntentReceived = %s", intentStr)
|
||||
if (ConnectivityManager.CONNECTIVITY_ACTION == intentStr) {
|
||||
if (NetworkUtils.isConnected(mContext)) {
|
||||
LoginStatusManager.queryLoginStatusByNet()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 自车定位
|
||||
private val mMapLocationListener: IMoGoChassisLocationGCJ02Listener =
|
||||
object : IMoGoChassisLocationGCJ02Listener {
|
||||
|
||||
@@ -15,7 +15,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.eagle.core.utilcode.util.DateTimeUtils
|
||||
import com.mogo.och.common.module.biz.login.ILoginCallback
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusEnum
|
||||
import com.mogo.och.common.module.biz.login.EnumLoginStatus
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusManager
|
||||
import com.mogo.och.common.module.manager.socket.cloud.OCHSocketMessageManager.OPERATION_ROAD_SIDE_TYPE
|
||||
import com.mogo.och.bridge.autopilot.OCHAdasAbilityManager
|
||||
@@ -70,7 +70,7 @@ class DriverM1Presenter(view: DriverM1Fragment?) :
|
||||
DriverM1Model.get().release()
|
||||
}
|
||||
|
||||
override fun onStatusChange(currentStatus: LoginStatusEnum?) {
|
||||
override fun onLoginStatusChange(currentStatus: EnumLoginStatus?) {
|
||||
d(SceneConstant.M_BUS + TAG, " loginStatus =" + LoginStatusManager.isLogin())
|
||||
if(LoginStatusManager.isLogin()){
|
||||
// 查询服务状态
|
||||
@@ -179,6 +179,8 @@ class DriverM1Presenter(view: DriverM1Fragment?) :
|
||||
OPERATION_ROAD_SIDE_TYPE
|
||||
)
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
package com.magic.mogo.och.charter.view.view.drawline
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import androidx.appcompat.widget.AppCompatImageView
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.findViewTreeViewModelStoreOwner
|
||||
import com.magic.mogo.och.charter.R
|
||||
import com.mogo.eagle.core.utilcode.kotlin.onClick
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import com.mogo.och.bridge.autopilot.line.LineManager
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class LineView : AppCompatImageView, LineViewModel.ILineViewCallback {
|
||||
|
||||
private val TAG = "LineView"
|
||||
|
||||
constructor(context: Context) : super(context)
|
||||
|
||||
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
|
||||
|
||||
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(
|
||||
context,
|
||||
attributeSet,
|
||||
defStyleAttr
|
||||
)
|
||||
|
||||
private fun initView() {
|
||||
setImageResource(R.drawable.charter_map_line_close)
|
||||
}
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
|
||||
onClick {
|
||||
if (LineManager.hasDrawnGlobalTrajectory()) {
|
||||
LineManager.clearGlobalTrajectory(false)
|
||||
} else {
|
||||
val drawGlobalTrajectory = LineManager.drawGlobalTrajectory()
|
||||
if (!drawGlobalTrajectory.first) {
|
||||
ToastUtils.showLong(drawGlobalTrajectory.second)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val viewModel = findViewTreeViewModelStoreOwner()?.let {
|
||||
ViewModelProvider(it).get(LineViewModel::class.java)
|
||||
}
|
||||
viewModel?.setDistanceCallback(this)
|
||||
|
||||
}
|
||||
|
||||
|
||||
init {
|
||||
try {
|
||||
initView()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
override fun setImageViewResource(name: Int) {
|
||||
setImageResource(name)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.magic.mogo.och.charter.view.view.drawline
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.lifecycle.ViewModel
|
||||
import com.magic.mogo.och.charter.R
|
||||
import com.mogo.och.bridge.autopilot.line.ILineCallback
|
||||
import com.mogo.och.bridge.autopilot.line.LineManager
|
||||
|
||||
class LineViewModel : ViewModel(), ILineCallback {
|
||||
|
||||
private val TAG = LineViewModel::class.java.simpleName
|
||||
|
||||
private var viewCallback: ILineViewCallback? = null
|
||||
|
||||
init {
|
||||
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
LineManager.removeListener(TAG)
|
||||
this.viewCallback = null
|
||||
}
|
||||
|
||||
fun setDistanceCallback(viewCallback: ILineViewCallback) {
|
||||
LineManager.addListener(TAG,this)
|
||||
this.viewCallback = viewCallback
|
||||
}
|
||||
|
||||
override fun clearLineSuccess() {
|
||||
this.viewCallback?.setImageViewResource(R.drawable.charter_map_line_close)
|
||||
}
|
||||
|
||||
override fun drawLineSuccess() {
|
||||
this.viewCallback?.setImageViewResource(R.drawable.charter_map_line_open)
|
||||
}
|
||||
|
||||
override fun drawLineFail() {
|
||||
this.viewCallback?.setImageViewResource(R.drawable.charter_map_line_close)
|
||||
}
|
||||
|
||||
interface ILineViewCallback {
|
||||
fun setImageViewResource(@DrawableRes name: Int)
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
@@ -7,7 +7,7 @@
|
||||
android:layout_marginTop="@dimen/dp_status_bar_height">
|
||||
<!--高精地图-->
|
||||
<com.mogo.eagle.core.function.view.MapBizView
|
||||
android:id="@+id/mapBizView"
|
||||
android:id="@+id/mHomeView"
|
||||
app:isWeatherEnable="false"
|
||||
app:locationIcon3DRes="@raw/m1"
|
||||
android:layout_width="match_parent"
|
||||
@@ -197,7 +197,7 @@
|
||||
android:layout_width="@dimen/dp_142"
|
||||
android:layout_height="@dimen/dp_142"/>
|
||||
|
||||
<com.mogo.och.bridge.ui.drawline.LineView
|
||||
<com.magic.mogo.och.charter.view.view.drawline.LineView
|
||||
android:id="@+id/lineView"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toRightOf="@id/reportworkorderview"
|
||||
@@ -309,5 +309,16 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<!--数据落盘-->
|
||||
<com.mogo.eagle.core.function.hmi.ui.diskcopy.DiskCopyView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_180"
|
||||
android:layout_marginEnd="@dimen/dp_23"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:visibility="gone"
|
||||
/>
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -39,7 +39,7 @@ import com.mogo.och.common.module.manager.socket.lan.bean.ChangeDestMsg
|
||||
import com.mogo.och.common.module.manager.socket.cloud.OCHSocketMessageManager
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusManager
|
||||
import com.mogo.och.common.module.biz.login.ILoginCallback
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusEnum
|
||||
import com.mogo.och.common.module.biz.login.EnumLoginStatus
|
||||
import com.mogo.och.common.module.network.OchCommonServiceCallback
|
||||
import com.mogo.och.bridge.autopilot.autopilot.bean.ArrivedStation
|
||||
import com.mogo.och.bridge.autopilot.autopilot.IOchAutopilotStatusListener
|
||||
@@ -47,11 +47,11 @@ import com.mogo.och.bridge.autopilot.autopilot.OchAutoPilotManager
|
||||
import com.mogo.och.bridge.autopilot.autopilot.OchAutoPilotStatusListenerManager
|
||||
import com.mogo.och.bridge.autopilot.location.OchLocationManager
|
||||
import com.mogo.och.common.module.manager.beautifymode.BeautifyManager
|
||||
import com.mogo.och.bridge.distance.TrajectoryAndDistanceManager
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
import com.mogo.och.common.module.manager.socket.lan.LanSocketManager
|
||||
import com.mogo.och.common.module.manager.socket.lan.LedScreenManager
|
||||
import com.mogo.och.bridge.utils.CoordinateCalculateRouteUtil
|
||||
import com.mogo.och.common.module.biz.birdge.BridgeManager
|
||||
import com.mogo.och.common.module.utils.DateTimeUtil
|
||||
import com.mogo.och.common.module.utils.PinYinUtil
|
||||
import com.mogo.och.common.module.voice.VoiceNotice
|
||||
@@ -168,7 +168,7 @@ object CharterPassengerModel {
|
||||
*/
|
||||
private fun listenerLoginStatus() {
|
||||
LoginStatusManager.addListener(TAG,object : ILoginCallback{
|
||||
override fun onStatusChange(currentStatus: LoginStatusEnum?) {
|
||||
override fun onLoginStatusChange(currentStatus: EnumLoginStatus?) {
|
||||
if (LoginStatusManager.isLogin()) {
|
||||
// 1、打开视频播放、
|
||||
// 2 、打开空调暖风机灯设置页面
|
||||
@@ -1273,7 +1273,7 @@ object CharterPassengerModel {
|
||||
endStation: MogoLocation?,
|
||||
lineId: Long?
|
||||
) {
|
||||
TrajectoryAndDistanceManager.setStationPoint(startStation, endStation, lineId)
|
||||
BridgeManager.setDistanceStation(startStation,endStation,lineId)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -10,7 +10,6 @@ import com.amap.api.maps.model.LatLng
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.commons.mvp.MvpFragment
|
||||
import com.mogo.eagle.core.data.config.HdMapBuildConfig
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getMapUIController
|
||||
import com.mogo.eagle.core.function.view.SiteMarkerBean
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
@@ -39,7 +38,7 @@ import kotlinx.android.synthetic.main.charter_p_main_fragment.biz_orderinfo
|
||||
import kotlinx.android.synthetic.main.charter_p_main_fragment.biz_selectline
|
||||
import kotlinx.android.synthetic.main.charter_p_main_fragment.biz_softcontrol
|
||||
import kotlinx.android.synthetic.main.charter_p_main_fragment.biz_video
|
||||
import kotlinx.android.synthetic.main.charter_p_main_fragment.mapBizView
|
||||
import kotlinx.android.synthetic.main.charter_p_main_fragment.mHomeView
|
||||
import kotlinx.android.synthetic.main.charter_p_main_fragment.mcv_play_music
|
||||
import kotlinx.android.synthetic.main.charter_p_main_fragment.omvOverMap
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
@@ -165,7 +164,7 @@ class MainFragment : MvpFragment<MainFragment?, BusPassengerPresenter?>(), IMogo
|
||||
}
|
||||
aciv_map_2_default.setOnClickListener {
|
||||
omvOverMap.displayCustomOverView()
|
||||
mapBizView.getUI()?.let {
|
||||
mHomeView.getUI()?.let {
|
||||
it.changeMapVisualAngle(it.getVrAngleDefaultMode(), null)
|
||||
}
|
||||
}
|
||||
@@ -226,7 +225,7 @@ class MainFragment : MvpFragment<MainFragment?, BusPassengerPresenter?>(), IMogo
|
||||
|
||||
override fun initViews(savedInstanceState: Bundle?) {
|
||||
super.initViews(savedInstanceState)
|
||||
mapBizView.onCreate(savedInstanceState)
|
||||
mHomeView.onCreate(savedInstanceState)
|
||||
omvOverMap.onCreateView(savedInstanceState)
|
||||
}
|
||||
|
||||
@@ -243,28 +242,28 @@ class MainFragment : MvpFragment<MainFragment?, BusPassengerPresenter?>(), IMogo
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
mapBizView.onResume()
|
||||
mHomeView.onResume()
|
||||
omvOverMap.onResume()
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
mapBizView.onSaveInstanceState(outState)
|
||||
mHomeView.onSaveInstanceState(outState)
|
||||
}
|
||||
|
||||
override fun onLowMemory() {
|
||||
super.onLowMemory()
|
||||
mapBizView.onLowMemory()
|
||||
mHomeView.onLowMemory()
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
mapBizView.onPause()
|
||||
mHomeView.onPause()
|
||||
omvOverMap.onPause()
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
mapBizView.onDestroy()
|
||||
mHomeView.onDestroy()
|
||||
omvOverMap.onDestroy()
|
||||
MogoMapListenerHandler.mogoMapListenerHandler.unregisterHostMapListener(TAG)
|
||||
EventBus.getDefault().unregister(this)
|
||||
|
||||
@@ -145,6 +145,8 @@ class LockAndUnlockView : ConstraintLayout, LockManager.LockStatusCallback {
|
||||
LockManager.LockStatus.UNLOCK -> {
|
||||
aciv_screen_lock.setImageResource(R.drawable.charter_p_unlock)
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
aciv_screen_lock_bg?.setImageResource(R.drawable.charter_p_normal)
|
||||
}
|
||||
|
||||
@@ -51,7 +51,6 @@ class MusicListViewModel : ViewModel(),
|
||||
}
|
||||
|
||||
override fun onMusicCompletion(musicData: MusicData) {
|
||||
super.onMusicCompletion(musicData)
|
||||
UiThreadHandler.post({
|
||||
viewCallback?.updateMusicData(musicData, musicData)
|
||||
}, UiThreadHandler.MODE.QUEUE)
|
||||
|
||||
@@ -108,7 +108,6 @@ class MusicPlayingViewModel : ViewModel(), AuditionManager.MusicDataChangeListen
|
||||
}
|
||||
|
||||
override fun onMusicCompletion(musicData: MusicData) {
|
||||
super.onMusicCompletion(musicData)
|
||||
checkMusicData?.let {
|
||||
if(it.id==musicData.id){
|
||||
it.state = musicData.state
|
||||
|
||||
@@ -8,6 +8,7 @@ import android.os.Build
|
||||
import android.util.AttributeSet
|
||||
import android.util.TypedValue
|
||||
import android.view.Gravity
|
||||
import android.view.MotionEvent
|
||||
import android.view.Surface
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
@@ -166,7 +167,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer {
|
||||
}
|
||||
}
|
||||
|
||||
override fun touchDoubleUp() {
|
||||
override fun touchDoubleUp(e: MotionEvent?) {
|
||||
|
||||
}
|
||||
|
||||
@@ -185,24 +186,24 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer {
|
||||
}
|
||||
|
||||
override fun setProgressAndTime(
|
||||
progress: Int,
|
||||
secProgress: Int,
|
||||
currentTime: Int,
|
||||
totalTime: Int,
|
||||
forceChange: Boolean
|
||||
progress: Long,
|
||||
secProgress: Long,
|
||||
currentTime: Long,
|
||||
totalTime: Long,
|
||||
forceChange: Boolean
|
||||
) {
|
||||
super.setProgressAndTime(progress, secProgress, currentTime, totalTime, forceChange)
|
||||
CallerLogger.d(TAG,"setProgressAndTime¥${progress}-${secProgress}-${currentTime}")
|
||||
//时间显示
|
||||
currentTimeTextView.text = TimeTransformUtils.stringForTimeWithHours(currentTime)
|
||||
totalTimeTextView.text = TimeTransformUtils.stringForTimeWithHours(totalTime)
|
||||
currentTimeTextView.text = TimeTransformUtils.stringForTimeWithHours(currentTime.toInt())
|
||||
totalTimeTextView.text = TimeTransformUtils.stringForTimeWithHours(totalTime.toInt())
|
||||
if(currentTime>=totalTime-3000){//
|
||||
this.currentTime = -1
|
||||
}else{
|
||||
this.currentTime = currentTime
|
||||
this.currentTime = currentTime.toInt()
|
||||
}
|
||||
if (progress != 0) {
|
||||
mProgressBar?.progress = progress
|
||||
if (progress != 0L) {
|
||||
mProgressBar?.progress = progress.toInt()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.mogo.och.charter.passenger.ui.map.BizMapView
|
||||
android:id="@+id/mapBizView"
|
||||
android:id="@+id/mHomeView"
|
||||
android:layout_width="0dp"
|
||||
app:layout_constraintWidth_percent="0.6045"
|
||||
android:layout_height="match_parent"
|
||||
@@ -21,7 +21,7 @@
|
||||
app:isClearArrived="true"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/mapBizView"
|
||||
app:layout_constraintStart_toEndOf="@+id/mHomeView"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:mapStyleExtraPath="m1_style_extra.data"
|
||||
app:mapStylePath="m1_style.data"
|
||||
@@ -56,7 +56,7 @@
|
||||
android:layout_height="@dimen/dp_100"
|
||||
android:layout_marginBottom="@dimen/dp_180"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="@+id/mapBizView"
|
||||
app:layout_constraintEnd_toEndOf="@+id/mHomeView"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
android:paddingBottom="@dimen/dp_34_5"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toTopOf="@+id/bb_boorombar"
|
||||
app:layout_constraintEnd_toEndOf="@+id/mapBizView"
|
||||
app:layout_constraintEnd_toEndOf="@+id/mHomeView"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_47"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintEnd_toEndOf="@+id/mapBizView"
|
||||
app:layout_constraintEnd_toEndOf="@+id/mHomeView"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<!--锁定状态和解锁入口-->
|
||||
|
||||
@@ -44,6 +44,9 @@ android {
|
||||
|
||||
dependencies {
|
||||
|
||||
|
||||
testImplementation 'junit:junit:4.12'
|
||||
|
||||
implementation fileTree(dir: "libs", include: ["*.jar"])
|
||||
implementation rootProject.ext.dependencies.kotlinstdlib
|
||||
implementation rootProject.ext.dependencies.androidxccorektx
|
||||
@@ -53,9 +56,14 @@ dependencies {
|
||||
implementation project(':OCH:common:common')
|
||||
|
||||
implementation rootProject.ext.dependencies.arouter
|
||||
testImplementation project(':OCH:common:biz')
|
||||
kapt rootProject.ext.dependencies.aroutercompiler
|
||||
implementation project(':OCH:common:data')
|
||||
implementation project(':OCH:common:bridge')
|
||||
kapt rootProject.ext.dependencies.aroutercompiler
|
||||
|
||||
// 硬件管理
|
||||
implementation project(":libraries:mogo-hardware-devices")
|
||||
|
||||
|
||||
if (Boolean.valueOf(USE_MAVEN_PACKAGE)) {
|
||||
api rootProject.ext.dependencies.mogocommons
|
||||
|
||||
@@ -1,57 +1,68 @@
|
||||
package com.mogo.och.biz.login
|
||||
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.alibaba.android.arouter.facade.annotation.Route
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.config.HdMapBuildConfig
|
||||
import com.mogo.eagle.core.data.enums.Carmodel
|
||||
import com.mogo.eagle.core.function.call.och.CallerEagleBaseFunctionCall4OchManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
import com.mogo.eagle.core.utilcode.mogo.Product
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
import com.mogo.eagle.core.utilcode.mogo.Vehicle
|
||||
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.och.biz.login.bean.LoginInfo
|
||||
import com.mogo.och.biz.login.callback.ILoginViewCallback
|
||||
import com.mogo.och.biz.login.model.LoginModel
|
||||
import com.mogo.och.biz.login.ui.LoginFragment
|
||||
import com.mogo.och.biz.login.ui.LoginPassengerFragment
|
||||
import com.mogo.och.common.module.constant.OchCommonConst
|
||||
import com.mogo.och.common.module.biz.login.LoginInfo
|
||||
import com.mogo.och.common.module.biz.login.LoginService
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusManager
|
||||
import com.mogo.och.common.module.biz.login.RoleEnum
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusEnum
|
||||
import com.mogo.och.common.module.biz.login.OpenOrderStatusEnum
|
||||
import com.mogo.och.common.module.manager.cache.OchSPManager
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.BusinessType
|
||||
import com.mogo.och.common.module.biz.login.EnumRole
|
||||
import com.mogo.och.common.module.biz.login.EnumLoginStatus
|
||||
import com.mogo.och.common.module.biz.login.EnumOpenOrderStatus
|
||||
import com.mogo.och.common.module.biz.login.bean.OchBizInfo
|
||||
import com.mogo.och.common.module.biz.login.bean.OchCarInfo
|
||||
import com.mogo.och.common.module.biz.login.bean.OchLoginInfo
|
||||
import com.mogo.och.common.module.manager.socket.lan.ILanMessageListener
|
||||
import com.mogo.och.common.module.manager.socket.lan.LanSocketManager
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.DPMsgType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.EnvType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.LoginInfo2Client
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.ProjectType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.VehicleType
|
||||
import com.mogo.och.common.module.utils.FlavorUtils
|
||||
|
||||
/**
|
||||
* 网约车小巴业务实现入口
|
||||
*
|
||||
* @author tongchenfei
|
||||
*/
|
||||
@Route(path = OchCommonConst.BIZ_LOGIN)
|
||||
class LoginProvider : LoginService {
|
||||
|
||||
private val tag = LoginProvider::class.java.simpleName
|
||||
private var loginFragment: Fragment?=null
|
||||
private var loginStatus: LoginStatusEnum = LoginStatusEnum.None
|
||||
private var businessEnum = Product.NONE
|
||||
private var openOrderStatusEnum: OpenOrderStatusEnum = OpenOrderStatusEnum.None
|
||||
private var carModel: Carmodel = Carmodel.T2
|
||||
private var loginInfo: LoginInfo? = null
|
||||
private val tag = M_OCHCOMMON +LoginProvider::class.java.simpleName
|
||||
// 登录页面
|
||||
private var loginFragment: Fragment? = null
|
||||
|
||||
// 环境监测+业务展示和跳转
|
||||
private val changeBusinessType = object : ILanMessageListener<LoginInfo2Client> {
|
||||
override fun targetLan(): Class<LoginInfo2Client> {
|
||||
return LoginInfo2Client::class.java
|
||||
}
|
||||
|
||||
override fun onLanMsgReceived(first: LoginInfo2Client?) {
|
||||
first?.let {
|
||||
if (LoginServiceManager.checkAllEnv(it.project,it.env)) {
|
||||
d(tag,"从司机屏获取账号信息:${it}")
|
||||
val driverLoginInfo = GsonUtils.fromJson(it.loginInfo, LoginInfo::class.java)
|
||||
FunctionBuildConfig.isOffLine = it.isOffline
|
||||
LoginServiceManager.setLoginInfo(driverLoginInfo)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private val loginInfoKey = "LOGININFOKEY"
|
||||
|
||||
override fun init(context: Context) {
|
||||
CallerLogger.d(tag, "LoginProvider init")
|
||||
d(tag, "登录模块 init")
|
||||
loginFragment = if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
|
||||
LoginFragment()
|
||||
} else if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
|
||||
@@ -59,18 +70,24 @@ class LoginProvider : LoginService {
|
||||
} else {
|
||||
LoginFragment()
|
||||
}
|
||||
// 乘客屏监听司机端发送的业务修改通知(
|
||||
LanSocketManager.registerSocketMessageListener(
|
||||
DPMsgType.TYPE_LOGIN_INFO.type,
|
||||
changeBusinessType
|
||||
)
|
||||
}
|
||||
|
||||
override fun getFragment(): Fragment {
|
||||
CallerLogger.d(tag, "getFragment:${loginFragment}")
|
||||
if(loginFragment==null){
|
||||
loginFragment = if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
|
||||
LoginFragment()
|
||||
} else if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
|
||||
LoginPassengerFragment()
|
||||
} else {
|
||||
LoginFragment()
|
||||
}
|
||||
d(tag, "getFragment:${loginFragment}")
|
||||
if (loginFragment == null) {
|
||||
loginFragment =
|
||||
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
|
||||
LoginFragment()
|
||||
} else if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
|
||||
LoginPassengerFragment()
|
||||
} else {
|
||||
LoginFragment()
|
||||
}
|
||||
}
|
||||
return loginFragment!!
|
||||
}
|
||||
@@ -84,175 +101,74 @@ class LoginProvider : LoginService {
|
||||
return View(context)
|
||||
}
|
||||
|
||||
override fun setLoginStatus(status: Int) {
|
||||
CallerLogger.d(tag, "setLoginStatus:${status}")
|
||||
when (status) {
|
||||
0 -> {
|
||||
setLoginStatus(LoginStatusEnum.Logout)
|
||||
}
|
||||
|
||||
1 -> {
|
||||
setLoginStatus(LoginStatusEnum.Login)
|
||||
}
|
||||
|
||||
else -> {
|
||||
setLoginStatus(LoginStatusEnum.None)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun queryLoginStatusByNet(readCatche:Boolean) {
|
||||
CallerLogger.d(tag, "queryLoginStatusByNet")
|
||||
Log.d("登录","设置源:queryLoginStatusByNet")
|
||||
LoginModel.queryCarStatus(readCatche)
|
||||
override fun queryLoginStatusByNet(readCatche: Boolean) {
|
||||
LoginServiceManager.queryLoginStatusByNet(readCatche)
|
||||
}
|
||||
|
||||
override fun loginOut() {
|
||||
CallerLogger.d(tag, "loginOut ")
|
||||
LoginModel.logout()
|
||||
}
|
||||
|
||||
override fun checkBusiness(businessType: Int): Boolean {
|
||||
val businessInfo = FlavorUtils.getBusinessInfo(businessType)
|
||||
if(businessInfo.isEmpty()){
|
||||
return true
|
||||
}
|
||||
if (loginFragment is ILoginViewCallback) {
|
||||
UiThreadHandler.post({
|
||||
if (loginFragment?.isAdded==true) {
|
||||
(loginFragment as ILoginViewCallback).showErrorInfo(businessInfo)
|
||||
}
|
||||
},UiThreadHandler.MODE.QUEUE)
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
override fun checkAllEnv(
|
||||
projectType: ProjectType,
|
||||
envType: EnvType,
|
||||
vehicleType: VehicleType,
|
||||
businessType: BusinessType
|
||||
): Boolean {
|
||||
|
||||
val checkAllEnv = FlavorUtils.checkAllEnv(projectType, envType, vehicleType, businessType)
|
||||
if(checkAllEnv.isEmpty()){
|
||||
|
||||
}else{
|
||||
if (loginFragment is ILoginViewCallback) {
|
||||
changeStatus(checkAllEnv)
|
||||
UiThreadHandler.post({
|
||||
changeStatus(checkAllEnv)
|
||||
if (loginFragment?.isAdded==true) {
|
||||
(loginFragment as ILoginViewCallback).checkAllEnv(checkAllEnv)
|
||||
}
|
||||
},UiThreadHandler.MODE.QUEUE)
|
||||
}
|
||||
}
|
||||
|
||||
return checkAllEnv.isEmpty()
|
||||
LoginServiceManager.loginOut()
|
||||
}
|
||||
|
||||
override fun changeStatus(currentStatus: String) {
|
||||
if (loginFragment?.isAdded==true) {
|
||||
if (loginFragment?.isAdded == true) {
|
||||
(loginFragment as ILoginViewCallback).updateStatus(currentStatus)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override fun setLoginInfo(loginInfo: LoginInfo) {
|
||||
CallerLogger.d(tag, "setLoginInfo:${loginInfo}")
|
||||
if(this.loginInfo!=loginInfo){
|
||||
this.loginInfo = loginInfo
|
||||
OchChainLogManager.writeChainLog("登录信息",loginInfo.toString())
|
||||
}
|
||||
|
||||
CallerEagleBaseFunctionCall4OchManager.setOchLoginNo(loginInfo.phone)
|
||||
CallerEagleBaseFunctionCall4OchManager.setOchCarModel(Carmodel.getCarModelFromServerName(loginInfo.carModel,loginInfo.tenantId))
|
||||
CallerEagleBaseFunctionCall4OchManager.setOchPlateNumber(loginInfo.plateNumber)
|
||||
CallerEagleBaseFunctionCall4OchManager.updateTenantId(loginInfo.tenantId)
|
||||
|
||||
val carModel = Carmodel.getCarModelFromServerName(LoginStatusManager.getLoginInfo()?.carModel,loginInfo.tenantId)
|
||||
if(this.carModel!=carModel){
|
||||
this.carModel = carModel
|
||||
LoginStatusManager.invokeCarModelChange(this.carModel)
|
||||
}
|
||||
HdMapBuildConfig.currentCarVrIconRes = carModel.rawValue
|
||||
|
||||
override fun getOchBizInfo(): OchBizInfo? {
|
||||
d(tag, "getOchBizInfo")
|
||||
return LoginServiceManager.getOchBizInfo()
|
||||
}
|
||||
|
||||
override fun getLoginInfo(): LoginInfo? {
|
||||
CallerLogger.d(tag, "getLoginInfo")
|
||||
return loginInfo
|
||||
override fun getOchCarInfo(): OchCarInfo? {
|
||||
d(tag, "getOchCarInfo")
|
||||
return LoginServiceManager.getOchCarInfo()
|
||||
}
|
||||
|
||||
override fun getPurpose(): RoleEnum {
|
||||
CallerLogger.d(tag, "getPurpose")
|
||||
return RoleEnum.valueOf(loginInfo?.purpose)
|
||||
override fun getOchLoginInfo(): OchLoginInfo? {
|
||||
d(tag, "getOchLoginInfo")
|
||||
return LoginServiceManager.getOchLoginInfo()
|
||||
}
|
||||
|
||||
override fun getPurpose(): EnumRole {
|
||||
d(tag, "getPurpose")
|
||||
return LoginServiceManager.getPurpose()
|
||||
}
|
||||
|
||||
override fun isLogin(): Boolean {
|
||||
CallerLogger.d(tag, "isLogin:${loginStatus == LoginStatusEnum.Login}")
|
||||
return loginStatus == LoginStatusEnum.Login
|
||||
return LoginServiceManager.isLogin()
|
||||
}
|
||||
|
||||
override fun getLoginStatus(): LoginStatusEnum {
|
||||
CallerLogger.d(tag, "getLoginStatus:${loginStatus}")
|
||||
return loginStatus
|
||||
override fun getLoginStatus(): EnumLoginStatus {
|
||||
return LoginServiceManager.getLoginStatuType()
|
||||
}
|
||||
|
||||
override fun getCarModel(): Carmodel {
|
||||
CallerLogger.d(tag, "getCarModel:${carModel}")
|
||||
return carModel
|
||||
override fun getCarModelType(): Carmodel {
|
||||
return LoginServiceManager.getCarModelType()
|
||||
}
|
||||
|
||||
|
||||
override fun setLoginStatus(loginStatus: LoginStatusEnum) {
|
||||
CallerLogger.d(tag, "setLoginStatus:${loginStatus}----old${this.loginStatus}")
|
||||
if (loginStatus != this.loginStatus) {
|
||||
OchChainLogManager.writeChainLog("登录状态变化","${this.loginStatus}-->${loginStatus}");
|
||||
this.loginStatus = loginStatus
|
||||
Log.d("登录","设置源:invokeLoginStatusChange")
|
||||
LoginStatusManager.invokeLoginStatusChange(loginStatus)
|
||||
}
|
||||
override fun getProductType(): Product {
|
||||
return LoginServiceManager.getProductType()
|
||||
}
|
||||
|
||||
|
||||
override fun setBusinessType(type: Int) {
|
||||
CallerLogger.d(tag, "setBusinessType:${type}")
|
||||
if (businessEnum.code != type) {
|
||||
this.businessEnum = Product.valueOf(type)
|
||||
LoginStatusManager.invokeLBusinessTypeChange(this.businessEnum)
|
||||
}
|
||||
override fun getVehicleType(): Vehicle {
|
||||
return LoginServiceManager.getVehicleType()
|
||||
}
|
||||
|
||||
override fun getBusinessType(): Product {
|
||||
CallerLogger.d(tag, "getBusinessType")
|
||||
return businessEnum
|
||||
override fun sendLogin2Client() {
|
||||
LoginServiceManager.sendLogin2Client(1)
|
||||
}
|
||||
|
||||
override fun setOpenOrderStatusType(type: Int) {
|
||||
CallerLogger.d(tag, "setOpenOrderStatusType:${type}")
|
||||
if (openOrderStatusEnum.code != type) {
|
||||
OchChainLogManager.writeChainLog("接单状态变化","${this.openOrderStatusEnum}-->${OpenOrderStatusEnum.valueOf(type)}");
|
||||
this.openOrderStatusEnum = OpenOrderStatusEnum.valueOf(type)
|
||||
LoginStatusManager.invokeLOpenOrderStatusChange(this.openOrderStatusEnum)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getOpenOrderStatusType(): OpenOrderStatusEnum {
|
||||
CallerLogger.d(tag, "getOpenOrderStatusType:${openOrderStatusEnum}")
|
||||
return openOrderStatusEnum
|
||||
override fun getOpenOrderStatusType(): EnumOpenOrderStatus {
|
||||
return LoginServiceManager.getOpenOrderStatusType()
|
||||
}
|
||||
|
||||
override fun isOpenOrderType(): Boolean {
|
||||
CallerLogger.d(tag, "isOpenOrderType:${openOrderStatusEnum == OpenOrderStatusEnum.Ordering}")
|
||||
return openOrderStatusEnum == OpenOrderStatusEnum.Ordering
|
||||
return LoginServiceManager.isOpenOrderType()
|
||||
}
|
||||
|
||||
override fun removeLoginInfo() {
|
||||
this.loginInfo = null
|
||||
OchSPManager.remove(loginInfoKey)
|
||||
LoginServiceManager.removeLoginInfo()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,517 @@
|
||||
package com.mogo.och.biz.login
|
||||
|
||||
import android.content.pm.ActivityInfo
|
||||
import android.content.res.Configuration
|
||||
import android.util.Log
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.commons.env.Env
|
||||
import com.mogo.commons.env.EnvUtils
|
||||
import com.mogo.commons.env.Project
|
||||
import com.mogo.commons.env.ProjectUtils
|
||||
import com.mogo.commons.screen.ScreenHelper
|
||||
import com.mogo.commons.utils.MogoAnalyticUtils
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.config.HdMapBuildConfig
|
||||
import com.mogo.eagle.core.data.enums.Carmodel
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
|
||||
import com.mogo.eagle.core.function.call.och.CallerEagleBaseFunctionCall4OchManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
import com.mogo.eagle.core.utilcode.mogo.Product
|
||||
import com.mogo.eagle.core.utilcode.mogo.Vehicle
|
||||
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.ActivityUtils
|
||||
import com.mogo.eagle.core.utilcode.util.AppUtils
|
||||
import com.mogo.eagle.core.utilcode.util.DateTimeUtils
|
||||
import com.mogo.eagle.core.utilcode.util.GsonUtils
|
||||
import com.mogo.eagle.core.utilcode.util.TimeUtils
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
import com.mogo.och.biz.login.callback.ILoginViewCallback
|
||||
import com.mogo.och.biz.login.model.LoginModel
|
||||
import com.mogo.och.biz.login.bean.LoginInfo
|
||||
import com.mogo.och.common.module.biz.lansocket.IOchLanPassengerStatusListener
|
||||
import com.mogo.och.common.module.biz.lansocket.LoginLanPassengerSocket
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusManager
|
||||
import com.mogo.och.common.module.biz.login.EnumRole
|
||||
import com.mogo.och.common.module.biz.login.EnumLoginStatus
|
||||
import com.mogo.och.common.module.biz.login.EnumOpenOrderStatus
|
||||
import com.mogo.och.common.module.biz.login.bean.OchBizInfo
|
||||
import com.mogo.och.common.module.biz.login.bean.OchCarInfo
|
||||
import com.mogo.och.common.module.biz.login.bean.OchLoginInfo
|
||||
import com.mogo.och.common.module.manager.cache.OchSPManager
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
import com.mogo.och.common.module.manager.loop.BizLoopManager
|
||||
import com.mogo.och.common.module.manager.loop.LoopInfo
|
||||
import com.mogo.och.common.module.manager.socket.lan.LanSocketManager
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.LoginInfo2Client
|
||||
import com.mogo.och.common.module.utils.FlavorUtils
|
||||
import com.mogo.och.common.module.utils.RxUtils
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
/**
|
||||
* 网约车小巴业务实现入口
|
||||
*/
|
||||
object LoginServiceManager : IOchLanPassengerStatusListener {
|
||||
|
||||
private val tag = M_OCHCOMMON + "LoginManager"
|
||||
private var TAGLoopStatus = "LoginStatusManagerLoop"
|
||||
|
||||
// 登录页面
|
||||
private var loginFragment: Fragment? = null
|
||||
|
||||
// 登录状态
|
||||
private var loginStatus: EnumLoginStatus by Delegates.observable(EnumLoginStatus.None) { _, oldValue, newValue ->
|
||||
if (oldValue != newValue) {
|
||||
OchChainLogManager.writeChainLog("登录状态变化", "${oldValue}-->${newValue}")
|
||||
Log.d(tag, "登录状态变化:${oldValue}-->${newValue}")
|
||||
// if (newValue == EnumLoginStatus.Login && AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
|
||||
// BizLoopManager.setLoopFunction(
|
||||
// TAGLoopStatus,
|
||||
// LoopInfo(60 * 2, ::queryLoginStatusByNet, immediately = false, scheduler = Schedulers.io())
|
||||
// )
|
||||
// } else {
|
||||
// BizLoopManager.removeLoopFunction(TAGLoopStatus)
|
||||
// }
|
||||
LoginStatusManager.invokeLoginStatusChange(loginStatus)
|
||||
}
|
||||
}
|
||||
|
||||
// 业务模式
|
||||
private var productEnum: Product by Delegates.observable(Product.NONE) { _, oldValue, newValue ->
|
||||
if (oldValue != newValue) {
|
||||
OchChainLogManager.writeChainLog("业务模式发生变化", "${oldValue}-->${newValue}")
|
||||
Log.d(tag, "业务模式发生变化:${oldValue}-->${newValue}")
|
||||
onProductChange(newValue)
|
||||
LoginStatusManager.invokeLProductChange(newValue)
|
||||
CallerEagleBaseFunctionCall4OchManager.onOchProductChange()
|
||||
}
|
||||
}
|
||||
|
||||
// 车型
|
||||
private var vehicleEnum: Vehicle by Delegates.observable(Vehicle.NONE) { _, oldValue, newValue ->
|
||||
if (oldValue != newValue) {
|
||||
OchChainLogManager.writeChainLog("车型发生变化", "${oldValue}-->${newValue}")
|
||||
Log.d(tag, "车型发生变化:${oldValue}-->${newValue}")
|
||||
onVehicleChange(newValue)
|
||||
LoginStatusManager.invokeLVehicleChange(newValue)
|
||||
CallerEagleBaseFunctionCall4OchManager.onOchVehicleChange()
|
||||
}
|
||||
}
|
||||
|
||||
// 接单状态
|
||||
private var openOrderStatusEnum: EnumOpenOrderStatus by Delegates.observable(EnumOpenOrderStatus.None) { _, oldValue, newValue ->
|
||||
if (oldValue != newValue) {
|
||||
OchChainLogManager.writeChainLog("接单状态变化", "${oldValue}-->${newValue}")
|
||||
Log.d(tag, "接单状态变化:${oldValue}-->${newValue}")
|
||||
LoginStatusManager.invokeOpenOrderStatusChange(this.openOrderStatusEnum)
|
||||
}
|
||||
}
|
||||
|
||||
// 车模
|
||||
private var carModel: Carmodel by Delegates.observable(Carmodel.T2) { _, oldValue, newValue ->
|
||||
if (oldValue != newValue) {
|
||||
OchChainLogManager.writeChainLog("车辆模型发生变化", "${oldValue}-->${newValue}")
|
||||
Log.d(tag, "车辆模型发生变化:${oldValue}-->${newValue}")
|
||||
HdMapBuildConfig.currentCarVrIconRes = newValue.rawValue
|
||||
LoginStatusManager.invokeCarModelChange(newValue)
|
||||
|
||||
CallerEagleBaseFunctionCall4OchManager.setOchCarModel(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
private var phoneNum: String by Delegates.observable("") { _, oldValue, newValue ->
|
||||
if (oldValue != newValue) {
|
||||
OchChainLogManager.writeChainLog("手机号发生变化", "${oldValue}-->${newValue}")
|
||||
Log.d(tag, "手机号发生变化:${oldValue}-->${newValue}")
|
||||
CallerEagleBaseFunctionCall4OchManager.setOchLoginNo(newValue)
|
||||
}
|
||||
}
|
||||
private var plateNumber: String by Delegates.observable("") { _, oldValue, newValue ->
|
||||
if (oldValue != newValue) {
|
||||
OchChainLogManager.writeChainLog("车牌号发生变化", "${oldValue}-->${newValue}")
|
||||
Log.d(tag, "车牌号发生变化:${oldValue}-->${newValue}")
|
||||
CallerEagleBaseFunctionCall4OchManager.setOchPlateNumber(newValue)
|
||||
}
|
||||
}
|
||||
private var tenantId: Long by Delegates.observable(0L) { _, oldValue, newValue ->
|
||||
if (oldValue != newValue) {
|
||||
OchChainLogManager.writeChainLog("租户Id发生变化", "${oldValue}-->${newValue}")
|
||||
Log.d(tag, "租户Id发生变化:${oldValue}-->${newValue}")
|
||||
LoginStatusManager.invokeTenantIdChange(newValue)
|
||||
CallerEagleBaseFunctionCall4OchManager.updateTenantId(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 登录信息
|
||||
private var loginInfo: LoginInfo? = null
|
||||
|
||||
// 登录账号信息
|
||||
private var ochLoginInfo: OchLoginInfo? = null
|
||||
|
||||
// 车辆信息
|
||||
private var ochCarInfo: OchCarInfo? = null
|
||||
|
||||
// 业务信息
|
||||
private var ochBizInfo: OchBizInfo? = null
|
||||
|
||||
private val loginInfoKey = "LOGININFOKEY"
|
||||
|
||||
private const val OCHLOGININFOKEY = "OCHLOGININFOKEY"
|
||||
private const val OCHBIZINFOKEY = "OCHBIZINFOKEY"
|
||||
private const val OCHCARINFOKEY = "OCHCARINFOKEY"
|
||||
|
||||
private const val OCHPRODUCT = "OCHPRODUCT"
|
||||
private const val OCHVEHICLE = "OCHVEHICLE"
|
||||
|
||||
init {
|
||||
initProductAndVehicle()
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看是否提前设置上
|
||||
*/
|
||||
private fun initProductAndVehicle() {
|
||||
productEnum = AppIdentityModeUtils.getProduct(FunctionBuildConfig.appIdentityMode)
|
||||
vehicleEnum = AppIdentityModeUtils.getVehicle(FunctionBuildConfig.appIdentityMode)
|
||||
LoginLanPassengerSocket.addListener(tag,this)
|
||||
}
|
||||
|
||||
private fun queryLoginStatusByNet() {
|
||||
LoginModel.queryCarStatus(false)
|
||||
}
|
||||
|
||||
fun queryLoginStatusByNet(readCatche: Boolean) {
|
||||
d(tag, "queryLoginStatusByNet")
|
||||
LoginModel.queryCarStatus(readCatche)
|
||||
}
|
||||
|
||||
fun loginOut() {
|
||||
d(tag, "loginOut ")
|
||||
if(FunctionBuildConfig.ochdebug){
|
||||
FunctionBuildConfig.ochdebug = false
|
||||
queryLoginStatusByNet()
|
||||
}
|
||||
if(FunctionBuildConfig.isOffLine) {
|
||||
FunctionBuildConfig.isOffLine = false
|
||||
sendLogin2Client(1)
|
||||
}
|
||||
LoginModel.logout()
|
||||
}
|
||||
|
||||
fun checkAllEnv(
|
||||
projectType: Project,
|
||||
envType: Env,
|
||||
): Boolean {
|
||||
val checkAllEnv = FlavorUtils.checkAllEnv(projectType, envType)
|
||||
if (checkAllEnv.isNotEmpty()) {
|
||||
if (loginFragment is ILoginViewCallback) {
|
||||
changeStatus(checkAllEnv)
|
||||
UiThreadHandler.post({
|
||||
changeStatus(checkAllEnv)
|
||||
if (loginFragment?.isAdded == true) {
|
||||
(loginFragment as ILoginViewCallback).checkAllEnv(checkAllEnv)
|
||||
}
|
||||
}, UiThreadHandler.MODE.QUEUE)
|
||||
}
|
||||
}
|
||||
|
||||
return checkAllEnv.isEmpty()
|
||||
}
|
||||
|
||||
fun changeStatus(currentStatus: String) {
|
||||
if (loginFragment?.isAdded == true) {
|
||||
(loginFragment as ILoginViewCallback).updateStatus(currentStatus)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置登录信息
|
||||
* 1、乘客屏从司机端获取到登录信息
|
||||
* 2、支持老版本数据升级
|
||||
* 3、接口或者缓存调用
|
||||
* 4、debug 业务使用
|
||||
*/
|
||||
fun setLoginInfo(loginInfo: LoginInfo) {
|
||||
if(FunctionBuildConfig.ochdebug){
|
||||
return
|
||||
}
|
||||
d(tag, "setLoginInfo:${loginInfo}")
|
||||
if (this.loginInfo != loginInfo) {
|
||||
this.loginInfo = loginInfo
|
||||
saveInfo2SP(loginInfoKey, loginInfo)
|
||||
sendLogin2Client(1)
|
||||
|
||||
val ochLoginInfo = loginInfo.toOchLoginInfo()
|
||||
if (ochLoginInfo != this.ochLoginInfo) {
|
||||
this.ochLoginInfo = ochLoginInfo
|
||||
saveInfo2SP(OCHLOGININFOKEY, ochLoginInfo)
|
||||
}
|
||||
val ochCarInfo = loginInfo.toOchCarInfo()
|
||||
if (this.ochCarInfo != ochCarInfo) {
|
||||
this.ochCarInfo = ochCarInfo
|
||||
saveInfo2SP(OCHCARINFOKEY, ochCarInfo)
|
||||
}
|
||||
val ochBizInfo = loginInfo.toOchBizInfo()
|
||||
if (this.ochBizInfo != ochBizInfo) {
|
||||
this.ochBizInfo = ochBizInfo
|
||||
saveInfo2SP(OCHBIZINFOKEY, ochBizInfo)
|
||||
}
|
||||
|
||||
OchChainLogManager.writeChainLog("登录信息", loginInfo.toString())
|
||||
}
|
||||
// 设置车型
|
||||
setVehicleType(Vehicle.getCarVehicleFromServerName(loginInfo.carModel))
|
||||
|
||||
// 设置业务模式
|
||||
setProductType(Product.valueOf(loginInfo.businessType))
|
||||
// 设置登录状态
|
||||
setLoginStatusType(EnumLoginStatus.valueOf(loginInfo.driverStatus))
|
||||
// 设置接单状态
|
||||
setOpenOrderStatusType(EnumOpenOrderStatus.valueOf(loginInfo.servingStatus))
|
||||
|
||||
|
||||
|
||||
// 设置车辆模型
|
||||
setCarModelType(Carmodel.getCarModelFromServerName(loginInfo.carModel, loginInfo.tenantId))
|
||||
|
||||
this.phoneNum = loginInfo.phone ?: ""
|
||||
this.plateNumber = loginInfo.plateNumber ?: ""
|
||||
this.tenantId = loginInfo.tenantId
|
||||
|
||||
}
|
||||
|
||||
fun getLoginInfo(): LoginInfo? {
|
||||
d(tag, "getLoginInfo")
|
||||
if (loginInfo == null) {
|
||||
this.loginInfo = getInfoFromSp<LoginInfo>(loginInfoKey)
|
||||
}
|
||||
return loginInfo
|
||||
}
|
||||
|
||||
fun getOchBizInfo(): OchBizInfo? {
|
||||
supply6100()
|
||||
d(tag, "getOchBizInfo")
|
||||
if (ochBizInfo == null) {
|
||||
this.ochBizInfo = getInfoFromSp<OchBizInfo>(OCHBIZINFOKEY)
|
||||
}
|
||||
return ochBizInfo
|
||||
}
|
||||
|
||||
fun getOchCarInfo(): OchCarInfo? {
|
||||
supply6100()
|
||||
d(tag, "getOchCarInfo")
|
||||
if (ochCarInfo == null) {
|
||||
this.ochCarInfo = getInfoFromSp<OchCarInfo>(OCHCARINFOKEY)
|
||||
}
|
||||
return ochCarInfo
|
||||
}
|
||||
|
||||
fun getOchLoginInfo(): OchLoginInfo? {
|
||||
supply6100()
|
||||
d(tag, "getOchLoginInfo")
|
||||
if (ochLoginInfo == null) {
|
||||
this.ochLoginInfo = getInfoFromSp<OchLoginInfo>(OCHLOGININFOKEY)
|
||||
}
|
||||
return ochLoginInfo
|
||||
}
|
||||
|
||||
fun getPurpose(): EnumRole {
|
||||
d(tag, "getPurpose")
|
||||
return EnumRole.valueOf(loginInfo?.purpose)
|
||||
}
|
||||
|
||||
fun isLogin(): Boolean {
|
||||
d(tag, "isLogin:${loginStatus == EnumLoginStatus.Login}")
|
||||
return loginStatus == EnumLoginStatus.Login
|
||||
}
|
||||
|
||||
fun getLoginStatuType(): EnumLoginStatus {
|
||||
d(tag, "getLoginStatus:${loginStatus}")
|
||||
return loginStatus
|
||||
}
|
||||
|
||||
fun setCarModelType(carModel: Carmodel) {
|
||||
d(tag, "setCarModel:${carModel}")
|
||||
this.carModel = carModel
|
||||
}
|
||||
|
||||
fun getCarModelType(): Carmodel {
|
||||
d(tag, "getCarModel:${carModel}")
|
||||
return this.carModel
|
||||
}
|
||||
|
||||
fun setLoginStatusType(loginStatus: EnumLoginStatus) {
|
||||
d(tag, "setLoginStatus:${this.loginStatus}---->${loginStatus}")
|
||||
if(FunctionBuildConfig.isOffLine){
|
||||
this.loginStatus = EnumLoginStatus.Login
|
||||
sendLogin2Client(1)
|
||||
}else{
|
||||
this.loginStatus = loginStatus
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun setProductType(product: Product) {
|
||||
d(tag, "setProductType:${product}")
|
||||
this.productEnum = product
|
||||
}
|
||||
|
||||
fun getProductType(): Product {
|
||||
d(tag, "getBusinessType:${productEnum}")
|
||||
return productEnum
|
||||
}
|
||||
|
||||
fun setVehicleType(vehicle: Vehicle) {
|
||||
d(tag, "setVehicleType:${vehicle}")
|
||||
this.vehicleEnum = vehicle
|
||||
}
|
||||
|
||||
fun getVehicleType(): Vehicle {
|
||||
d(tag, "getVehicleType:${vehicleEnum}")
|
||||
return vehicleEnum
|
||||
}
|
||||
|
||||
fun setOpenOrderStatusType(type: EnumOpenOrderStatus) {
|
||||
d(tag, "setOpenOrderStatusType:${type}")
|
||||
this.openOrderStatusEnum = type
|
||||
}
|
||||
|
||||
fun getOpenOrderStatusType(): EnumOpenOrderStatus {
|
||||
d(tag, "getOpenOrderStatusType:${openOrderStatusEnum}")
|
||||
return openOrderStatusEnum
|
||||
}
|
||||
|
||||
fun isOpenOrderType(): Boolean {
|
||||
d(
|
||||
tag,
|
||||
"isOpenOrderType:${openOrderStatusEnum == EnumOpenOrderStatus.Ordering}"
|
||||
)
|
||||
return openOrderStatusEnum == EnumOpenOrderStatus.Ordering
|
||||
}
|
||||
|
||||
fun removeLoginInfo() {
|
||||
this.loginInfo = null
|
||||
OchSPManager.remove(loginInfoKey)
|
||||
setLoginStatusType(EnumLoginStatus.Logout)
|
||||
}
|
||||
|
||||
|
||||
private fun saveInfo2SP(key: String, value: Any) {
|
||||
val timeText = DateTimeUtils.getTimeText(DateTimeUtils.yyyy_MM_dd)
|
||||
val loginInfo4Json = GsonUtils.toJson(value)
|
||||
OchSPManager.putString(key, timeText + loginInfo4Json)
|
||||
}
|
||||
|
||||
inline fun <reified T> getInfoFromSp(key: String): T? {
|
||||
val logingInfoJson = OchSPManager.getString(key)
|
||||
logingInfoJson?.let { logininfo ->
|
||||
val timeText = DateTimeUtils.getTimeText(DateTimeUtils.yyyy_MM_dd)
|
||||
if (logininfo.startsWith(timeText)) {
|
||||
val json = logingInfoJson.replace(timeText, "")
|
||||
val oldLoginInfo = GsonUtils.fromJson(json, T::class.java)
|
||||
return oldLoginInfo
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
private fun supply6100() {
|
||||
val loginInfo = getLoginInfo()
|
||||
if (ochCarInfo == null && loginInfo != null) {
|
||||
setLoginInfo(loginInfo)
|
||||
}
|
||||
}
|
||||
|
||||
private fun onProductChange(businessEnum: Product){
|
||||
val (_, identity, model) = AppIdentityModeUtils.getInfo(FunctionBuildConfig.appIdentityMode)
|
||||
when (businessEnum) {
|
||||
Product.NONE -> {}
|
||||
Product.TAXI -> {
|
||||
FunctionBuildConfig.appIdentityMode = "${AppIdentityModeUtils.TAXI}_${identity}_${model}"
|
||||
OchSPManager.putString(OCHPRODUCT,AppIdentityModeUtils.TAXI)
|
||||
}
|
||||
|
||||
Product.BUS ->{
|
||||
FunctionBuildConfig.appIdentityMode = "${AppIdentityModeUtils.BUS}_${identity}_${model}"
|
||||
OchSPManager.putString(OCHPRODUCT,AppIdentityModeUtils.BUS)
|
||||
}
|
||||
|
||||
Product.SHUTTLE -> {
|
||||
FunctionBuildConfig.appIdentityMode = "${AppIdentityModeUtils.SHUTTLE}_${identity}_${model}"
|
||||
OchSPManager.putString(OCHPRODUCT,AppIdentityModeUtils.SHUTTLE)
|
||||
}
|
||||
|
||||
Product.CHARTER -> {
|
||||
FunctionBuildConfig.appIdentityMode = "${AppIdentityModeUtils.CHARTER}_${identity}_${model}"
|
||||
OchSPManager.putString(OCHPRODUCT,AppIdentityModeUtils.CHARTER)
|
||||
}
|
||||
|
||||
Product.SCHEDULED -> {
|
||||
FunctionBuildConfig.appIdentityMode = "${AppIdentityModeUtils.SCHEDULED}_${identity}_${model}"
|
||||
OchSPManager.putString(OCHPRODUCT,AppIdentityModeUtils.SCHEDULED)
|
||||
}
|
||||
Product.SWEEPER -> {
|
||||
FunctionBuildConfig.appIdentityMode = "${AppIdentityModeUtils.SWEEPER}_${identity}_${model}"
|
||||
OchSPManager.putString(OCHPRODUCT,AppIdentityModeUtils.SWEEPER)
|
||||
}
|
||||
}
|
||||
ScreenHelper.setScreenConfig(AbsMogoApplication.getApp())
|
||||
CallerDevaToolsManager.updateAppChannel()
|
||||
// 加入启动统计
|
||||
val mStartParams: HashMap<String, Any> = HashMap()
|
||||
mStartParams["start_time"] = TimeUtils.getNowMills()
|
||||
mStartParams["app_version"] = AppUtils.getAppVersionName()
|
||||
mStartParams["app_identity_mode"] = FunctionBuildConfig.appIdentityMode
|
||||
MogoAnalyticUtils.track("app_start_time", mStartParams)
|
||||
}
|
||||
|
||||
private fun onVehicleChange(vehicle: Vehicle) {
|
||||
val tempInfo = FunctionBuildConfig.appIdentityMode
|
||||
val (product, identity, model) = AppIdentityModeUtils.getInfo(tempInfo)
|
||||
FunctionBuildConfig.appIdentityMode = "${product}_${identity}_${vehicle.code}"
|
||||
OchSPManager.putString(OCHVEHICLE,vehicle.code)
|
||||
ScreenHelper.setScreenConfig(AbsMogoApplication.getApp())
|
||||
|
||||
if (vehicle == Vehicle.B2 && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
|
||||
BizLoopManager.runInMainThread{
|
||||
val orientation = ActivityUtils.getTopActivity().resources.configuration.orientation
|
||||
if(orientation!=Configuration.ORIENTATION_PORTRAIT){
|
||||
ActivityUtils.getTopActivity().requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
||||
}
|
||||
}
|
||||
}else{
|
||||
val orientation = ActivityUtils.getTopActivity().resources.configuration.orientation
|
||||
if(orientation==Configuration.ORIENTATION_PORTRAIT){
|
||||
BizLoopManager.runInMainThread{
|
||||
ActivityUtils.getTopActivity().requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CallerDevaToolsManager.updateAppChannel()
|
||||
OchChainLogManager.writeChainLogInit("车辆信息","修改车型${tempInfo}--->${FunctionBuildConfig.appIdentityMode}")
|
||||
}
|
||||
|
||||
/**
|
||||
* 向乘客端发送登录信息
|
||||
*/
|
||||
fun sendLogin2Client(count: Int) {
|
||||
if(count>3){
|
||||
return
|
||||
}
|
||||
if (loginInfo==null) {
|
||||
RxUtils.createSubscribeOnOwnThread {
|
||||
sendLogin2Client(count+1)
|
||||
}
|
||||
}else{
|
||||
val toJson = GsonUtils.toJson(loginInfo)
|
||||
val msg = LoginInfo2Client(toJson,ProjectUtils.getProjectType(),EnvUtils.getEnvType(),FunctionBuildConfig.isOffLine)
|
||||
LanSocketManager.sendMsgToClient(msg)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.mogo.och.biz.login.bean;
|
||||
|
||||
import com.mogo.eagle.core.data.BaseData;
|
||||
import com.mogo.och.common.module.biz.login.LoginInfo;
|
||||
|
||||
/**
|
||||
* Created by pangfan on 2021/8/19
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
package com.mogo.och.biz.login.bean
|
||||
|
||||
import com.mogo.och.common.module.biz.login.bean.OchBizInfo
|
||||
import com.mogo.och.common.module.biz.login.bean.OchCarInfo
|
||||
import com.mogo.och.common.module.biz.login.bean.OchLoginInfo
|
||||
import java.util.Objects
|
||||
|
||||
class LoginInfo {
|
||||
var driverStatus: Int = 0 //1登录,0登出
|
||||
var servingStatus: Int = 0 //1接单中,0暂停接单
|
||||
var businessType: Int = 0 //9: taxi. 10: bus公交 11:接驳 13:包车
|
||||
var orderNo: String? = null
|
||||
var purpose: Int = 0 // 1 运营, 2 测试, 3演示
|
||||
var sn: String? = null
|
||||
var plateNumber: String? = null //车牌号
|
||||
var phone: String? = null //手机号
|
||||
var lineId: Long? = null //线路id
|
||||
var taskId: Long? = null //任务id
|
||||
var siteId: Long? = null //站点id 包车使用
|
||||
var currentSite: Long? = null //当前站点 接驳、公交、班车使用
|
||||
var leaving: Boolean? = null // 当前站点是否出发
|
||||
var shiftsId: Long? = null //模板id
|
||||
var taskDate: Long? = null // 任务或模板的日期
|
||||
var vin: String? = null //车辆唯一识别码
|
||||
var cityCode: String? = null //城市编码
|
||||
var brand: String? = null //东风
|
||||
|
||||
//
|
||||
// E70 东风 H9 红旗
|
||||
// B2 B1 M1
|
||||
var carModel: String? = null
|
||||
var photos: String? = null //车身照片:
|
||||
var tenantId: Long = 0 //租户id:
|
||||
var driverId: Long = 0
|
||||
|
||||
var businessStatus: Long = 0 //?????
|
||||
|
||||
fun toOchBizInfo(): OchBizInfo {
|
||||
return OchBizInfo(
|
||||
businessType,
|
||||
orderNo?:"",
|
||||
servingStatus,
|
||||
lineId?:0,
|
||||
taskId?:0,
|
||||
currentSite?:0,
|
||||
leaving?:false,
|
||||
shiftsId?:0,
|
||||
taskDate?:0,
|
||||
siteId?:0,
|
||||
businessStatus
|
||||
)
|
||||
}
|
||||
|
||||
fun toOchCarInfo(): OchCarInfo {
|
||||
return OchCarInfo(plateNumber,vin,cityCode,brand,carModel,photos,tenantId)
|
||||
}
|
||||
|
||||
fun toOchLoginInfo(): OchLoginInfo {
|
||||
return OchLoginInfo(
|
||||
driverStatus,
|
||||
purpose,
|
||||
sn?:"",
|
||||
phone?:"",
|
||||
driverId
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
override fun toString(): String {
|
||||
return "LoginInfo{" +
|
||||
"driverStatus=" + driverStatus +
|
||||
", servingStatus=" + servingStatus +
|
||||
", businessType=" + businessType +
|
||||
", orderNo='" + orderNo + '\'' +
|
||||
", purpose=" + purpose +
|
||||
", sn='" + sn + '\'' +
|
||||
", plateNumber='" + plateNumber + '\'' +
|
||||
", phone='" + phone + '\'' +
|
||||
", lineId=" + lineId +
|
||||
", taskId=" + taskId +
|
||||
", siteId=" + siteId +
|
||||
", vin='" + vin + '\'' +
|
||||
", cityCode='" + cityCode + '\'' +
|
||||
", brand='" + brand + '\'' +
|
||||
", carModel='" + carModel + '\'' +
|
||||
", photos='" + photos + '\'' +
|
||||
", tenantId=" + tenantId +
|
||||
", driverId=" + driverId +
|
||||
", businessStatus=" + businessStatus +
|
||||
'}'
|
||||
}
|
||||
|
||||
override fun equals(o: Any?): Boolean {
|
||||
if (this === o) return true
|
||||
if (o == null || javaClass != o.javaClass) return false
|
||||
|
||||
val loginInfo = o as LoginInfo
|
||||
return driverStatus == loginInfo.driverStatus && servingStatus == loginInfo.servingStatus && businessType == loginInfo.businessType && purpose == loginInfo.purpose && tenantId == loginInfo.tenantId && driverId == loginInfo.driverId && businessStatus == loginInfo.businessStatus && orderNo == loginInfo.orderNo && sn == loginInfo.sn && plateNumber == loginInfo.plateNumber && phone == loginInfo.phone && lineId == loginInfo.lineId && taskId == loginInfo.taskId && siteId == loginInfo.siteId && vin == loginInfo.vin && cityCode == loginInfo.cityCode && brand == loginInfo.brand && carModel == loginInfo.carModel && photos == loginInfo.photos
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
var result = driverStatus
|
||||
result = 31 * result + servingStatus
|
||||
result = 31 * result + businessType
|
||||
result = 31 * result + Objects.hashCode(orderNo)
|
||||
result = 31 * result + purpose
|
||||
result = 31 * result + Objects.hashCode(sn)
|
||||
result = 31 * result + Objects.hashCode(plateNumber)
|
||||
result = 31 * result + Objects.hashCode(phone)
|
||||
result = 31 * result + Objects.hashCode(lineId)
|
||||
result = 31 * result + Objects.hashCode(taskId)
|
||||
result = 31 * result + Objects.hashCode(siteId)
|
||||
result = 31 * result + Objects.hashCode(vin)
|
||||
result = 31 * result + Objects.hashCode(cityCode)
|
||||
result = 31 * result + Objects.hashCode(brand)
|
||||
result = 31 * result + Objects.hashCode(carModel)
|
||||
result = 31 * result + Objects.hashCode(photos)
|
||||
result = 31 * result + java.lang.Long.hashCode(tenantId)
|
||||
result = 31 * result + java.lang.Long.hashCode(driverId)
|
||||
result = 31 * result + java.lang.Long.hashCode(businessStatus)
|
||||
return result
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import com.mogo.och.common.module.manager.socket.lan.bean.ProjectType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.VehicleType
|
||||
|
||||
interface ILoginViewCallback {
|
||||
fun showErrorInfo(errorInfo: String)
|
||||
fun showErrorInfo(errorInfo: String){}
|
||||
|
||||
fun checkAllEnv(
|
||||
reason:String
|
||||
|
||||
@@ -6,8 +6,7 @@ package com.mogo.och.biz.login.callback;
|
||||
* Model->Presenter回调:订单相关(进行中/待服务单变更,当前进行单状态变更,新到预约单,抢单,抢单结果状态等等)
|
||||
*/
|
||||
public interface ITaxiLoginCallback {
|
||||
void getPhoneCodeSuccess();
|
||||
default void searchStatusSuccess(){}
|
||||
default void getPhoneCodeSuccess(){}
|
||||
|
||||
void netErrorCallback();
|
||||
default void netErrorCallback(){}
|
||||
}
|
||||
|
||||
@@ -11,17 +11,12 @@ import com.mogo.commons.storage.SharedPrefsMgr
|
||||
import com.mogo.commons.utils.MogoAnalyticUtils
|
||||
import com.mogo.eagle.core.data.BaseData
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.function.call.och.CallerEagleBaseFunctionCall4OchManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.Product
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON
|
||||
import com.mogo.eagle.core.utilcode.util.DateTimeUtils
|
||||
import com.mogo.eagle.core.utilcode.util.GsonUtils
|
||||
import com.mogo.eagle.core.utilcode.util.NetworkUtils
|
||||
import com.mogo.och.biz.R
|
||||
import com.mogo.och.biz.login.LoginConst
|
||||
import com.mogo.och.biz.login.LoginServiceManager
|
||||
import com.mogo.och.biz.login.bean.DriverStatusQueryRespBean
|
||||
import com.mogo.och.biz.login.bean.TaxiLoginReqBean
|
||||
import com.mogo.och.biz.login.bean.TaxiLoginRespBean
|
||||
@@ -29,19 +24,14 @@ import com.mogo.och.biz.login.bean.TaxiLogoutReqBean
|
||||
import com.mogo.och.biz.login.callback.ITaxiLoginCallback
|
||||
import com.mogo.och.biz.login.net.OchCommonServiceManager
|
||||
import com.mogo.och.bridge.autopilot.location.OchLocationManager
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusEnum
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusEnum.Companion.valueOf
|
||||
import com.mogo.och.biz.login.bean.LoginInfo
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusManager
|
||||
import com.mogo.och.common.module.manager.cache.ISpCallback
|
||||
import com.mogo.och.common.module.manager.cache.OchSPManager
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.BusCacheKey
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.LoginCacheStatus
|
||||
import com.mogo.och.common.module.network.OchCommonServiceCallback
|
||||
import com.mogo.och.common.module.utils.DateTimeUtil
|
||||
import com.mogo.och.common.module.utils.ToastUtilsOch
|
||||
import com.mogo.och.common.module.wigets.toast.ToastCharterUtils
|
||||
import com.mogo.och.data.manager.cache.CacheDataManager
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.disposables.Disposable
|
||||
import java.util.concurrent.TimeUnit
|
||||
@@ -66,17 +56,20 @@ object LoginModel {
|
||||
private val mNetWorkIntentListener = IMogoIntentListener { intentStr, _ ->
|
||||
d(TAG, "onIntentReceived = %s", intentStr)
|
||||
if (ConnectivityManager.CONNECTIVITY_ACTION == intentStr) {
|
||||
if (NetworkUtils.isConnected(mContext)) {
|
||||
if (NetworkUtils.isConnected(mContext)
|
||||
&& AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
|
||||
// 网络链接成功可以先读取本地再获取服务器
|
||||
queryCarStatus()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val snChangeListener = object :ISpCallback{
|
||||
private val snChangeListener = object : ISpCallback {
|
||||
override fun snChange() {
|
||||
d(TAG, "sn 发生变化${OchSPManager.getSn()}")
|
||||
queryCarStatus(false)
|
||||
if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
|
||||
queryCarStatus(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,26 +79,18 @@ object LoginModel {
|
||||
.registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener)
|
||||
}
|
||||
|
||||
fun init(context: Context) {
|
||||
|
||||
}
|
||||
|
||||
fun hasInit(): Boolean {
|
||||
return iTaxiLoginCallback != null
|
||||
}
|
||||
|
||||
fun getiTaxiLoginCallback(): ITaxiLoginCallback? {
|
||||
return iTaxiLoginCallback
|
||||
}
|
||||
|
||||
fun setiTaxiLoginCallback(iTaxiLoginCallback: ITaxiLoginCallback?) {
|
||||
d(TAG,"setiTaxiLoginCallback")
|
||||
OchSPManager.addListener(TAG,snChangeListener)
|
||||
d(TAG, "setiTaxiLoginCallback")
|
||||
OchSPManager.addListener(TAG, snChangeListener)
|
||||
LoginModel.iTaxiLoginCallback = iTaxiLoginCallback
|
||||
}
|
||||
|
||||
fun release() {
|
||||
d(TAG,"release")
|
||||
d(TAG, "release")
|
||||
OchSPManager.remove(TAG)
|
||||
iTaxiLoginCallback = null
|
||||
}
|
||||
@@ -114,11 +99,11 @@ object LoginModel {
|
||||
* 获取手机验证码
|
||||
*/
|
||||
fun getPhoneCode(phone: String?) {
|
||||
if(mContext==null){
|
||||
OchChainLogManager.writeChainLog("登录页面","获取验证码 mContext${mContext}")
|
||||
}else {
|
||||
if (mContext == null) {
|
||||
OchChainLogManager.writeChainLog("登录页面", "获取验证码 mContext${mContext==null}")
|
||||
} else {
|
||||
mContext?.let {
|
||||
OchChainLogManager.writeChainLog("登录页面","网络请求去获取验证码")
|
||||
OchChainLogManager.writeChainLog("登录页面", "网络请求去获取验证码")
|
||||
OchCommonServiceManager.getPhoneCode(it, phone,
|
||||
object : OchCommonServiceCallback<BaseData> {
|
||||
override fun onSuccess(data: BaseData?) {
|
||||
@@ -188,48 +173,43 @@ object LoginModel {
|
||||
|
||||
/**
|
||||
* 接单状态和登录状态查询
|
||||
* 1、初始化查询
|
||||
* 2、错误重试
|
||||
* 3、错误重试
|
||||
* 4、登出后重试
|
||||
* 5、变更出车状态查下
|
||||
* 6、变更出车状态查下
|
||||
* 7、网络状态变更后查询
|
||||
* 8、登录页面关闭后查下状态
|
||||
* 1、司机端登录成功后开启2分钟定时请求登录状态
|
||||
* 2、对外提供查询登录状态
|
||||
* 3、网络状态发生变化后查询
|
||||
* 4、sn 发生变化后查询
|
||||
* 5、登录成功后主动查询
|
||||
* 6、错误重试
|
||||
* 7、错误重试
|
||||
* 8、登出后重试
|
||||
*/
|
||||
fun queryCarStatus(readCatche:Boolean = true) {
|
||||
fun queryCarStatus(readCatche: Boolean = true) {
|
||||
mContext?.let {
|
||||
Log.d(TAG,"设置源:queryCarStatus")
|
||||
if(readCatche){
|
||||
val logingInfoJson = OchSPManager.getString(loginInfoKey)
|
||||
val timeText = DateTimeUtils.getTimeText(DateTimeUtils.yyyy_MM_dd)
|
||||
logingInfoJson?.let {logininfo->
|
||||
if(logininfo.startsWith(timeText)){
|
||||
val json = logingInfoJson.replace(timeText,"" )
|
||||
val oldLoginInfo = GsonUtils.fromJson(json, DriverStatusQueryRespBean::class.java)
|
||||
go2LoginInfo(oldLoginInfo,"缓存获取")
|
||||
}
|
||||
}
|
||||
Log.d(TAG, "设置源:queryCarStatus")
|
||||
if (readCatche) {
|
||||
val loginInfo = LoginServiceManager.getLoginInfo()
|
||||
go2LoginInfo(loginInfo,"缓存获取")
|
||||
}
|
||||
OchCommonServiceManager.queryDriverServiceStatus(it, object : OchCommonServiceCallback<DriverStatusQueryRespBean> {
|
||||
override fun onSuccess(data: DriverStatusQueryRespBean?) {
|
||||
OchCommonServiceManager.queryDriverServiceStatus(
|
||||
it,
|
||||
object : OchCommonServiceCallback<DriverStatusQueryRespBean> {
|
||||
override fun onSuccess(data: DriverStatusQueryRespBean) {
|
||||
val map: MutableMap<String, Any> = HashMap()
|
||||
map["msg"] = data.toString()
|
||||
MogoAnalyticUtils.track("QueryCarStatus",map)
|
||||
go2LoginInfo(data,"接口获取")
|
||||
MogoAnalyticUtils.track("QueryCarStatus", map)
|
||||
go2LoginInfo(data.data, "接口获取")
|
||||
}
|
||||
|
||||
override fun onError() {
|
||||
val map: MutableMap<String, Any> = HashMap()
|
||||
map["msg"] = "网络错误"
|
||||
MogoAnalyticUtils.track("QueryCarStatus",map)
|
||||
MogoAnalyticUtils.track("QueryCarStatus", map)
|
||||
|
||||
if (!NetworkUtils.isConnected(mContext)) {
|
||||
ToastCharterUtils.showToastShort(mContext!!.getString(R.string.network_error_tip))
|
||||
} else {
|
||||
ToastCharterUtils.showToastShort(mContext!!.getString(R.string.request_error_tip))
|
||||
}
|
||||
LoginStatusManager.setLoginError(-10012,"网络错误")
|
||||
LoginStatusManager.setLoginError(-10012, "网络错误")
|
||||
// 依赖参数
|
||||
subscribe = Observable.timer(5, TimeUnit.SECONDS)
|
||||
.subscribe { _: Long? -> queryCarStatus(readCatche) }
|
||||
@@ -239,9 +219,9 @@ object LoginModel {
|
||||
val map: MutableMap<String, Any> = HashMap()
|
||||
map["msg"] = msg
|
||||
map["code"] = code
|
||||
MogoAnalyticUtils.track("QueryCarStatus",map)
|
||||
MogoAnalyticUtils.track("QueryCarStatus", map)
|
||||
|
||||
LoginStatusManager.setLoginError(code,"msg:${msg}")
|
||||
LoginStatusManager.setLoginError(code, "msg:${msg}")
|
||||
ToastUtilsOch.showWithCodeMessage(code, msg)
|
||||
// 依赖参数
|
||||
subscribe = Observable.timer(3, TimeUnit.SECONDS)
|
||||
@@ -249,7 +229,6 @@ object LoginModel {
|
||||
// if (code == OchCommonConst.WAIT_TAKEN) {
|
||||
//
|
||||
// } else {
|
||||
loginFail(LoginStatusManager.isLogin())
|
||||
// }
|
||||
}
|
||||
})
|
||||
@@ -257,34 +236,10 @@ object LoginModel {
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
private fun go2LoginInfo(data: DriverStatusQueryRespBean?, source: String) {
|
||||
d(TAG,"设置源:${source}")
|
||||
private fun go2LoginInfo(data: LoginInfo?, source: String) {
|
||||
d(TAG, "设置源:${source}")
|
||||
data?.let {
|
||||
LoginStatusManager.setLoginInfo(data.data)
|
||||
}
|
||||
if (FunctionBuildConfig.ochdebug) {
|
||||
return
|
||||
}
|
||||
if (null != data && 0 == data.code) {
|
||||
// 不用登录也可以获得支持的业务模式
|
||||
LoginStatusManager.setBusinessType(data.data.businessType)
|
||||
iTaxiLoginCallback?.searchStatusSuccess()
|
||||
// 后台已登录
|
||||
if (!FunctionBuildConfig.isOffLine) {
|
||||
if (valueOf(data.data.driverStatus) == LoginStatusEnum.Login) {
|
||||
// 业务不支持 去退出登录
|
||||
if (!LoginStatusManager.checkBusiness(data.data.businessType)) {
|
||||
LoginStatusManager.loginOut()
|
||||
return
|
||||
}
|
||||
}
|
||||
LoginStatusManager.setLoginStatus(data.data.driverStatus)
|
||||
}
|
||||
val timeText = DateTimeUtils.getTimeText(DateTimeUtils.yyyy_MM_dd)
|
||||
val loginInfo4Json = GsonUtils.toJson(data)
|
||||
OchSPManager.putString(loginInfoKey,timeText+loginInfo4Json)
|
||||
LoginStatusManager.setOpenOrderType(data.data.servingStatus)
|
||||
d(TAG, "登录信息:$data")
|
||||
LoginServiceManager.setLoginInfo(data)
|
||||
loginSuccess(data)
|
||||
}
|
||||
}
|
||||
@@ -292,18 +247,11 @@ object LoginModel {
|
||||
// 登出
|
||||
fun logout() {
|
||||
val location4Login = TaxiLogoutReqBean.Location4Login()
|
||||
if (FunctionBuildConfig.isOffLine) {
|
||||
d(TAG, "离线模式登录后退出 setLoginStatus:${LoginStatusEnum.Logout}")
|
||||
LoginStatusManager.setLoginStatus(LoginStatusEnum.Logout)
|
||||
FunctionBuildConfig.isOffLine = false
|
||||
return
|
||||
}
|
||||
OchCommonServiceManager.logout(
|
||||
mContext!!, location4Login,
|
||||
object : OchCommonServiceCallback<BaseData> {
|
||||
override fun onSuccess(data: BaseData?) {
|
||||
if (null != data && 0 == data.code) {
|
||||
loginFail(false)
|
||||
OchSPManager.remove(loginInfoKey)
|
||||
// 退出登录成功需要查询新的
|
||||
queryCarStatus(false)
|
||||
@@ -320,44 +268,27 @@ object LoginModel {
|
||||
|
||||
override fun onFail(code: Int, msg: String) {
|
||||
ToastUtilsOch.showWithCodeMessage(code, msg)
|
||||
if(!LoginStatusManager.isLogin()){
|
||||
LoginStatusManager.invokeLBusinessTypeChangeDebug(Product.NONE)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fun loginSuccess(data: DriverStatusQueryRespBean?) {
|
||||
d(TAG, "loginSuccess:${LoginStatusManager.isLogin()}")
|
||||
if (LoginStatusManager.isLogin()) {
|
||||
SharedPrefsMgr.getInstance().putString("och_account", data?.data?.phone)
|
||||
fun loginSuccess(data: LoginInfo?) {
|
||||
d(TAG, "loginSuccess:${LoginServiceManager.isLogin()}")
|
||||
if (LoginServiceManager.isLogin()) {
|
||||
SharedPrefsMgr.getInstance().putString("och_account", data?.phone)
|
||||
} else {
|
||||
SharedPrefsMgr.getInstance().putString("och_account", "")
|
||||
}
|
||||
|
||||
data?.data?.driverStatus?.let { updateLoginLocalStatus(it) }
|
||||
}
|
||||
|
||||
private fun updateLoginLocalStatus(loginStatus: Int = 0) {
|
||||
val loginCacheStatus = LoginCacheStatus(loginStatus, DateTimeUtil.getCurrentTimeStamp())
|
||||
mContext?.let {
|
||||
CacheDataManager.instance.putCacheData(
|
||||
it, BusCacheKey.BUS_LOGIN_STATUS_CACHE,
|
||||
GsonUtils.toJson(loginCacheStatus))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun loginFail(isLogin: Boolean) {
|
||||
d(TAG, "loginFail:$isLogin")
|
||||
updateLoginLocalStatus(0)
|
||||
}
|
||||
|
||||
fun gotoOfflineMode() {
|
||||
FunctionBuildConfig.isOffLine = true
|
||||
d(TAG, "离线模式登录 setLoginStatus:${LoginStatusEnum.Login}")
|
||||
LoginStatusManager.setLoginStatus(LoginStatusEnum.Login)
|
||||
CallerEagleBaseFunctionCall4OchManager.setOchLoginNo(LoginConst.OFFLINEPHONE)
|
||||
var loginInfo = LoginServiceManager.getLoginInfo()
|
||||
if(loginInfo==null){
|
||||
loginInfo = LoginInfo()
|
||||
}
|
||||
LoginServiceManager.setLoginInfo(loginInfo)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -77,7 +77,7 @@ object OchCommonServiceManager {
|
||||
location4Login: TaxiLoginReqBean.Location4Login,
|
||||
callback: OchCommonServiceCallback<TaxiLoginRespBean>?
|
||||
) {
|
||||
CallerLogger.d(TAG, "gotoLoginBycode:通过手机验证码登录:${phone}---${code}");
|
||||
CallerLogger.d(TAG, "gotoLoginBycode:通过手机验证码登录:${phone}---${code}")
|
||||
val sn = OchSPManager.getSn()
|
||||
if (ProjectUtils.isMogo()) {
|
||||
ochLoginServiceMogo.gotoLoginBycode(
|
||||
@@ -103,7 +103,7 @@ object OchCommonServiceManager {
|
||||
location4Login: TaxiLogoutReqBean.Location4Login?,
|
||||
callback: OchCommonServiceCallback<BaseData>?
|
||||
) {
|
||||
CallerLogger.d(TAG, "logout:登出");
|
||||
CallerLogger.d(TAG, "logout:登出")
|
||||
if (ProjectUtils.isMogo()) {
|
||||
ochLoginServiceMogo.logout(
|
||||
MoGoAiCloudClientConfig.getInstance().serviceAppId,
|
||||
@@ -143,14 +143,14 @@ object OchCommonServiceManager {
|
||||
LoginLanPassengerSocket.driverSn
|
||||
}
|
||||
if(sn.isNullOrEmpty()){
|
||||
CallerLogger.d(TAG, "queryDriverServiceStatus:查询登录状态 没有有效的sn");
|
||||
CallerLogger.d(TAG, "queryDriverServiceStatus:查询登录状态 没有有效的sn")
|
||||
return
|
||||
}
|
||||
if(FunctionBuildConfig.ochdebug){
|
||||
CallerLogger.d(TAG, "queryDriverServiceStatus:查询登录状态 ochdebug模式");
|
||||
CallerLogger.d(TAG, "queryDriverServiceStatus:查询登录状态 ochdebug模式")
|
||||
return
|
||||
}
|
||||
CallerLogger.d(TAG, "queryDriverServiceStatus:查询登录状态${sn}");
|
||||
CallerLogger.d(TAG, "queryDriverServiceStatus:查询登录状态${sn}")
|
||||
if (ProjectUtils.isMogo()) {
|
||||
ochLoginServiceMogo.queryDriverServiceStatusAndLoginStatus(
|
||||
MoGoAiCloudClientConfig.getInstance().serviceAppId,
|
||||
|
||||
@@ -26,7 +26,6 @@ class LoginPassengerPresenter(view: LoginPassengerFragment?) : Presenter<LoginPa
|
||||
}
|
||||
|
||||
private fun initListeners() {
|
||||
LoginModel.init(AbsMogoApplication.getApp())
|
||||
LoginModel.setiTaxiLoginCallback(this)
|
||||
BizLoopManager.setLoopFunction(TAG, LoopInfo(2,::showStatus))
|
||||
}
|
||||
@@ -45,12 +44,4 @@ class LoginPassengerPresenter(view: LoginPassengerFragment?) : Presenter<LoginPa
|
||||
BizLoopManager.removeLoopFunction(TAG)
|
||||
}
|
||||
|
||||
override fun getPhoneCodeSuccess() {
|
||||
|
||||
}
|
||||
|
||||
override fun netErrorCallback() {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3,15 +3,20 @@ package com.mogo.och.biz.login.presenter
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.commons.mvp.Presenter
|
||||
import com.mogo.eagle.core.utilcode.mogo.Product
|
||||
import com.mogo.eagle.core.utilcode.mogo.Vehicle
|
||||
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_OCHCOMMON
|
||||
import com.mogo.eagle.core.utilcode.util.RegexUtils
|
||||
import com.mogo.eagle.core.utilcode.util.StringUtils
|
||||
import com.mogo.och.biz.R
|
||||
import com.mogo.och.biz.login.LoginConst
|
||||
import com.mogo.och.biz.login.LoginServiceManager
|
||||
import com.mogo.och.biz.login.callback.ITaxiLoginCallback
|
||||
import com.mogo.och.biz.login.ui.LoginFragment
|
||||
import com.mogo.och.biz.login.model.LoginModel
|
||||
import com.mogo.och.common.module.biz.login.ILoginCallback
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusManager
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
import com.mogo.och.common.module.wigets.toast.ToastCharterUtils
|
||||
@@ -27,26 +32,30 @@ import java.util.concurrent.TimeUnit
|
||||
*
|
||||
* 描述
|
||||
*/
|
||||
class LoginPresenter(view: LoginFragment?) : Presenter<LoginFragment?>(view), ITaxiLoginCallback {
|
||||
class LoginPresenter(view: LoginFragment?) : Presenter<LoginFragment?>(view), ITaxiLoginCallback,
|
||||
ILoginCallback {
|
||||
|
||||
private var countDownDisposable: Disposable? = null
|
||||
|
||||
private val TAG = LoginPresenter::class.java.simpleName
|
||||
|
||||
private var phone:String?=null
|
||||
private var code:String?=null
|
||||
private val TAG = M_OCHCOMMON+LoginPresenter::class.java.simpleName
|
||||
|
||||
init {
|
||||
initListeners()
|
||||
CallerLogger.d(SceneConstant.M_TAXI + TAG, "网约车-Init")
|
||||
CallerLogger.d(TAG, "网约车-Init")
|
||||
}
|
||||
|
||||
private fun initListeners() {
|
||||
LoginModel.init(AbsMogoApplication.getApp())
|
||||
LoginModel.setiTaxiLoginCallback(this)
|
||||
LoginStatusManager.addListener(TAG,this)
|
||||
}
|
||||
|
||||
override fun onProductChange(businessEnum: Product?) {
|
||||
mView?.setBg()
|
||||
}
|
||||
|
||||
override fun onVehicleChage(vehicle: Vehicle?) {
|
||||
mView?.setBg()
|
||||
}
|
||||
|
||||
fun getPhoneCode(phone:String){
|
||||
OchChainLogManager.writeChainLog("登录页面","获取验证码${phone}")
|
||||
@@ -65,7 +74,7 @@ class LoginPresenter(view: LoginFragment?) : Presenter<LoginFragment?>(view), IT
|
||||
|
||||
override fun onCreate(owner: LifecycleOwner) {
|
||||
super.onCreate(owner)
|
||||
CallerLogger.d(SceneConstant.M_TAXI + TAG, "网约车-出租车登陆")
|
||||
CallerLogger.d(TAG, "网约车-出租车登陆")
|
||||
}
|
||||
|
||||
|
||||
@@ -88,13 +97,13 @@ class LoginPresenter(view: LoginFragment?) : Presenter<LoginFragment?>(view), IT
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe({
|
||||
mView?.setCountDownText("${it}s",false)
|
||||
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "倒计时:$it")
|
||||
CallerLogger.d(TAG, "倒计时:$it")
|
||||
}, {
|
||||
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "倒计时onError:${it}")
|
||||
CallerLogger.d(TAG, "倒计时onError:${it}")
|
||||
it.printStackTrace()
|
||||
mView?.setCountDownText(AbsMogoApplication.getApp().getString(R.string.module_och_taxi_login_get_code),true)
|
||||
}, {
|
||||
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "倒计时onComplete")
|
||||
CallerLogger.d(TAG, "倒计时onComplete")
|
||||
mView?.setCountDownText(AbsMogoApplication.getApp().getString(R.string.module_och_taxi_login_get_code),true)
|
||||
})
|
||||
}
|
||||
@@ -116,25 +125,8 @@ class LoginPresenter(view: LoginFragment?) : Presenter<LoginFragment?>(view), IT
|
||||
gotoOfflineMode()
|
||||
return
|
||||
}
|
||||
// 需要实时查询新的
|
||||
LoginModel.queryCarStatus(false)
|
||||
LoginModel.gotoLogin(phone, code)
|
||||
mView?.closeSoftInput()
|
||||
this.phone = phone
|
||||
this.code = code
|
||||
}
|
||||
|
||||
override fun searchStatusSuccess() {
|
||||
if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)) {
|
||||
return
|
||||
}
|
||||
if(!LoginStatusManager.checkBusiness(LoginStatusManager.getBusInessType().code)){
|
||||
return
|
||||
}
|
||||
if(!StringUtils.isEmpty(phone)&&!StringUtils.isEmpty(code)) {
|
||||
LoginModel.gotoLogin(phone!!, code!!)
|
||||
}
|
||||
this.phone = null
|
||||
this.code = null
|
||||
}
|
||||
|
||||
override fun netErrorCallback() {
|
||||
|
||||
@@ -257,11 +257,7 @@ class LoginFragment : MvpFragment<LoginFragment?, LoginPresenter?>(), ILoginView
|
||||
// 司机屏不用处理 只处理 后台返回的业务模型就行
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
biz_cl_driver_main?.viewTreeObserver?.addOnGlobalLayoutListener(onlayoutListener)
|
||||
super.onResume()
|
||||
CallerIpcConnectStateToastManager.loginFragment(true)
|
||||
CallerLogger.d(TAG, "onResume")
|
||||
fun setBg(){
|
||||
context?.let {
|
||||
val videoUrl:String
|
||||
if (AppIdentityModeUtils.isT1T2(FunctionBuildConfig.appIdentityMode)) {
|
||||
@@ -347,6 +343,14 @@ class LoginFragment : MvpFragment<LoginFragment?, LoginPresenter?>(), ILoginView
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
biz_cl_driver_main?.viewTreeObserver?.addOnGlobalLayoutListener(onlayoutListener)
|
||||
super.onResume()
|
||||
CallerIpcConnectStateToastManager.loginFragment(true)
|
||||
CallerLogger.d(TAG, "onResume")
|
||||
setBg()
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
biz_cl_driver_main?.viewTreeObserver?.removeOnGlobalLayoutListener(onlayoutListener)
|
||||
super.onPause()
|
||||
|
||||
@@ -1,26 +1,29 @@
|
||||
package com.mogo.och.biz.login.ui
|
||||
|
||||
import android.content.res.Configuration
|
||||
import android.util.TypedValue
|
||||
import android.view.View
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.mogo.commons.mvp.MvpFragment
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager
|
||||
import com.mogo.eagle.core.function.hmi.ui.setting.ToggleDebugView
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.util.DeviceUtils
|
||||
import com.mogo.eagle.core.utilcode.util.ScreenUtils
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
import com.mogo.och.biz.BuildConfig
|
||||
import com.mogo.och.biz.R
|
||||
import com.mogo.och.biz.login.callback.ILoginViewCallback
|
||||
import com.mogo.och.biz.login.presenter.LoginPassengerPresenter
|
||||
import com.mogo.och.biz.login.ui.debugview.BusinessView
|
||||
import com.mogo.och.common.module.biz.lansocket.LoginLanPassengerSocket
|
||||
import com.mogo.och.common.module.utils.FlavorUtils
|
||||
import kotlinx.android.synthetic.main.biz_login_passenger_view.actv_app_version
|
||||
import kotlinx.android.synthetic.main.biz_login_passenger_view.actv_connect_status
|
||||
import kotlinx.android.synthetic.main.biz_login_passenger_view.biz_cl_passenger_main
|
||||
import kotlinx.android.synthetic.main.biz_login_view.bv_switch_business
|
||||
import kotlinx.android.synthetic.main.biz_login_view.eiv_Info
|
||||
import me.jessyan.autosize.AutoSizeCompat
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
import kotlin.math.abs
|
||||
|
||||
|
||||
/**
|
||||
@@ -29,36 +32,53 @@ import kotlinx.android.synthetic.main.biz_login_view.eiv_Info
|
||||
*/
|
||||
class LoginPassengerFragment : MvpFragment<LoginPassengerFragment?, LoginPassengerPresenter?>(),
|
||||
ILoginViewCallback {
|
||||
|
||||
private var biz_cl_passenger_main: ConstraintLayout?=null
|
||||
private var biz_actv_login_show_sn: AppCompatTextView?=null
|
||||
private var bv_switch_business: BusinessView?=null
|
||||
private var actv_app_version: AppCompatTextView?=null
|
||||
private var actv_connect_status: AppCompatTextView?=null
|
||||
|
||||
|
||||
private val statusList = mutableListOf<String>()
|
||||
|
||||
override fun getLayoutId(): Int {
|
||||
return R.layout.biz_login_passenger_view
|
||||
}
|
||||
|
||||
if (AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode) &&
|
||||
AppIdentityModeUtils.isPassenger((FunctionBuildConfig.appIdentityMode))) {
|
||||
return R.layout.biz_login_passenger_view_1920x1080
|
||||
} else if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode) &&
|
||||
AppIdentityModeUtils.isPassenger((FunctionBuildConfig.appIdentityMode))) {
|
||||
return R.layout.biz_login_passenger_view_1080x1920
|
||||
private val width2560 = 2560
|
||||
private val width1920 = 1920
|
||||
|
||||
private fun changeUi(){
|
||||
val screenWidth = ScreenUtils.getScreenWidth()
|
||||
val screenHeight = ScreenUtils.getScreenHeight()
|
||||
|
||||
val textSize: Float
|
||||
val marginBottom: Int
|
||||
|
||||
if(screenWidth>screenHeight){//横屏
|
||||
if(abs(screenWidth - width2560)<abs(screenWidth-width1920)){
|
||||
// 使用2560的横屏配置
|
||||
biz_cl_passenger_main?.setBackgroundResource(R.drawable.biz_login_passenger_2560x1600)
|
||||
textSize = AutoSizeUtils.dp2px(context, 30f).toFloat()
|
||||
marginBottom = AutoSizeUtils.dp2px(context, 70f)
|
||||
CallerLogger.d(TAG,"width:${screenWidth}----height:${screenHeight}----001")
|
||||
}else{
|
||||
// 使用1920的横屏效果
|
||||
biz_cl_passenger_main?.setBackgroundResource(R.drawable.biz_login_passenger_1920x1080)
|
||||
textSize = AutoSizeUtils.dp2px(context, 28f).toFloat()
|
||||
marginBottom = AutoSizeUtils.dp2px(context, 41f)
|
||||
CallerLogger.d(TAG,"width:${screenWidth}----height:${screenHeight}----002")
|
||||
}
|
||||
}else{// 竖屏 使用1080 的横屏效果
|
||||
biz_cl_passenger_main?.setBackgroundResource(R.drawable.biz_login_passenger_1080x1920)
|
||||
textSize = AutoSizeUtils.dp2px(context, 28f).toFloat()
|
||||
marginBottom = AutoSizeUtils.dp2px(context, 41f)
|
||||
CallerLogger.d(TAG,"width:${screenWidth}----height:${screenHeight}----003")
|
||||
}
|
||||
|
||||
return R.layout.biz_login_passenger_view_2560x1600
|
||||
actv_connect_status?.setTextSize(TypedValue.COMPLEX_UNIT_PX,textSize)
|
||||
actv_app_version?.setTextSize(TypedValue.COMPLEX_UNIT_PX,textSize)
|
||||
val layoutParams = actv_app_version.layoutParams as ConstraintLayout.LayoutParams
|
||||
layoutParams.bottomMargin = marginBottom
|
||||
actv_app_version.layoutParams = layoutParams
|
||||
}
|
||||
|
||||
override fun initViews() {
|
||||
|
||||
biz_cl_passenger_main = findViewById(R.id.biz_cl_passenger_main)
|
||||
biz_actv_login_show_sn= findViewById(R.id.biz_actv_login_show_sn)
|
||||
bv_switch_business= findViewById(R.id.bv_switch_business)
|
||||
actv_app_version= findViewById(R.id.actv_app_version)
|
||||
actv_connect_status= findViewById(R.id.actv_connect_status)
|
||||
|
||||
CallerLogger.d(TAG, "init")
|
||||
actv_app_version?.text = FlavorUtils.getInfo()
|
||||
|
||||
if(BuildConfig.DEBUG) {
|
||||
@@ -74,8 +94,7 @@ class LoginPassengerFragment : MvpFragment<LoginPassengerFragment?, LoginPasseng
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
CallerLogger.d(TAG, "init")
|
||||
changeUi()
|
||||
}
|
||||
|
||||
override fun createPresenter(): LoginPassengerPresenter {
|
||||
@@ -87,14 +106,9 @@ class LoginPassengerFragment : MvpFragment<LoginPassengerFragment?, LoginPasseng
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
val TAG = LoginPassengerFragment::class.java.simpleName
|
||||
}
|
||||
|
||||
override fun showErrorInfo(errorInfo: String) {
|
||||
|
||||
}
|
||||
|
||||
override fun checkAllEnv(
|
||||
reason:String
|
||||
) {
|
||||
@@ -103,7 +117,7 @@ class LoginPassengerFragment : MvpFragment<LoginPassengerFragment?, LoginPasseng
|
||||
}
|
||||
|
||||
override fun updateStatus(status: String) {
|
||||
statusList?.add(status)
|
||||
statusList.add(status)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
@@ -134,5 +148,7 @@ class LoginPassengerFragment : MvpFragment<LoginPassengerFragment?, LoginPasseng
|
||||
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||
super.onConfigurationChanged(newConfig)
|
||||
CallerLogger.d(TAG, newConfig)
|
||||
AutoSizeCompat.autoConvertDensityOfGlobal(resources)
|
||||
changeUi()
|
||||
}
|
||||
}
|
||||
@@ -10,11 +10,18 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.function.hmi.ui.setting.ToggleDebugView
|
||||
import com.mogo.eagle.core.utilcode.kotlin.onClick
|
||||
import com.mogo.eagle.core.utilcode.mogo.Product
|
||||
import com.mogo.eagle.core.utilcode.mogo.Vehicle
|
||||
import com.mogo.eagle.core.utilcode.util.GsonUtils
|
||||
import com.mogo.och.biz.R
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusManager
|
||||
import kotlinx.android.synthetic.main.biz_login_business_view.view.actv_business_bus
|
||||
import com.mogo.och.biz.login.LoginServiceManager
|
||||
import com.mogo.och.biz.login.bean.LoginInfo
|
||||
import com.mogo.och.common.module.biz.login.EnumLoginStatus
|
||||
import kotlinx.android.synthetic.main.biz_login_business_view.view.actv_business_bus_B1
|
||||
import kotlinx.android.synthetic.main.biz_login_business_view.view.actv_business_bus_B2
|
||||
import kotlinx.android.synthetic.main.biz_login_business_view.view.actv_business_charter
|
||||
import kotlinx.android.synthetic.main.biz_login_business_view.view.actv_business_shuttle
|
||||
import kotlinx.android.synthetic.main.biz_login_business_view.view.actv_business_shuttle_B1
|
||||
import kotlinx.android.synthetic.main.biz_login_business_view.view.actv_business_shuttle_B2
|
||||
import kotlinx.android.synthetic.main.biz_login_business_view.view.actv_business_sweeper
|
||||
import kotlinx.android.synthetic.main.biz_login_business_view.view.actv_business_taxi
|
||||
import kotlinx.android.synthetic.main.biz_login_business_view.view.actv_debugview
|
||||
|
||||
@@ -23,6 +30,8 @@ class BusinessView : ConstraintLayout, BusinessViewModel.IErrorInfoViewCallback
|
||||
|
||||
private val TAG = "ItineraryView"
|
||||
|
||||
private val tempLoginJson = "{\"brand\":\"东风\",\"businessStatus\":0,\"businessType\":9,\"carModel\":\"E70\",\"cityCode\":\"110000\",\"currentSite\":0,\"driverId\":0,\"driverStatus\":0,\"leaving\":false,\"lineId\":null,\"orderNo\":\"\",\"phone\":\"\",\"photos\":\"https://img.zhidaohulian.com/fileServer/defaultPath/d46c5a1a778313d997e77b67efdaf8cc/1080x1920_01.png\",\"plateNumber\":\"测123456\",\"purpose\":0,\"servingStatus\":0,\"shiftsId\":0,\"siteId\":0,\"sn\":\"20230712ED9M636\",\"taskDate\":0,\"taskId\":null,\"tenantId\":201779277258031992,\"vin\":\"20230712ED9M636\"}"
|
||||
|
||||
constructor(context: Context) : super(context)
|
||||
|
||||
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
|
||||
@@ -55,16 +64,26 @@ class BusinessView : ConstraintLayout, BusinessViewModel.IErrorInfoViewCallback
|
||||
|
||||
viewModel?.setDistanceCallback(this)
|
||||
|
||||
actv_business_shuttle.onClick { swtichBusiness(Product.SHUTTLE) }
|
||||
actv_business_bus.onClick { swtichBusiness(Product.BUS) }
|
||||
actv_business_taxi.onClick { swtichBusiness(Product.TAXI) }
|
||||
actv_business_charter.onClick { swtichBusiness(Product.CHARTER) }
|
||||
actv_business_shuttle_B1.onClick { swtichBusiness(Product.SHUTTLE, Vehicle.B1) }
|
||||
actv_business_shuttle_B2.onClick { swtichBusiness(Product.SHUTTLE,Vehicle.B2) }
|
||||
actv_business_bus_B1.onClick { swtichBusiness(Product.BUS,Vehicle.B1) }
|
||||
actv_business_bus_B2.onClick { swtichBusiness(Product.BUS,Vehicle.B2) }
|
||||
actv_business_taxi.onClick { swtichBusiness(Product.TAXI,Vehicle.T1T2) }
|
||||
actv_business_charter.onClick { swtichBusiness(Product.CHARTER,Vehicle.M1) }
|
||||
actv_business_sweeper.onClick { swtichBusiness(Product.SWEEPER,Vehicle.C1) }
|
||||
actv_debugview.onClick { ToggleDebugView.toggleDebugView.toggle(context) }
|
||||
}
|
||||
|
||||
private fun swtichBusiness(businessEnum: Product) {
|
||||
LoginStatusManager.invokeLBusinessTypeChangeDebug(businessEnum)
|
||||
visibility = GONE
|
||||
private fun swtichBusiness(businessEnum: Product, vehicle: Vehicle) {
|
||||
var loginInfo = LoginServiceManager.getLoginInfo()
|
||||
if(loginInfo==null) {
|
||||
loginInfo = GsonUtils.fromJson(tempLoginJson, LoginInfo::class.java)
|
||||
}
|
||||
loginInfo?.driverStatus = EnumLoginStatus.Login.code
|
||||
loginInfo?.businessType = businessEnum.code
|
||||
loginInfo?.carModel = vehicle.code
|
||||
LoginServiceManager.setLoginInfo(loginInfo!!)
|
||||
FunctionBuildConfig.ochdebug = true
|
||||
}
|
||||
|
||||
|
||||
@@ -78,31 +97,10 @@ class BusinessView : ConstraintLayout, BusinessViewModel.IErrorInfoViewCallback
|
||||
}
|
||||
|
||||
fun selectBusniess() {
|
||||
visibility = VISIBLE
|
||||
actv_business_shuttle.visibility = GONE
|
||||
actv_business_bus.visibility = GONE
|
||||
actv_business_taxi.visibility = GONE
|
||||
actv_business_charter.visibility = GONE
|
||||
FunctionBuildConfig.supportBusiness.forEach {
|
||||
when (it) {
|
||||
"shuttle" -> {
|
||||
actv_business_shuttle.visibility = VISIBLE
|
||||
}
|
||||
|
||||
"bus" -> {
|
||||
actv_business_bus.visibility = VISIBLE
|
||||
}
|
||||
|
||||
"taxi" -> {
|
||||
actv_business_taxi.visibility = VISIBLE
|
||||
}
|
||||
|
||||
"charter" -> {
|
||||
actv_business_charter.visibility = VISIBLE
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
if(visibility== VISIBLE){
|
||||
visibility = GONE
|
||||
}else {
|
||||
visibility = VISIBLE
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
256
OCH/common/biz/src/main/java/com/mogo/och/biz/qrcode/QrParse.kt
Normal file
256
OCH/common/biz/src/main/java/com/mogo/och/biz/qrcode/QrParse.kt
Normal file
@@ -0,0 +1,256 @@
|
||||
package com.mogo.och.biz.qrcode
|
||||
|
||||
import com.mogo.eagle.core.utilcode.mogo.Product
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
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.RegexUtils
|
||||
import com.mogo.och.common.module.biz.scanner.QrBean
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
import com.mogo.och.common.module.manager.socket.lan.LanSocketManager
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.WriteOffDetialMsg
|
||||
import java.net.URLDecoder
|
||||
|
||||
object QrParse {
|
||||
|
||||
private const val TAG = "QrParse"
|
||||
|
||||
fun parse(payload: String?): QrBean? {
|
||||
val queryParameterNames = parseQuery(payload)
|
||||
return if (queryParameterNames.isNotEmpty()) {// version 1 和 version 2
|
||||
parseVersion1to2(queryParameterNames)
|
||||
} else {
|
||||
parseVersion3ton(payload)
|
||||
}
|
||||
}
|
||||
|
||||
private fun parseVersion3ton(payload: String?): QrBean? {
|
||||
payload?.let {
|
||||
try {
|
||||
val split = it.split(",")
|
||||
if(split.isEmpty()){
|
||||
return null
|
||||
}
|
||||
// 业务模式+版本号
|
||||
val typeAndVersion92 = split[0]
|
||||
val tenantId92_head = split[1]
|
||||
val tenantId92_tail = split[2]
|
||||
val orderNo92_head = split[3]
|
||||
val orderNo92_tail = split[4]
|
||||
val uidCode = split[5]
|
||||
val pipeCode = split[6]
|
||||
val phoneCode = split[7]
|
||||
val lineIdCode = split[8]
|
||||
val expiryTimeCode = split[9]
|
||||
val bookingTimeCode = split[10]
|
||||
val availableTimesCode = split[11]
|
||||
val ticketSize = split[12].toInt() ?:0
|
||||
|
||||
val base92ToBase10 = Radix91.base91ToBase10(typeAndVersion92).toString().padStart(3,'0')
|
||||
val bizTypeCode = base92ToBase10.substring(0,1)
|
||||
val bizType = Product.getCodeFromWxQr(bizTypeCode)
|
||||
val version = base92ToBase10.substring(1).toInt() + 2// 0 1 这两个版本在Android端定义 二维码从优化后开始
|
||||
|
||||
val tenantIdHead = Radix91.base91ToBase10(tenantId92_head).toString()
|
||||
val tenantIdTail = Radix91.base91ToBase10(tenantId92_tail).toString()
|
||||
val tenantId = tenantIdHead+tenantIdTail
|
||||
|
||||
val orderNoHead = Radix91.base91ToBase10(orderNo92_head).toString()
|
||||
val orderNoTail = Radix91.base91ToBase10(orderNo92_tail).toString()
|
||||
|
||||
val orderNo = orderNoHead+orderNoTail
|
||||
|
||||
val uid = uidCode.substring(0, 8) + "-" +
|
||||
uidCode.substring(8, 12) + "-" +
|
||||
uidCode.substring(12, 16) + "-" +
|
||||
uidCode.substring(16, 20) + "-" +
|
||||
uidCode.substring(20, 32) // 构造一个标准的 UUID 字符串
|
||||
|
||||
val pipe = if (pipeCode.equals("1")) {
|
||||
"mogogosafety"
|
||||
} else {
|
||||
"ehsafety"
|
||||
}
|
||||
val phoneLike = Radix91.base91ToBase10(phoneCode).toString()
|
||||
val phone = if (RegexUtils.isMobileExact(phoneLike)) {
|
||||
phoneLike
|
||||
}else{
|
||||
URLDecoder.decode(phoneCode?:"","UTF-8")
|
||||
}
|
||||
val lineId = Radix91.base91ToBase10(lineIdCode)
|
||||
val expiryTime = Radix91.base91ToBase10(expiryTimeCode)
|
||||
val bookingTime = Radix91.base91ToBase10(bookingTimeCode)
|
||||
val availableTimes = Radix91.base91ToBase10(availableTimesCode).toInt()
|
||||
|
||||
// 顺序可变部分
|
||||
val shiftsId:Long
|
||||
val startStationId:Long
|
||||
val ticketName:String
|
||||
when (Product.valueOf(bizType)) {
|
||||
Product.BUS -> {
|
||||
shiftsId = 0
|
||||
val startStationIdCode = split[13]
|
||||
startStationId = Radix91.base91ToBase10(startStationIdCode)
|
||||
ticketName = ""
|
||||
}
|
||||
Product.SHUTTLE -> {
|
||||
shiftsId = 0
|
||||
val ticketNameCode = split[13]
|
||||
ticketName =when (ticketNameCode) {
|
||||
"0" -> {
|
||||
"单站票"
|
||||
}
|
||||
"1" -> {
|
||||
"多站票"
|
||||
}
|
||||
"2" -> {
|
||||
"全站票"
|
||||
}
|
||||
"3" -> {
|
||||
"通勤票"
|
||||
}
|
||||
else -> {
|
||||
URLDecoder.decode(ticketNameCode?:"","UTF-8")
|
||||
}
|
||||
}
|
||||
startStationId = 0
|
||||
}
|
||||
Product.SCHEDULED -> {
|
||||
val shiftsIdCode = split[14]
|
||||
shiftsId = Radix91.base91ToBase10(shiftsIdCode)
|
||||
val ticketNameCode = split[13]
|
||||
ticketName =when (ticketNameCode) {
|
||||
"0" -> {
|
||||
"单站票"
|
||||
}
|
||||
"1" -> {
|
||||
"多站票"
|
||||
}
|
||||
"2" -> {
|
||||
"全站票"
|
||||
}
|
||||
"3" -> {
|
||||
"通勤票"
|
||||
}
|
||||
else -> {
|
||||
URLDecoder.decode(ticketNameCode?:"","UTF-8")
|
||||
}
|
||||
}
|
||||
startStationId = 0
|
||||
}
|
||||
else->{
|
||||
shiftsId = 0
|
||||
startStationId = 0
|
||||
ticketName = ""
|
||||
}
|
||||
}
|
||||
|
||||
return QrBean(version, orderNo, uid, phone, bizType, pipe, expiryTime,
|
||||
bookingTime, lineId, availableTimes, ticketSize, ticketName, tenantId.toLong(),
|
||||
shiftsId, startStationId
|
||||
)
|
||||
}catch (e:Exception){
|
||||
e.printStackTrace()
|
||||
}
|
||||
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析第一和第二版本的二维码
|
||||
*/
|
||||
private fun parseVersion1to2(params: MutableMap<String, String>): QrBean? {
|
||||
val expiryTime = params["expiryTime"]
|
||||
val bookingTime = params["bookingTime"]
|
||||
val lineId = params["lineId"]
|
||||
val availableTimes = params["availableTimes"]
|
||||
val orderNo = params["orderNo"]
|
||||
val uid = params["uid"]
|
||||
val phone = params["phone"]
|
||||
val ticketSize = params["ticketSize"]
|
||||
val ticketName = params["ticketName"]
|
||||
val type = params["type"]
|
||||
val pipe = params["pipe"]
|
||||
val startStationId = params["startStationId"]
|
||||
val tenantId = params["tenantId"]
|
||||
val shiftsId = params["shiftsId"]
|
||||
|
||||
if (orderNo is String && uid is String) {
|
||||
var phoneNum = ""
|
||||
if (phone is String) {
|
||||
if (RegexUtils.isMobileExact(phone)) {
|
||||
phoneNum = phone
|
||||
}else{
|
||||
phoneNum = phone
|
||||
}
|
||||
}
|
||||
var tempType = 0
|
||||
if (type is String) {
|
||||
when (type) {
|
||||
"shuttle" -> {
|
||||
tempType = 11
|
||||
}
|
||||
|
||||
"bus" -> {
|
||||
tempType = 10
|
||||
}
|
||||
|
||||
else -> {
|
||||
tempType = type.toInt() ?: 0
|
||||
}
|
||||
}
|
||||
} else {
|
||||
tempType = type?.toInt() ?: 0
|
||||
}
|
||||
try {
|
||||
val version = if (expiryTime != null && bookingTime != null && lineId != null) {
|
||||
1
|
||||
} else {
|
||||
0
|
||||
}
|
||||
return QrBean(
|
||||
version, orderNo, uid, phoneNum, tempType, pipe?:"",
|
||||
expiryTime?.toLong() ?: 0, bookingTime?.toLong() ?: 0,
|
||||
lineId?.toLong() ?: 0, availableTimes?.toInt() ?: 0,
|
||||
ticketSize?.toInt() ?: 0, URLDecoder.decode(ticketName?:"","UTF-8"),
|
||||
tenantId?.toLong() ?: 0, shiftsId?.toLong() ?: 0,
|
||||
startStationId?.toLong() ?: 0
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
CallerLogger.d(M_OCHCOMMON + TAG, "")
|
||||
// 通知司机屏二维码错误
|
||||
val writeOffDetail = WriteOffDetialMsg(code = 3001, msg = "出示错误二维码")
|
||||
OchChainLogManager.writeChainLogWriteOff("核销失败", "二维码错误+参数错误")
|
||||
CallerLogger.d(
|
||||
M_OCHCOMMON + TAG,
|
||||
"sendTaskDetailsToClients = " + GsonUtils.toJson(writeOffDetail)
|
||||
)
|
||||
LanSocketManager.sendMsgToServer(writeOffDetail)
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
private fun parseQuery(query: String?): MutableMap<String, String> {
|
||||
val params: MutableMap<String, String> = HashMap()
|
||||
if (query != null && !query.isEmpty()) {
|
||||
val pairs = query.split("&".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
|
||||
if(pairs.size>1) {
|
||||
for (pair in pairs) {
|
||||
val indexOfEquals = pair.indexOf("=")
|
||||
if (indexOfEquals == -1) {
|
||||
// 键无值
|
||||
params[pair] = ""
|
||||
} else {
|
||||
val key = pair.substring(0, indexOfEquals)
|
||||
val value = pair.substring(indexOfEquals + 1)
|
||||
params[key] = value
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return params
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.mogo.och.biz.qrcode
|
||||
|
||||
fun main() {
|
||||
|
||||
val value10 = "337197925358633123".toLong()
|
||||
val value92 = Radix91.decimalToBase91(value10)
|
||||
val old = Radix91.base91ToBase10(value92)
|
||||
println("value10:$value10")
|
||||
println("value92:$value92")
|
||||
println("old:$old")
|
||||
//337197925358633123
|
||||
//$#WFaRgz}
|
||||
|
||||
//1879008917469057024
|
||||
//3|bnEad7%o
|
||||
|
||||
//1736825612443
|
||||
//2}M3l*@
|
||||
|
||||
//1736784000000
|
||||
//2}LF-wM
|
||||
|
||||
//18811539480
|
||||
//2{R\zk
|
||||
|
||||
}
|
||||
|
||||
object Radix91 {
|
||||
val base32Chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^*()_-+=[]{};':./<>?`~|\\"
|
||||
fun decimalToBase91(decimal: Long): String {
|
||||
if (decimal == 0L) return "0"
|
||||
var num = decimal
|
||||
val base32 = StringBuilder()
|
||||
while (num > 0) {
|
||||
val remainder = num % 91
|
||||
base32.insert(0, base32Chars[remainder.toInt()])
|
||||
num /= 91
|
||||
}
|
||||
return base32.toString()
|
||||
}
|
||||
fun base91ToBase10(base92Number: String): Long {
|
||||
// 定义92进制的字符集
|
||||
var base10Number: Long = 0
|
||||
var power: Long = 1
|
||||
|
||||
// 从右到左遍历每一位
|
||||
for (char in base92Number.reversed()) {
|
||||
val index = base32Chars.indexOf(char)
|
||||
if (index == -1) {
|
||||
throw IllegalArgumentException("无效的92进制字符: $char")
|
||||
}
|
||||
base10Number += index * power
|
||||
power *= 91
|
||||
}
|
||||
|
||||
return base10Number
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,9 @@
|
||||
package com.mogo.och.common.module.manager.scnner
|
||||
package com.mogo.och.biz.qrcode
|
||||
|
||||
import android.net.Uri
|
||||
import com.mogo.eagle.core.data.enums.EventTypeEnumNew
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxType
|
||||
import com.mogo.eagle.core.data.msgbox.V2XMsg
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager.saveMsgBox
|
||||
import android.content.Context
|
||||
import com.alibaba.android.arouter.facade.annotation.Route
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
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
|
||||
@@ -13,10 +11,13 @@ import com.mogo.eagle.core.utilcode.util.GsonUtils
|
||||
import com.mogo.eagle.core.utilcode.util.StringUtils
|
||||
import com.mogo.och.common.module.biz.lansocket.IOchLanPassengerStatusListener
|
||||
import com.mogo.och.common.module.biz.lansocket.LoginLanPassengerSocket
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.WriteOffDevicesMsg
|
||||
import com.mogo.och.common.module.biz.scanner.BindStatus
|
||||
import com.mogo.och.common.module.biz.scanner.OpenStatus
|
||||
import com.mogo.och.common.module.biz.scanner.ScannerService
|
||||
import com.mogo.och.common.module.biz.scanner.StateChangeListener
|
||||
import com.mogo.och.common.module.constant.OchCommonConst
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.WriteOffDevicesMsg
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
import com.mogo.och.common.module.manager.socket.lan.ILanMessageListener
|
||||
import com.mogo.och.common.module.manager.socket.lan.LanSocketManager
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.DPMsgType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.WriteOffDetialMsg
|
||||
@@ -30,13 +31,14 @@ import java.util.concurrent.ConcurrentHashMap
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
|
||||
object ScannerManager : IOchLanPassengerStatusListener {
|
||||
@Route(path = OchCommonConst.BIZ_SCANNER)
|
||||
class ScannerManager : ScannerService {
|
||||
|
||||
private val TAG = "ScannerManager"
|
||||
|
||||
private val writeOfDevicefMsg = WriteOfDevicefMsg()
|
||||
|
||||
private val stateChanageListeners: ConcurrentHashMap<String, StateChangeListener> =
|
||||
ConcurrentHashMap()
|
||||
private val stateChanageListeners: ConcurrentHashMap<String, StateChangeListener> = ConcurrentHashMap()
|
||||
|
||||
private var bindStatus: BindStatus by Delegates.observable(BindStatus.NOTHING) { _, oldV, newV ->
|
||||
if (oldV != newV) {
|
||||
@@ -109,7 +111,7 @@ object ScannerManager : IOchLanPassengerStatusListener {
|
||||
|
||||
override fun onReceive(data: VerificationData?) {
|
||||
OchChainLogManager.writeChainLogScanner(
|
||||
TAG + "onActiveDataReceive",
|
||||
TAG + "ScannerManageronActiveDataReceive",
|
||||
"扫码结果:data:${data}"
|
||||
)
|
||||
data?.let {
|
||||
@@ -170,54 +172,20 @@ object ScannerManager : IOchLanPassengerStatusListener {
|
||||
|
||||
}
|
||||
|
||||
private val writeOfDevicefMsg = object : ILanMessageListener<WriteOffDevicesMsg> {
|
||||
override fun targetLan(): Class<WriteOffDevicesMsg> = WriteOffDevicesMsg::class.java
|
||||
override fun onLanMsgReceived(writeOffDevicesMsg: WriteOffDevicesMsg?){
|
||||
writeOffDevicesMsg?.let {
|
||||
if (writeOffDevicesMsg.isConnectScanner != null) {
|
||||
val reason = if (writeOffDevicesMsg.reason == null) "" else writeOffDevicesMsg.reason!!
|
||||
if (writeOffDevicesMsg.isConnectScanner==true) { // 链接成功
|
||||
saveMsgBox(
|
||||
MsgBoxBean(
|
||||
MsgBoxType.V2X,
|
||||
V2XMsg(
|
||||
EventTypeEnumNew.TYPE_DEVICE_STATUS_NORMAL.poiType,
|
||||
reason,
|
||||
EventTypeEnumNew.TYPE_DEVICE_STATUS_NORMAL.tts,
|
||||
""
|
||||
)
|
||||
)
|
||||
)
|
||||
} else { // 核验失败
|
||||
saveMsgBox(
|
||||
MsgBoxBean(
|
||||
MsgBoxType.V2X,
|
||||
V2XMsg(
|
||||
EventTypeEnumNew.TYPE_DEVICE_STATUS_ABNORMAL.poiType,
|
||||
reason,
|
||||
EventTypeEnumNew.TYPE_DEVICE_STATUS_ABNORMAL.tts,
|
||||
""
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
private val connect2DriverListener = object :IOchLanPassengerStatusListener{
|
||||
override fun onDriverConnectChangeListener(isConnect: Boolean) {
|
||||
if (isConnect) {
|
||||
sendScannerState()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
//监听司机端消息
|
||||
LoginLanPassengerSocket.addListener(TAG, this)
|
||||
// 核销设备信息
|
||||
LanSocketManager.registerSocketMessageListener(DPMsgType.TYPE_WRITEOFF_DEVICES_INFO.type,writeOfDevicefMsg)
|
||||
// 绑定状态
|
||||
DevicesManager.addBindStateChangeListener(TAG, onSerialPortListener)
|
||||
// 核销信息
|
||||
DevicesManager.addVerificationListener(TAG, onDeviceVerificationListener)
|
||||
override fun init(context: Context?) {
|
||||
|
||||
}
|
||||
|
||||
fun addStateChangeListener(tag: String, listener: StateChangeListener) {
|
||||
|
||||
override fun addStateChangeListener(tag: String, listener: StateChangeListener) {
|
||||
if (stateChanageListeners.containsKey(tag)) {
|
||||
return
|
||||
}
|
||||
@@ -225,30 +193,48 @@ object ScannerManager : IOchLanPassengerStatusListener {
|
||||
listener.stateChange(bindStatus, openStatus)
|
||||
}
|
||||
|
||||
fun removeListener(tag:String){
|
||||
override fun removeListener(tag:String){
|
||||
stateChanageListeners.remove(tag)
|
||||
}
|
||||
|
||||
override fun onDriverConnectChangeListener(isConnect: Boolean) {
|
||||
if (isConnect) {
|
||||
sendScannerState()
|
||||
|
||||
override fun load(){
|
||||
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
|
||||
// 核销设备信息
|
||||
LanSocketManager.registerSocketMessageListener(DPMsgType.TYPE_WRITEOFF_DEVICES_INFO.type, writeOfDevicefMsg)
|
||||
}else{
|
||||
//监听和司机端连接消息
|
||||
LoginLanPassengerSocket.addListener(TAG, connect2DriverListener)
|
||||
// 绑定状态
|
||||
DevicesManager.addBindStateChangeListener(TAG, onSerialPortListener)
|
||||
// 核销信息
|
||||
DevicesManager.addVerificationListener(TAG, onDeviceVerificationListener)
|
||||
}
|
||||
}
|
||||
|
||||
override fun release(){
|
||||
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
|
||||
LanSocketManager.unRegisterSocketMessageListener(
|
||||
DPMsgType.TYPE_WRITEOFF_DEVICES_INFO.type,
|
||||
writeOfDevicefMsg
|
||||
)
|
||||
}else{
|
||||
//监听司机端消息
|
||||
LoginLanPassengerSocket.removeListener(TAG)
|
||||
// 绑定状态
|
||||
DevicesManager.removeBindStateChangeListener(TAG)
|
||||
// 核销信息
|
||||
DevicesManager.removeVerificationListener(TAG)
|
||||
}
|
||||
}
|
||||
|
||||
fun parseParams(payload: String?) {
|
||||
val parse = Uri.parse("${OchCommonConst.getShuttleUrl()}?${payload}")
|
||||
val queryParameterNames = parse.queryParameterNames
|
||||
val mutableMapOf = mutableMapOf<String, String>()
|
||||
queryParameterNames.forEach {
|
||||
val queryParameter = parse.getQueryParameter(it)
|
||||
if (it != null && queryParameter != null) {
|
||||
mutableMapOf[it] = queryParameter
|
||||
}
|
||||
}
|
||||
if (mutableMapOf.isNotEmpty()) {
|
||||
val qrBean = QrParse.parse(payload)
|
||||
OchChainLogManager.writeChainLogWriteOff("解析数据","二维码解析数据:$qrBean")
|
||||
if (qrBean!=null) {
|
||||
if (stateChanageListeners.size > 0) {
|
||||
stateChanageListeners.forEach {
|
||||
it.value.parseData(mutableMapOf, payload)
|
||||
it.value.parseData(qrBean)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -313,16 +299,4 @@ object ScannerManager : IOchLanPassengerStatusListener {
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
enum class BindStatus {
|
||||
BIND_SUCCEED,
|
||||
BIND_FAILURE_UNINSTALLED,
|
||||
BIND_FAILURE_NO_PERMISSION_NOT_FOUND,
|
||||
EXCEPTION,
|
||||
NOTHING
|
||||
}
|
||||
|
||||
enum class OpenStatus {
|
||||
Open, Unopen
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.mogo.och.biz.qrcode
|
||||
|
||||
import com.mogo.eagle.core.data.enums.EventTypeEnumNew
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxType
|
||||
import com.mogo.eagle.core.data.msgbox.V2XMsg
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager.saveMsgBox
|
||||
import com.mogo.och.common.module.manager.socket.lan.ILanMessageListener
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.WriteOffDevicesMsg
|
||||
|
||||
class WriteOfDevicefMsg : ILanMessageListener<WriteOffDevicesMsg> {
|
||||
override fun targetLan(): Class<WriteOffDevicesMsg> = WriteOffDevicesMsg::class.java
|
||||
override fun onLanMsgReceived(writeOffDevicesMsg: WriteOffDevicesMsg?){
|
||||
writeOffDevicesMsg?.let {
|
||||
if (it.isConnectScanner != null) {
|
||||
val reason = it.reason ?: ""
|
||||
if (it.isConnectScanner==true) { // 链接成功
|
||||
saveMsgBox(
|
||||
MsgBoxBean(
|
||||
MsgBoxType.V2X,
|
||||
V2XMsg(
|
||||
EventTypeEnumNew.TYPE_DEVICE_STATUS_NORMAL.poiType,
|
||||
reason,
|
||||
EventTypeEnumNew.TYPE_DEVICE_STATUS_NORMAL.tts,
|
||||
""
|
||||
)
|
||||
)
|
||||
)
|
||||
} else { // 核验失败
|
||||
saveMsgBox(
|
||||
MsgBoxBean(
|
||||
MsgBoxType.V2X,
|
||||
V2XMsg(
|
||||
EventTypeEnumNew.TYPE_DEVICE_STATUS_ABNORMAL.poiType,
|
||||
reason,
|
||||
EventTypeEnumNew.TYPE_DEVICE_STATUS_ABNORMAL.tts,
|
||||
""
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,9 +4,12 @@ import android.content.Context
|
||||
import com.alibaba.android.arouter.facade.annotation.Route
|
||||
import com.mogo.commons.env.ProjectUtils
|
||||
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.och.biz.R
|
||||
import com.mogo.och.biz.skin.bean.SkinRespBean
|
||||
import com.mogo.och.biz.skin.net.OchSkinServiceManager
|
||||
import com.mogo.och.common.module.biz.login.ILoginCallback
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusManager
|
||||
import com.mogo.och.common.module.biz.skin.SkinService
|
||||
import com.mogo.och.common.module.constant.OchCommonConst
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
@@ -17,11 +20,21 @@ import com.mogo.skin.SkinManager
|
||||
import com.mogo.skin.utils.FileUtils
|
||||
|
||||
@Route(path = OchCommonConst.BIZ_SKIN)
|
||||
class SkinProvider : SkinService {
|
||||
class SkinProvider : SkinService, ILoginCallback {
|
||||
|
||||
private var context: Context?= null
|
||||
|
||||
private val TAG = "SkinProvider"
|
||||
private val TAG = M_OCHCOMMON+"SkinProvider"
|
||||
|
||||
init {
|
||||
d(TAG,"皮肤信息_监听租户")
|
||||
LoginStatusManager.addListener(TAG,this)
|
||||
}
|
||||
|
||||
override fun onTenantIdChange(tenantId: Long?) {
|
||||
d(TAG,"皮肤信息_租户变化重新请求皮肤包")
|
||||
loadNewSkin()
|
||||
}
|
||||
|
||||
override fun loadNewSkin() {
|
||||
OchChainLogManager.writeChainLogSkin("皮肤信息","请求皮肤信息")
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.mogo.och.biz.skin.bean
|
||||
|
||||
import com.mogo.eagle.core.data.BaseData
|
||||
import com.mogo.och.common.module.biz.login.LoginInfo
|
||||
|
||||
/**
|
||||
* Created by pangfan on 2021/8/19
|
||||
|
||||
@@ -1,19 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<LinearLayout 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="@dimen/dp_200"
|
||||
android:layout_height="@dimen/dp_400"
|
||||
android:layout_width="@dimen/dp_300"
|
||||
android:layout_height="@dimen/dp_680"
|
||||
android:orientation="vertical"
|
||||
android:background="@drawable/biz_login_error_info">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_business_bus"
|
||||
android:id="@+id/actv_business_bus_B1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:paddingTop="@dimen/dp_20"
|
||||
android:paddingBottom="@dimen/dp_20"
|
||||
android:text="公交模式"
|
||||
android:text="公交模式B1"
|
||||
android:textColor="@color/white"
|
||||
app:layout_constraintBottom_toTopOf="@+id/actv_business_charter"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_business_bus_B2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:paddingTop="@dimen/dp_20"
|
||||
android:paddingBottom="@dimen/dp_20"
|
||||
android:text="公交模式B2"
|
||||
android:textColor="@color/white"
|
||||
app:layout_constraintBottom_toTopOf="@+id/actv_business_charter"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
@@ -35,19 +50,34 @@
|
||||
app:layout_constraintTop_toBottomOf="@+id/actv_business_bus" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_business_shuttle"
|
||||
android:id="@+id/actv_business_shuttle_B1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="@dimen/dp_20"
|
||||
android:paddingBottom="@dimen/dp_20"
|
||||
android:gravity="center"
|
||||
android:text="接驳模式"
|
||||
android:text="接驳模式B1"
|
||||
android:textColor="@color/white"
|
||||
app:layout_constraintBottom_toTopOf="@+id/actv_business_taxi"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/actv_business_charter" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_business_shuttle_B2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="@dimen/dp_20"
|
||||
android:paddingBottom="@dimen/dp_20"
|
||||
android:gravity="center"
|
||||
android:text="接驳模式B2"
|
||||
android:textColor="@color/white"
|
||||
app:layout_constraintBottom_toTopOf="@+id/actv_business_taxi"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/actv_business_charter" />
|
||||
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_business_taxi"
|
||||
android:layout_width="match_parent"
|
||||
@@ -57,10 +87,25 @@
|
||||
android:gravity="center"
|
||||
android:text="出租车模式"
|
||||
android:textColor="@color/white"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/actv_debugview"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/actv_business_sweeper"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/actv_business_shuttle" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_business_sweeper"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="@dimen/dp_20"
|
||||
android:paddingBottom="@dimen/dp_20"
|
||||
android:gravity="center"
|
||||
android:text="清扫车模式"
|
||||
android:textColor="@color/white"
|
||||
app:layout_constraintBottom_toTopOf="@+id/actv_debugview"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/actv_business_taxi" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_debugview"
|
||||
android:layout_width="match_parent"
|
||||
@@ -73,7 +118,7 @@
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/actv_business_taxi" />
|
||||
app:layout_constraintTop_toBottomOf="@+id/actv_business_sweeper" />
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</LinearLayout>
|
||||
@@ -5,7 +5,6 @@
|
||||
android:id="@+id/biz_cl_passenger_main"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/biz_login_passenger_2560x1600"
|
||||
app:isUseSkin="true">
|
||||
|
||||
|
||||
@@ -13,12 +12,12 @@
|
||||
android:id="@+id/actv_connect_status"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="当前状态:连接司机屏中"
|
||||
android:textColor="@color/white"
|
||||
android:gravity="center"
|
||||
android:textSize="@dimen/dp_30"
|
||||
android:layout_marginStart="@dimen/dp_160"
|
||||
android:layout_marginEnd="@dimen/dp_160"
|
||||
android:gravity="center"
|
||||
android:text="当前状态:连接司机屏中"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/dp_30"
|
||||
app:layout_constraintBottom_toTopOf="@+id/actv_app_version"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_chainStyle="packed"
|
||||
@@ -28,10 +27,10 @@
|
||||
android:id="@+id/actv_app_version"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:layout_marginBottom="@dimen/dp_70"
|
||||
android:layout_marginStart="@dimen/dp_160"
|
||||
android:layout_marginEnd="@dimen/dp_160"
|
||||
android:layout_marginBottom="@dimen/dp_70"
|
||||
android:gravity="center"
|
||||
android:text="版本号:6.4.0"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/dp_30"
|
||||
@@ -1,73 +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"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/biz_cl_passenger_main"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/biz_login_passenger_1080x1920"
|
||||
app:isUseSkin="true">
|
||||
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_connect_status"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="当前状态:连接司机屏中"
|
||||
android:textColor="@color/white"
|
||||
android:gravity="center"
|
||||
android:layout_marginStart="@dimen/dp_160"
|
||||
android:layout_marginEnd="@dimen/dp_160"
|
||||
android:textSize="@dimen/dp_30"
|
||||
app:layout_constraintBottom_toTopOf="@+id/actv_app_version"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_app_version"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/dp_41"
|
||||
android:layout_marginStart="@dimen/dp_160"
|
||||
android:layout_marginEnd="@dimen/dp_160"
|
||||
android:gravity="center"
|
||||
android:text="版本号:6.4.0"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/dp_30"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent" />
|
||||
|
||||
<com.mogo.och.biz.login.ui.errorview.ErrorInfoView
|
||||
android:id="@+id/eiv_Info"
|
||||
android:layout_width="@dimen/dp_751"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
|
||||
<com.mogo.och.biz.login.ui.debugview.BusinessView
|
||||
android:id="@+id/bv_switch_business"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/biz_actv_login_show_sn"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/dp_50"
|
||||
android:layout_marginBottom="@dimen/dp_40"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/dp_30"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -1,76 +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"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/biz_cl_passenger_main"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/biz_login_passenger_1920x1080"
|
||||
app:isUseSkin="true">
|
||||
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_connect_status"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toTopOf="@+id/actv_app_version"
|
||||
android:text="当前状态:连接司机屏中"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginStart="@dimen/dp_160"
|
||||
android:layout_marginEnd="@dimen/dp_160"
|
||||
android:textSize="@dimen/dp_28"
|
||||
android:gravity="center"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_chainStyle="packed"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_app_version"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/dp_41"
|
||||
android:layout_marginStart="@dimen/dp_160"
|
||||
android:layout_marginEnd="@dimen/dp_160"
|
||||
android:text="版本号:6.4.0"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/dp_28"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
/>
|
||||
|
||||
<com.mogo.och.biz.login.ui.errorview.ErrorInfoView
|
||||
android:id="@+id/eiv_Info"
|
||||
android:layout_width="@dimen/dp_939"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
|
||||
<com.mogo.och.biz.login.ui.debugview.BusinessView
|
||||
android:id="@+id/bv_switch_business"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/biz_actv_login_show_sn"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/dp_50"
|
||||
android:layout_marginBottom="@dimen/dp_40"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/dp_30"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -0,0 +1,79 @@
|
||||
package com.mogo.och.biz.qrcode
|
||||
|
||||
import com.mogo.och.common.module.biz.scanner.QrBean
|
||||
import org.junit.Test
|
||||
|
||||
/**
|
||||
* Example local unit test, which will execute on the development machine (host).
|
||||
*
|
||||
* See [testing documentation](http://d.android.com/tools/testing).
|
||||
*/
|
||||
open class QrUnitTest {
|
||||
|
||||
@Test
|
||||
fun testData111() {
|
||||
println("-----"+Radix91.decimalToBase91(
|
||||
1892144642963742720))
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testData() {
|
||||
// 构建二维码信息
|
||||
val type = 1
|
||||
val version = 0
|
||||
val typeVersion = Radix91.decimalToBase91("$type${version.toString().padStart(2,'0')}".toLong())
|
||||
val tenantId = 233602957696827483
|
||||
val tenantldEncode = Radix91.decimalToBase91(tenantId)
|
||||
val orderNo = 1889600789505798144
|
||||
val orderNoEncode = Radix91.decimalToBase91(orderNo)
|
||||
val uid = "81ab22c914cb0ea286371c0d7e364ab8"
|
||||
val pipe = "1"
|
||||
val phone = 18811539480
|
||||
val phoneEncode = Radix91.decimalToBase91(phone)
|
||||
val lineId = 85L
|
||||
val lineIdEncode = Radix91.decimalToBase91(lineId)
|
||||
val expiryTime = System.currentTimeMillis()
|
||||
val expiryTimeEncode = Radix91.decimalToBase91(expiryTime)
|
||||
val bookingTime = 1739289600000
|
||||
val bookingTimeEncode = Radix91.decimalToBase91(bookingTime)
|
||||
val availableTimes = "1"
|
||||
val ticketSize = "1"
|
||||
val ticketName = "%E5%85%A8%E7%AB%99%E7%A5%A8"
|
||||
val shiftsId = 3422L
|
||||
val shiftsIdEncode = Radix91.decimalToBase91(shiftsId)
|
||||
// val startStationId = 3466L
|
||||
// val startStationIdEncode = Radix91.decimalToBase91(startStationId)
|
||||
|
||||
val qrInfo2 = "$typeVersion,$tenantldEncode,$orderNoEncode,$uid,$pipe,$phoneEncode,$lineIdEncode,$expiryTimeEncode,$bookingTimeEncode,$availableTimes,$ticketSize,$ticketName,$shiftsIdEncode"
|
||||
|
||||
println(qrInfo2)
|
||||
val qrBean2 = QrParse.parse(qrInfo2)
|
||||
|
||||
println("${type}_${qrBean2?.bizType}")
|
||||
println("${version}_${qrBean2?.version}")
|
||||
println("${tenantId}_${qrBean2?.tenantId}")
|
||||
println("${orderNo}_${qrBean2?.orderNo}")
|
||||
println("${uid}_${qrBean2?.uid}")
|
||||
println("${pipe}_${qrBean2?.pipe}")
|
||||
println("${phone}_${qrBean2?.phone}")
|
||||
println("${lineId}_${qrBean2?.lineId}")
|
||||
println("${expiryTime}_${qrBean2?.expiryTime}")
|
||||
println("${bookingTime}_${qrBean2?.bookingTime}")
|
||||
println("${availableTimes}_${qrBean2?.availableTimes}")
|
||||
println("${ticketSize}_${qrBean2?.ticketSize}")
|
||||
println("${ticketName}_${qrBean2?.ticketName}")
|
||||
println("${shiftsId}_${qrBean2?.shiftsId}")
|
||||
//println("${startStationId}_${qrBean2?.startStationId}")
|
||||
|
||||
|
||||
val qrInfo1 = "orderNo=1871744897569038336&uid=828aa91f-49a1-f9b3-4526-f58acda9df60&pipe=mogogosafety&phone=houyanli&lineId=134&expiryTime=1735094149070&bookingTime=1735056000000&tenantId=337197925358633123&availableTimes=1&ticketSize=1&ticketName=%E9%80%9A%E5%8B%A4%E7%A5%A8%E3%81%AE&type=14&shiftsId=4249"
|
||||
val qrBean1 = QrParse.parse(qrInfo1)
|
||||
println(qrBean1)
|
||||
|
||||
val qrInfo0 = "orderNo=1878747772463988736&uid=4fda39cf-27a7-b49e-52ec-c566c3bc2fb8&type=shuttle&pipe=ehsafety&phone=13534015919"
|
||||
val qrBean0 = QrParse.parse(qrInfo0)
|
||||
println(qrBean0)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
plugins {
|
||||
id 'com.android.library'
|
||||
id 'org.jetbrains.kotlin.android'
|
||||
id 'kotlin-kapt'
|
||||
id 'kotlin-android-extensions'
|
||||
}
|
||||
|
||||
@@ -10,6 +11,14 @@ android {
|
||||
minSdkVersion rootProject.ext.android.minSdkVersion
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
consumerProguardFiles "consumer-rules.pro"
|
||||
|
||||
kapt {
|
||||
useBuildCache = false
|
||||
arguments {
|
||||
arg("AROUTER_MODULE_NAME", project.getName())
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
@@ -50,6 +59,9 @@ dependencies {
|
||||
testImplementation project(':OCH:common:bridge')
|
||||
testImplementation 'junit:junit:4.12'
|
||||
|
||||
implementation rootProject.ext.dependencies.arouter
|
||||
kapt rootProject.ext.dependencies.aroutercompiler
|
||||
|
||||
|
||||
if (Boolean.valueOf(USE_MAVEN_PACKAGE)) {
|
||||
implementation rootProject.ext.dependencies.mogo_core_function_call
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
package com.mogo.och.bridge
|
||||
|
||||
import android.content.Context
|
||||
import com.alibaba.android.arouter.facade.annotation.Route
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.eagle.core.function.call.base.CallerBase
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON
|
||||
import com.mogo.eagle.core.utilcode.util.CoordinateUtils
|
||||
import com.mogo.och.bridge.autopilot.location.OchLocationManager
|
||||
import com.mogo.och.bridge.distance.TrajectoryAndDistanceManager
|
||||
import com.mogo.och.bridge.bridge.OchBridgeManager
|
||||
import com.mogo.och.bridge.trajectory.TrajectoryManager
|
||||
import com.mogo.och.common.module.biz.birdge.BridgeService
|
||||
import com.mogo.och.common.module.biz.birdge.BridgeListener
|
||||
import com.mogo.och.common.module.constant.OchCommonConst
|
||||
|
||||
|
||||
/**
|
||||
* eye 桥
|
||||
*/
|
||||
@Route(path = OchCommonConst.BIZ_Bridge)
|
||||
class BridgeProvider : BridgeService, CallerBase<BridgeListener>() {
|
||||
|
||||
private var context: Context? = null
|
||||
|
||||
private val tag = M_OCHCOMMON + "BridgeProvider"
|
||||
|
||||
|
||||
override fun init(context: Context?) {
|
||||
this.context = context
|
||||
OchBridgeManager.load()
|
||||
TrajectoryManager.load()
|
||||
}
|
||||
|
||||
override fun setDistanceStation(startLocation: MogoLocation?, endLocation: MogoLocation?, lineId: Long?) {
|
||||
CallerLogger.d(tag,"distance 设置起始站点的定位")
|
||||
TrajectoryAndDistanceManager.setStationPoint(startLocation,endLocation,lineId)
|
||||
}
|
||||
|
||||
override fun distance2Point(gcjLat: Double, gcjLon: Double): Float {
|
||||
OchLocationManager.getGCJ02Location().let {
|
||||
return CoordinateUtils.calculateLineDistance(
|
||||
it.longitude,
|
||||
it.latitude,
|
||||
gcjLon,
|
||||
gcjLat
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun addBridgeListener(tag: String, listener: BridgeListener) {
|
||||
addListener(tag,listener)
|
||||
}
|
||||
|
||||
override fun removeBridgeListener(tag: String) {
|
||||
removeListener(tag)
|
||||
}
|
||||
|
||||
override fun doSomeAfterAddListener(tag: String, listener: BridgeListener) {
|
||||
// 轨迹和距离回调
|
||||
TrajectoryManager.doSomeAfterBridgeListener()
|
||||
}
|
||||
|
||||
fun invokeTrajectoryHaveDataListener(haveTrajectoryInfos:Boolean){
|
||||
M_LISTENERS.forEach{
|
||||
it.value.onTrajectoryHaveData(haveTrajectoryInfos)
|
||||
}
|
||||
}
|
||||
|
||||
fun invokePredictionHavaData(havePredictionInfos: Boolean) {
|
||||
M_LISTENERS.forEach{
|
||||
it.value.onPredictionHavaData(havePredictionInfos)
|
||||
}
|
||||
}
|
||||
|
||||
fun invokeTrajectoryPoints(trajectoryList: MutableList<MogoLocation>){
|
||||
M_LISTENERS.forEach {
|
||||
it.value.onTrajectoryPointsListener(trajectoryList)
|
||||
}
|
||||
}
|
||||
|
||||
fun invokeTrajectoryDistance(distance:Double){
|
||||
M_LISTENERS.forEach {
|
||||
it.value.onTrajectoryDistanceListener(distance)
|
||||
}
|
||||
}
|
||||
|
||||
fun invokeTrajectoryPointAndDistance(trajectoryList: MutableList<MogoLocation>,distance:Double){
|
||||
M_LISTENERS.forEach {
|
||||
it.value.onTrajectoryPointsAndDistanceListener(trajectoryList, distance)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
package com.mogo.och.bridge
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import com.alibaba.android.arouter.launcher.ARouter
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON
|
||||
import com.mogo.och.common.module.constant.OchCommonConst
|
||||
import com.mogo.och.common.module.manager.loop.BizLoopManager
|
||||
import com.mogo.och.common.module.manager.loop.LoopInfo
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
object BridgeServiceManager {
|
||||
|
||||
private const val TAG = M_OCHCOMMON+"BridgeManager"
|
||||
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
private var bridgeService: BridgeProvider? =
|
||||
ARouter.getInstance().build(OchCommonConst.BIZ_Bridge).navigation() as BridgeProvider
|
||||
|
||||
private var trajectoryTime = 0L
|
||||
private var predictionTime = 0L
|
||||
|
||||
init {
|
||||
BizLoopManager.setLoopFunction(TAG,
|
||||
LoopInfo(2, ::checkTimeout, immediately = false, scheduler = Schedulers.io())
|
||||
)
|
||||
}
|
||||
|
||||
// 是否有车前引导线
|
||||
private var haveTrajectoryInfo: Boolean by Delegates.observable(false) { _, oldValue, newValue ->
|
||||
if (oldValue != newValue) {
|
||||
bridgeService?.invokeTrajectoryHaveDataListener(newValue)
|
||||
CallerLogger.d(TAG,"haveTrajectoryInfo 发生变化:${newValue}")
|
||||
}
|
||||
trajectoryTime = System.currentTimeMillis()
|
||||
|
||||
}
|
||||
|
||||
// 是否有预测数据
|
||||
private var havePredictionInfo: Boolean by Delegates.observable(false) { _, oldValue, newValue ->
|
||||
if (oldValue != newValue) {
|
||||
bridgeService?.invokePredictionHavaData(newValue)
|
||||
CallerLogger.d(TAG,"havePredictionInfo 发生变化:${newValue}")
|
||||
}
|
||||
predictionTime = System.currentTimeMillis()
|
||||
}
|
||||
|
||||
fun checkTimeout(){
|
||||
if(System.currentTimeMillis() - trajectoryTime>2_000){
|
||||
haveTrajectoryInfo = false
|
||||
CallerLogger.d(TAG,"超时设置为false:haveTrajectoryInfo ${haveTrajectoryInfo}")
|
||||
}
|
||||
if(System.currentTimeMillis() - predictionTime>2_000){
|
||||
havePredictionInfo = false
|
||||
CallerLogger.d(TAG,"超时设置为false:havePredictionInfo ${havePredictionInfo}")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun invokePlanningListener(haveTrajectoryInfos:Boolean){
|
||||
this.haveTrajectoryInfo = haveTrajectoryInfos
|
||||
}
|
||||
|
||||
fun invokePredictionHaveData(havePredictionInfos:Boolean){
|
||||
this.havePredictionInfo = havePredictionInfos
|
||||
}
|
||||
|
||||
fun invokeTrajectoryPoints(trajectoryList: MutableList<MogoLocation>){
|
||||
this.bridgeService?.invokeTrajectoryPoints(trajectoryList)
|
||||
}
|
||||
|
||||
fun invokeTrajectoryDistance(distance:Double){
|
||||
this.bridgeService?.invokeTrajectoryDistance(distance)
|
||||
}
|
||||
fun invokeTrajectoryPointsAndDistance(trajectoryList: MutableList<MogoLocation>,distance:Double){
|
||||
this.bridgeService?.invokeTrajectoryPointAndDistance(trajectoryList, distance)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -15,7 +15,7 @@ import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import com.mogo.och.common.module.R
|
||||
import com.mogo.och.bridge.autopilot.autopilot.bean.ArrivedStation
|
||||
import com.mogo.och.bridge.autopilot.line.LineManager
|
||||
import com.mogo.och.bridge.autopilot.trajectory.TrajectoryManager
|
||||
import com.mogo.och.bridge.trajectory.TrajectoryManager
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
import com.mogo.och.common.module.utils.CallerBase
|
||||
import com.zhjt.mogo.adas.common.MessageType
|
||||
@@ -177,6 +177,9 @@ object OchAutoPilotStatusListenerManager : CallerBase<IOchAutopilotStatusListene
|
||||
reason: String?
|
||||
) {
|
||||
super.onAutopilotIpcConnectStatusChanged(status, reason)
|
||||
if (!CallerAutoPilotStatusListenerManager.isConnect()) {// 工控机断开了
|
||||
OchAutopilotAnalytics.cancleStartAutopilot()
|
||||
}
|
||||
M_LISTENERS.forEach {
|
||||
val listener = it.value
|
||||
listener.onAutopilotIpcConnectStatusChanged(status,reason)
|
||||
|
||||
@@ -265,6 +265,13 @@ object OchAutopilotAnalytics {
|
||||
MogoAnalyticUtils.track(getEventKeyClickStartAutopilot(), params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消自驾15s等待
|
||||
*/
|
||||
fun cancleStartAutopilot(){
|
||||
RxUtils.disposeSubscribe(timeOutDisposable)
|
||||
}
|
||||
|
||||
// 无人化taxi event_key_unmanned_taxi_start_service *
|
||||
// bus event_key_och_bus_start_service *
|
||||
// shuttle event_key_och_bus_start_service *
|
||||
|
||||
@@ -391,7 +391,11 @@ object LineManager : CallerBase<ILineCallback>() {
|
||||
parameters?.endName = end.name
|
||||
parameters?.startLatLon = AutoPilotLonLat(start.lat, start.lon)
|
||||
parameters?.endLatLon = AutoPilotLonLat(end.lat, end.lon)
|
||||
parameters?.vehicleType = 10
|
||||
if(AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)){
|
||||
parameters?.vehicleType = 9
|
||||
}else{
|
||||
parameters?.vehicleType = 10
|
||||
}
|
||||
parameters?.orderId = this.teleOrderId
|
||||
parameters?.firstStationFlag = autopilotFlag
|
||||
parameters?.firstAutopilotFlag = teleIsFirstStartAutopilot
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.mogo.och.bridge.bridge
|
||||
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningTrajectoryListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerPlanningTrajectoryListenerManager
|
||||
import com.mogo.eagle.core.function.call.base.CallerBase
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON
|
||||
import com.mogo.och.bridge.BridgeServiceManager
|
||||
import prediction2025.Prediction2025
|
||||
import mogo.telematics.pad.MessagePad
|
||||
|
||||
object OchBridgeManager: CallerBase<IMoGoPlanningTrajectoryListener>(),
|
||||
IMoGoPlanningTrajectoryListener, IMoGoAutopilotIdentifyListener {
|
||||
private val TAG = "${M_OCHCOMMON}OchPlanningListenerManager"
|
||||
|
||||
fun load(){
|
||||
CallerPlanningTrajectoryListenerManager.addListener(TAG,this)
|
||||
CallerAutopilotIdentifyListenerManager.addListener(TAG,this)
|
||||
}
|
||||
|
||||
fun release(){
|
||||
CallerPlanningTrajectoryListenerManager.removeListener(TAG)
|
||||
}
|
||||
|
||||
/**
|
||||
* 引导线轨迹
|
||||
*/
|
||||
override fun onAutopilotTrajectory(trajectoryInfos: MutableList<MessagePad.TrajectoryPoint>) {
|
||||
if(trajectoryInfos.isEmpty()){
|
||||
BridgeServiceManager.invokePlanningListener(false)
|
||||
}else{
|
||||
BridgeServiceManager.invokePlanningListener(true)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPredictionObstacleTrajectory(predictionObjects: Prediction2025.mPredictionObjects) {
|
||||
if (predictionObjects.objsAppList==null) {
|
||||
BridgeServiceManager.invokePredictionHaveData(false)
|
||||
}else{
|
||||
BridgeServiceManager.invokePredictionHaveData(true)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -29,38 +29,37 @@ object CheckVinManager : IMoGoAutopilotCarConfigListener {
|
||||
fun getVin(): String {
|
||||
var delineVin = CallerAutoPilotControlManager.getVIN()
|
||||
if(delineVin.isEmpty()){
|
||||
delineVin = LoginStatusManager.getLoginInfo()?.vin?:""
|
||||
delineVin = LoginStatusManager.getOchCarInfo()?.vin?:""
|
||||
}
|
||||
return delineVin
|
||||
}
|
||||
|
||||
private fun checkVin() {
|
||||
LoginStatusManager.getLoginInfo()?.let {loginInfo ->
|
||||
val serverVin = loginInfo.vin
|
||||
LoginStatusManager.getOchCarInfo()?.vin?.let { serverVin ->
|
||||
val delineVin = CallerAutoPilotControlManager.getVIN()
|
||||
OchChainLogManager.writeChainLog(
|
||||
"checkVin",
|
||||
"5分钟检测VIN:服务器Vin:${serverVin}-----底盘Vin:${delineVin}", true,
|
||||
CheckVinErrorDialog.EVENT_KEY_INFO_CHECK_VIN
|
||||
)
|
||||
if(serverVin.isNullOrBlank()){
|
||||
if (serverVin.isNullOrBlank()) {
|
||||
return
|
||||
}
|
||||
|
||||
if(delineVin.isNullOrBlank()){
|
||||
if (delineVin.isNullOrBlank()) {
|
||||
return
|
||||
}
|
||||
|
||||
if(serverVin!=delineVin){
|
||||
if (serverVin != delineVin) {
|
||||
val topActivity = ActivityUtils.getTopActivity()
|
||||
topActivity?.let {
|
||||
UiThreadHandler.post({
|
||||
if(checkVinErrorDialog !=null&& checkVinErrorDialog!!.isShowing){
|
||||
if (checkVinErrorDialog != null && checkVinErrorDialog!!.isShowing) {
|
||||
return@post
|
||||
}
|
||||
checkVinErrorDialog = CheckVinErrorDialog(it)
|
||||
checkVinErrorDialog?.showDialog()
|
||||
},UiThreadHandler.MODE.QUEUE)
|
||||
}, UiThreadHandler.MODE.QUEUE)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ import com.mogo.eagle.core.utilcode.util.LocationUtils
|
||||
import com.mogo.och.common.module.constant.OchCommonConst
|
||||
import com.mogo.och.bridge.autopilot.autopilot.OchAutopilotAnalytics
|
||||
import com.mogo.och.bridge.autopilot.location.OchLocationManager
|
||||
import com.mogo.och.bridge.autopilot.trajectory.TrajectoryCache
|
||||
import com.mogo.och.bridge.trajectory.TrajectoryCache
|
||||
import com.mogo.och.common.module.manager.loop.BizLoopManager
|
||||
import com.mogo.och.common.module.manager.loop.LoopInfo
|
||||
import com.mogo.och.bridge.utils.CoordinateCalculateRouteUtil
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bridge.autopilot.trajectory
|
||||
package com.mogo.och.bridge.trajectory
|
||||
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bridge.autopilot.trajectory
|
||||
package com.mogo.och.bridge.trajectory
|
||||
|
||||
import com.elegant.network.utils.GsonUtil
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bridge.autopilot.trajectory
|
||||
package com.mogo.och.bridge.trajectory
|
||||
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
@@ -7,6 +7,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListener
|
||||
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.CoordinateUtils
|
||||
import com.mogo.och.bridge.BridgeServiceManager
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager.writeChainLog
|
||||
import com.mogo.och.common.module.utils.CallerBase
|
||||
@@ -14,7 +15,7 @@ import com.mogo.och.bridge.utils.CoordinateCalculateRouteUtil
|
||||
import com.zhjt.mogo.adas.data.bean.MogoReport
|
||||
import mogo.telematics.pad.MessagePad
|
||||
|
||||
object TrajectoryManager : CallerBase<ITrajectoryListListener>(),IMoGoPlanningRottingListener {
|
||||
object TrajectoryManager : CallerBase<ITrajectoryListListener>(), IMoGoPlanningRottingListener {
|
||||
const val TAG = "TrajectoryManager"
|
||||
|
||||
private val downLoadSuccessLineIds = mutableListOf<Long>()
|
||||
@@ -41,7 +42,7 @@ object TrajectoryManager : CallerBase<ITrajectoryListListener>(),IMoGoPlanningR
|
||||
CallerPlanningRottingListenerManager.addListener(TAG, this)
|
||||
}
|
||||
|
||||
private var lineId:Long?=0
|
||||
private var lineId: Long? = 0
|
||||
|
||||
override fun onAutopilotRotting(globalPathResp: MessagePad.GlobalPathResp?) {
|
||||
CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "onAutopilotRotting: 收到轨迹")
|
||||
@@ -91,36 +92,64 @@ object TrajectoryManager : CallerBase<ITrajectoryListListener>(),IMoGoPlanningR
|
||||
M_LISTENERS.forEach {
|
||||
it.value.trajectoryDistanceCallback(maxDistanceAllPoint)
|
||||
}
|
||||
BridgeServiceManager.invokeTrajectoryPoints(mRoutePoints)
|
||||
BridgeServiceManager.invokeTrajectoryDistance(maxDistanceAllPoint)
|
||||
BridgeServiceManager.invokeTrajectoryPointsAndDistance(mRoutePoints,maxDistanceAllPoint)
|
||||
}
|
||||
|
||||
private fun addDownLoadSuccessLine(lineId:Long){
|
||||
if(lineId>0){
|
||||
OchChainLogManager.writeChainLog("轨迹监控", " 轨迹下载成功${lineId}", true, OchChainLogManager.EVENT_KEY_INFE_WITH_TRAJECTORY)
|
||||
override fun doSomeAfterAddListener(tag: String, listener: ITrajectoryListListener) {
|
||||
if(mRoutePoints.isNotEmpty()) {
|
||||
M_LISTENERS.forEach {
|
||||
it.value.trajectoryCallback(mRoutePoints)
|
||||
}
|
||||
M_LISTENERS.forEach {
|
||||
it.value.trajectoryDistanceCallback(maxDistanceAllPoint)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun doSomeAfterBridgeListener(){
|
||||
BridgeServiceManager.invokeTrajectoryPoints(mRoutePoints)
|
||||
BridgeServiceManager.invokeTrajectoryDistance(maxDistanceAllPoint)
|
||||
BridgeServiceManager.invokeTrajectoryPointsAndDistance(mRoutePoints,maxDistanceAllPoint)
|
||||
}
|
||||
|
||||
private fun addDownLoadSuccessLine(lineId: Long) {
|
||||
if (lineId > 0) {
|
||||
OchChainLogManager.writeChainLog(
|
||||
"轨迹监控",
|
||||
" 轨迹下载成功${lineId}",
|
||||
true,
|
||||
OchChainLogManager.EVENT_KEY_INFE_WITH_TRAJECTORY
|
||||
)
|
||||
downLoadSuccessLineIds.add(lineId)
|
||||
}
|
||||
}
|
||||
private fun removeDownLoadSuccessLine(lineId:Long){
|
||||
if(lineId>0&& downLoadSuccessLineIds.contains(lineId)){
|
||||
|
||||
private fun removeDownLoadSuccessLine(lineId: Long) {
|
||||
if (lineId > 0 && downLoadSuccessLineIds.contains(lineId)) {
|
||||
downLoadSuccessLineIds.remove(lineId)
|
||||
}
|
||||
}
|
||||
|
||||
fun carDownLoadTrajectoryLog(code: String?, lineId: Long){
|
||||
|
||||
fun carDownLoadTrajectoryLog(code: String?, lineId: Long) {
|
||||
when (code) {
|
||||
MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_START -> {
|
||||
MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_START -> {
|
||||
writeTrajectoryLog("轨迹开始下载")
|
||||
M_LISTENERS.forEach {
|
||||
it.value.onDownLoadStart(lineId)
|
||||
}
|
||||
}
|
||||
MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_SUCCESS -> {
|
||||
|
||||
MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_SUCCESS -> {
|
||||
writeTrajectoryLog("轨迹下载成功")
|
||||
addDownLoadSuccessLine(lineId)
|
||||
M_LISTENERS.forEach {
|
||||
it.value.onDownLoadSuccess(lineId)
|
||||
}
|
||||
}
|
||||
MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_FAILURE -> {
|
||||
|
||||
MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_FAILURE -> {
|
||||
writeTrajectoryLog("轨迹下载失败,本地无对应轨迹")
|
||||
// 更新轨迹没有更新lineId 第二次下载失败 删除App成功缓存(概率很低)
|
||||
removeDownLoadSuccessLine(lineId)
|
||||
@@ -128,49 +157,60 @@ object TrajectoryManager : CallerBase<ITrajectoryListListener>(),IMoGoPlanningR
|
||||
it.value.onDownLoadFail(lineId)
|
||||
}
|
||||
}
|
||||
MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_WARNING -> {
|
||||
|
||||
MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_WARNING -> {
|
||||
writeTrajectoryLog("轨迹下载失败,本地有对应轨迹,认为成功")
|
||||
M_LISTENERS.forEach {
|
||||
it.value.onDownLoadSuccess(lineId)
|
||||
}
|
||||
}
|
||||
|
||||
MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_TIMEOUT -> {
|
||||
writeTrajectoryLog("轨迹下载超时")
|
||||
M_LISTENERS.forEach {
|
||||
it.value.onDownLoadTimeout(lineId)
|
||||
}
|
||||
}
|
||||
MogoReport.Code.Info.ISSM.FUNC_AUTO_PILOT_READY -> {
|
||||
|
||||
MogoReport.Code.Info.ISSM.FUNC_AUTO_PILOT_READY -> {
|
||||
writeTrajectoryLog("再次发起下载、 ssm ready,再次发起下载")
|
||||
M_LISTENERS.forEach {
|
||||
it.value.onDownLoadReady(lineId)
|
||||
}
|
||||
}
|
||||
|
||||
MogoReport.Code.Error.EMAP.TRA_LOAD_FAILED -> {
|
||||
writeTrajectoryLog("onAutopilotGuardian() 加载轨迹文件失败")
|
||||
M_LISTENERS.forEach {
|
||||
it.value.onLoadFail(lineId)
|
||||
}
|
||||
}
|
||||
MogoReport.Code.Error.EMAP.TRA_NOT_EXIST -> {
|
||||
|
||||
MogoReport.Code.Error.EMAP.TRA_NOT_EXIST -> {
|
||||
writeTrajectoryLog("onAutopilotGuardian() 无法找到轨迹文件")
|
||||
M_LISTENERS.forEach {
|
||||
it.value.onTrajectoryNotExist(lineId)
|
||||
}
|
||||
}
|
||||
MogoReport.Code.Error.EMAP.ATTITUDE_INIT_FAILED->{
|
||||
|
||||
MogoReport.Code.Error.EMAP.ATTITUDE_INIT_FAILED -> {
|
||||
writeTrajectoryLog("onAutopilotGuardian() 当前位置距离轨迹距离大于15m")
|
||||
|
||||
M_LISTENERS.forEach {
|
||||
it.value.onDistanceWithTrajectory(lineId)
|
||||
}
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
private fun writeTrajectoryLog(message:String){
|
||||
|
||||
private fun writeTrajectoryLog(message: String) {
|
||||
writeChainLog("轨迹监控", message, true, OchChainLogManager.EVENT_KEY_INFE_WITH_TRAJECTORY)
|
||||
}
|
||||
|
||||
fun load() {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -64,9 +64,6 @@ dependencies {
|
||||
implementation rootProject.ext.dependencies.amapnavi3dmap
|
||||
implementation rootProject.ext.dependencies.rxandroid
|
||||
|
||||
// 硬件管理
|
||||
implementation project(":libraries:mogo-hardware-devices")
|
||||
|
||||
implementation rootProject.ext.dependencies.arouter
|
||||
kapt rootProject.ext.dependencies.aroutercompiler
|
||||
|
||||
|
||||
@@ -34,14 +34,15 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.eagle.core.utilcode.util.ActivityUtils
|
||||
import com.mogo.eagle.core.utilcode.util.GsonUtils
|
||||
import com.mogo.eagle.core.utilcode.util.ThreadUtils
|
||||
import com.mogo.och.common.module.biz.birdge.BridgeManager
|
||||
import com.mogo.och.common.module.biz.order.OrderManager
|
||||
import com.mogo.och.common.module.debug.location.MogoLocationExit
|
||||
import com.mogo.och.common.module.manager.loop.BizLoopManager
|
||||
import com.mogo.och.common.module.manager.scnner.ScannerManager
|
||||
//import com.mogo.och.bridge.distance.TrajectoryAndDistanceManager
|
||||
//import com.mogo.och.bridge.utils.CoordinateCalculateRouteUtil
|
||||
//import com.mogo.och.bridge.utils.CoordinateCalculateRouteUtil
|
||||
import com.mogo.och.common.module.view.DebugFloatWindow
|
||||
import com.mogo.och.common.module.wigets.media.MediaBeanManager
|
||||
import com.zhjt.mogo.adas.data.bean.AutopilotStatistics
|
||||
import mogo.telematics.pad.MessagePad
|
||||
import mogo_msg.MogoReportMsg
|
||||
@@ -71,6 +72,7 @@ object DebugDataDispatch {
|
||||
const val scanner = "scanner"
|
||||
const val ota = "ota"
|
||||
const val video = "video"
|
||||
const val mediaMusic = "mediaAndMusic"
|
||||
|
||||
// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "location" --es path "1111/11111"
|
||||
// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "globalPath" --es path "sy73.json"
|
||||
@@ -100,6 +102,11 @@ object DebugDataDispatch {
|
||||
|
||||
}
|
||||
when (type) {
|
||||
mediaMusic -> {
|
||||
val musicList = MediaBeanManager.getMusicList()
|
||||
val mediaList = MediaBeanManager.getMediaList()
|
||||
CallerLogger.d(TAG,"${mediaList}\n${musicList}")
|
||||
}
|
||||
video -> {
|
||||
val ota = intent.getIntExtra("video",0)
|
||||
// rtmp://video.zhidaozhixing.com/live/861130041693196C_2
|
||||
@@ -127,7 +134,7 @@ object DebugDataDispatch {
|
||||
scanner -> {
|
||||
val qrInfo = intent.getStringExtra("qrInfo")
|
||||
BizLoopManager.runInIoThread{
|
||||
ScannerManager.parseParams("orderNo=1871744897569038336&uid=828aa91f-49a1-f9b3-4526-f58acda9df60&pipe=mogogosafety&phone=houyanli&lineId=134&expiryTime=1735094149070&bookingTime=1735056000000&tenantId=337197925358633123&availableTimes=1&ticketSize=1&ticketName=%E9%80%9A%E5%8B%A4%E7%A5%A8%E3%81%AE&type=14&shiftsId=4249")
|
||||
//ScannerManager.parseParams("orderNo=1871744897569038336&uid=828aa91f-49a1-f9b3-4526-f58acda9df60&pipe=mogogosafety&phone=houyanli&lineId=134&expiryTime=1735094149070&bookingTime=1735056000000&tenantId=337197925358633123&availableTimes=1&ticketSize=1&ticketName=%E9%80%9A%E5%8B%A4%E7%A5%A8%E3%81%AE&type=14&shiftsId=4249")
|
||||
}
|
||||
}
|
||||
globalPathMock -> {
|
||||
@@ -256,16 +263,17 @@ object DebugDataDispatch {
|
||||
}
|
||||
|
||||
fun setStation(startLon:Double,startLat:Double,endLon:Double,endLat:Double,lineID:Long){
|
||||
// if(startLon<0||startLat<0||endLon<0||endLat<0||lineID<0){
|
||||
// TrajectoryAndDistanceManager.setStationPoint(null,null,-1)
|
||||
// }
|
||||
// val startLocation = MogoLocation()
|
||||
// startLocation.longitude = startLon
|
||||
// startLocation.latitude = startLat
|
||||
// val endLocation = MogoLocation()
|
||||
// endLocation.longitude = endLon
|
||||
// endLocation.latitude = endLat
|
||||
// TrajectoryAndDistanceManager.setStationPoint(startLocation,endLocation,lineID)
|
||||
if(startLon<0||startLat<0||endLon<0||endLat<0||lineID<0){
|
||||
BridgeManager.setDistanceStation(null,null,-1)
|
||||
}
|
||||
val startLocation = MogoLocation()
|
||||
startLocation.longitude = startLon
|
||||
startLocation.latitude = startLat
|
||||
val endLocation = MogoLocation()
|
||||
endLocation.longitude = endLon
|
||||
endLocation.latitude = endLat
|
||||
|
||||
BridgeManager.setDistanceStation(startLocation,endLocation,lineID)
|
||||
}
|
||||
|
||||
fun getLocaitonByLog(path:String) {
|
||||
@@ -285,7 +293,7 @@ object DebugDataDispatch {
|
||||
newBuilder.heading = list.msg.GnssInfo.heading
|
||||
newBuilder.gnssSpeed = list.msg.GnssInfo.gnssSpeed
|
||||
CallerChassisGnssListenerManager.invokeChassisGnssListener(newBuilder.build())
|
||||
Thread.sleep(100)
|
||||
Thread.sleep(50)
|
||||
}
|
||||
} catch (e: IOException) {
|
||||
e.printStackTrace()
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.mogo.och.common.module.biz.birdge
|
||||
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
|
||||
interface BridgeListener {
|
||||
/**
|
||||
* 是否有引导线
|
||||
*/
|
||||
fun onTrajectoryHaveData(haveTrajectoryInfos: Boolean){}
|
||||
|
||||
fun onPredictionHavaData(havePredictionInfos: Boolean){}
|
||||
|
||||
fun onTrajectoryPointsListener(trajectoryList: MutableList<MogoLocation>){}
|
||||
|
||||
fun onTrajectoryDistanceListener(distance: Double){}
|
||||
|
||||
fun onTrajectoryPointsAndDistanceListener(trajectoryList: MutableList<MogoLocation>,distance: Double){}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.mogo.och.common.module.biz.birdge
|
||||
|
||||
import com.alibaba.android.arouter.launcher.ARouter
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
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.och.common.module.constant.OchCommonConst
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
|
||||
object BridgeManager {
|
||||
|
||||
private const val TAG = M_OCHCOMMON+"BridgeManager"
|
||||
|
||||
private var bridgeService: BridgeService? =
|
||||
ARouter.getInstance().build(OchCommonConst.BIZ_Bridge).navigation() as BridgeService
|
||||
|
||||
fun load(){
|
||||
OchChainLogManager.writeChainLogInit("初始化信息","初始化Bridge系统")
|
||||
d(TAG,"初始化信息_初始化Bridge系统")
|
||||
}
|
||||
|
||||
fun setDistanceStation(startLocation: MogoLocation?, endLocation: MogoLocation?, lineId: Long?) {
|
||||
bridgeService?.setDistanceStation(startLocation,endLocation,lineId)
|
||||
}
|
||||
|
||||
fun distance2Point(gcjLat: Double, gcjLon: Double):Float{
|
||||
return bridgeService?.distance2Point(gcjLat,gcjLon)?:0f
|
||||
}
|
||||
|
||||
fun addBridgeListener(tag:String, listener: BridgeListener){
|
||||
bridgeService?.addBridgeListener(tag,listener)
|
||||
}
|
||||
|
||||
fun removeBridgeListener(tag: String){
|
||||
bridgeService?.removeBridgeListener(tag)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.mogo.och.common.module.biz.birdge
|
||||
|
||||
import com.alibaba.android.arouter.facade.template.IProvider
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
|
||||
interface BridgeService : IProvider {
|
||||
|
||||
fun setDistanceStation(startLocation: MogoLocation?, endLocation: MogoLocation?, lineId: Long?)
|
||||
|
||||
|
||||
fun distance2Point(gcjLat: Double, gcjLon: Double): Float
|
||||
|
||||
fun addBridgeListener(tag:String, listener:BridgeListener)
|
||||
|
||||
fun removeBridgeListener(tag: String)
|
||||
}
|
||||
@@ -1,9 +1,12 @@
|
||||
package com.mogo.och.common.module.biz.lansocket
|
||||
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import android.util.Log
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON
|
||||
import com.mogo.och.common.module.BuildConfig
|
||||
import com.mogo.och.common.module.biz.lansocket.bean.DevicesInfo
|
||||
import com.mogo.och.common.module.biz.login.ILoginCallback
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusEnum
|
||||
import com.mogo.och.common.module.biz.login.EnumLoginStatus
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusManager
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
import com.mogo.och.common.module.manager.loop.BizLoopManager
|
||||
@@ -15,10 +18,14 @@ import com.mogo.och.common.module.manager.socket.lan.bean.BusinessType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.ChangeBusinessType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.DPMsgType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.EnvCheck
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.ScreenType
|
||||
import com.mogo.och.common.module.utils.DateTimeUtil
|
||||
import com.mogo.och.common.module.utils.FlavorUtils
|
||||
|
||||
object LoginLanDriverSocket : ILoginCallback {
|
||||
private const val TAG = "LoginLanSocket"
|
||||
private const val TAG = M_OCHCOMMON+"LoginLanSocket"
|
||||
|
||||
private val thridDevices = mutableListOf<DevicesInfo>()
|
||||
|
||||
// 接受到客户端注册信息后立即返回业务模式
|
||||
private val registerListener = object : ILanMessageListener<BaseDPMsg> {
|
||||
@@ -28,6 +35,15 @@ object LoginLanDriverSocket : ILoginCallback {
|
||||
|
||||
override fun onLanMsgReceived(obj: BaseDPMsg?) {
|
||||
println("-------${obj}")
|
||||
obj?.let {msg->
|
||||
var currentDevices = thridDevices.find { it.sn == msg.sourceSn && it.msgVersion == msg.msgVersion }
|
||||
if(currentDevices==null){
|
||||
currentDevices = DevicesInfo(msg.sourceScreenType, msg.sourceSn,msg.msgVersion)
|
||||
thridDevices.add(currentDevices)
|
||||
}else{
|
||||
currentDevices.registerTime = DateTimeUtil.getCurrentTimeStamp()
|
||||
}
|
||||
}
|
||||
if(LoginStatusManager.isLogin()) {
|
||||
FlavorUtils.getEnvCheck()
|
||||
val msg = ChangeBusinessType(FlavorUtils.vehicleType!!, FlavorUtils.businessType!!, FlavorUtils.projectType!!, FlavorUtils.envType!!)
|
||||
@@ -37,9 +53,10 @@ object LoginLanDriverSocket : ILoginCallback {
|
||||
val msg = ChangeBusinessType(FlavorUtils.vehicleType!!, BusinessType.none, FlavorUtils.projectType!!, FlavorUtils.envType!!)
|
||||
LanSocketManager.sendMsgToClient(msg)
|
||||
}
|
||||
LoginStatusManager.sendLogin2Client()
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
fun load() {
|
||||
OchChainLogManager.writeChainLogInit("初始化信息","初始司机屏局域网内通知监听")
|
||||
@@ -47,6 +64,7 @@ object LoginLanDriverSocket : ILoginCallback {
|
||||
|
||||
init {
|
||||
// 登录状态变化的监听
|
||||
CallerLogger.d(TAG,"初始化局域网通信")
|
||||
LoginStatusManager.addListener(TAG, this)
|
||||
// 注册监听乘客屏和报站屏注册信息
|
||||
LanSocketManager.registerSocketMessageListener(
|
||||
@@ -56,11 +74,11 @@ object LoginLanDriverSocket : ILoginCallback {
|
||||
}
|
||||
|
||||
// 司机端发送业务模式更改和环境校验
|
||||
override fun onStatusChange(currentStatus: LoginStatusEnum?) {
|
||||
override fun onLoginStatusChange(currentStatus: EnumLoginStatus?) {
|
||||
FlavorUtils.getEnvCheck()
|
||||
if (FlavorUtils.vehicleType != null && FlavorUtils.projectType != null && FlavorUtils.envType != null) {
|
||||
when (currentStatus) {
|
||||
LoginStatusEnum.Login -> {
|
||||
EnumLoginStatus.Login -> {
|
||||
val msg =
|
||||
ChangeBusinessType(
|
||||
FlavorUtils.vehicleType!!,
|
||||
|
||||
@@ -3,11 +3,8 @@ package com.mogo.och.common.module.biz.lansocket
|
||||
import com.mogo.eagle.core.function.api.telematic.IReceivedMsgListener
|
||||
import com.mogo.eagle.core.function.call.telematic.CallerTelematicListenerManager
|
||||
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.Product
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusEnum
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusManager
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
import com.mogo.och.common.module.manager.loop.BizLoopManager
|
||||
@@ -15,16 +12,9 @@ import com.mogo.och.common.module.manager.loop.LoopInfo
|
||||
import com.mogo.och.common.module.manager.socket.lan.ILanMessageListener
|
||||
import com.mogo.och.common.module.manager.socket.lan.LanSocketManager
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.BaseDPMsg
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.BusinessType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.ChangeBusinessType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.DPMsgType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.EnvCheck
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.EnvType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.ProjectType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.ScreenType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.VehicleType
|
||||
import com.mogo.och.common.module.utils.CallerBase
|
||||
import java.lang.StringBuilder
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
object LoginLanPassengerSocket : IReceivedMsgListener, CallerBase<IOchLanPassengerStatusListener>() {
|
||||
@@ -35,7 +25,7 @@ object LoginLanPassengerSocket : IReceivedMsgListener, CallerBase<IOchLanPasseng
|
||||
// 司机屏发生变化
|
||||
val msg = BaseDPMsg(type = DPMsgType.TYPE_CLIENT_REGISTER.type)
|
||||
LanSocketManager.sendMsgToServer(msg)
|
||||
LoginStatusManager.changeStatus("sn 变化 连接成功 司机SN:${newV}")
|
||||
LoginStatusManager.changeStatus("sn 变化 连接成功 司机SN:${oldV}---->${newV}")
|
||||
if(newV.isNotEmpty()){
|
||||
OchChainLogManager.writeChainLogNetLanSocketConnect("局域网socket链接状态","sn 变化 已连接 sn${newV}")
|
||||
}
|
||||
@@ -83,73 +73,12 @@ object LoginLanPassengerSocket : IReceivedMsgListener, CallerBase<IOchLanPasseng
|
||||
|
||||
override fun onLanMsgReceived(first: EnvCheck?) {
|
||||
first?.let {
|
||||
val checkEnv = checkEnv(first.projectType, first.envType, first.vehicleType, first.businessType)
|
||||
if (first.sourceScreenType== ScreenType.Driver) {
|
||||
driverSn = first.sourceSn
|
||||
}
|
||||
if(checkEnv){
|
||||
|
||||
}else{
|
||||
CallerLogger.d(TAG, "乘客屏 收到消息 检测环境不支持:${LoginStatusEnum.Logout}")
|
||||
LoginStatusManager.setLoginStatus(LoginStatusEnum.Logout)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun checkEnv(
|
||||
projectType: ProjectType,
|
||||
envType: EnvType,
|
||||
vehicleType: VehicleType,
|
||||
businessType: BusinessType
|
||||
): Boolean {
|
||||
return LoginStatusManager.checkAllEnv(projectType, envType, vehicleType, businessType)
|
||||
}
|
||||
|
||||
// 环境监测+业务展示和跳转
|
||||
private val changeBusinessType = object : ILanMessageListener<ChangeBusinessType> {
|
||||
override fun targetLan(): Class<ChangeBusinessType> {
|
||||
return ChangeBusinessType::class.java
|
||||
}
|
||||
|
||||
override fun onLanMsgReceived(first: ChangeBusinessType?) {
|
||||
first?.let {
|
||||
val checkEnv = checkEnv(
|
||||
first.projectType,
|
||||
first.envType,
|
||||
first.vehicleType,
|
||||
first.businessType
|
||||
)
|
||||
if(checkEnv){
|
||||
val status = StringBuilder()
|
||||
status.append("切换业务模式<当前:${LoginStatusManager.getBusInessType().name}")
|
||||
when (first.businessType) {
|
||||
BusinessType.none -> {
|
||||
LoginStatusManager.setBusinessType(Product.NONE.code)
|
||||
CallerLogger.d(TAG, "乘客屏 收到消息 司机屏没有登录:${LoginStatusEnum.Logout}")
|
||||
return LoginStatusManager.setLoginStatus(LoginStatusEnum.Logout)
|
||||
}
|
||||
BusinessType.bus -> LoginStatusManager.setBusinessType(Product.BUS.code)
|
||||
BusinessType.shuttle -> LoginStatusManager.setBusinessType(Product.SHUTTLE.code)
|
||||
BusinessType.charter -> LoginStatusManager.setBusinessType(Product.CHARTER.code)
|
||||
BusinessType.taxi -> LoginStatusManager.setBusinessType(Product.TAXI.code)
|
||||
BusinessType.taxiunmanned ->LoginStatusManager.setBusinessType(Product.TAXI.code)
|
||||
BusinessType.scheduled ->LoginStatusManager.setBusinessType(Product.SCHEDULED.code)
|
||||
}
|
||||
status.append(", 切换后:${LoginStatusManager.getBusInessType().name}>")
|
||||
LoginStatusManager.changeStatus(status.toString())
|
||||
UiThreadHandler.postDelayed({
|
||||
CallerLogger.d(TAG, "乘客屏 收到消息 司机屏业务模式相同:${LoginStatusEnum.Login}")
|
||||
LoginStatusManager.setLoginStatus(LoginStatusEnum.Login)
|
||||
},2000)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
fun load() {
|
||||
OchChainLogManager.writeChainLogInit("初始化信息","初始局乘客屏局域网内部分信息")
|
||||
}
|
||||
@@ -164,11 +93,7 @@ object LoginLanPassengerSocket : IReceivedMsgListener, CallerBase<IOchLanPasseng
|
||||
DPMsgType.TYPE_ENV_CHECK.type,
|
||||
checkListener
|
||||
)
|
||||
// 乘客屏监听司机端发送的业务修改通知(
|
||||
LanSocketManager.registerSocketMessageListener(
|
||||
DPMsgType.TYPE_CHANGE_BUSINESS_TYPE.type,
|
||||
changeBusinessType
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
override fun onReceivedMsg(type: Int, byteArray: ByteArray) {}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.mogo.och.common.module.biz.lansocket.bean
|
||||
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.ScreenType
|
||||
import com.mogo.och.common.module.utils.DateTimeUtil
|
||||
|
||||
data class DevicesInfo(
|
||||
val screenType: ScreenType,// 屏幕类型
|
||||
val sn: String,// 屏幕sn
|
||||
val msgVersion:Int,
|
||||
var registerTime: Long = DateTimeUtil.getCurrentTimeStamp(),//注册时间
|
||||
){
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
|
||||
other as DevicesInfo
|
||||
|
||||
if (sn != other.sn) return false
|
||||
if (msgVersion != other.msgVersion) return false
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
var result = sn.hashCode()
|
||||
result = 31 * result + msgVersion
|
||||
return result
|
||||
}
|
||||
}
|
||||
@@ -8,14 +8,14 @@ package com.mogo.och.common.module.biz.login
|
||||
* 10 已登录,
|
||||
* 20 已登出,
|
||||
*/
|
||||
enum class LoginStatusEnum(val code: Int) {
|
||||
enum class EnumLoginStatus(val code: Int) {
|
||||
None( -1 ),
|
||||
Login( 1),
|
||||
Logout( 0),;
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun valueOf(code: Int): LoginStatusEnum? {
|
||||
fun valueOf(code: Int): EnumLoginStatus {
|
||||
for (value in values()) {
|
||||
if (value.code == code) {
|
||||
return value
|
||||
@@ -8,14 +8,14 @@ package com.mogo.och.common.module.biz.login
|
||||
* 10 接单状态 可接单,
|
||||
* 20 暂停接到哪 不可接单,
|
||||
*/
|
||||
enum class OpenOrderStatusEnum(val code: Int) {
|
||||
enum class EnumOpenOrderStatus(val code: Int) {
|
||||
UnOrdering( 0 ),
|
||||
Ordering( 1),
|
||||
None( -1),;
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun valueOf(code: Int): OpenOrderStatusEnum {
|
||||
fun valueOf(code: Int): EnumOpenOrderStatus {
|
||||
for (value in values()) {
|
||||
if (value.code == code) {
|
||||
return value
|
||||
@@ -4,7 +4,7 @@ package com.mogo.och.common.module.biz.login
|
||||
* Created on 2021/12/7
|
||||
* 1 运营, 2 测试, 3演示
|
||||
*/
|
||||
enum class RoleEnum(val code: Int) {
|
||||
enum class EnumRole(val code: Int) {
|
||||
None( 0),
|
||||
OPERATION( 1),
|
||||
TEST( 2),
|
||||
@@ -13,13 +13,13 @@ enum class RoleEnum(val code: Int) {
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun valueOf(code: Int?): RoleEnum {
|
||||
for (value in RoleEnum.values()) {
|
||||
fun valueOf(code: Int?): EnumRole {
|
||||
for (value in EnumRole.values()) {
|
||||
if (value.code == code) {
|
||||
return value
|
||||
}
|
||||
}
|
||||
return RoleEnum.None
|
||||
return EnumRole.None
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,18 +2,21 @@ package com.mogo.och.common.module.biz.login;
|
||||
|
||||
import com.mogo.eagle.core.data.enums.Carmodel;
|
||||
import com.mogo.eagle.core.utilcode.mogo.Product;
|
||||
import com.mogo.eagle.core.utilcode.mogo.Vehicle;
|
||||
|
||||
public interface ILoginCallback {
|
||||
|
||||
default void onStatusChange(LoginStatusEnum currentStatus){}
|
||||
default void onLoginStatusChange(EnumLoginStatus currentStatus){}
|
||||
|
||||
default void onCarModelChange(Carmodel currentStatus){}
|
||||
|
||||
default void onBusinessChange(Product businessEnum){}
|
||||
default void onProductChange(Product businessEnum){}
|
||||
|
||||
default void onOpenOrderStatusEnumChange(OpenOrderStatusEnum businessEnum){}
|
||||
default void onVehicleChage(Vehicle vehicle){}
|
||||
|
||||
default void onBusinessChangeDebug(Product businessEnum){}
|
||||
default void onOpenOrderStatusEnumChange(EnumOpenOrderStatus businessEnum){}
|
||||
|
||||
default void onTenantIdChange(Long tenantId){}
|
||||
|
||||
default void onLoginErrorInfo(int code,String msg){}
|
||||
|
||||
|
||||
@@ -1,278 +0,0 @@
|
||||
package com.mogo.och.common.module.biz.login;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class LoginInfo {
|
||||
private int driverStatus; //1登录,0登出
|
||||
private int servingStatus;//1接单中,0暂停接单
|
||||
private int businessType; //9: taxi. 10: bus公交 11:接驳 13:包车
|
||||
private String orderNo;
|
||||
private int purpose; // 1 运营, 2 测试, 3演示
|
||||
private String sn;
|
||||
private String plateNumber;//车牌号
|
||||
private String phone;//手机号
|
||||
private Long lineId;//线路id
|
||||
private Long taskId;//任务id
|
||||
private Long siteId;//站点id 包车使用
|
||||
private Long currentSite;//当前站点 接驳、公交、班车使用
|
||||
private Boolean leaving;// 当前站点是否出发
|
||||
private Long shiftsId;//模板id
|
||||
private Long taskDate;// 任务或模板的日期
|
||||
private String vin;//车辆唯一识别码
|
||||
private String cityCode;//城市编码
|
||||
private String brand;//东风
|
||||
//
|
||||
// E70 东风 H9 红旗
|
||||
// B2 B1 M1
|
||||
private String carModel;
|
||||
private String photos;//车身照片:
|
||||
private long tenantId;//租户id:
|
||||
private long driverId;
|
||||
|
||||
private long businessStatus;//?????
|
||||
|
||||
public int getDriverStatus() {
|
||||
return driverStatus;
|
||||
}
|
||||
|
||||
public void setDriverStatus(int driverStatus) {
|
||||
this.driverStatus = driverStatus;
|
||||
}
|
||||
|
||||
public String getOrderNo() {
|
||||
return orderNo;
|
||||
}
|
||||
|
||||
public void setOrderNo(String orderNo) {
|
||||
this.orderNo = orderNo;
|
||||
}
|
||||
|
||||
public int getPurpose() {
|
||||
return purpose;
|
||||
}
|
||||
|
||||
public void setPurpose(int purpose) {
|
||||
this.purpose = purpose;
|
||||
}
|
||||
|
||||
public String getSn() {
|
||||
return sn;
|
||||
}
|
||||
|
||||
public void setSn(String sn) {
|
||||
this.sn = sn;
|
||||
}
|
||||
|
||||
public String getPlateNumber() {
|
||||
return plateNumber;
|
||||
}
|
||||
|
||||
public void setPlateNumber(String plateNumber) {
|
||||
this.plateNumber = plateNumber;
|
||||
}
|
||||
|
||||
public String getPhone() {
|
||||
return phone;
|
||||
}
|
||||
|
||||
public void setPhone(String phone) {
|
||||
this.phone = phone;
|
||||
}
|
||||
|
||||
public int getServingStatus() {
|
||||
return servingStatus;
|
||||
}
|
||||
|
||||
public void setServingStatus(int servingStatus) {
|
||||
this.servingStatus = servingStatus;
|
||||
}
|
||||
|
||||
public int getBusinessType() {
|
||||
return businessType;
|
||||
}
|
||||
|
||||
public void setBusinessType(int businessType) {
|
||||
this.businessType = businessType;
|
||||
}
|
||||
|
||||
public String getVin() {
|
||||
return vin;
|
||||
}
|
||||
|
||||
public void setVin(String vin) {
|
||||
this.vin = vin;
|
||||
}
|
||||
|
||||
public String getCityCode() {
|
||||
return cityCode;
|
||||
}
|
||||
|
||||
public void setCityCode(String cityCode) {
|
||||
this.cityCode = cityCode;
|
||||
}
|
||||
|
||||
public String getBrand() {
|
||||
return brand;
|
||||
}
|
||||
|
||||
public void setBrand(String brand) {
|
||||
this.brand = brand;
|
||||
}
|
||||
|
||||
public String getCarModel() {
|
||||
return carModel;
|
||||
}
|
||||
|
||||
public void setCarModel(String carModel) {
|
||||
this.carModel = carModel;
|
||||
}
|
||||
|
||||
public String getPhotos() {
|
||||
return photos;
|
||||
}
|
||||
|
||||
public void setPhotos(String photos) {
|
||||
this.photos = photos;
|
||||
}
|
||||
|
||||
public long getTenantId() {
|
||||
return tenantId;
|
||||
}
|
||||
|
||||
public void setTenantId(long tenantId) {
|
||||
this.tenantId = tenantId;
|
||||
}
|
||||
|
||||
public long getDriverId() {
|
||||
return driverId;
|
||||
}
|
||||
|
||||
public void setDriverId(long driverId) {
|
||||
this.driverId = driverId;
|
||||
}
|
||||
|
||||
|
||||
public long getBusinessStatus() {
|
||||
return businessStatus;
|
||||
}
|
||||
|
||||
public void setBusinessStatus(long businessStatus) {
|
||||
this.businessStatus = businessStatus;
|
||||
}
|
||||
|
||||
public Long getCurrentSite() {
|
||||
return currentSite;
|
||||
}
|
||||
|
||||
public void setCurrentSite(Long currentSite) {
|
||||
this.currentSite = currentSite;
|
||||
}
|
||||
|
||||
public Boolean getLeaving() {
|
||||
return leaving;
|
||||
}
|
||||
|
||||
public void setLeaving(Boolean leaving) {
|
||||
this.leaving = leaving;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public Long getTaskDate() {
|
||||
return taskDate;
|
||||
}
|
||||
|
||||
public void setTaskDate(Long taskDate) {
|
||||
this.taskDate = taskDate;
|
||||
}
|
||||
|
||||
public Long getLineId() {
|
||||
return lineId;
|
||||
}
|
||||
|
||||
public void setLineId(Long lineId) {
|
||||
this.lineId = lineId;
|
||||
}
|
||||
|
||||
public Long getTaskId() {
|
||||
return taskId;
|
||||
}
|
||||
|
||||
public void setTaskId(Long taskId) {
|
||||
this.taskId = taskId;
|
||||
}
|
||||
|
||||
public Long getSiteId() {
|
||||
return siteId;
|
||||
}
|
||||
|
||||
public void setSiteId(Long siteId) {
|
||||
this.siteId = siteId;
|
||||
}
|
||||
|
||||
public Long getShiftsId() {
|
||||
return shiftsId;
|
||||
}
|
||||
|
||||
public void setShiftsId(Long shiftsId) {
|
||||
this.shiftsId = shiftsId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "LoginInfo{" +
|
||||
"driverStatus=" + driverStatus +
|
||||
", servingStatus=" + servingStatus +
|
||||
", businessType=" + businessType +
|
||||
", orderNo='" + orderNo + '\'' +
|
||||
", purpose=" + purpose +
|
||||
", sn='" + sn + '\'' +
|
||||
", plateNumber='" + plateNumber + '\'' +
|
||||
", phone='" + phone + '\'' +
|
||||
", lineId=" + lineId +
|
||||
", taskId=" + taskId +
|
||||
", siteId=" + siteId +
|
||||
", vin='" + vin + '\'' +
|
||||
", cityCode='" + cityCode + '\'' +
|
||||
", brand='" + brand + '\'' +
|
||||
", carModel='" + carModel + '\'' +
|
||||
", photos='" + photos + '\'' +
|
||||
", tenantId=" + tenantId +
|
||||
", driverId=" + driverId +
|
||||
", businessStatus=" + businessStatus +
|
||||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
LoginInfo loginInfo = (LoginInfo) o;
|
||||
return driverStatus == loginInfo.driverStatus && servingStatus == loginInfo.servingStatus && businessType == loginInfo.businessType && purpose == loginInfo.purpose && tenantId == loginInfo.tenantId && driverId == loginInfo.driverId && businessStatus == loginInfo.businessStatus && Objects.equals(orderNo, loginInfo.orderNo) && Objects.equals(sn, loginInfo.sn) && Objects.equals(plateNumber, loginInfo.plateNumber) && Objects.equals(phone, loginInfo.phone) && Objects.equals(lineId, loginInfo.lineId) && Objects.equals(taskId, loginInfo.taskId) && Objects.equals(siteId, loginInfo.siteId) && Objects.equals(vin, loginInfo.vin) && Objects.equals(cityCode, loginInfo.cityCode) && Objects.equals(brand, loginInfo.brand) && Objects.equals(carModel, loginInfo.carModel) && Objects.equals(photos, loginInfo.photos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = driverStatus;
|
||||
result = 31 * result + servingStatus;
|
||||
result = 31 * result + businessType;
|
||||
result = 31 * result + Objects.hashCode(orderNo);
|
||||
result = 31 * result + purpose;
|
||||
result = 31 * result + Objects.hashCode(sn);
|
||||
result = 31 * result + Objects.hashCode(plateNumber);
|
||||
result = 31 * result + Objects.hashCode(phone);
|
||||
result = 31 * result + Objects.hashCode(lineId);
|
||||
result = 31 * result + Objects.hashCode(taskId);
|
||||
result = 31 * result + Objects.hashCode(siteId);
|
||||
result = 31 * result + Objects.hashCode(vin);
|
||||
result = 31 * result + Objects.hashCode(cityCode);
|
||||
result = 31 * result + Objects.hashCode(brand);
|
||||
result = 31 * result + Objects.hashCode(carModel);
|
||||
result = 31 * result + Objects.hashCode(photos);
|
||||
result = 31 * result + Long.hashCode(tenantId);
|
||||
result = 31 * result + Long.hashCode(driverId);
|
||||
result = 31 * result + Long.hashCode(businessStatus);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -2,49 +2,76 @@ package com.mogo.och.common.module.biz.login
|
||||
|
||||
import com.mogo.eagle.core.data.enums.Carmodel
|
||||
import com.mogo.eagle.core.utilcode.mogo.Product
|
||||
import com.mogo.eagle.core.utilcode.mogo.Vehicle
|
||||
import com.mogo.och.common.module.biz.login.bean.OchBizInfo
|
||||
import com.mogo.och.common.module.biz.login.bean.OchCarInfo
|
||||
import com.mogo.och.common.module.biz.login.bean.OchLoginInfo
|
||||
import com.mogo.och.common.module.biz.provider.CommonService
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.BusinessType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.EnvType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.ProjectType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.VehicleType
|
||||
|
||||
interface LoginService :CommonService {
|
||||
fun setLoginInfo(loginInfo: LoginInfo)
|
||||
fun getLoginInfo():LoginInfo?
|
||||
|
||||
fun getPurpose():RoleEnum
|
||||
/**
|
||||
* 获取登录新形象
|
||||
*/
|
||||
fun getOchLoginInfo():OchLoginInfo?
|
||||
|
||||
/**
|
||||
* 获取业务信息
|
||||
*/
|
||||
fun getOchBizInfo():OchBizInfo?
|
||||
|
||||
/**
|
||||
* 获取车辆信息
|
||||
*/
|
||||
fun getOchCarInfo():OchCarInfo?
|
||||
|
||||
/**
|
||||
* 设置角色
|
||||
*/
|
||||
fun getPurpose():EnumRole
|
||||
|
||||
/**
|
||||
* 判断是否登录
|
||||
*/
|
||||
fun isLogin():Boolean
|
||||
fun getLoginStatus(): LoginStatusEnum
|
||||
fun getCarModel(): Carmodel
|
||||
fun setLoginStatus(loginStatus: LoginStatusEnum)
|
||||
fun setLoginStatus(status: Int)
|
||||
fun setBusinessType(type: Int)
|
||||
|
||||
fun getBusinessType(): Product
|
||||
/**
|
||||
* 获取登录状态
|
||||
*/
|
||||
fun getLoginStatus(): EnumLoginStatus
|
||||
|
||||
/**
|
||||
* 获取车辆模型
|
||||
*/
|
||||
fun getCarModelType(): Carmodel
|
||||
|
||||
/**
|
||||
* 获取业务模式
|
||||
*/
|
||||
fun getProductType(): Product
|
||||
|
||||
/**
|
||||
* 通过网络获取登录状态
|
||||
* @param readCatche true:先使用缓存同时网络请求也存在 false:只是用缓存
|
||||
*/
|
||||
fun queryLoginStatusByNet(readCatche:Boolean=false)
|
||||
|
||||
/**
|
||||
* 登出
|
||||
*/
|
||||
fun loginOut()
|
||||
fun checkBusiness(businessType: Int): Boolean
|
||||
fun checkAllEnv(
|
||||
projectType: ProjectType,
|
||||
envType: EnvType,
|
||||
vehicleType: VehicleType,
|
||||
businessType: BusinessType
|
||||
): Boolean
|
||||
|
||||
fun changeStatus(currentStatus: String)
|
||||
|
||||
fun setOpenOrderStatusType(type: Int)
|
||||
|
||||
fun getOpenOrderStatusType(): OpenOrderStatusEnum
|
||||
fun getOpenOrderStatusType(): EnumOpenOrderStatus
|
||||
|
||||
fun isOpenOrderType(): Boolean
|
||||
|
||||
fun removeLoginInfo()
|
||||
|
||||
fun getVehicleType(): Vehicle
|
||||
|
||||
fun sendLogin2Client()
|
||||
}
|
||||
@@ -1,22 +1,18 @@
|
||||
package com.mogo.och.common.module.biz.login
|
||||
|
||||
|
||||
import android.util.Log
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.alibaba.android.arouter.launcher.ARouter
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.enums.Carmodel
|
||||
import com.mogo.eagle.core.utilcode.mogo.Product
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.Vehicle
|
||||
import com.mogo.och.common.module.biz.login.bean.OchBizInfo
|
||||
import com.mogo.och.common.module.biz.login.bean.OchCarInfo
|
||||
import com.mogo.och.common.module.biz.login.bean.OchLoginInfo
|
||||
import com.mogo.och.common.module.constant.OchCommonConst
|
||||
import com.mogo.och.common.module.manager.loop.BizLoopManager
|
||||
import com.mogo.och.common.module.manager.loop.LoopInfo
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.BusinessType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.EnvType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.ProjectType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.VehicleType
|
||||
import com.mogo.och.common.module.utils.CallerBase
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
|
||||
object LoginStatusManager : CallerBase<ILoginCallback>() {
|
||||
|
||||
@@ -24,7 +20,6 @@ object LoginStatusManager : CallerBase<ILoginCallback>() {
|
||||
ARouter.getInstance().build(OchCommonConst.BIZ_LOGIN).navigation() as LoginService
|
||||
|
||||
private var TAG = "LoginStatusManager"
|
||||
private var TAGLoopStatus = "LoginStatusManagerLoop"
|
||||
|
||||
@JvmStatic
|
||||
fun getFragment():Fragment {
|
||||
@@ -33,6 +28,7 @@ object LoginStatusManager : CallerBase<ILoginCallback>() {
|
||||
}
|
||||
throw ClassNotFoundException("没有找到登录Fragment");
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun resetFragment(){
|
||||
loginService?.let {
|
||||
@@ -49,51 +45,57 @@ object LoginStatusManager : CallerBase<ILoginCallback>() {
|
||||
fun queryLoginStatusByNet(readCatche:Boolean=false) {
|
||||
loginService?.queryLoginStatusByNet(readCatche)
|
||||
}
|
||||
@JvmStatic
|
||||
fun getPurpose(): RoleEnum {
|
||||
|
||||
fun getOchCarInfo(): OchCarInfo? {
|
||||
return loginService?.getOchCarInfo()
|
||||
}
|
||||
|
||||
fun getOchBizInfo(): OchBizInfo? {
|
||||
return loginService?.getOchBizInfo()
|
||||
}
|
||||
|
||||
fun getOchLoginInfo(): OchLoginInfo? {
|
||||
return loginService?.getOchLoginInfo()
|
||||
}
|
||||
|
||||
/**
|
||||
* 移除登录信息
|
||||
*/
|
||||
fun removeLoginInfo() {
|
||||
loginService?.removeLoginInfo()
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取业务模式
|
||||
*/
|
||||
fun getProductType():Product{
|
||||
loginService?.let {
|
||||
return it.getPurpose()
|
||||
}
|
||||
return RoleEnum.None
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun setLoginInfo(loginInfo: LoginInfo) {
|
||||
loginService?.setLoginInfo(loginInfo)
|
||||
}
|
||||
|
||||
fun getLoginInfo(): LoginInfo? {
|
||||
return loginService?.getLoginInfo()
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun setLoginStatus(status: Int) {
|
||||
loginService?.setLoginStatus(status)
|
||||
}
|
||||
@JvmStatic
|
||||
fun setBusinessType(type: Int) {
|
||||
loginService?.setBusinessType(type)
|
||||
}
|
||||
|
||||
fun getBusInessType():Product{
|
||||
loginService?.let {
|
||||
return it.getBusinessType()
|
||||
return it.getProductType()
|
||||
}
|
||||
return Product.NONE
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun setOpenOrderType(type: Int) {
|
||||
loginService?.setOpenOrderStatusType(type)
|
||||
fun getVehicleType():Vehicle{
|
||||
loginService?.let {
|
||||
return it.getVehicleType()
|
||||
}
|
||||
return Vehicle.NONE
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取接单状态
|
||||
*/
|
||||
@JvmStatic
|
||||
fun getOpenOrderType():OpenOrderStatusEnum{
|
||||
fun getOpenOrderType():EnumOpenOrderStatus{
|
||||
loginService?.let {
|
||||
return it.getOpenOrderStatusType()
|
||||
}
|
||||
return OpenOrderStatusEnum.None
|
||||
return EnumOpenOrderStatus.None
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否在接单中
|
||||
*/
|
||||
@JvmStatic
|
||||
fun isOpenOrderType():Boolean{
|
||||
loginService?.let {
|
||||
@@ -102,34 +104,20 @@ object LoginStatusManager : CallerBase<ILoginCallback>() {
|
||||
return false
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取登录状态
|
||||
*/
|
||||
@JvmStatic
|
||||
fun setLoginStatus(loginStatus: LoginStatusEnum) {
|
||||
CallerLogger.d(TAG, "setLoginStatus:${loginStatus}")
|
||||
loginService?.setLoginStatus(loginStatus)
|
||||
}
|
||||
|
||||
|
||||
fun removeLoginInfo() {
|
||||
loginService?.removeLoginInfo()
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getLoginStatus(): LoginStatusEnum {
|
||||
fun getLoginStatus(): EnumLoginStatus {
|
||||
loginService?.let {
|
||||
return it.getLoginStatus()
|
||||
}
|
||||
return LoginStatusEnum.None
|
||||
return EnumLoginStatus.None
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getCarModel(): Carmodel {
|
||||
loginService?.let {
|
||||
return it.getCarModel()
|
||||
}
|
||||
return Carmodel.T2
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 是否登录中
|
||||
*/
|
||||
@JvmStatic
|
||||
fun isLogin(): Boolean {
|
||||
loginService?.let {
|
||||
@@ -138,72 +126,73 @@ object LoginStatusManager : CallerBase<ILoginCallback>() {
|
||||
return false
|
||||
}
|
||||
|
||||
fun invokeLoginStatusChange(currentStatus: LoginStatusEnum) {
|
||||
Log.d("登录","设置源:invokeLoginStatusChange")
|
||||
if(!FunctionBuildConfig.isOffLine){
|
||||
if(currentStatus==LoginStatusEnum.Login){
|
||||
Log.d("登录","设置源:queryLoginStatusByNet")
|
||||
BizLoopManager.setLoopFunction(TAGLoopStatus, LoopInfo(60*2, ::queryLoginStatusByNet,immediately = true, scheduler = Schedulers.io()))
|
||||
}else{
|
||||
BizLoopManager.removeLoopFunction(TAGLoopStatus)
|
||||
}
|
||||
/**
|
||||
* 获取车辆模型
|
||||
*/
|
||||
@JvmStatic
|
||||
fun getCarModel(): Carmodel {
|
||||
loginService?.let {
|
||||
return it.getCarModelType()
|
||||
}
|
||||
return Carmodel.T2
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送登录信息到乘客屏
|
||||
*/
|
||||
fun sendLogin2Client() {
|
||||
loginService?.sendLogin2Client()
|
||||
}
|
||||
|
||||
/**
|
||||
* 登录状态变更通知
|
||||
*/
|
||||
fun invokeLoginStatusChange(currentStatus: EnumLoginStatus) {
|
||||
M_LISTENERS.forEach {
|
||||
val listener = it.value
|
||||
listener.onStatusChange(currentStatus)
|
||||
listener.onLoginStatusChange(currentStatus)
|
||||
}
|
||||
}
|
||||
|
||||
fun invokeLBusinessTypeChange(currentStatus: Product) {
|
||||
/**
|
||||
* 业务模式发生变化通知
|
||||
*/
|
||||
fun invokeLProductChange(currentStatus: Product) {
|
||||
M_LISTENERS.forEach {
|
||||
val listener = it.value
|
||||
listener.onBusinessChange(currentStatus)
|
||||
}
|
||||
}
|
||||
fun invokeLBusinessTypeChangeDebug(currentStatus: Product) {
|
||||
M_LISTENERS.forEach {
|
||||
val listener = it.value
|
||||
listener.onBusinessChangeDebug(currentStatus)
|
||||
listener.onProductChange(currentStatus)
|
||||
}
|
||||
}
|
||||
|
||||
fun invokeLOpenOrderStatusChange(currentStatus: OpenOrderStatusEnum) {
|
||||
/**
|
||||
* 车型发生变化通知
|
||||
*/
|
||||
fun invokeLVehicleChange(currentStatus: Vehicle) {
|
||||
M_LISTENERS.forEach {
|
||||
val listener = it.value
|
||||
listener.onVehicleChage(currentStatus)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 接单状态变化发送通知
|
||||
*/
|
||||
fun invokeOpenOrderStatusChange(currentStatus: EnumOpenOrderStatus) {
|
||||
M_LISTENERS.forEach {
|
||||
val listener = it.value
|
||||
listener.onOpenOrderStatusEnumChange(currentStatus)
|
||||
}
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun checkBusiness(businessType: Int):Boolean {
|
||||
loginService?.let {
|
||||
return it.checkBusiness(businessType)
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
fun checkAllEnv(
|
||||
projectType: ProjectType,
|
||||
envType: EnvType,
|
||||
vehicleType: VehicleType,
|
||||
businessType: BusinessType
|
||||
):Boolean {
|
||||
loginService?.let {
|
||||
return it.checkAllEnv(projectType,envType,vehicleType,businessType)
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
fun changeStatus(status: String) {
|
||||
loginService?.let {
|
||||
it.changeStatus(status)
|
||||
}
|
||||
loginService?.changeStatus(status)
|
||||
}
|
||||
|
||||
override fun doSomeAfterAddListener(tag: String, listener: ILoginCallback) {
|
||||
super.doSomeAfterAddListener(tag, listener)
|
||||
listener.onStatusChange(getLoginStatus())
|
||||
listener.onBusinessChange(getBusInessType())
|
||||
listener.onLoginStatusChange(getLoginStatus())
|
||||
listener.onProductChange(getProductType())
|
||||
listener.onVehicleChage(getVehicleType())
|
||||
listener.onOpenOrderStatusEnumChange(getOpenOrderType())
|
||||
listener.onCarModelChange(getCarModel())
|
||||
}
|
||||
@@ -215,6 +204,9 @@ object LoginStatusManager : CallerBase<ILoginCallback>() {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 车辆模型变化通知
|
||||
*/
|
||||
fun invokeCarModelChange(carModel: Carmodel) {
|
||||
M_LISTENERS.forEach {
|
||||
val listener = it.value
|
||||
@@ -222,5 +214,12 @@ object LoginStatusManager : CallerBase<ILoginCallback>() {
|
||||
}
|
||||
}
|
||||
|
||||
fun invokeTenantIdChange(tenantId: Long) {
|
||||
M_LISTENERS.forEach {
|
||||
val listener = it.value
|
||||
listener.onTenantIdChange(tenantId)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.mogo.och.common.module.biz.login.bean
|
||||
|
||||
data class OchBizInfo(
|
||||
|
||||
//9: taxi. 10: bus公交 11:接驳 13:包车 14:班车
|
||||
val businessType: Int = -1,
|
||||
|
||||
// taxi使用
|
||||
// 订单号
|
||||
val orderNo: String = "",
|
||||
//1接单中,0暂停接单
|
||||
val servingStatus: Int = 0,
|
||||
|
||||
//接驳、公交、班车使用
|
||||
// 正在执行的线路id
|
||||
val lineId: Long,
|
||||
// 正在执行的班次id
|
||||
val taskId: Long,
|
||||
// 当前站点
|
||||
val currentSite: Long,
|
||||
// 是否滑动出发
|
||||
val leaving: Boolean,
|
||||
// 当前班次的模板id
|
||||
val shiftsId: Long,
|
||||
// 当前班次的具体时间
|
||||
val taskDate: Long,
|
||||
|
||||
// 包车使用
|
||||
// 当前站点id 包车使用
|
||||
val siteId: Long,
|
||||
// 包车车辆状态 1:闲置中 2:使用中
|
||||
val businessStatus: Long,
|
||||
)
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.mogo.och.common.module.biz.login.bean
|
||||
|
||||
data class OchCarInfo(
|
||||
val plateNumber:String?,
|
||||
val vin:String?,
|
||||
val cityCode:String?,// 车辆所在城市
|
||||
val brand:String?,// 车辆生产产商 品牌
|
||||
val carModel:String?,// 车辆类型 型号
|
||||
val photos:String?,// 车身照片
|
||||
// 租户id
|
||||
val tenantId: Long?,
|
||||
)
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.mogo.och.common.module.biz.login.bean
|
||||
|
||||
data class OchLoginInfo(
|
||||
//1登录,0登出
|
||||
val driverStatus: Int = 0,
|
||||
// 1 运营, 2 测试, 3演示
|
||||
val purpose: Int = 0,
|
||||
// 后台车辆配置的sn
|
||||
val sn: String = "",
|
||||
// 司机手机号
|
||||
val phone: String = "",
|
||||
// 司机id
|
||||
val driverId: Long?,
|
||||
)
|
||||
@@ -4,8 +4,9 @@ import com.alibaba.android.arouter.launcher.ARouter
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OFFLINE
|
||||
import com.mogo.och.common.module.biz.lansocket.LoginLanDriverSocket
|
||||
import com.mogo.och.common.module.biz.login.ILoginCallback
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusEnum
|
||||
import com.mogo.och.common.module.biz.login.EnumLoginStatus
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusManager
|
||||
import com.mogo.och.common.module.constant.OchCommonConst
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
@@ -17,12 +18,13 @@ object OfflineManager : ILoginCallback {
|
||||
private var offlineService: OfflineService? = ARouter.getInstance().build(OchCommonConst.BIZ_OFFLINE).navigation() as OfflineService
|
||||
|
||||
init {
|
||||
CallerLogger.d(TAG,"初始化离线系统")
|
||||
LoginStatusManager.addListener(TAG,this)
|
||||
}
|
||||
|
||||
override fun onStatusChange(currentStatus: LoginStatusEnum?) {
|
||||
override fun onLoginStatusChange(currentStatus: EnumLoginStatus?) {
|
||||
if(!FunctionBuildConfig.isOffLine){
|
||||
if(currentStatus==LoginStatusEnum.Login) {
|
||||
if(currentStatus==EnumLoginStatus.Login) {
|
||||
// 同步数据
|
||||
synergyBaseData()
|
||||
// 删除正在运行的数据
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.mogo.och.common.module.biz.scanner
|
||||
|
||||
data class QrBean(
|
||||
// 二维码版本
|
||||
val version: Int,
|
||||
// 第一个版本
|
||||
val orderNo: String = "", // 订单Id
|
||||
val uid: String = "",// 服务器端唯一码
|
||||
val phone: String = "",// 手机号码
|
||||
val bizType: Int = 0,//
|
||||
val pipe: String = "",// 渠道ehsafety mogogosafety
|
||||
|
||||
// 第二个版本
|
||||
val expiryTime: Long = 0, // 二维码有效期
|
||||
val bookingTime: Long = 0,// 预定时间
|
||||
val lineId: Long = 0, // 线路id
|
||||
val availableTimes: Int = 0,//总票数
|
||||
val ticketSize: Int = 0,// 票上几个人
|
||||
val ticketName: String = "",// 票的名称
|
||||
val tenantId: Long = 0,// 租户id
|
||||
|
||||
val shiftsId: Long = 0,// 班车业务 任务id
|
||||
val startStationId: Long = 0,// bus业务使用 开始站点名称
|
||||
)
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.mogo.och.common.module.biz.scanner
|
||||
|
||||
enum class BindStatus {
|
||||
BIND_SUCCEED,
|
||||
BIND_FAILURE_UNINSTALLED,
|
||||
BIND_FAILURE_NO_PERMISSION_NOT_FOUND,
|
||||
EXCEPTION,
|
||||
NOTHING
|
||||
}
|
||||
|
||||
enum class OpenStatus {
|
||||
Open, Unopen
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.mogo.och.common.module.biz.scanner
|
||||
|
||||
import com.alibaba.android.arouter.launcher.ARouter
|
||||
import com.mogo.och.common.module.constant.OchCommonConst
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
|
||||
object ScannerManager {
|
||||
|
||||
private var scannerService: ScannerService? =
|
||||
ARouter.getInstance().build(OchCommonConst.BIZ_SCANNER).navigation() as ScannerService
|
||||
|
||||
|
||||
fun load(){
|
||||
OchChainLogManager.writeChainLogInit("初始化信息","初始化扫描器")
|
||||
scannerService?.load()
|
||||
}
|
||||
fun release(){
|
||||
OchChainLogManager.writeChainLogInit("释放信息","释放扫描器")
|
||||
scannerService?.release()
|
||||
}
|
||||
|
||||
fun addStateChangeListener(tag: String, listener: StateChangeListener) {
|
||||
scannerService?.addStateChangeListener(tag,listener)
|
||||
}
|
||||
|
||||
fun removeListener(tag:String){
|
||||
scannerService?.removeListener(tag)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.mogo.och.common.module.biz.scanner
|
||||
|
||||
import com.alibaba.android.arouter.facade.template.IProvider
|
||||
|
||||
interface ScannerService : IProvider {
|
||||
|
||||
fun addStateChangeListener(tag: String, listener: StateChangeListener) {}
|
||||
fun removeListener(tag:String){}
|
||||
fun load(){}
|
||||
fun release(){}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.common.module.manager.scnner
|
||||
package com.mogo.och.common.module.biz.scanner
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.mogo.och.common.module.biz.scanner
|
||||
|
||||
interface StateChangeListener {
|
||||
fun stateChange(newBindValue: BindStatus, newOpentValue: OpenStatus){}
|
||||
fun parseData(qrBean: QrBean){}
|
||||
}
|
||||
@@ -25,13 +25,20 @@ class OchCommonConst {
|
||||
return FunctionBuildConfig.urlJson.eagleMisUrl
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getAiUrl():String{
|
||||
return FunctionBuildConfig.urlJson.ndeUrl
|
||||
}
|
||||
|
||||
// token 失效 重新获取token
|
||||
const val WAIT_TAKEN = 100046
|
||||
|
||||
const val BIZ_LOGIN = "/ochbiz/common/login"
|
||||
const val BIZ_SKIN = "/ochbiz/common/skin"
|
||||
const val BIZ_SCANNER = "/ochbiz/common/scanner"
|
||||
const val BIZ_TIME = "/ochbiz/common/time"
|
||||
const val BIZ_OFFLINE = "/offlinedriver/offlinedata"
|
||||
const val BIZ_Bridge = "/birdge/bridge"
|
||||
|
||||
const val BUS_DRIVER = "/busdriver/busdriver"
|
||||
const val BUS_PASSENGER = "/buspassenger/buspassenger"
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.och.common.module.manager.audition.AuditionManager
|
||||
import com.mogo.och.common.module.manager.audition.MusicData
|
||||
import com.mogo.och.common.module.manager.audition.PlayState
|
||||
import com.shuyu.gsyvideoplayer.GSYVideoManager
|
||||
|
||||
object AudioFocusManager : AuditionManager.MusicDataChangeListener {
|
||||
|
||||
@@ -32,6 +33,10 @@ object AudioFocusManager : AuditionManager.MusicDataChangeListener {
|
||||
if(temp!= isPlayingMusic){
|
||||
isPlayingMusic = temp
|
||||
}
|
||||
if(temp) {
|
||||
// 播放音乐需要把视频暂停掉
|
||||
GSYVideoManager.onPause()
|
||||
}
|
||||
CallerLogger.d(TAG,"music updateState ${isPlayingTTS}--${isPlayingMusic}---${isPlayingVideo}")
|
||||
}
|
||||
|
||||
|
||||
@@ -5,18 +5,16 @@ import android.media.MediaFormat
|
||||
import android.net.Uri
|
||||
import android.os.Environment
|
||||
import android.text.TextUtils
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.utilcode.download.DownloadUtils
|
||||
import com.mogo.eagle.core.utilcode.download.callback.IDownloadListener
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
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.ThreadUtils
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager.EVENT_KEY_INFE_WITH_MUSIC
|
||||
import com.mogo.och.common.module.utils.FileUtils
|
||||
import com.mogo.och.common.module.wigets.media.MediaBeanManager
|
||||
import com.mogo.och.common.module.wigets.media.MediaPlayLogger
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
@@ -40,10 +38,7 @@ object AuditionCacheManager {
|
||||
ThreadUtils.getIoPool().execute {
|
||||
val localAdDataList = mutableListOf<MusicData>()
|
||||
try {
|
||||
val datas: MusicDataList = GsonUtils.fromJson(
|
||||
FunctionBuildConfig.musicUrlConfig, object : TypeToken<MusicDataList>() {}.type
|
||||
)
|
||||
localAdDataList.addAll(datas.musics)
|
||||
localAdDataList.addAll(MediaBeanManager.getMusicList())
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
|
||||
@@ -87,7 +87,9 @@ object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAudi
|
||||
fun playFirst(){
|
||||
ThreadUtils.runOnUiThread {
|
||||
if(!isPlaying()){
|
||||
toggle(musicList.first())
|
||||
if(musicList.isNotEmpty()) {
|
||||
toggle(musicList.first())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -118,6 +120,12 @@ object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAudi
|
||||
|
||||
public interface MusicDataChangeListener{
|
||||
fun addOneData(it: MusicData){}
|
||||
|
||||
/**
|
||||
* toggle 修改播放器状态
|
||||
* @param oldData 上一个不是 PlayState.None 的歌曲
|
||||
* @param musicData 当前播放状态发生变化的歌曲
|
||||
*/
|
||||
fun updateState(oldData: MusicData?,musicData: MusicData)
|
||||
fun updatePlayCurrent(currentPlay: Long, duration: Long, second: MusicData){}
|
||||
fun onMusicCompletion(musicData: MusicData) {}
|
||||
@@ -187,7 +195,7 @@ object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAudi
|
||||
|
||||
fun getPreMusicData(it: MusicData): MusicData {
|
||||
val indexOf = musicList.indexOf(it)
|
||||
if(indexOf== 0){
|
||||
if(indexOf == 0){
|
||||
return musicList.last()
|
||||
}else{
|
||||
return musicList[indexOf-1]
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
package com.mogo.och.common.module.manager.audition
|
||||
|
||||
|
||||
data class MusicDataList(val musics: MutableList<MusicData>)
|
||||
|
||||
/**
|
||||
* 音乐文件
|
||||
*/
|
||||
@@ -23,6 +20,21 @@ data class MusicData(
|
||||
fun isCloud():Boolean{
|
||||
return songUrlType=="cloud"
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
|
||||
other as MusicData
|
||||
|
||||
return id == other.id
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return id.hashCode()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
package com.mogo.och.common.module.manager.logchainanalytic
|
||||
|
||||
import android.text.TextUtils
|
||||
import com.mogo.commons.debug.DebugConfig
|
||||
import com.mogo.commons.storage.SharedPrefsMgr
|
||||
import com.mogo.commons.utils.MogoAnalyticUtils
|
||||
import com.mogo.eagle.core.data.app.AppConfigInfo
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.eagle.core.utilcode.util.DateTimeUtils
|
||||
import com.zhjt.service.chain.ChainLog
|
||||
|
||||
@@ -68,6 +62,8 @@ object OchChainLogManager {
|
||||
|
||||
const val EVENT_KEY_INFO_CALL_EYE = "analytics_event_call_eye_och"
|
||||
|
||||
const val EVENT_KEY_INFO_ERROR = "analytics_event_och_error"
|
||||
|
||||
|
||||
fun writeChainLogEye(title: String, info: String) {
|
||||
writeChainLog(title, info, true, EVENT_KEY_INFO_CALL_EYE)
|
||||
@@ -80,12 +76,17 @@ object OchChainLogManager {
|
||||
writeChainLog(title, info, true, EVENT_KEY_INFO_TIME)
|
||||
}
|
||||
|
||||
|
||||
// 轨迹方面的日志
|
||||
fun writeChainLogTrajectory(title: String, info: String) {
|
||||
writeChainLog(title, info, true, EVENT_KEY_INFE_WITH_TRAJECTORY)
|
||||
}
|
||||
|
||||
// 错误日志
|
||||
fun writeChainLogError(title: String, info: String) {
|
||||
writeChainLog(title, info, true, EVENT_KEY_INFO_ERROR)
|
||||
}
|
||||
|
||||
|
||||
fun writeChainLogMap(title: String, info: String) {
|
||||
writeChainLog(title, info, true, EVENT_KEY_INFO_MAP)
|
||||
}
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
package com.mogo.och.common.module.manager.scnner
|
||||
|
||||
import com.mogo.eagle.core.data.enums.EventTypeEnumNew
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxType
|
||||
import com.mogo.eagle.core.data.msgbox.V2XMsg
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager.saveMsgBox
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.WriteOffDevicesMsg
|
||||
import com.mogo.och.common.module.manager.socket.lan.ILanMessageListener
|
||||
import com.mogo.och.common.module.manager.socket.lan.LanSocketManager
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.DPMsgType
|
||||
|
||||
object ScannerClientManager {
|
||||
|
||||
private val TAG = "ScannerClientManager"
|
||||
|
||||
private val writeOfDevicefMsg = object : ILanMessageListener<WriteOffDevicesMsg> {
|
||||
override fun targetLan(): Class<WriteOffDevicesMsg> = WriteOffDevicesMsg::class.java
|
||||
override fun onLanMsgReceived(writeOffDevicesMsg: WriteOffDevicesMsg?){
|
||||
writeOffDevicesMsg?.let {
|
||||
if (it.isConnectScanner != null) {
|
||||
val reason = it.reason ?: ""
|
||||
if (it.isConnectScanner==true) { // 链接成功
|
||||
saveMsgBox(
|
||||
MsgBoxBean(
|
||||
MsgBoxType.V2X,
|
||||
V2XMsg(
|
||||
EventTypeEnumNew.TYPE_DEVICE_STATUS_NORMAL.poiType,
|
||||
reason,
|
||||
EventTypeEnumNew.TYPE_DEVICE_STATUS_NORMAL.tts,
|
||||
""
|
||||
)
|
||||
)
|
||||
)
|
||||
} else { // 核验失败
|
||||
saveMsgBox(
|
||||
MsgBoxBean(
|
||||
MsgBoxType.V2X,
|
||||
V2XMsg(
|
||||
EventTypeEnumNew.TYPE_DEVICE_STATUS_ABNORMAL.poiType,
|
||||
reason,
|
||||
EventTypeEnumNew.TYPE_DEVICE_STATUS_ABNORMAL.tts,
|
||||
""
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun load(){
|
||||
// 核销设备信息
|
||||
LanSocketManager.registerSocketMessageListener(DPMsgType.TYPE_WRITEOFF_DEVICES_INFO.type,writeOfDevicefMsg)
|
||||
}
|
||||
|
||||
fun release(){
|
||||
LanSocketManager.unRegisterSocketMessageListener(DPMsgType.TYPE_WRITEOFF_DEVICES_INFO.type,writeOfDevicefMsg)
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
package com.mogo.och.common.module.manager.scnner
|
||||
|
||||
interface StateChangeListener {
|
||||
fun stateChange(newBindValue: BindStatus, newOpentValue: OpenStatus){}
|
||||
fun parseData(params: MutableMap<String, String>, payload: String?){}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
|
||||
open class BaseDPMsg(
|
||||
open var type: Int = DPMsgType.TYPE_CLIENT_REGISTER.type,
|
||||
open var msgVersion: Int = 1,
|
||||
open var msgVersion: Int = 2,
|
||||
open var targetScreenTypes: MutableList<ScreenType> =
|
||||
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
|
||||
mutableListOf(ScreenType.Passenger, ScreenType.Guide)
|
||||
|
||||
@@ -22,5 +22,6 @@ enum class DPMsgType(val type: Int) {
|
||||
TYPE_WRITEOFF_INFO_DETAIL(13), //核销信息
|
||||
TYPE_WRITEOFF_INFO_RESULT(14), //核销结果
|
||||
TYPE_OUTOF_VOICE(15), //转发给乘客屏播放
|
||||
TYPE_LOGIN_INFO(16), //转发给乘客屏播放
|
||||
TYPE_CLIENT_REGISTER(12); //客户端注册 服务端需要
|
||||
}
|
||||
@@ -1,5 +1,9 @@
|
||||
package com.mogo.och.common.module.manager.socket.lan.bean
|
||||
|
||||
import com.mogo.commons.env.Env
|
||||
import com.mogo.commons.env.Project
|
||||
import com.mogo.och.common.module.biz.login.bean.OchLoginInfo
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2023/3/27
|
||||
@@ -130,6 +134,12 @@ data class OutofVoice(
|
||||
val notice: String,
|
||||
) : BaseDPMsg(DPMsgType.TYPE_OUTOF_VOICE.type, targetScreenTypes = mutableListOf(ScreenType.Passenger))
|
||||
|
||||
data class LoginInfo2Client(
|
||||
val loginInfo: String,
|
||||
val project: Project,
|
||||
val env: Env,
|
||||
val isOffline:Boolean
|
||||
) : BaseDPMsg(DPMsgType.TYPE_LOGIN_INFO.type,targetScreenTypes = mutableListOf(ScreenType.Passenger))
|
||||
|
||||
// 车辆类型
|
||||
enum class VehicleType {
|
||||
|
||||
@@ -2,11 +2,10 @@ package com.mogo.och.common.module.network.interceptor
|
||||
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClient
|
||||
import com.mogo.eagle.core.data.BaseData
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusManager
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusEnum
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.ObservableSource
|
||||
import io.reactivex.functions.Function
|
||||
@@ -16,15 +15,12 @@ class FRetryWithTime<T : BaseData> : Function<T, ObservableSource<T>> {
|
||||
override fun apply(baseData: T): ObservableSource<T> {
|
||||
baseData.let {
|
||||
if (it.code == 100046 || it.code == 100045 || it.code == 100005 || it.code == 100006 || it.code == 520003) {
|
||||
MoGoAiCloudClient.getInstance().refreshToken()
|
||||
return Observable.error(OchCommonRetryException())
|
||||
}else if(it.code == 1003){
|
||||
if(!FunctionBuildConfig.isOffLine&&!FunctionBuildConfig.ochdebug){
|
||||
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
|
||||
CallerLogger.d("FRetryWithTime", "接口失败报错 1003:${LoginStatusEnum.Logout}")
|
||||
LoginStatusManager.setLoginStatus(LoginStatusEnum.Logout)
|
||||
}
|
||||
}
|
||||
CallerLogger.e(M_OCHCOMMON, "接口失败报错 1003:需重新查询登录状态")
|
||||
OchChainLogManager.writeChainLogNet(true,"接口错误",
|
||||
"错误code:${it.code} 后台登录状态变更 前台重新查询登录状态接口来确定")
|
||||
LoginStatusManager.queryLoginStatusByNet(false)
|
||||
}
|
||||
}
|
||||
return Observable.just(baseData)
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.mogo.och.common.module.network.interceptor
|
||||
import com.mogo.eagle.core.utilcode.constant.TimeConstants
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.util.TimeUtils
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
import com.mogo.och.common.module.utils.CallerLoggerUtils.flavorTag
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.ObservableSource
|
||||
@@ -15,12 +16,13 @@ class RetryWithTime : Function<Observable<Throwable?>, ObservableSource<Any?>> {
|
||||
private const val TAG = "RetryWithTime"
|
||||
}
|
||||
var current = -1
|
||||
private var timeDelys = intArrayOf(3, 1, 2)
|
||||
private var timeDelys = intArrayOf(6, 2, 4)
|
||||
override fun apply(throwableObservable: Observable<Throwable?>): ObservableSource<Any?>? {
|
||||
return throwableObservable.flatMap {
|
||||
++current
|
||||
CallerLogger.e("${flavorTag}$TAG", " 时间:${TimeUtils.getStringByNow(0, TimeConstants.SEC)}")
|
||||
if (it is OchCommonRetryException && current < timeDelys.size) {
|
||||
OchChainLogManager.writeChainLogError("token超时","${timeDelys[current]}s后重试")
|
||||
Observable.timer(timeDelys[current].toLong(), TimeUnit.SECONDS)
|
||||
} else {
|
||||
Observable.error(it)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.mogo.och.common.module.utils
|
||||
|
||||
import com.mogo.commons.debug.DebugConfig
|
||||
import com.mogo.commons.env.Env
|
||||
import com.mogo.commons.env.EnvUtils
|
||||
import com.mogo.commons.env.Project
|
||||
import com.mogo.commons.env.ProjectUtils
|
||||
import com.mogo.commons.storage.SharedPrefsMgr
|
||||
@@ -8,6 +10,7 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
import com.mogo.eagle.core.utilcode.mogo.Product
|
||||
import com.mogo.eagle.core.utilcode.util.AppUtils
|
||||
import com.mogo.och.common.module.manager.cache.OchSPManager
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.BusinessType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.EnvType
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.ProjectType
|
||||
@@ -41,7 +44,7 @@ object FlavorUtils {
|
||||
} else if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
|
||||
info.append(" B2")
|
||||
} else {
|
||||
info.append(" C1")
|
||||
info.append(" none")
|
||||
}
|
||||
|
||||
when (DebugConfig.getNetMode()) {
|
||||
@@ -68,61 +71,14 @@ object FlavorUtils {
|
||||
}
|
||||
|
||||
info.append(" ${AppUtils.getAppVersionName()}")
|
||||
info.append(" AppSN:${SharedPrefsMgr.getInstance().sn}")
|
||||
info.append(" AppSN:${OchSPManager.getSn()}")
|
||||
return info.toString()
|
||||
}
|
||||
|
||||
fun getBusinessInfo(businessType: Int): String {
|
||||
val businessEnum = Product.valueOf(businessType)
|
||||
FunctionBuildConfig.supportBusiness.forEach {
|
||||
when (it) {
|
||||
"shuttle" -> {
|
||||
val isSupply = businessEnum == Product.SHUTTLE
|
||||
if (isSupply) {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
"bus" -> {
|
||||
val isSupply = businessEnum == Product.BUS
|
||||
if (isSupply) {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
"taxi" -> {
|
||||
val isSupply = businessEnum == Product.TAXI
|
||||
if (isSupply) {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
"charter" -> {
|
||||
val isSupply = businessEnum == Product.CHARTER
|
||||
if (isSupply) {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
"scheduled" -> {
|
||||
val isSupply = businessEnum == Product.SCHEDULED
|
||||
if (isSupply) {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
val reason = StringBuilder()
|
||||
reason.append("业务异常<当前支持:")
|
||||
FunctionBuildConfig.supportBusiness.forEachIndexed { index, s ->
|
||||
if (index == FunctionBuildConfig.supportBusiness.size - 1) {
|
||||
reason.append(s)
|
||||
} else {
|
||||
reason.append("${s},")
|
||||
}
|
||||
}
|
||||
when (businessEnum) {
|
||||
Product.TAXI -> reason.append(" 后台配置:taxi>")
|
||||
Product.BUS -> reason.append(" 后台配置:bus>")
|
||||
@@ -212,100 +168,25 @@ object FlavorUtils {
|
||||
}
|
||||
|
||||
fun checkAllEnv(
|
||||
projectType: ProjectType,
|
||||
envType: EnvType,
|
||||
vehicleType: VehicleType,
|
||||
businessType: BusinessType
|
||||
projectType: Project,
|
||||
envType: Env,
|
||||
): String {
|
||||
|
||||
val reason = StringBuilder()
|
||||
|
||||
val isProjectSupply = when (ProjectUtils.getProjectType()) {
|
||||
Project.SAAS -> projectType == ProjectType.saas
|
||||
Project.DALI -> projectType == ProjectType.dali
|
||||
Project.MOGO -> projectType == ProjectType.mogo
|
||||
Project.YANTAI -> projectType == ProjectType.yantai
|
||||
}
|
||||
val isProjectSupply = ProjectUtils.getProjectType()==projectType
|
||||
|
||||
if (!isProjectSupply) {
|
||||
reason.append("项目异常<当前:${ProjectUtils.getProjectType().name}, 后台配置:${projectType.name}> ")
|
||||
reason.append("项目异常<当前:${ProjectUtils.getProjectType().value}, 后台配置:${projectType.value}> ")
|
||||
}
|
||||
|
||||
val currentVehicle: String
|
||||
val vehicleTypeSupply =
|
||||
if (AppIdentityModeUtils.isT1T2(FunctionBuildConfig.appIdentityMode)) {
|
||||
currentVehicle = VehicleType.T1T2.name
|
||||
vehicleType == VehicleType.T1T2
|
||||
} else if (AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode)) {
|
||||
currentVehicle = VehicleType.M1.name
|
||||
vehicleType == VehicleType.M1
|
||||
} else if (AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode)) {
|
||||
currentVehicle = VehicleType.B1.name
|
||||
vehicleType == VehicleType.B1
|
||||
} else if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
|
||||
currentVehicle = VehicleType.B2.name
|
||||
vehicleType == VehicleType.B2
|
||||
} else {
|
||||
currentVehicle = VehicleType.C1.name
|
||||
vehicleType == VehicleType.C1
|
||||
}
|
||||
if (!vehicleTypeSupply) {
|
||||
reason.append("车型异常<当前:${currentVehicle}, 后台配置:${vehicleType.name}> ")
|
||||
}
|
||||
val envTypeSupply = EnvUtils.getEnvType()==envType
|
||||
|
||||
val currentenvType: String
|
||||
val envTypeSupply = when (DebugConfig.getNetMode()) {
|
||||
2 -> {
|
||||
currentenvType = EnvType.qa.name
|
||||
envType == EnvType.qa
|
||||
}
|
||||
|
||||
3 -> {
|
||||
currentenvType = EnvType.online.name
|
||||
envType == EnvType.online
|
||||
}
|
||||
|
||||
4 -> {
|
||||
currentenvType = EnvType.demo.name
|
||||
envType == EnvType.demo
|
||||
}
|
||||
|
||||
else -> {
|
||||
currentenvType = EnvType.qa.name
|
||||
envType == EnvType.qa
|
||||
}
|
||||
}
|
||||
if (!envTypeSupply) {
|
||||
reason.append("环境异常<当前:${currentenvType} 后台配置:${envType.name}> ")
|
||||
}
|
||||
|
||||
|
||||
val businessTypeSupply = checkBusinessMine(businessType)
|
||||
|
||||
if (!businessTypeSupply) {
|
||||
reason.append("业务异常<当前支持:")
|
||||
FunctionBuildConfig.supportBusiness.forEachIndexed { index, s ->
|
||||
if (index == FunctionBuildConfig.supportBusiness.size - 1) {
|
||||
reason.append(s)
|
||||
} else {
|
||||
reason.append("${s},")
|
||||
}
|
||||
}
|
||||
reason.append(" 后台配置:${businessType.name}> ")
|
||||
reason.append("环境异常<当前:${EnvUtils.getEnvType().value} 后台配置:${envType.value}> ")
|
||||
}
|
||||
|
||||
return reason.toString()
|
||||
}
|
||||
|
||||
fun checkBusinessMine(businessType: BusinessType): Boolean {
|
||||
if (businessType == BusinessType.none) {
|
||||
return true
|
||||
}
|
||||
FunctionBuildConfig.supportBusiness.forEach {
|
||||
if (businessType.name == it) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
}
|
||||
@@ -38,4 +38,10 @@ public class NumberFormatUtil {
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static String percentage(float numver,int decimal){
|
||||
float newNumber = numver*100;
|
||||
return String.format("%."+decimal+"f",newNumber);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,9 +8,11 @@ import android.view.LayoutInflater
|
||||
import android.view.animation.LinearInterpolator
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.mogo.commons.module.status.MogoStatusManager
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.config.HdMapBuildConfig
|
||||
import com.mogo.eagle.core.data.enums.Carmodel
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
import com.mogo.map.listener.IMogoMapListener
|
||||
@@ -42,7 +44,7 @@ class LoadingMapStatusView @JvmOverloads constructor(
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
CallerLogger.d(TAG,"onAttachedToWindow")
|
||||
CallerLogger.d(TAG,"地图loading_onAttachedToWindow")
|
||||
LoginStatusManager.addListener(TAG,this)
|
||||
visibility = VISIBLE
|
||||
MogoMapListenerHandler.mogoMapListenerHandler.registerHostMapListener(TAG,this)
|
||||
@@ -70,9 +72,9 @@ class LoadingMapStatusView @JvmOverloads constructor(
|
||||
// CallerMapUIServiceManager.getMapUIController()?.changeCurrentIcon(currentByteArray,true)
|
||||
|
||||
// OchChainLogManager.writeChainLog("模型加载","加载地图成功、并切换模型,${LoginStatusManager.getLoginInfo()}")
|
||||
|
||||
CallerMapUIServiceManager.getMapUIController()?.changeCurrentIcon(HdMapBuildConfig.currentCarVrIconRes)
|
||||
|
||||
if(!AppIdentityModeUtils.isSweeper(FunctionBuildConfig.appIdentityMode)){
|
||||
CallerMapUIServiceManager.getMapUIController()?.changeCurrentIcon(HdMapBuildConfig.currentCarVrIconRes)
|
||||
}
|
||||
UiThreadHandler.postDelayed({ visibility = GONE },2_000,UiThreadHandler.MODE.QUEUE)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,241 @@
|
||||
package com.mogo.och.common.module.wigets
|
||||
|
||||
/*
|
||||
* Copyright WeiLianYang
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.*
|
||||
import android.util.AttributeSet
|
||||
import android.util.Log
|
||||
import androidx.annotation.ColorInt
|
||||
import androidx.appcompat.widget.AppCompatImageView
|
||||
import com.mogo.och.common.module.R
|
||||
|
||||
|
||||
/**
|
||||
* author : WilliamYang
|
||||
* date : 2022/9/18 14:54
|
||||
* description : 可设置 圆角、外边框 的 ImageView
|
||||
*
|
||||
* 使用方式:
|
||||
*
|
||||
* 1. 使用 riv_radius 设置4个角均为圆角,且圆角值一样
|
||||
*
|
||||
* 2. 使用 riv_roundAsCircle 设置图片为圆形,使用 riv_radius 设置半径,当 riv_radius 未设置时,默认取宽高最小值的一半
|
||||
*
|
||||
* 3. 使用 riv_topLeft_radius, riv_topRight_radius, riv_bottomLeft_radius, riv_bottomRight_radius 设置4个圆角
|
||||
*
|
||||
* 4. 使用 riv_borderColor, riv_borderWidth 设置外边框颜色和宽度
|
||||
*
|
||||
* <p>
|
||||
*/
|
||||
class OchRoundImageView @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : AppCompatImageView(context, attrs, defStyleAttr) {
|
||||
|
||||
/** 绘制路径 **/
|
||||
private val path = Path()
|
||||
|
||||
/** 绘制坐标 **/
|
||||
private val rectF = RectF()
|
||||
|
||||
/** 圆角大小 **/
|
||||
private var radius = 0f
|
||||
|
||||
/** 顶部左侧圆角大小 **/
|
||||
private var topLeftRadius = 0f
|
||||
|
||||
/** 顶部右侧圆角大小 **/
|
||||
private var topRightRadius = 0f
|
||||
|
||||
/** 底部左侧圆角大小 **/
|
||||
private var bottomLeftRadius = 0f
|
||||
|
||||
/** 底部右侧圆角大小 **/
|
||||
private var bottomRightRadius = 0f
|
||||
|
||||
/** 作为圆形图片使用 **/
|
||||
private var roundAsCircle = false
|
||||
|
||||
/** 外边框颜色、宽度、画笔、路径、坐标 */
|
||||
private var borderColor = 0
|
||||
private var borderWidth = 0f
|
||||
private val borderPaint: Paint?
|
||||
private val borderPath = Path()
|
||||
private val borderRectF = RectF()
|
||||
|
||||
init {
|
||||
val ta = context.obtainStyledAttributes(attrs, R.styleable.RoundImageView)
|
||||
|
||||
roundAsCircle = ta.getBoolean(R.styleable.RoundImageView_riv_roundAsCircle, false)
|
||||
borderColor = ta.getColor(R.styleable.RoundImageView_riv_borderColor, Color.TRANSPARENT)
|
||||
borderWidth = ta.getDimension(R.styleable.RoundImageView_riv_borderWidth, 0f)
|
||||
|
||||
radius = ta.getDimension(R.styleable.RoundImageView_riv_radius, 0f)
|
||||
|
||||
topLeftRadius = ta.getDimension(R.styleable.RoundImageView_riv_topLeft_radius, 0f)
|
||||
topRightRadius = ta.getDimension(R.styleable.RoundImageView_riv_topRight_radius, 0f)
|
||||
bottomLeftRadius = ta.getDimension(R.styleable.RoundImageView_riv_bottomLeft_radius, 0f)
|
||||
bottomRightRadius = ta.getDimension(R.styleable.RoundImageView_riv_bottomRight_radius, 0f)
|
||||
|
||||
ta.recycle()
|
||||
|
||||
borderPaint = Paint(Paint.ANTI_ALIAS_FLAG)
|
||||
updateBorderPaint()
|
||||
}
|
||||
|
||||
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
|
||||
super.onSizeChanged(w, h, oldw, oldh)
|
||||
|
||||
// 当作为圆形图片使用,且半径未设置时,半径将取宽高最小值的一半
|
||||
if (roundAsCircle && radius <= 0f) {
|
||||
radius = w.coerceAtMost(h) / 2f
|
||||
}
|
||||
}
|
||||
|
||||
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
|
||||
// 当作为圆形图片使用,宽高值不同,取宽高的最小值作为宽和高
|
||||
val widthSize = MeasureSpec.getSize(widthMeasureSpec)
|
||||
val heightSize = MeasureSpec.getSize(heightMeasureSpec)
|
||||
if (roundAsCircle && widthSize > 0 && heightSize > 0 && widthSize != heightSize) {
|
||||
val size = widthSize.coerceAtMost(heightSize)
|
||||
setMeasuredDimension(size, size)
|
||||
} else {
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDraw(canvas: Canvas) {
|
||||
val halfBorderWidth = borderWidth / 2
|
||||
if (radius > 0 || topLeftRadius > 0 || topRightRadius > 0 || bottomLeftRadius > 0 || bottomRightRadius > 0) {
|
||||
// 如果设置了圆角值
|
||||
path.reset()
|
||||
borderPath.reset()
|
||||
if (roundAsCircle) {
|
||||
path.addCircle(radius, radius, radius, Path.Direction.CW)
|
||||
} else {
|
||||
if (topLeftRadius == 0f) topLeftRadius = radius
|
||||
if (topRightRadius == 0f) topRightRadius = radius
|
||||
if (bottomLeftRadius == 0f) bottomLeftRadius = radius
|
||||
if (bottomRightRadius == 0f) bottomRightRadius = radius
|
||||
|
||||
Log.d("RoundImageView", "onDraw: topLeftRadius=$topLeftRadius, topRightRadius=$topRightRadius, bottomLeftRadius=$bottomLeftRadius, bottomRightRadius=$bottomRightRadius")
|
||||
|
||||
val radii = floatArrayOf(
|
||||
topLeftRadius, topLeftRadius, topRightRadius, topRightRadius,
|
||||
bottomRightRadius, bottomRightRadius, bottomLeftRadius, bottomLeftRadius
|
||||
)
|
||||
|
||||
|
||||
|
||||
borderRectF.set(
|
||||
paddingLeft.toFloat() + halfBorderWidth, paddingTop.toFloat() + halfBorderWidth,
|
||||
measuredWidth.toFloat() - paddingRight - halfBorderWidth,
|
||||
measuredHeight.toFloat() - paddingBottom - halfBorderWidth
|
||||
)
|
||||
|
||||
borderPath.addRoundRect(borderRectF, radii, Path.Direction.CW)
|
||||
|
||||
if (halfBorderWidth > 0) {
|
||||
radii.forEachIndexed { index, f ->
|
||||
if (f > 0) {
|
||||
radii[index] = f + halfBorderWidth
|
||||
}
|
||||
}
|
||||
}
|
||||
rectF.set(
|
||||
paddingLeft.toFloat(),
|
||||
paddingTop.toFloat(),
|
||||
measuredWidth.toFloat() - paddingRight,
|
||||
measuredHeight.toFloat() - paddingBottom
|
||||
)
|
||||
path.addRoundRect(rectF, radii, Path.Direction.CW)
|
||||
}
|
||||
|
||||
// 裁剪画布
|
||||
canvas.clipPath(path)
|
||||
}
|
||||
|
||||
super.onDraw(canvas)
|
||||
|
||||
if (borderWidth > 0 && borderPaint != null) {
|
||||
if (roundAsCircle) {
|
||||
canvas.drawCircle(radius, radius, radius - borderWidth / 2, borderPaint)
|
||||
} else {
|
||||
canvas.drawPath(borderPath, borderPaint)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateBorderPaint() {
|
||||
borderPaint?.apply {
|
||||
color = borderColor
|
||||
strokeWidth = borderWidth
|
||||
style = Paint.Style.STROKE
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param radius 圆角大小,当 asCircle 为 true 时,值作为圆形图片的半径,如果为0,则将取宽高最小值的一半
|
||||
* @param borderWidth 外边框宽度
|
||||
* @param borderColor 外边框颜色
|
||||
* @param asCircle 作为圆形图片使用,默认 false
|
||||
*/
|
||||
fun setRadiusAndBorder(
|
||||
radius: Float,
|
||||
borderWidth: Float = 0f,
|
||||
@ColorInt borderColor: Int = 0,
|
||||
asCircle: Boolean = false,
|
||||
) {
|
||||
this.radius = radius
|
||||
this.borderWidth = borderWidth
|
||||
this.borderColor = borderColor
|
||||
this.roundAsCircle = asCircle
|
||||
|
||||
updateBorderPaint()
|
||||
}
|
||||
|
||||
/**
|
||||
* @param topLeftRadius 顶部左侧圆角大小
|
||||
* @param topRightRadius 顶部右侧圆角大小
|
||||
* @param bottomLeftRadius 底部左侧圆角大小
|
||||
* @param bottomRightRadius 底部右侧圆角大小
|
||||
* @param borderWidth 外边框宽度
|
||||
* @param borderColor 外边框颜色
|
||||
*/
|
||||
fun setRadiusAndBorder(
|
||||
topLeftRadius: Float = 0f,
|
||||
topRightRadius: Float = 0f,
|
||||
bottomLeftRadius: Float = 0f,
|
||||
bottomRightRadius: Float = 0f,
|
||||
borderWidth: Float = 0f,
|
||||
@ColorInt borderColor: Int = 0
|
||||
) {
|
||||
this.topLeftRadius = topLeftRadius
|
||||
this.topRightRadius = topRightRadius
|
||||
this.bottomLeftRadius = bottomLeftRadius
|
||||
this.bottomRightRadius = bottomRightRadius
|
||||
this.borderWidth = borderWidth
|
||||
this.borderColor = borderColor
|
||||
|
||||
updateBorderPaint()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -37,6 +37,8 @@ class CommonFeedbackDialog : BaseFloatDialog, LifecycleObserver {
|
||||
Status.fail -> {
|
||||
ivFeedbackStatus.setImageResource(R.drawable.common_feedback_fail)
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
RxUtils.createSubscribe(1_000) {
|
||||
hide()
|
||||
|
||||
@@ -3,15 +3,16 @@ package com.mogo.och.common.module.wigets.map.orderstatus
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.lifecycle.ViewModel
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
import com.mogo.och.common.module.R
|
||||
import com.mogo.och.common.module.biz.login.ILoginCallback
|
||||
import com.mogo.och.common.module.biz.login.LoginStatusManager
|
||||
import com.mogo.och.common.module.biz.login.OpenOrderStatusEnum
|
||||
import com.mogo.och.common.module.biz.login.EnumOpenOrderStatus
|
||||
|
||||
class OrderStatusViewModel : ViewModel(), ILoginCallback {
|
||||
|
||||
private val TAG = OrderStatusViewModel::class.java.simpleName
|
||||
private val TAG = M_OCHCOMMON+OrderStatusViewModel::class.java.simpleName
|
||||
|
||||
private var viewCallback: IVisualCallback? = null
|
||||
|
||||
@@ -26,11 +27,12 @@ class OrderStatusViewModel : ViewModel(), ILoginCallback {
|
||||
}
|
||||
|
||||
fun setDistanceCallback(viewCallback: IVisualCallback) {
|
||||
CallerLogger.d(TAG,"监听接单状态")
|
||||
LoginStatusManager.addListener(TAG, this)
|
||||
this.viewCallback = viewCallback
|
||||
}
|
||||
|
||||
override fun onOpenOrderStatusEnumChange(businessEnum: OpenOrderStatusEnum?) {
|
||||
override fun onOpenOrderStatusEnumChange(businessEnum: EnumOpenOrderStatus?) {
|
||||
CallerLogger.d(TAG,"新的接单状态${businessEnum}")
|
||||
UiThreadHandler.post({
|
||||
if (LoginStatusManager.isOpenOrderType()) {
|
||||
|
||||
@@ -175,6 +175,8 @@ class SeekBarView : ConstraintLayout, VisualViewModel.IVisualCallback {
|
||||
duration = 100
|
||||
}.start()
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -88,6 +88,8 @@ class VisualViewModel : ViewModel(),
|
||||
Visualangle.UnChange -> {
|
||||
viewCallback?.setUnableChange()
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,14 +1,106 @@
|
||||
package com.mogo.och.common.module.wigets.media
|
||||
|
||||
data class MediaDataList(val medias: MutableList<MediaItem>)
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
import com.mogo.eagle.core.utilcode.mogo.Vehicle
|
||||
import com.mogo.eagle.core.utilcode.util.GsonUtils
|
||||
import com.mogo.och.common.module.manager.audition.MusicData
|
||||
|
||||
object MediaBeanManager {
|
||||
|
||||
private var datasGlobal: MediaDataWithVehicle? = null
|
||||
|
||||
fun getMusicList(): MutableList<MusicData> {
|
||||
if (datasGlobal == null) {
|
||||
datasGlobal = GsonUtils.fromJson(
|
||||
FunctionBuildConfig.mediaUrlConfig,
|
||||
object : TypeToken<MediaDataWithVehicle?>() {}.type
|
||||
)
|
||||
}
|
||||
return when (AppIdentityModeUtils.getVehicle(FunctionBuildConfig.appIdentityMode)) {
|
||||
Vehicle.T1T2 -> {
|
||||
datasGlobal?.T1T2?.musics?:mutableListOf()
|
||||
}
|
||||
|
||||
Vehicle.B1 -> {
|
||||
datasGlobal?.B1?.musics?:mutableListOf()
|
||||
}
|
||||
|
||||
Vehicle.B2 -> {
|
||||
datasGlobal?.B1?.musics?:mutableListOf()
|
||||
}
|
||||
|
||||
Vehicle.M1 -> {
|
||||
datasGlobal?.M1?.musics?:mutableListOf()
|
||||
}
|
||||
|
||||
else -> {
|
||||
mutableListOf()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getMediaList(): MutableList<MediaItem> {
|
||||
if (datasGlobal == null) {
|
||||
datasGlobal = GsonUtils.fromJson(
|
||||
FunctionBuildConfig.mediaUrlConfig,
|
||||
object : TypeToken<MediaDataWithVehicle?>() {}.type
|
||||
)
|
||||
}
|
||||
return when (AppIdentityModeUtils.getVehicle(FunctionBuildConfig.appIdentityMode)) {
|
||||
Vehicle.T1T2 -> {
|
||||
datasGlobal?.T1T2?.medias?:mutableListOf()
|
||||
}
|
||||
|
||||
Vehicle.B1 -> {
|
||||
datasGlobal?.B1?.medias?:mutableListOf()
|
||||
}
|
||||
|
||||
Vehicle.B2 -> {
|
||||
datasGlobal?.B1?.medias?:mutableListOf()
|
||||
}
|
||||
|
||||
Vehicle.M1 -> {
|
||||
datasGlobal?.M1?.medias?:mutableListOf()
|
||||
}
|
||||
|
||||
else -> {
|
||||
mutableListOf()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data class MediaDataWithVehicleList(val musicDataWithEnvList: MutableList<MediaDataWithVehicle>) {
|
||||
|
||||
}
|
||||
|
||||
data class MediaDataWithVehicle(
|
||||
val B1: B1,
|
||||
val B2: B2,
|
||||
val T1T2: T1T2,
|
||||
val M1: M1,
|
||||
)
|
||||
|
||||
|
||||
data class B1(val medias: MutableList<MediaItem>, val musics: MutableList<MusicData>)
|
||||
data class B2(val medias: MutableList<MediaItem>, val musics: MutableList<MusicData>)
|
||||
data class T1T2(val medias: MutableList<MediaItem>, val musics: MutableList<MusicData>)
|
||||
data class M1(val medias: MutableList<MediaItem>, val musics: MutableList<MusicData>)
|
||||
|
||||
data class MediaBean(
|
||||
val medias: MutableList<MediaItem>,
|
||||
val musics: MutableList<MusicData>,
|
||||
)
|
||||
|
||||
data class MediaItem(
|
||||
var priority:Int,
|
||||
var priority: Int,
|
||||
var fileUrl: String,
|
||||
var fileType: Int,
|
||||
var coverImageUrl: String,
|
||||
var title: String,
|
||||
val isTemp:Boolean = false
|
||||
val isTemp: Boolean = false
|
||||
) {
|
||||
companion object {
|
||||
const val MEDIA_TYPE_IMAGE = 1
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user