diff --git a/OCH/common/biz/src/main/java/com/mogo/och/biz/time/TimeProvider.kt b/OCH/common/biz/src/main/java/com/mogo/och/biz/time/TimeProvider.kt index 7efdfef901..da94e704c1 100644 --- a/OCH/common/biz/src/main/java/com/mogo/och/biz/time/TimeProvider.kt +++ b/OCH/common/biz/src/main/java/com/mogo/och/biz/time/TimeProvider.kt @@ -22,6 +22,8 @@ class TimeProvider : TimeService { private var diffTime = 0L + private var diffTimeGetTime = 0L + override fun loadNewTime() { OchChainLogManager.writeChainLogTime("时间同步", "开始时间同步") d(TAG, "时间同步_开始时间同步") @@ -36,6 +38,7 @@ class TimeProvider : TimeService { val netTime = (endTime - startTime) / 2 val currentServerTime = serverTime + netTime diffTime = currentServerTime - endTime + diffTimeGetTime = endTime } OchChainLogManager.writeChainLogTime( @@ -78,6 +81,14 @@ class TimeProvider : TimeService { return System.currentTimeMillis() + diffTime } + override fun getSynServerTime(): Long { + return diffTimeGetTime + } + + override fun getTimeStampDiff(): Long { + return diffTime + } + override fun init(context: Context?) { this.context = context diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/time/TimeManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/time/TimeManager.kt index 109127aa32..b30d09babd 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/time/TimeManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/time/TimeManager.kt @@ -13,7 +13,7 @@ object TimeManager { private const val TAG = M_OCHCOMMON+"TimeManager" - private var skinService: TimeService? = + private var timeService: TimeService? = ARouter.getInstance().build(OchCommonConst.BIZ_TIME).navigation() as TimeService @@ -24,11 +24,21 @@ object TimeManager { } fun loadNewTime(){ - skinService?.loadNewTime() + timeService?.loadNewTime() } fun getCurrentTimeStamp():Long{ - return skinService?.getCurrentTimeStamp()?:System.currentTimeMillis() + return timeService?.getCurrentTimeStamp()?:System.currentTimeMillis() } + fun getSynServerTime():Long{ + return timeService?.getSynServerTime()?:0L + } + + fun getTimeStampDiff():Long{ + return timeService?.getTimeStampDiff()?:0L + } + + + } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/time/TimeService.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/time/TimeService.kt index a1e3bb2726..eeb35487f1 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/time/TimeService.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/time/TimeService.kt @@ -11,4 +11,8 @@ interface TimeService : IProvider { fun getCurrentTimeStamp():Long + fun getSynServerTime():Long + + fun getTimeStampDiff():Long + } \ No newline at end of file diff --git a/OCH/offline/driver/schemas/com.mogo.och.offline.repository.db.MyDataBase/6.json b/OCH/offline/driver/schemas/com.mogo.och.offline.repository.db.MyDataBase/6.json new file mode 100644 index 0000000000..7324120203 --- /dev/null +++ b/OCH/offline/driver/schemas/com.mogo.och.offline.repository.db.MyDataBase/6.json @@ -0,0 +1,475 @@ +{ + "formatVersion": 1, + "database": { + "version": 6, + "identityHash": "01269591615dbf16e01fcf0281ea117b", + "entities": [ + { + "tableName": "contrail_data_table", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `line_id` INTEGER, `csv_file_url` TEXT, `csv_file_md5` TEXT, `txt_file_url` TEXT, `txt_file_md5` TEXT, `contrail_save_time` INTEGER, `md5` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "lineId", + "columnName": "line_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "csvFileUrl", + "columnName": "csv_file_url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "csvFileMd5", + "columnName": "csv_file_md5", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "txtFileUrl", + "columnName": "txt_file_url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "txtFileMd5", + "columnName": "txt_file_md5", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "contrailSaveTime", + "columnName": "contrail_save_time", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "md5", + "columnName": "md5", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_contrail_data_table_line_id", + "unique": false, + "columnNames": [ + "line_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_contrail_data_table_line_id` ON `${TABLE_NAME}` (`line_id`)" + }, + { + "name": "index_contrail_data_table_md5", + "unique": false, + "columnNames": [ + "md5" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_contrail_data_table_md5` ON `${TABLE_NAME}` (`md5`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "line_data_table", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `line_id` INTEGER, `line_name` TEXT, `end_station_name` TEXT, `line_get_time` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "lineId", + "columnName": "line_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lineName", + "columnName": "line_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "endStationName", + "columnName": "end_station_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "linegetTime", + "columnName": "line_get_time", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_line_data_table_line_id", + "unique": false, + "columnNames": [ + "line_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_line_data_table_line_id` ON `${TABLE_NAME}` (`line_id`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "site_data_table", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `site_id` INTEGER, `line_id` INTEGER, `name` TEXT, `name_kr` TEXT, `seq` INTEGER, `gcj_lon` REAL, `gcj_lat` REAL, `lon` REAL, `lat` REAL, `introduction` TEXT, `is_play_tts` INTEGER, `md5` TEXT, `videoList` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "siteId", + "columnName": "site_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lineId", + "columnName": "line_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "nameKr", + "columnName": "name_kr", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "seq", + "columnName": "seq", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "gcjLon", + "columnName": "gcj_lon", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "gcjLat", + "columnName": "gcj_lat", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "lon", + "columnName": "lon", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "lat", + "columnName": "lat", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "introduction", + "columnName": "introduction", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "isPlayTts", + "columnName": "is_play_tts", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "md5", + "columnName": "md5", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "videoListDB", + "columnName": "videoList", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_site_data_table_site_id", + "unique": false, + "columnNames": [ + "site_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_site_data_table_site_id` ON `${TABLE_NAME}` (`site_id`)" + }, + { + "name": "index_site_data_table_line_id", + "unique": false, + "columnNames": [ + "line_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_site_data_table_line_id` ON `${TABLE_NAME}` (`line_id`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "used_line_data_table", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task_id` INTEGER, `line_id` INTEGER, `site_id` INTEGER, `line_name` TEXT, `name` TEXT, `name_kr` TEXT, `seq` INTEGER, `gcj_lon` REAL, `gcj_lat` REAL, `lon` REAL, `lat` REAL, `driving_status` INTEGER, `leaving` INTEGER, `arrived_time` INTEGER, `leave_time` INTEGER, `introduction` TEXT, `is_play_tts` INTEGER, `event_save_time` INTEGER NOT NULL, `videoList` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "taskId", + "columnName": "task_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lineId", + "columnName": "line_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "siteId", + "columnName": "site_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lineName", + "columnName": "line_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "nameKr", + "columnName": "name_kr", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "seq", + "columnName": "seq", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "gcjLon", + "columnName": "gcj_lon", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "gcjLat", + "columnName": "gcj_lat", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "lon", + "columnName": "lon", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "lat", + "columnName": "lat", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "drivingStatus", + "columnName": "driving_status", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "leaving", + "columnName": "leaving", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "arrivedTime", + "columnName": "arrived_time", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "leaveTime", + "columnName": "leave_time", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "introduction", + "columnName": "introduction", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "isPlayTts", + "columnName": "is_play_tts", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "eventSaveTime", + "columnName": "event_save_time", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "videoList", + "columnName": "videoList", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "temp_task_data_table", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task_id` INTEGER, `line_id` INTEGER, `start_time` INTEGER NOT NULL, `end_time` INTEGER, `task_get_time` INTEGER NOT NULL, `status` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "taskId", + "columnName": "task_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lineId", + "columnName": "line_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "startTime", + "columnName": "start_time", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "endtime", + "columnName": "end_time", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "taskgetTime", + "columnName": "task_get_time", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "status", + "columnName": "status", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_temp_task_data_table_task_id", + "unique": false, + "columnNames": [ + "task_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_temp_task_data_table_task_id` ON `${TABLE_NAME}` (`task_id`)" + }, + { + "name": "index_temp_task_data_table_line_id", + "unique": false, + "columnNames": [ + "line_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_temp_task_data_table_line_id` ON `${TABLE_NAME}` (`line_id`)" + } + ], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '01269591615dbf16e01fcf0281ea117b')" + ] + } +} \ No newline at end of file diff --git a/OCH/offline/driver/src/main/java/com/mogo/och/offline/ui/go2login/GoLoginModel.kt b/OCH/offline/driver/src/main/java/com/mogo/och/offline/ui/go2login/GoLoginModel.kt new file mode 100644 index 0000000000..05f405a660 --- /dev/null +++ b/OCH/offline/driver/src/main/java/com/mogo/och/offline/ui/go2login/GoLoginModel.kt @@ -0,0 +1,83 @@ +package com.mogo.och.offline.ui.go2login + +import androidx.lifecycle.ViewModel +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.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OFFLINE +import com.mogo.och.common.module.biz.time.TimeManager +import com.mogo.och.common.module.manager.loop.BizLoopManager +import com.mogo.och.common.module.utils.RxUtils +import com.mogo.och.offline.callback.IBusLinesCallback +import com.mogo.och.offline.model.LineModel +import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import io.reactivex.schedulers.Schedulers +import java.util.concurrent.TimeUnit + +/** + * @author XuXinChao + * @description BadCase录包管理页面 + * @since: 2022/12/15 + */ +class GoLoginModel : ViewModel(), IBusLinesCallback { + + private val TAG = M_OFFLINE+ GoLoginModel::class.java.simpleName + + private var viewCallback: GoLoginViewCallback?=null + + private var countDownDisposable: Disposable? = null + + override fun onCleared() { + d(TAG,"onCleared") + LineModel.setBusLinesCallback(TAG,null) + } + + fun setDistanceCallback(viewCallback: GoLoginViewCallback){ + this.viewCallback = viewCallback + LineModel.setBusLinesCallback(TAG, this) + } + + fun startCountDown(){ + val countDownSeconds = 5L; + countDownDisposable = Observable.intervalRange(0, countDownSeconds, 0, 1, TimeUnit.SECONDS) + .map { aLong -> countDownSeconds - aLong } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ + this.viewCallback?.setCountDownText("${it}s",false) + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "倒计时:$it") + }, { + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "倒计时onError:${it}") + it.printStackTrace() + this.viewCallback ?.setCountDownText("0",true) + }, { + RxUtils.createSubscribe(1_000) { + this.viewCallback ?.setCountDownText("0s",true) + } + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "倒计时onComplete") + }) + } + + override fun onCompleteTask() { + super.onCompleteTask() + if(FunctionBuildConfig.isOffLine){ + if(System.currentTimeMillis()-TimeManager.getSynServerTime()<60*2*1000 + && TimeManager.getTimeStampDiff()!=0L + ){ + BizLoopManager.runInMainThread{ + this.viewCallback?.showView() + } + } + } + } + + interface GoLoginViewCallback{ + fun setCountDownText(s: String, b: Boolean) + fun showView() + } + +} + diff --git a/OCH/offline/driver/src/main/java/com/mogo/och/offline/ui/go2login/GoLoginView.kt b/OCH/offline/driver/src/main/java/com/mogo/och/offline/ui/go2login/GoLoginView.kt new file mode 100644 index 0000000000..6725597f33 --- /dev/null +++ b/OCH/offline/driver/src/main/java/com/mogo/och/offline/ui/go2login/GoLoginView.kt @@ -0,0 +1,92 @@ +package com.mogo.och.offline.ui.go2login + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.mogo.eagle.core.utilcode.kotlin.onClick +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.utils.ResourcesUtils +import com.mogo.och.common.module.utils.RxUtils +import com.mogo.och.offline.R +import com.mogo.och.offline.model.OrderModel +import com.mogo.och.offline.ui.bizswitch.SwtichBizModel +import kotlinx.android.synthetic.main.offline_go_login.view.actv_code_download +import kotlinx.android.synthetic.main.offline_go_login.view.actv_go2login + + +class GoLoginView: ConstraintLayout, GoLoginModel.GoLoginViewCallback { + + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + + + companion object { + const val TAG = "${M_OFFLINE}SwitchLineView" + } + + private var viewModel: GoLoginModel?=null + private var viewbizModel: SwtichBizModel?=null + + init { + LayoutInflater.from(context).inflate(R.layout.offline_go_login, this, true) + initView() + } + + private fun initView(){ + actv_go2login.onClick { + OrderModel.logoutInner() + } + } + + override fun onVisibilityAggregated(isVisible: Boolean) { + super.onVisibilityAggregated(isVisible) + if(isVisible){ + viewModel?.startCountDown() + } + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(GoLoginModel::class.java) + } + + viewModel?.setDistanceCallback(this) + CallerLogger.d(TAG,"onAttachedToWindow") + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + CallerLogger.d(TAG,"onDetachedFromWindow") + } + + override fun setCountDownText(s: String, show: Boolean) { + if(show){ + actv_code_download.text = ResourcesUtils.getString(R.string.go_login_count_down,s) + visibility = View.VISIBLE + RxUtils.createSubscribe(1_000) { + visibility = View.GONE + } + }else{ + visibility = View.VISIBLE + actv_code_download.text = ResourcesUtils.getString(R.string.go_login_count_down,s) + } + } + + override fun showView() { + visibility = View.VISIBLE + } + + +} diff --git a/OCH/offline/driver/src/main/res/drawable-nodpi/offline_go_login_bg.png b/OCH/offline/driver/src/main/res/drawable-nodpi/offline_go_login_bg.png new file mode 100644 index 0000000000..80ef329028 Binary files /dev/null and b/OCH/offline/driver/src/main/res/drawable-nodpi/offline_go_login_bg.png differ diff --git a/OCH/offline/driver/src/main/res/drawable-nodpi/offline_login_bg.png b/OCH/offline/driver/src/main/res/drawable-nodpi/offline_login_bg.png new file mode 100644 index 0000000000..04728aa06d Binary files /dev/null and b/OCH/offline/driver/src/main/res/drawable-nodpi/offline_login_bg.png differ diff --git a/OCH/offline/driver/src/main/res/layout/offline_base_fragment.xml b/OCH/offline/driver/src/main/res/layout/offline_base_fragment.xml index ca6121f7c8..dee9bf69af 100644 --- a/OCH/offline/driver/src/main/res/layout/offline_base_fragment.xml +++ b/OCH/offline/driver/src/main/res/layout/offline_base_fragment.xml @@ -34,6 +34,14 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/offline/driver/src/main/res/values/strings.xml b/OCH/offline/driver/src/main/res/values/strings.xml index d3a45f4fef..1a777f3682 100644 --- a/OCH/offline/driver/src/main/res/values/strings.xml +++ b/OCH/offline/driver/src/main/res/values/strings.xml @@ -22,6 +22,10 @@ 蘑菇小巴正在进站 蘑菇小巴出发咯 + 当前网络良好(%1$s) + + + 已到达%1$s,带好随身物品,下车请注意安全。