[fea]
[班车同步和上报逻辑]
This commit is contained in:
yangyakun
2024-12-13 16:31:47 +08:00
parent 098b47246b
commit a476cb2722
15 changed files with 994 additions and 31 deletions

View File

@@ -0,0 +1,745 @@
{
"formatVersion": 1,
"database": {
"version": 6,
"identityHash": "b2c07e9188f2ee54eabad0eee83647cf",
"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": "task_data_table",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task_id` INTEGER, `line_id` INTEGER, `task_data` INTEGER, `task_start_time` INTEGER, `start_time` INTEGER, `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": "taskDate",
"columnName": "task_data",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "taskStartTime",
"columnName": "task_start_time",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "startTime",
"columnName": "start_time",
"affinity": "INTEGER",
"notNull": false
},
{
"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_task_data_table_task_id",
"unique": false,
"columnNames": [
"task_id"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_task_data_table_task_id` ON `${TABLE_NAME}` (`task_id`)"
},
{
"name": "index_task_data_table_line_id",
"unique": false,
"columnNames": [
"line_id"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_task_data_table_line_id` ON `${TABLE_NAME}` (`line_id`)"
}
],
"foreignKeys": []
},
{
"tableName": "used_task_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": "event_data_table",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `event_type` TEXT, `lineId` INTEGER, `taskDate` INTEGER, `lineName` TEXT, `task_id` INTEGER, `task_start_time` INTEGER, `business_time` INTEGER, `write_version` INTEGER, `site_id` INTEGER, `seq` INTEGER, `driver_id` INTEGER, `event_save_time` INTEGER NOT NULL, `update_status` INTEGER NOT NULL, `msg_id` TEXT, `update_time` INTEGER)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "eventType",
"columnName": "event_type",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "lineId",
"columnName": "lineId",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "taskDate",
"columnName": "taskDate",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "lineName",
"columnName": "lineName",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "taskId",
"columnName": "task_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "taskStartTime",
"columnName": "task_start_time",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "businessTime",
"columnName": "business_time",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "writeVersion",
"columnName": "write_version",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "siteId",
"columnName": "site_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "seq",
"columnName": "seq",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "driverId",
"columnName": "driver_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "eventSaveTime",
"columnName": "event_save_time",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "updateStatus",
"columnName": "update_status",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "msgId",
"columnName": "msg_id",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "upDateTime",
"columnName": "update_time",
"affinity": "INTEGER",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_event_data_table_event_save_time",
"unique": false,
"columnNames": [
"event_save_time"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_event_data_table_event_save_time` ON `${TABLE_NAME}` (`event_save_time`)"
}
],
"foreignKeys": []
},
{
"tableName": "writeoff_data_table",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `msg_id` TEXT, `expiry_time` INTEGER, `booking_time` INTEGER, `type` INTEGER, `task_id` INTEGER, `line_id` INTEGER, `site_id` INTEGER, `driver_id` INTEGER, `available_times` INTEGER, `order_no` TEXT, `uid` TEXT, `seq` TEXT, `business_time` INTEGER, `tick_size` INTEGER, `tick_name` TEXT, `event_save_time` INTEGER NOT NULL, `update_status` INTEGER NOT NULL, `update_time` INTEGER)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "msgId",
"columnName": "msg_id",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "expiryTime",
"columnName": "expiry_time",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "bookingTime",
"columnName": "booking_time",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "type",
"columnName": "type",
"affinity": "INTEGER",
"notNull": false
},
{
"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": "driverId",
"columnName": "driver_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "availableTimes",
"columnName": "available_times",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "orderNo",
"columnName": "order_no",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "uid",
"columnName": "uid",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "phone",
"columnName": "seq",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "businessTime",
"columnName": "business_time",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "ticketSize",
"columnName": "tick_size",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "ticketName",
"columnName": "tick_name",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "eventSaveTime",
"columnName": "event_save_time",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "updateStatus",
"columnName": "update_status",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "upDateTime",
"columnName": "update_time",
"affinity": "INTEGER",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_writeoff_data_table_event_save_time",
"unique": false,
"columnNames": [
"event_save_time"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_writeoff_data_table_event_save_time` ON `${TABLE_NAME}` (`event_save_time`)"
}
],
"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, 'b2c07e9188f2ee54eabad0eee83647cf')"
]
}
}

