diff --git a/modules/mogo-module-event-panel/src/main/java/com/zhidao/mogo/module/event/panel/bean/TripRecord.kt b/modules/mogo-module-event-panel/src/main/java/com/zhidao/mogo/module/event/panel/bean/TripRecord.kt index 5600c1a9fd..fb27c07a65 100644 --- a/modules/mogo-module-event-panel/src/main/java/com/zhidao/mogo/module/event/panel/bean/TripRecord.kt +++ b/modules/mogo-module-event-panel/src/main/java/com/zhidao/mogo/module/event/panel/bean/TripRecord.kt @@ -9,8 +9,8 @@ import androidx.room.PrimaryKey * @author */ @Entity -data class TripRecord(@PrimaryKey(autoGenerate = true) - var id: Int = 0, +data class TripRecord(@PrimaryKey(autoGenerate = false) + var eventType:Int, var canUsed: Boolean = true, var isUsed: Boolean = false, var entity: String? = null, diff --git a/modules/mogo-module-event-panel/src/main/java/com/zhidao/mogo/module/event/panel/dao/TripRecordDao.kt b/modules/mogo-module-event-panel/src/main/java/com/zhidao/mogo/module/event/panel/dao/TripRecordDao.kt index f67c4e7c61..0c21ab77c4 100644 --- a/modules/mogo-module-event-panel/src/main/java/com/zhidao/mogo/module/event/panel/dao/TripRecordDao.kt +++ b/modules/mogo-module-event-panel/src/main/java/com/zhidao/mogo/module/event/panel/dao/TripRecordDao.kt @@ -2,20 +2,31 @@ package com.zhidao.mogo.module.event.panel.dao import androidx.room.* import com.zhidao.mogo.module.event.panel.bean.TripRecord -import io.reactivex.Flowable - +import io.reactivex.Single @Dao interface TripRecordDao { - @Query(value = "SELECT * FROM TripRecord") - fun getAllTripRecord():Flowable> + /** + * 查询当日数据 + * @param limitTime 当日0点的时间戳 + */ + @Query(value = "SELECT * FROM TripRecord WHERE recordTime > :limitTime ORDER BY recordTime DESC") + fun getAllTripRecord(limitTime:Long):Single> @Insert fun insert(vararg tripRecord: TripRecord) @Update - fun update(vararg tripRecord: TripRecord) + fun update(vararg tripRecord: TripRecord) @Delete - fun delete(vararg tripRecord: TripRecord) + fun delete(vararg tripRecord: TripRecord) + /** + * 删除超时的数据,即当天0时以前的数据 + * 虽然注解是Query,但是目的是执行后面的sql语句,所以就不要在意这些细节了 + * + * @param limitTime 当日0点的时间戳 + */ + @Query(value = "DELETE FROM TripRecord WHERE recordTime < :limitTime") + fun deleteOvertimeTripRecord(limitTime: Long) } \ No newline at end of file diff --git a/modules/mogo-module-event-panel/src/main/java/com/zhidao/mogo/module/event/panel/fragment/TripRecordFragment.kt b/modules/mogo-module-event-panel/src/main/java/com/zhidao/mogo/module/event/panel/fragment/TripRecordFragment.kt index ba2b47b00b..a98d7e22b2 100644 --- a/modules/mogo-module-event-panel/src/main/java/com/zhidao/mogo/module/event/panel/fragment/TripRecordFragment.kt +++ b/modules/mogo-module-event-panel/src/main/java/com/zhidao/mogo/module/event/panel/fragment/TripRecordFragment.kt @@ -2,6 +2,8 @@ package com.zhidao.mogo.module.event.panel.fragment import android.util.Log import com.mogo.commons.mvp.MvpFragment +import com.mogo.utils.logger.Logger +import com.zhidao.mogo.module.event.panel.EventPanelConstants.MODULE_NAME import com.zhidao.mogo.module.event.panel.R import com.zhidao.mogo.module.event.panel.bean.TripRecord import com.zhidao.mogo.module.event.panel.presenter.TripRecordPresenter @@ -18,7 +20,8 @@ class TripRecordFragment: MvpFragment() override fun initViews() { btnInsert.setOnClickListener { - val tripRecord = TripRecord() + val randomType = Random.nextInt(10000) + val tripRecord = TripRecord(randomType) val random = Random.nextInt(10) tripRecord.entity = "entity: $random" tripRecord.recordTime = System.currentTimeMillis() @@ -47,9 +50,13 @@ class TripRecordFragment: MvpFragment() Log.d(TAG, "local list: $tripRecordList") mPresenter.queryAllTripRecord() } - - } override fun createPresenter(): TripRecordPresenter = TripRecordPresenter(this) + + fun refreshTripRecord(tripRecords: List) { + Logger.d(MODULE_NAME, "刷新出行动态:$tripRecords") + tripRecordList.clear() + tripRecordList.addAll(tripRecords) + } } \ No newline at end of file diff --git a/modules/mogo-module-event-panel/src/main/java/com/zhidao/mogo/module/event/panel/presenter/TripRecordPresenter.kt b/modules/mogo-module-event-panel/src/main/java/com/zhidao/mogo/module/event/panel/presenter/TripRecordPresenter.kt index 39d70a4a2e..71fa366009 100644 --- a/modules/mogo-module-event-panel/src/main/java/com/zhidao/mogo/module/event/panel/presenter/TripRecordPresenter.kt +++ b/modules/mogo-module-event-panel/src/main/java/com/zhidao/mogo/module/event/panel/presenter/TripRecordPresenter.kt @@ -1,36 +1,71 @@ package com.zhidao.mogo.module.event.panel.presenter import android.util.Log +import androidx.lifecycle.LifecycleOwner import com.mogo.commons.mvp.Presenter import com.mogo.utils.ThreadPoolService +import com.mogo.utils.logger.Logger +import com.zhidao.mogo.module.event.panel.EventPanelConstants.MODULE_NAME import com.zhidao.mogo.module.event.panel.bean.TripRecord import com.zhidao.mogo.module.event.panel.dao.TripRecordDatabase import com.zhidao.mogo.module.event.panel.fragment.TripRecordFragment +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers -import kotlin.concurrent.thread +import java.util.* class TripRecordPresenter(view: TripRecordFragment) : Presenter(view) { + var queryDisposable:Disposable? = null fun queryAllTripRecord() { - val disposable = TripRecordDatabase.getInstance(context).getTripRecordDao().getAllTripRecord().subscribeOn(Schedulers.io()).subscribe { - Log.d("TripRecordFragment", "db query: $it") + queryDisposable = TripRecordDatabase.getInstance(context).getTripRecordDao().getAllTripRecord(countLimitTime()).subscribeOn(Schedulers.io()).observeOn(Schedulers.io()).map { + Logger.d(MODULE_NAME,"delete over time record when query thread is ${Thread.currentThread().name}") + TripRecordDatabase.getInstance(context).getTripRecordDao().deleteOvertimeTripRecord(countLimitTime()) + it + }.observeOn(AndroidSchedulers.mainThread()).subscribe {it-> + Log.d(MODULE_NAME, "db query: $it, thread is ${Thread.currentThread().name}") + mView.refreshTripRecord(it) } } - fun insertTripRecord(vararg records: TripRecord) { + fun insertTripRecord(vararg records: TripRecord) { ThreadPoolService.execute { TripRecordDatabase.getInstance(context).getTripRecordDao().insert(*records) + // 为了防止只进不出,所以在插入新数据时,进行过期数据删除操作 + Logger.d(MODULE_NAME,"delete over time record when insert") + TripRecordDatabase.getInstance(context).getTripRecordDao().deleteOvertimeTripRecord(countLimitTime()) } } - fun updateTripRecords(vararg records: TripRecord) { + fun updateTripRecords(vararg records: TripRecord) { ThreadPoolService.execute { TripRecordDatabase.getInstance(context).getTripRecordDao().update(*records) } } - fun deleteTripRecords(vararg records: TripRecord) { + fun deleteTripRecords(vararg records: TripRecord) { ThreadPoolService.execute { TripRecordDatabase.getInstance(context).getTripRecordDao().delete(*records) } } + + /** + * 计算约束时间,即当日0时 + */ + private fun countLimitTime():Long{ + val calendar = Calendar.getInstance() + calendar.time = Date() + calendar.set(Calendar.HOUR_OF_DAY,0) + calendar.set(Calendar.MINUTE,0) + calendar.set(Calendar.SECOND,0) + return calendar.timeInMillis + } + + override fun onDestroy(owner: LifecycleOwner) { + super.onDestroy(owner) + queryDisposable?.let { + if (!it.isDisposed) { + it.dispose() + } + } + } } diff --git a/modules/mogo-module-event-panel/src/main/res/layout/module_event_panel_fragment_trip_record.xml b/modules/mogo-module-event-panel/src/main/res/layout/module_event_panel_fragment_trip_record.xml index 6faae07549..70128f9728 100644 --- a/modules/mogo-module-event-panel/src/main/res/layout/module_event_panel_fragment_trip_record.xml +++ b/modules/mogo-module-event-panel/src/main/res/layout/module_event_panel_fragment_trip_record.xml @@ -3,8 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/clPanelContainer" android:layout_width="match_parent" - android:layout_height="match_parent" - android:visibility="gone"> + android:layout_height="match_parent">