diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/scnner/ScannerManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/scnner/ScannerManager.kt index 8eb720eb12..1d42c70f90 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/scnner/ScannerManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/scnner/ScannerManager.kt @@ -213,7 +213,7 @@ object ScannerManager : IOchLanPassengerStatusListener { private fun parseParams(payload: String?) { val parse = Uri.parse("${OchCommonConst.getShuttleUrl()}?${payload}") val queryParameterNames = parse.queryParameterNames - val mutableMapOf = mutableMapOf() + val mutableMapOf = mutableMapOf() queryParameterNames.forEach { val queryParameter = parse.getQueryParameter(it) if(it!=null&&queryParameter!=null){ diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/scnner/StateChangeListener.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/scnner/StateChangeListener.kt index 723b598010..6652b71e34 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/scnner/StateChangeListener.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/scnner/StateChangeListener.kt @@ -2,5 +2,5 @@ package com.mogo.och.common.module.manager.scnner interface StateChangeListener { fun stateChange(newBindValue: BindStatus, newOpentValue: OpenStatus){} - fun parseData(params: MutableMap, payload: String?){} + fun parseData(params: MutableMap, payload: String?){} } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/socket/lan/bean/DataBean.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/socket/lan/bean/DataBean.kt index b1cf0e7339..4dbda346e2 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/socket/lan/bean/DataBean.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/socket/lan/bean/DataBean.kt @@ -77,12 +77,16 @@ data class WriteOffDetialMsg( val bookingTime: Long?=null, val businessType: Int?=null, val lineId: Long?=null, - val remainingTimes: Int?=null, + val remainingTimes: Int?=null,//剩余票数 val orderNo: String?=null, val uid: String?=null, val phone: String?=null, - val ticketSize: String?=null, + val ticketSize: Int?=null, val ticketName: String?=null, + val typeBiz: String?=null, + val pipe:String?=null, + val startStationId:Long?=null, + val tenantId:Long?=null ) : BaseDPMsg(DPMsgType.TYPE_WRITEOFF_INFO_DETAIL.type) data class WriteOffResultMsg( diff --git a/OCH/shuttle/driver_weaknet/schemas/com.mogo.och.weaknet.repository.db.MyDataBase/5.json b/OCH/shuttle/driver_weaknet/schemas/com.mogo.och.weaknet.repository.db.MyDataBase/5.json new file mode 100644 index 0000000000..1d8a77868a --- /dev/null +++ b/OCH/shuttle/driver_weaknet/schemas/com.mogo.och.weaknet.repository.db.MyDataBase/5.json @@ -0,0 +1,739 @@ +{ + "formatVersion": 1, + "database": { + "version": 5, + "identityHash": "17bc11cdabb03126bdab91081b897fff", + "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, `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": "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, `remaining_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": "remainingTimes", + "columnName": "remaining_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, '17bc11cdabb03126bdab91081b897fff')" + ] + } +} \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/bean/request/ShuttleEventRequest.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/bean/request/ShuttleEventRequest.kt index c68457ddab..e02b145155 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/bean/request/ShuttleEventRequest.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/bean/request/ShuttleEventRequest.kt @@ -4,30 +4,43 @@ import com.mogo.commons.storage.SharedPrefsMgr import com.mogo.eagle.core.network.utils.digest.DigestUtils import com.mogo.och.common.module.biz.login.LoginStatusManager import com.mogo.och.weaknet.repository.db.bean.EventDataBean +import com.mogo.och.weaknet.repository.db.bean.WriteOffDataBean /** * 上报事件 */ data class ShuttleEventRequest(val requestId: String, val sn: String, val businessType: Int,val eventList:MutableList){ companion object{ - fun transformDb2Net(waitUpdateEvent: List): ShuttleEventRequest { + fun transformDb2Net( + waitUpdateEvent: List?, + waitUpdateWriteOffEvent: List? + ): ShuttleEventRequest { val businessTypeShuttle = LoginStatusManager.getLoginInfo()?.businessType?:11 - val md5Hex = DigestUtils.md5Hex(waitUpdateEvent.toString()) val eventList4Request = mutableListOf() var tempEvent: Event?=null - waitUpdateEvent.forEach { + waitUpdateEvent?.forEach { tempEvent = Event(it.eventType, EventData(it.taskId,it.businessTime,it.writeVersion,it.siteId,it.seq,it.driverId,it.msgId) ) eventList4Request.add(tempEvent!!) } + + waitUpdateWriteOffEvent?.forEach { + tempEvent = Event("WriteOff", + WriteOffEventData(it.msgId,it.taskId,it.siteId,it.driverId,it.orderNo,it.businessTime,it.businessTime) + ) + eventList4Request.add(tempEvent!!) + } + val md5Hex = DigestUtils.md5Hex(eventList4Request.toString()) return ShuttleEventRequest(md5Hex, SharedPrefsMgr.getInstance().sn, businessTypeShuttle,eventList4Request) } } } -data class Event(var eventType: String?,val eventData: EventData) +data class Event(var eventType: String?,val eventData: EventDataBase) + +open class EventDataBase(val msgtype:String) data class EventData( var taskId: Long?, @@ -37,4 +50,14 @@ data class EventData( var seq: Int?, var driverId:Long?, var msgId:String? -) \ No newline at end of file +):EventDataBase(msgtype = "lineEvent") + +data class WriteOffEventData( + var msgId: String?, + var taskId: Long?, + var siteId: Long?, + var driverId: Long?, + var orderNo: String?, + var businessTime: Long?, + var writeVersion: Long?, +):EventDataBase(msgtype = "writeoffEvent") \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/EventModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/EventModel.kt index f4704ec7b4..0512e3be48 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/EventModel.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/EventModel.kt @@ -9,39 +9,36 @@ import com.mogo.och.common.module.network.OchCommonServiceCallback import com.mogo.och.weaknet.bean.request.ShuttleEventRequest import com.mogo.och.weaknet.bean.WaitUploadLine import com.mogo.och.weaknet.bean.WaitUploadTask -import com.mogo.och.weaknet.repository.net.project.dali.shuttle.DaliShuttleServiceManager import com.mogo.och.weaknet.repository.db.bean.EventDataBean import com.mogo.och.weaknet.repository.db.repository.EventDb import com.mogo.och.weaknet.repository.RepositoryManager import com.mogo.och.weaknet.repository.db.repository.SiteDb +import com.mogo.och.weaknet.repository.db.repository.WriteOffDb import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers import io.reactivex.subjects.BehaviorSubject import java.util.concurrent.atomic.AtomicBoolean -object EventModel : EventDb.EventCallback { +object EventModel { private val isUpdating by lazy { AtomicBoolean(false) } private val createDefault = BehaviorSubject.createDefault(isUpdating.get()) fun load(){ - if (RepositoryManager.supportDb()) { - EventDb.eventCallback = this + if (RepositoryManager.supportDb() || RepositoryManager.supportWriteOffDb()) { BizLoopManager.postDelayed(loopUpdateInfo,2*60*1000) } } fun release(){ - if (RepositoryManager.supportDb()) { - EventDb.eventCallback = null - } + } private val loopUpdateInfo = Runnable { updateEvent() } - override fun notifySyn() { + fun notifySyn() { BizLoopManager.removeCallback(loopUpdateInfo) updateEvent() checkDbData() @@ -62,8 +59,9 @@ object EventModel : EventDb.EventCallback { isUpdating.set(true) createDefault.onNext(isUpdating.get()) ThreadUtils.getSinglePool().submit { - val waitUpdateEvent = EventDb.queryWaitUpdateEvent() - if(waitUpdateEvent.isNullOrEmpty()){ + val waitUpdateLineEvent = EventDb.queryWaitUpdateEvent() + val waitUpdateWriteOffEvent = WriteOffDb.queryWaitUpdateEvent() + if (waitUpdateLineEvent.isNullOrEmpty() && waitUpdateWriteOffEvent.isNullOrEmpty()) { OchChainLogManager.writeChainLogDb("上报event","没有数据需要上报${Thread.currentThread().name}") isUpdating.set(false) createDefault.onNext(isUpdating.get()) @@ -71,15 +69,27 @@ object EventModel : EventDb.EventCallback { return@submit } OchChainLogManager.writeChainLogDb("上报event","开始上报:${Thread.currentThread().name}") - val transformDb2Net = ShuttleEventRequest.transformDb2Net(waitUpdateEvent) + val transformDb2Net = ShuttleEventRequest.transformDb2Net(waitUpdateLineEvent,waitUpdateWriteOffEvent) RepositoryManager.reportCabinEvent(AbsMogoApplication.getApp()!!,transformDb2Net,object :OchCommonServiceCallback{ override fun onSuccess(data: BaseData?) { - waitUpdateEvent.forEach { - it.updateStatus = EventDataBean.updated - it.upDateTime = System.currentTimeMillis() - } OchChainLogManager.writeChainLogDb("上报event成功","$transformDb2Net ${Thread.currentThread().name}") - EventDb.saveUpdateSuccess(waitUpdateEvent) + + waitUpdateLineEvent?.let {lineEvents-> + lineEvents.forEach { + it.updateStatus = EventDataBean.updated + it.upDateTime = System.currentTimeMillis() + } + EventDb.saveUpdateSuccess(lineEvents) + } + + waitUpdateWriteOffEvent?.let {writeOffEvents-> + writeOffEvents.forEach { + it.updateStatus = EventDataBean.updated + it.upDateTime = System.currentTimeMillis() + } + WriteOffDb.saveUpdateSuccess(writeOffEvents) + } + isUpdating.set(false) createDefault.onNext(isUpdating.get()) val queryWaitUpdateEventCount = EventDb.queryWaitUpdateEventCount() diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/RepositoryManager.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/RepositoryManager.kt index 41ce26cac3..84ae3e5b1f 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/RepositoryManager.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/RepositoryManager.kt @@ -126,12 +126,8 @@ object RepositoryManager { return lineRepository?.endTask(taskId) } - fun queryWriteoffCount(context: Context, taskId: Long, siteId: Long, callback: OchCommonServiceCallback?){ - writeOffRepository?.queryWriteoffCount(context,taskId,siteId,callback) - } - fun haveRunningTask():Boolean{ - return repository?.haveRunningTask()?:false + return lineRepository?.haveRunningTask()?:false } @@ -182,6 +178,10 @@ object RepositoryManager { } } + fun queryWriteoffCount(context: Context, taskId: Long, siteId: Long, callback: OchCommonServiceCallback?){ + writeOffRepository?.queryWriteoffCount(context,taskId,siteId,callback) + } + fun writeOff(writeOffDetialMsg: WriteOffDetialMsg): Observable? { return writeOffRepository?.writeOffEvent(writeOffDetialMsg) } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/MyDataBase.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/MyDataBase.kt index 3d6e448dc8..18f34dd05d 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/MyDataBase.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/MyDataBase.kt @@ -19,19 +19,21 @@ import com.mogo.och.weaknet.repository.db.bean.LineDataBean import com.mogo.och.weaknet.repository.db.bean.SiteDataBean import com.mogo.och.weaknet.repository.db.bean.TaskDataBean import com.mogo.och.weaknet.repository.db.bean.TaskSiteDataBean +import com.mogo.och.weaknet.repository.db.bean.WriteOffDataBean import com.mogo.och.weaknet.repository.db.dao.ContrailDataDao import com.mogo.och.weaknet.repository.db.dao.EventDataDao import com.mogo.och.weaknet.repository.db.dao.LineDataDao import com.mogo.och.weaknet.repository.db.dao.SiteDataDao import com.mogo.och.weaknet.repository.db.dao.TaskDataDao import com.mogo.och.weaknet.repository.db.dao.TaskSiteDataDao +import com.mogo.och.weaknet.repository.db.dao.WriteOffDataDao import java.io.File //注解Database告诉系统这是Room数据库对象 //entities指定该数据库有哪些表,多张表就逗号分隔 //version指定数据库版本号,升级时需要用到 //数据库继承自RoomDatabase -@Database(entities = [ContrailDataBean::class, LineDataBean::class, SiteDataBean::class, TaskDataBean::class, TaskSiteDataBean::class, EventDataBean::class], version = 4) +@Database(entities = [ContrailDataBean::class, LineDataBean::class, SiteDataBean::class, TaskDataBean::class, TaskSiteDataBean::class, EventDataBean::class, WriteOffDataBean::class], version = 5) abstract class MyDataBase : RoomDatabase() { override fun getOpenHelper(): SupportSQLiteOpenHelper { @@ -58,8 +60,33 @@ abstract class MyDataBase : RoomDatabase() { abstract val siteDataDao: SiteDataDao? abstract val taskDataDao: TaskDataDao? abstract val taskSiteDataDao: TaskSiteDataDao? + abstract val writeOffDataDao: WriteOffDataDao? companion object { + private val MIGRATION_1_2 = object : Migration(1, 2) { + override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL("ALTER TABLE ${EventDataBean.evnetDataTable} ADD COLUMN driver_id INTEGER"); + } + } + private val MIGRATION_2_3 = object : Migration(2, 3) { + override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL("ALTER TABLE ${SiteDataBean.siteDataTable} ADD COLUMN videoList TEXT"); + database.execSQL("ALTER TABLE ${TaskSiteDataBean.usedTaskDataTable} ADD COLUMN videoList TEXT"); + } + } + private val MIGRATION_3_4 = object : Migration(3, 4) { + override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL("ALTER TABLE ${EventDataBean.evnetDataTable} ADD COLUMN msg_id TEXT") + database.execSQL("ALTER TABLE ${EventDataBean.evnetDataTable} ADD COLUMN update_time INTEGER") + } + } + + private val MIGRATION_4_5 = object : Migration(4, 5) { + override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL("CREATE TABLE IF NOT EXISTS `${WriteOffDataBean.writeoffDataTable}` (`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, `remaining_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)") + } + } + fun getDBName():MyDataBase{ val roomName = when (ProjectUtils.getProjectType()) { Project.SAAS -> { @@ -88,11 +115,10 @@ abstract class MyDataBase : RoomDatabase() { return Room.databaseBuilder( AbsMogoApplication.getApp()!!.applicationContext, MyDataBase::class.java, ROOT_PATH+roomName ) - .addMigrations(Migration1_2(1,2)) - .addMigrations(Migration2_3(2,3)) - .addMigrations(Migration3_4(3,4)) - .addMigrations(Migration2_4(2,4)) - .fallbackToDestructiveMigration() + .addMigrations(MIGRATION_1_2) + .addMigrations(MIGRATION_2_3) + .addMigrations(MIGRATION_3_4) + .addMigrations(MIGRATION_4_5) .build() } val ROOT_PATH = Environment.getExternalStorageDirectory().absolutePath + File.separator + "Mogo" + File.separator + "APP_cache" + File.separator //程序外部存储跟目录 @@ -105,32 +131,4 @@ abstract class MyDataBase : RoomDatabase() { return field } } - - class Migration1_2(val startVersion:Int,val endVersion:Int): Migration(startVersion,endVersion) { - override fun migrate(database: SupportSQLiteDatabase) { - database.execSQL("ALTER TABLE ${EventDataBean.evnetDataTable} ADD COLUMN driver_id INTEGER"); - } - } - class Migration2_3(val startVersion:Int,val endVersion:Int): Migration(startVersion,endVersion) { - override fun migrate(database: SupportSQLiteDatabase) { - database.execSQL("ALTER TABLE ${SiteDataBean.siteDataTable} ADD COLUMN videoList TEXT"); - database.execSQL("ALTER TABLE ${TaskSiteDataBean.usedTaskDataTable} ADD COLUMN videoList TEXT"); - } - } - - class Migration3_4(val startVersion:Int,val endVersion:Int): Migration(startVersion,endVersion) { - override fun migrate(database: SupportSQLiteDatabase) { - database.execSQL("ALTER TABLE ${EventDataBean.evnetDataTable} ADD COLUMN msg_id TEXT") - database.execSQL("ALTER TABLE ${EventDataBean.evnetDataTable} ADD COLUMN update_time INTEGER") - } - } - - class Migration2_4(val startVersion:Int,val endVersion:Int): Migration(startVersion,endVersion) { - override fun migrate(database: SupportSQLiteDatabase) { - database.execSQL("ALTER TABLE ${SiteDataBean.siteDataTable} ADD COLUMN videoList TEXT"); - database.execSQL("ALTER TABLE ${TaskSiteDataBean.usedTaskDataTable} ADD COLUMN videoList TEXT"); - database.execSQL("ALTER TABLE ${EventDataBean.evnetDataTable} ADD COLUMN msg_id TEXT") - database.execSQL("ALTER TABLE ${EventDataBean.evnetDataTable} ADD COLUMN update_time INTEGER") - } - } } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/bean/WriteOffDataBean.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/bean/WriteOffDataBean.kt new file mode 100644 index 0000000000..619e405690 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/bean/WriteOffDataBean.kt @@ -0,0 +1,131 @@ +package com.mogo.och.weaknet.repository.db.bean + +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.PrimaryKey + +/** + * 上报给服务器端的 选择线路、滑动出发、进站 完成线路的对象 + */ +@Entity(tableName = WriteOffDataBean.writeoffDataTable) +data class WriteOffDataBean( + + @PrimaryKey(autoGenerate = true) var id: Int = 0, + + /** + * 二维码有效时间 时间戳 有效时间1分钟 + */ + @ColumnInfo(name = "msg_id", typeAffinity = ColumnInfo.TEXT) + var msgId: String? = null, + + /** + * 二维码有效时间 时间戳 有效时间1分钟 + */ + @ColumnInfo(name = "expiry_time", typeAffinity = ColumnInfo.INTEGER) + var expiryTime: Long? = null, + + /** + * 乘车日期 + */ + @ColumnInfo(name = "booking_time", typeAffinity = ColumnInfo.INTEGER) + var bookingTime: Long? = null, + + /** + * 校验接驳还是公交 shuttle bus + */ + @ColumnInfo(name = "type", typeAffinity = ColumnInfo.INTEGER) + var type: Int? = null, + + /** + * 当前的任务id + */ + @ColumnInfo(name = "task_id", typeAffinity = ColumnInfo.INTEGER) + var taskId: Long? = null, + + /** + * 校验线路Id + */ + @ColumnInfo(name = "line_id", typeAffinity = ColumnInfo.INTEGER) + var lineId: Long? = null, + + /** + * 校验站点Id + */ + @ColumnInfo(name = "site_id", typeAffinity = ColumnInfo.INTEGER) + var siteId: Long? = null, + + /** + * 司机id + */ + @ColumnInfo(name = "driver_id", typeAffinity = ColumnInfo.INTEGER) + var driverId: Long? = null, + + /** + * 剩余核销次数>0 + */ + @ColumnInfo(name = "remaining_times", typeAffinity = ColumnInfo.INTEGER) + var remainingTimes: Int? = null, + + /** + * 订单号 + */ + @ColumnInfo(name = "order_no", typeAffinity = ColumnInfo.TEXT) + var orderNo: String? = null, + + /** + * uid + */ + @ColumnInfo(name = "uid", typeAffinity = ColumnInfo.TEXT) + var uid: String? = null, + + /** + * 用户手机号 + */ + @ColumnInfo(name = "seq", typeAffinity = ColumnInfo.TEXT) + var phone: String? = null, + + /** + * 业务发生的时间 + */ + @ColumnInfo(name = "business_time", typeAffinity = ColumnInfo.INTEGER) + var businessTime: Long? = null, + + /** + * 票里人数 + */ + @ColumnInfo(name = "tick_size", typeAffinity = ColumnInfo.INTEGER) + var ticketSize: Int? = null, + + /** + * 票的类型 + */ + @ColumnInfo(name = "tick_name", typeAffinity = ColumnInfo.TEXT) + var ticketName: String? = null, + + /** + * 存储此条数据时时间戳 + */ + @ColumnInfo(name = "event_save_time", typeAffinity = ColumnInfo.INTEGER, index = true) + val eventSaveTime: Long = System.currentTimeMillis(), + + @ColumnInfo(name = "update_status", typeAffinity = ColumnInfo.INTEGER) + var updateStatus:Int = notUpdate, + + @ColumnInfo(name = "update_time", typeAffinity = ColumnInfo.INTEGER) + var upDateTime:Long? = 0L, + + +) { + companion object { + const val writeoffDataTable: String = "writeoff_data_table" + // 没有上传 + const val notUpdate = 0 + // 上传中 + const val updating = 1 + // 已上传 + const val updated = 2 + + const val daliXiaoChengXu = "ehsafety" + const val saasXiaoChengXu = "mogogosafety" + } +} diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/dao/WriteOffDataDao.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/dao/WriteOffDataDao.kt new file mode 100644 index 0000000000..1babcaf15f --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/dao/WriteOffDataDao.kt @@ -0,0 +1,32 @@ +package com.mogo.och.weaknet.repository.db.dao + +import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import com.mogo.och.common.module.utils.DateTimeUtil +import com.mogo.och.weaknet.repository.db.bean.WriteOffDataBean + +@Dao +interface WriteOffDataDao { + + //插入数据 + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insert(vararg eventDataBean: WriteOffDataBean) + + //删除数据 + @Delete + fun delete(vararg eventDataBean: WriteOffDataBean) + + @Query("SELECT * FROM ${WriteOffDataBean.writeoffDataTable} WHERE event_save_time > :zeroTime and order_no = :orderNo") + fun queryWriteOffByOrderNo(zeroTime: Long = DateTimeUtil.getCurrentDateZero(),orderNo:String): List? + + @Query("SELECT * FROM ${WriteOffDataBean.writeoffDataTable} order by event_save_time LIMIT 5 OFFSET 0") + fun queryLastDataByWaritData():List? + + @Query("SELECT * FROM ${WriteOffDataBean.writeoffDataTable} WHERE update_status = ${WriteOffDataBean.notUpdate} LIMIT 10 OFFSET 0") + fun queryWriteOffEventByStatusWithPage():List? + + +} diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/EventDb.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/EventDb.kt index c375fe910a..348ddb8521 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/EventDb.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/EventDb.kt @@ -5,6 +5,7 @@ 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.utils.DateTimeUtil +import com.mogo.och.weaknet.model.EventModel import com.mogo.och.weaknet.repository.db.IDbRepository import com.mogo.och.weaknet.repository.db.MyDataBase import com.mogo.och.weaknet.repository.db.bean.EventDataBean @@ -23,7 +24,6 @@ object EventDb: IDbRepository { return field } - var eventCallback: EventCallback? = null override fun release(){ eventDataDao = null @@ -44,7 +44,7 @@ object EventDb: IDbRepository { event.msgId = "${OchSPManager.getSn()}_${DateTimeUtil.getCurrentTimeStamp()}" BizLoopManager.runInIoThread { eventDataDao?.insert(event) - eventCallback?.notifySyn() + EventModel.notifySyn() } } @@ -70,7 +70,7 @@ object EventDb: IDbRepository { event.msgId = "${OchSPManager.getSn()}_${DateTimeUtil.getCurrentTimeStamp()}" BizLoopManager.runInIoThread { eventDataDao?.insert(event) - eventCallback?.notifySyn() + EventModel.notifySyn() } } @@ -96,7 +96,7 @@ object EventDb: IDbRepository { event.msgId = "${OchSPManager.getSn()}_${DateTimeUtil.getCurrentTimeStamp()}" BizLoopManager.runInIoThread { eventDataDao?.insert(event) - eventCallback?.notifySyn() + EventModel.notifySyn() } } @@ -115,7 +115,7 @@ object EventDb: IDbRepository { event.msgId = "${OchSPManager.getSn()}_${DateTimeUtil.getCurrentTimeStamp()}" BizLoopManager.runInIoThread { eventDataDao?.insert(event) - eventCallback?.notifySyn() + EventModel.notifySyn() } } @@ -149,9 +149,4 @@ object EventDb: IDbRepository { return eventDataDao?.queryWaitUploadInfo() } - interface EventCallback { - fun notifySyn() - } - - } \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/TaskDb.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/TaskDb.kt index c56453a56f..3901125282 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/TaskDb.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/TaskDb.kt @@ -117,7 +117,7 @@ object TaskDb : IDbRepository { OchChainLogManager.writeChainLogDb("开始任务", "异常情况${lineId}_${lineName}_task:${taskId} 为未使用的状态 原因:${e.message}") } } - return@flatMap Observable.error(DataException(DataException.startTaskErrorCode,e.message)) + return@flatMap Observable.error(DataException(DataException.startTaskErrorCode,e.message?:"")) } updateCount?.let { if(it<=0){ diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/WriteOffDb.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/WriteOffDb.kt new file mode 100644 index 0000000000..9d53a99b05 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/WriteOffDb.kt @@ -0,0 +1,48 @@ +package com.mogo.och.weaknet.repository.db.repository + +import com.mogo.och.weaknet.model.EventModel +import com.mogo.och.weaknet.repository.db.IDbRepository +import com.mogo.och.weaknet.repository.db.MyDataBase +import com.mogo.och.weaknet.repository.db.bean.WriteOffDataBean +import com.mogo.och.weaknet.repository.db.dao.WriteOffDataDao + + +object WriteOffDb: IDbRepository { + + private var writeOffDataDao: WriteOffDataDao? = null + get() { + if(field==null){ + field = MyDataBase.instance?.writeOffDataDao + register() + } + return field + } + + override fun release(){ + writeOffDataDao = null + } + + fun addOrUpdate(vararg lineDataBean: WriteOffDataBean){ + writeOffDataDao?.insert(*lineDataBean) + EventModel.notifySyn() + } + + + fun queryWaitUpdateEventCount(orderNo:String): WriteOffDataBean?{ + val queryWriteOffByOrderNo = writeOffDataDao?.queryWriteOffByOrderNo(orderNo = orderNo) + if(!queryWriteOffByOrderNo.isNullOrEmpty()){ + return queryWriteOffByOrderNo.last() + } + return null + } + + fun queryWaitUpdateEvent(): List? { + return writeOffDataDao?.queryWriteOffEventByStatusWithPage() + } + + fun saveUpdateSuccess(writeOffEvents: List) { + writeOffDataDao?.insert(*writeOffEvents.toTypedArray()) + } + + +} \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/net/bean/response/PassengerWriteOffResponse.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/net/bean/response/PassengerWriteOffResponse.kt index 93a763cd8f..653cb27c60 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/net/bean/response/PassengerWriteOffResponse.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/net/bean/response/PassengerWriteOffResponse.kt @@ -8,6 +8,6 @@ data class PassengerWriteOffResponse(val data: Result?) : BaseData(){ val phone: String?, val ticketSize: Int?, val ticketName: String?, - val remainingTimes: Long? + val remainingTimes: Long?//剩余次数 ) } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/writeoff/impl/WriteOffCacheRepository.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/writeoff/impl/WriteOffCacheRepository.kt index 7fa2b1376f..b7d756534a 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/writeoff/impl/WriteOffCacheRepository.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/writeoff/impl/WriteOffCacheRepository.kt @@ -7,9 +7,16 @@ import com.mogo.commons.env.ProjectUtils 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.och.common.module.biz.login.LoginStatusManager +import com.mogo.och.common.module.manager.autopilot.line.LineManager import com.mogo.och.common.module.manager.socket.lan.bean.WriteOffDetialMsg import com.mogo.och.common.module.network.OchCommonServiceCallback +import com.mogo.och.common.module.utils.DateTimeUtil import com.mogo.och.weaknet.bean.response.WriteOffCountResponse +import com.mogo.och.weaknet.model.LineModel +import com.mogo.och.weaknet.repository.db.bean.WriteOffDataBean +import com.mogo.och.weaknet.repository.db.repository.WriteOffDb +import com.mogo.och.weaknet.repository.exception.DataException 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 @@ -58,7 +65,108 @@ class WriteOffCacheRepository : IWriteOffRepository { } override fun writeOffEvent(writeOffDetialMsg: WriteOffDetialMsg): Observable? { - TODO("Not yet implemented") + + return Observable.just(writeOffDetialMsg) + .flatMap { + // 1、校验数据 + /** + * 0、校验 tenantId + * 1、校验pipe 校验project + * 2、校验业务模式 bus和接驳 + * 3、校验二维码有效性(向后1分钟有效) + * 4、校验乘车日期 + * 5、校验线路 + * + * 接驳 + * 6、校验次数 + * 7、同一个订单2分钟内只能执行一次 + * 小巴 + * 6、校验站点 + */ + var lineId:Long?=null + var siteId:Long?=null + + + // + it.tenantId?.let { tenantId-> + if(LoginStatusManager.getLoginInfo()?.tenantId==tenantId){ + + }else{ + throw DataException(1012,"当前用户下单路线非当前的车辆所属公司") + } + } + // TODO: 校验project + if(ProjectUtils.isSaas()){ + if(it.pipe != WriteOffDataBean.saasXiaoChengXu){ + throw DataException(1012,"当前用户下单路线非当前的车辆所属公司") + } + }else if(ProjectUtils.isDali()){ + if(it.pipe != WriteOffDataBean.daliXiaoChengXu){ + throw DataException(1012,"当前用户下单路线非当前的车辆所属公司") + } + } + // 2、校验 bus和shuttle + if (LoginStatusManager.getBusInessType().name.lowercase()!=it.typeBiz) { + throw DataException(1005,"车辆未登录、或没有任务") + } + // 3 二维码1分钟失效 + if(System.currentTimeMillis()-(it.expiryTime?:0L)>60_000){ + throw DataException(6001,"二维码已过期") + } + // 4 校验乘车日期 + if(!DateTimeUtil.isSameDay(System.currentTimeMillis(),it.bookingTime?:0)){ + throw DataException(1009,"车票所选乘车日期非今日") + } + // 5、校验线路 + if(it.lineId==LineManager.lineInfos?.lineId){ + lineId = it.lineId + }else{ + throw DataException(1006,"车票路线信息与当前车辆执行任务的路线信息不符合") + } + + if(AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)) { + // 6、校验次数 + if((it.remainingTimes?:0)<=0){ + throw DataException(1008,"车票剩余可用次数为0") + } + // 7、同一个订单2分钟内只能核销一次 + if (!it.orderNo.isNullOrEmpty()) { + val lastWriteOff = WriteOffDb.queryWaitUpdateEventCount(it.orderNo!!) + if(lastWriteOff!=null){ + if(System.currentTimeMillis()-lastWriteOff.eventSaveTime<=120_000){ + throw DataException(6002,"同一订单核销间隔时间需大于2分钟") + } + } + }else{ + throw DataException(11000,"缺少orderNo") + } + }else if(AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { + val (start, _) = LineManager.getStations() + if(start?.siteId?.toLong()==it.startStationId){ + siteId = it.startStationId + }else{ + throw DataException(1006,"车票站点信息与当前车辆执行任务的站点信息不符合") + } + } + + val addWrite = WriteOffDataBean() + addWrite.expiryTime = it.expiryTime + addWrite.bookingTime = it.bookingTime + addWrite.type = it.type + addWrite.taskId = LineModel.currentTask?.taskId + addWrite.lineId = lineId + addWrite.siteId = siteId + addWrite.remainingTimes = it.remainingTimes + addWrite.orderNo = it.orderNo + addWrite.uid = it.uid + addWrite.phone = it.phone + addWrite.ticketSize = it.ticketSize + addWrite.ticketName = it.ticketName + WriteOffDb.addOrUpdate() + + val reslut = PassengerWriteOffResponse.Result(it.phone,it.ticketSize,it.ticketName,it.remainingTimes?.toLong()) + return@flatMap Observable.just(reslut) + } } override fun release() { diff --git a/OCH/shuttle/passenger_weaknet/src/main/java/com/mogo/och/shuttle/weaknet/passenger/model/TicketModel.kt b/OCH/shuttle/passenger_weaknet/src/main/java/com/mogo/och/shuttle/weaknet/passenger/model/TicketModel.kt index bc0f0c661c..d3eb30c515 100644 --- a/OCH/shuttle/passenger_weaknet/src/main/java/com/mogo/och/shuttle/weaknet/passenger/model/TicketModel.kt +++ b/OCH/shuttle/passenger_weaknet/src/main/java/com/mogo/och/shuttle/weaknet/passenger/model/TicketModel.kt @@ -38,7 +38,7 @@ object TicketModel : StateChangeListener { LanSocketManager.unRegisterSocketMessageListener(DPMsgType.TYPE_WRITEOFF_INFO_RESULT.type,writeOffResultMsg) } - override fun parseData(params: MutableMap, payload: String?) { + override fun parseData(params: MutableMap, payload: String?) { val expiryTime = params["expiryTime"] val bookingTime = params["bookingTime"] val businessType = params["businessType"] @@ -49,6 +49,10 @@ object TicketModel : StateChangeListener { 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"] if(orderNo is String && uid is String){ var phoneNum = "" @@ -57,11 +61,33 @@ object TicketModel : StateChangeListener { phoneNum = phone } } - val writeOffDetail = WriteOffDetialMsg(0,"",expiryTime as Long,bookingTime as Long, - businessType as Int,lineId as Long,remainingTimes as Int, - orderNo,uid,phoneNum,ticketSize as String,ticketName as String) - CallerLogger.d(M_BUS_P + TAG, "sendTaskDetailsToClients = " + GsonUtils.toJson(writeOffDetail)) - LanSocketManager.sendMsgToServer(writeOffDetail) + try { + val writeOffDetail = WriteOffDetialMsg(0,"", + expiryTime?.toLong()?:0, + bookingTime?.toLong()?:0, + businessType?.toInt()?:0, + lineId?.toLong()?:0, + remainingTimes?.toInt()?:0, + orderNo, + uid, + phoneNum, + ticketSize?.toInt()?:0, + ticketName, + type, + pipe, + startStationId?.toLong()?:0, + tenantId?.toLong()?:0 + ) + CallerLogger.d(M_BUS_P + TAG, "sendTaskDetailsToClients = " + GsonUtils.toJson(writeOffDetail)) + LanSocketManager.sendMsgToServer(writeOffDetail) + }catch (e:Exception){ + e.printStackTrace() + CallerLogger.d(M_BUS_P + TAG, "") + // 通知司机屏二维码错误 + val writeOffDetail = WriteOffDetialMsg(code = -1, msg = "参数错误:${payload}") + CallerLogger.d(M_BUS_P + TAG, "sendTaskDetailsToClients = " + GsonUtils.toJson(writeOffDetail)) + LanSocketManager.sendMsgToServer(writeOffDetail) + } }else{ // 通知司机屏二维码错误 val writeOffDetail = WriteOffDetialMsg(code = -1, msg = "参数错误:${payload}")