[上传页面添加loading、优化数据插入]
This commit is contained in:
yangyakun
2024-08-27 16:52:21 +08:00
parent 38cd6c92af
commit ca70d18730
9 changed files with 146 additions and 62 deletions

View File

@@ -2,7 +2,7 @@
"formatVersion": 1,
"database": {
"version": 1,
"identityHash": "066a91b8d796cc1004c4e438b2c125f3",
"identityHash": "2a452358f8c0aca67794fd0de6b4af1c",
"entities": [
{
"tableName": "contrail_data_table",
@@ -462,35 +462,7 @@
],
"autoGenerate": true
},
"indices": [
{
"name": "index_used_task_data_table_task_id",
"unique": false,
"columnNames": [
"task_id"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_used_task_data_table_task_id` ON `${TABLE_NAME}` (`task_id`)"
},
{
"name": "index_used_task_data_table_line_id",
"unique": false,
"columnNames": [
"line_id"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_used_task_data_table_line_id` ON `${TABLE_NAME}` (`line_id`)"
},
{
"name": "index_used_task_data_table_site_id",
"unique": false,
"columnNames": [
"site_id"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_used_task_data_table_site_id` ON `${TABLE_NAME}` (`site_id`)"
}
],
"indices": [],
"foreignKeys": []
},
{
@@ -593,7 +565,7 @@
"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, '066a91b8d796cc1004c4e438b2c125f3')"
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '2a452358f8c0aca67794fd0de6b4af1c')"
]
}
}

View File

@@ -12,19 +12,19 @@ data class TaskSiteDataBean(
/**
* 任务id
*/
@ColumnInfo(name = "task_id", typeAffinity = ColumnInfo.INTEGER, index = true)
@ColumnInfo(name = "task_id", typeAffinity = ColumnInfo.INTEGER)
var taskId: Long? = null,
/**
* 线路id
*/
@ColumnInfo(name = "line_id", typeAffinity = ColumnInfo.INTEGER, index = true)
@ColumnInfo(name = "line_id", typeAffinity = ColumnInfo.INTEGER)
var lineId: Long? = null,
/**
* 站点id
*/
@ColumnInfo(name = "site_id", typeAffinity = ColumnInfo.INTEGER, index = true)
@ColumnInfo(name = "site_id", typeAffinity = ColumnInfo.INTEGER)
var siteId: Long? = null,
/**

View File

@@ -1,6 +1,8 @@
package com.mogo.och.weaknet.database.repository
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.util.TAG
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.weaknet.database.MyDataBase
import com.mogo.och.weaknet.database.bean.TaskDataBean
@@ -64,17 +66,36 @@ object TaskRepository {
fun startTask(taskId: Long, lineId: Long,lineName:String,callback: TaskStatusCallback){
DbThreadUtils.runInIoThread {
var updateCount:Int? = 0
var startTime = System.currentTimeMillis()
try {
MyDataBase.instance.runInTransaction {
// 更新task状态
// 更新task状态
taskDataDao?.queryTaskByTaskIdOne(taskId)?.let {
it.startTime = System.currentTimeMillis()
it.status = TaskDataBean.useing
// 更新任务状态
taskDataDao?.insert(it)
}
CallerLogger.d(TAG,"更新任务状态用时:${System.currentTimeMillis()-startTime}")
startTime = System.currentTimeMillis()
updateCount = TaskSiteRepository.startTask(taskId, lineId, lineName)
CallerLogger.d(TAG,"插入正在运行的线路用时:${System.currentTimeMillis()-startTime}")
} catch (e: Exception) {
if (e is DataException) {
println("数据不全")
// 恢复数据
taskDataDao?.queryTaskByTaskIdOne(taskId)?.let {
it.startTime = System.currentTimeMillis()
it.status = TaskDataBean.useing
it.startTime = null
it.status = TaskDataBean.unUse
// 更新任务状态
taskDataDao?.insert(it)
}
val updateCount = TaskSiteRepository.startTask(taskId, lineId, lineName)
if(updateCount==null||updateCount<=0){
}
updateCount = null
callback.startFail("错误信息:${e.message}")
}finally {
updateCount?.let {
if(it<=0){
// 插入失败
callback.startFail("未插入数据")
}else{
@@ -82,11 +103,7 @@ object TaskRepository {
callback.startSuccess()
}
}
} catch (e: Exception) {
if (e is DataException) {
println("数据不全")
}
callback.startFail("错误信息:${e.message}")
}
}

View File

@@ -1,5 +1,7 @@
package com.mogo.och.weaknet.database.repository
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.util.TAG
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.weaknet.database.MyDataBase
import com.mogo.och.weaknet.database.bean.TaskSiteDataBean
@@ -21,20 +23,26 @@ object TaskSiteRepository {
// 开始线路
fun startTask(taskId: Long, linId: Long,lineName:String):Int? {
// 获取线路的站点
var startTime = System.currentTimeMillis()
val querySites = SiteRepository.querySiteByLineId(linId)
if(querySites.isNullOrEmpty()){
throw DataException("没有站点数据")
}
CallerLogger.d(TAG,"查询站点用时:${System.currentTimeMillis()-startTime}")
startTime = System.currentTimeMillis()
val toTaskSiteDatas = TaskSiteDataBean.toTaskSiteDatas(
querySites,
taskId,
lineName
)
CallerLogger.d(TAG,"数据转换用时:${System.currentTimeMillis()-startTime}")
if(toTaskSiteDatas.size<2){
throw DataException("站点数据不全请稍后再试")
}
// 把线路所有的站点搬迁到运行中表格中
val result = taskSiteDataDao?.insert(*toTaskSiteDatas.toTypedArray())
startTime = System.currentTimeMillis()
val result = taskSiteDataDao?.insert(*toTaskSiteDatas.toTypedArray())
CallerLogger.d(TAG,"数据插入用时:${System.currentTimeMillis()-startTime}")
return if(result.isNullOrEmpty()){
null
}else{

View File

@@ -243,9 +243,7 @@ object BusLineModel {
SharedPrefsMgr.getInstance()
.putLong(BusSwitchLineActivity.LASTCOMMITLINEID, line.lineId)
EventRepository.saveEventTaskStart(task.id,line.lineId,task.taskStartTime,line.name)
if (mBusLinesCallback != null) {
mBusLinesCallback!!.onChangeLineIdSuccess()
}
mBusLinesCallback?.onChangeLineIdSuccess()
val taskTime = DateTimeUtil.formatLongToString(task.taskStartTime, DateTimeUtil.HH_mm)
CallerOrderListenerManager.invokeOrderLineUpdate("${line.name} ${taskTime}")
}

View File

@@ -15,14 +15,16 @@ import com.mogo.och.weaknet.net.OrderServiceManager
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
import kotlin.properties.Delegates
object EventModel : EventRepository.EventCallback {
private val isUpdating by lazy { AtomicBoolean(false) }
private val createDefault = BehaviorSubject.createDefault(isUpdating.get())
fun load(){
EventRepository.eventCallback = this
BizLoopManager.postDelayed(loopUpdateInfo,2*60*1000)
@@ -46,11 +48,14 @@ object EventModel : EventRepository.EventCallback {
private fun updateEvent(){
isUpdating.set(true)
createDefault.onNext(isUpdating.get())
ThreadUtils.getSinglePool().submit {
val waitUpdateEvent = EventRepository.queryWaitUpdateEvent()
if(waitUpdateEvent.isNullOrEmpty()){
OchChainLogManager.writeChainLogDb("上报event","没有数据需要上报${Thread.currentThread().name}")
isUpdating.set(false)
createDefault.onNext(isUpdating.get())
BizLoopManager.postDelayed(loopUpdateInfo,2*60*1000)
return@submit
}
OchChainLogManager.writeChainLogDb("上报event","开始上报:${Thread.currentThread().name}")
@@ -63,17 +68,20 @@ object EventModel : EventRepository.EventCallback {
OchChainLogManager.writeChainLogDb("上报event成功","$transformDb2Net ${Thread.currentThread().name}")
EventRepository.saveUpdateSuccess(waitUpdateEvent)
isUpdating.set(false)
createDefault.onNext(isUpdating.get())
BizLoopManager.postDelayed(loopUpdateInfo,2*60*1000)
}
override fun onFail(code: Int, msg: String?) {
isUpdating.set(false)
createDefault.onNext(isUpdating.get())
OchChainLogManager.writeChainLogDb("上报event失败","$transformDb2Net ${Thread.currentThread().name}")
BizLoopManager.postDelayed(loopUpdateInfo,2*60*1000)
}
override fun onError() {
isUpdating.set(false)
createDefault.onNext(isUpdating.get())
OchChainLogManager.writeChainLogDb("上报event失败","$transformDb2Net ${Thread.currentThread().name}")
BizLoopManager.postDelayed(loopUpdateInfo,2*60*1000)
}
@@ -112,4 +120,9 @@ object EventModel : EventRepository.EventCallback {
}?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
}
fun getUploadTaskObservable():BehaviorSubject<Boolean>{
return createDefault
}
}

View File

@@ -5,11 +5,11 @@ import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.findViewTreeViewModelStoreOwner
import androidx.recyclerview.widget.LinearLayoutManager
import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.common.module.utils.ResourcesUtils
import com.mogo.och.common.module.wigets.WindowRelativeLayout
import com.mogo.och.shuttle.weaknet.R
import com.mogo.och.weaknet.bean.WaitUploadLine
@@ -18,6 +18,10 @@ import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.actvCurrent
import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.clLayout
import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.ivTaskRunningClose
import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.rvDataLiet
import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.tvManagerTitle
import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.upload_btn_commit
import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.upload_btn_commit_progress
import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.upload_btn_commit_title
import me.jessyan.autosize.utils.AutoSizeUtils
@@ -73,6 +77,10 @@ class RunningTaskManagerView: WindowRelativeLayout, RunningTastViewModel.Running
)
)
rvDataLiet.setAdapter(mAdapter)
upload_btn_commit.onClick {
viewModel?.uploadData()
}
}
fun setOnClickListener(clickListener: ClickListener) {
@@ -105,6 +113,23 @@ class RunningTaskManagerView: WindowRelativeLayout, RunningTastViewModel.Running
override fun showData(data: MutableList<WaitUploadLine>) {
mAdapter.setDataList(data)
if(data.isEmpty()){
rvDataLiet.visibility = GONE
tvManagerTitle.visibility = VISIBLE
}else{
rvDataLiet.visibility = VISIBLE
tvManagerTitle.visibility = GONE
}
}
override fun showUpdating(isupload: Boolean) {
if(isupload){
upload_btn_commit_progress.visibility = VISIBLE
upload_btn_commit_title.text = "上传中"
}else{
upload_btn_commit_progress.visibility = GONE
upload_btn_commit_title.text = ResourcesUtils.getString(R.string.bus_running_task_upload)
}
}
}

View File

@@ -2,10 +2,13 @@ package com.mogo.och.weaknet.ui.taskrunning
import androidx.lifecycle.ViewModel
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.common.module.utils.RxUtils
import com.mogo.och.weaknet.bean.WaitUploadLine
import com.mogo.och.weaknet.model.EventModel
import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
/**
* @author XuXinChao
@@ -17,14 +20,42 @@ class RunningTastViewModel : ViewModel() {
private val TAG = RunningTastViewModel::class.java.simpleName
private var viewCallback:RunningTaskViewCallback?=null
private var subscribe: Disposable?=null
fun setDistanceCallback(viewCallback:RunningTaskViewCallback){
this.viewCallback = viewCallback
EventModel.getUploadTaskObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : Observer<Boolean> {
override fun onSubscribe(d: Disposable) {
subscribe = d
CallerLogger.d(TAG, "onSubscribe")
}
override fun onError(e: Throwable) {
CallerLogger.d(TAG, "onError${e.printStackTrace()}")
}
override fun onComplete() {
CallerLogger.d(TAG, "onComplete")
}
override fun onNext(data: Boolean) {
CallerLogger.d(TAG, "onNext:${data}")
this@RunningTastViewModel.viewCallback?.showUpdating(data)
if(!data){
queryNewData()
}
}
})
}
override fun onCleared() {
RxUtils.disposeSubscribe(subscribe)
subscribe = null
}
fun queryNewData() {
@@ -49,8 +80,13 @@ class RunningTastViewModel : ViewModel() {
})
}
fun uploadData() {
EventModel.notifySyn()
}
interface RunningTaskViewCallback{
fun showData(data: MutableList<WaitUploadLine>)
fun showUpdating(isupload:Boolean)
}
}

View File

@@ -4,6 +4,7 @@
android:layout_width="960dp"
android:layout_height="match_parent"
android:background="#F0151D41"
android:paddingBottom="@dimen/dp_72"
android:id="@+id/clLayout"
>
@@ -74,21 +75,35 @@
android:layout_width="0dp"
android:layout_height="0dp"/>
<TextView
android:id="@+id/switch_line_btn_commit"
<LinearLayout
android:id="@+id/upload_btn_commit"
android:layout_width="match_parent"
android:layout_marginStart="@dimen/dp_85"
android:layout_marginEnd="@dimen/dp_85"
android:layout_height="@dimen/dp_126"
android:background="@drawable/bus_switch_line_btn_commit"
android:gravity="center"
android:layout_marginBottom="@dimen/dp_73"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginBottom="@dimen/dp_73"
android:textSize="@dimen/dp_42"
android:textColor="@android:color/white"
android:text="@string/bus_running_task_upload"
android:gravity="center"
android:background="@drawable/bus_switch_line_btn_commit"/>
app:layout_constraintRight_toRightOf="parent">
<ProgressBar
android:visibility="gone"
android:id="@+id/upload_btn_commit_progress"
android:progressBackgroundTint="@color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/upload_btn_commit_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/dp_42"
android:textColor="@android:color/white"
android:text="@string/bus_running_task_upload"
android:gravity="center" />
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
app:layout_constraintTop_toBottomOf="@+id/tvManagerTitle"