View File

@@ -1,7 +1,9 @@
package com.mogo.och.weaknet.bean.request
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.network.utils.digest.DigestUtils
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.och.common.module.biz.login.LoginStatusManager
import com.mogo.och.bridge.device.checkvin.CheckVinManager
import com.mogo.och.weaknet.repository.db.bean.EventDataBean
@@ -20,9 +22,15 @@ data class ShuttleEventRequest(val requestId: String, val sn: String,val vin:Str
val eventList4Request = mutableListOf<Event>()
var tempEvent: Event?=null
waitUpdateEvent?.forEach {
tempEvent = Event(it.eventType,
EventData(it.taskId,it.businessTime,it.writeVersion,it.siteId,it.seq,it.driverId,it.msgId)
)
tempEvent = if(AppIdentityModeUtils.isScheduled(FunctionBuildConfig.appIdentityMode)) {
Event(it.eventType,
EventData(0,it.taskId,it.taskDate,it.businessTime,it.writeVersion,it.siteId,it.seq,it.driverId,it.msgId)
)
}else{
Event(it.eventType,
EventData(it.taskId,0,it.taskDate,it.businessTime,it.writeVersion,it.siteId,it.seq,it.driverId,it.msgId)
)
}
eventList4Request.add(tempEvent!!)
}
@@ -46,6 +54,8 @@ open class EventDataBase(val msgtype:String,var businessTime: Long?)
data class EventData(
var taskId: Long?,
var detailId: Long?,
var taskDate: Long?,
var businessTimeout: Long?,
var writeVersion: Long?,
var siteId: Long?,

View File

@@ -160,7 +160,7 @@ object LineModel {
)
val startTime = System.currentTimeMillis()
CarExecutableTaskResponse.save2Db(data)
d(TAG,"更新数据耗时${System.currentTimeMillis()-startTime}___${Thread.currentThread().name}")
d(TAG,"更新数据耗时${System.currentTimeMillis()-startTime}")
RxUtils.createSubscribe(800) {
// 等待写入数据库
mBusLinesCallbackMap.forEach { callback ->
@@ -211,7 +211,7 @@ object LineModel {
fun commitSwitchLineId(task: TaskDataBean, line: LineDataBean) {
RxUtils.disposeSubscribe(startTaskDisposable)
line.getLineIdAndName { lineId, lineName ->
task.getLineIdAndName { taskId, taskTime ->
task.getLineIdAndName { taskId, taskTime,taskDate ->
RepositoryManager.startTask(taskId, lineId, taskTime, lineName)
?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
@@ -247,7 +247,7 @@ object LineModel {
override fun onNext(data: Boolean) {
d(TAG, "commitSwitchLineId onNext ${data}")
if (data) {
EventDb.saveEventTaskStart(taskId, lineId, taskTime, lineName)
EventDb.saveEventTaskStart(taskId, lineId, taskTime, lineName,taskDate)
OrderModel.queryBusRoutes()
BizLoopManager.runInIoThread{
val querySiteByLineId = SiteDb.querySiteByLineId(lineId)

View File

@@ -266,7 +266,9 @@ object OrderModel {
startStation.siteId.toLong(),
task.taskId?:0L,
task.lineId?:0L,
task.taskStartTime?:System.currentTimeMillis())
task.taskStartTime?:System.currentTimeMillis(),
task.taskDate?:0L
)
?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(object : Observer<Boolean> {

View File

@@ -39,6 +39,9 @@ object RepositoryManager {
if(AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)) {
field = WeaknetRepository()
CallerLogger.d(TAG,"saas shuttle 支持db")
}else if(AppIdentityModeUtils.isScheduled(FunctionBuildConfig.appIdentityMode)) {
field = WeaknetRepository()
CallerLogger.d(TAG,"saas scheduled 支持db")
}else if(AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
field = WeaknetRepository()
CallerLogger.d(TAG,"saas bus 支持db")
@@ -76,7 +79,10 @@ object RepositoryManager {
if(AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)) {
field = WriteOffCacheRepository()
CallerLogger.d(TAG,"saas shuttle 核销缓存")
}else if(AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
}else if(AppIdentityModeUtils.isScheduled(FunctionBuildConfig.appIdentityMode)) {
field = WriteOffCacheRepository()
CallerLogger.d(TAG,"saas sceduletd 核销缓存")
}else if(AppIdentityModeUtils.isScheduled(FunctionBuildConfig.appIdentityMode)) {
field = WriteOffCacheRepository()
CallerLogger.d(TAG,"saas bus 核销缓存")
}
@@ -116,9 +122,10 @@ object RepositoryManager {
return lineRepository?.startTask(taskId,lineId,taskTime,lineName)
}
fun leaveStation(seq: Int, siteId: Long, taskId: Long, lineId: Long, taskStartTime:Long
fun leaveStation(
seq: Int, siteId: Long, taskId: Long, lineId: Long, taskStartTime: Long, taskDate: Long
): Observable<Boolean>?{
return lineRepository?.leaveStation(seq,siteId,taskId,lineId,taskStartTime)
return lineRepository?.leaveStation(seq,siteId,taskId,lineId,taskStartTime,taskDate)
}
fun arriveStation(seq: Int, siteId: Long, taskId: Long): Observable<Boolean>?{

View File

@@ -33,7 +33,7 @@ import java.io.File
//entities指定该数据库有哪些表多张表就逗号分隔
//version指定数据库版本号升级时需要用到
//数据库继承自RoomDatabase
@Database(entities = [ContrailDataBean::class, LineDataBean::class, SiteDataBean::class, TaskDataBean::class, TaskSiteDataBean::class, EventDataBean::class, WriteOffDataBean::class], version = 5)
@Database(entities = [ContrailDataBean::class, LineDataBean::class, SiteDataBean::class, TaskDataBean::class, TaskSiteDataBean::class, EventDataBean::class, WriteOffDataBean::class], version = 6)
abstract class MyDataBase : RoomDatabase() {
override fun getOpenHelper(): SupportSQLiteOpenHelper {
@@ -88,6 +88,13 @@ abstract class MyDataBase : RoomDatabase() {
}
}
private val MIGRATION_5_6 = object : Migration(5, 6) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE ${EventDataBean.evnetDataTable} ADD COLUMN taskDate INTEGER")
}
}
fun getDBName():MyDataBase{
val roomName = when (ProjectUtils.getProjectType()) {
Project.SAAS -> {
@@ -95,6 +102,8 @@ abstract class MyDataBase : RoomDatabase() {
"shuttle_db"
}else if(AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
"saas_bus_db"
}else if(AppIdentityModeUtils.isScheduled(FunctionBuildConfig.appIdentityMode)) {
"saas_scheduled_db"
}else{
FunctionBuildConfig.appIdentityMode
}
@@ -131,6 +140,7 @@ abstract class MyDataBase : RoomDatabase() {
.addMigrations(MIGRATION_2_3)
.addMigrations(MIGRATION_3_4)
.addMigrations(MIGRATION_4_5)
.addMigrations(MIGRATION_5_6)
.fallbackToDestructiveMigration()
.build()
}

View File

@@ -19,11 +19,18 @@ data class EventDataBean(
var eventType: String? = null,
/**
* 任务id
* 任务id、模板id
*/
@ColumnInfo(name = "lineId", typeAffinity = ColumnInfo.INTEGER)
var lineId: Long? = null,
/**
* 模板发生日期
*/
@ColumnInfo(name = "taskDate", typeAffinity = ColumnInfo.INTEGER)
var taskDate: Long? = null,
/**
* 任务id
*/

View File

@@ -16,7 +16,7 @@ data class TaskDataBean(
* 任务id
*/
@ColumnInfo(name = "task_id", typeAffinity = ColumnInfo.INTEGER, index = true)
@SerializedName("id")
@SerializedName("id", alternate = ["detailId"])
var taskId: Long? = null,
/**
@@ -87,10 +87,12 @@ data class TaskDataBean(
return result
}
fun getLineIdAndName(function: (lineId:Long,lineName:Long) -> Unit) {
taskId?.let {id->
taskStartTime?.let {time->
function(id,time)
fun getLineIdAndName(function: (taskId: Long, taskTime: Long , taskDate:Long) -> Unit) {
taskId?.let { id ->
taskStartTime?.let { time ->
taskDate?.let { date ->
function(id, time, date)
}
}
}
}

View File

@@ -29,11 +29,12 @@ object EventDb: IDbRepository {
eventDataDao = null
}
fun saveEventTaskStart(taskId: Long, lineId: Long, taskStartTime: Long, name: String) {
fun saveEventTaskStart(taskId: Long, lineId: Long, taskStartTime: Long, name: String,taskDate:Long) {
val event = EventDataBean()
event.eventType = EventDataBean.TaskStart
event.lineId = lineId
event.taskId = taskId
event.taskDate = taskDate
event.lineName = name
event.taskStartTime = taskStartTime
event.businessTime = DateTimeUtil.getCurrentTimeStamp()
@@ -54,7 +55,8 @@ object EventDb: IDbRepository {
siteId: Long,
seq: Int,
taskStartTime: Long?,
lineName: String
lineName: String,
taskDate: Long?
) {
val event = EventDataBean()
event.eventType = EventDataBean.TaskArriveSite
@@ -62,6 +64,7 @@ object EventDb: IDbRepository {
event.taskStartTime = taskStartTime
event.lineName = lineName
event.taskId = taskId
event.taskDate = taskDate
event.businessTime = DateTimeUtil.getCurrentTimeStamp()
event.writeVersion = DateTimeUtil.getCurrentTimeStamp()
event.siteId = siteId
@@ -80,12 +83,13 @@ object EventDb: IDbRepository {
siteId: Long,
seq: Int,
taskStartTime: Long?,
lineName: String
lineName: String,
taskDate: Long
) {
val event = EventDataBean()
event.eventType = EventDataBean.TaskLeaveSite
event.lineId = lineId
event.taskId = taskId
event.taskDate = taskDate
event.taskStartTime = taskStartTime
event.lineName = lineName
event.businessTime = DateTimeUtil.getCurrentTimeStamp()
@@ -100,11 +104,18 @@ object EventDb: IDbRepository {
}
}
fun saveEventTaskEnd(taskId: Long, lineId: Long, taskStartTime: Long?, lineName: String) {
fun saveEventTaskEnd(
taskId: Long,
lineId: Long,
taskStartTime: Long?,
lineName: String,
taskDate: Long
) {
val event = EventDataBean()
event.eventType = EventDataBean.TaskEnd
event.lineId = lineId
event.taskId = taskId
event.taskDate = taskDate
event.lineName = lineName
event.taskStartTime = taskStartTime
event.businessTime = DateTimeUtil.getCurrentTimeStamp()

View File

@@ -19,7 +19,14 @@ interface ILineRepository {
fun startTask(taskId:Long,lineId:Long,taskTime:Long,lineName:String): Observable<Boolean>?
fun leaveStation(seq: Int, siteId: Long, taskId: Long, lineId: Long, taskStartTime:Long): Observable<Boolean>?
fun leaveStation(
seq: Int,
siteId: Long,
taskId: Long,
lineId: Long,
taskStartTime: Long,
taskDate: Long
): Observable<Boolean>?
fun arriveStation( seq: Int, siteId: Long, taskId: Long): Observable<Boolean>?

View File

@@ -157,7 +157,8 @@ class NormalRepository: ILineRepository {
siteId: Long,
taskId: Long,
lineId: Long,
taskStartTime: Long
taskStartTime: Long,
taskDate: Long
): Observable<Boolean>? {
return normalLineInterface?.leaveStation(seq, siteId, taskId, System.currentTimeMillis())
}

View File

@@ -32,6 +32,7 @@ import com.mogo.och.weaknet.repository.net.exception.NetException
import com.mogo.och.weaknet.repository.net.NetInterface
import com.mogo.och.weaknet.repository.net.project.dali.shuttle.DaliShuttleServiceManager
import com.mogo.och.weaknet.repository.net.project.saas.bus.SaasBusServiceManager
import com.mogo.och.weaknet.repository.net.project.saas.scheduled.SaasScheduledServiceManager
import com.mogo.och.weaknet.repository.net.project.saas.shuttle.SaasShuttleServiceManager
import io.reactivex.Observable
@@ -46,6 +47,8 @@ class WeaknetRepository : ILineRepository {
Project.SAAS -> {
if(AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)) {
field = SaasShuttleServiceManager
}else if(AppIdentityModeUtils.isScheduled(FunctionBuildConfig.appIdentityMode)) {
field = SaasScheduledServiceManager
}else if(AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
field = SaasBusServiceManager
}
@@ -220,7 +223,14 @@ class WeaknetRepository : ILineRepository {
return TaskDb.startTask(taskId, lineId, lineName)
}
override fun leaveStation(seq: Int, siteId: Long, taskId: Long, lineId: Long, taskStartTime:Long): Observable<Boolean>? {
override fun leaveStation(
seq: Int,
siteId: Long,
taskId: Long,
lineId: Long,
taskStartTime: Long,
taskDate: Long
): Observable<Boolean>? {
return Observable.just(taskId)
.flatMap {
//开始站点: leaving false->true
@@ -239,7 +249,8 @@ class WeaknetRepository : ILineRepository {
it.siteId.toLong(),
it.seq,
taskStartTime,
lineInfo.lineName
lineInfo.lineName,
taskDate
)
}
@@ -278,7 +289,8 @@ class WeaknetRepository : ILineRepository {
end.siteId.toLong(),
end.seq,
task.taskStartTime,
lineInfo.lineName
lineInfo.lineName,
task.taskDate
)
}
}
@@ -323,7 +335,7 @@ class WeaknetRepository : ILineRepository {
if (task.taskId!=null&&task.lineId!=null) {
TaskDb.endTask(task.taskId!!)
LineManager.getLineInfo { lineInfo ->
EventDb.saveEventTaskEnd(task.taskId!!,task.lineId!!,task.taskStartTime,lineInfo.lineName)
EventDb.saveEventTaskEnd(task.taskId!!,task.lineId!!,task.taskStartTime,lineInfo.lineName,task.taskDate?:0L)
}
}
}

View File

@@ -0,0 +1,69 @@
package com.mogo.och.weaknet.repository.net.project.saas.scheduled;
import com.mogo.eagle.core.data.BaseData;
import com.mogo.och.weaknet.bean.request.BusQueryLineStationsRequest;
import com.mogo.och.weaknet.bean.request.ShuttleEventRequest;
import com.mogo.och.weaknet.bean.response.BusRoutesResponse;
import com.mogo.och.weaknet.bean.response.CarExecutableTaskResponse;
import com.mogo.och.weaknet.bean.response.WriteOffCountResponse;
import com.mogo.och.weaknet.repository.net.bean.request.PassengerWriteOffRequest;
import com.mogo.och.weaknet.repository.net.bean.request.WriteOffCountReqBean;
import com.mogo.och.weaknet.repository.net.bean.response.PassengerWriteOffResponse;
import io.reactivex.Observable;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Query;
/**
* 小巴车相关接口
*
* @author tongchenfei
* <p>
* wiki: http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=48970072
*/
public interface ISaasScheduledApiService {
/**
* 查询当前运行任务
*
* @param request 请求参数
* @return 接口返回数据
*/
@Headers( {"Content-Type:application/json;charset=UTF-8"} )
@POST( "/och-shuttle-cabin/api/business/v1/driver/lineDataWithDriver/query" )
Observable<BusRoutesResponse> queryBusRoutes(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusQueryLineStationsRequest request);
/**
* 查询当前站点核销的人数
*/
@Headers( {"Content-type:application/json;charset=UTF-8"} )
@POST("/och-vehicle/api/car/v2/task/site/writeOffCount")
Observable<WriteOffCountResponse> writeOffCount(@Header ("appId") String appId, @Header("ticket") String ticket, @Body WriteOffCountReqBean writeOffCountReqBean);
/**
* 同步核销接口
*/
@Headers({"Content-type:application/json;charset=UTF-8"})
@POST("/och-vehicle/api/car/v2/device/writeOff")
Observable<PassengerWriteOffResponse> saaswriteOffTicket(@Header ("appId") String appId, @Header("ticket") String ticket, @Body PassengerWriteOffRequest request);
/**
* 同步 线路、站点、任务、自驾轨迹信息
*/
@Headers( {"Content-type:application/json;charset=UTF-8"} )
@GET("/och-vehicle/cabin/queryCarExecutableTaskList")
Observable<CarExecutableTaskResponse> queryCarExecutableTaskList(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn);
/**
* 上传 开始线路 滑动出发 到站 完成线路 各个任务到服务器端
*/
@Headers( {"Content-Type:application/json;charset=UTF-8"} )
@POST( "/och-vehicle/cabin/reportCabinEvent" )
Observable<BaseData> reportCabinEvent(@Header ("appId") String appId, @Header("ticket") String ticket, @Body ShuttleEventRequest request);
}

View File

@@ -0,0 +1,81 @@
package com.mogo.och.weaknet.repository.net.project.saas.scheduled
import android.content.Context
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.data.BaseData
import com.mogo.eagle.core.network.MoGoRetrofitFactory
import com.mogo.och.common.module.constant.OchCommonConst
import com.mogo.och.common.module.manager.cache.OchSPManager
import com.mogo.och.common.module.network.OchCommonNet
import com.mogo.och.common.module.network.OchCommonServiceCallback
import com.mogo.och.common.module.network.OchCommonSubscribeImpl
import com.mogo.och.common.module.network.interceptor.transformIoTry
import com.mogo.och.data.bean.BusRoutesResult
import com.mogo.och.weaknet.bean.request.BusQueryLineStationsRequest
import com.mogo.och.weaknet.bean.request.ShuttleEventRequest
import com.mogo.och.weaknet.bean.response.CarExecutableTaskResponse
import com.mogo.och.weaknet.repository.net.NetInterface
import io.reactivex.Observable
/**
* @author: wangmingjun
* @date: 2021/10/20
*/
object SaasScheduledServiceManager: NetInterface {
private val mService: ISaasScheduledApiService = MoGoRetrofitFactory.getInstance(OchCommonConst.getShuttleUrl()).create(
ISaasScheduledApiService::class.java
)
/**
* 查询小巴车当前任务
*/
override fun queryBusRoutes(): Observable<BusRoutesResult?>? {
//获取当前高德坐标
return mService.queryBusRoutes(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
SharedPrefsMgr.getInstance().token,
BusQueryLineStationsRequest()
) .transformIoTry()
.flatMap(OchCommonNet("queryBusRoutes",false))
.flatMap {
Observable.just(it.data?:BusRoutesResult())
}
}
/**
* 同步 线路、站点、任务、自驾轨迹信息
*/
override fun queryCarExecutableTaskList(
context: Context,
callback: OchCommonServiceCallback<CarExecutableTaskResponse>?
) {
mService.queryCarExecutableTaskList(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
SharedPrefsMgr.getInstance().token,
OchSPManager.getSn()
)
.transformIoTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "queryCarExecutableTaskList"))
}
/**
* 上传 开始线路 滑动出发 到站 完成线路 各个任务到服务器端
*/
override fun reportCabinEvent(
context: Context,
data: ShuttleEventRequest,
callback: OchCommonServiceCallback<BaseData>?,
) {
mService.reportCabinEvent(
MoGoAiCloudClientConfig.getInstance().serviceAppId,
SharedPrefsMgr.getInstance().token,
data,
)
.subscribe(OchCommonSubscribeImpl(context, callback, "reportCabinEvent"))
}
}

View File

@@ -1,7 +1,6 @@
package com.mogo.och.weaknet.repository.writeoff.impl
import android.content.Context
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.env.Project
import com.mogo.commons.env.ProjectUtils
import com.mogo.eagle.core.data.config.FunctionBuildConfig
@@ -25,7 +24,7 @@ import com.mogo.och.weaknet.repository.net.exception.NetException
import com.mogo.och.weaknet.repository.net.NetInterface
import com.mogo.och.weaknet.repository.net.bean.response.PassengerWriteOffResponse
import com.mogo.och.weaknet.repository.net.project.saas.bus.SaasBusServiceManager
import com.mogo.och.weaknet.repository.net.project.saas.shuttle.SaasShuttleServiceManager
import com.mogo.och.weaknet.repository.net.project.saas.scheduled.SaasScheduledServiceManager
import com.mogo.och.weaknet.repository.writeoff.IWriteOffRepository
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
@@ -40,7 +39,7 @@ class WriteOffCacheRepository : IWriteOffRepository {
when (ProjectUtils.getProjectType()) {
Project.SAAS -> {
if(AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)) {
field = SaasShuttleServiceManager
field = SaasScheduledServiceManager
}else if(AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
field = SaasBusServiceManager
}